Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFrz9-0005DB-Bi for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 06:54:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oFrz8-0004Kj-4M for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 06:54:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFrz7-0004KZ-HV for pgsql-hackers@lists.postgresql.org; Mon, 25 Jul 2022 06:54:33 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFrz1-0007lk-7B for pgsql-hackers@postgresql.org; Mon, 25 Jul 2022 06:54:33 +0000 Received: from [192.168.1.113] (dsl-hkibng22-54f8d8-220.dhcp.inet.fi [84.248.216.220]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id C302E1B002C9; Mon, 25 Jul 2022 09:54:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1658732065; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ptPox8FUUnL2n6p5MyFsPmxkHRj3/1OQMCi3m5ILam8=; b=eHd1zXLRNZ5q75uZfl5baJpN9lF7zx262UPQO5d4K9EXPFl1zAjJOwhx0SK4yIAP3TDmk5 gv/2eK9Pvz7EUnYhV2z9/vbbALsTisC/p/HwunKbVPnk+gtDtJcvB43THQu/2lNSg4X+ec mWb7sl8p+0CzPgXuAsZ/2QFaOKtgJfKR4b2vZ60jp+ptuKYLHcixKU6GCPSLRTNLBMDgPm udPjPd0uemMVRqLEdpzdz+UWidA5l8sv6zrShMaEylON4WCWEfpQjWRICZbuF+POSK3kLy LNLdQCdC8L+1uVhue9DU1EMSbMMVhtnKa8CfPYKLp63jbdChku6z7g7/3qn5hQ== Content-Type: multipart/mixed; boundary="------------S0XqJq8mk738jfTu0g3cRp6Z" Message-ID: Date: Mon, 25 Jul 2022 09:54:25 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SLRUs in the main buffer pool, redux Content-Language: en-US To: Yura Sokolov , Thomas Munro Cc: pgsql-hackers References: <5ced6199-9fa2-722c-2163-4418ca907a95@iki.fi> From: Heikki Linnakangas In-Reply-To: ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1658732065; a=rsa-sha256; cv=none; b=cLNhvZBPfKbtiw84POqbQN7STn0zA29wwtdFpgssV02e0Ca06DhZbAfrIC4OmSq+0Opnsx faHyaZYgD6hdU+1ZEyRH+dz5zY9XFT+bKEgC5K3AB0a7j8pVhEKNRzoJ+ZeE7RSnZ+2G1N +mhfJHWS7XAa3FaqysH9ZHAgpRVxuqrr2I/x8C7alDqHj9UygpsTjPZM05BCZ1O7WlwiGT EYHmjsysBbIepvrTt6j9NQkOwHtpa+wK9sWHku+8bVl1uSm15usfdtr5QBWCAF433v9fWH URlySKVeLFQSmFQgKDiH7pW5KSILq4EaratyJAC+jPjRcXu8EbAGOMKf2i1WFw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1658732065; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ptPox8FUUnL2n6p5MyFsPmxkHRj3/1OQMCi3m5ILam8=; b=UOQAqytFVFng0VGXN4fToXvTeDz3s2ys9V6lo2EBD7ocjo3mow2XXPo/W3POfacMxAMQgt ADJzZdM0vf55rMcxkdcKug/nWwpiX36LavegdZjwyi5c+xzAScp84dHdGyho3957fUQayg MGTZspv+Pv4V23Irns+W6tdNl6h4Ki7K9zpZqckrqeUIep22FeDawQEWeo5I7I/QNuZQSK bJr56K8Hg0imo4CrSdFSXuCodU/YQXA/rD31BlZxVWMlfTCxX+o5z3/iodeVtxf0hdIhwz 4aIC0BT5iP2WJfELhqr+1tCnY/5PU4pcLss7JZ3XhAhGsg0icAino9uYkK0Ivw== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------S0XqJq8mk738jfTu0g3cRp6Z Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 21/07/2022 16:23, Yura Sokolov wrote: > Good day, Thomas > > В Пт, 27/05/2022 в 23:24 +1200, Thomas Munro пишет: >> Rebased, debugged and fleshed out a tiny bit more, but still with >> plenty of TODO notes and questions. I will talk about this idea at >> PGCon, so I figured it'd help to have a patch that actually applies, >> even if it doesn't work quite right yet. It's quite a large patch but >> that's partly because it removes a lot of lines... > > Looks like it have to be rebased again. Here's a rebase. I'll write a separate post with my thoughts on the high-level design of this, but first a couple of more detailed issues: In RecordTransactionCommit(), we enter a critical section, and then call TransactionIdCommitTree() to update the CLOG pages. That now involves a call to ReadBuffer_common(), which in turn calls ResourceOwnerEnlargeBuffers(). That can fail, because it might require allocating memory, which is forbidden in a critical section. I ran into an assertion about that with "make check" when I was playing around with a heavily modified version of this patch. Haven't seen it with your original one, but I believe that's just luck. Calling ResourceOwnerEnlargeBuffers() before entering the critical section would probably fix that, although I'm a bit worried about having the Enlarge call so far away from the point where it's needed. > +void > +CheckPointSLRU(void) > +{ > + /* Ensure that directory entries for new files are on disk. */ > + for (int i = 0; i < lengthof(defs); ++i) > + { > + if (defs[i].synchronize) > + fsync_fname(defs[i].path, true); > + } > +} > + Is it really necessary to fsync() the directories? We don't do that today for the SLRUs, and we don't do it for the tablespace/db directories holding relations. - Heikki --------------S0XqJq8mk738jfTu0g3cRp6Z Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-WIP-Move-SLRU-data-into-the-regular-buffer-pool.patch" Content-Disposition: attachment; filename*0="v3-0001-WIP-Move-SLRU-data-into-the-regular-buffer-pool.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAyNDFhOGU3NjEwZTY5OWRkYWVlYjM4MDY2YjM0N2JkYWM1ZDVlNTM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFp bC5jb20+CkRhdGU6IFN1biwgMiBKYW4gMjAyMiAxMTozOToyMyArMTMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMS8xXSBXSVA6IE1vdmUgU0xSVSBkYXRhIGludG8gdGhlIHJlZ3VsYXIgYnVm ZmVyIHBvb2wuCgpQcmV2aW91c2x5LCBzbHJ1LmMgbWFuYWdlZCA3IHNtYWxsIGJ1ZmZlciBw b29scyBmb3Igc3BlY2lhbCBxdWV1ZS1saWtlCmRhdGEuICBJdCBoYWQgdmVyeSBzaW1wbGUg c2l6aW5nLCBsb2NraW5nLCBtYXBwaW5nLCByZXBsYWNlbWVudCBhbmQKd3JpdGUgYmFjay4g IFN3aXRjaCB0byB0aGUgcmVndWxhciBidWZmZXIgcG9vbCwgdG8gYmVuZWZpdCBmcm9tIHRo ZQpzdGFuZGFyZCBpbmZyYXN0cnVjdHVyZS4KClRoZSBsYXlvdXQgb2YgU0xSVSBmaWxlcyBv biBkaXNrIHJlbWFpbnMgdW5jaGFuZ2VkLiAgRmlsZSBhY2Nlc3MgaXMgZG9uZQp0aHJvdWdo IG5ldyBjYWxsYmFjayBmdW5jdGlvbnMgZXhwb3NlZCB0aHJvdWdoIHNtZ3IuYy4KClN3aXRj aGluZyBTTFJVIHBhZ2UgZm9ybWF0IHRvICJzdGFuZGFyZCIgZm9ybWF0IChhbmQgdGh1cyBl bmFibGluZwppbi1wYWdlIExTTnMgYW5kIGNoZWNrc3VtcykgaXMgbGVmdCBmb3IgYSBsYXRl ciBwcm9qZWN0LiAgRm9yIG5vdywgYWRkCnN1cHBvcnQgZm9yIHJhdyAoaGVhZGVybGVzcykg cGFnZXMgaW4gdGhlIGJ1ZmZlciBwb29sLgoKWFhYIEFtb25nIHRoZSBwcm9ibGVtcyBub3Qg eWV0IGFkZHJlc3NlZDoKKiBTTWdyUmVsYXRpb24gb2JqZWN0cyBjYWNoZSBzbHJ1X2ZpbGUg ZGVzY3JpcHRvcnMsIGJ1dCB0aGVyZSBpcyBubwogIGludmFsaWRhdGlvbiBmb3Igd2hlbiBT TFJVcyB3cmFwIGFyb3VuZCBzbyB0aGV5IG1pZ2h0IHdyYXAgYXJvdW5kCiogQ0xPRyBsb29r dXBzIGFyZSBhIGJpdCBzbG93ZXIgaWYgeW91IGhhdmUgdG8gZG8gYSBidWZmZXIgbWFwcGlu ZyB0YWJsZQogIGxvb2t1cCBmaXJzdDsgdG8gZG8gYmV0dGVyIHRoYW4gdGhhdCB5b3UgbmVl ZCBhIGxpdHRsZSBjYWNoZSwgd2hpY2gKICBmb3Igbm93IGlzIHNpbmdsZSBpdGVtLCBhbmQg Y291bGQgYmUgZ2VuZXJhbGlzZWQ7IG1heWJlIENMT0cgaXMKICBhY3R1YWxseSBzbyBob3Qg dGhhdCBpdCBuZWVkcyBzdW1tYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzCiAgYXRvbWlj YWxseT8KKiBDTE9HIExTTnMgYXJlIG5vdyBvbmUtcGVyLXBhZ2UsIHdoaWNoIHByb2JhYmx5 IGlzbid0IGdvb2QgKCJncm91cF9sc24iCiAgZHJvcHBlZCBieSB0aGlzIHBhdGNoKQoqICJl eHRlcm5hbCBMU05zIiBhcmUgaW4gYSBuZXcgc2VwYXJhdGUgYXJyYXksIGJ1dCBjb3VsZCBw ZXJoYXBzIGJlCiAgc3R1ZmZlZCBpbnRvIEJ1ZmZlckRlc2NyaXB0b3IKKiBUaGUgbG9ja2lu ZyBzdHJhdGVnaWVzIGZvciBhbGwgU0xSVXMgbmVlZCB0byBiZSByZXZpZXdlZAoqIFN1cHBv cnQgZm9yICJleHRlbnNpb24iIFNMUlVzIChpZSBTTFJVcyBvd25lZCBieSBjb2RlIGluIGNv cmUpIGlzCiAgcmVtb3ZlZCAtLSBkaWQgYW55b25lIGV2ZXIgYWN1dGFsbHkgdXNlIHRoYXQ/ ICBDb2RlIHNlYXJjaGVzIHNlZW0gdG8KICBpbmRpY2F0ZSBubwoqIFdoaWxlIGNvbW1pdHRp bmcsIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgdGhlIGJ1ZmZlciBwaW5uaW5nIGNvZGUKICBh bGxvY2F0ZXMgbWVtb3J5IHdoaWNoIGlzbid0IGFsbG93ZWQ7IEkgY29tbWVudGVkIHRoYXQg c3R1ZmYgb3V0IGZvcgogIG5vdzsgcGVyaGFwcyB3ZSBjYW4gbWFrZSB0aGUgcmVzb3duZXIg c3R1ZmYgbm9uLWFsbG9jYXRpbmc/CiogU29tZXRoaW5nIGlzIG9jY2FzaW9uYWxseSBjb3Jy dXB0aW5nIG1lbW9yeSAobG9ja2luZyBwcm9ibGVtLCBvcgogIGJhZCBwb2ludGVyIGFyaXRo bWV0aWM/KQoKWFhYIFdvcmsgaW4gcHJvZ3Jlc3MhClhYWCBVbmZpbmlzaGVkLCBleHBlcmlt ZW50YWwhClhYWCBDb250YWlucyBrbm93biBidWdzIQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQSUyQmhVS0dLQVl6ZTk5Qi1qazlOb01wLTJCRHFBZ2lSQzRvSnYlMkJi RnhnaE5nZGllcThRJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRv cmluZy5zZ21sICAgICAgICAgICAgIHwgICA1NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vY2xvZy5jICAgICAgICB8ICAxOTkgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9jb21taXRfdHMuYyAgIHwgIDE1NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vbXVsdGl4YWN0LmMgICB8ICAzNTggKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3NscnUuYyAgICAgICAgfCAxNzM0ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgICAgfCAgMTA4ICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgIHwgICAxOSArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICB8ICAgNjcgKy0KIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgICAgfCAgIDE4ICsKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgIHwgIDE1MSArLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jICAgICAgICAgICB8ICAgIDQgLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL2x3bG9jay5jICAgICAgICB8ICAgMTQgLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2x3bG9ja25hbWVzLnR4dCB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cmVkaWNhdGUuYyAgICAgfCAgIDYyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21n ci5jICAgICAgICAgIHwgICAyMCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMu YyAgICAgICAgICB8ICAgMjIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3Rh dF9zbHJ1LmMgfCAgIDM1ICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2 ZW50LmMgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMg ICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jICAgICAgICAg ICAgfCAgIDEyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oICAgICAgICAgICAgICAg IHwgICAgNiAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmggICAgICAgICAgIHwg ICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgIHwgICAg MyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oICAgICAgICAgICAgICAgIHwgIDE5MyAr LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oICAgICAgICAgICAgfCAgICAzIC0K IHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgfCAgICA2ICsKIHNyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgICAgICAgfCAgICA5ICsKIHNyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrLmggICAgICAgICAgICAgfCAgICA5ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL3N5bmMuaCAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvdXRp bHMvcGdzdGF0X2ludGVybmFsLmggICAgICB8ICAgMjcgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3dhaXRfZXZlbnQuaCAgICAgICAgICAgfCAgICAyICstCiAzNCBmaWxlcyBjaGFuZ2VkLCAx MDIyIGluc2VydGlvbnMoKyksIDIzMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNn bWwKaW5kZXggN2RiYmFiNmY1YzkuLjgzYWI1NDU5MzM5IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNn bWwKQEAgLTE0NDgsOSArMTQ0OCw4IEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAz MDA5NiAgMjc1MiA/ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAg ICAgICA8ZW50cnk+V2FpdGluZyBmb3IgYSB3cml0ZSB0byBhIHJlcGxpY2F0aW9uIHNsb3Qg Y29udHJvbCBmaWxlLjwvZW50cnk+CiAgICAgIDwvcm93PgogICAgICA8cm93PgotICAgICAg PGVudHJ5PjxsaXRlcmFsPlNMUlVGbHVzaFN5bmM8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAg IDxlbnRyeT5XYWl0aW5nIGZvciBTTFJVIGRhdGEgdG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdl IGR1cmluZyBhIGNoZWNrcG9pbnQKLSAgICAgICBvciBkYXRhYmFzZSBzaHV0ZG93bi48L2Vu dHJ5PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPlNMUlVGbHVzaDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgPGVudHJ5PkluaXRpYXRpbmcgd3JpdGViYWNrIG9mIFNMUlUgZGF0YS48L2Vu dHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5T TFJVUmVhZDwvbGl0ZXJhbD48L2VudHJ5PgpAQCAtMTQ1OCw4ICsxNDU3LDcgQEAgcG9zdGdy ZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQg ICAwOjAwIHBvc3RncmVzOiBzZXIKICAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8 ZW50cnk+PGxpdGVyYWw+U0xSVVN5bmM8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgIDxlbnRy eT5XYWl0aW5nIGZvciBTTFJVIGRhdGEgdG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdlIGZvbGxv d2luZyBhIHBhZ2UKLSAgICAgICB3cml0ZS48L2VudHJ5PgorICAgICAgPGVudHJ5PldhaXRp bmcgZm9yIFNMUlUgZGF0YSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UuPC9lbnRyeT4KICAg ICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+U0xSVVdyaXRl PC9saXRlcmFsPjwvZW50cnk+CkBAIC0xOTU0LDE0ICsxOTUyLDYgQEAgcG9zdGdyZXMgICAy NzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQgICAwOjAw IHBvc3RncmVzOiBzZXIKICAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRl IHRoZSBsYXN0IHZhbHVlIHNldCBmb3IgYQogICAgICAgIHRyYW5zYWN0aW9uIGNvbW1pdCB0 aW1lc3RhbXAuPC9lbnRyeT4KICAgICAgPC9yb3c+Ci0gICAgIDxyb3c+Ci0gICAgICA8ZW50 cnk+PGxpdGVyYWw+Q29tbWl0VHNCdWZmZXI8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgIDxl bnRyeT5XYWl0aW5nIGZvciBJL08gb24gYSBjb21taXQgdGltZXN0YW1wIFNMUlUgYnVmZmVy LjwvZW50cnk+Ci0gICAgIDwvcm93PgotICAgICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRl cmFsPkNvbW1pdFRzU0xSVTwvbGl0ZXJhbD48L2VudHJ5PgotICAgICAgPGVudHJ5PldhaXRp bmcgdG8gYWNjZXNzIHRoZSBjb21taXQgdGltZXN0YW1wIFNMUlUgY2FjaGUuPC9lbnRyeT4K LSAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+Q29udHJv bEZpbGU8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIHJlYWQg b3IgdXBkYXRlIHRoZSA8ZmlsZW5hbWU+cGdfY29udHJvbDwvZmlsZW5hbWU+CkBAIC0xOTkx LDMxICsxOTgxLDEwIEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAzMDA5NiAgMjc1 MiA/ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAgICAgICA8ZW50 cnk+PGxpdGVyYWw+TXVsdGlYYWN0R2VuPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50 cnk+V2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBzaGFyZWQgbXVsdGl4YWN0IHN0YXRlLjwv ZW50cnk+CiAgICAgIDwvcm93PgotICAgICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRlcmFs Pk11bHRpWGFjdE1lbWJlckJ1ZmZlcjwvbGl0ZXJhbD48L2VudHJ5PgotICAgICAgPGVudHJ5 PldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuPC9l bnRyeT4KLSAgICAgPC9yb3c+Ci0gICAgIDxyb3c+Ci0gICAgICA8ZW50cnk+PGxpdGVyYWw+ TXVsdGlYYWN0TWVtYmVyU0xSVTwvbGl0ZXJhbD48L2VudHJ5PgotICAgICAgPGVudHJ5Pldh aXRpbmcgdG8gYWNjZXNzIHRoZSBtdWx0aXhhY3QgbWVtYmVyIFNMUlUgY2FjaGUuPC9lbnRy eT4KLSAgICAgPC9yb3c+Ci0gICAgIDxyb3c+Ci0gICAgICA8ZW50cnk+PGxpdGVyYWw+TXVs dGlYYWN0T2Zmc2V0QnVmZmVyPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICA8ZW50cnk+V2Fp dGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci48L2VudHJ5 PgotICAgICA8L3Jvdz4KLSAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJhbD5NdWx0 aVhhY3RPZmZzZXRTTFJVPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICA8ZW50cnk+V2FpdGlu ZyB0byBhY2Nlc3MgdGhlIG11bHRpeGFjdCBvZmZzZXQgU0xSVSBjYWNoZS48L2VudHJ5Pgot ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5NdWx0aVhh Y3RUcnVuY2F0aW9uPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0 byByZWFkIG9yIHRydW5jYXRlIG11bHRpeGFjdCBpbmZvcm1hdGlvbi48L2VudHJ5PgogICAg ICA8L3Jvdz4KLSAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJhbD5Ob3RpZnlCdWZm ZXI8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgIDxlbnRyeT5XYWl0aW5nIGZvciBJL08gb24g YSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVQotICAgICAgIGJ1ZmZl ci48L2VudHJ5PgotICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0 ZXJhbD5Ob3RpZnlRdWV1ZTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRp bmcgdG8gcmVhZCBvciB1cGRhdGUgPGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdl cy48L2VudHJ5PgpAQCAtMjAyNSwxMSArMTk5NCw2IEBAIHBvc3RncmVzICAgMjcwOTMgIDAu MCAgMC4wICAzMDA5NiAgMjc1MiA/ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jl czogc2VyCiAgICAgICA8ZW50cnk+V2FpdGluZyB0byB1cGRhdGUgbGltaXQgb24gPGNvbW1h bmQ+Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdlCiAgICAgICAgc3RvcmFnZS48L2VudHJ5Pgog ICAgICA8L3Jvdz4KLSAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJhbD5Ob3RpZnlT TFJVPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICA8ZW50cnk+V2FpdGluZyB0byBhY2Nlc3Mg dGhlIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gbWVzc2FnZSBTTFJVCi0gICAgICAgY2Fj aGUuPC9lbnRyeT4KLSAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxp dGVyYWw+T2lkR2VuPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0 byBhbGxvY2F0ZSBhIG5ldyBPSUQuPC9lbnRyeT4KQEAgLTIxMTQsMTEgKzIwNzgsNiBAQCBw b3N0Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAx MTozNCAgIDA6MDAgcG9zdGdyZXM6IHNlcgogICAgICAgPGVudHJ5PjxsaXRlcmFsPlJlcGxp Y2F0aW9uU2xvdElPPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyBm b3IgSS9PIG9uIGEgcmVwbGljYXRpb24gc2xvdC48L2VudHJ5PgogICAgICA8L3Jvdz4KLSAg ICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJhbD5TZXJpYWxCdWZmZXI8L2xpdGVyYWw+ PC9lbnRyeT4KLSAgICAgIDxlbnRyeT5XYWl0aW5nIGZvciBJL08gb24gYSBzZXJpYWxpemFi bGUgdHJhbnNhY3Rpb24gY29uZmxpY3QgU0xSVQotICAgICAgIGJ1ZmZlci48L2VudHJ5Pgot ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5TZXJpYWxp emFibGVGaW5pc2hlZExpc3Q8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5XYWl0 aW5nIHRvIGFjY2VzcyB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJpYWxpemFibGUKQEAgLTIx NDYsMTEgKzIxMDUsNiBAQCBwb3N0Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3 NTIgPyAgICAgICAgU3MgICAxMTozNCAgIDA6MDAgcG9zdGdyZXM6IHNlcgogICAgICAgPGVu dHJ5PldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgaW5mb3JtYXRpb24gYWJvdXQgc2VyaWFs aXphYmxlCiAgICAgICAgdHJhbnNhY3Rpb25zLjwvZW50cnk+CiAgICAgIDwvcm93PgotICAg ICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRlcmFsPlNlcmlhbFNMUlU8L2xpdGVyYWw+PC9l bnRyeT4KLSAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGFjY2VzcyB0aGUgc2VyaWFsaXphYmxl IHRyYW5zYWN0aW9uIGNvbmZsaWN0IFNMUlUKLSAgICAgICBjYWNoZS48L2VudHJ5PgotICAg ICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5TaGFyZWRUaWRC aXRtYXA8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGFjY2Vz cyBhIHNoYXJlZCBUSUQgYml0bWFwIGR1cmluZyBhIHBhcmFsbGVsIGJpdG1hcApAQCAtMjIx OCwxMCArMjE3Miw2IEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAzMDA5NiAgMjc1 MiA/ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAgICAgICA8ZW50 cnk+V2FpdGluZyB0byB1cGRhdGUgbGltaXRzIG9uIHRyYW5zYWN0aW9uIGlkIGFuZCBtdWx0 aXhhY3QKICAgICAgICBjb25zdW1wdGlvbi48L2VudHJ5PgogICAgICA8L3Jvdz4KLSAgICAg PHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJhbD5YYWN0QnVmZmVyPC9saXRlcmFsPjwvZW50 cnk+Ci0gICAgICA8ZW50cnk+V2FpdGluZyBmb3IgSS9PIG9uIGEgdHJhbnNhY3Rpb24gc3Rh dHVzIFNMUlUgYnVmZmVyLjwvZW50cnk+Ci0gICAgIDwvcm93PgogICAgICA8cm93PgogICAg ICAgPGVudHJ5PjxsaXRlcmFsPlhhY3RTTFJVPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8 ZW50cnk+V2FpdGluZyB0byBhY2Nlc3MgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBTTFJVIGNh Y2hlLjwvZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9j bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKaW5kZXggM2Q5MDg4 YTcwNDguLmNiZTUzN2FlNzJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCkBA IC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdf dHJhY2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3luYy5oIgogCkBAIC04MSwxNSAr ODMsOCBAQAogICovCiAjZGVmaW5lIFRIUkVTSE9MRF9TVUJUUkFOU19DTE9HX09QVAk1CiAK LS8qCi0gKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDTE9H IGNvbnRyb2wKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIFhhY3RDdGxEYXRhOwotCi0jZGVm aW5lIFhhY3RDdGwgKCZYYWN0Q3RsRGF0YSkKLQogCi1zdGF0aWMgaW50CVplcm9DTE9HUGFn ZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9DTE9H UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBDTE9HUGFn ZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyB2b2lkIFdyaXRlWmVy b1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOwogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhs b2dSZWMoaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LApAQCAtOTksNyAr OTQsNyBAQCBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2Fj dGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsc24s IGludCBwYWdlbm8sCiAJCQkJCQkJCQkgICBib29sIGFsbF94YWN0X3NhbWVfcGFnZSk7CiBz dGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlk LCBYaWRTdGF0dXMgc3RhdHVzLAotCQkJCQkJCQkJICBYTG9nUmVjUHRyIGxzbiwgaW50IHNs b3Rubyk7CisJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbHNuLCBCdWZmZXIgYnVmZmVyKTsKIHN0 YXRpYyB2b2lkIHNldF9zdGF0dXNfYnlfcGFnZXMoaW50IG5zdWJ4aWRzLCBUcmFuc2FjdGlv bklkICpzdWJ4aWRzLAogCQkJCQkJCQlYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxz bik7CiBzdGF0aWMgYm9vbCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVzKFRyYW5z YWN0aW9uSWQgeGlkLApAQCAtMzQxLDEzICszMzYsMTIgQEAgVHJhbnNhY3Rpb25JZFNldFBh Z2VTdGF0dXNJbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJ CQkJCQkgICBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLAogCQkJ CQkJCQkgICBYTG9nUmVjUHRyIGxzbiwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlzbG90bm87 CisJQnVmZmVyCQlidWZmZXI7CiAJaW50CQkJaTsKIAogCUFzc2VydChzdGF0dXMgPT0gVFJB TlNBQ1RJT05fU1RBVFVTX0NPTU1JVFRFRCB8fAogCQkgICBzdGF0dXMgPT0gVFJBTlNBQ1RJ T05fU1RBVFVTX0FCT1JURUQgfHwKIAkJICAgKHN0YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFU VVNfU1VCX0NPTU1JVFRFRCAmJiAhVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkpOwotCUFz c2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSkp OwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBkb2luZyBhbiBhc3luYyBjb21taXQgKGllLCBsc24g aXMgdmFsaWQpLCB0aGVuIHdlIG11c3Qgd2FpdApAQCAtMzU4LDcgKzM1Miw4IEBAIFRyYW5z YWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBu c3VieGlkcywKIAkgKiB3cml0ZS1idXN5LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGlmIHRoZSB1 cGRhdGUgcmVhY2hlcyBkaXNrIHNvb25lciB0aGFuCiAJICogd2UgdGhpbmsuCiAJICovCi0J c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBYTG9nUmVjUHRy SXNJbnZhbGlkKGxzbiksIHhpZCk7CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9D TE9HX1JFTF9JRCwgcGFnZW5vKTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tf RVhDTFVTSVZFKTsKIAogCS8qCiAJICogU2V0IHRoZSBtYWluIHRyYW5zYWN0aW9uIGlkLCBp ZiBhbnkuCkBAIC0zNzYsMjUgKzM3MSwyNiBAQCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1 c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCXsKIAkJCWZv ciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQogCQkJewotCQkJCUFzc2VydChYYWN0Q3Rs LT5zaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShz dWJ4aWRzW2ldKSk7CisJCQkJQXNzZXJ0KHBhZ2VubyA9PSBUcmFuc2FjdGlvbklkVG9QYWdl KHN1YnhpZHNbaV0pKTsKIAkJCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNb aV0sCiAJCQkJCQkJCQkJICBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NPTU1JVFRFRCwKLQkJ CQkJCQkJCQkgIGxzbiwgc2xvdG5vKTsKKwkJCQkJCQkJCQkgIGxzbiwgYnVmZmVyKTsKIAkJ CX0KIAkJfQogCiAJCS8qIC4uLiB0aGVuIHRoZSBtYWluIHRyYW5zYWN0aW9uICovCi0JCVRy YW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxzbiwgc2xvdG5vKTsKKwkJ VHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdCh4aWQsIHN0YXR1cywgbHNuLCBidWZmZXIpOwog CX0KIAogCS8qIFNldCB0aGUgc3VidHJhbnNhY3Rpb25zICovCiAJZm9yIChpID0gMDsgaSA8 IG5zdWJ4aWRzOyBpKyspCiAJewotCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251 bWJlcltzbG90bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOwotCQlU cmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBzbG90 bm8pOworCQlBc3NlcnQocGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tp XSkpOworCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywg bHNuLCBidWZmZXIpOwogCX0KIAotCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dID0gdHJ1ZTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC01NjgsNyArNTY0LDcgQEAgVHJhbnNhY3Rp b25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0 YXR1cywKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggWGFjdFNMUlVMb2NrIGhlbGQKICAqLwog c3RhdGljIHZvaWQKLVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4 aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpbnQgc2xvdG5vKQorVHJh bnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0 YXR1cywgWExvZ1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpCiB7CiAJaW50CQkJYnl0ZW5v ID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0 aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwpAQCAtNTc2LDcgKzU3 MiwxMCBAQCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBY aWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaQogCWNoYXIJCWJ5dGV2YWw7CiAJ Y2hhcgkJY3VydmFsOwogCi0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZm ZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQnVm ZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVy IC0gMSkpLAorCQkJCQkJCQlMV19FWENMVVNJVkUpKTsKKworCWJ5dGVwdHIgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcikgKyBieXRlbm87CiAJY3VydmFsID0gKCpieXRlcHRyID4+IGJzaGlm dCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKIAogCS8qCkBAIC02MDUsNyArNjA0LDcgQEAgVHJh bnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0 YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAkqYnl0ZXB0ciA9IGJ5dGV2YWw7CiAKIAkvKgot CSAqIFVwZGF0ZSB0aGUgZ3JvdXAgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9u IExTTiBpcyBoaWdoZXIuCisJICogVXBkYXRlIHRoZSBidWZmZXIgTFNOIGlmIHRoZSB0cmFu c2FjdGlvbiBjb21wbGV0aW9uIExTTiBpcyBoaWdoZXIuCiAJICoKIAkgKiBOb3RlOiBsc24g d2lsbCBiZSBpbnZhbGlkIHdoZW4gc3VwcGxpZWQgZHVyaW5nIEluUmVjb3ZlcnkgcHJvY2Vz c2luZywKIAkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8g YXZvaWQgTFNOIHVwZGF0ZXMgZHVyaW5nCkBAIC02MTQsMTAgKzYxMyw4IEBAIFRyYW5zYWN0 aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMs IFhMb2dSZWNQdHIgbHNuLCBpCiAJICovCiAJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKGxz bikpCiAJewotCQlpbnQJCQlsc25pbmRleCA9IEdldExTTkluZGV4KHNsb3RubywgeGlkKTsK LQotCQlpZiAoWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdIDwgbHNuKQot CQkJWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdID0gbHNuOworCQlpZiAo QnVmZmVyR2V0RXh0ZXJuYWxMU04oR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIpKSA8IGxz bikKKwkJCUJ1ZmZlclNldEV4dGVybmFsTFNOKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVy KSwgbHNuKTsKIAl9CiB9CiAKQEAgLTY0Miw2NyArNjM5LDIyIEBAIFRyYW5zYWN0aW9uSWRH ZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgKmxzbikKIAlpbnQJCQlw YWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJYnl0ZW5vID0gVHJh bnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRU b0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwotCWludAkJCXNsb3RubzsKLQlp bnQJCQlsc25pbmRleDsKIAljaGFyCSAgICpieXRlcHRyOwogCVhpZFN0YXR1cwlzdGF0dXM7 CisJQnVmZmVyCQlidWZmZXI7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxy dVJlYWRQYWdlX1JlYWRPbmx5ICovCi0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7Ci0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlidWZmZXIgPSBSZWFkU2xy dUJ1ZmZlcihTTFJVX0NMT0dfUkVMX0lELCBwYWdlbm8pOworCWJ5dGVwdHIgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcikgKyBieXRlbm87CiAKIAlzdGF0dXMgPSAoKmJ5dGVwdHIgPj4gYnNo aWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOwogCi0JbHNuaW5kZXggPSBHZXRMU05JbmRleChz bG90bm8sIHhpZCk7Ci0JKmxzbiA9IFhhY3RDdGwtPnNoYXJlZC0+Z3JvdXBfbHNuW2xzbmlu ZGV4XTsKKwkqbHNuID0gQnVmZmVyR2V0RXh0ZXJuYWxMU04oR2V0QnVmZmVyRGVzY3JpcHRv cihidWZmZXIpKTsKIAotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKgotICogTnVtYmVy IG9mIHNoYXJlZCBDTE9HIGJ1ZmZlcnMuCi0gKgotICogT24gbGFyZ2VyIG11bHRpLXByb2Nl c3NvciBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1hbnkgQ0xPRyBwYWdlCi0g KiByZXF1ZXN0cyBpbiBmbGlnaHQgYXQgb25lIHRpbWUgd2hpY2ggY291bGQgbGVhZCB0byBk aXNrIGFjY2VzcyBmb3IgQ0xPRwotICogcGFnZSBpZiB0aGUgcmVxdWlyZWQgcGFnZSBpcyBu b3QgZm91bmQgaW4gbWVtb3J5LiAgVGVzdGluZyByZXZlYWxlZCB0aGF0IHdlCi0gKiBjYW4g Z2V0IHRoZSBiZXN0IHBlcmZvcm1hbmNlIGJ5IGhhdmluZyAxMjggQ0xPRyBidWZmZXJzLCBt b3JlIHRoYW4gdGhhdCBpdAotICogZG9lc24ndCBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICoK LSAqIFVuY29uZGl0aW9uYWxseSBrZWVwaW5nIHRoZSBudW1iZXIgb2YgQ0xPRyBidWZmZXJz IHRvIDEyOCBkaWQgbm90IHNlZW0gbGlrZQotICogYSBnb29kIGlkZWEsIGJlY2F1c2UgaXQg d291bGQgaW5jcmVhc2UgdGhlIG1pbmltdW0gYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkKLSAq IHJlcXVpcmVkIHRvIHN0YXJ0LCB3aGljaCBjb3VsZCBiZSBhIHByb2JsZW0gZm9yIHBlb3Bs ZSBydW5uaW5nIHZlcnkgc21hbGwKLSAqIGNvbmZpZ3VyYXRpb25zLiAgVGhlIGZvbGxvd2lu ZyBmb3JtdWxhIHNlZW1zIHRvIHJlcHJlc2VudCBhIHJlYXNvbmFibGUKLSAqIGNvbXByb21p c2U6IHBlb3BsZSB3aXRoIHZlcnkgbG93IHZhbHVlcyBmb3Igc2hhcmVkX2J1ZmZlcnMgd2ls bCBnZXQgZmV3ZXIKLSAqIENMT0cgYnVmZmVycyBhcyB3ZWxsLCBhbmQgZXZlcnlvbmUgZWxz ZSB3aWxsIGdldCAxMjguCi0gKi8KLVNpemUKLUNMT0dTaG1lbUJ1ZmZlcnModm9pZCkKLXsK LQlyZXR1cm4gTWluKDEyOCwgTWF4KDQsIE5CdWZmZXJzIC8gNTEyKSk7Ci19Ci0KLS8qCi0g KiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBDTE9HCi0gKi8KLVNpemUK LUNMT0dTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKENM T0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFKTsKLX0KLQotdm9pZAotQ0xP R1NobWVtSW5pdCh2b2lkKQotewotCVhhY3RDdGwtPlBhZ2VQcmVjZWRlcyA9IENMT0dQYWdl UHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAiWGFjdCIsIENMT0dTaG1lbUJ1 ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFLAotCQkJCSAgWGFjdFNMUlVMb2NrLCAicGdf eGFjdCIsIExXVFJBTkNIRV9YQUNUX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9DTE9H KTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFhhY3RDdGwsIENMT0dfWEFDVFNfUEVS X1BBR0UpOwotfQotCiAvKgogICogVGhpcyBmdW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24g c3lzdGVtIGluc3RhbGwuICBJdCBjcmVhdGVzCiAgKiB0aGUgaW5pdGlhbCBDTE9HIHNlZ21l bnQuICAoVGhlIENMT0cgZGlyZWN0b3J5IGlzIGFzc3VtZWQgdG8KQEAgLTcxMiwxOCArNjY0 LDE1IEBAIENMT0dTaG1lbUluaXQodm9pZCkKIHZvaWQKIEJvb3RTdHJhcENMT0codm9pZCkK IHsKLQlpbnQJCQlzbG90bm87Ci0KLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0 aGUgZmlyc3QgcGFnZSBvZiB0aGUgY29tbWl0IGxvZyAqLwotCXNsb3RubyA9IFplcm9DTE9H UGFnZSgwLCBmYWxzZSk7CisJYnVmZmVyID0gWmVyb0NMT0dQYWdlKDAsIGZhbHNlKTsKIAog CS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdl KFhhY3RDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKIAotCUxXTG9ja1JlbGVh c2UoWGFjdFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAK IC8qCkBAIC03MzUsMTcgKzY4NCwxOCBAQCBCb290U3RyYXBDTE9HKHZvaWQpCiAgKgogICog Q29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBh dCBleGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvQ0xPR1BhZ2Uo aW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZl cgkJYnVmZmVyOwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoWGFjdEN0bCwgcGFn ZW5vKTsKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NMT0dfUkVMX0lELCBwYWdl bm8pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJaWYgKHdyaXRlWGxvZykKIAkJ V3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5vKTsKIAotCXJldHVybiBzbG90bm87CisJcmV0 dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTc1NSwxNyArNzA1LDYgQEAgWmVyb0NMT0dQYWdl KGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogdm9pZAogU3RhcnR1cENMT0codm9pZCkK IHsKLQlUcmFuc2FjdGlvbklkIHhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChTaG1l bVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQpOwotCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9u SWRUb1BhZ2UoeGlkKTsKLQotCUxXTG9ja0FjcXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENM VVNJVkUpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3Qg cGFnZSBudW1iZXIuCi0JICovCi0JWGFjdEN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1i ZXIgPSBwYWdlbm87Ci0KLQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7CiB9CiAKIC8q CkBAIC03NzcsOCArNzE2LDYgQEAgVHJpbUNMT0codm9pZCkKIAlUcmFuc2FjdGlvbklkIHhp ZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChTaG1lbVZhcmlhYmxlQ2FjaGUtPm5leHRY aWQpOwogCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKTsKIAotCUxX TG9ja0FjcXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJLyoKIAkgKiBa ZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGNsb2cgcGFnZS4gIFVuZGVy IG5vcm1hbAogCSAqIGNpcmN1bXN0YW5jZXMgaXQgc2hvdWxkIGJlIHplcm9lcyBhbHJlYWR5 LCBidXQgaXQgc2VlbXMgYXQgbGVhc3QKQEAgLTc5NSw0MCArNzMyLDI0IEBAIFRyaW1DTE9H KHZvaWQpCiAJewogCQlpbnQJCQlieXRlbm8gPSBUcmFuc2FjdGlvbklkVG9CeXRlKHhpZCk7 CiAJCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19C SVRTX1BFUl9YQUNUOwotCQlpbnQJCQlzbG90bm87CiAJCWNoYXIJICAgKmJ5dGVwdHI7CisJ CUJ1ZmZlcgkJYnVmZmVyOwogCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFhhY3RD dGwsIHBhZ2VubywgZmFsc2UsIHhpZCk7Ci0JCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBieXRlbm87CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVm ZmVyKFNMUlVfQ0xPR19SRUxfSUQsIHBhZ2Vubyk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBC VUZGRVJfTE9DS19FWENMVVNJVkUpOworCQlieXRlcHRyID0gQnVmZmVyR2V0UGFnZShidWZm ZXIpICsgYnl0ZW5vOwogCiAJCS8qIFplcm8gc28tZmFyLXVudXNlZCBwb3NpdGlvbnMgaW4g dGhlIGN1cnJlbnQgYnl0ZSAqLwogCQkqYnl0ZXB0ciAmPSAoMSA8PCBic2hpZnQpIC0gMTsK IAkJLyogWmVybyB0aGUgcmVzdCBvZiB0aGUgcGFnZSAqLwogCQlNZW1TZXQoYnl0ZXB0ciAr IDEsIDAsIEJMQ0tTWiAtIGJ5dGVubyAtIDEpOwogCi0JCVhhY3RDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQl9CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIp OwogCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwotfQotCi0vKgotICogUGVyZm9y bSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1m bHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludENMT0codm9pZCkKLXsKLQkvKgotCSAqIFdyaXRl IGRpcnR5IENMT0cgcGFnZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJl cXVlc3RzCi0JICogcXVldWVkIGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1Jl cXVlc3RzKCksIGFzIHBhcnQgb2YgdGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlUUkFD RV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVX cml0ZUFsbChYYWN0Q3RsLCB0cnVlKTsKLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQ T0lOVF9ET05FKHRydWUpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQog fQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBDTE9HIGhhcyByb29tIGZvciBhIG5ld2x5 LWFsbG9jYXRlZCBYSUQuCiAgKgpAQCAtODUyLDEyICs3NzMsOCBAQCBFeHRlbmRDTE9HKFRy YW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1Bh Z2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhD TFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBh Ym91dCBpdCAqLwotCVplcm9DTE9HUGFnZShwYWdlbm8sIHRydWUpOwotCi0JTFdMb2NrUmVs ZWFzZShYYWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NMT0dQYWdl KHBhZ2VubywgdHJ1ZSkpOwogfQogCiAKQEAgLTg4OCw3ICs4MDUsOCBAQCBUcnVuY2F0ZUNM T0coVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAlj dXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENo ZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQg Ki8KLQlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFhhY3RDdGwsIFNscnVTY2FuRGlyQ2JSZXBv cnRQcmVzZW5jZSwgJmN1dG9mZlBhZ2UpKQorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xS VV9DTE9HX1JFTF9JRCwgQ0xPR1BhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIFNscnVTY2FuRGly Q2JSZXBvcnRQcmVzZW5jZSwgJmN1dG9mZlBhZ2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3Ro aW5nIHRvIHJlbW92ZSAqLwogCiAJLyoKQEAgLTkwOSw3ICs4MjcsNyBAQCBUcnVuY2F0ZUNM T0coVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAlX cml0ZVRydW5jYXRlWGxvZ1JlYyhjdXRvZmZQYWdlLCBvbGRlc3RYYWN0LCBvbGRlc3R4aWRf ZGF0b2lkKTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQgQ0xPRyBzZWdtZW50 KHMpICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoWGFjdEN0bCwgY3V0b2ZmUGFnZSk7CisJU2lt cGxlTHJ1VHJ1bmNhdGUoU0xSVV9DTE9HX1JFTF9JRCwgQ0xPR1BhZ2VQcmVjZWRlcywgY3V0 b2ZmUGFnZSk7CiB9CiAKIApAQCAtOTk0LDE3ICs5MTIsMTMgQEAgY2xvZ19yZWRvKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENMT0dfWkVST1BBR0UpCiAJewog CQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CiAK IAkJbWVtY3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQp KTsKIAotCQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQot CQlzbG90bm8gPSBaZXJvQ0xPR1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdy aXRlUGFnZShYYWN0Q3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+ cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7 CisJCWJ1ZmZlciA9IFplcm9DTE9HUGFnZShwYWdlbm8sIGZhbHNlKTsKKwkJRmx1c2hPbmVC dWZmZXIoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAll bHNlIGlmIChpbmZvID09IENMT0dfVFJVTkNBVEUpCiAJewpAQCAtMTAxNCwxNyArOTI4LDgg QEAgY2xvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCUFkdmFuY2VPbGRl c3RDbG9nWGlkKHhscmVjLm9sZGVzdFhhY3QpOwogCi0JCVNpbXBsZUxydVRydW5jYXRlKFhh Y3RDdGwsIHhscmVjLnBhZ2Vubyk7CisJCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfQ0xPR19S RUxfSUQsIENMT0dQYWdlUHJlY2VkZXMsIHhscmVjLnBhZ2Vubyk7CiAJfQogCWVsc2UKIAkJ ZWxvZyhQQU5JQywgImNsb2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CiB9 Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMgdG8gc3luYyBjbG9nIGZpbGVzLgot ICovCi1pbnQKLWNsb2dzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpw YXRoKQotewotCXJldHVybiBTbHJ1U3luY0ZpbGVUYWcoWGFjdEN0bCwgZnRhZywgcGF0aCk7 Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDRkYzhk NDAyYmQzLi4xZWFjNzYxYjM5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vY29tbWl0X3RzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29t bWl0X3RzLmMKQEAgLTczLDEzICs3Myw2IEBAIHR5cGVkZWYgc3RydWN0IENvbW1pdFRpbWVz dGFtcEVudHJ5CiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCkJXAogCSgo eGlkKSAlIChUcmFuc2FjdGlvbklkKSBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpCiAKLS8q Ci0gKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDb21taXRU cyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBDb21taXRUc0N0bERhdGE7Ci0K LSNkZWZpbmUgQ29tbWl0VHNDdGwgKCZDb21taXRUc0N0bERhdGEpCi0KIC8qCiAgKiBXZSBr ZWVwIGEgY2FjaGUgb2YgdGhlIGxhc3QgdmFsdWUgc2V0IGluIHNoYXJlZCBtZW1vcnkuCiAg KgpAQCAtMTEwLDcgKzEwMyw3IEBAIHN0YXRpYyB2b2lkIFNldFhpZENvbW1pdFRzSW5QYWdl KFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiBzdGF0aWMgdm9pZCBUcmFuc2Fj dGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAog CQkJCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHNsb3Rubyk7CiBzdGF0aWMgdm9p ZCBlcnJvcl9jb21taXRfdHNfZGlzYWJsZWQodm9pZCk7Ci1zdGF0aWMgaW50CVplcm9Db21t aXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBa ZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKIHN0YXRpYyBi b29sIENvbW1pdFRzUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRp YyB2b2lkIEFjdGl2YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMgdm9pZCBEZWFjdGl2YXRl Q29tbWl0VHModm9pZCk7CkBAIC0yMTksMzAgKzIxMiwyNyBAQCBTZXRYaWRDb21taXRUc0lu UGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkgVHJhbnNhY3Rp b25JZCAqc3VieGlkcywgVGltZXN0YW1wVHogdHMsCiAJCQkJCSBSZXBPcmlnaW5JZCBub2Rl aWQsIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJc2xvdG5vOwogCWludAkJCWk7CisJQnVmZmVy CQlidWZmZXI7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShDb21taXRUc0N0bCwgcGFn ZW5vLCB0cnVlLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlU VFNfUkVMX0lELCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19F WENMVVNJVkUpOwogCi0JVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHhpZCwgdHMsIG5vZGVp ZCwgc2xvdG5vKTsKKwlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlk LCBidWZmZXIpOwogCWZvciAoaSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQotCQlUcmFuc2Fj dGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwgdHMsIG5vZGVpZCwgc2xvdG5vKTsKKwkJ VHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHN1YnhpZHNbaV0sIHRzLCBub2RlaWQsIGJ1ZmZl cik7CiAKLQlDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVl OworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShDb21taXRU c1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCiAg KiBTZXRzIHRoZSBjb21taXQgdGltZXN0YW1wIG9mIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgot ICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggQ29tbWl0VHNTTFJVTG9jayBoZWxkCiAgKi8K IHN0YXRpYyB2b2lkCiBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4 aWQsIFRpbWVzdGFtcFR6IHRzLAotCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHNs b3RubykKKwkJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIEJ1ZmZlciBidWZmZXIpCiB7CiAJ aW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7CiAJQ29tbWl0 VGltZXN0YW1wRW50cnkgZW50cnk7CkBAIC0yNTIsOCArMjQyLDcgQEAgVHJhbnNhY3Rpb25J ZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0cywKIAllbnRy eS50aW1lID0gdHM7CiAJZW50cnkubm9kZWlkID0gbm9kZWlkOwogCi0JbWVtY3B5KENvbW1p dFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKwotCQkgICBTaXplT2ZDb21t aXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8sCisJbWVtY3B5KEJ1ZmZlckdldFBhZ2UoYnVm ZmVyKSArIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKIAkJICAgJmVu dHJ5LCBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiB9CiAKQEAgLTI3MSwxMCArMjYw LDEwIEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQs IFRpbWVzdGFtcFR6ICp0cywKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9D VHNQYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5 KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVudHJ5Owog CVRyYW5zYWN0aW9uSWQgb2xkZXN0Q29tbWl0VHNYaWQ7CiAJVHJhbnNhY3Rpb25JZCBuZXdl c3RDb21taXRUc1hpZDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCWlmICghVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTMyOCwxMCArMzE3LDExIEBA IFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVz dGFtcFR6ICp0cywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGxvY2sgaXMgYWNxdWly ZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KLQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwgcGFnZW5vLCB4aWQpOworCWJ1ZmZl ciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUVFNfUkVMX0lELCBwYWdlbm8pOworCUxv Y2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisKIAltZW1jcHkoJmVudHJ5 LAotCQkgICBDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsKKwkJ ICAgQnVmZmVyR2V0UGFnZShidWZmZXIpICsKIAkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1w RW50cnkgKiBlbnRyeW5vLAogCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiAK QEAgLTMzOSw3ICszMjksNyBAQCBUcmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5z YWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiAJaWYgKG5vZGVpZCkKIAkJKm5vZGVp ZCA9IGVudHJ5Lm5vZGVpZDsKIAotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7 CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCXJldHVybiAqdHMgIT0gMDsKIH0K IApAQCAtNTA4LDI3ICs0OTgsMTMgQEAgcGdfeGFjdF9jb21taXRfdGltZXN0YW1wX29yaWdp bihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1 bShodHVwKSk7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVkIENvbW1pdFRTIGJ1ZmZl cnMuCi0gKgotICogV2UgdXNlIGEgdmVyeSBzaW1pbGFyIGxvZ2ljIGFzIGZvciB0aGUgbnVt YmVyIG9mIENMT0cgYnVmZmVycyAoZXhjZXB0IHdlCi0gKiBzY2FsZSB1cCB0d2ljZSBhcyBm YXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGUgbWF4aW11bSBpcyB0d2ljZSBhcwot ICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9HU2htZW1CdWZmZXJzLgotICovCi1TaXpl Ci1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVybiBNaW4oMjU2LCBNYXgo NCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNoYXJlZCBtZW1vcnkgc2l6aW5n IGZvciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVtU2l6ZSh2b2lkKQogewot CXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCkg KwotCQlzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwlyZXR1cm4gc2l6ZW9mKENv bW1pdFRpbWVzdGFtcFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01NDAsMTIgKzUxNiw3IEBAIENv bW1pdFRzU2htZW1Jbml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQlDb21taXRUc0N0 bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5p dChDb21taXRUc0N0bCwgIkNvbW1pdFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwK LQkJCQkgIENvbW1pdFRzU0xSVUxvY2ssICJwZ19jb21taXRfdHMiLAotCQkJCSAgTFdUUkFO Q0hFX0NPTU1JVFRTX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwot CVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNU U19QRVJfUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhDb21taXRUc1BhZ2VQ cmVjZWRlcywgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKTsKIAogCWNvbW1pdFRzU2hhcmVk ID0gU2htZW1Jbml0U3RydWN0KCJDb21taXRUcyBzaGFyZWQiLAogCQkJCQkJCQkJIHNpemVv ZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLApAQCAtNTg5LDE3ICs1NjAsMTggQEAgQm9vdFN0 cmFwQ29tbWl0VHModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0 YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhs b2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCi0Jc2xvdG5vID0g U2ltcGxlTHJ1WmVyb1BhZ2UoQ29tbWl0VHNDdGwsIHBhZ2Vubyk7CisJYnVmZmVyID0gWmVy b1NscnVCdWZmZXIoU0xSVV9DT01NSVRUU19SRUxfSUQsIHBhZ2Vubyk7CisJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0ZVplcm9QYWdlWGxv Z1JlYyhwYWdlbm8pOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQog CiAvKgpAQCAtNjk3LDEzICs2NjksNiBAQCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJeGlk ID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhp ZCk7CiAJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOwogCi0JLyoKLQkg KiBSZS1Jbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0J ICovCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwot CUNvbW1pdFRzQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQlM V0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOwotCiAJLyoKIAkgKiBJZiBDb21taXRU cyBpcyBlbmFibGVkLCBidXQgaXQgd2Fzbid0IGluIHRoZSBwcmV2aW91cyBzZXJ2ZXIgcnVu LCB3ZQogCSAqIG5lZWQgdG8gc2V0IHRoZSBvbGRlc3QgYW5kIG5ld2VzdCB2YWx1ZXMgdG8g dGhlIG5leHQgWGlkOyB0aGF0IHdheSwgd2UKQEAgLTcyNiwxNSArNjkxLDE0IEBAIEFjdGl2 YXRlQ29tbWl0VHModm9pZCkKIAlMV0xvY2tSZWxlYXNlKENvbW1pdFRzTG9jayk7CiAKIAkv KiBDcmVhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCBmaWxlLCBpZiBuZWNlc3NhcnkgKi8KLQlp ZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChDb21taXRUc0N0bCwgcGFnZW5v KSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTTFJVX0NPTU1JVFRT X1JFTF9JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZm ZXI7CiAKLQkJTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUp OwotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1w bGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghQ29tbWl0 VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQkJTFdMb2NrUmVsZWFzZShD b21taXRUc1NMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01N SVRUU19SRUxfSUQsIHBhZ2Vubyk7CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQlG bHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CiAJfQogCiAJLyogQ2hhbmdlIHRoZSBhY3RpdmF0aW9uIHN0YXR1cyBpbiBzaGFyZWQgbWVt b3J5LiAqLwpAQCAtNzgzLDIzICs3NDcsOSBAQCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCkK IAkgKiBiZSBvdmVyd3JpdHRlbiBhbnl3YXkgd2hlbiB3ZSB3cmFwIGFyb3VuZCwgYnV0IGl0 IHNlZW1zIGJldHRlciB0byBiZQogCSAqIHRpZHkuKQogCSAqLwotCUxXTG9ja0FjcXVpcmUo Q29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkodm9pZCkgU2xydVNjYW5EaXJl Y3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwotCUxX TG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEg Y2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQot ICovCi12b2lkCi1DaGVja1BvaW50Q29tbWl0VHModm9pZCkKLXsKLQkvKgotCSAqIFdyaXRl IGRpcnR5IENvbW1pdFRzIHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3lu YyByZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5 bmNSZXF1ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0J U2ltcGxlTHJ1V3JpdGVBbGwoQ29tbWl0VHNDdGwsIHRydWUpOworCSh2b2lkKSBTbHJ1U2Nh bkRpcmVjdG9yeShTTFJVX0NPTU1JVFRTX1JFTF9JRCwKKwkJCQkJCQkgQ29tbWl0VHNQYWdl UHJlY2VkZXMsCisJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwogfQog CiAvKgpAQCAtODM3LDEyICs3ODcsOCBAQCBFeHRlbmRDb21taXRUcyhUcmFuc2FjdGlvbklk IG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG5ld2Vz dFhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJ VkUpOwotCiAJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0 IGl0ICovCi0JWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8sICFJblJlY292ZXJ5KTsKLQotCUxX TG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlciha ZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3ZlcnkpKTsKIH0KIAogLyoKQEAgLTg2 Myw3ICs4MDksOSBAQCBUcnVuY2F0ZUNvbW1pdFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFj dCkKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZShvbGRlc3RYYWN0KTsK IAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJl IHJlbW92ZWQgKi8KLQlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KENvbW1pdFRzQ3RsLCBTbHJ1 U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UsCisJaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShTTFJV X0NPTU1JVFRTX1JFTF9JRCwKKwkJCQkJCSAgIENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkJ CQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLAogCQkJCQkJICAgJmN1dG9mZlBh Z2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIHJlbW92ZSAqLwogCkBAIC04NzEs NyArODE5LDcgQEAgVHJ1bmNhdGVDb21taXRUcyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3Qp CiAJV3JpdGVUcnVuY2F0ZVhsb2dSZWMoY3V0b2ZmUGFnZSwgb2xkZXN0WGFjdCk7CiAKIAkv KiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUgb2xkIENvbW1pdFRzIHNlZ21lbnQocykgKi8KLQlT aW1wbGVMcnVUcnVuY2F0ZShDb21taXRUc0N0bCwgY3V0b2ZmUGFnZSk7CisJU2ltcGxlTHJ1 VHJ1bmNhdGUoU0xSVV9DT01NSVRUU19SRUxfSUQsIENvbW1pdFRzUGFnZVByZWNlZGVzLCBj dXRvZmZQYWdlKTsKIH0KIAogLyoKQEAgLTk5NSwxNyArOTQzLDE0IEBAIGNvbW1pdF90c19y ZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENPTU1JVF9UU19a RVJPUEFHRSkKIAl7CiAJCWludAkJCXBhZ2VubzsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZm ZXIJCWJ1ZmZlcjsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3Jk KSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJVTG9jaywg TFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2Vubywg ZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0J CUFzc2VydCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQot CQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvU2xy dUJ1ZmZlcihTTFJVX0NPTU1JVFRTX1JFTF9JRCwgcGFnZW5vKTsKKwkJTWFya0J1ZmZlckRp cnR5KGJ1ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDT01NSVRfVFNfVFJV TkNBVEUpCiAJewpAQCAtMTAxMywyMyArOTU4LDggQEAgY29tbWl0X3RzX3JlZG8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpCiAKIAkJQWR2YW5jZU9sZGVzdENvbW1pdFRzWGlkKHRydW5j LT5vbGRlc3RYaWQpOwogCi0JCS8qCi0JCSAqIER1cmluZyBYTE9HIHJlcGxheSwgbGF0ZXN0 X3BhZ2VfbnVtYmVyIGlzbid0IHNldCB1cCB5ZXQ7IGluc2VydCBhCi0JCSAqIHN1aXRhYmxl IHZhbHVlIHRvIGJ5cGFzcyB0aGUgc2FuaXR5IHRlc3QgaW4gU2ltcGxlTHJ1VHJ1bmNhdGUu Ci0JCSAqLwotCQlDb21taXRUc0N0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSB0 cnVuYy0+cGFnZW5vOwotCi0JCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCB0cnVu Yy0+cGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRUU19SRUxfSUQs IENvbW1pdFRzUGFnZVByZWNlZGVzLCB0cnVuYy0+cGFnZW5vKTsKIAl9CiAJZWxzZQogCQll bG9nKFBBTklDLCAiY29tbWl0X3RzX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8p OwogfQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY29tbWl0X3Rz IGZpbGVzLgotICovCi1pbnQKLWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAq ZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKENvbW1pdFRz Q3RsLCBmdGFnLCBwYXRoKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMKaW5kZXggOGY3ZDEyOTUwZTUuLmIzNWU3M2ZjMWY2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMTgxLDE1ICsxODEsNiBAQAogI2RlZmlu ZSBQcmV2aW91c011bHRpWGFjdElkKHhpZCkgXAogCSgoeGlkKSA9PSBGaXJzdE11bHRpWGFj dElkID8gTWF4TXVsdGlYYWN0SWQgOiAoeGlkKSAtIDEpCiAKLS8qCi0gKiBMaW5rcyB0byBz aGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgTXVsdGlYYWN0IGNvbnRyb2wKLSAq Lwotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE9mZnNldEN0bERhdGE7Ci1zdGF0aWMg U2xydUN0bERhdGEgTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKLQotI2RlZmluZSBNdWx0aVhh Y3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0aVhh Y3RNZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQotCiAvKgogICogTXVsdGlY YWN0IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUg aXMgcHJvdGVjdGVkCiAgKiBieSBNdWx0aVhhY3RHZW5Mb2NrLiAgKFdlIGFsc28gdXNlIE11 bHRpWGFjdE9mZnNldFNMUlVMb2NrIGFuZApAQCAtMzUzLDEwICszNDQsOSBAQCBzdGF0aWMg dm9pZCBtWGFjdENhY2hlUHV0KE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCiBz dGF0aWMgY2hhciAqbXhzdGF0dXNfdG9fc3RyaW5nKE11bHRpWGFjdFN0YXR1cyBzdGF0dXMp OwogCiAvKiBtYW5hZ2VtZW50IG9mIFNMUlUgaW5mcmFzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBp bnQJWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cp Owotc3RhdGljIGludAlaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29s IHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGlu dCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFj dE1lbWJlclBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wg TXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKLXN0 YXRpYyBib29sIE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBw YWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0MSwKIAkJCQkJCQkJCU11bHRpWGFjdE9mZnNldCBvZmZzZXQyKTsKIHN0 YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSk7CkBA IC04NjUsMzQgKzg1NSwyNSBAQCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVs dGksIE11bHRpWGFjdE9mZnNldCBvZmZzZXQsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXBy ZXZfcGFnZW5vOwogCWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFj dE9mZnNldCAqb2ZmcHRyOwogCWludAkJCWk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJ cGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCWVudHJ5bm8gPSBN dWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBw YXNzIHRoZSBNdWx0aVhhY3RJZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBhcyB0aGUgInRyYW5z YWN0aW9uIgotCSAqIHRvIGNvbXBsYWluIGFib3V0IGlmIHRoZXJlJ3MgYW55IEkvTyBlcnJv ci4gIFRoaXMgaXMga2luZGEgYm9ndXMsIGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJvcnMgd2ls bCBhbHdheXMgZ2l2ZSB0aGUgZnVsbCBwYXRobmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFyCi0J ICogZW5vdWdoIHRoYXQgYSBNdWx0aVhhY3RJZCBpcyByZWFsbHkgaW52b2x2ZWQuICBQZXJo YXBzIHNvbWVkYXkgd2UnbGwKLQkgKiB0YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUg dGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4KLQkgKi8KLQlzbG90bm8gPSBTaW1w bGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkp OwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5z aGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJLyogWFhYIHNldCB1cCBlcnJvciBjb250 ZXh0PyAqLworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNF VF9SRUxfSUQsIHBhZ2Vubyk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VY Q0xVU0lWRSk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBCdWZmZXJHZXRQYWdl KGJ1ZmZlcik7CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAKIAkqb2ZmcHRyID0gb2Zmc2V0Owog Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRy dWU7Ci0KLQkvKiBFeGNoYW5nZSBvdXIgbG9jayAqLwotCUxXTG9ja1JlbGVhc2UoTXVsdGlY YWN0T2Zmc2V0U0xSVUxvY2spOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdM b2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsK IAogCXByZXZfcGFnZW5vID0gLTE7CiAKQEAgLTkxNCwyNyArODk1LDI4IEBAIFJlY29yZE5l d011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwK IAogCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQogCQl7Ci0JCQlzbG90bm8gPSBTaW1w bGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkp OworCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKKwkJCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CisJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFD VF9NRU1CRVJfUkVMX0lELCBwYWdlbm8pOworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZF Ul9MT0NLX0VYQ0xVU0lWRSk7CiAJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQogCi0J CW1lbWJlcnB0ciA9IChUcmFuc2FjdGlvbklkICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOworCQltZW1iZXJw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgbWVtYmVy b2ZmKTsKIAogCQkqbWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CiAKLQkJZmxhZ3NwdHIg PSAodWludDMyICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoQnVm ZmVyR2V0UGFnZShidWZmZXIpICsgZmxhZ3NvZmYpOwogCiAJCWZsYWdzdmFsID0gKmZsYWdz cHRyOwogCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFD VCkgLSAxKSA8PCBic2hpZnQpOwogCQlmbGFnc3ZhbCB8PSAobWVtYmVyc1tpXS5zdGF0dXMg PDwgYnNoaWZ0KTsKIAkJKmZsYWdzcHRyID0gZmxhZ3N2YWw7CiAKLQkJTXVsdGlYYWN0TWVt YmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJCU1hcmtCdWZm ZXJEaXJ0eShidWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVy U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAg LTEyMjYsNyArMTIwOCw2IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlpbnQJCQlwYWdlbm87CiAJaW50 CQkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlubzsKLQlpbnQJCQlzbG90bm87CiAJTXVs dGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJ CQlsZW5ndGg7CkBAIC0xMjM3LDYgKzEyMTgsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMo TXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTXVsdGlY YWN0SWQgdG1wTVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAJTXVsdGlY YWN0TWVtYmVyICpwdHI7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlkZWJ1Z19lbG9nMyhERUJV RzIsICJHZXRNZW1iZXJzOiBhc2tlZCBmb3IgJXUiLCBtdWx0aSk7CiAKQEAgLTEzNDAsMTMg KzEzMjIsMTIgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBN dWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0 IGNyZWF0aW9uLgogCSAqLwogcmV0cnk6Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZz ZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5 KG11bHRpKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNl dEN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNl dCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsK KwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfUkVMX0lE LCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJ b2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJ b2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTM3NywxNiAr MTM1OCwyMCBAQCByZXRyeToKIAkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRy eSh0bXBNWGFjdCk7CiAKIAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKLQkJCXNsb3Ru byA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVl LCB0bXBNWGFjdCk7CisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJ CWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9SRUxfSUQs IHBhZ2Vubyk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwor CQl9CiAKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwkJb2ZmcHRyID0gKE11bHRpWGFj dE9mZnNldCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJCW9mZnB0ciArPSBlbnRyeW5v OwogCQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOwogCiAJCWlmIChuZXh0TVhPZmZzZXQgPT0g MCkKIAkJewogCQkJLyogQ29ybmVyIGNhc2UgMjogbmV4dCBtdWx0aXhhY3QgaXMgc3RpbGwg YmVpbmcgZmlsbGVkIGluICovCi0JCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNM UlVMb2NrKTsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAJCQlwZ191c2xlZXAoMTAwMEwpOwogCQkJZ290byByZXRyeTsK QEAgLTEzOTQsMTQgKzEzNzksMTEgQEAgcmV0cnk6CiAKIAkJbGVuZ3RoID0gbmV4dE1YT2Zm c2V0IC0gb2Zmc2V0OwogCX0KLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xS VUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwlidWZmZXIgPSBJbnZh bGlkQnVmZmVyOwogCiAJcHRyID0gKE11bHRpWGFjdE1lbWJlciAqKSBwYWxsb2MobGVuZ3Ro ICogc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikpOwogCi0JLyogTm93IGdldCB0aGUgbWVtYmVy cyB0aGVtc2VsdmVzLiAqLwotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAl0cnVlbGVuZ3RoID0gMDsKIAlwcmV2X3BhZ2VubyA9 IC0xOwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKywgb2Zmc2V0KyspCkBAIC0xNDE3 LDEyICsxMzk5LDE0IEBAIHJldHJ5OgogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8p CiAJCXsKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0 bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVmZmVySXNWYWxpZChidWZmZXIp KQorCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9SRUxfSUQsIHBhZ2Vubyk7CisJCQlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQkJcHJldl9wYWdlbm8g PSBwYWdlbm87CiAJCX0KIAotCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShN dWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJl cm9mZik7CisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShi dWZmZXIpICsgbWVtYmVyb2ZmKTsKIAogCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4 YWN0cHRyKSkKIAkJewpAQCAtMTQzMywxNCArMTQxNywxMyBAQCByZXRyeToKIAogCQlmbGFn c29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlic2hpZnQgPSBNWE9m ZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwotCQlmbGFnc3B0ciA9ICh1aW50MzIgKikg KE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxh Z3NvZmYpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVy KSArIGZsYWdzb2ZmKTsKIAogCQlwdHJbdHJ1ZWxlbmd0aF0ueGlkID0gKnhhY3RwdHI7CiAJ CXB0clt0cnVlbGVuZ3RoXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFD VF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCQl0cnVlbGVuZ3RoKys7CiAJfQotCi0JTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWZmZXIpOwogCiAJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVtYmVycyBzaG91bGQg bm90IGhhcHBlbiAqLwogCUFzc2VydCh0cnVlbGVuZ3RoID4gMCk7CkBAIC0xODM0LDggKzE4 MTcsNiBAQCBNdWx0aVhhY3RTaG1lbVNpemUodm9pZCkKIAkJCSBtdWxfc2l6ZShzaXplb2Yo TXVsdGlYYWN0SWQpICogMiwgTWF4T2xkZXN0U2xvdCkpCiAKIAlzaXplID0gU0hBUkVEX01V TFRJWEFDVF9TVEFURV9TSVpFOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVT aG1lbVNpemUoTlVNX01VTFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTVVMVElYQUNUTUVNQkVSX0JV RkZFUlMsIDApKTsKIAogCXJldHVybiBzaXplOwogfQpAQCAtMTg0NywyMiArMTgyOCw2IEBA IE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCiAJZGVidWdfZWxvZzIoREVCVUcyLCAiU2hh cmVkIE1lbW9yeSBJbml0IGZvciBNdWx0aVhhY3QiKTsKIAotCU11bHRpWGFjdE9mZnNldEN0 bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzOwotCU11bHRp WGFjdE1lbWJlckN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNl ZGVzOwotCi0JU2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RPZmZzZXRDdGwsCi0JCQkJICAiTXVs dGlYYWN0T2Zmc2V0IiwgTlVNX01VTFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwLAotCQkJCSAg TXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsCi0JCQkJ ICBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExF Ul9NVUxUSVhBQ1RfT0ZGU0VUKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKE11bHRp WGFjdE9mZnNldEN0bCwgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UpOwotCVNpbXBsZUxy dUluaXQoTXVsdGlYYWN0TWVtYmVyQ3RsLAotCQkJCSAgIk11bHRpWGFjdE1lbWJlciIsIE5V TV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCwKLQkJCQkgIE11bHRpWGFjdE1lbWJlclNM UlVMb2NrLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLAotCQkJCSAgTFdUUkFOQ0hFX01VTFRJ WEFDVE1FTUJFUl9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJF Uik7Ci0JLyogZG9lc24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRlKCkgb3IgbWVldCBjcml0 ZXJpYSBmb3IgdW5pdCB0ZXN0cyAqLwotCiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0 YXRlIHN0cnVjdCAqLwogCU11bHRpWGFjdFN0YXRlID0gU2htZW1Jbml0U3RydWN0KCJTaGFy ZWQgTXVsdGlYYWN0IFN0YXRlIiwKIAkJCQkJCQkJCSBTSEFSRURfTVVMVElYQUNUX1NUQVRF X1NJWkUsCkBAIC0xODkzLDI5ICsxODU4LDE3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lk KQogdm9pZAogQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOwot Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZF KTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3Qg cGFnZSBvZiB0aGUgb2Zmc2V0cyBsb2cgKi8KLQlzbG90bm8gPSBaZXJvTXVsdGlYYWN0T2Zm c2V0UGFnZSgwLCBmYWxzZSk7Ci0KLQkvKiBNYWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAq LwotCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0J QXNzZXJ0KCFNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d KTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwotCi0JTFdM b2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwli dWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBmYWxzZSk7CisJRmx1c2hPbmVC dWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkvKiBD cmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIG1lbWJlcnMgbG9nICovCi0J c2xvdG5vID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoMCwgZmFsc2UpOwotCi0JLyogTWFr ZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlY YWN0TWVtYmVyQ3RsLCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5z aGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dE1lbWJlclNMUlVMb2NrKTsKKwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgw LCBmYWxzZSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0xOTI3LDMzICsxODgwLDM1IEBAIEJvb3RTdHJh cE11bHRpWGFjdCh2b2lkKQogICoKICAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQg ZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludAorc3Rh dGljIEJ1ZmZlcgogWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3 cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCi0Jc2xv dG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOwor CWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9SRUxfSUQs IHBhZ2Vubyk7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9n KQogCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9aRVJP X09GRl9QQUdFKTsKIAotCXJldHVybiBzbG90bm87CisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAog LyoKICAqIERpdHRvLCBmb3IgTXVsdGlYYWN0TWVtYmVyCiAgKi8KLXN0YXRpYyBpbnQKK3N0 YXRpYyBCdWZmZXIKIFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKGludCBwYWdlbm8sIGJvb2wg d3JpdGVYbG9nKQogewotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCXNs b3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vKTsK KwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfUkVMX0lE LCBwYWdlbm8pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJaWYgKHdyaXRlWGxv ZykKIAkJV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVS T19NRU1fUEFHRSk7CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAK IC8qCkBAIC0xOTc4LDIyICsxOTMzLDE0IEBAIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lk KQogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0U3RhdGUt Pm5leHRNWGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhp c3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICghU2ltcGxlTHJ1RG9lc1Bo eXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9SRUxfSUQsIHBhZ2Vubykp CiAJewotCQlpbnQJCQlzbG90bm87CisJCUJ1ZmZlcgkJCWJ1ZmZlcjsKIAotCQkvKgotCQkg KiBGb3J0dW5hdGVseSBmb3IgdXMsIFNpbXBsZUxydVdyaXRlUGFnZSBpcyBhbHJlYWR5IHBy ZXBhcmVkIHRvIGRlYWwKLQkJICogd2l0aCBjcmVhdGluZyBhIG5ldyBzZWdtZW50IGZpbGUg ZXZlbiBpZiB0aGUgcGFnZSB3ZSdyZSB3cml0aW5nIGlzCi0JCSAqIG5vdCB0aGUgZmlyc3Qg aW4gaXQsIHNvIHRoaXMgaXMgZW5vdWdoLgotCQkgKi8KLQkJc2xvdG5vID0gWmVyb011bHRp WGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShN dWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7CisJCWJ1ZmZlciA9IFplcm9NdWx0aVhhY3RP ZmZzZXRQYWdlKHBhZ2VubywgZmFsc2UpOworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwor CQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQotCi0JTFdMb2NrUmVsZWFzZShN dWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CiB9CiAKIC8qCkBAIC0yMDA3LDIxICsxOTU0LDYg QEAgTWF5YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQpCiB2b2lkCiBTdGFydHVwTXVsdGlYYWN0 KHZvaWQpCiB7Ci0JTXVsdGlYYWN0SWQgbXVsdGkgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1Y YWN0OwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9m ZnNldDsKLQlpbnQJCQlwYWdlbm87Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb2Zmc2V0J3Mg aWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCXBhZ2VubyA9IE11bHRp WGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKLQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJl ZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwotCi0JLyoKLQkgKiBJbml0aWFsaXpl IG1lbWJlcidzIGlkZWEgb2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlwYWdl bm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpOwotCU11bHRpWGFjdE1lbWJlckN0 bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdlbm87CiB9CiAKIC8qCkBAIC0y MDQ1LDE0ICsxOTc3LDcgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCW9sZGVzdE1YYWN0REIg PSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0REI7CiAJTFdMb2NrUmVsZWFzZShN dWx0aVhhY3RHZW5Mb2NrKTsKIAotCS8qIENsZWFuIHVwIG9mZnNldHMgc3RhdGUgKi8KLQlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwot Ci0JLyoKLQkgKiAoUmUtKUluaXRpYWxpemUgb3VyIGlkZWEgb2YgdGhlIGxhdGVzdCBwYWdl IG51bWJlciBmb3Igb2Zmc2V0cy4KLQkgKi8KLQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShuZXh0TVhhY3QpOwotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5sYXRl c3RfcGFnZV9udW1iZXIgPSBwYWdlbm87CisJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBh Z2Uob2Zmc2V0KTsKIAogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUg Y3VycmVudCBvZmZzZXRzIHBhZ2UuICBTZWUgbm90ZXMgaW4KQEAgLTIwNjUsMjkgKzE5OTAs MjAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0RW50cnkobmV4dE1YYWN0KTsKIAlpZiAoZW50cnlubyAhPSAwKQogCXsKLQkJaW50CQkJ c2xvdG5vOwogCQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwkJQnVmZmVyCQlidWZmZXI7 CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8sIHRydWUsIG5leHRNWGFjdCk7Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJ CWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9SRUxfSUQs IHBhZ2Vubyk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVy KTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAKIAkJTWVtU2V0KG9mZnB0ciwgMCwgQkxDS1Na IC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkpOwogCi0JCU11bHRpWGFj dE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJr QnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwog CX0KIAotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwotCi0JLyog QW5kIHRoZSBzYW1lIGZvciBtZW1iZXJzICovCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RN ZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogKFJlLSlJbml0aWFs aXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIgZm9yIG1lbWJlcnMuCi0J ICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKLQlNdWx0aVhh Y3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwotCiAJ LyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IG1lbWJlcnMg cGFnZS4gIFNlZSBub3RlcyBpbgogCSAqIFRyaW1DTE9HKCkgZm9yIG1vdGl2YXRpb24uCkBA IC0yMDk1LDE0ICsyMDExLDE0IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAlmbGFnc29mZiA9 IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCWlmIChmbGFnc29mZiAhPSAwKQog CXsKLQkJaW50CQkJc2xvdG5vOwogCQlUcmFuc2FjdGlvbklkICp4aWRwdHI7CiAJCWludAkJ CW1lbWJlcm9mZjsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJbWVtYmVyb2ZmID0gTVhPZmZz ZXRUb01lbWJlck9mZnNldChvZmZzZXQpOwotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFn ZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgb2Zmc2V0KTsKLQkJeGlkcHRy ID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+ cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1 QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9SRUxfSUQsIHBhZ2Vubyk7CisJCUxvY2tC dWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQl4aWRwdHIgPSAoVHJh bnNhY3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgbWVtYmVyb2ZmKTsKIAog CQlNZW1TZXQoeGlkcHRyLCAwLCBCTENLU1ogLSBtZW1iZXJvZmYpOwogCkBAIC0yMTEyLDEx ICsyMDI4LDEwIEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAkJICogd3JpdGluZy4KIAkJICov CiAKLQkJTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9 IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CiAJfQogCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJV TG9jayk7Ci0KIAkvKiBzaWduYWwgdGhhdCB3ZSdyZSBvZmZpY2lhbGx5IHVwICovCiAJTFdM b2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFj dFN0YXRlLT5maW5pc2hlZFN0YXJ0dXAgPSB0cnVlOwpAQCAtMjE0OCwyNSArMjA2Myw2IEBA IE11bHRpWGFjdEdldENoZWNrcHRNdWx0aShib29sIGlzX3NodXRkb3duLAogCQkJCSpuZXh0 TXVsdGksICpuZXh0TXVsdGlPZmZzZXQsICpvbGRlc3RNdWx0aSwgKm9sZGVzdE11bHRpREIp OwogfQogCi0vKgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcg c2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludE11bHRpWGFj dCh2b2lkKQotewotCVRSQUNFX1BPU1RHUkVTUUxfTVVMVElYQUNUX0NIRUNLUE9JTlRfU1RB UlQodHJ1ZSk7Ci0KLQkvKgotCSAqIFdyaXRlIGRpcnR5IE11bHRpWGFjdCBwYWdlcyB0byBk aXNrLiAgVGhpcyBtYXkgcmVzdWx0IGluIHN5bmMgcmVxdWVzdHMKLQkgKiBxdWV1ZWQgZm9y IGxhdGVyIGhhbmRsaW5nIGJ5IFByb2Nlc3NTeW5jUmVxdWVzdHMoKSwgYXMgcGFydCBvZiB0 aGUKLQkgKiBjaGVja3BvaW50LgotCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFj dE9mZnNldEN0bCwgdHJ1ZSk7Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0TWVtYmVy Q3RsLCB0cnVlKTsKLQotCVRSQUNFX1BPU1RHUkVTUUxfTVVMVElYQUNUX0NIRUNLUE9JTlRf RE9ORSh0cnVlKTsKLX0KLQogLyoKICAqIFNldCB0aGUgbmV4dC10by1iZS1hc3NpZ25lZCBN dWx0aVhhY3RJZCBhbmQgb2Zmc2V0CiAgKgpAQCAtMjQxNSwxMiArMjMxMSw4IEBAIEV4dGVu ZE11bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSkKIAogCXBhZ2VubyA9IE11bHRp WGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0 T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFu ZCBtYWtlIGFuIFhMT0cgZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvTXVsdGlYYWN0T2Zmc2V0 UGFnZShwYWdlbm8sIHRydWUpOwotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRT TFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvTXVsdGlYYWN0T2Zmc2V0UGFn ZShwYWdlbm8sIHRydWUpKTsKIH0KIAogLyoKQEAgLTI0NTYsMTIgKzIzNDgsOCBAQCBFeHRl bmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJz KQogCiAJCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpOwogCi0JCQlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwot CiAJCQkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtlIGFuIFhMT0cgZW50cnkgYWJvdXQgaXQg Ki8KLQkJCVplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQkJCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOworCQkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShwYWdlbm8sIHRydWUpKTsKIAkJfQog CiAJCS8qCkBAIC0yNzM2LDggKzI2MjQsOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0 aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJTXVsdGlYYWN0T2Zm c2V0IG9mZnNldDsKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJZW50cnlubzsKLQlpbnQJCQlz bG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJQnVmZmVyCQlidWZmZXI7CisJ UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0b3IoU0xSVV9NVUxU SVhBQ1RfT0ZGU0VUX1JFTF9JRCk7CiAKIAlBc3NlcnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlz aGVkU3RhcnR1cCk7CiAKQEAgLTI3NDUsMjAgKzI2MzQsMTkgQEAgZmluZF9tdWx0aXhhY3Rf c3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogCWVu dHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCiAJLyoKLQkgKiBX cml0ZSBvdXQgZGlydHkgZGF0YSwgc28gUGh5c2ljYWxQYWdlRXhpc3RzIGNhbiB3b3JrIGNv cnJlY3RseS4KKwkgKiBDb3BlIHdpdGggbWlzc2luZy9ib2d1cyBvbGRlc3QgTXVsdGlYYWN0 IGluIGluY29uc2lzdGVudCBzdGF0ZXMgKHNlZQorCSAqIGNvbW1pdCAwNjhjZmFkZjkpLgog CSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFjdE9mZnNldEN0bCwgdHJ1ZSk7Ci0J U2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0TWVtYmVyQ3RsLCB0cnVlKTsKLQotCWlmICgh U2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFjdE9mZnNldEN0bCwgcGFn ZW5vKSkKKwlpZiAoIUJ1ZmZlclByb2JlKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHBhZ2Vu bykgJiYKKwkJIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTTFJVX01VTFRJWEFD VF9PRkZTRVRfUkVMX0lELCBwYWdlbm8pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBsb2Nr IGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCi0Jc2xvdG5v ID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8sIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9m ZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9SRUxfSUQsIHBhZ2Vubyk7CisJTG9j a0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAlvZmZwdHIgKz0gZW50cnlu bzsKIAlvZmZzZXQgPSAqb2ZmcHRyOwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0 U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCSpyZXN1bHQg PSBvZmZzZXQ7CiAJcmV0dXJuIHRydWU7CkBAIC0yODY1LDEyICsyNzUzLDEzIEBAIHR5cGVk ZWYgc3RydWN0IG14dHJ1bmNpbmZvCiAgKgkJVGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIHRo ZSBlYXJsaWVzdCBleGlzdGluZyBwYWdlIG51bWJlci4KICAqLwogc3RhdGljIGJvb2wKLVNs cnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBp bnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoT2lk IHJlbF9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJ CSAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQogewogCW14dHJ1 bmNpbmZvICp0cnVuYyA9IChteHRydW5jaW5mbyAqKSBkYXRhOwogCiAJaWYgKHRydW5jLT5l YXJsaWVzdEV4aXN0aW5nUGFnZSA9PSAtMSB8fAotCQljdGwtPlBhZ2VQcmVjZWRlcyhzZWdw YWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UpKQorCQlQYWdlUHJlY2VkZXMoc2Vn cGFnZSwgdHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlKSkKIAl7CiAJCXRydW5jLT5lYXJs aWVzdEV4aXN0aW5nUGFnZSA9IHNlZ3BhZ2U7CiAJfQpAQCAtMjkwMiw3ICsyNzkxLDcgQEAg UGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKE11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQs IE11bHRpWGFjdE9mZnNldCBuZXdPbGRlc3QKIAl3aGlsZSAoc2VnbWVudCAhPSBlbmRzZWdt ZW50KQogCXsKIAkJZWxvZyhERUJVRzIsICJ0cnVuY2F0aW5nIG11bHRpeGFjdCBtZW1iZXJz IHNlZ21lbnQgJXgiLCBzZWdtZW50KTsKLQkJU2xydURlbGV0ZVNlZ21lbnQoTXVsdGlYYWN0 TWVtYmVyQ3RsLCBzZWdtZW50KTsKKwkJU2xydURlbGV0ZVNlZ21lbnQoU0xSVV9NVUxUSVhB Q1RfTUVNQkVSX1JFTF9JRCwgc2VnbWVudCk7CiAKIAkJLyogbW92ZSB0byBuZXh0IHNlZ21l bnQsIGhhbmRsaW5nIHdyYXBhcm91bmQgY29ycmVjdGx5ICovCiAJCWlmIChzZWdtZW50ID09 IG1heHNlZ21lbnQpCkBAIC0yOTI1LDcgKzI4MTQsOCBAQCBQZXJmb3JtT2Zmc2V0c1RydW5j YXRpb24oTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE11bHRpWGFjdElkIG5ld09sZGVzdE11 bHRpKQogCSAqIGRpZG4ndCBzdWJ0cmFjdCBvbmUsIHdlJ2QgdHJpZ2dlciBTaW1wbGVMcnVU cnVuY2F0ZSdzIHdyYXBhcm91bmQKIAkgKiBkZXRlY3Rpb24uCiAJICovCi0JU2ltcGxlTHJ1 VHJ1bmNhdGUoTXVsdGlYYWN0T2Zmc2V0Q3RsLAorCVNpbXBsZUxydVRydW5jYXRlKFNMUlVf TVVMVElYQUNUX09GRlNFVF9SRUxfSUQsCisJCQkJCSAgTXVsdGlYYWN0T2Zmc2V0UGFnZVBy ZWNlZGVzLAogCQkJCQkgIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKFByZXZpb3VzTXVsdGlY YWN0SWQobmV3T2xkZXN0TXVsdGkpKSk7CiB9CiAKQEAgLTI5OTksNyArMjg4OSw5IEBAIFRy dW5jYXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xk ZXN0TXVsdGlEQikKIAkgKiBiZWVuIHRydW5jYXRlZCBhd2F5LCBhbmQgd2UgY3Jhc2hlZCBi ZWZvcmUgdXBkYXRpbmcgb2xkZXN0TXVsdGkuCiAJICovCiAJdHJ1bmMuZWFybGllc3RFeGlz dGluZ1BhZ2UgPSAtMTsKLQlTbHJ1U2NhbkRpcmVjdG9yeShNdWx0aVhhY3RPZmZzZXRDdGws IFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QsICZ0cnVuYyk7CisJU2xydVNjYW5EaXJlY3Rv cnkoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX1JFTF9JRCwKKwkJCQkJICBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXMsCisJCQkJCSAgU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdCwgJnRy dW5jKTsKIAllYXJsaWVzdCA9IHRydW5jLmVhcmxpZXN0RXhpc3RpbmdQYWdlICogTVVMVElY QUNUX09GRlNFVFNfUEVSX1BBR0U7CiAJaWYgKGVhcmxpZXN0IDwgRmlyc3RNdWx0aVhhY3RJ ZCkKIAkJZWFybGllc3QgPSBGaXJzdE11bHRpWGFjdElkOwpAQCAtMzEzMSwyNCArMzAyMyw2 IEBAIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikK IAkJCQkJCQkJbXVsdGkyICsgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgLSAxKSk7CiB9 CiAKLS8qCi0gKiBEZWNpZGUgd2hldGhlciBhIE11bHRpWGFjdE1lbWJlciBwYWdlIG51bWJl ciBpcyAib2xkZXIiIGZvciB0cnVuY2F0aW9uCi0gKiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5v ICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4K LSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQgcGFn ZTEsIGludCBwYWdlMikKLXsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MTsKLQlNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0MjsKLQotCW9mZnNldDEgPSAoKE11bHRpWGFjdE9mZnNldCkgcGFn ZTEpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0Jb2Zmc2V0MiA9ICgoTXVsdGlY YWN0T2Zmc2V0KSBwYWdlMikgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQotCXJl dHVybiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwgb2Zmc2V0MikgJiYKLQkJ CU11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsCi0JCQkJCQkJCQlvZmZzZXQyICsg TVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSAxKSk7Ci19Ci0KIC8qCiAgKiBEZWNpZGUg d2hpY2ggb2YgdHdvIE11bHRpWGFjdElkcyBpcyBlYXJsaWVyLgogICoKQEAgLTMyNDMsMzIg KzMxMTcsMTggQEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ aWYgKGluZm8gPT0gWExPR19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSkKIAl7CiAJCWludAkJ CXBhZ2VubzsKLQkJaW50CQkJc2xvdG5vOwogCiAJCW1lbWNweSgmcGFnZW5vLCBYTG9nUmVj R2V0RGF0YShyZWNvcmQpLCBzaXplb2YoaW50KSk7CiAKLQkJTFdMb2NrQWNxdWlyZShNdWx0 aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJv TXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQ YWdlKE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKLQkJQXNzZXJ0KCFNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCQlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlciha ZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKSk7CiAJfQogCWVsc2UgaWYg KGluZm8gPT0gWExPR19NVUxUSVhBQ1RfWkVST19NRU1fUEFHRSkKIAl7CiAJCWludAkJCXBh Z2VubzsKLQkJaW50CQkJc2xvdG5vOwogCiAJCW1lbWNweSgmcGFnZW5vLCBYTG9nUmVjR2V0 RGF0YShyZWNvcmQpLCBzaXplb2YoaW50KSk7CiAKLQkJTFdMb2NrQWNxdWlyZShNdWx0aVhh Y3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJvTXVs dGlYYWN0TWVtYmVyUGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdl KE11bHRpWGFjdE1lbWJlckN0bCwgc2xvdG5vKTsKLQkJQXNzZXJ0KCFNdWx0aVhhY3RNZW1i ZXJDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCQlMV0xvY2tSZWxlYXNl KE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJv TXVsdGlYYWN0TWVtYmVyUGFnZShwYWdlbm8sIGZhbHNlKSk7CiAJfQogCWVsc2UgaWYgKGlu Zm8gPT0gWExPR19NVUxUSVhBQ1RfQ1JFQVRFX0lEKQogCXsKQEAgLTMzMDIsNyArMzE2Miw2 IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWVsc2UgaWYg KGluZm8gPT0gWExPR19NVUxUSVhBQ1RfVFJVTkNBVEVfSUQpCiAJewogCQl4bF9tdWx0aXhh Y3RfdHJ1bmNhdGUgeGxyZWM7Ci0JCWludAkJCXBhZ2VubzsKIAogCQltZW1jcHkoJnhscmVj LCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLAogCQkJICAgU2l6ZU9mTXVsdGlYYWN0VHJ1bmNh dGUpOwpAQCAtMzMyOCwxMyArMzE4Nyw2IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQogCiAJCVBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbih4bHJlYy5zdGFy dFRydW5jTWVtYiwgeGxyZWMuZW5kVHJ1bmNNZW1iKTsKIAotCQkvKgotCQkgKiBEdXJpbmcg WExPRyByZXBsYXksIGxhdGVzdF9wYWdlX251bWJlciBpc24ndCBuZWNlc3NhcmlseSBzZXQg dXAKLQkJICogeWV0OyBpbnNlcnQgYSBzdWl0YWJsZSB2YWx1ZSB0byBieXBhc3MgdGhlIHNh bml0eSB0ZXN0IGluCi0JCSAqIFNpbXBsZUxydVRydW5jYXRlLgotCQkgKi8KLQkJcGFnZW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoeGxyZWMuZW5kVHJ1bmNPZmYpOwotCQlNdWx0 aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwog CQlQZXJmb3JtT2Zmc2V0c1RydW5jYXRpb24oeGxyZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMu ZW5kVHJ1bmNPZmYpOwogCiAJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0VHJ1bmNhdGlvbkxv Y2spOwpAQCAtMzQwNywyMSArMzI1OSwzIEBAIHBnX2dldF9tdWx0aXhhY3RfbWVtYmVycyhQ R19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjeHQpOwogfQotCi0v KgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgb2Zmc2V0cyBmaWxlcy4KLSAq LwotaW50Ci1tdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRh ZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE9m ZnNldEN0bCwgZnRhZywgcGF0aCk7Ci19Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5j LmMgdG8gc3luYyBtZW1iZXJzIGZpbGVzLgotICovCi1pbnQKLW11bHRpeGFjdG1lbWJlcnNz eW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVy biBTbHJ1U3luY0ZpbGVUYWcoTXVsdGlYYWN0TWVtYmVyQ3RsLCBmdGFnLCBwYXRoKTsKLX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwppbmRleCBiNjVjYjQ5ZDdmZi4uMTJlZWNh NjdlMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKQEAgLTEsNDEgKzEsOSBA QAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogc2xydS5jCi0gKgkJU2ltcGxlIExS VSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxlcworICoJCVNpbXBs ZSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxlcwogICoKLSAqIFdl IHVzZSBhIHNpbXBsZSBsZWFzdC1yZWNlbnRseS11c2VkIHNjaGVtZSB0byBtYW5hZ2UgYSBw b29sIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMuICBVbmRlciBvcmRpbmFyeSBjaXJjdW1zdGFuY2Vz IHdlIGV4cGVjdCB0aGF0IHdyaXRlCi0gKiB0cmFmZmljIHdpbGwgb2NjdXIgbW9zdGx5IHRv IHRoZSBsYXRlc3QgcGFnZSAoYW5kIHRvIHRoZSBqdXN0LXByaW9yCi0gKiBwYWdlLCBzb29u IGFmdGVyIGEgcGFnZSB0cmFuc2l0aW9uKS4gIFJlYWQgdHJhZmZpYyB3aWxsIHByb2JhYmx5 IHRvdWNoCi0gKiBhIGxhcmdlciBzcGFuIG9mIHBhZ2VzLCBidXQgaW4gYW55IGNhc2UgYSBm YWlybHkgc21hbGwgbnVtYmVyIG9mIHBhZ2UKLSAqIGJ1ZmZlcnMgc2hvdWxkIGJlIHN1ZmZp Y2llbnQuICBTbywgd2UganVzdCBzZWFyY2ggdGhlIGJ1ZmZlcnMgdXNpbmcgcGxhaW4KLSAq IGxpbmVhciBzZWFyY2g7IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBoYXNodGFibGUgb3IgYW55 dGhpbmcgZmFuY3kuCi0gKiBUaGUgbWFuYWdlbWVudCBhbGdvcml0aG0gaXMgc3RyYWlnaHQg TFJVIGV4Y2VwdCB0aGF0IHdlIHdpbGwgbmV2ZXIgc3dhcAotICogb3V0IHRoZSBsYXRlc3Qg cGFnZSAoc2luY2Ugd2Uga25vdyBpdCdzIGdvaW5nIHRvIGJlIGhpdCBhZ2FpbiBldmVudHVh bGx5KS4KLSAqCi0gKiBXZSB1c2UgYSBjb250cm9sIExXTG9jayB0byBwcm90ZWN0IHRoZSBz aGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBwbHVzCi0gKiBwZXItYnVmZmVyIExXTG9ja3MgdGhh dCBzeW5jaHJvbml6ZSBJL08gZm9yIGVhY2ggYnVmZmVyLiAgVGhlIGNvbnRyb2wgbG9jawot ICogbXVzdCBiZSBoZWxkIHRvIGV4YW1pbmUgb3IgbW9kaWZ5IGFueSBzaGFyZWQgc3RhdGUu ICBBIHByb2Nlc3MgdGhhdCBpcwotICogcmVhZGluZyBpbiBvciB3cml0aW5nIG91dCBhIHBh Z2UgYnVmZmVyIGRvZXMgbm90IGhvbGQgdGhlIGNvbnRyb2wgbG9jaywKLSAqIG9ubHkgdGhl IHBlci1idWZmZXIgbG9jayBmb3IgdGhlIGJ1ZmZlciBpdCBpcyB3b3JraW5nIG9uLgotICoK LSAqICJIb2xkaW5nIHRoZSBjb250cm9sIGxvY2siIG1lYW5zIGV4Y2x1c2l2ZSBsb2NrIGlu IGFsbCBjYXNlcyBleGNlcHQgZm9yCi0gKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgp OyBzZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQoKSBmb3IKLSAqIHRoZSBpbXBs aWNhdGlvbnMgb2YgdGhhdC4KLSAqCi0gKiBXaGVuIGluaXRpYXRpbmcgSS9PIG9uIGEgYnVm ZmVyLCB3ZSBhY3F1aXJlIHRoZSBwZXItYnVmZmVyIGxvY2sgZXhjbHVzaXZlbHkKLSAqIGJl Zm9yZSByZWxlYXNpbmcgdGhlIGNvbnRyb2wgbG9jay4gIFRoZSBwZXItYnVmZmVyIGxvY2sg aXMgcmVsZWFzZWQgYWZ0ZXIKLSAqIGNvbXBsZXRpbmcgdGhlIEkvTywgcmUtYWNxdWlyaW5n IHRoZSBjb250cm9sIGxvY2ssIGFuZCB1cGRhdGluZyB0aGUgc2hhcmVkCi0gKiBzdGF0ZS4g IChEZWFkbG9jayBpcyBub3QgcG9zc2libGUgaGVyZSwgYmVjYXVzZSB3ZSBuZXZlciB0cnkg dG8gaW5pdGlhdGUKLSAqIEkvTyB3aGVuIHNvbWVvbmUgZWxzZSBpcyBhbHJlYWR5IGRvaW5n IEkvTyBvbiB0aGUgc2FtZSBidWZmZXIuKQotICogVG8gd2FpdCBmb3IgSS9PIHRvIGNvbXBs ZXRlLCByZWxlYXNlIHRoZSBjb250cm9sIGxvY2ssIGFjcXVpcmUgdGhlCi0gKiBwZXItYnVm ZmVyIGxvY2sgaW4gc2hhcmVkIG1vZGUsIGltbWVkaWF0ZWx5IHJlbGVhc2UgdGhlIHBlci1i dWZmZXIgbG9jaywKLSAqIHJlYWNxdWlyZSB0aGUgY29udHJvbCBsb2NrLCBhbmQgdGhlbiBy ZWNoZWNrIHN0YXRlIChzaW5jZSBhcmJpdHJhcnkgdGhpbmdzCi0gKiBjb3VsZCBoYXZlIGhh cHBlbmVkIHdoaWxlIHdlIGRpZG4ndCBoYXZlIHRoZSBsb2NrKS4KLSAqCi0gKiBBcyB3aXRo IHRoZSByZWd1bGFyIGJ1ZmZlciBtYW5hZ2VyLCBpdCBpcyBwb3NzaWJsZSBmb3IgYW5vdGhl ciBwcm9jZXNzCi0gKiB0byByZS1kaXJ0eSBhIHBhZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVp bmcgd3JpdHRlbiBvdXQuICBUaGlzIGlzIGhhbmRsZWQKLSAqIGJ5IHJlLXNldHRpbmcgdGhl IHBhZ2UncyBwYWdlX2RpcnR5IGZsYWcuCisgKiBYWFggd3JpdGUgbWUKICAqCiAgKgogICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCkBAIC02MCw1NjEgKzI4LDgxIEBACiAjaW5jbHVkZSAic3RvcmFn ZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKIAotI2RlZmluZSBTbHJ1Rmls ZU5hbWUoY3RsLCBwYXRoLCBzZWcpIFwKLQlzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIl cy8lMDRYIiwgKGN0bCktPkRpciwgc2VnKQorI2RlZmluZSBTbHJ1RmlsZU5hbWUocmVsX2lk LCBwYXRoLCBzZWcpCQkJCQkJCVwKKwlzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIlcy8l MDRYIiwgZGVmc1socmVsX2lkKV0ucGF0aCwgc2VnKQorCitzdHJ1Y3QgU2xydURlZiB7CisJ Y29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpwYXRoOworCWJvb2wgc3luY2hyb25p emU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IFNscnVEZWYgZGVmc1tdID0geworCVtT TFJVX0NMT0dfUkVMX0lEXSA9IHsKKwkJLm5hbWUgPSAiWGFjdCIsCisJCS5wYXRoID0gInBn X3hhY3QiLAorCQkuc3luY2hyb25pemUgPSB0cnVlLAorCX0sCisJW1NMUlVfU1VCVFJBTlNf UkVMX0lEXSA9IHsKKwkJLm5hbWUgPSAiU3VidHJhbnMiLAorCQkucGF0aCA9ICJwZ19zdWJ0 cmFucyIsCisJfSwKKwlbU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX1JFTF9JRF0gPSB7CisJCS5u YW1lID0gIk11bHRpWGFjdE9mZnNldCIsCisJCS5wYXRoID0gInBnX211bHRpeGFjdC9vZmZz ZXRzIiwKKwkJLnN5bmNocm9uaXplID0gdHJ1ZSwKKwl9LAorCVtTTFJVX01VTFRJWEFDVF9N RU1CRVJfUkVMX0lEXSA9IHsKKwkJLm5hbWUgPSAiTXVsdGlYYWN0TWVtYmVyIiwKKwkJLnBh dGggPSAicGdfbXVsdGl4YWN0L21lbWJlcnMiLAorCQkuc3luY2hyb25pemUgPSB0cnVlLAor CX0sCisJW1NMUlVfQ09NTUlUVFNfUkVMX0lEXSA9IHsKKwkJLm5hbWUgPSAiQ29tbWl0VHMi LAorCQkucGF0aCA9ICJwZ19jb21taXRfdHMiLAorCQkuc3luY2hyb25pemUgPSB0cnVlLAor CX0sCisJW1NMUlVfU0VSSUFMX1JFTF9JRF0gPSB7CisJCS5uYW1lID0gIlNlcmlhbCIsCisJ CS5wYXRoID0gInBnX3NlcmlhbCIsCisJfSwKKwlbU0xSVV9OT1RJRllfUkVMX0lEXSA9IHsK KwkJLm5hbWUgPSAiTm90aWZ5IiwKKwkJLnBhdGggPSAicGdfbm90aWZ5IiwKKwl9LAorfTsK IAogLyoKLSAqIER1cmluZyBTaW1wbGVMcnVXcml0ZUFsbCgpLCB3ZSB3aWxsIHVzdWFsbHkg bm90IG5lZWQgdG8gd3JpdGUgbW9yZSB0aGFuIG9uZQotICogb3IgdHdvIHBoeXNpY2FsIGZp bGVzLCBidXQgd2UgbWF5IG5lZWQgdG8gd3JpdGUgc2V2ZXJhbCBwYWdlcyBwZXIgZmlsZS4g IFdlCi0gKiBjYW4gY29uc29saWRhdGUgdGhlIEkvTyByZXF1ZXN0cyBieSBsZWF2aW5nIGZp bGVzIG9wZW4gdW50aWwgY29udHJvbCByZXR1cm5zCi0gKiB0byBTaW1wbGVMcnVXcml0ZUFs bCgpLiAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZW1lbWJlcnMgd2hpY2ggZmlsZXMgYXJlIG9w ZW4uCisgKiBXZSdsbCBtYWludGFpbiBhIGxpdHRsZSBjYWNoZSBvZiByZWNlbnRseSBzZWVu IGJ1ZmZlcnMsIHRvIHRyeSB0byBhdm9pZCB0aGUKKyAqIGJ1ZmZlciBtYXBwaW5nIHRhYmxl IG9uIHJlcGVhdCBhY2Nlc3MgKGllIHRoZSBidXN5IGVuZCBvZiB0aGUgQ0xPRykuICBPbmUK KyAqIGVudHJ5IHBlciBTTFJVIHJlbGF0aW9uLgogICovCi0jZGVmaW5lIE1BWF9XUklURUFM TF9CVUZGRVJTCTE2CitzdHJ1Y3QgU2xydVJlY2VudEJ1ZmZlciB7CisJaW50CQkJcGFnZW5v OworCUJ1ZmZlcgkJcmVjZW50X2J1ZmZlcjsKK307CiAKLXR5cGVkZWYgc3RydWN0IFNscnVX cml0ZUFsbERhdGEKLXsKLQlpbnQJCQludW1fZmlsZXM7CQkvKiAjIGZpbGVzIGFjdHVhbGx5 IG9wZW4gKi8KLQlpbnQJCQlmZFtNQVhfV1JJVEVBTExfQlVGRkVSU107CS8qIHRoZWlyIEZE J3MgKi8KLQlpbnQJCQlzZWdub1tNQVhfV1JJVEVBTExfQlVGRkVSU107CS8qIHRoZWlyIGxv ZyBzZWcjcyAqLwotfSBTbHJ1V3JpdGVBbGxEYXRhOwotCi10eXBlZGVmIHN0cnVjdCBTbHJ1 V3JpdGVBbGxEYXRhICpTbHJ1V3JpdGVBbGw7CitzdGF0aWMgc3RydWN0IFNscnVSZWNlbnRC dWZmZXIgc2xydV9yZWNlbnRfYnVmZmVyc1tsZW5ndGhvZihkZWZzKV07CiAKIC8qCi0gKiBQ b3B1bGF0ZSBhIGZpbGUgdGFnIGRlc2NyaWJpbmcgYSBzZWdtZW50IGZpbGUuICBXZSBvbmx5 IHVzZSB0aGUgc2VnbWVudAotICogbnVtYmVyLCBzaW5jZSB3ZSBjYW4gZGVyaXZlIGV2ZXJ5 dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhhdmluZyBzZXBhcmF0ZQotICogc3luYyBoYW5kbGVy IGZ1bmN0aW9ucyBmb3IgY2xvZywgbXVsdGl4YWN0IGV0Yy4KKyAqIFBvcHVsYXRlIGEgZmls ZSB0YWcgaWRlbnRpZnlpbmcgYW4gU0xSVSBzZWdtZW50IGZpbGUuCiAgKi8KLSNkZWZpbmUg SU5JVF9TTFJVRklMRVRBRyhhLHh4X2hhbmRsZXIseHhfc2Vnbm8pIFwKKyNkZWZpbmUgSU5J VF9TTFJVRklMRVRBRyhhLHh4X3JlbF9udW1iZXIseHhfc2Vnbm8pIFwKICggXAogCW1lbXNl dCgmKGEpLCAwLCBzaXplb2YoRmlsZVRhZykpLCBcCi0JKGEpLmhhbmRsZXIgPSAoeHhfaGFu ZGxlciksIFwKKwkoYSkuaGFuZGxlciA9IFNZTkNfSEFORExFUl9TTFJVLCBcCisJKGEpLnJs b2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHh4X3JlbF9udW1iZXIpLCBcCiAJKGEpLnNl Z25vID0gKHh4X3NlZ25vKSBcCiApCiAKLS8qCi0gKiBNYWNybyB0byBtYXJrIGEgYnVmZmVy IHNsb3QgIm1vc3QgcmVjZW50bHkgdXNlZCIuICBOb3RlIG11bHRpcGxlIGV2YWx1YXRpb24K LSAqIG9mIGFyZ3VtZW50cyEKLSAqCi0gKiBUaGUgcmVhc29uIGZvciB0aGUgaWYtdGVzdCBp cyB0aGF0IHRoZXJlIGFyZSBvZnRlbiBtYW55IGNvbnNlY3V0aXZlCi0gKiBhY2Nlc3NlcyB0 byB0aGUgc2FtZSBwYWdlIChwYXJ0aWN1bGFybHkgdGhlIGxhdGVzdCBwYWdlKS4gIEJ5IHN1 cHByZXNzaW5nCi0gKiB1c2VsZXNzIGluY3JlbWVudHMgb2YgY3VyX2xydV9jb3VudCwgd2Ug cmVkdWNlIHRoZSBwcm9iYWJpbGl0eSB0aGF0IG9sZAotICogcGFnZXMnIGNvdW50cyB3aWxs ICJ3cmFwIGFyb3VuZCIgYW5kIG1ha2UgdGhlbSBhcHBlYXIgcmVjZW50bHkgdXNlZC4KLSAq Ci0gKiBXZSBhbGxvdyB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgY29uY3VycmVudGx5IGJ5 IG11bHRpcGxlIHByb2Nlc3NlcyB3aXRoaW4KLSAqIFNpbXBsZUxydVJlYWRQYWdlX1JlYWRP bmx5KCkuICBBcyBsb25nIGFzIGludCByZWFkcyBhbmQgd3JpdGVzIGFyZSBhdG9taWMsCi0g KiB0aGlzIHNob3VsZCBub3QgY2F1c2UgYW55IGNvbXBsZXRlbHktYm9ndXMgdmFsdWVzIHRv IGVudGVyIHRoZSBjb21wdXRhdGlvbi4KLSAqIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIGZv ciBlaXRoZXIgY3VyX2xydV9jb3VudCBvciBpbmRpdmlkdWFsCi0gKiBwYWdlX2xydV9jb3Vu dCBlbnRyaWVzIHRvIGJlICJyZXNldCIgdG8gbG93ZXIgdmFsdWVzIHRoYW4gdGhleSBzaG91 bGQgaGF2ZSwKLSAqIGluIGNhc2UgYSBwcm9jZXNzIGlzIGRlbGF5ZWQgd2hpbGUgaXQgZXhl Y3V0ZXMgdGhpcyBtYWNyby4gIFdpdGggY2FyZSBpbgotICogU2xydVNlbGVjdExSVVBhZ2Uo KSwgdGhpcyBkb2VzIGxpdHRsZSBoYXJtLCBhbmQgaW4gYW55IGNhc2UgdGhlIGFic29sdXRl Ci0gKiB3b3JzdCBwb3NzaWJsZSBjb25zZXF1ZW5jZSBpcyBhIG5vbm9wdGltYWwgY2hvaWNl IG9mIHBhZ2UgdG8gZXZpY3QuICBUaGUKLSAqIGdhaW4gZnJvbSBhbGxvd2luZyBjb25jdXJy ZW50IHJlYWRzIG9mIFNMUlUgcGFnZXMgc2VlbXMgd29ydGggaXQuCi0gKi8KLSNkZWZpbmUg U2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3RubykJXAotCWRvIHsgXAotCQlpbnQJCW5l d19scnVfY291bnQgPSAoc2hhcmVkKS0+Y3VyX2xydV9jb3VudDsgXAotCQlpZiAobmV3X2xy dV9jb3VudCAhPSAoc2hhcmVkKS0+cGFnZV9scnVfY291bnRbc2xvdG5vXSkgeyBcCi0JCQko c2hhcmVkKS0+Y3VyX2xydV9jb3VudCA9ICsrbmV3X2xydV9jb3VudDsgXAotCQkJKHNoYXJl ZCktPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSBuZXdfbHJ1X2NvdW50OyBcCi0JCX0gXAot CX0gd2hpbGUgKDApCi0KLS8qIFNhdmVkIGluZm8gZm9yIFNscnVSZXBvcnRJT0Vycm9yICov Ci10eXBlZGVmIGVudW0KLXsKLQlTTFJVX09QRU5fRkFJTEVELAotCVNMUlVfU0VFS19GQUlM RUQsCi0JU0xSVV9SRUFEX0ZBSUxFRCwKLQlTTFJVX1dSSVRFX0ZBSUxFRCwKLQlTTFJVX0ZT WU5DX0ZBSUxFRCwKLQlTTFJVX0NMT1NFX0ZBSUxFRAotfSBTbHJ1RXJyb3JDYXVzZTsKLQot c3RhdGljIFNscnVFcnJvckNhdXNlIHNscnVfZXJyY2F1c2U7Ci1zdGF0aWMgaW50CXNscnVf ZXJybm87Ci0KLQotc3RhdGljIHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGws IGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3Rs LCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1 Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKTsKLXN0YXRpYyBib29s IFNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xv dG5vKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwg aW50IHBhZ2VubywgaW50IHNsb3RubywKLQkJCQkJCQkJICBTbHJ1V3JpdGVBbGwgZmRhdGEp Owotc3RhdGljIHZvaWQgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdl bm8sIFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2Uo U2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotCi1zdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNi RGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK3N0YXRpYyBib29s IFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoT2lkIHJlbF9pZCwKKwkJCQkJCQkJCSAgU2xy dVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCSAgY2hhciAq ZmlsZW5hbWUsCiAJCQkJCQkJCQkgIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLXN0YXRp YyB2b2lkIFNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdu byk7Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5Ci0gKi8KLQot U2l6ZQotU2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNucykKLXsKLQlT aXplCQlzejsKLQotCS8qIHdlIGFzc3VtZSBuc2xvdHMgaXNuJ3Qgc28gbGFyZ2UgYXMgdG8g cmlzayBvdmVyZmxvdyAqLwotCXN6ID0gTUFYQUxJR04oc2l6ZW9mKFNscnVTaGFyZWREYXRh KSk7Ci0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGNoYXIgKikpOwkvKiBwYWdl X2J1ZmZlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNscnVQYWdl U3RhdHVzKSk7CS8qIHBhZ2Vfc3RhdHVzW10gKi8KLQlzeiArPSBNQVhBTElHTihuc2xvdHMg KiBzaXplb2YoYm9vbCkpOwkvKiBwYWdlX2RpcnR5W10gKi8KLQlzeiArPSBNQVhBTElHTihu c2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbnVtYmVyW10gKi8KLQlzeiArPSBNQVhB TElHTihuc2xvdHMgKiBzaXplb2YoaW50KSk7CS8qIHBhZ2VfbHJ1X2NvdW50W10gKi8KLQlz eiArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7CS8qIGJ1ZmZl cl9sb2Nrc1tdICovCi0KLQlpZiAobmxzbnMgPiAwKQotCQlzeiArPSBNQVhBTElHTihuc2xv dHMgKiBubHNucyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CS8qIGdyb3VwX2xzbltdICovCi0K LQlyZXR1cm4gQlVGRkVSQUxJR04oc3opICsgQkxDS1NaICogbnNsb3RzOwotfQotCi0vKgot ICogSW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRvLCBhIHNpbXBsZSBMUlUgY2FjaGUgaW4gc2hh cmVkIG1lbW9yeS4KLSAqCi0gKiBjdGw6IGFkZHJlc3Mgb2YgbG9jYWwgKHVuc2hhcmVkKSBj b250cm9sIHN0cnVjdHVyZS4KLSAqIG5hbWU6IG5hbWUgb2YgU0xSVS4gIChUaGlzIGlzIHVz ZXItdmlzaWJsZSwgcGljayB3aXRoIGNhcmUhKQotICogbnNsb3RzOiBudW1iZXIgb2YgcGFn ZSBzbG90cyB0byB1c2UuCi0gKiBubHNuczogbnVtYmVyIG9mIExTTiBncm91cHMgcGVyIHBh Z2UgKHNldCB0byB6ZXJvIGlmIG5vdCByZWxldmFudCkuCi0gKiBjdGxsb2NrOiBMV0xvY2sg dG8gdXNlIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBzaGFyZWQgY29udHJvbCBzdHJ1Y3R1 cmUuCi0gKiBzdWJkaXI6IFBHREFUQS1yZWxhdGl2ZSBzdWJkaXJlY3RvcnkgdGhhdCB3aWxs IGNvbnRhaW4gdGhlIGZpbGVzLgotICogdHJhbmNoZV9pZDogTFdMb2NrIHRyYW5jaGUgSUQg dG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIgTFdMb2Nrcy4KLSAqLwotdm9pZAot U2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90 cywgaW50IG5sc25zLAotCQkJICBMV0xvY2sgKmN0bGxvY2ssIGNvbnN0IGNoYXIgKnN1YmRp ciwgaW50IHRyYW5jaGVfaWQsCi0JCQkgIFN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRs ZXIpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlzaGFyZWQg PSAoU2xydVNoYXJlZCkgU2htZW1Jbml0U3RydWN0KG5hbWUsCi0JCQkJCQkJCQkJICBTaW1w bGVMcnVTaG1lbVNpemUobnNsb3RzLCBubHNucyksCi0JCQkJCQkJCQkJICAmZm91bmQpOwot Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCS8qIEluaXRpYWxpemUgbG9ja3Mg YW5kIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQljaGFyCSAgICpwdHI7Ci0JCVNpemUJCW9m ZnNldDsKLQkJaW50CQkJc2xvdG5vOwotCi0JCUFzc2VydCghZm91bmQpOwotCi0JCW1lbXNl dChzaGFyZWQsIDAsIHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCi0JCXNoYXJlZC0+Q29u dHJvbExvY2sgPSBjdGxsb2NrOwotCi0JCXNoYXJlZC0+bnVtX3Nsb3RzID0gbnNsb3RzOwot CQlzaGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2UgPSBubHNuczsKLQotCQlzaGFyZWQtPmN1 cl9scnVfY291bnQgPSAwOwotCi0JCS8qIHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyIHdp bGwgYmUgc2V0IGxhdGVyICovCi0KLQkJc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCA9IHBnc3Rh dF9nZXRfc2xydV9pbmRleChuYW1lKTsKLQotCQlwdHIgPSAoY2hhciAqKSBzaGFyZWQ7Ci0J CW9mZnNldCA9IE1BWEFMSUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCQlzaGFyZWQt PnBhZ2VfYnVmZmVyID0gKGNoYXIgKiopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0g TUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGNoYXIgKikpOwotCQlzaGFyZWQtPnBhZ2Vfc3Rh dHVzID0gKFNscnVQYWdlU3RhdHVzICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0g TUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNscnVQYWdlU3RhdHVzKSk7Ci0JCXNoYXJlZC0+ cGFnZV9kaXJ0eSA9IChib29sICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFY QUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsKLQkJc2hhcmVkLT5wYWdlX251bWJlciA9 IChpbnQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMg KiBzaXplb2YoaW50KSk7Ci0JCXNoYXJlZC0+cGFnZV9scnVfY291bnQgPSAoaW50ICopIChw dHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGlu dCkpOwotCi0JCS8qIEluaXRpYWxpemUgTFdMb2NrcyAqLwotCQlzaGFyZWQtPmJ1ZmZlcl9s b2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNldCk7Ci0JCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7Ci0KLQkJaWYgKG5sc25z ID4gMCkKLQkJewotCQkJc2hhcmVkLT5ncm91cF9sc24gPSAoWExvZ1JlY1B0ciAqKSAocHRy ICsgb2Zmc2V0KTsKLQkJCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBubHNucyAqIHNp emVvZihYTG9nUmVjUHRyKSk7Ci0JCX0KLQotCQlwdHIgKz0gQlVGRkVSQUxJR04ob2Zmc2V0 KTsKLQkJZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBuc2xvdHM7IHNsb3RubysrKQotCQl7 Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxv Y2ssCi0JCQkJCQkJIHRyYW5jaGVfaWQpOwotCi0JCQlzaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub10gPSBwdHI7Ci0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BB R0VfRU1QVFk7Ci0JCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCQkJ c2hhcmVkLT5wYWdlX2xydV9jb3VudFtzbG90bm9dID0gMDsKLQkJCXB0ciArPSBCTENLU1o7 Ci0JCX0KLQotCQkvKiBTaG91bGQgZml0IHRvIGVzdGltYXRlZCBzaG1lbSBzaXplICovCi0J CUFzc2VydChwdHIgLSAoY2hhciAqKSBzaGFyZWQgPD0gU2ltcGxlTHJ1U2htZW1TaXplKG5z bG90cywgbmxzbnMpKTsKLQl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOwotCi0JLyoKLQkg KiBJbml0aWFsaXplIHRoZSB1bnNoYXJlZCBjb250cm9sIHN0cnVjdCwgaW5jbHVkaW5nIGRp cmVjdG9yeSBwYXRoLiBXZQotCSAqIGFzc3VtZSBjYWxsZXIgc2V0IFBhZ2VQcmVjZWRlcy4K LQkgKi8KLQljdGwtPnNoYXJlZCA9IHNoYXJlZDsKLQljdGwtPnN5bmNfaGFuZGxlciA9IHN5 bmNfaGFuZGxlcjsKLQlzdHJsY3B5KGN0bC0+RGlyLCBzdWJkaXIsIHNpemVvZihjdGwtPkRp cikpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSAob3IgcmVpbml0aWFsaXplKSBhIHBhZ2Ug dG8gemVyb2VzLgotICoKLSAqIFRoZSBwYWdlIGlzIG5vdCBhY3R1YWxseSB3cml0dGVuLCBq dXN0IHNldCB1cCBpbiBzaGFyZWQgbWVtb3J5LgotICogVGhlIHNsb3QgbnVtYmVyIG9mIHRo ZSBuZXcgcGFnZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBo ZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLWludAotU2lt cGxlTHJ1WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pCi17Ci0JU2xydVNoYXJl ZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87CitzdGF0aWMgdm9pZCBT bHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KE9pZCByZWxfaWQsIGludCBzZWdubyk7CiAKLQkv KiBGaW5kIGEgc3VpdGFibGUgYnVmZmVyIHNsb3QgZm9yIHRoZSBwYWdlICovCi0Jc2xvdG5v ID0gU2xydVNlbGVjdExSVVBhZ2UoY3RsLCBwYWdlbm8pOwotCUFzc2VydChzaGFyZWQtPnBh Z2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZIHx8Ci0JCSAgIChzaGFyZWQt PnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkhc2hhcmVk LT5wYWdlX2RpcnR5W3Nsb3Rub10pIHx8Ci0JCSAgIHNoYXJlZC0+cGFnZV9udW1iZXJbc2xv dG5vXSA9PSBwYWdlbm8pOwotCi0JLyogTWFyayB0aGUgc2xvdCBhcyBjb250YWluaW5nIHRo aXMgcGFnZSAqLwotCXNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9IHBhZ2VubzsKLQlz aGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfVkFMSUQ7Ci0Jc2hhcmVk LT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCVNscnVSZWNlbnRseVVzZWQoc2hhcmVk LCBzbG90bm8pOwotCi0JLyogU2V0IHRoZSBidWZmZXIgdG8gemVyb2VzICovCi0JTWVtU2V0 KHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgMCwgQkxDS1NaKTsKLQotCS8qIFNldCB0 aGUgTFNOcyBmb3IgdGhpcyBuZXcgcGFnZSB0byB6ZXJvICovCi0JU2ltcGxlTHJ1WmVyb0xT TnMoY3RsLCBzbG90bm8pOwotCi0JLyogQXNzdW1lIHRoaXMgcGFnZSBpcyBub3cgdGhlIGxh dGVzdCBhY3RpdmUgcGFnZSAqLwotCXNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFn ZW5vOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHplcm9lZCBwYWdlcyAq LwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHNoYXJlZC0+c2xydV9zdGF0c19p ZHgpOwotCi0JcmV0dXJuIHNsb3RubzsKLX0KLQotLyoKLSAqIFplcm8gYWxsIHRoZSBMU05z IHdlIHN0b3JlIGZvciB0aGlzIHNscnUgcGFnZS4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBj YWxsZWQgZWFjaCB0aW1lIHdlIGNyZWF0ZSBhIG5ldyBwYWdlLCBhbmQgZWFjaCB0aW1lIHdl IHJlYWQKLSAqIGluIGEgcGFnZSBmcm9tIGRpc2sgaW50byBhbiBleGlzdGluZyBidWZmZXIu ICAoU3VjaCBhbiBvbGQgcGFnZSBjYW5ub3QKLSAqIGhhdmUgYW55IGludGVyZXN0aW5nIExT TnMsIHNpbmNlIHdlJ2QgaGF2ZSBmbHVzaGVkIHRoZW0gYmVmb3JlIHdyaXRpbmcKLSAqIHRo ZSBwYWdlIGluIHRoZSBmaXJzdCBwbGFjZS4pCi0gKgotICogVGhpcyBhc3N1bWVzIHRoYXQg SW52YWxpZFhMb2dSZWNQdHIgaXMgYml0d2lzZS1hbGwtMC4KLSAqLwotc3RhdGljIHZvaWQK LVNpbXBsZUxydVplcm9MU05zKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQotewotCVNscnVT aGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQlpZiAoc2hhcmVkLT5sc25fZ3JvdXBz X3Blcl9wYWdlID4gMCkKLQkJTWVtU2V0KCZzaGFyZWQtPmdyb3VwX2xzbltzbG90bm8gKiBz aGFyZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2VdLCAwLAotCQkJICAgc2hhcmVkLT5sc25fZ3Jv dXBzX3Blcl9wYWdlICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsKLX0KLQotLyoKLSAqIFdhaXQg Zm9yIGFueSBhY3RpdmUgSS9PIG9uIGEgcGFnZSBzbG90IHRvIGZpbmlzaC4gIChUaGlzIGRv ZXMgbm90Ci0gKiBndWFyYW50ZWUgdGhhdCBuZXcgSS9PIGhhc24ndCBiZWVuIHN0YXJ0ZWQg YmVmb3JlIHdlIHJldHVybiwgdGhvdWdoLgotICogSW4gZmFjdCB0aGUgc2xvdCBtaWdodCBu b3QgZXZlbiBjb250YWluIHRoZSBzYW1lIHBhZ2UgYW55bW9yZS4pCi0gKgotICogQ29udHJv bCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0 LgotICovCi1zdGF0aWMgdm9pZAotU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0KLQkvKiBT ZWUgbm90ZXMgYXQgdG9wIG9mIGZpbGUgKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29u dHJvbExvY2spOwotCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Ru b10ubG9jaywgTFdfU0hBUkVEKTsKLQlMV0xvY2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9s b2Nrc1tzbG90bm9dLmxvY2spOwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9j aywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogSWYgdGhlIHNsb3QgaXMgc3RpbGwgaW4g YW4gaW8taW4tcHJvZ3Jlc3Mgc3RhdGUsIHRoZW4gZWl0aGVyIHNvbWVvbmUKLQkgKiBhbHJl YWR5IHN0YXJ0ZWQgYSBuZXcgSS9PIG9uIHRoZSBzbG90LCBvciBhIHByZXZpb3VzIEkvTyBm YWlsZWQgYW5kCi0JICogbmVnbGVjdGVkIHRvIHJlc2V0IHRoZSBwYWdlIHN0YXRlLiAgVGhh dCBzaG91bGRuJ3QgaGFwcGVuLCByZWFsbHksIGJ1dAotCSAqIGl0IHNlZW1zIHdvcnRoIGEg ZmV3IGV4dHJhIGN5Y2xlcyB0byBjaGVjayBhbmQgcmVjb3ZlciBmcm9tIGl0LiBXZSBjYW4K LQkgKiBjaGVhcGx5IHRlc3QgZm9yIGZhaWx1cmUgYnkgc2VlaW5nIGlmIHRoZSBidWZmZXIg bG9jayBpcyBzdGlsbCBoZWxkICh3ZQotCSAqIGFzc3VtZSB0aGF0IHRyYW5zYWN0aW9uIGFi b3J0IHdvdWxkIHJlbGVhc2UgdGhlIGxvY2spLgotCSAqLwotCWlmIChzaGFyZWQtPnBhZ2Vf c3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MgfHwKLQkJc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVT UykKLQl7Ci0JCWlmIChMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoJnNoYXJlZC0+YnVmZmVy X2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfU0hBUkVEKSkKLQkJewotCQkJLyogaW5kZWVkLCB0 aGUgSS9PIG11c3QgaGF2ZSBmYWlsZWQgKi8KLQkJCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MpCi0JCQkJc2hhcmVkLT5w YWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJZWxzZQkJCQkvKiB3 cml0ZV9pbl9wcm9ncmVzcyAqLwotCQkJewotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xv dG5vXSA9IFNMUlVfUEFHRV9WQUxJRDsKLQkJCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5v XSA9IHRydWU7Ci0JCQl9Ci0JCQlMV0xvY2tSZWxlYXNlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nr c1tzbG90bm9dLmxvY2spOwotCQl9Ci0JfQotfQotCi0vKgotICogRmluZCBhIHBhZ2UgaW4g YSBzaGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0IGluIGlmIG5lY2Vzc2FyeS4KLSAqIFRoZSBw YWdlIG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gYWxyZWFkeS1pbml0aWFsaXplZCBw YWdlLgotICoKLSAqIElmIHdyaXRlX29rIGlzIHRydWUgdGhlbiBpdCBpcyBPSyB0byByZXR1 cm4gYSBwYWdlIHRoYXQgaXMgaW4KLSAqIFdSSVRFX0lOX1BST0dSRVNTIHN0YXRlOyBpdCBp cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gYmUgc3VyZQotICogdGhhdCBtb2Rp ZmljYXRpb24gb2YgdGhlIHBhZ2UgaXMgc2FmZS4gIElmIHdyaXRlX29rIGlzIGZhbHNlIHRo ZW4gd2UKLSAqIHdpbGwgbm90IHJldHVybiB0aGUgcGFnZSB1bnRpbCBpdCBpcyBub3QgdW5k ZXJnb2luZyBhY3RpdmUgSS9PLgotICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlzIHVzZWQg b25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNh Y3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rp b24uCi0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVt YmVyIG5vdyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3Mg aW5mbyBpcyB1cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQg ZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotaW50Ci1TaW1wbGVMcnVS ZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkg IFRyYW5zYWN0aW9uSWQgeGlkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFy ZWQ7Ci0KLQkvKiBPdXRlciBsb29wIGhhbmRsZXMgcmVzdGFydCBpZiB3ZSBtdXN0IHdhaXQg Zm9yIHNvbWVvbmUgZWxzZSdzIEkvTyAqLwotCWZvciAoOzspCi0JewotCQlpbnQJCQlzbG90 bm87Ci0JCWJvb2wJCW9rOwotCi0JCS8qIFNlZSBpZiBwYWdlIGFscmVhZHkgaXMgaW4gbWVt b3J5OyBpZiBub3QsIHBpY2sgdmljdGltIHNsb3QgKi8KLQkJc2xvdG5vID0gU2xydVNlbGVj dExSVVBhZ2UoY3RsLCBwYWdlbm8pOwotCi0JCS8qIERpZCB3ZSBmaW5kIHRoZSBwYWdlIGlu IG1lbW9yeT8gKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdl bm8gJiYKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfRU1Q VFkpCi0JCXsKLQkJCS8qCi0JCQkgKiBJZiBwYWdlIGlzIHN0aWxsIGJlaW5nIHJlYWQgaW4s IHdlIG11c3Qgd2FpdCBmb3IgSS9PLiAgTGlrZXdpc2UKLQkJCSAqIGlmIHRoZSBwYWdlIGlz IGJlaW5nIHdyaXR0ZW4gYW5kIHRoZSBjYWxsZXIgc2FpZCB0aGF0J3Mgbm90IE9LLgotCQkJ ICovCi0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9S RUFEX0lOX1BST0dSRVNTIHx8Ci0JCQkJKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9 PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MgJiYKLQkJCQkgIXdyaXRlX29rKSkKLQkJ CXsKLQkJCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCQkJCS8qIE5vdyB3ZSBt dXN0IHJlY2hlY2sgc3RhdGUgZnJvbSB0aGUgdG9wICovCi0JCQkJY29udGludWU7Ci0JCQl9 Ci0JCQkvKiBPdGhlcndpc2UsIGl0J3MgcmVhZHkgdG8gdXNlICovCi0JCQlTbHJ1UmVjZW50 bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQotCQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3Vu dGVyIG9mIHBhZ2VzIGZvdW5kIGluIHRoZSBTTFJVICovCi0JCQlwZ3N0YXRfY291bnRfc2xy dV9wYWdlX2hpdChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQkJcmV0dXJuIHNsb3Ru bzsKLQkJfQotCi0JCS8qIFdlIGZvdW5kIG5vIG1hdGNoOyBhc3NlcnQgd2Ugc2VsZWN0ZWQg YSBmcmVlYWJsZSBzbG90ICovCi0JCUFzc2VydChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Ru b10gPT0gU0xSVV9QQUdFX0VNUFRZIHx8Ci0JCQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlb c2xvdG5vXSkpOwotCi0JCS8qIE1hcmsgdGhlIHNsb3QgcmVhZC1idXN5ICovCi0JCXNoYXJl ZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9IHBhZ2VubzsKLQkJc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1M7Ci0JCXNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkJLyogQWNxdWlyZSBwZXItYnVmZmVyIGxv Y2sgKGNhbm5vdCBkZWFkbG9jaywgc2VlIG5vdGVzIGF0IHRvcCkgKi8KLQkJTFdMb2NrQWNx dWlyZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLCBMV19FWENMVVNJVkUp OwotCi0JCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5nIEkvTyAqLwotCQlM V0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCi0JCS8qIERvIHRoZSByZWFk ICovCi0JCW9rID0gU2xydVBoeXNpY2FsUmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHNsb3Rubyk7 Ci0KLQkJLyogU2V0IHRoZSBMU05zIGZvciB0aGlzIG5ld2x5IHJlYWQtaW4gcGFnZSB0byB6 ZXJvICovCi0JCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCQkvKiBSZS1h Y3F1aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3RhdGUgKi8KLQkJTFdMb2Nr QWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCUFzc2Vy dChzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQkgICBzaGFy ZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1Mg JiYKLQkJCSAgICFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJc2hhcmVkLT5w YWdlX3N0YXR1c1tzbG90bm9dID0gb2sgPyBTTFJVX1BBR0VfVkFMSUQgOiBTTFJVX1BBR0Vf RU1QVFk7Ci0KLQkJTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5v XS5sb2NrKTsKLQotCQkvKiBOb3cgaXQncyBva2F5IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVk ICovCi0JCWlmICghb2spCi0JCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgeGlk KTsKLQotCQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQotCQkvKiB1cGRh dGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgcGFnZXMgbm90IGZvdW5kIGluIFNMUlUgKi8KLQkJ cGdzdGF0X2NvdW50X3NscnVfcGFnZV9yZWFkKHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwot Ci0JCXJldHVybiBzbG90bm87Ci0JfQotfQotCi0vKgotICogRmluZCBhIHBhZ2UgaW4gYSBz aGFyZWQgYnVmZmVyLCByZWFkaW5nIGl0IGluIGlmIG5lY2Vzc2FyeS4KLSAqIFRoZSBwYWdl IG51bWJlciBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gYWxyZWFkeS1pbml0aWFsaXplZCBwYWdl LgotICogVGhlIGNhbGxlciBtdXN0IGludGVuZCBvbmx5IHJlYWQtb25seSBhY2Nlc3MgdG8g dGhlIHBhZ2UuCi0gKgotICogVGhlIHBhc3NlZC1pbiB4aWQgaXMgdXNlZCBvbmx5IGZvciBl cnJvciByZXBvcnRpbmcsIGFuZCBtYXkgYmUKLSAqIEludmFsaWRUcmFuc2FjdGlvbklkIGlm IG5vIHNwZWNpZmljIHhpZCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi4KLSAqCi0g KiBSZXR1cm4gdmFsdWUgaXMgdGhlIHNoYXJlZC1idWZmZXIgc2xvdCBudW1iZXIgbm93IGhv bGRpbmcgdGhlIHBhZ2UuCi0gKiBUaGUgYnVmZmVyJ3MgTFJVIGFjY2VzcyBpbmZvIGlzIHVw ZGF0ZWQuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgTk9UIGJlIGhlbGQgYXQgZW50cnks IGJ1dCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRo ZXIgdGhlIGxvY2sgd2lsbCBiZSBzaGFyZWQgb3IgZXhjbHVzaXZlLgotICovCi1pbnQKLVNp bXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFu c2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwot CWludAkJCXNsb3RubzsKLQotCS8qIFRyeSB0byBmaW5kIHRoZSBwYWdlIHdoaWxlIGhvbGRp bmcgb25seSBzaGFyZWQgbG9jayAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9s TG9jaywgTFdfU0hBUkVEKTsKLQotCS8qIFNlZSBpZiBwYWdlIGlzIGFscmVhZHkgaW4gYSBi dWZmZXIgKi8KLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3Rz OyBzbG90bm8rKykKLQl7Ci0JCWlmIChzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0g cGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdF X0VNUFRZICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdF X1JFQURfSU5fUFJPR1JFU1MpCi0JCXsKLQkJCS8qIFNlZSBjb21tZW50cyBmb3IgU2xydVJl Y2VudGx5VXNlZCBtYWNybyAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Ru byk7Ci0KLQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBp biB0aGUgU0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5z bHJ1X3N0YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQl9Ci0KLQkvKiBO byBsdWNrLCBzbyBzd2l0Y2ggdG8gbm9ybWFsIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkbyByZWd1 bGFyIHJlYWQgKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCUxX TG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXJl dHVybiBTaW1wbGVMcnVSZWFkUGFnZShjdGwsIHBhZ2VubywgdHJ1ZSwgeGlkKTsKLX0KLQot LyoKLSAqIFdyaXRlIGEgcGFnZSBmcm9tIGEgc2hhcmVkIGJ1ZmZlciwgaWYgbmVjZXNzYXJ5 LgotICogRG9lcyBub3RoaW5nIGlmIHRoZSBzcGVjaWZpZWQgc2xvdCBpcyBub3QgZGlydHku Ci0gKgotICogTk9URTogb25seSBvbmUgd3JpdGUgYXR0ZW1wdCBpcyBtYWRlIGhlcmUuICBI ZW5jZSwgaXQgaXMgcG9zc2libGUgdGhhdAotICogdGhlIHBhZ2UgaXMgc3RpbGwgZGlydHkg YXQgZXhpdCAoaWYgc29tZW9uZSBlbHNlIHJlLWRpcnRpZWQgaXQgZHVyaW5nCi0gKiB0aGUg d3JpdGUpLiAgSG93ZXZlciwgd2UgKmRvKiBhdHRlbXB0IGEgZnJlc2ggd3JpdGUgZXZlbiBp ZiB0aGUgcGFnZQotICogaXMgYWxyZWFkeSBiZWluZyB3cml0dGVuOyB0aGlzIGlzIGZvciBj aGVja3BvaW50cy4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5 LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLXN0YXRpYyB2b2lkCi1TbHJ1SW50 ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBm ZGF0YSkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXBh Z2VubyA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXTsKLQlib29sCQlvazsKLQotCS8q IElmIGEgd3JpdGUgaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwot CXdoaWxlIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRF X0lOX1BST0dSRVNTICYmCi0JCSAgIHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBw YWdlbm8pCi0JewotCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCX0KLQotCS8q Ci0JICogRG8gbm90aGluZyBpZiBwYWdlIGlzIG5vdCBkaXJ0eSwgb3IgaWYgYnVmZmVyIG5v IGxvbmdlciBjb250YWlucyB0aGUKLQkgKiBzYW1lIHBhZ2Ugd2Ugd2VyZSBjYWxsZWQgZm9y LgotCSAqLwotCWlmICghc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gfHwKLQkJc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9WQUxJRCB8fAotCQlzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gIT0gcGFnZW5vKQotCQlyZXR1cm47Ci0KLQkvKgotCSAq IE1hcmsgdGhlIHNsb3Qgd3JpdGUtYnVzeSwgYW5kIGNsZWFyIHRoZSBkaXJ0eWJpdC4gIEFm dGVyIHRoaXMgcG9pbnQsIGEKLQkgKiB0cmFuc2FjdGlvbiBzdGF0dXMgdXBkYXRlIG9uIHRo aXMgcGFnZSB3aWxsIG1hcmsgaXQgZGlydHkgYWdhaW4uCi0JICovCi0Jc2hhcmVkLT5wYWdl X3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTOwotCXNoYXJl ZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0KLQkvKiBBY3F1aXJlIHBlci1idWZm ZXIgbG9jayAoY2Fubm90IGRlYWRsb2NrLCBzZWUgbm90ZXMgYXQgdG9wKSAqLwotCUxXTG9j a0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCS8qIFJlbGVhc2UgY29udHJvbCBsb2NrIHdoaWxlIGRvaW5nIEkvTyAqLwot CUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250cm9sTG9jayk7Ci0KLQkvKiBEbyB0aGUgd3Jp dGUgKi8KLQlvayA9IFNscnVQaHlzaWNhbFdyaXRlUGFnZShjdGwsIHBhZ2Vubywgc2xvdG5v LCBmZGF0YSk7Ci0KLQkvKiBJZiB3ZSBmYWlsZWQsIGFuZCB3ZSdyZSBpbiBhIGZsdXNoLCBi ZXR0ZXIgY2xvc2UgdGhlIGZpbGVzICovCi0JaWYgKCFvayAmJiBmZGF0YSkKLQl7Ci0JCWlu dAkJCWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5udW1fZmlsZXM7IGkrKykKLQkJ CUNsb3NlVHJhbnNpZW50RmlsZShmZGF0YS0+ZmRbaV0pOwotCX0KLQotCS8qIFJlLWFjcXVp cmUgY29udHJvbCBsb2NrIGFuZCB1cGRhdGUgcGFnZSBzdGF0ZSAqLwotCUxXTG9ja0FjcXVp cmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCUFzc2VydChzaGFy ZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCSAgIHNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpOwotCi0J LyogSWYgd2UgZmFpbGVkIHRvIHdyaXRlLCBtYXJrIHRoZSBwYWdlIGRpcnR5IGFnYWluICov Ci0JaWYgKCFvaykKLQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCi0J c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1ZBTElEOwotCi0JTFdM b2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQotCS8q IE5vdyBpdCdzIG9rYXkgdG8gZXJlcG9ydCBpZiB3ZSBmYWlsZWQgKi8KLQlpZiAoIW9rKQot CQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9uSWQp OwotCi0JLyogSWYgcGFydCBvZiBhIGNoZWNrcG9pbnQsIGNvdW50IHRoaXMgYXMgYSBidWZm ZXIgd3JpdHRlbi4gKi8KLQlpZiAoZmRhdGEpCi0JCUNoZWNrcG9pbnRTdGF0cy5ja3B0X2J1 ZnNfd3JpdHRlbisrOwotfQotCi0vKgotICogV3JhcHBlciBvZiBTbHJ1SW50ZXJuYWxXcml0 ZVBhZ2UsIGZvciBleHRlcm5hbCBjYWxsZXJzLgotICogZmRhdGEgaXMgYWx3YXlzIHBhc3Nl ZCBhIE5VTEwgaGVyZS4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwg Y3RsLCBpbnQgc2xvdG5vKQotewotCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNsb3Ru bywgTlVMTCk7Ci19CitzdGF0aWMgRmlsZSBzbHJ1ZmlsZShTTWdyUmVsYXRpb24gcmVsbiwg QmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBtb2RlLAorCQkJCQkgYm9vbCBtaXNzaW5nX29r KTsKIAogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBk aXNrLgpAQCAtNjIzLDU5MiArMTExLDMwIEBAIFNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3Rs IGN0bCwgaW50IHNsb3RubykKICAqIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBnaXZl biBwYWdlLgogICovCiBib29sCi1TaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xy dUN0bCBjdGwsIGludCBwYWdlbm8pCi17Ci0JaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJV X1BBR0VTX1BFUl9TRUdNRU5UOwotCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOwotCWludAkJCW9mZnNldCA9IHJwYWdlbm8gKiBCTENLU1o7Ci0J Y2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCWludAkJCWZkOwotCWJvb2wJCXJlc3VsdDsKLQlv ZmZfdAkJZW5kcG9zOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIGNoZWNr ZWQgcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2V4aXN0cyhjdGwtPnNoYXJl ZC0+c2xydV9zdGF0c19pZHgpOwotCi0JU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgc2Vnbm8p OwotCi0JZmQgPSBPcGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JET05MWSB8IFBHX0JJTkFS WSk7Ci0JaWYgKGZkIDwgMCkKLQl7Ci0JCS8qIGV4cGVjdGVkOiBmaWxlIGRvZXNuJ3QgZXhp c3QgKi8KLQkJaWYgKGVycm5vID09IEVOT0VOVCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQkv KiByZXBvcnQgZXJyb3Igbm9ybWFsbHkgKi8KLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BF Tl9GQUlMRUQ7Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJU2xydVJlcG9ydElPRXJyb3Io Y3RsLCBwYWdlbm8sIDApOwotCX0KLQotCWlmICgoZW5kcG9zID0gbHNlZWsoZmQsIDAsIFNF RUtfRU5EKSkgPCAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfU0VFS19GQUlMRUQ7 Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdl bm8sIDApOwotCX0KLQotCXJlc3VsdCA9IGVuZHBvcyA+PSAob2ZmX3QpIChvZmZzZXQgKyBC TENLU1opOwotCi0JaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZCkgIT0gMCkKLQl7Ci0JCXNs cnVfZXJyY2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxFRDsKLQkJc2xydV9lcnJubyA9IGVycm5v OwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAq IFBoeXNpY2FsIHJlYWQgb2YgYSAocHJldmlvdXNseSBleGlzdGluZykgcGFnZSBpbnRvIGEg YnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBmYWlsdXJlLCB3ZSBjYW5ub3QganVzdCBlcmVwb3J0 KEVSUk9SKSBzaW5jZSBjYWxsZXIgaGFzIHB1dCBzdGF0ZSBpbgotICogc2hhcmVkIG1lbW9y eSB0aGF0IG11c3QgYmUgdW5kb25lLiAgU28sIHdlIHJldHVybiBmYWxzZSBhbmQgc2F2ZSBl bm91Z2gKLSAqIGluZm8gaW4gc3RhdGljIHZhcmlhYmxlcyB0byBsZXQgU2xydVJlcG9ydElP RXJyb3IgbWFrZSB0aGUgcmVwb3J0LgotICoKLSAqIEZvciBub3csIGFzc3VtZSBpdCdzIG5v dCB3b3J0aCBrZWVwaW5nIGEgZmlsZSBwb2ludGVyIG9wZW4gYWNyb3NzCi0gKiByZWFkL3dy aXRlIG9wZXJhdGlvbnMuICBXZSBjb3VsZCBjYWNoZSBvbmUgdmlydHVhbCBmaWxlIHBvaW50 ZXIgLi4uCi0gKi8KLXN0YXRpYyBib29sCi1TbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1Q3Rs IGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubykKK1NpbXBsZUxydURvZXNQaHlzaWNhbFBh Z2VFeGlzdChSZWxGaWxlTnVtYmVyIHJlbF9pZCwgaW50IHBhZ2VubykKIHsKLQlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNlZ25vID0gcGFnZW5vIC8gU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKIAlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVDsKIAlvZmZfdAkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsK LQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JaW50CQkJZmQ7Ci0KLQlTbHJ1RmlsZU5hbWUo Y3RsLCBwYXRoLCBzZWdubyk7Ci0KLQkvKgotCSAqIEluIGEgY3Jhc2gtYW5kLXJlc3RhcnQg c2l0dWF0aW9uLCBpdCdzIHBvc3NpYmxlIGZvciB1cyB0byByZWNlaXZlCi0JICogY29tbWFu ZHMgdG8gc2V0IHRoZSBjb21taXQgc3RhdHVzIG9mIHRyYW5zYWN0aW9ucyB3aG9zZSBiaXRz IGFyZSBpbgotCSAqIGFscmVhZHktdHJ1bmNhdGVkIHNlZ21lbnRzIG9mIHRoZSBjb21taXQg bG9nIChzZWUgbm90ZXMgaW4KLQkgKiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UpLiAgSGVuY2Us IGlmIHdlIGFyZSBJblJlY292ZXJ5LCBhbGxvdyB0aGUgY2FzZQotCSAqIHdoZXJlIHRoZSBm aWxlIGRvZXNuJ3QgZXhpc3QsIGFuZCByZXR1cm4gemVyb2VzIGluc3RlYWQuCi0JICovCi0J ZmQgPSBPcGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JET05MWSB8IFBHX0JJTkFSWSk7Ci0J aWYgKGZkIDwgMCkKLQl7Ci0JCWlmIChlcnJubyAhPSBFTk9FTlQgfHwgIUluUmVjb3Zlcnkp Ci0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX09QRU5fRkFJTEVEOwotCQkJc2xydV9l cnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJZXJlcG9ydChMT0cs Ci0JCQkJKGVycm1zZygiZmlsZSBcIiVzXCIgZG9lc24ndCBleGlzdCwgcmVhZGluZyBhcyB6 ZXJvZXMiLAotCQkJCQkJcGF0aCkpKTsKLQkJTWVtU2V0KHNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSwgMCwgQkxDS1NaKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JZXJybm8gPSAw OwotCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlUX0VWRU5UX1NMUlVfUkVBRCk7Ci0J aWYgKHBnX3ByZWFkKGZkLCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tTWiwg b2Zmc2V0KSAhPSBCTENLU1opCi0JewotCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0J CXNscnVfZXJyY2F1c2UgPSBTTFJVX1JFQURfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJy bm87Ci0JCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0J cGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCi0JaWYgKENsb3NlVHJhbnNpZW50RmlsZShm ZCkgIT0gMCkKLQl7Ci0JCXNscnVfZXJyY2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxFRDsKLQkJ c2xydV9lcnJubyA9IGVycm5vOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQorCW9mZl90CQlzaXpl OworCUZpbGUJCWZpbGU7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmls ZUxvY2F0b3IocmVsX2lkKTsKKwlTTWdyUmVsYXRpb24gcmVsbiA9IHNtZ3JvcGVuKHJsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkKTsKIAotCXJldHVybiB0cnVlOwotfQotCi0vKgotICog UGh5c2ljYWwgd3JpdGUgb2YgYSBwYWdlIGZyb20gYSBidWZmZXIgc2xvdAotICoKLSAqIE9u IGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNhbGxlciBo YXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRvbmUu ICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAotICogaW5mbyBpbiBzdGF0 aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBtYWtlIHRoZSByZXBvcnQu Ci0gKgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdvcnRoIGtlZXBpbmcgYSBmaWxl IHBvaW50ZXIgb3BlbiBhY3Jvc3MKLSAqIGluZGVwZW5kZW50IHJlYWQvd3JpdGUgb3BlcmF0 aW9ucy4gIFdlIGRvIGJhdGNoIG9wZXJhdGlvbnMgZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0 ZUFsbCwgdGhvdWdoLgotICoKLSAqIGZkYXRhIGlzIE5VTEwgZm9yIGEgc3RhbmRhbG9uZSB3 cml0ZSwgcG9pbnRlciB0byBvcGVuLWZpbGUgaW5mbyBkdXJpbmcKLSAqIFNpbXBsZUxydVdy aXRlQWxsLgotICovCi1zdGF0aWMgYm9vbAotU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVD dGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17 Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzZWdubyA9IHBh Z2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2Vu byAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0Jb2ZmX3QJCW9mZnNldCA9IHJwYWdlbm8g KiBCTENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCWludAkJCWZkID0gLTE7Ci0K LQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2Ygd3JpdHRlbiBwYWdlcyAqLwotCXBn c3RhdF9jb3VudF9zbHJ1X3BhZ2Vfd3JpdHRlbihzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsK LQotCS8qCi0JICogSG9ub3IgdGhlIHdyaXRlLVdBTC1iZWZvcmUtZGF0YSBydWxlLCBpZiBh cHByb3ByaWF0ZSwgc28gdGhhdCB3ZSBkbyBub3QKLQkgKiB3cml0ZSBvdXQgZGF0YSBiZWZv cmUgYXNzb2NpYXRlZCBXQUwgcmVjb3Jkcy4gIFRoaXMgaXMgdGhlIHNhbWUgYWN0aW9uCi0J ICogcGVyZm9ybWVkIGR1cmluZyBGbHVzaEJ1ZmZlcigpIGluIHRoZSBtYWluIGJ1ZmZlciBt YW5hZ2VyLgotCSAqLwotCWlmIChzaGFyZWQtPmdyb3VwX2xzbiAhPSBOVUxMKQotCXsKLQkJ LyoKLQkJICogV2UgbXVzdCBkZXRlcm1pbmUgdGhlIGxhcmdlc3QgYXN5bmMtY29tbWl0IExT TiBmb3IgdGhlIHBhZ2UuIFRoaXMKLQkJICogaXMgYSBiaXQgdGVkaW91cywgYnV0IHNpbmNl IHRoaXMgZW50aXJlIGZ1bmN0aW9uIGlzIGEgc2xvdyBwYXRoCi0JCSAqIGFueXdheSwgaXQg c2VlbXMgYmV0dGVyIHRvIGRvIHRoaXMgaGVyZSB0aGFuIHRvIG1haW50YWluIGEgcGVyLXBh Z2UKLQkJICogTFNOIHZhcmlhYmxlICh3aGljaCdkIG5lZWQgYW4gZXh0cmEgY29tcGFyaXNv biBpbiB0aGUKLQkJICogdHJhbnNhY3Rpb24tY29tbWl0IHBhdGgpLgotCQkgKi8KLQkJWExv Z1JlY1B0cgltYXhfbHNuOwotCQlpbnQJCQlsc25pbmRleCwKLQkJCQkJbHNub2ZmOwotCi0J CWxzbmluZGV4ID0gc2xvdG5vICogc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlOwotCQlt YXhfbHNuID0gc2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXgrK107Ci0JCWZvciAobHNub2Zm ID0gMTsgbHNub2ZmIDwgc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlOyBsc25vZmYrKykK LQkJewotCQkJWExvZ1JlY1B0cgl0aGlzX2xzbiA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmlu ZGV4KytdOwotCi0JCQlpZiAobWF4X2xzbiA8IHRoaXNfbHNuKQotCQkJCW1heF9sc24gPSB0 aGlzX2xzbjsKLQkJfQotCi0JCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChtYXhfbHNuKSkK LQkJewotCQkJLyoKLQkJCSAqIEFzIG5vdGVkIGFib3ZlLCBlbG9nKEVSUk9SKSBpcyBub3Qg YWNjZXB0YWJsZSBoZXJlLCBzbyBpZgotCQkJICogWExvZ0ZsdXNoIHdlcmUgdG8gZmFpbCwg d2UgbXVzdCBQQU5JQy4gIFRoaXMgaXNuJ3QgbXVjaCBvZiBhCi0JCQkgKiByZXN0cmljdGlv biBiZWNhdXNlIFhMb2dGbHVzaCBpcyBqdXN0IGFib3V0IGFsbCBjcml0aWNhbAotCQkJICog c2VjdGlvbiBhbnl3YXksIGJ1dCBsZXQncyBtYWtlIHN1cmUuCi0JCQkgKi8KLQkJCVNUQVJU X0NSSVRfU0VDVElPTigpOwotCQkJWExvZ0ZsdXNoKG1heF9sc24pOwotCQkJRU5EX0NSSVRf U0VDVElPTigpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBEdXJpbmcgYSBXcml0ZUFsbCwgd2Ug bWF5IGFscmVhZHkgaGF2ZSB0aGUgZGVzaXJlZCBmaWxlIG9wZW4uCi0JICovCi0JaWYgKGZk YXRhKQotCXsKLQkJaW50CQkJaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZmRhdGEtPm51bV9m aWxlczsgaSsrKQotCQl7Ci0JCQlpZiAoZmRhdGEtPnNlZ25vW2ldID09IHNlZ25vKQotCQkJ ewotCQkJCWZkID0gZmRhdGEtPmZkW2ldOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQot Ci0JaWYgKGZkIDwgMCkKLQl7Ci0JCS8qCi0JCSAqIElmIHRoZSBmaWxlIGRvZXNuJ3QgYWxy ZWFkeSBleGlzdCwgd2Ugc2hvdWxkIGNyZWF0ZSBpdC4gIEl0IGlzCi0JCSAqIHBvc3NpYmxl IGZvciB0aGlzIHRvIG5lZWQgdG8gaGFwcGVuIHdoZW4gd3JpdGluZyBhIHBhZ2UgdGhhdCdz IG5vdAotCQkgKiBmaXJzdCBpbiBpdHMgc2VnbWVudDsgd2UgYXNzdW1lIHRoZSBPUyBjYW4g Y29wZSB3aXRoIHRoYXQuIChOb3RlOgotCQkgKiBpdCBtaWdodCBzZWVtIHRoYXQgaXQnZCBi ZSBva2F5IHRvIGNyZWF0ZSBmaWxlcyBvbmx5IHdoZW4KLQkJICogU2ltcGxlTHJ1WmVyb1Bh Z2UgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgcGFnZSBvZiBhIHNlZ21lbnQuCi0JCSAqIEhv d2V2ZXIsIGlmIGFmdGVyIGEgY3Jhc2ggYW5kIHJlc3RhcnQgdGhlIFJFRE8gbG9naWMgZWxl Y3RzIHRvCi0JCSAqIHJlcGxheSB0aGUgbG9nIGZyb20gYSBjaGVja3BvaW50IGJlZm9yZSB0 aGUgbGF0ZXN0IG9uZSwgdGhlbiBpdCdzCi0JCSAqIHBvc3NpYmxlIHRoYXQgd2Ugd2lsbCBn ZXQgY29tbWFuZHMgdG8gc2V0IHRyYW5zYWN0aW9uIHN0YXR1cyBvZgotCQkgKiB0cmFuc2Fj dGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB0cnVuY2F0ZWQgZnJvbSB0aGUgY29tbWl0 IGxvZy4KLQkJICogRWFzaWVzdCB3YXkgdG8gZGVhbCB3aXRoIHRoYXQgaXMgdG8gYWNjZXB0 IHJlZmVyZW5jZXMgdG8KLQkJICogbm9uZXhpc3RlbnQgZmlsZXMgaGVyZSBhbmQgaW4gU2xy dVBoeXNpY2FsUmVhZFBhZ2UuKQotCQkgKgotCQkgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBm b3IgbW9yZSB0aGFuIG9uZSBiYWNrZW5kIHRvIGJlIGV4ZWN1dGluZyB0aGlzCi0JCSAqIGNv ZGUgc2ltdWx0YW5lb3VzbHkgZm9yIGRpZmZlcmVudCBwYWdlcyBvZiB0aGUgc2FtZSBmaWxl LiBIZW5jZSwKLQkJICogZG9uJ3QgdXNlIE9fRVhDTCBvciBPX1RSVU5DIG9yIGFueXRoaW5n IGxpa2UgdGhhdC4KLQkJICovCi0JCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsK LQkJZmQgPSBPcGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBPX0NSRUFUIHwgUEdf QklOQVJZKTsKLQkJaWYgKGZkIDwgMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVf T1BFTl9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KLQotCQlpZiAoZmRhdGEpCi0JCXsKLQkJCWlmIChmZGF0YS0+bnVtX2ZpbGVzIDwg TUFYX1dSSVRFQUxMX0JVRkZFUlMpCi0JCQl7Ci0JCQkJZmRhdGEtPmZkW2ZkYXRhLT5udW1f ZmlsZXNdID0gZmQ7Ci0JCQkJZmRhdGEtPnNlZ25vW2ZkYXRhLT5udW1fZmlsZXNdID0gc2Vn bm87Ci0JCQkJZmRhdGEtPm51bV9maWxlcysrOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJ CS8qCi0JCQkJICogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgd2UgZXhjZWVkIE1BWF9G TFVTSF9CVUZGRVJTLAotCQkJCSAqIGZhbGwgYmFjayB0byB0cmVhdGluZyBpdCBhcyBhIHN0 YW5kYWxvbmUgd3JpdGUuCi0JCQkJICovCi0JCQkJZmRhdGEgPSBOVUxMOwotCQkJfQotCQl9 Ci0JfQorCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBjaGVja2VkIHBhZ2VzICov CisJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9leGlzdHMocmVsX2lkKTsKIAotCWVycm5vID0g MDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1dSSVRFKTsK LQlpZiAocGdfcHdyaXRlKGZkLCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tT Wiwgb2Zmc2V0KSAhPSBCTENLU1opCisJZmlsZSA9IHNscnVmaWxlKHJlbG4sIHBhZ2Vubywg T19SRFdSLCB0cnVlKTsKKwlpZiAoZmlsZSA8IDApCiAJewotCQlwZ3N0YXRfcmVwb3J0X3dh aXRfZW5kKCk7Ci0JCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9i bGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KLQkJaWYgKGVycm5vID09IDApCi0JCQllcnJubyA9 IEVOT1NQQzsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfV1JJVEVfRkFJTEVEOwotCQlzbHJ1 X2Vycm5vID0gZXJybm87Ci0JCWlmICghZmRhdGEpCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUo ZmQpOworCQlBc3NlcnQoZXJybm8gPT0gRU5PRU5UKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0K LQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0KLQkvKiBRdWV1ZSB1cCBhIHN5bmMgcmVx dWVzdCBmb3IgdGhlIGNoZWNrcG9pbnRlci4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIg IT0gU1lOQ19IQU5ETEVSX05PTkUpCi0JewotCQlGaWxlVGFnCQl0YWc7Ci0KLQkJSU5JVF9T TFJVRklMRVRBRyh0YWcsIGN0bC0+c3luY19oYW5kbGVyLCBzZWdubyk7Ci0JCWlmICghUmVn aXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX1JFUVVFU1QsIGZhbHNlKSkKLQkJewotCQkJ LyogTm8gc3BhY2UgdG8gZW5xdWV1ZSBzeW5jIHJlcXVlc3QuICBEbyBpdCBzeW5jaHJvbm91 c2x5LiAqLwotCQkJcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU0xSVV9T WU5DKTsKLQkJCWlmIChwZ19mc3luYyhmZCkgIT0gMCkKLQkJCXsKLQkJCQlwZ3N0YXRfcmVw b3J0X3dhaXRfZW5kKCk7Ci0JCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfRlNZTkNfRkFJTEVE OwotCQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQp OwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQo KTsKLQkJfQotCX0KKwlzaXplID0gRmlsZVNpemUoZmlsZSk7CisJaWYgKHNpemUgPCAwKQor CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGdldCBzaXplIG9mIGZpbGUgXCIlc1wiOiAlbSIs CisJCQkgRmlsZVBhdGhOYW1lKGZpbGUpKTsKIAotCS8qIENsb3NlIGZpbGUsIHVubGVzcyBw YXJ0IG9mIGZsdXNoIHJlcXVlc3QuICovCi0JaWYgKCFmZGF0YSkKLQl7Ci0JCWlmIChDbG9z ZVRyYW5zaWVudEZpbGUoZmQpICE9IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJV X0NMT1NFX0ZBSUxFRDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogSXNzdWUgdGhlIGVy cm9yIG1lc3NhZ2UgYWZ0ZXIgZmFpbHVyZSBvZiBTbHJ1UGh5c2ljYWxSZWFkUGFnZSBvcgot ICogU2xydVBoeXNpY2FsV3JpdGVQYWdlLiAgQ2FsbCB0aGlzIGFmdGVyIGNsZWFuaW5nIHVw IHNoYXJlZC1tZW1vcnkgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1TbHJ1UmVwb3J0SU9F cnJvcihTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0J aW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCWludAkJ CXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCWludAkJCW9m ZnNldCA9IHJwYWdlbm8gKiBCTENLU1o7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCi0J U2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgc2Vnbm8pOwotCWVycm5vID0gc2xydV9lcnJubzsK LQlzd2l0Y2ggKHNscnVfZXJyY2F1c2UpCi0JewotCQljYXNlIFNMUlVfT1BFTl9GQUlMRUQ6 Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK LQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24g JXUiLCB4aWQpLAotCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNc IjogJW0uIiwgcGF0aCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfU0VFS19GQUlMRUQ6 Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK LQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24g JXUiLCB4aWQpLAotCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgc2VlayBpbiBmaWxlIFwi JXNcIiB0byBvZmZzZXQgJWQ6ICVtLiIsCi0JCQkJCQkJICAgcGF0aCwgb2Zmc2V0KSkpOwot CQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9SRUFEX0ZBSUxFRDoKLQkJCWlmIChlcnJubykKLQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0J CQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAl dSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3QgcmVhZCBmcm9tIGZpbGUg XCIlc1wiIGF0IG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwgb2Zmc2V0KSkp OwotCQkJZWxzZQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBu b3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJy ZGV0YWlsKCJDb3VsZCBub3QgcmVhZCBmcm9tIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDog cmVhZCB0b28gZmV3IGJ5dGVzLiIsIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwotCQlj YXNlIFNMUlVfV1JJVEVfRkFJTEVEOgotCQkJaWYgKGVycm5vKQotCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJ CQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIiBhdCBvZmZz ZXQgJWQ6ICVtLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWVsc2UKLQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0 dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQg bm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogd3JvdGUgdG9vIGZldyBi eXRlcy4iLAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJY2Fz ZSBTTFJVX0ZTWU5DX0ZBSUxFRDoKLQkJCWVyZXBvcnQoZGF0YV9zeW5jX2VsZXZlbChFUlJP UiksCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJ CSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBmc3luYyBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJ CQkgICBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9DTE9TRV9GQUlMRUQ6Ci0J CQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJ CQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUi LCB4aWQpLAotCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6 ICVtLiIsCi0JCQkJCQkJICAgcGF0aCkpKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJ LyogY2FuJ3QgZ2V0IGhlcmUsIHdlIHRydXN0ICovCi0JCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIFNpbXBsZUxydSBlcnJvciBjYXVzZTogJWQiLAotCQkJCSAoaW50KSBzbHJ1X2Vy cmNhdXNlKTsKLQkJCWJyZWFrOwotCX0KLX0KLQotLyoKLSAqIFNlbGVjdCB0aGUgc2xvdCB0 byByZS11c2Ugd2hlbiB3ZSBuZWVkIGEgZnJlZSBzbG90LgotICoKLSAqIFRoZSB0YXJnZXQg cGFnZSBudW1iZXIgaXMgcGFzc2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBjb25zaWRlciB0aGUK LSAqIHBvc3NpYmlsaXR5IHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIHJlYWRzIGluIHRoZSB0 YXJnZXQgcGFnZSB3aGlsZQotICogd2UgYXJlIGRvaW5nIEkvTyB0byBmcmVlIGEgc2xvdC4g IEhlbmNlLCBjaGVjayBvciByZWNoZWNrIHRvIHNlZSBpZgotICogYW55IHNsb3QgYWxyZWFk eSBob2xkcyB0aGUgdGFyZ2V0IHBhZ2UsIGFuZCByZXR1cm4gdGhhdCBzbG90IGlmIHNvLgot ICogVGh1cywgdGhlIHJldHVybmVkIHNsb3QgaXMgKmVpdGhlciogYSBzbG90IGFscmVhZHkg aG9sZGluZyB0aGUgcGFnZW5vCi0gKiAoY291bGQgYmUgYW55IHN0YXRlIGV4Y2VwdCBFTVBU WSksICpvciogYSBmcmVlYWJsZSBzbG90IChzdGF0ZSBFTVBUWQotICogb3IgQ0xFQU4pLgot ICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJl IGhlbGQgYXQgZXhpdC4KLSAqLwotc3RhdGljIGludAotU2xydVNlbGVjdExSVVBhZ2UoU2xy dUN0bCBjdGwsIGludCBwYWdlbm8pCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNo YXJlZDsKLQotCS8qIE91dGVyIGxvb3AgaGFuZGxlcyByZXN0YXJ0IGFmdGVyIEkvTyAqLwot CWZvciAoOzspCi0JewotCQlpbnQJCQlzbG90bm87Ci0JCWludAkJCWN1cl9jb3VudDsKLQkJ aW50CQkJYmVzdHZhbGlkc2xvdCA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJ aW50CQkJYmVzdF92YWxpZF9kZWx0YSA9IC0xOwotCQlpbnQJCQliZXN0X3ZhbGlkX3BhZ2Vf bnVtYmVyID0gMDsgLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0aW52 YWxpZHNsb3QgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCWludAkJCWJlc3Rf aW52YWxpZF9kZWx0YSA9IC0xOwotCQlpbnQJCQliZXN0X2ludmFsaWRfcGFnZV9udW1iZXIg PSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0KLQkJLyogU2VlIGlmIHBhZ2UgYWxy ZWFkeSBoYXMgYSBidWZmZXIgYXNzaWduZWQgKi8KLQkJZm9yIChzbG90bm8gPSAwOyBzbG90 bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JCXsKLQkJCWlmIChzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQkJc2hhcmVkLT5wYWdlX3N0 YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSkKLQkJCQlyZXR1cm4gc2xvdG5vOwot CQl9Ci0KLQkJLyoKLQkJICogSWYgd2UgZmluZCBhbnkgRU1QVFkgc2xvdCwganVzdCBzZWxl Y3QgdGhhdCBvbmUuIEVsc2UgY2hvb3NlIGEKLQkJICogdmljdGltIHBhZ2UgdG8gcmVwbGFj ZS4gIFdlIG5vcm1hbGx5IHRha2UgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQKLQkJICogdmFs aWQgcGFnZSwgYnV0IHdlIHdpbGwgbmV2ZXIgdGFrZSB0aGUgc2xvdCBjb250YWluaW5nCi0J CSAqIGxhdGVzdF9wYWdlX251bWJlciwgZXZlbiBpZiBpdCBhcHBlYXJzIGxlYXN0IHJlY2Vu dGx5IHVzZWQuICBXZQotCQkgKiB3aWxsIHNlbGVjdCBhIHNsb3QgdGhhdCBpcyBhbHJlYWR5 IEkvTyBidXN5IG9ubHkgaWYgdGhlcmUgaXMgbm8KLQkJICogb3RoZXIgY2hvaWNlOiBhIHJl YWQtYnVzeSBzbG90IHdpbGwgbm90IGJlIGxlYXN0IHJlY2VudGx5IHVzZWQgb25jZQotCQkg KiB0aGUgcmVhZCBmaW5pc2hlcywgYW5kIHdhaXRpbmcgZm9yIGFuIEkvTyBvbiBhIHdyaXRl LWJ1c3kgc2xvdCBpcwotCQkgKiBpbmZlcmlvciB0byBqdXN0IHBpY2tpbmcgc29tZSBvdGhl ciBzbG90LiAgVGVzdGluZyBzaG93cyB0aGUgc2xvdAotCQkgKiB3ZSBwaWNrIGluc3RlYWQg d2lsbCBvZnRlbiBiZSBjbGVhbiwgYWxsb3dpbmcgdXMgdG8gYmVnaW4gYSByZWFkIGF0Ci0J CSAqIG9uY2UuCi0JCSAqCi0JCSAqIE5vcm1hbGx5IHRoZSBwYWdlX2xydV9jb3VudCB2YWx1 ZXMgd2lsbCBhbGwgYmUgZGlmZmVyZW50IGFuZCBzbwotCQkgKiB0aGVyZSB3aWxsIGJlIGEg d2VsbC1kZWZpbmVkIExSVSBwYWdlLiAgQnV0IHNpbmNlIHdlIGFsbG93Ci0JCSAqIGNvbmN1 cnJlbnQgZXhlY3V0aW9uIG9mIFNscnVSZWNlbnRseVVzZWQoKSB3aXRoaW4KLQkJICogU2lt cGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSwgaXQgaXMgcG9zc2libGUgdGhhdCBtdWx0aXBs ZSBwYWdlcwotCQkgKiBhY3F1aXJlIHRoZSBzYW1lIGxydV9jb3VudCB2YWx1ZXMuICBJbiB0 aGF0IGNhc2Ugd2UgYnJlYWsgdGllcyBieQotCQkgKiBjaG9vc2luZyB0aGUgZnVydGhlc3Qt YmFjayBwYWdlLgotCQkgKgotCQkgKiBOb3RpY2UgdGhhdCB0aGlzIG5leHQgbGluZSBmb3Jj aWJseSBhZHZhbmNlcyBjdXJfbHJ1X2NvdW50IHRvIGEKLQkJICogdmFsdWUgdGhhdCBpcyBj ZXJ0YWlubHkgYmV5b25kIGFueSB2YWx1ZSB0aGF0IHdpbGwgYmUgaW4gdGhlCi0JCSAqIHBh Z2VfbHJ1X2NvdW50IGFycmF5IGFmdGVyIHRoZSBsb29wIGZpbmlzaGVzLiAgVGhpcyBlbnN1 cmVzIHRoYXQKLQkJICogdGhlIG5leHQgZXhlY3V0aW9uIG9mIFNscnVSZWNlbnRseVVzZWQg d2lsbCBtYXJrIHRoZSBwYWdlIG5ld2x5Ci0JCSAqIHVzZWQsIGV2ZW4gaWYgaXQncyBmb3Ig YSBwYWdlIHRoYXQgaGFzIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUuCi0JCSAqIFRoYXQg Z2V0cyB1cyBiYWNrIG9uIHRoZSBwYXRoIHRvIGhhdmluZyBnb29kIGRhdGEgd2hlbiB0aGVy ZSBhcmUKLQkJICogbXVsdGlwbGUgcGFnZXMgd2l0aCB0aGUgc2FtZSBscnVfY291bnQuCi0J CSAqLwotCQljdXJfY291bnQgPSAoc2hhcmVkLT5jdXJfbHJ1X2NvdW50KSsrOwotCQlmb3Ig KHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQkJ ewotCQkJaW50CQkJdGhpc19kZWx0YTsKLQkJCWludAkJCXRoaXNfcGFnZV9udW1iZXI7Ci0K LQkJCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZ KQotCQkJCXJldHVybiBzbG90bm87Ci0JCQl0aGlzX2RlbHRhID0gY3VyX2NvdW50IC0gc2hh cmVkLT5wYWdlX2xydV9jb3VudFtzbG90bm9dOwotCQkJaWYgKHRoaXNfZGVsdGEgPCAwKQot CQkJewotCQkJCS8qCi0JCQkJICogQ2xlYW4gdXAgaW4gY2FzZSBzaGFyZWQgdXBkYXRlcyBo YXZlIGNhdXNlZCBjdXJfY291bnQKLQkJCQkgKiBpbmNyZW1lbnRzIHRvIGdldCAibG9zdCIu ICBXZSBiYWNrIG9mZiB0aGUgcGFnZSBjb3VudHMsCi0JCQkJICogcmF0aGVyIHRoYW4gdHJ5 aW5nIHRvIGluY3JlYXNlIGN1cl9jb3VudCwgdG8gYXZvaWQgYW55Ci0JCQkJICogcXVlc3Rp b24gb2YgaW5maW5pdGUgbG9vcHMgb3IgZmFpbHVyZSBpbiB0aGUgcHJlc2VuY2Ugb2YKLQkJ CQkgKiB3cmFwcGVkLWFyb3VuZCBjb3VudHMuCi0JCQkJICovCi0JCQkJc2hhcmVkLT5wYWdl X2xydV9jb3VudFtzbG90bm9dID0gY3VyX2NvdW50OwotCQkJCXRoaXNfZGVsdGEgPSAwOwot CQkJfQotCQkJdGhpc19wYWdlX251bWJlciA9IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5v XTsKLQkJCWlmICh0aGlzX3BhZ2VfbnVtYmVyID09IHNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVt YmVyKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQl7Ci0JCQkJaWYgKHRoaXNfZGVsdGEgPiBiZXN0 X3ZhbGlkX2RlbHRhIHx8Ci0JCQkJCSh0aGlzX2RlbHRhID09IGJlc3RfdmFsaWRfZGVsdGEg JiYKLQkJCQkJIGN0bC0+UGFnZVByZWNlZGVzKHRoaXNfcGFnZV9udW1iZXIsCi0JCQkJCQkJ CQkgICBiZXN0X3ZhbGlkX3BhZ2VfbnVtYmVyKSkpCi0JCQkJewotCQkJCQliZXN0dmFsaWRz bG90ID0gc2xvdG5vOwotCQkJCQliZXN0X3ZhbGlkX2RlbHRhID0gdGhpc19kZWx0YTsKLQkJ CQkJYmVzdF92YWxpZF9wYWdlX251bWJlciA9IHRoaXNfcGFnZV9udW1iZXI7Ci0JCQkJfQot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCWlmICh0aGlzX2RlbHRhID4gYmVzdF9pbnZhbGlk X2RlbHRhIHx8Ci0JCQkJCSh0aGlzX2RlbHRhID09IGJlc3RfaW52YWxpZF9kZWx0YSAmJgot CQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAg IGJlc3RfaW52YWxpZF9wYWdlX251bWJlcikpKQotCQkJCXsKLQkJCQkJYmVzdGludmFsaWRz bG90ID0gc2xvdG5vOwotCQkJCQliZXN0X2ludmFsaWRfZGVsdGEgPSB0aGlzX2RlbHRhOwot CQkJCQliZXN0X2ludmFsaWRfcGFnZV9udW1iZXIgPSB0aGlzX3BhZ2VfbnVtYmVyOwotCQkJ CX0KLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIElmIGFsbCBwYWdlcyAoZXhjZXB0IHBvc3Np Ymx5IHRoZSBsYXRlc3Qgb25lKSBhcmUgSS9PIGJ1c3ksIHdlJ2xsCi0JCSAqIGhhdmUgdG8g d2FpdCBmb3IgYW4gSS9PIHRvIGNvbXBsZXRlIGFuZCB0aGVuIHJldHJ5LiAgSW4gdGhhdAot CQkgKiB1bmhhcHB5IGNhc2UsIHdlIGNob29zZSB0byB3YWl0IGZvciB0aGUgSS9PIG9uIHRo ZSBsZWFzdCByZWNlbnRseQotCQkgKiB1c2VkIHNsb3QsIG9uIHRoZSBhc3N1bXB0aW9uIHRo YXQgaXQgd2FzIGxpa2VseSBpbml0aWF0ZWQgZmlyc3Qgb2YKLQkJICogYWxsIHRoZSBJL09z IGluIHByb2dyZXNzIGFuZCBtYXkgdGhlcmVmb3JlIGZpbmlzaCBmaXJzdC4KLQkJICovCi0J CWlmIChiZXN0X3ZhbGlkX2RlbHRhIDwgMCkKLQkJewotCQkJU2ltcGxlTHJ1V2FpdElPKGN0 bCwgYmVzdGludmFsaWRzbG90KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICog SWYgdGhlIHNlbGVjdGVkIHBhZ2UgaXMgY2xlYW4sIHdlJ3JlIHNldC4KLQkJICovCi0JCWlm ICghc2hhcmVkLT5wYWdlX2RpcnR5W2Jlc3R2YWxpZHNsb3RdKQotCQkJcmV0dXJuIGJlc3R2 YWxpZHNsb3Q7Ci0KLQkJLyoKLQkJICogV3JpdGUgdGhlIHBhZ2UuCi0JCSAqLwotCQlTbHJ1 SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBiZXN0dmFsaWRzbG90LCBOVUxMKTsKLQotCQkvKgot CQkgKiBOb3cgbG9vcCBiYWNrIGFuZCB0cnkgYWdhaW4uICBUaGlzIGlzIHRoZSBlYXNpZXN0 IHdheSBvZiBkZWFsaW5nCi0JCSAqIHdpdGggY29ybmVyIGNhc2VzIHN1Y2ggYXMgdGhlIHZp Y3RpbSBwYWdlIGJlaW5nIHJlLWRpcnRpZWQgd2hpbGUgd2UKLQkJICogd3JvdGUgaXQuCi0J CSAqLwotCX0KLX0KLQotLyoKLSAqIFdyaXRlIGRpcnR5IHBhZ2VzIHRvIGRpc2sgZHVyaW5n IGNoZWNrcG9pbnQgb3IgZGF0YWJhc2Ugc2h1dGRvd24uICBGbHVzaGluZwotICogaXMgZGVm ZXJyZWQgdW50aWwgdGhlIG5leHQgY2FsbCB0byBQcm9jZXNzU3luY1JlcXVlc3RzKCksIHRo b3VnaCB3ZSBkbyBmc3luYwotICogdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGhlcmUgdG8g bWFrZSBzdXJlIHRoYXQgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnkKLSAqIGVudHJpZXMgYXJl IG9uIGRpc2suCi0gKi8KLXZvaWQKLVNpbXBsZUxydVdyaXRlQWxsKFNscnVDdGwgY3RsLCBi b29sIGFsbG93X3JlZGlydGllZCkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hh cmVkOwotCVNscnVXcml0ZUFsbERhdGEgZmRhdGE7Ci0JaW50CQkJc2xvdG5vOwotCWludAkJ CXBhZ2VubyA9IDA7Ci0JaW50CQkJaTsKLQlib29sCQlvazsKLQotCS8qIHVwZGF0ZSB0aGUg c3RhdHMgY291bnRlciBvZiBmbHVzaGVzICovCi0JcGdzdGF0X2NvdW50X3NscnVfZmx1c2go c2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkvKgotCSAqIEZpbmQgYW5kIHdyaXRlIGRp cnR5IHBhZ2VzCi0JICovCi0JZmRhdGEubnVtX2ZpbGVzID0gMDsKLQotCUxXTG9ja0FjcXVp cmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCWZvciAoc2xvdG5v ID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7IHNsb3RubysrKQotCXsKLQkJU2xy dUludGVybmFsV3JpdGVQYWdlKGN0bCwgc2xvdG5vLCAmZmRhdGEpOwotCi0JCS8qCi0JCSAq IEluIHNvbWUgcGxhY2VzIChlLmcuIGNoZWNrcG9pbnRzKSwgd2UgY2Fubm90IGFzc2VydCB0 aGF0IHRoZSBzbG90Ci0JCSAqIGlzIGNsZWFuIG5vdywgc2luY2UgYW5vdGhlciBwcm9jZXNz IG1pZ2h0IGhhdmUgcmUtZGlydGllZCBpdAotCQkgKiBhbHJlYWR5LiAgVGhhdCdzIG9rYXku Ci0JCSAqLwotCQlBc3NlcnQoYWxsb3dfcmVkaXJ0aWVkIHx8Ci0JCQkgICBzaGFyZWQtPnBh Z2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZIHx8Ci0JCQkgICAoc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJCSFzaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkpOwotCX0KLQotCUxXTG9ja1JlbGVhc2Uoc2hhcmVk LT5Db250cm9sTG9jayk7Ci0KLQkvKgotCSAqIE5vdyBjbG9zZSBhbnkgZmlsZXMgdGhhdCB3 ZXJlIG9wZW4KLQkgKi8KLQlvayA9IHRydWU7Ci0JZm9yIChpID0gMDsgaSA8IGZkYXRhLm51 bV9maWxlczsgaSsrKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZGF0YS5mZFtp XSkgIT0gMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwot CQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcGFnZW5vID0gZmRhdGEuc2Vnbm9baV0gKiBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCQkJb2sgPSBmYWxzZTsKLQkJfQotCX0KLQlpZiAo IW9rKQotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0 aW9uSWQpOwotCi0JLyogRW5zdXJlIHRoYXQgZGlyZWN0b3J5IGVudHJpZXMgZm9yIG5ldyBm aWxlcyBhcmUgb24gZGlzay4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIgIT0gU1lOQ19I QU5ETEVSX05PTkUpCi0JCWZzeW5jX2ZuYW1lKGN0bC0+RGlyLCB0cnVlKTsKKwlyZXR1cm4g c2l6ZSA+PSBvZmZzZXQgKyBCTENLU1o7CiB9CiAKIC8qCkBAIC0xMjIzLDc1ICsxNDksMTQg QEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVk KQogICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0dGVuIGRhdGEuCiAgKi8K IHZvaWQKLVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0b2ZmUGFnZSkK K1NpbXBsZUxydVRydW5jYXRlKE9pZCByZWxfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsIGludCBjdXRvZmZQYWdlKQogewotCVNscnVTaGFyZWQJc2hhcmVk ID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xvdG5vOwotCiAJLyogdXBkYXRlIHRoZSBzdGF0 cyBjb3VudGVyIG9mIHRydW5jYXRlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3RydW5jYXRl KHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JLyoKLQkgKiBTY2FuIHNoYXJlZCBtZW1v cnkgYW5kIHJlbW92ZSBhbnkgcGFnZXMgcHJlY2VkaW5nIHRoZSBjdXRvZmYgcGFnZSwgdG8K LQkgKiBlbnN1cmUgd2Ugd29uJ3QgcmV3cml0ZSB0aGVtIGxhdGVyLiAgKFNpbmNlIHRoaXMg aXMgbm9ybWFsbHkgY2FsbGVkIGluCi0JICogb3IganVzdCBhZnRlciBhIGNoZWNrcG9pbnQs IGFueSBkaXJ0eSBwYWdlcyBzaG91bGQgaGF2ZSBiZWVuIGZsdXNoZWQKLQkgKiBhbHJlYWR5 IC4uLiB3ZSdyZSBqdXN0IGJlaW5nIGV4dHJhIGNhcmVmdWwgaGVyZS4pCi0JICovCi0JTFdM b2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi1yZXN0 YXJ0OjsKLQotCS8qCi0JICogV2hpbGUgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2ssIG1ha2Ug YW4gaW1wb3J0YW50IHNhZmV0eSBjaGVjazogdGhlCi0JICogY3VycmVudCBlbmRwb2ludCBw YWdlIG11c3Qgbm90IGJlIGVsaWdpYmxlIGZvciByZW1vdmFsLgotCSAqLwotCWlmIChjdGwt PlBhZ2VQcmVjZWRlcyhzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciwgY3V0b2ZmUGFnZSkp Ci0JewotCQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCQllcmVwb3J0 KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZGlyZWN0b3J5IFwiJXNc IjogYXBwYXJlbnQgd3JhcGFyb3VuZCIsCi0JCQkJCQljdGwtPkRpcikpKTsKLQkJcmV0dXJu OwotCX0KLQotCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7 IHNsb3RubysrKQotCXsKLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBT TFJVX1BBR0VfRU1QVFkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFjdGwtPlBhZ2VQcmVjZWRl cyhzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10sIGN1dG9mZlBhZ2UpKQotCQkJY29udGlu dWU7Ci0KLQkJLyoKLQkJICogSWYgcGFnZSBpcyBjbGVhbiwganVzdCBjaGFuZ2Ugc3RhdGUg dG8gRU1QVFkgKGV4cGVjdGVkIGNhc2UpLgotCQkgKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSkKLQkJewotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0g U0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBIbW0s IHdlIGhhdmUgKG9yIG1heSBoYXZlKSBJL08gb3BlcmF0aW9ucyBhY3Rpbmcgb24gdGhlIHBh Z2UsIHNvCi0JCSAqIHdlJ3ZlIGdvdCB0byB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaCBhbmQg dGhlbiBzdGFydCBhZ2Fpbi4gVGhpcyBpcwotCQkgKiB0aGUgc2FtZSBsb2dpYyBhcyBpbiBT bHJ1U2VsZWN0TFJVUGFnZS4gIChYWFggaWYgcGFnZSBpcyBkaXJ0eSwKLQkJICogd291bGRu J3QgaXQgYmUgT0sgdG8ganVzdCBkaXNjYXJkIGl0IHdpdGhvdXQgd3JpdGluZyBpdD8KLQkJ ICogU2xydU1heURlbGV0ZVNlZ21lbnQoKSB1c2VzIGEgc3RyaWN0ZXIgcXVhbGlmaWNhdGlv biwgc28gd2UgbWlnaHQKLQkJICogbm90IGRlbGV0ZSB0aGlzIHBhZ2UgaW4gdGhlIGVuZDsg ZXZlbiBpZiB3ZSBkb24ndCBkZWxldGUgaXQsIHdlCi0JCSAqIHdvbid0IGhhdmUgY2F1c2Ug dG8gcmVhZCBpdHMgZGF0YSBhZ2Fpbi4gIEZvciBub3csIGtlZXAgdGhlIGxvZ2ljCi0JCSAq IHRoZSBzYW1lIGFzIGl0IHdhcy4pCi0JCSAqLwotCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCVNscnVJbnRlcm5hbFdyaXRlUGFn ZShjdGwsIHNsb3RubywgTlVMTCk7Ci0JCWVsc2UKLQkJCVNpbXBsZUxydVdhaXRJTyhjdGws IHNsb3Rubyk7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlMV0xvY2tSZWxlYXNlKHNoYXJl ZC0+Q29udHJvbExvY2spOworCXBnc3RhdF9jb3VudF9zbHJ1X3RydW5jYXRlKHJlbF9pZCk7 CiAKIAkvKiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUgb2xkIHNlZ21lbnQocykgKi8KLQkodm9p ZCkgU2xydVNjYW5EaXJlY3RvcnkoY3RsLCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmLCAm Y3V0b2ZmUGFnZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KHJlbF9pZCwgUGFnZVBy ZWNlZGVzLCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmLAorCQkJCQkJCSAmY3V0b2ZmUGFn ZSk7CiB9CiAKIC8qCkBAIC0xMzAxLDIxICsxNjYsMjEgQEAgcmVzdGFydDo7CiAgKiB0aGV5 IGVpdGhlciBjYW4ndCB5ZXQgY29udGFpbiBhbnl0aGluZywgb3IgaGF2ZSBhbHJlYWR5IGJl ZW4gY2xlYW5lZCBvdXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TbHJ1SW50ZXJuYWxEZWxldGVT ZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVTZWdt ZW50KE9pZCByZWxfaWQsIGludCBzZWdubykKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07 CiAKIAkvKiBGb3JnZXQgYW55IGZzeW5jIHJlcXVlc3RzIHF1ZXVlZCBmb3IgdGhpcyBzZWdt ZW50LiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkK KwlpZiAoZGVmc1tyZWxfaWRdLnN5bmNocm9uaXplKQogCXsKIAkJRmlsZVRhZwkJdGFnOwog Ci0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8pOwor CQlJTklUX1NMUlVGSUxFVEFHKHRhZywgcmVsX2lkLCBzZWdubyk7CiAJCVJlZ2lzdGVyU3lu Y1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVTVCwgdHJ1ZSk7CiAJfQogCiAJLyog VW5saW5rIHRoZSBmaWxlLiAqLwotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsK KwlTbHJ1RmlsZU5hbWUocmVsX2lkLCBwYXRoLCBzZWdubyk7CiAJZXJlcG9ydChERUJVRzIs IChlcnJtc2dfaW50ZXJuYWwoInJlbW92aW5nIGZpbGUgXCIlc1wiIiwgcGF0aCkpKTsKIAl1 bmxpbmsocGF0aCk7CiB9CkBAIC0xMzI0LDU0ICsxODksMTUgQEAgU2xydUludGVybmFsRGVs ZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50IHNlZ25vKQogICogRGVsZXRlIGFuIGluZGl2 aWR1YWwgU0xSVSBzZWdtZW50LCBpZGVudGlmaWVkIGJ5IHRoZSBzZWdtZW50IG51bWJlci4K ICAqLwogdm9pZAotU2xydURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubykK K1NscnVEZWxldGVTZWdtZW50KFJlbEZpbGVOdW1iZXIgcmVsX251bWJlciwgaW50IHNlZ25v KQogewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xvdG5v OwotCWJvb2wJCWRpZF93cml0ZTsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVS ZWxGaWxlTG9jYXRvcihyZWxfbnVtYmVyKTsKIAogCS8qIENsZWFuIG91dCBhbnkgcG9zc2li bHkgZXhpc3RpbmcgcmVmZXJlbmNlcyB0byB0aGUgc2VnbWVudC4gKi8KLQlMV0xvY2tBY3F1 aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci1yZXN0YXJ0OgotCWRp ZF93cml0ZSA9IGZhbHNlOwotCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5u dW1fc2xvdHM7IHNsb3RubysrKQotCXsKLQkJaW50CQkJcGFnZXNlZ25vID0gc2hhcmVkLT5w YWdlX251bWJlcltzbG90bm9dIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQotCQlpZiAo c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSkKLQkJCWNv bnRpbnVlOwotCi0JCS8qIG5vdCB0aGUgc2VnbWVudCB3ZSdyZSBsb29raW5nIGZvciAqLwot CQlpZiAocGFnZXNlZ25vICE9IHNlZ25vKQotCQkJY29udGludWU7Ci0KLQkJLyogSWYgcGFn ZSBpcyBjbGVhbiwganVzdCBjaGFuZ2Ugc3RhdGUgdG8gRU1QVFkgKGV4cGVjdGVkIGNhc2Up LiAqLwotCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9W QUxJRCAmJgotCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKQotCQl7Ci0JCQlzaGFy ZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfRU1QVFk7Ci0JCQljb250aW51 ZTsKLQkJfQorCWZvciAoaW50IGkgPSAwOyBpIDwgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsg KytpKQorCQlEaXNjYXJkQnVmZmVyKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHNlZ25vICog U0xSVV9QQUdFU19QRVJfU0VHTUVOVCArIGkpOwogCi0JCS8qIFNhbWUgbG9naWMgYXMgU2lt cGxlTHJ1VHJ1bmNhdGUoKSAqLwotCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNs b3RubywgTlVMTCk7Ci0JCWVsc2UKLQkJCVNpbXBsZUxydVdhaXRJTyhjdGwsIHNsb3Rubyk7 Ci0KLQkJZGlkX3dyaXRlID0gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIEJlIGV4dHJhIGNhcmVm dWwgYW5kIHJlLWNoZWNrLiBUaGUgSU8gZnVuY3Rpb25zIHJlbGVhc2UgdGhlIGNvbnRyb2wK LQkgKiBsb2NrLCBzbyBuZXcgcGFnZXMgY291bGQgaGF2ZSBiZWVuIHJlYWQgaW4uCi0JICov Ci0JaWYgKGRpZF93cml0ZSkKLQkJZ290byByZXN0YXJ0OwotCi0JU2xydUludGVybmFsRGVs ZXRlU2VnbWVudChjdGwsIHNlZ25vKTsKLQotCUxXTG9ja1JlbGVhc2Uoc2hhcmVkLT5Db250 cm9sTG9jayk7CisJU2xydUludGVybmFsRGVsZXRlU2VnbWVudChyZWxfbnVtYmVyLCBzZWdu byk7CiB9CiAKIC8qCkBAIC0xMzg4LDE5ICsyMTQsMjEgQEAgcmVzdGFydDoKICAqIGZpcnN0 Pj1jdXRvZmYgJiYgbGFzdD49Y3V0b2ZmOiBubzsgZXZlcnkgcGFnZSBvZiB0aGlzIHNlZ21l bnQgaXMgdG9vIHlvdW5nCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1TWF5RGVsZXRlU2VnbWVu dChTbHJ1Q3RsIGN0bCwgaW50IHNlZ3BhZ2UsIGludCBjdXRvZmZQYWdlKQorU2xydU1heURl bGV0ZVNlZ21lbnQoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJ CQkJIGludCBzZWdwYWdlLCBpbnQgY3V0b2ZmUGFnZSkKIHsKIAlpbnQJCQlzZWdfbGFzdF9w YWdlID0gc2VncGFnZSArIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgLSAxOwogCiAJQXNzZXJ0 KHNlZ3BhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UID09IDApOwogCi0JcmV0dXJuIChj dGwtPlBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAmJgotCQkJY3RsLT5QYWdl UHJlY2VkZXMoc2VnX2xhc3RfcGFnZSwgY3V0b2ZmUGFnZSkpOworCXJldHVybiAoUGFnZVBy ZWNlZGVzKHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpICYmCisJCQlQYWdlUHJlY2VkZXMoc2VnX2xh c3RfcGFnZSwgY3V0b2ZmUGFnZSkpOwogfQogCiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO Rwogc3RhdGljIHZvaWQKLVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3Rs LCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCitTbHJ1UGFnZVByZWNlZGVzVGVzdE9m ZnNldChTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJICAg aW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogewogCVRyYW5zYWN0aW9uSWQgbGhzLAog CQkJCXJoczsKQEAgLTE0MjUsMTkgKzI1MywxOSBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9m ZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogCUFzc2Vy dCghVHJhbnNhY3Rpb25JZFByZWNlZGVzKHJocywgbGhzICsgMSkpOwogCUFzc2VydCghVHJh bnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhsaHMsIHJocykpOwogCUFzc2VydCghVHJhbnNh Y3Rpb25JZEZvbGxvd3NPckVxdWFscyhyaHMsIGxocykpOwotCUFzc2VydCghY3RsLT5QYWdl UHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFj dGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKLQlB c3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFn ZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMoKGxocyAtIHBlcl9wYWdlKSAvIHBl cl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcyhy aHMgLyBwZXJfcGFnZSwgKGxocyAtIDMgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOwotCUFz c2VydChjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJf cGFnZSkgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyAtIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkKKwlBc3NlcnQoIVBh Z2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQo IVBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3Nl cnQoIVBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKKwlB c3NlcnQoIVBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAv IHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxo cyAtIDMgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMo cmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlB c3NlcnQoUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMSAqIHBlcl9wYWdl KSAvIHBlcl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7CS8q IFNlZSBDb21taXRUc1BhZ2VQcmVjZWRlcygpICovCi0JQXNzZXJ0KGN0bC0+UGFnZVByZWNl ZGVzKChsaHMgKyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKQor CUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwg cmhzIC8gcGVyX3BhZ2UpCiAJCSAgIHx8ICgxVSA8PCAzMSkgJSBwZXJfcGFnZSAhPSAwKTsK LQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMoKGxocyArIDIgKiBwZXJfcGFnZSkgLyBwZXJf cGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMoKGxo cyArIDMgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKLQlBc3Nl cnQoIWN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzICsgcGVyX3BhZ2Up IC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKChsaHMgKyAyICogcGVyX3Bh Z2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRl cygobGhzICsgMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwor CUFzc2VydCghUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzICsgcGVyX3BhZ2Up IC8gcGVyX3BhZ2UpKTsKIAogCS8qCiAJICogR2V0TmV3VHJhbnNhY3Rpb25JZCgpIGhhcyBh c3NpZ25lZCB0aGUgbGFzdCBYSUQgaXQgY2FuIHNhZmVseSB1c2UsIGFuZApAQCAtMTQ1MCw3 ICsyNzgsNyBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50 IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogCW9sZGVzdFhhY3QgPSBuZXdlc3RYYWN0ICsg MTsKIAlvbGRlc3RYYWN0IC09IDFVIDw8IDMxOwogCW9sZGVzdFBhZ2UgPSBvbGRlc3RYYWN0 IC8gcGVyX3BhZ2U7Ci0JQXNzZXJ0KCFTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsCisJQXNz ZXJ0KCFTbHJ1TWF5RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsCiAJCQkJCQkJCSAobmV3 ZXN0UGFnZSAtCiAJCQkJCQkJCSAgbmV3ZXN0UGFnZSAlIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQpLAogCQkJCQkJCQkgb2xkZXN0UGFnZSkpOwpAQCAtMTQ2Niw3ICsyOTQsNyBAQCBTbHJ1 UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50 MzIgb2Zmc2V0KQogCW9sZGVzdFhhY3QgPSBuZXdlc3RYYWN0ICsgMTsKIAlvbGRlc3RYYWN0 IC09IDFVIDw8IDMxOwogCW9sZGVzdFBhZ2UgPSBvbGRlc3RYYWN0IC8gcGVyX3BhZ2U7Ci0J QXNzZXJ0KCFTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsCisJQXNzZXJ0KCFTbHJ1TWF5RGVs ZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsCiAJCQkJCQkJCSAobmV3ZXN0UGFnZSAtCiAJCQkJ CQkJCSAgbmV3ZXN0UGFnZSAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpLAogCQkJCQkJCQkg b2xkZXN0UGFnZSkpOwpAQCAtMTQ4MiwxMiArMzEwLDEyIEBAIFNscnVQYWdlUHJlY2VkZXNU ZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAg KiBkbyBub3QgYXBwbHkgdG8gdGhlbS4pCiAgKi8KIHZvaWQKLVNscnVQYWdlUHJlY2VkZXNV bml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSkKK1NscnVQYWdlUHJlY2VkZXNV bml0VGVzdHMoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywgaW50IHBl cl9wYWdlKQogewogCS8qIFRlc3QgZmlyc3QsIG1pZGRsZSBhbmQgbGFzdCBlbnRyaWVzIG9m IGEgcGFnZS4gKi8KLQlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGwsIHBlcl9wYWdl LCAwKTsKLQlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGwsIHBlcl9wYWdlLCBwZXJf cGFnZSAvIDIpOwotCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KGN0bCwgcGVyX3BhZ2Us IHBlcl9wYWdlIC0gMSk7CisJU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoUGFnZVByZWNl ZGVzLCBwZXJfcGFnZSwgMCk7CisJU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoUGFnZVBy ZWNlZGVzLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLyAyKTsKKwlTbHJ1UGFnZVByZWNlZGVzVGVz dE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdlLCBwZXJfcGFnZSAtIDEpOwogfQogI2Vu ZGlmCiAKQEAgLTE0OTcsMTEgKzMyNSwxMiBAQCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3Rz KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpCiAgKgkJb25lIGNvbnRhaW5pbmcgdGhlIHBh Z2UgcGFzc2VkIGFzICJkYXRhIi4KICAqLwogYm9vbAotU2xydVNjYW5EaXJDYlJlcG9ydFBy ZXNlbmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQg KmRhdGEpCitTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoT2lkIHJlbF9pZCwgU2xydVBh Z2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQljaGFyICpmaWxlbmFt ZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJaW50CQkJY3V0b2ZmUGFnZSA9ICoo aW50ICopIGRhdGE7CiAKLQlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLCBzZWdwYWdl LCBjdXRvZmZQYWdlKSkKKwlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVz LCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKIAkJcmV0dXJuIHRydWU7CQkJLyogZm91bmQgb25l OyBkb24ndCBpdGVyYXRlIGFueSBtb3JlICovCiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtl ZXAgZ29pbmcgKi8KQEAgLTE1MTIsMTIgKzM0MSwxOCBAQCBTbHJ1U2NhbkRpckNiUmVwb3J0 UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9p ZCAqZGF0YQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBzZWdtZW50cyBwcmlvciB0byB0 aGUgb25lIHBhc3NlZCBpbiBhcyAiZGF0YSIuCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1U2Nh bkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNl Z3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFJlbEZpbGVO dW1iZXIgcmVsX251bWJlciwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRl cywKKwkJCQkJCSAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQog eworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHJlbF9u dW1iZXIpOwogCWludAkJCWN1dG9mZlBhZ2UgPSAqKGludCAqKSBkYXRhOwogCi0JaWYgKFNs cnVNYXlEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSwgY3V0b2ZmUGFnZSkpCi0JCVNscnVJ bnRlcm5hbERlbGV0ZVNlZ21lbnQoY3RsLCBzZWdwYWdlIC8gU0xSVV9QQUdFU19QRVJfU0VH TUVOVCk7CisJaWYgKFNscnVNYXlEZWxldGVTZWdtZW50KFBhZ2VQcmVjZWRlcywgc2VncGFn ZSwgY3V0b2ZmUGFnZSkpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7ICsraSkKKwkJCURpc2NhcmRCdWZmZXIocmxvY2F0b3IsIE1BSU5fRk9S S05VTSwgc2VncGFnZSArIGkpOworCQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KHJlbF9u dW1iZXIsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwl9CiAKIAlyZXR1 cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KIH0KQEAgLTE1MjcsOSArMzYyLDEwIEBA IFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1l LCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKICAqCQlUaGlzIGNhbGxiYWNrIGRlbGV0ZXMg YWxsIHNlZ21lbnRzLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVD dGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1 U2NhbkRpckNiRGVsZXRlQWxsKE9pZCByZWxfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsCisJCQkJCSAgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwg dm9pZCAqZGF0YSkKIHsKLQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFn ZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21l bnQocmVsX2lkLCBzZWdwYWdlIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7CiAKIAlyZXR1 cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KIH0KQEAgLTE1NTAsMTYgKzM4NiwyMCBA QCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwg aW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiAgKiBOb3RlIHRoYXQgbm8gbG9ja2luZyBpcyBh cHBsaWVkLgogICovCiBib29sCi1TbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xy dVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyZWN0b3J5 KE9pZCByZWxfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJ CQkJICBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQogewogCWJvb2wJ CXJldHZhbCA9IGZhbHNlOwogCURJUgkJICAgKmNsZGlyOwogCXN0cnVjdCBkaXJlbnQgKmNs ZGU7CiAJaW50CQkJc2Vnbm87CiAJaW50CQkJc2VncGFnZTsKKwljb25zdCBjaGFyICpwYXRo OwogCi0JY2xkaXIgPSBBbGxvY2F0ZURpcihjdGwtPkRpcik7Ci0Jd2hpbGUgKChjbGRlID0g UmVhZERpcihjbGRpciwgY3RsLT5EaXIpKSAhPSBOVUxMKQorCXBhdGggPSBkZWZzW3JlbF9p ZF0ucGF0aDsKKworCWNsZGlyID0gQWxsb2NhdGVEaXIocGF0aCk7CisJd2hpbGUgKChjbGRl ID0gUmVhZERpcihjbGRpciwgcGF0aCkpICE9IE5VTEwpCiAJewogCQlzaXplX3QJCWxlbjsK IApAQCAtMTU3Miw4ICs0MTIsOCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwg U2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAkJCXNlZ3BhZ2UgPSBz ZWdubyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAKIAkJCWVsb2coREVCVUcyLCAiU2xy dVNjYW5EaXJlY3RvcnkgaW52b2tpbmcgY2FsbGJhY2sgb24gJXMvJXMiLAotCQkJCSBjdGwt PkRpciwgY2xkZS0+ZF9uYW1lKTsKLQkJCXJldHZhbCA9IGNhbGxiYWNrKGN0bCwgY2xkZS0+ ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKKwkJCQkgcGF0aCwgY2xkZS0+ZF9uYW1lKTsKKwkJ CXJldHZhbCA9IGNhbGxiYWNrKHJlbF9pZCwgUGFnZVByZWNlZGVzLCBjbGRlLT5kX25hbWUs IHNlZ3BhZ2UsIGRhdGEpOwogCQkJaWYgKHJldHZhbCkKIAkJCQlicmVhazsKIAkJfQpAQCAt MTU4MywzMCArNDIzLDI5NCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xy dVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAlyZXR1cm4gcmV0dmFsOwog fQogCit2b2lkCitDaGVja1BvaW50U0xSVSh2b2lkKQoreworCS8qIEVuc3VyZSB0aGF0IGRp cmVjdG9yeSBlbnRyaWVzIGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBsZW5ndGhvZihkZWZzKTsgKytpKQorCXsKKwkJaWYgKGRlZnNbaV0u c3luY2hyb25pemUpCisJCQlmc3luY19mbmFtZShkZWZzW2ldLnBhdGgsIHRydWUpOworCX0K K30KKwogLyoKLSAqIEluZGl2aWR1YWwgU0xSVXMgKGNsb2csIC4uLikgaGF2ZSB0byBwcm92 aWRlIGEgc3luYy5jIGhhbmRsZXIgZnVuY3Rpb24gc28KLSAqIHRoYXQgdGhleSBjYW4gcHJv dmlkZSB0aGUgY29ycmVjdCAiU2xydUN0bCIgKG90aGVyd2lzZSB3ZSBkb24ndCBrbm93IGhv dyB0bwotICogYnVpbGQgdGhlIHBhdGgpLCBidXQgdGhleSBqdXN0IGZvcndhcmQgdG8gdGhp cyBjb21tb24gaW1wbGVtZW50YXRpb24gdGhhdAotICogcGVyZm9ybXMgdGhlIGZzeW5jLgor ICogUmVhZCBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5uZWQgb24gcmV0dXJuLgogICovCi1p bnQKLVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywg Y2hhciAqcGF0aCkKK0J1ZmZlcgorUmVhZFNscnVCdWZmZXIoUmVsRmlsZU51bWJlciByZWxf bnVtYmVyLCBpbnQgcGFnZW5vKQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xy dVJlbEZpbGVMb2NhdG9yKHJlbF9udW1iZXIpOworCUJ1ZmZlcgkJYnVmZmVyOworCWJvb2wJ CWhpdDsKKworCS8qIFRyeSB0byBhdm9pZCBkb2luZyBhIGJ1ZmZlciBtYXBwaW5nIHRhYmxl IGxvb2t1cCBmb3IgcmVwZWF0ZWQgYWNjZXNzLiAqLworCWJ1ZmZlciA9IHNscnVfcmVjZW50 X2J1ZmZlcnNbcmVsX251bWJlcl0ucmVjZW50X2J1ZmZlcjsKKwlpZiAoc2xydV9yZWNlbnRf YnVmZmVyc1tyZWxfbnVtYmVyXS5wYWdlbm8gPT0gcGFnZW5vICYmCisJCUJ1ZmZlcklzVmFs aWQoYnVmZmVyKSAmJgorCQlSZWFkUmVjZW50QnVmZmVyKHJsb2NhdG9yLCBNQUlOX0ZPUktO VU0sIHBhZ2VubywgYnVmZmVyKSkKKwl7CisJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0 KHJlbF9udW1iZXIpOworCQlyZXR1cm4gYnVmZmVyOworCX0KKworCS8qIFJlZ3VsYXIgbG9v a3VwLiAqLworCWJ1ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KHJs b2NhdG9yLCBNQUlOX0ZPUktOVU0sIHBhZ2VubywKKwkJCQkJCQkJCQkJICBSQk1fTk9STUFM LCAmaGl0KTsKKworCS8qIFJlbWVtYmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4dCB0 aW1lLiAqLworCXNscnVfcmVjZW50X2J1ZmZlcnNbcmVsX251bWJlcl0ucGFnZW5vID0gcGFn ZW5vOworCXNscnVfcmVjZW50X2J1ZmZlcnNbcmVsX251bWJlcl0ucmVjZW50X2J1ZmZlciA9 IGJ1ZmZlcjsKKworCWlmIChoaXQpCisJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0KHJl bF9udW1iZXIpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoKKyAqIFplcm8taW5pdGlh bGl6ZSBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGV4Y2x1c2l2ZWx5IGxvY2tl ZCBvbiByZXR1cm4uCisgKi8KK0J1ZmZlcgorWmVyb1NscnVCdWZmZXIoUmVsRmlsZU51bWJl ciByZWxfbnVtYmVyLCBpbnQgcGFnZW5vKQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9y ID0gU2xydVJlbEZpbGVMb2NhdG9yKHJlbF9udW1iZXIpOworCUJ1ZmZlcglidWZmZXI7CisK KwlidWZmZXIgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKHJsb2NhdG9yLCBNQUlOX0ZP UktOVU0sIHBhZ2VubywKKwkJCQkJCQkJCSAgIFJCTV9aRVJPX0FORF9MT0NLLCBOVUxMLCB0 cnVlKTsKKworCS8qIFJlbWVtYmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4dCB0aW1l LiAqLworCXNscnVfcmVjZW50X2J1ZmZlcnNbcmVsX251bWJlcl0ucGFnZW5vID0gcGFnZW5v OworCXNscnVfcmVjZW50X2J1ZmZlcnNbcmVsX251bWJlcl0ucmVjZW50X2J1ZmZlciA9IGJ1 ZmZlcjsKKworCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfemVyb2VkKHJlbF9udW1iZXIpOwor CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworT2lkCitTbHJ1UmVsSWRCeU5hbWUoY29uc3QgY2hh ciAqbmFtZSkKIHsKLQlpbnQJCQlmZDsKLQlpbnQJCQlzYXZlX2Vycm5vOwotCWludAkJCXJl c3VsdDsKKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aG9mKGRlZnMpOyArK2kpCisJCWlm IChzdHJjbXAoZGVmc1tpXS5uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIGk7CisKKwll bG9nKEVSUk9SLCAidW5rbm93biBTTFJVIFwiJXNcIiIsIG5hbWUpOworfQogCi0JU2xydUZp bGVOYW1lKGN0bCwgcGF0aCwgZnRhZy0+c2Vnbm8pOworY29uc3QgY2hhciAqCitTbHJ1TmFt ZShPaWQgcmVsX2lkKQoreworCWlmIChyZWxfaWQgPj0gU0xSVV9OVU1fUkVMUykKKwkJZWxv ZyhFUlJPUiwgImludmFsaWQgU0xSVSByZWwgSUQgJXUiLCByZWxfaWQpOwogCi0JZmQgPSBP cGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8 IDApCisJcmV0dXJuIGRlZnNbcmVsX2lkXS5uYW1lOworfQorCitpbnQKK3NscnVzeW5jZmls ZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQoreworCVNNZ3JSZWxhdGlv biByZWxuOworCUZpbGUJCWZpbGU7CisKKwlyZWxuID0gc21ncm9wZW4oZnRhZy0+cmxvY2F0 b3IsIEludmFsaWRCYWNrZW5kSWQpOworCWZpbGUgPSBzbHJ1ZmlsZShyZWxuLCBmdGFnLT5z ZWdubyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQsIE9fUkRXUiwgdHJ1ZSk7CisJaWYgKGZp bGUgPCAwKQorCXsKKwkJLyogUGF0aCBpcyByZXBvcnRlZCBoZXJlIHNvIHRoZSBjYWxsZXIg Y2FuIG1ha2UgYW4gZXJyb3IgbWVzc2FnZSAqLworCQlTbHJ1RmlsZU5hbWUoZnRhZy0+cmxv Y2F0b3IucmVsTnVtYmVyLCBwYXRoLCBmdGFnLT5zZWdubyk7CiAJCXJldHVybiAtMTsKKwl9 CisKKwlwZ3N0YXRfY291bnRfc2xydV9mbHVzaChyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyKTsKKworCXJldHVybiBGaWxlU3luYyhmaWxlLCBXQUlUX0VWRU5UX1NM UlVfU1lOQyk7Cit9CisKK3N0YXRpYyBGaWxlCitzbHJ1ZmlsZShTTWdyUmVsYXRpb24gcmVs biwgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBtb2RlLCBib29sIG1pc3Npbmdfb2spCit7 CisJaW50CQkJc2VnbWVudCA9IGJsb2NrbnVtIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsK KwljaGFyCQlwYXRoW01BWFBHUEFUSF07CisKKwlBc3NlcnQocmVsbi0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkID09IFNMUlVfREJfSUQpOworCUFzc2VydChyZWxuLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyIDwgbGVuZ3Rob2YoZGVmcykpOworCUFzc2VydChk ZWZzW3JlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXJdLnBhdGggIT0gTlVM TCk7CisKKwkvKiBEbyB3ZSBoYXZlIHRoZSByaWdodCBmaWxlIG9wZW4gYWxyZWFkeT8gKi8K KwlpZiAocmVsbi0+c2xydV9maWxlX3NlZ21lbnQgPT0gc2VnbWVudCkKKwl7CisJCS8qIFhY WCBIb3cgY2FuIHdlIGludmFsaWRhdGUgdGhpcyBpZiB0aGUgU0xSVSB3cmFwcyBhcm91bmQ/ ISAqLworCQlBc3NlcnQocmVsbi0+c2xydV9maWxlICE9IC0xKTsKKwkJcmV0dXJuIHJlbG4t PnNscnVfZmlsZTsKKwl9CisKKwkvKiBDbG9zZSB0aGUgY3VycmVudCBmaWxlLCBpZiB3ZSBo YXZlIG9uZSBvcGVuLiAqLworCWlmIChyZWxuLT5zbHJ1X2ZpbGVfc2VnbWVudCAhPSAtMSkK Kwl7CisJCUFzc2VydChyZWxuLT5zbHJ1X2ZpbGUgIT0gLTEpOworCQlGaWxlQ2xvc2UocmVs bi0+c2xydV9maWxlKTsKKwkJcmVsbi0+c2xydV9maWxlID0gLTE7CisJCXJlbG4tPnNscnVf ZmlsZV9zZWdtZW50ID0gLTE7CisJfQorCisJLyogT3BlbiB0aGUgZmlsZSB3ZSB3YW50LiAq LworCVNscnVGaWxlTmFtZShyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LCBwYXRoLCBzZWdtZW50KTsKKwlyZWxuLT5zbHJ1X2ZpbGUgPSBQYXRoTmFtZU9wZW5GaWxl KHBhdGgsIG1vZGUpOworCWlmIChyZWxuLT5zbHJ1X2ZpbGUgPj0gMCkKKwkJcmVsbi0+c2xy dV9maWxlX3NlZ21lbnQgPSBzZWdtZW50OworCWVsc2UgaWYgKCEobWlzc2luZ19vayAmJiBl cnJubyA9PSBFTk9FTlQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wi OiAlbSIsCisJCQkJCQlwYXRoKSkpOworCisJLyoKKwkgKiBYWFggVGhhdCBlcnJvciBtZXNz YWdlIGRvZXNuJ3QgY29udGFpbiB0aGUgeGlkOyB0aGVuIGFnYWluLCB0aGUKKwkgKiBwcmV2 aW91cyBTTFJVIGVycm9yIGNvZGVzIHdlcmUgYWxsIHdlaXJkIGFib3V0IHhpZHMgYW55d2F5 OyBtYXliZQorCSAqIGNsb2cuYywgbm90aWZ5LmMgZXQgYWwgc2hvdWxkIHNldCBhIGNvbnRl eHQgdGhhdCBoYXMgU0xSVS1zcGVjaWZpYworCSAqIGNvbnRleHQgaW4gYSBtb3JlIG5hdHVy YWwgZm9ybWF0CisJICovCisKKwlyZXR1cm4gcmVsbi0+c2xydV9maWxlOworfQorCit2b2lk CitzbHJ1b3BlbihTTWdyUmVsYXRpb24gcmVsbikKK3sKKwlyZWxuLT5zbHJ1X2ZpbGUgPSAt MTsKKwlyZWxuLT5zbHJ1X2ZpbGVfc2VnbWVudCA9IC0xOworCisJLyoKKwkgKiBXZSBkb24n dCB3YW50IHRoaXMgdG8gYmUgY2xvc2VkIGF0IGVuZCBvZiB0cmFuc2FjdGlvbiwgd2hpY2gg d291bGQKKwkgKiBvdGhlcndpc2UgaGFwcGVuLCBiZWNhdXNlIGl0IGlzbid0IG93bmVkIGJ5 IGEgUmVsYXRpb24uCisJICovCisJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKK30KKwor dm9pZAorc2xydWNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0p Cit7CisJaWYgKHJlbG4tPnNscnVfZmlsZSAhPSAtMSkKKwkJRmlsZUNsb3NlKHJlbG4tPnNs cnVfZmlsZSk7CisJcmVsbi0+c2xydV9maWxlID0gLTE7CisJcmVsbi0+c2xydV9maWxlX3Nl Z21lbnQgPSAtMTsKK30KKwordm9pZAorc2xydXdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorCQkgIGNoYXIgKmJ1 ZmZlciwgYm9vbCBza2lwRnN5bmMpCit7CisJRmlsZQkJZmlsZTsKKwlSZWxGaWxlTnVtYmVy IHJlbF9udW1iZXI7CisJb2ZmX3QJCW9mZnNldDsKKwlpbnQJCQlyYzsKKworCWZpbGUgPSBz bHJ1ZmlsZShyZWxuLCBibG9ja251bSwgT19SRFdSIHwgT19DUkVBVCwgZmFsc2UpOworCW9m ZnNldCA9IChibG9ja251bSAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1NaOwor CisJcmMgPSBGaWxlV3JpdGUoZmlsZSwgYnVmZmVyLCBCTENLU1osIG9mZnNldCwgV0FJVF9F VkVOVF9TTFJVX1dSSVRFKTsKKwlpZiAocmMgPCAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3 cml0ZSAlZCBieXRlcyB0byBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6ICVtIiwKKwkJCQkJ CUJMQ0tTWiwKKwkJCQkJCUZpbGVQYXRoTmFtZShmaWxlKSwKKwkJCQkJCShpbnQpIG9mZnNl dCkpKTsKKwlpZiAocmMgPCBCTENLU1opCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlICVk IGJ5dGVzIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZCwgb25seSAlZCBieXRlcyB3cml0 dGVuIiwKKwkJCQkJCUJMQ0tTWiwKKwkJCQkJCUZpbGVQYXRoTmFtZShmaWxlKSwKKwkJCQkJ CShpbnQpIG9mZnNldCwKKwkJCQkJCXJjKSkpOworCisJcmVsX251bWJlciA9IHJlbG4tPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXI7CisJaWYgKGRlZnNbcmVsX251bWJlcl0u c3luY2hyb25pemUpCisJeworCQlGaWxlVGFnCQkJdGFnOworCisJCS8qIFRlbGwgY2hlY2tw b2ludGVyIHRvIHN5bmNocm9uaXplIHRoaXMgZmlsZS4gKi8KKwkJSU5JVF9TTFJVRklMRVRB Ryh0YWcsIHJlbF9udW1iZXIsIGJsb2NrbnVtIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7 CisJCWlmICghUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX1JFUVVFU1QsIGZhbHNl KSkKKwkJeworCQkJLyogUXVldWUgZnVsbC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCisJ CQlpZiAoRmlsZVN5bmMoZmlsZSwgV0FJVF9FVkVOVF9TTFJVX1NZTkMpIDwgMCkKKwkJCQll cmVwb3J0KGRhdGFfc3luY19lbGV2ZWwoRVJST1IpLAorCQkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3luY2hyb25pemUgZmls ZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkJRmlsZVBhdGhOYW1lKGZpbGUpKSkpOworCQl9CisJ fQorCisJcGdzdGF0X2NvdW50X3NscnVfcGFnZV93cml0dGVuKHJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5yZWxOdW1iZXIpOworfQorCit2b2lkCitzbHJ1cmVhZChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKKwkJ IGNoYXIgKmJ1ZmZlcikKK3sKKwlGaWxlIGZpbGU7CisJb2ZmX3Qgb2Zmc2V0OworCWludCBy YzsKKworCWZpbGUgPSBzbHJ1ZmlsZShyZWxuLCBibG9ja251bSwgT19SRFdSLCBmYWxzZSk7 CisJb2Zmc2V0ID0gKGJsb2NrbnVtICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENL U1o7CisKKwlyYyA9IEZpbGVSZWFkKGZpbGUsIGJ1ZmZlciwgQkxDS1NaLCBvZmZzZXQsIFdB SVRfRVZFTlRfU0xSVV9SRUFEKTsKKwlpZiAocmMgPCAwKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCByZWFkICVkIGJ5dGVzIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbSIsCisJ CQkJCQlCTENLU1osCisJCQkJCQlGaWxlUGF0aE5hbWUoZmlsZSksCisJCQkJCQkoaW50KSBv ZmZzZXQpKSk7CisJaWYgKHJjIDwgQkxDS1NaKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFk ICVkIGJ5dGVzIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkLCBvbmx5ICVkIGJ5dGVz IHJlYWQiLAorCQkJCQkJQkxDS1NaLAorCQkJCQkJRmlsZVBhdGhOYW1lKGZpbGUpLAorCQkJ CQkJKGludCkgb2Zmc2V0LAorCQkJCQkJcmMpKSk7CisKKwlwZ3N0YXRfY291bnRfc2xydV9w YWdlX3JlYWQocmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7Cit9CiAK LQlyZXN1bHQgPSBwZ19mc3luYyhmZCk7Ci0Jc2F2ZV9lcnJubyA9IGVycm5vOwordm9pZAor c2xydXdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAor CQkJICBCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKK3sKKwlS ZWxGaWxlTnVtYmVyIHJlbF9udW1iZXI7CiAKLQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwor CS8qIE5vIHBvaW50IGluIGZsdXNoaW5nIGRhdGEgd2Ugd29uJ3QgYmUgZnN5bmNpbmcuICov CisJcmVsX251bWJlciA9IHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXI7 CisJaWYgKCFkZWZzW3JlbF9udW1iZXJdLnN5bmNocm9uaXplKQorCQlyZXR1cm47CiAKLQll cnJubyA9IHNhdmVfZXJybm87Ci0JcmV0dXJuIHJlc3VsdDsKKwl3aGlsZSAobmJsb2NrcyA+ IDApCisJeworCQlGaWxlCQlmaWxlOworCQlCbG9ja051bWJlciBibG9ja251bV9pbl90aGlz X2ZpbGU7CisJCUJsb2NrTnVtYmVyIG5mbHVzaDsKKworCQkvKiBGaWxlIHJhbmdlIG9mIGJs b2NrcyB0byBmbHVzaCBpbiBvbmUgZmlsZS4gKi8KKwkJYmxvY2tudW1faW5fdGhpc19maWxl ID0gYmxvY2tudW0gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCQluZmx1c2ggPSBNaW4o bmJsb2NrcywgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAtIGJsb2NrbnVtX2luX3RoaXNfZmls ZSk7CisKKwkJLyogVGhlIGZpbGUgbWlnaHQgaGF2ZSBiZWVuIHVubGlua2VkIGFscmVhZHks IHNvIHRvbGVyYXRlIG1pc3NpbmcuICovCisJCWZpbGUgPSBzbHJ1ZmlsZShyZWxuLCBibG9j a251bSwgT19SRFdSLCB0cnVlKTsKKwkJaWYgKGZpbGUgPCAwKQorCQkJcmV0dXJuOworCisJ CUZpbGVXcml0ZWJhY2soZmlsZSwKKwkJCQkJICBCTENLU1ogKiBibG9ja251bV9pbl90aGlz X2ZpbGUsCisJCQkJCSAgQkxDS1NaICogbmZsdXNoLAorCQkJCQkgIFdBSVRfRVZFTlRfU0xS VV9GTFVTSCk7CisKKwkJbmJsb2NrcyAtPSBuZmx1c2g7CisJCWJsb2NrbnVtICs9IG5mbHVz aDsKKwl9CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0 cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2 NmQzNTQ4MTU1Mi4uOThjNGNhZWE4ZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v c3VidHJhbnMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFu cy5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAicGdfdHJhY2Uu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBt Z3IuaCIKIAogCkBAIC01NSwxNSArNTYsNyBAQAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9F bnRyeSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBTVUJUUkFOU19YQUNUU19QRVJf UEFHRSkKIAogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJl cyBmb3IgU1VCVFJBTlMgY29udHJvbAotICovCi1zdGF0aWMgU2xydUN0bERhdGEgU3ViVHJh bnNDdGxEYXRhOwotCi0jZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1YlRyYW5zQ3RsRGF0YSkK LQotCi1zdGF0aWMgaW50CVplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7CitzdGF0aWMg QnVmZmVyIFplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7CiBzdGF0aWMgYm9vbCBTdWJU cmFuc1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiAKIApAQCAtNzUsMTYg KzY4LDE1IEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2Fj dGlvbklkIHBhcmVudCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdl KHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCk7Ci0J aW50CQkJc2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsK IAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChwYXJlbnQpKTsKIAlBc3NlcnQoVHJh bnNhY3Rpb25JZEZvbGxvd3MoeGlkLCBwYXJlbnQpKTsKIAotCUxXTG9ja0FjcXVpcmUoU3Vi dHJhbnNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXNsb3RubyA9IFNpbXBsZUxydVJl YWRQYWdlKFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci0JcHRyID0gKFRyYW5z YWN0aW9uSWQgKikgU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsK KwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX1JFTF9JRCwgcGFnZW5v KTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJcHRyICs9IGVu dHJ5bm87CiAKIAkvKgpAQCAtOTYsMTAgKzg4LDEwIEBAIFN1YlRyYW5zU2V0UGFyZW50KFRy YW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBhcmVudCkKIAl7CiAJCUFzc2VydCgq cHRyID09IEludmFsaWRUcmFuc2FjdGlvbklkKTsKIAkJKnB0ciA9IHBhcmVudDsKLQkJU3Vi VHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1 ZmZlckRpcnR5KGJ1ZmZlcik7CiAJfQogCi0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVM b2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0xMTAs OSArMTAyLDkgQEAgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpCiB7CiAJ aW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwogCWludAkJCWVudHJ5 bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpOwotCWludAkJCXNsb3RubzsKIAlUcmFu c2FjdGlvbklkICpwdHI7CiAJVHJhbnNhY3Rpb25JZCBwYXJlbnQ7CisJQnVmZmVyCQlidWZm ZXI7CiAKIAkvKiBDYW4ndCBhc2sgYWJvdXQgc3R1ZmYgdGhhdCBtaWdodCBub3QgYmUgYXJv dW5kIGFueW1vcmUgKi8KIAlBc3NlcnQoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyh4 aWQsIFRyYW5zYWN0aW9uWG1pbikpOwpAQCAtMTIxLDE1ICsxMTMsMTQgQEAgU3ViVHJhbnNH ZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpCiAJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3Jt YWwoeGlkKSkKIAkJcmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0JLyogbG9jayBp cyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLworCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU1VCVFJBTlNfUkVMX0lELCBwYWdlbm8pOwogCi0Jc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU3ViVHJhbnNDdGwsIHBhZ2Vubywg eGlkKTsKLQlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSBTdWJUcmFuc0N0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dOworCXB0ciA9IChUcmFuc2FjdGlvbklkICopIEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKIAlwdHIgKz0gZW50cnlubzsKIAogCXBhcmVudCA9ICpwdHI7CiAK LQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVJlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKIAogCXJldHVybiBwYXJlbnQ7CiB9CkBAIC0xNzcsMjYgKzE2OCw2IEBAIFN1YlRy YW5zR2V0VG9wbW9zdFRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkKQogCXJldHVybiBw cmV2aW91c1hpZDsKIH0KIAotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1l bW9yeSBmb3IgU1VCVFJBTlMKLSAqLwotU2l6ZQotU1VCVFJBTlNTaG1lbVNpemUodm9pZCkK LXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9TVUJUUkFOU19CVUZGRVJTLCAw KTsKLX0KLQotdm9pZAotU1VCVFJBTlNTaG1lbUluaXQodm9pZCkKLXsKLQlTdWJUcmFuc0N0 bC0+UGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5p dChTdWJUcmFuc0N0bCwgIlN1YnRyYW5zIiwgTlVNX1NVQlRSQU5TX0JVRkZFUlMsIDAsCi0J CQkJICBTdWJ0cmFuc1NMUlVMb2NrLCAicGdfc3VidHJhbnMiLAotCQkJCSAgTFdUUkFOQ0hF X1NVQlRSQU5TX0JVRkZFUiwgU1lOQ19IQU5ETEVSX05PTkUpOwotCVNscnVQYWdlUHJlY2Vk ZXNVbml0VGVzdHMoU3ViVHJhbnNDdGwsIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKLX0K LQogLyoKICAqIFRoaXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0 YWxsLiAgSXQgY3JlYXRlcwogICogdGhlIGluaXRpYWwgU1VCVFJBTlMgc2VnbWVudC4gIChU aGUgU1VCVFJBTlMgZGlyZWN0b3J5IGlzIGFzc3VtZWQgdG8KQEAgLTIxMCwxOCArMTgxLDE2 IEBAIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpCiB2b2lkCiBCb290U3RyYXBTVUJUUkFOUyh2 b2lkKQogewotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCUxXTG9ja0Fj cXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlTbHJ1UGFnZVByZWNl ZGVzVW5pdFRlc3RzKFN1YlRyYW5zUGFnZVByZWNlZGVzLCBTVUJUUkFOU19YQUNUU19QRVJf UEFHRSk7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHN1 YnRyYW5zIGxvZyAqLwotCXNsb3RubyA9IFplcm9TVUJUUkFOU1BhZ2UoMCk7CisJYnVmZmVy ID0gWmVyb1NVQlRSQU5TUGFnZSgwKTsKIAogCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4g b3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKFN1YlRyYW5zQ3RsLCBzbG90bm8pOwotCUFz c2VydCghU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCUxX TG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVy KTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0yMzIsMTAg KzIwMSwxNSBAQCBCb290U3RyYXBTVUJUUkFOUyh2b2lkKQogICoKICAqIENvbnRyb2wgbG9j ayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAq Lwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb1NVQlRSQU5TUGFnZShpbnQgcGFn ZW5vKQogewotCXJldHVybiBTaW1wbGVMcnVaZXJvUGFnZShTdWJUcmFuc0N0bCwgcGFnZW5v KTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKworCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVf U1VCVFJBTlNfUkVMX0lELCBwYWdlbm8pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwor CisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTI1OCw3ICsyMzIsNiBAQCBTdGFydHVw U1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQpCiAJICogV2hlbmV2ZXIg d2UgYWR2YW5jZSBpbnRvIGEgbmV3IHBhZ2UsIEV4dGVuZFNVQlRSQU5TIHdpbGwgbGlrZXdp c2UgemVybwogCSAqIHRoZSBuZXcgcGFnZSB3aXRob3V0IHJlZ2FyZCB0byB3aGF0ZXZlciB3 YXMgcHJldmlvdXNseSBvbiBkaXNrLgogCSAqLwotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCXN0YXJ0UGFnZSA9IFRyYW5zYWN0aW9uSWRU b1BhZ2Uob2xkZXN0QWN0aXZlWElEKTsKIAluZXh0WGlkID0gU2htZW1WYXJpYWJsZUNhY2hl LT5uZXh0WGlkOwpAQCAtMjY2LDM2ICsyMzksMTUgQEAgU3RhcnR1cFNVQlRSQU5TKFRyYW5z YWN0aW9uSWQgb2xkZXN0QWN0aXZlWElEKQogCiAJd2hpbGUgKHN0YXJ0UGFnZSAhPSBlbmRQ YWdlKQogCXsKLQkJKHZvaWQpIFplcm9TVUJUUkFOU1BhZ2Uoc3RhcnRQYWdlKTsKKwkJVW5s b2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSkpOwogCQlzdGFy dFBhZ2UrKzsKIAkJLyogbXVzdCBhY2NvdW50IGZvciB3cmFwYXJvdW5kICovCiAJCWlmIChz dGFydFBhZ2UgPiBUcmFuc2FjdGlvbklkVG9QYWdlKE1heFRyYW5zYWN0aW9uSWQpKQogCQkJ c3RhcnRQYWdlID0gMDsKIAl9Ci0JKHZvaWQpIFplcm9TVUJUUkFOU1BhZ2Uoc3RhcnRQYWdl KTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSkpOwogfQogCi0vKgotICogUGVy Zm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRo ZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpCi17Ci0JLyoKLQkg KiBXcml0ZSBkaXJ0eSBTVUJUUkFOUyBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlz IG5vdCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZp ZXcuIFdlIGRvCi0JICogaXQgbWVyZWx5IHRvIGltcHJvdmUgdGhlIG9kZHMgdGhhdCB3cml0 aW5nIG9mIGRpcnR5IHBhZ2VzIGlzIGRvbmUgYnkKLQkgKiB0aGUgY2hlY2twb2ludCBwcm9j ZXNzIGFuZCBub3QgYnkgYmFja2VuZHMuCi0JICovCi0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJU UkFOU19DSEVDS1BPSU5UX1NUQVJUKHRydWUpOwotCVNpbXBsZUxydVdyaXRlQWxsKFN1YlRy YW5zQ3RsLCB0cnVlKTsKLQlUUkFDRV9QT1NUR1JFU1FMX1NVQlRSQU5TX0NIRUNLUE9JTlRf RE9ORSh0cnVlKTsKLX0KLQotCiAvKgogICogTWFrZSBzdXJlIHRoYXQgU1VCVFJBTlMgaGFz IHJvb20gZm9yIGEgbmV3bHktYWxsb2NhdGVkIFhJRC4KICAqCkBAIC0zMTksMTIgKzI3MSw4 IEBAIEV4dGVuZFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2Vu byA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJl KFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdl ICovCi0JWmVyb1NVQlRSQU5TUGFnZShwYWdlbm8pOwotCi0JTFdMb2NrUmVsZWFzZShTdWJ0 cmFuc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9TVUJUUkFOU1BhZ2Uo cGFnZW5vKSk7CiB9CiAKIApAQCAtMzUwLDcgKzI5OCw3IEBAIFRydW5jYXRlU1VCVFJBTlMo VHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KQogCVRyYW5zYWN0aW9uSWRSZXRyZWF0KG9sZGVz dFhhY3QpOwogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKG9sZGVzdFhhY3Qp OwogCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoU3ViVHJhbnNDdGwsIGN1dG9mZlBhZ2UpOworCVNp bXBsZUxydVRydW5jYXRlKFNMUlVfU1VCVFJBTlNfUkVMX0lELCBTdWJUcmFuc1BhZ2VQcmVj ZWRlcywgY3V0b2ZmUGFnZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CmluZGV4IDE1YWI4ZDkwZDRiLi45YjQ4NDM4MmY4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9h c3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNz L3Jld3JpdGVoZWFwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKICNpbmNsdWRlICJh Y2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGltZWxpbmUuaCIKICNpbmNs dWRlICJhY2Nlc3MvdHJhbnNhbS5oIgpAQCAtMTQ1OSw3ICsxNDYwLDcgQEAgV2FpdFhMb2dJ bnNlcnRpb25zVG9GaW5pc2goWExvZ1JlY1B0ciB1cHRvKQogCSAqLwogCWlmICh1cHRvID4g cmVzZXJ2ZWRVcHRvKQogCXsKLQkJZXJlcG9ydChMT0csCisJCWVyZXBvcnQoUEFOSUMsCiAJ CQkJKGVycm1zZygicmVxdWVzdCB0byBmbHVzaCBwYXN0IGVuZCBvZiBnZW5lcmF0ZWQgV0FM OyByZXF1ZXN0ICVYLyVYLCBjdXJyZW50IHBvc2l0aW9uICVYLyVYIiwKIAkJCQkJCUxTTl9G T1JNQVRfQVJHUyh1cHRvKSwgTFNOX0ZPUk1BVF9BUkdTKHJlc2VydmVkVXB0bykpKSk7CiAJ CXVwdG8gPSByZXNlcnZlZFVwdG87CkBAIC00NTAxLDYgKzQ1MDIsNyBAQCBCb290U3RyYXBY TE9HKHZvaWQpCiAJdWludDY0CQlzeXNpZGVudGlmaWVyOwogCXN0cnVjdCB0aW1ldmFsIHR2 OwogCXBnX2NyYzMyYwljcmM7CisJUmVzb3VyY2VPd25lciByZXNvd25lcjsKIAogCS8qIGFs bG93IG9yZGluYXJ5IFdBTCBzZWdtZW50IGNyZWF0aW9uLCBsaWtlIFN0YXJ0dXBYTE9HKCkg d291bGQgKi8KIAlMV0xvY2tBY3F1aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfRVhDTFVTSVZF KTsKQEAgLTQ2NDEsMTEgKzQ2NDMsMTUgQEAgQm9vdFN0cmFwWExPRyh2b2lkKQogCS8qIHNv bWUgYWRkaXRpb25hbCBDb250cm9sRmlsZSBmaWVsZHMgYXJlIHNldCBpbiBXcml0ZUNvbnRy b2xGaWxlKCkgKi8KIAlXcml0ZUNvbnRyb2xGaWxlKCk7CiAKLQkvKiBCb290c3RyYXAgdGhl IGNvbW1pdCBsb2csIHRvbyAqLworCS8qIEJvb3RzdHJhcCB0aGUgY29tbWl0IGxvZyB0b28g Ki8KKwlyZXNvd25lciA9IFJlc291cmNlT3duZXJDcmVhdGUoTlVMTCwgImJvb3RzdHJhcCBy ZXNvd25lciIpOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gcmVzb3duZXI7CiAJQm9vdFN0 cmFwQ0xPRygpOwogCUJvb3RTdHJhcENvbW1pdFRzKCk7CiAJQm9vdFN0cmFwU1VCVFJBTlMo KTsKIAlCb290U3RyYXBNdWx0aVhhY3QoKTsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IE5V TEw7CisJUmVzb3VyY2VPd25lckRlbGV0ZShyZXNvd25lcik7CiAKIAlwZnJlZShidWZmZXIp OwogCkBAIC02ODUxLDE1ICs2ODU3LDEyIEBAIENoZWNrUG9pbnRHdXRzKFhMb2dSZWNQdHIg Y2hlY2tQb2ludFJlZG8sIGludCBmbGFncykKIAlDaGVja1BvaW50U25hcEJ1aWxkKCk7CiAJ Q2hlY2tQb2ludExvZ2ljYWxSZXdyaXRlSGVhcCgpOwogCUNoZWNrUG9pbnRSZXBsaWNhdGlv bk9yaWdpbigpOworCUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKKwlDaGVja1BvaW50U0xSVSgp OwogCi0JLyogV3JpdGUgb3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFp biBidWZmZXIgcG9vbCAqLworCS8qIFdyaXRlIG91dCBhbGwgZGlydHkgZGF0YSBpbiB0aGUg YnVmZmVyIHBvb2wgKi8KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9DSEVDS1BPSU5UX1NU QVJUKGZsYWdzKTsKIAlDaGVja3BvaW50U3RhdHMuY2twdF93cml0ZV90ID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOwotCUNoZWNrUG9pbnRDTE9HKCk7Ci0JQ2hlY2tQb2ludENvbW1pdFRz KCk7Ci0JQ2hlY2tQb2ludFNVQlRSQU5TKCk7Ci0JQ2hlY2tQb2ludE11bHRpWGFjdCgpOwot CUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKIAlDaGVja1BvaW50QnVmZmVycyhmbGFncyk7CiAK IAkvKiBQZXJmb3JtIGFsbCBxdWV1ZWQgdXAgZnN5bmNzICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YwppbmRleCAzZTFiOTJkZjAzMC4uYzQyNDliZmE4NjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YwpAQCAtMTQxLDYgKzE0MSw3IEBACiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNs dWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTMw NSwxMiArMzA2LDYgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29u dHJvbDsKICNkZWZpbmUgUVVFVUVfTkVYVF9MSVNURU5FUihpKQkJKGFzeW5jUXVldWVDb250 cm9sLT5iYWNrZW5kW2ldLm5leHRMaXN0ZW5lcikKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9Q T1MoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5wb3MpCiAKLS8qCi0gKiBU aGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZp Y2F0aW9uIHF1ZXVlCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwot Ci0jZGVmaW5lIE5vdGlmeUN0bAkJCQkJKCZOb3RpZnlDdGxEYXRhKQogI2RlZmluZSBRVUVV RV9QQUdFU0laRQkJCQlCTENLU1oKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFM CTUwMDAJLyogd2FybiBhdCBtb3N0IG9uY2UgZXZlcnkgNXMgKi8KIApAQCAtNTIxLDggKzUx Niw2IEBAIEFzeW5jU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IG11bF9zaXplKE1heEJhY2tl bmRzICsgMSwgc2l6ZW9mKFF1ZXVlQmFja2VuZFN0YXR1cykpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBvZmZzZXRvZihBc3luY1F1ZXVlQ29udHJvbCwgYmFja2VuZCkpOwogCi0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTk9USUZZX0JVRkZF UlMsIDApKTsKLQogCXJldHVybiBzaXplOwogfQogCkBAIC01NjUsMjAgKzU1OCwxMyBAQCBB c3luY1NobWVtSW5pdCh2b2lkKQogCQl9CiAJfQogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBt YW5hZ2VtZW50IG9mIHRoZSBwZ19ub3RpZnkgZGF0YS4KLQkgKi8KLQlOb3RpZnlDdGwtPlBh Z2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChO b3RpZnlDdGwsICJOb3RpZnkiLCBOVU1fTk9USUZZX0JVRkZFUlMsIDAsCi0JCQkJICBOb3Rp ZnlTTFJVTG9jaywgInBnX25vdGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVGRkVSLAotCQkJ CSAgU1lOQ19IQU5ETEVSX05PTkUpOwotCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qCiAJCSAq IER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5IGRpcmVj dG9yeS4KIAkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlDdGwsIFNs cnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOworCQkodm9pZCkgU2xydVNjYW5EaXJlY3Rv cnkoU0xSVV9OT1RJRllfUkVMX0lELCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzLAorCQkJCQkJ CQkgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7CiAJfQogfQogCkBAIC0xNDExLDEw ICsxMzk3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkp CiAJUXVldWVQb3NpdGlvbiBxdWV1ZV9oZWFkOwogCWludAkJCXBhZ2VubzsKIAlpbnQJCQlv ZmZzZXQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogV2UgaG9sZCBib3RoIE5vdGlmeVF1ZXVl TG9jayBhbmQgTm90aWZ5U0xSVUxvY2sgZHVyaW5nIHRoaXMgb3BlcmF0aW9uICovCi0JTFdM b2NrQWNxdWlyZShOb3RpZnlTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJCWJ1 ZmZlcjsKIAogCS8qCiAJICogV2Ugd29yayB3aXRoIGEgbG9jYWwgY29weSBvZiBRVUVVRV9I RUFELCB3aGljaCB3ZSB3cml0ZSBiYWNrIHRvIHNoYXJlZApAQCAtMTQzOSwxMyArMTQyMiwx NyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkgKi8K IAlwYWdlbm8gPSBRVUVVRV9QT1NfUEFHRShxdWV1ZV9oZWFkKTsKIAlpZiAoUVVFVUVfUE9T X0lTX1pFUk8ocXVldWVfaGVhZCkpCi0JCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE5v dGlmeUN0bCwgcGFnZW5vKTsKKwl7CisJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVf Tk9USUZZX1JFTF9JRCwgcGFnZW5vKTsKKwl9CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZShOb3RpZnlDdGwsIHBhZ2VubywgdHJ1ZSwKLQkJCQkJCQkJICAgSW52YWxp ZFRyYW5zYWN0aW9uSWQpOworCXsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9O T1RJRllfUkVMX0lELCBwYWdlbm8pOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xP Q0tfRVhDTFVTSVZFKTsKKwl9CiAKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkg YmVmb3JlIHdyaXRpbmcgaW4gaXQgKi8KLQlOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dID0gdHJ1ZTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCXdoaWxl IChuZXh0Tm90aWZ5ICE9IE5VTEwpCiAJewpAQCAtMTQ3Niw3ICsxNDYzLDcgQEAgYXN5bmNR dWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJCX0KIAogCQkvKiBOb3cg Y29weSBxZSBpbnRvIHRoZSBzaGFyZWQgYnVmZmVyIHBhZ2UgKi8KLQkJbWVtY3B5KE5vdGlm eUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgb2Zmc2V0LAorCQltZW1jcHko QnVmZmVyR2V0UGFnZShidWZmZXIpICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAgcWUu bGVuZ3RoKTsKIApAQCAtMTQ5MSw3ICsxNDc4LDEwIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVz KExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkJICogYXN5bmNRdWV1ZUlzRnVsbCgpIGVuc3Vy ZWQgdGhhdCB0aGVyZSBpcyByb29tIHRvIGNyZWF0ZSB0aGlzCiAJCQkgKiBwYWdlIHdpdGhv dXQgb3ZlcnJ1bm5pbmcgdGhlIHF1ZXVlLgogCQkJICovCi0JCQlzbG90bm8gPSBTaW1wbGVM cnVaZXJvUGFnZShOb3RpZnlDdGwsIFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpKTsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFplcm9TbHJ1QnVm ZmVyKFNMUlVfTk9USUZZX1JFTF9JRCwKKwkJCQkJCQkJCVFVRVVFX1BPU19QQUdFKHF1ZXVl X2hlYWQpKTsKKwkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJCQkvKgogCQkJICog SWYgdGhlIG5ldyBwYWdlIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQ X0RFTEFZLApAQCAtMTUwNSwxMiArMTQ5NSwxMSBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhM aXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCWJyZWFrOwogCQl9CiAJfQorCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAogCS8qIFN1Y2Nlc3MsIHNvIHVwZGF0ZSB0aGUgZ2xvYmFs IFFVRVVFX0hFQUQgKi8KIAlRVUVVRV9IRUFEID0gcXVldWVfaGVhZDsKIAotCUxXTG9ja1Jl bGVhc2UoTm90aWZ5U0xSVUxvY2spOwotCiAJcmV0dXJuIG5leHROb3RpZnk7CiB9CiAKQEAg LTE5ODMsMTcgKzE5NzIsMTYgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZv aWQpCiAJCXsKIAkJCWludAkJCWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShwb3MpOwogCQkJ aW50CQkJY3Vyb2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChwb3MpOwotCQkJaW50CQkJc2xv dG5vOwogCQkJaW50CQkJY29weXNpemU7CisJCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQkJLyoK LQkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgZnJvbSBTTFJVIGludG8gYSBsb2NhbCBidWZmZXIs IHNvIGFzIHRvIGF2b2lkCi0JCQkgKiBob2xkaW5nIHRoZSBOb3RpZnlTTFJVTG9jayB3aGls ZSB3ZSBhcmUgZXhhbWluaW5nIHRoZSBlbnRyaWVzCi0JCQkgKiBhbmQgcG9zc2libHkgdHJh bnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZyb250ZW5kLiAgQ29weSBvbmx5IHRoZQotCQkJICog cGFydCBvZiB0aGUgcGFnZSB3ZSB3aWxsIGFjdHVhbGx5IGluc3BlY3QuCisJCQkgKiBXZSBj b3B5IHRoZSBkYXRhIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2b2lkIGhvbGRp bmcgYQorCQkJICogYnVmZmVyIHBpbiB3aGlsZSB3ZSBhcmUgZXhhbWluaW5nIHRoZSBlbnRy aWVzIGFuZCBwb3NzaWJseQorCQkJICogdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZyb250 ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0IG9mIHRoZQorCQkJICogcGFnZSB3ZSB3aWxsIGFj dHVhbGx5IGluc3BlY3QuCiAJCQkgKi8KLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl X1JlYWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKLQkJCQkJCQkJCQkJCUludmFsaWRUcmFu c2FjdGlvbklkKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX1JF TF9JRCwgY3VycGFnZSk7CiAJCQlpZiAoY3VycGFnZSA9PSBRVUVVRV9QT1NfUEFHRShoZWFk KSkKIAkJCXsKIAkJCQkvKiB3ZSBvbmx5IHdhbnQgdG8gcmVhZCBhcyBmYXIgYXMgaGVhZCAq LwpAQCAtMjAwNywxMCArMTk5NSw5IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9u cyh2b2lkKQogCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBjdXJvZmZzZXQ7CiAJ CQl9CiAJCQltZW1jcHkocGFnZV9idWZmZXIuYnVmICsgY3Vyb2Zmc2V0LAotCQkJCSAgIE5v dGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgY3Vyb2Zmc2V0LAorCQkJ CSAgIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIGN1cm9mZnNldCwKIAkJCQkgICBjb3B5c2l6 ZSk7Ci0JCQkvKiBSZWxlYXNlIGxvY2sgdGhhdCB3ZSBnb3QgZnJvbSBTaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seSgpICovCi0JCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVNMUlVMb2NrKTsK KwkJCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCQkJLyoKIAkJCSAqIFByb2Nlc3MgbWVz c2FnZXMgdXAgdG8gdGhlIHN0b3AgcG9zaXRpb24sIGVuZCBvZiBwYWdlLCBvciBhbgpAQCAt MjIwNyw3ICsyMTk0LDcgQEAgYXN5bmNRdWV1ZUFkdmFuY2VUYWlsKHZvaWQpCiAJCSAqIFNp bXBsZUxydVRydW5jYXRlKCkgd2lsbCBhc2sgZm9yIE5vdGlmeVNMUlVMb2NrIGJ1dCB3aWxs IGFsc28KIAkJICogcmVsZWFzZSB0aGUgbG9jayBhZ2Fpbi4KIAkJICovCi0JCVNpbXBsZUxy dVRydW5jYXRlKE5vdGlmeUN0bCwgbmV3dGFpbHBhZ2UpOworCQlTaW1wbGVMcnVUcnVuY2F0 ZShTTFJVX05PVElGWV9SRUxfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsIG5ld3RhaWxw YWdlKTsKIAogCQkvKgogCQkgKiBVcGRhdGUgUVVFVUVfU1RPUF9QQUdFLiAgVGhpcyBjaGFu Z2VzIGFzeW5jUXVldWVJc0Z1bGwoKSdzIHZlcmRpY3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2NoZWNrcG9pbnRlci5jCmluZGV4IDVmYzA3NmZjMTQ5Li5mOWMzMTE0M2FlMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC0xMTcyLDYgKzExNzIsMjQg QEAgQ29tcGFjdENoZWNrcG9pbnRlclJlcXVlc3RRdWV1ZSh2b2lkKQogCS8qIG11c3QgaG9s ZCBDaGVja3BvaW50ZXJDb21tTG9jayBpbiBleGNsdXNpdmUgbW9kZSAqLwogCUFzc2VydChM V0xvY2tIZWxkQnlNZShDaGVja3BvaW50ZXJDb21tTG9jaykpOwogCisJLyoKKwkgKiBYWFgg RklYTUUKKwkgKiBJZiB3ZSB3ZXJlIHVubHVja3kgZW5vdWdoIHRvIGJlIHJlYWNoZWQgZnJv bQorCSAqIFRyYW5zYWN0aW9uSWRTZXRUcmVlU3RhdHVzKCkgd2hpbGUgdHJ5aW5nIHRvIHJl YWQgaW4gYSBDTE9HIHBhZ2UgYW5kCisJICogaGF2aW5nIHRvIHdyaXRlIG91dCBzb21lIG90 aGVyIGRpcnR5IHBhZ2UgYW5kIHRoZW4gZmluZGluZyB0aGUgc3luYworCSAqIHJlcXVlc3Qg cXVldWUgZnVsbCwgd2UncmUgbm93IHJ1bm5pbmcgaW4gYSBjcml0aWNhbCBzZWN0aW9uIGFu ZCB3ZSdyZQorCSAqIG5vdCBhbGxvd2VkIHRvIGFsbG9jYXRlIGFueSBtZW1vcnkgYmVsb3cu CisJICoKKwkgKiBYWFggV2l0aG91dCB0aGlzLCAwMjdfc3RyZWFtX3JlZ3Jlc3MucGwgYWJv cnRzIGJlbG93IG9jY2FzaW9uYWxseSwgZHVlCisJICogdG8gcHJlc3N1cmUgb24gaXRzIHZl cnkgc21hbGwgc2hhcmVkX2J1ZmZlcnMgYW5kIHRodXMgYWxzbyBzeW5jIHJlcXVlc3QKKwkg KiBxdWV1ZS4KKwkgKi8KKwlpZiAoQ3JpdFNlY3Rpb25Db3VudCA+IDApCisJeworCQllbG9n KExPRywgIkNvbXBhY3RDaGVja3BvaW50ZXJSZXF1ZXN0UXVldWUoKSBjcml0aWNhbCBzZWN0 aW9uLCByZXR1cm5pbmciKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCS8qIEluaXRpYWxp emUgc2tpcF9zbG90IGFycmF5ICovCiAJc2tpcF9zbG90ID0gcGFsbG9jMChzaXplb2YoYm9v bCkgKiBDaGVja3BvaW50ZXJTaG1lbS0+bnVtX3JlcXVlc3RzKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKaW5kZXggMjg2MmU5ZTQxMmMuLjcxOWYyN2E4NmE0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKQEAgLTIwLDYgKzIw LDcgQEAKIAogQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAg ICpCdWZmZXJCbG9ja3M7CitYTG9nUmVjUHRyICpCdWZmZXJFeHRlcm5hbExTTnM7CiBDb25k aXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9DVkFycmF5OwogV3JpdGVi YWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIENrcHRTb3J0SXRlbSAqQ2tw dEJ1ZmZlcklkczsKQEAgLTY5LDkgKzcwLDExIEBAIEluaXRCdWZmZXJQb29sKHZvaWQpCiB7 CiAJYm9vbAkJZm91bmRCdWZzLAogCQkJCWZvdW5kRGVzY3MsCisJCQkJZm91bmRMU05zLAog CQkJCWZvdW5kSU9DViwKIAkJCQlmb3VuZEJ1ZkNrcHQ7CiAKKwogCS8qIEFsaWduIGRlc2Ny aXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckRlc2NyaXB0b3Jz ID0gKEJ1ZmZlckRlc2NQYWRkZWQgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRGVz Y3JpcHRvcnMiLApAQCAtODgsNiArOTEsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJ CQkJCU5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVk KSwKIAkJCQkJCSZmb3VuZElPQ1YpOwogCisJQnVmZmVyRXh0ZXJuYWxMU05zID0gKFhMb2dS ZWNQdHIgKikKKwkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRXh0ZXJuYWwgTFNOcyIsCisJ CQkJCQlOQnVmZmVycyAqIHNpemVvZihYTG9nUmVjUHRyKSwKKwkJCQkJCSZmb3VuZExTTnMp OworCiAJLyoKIAkgKiBUaGUgYXJyYXkgdXNlZCB0byBzb3J0IHRvLWJlLWNoZWNrcG9pbnRl ZCBidWZmZXIgaWRzIGlzIGxvY2F0ZWQgaW4KIAkgKiBzaGFyZWQgbWVtb3J5LCB0byBhdm9p ZCBoYXZpbmcgdG8gYWxsb2NhdGUgc2lnbmlmaWNhbnQgYW1vdW50cyBvZgpAQCAtOTksMTAg KzEwNywxMCBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkNo ZWNrcG9pbnQgQnVmZmVySWRzIiwKIAkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENrcHRTb3J0 SXRlbSksICZmb3VuZEJ1ZkNrcHQpOwogCi0JaWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZz IHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1ZkNrcHQpCisJaWYgKGZvdW5kRGVzY3MgfHwgZm91 bmRCdWZzIHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1ZkNrcHQgfHwgZm91bmRMU05zKQogCXsK IAkJLyogc2hvdWxkIGZpbmQgYWxsIG9mIHRoZXNlLCBvciBub25lIG9mIHRoZW0gKi8KLQkJ QXNzZXJ0KGZvdW5kRGVzY3MgJiYgZm91bmRCdWZzICYmIGZvdW5kSU9DViAmJiBmb3VuZEJ1 ZkNrcHQpOworCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMgJiYgZm91bmRJT0NW ICYmIGZvdW5kQnVmQ2twdCAmJiBmb3VuZExTTnMpOwogCQkvKiBub3RlOiB0aGlzIHBhdGgg aXMgb25seSB0YWtlbiBpbiBFWEVDX0JBQ0tFTkQgY2FzZSAqLwogCX0KIAllbHNlCkBAIC0x MzMsNiArMTQxLDggQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJCQkJCQkgTFdUUkFOQ0hF X0JVRkZFUl9DT05URU5UKTsKIAogCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KEJ1ZmZlckRl c2NyaXB0b3JHZXRJT0NWKGJ1ZikpOworCisJCQlCdWZmZXJFeHRlcm5hbExTTnNbaV0gPSBJ bnZhbGlkWExvZ1JlY1B0cjsKIAkJfQogCiAJCS8qIENvcnJlY3QgbGFzdCBlbnRyeSBvZiBs aW5rZWQgbGlzdCAqLwpAQCAtMTY2LDYgKzE3Niw5IEBAIEJ1ZmZlclNobWVtU2l6ZSh2b2lk KQogCS8qIHNpemUgb2YgZGF0YSBwYWdlcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBt dWxfc2l6ZShOQnVmZmVycywgQkxDS1NaKSk7CiAKKwkvKiBzaXplIG9mIGV4dGVybmFsIExT TnMgKi8KKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIHNpemVv ZihYTG9nUmVjUHRyKSkpOworCiAJLyogc2l6ZSBvZiBzdHVmZiBjb250cm9sbGVkIGJ5IGZy ZWVsaXN0LmMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3RyYXRlZ3lTaG1lbVNpemUo KSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggYjc0ODhiNWQ4 OWUuLjcwOTk0OWZkYjg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNTcsMTAgKzU3LDIxIEBACiAjaW5jbHVkZSAidXRpbHMvcmVzb3duZXJfcHJpdmF0ZS5o IgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCisvKgorICogWFhYIElkZWFsbHkg d2UnZCBzd2l0Y2ggdG8gc3RhbmRhcmQgcGFnZXMgZm9yIFNMUlUgZGF0YSwgYnV0IGluIHRo ZQorICogbWVhbnRpbWUgd2UgbmVlZCBzb21lIHdheSB0byBpZGVudGlmeSBidWZmZXJzIHRo YXQgaG9sZCByYXcgZGF0YSAobm8KKyAqIGludmFzaXZlIExTTiwgbm8gY2hlY2tzdW1zKS4K KyAqLworI2RlZmluZSBCdWZmZXJIYXNTdGFuZGFyZFBhZ2UoYnVmSGRyKQkJCVwKKwkoKGJ1 ZkhkciktPnRhZy5ybG9jYXRvci5kYk9pZCAhPSA5KQorCisjZGVmaW5lIEJ1ZmZlckhhc0V4 dGVybmFsTFNOKGJ1ZkhkcikJCQlcCisJIUJ1ZmZlckhhc1N0YW5kYXJkUGFnZShidWZIZHIp CiAKIC8qIE5vdGU6IHRoZXNlIHR3byBtYWNyb3Mgb25seSB3b3JrIG9uIHNoYXJlZCBidWZm ZXJzLCBub3QgbG9jYWwgb25lcyEgKi8KICNkZWZpbmUgQnVmSGRyR2V0QmxvY2soYnVmSGRy KQkoKEJsb2NrKSAoQnVmZmVyQmxvY2tzICsgKChTaXplKSAoYnVmSGRyKS0+YnVmX2lkKSAq IEJMQ0tTWikpCi0jZGVmaW5lIEJ1ZmZlckdldExTTihidWZIZHIpCShQYWdlR2V0TFNOKEJ1 ZkhkckdldEJsb2NrKGJ1ZkhkcikpKQorI2RlZmluZSBCdWZmZXJHZXRMU04oYnVmSGRyKSBc CisJKEJ1ZmZlckhhc0V4dGVybmFsTFNOKGJ1ZkhkcikgPyBCdWZmZXJHZXRFeHRlcm5hbExT TihidWZIZHIpIDogUGFnZUdldExTTihCdWZIZHJHZXRCbG9jayhidWZIZHIpKSkKIAogLyog Tm90ZTogdGhpcyBtYWNybyBvbmx5IHdvcmtzIG9uIGxvY2FsIGJ1ZmZlcnMsIG5vdCBzaGFy ZWQgb25lcyEgKi8KICNkZWZpbmUgTG9jYWxCdWZIZHJHZXRCbG9jayhidWZIZHIpIFwKQEAg LTgwOSw2ICs4MjAsMjEgQEAgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9j YXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCSBtb2RlLCBzdHJh dGVneSwgJmhpdCk7CiB9CiAKKy8qCisgKiBMaWtlIFJlYWRCdWZmZXJXaXRob3V0UmVsY2Fj aGUsIGJ1dCByZXR1cm5zIHRoZSBoaXQgZmxhZy4KKyAqIFhYWCBNZXJnZQorICovCitCdWZm ZXIKK1JlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCisJCQkJCQkJCSBCbG9ja051bWJlciBibG9j a051bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKKwkJCQkJCQkJIGJvb2wgKmhpdCkKK3sKKwlT TWdyUmVsYXRpb24gc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk KTsKKworCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzbWdyLCBSRUxQRVJTSVNURU5DRV9Q RVJNQU5FTlQsIGZvcmtOdW0sIGJsb2NrTnVtLAorCQkJCQkJCSBtb2RlLCBOVUxMLCBoaXQp OworfQorCiAKIC8qCiAgKiBSZWFkQnVmZmVyX2NvbW1vbiAtLSBjb21tb24gbG9naWMgZm9y IGFsbCBSZWFkQnVmZmVyIHZhcmlhbnRzCkBAIC0xMDI5LDcgKzEwNTUsOCBAQCBSZWFkQnVm ZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCQkJfQogCiAJCQkvKiBjaGVjayBmb3IgZ2FyYmFnZSBkYXRh ICovCi0JCQlpZiAoIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoKFBhZ2UpIGJ1ZkJsb2NrLCBi bG9ja051bSwKKwkJCWlmIChCdWZmZXJIYXNTdGFuZGFyZFBhZ2UoYnVmSGRyKSAmJgorCQkJ CSFQYWdlSXNWZXJpZmllZEV4dGVuZGVkKChQYWdlKSBidWZCbG9jaywgYmxvY2tOdW0sCiAJ CQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFUKSkKIAkJCXsKIAkJ CQlpZiAobW9kZSA9PSBSQk1fWkVST19PTl9FUlJPUiB8fCB6ZXJvX2RhbWFnZWRfcGFnZXMp CkBAIC0xNDUwLDYgKzE0NzcsOSBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwg Y2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCiAJTFdMb2NrUmVs ZWFzZShuZXdQYXJ0aXRpb25Mb2NrKTsKIAorCWlmIChCdWZmZXJIYXNFeHRlcm5hbExTTihi dWYpKQorCQlCdWZmZXJTZXRFeHRlcm5hbExTTihidWYsIEludmFsaWRYTG9nUmVjUHRyKTsK KwogCS8qCiAJICogQnVmZmVyIGNvbnRlbnRzIGFyZSBjdXJyZW50bHkgaW52YWxpZC4gIFRy eSB0byBvYnRhaW4gdGhlIHJpZ2h0IHRvCiAJICogc3RhcnQgSS9PLiAgSWYgU3RhcnRCdWZm ZXJJTyByZXR1cm5zIGZhbHNlLCB0aGVuIHNvbWVvbmUgZWxzZSBtYW5hZ2VkCkBAIC0xNTcw LDYgKzE2MDAsODQgQEAgcmV0cnk6CiAJU3RyYXRlZ3lGcmVlQnVmZmVyKGJ1Zik7CiB9CiAK Ky8qCisgKiBEaXNjYXJkQnVmZmVyIC0tIGRyb3AgYSBidWZmZXIgZnJvbSBwb29sLgorICoK KyAqIElmIHRoZSBidWZmZXIgaXNuJ3QgcHJlc2VudCBpbiBzaGFyZWQgYnVmZmVycywgbm90 aGluZyBoYXBwZW5zLiAgSWYgaXQgaXMKKyAqIHByZXNlbnQgYW5kIG5vdCBwaW5uZWQsIGl0 IGlzIGRpc2NhcmRlZCB3aXRob3V0IG1ha2luZyBhbnkgYXR0ZW1wdCB0byB3cml0ZQorICog aXQgYmFjayBvdXQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBJZiBJL08gaXMgaW4gcHJv Z3Jlc3MsIHdlIHdhaXQgZm9yIGl0CisgKiB0byB0byBjb21wbGV0ZS4gIElmIGl0IGlzIHBp bm5lZCwgYW4gZXJyb3IgaXMgcmFpc2VkIChzb21lIG90aGVyIGJhY2tlbmQKKyAqIG11c3Qg c3RpbGwgYmUgaW50ZXJlc3RlZCBpbiBpdCwgc28gaXQncyBhbiBlcnJvciB0byBkaXNjYXJk IGl0KS4KKyAqLwordm9pZAorRGlzY2FyZEJ1ZmZlcihSZWxGaWxlTG9jYXRvciBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSkKK3sKKwlTTWdy UmVsYXRpb24gc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsK KwlCdWZmZXJUYWcJdGFnOwkJCS8qIGlkZW50aXR5IG9mIHRhcmdldCBibG9jayAqLworCXVp bnQzMgkJaGFzaDsJCQkvKiBoYXNoIHZhbHVlIGZvciB0YWcgKi8KKwlMV0xvY2sJICAgKnBh cnRpdGlvbkxvY2s7CS8qIGJ1ZmZlciBwYXJ0aXRpb24gbG9jayBmb3IgaXQgKi8KKwlpbnQJ CQlidWZfaWQ7CisJQnVmZmVyRGVzYyAqYnVmSGRyOworCXVpbnQzMgkJYnVmX3N0YXRlOwor CisJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29rdXAgdGhlIGJ1ZmZlciAqLworCUlO SVRfQlVGRkVSVEFHKHRhZywgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVt LCBibG9ja051bSk7CisKKwkvKiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBhbmQgcGFydGl0 aW9uIGxvY2sgSUQgKi8KKwloYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmdGFnKTsKKwlwYXJ0 aXRpb25Mb2NrID0gQnVmTWFwcGluZ1BhcnRpdGlvbkxvY2soaGFzaCk7CisKKyByZXRyeToK KwkvKiBzZWUgaWYgdGhlIGJsb2NrIGlzIGluIHRoZSBidWZmZXIgcG9vbCAqLworCUxXTG9j a0FjcXVpcmUocGFydGl0aW9uTG9jaywgTFdfU0hBUkVEKTsKKwlidWZfaWQgPSBCdWZUYWJs ZUxvb2t1cCgmdGFnLCBoYXNoKTsKKwlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOwor CisJLyogZGlkbid0IGZpbmQgaXQsIHNvIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoYnVmX2lk IDwgMCkKKwkJcmV0dXJuOworCisJLyogdGFrZSB0aGUgYnVmZmVyIGhlYWRlciBsb2NrICov CisJYnVmSGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZfaWQpOworCWJ1Zl9zdGF0ZSA9 IExvY2tCdWZIZHIoYnVmSGRyKTsKKworCS8qCisJICogVGhlIGJ1ZmZlciBtaWdodCBiZWVu IGV2aWN0ZWQgYWZ0ZXIgd2UgcmVsZWFzZWQgdGhlIHBhcnRpdGlvbiBsb2NrIGFuZAorCSAq IGJlZm9yZSB3ZSBhY3F1aXJlZCB0aGUgYnVmZmVyIGhlYWRlciBsb2NrLiAgSWYgc28sIHRo ZSBidWZmZXIgd2UndmUKKwkgKiBsb2NrZWQgbWlnaHQgY29udGFpbiBzb21lIG90aGVyIGRh dGEgd2hpY2ggd2Ugc2hvdWxkbid0IHRvdWNoLiBJZiB0aGUKKwkgKiBidWZmZXIgaGFzbid0 IGJlZW4gcmVjeWNsZWQsIHdlIHByb2NlZWQgdG8gaW52YWxpZGF0ZSBpdC4KKwkgKi8KKwlp ZiAoUmVsRmlsZUxvY2F0b3JFcXVhbHMoYnVmSGRyLT50YWcucmxvY2F0b3IsIHJsb2NhdG9y KSAmJgorCQlidWZIZHItPnRhZy5ibG9ja051bSA9PSBibG9ja051bSAmJgorCQlidWZIZHIt PnRhZy5mb3JrTnVtID09IGZvcmtOdW0pCisJeworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9f SU5fUFJPR1JFU1MpCisJCXsKKwkJCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7 CisJCQlXYWl0SU8oYnVmSGRyKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJZWxzZSBpZiAo QlVGX1NUQVRFX0dFVF9SRUZDT1VOVChidWZfc3RhdGUpID09IDApCisJCXsKKwkJCS8qIE5v Ym9keSBoYXMgaXQgcGlubmVkLCBzbyB3ZSBjYW4gaW1tZWRpYXRlbHkgaW52YWxpZGF0ZSBp dC4gKi8KKwkJCUludmFsaWRhdGVCdWZmZXIoYnVmSGRyKTsJLyogcmVsZWFzZXMgc3Bpbmxv Y2sgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBYWFg6IElzIGl0IE9LIHRv IHNheSB0aGF0IHRoZSBjb250cmFjdCBmb3IgRGlzY2FyZEJ1ZmZlcigpIGlzCisJCQkgKiB0 aGF0IHRoZSBjYWxsZXIgaXMgYXNzZXJ0aW5nIHRoYXQgbm8gb25lIGVsc2UgY291bGQgYmUK KwkJCSAqIGludGVyZXN0ZWQgaW4gdGhpcyBidWZmZXIsIGFuZCB0aGVyZWZvcmUgaXQncyBh IHByb2dyYW1taW5nCisJCQkgKiBlcnJvciBvciBjb3JydXB0aW9uIGlmIHlvdSByZWFjaCB0 aGlzIGNhc2U/CisJCQkgKi8KKwkJCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7 CisJCQllbG9nKEVSUk9SLCAiY2Fubm90IGRpc2NhcmQgYnVmZmVyIHRoYXQgaXMgcGlubmVk Iik7CisJCX0KKwl9CisJZWxzZQorCQlVbmxvY2tCdWZIZHIoYnVmSGRyLCBidWZfc3RhdGUp OworfQorCiAvKgogICogTWFya0J1ZmZlckRpcnR5CiAgKgpAQCAtMjkwMCw3ICszMDA4LDEw IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJ ICogYnVmZmVyLCBvdGhlciBwcm9jZXNzZXMgbWlnaHQgYmUgdXBkYXRpbmcgaGludCBiaXRz IGluIGl0LCBzbyB3ZSBtdXN0CiAJICogY29weSB0aGUgcGFnZSB0byBwcml2YXRlIHN0b3Jh Z2UgaWYgd2UgZG8gY2hlY2tzdW1taW5nLgogCSAqLwotCWJ1ZlRvV3JpdGUgPSBQYWdlU2V0 Q2hlY2tzdW1Db3B5KChQYWdlKSBidWZCbG9jaywgYnVmLT50YWcuYmxvY2tOdW0pOworCWlm IChCdWZmZXJIYXNTdGFuZGFyZFBhZ2UoYnVmKSkKKwkJYnVmVG9Xcml0ZSA9IFBhZ2VTZXRD aGVja3N1bUNvcHkoKFBhZ2UpIGJ1ZkJsb2NrLCBidWYtPnRhZy5ibG9ja051bSk7CisJZWxz ZQorCQlidWZUb1dyaXRlID0gYnVmQmxvY2s7CiAKIAlpZiAodHJhY2tfaW9fdGltaW5nKQog CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGlvX3N0YXJ0KTsKQEAgLTMwMjksNyArMzE0MCwx MCBAQCBCdWZmZXJHZXRMU05BdG9taWMoQnVmZmVyIGJ1ZmZlcikKIAlBc3NlcnQoQnVmZmVy SXNQaW5uZWQoYnVmZmVyKSk7CiAKIAlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhkcik7 Ci0JbHNuID0gUGFnZUdldExTTihwYWdlKTsKKwlpZiAoQnVmZmVySGFzU3RhbmRhcmRQYWdl KGJ1ZkhkcikpCisJCWxzbiA9IFBhZ2VHZXRMU04ocGFnZSk7CisJZWxzZQorCQlsc24gPSBC dWZmZXJHZXRFeHRlcm5hbExTTihidWZIZHIpOwogCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1 Zl9zdGF0ZSk7CiAKIAlyZXR1cm4gbHNuOwpAQCAtMzU0MSw3ICszNjU1LDggQEAgRmx1c2hS ZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCQkJCWVycmNhbGxiYWNrLnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKIAkJCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVy cmNhbGxiYWNrOwogCi0JCQkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsb2NhbHBhZ2UsIGJ1 Zkhkci0+dGFnLmJsb2NrTnVtKTsKKwkJCQlpZiAoQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1 ZkhkcikpCisJCQkJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobG9jYWxwYWdlLCBidWZIZHIt PnRhZy5ibG9ja051bSk7CiAKIAkJCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHJlbCks CiAJCQkJCQkgIGJ1Zkhkci0+dGFnLmZvcmtOdW0sCkBAIC01MDExLDMgKzUxMjYsMjkgQEAg VGVzdEZvck9sZFNuYXBzaG90X2ltcGwoU25hcHNob3Qgc25hcHNob3QsIFJlbGF0aW9uIHJl bGF0aW9uKQogCQkJCShlcnJjb2RlKEVSUkNPREVfU05BUFNIT1RfVE9PX09MRCksCiAJCQkJ IGVycm1zZygic25hcHNob3QgdG9vIG9sZCIpKSk7CiB9CisKKy8qCisgKiBDaGVjayBpZiBh IGJ1ZmZlciB0YWcgaXMgY3VycmVudGx5IG1hcHBlZC4KKyAqCisgKiBYWFggRHViaW91cyBz ZW1hbnRpY3M7IG5lZWRlZCBvbmx5IGZvciBtdWx0aXhhY3QncyBoYW5kbGluZyBmb3IKKyAq IGluY29uc2lzdGVudCBzdGF0ZXMuCisgKi8KK2Jvb2wKK0J1ZmZlclByb2JlKFJlbEZpbGVM b2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2Nr TnVtKQoreworCUJ1ZmZlclRhZwl0YWc7CisJdWludDMyCQloYXNoOworCUxXTG9jawkgICAq cGFydGl0aW9uTG9jazsKKwlpbnQJCQlidWZfaWQ7CisKKwlJTklUX0JVRkZFUlRBRyh0YWcs IHJsb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisKKwloYXNoID0gQnVmVGFibGVIYXNo Q29kZSgmdGFnKTsKKwlwYXJ0aXRpb25Mb2NrID0gQnVmTWFwcGluZ1BhcnRpdGlvbkxvY2so aGFzaCk7CisKKwlMV0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ssIExXX1NIQVJFRCk7CisJ YnVmX2lkID0gQnVmVGFibGVMb29rdXAoJnRhZywgaGFzaCk7CisJTFdMb2NrUmVsZWFzZShw YXJ0aXRpb25Mb2NrKTsKKworCXJldHVybiBidWZfaWQgPj0gMDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYwppbmRleCAxYTZmNTI3MDUxOC4uYzA2M2EyMDFhNGYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9pcGNpLmMKQEAgLTExNiw5ICsxMTYsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUo aW50ICpudW1fc2VtYXBob3JlcykKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1ByZWZl dGNoU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTE9HU2htZW1TaXpl KCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUmVjb3ZlcnlTaG1lbVNpemUoKSk7 Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIENMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIENvbW1pdFRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBTVUJUUkFOU1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgVHdv UGhhc2VTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tncm91bmRX b3JrZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE11bHRpWGFjdFNo bWVtU2l6ZSgpKTsKQEAgLTI0MCw5ICsyMzgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzKHZvaWQpCiAJWExPR1NobWVtSW5pdCgpOwogCVhMb2dQcmVmZXRjaFNobWVt SW5pdCgpOwogCVhMb2dSZWNvdmVyeVNobWVtSW5pdCgpOwotCUNMT0dTaG1lbUluaXQoKTsK IAlDb21taXRUc1NobWVtSW5pdCgpOwotCVNVQlRSQU5TU2htZW1Jbml0KCk7CiAJTXVsdGlY YWN0U2htZW1Jbml0KCk7CiAJSW5pdEJ1ZmZlclBvb2woKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL2x3bG9jay5jCmluZGV4IDM4MzE3ZWRhZjk2Li5kMWUxYWRkNzQ4NCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9jay5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sd2xvY2suYwpAQCAtMTI5LDIwICsxMjksNiBAQCBleHRlcm4gc2xv Y2tfdCAqU2htZW1Mb2NrOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IEluZGl2aWR1YWxM V0xvY2tOYW1lc1tdOwkvKiBpbiBsd2xvY2tuYW1lcy5jICovCiAKIHN0YXRpYyBjb25zdCBj aGFyICpjb25zdCBCdWlsdGluVHJhbmNoZU5hbWVzW10gPSB7Ci0JLyogTFdUUkFOQ0hFX1hB Q1RfQlVGRkVSOiAqLwotCSJYYWN0QnVmZmVyIiwKLQkvKiBMV1RSQU5DSEVfQ09NTUlUVFNf QlVGRkVSOiAqLwotCSJDb21taXRUU0J1ZmZlciIsCi0JLyogTFdUUkFOQ0hFX1NVQlRSQU5T X0JVRkZFUjogKi8KLQkiU3VidHJhbnNCdWZmZXIiLAotCS8qIExXVFJBTkNIRV9NVUxUSVhB Q1RPRkZTRVRfQlVGRkVSOiAqLwotCSJNdWx0aVhhY3RPZmZzZXRCdWZmZXIiLAotCS8qIExX VFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSOiAqLwotCSJNdWx0aVhhY3RNZW1iZXJC dWZmZXIiLAotCS8qIExXVFJBTkNIRV9OT1RJRllfQlVGRkVSOiAqLwotCSJOb3RpZnlCdWZm ZXIiLAotCS8qIExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSOiAqLwotCSJTZXJpYWxCdWZmZXIi LAogCS8qIExXVFJBTkNIRV9XQUxfSU5TRVJUOiAqLwogCSJXQUxJbnNlcnQiLAogCS8qIExX VFJBTkNIRV9CVUZGRVJfQ09OVEVOVDogKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv bHdsb2NrbmFtZXMudHh0CmluZGV4IDZjN2NmNmMyOTU2Li5mYmQyOTc2YTYwMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dAorKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CkBAIC0xNywxMCArMTcs MTAgQEAgV0FMV3JpdGVMb2NrCQkJCQkJOAogQ29udHJvbEZpbGVMb2NrCQkJCQkJOQogIyAx MCB3YXMgQ2hlY2twb2ludExvY2sKIFhhY3RTTFJVTG9jawkJCQkJCTExCi1TdWJ0cmFuc1NM UlVMb2NrCQkJCQkxMgorIyAxMiB3YXMgU3VidHJhbnNTTFJVTG9jawogTXVsdGlYYWN0R2Vu TG9jawkJCQkJMTMKLU11bHRpWGFjdE9mZnNldFNMUlVMb2NrCQkJCTE0Ci1NdWx0aVhhY3RN ZW1iZXJTTFJVTG9jawkJCQkxNQorIyAxNCB3YXMgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2sK KyMgMTUgd2FzIE11bHRpWGFjdE1lbWJlclNMUlVMb2NrCiBSZWxDYWNoZUluaXRMb2NrCQkJ CQkxNgogQ2hlY2twb2ludGVyQ29tbUxvY2sJCQkJMTcKIFR3b1BoYXNlU3RhdGVMb2NrCQkJ CQkxOApAQCAtMzEsNyArMzEsNyBAQCBBdXRvdmFjdXVtTG9jawkJCQkJCTIyCiBBdXRvdmFj dXVtU2NoZWR1bGVMb2NrCQkJCTIzCiBTeW5jU2NhbkxvY2sJCQkJCQkyNAogUmVsYXRpb25N YXBwaW5nTG9jawkJCQkJMjUKLU5vdGlmeVNMUlVMb2NrCQkJCQkJMjYKKyMgMjYgd2FzIE5v dGlmeVNMUlVMb2NrCiBOb3RpZnlRdWV1ZUxvY2sJCQkJCQkyNwogU2VyaWFsaXphYmxlWGFj dEhhc2hMb2NrCQkJMjgKIFNlcmlhbGl6YWJsZUZpbmlzaGVkTGlzdExvY2sJCTI5CkBAIC00 Myw3ICs0Myw3IEBAIER5bmFtaWNTaGFyZWRNZW1vcnlDb250cm9sTG9jawkJMzQKIEF1dG9G aWxlTG9jawkJCQkJCTM1CiBSZXBsaWNhdGlvblNsb3RBbGxvY2F0aW9uTG9jawkJMzYKIFJl cGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrCQkJMzcKLUNvbW1pdFRzU0xSVUxvY2sJCQkJCTM4 CisjIDM4IHdhcyBDb21taXRUc1NMUlVMb2NrCiBDb21taXRUc0xvY2sJCQkJCQkzOQogUmVw bGljYXRpb25PcmlnaW5Mb2NrCQkJCTQwCiBNdWx0aVhhY3RUcnVuY2F0aW9uTG9jawkJCQk0 MQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDUxMzZkYTZlYTM2 Li43YzIwMGJjODc0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpA QCAtMzEyLDE0ICszMTIsNiBAQAogCSgodGFyZ2V0aGFzaCkgXiAoKHVpbnQzMikgUG9pbnRl ckdldERhdHVtKChwcmVkaWNhdGVsb2NrdGFnKS0+bXlYYWN0KSkgXAogCSA8PCBMT0cyX05V TV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMpCiAKLQotLyoKLSAqIFRoZSBTTFJVIGJ1ZmZl ciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBvbGQgeGlkcy4KLSAqLwotc3Rh dGljIFNscnVDdGxEYXRhIFNlcmlhbFNscnVDdGxEYXRhOwotCi0jZGVmaW5lIFNlcmlhbFNs cnVDdGwJCQkoJlNlcmlhbFNscnVDdGxEYXRhKQotCiAjZGVmaW5lIFNFUklBTF9QQUdFU0la RQkJCUJMQ0tTWgogI2RlZmluZSBTRVJJQUxfRU5UUllTSVpFCQkJc2l6ZW9mKFNlckNvbW1p dFNlcU5vKQogI2RlZmluZSBTRVJJQUxfRU5UUklFU1BFUlBBR0UJKFNFUklBTF9QQUdFU0la RSAvIFNFUklBTF9FTlRSWVNJWkUpCkBAIC0zMzEsOCArMzIzLDggQEAgc3RhdGljIFNscnVD dGxEYXRhIFNlcmlhbFNscnVDdGxEYXRhOwogCiAjZGVmaW5lIFNlcmlhbE5leHRQYWdlKHBh Z2UpICgoKHBhZ2UpID49IFNFUklBTF9NQVhfUEFHRSkgPyAwIDogKHBhZ2UpICsgMSkKIAot I2RlZmluZSBTZXJpYWxWYWx1ZShzbG90bm8sIHhpZCkgKCooKFNlckNvbW1pdFNlcU5vICop IFwKLQkoU2VyaWFsU2xydUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgXAor I2RlZmluZSBTZXJpYWxWYWx1ZShidWZmZXIsIHhpZCkgKCooKFNlckNvbW1pdFNlcU5vICop IFwKKwkoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgXAogCSgoKCh1aW50MzIpICh4aWQpKSAl IFNFUklBTF9FTlRSSUVTUEVSUEFHRSkgKiBTRVJJQUxfRU5UUllTSVpFKSkpKQogCiAjZGVm aW5lIFNlcmlhbFBhZ2UoeGlkKQkoKCh1aW50MzIpICh4aWQpKSAvIFNFUklBTF9FTlRSSUVT UEVSUEFHRSkKQEAgLTg2NywxNyArODU5LDEwIEBAIFNlcmlhbEluaXQodm9pZCkKIHsKIAli b29sCQlmb3VuZDsKIAotCS8qCi0JICogU2V0IHVwIFNMUlUgbWFuYWdlbWVudCBvZiB0aGUg cGdfc2VyaWFsIGRhdGEuCi0JICovCi0JU2VyaWFsU2xydUN0bC0+UGFnZVByZWNlZGVzID0g U2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5OwotCVNpbXBsZUxydUluaXQoU2VyaWFsU2xy dUN0bCwgIlNlcmlhbCIsCi0JCQkJICBOVU1fU0VSSUFMX0JVRkZFUlMsIDAsIFNlcmlhbFNM UlVMb2NrLCAicGdfc2VyaWFsIiwKLQkJCQkgIExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLCBT WU5DX0hBTkRMRVJfTk9ORSk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwogCVNlcmlh bFBhZ2VQcmVjZWRlc0xvZ2ljYWxseVVuaXRUZXN0cygpOwogI2VuZGlmCi0JU2xydVBhZ2VQ cmVjZWRlc1VuaXRUZXN0cyhTZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0Up OworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2VyaWFsUGFnZVByZWNlZGVzTG9naWNh bGx5LCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOwogCiAJLyoKIAkgKiBDcmVhdGUgb3IgYXR0 YWNoIHRvIHRoZSBTZXJpYWxDb250cm9sIHN0cnVjdHVyZS4KQEAgLTkwNyw5ICs4OTIsOSBA QCBTZXJpYWxBZGQoVHJhbnNhY3Rpb25JZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZs aWN0Q29tbWl0U2VxTm8pCiB7CiAJVHJhbnNhY3Rpb25JZCB0YWlsWGlkOwogCWludAkJCXRh cmdldFBhZ2U7Ci0JaW50CQkJc2xvdG5vOwogCWludAkJCWZpcnN0WmVyb1BhZ2U7CiAJYm9v bAkJaXNOZXdQYWdlOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpOwogCkBAIC05NTQsMTYgKzkzOSwyMiBAQCBTZXJpYWxBZGQoVHJh bnNhY3Rpb25JZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZsaWN0Q29tbWl0U2VxTm8p CiAJCS8qIEluaXRpYWxpemUgaW50ZXJ2ZW5pbmcgcGFnZXMuICovCiAJCXdoaWxlIChmaXJz dFplcm9QYWdlICE9IHRhcmdldFBhZ2UpCiAJCXsKLQkJCSh2b2lkKSBTaW1wbGVMcnVaZXJv UGFnZShTZXJpYWxTbHJ1Q3RsLCBmaXJzdFplcm9QYWdlKTsKKwkJCWJ1ZmZlciA9IFplcm9T bHJ1QnVmZmVyKFNMUlVfU0VSSUFMX1JFTF9JRCwgZmlyc3RaZXJvUGFnZSk7CisJCQlNYXJr QnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK IAkJCWZpcnN0WmVyb1BhZ2UgPSBTZXJpYWxOZXh0UGFnZShmaXJzdFplcm9QYWdlKTsKIAkJ fQotCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShTZXJpYWxTbHJ1Q3RsLCB0YXJnZXRQ YWdlKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TRVJJQUxfUkVMX0lELCB0 YXJnZXRQYWdlKTsKIAl9CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShT ZXJpYWxTbHJ1Q3RsLCB0YXJnZXRQYWdlLCB0cnVlLCB4aWQpOworCXsKKwkJYnVmZmVyID0g UmVhZFNscnVCdWZmZXIoU0xSVV9TRVJJQUxfUkVMX0lELCB0YXJnZXRQYWdlKTsKKwkJTG9j a0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJfQogCi0JU2VyaWFs VmFsdWUoc2xvdG5vLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKLQlTZXJpYWxT bHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJU2VyaWFsVmFs dWUoYnVmZmVyLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKKwlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlMV0xv Y2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIH0KQEAgLTk3OSw3ICs5NzAsNyBAQCBTZXJp YWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQogCVRyYW5z YWN0aW9uSWQgaGVhZFhpZDsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJU2VyQ29tbWl0 U2VxTm8gdmFsOwotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIApAQCAtMTAwMSw5ICs5OTIsOSBAQCBT ZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKQogCSAq IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBob2xkaW5n IFNlcmlhbFNMUlVMb2NrLAogCSAqIGJ1dCB3aWxsIHJldHVybiB3aXRoIHRoYXQgbG9jayBo ZWxkLCB3aGljaCBtdXN0IHRoZW4gYmUgcmVsZWFzZWQuCiAJICovCi0Jc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU2VyaWFsU2xydUN0bCwKLQkJCQkJCQkJCQlTZXJp YWxQYWdlKHhpZCksIHhpZCk7Ci0JdmFsID0gU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpOwor CWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX1JFTF9JRCwgU2VyaWFsUGFn ZSh4aWQpKTsKKwl2YWwgPSBTZXJpYWxWYWx1ZShidWZmZXIsIHhpZCk7CisJUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOwogCUxXTG9ja1JlbGVhc2UoU2VyaWFsU0xSVUxvY2spOwogCXJldHVy biB2YWw7CiB9CkBAIC0xMTIyLDE5ICsxMTEzLDcgQEAgQ2hlY2tQb2ludFByZWRpY2F0ZSh2 b2lkKQogCUxXTG9ja1JlbGVhc2UoU2VyaWFsU0xSVUxvY2spOwogCiAJLyogVHJ1bmNhdGUg YXdheSBwYWdlcyB0aGF0IGFyZSBubyBsb25nZXIgcmVxdWlyZWQgKi8KLQlTaW1wbGVMcnVU cnVuY2F0ZShTZXJpYWxTbHJ1Q3RsLCB0YWlsUGFnZSk7Ci0KLQkvKgotCSAqIFdyaXRlIGRp cnR5IFNMUlUgcGFnZXMgdG8gZGlzawotCSAqCi0JICogVGhpcyBpcyBub3QgYWN0dWFsbHkg bmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3LiBXZSBkbwotCSAq IGl0IG1lcmVseSBhcyBhIGRlYnVnZ2luZyBhaWQuCi0JICoKLQkgKiBXZSdyZSBkb2luZyB0 aGlzIGFmdGVyIHRoZSB0cnVuY2F0aW9uIHRvIGF2b2lkIHdyaXRpbmcgcGFnZXMgcmlnaHQK LQkgKiBiZWZvcmUgZGVsZXRpbmcgdGhlIGZpbGUgaW4gd2hpY2ggdGhleSBzaXQsIHdoaWNo IHdvdWxkIGJlIGNvbXBsZXRlbHkKLQkgKiBwb2ludGxlc3MuCi0JICovCi0JU2ltcGxlTHJ1 V3JpdGVBbGwoU2VyaWFsU2xydUN0bCwgdHJ1ZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xS VV9TRVJJQUxfUkVMX0lELCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksIHRhaWxQYWdl KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTM5Niw3ICsxMzc1LDYgQEAg UHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJLyogU2hhcmVkIG1lbW9yeSBzdHJ1 Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9mIG9sZCBjb21taXR0ZWQgeGlkcy4gKi8KIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFNlcmlhbENvbnRyb2xEYXRhKSk7Ci0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fU0VSSUFMX0JVRkZF UlMsIDApKTsKIAogCXJldHVybiBzaXplOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9zbWdyL3NtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMK aW5kZXggYzFhNWZlYmNiZmQuLmJkYTNmMDJmY2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL3NtZ3Ivc21nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9z bWdyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK KyNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMu aCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5o IgpAQCAtODIsNiArODMsMTQgQEAgc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3dbXSA9IHsK IAkJLnNtZ3JfbmJsb2NrcyA9IG1kbmJsb2NrcywKIAkJLnNtZ3JfdHJ1bmNhdGUgPSBtZHRy dW5jYXRlLAogCQkuc21ncl9pbW1lZHN5bmMgPSBtZGltbWVkc3luYywKKwl9LAorCS8qICJT TFJVIiBzdG9yYWdlICovCisJeworCQkuc21ncl9vcGVuID0gc2xydW9wZW4sCisJCS5zbWdy X2Nsb3NlID0gc2xydWNsb3NlLAorCQkuc21ncl9yZWFkID0gc2xydXJlYWQsCisJCS5zbWdy X3dyaXRlID0gc2xydXdyaXRlLAorCQkuc21ncl93cml0ZWJhY2sgPSBzbHJ1d3JpdGViYWNr LAogCX0KIH07CiAKQEAgLTE3NiwxMyArMTg1LDE4IEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2Nh dG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKIAkJcmVsbi0+c21ncl90YXJnYmxv Y2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9G T1JLTlVNOyArK2kpCiAJCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCQlyZWxuLT5zbWdyX3doaWNoID0gMDsJLyogd2Ugb25seSBoYXZl IG1kLmMgYXQgcHJlc2VudCAqLwogCi0JCS8qIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGlu aXRpYWxpemF0aW9uICovCi0JCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX29wZW4o cmVsbik7CisJCS8qIFhYWCBmaW5kIHNvbWUgZWxlZ2FudCB3YXkgdG8gZG8gdGhpcywgb3Ig c29tZXRoaW5nIGJldHRlciAqLworCQlpZiAocmxvY2F0b3IuZGJPaWQgPT0gU0xSVV9EQl9J RCkKKwkJCXJlbG4tPnNtZ3Jfd2hpY2ggPSAxOwkvKiBzbHJ1LmMgKi8KKwkJZWxzZQorCQkJ cmVsbi0+c21ncl93aGljaCA9IDA7CS8qIG1kLmMgKi8KIAogCQkvKiBpdCBoYXMgbm8gb3du ZXIgeWV0ICovCiAJCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9yZWxucywgJnJlbG4tPm5v ZGUpOworCisJCS8qIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICov CisJCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX29wZW4ocmVsbik7CiAJfQogCiAJ cmV0dXJuIHJlbG47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3N5bmMvc3lu Yy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYwppbmRleCA5ZDZhOWU5MTA5 MC4uNjAxNWU4ZTc5YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9z eW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYwpAQCAtMTgsOSAr MTgsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KIAot I2luY2x1ZGUgImFjY2Vzcy9jb21taXRfdHMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvY2xvZy5o IgotI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2xy dS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKQEAgLTEwNiwyMSAr MTA0LDkgQEAgc3RhdGljIGNvbnN0IFN5bmNPcHMgc3luY3N3W10gPSB7CiAJCS5zeW5jX3Vu bGlua2ZpbGV0YWcgPSBtZHVubGlua2ZpbGV0YWcsCiAJCS5zeW5jX2ZpbGV0YWdtYXRjaGVz ID0gbWRmaWxldGFnbWF0Y2hlcwogCX0sCi0JLyogcGdfeGFjdCAqLwotCVtTWU5DX0hBTkRM RVJfQ0xPR10gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gY2xvZ3N5bmNmaWxldGFnCi0J fSwKLQkvKiBwZ19jb21taXRfdHMgKi8KLQlbU1lOQ19IQU5ETEVSX0NPTU1JVF9UU10gPSB7 Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gY29tbWl0dHNzeW5jZmlsZXRhZwotCX0sCi0JLyog cGdfbXVsdGl4YWN0L29mZnNldHMgKi8KLQlbU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9PRkZT RVRdID0gewotCQkuc3luY19zeW5jZmlsZXRhZyA9IG11bHRpeGFjdG9mZnNldHNzeW5jZmls ZXRhZwotCX0sCi0JLyogcGdfbXVsdGl4YWN0L21lbWJlcnMgKi8KLQlbU1lOQ19IQU5ETEVS X01VTFRJWEFDVF9NRU1CRVJdID0gewotCQkuc3luY19zeW5jZmlsZXRhZyA9IG11bHRpeGFj dG1lbWJlcnNzeW5jZmlsZXRhZworCS8qIFNMUlUgKi8KKwlbU1lOQ19IQU5ETEVSX1NMUlVd ID0geworCQkuc3luY19zeW5jZmlsZXRhZyA9IHNscnVzeW5jZmlsZXRhZwogCX0KIH07CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zbHJ1LmMg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xydS5jCmluZGV4IDI4ZWY3 MzY3MzVmLi5kM2Y1ZDU1OGU3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvcGdzdGF0X3NscnUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9w Z3N0YXRfc2xydS5jCkBAIC0zMSw3ICszMSw3IEBAIHN0YXRpYyB2b2lkIHBnc3RhdF9yZXNl dF9zbHJ1X2NvdW50ZXJfaW50ZXJuYWwoaW50IGluZGV4LCBUaW1lc3RhbXBUeiB0cyk7CiAg KiBTTFJVIGNvdW50ZXJzIGFyZSByZXBvcnRlZCB3aXRoaW4gY3JpdGljYWwgc2VjdGlvbnMg c28gd2UgdXNlIHN0YXRpYyBtZW1vcnkKICAqIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBh bGxvY2F0aW9uLgogICovCi1zdGF0aWMgUGdTdGF0X1NMUlVTdGF0cyBwZW5kaW5nX1NMUlVT dGF0c1tTTFJVX05VTV9FTEVNRU5UU107CitzdGF0aWMgUGdTdGF0X1NMUlVTdGF0cyBwZW5k aW5nX1NMUlVTdGF0c1tTTFJVX05VTV9SRUxTXTsKIGJvb2wJCWhhdmVfc2xydXN0YXRzID0g ZmFsc2U7CiAKIApAQCAtMTEwLDM3ICsxMTAsMjEgQEAgcGdzdGF0X2ZldGNoX3NscnUodm9p ZCkKIH0KIAogLyoKLSAqIFJldHVybnMgU0xSVSBuYW1lIGZvciBhbiBpbmRleC4gVGhlIGlu ZGV4IG1heSBiZSBhYm92ZSBTTFJVX05VTV9FTEVNRU5UUywKLSAqIGluIHdoaWNoIGNhc2Ug dGhpcyByZXR1cm5zIE5VTEwuIFRoaXMgYWxsb3dzIHdyaXRpbmcgY29kZSB0aGF0IGRvZXMg bm90Ci0gKiBrbm93IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZHZhbmNlLgorICogUmV0 dXJucyBTTFJVIG5hbWUgZm9yIGFuIGluZGV4LgogICovCiBjb25zdCBjaGFyICoKIHBnc3Rh dF9nZXRfc2xydV9uYW1lKGludCBzbHJ1X2lkeCkKIHsKLQlpZiAoc2xydV9pZHggPCAwIHx8 IHNscnVfaWR4ID49IFNMUlVfTlVNX0VMRU1FTlRTKQotCQlyZXR1cm4gTlVMTDsKLQotCXJl dHVybiBzbHJ1X25hbWVzW3NscnVfaWR4XTsKKwlyZXR1cm4gU2xydU5hbWUoc2xydV9pZHgp OwogfQogCiAvKgotICogRGV0ZXJtaW5lIGluZGV4IG9mIGVudHJ5IGZvciBhIFNMUlUgd2l0 aCBhIGdpdmVuIG5hbWUuIElmIHRoZXJlJ3Mgbm8gZXhhY3QKLSAqIG1hdGNoLCByZXR1cm5z IGluZGV4IG9mIHRoZSBsYXN0ICJvdGhlciIgZW50cnkgdXNlZCBmb3IgU0xSVXMgZGVmaW5l ZCBpbgotICogZXh0ZXJuYWwgcHJvamVjdHMuCisgKiBEZXRlcm1pbmUgaW5kZXggb2YgZW50 cnkgZm9yIGEgU0xSVSB3aXRoIGEgZ2l2ZW4gbmFtZS4KICAqLwogaW50CiBwZ3N0YXRfZ2V0 X3NscnVfaW5kZXgoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpbnQJCQlpOwotCi0JZm9yIChp ID0gMDsgaSA8IFNMUlVfTlVNX0VMRU1FTlRTOyBpKyspCi0JewotCQlpZiAoc3RyY21wKHNs cnVfbmFtZXNbaV0sIG5hbWUpID09IDApCi0JCQlyZXR1cm4gaTsKLQl9Ci0KLQkvKiByZXR1 cm4gaW5kZXggb2YgdGhlIGxhc3QgZW50cnkgKHdoaWNoIGlzIHRoZSAib3RoZXIiIG9uZSkg Ki8KLQlyZXR1cm4gKFNMUlVfTlVNX0VMRU1FTlRTIC0gMSk7CisJcmV0dXJuIFNscnVSZWxJ ZEJ5TmFtZShuYW1lKTsKIH0KIAogLyoKQEAgLTE2Niw3ICsxNTAsNyBAQCBwZ3N0YXRfc2xy dV9mbHVzaChib29sIG5vd2FpdCkKIAllbHNlIGlmICghTFdMb2NrQ29uZGl0aW9uYWxBY3F1 aXJlKCZzdGF0c19zaG1lbS0+bG9jaywgTFdfRVhDTFVTSVZFKSkKIAkJcmV0dXJuIHRydWU7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0xSVV9OVU1fRUxFTUVOVFM7IGkrKykKKwlmb3IgKGkg PSAwOyBpIDwgU0xSVV9OVU1fUkVMUzsgaSsrKQogCXsKIAkJUGdTdGF0X1NMUlVTdGF0cyAq c2hhcmVkZW50ID0gJnN0YXRzX3NobWVtLT5zdGF0c1tpXTsKIAkJUGdTdGF0X1NMUlVTdGF0 cyAqcGVuZGluZ2VudCA9ICZwZW5kaW5nX1NMUlVTdGF0c1tpXTsKQEAgLTE5NSw3ICsxNzks NyBAQCBwZ3N0YXRfc2xydV9mbHVzaChib29sIG5vd2FpdCkKIHZvaWQKIHBnc3RhdF9zbHJ1 X3Jlc2V0X2FsbF9jYihUaW1lc3RhbXBUeiB0cykKIHsKLQlmb3IgKGludCBpID0gMDsgaSA8 IFNMUlVfTlVNX0VMRU1FTlRTOyBpKyspCisJZm9yIChpbnQgaSA9IDA7IGkgPCBTTFJVX05V TV9SRUxTOyBpKyspCiAJCXBnc3RhdF9yZXNldF9zbHJ1X2NvdW50ZXJfaW50ZXJuYWwoaSwg dHMpOwogfQogCkBAIC0yMTMsOCArMTk3LDcgQEAgcGdzdGF0X3NscnVfc25hcHNob3RfY2Io dm9pZCkKIH0KIAogLyoKLSAqIFJldHVybnMgcG9pbnRlciB0byBlbnRyeSB3aXRoIGNvdW50 ZXJzIGZvciBnaXZlbiBTTFJVIChiYXNlZCBvbiB0aGUgbmFtZQotICogc3RvcmVkIGluIFNs cnVDdGwgYXMgbHdsb2NrIHRyYW5jaGUgbmFtZSkuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8g ZW50cnkgd2l0aCBjb3VudGVycyBmb3IgZ2l2ZW4gU0xSVS4KICAqLwogc3RhdGljIGlubGlu ZSBQZ1N0YXRfU0xSVVN0YXRzICoKIGdldF9zbHJ1X2VudHJ5KGludCBzbHJ1X2lkeCkKQEAg LTIyNyw3ICsyMTAsNyBAQCBnZXRfc2xydV9lbnRyeShpbnQgc2xydV9pZHgpCiAJICovCiAJ QXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyIHx8ICFJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCk7 CiAKLQlBc3NlcnQoKHNscnVfaWR4ID49IDApICYmIChzbHJ1X2lkeCA8IFNMUlVfTlVNX0VM RU1FTlRTKSk7CisJQXNzZXJ0KChzbHJ1X2lkeCA+PSAwKSAmJiAoc2xydV9pZHggPCBTTFJV X05VTV9SRUxTKSk7CiAKIAloYXZlX3NscnVzdGF0cyA9IHRydWU7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBkYTU3YTkzMDM0ZS4uODM2ZTdh OWI0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAg LTY2MCw4ICs2NjAsOCBAQCBwZ3N0YXRfZ2V0X3dhaXRfaW8oV2FpdEV2ZW50SU8gdykKIAkJ Y2FzZSBXQUlUX0VWRU5UX1JFUExJQ0FUSU9OX1NMT1RfV1JJVEU6CiAJCQlldmVudF9uYW1l ID0gIlJlcGxpY2F0aW9uU2xvdFdyaXRlIjsKIAkJCWJyZWFrOwotCQljYXNlIFdBSVRfRVZF TlRfU0xSVV9GTFVTSF9TWU5DOgotCQkJZXZlbnRfbmFtZSA9ICJTTFJVRmx1c2hTeW5jIjsK KwkJY2FzZSBXQUlUX0VWRU5UX1NMUlVfRkxVU0g6CisJCQlldmVudF9uYW1lID0gIlNMUlVG bHVzaCI7CiAJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1NMUlVfUkVBRDoKIAkJCWV2 ZW50X25hbWUgPSAiU0xSVVJlYWQiOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3Mu YwppbmRleCBkOWUyYTc5MzgyOS4uZjM3NmU1YjBhNjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ3N0YXRmdW5jcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nl c3Mvc2xydS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3hsb2dwcmVmZXRjaGVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKQEAg LTE4MTMsNyArMTgxNCw3IEBAIHBnX3N0YXRfZ2V0X3NscnUoUEdfRlVOQ1RJT05fQVJHUykK IAkvKiByZXF1ZXN0IFNMUlUgc3RhdHMgZnJvbSB0aGUgY3VtdWxhdGl2ZSBzdGF0cyBzeXN0 ZW0gKi8KIAlzdGF0cyA9IHBnc3RhdF9mZXRjaF9zbHJ1KCk7CiAKLQlmb3IgKGkgPSAwOzsg aSsrKQorCWZvciAoaSA9IDA7IGkgPCBTTFJVX05VTV9SRUxTOyBpKyspCiAJewogCQkvKiBm b3IgZWFjaCByb3cgKi8KIAkJRGF0dW0JCXZhbHVlc1tQR19TVEFUX0dFVF9TTFJVX0NPTFNd ID0gezB9OwpAQCAtMTgyMSwxMCArMTgyMiw3IEBAIHBnX3N0YXRfZ2V0X3NscnUoUEdfRlVO Q1RJT05fQVJHUykKIAkJUGdTdGF0X1NMUlVTdGF0cyBzdGF0OwogCQljb25zdCBjaGFyICpu YW1lOwogCi0JCW5hbWUgPSBwZ3N0YXRfZ2V0X3NscnVfbmFtZShpKTsKLQotCQlpZiAoIW5h bWUpCi0JCQlicmVhazsKKwkJbmFtZSA9IFNscnVOYW1lKGkpOwogCiAJCXN0YXQgPSBzdGF0 c1tpXTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9z cmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYwppbmRleCBlMTJiZTFiOWJkOC4uNzM3MzUz OGUyZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCkBAIC04NjUsNyArODY1LDkgQEAgTWVt b3J5Q29udGV4dEFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplKQogCXZv aWQJICAgKnJldDsKIAogCUFzc2VydEFyZyhNZW1vcnlDb250ZXh0SXNWYWxpZChjb250ZXh0 KSk7Ci0JQXNzZXJ0Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCk7CisJLy8gWFhYIGhv cnJpYmxlIGhhY2s6IHdoaWxlIHBpbm5pbmcgY2xvZyBidWZmZXJzIGR1cmluZyBjb21taXQs IHJlc293bmVyCisJLy8gc3R1ZmYgYWxsb2NhdGVzIQorCS8vQXNzZXJ0Tm90SW5Dcml0aWNh bFNlY3Rpb24oY29udGV4dCk7CiAKIAlpZiAoIUFsbG9jU2l6ZUlzVmFsaWQoc2l6ZSkpCiAJ CWVsb2coRVJST1IsICJpbnZhbGlkIG1lbW9yeSBhbGxvYyByZXF1ZXN0IHNpemUgJXp1Iiwg c2l6ZSk7CkBAIC0xMDcyLDcgKzEwNzQsMTMgQEAgcGFsbG9jKFNpemUgc2l6ZSkKIAlNZW1v cnlDb250ZXh0IGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKIAogCUFzc2VydEFy ZyhNZW1vcnlDb250ZXh0SXNWYWxpZChjb250ZXh0KSk7Ci0JQXNzZXJ0Tm90SW5Dcml0aWNh bFNlY3Rpb24oY29udGV4dCk7CisJLyoKKwkgKiBYWFg6VE0gSSBjb21tZW50ZWQgdGhpcyBv dXQgZm9yIG5vdywgYmVjYXVzZSBvdGhlcndpc2UgaXQgY2FuIGZhaWwKKwkgKiB3aGlsZSB3 cml0aW5nIGJhY2sgbWQuYyBidWZmZXJzIGR1ZSB0byBjYWNoZSBwcmVzc3VyZSB3aGlsZSBy ZWFkaW5nIGluCisJICogQ0xPRyBidWZmZXJzIGR1cmluZyBjb21taXQsIGluIGEgY3JpdGlj YWwgc2VjdGlvbiAobWQuYyBhbGxvY2F0ZXMKKwkgKiBtZW1vcnkgdG8gYnVpbGQgcGF0aHMu Li4pOyBGSVhNRSEKKwkgKi8KKwkvL0Fzc2VydE5vdEluQ3JpdGljYWxTZWN0aW9uKGNvbnRl eHQpOwogCiAJaWYgKCFBbGxvY1NpemVJc1ZhbGlkKHNpemUpKQogCQllbG9nKEVSUk9SLCAi aW52YWxpZCBtZW1vcnkgYWxsb2MgcmVxdWVzdCBzaXplICV6dSIsIHNpemUpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9j bG9nLmgKaW5kZXggNTQzZjJlMjY0M2EuLmFmMTZhMmFmY2I5IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvY2xvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgK QEAgLTQwLDE4ICs0MCwxMiBAQCBleHRlcm4gdm9pZCBUcmFuc2FjdGlvbklkU2V0VHJlZVN0 YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkJICAgVHJh bnNhY3Rpb25JZCAqc3VieGlkcywgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24p OwogZXh0ZXJuIFhpZFN0YXR1cyBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyICpsc24pOwogCi1leHRlcm4gU2l6ZSBDTE9HU2htZW1CdWZm ZXJzKHZvaWQpOwotZXh0ZXJuIFNpemUgQ0xPR1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2 b2lkIENMT0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBDTE9HKHZv aWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBUcmlt Q0xPRyh2b2lkKTsKLWV4dGVybiB2b2lkIENoZWNrUG9pbnRDTE9HKHZvaWQpOwogZXh0ZXJu IHZvaWQgRXh0ZW5kQ0xPRyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpOwogZXh0ZXJuIHZv aWQgVHJ1bmNhdGVDTE9HKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwgT2lkIG9sZGVzdHhp ZF9kYXRvaWQpOwogCi1leHRlcm4gaW50CWNsb2dzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFn ICpmdGFnLCBjaGFyICpwYXRoKTsKLQogLyogWExPRyBzdHVmZiAqLwogI2RlZmluZSBDTE9H X1pFUk9QQUdFCQkweDAwCiAjZGVmaW5lIENMT0dfVFJVTkNBVEUJCTB4MTAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9jb21taXRfdHMuaAppbmRleCA3NjYyZjhlMWE5Yy4uNGU5ODZmYzAyM2QgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvY29tbWl0X3RzLmgKQEAgLTI3LDcgKzI3LDYgQEAgZXh0ZXJuIGJvb2wgVHJhbnNh Y3Rpb25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBUcmFu c2FjdGlvbklkIEdldExhdGVzdENvbW1pdFRzRGF0YShUaW1lc3RhbXBUeiAqdHMsCiAJCQkJ CQkJCQkJICAgUmVwT3JpZ2luSWQgKm5vZGVpZCk7CiAKLWV4dGVybiBTaXplIENvbW1pdFRz U2htZW1CdWZmZXJzKHZvaWQpOwogZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1lbVNpemUodm9p ZCk7CiBleHRlcm4gdm9pZCBDb21taXRUc1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lk IEJvb3RTdHJhcENvbW1pdFRzKHZvaWQpOwpAQCAtNDEsOCArNDAsNiBAQCBleHRlcm4gdm9p ZCBTZXRDb21taXRUc0xpbWl0KFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkg VHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lkIEFkdmFuY2VPbGRlc3RD b21taXRUc1hpZChUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpOwogCi1leHRlcm4gaW50CWNv bW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0K IC8qIFhMT0cgc3R1ZmYgKi8KICNkZWZpbmUgQ09NTUlUX1RTX1pFUk9QQUdFCQkweDAwCiAj ZGVmaW5lIENPTU1JVF9UU19UUlVOQ0FURQkJMHgxMApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5o CmluZGV4IGE1NjAwYTMyMGFlLi5hNmJiZTUzZTFiYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaApAQCAtMTE4LDkgKzExOCw2IEBAIGV4dGVybiBib29sIE11bHRpWGFjdElkUHJlY2Vk ZXMoTXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpOwogZXh0ZXJuIGJv b2wgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwKIAkJ CQkJCQkJCQlNdWx0aVhhY3RJZCBtdWx0aTIpOwogCi1leHRlcm4gaW50CW11bHRpeGFjdG9m ZnNldHNzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLWV4 dGVybiBpbnQJbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0 YWcsIGNoYXIgKnBhdGgpOwotCiBleHRlcm4gdm9pZCBBdEVPWGFjdF9NdWx0aVhhY3Qodm9p ZCk7CiBleHRlcm4gdm9pZCBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZv aWQgUG9zdFByZXBhcmVfTXVsdGlYYWN0KFRyYW5zYWN0aW9uSWQgeGlkKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xy dS5oCmluZGV4IDEzMGM0MWM4NjMyLi5lZDg1ZGQwMTlkOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBA IC0xLDcgKzEsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogc2xydS5oCi0g KgkJU2ltcGxlIExSVSBidWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxl cworICoJCUJ1ZmZlcmluZyBmb3IgdHJhbnNhY3Rpb24gc3RhdHVzIGxvZ2ZpbGVzCiAgKgog ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQpAQCAtMTQsOSArMTQsMzQg QEAKICNkZWZpbmUgU0xSVV9ICiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv YnVmLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdl L3NtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKIAorLyogUHNldWRvIGRhdGFi YXNlIElEIHVzZWQgZm9yIFNMUlUgZGF0YS4gKi8KKyNkZWZpbmUgU0xSVV9EQl9JRCA5CisK Ky8qIFBzZXVkbyByZWxhdGlvbiBJRHMgdXNlZCBieSBlYWNoIGNhY2hlLiAqLworI2RlZmlu ZSBTTFJVX0NMT0dfUkVMX0lEIDAKKyNkZWZpbmUgU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX1JF TF9JRCAxCisjZGVmaW5lIFNMUlVfTVVMVElYQUNUX01FTUJFUl9SRUxfSUQgMgorI2RlZmlu ZSBTTFJVX1NVQlRSQU5TX1JFTF9JRCAzCisjZGVmaW5lIFNMUlVfU0VSSUFMX1JFTF9JRCA0 CisjZGVmaW5lIFNMUlVfQ09NTUlUVFNfUkVMX0lEIDUKKyNkZWZpbmUgU0xSVV9OT1RJRllf UkVMX0lEIDYKKyNkZWZpbmUgU0xSVV9OVU1fUkVMUyA3CisKK3R5cGVkZWYgYm9vbCAoKlNs cnVQYWdlUHJlY2VkZXNGdW5jdGlvbikgKGludCwgaW50KTsKKworc3RhdGljIGlubGluZSBS ZWxGaWxlTG9jYXRvcgorU2xydVJlbEZpbGVMb2NhdG9yKFJlbEZpbGVOdW1iZXIgcmVsTnVt YmVyKQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0ge0RFRkFVTFRUQUJMRVNQQUNF X09JRCwgU0xSVV9EQl9JRCwgcmVsTnVtYmVyfTsKKwlyZXR1cm4gcmxvY2F0b3I7Cit9CisK IAogLyoKICAqIERlZmluZSBTTFJVIHNlZ21lbnQgc2l6ZS4gIEEgcGFnZSBpcyB0aGUgc2Ft ZSBCTENLU1ogYXMgaXMgdXNlZCBldmVyeXdoZXJlCkBAIC0zMywxNDIgKzU4LDU0IEBACiAg Ki8KICNkZWZpbmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVAkzMgogCi0vKgotICogUGFnZSBz dGF0dXMgY29kZXMuICBOb3RlIHRoYXQgdGhlc2UgZG8gbm90IGluY2x1ZGUgdGhlICJkaXJ0 eSIgYml0LgotICogcGFnZV9kaXJ0eSBjYW4gYmUgdHJ1ZSBvbmx5IGluIHRoZSBWQUxJRCBv ciBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZXM7Ci0gKiBpbiB0aGUgbGF0dGVyIGNhc2UgaXQg aW1wbGllcyB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuIHJlLWRpcnRpZWQgc2luY2UKLSAqIHRo ZSB3cml0ZSBzdGFydGVkLgotICovCi10eXBlZGVmIGVudW0KLXsKLQlTTFJVX1BBR0VfRU1Q VFksCQkJLyogYnVmZmVyIGlzIG5vdCBpbiB1c2UgKi8KLQlTTFJVX1BBR0VfUkVBRF9JTl9Q Uk9HUkVTUywgLyogcGFnZSBpcyBiZWluZyByZWFkIGluICovCi0JU0xSVV9QQUdFX1ZBTElE LAkJCS8qIHBhZ2UgaXMgdmFsaWQgYW5kIG5vdCBiZWluZyB3cml0dGVuICovCi0JU0xSVV9Q QUdFX1dSSVRFX0lOX1BST0dSRVNTIC8qIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiBvdXQgKi8K LX0gU2xydVBhZ2VTdGF0dXM7Ci0KLS8qCi0gKiBTaGFyZWQtbWVtb3J5IHN0YXRlCi0gKi8K LXR5cGVkZWYgc3RydWN0IFNscnVTaGFyZWREYXRhCi17Ci0JTFdMb2NrCSAgICpDb250cm9s TG9jazsKLQotCS8qIE51bWJlciBvZiBidWZmZXJzIG1hbmFnZWQgYnkgdGhpcyBTTFJVIHN0 cnVjdHVyZSAqLwotCWludAkJCW51bV9zbG90czsKLQotCS8qCi0JICogQXJyYXlzIGhvbGRp bmcgaW5mbyBmb3IgZWFjaCBidWZmZXIgc2xvdC4gIFBhZ2UgbnVtYmVyIGlzIHVuZGVmaW5l ZAotCSAqIHdoZW4gc3RhdHVzIGlzIEVNUFRZLCBhcyBpcyBwYWdlX2xydV9jb3VudC4KLQkg Ki8KLQljaGFyCSAgKipwYWdlX2J1ZmZlcjsKLQlTbHJ1UGFnZVN0YXR1cyAqcGFnZV9zdGF0 dXM7Ci0JYm9vbAkgICAqcGFnZV9kaXJ0eTsKLQlpbnQJCSAgICpwYWdlX251bWJlcjsKLQlp bnQJCSAgICpwYWdlX2xydV9jb3VudDsKLQlMV0xvY2tQYWRkZWQgKmJ1ZmZlcl9sb2NrczsK LQotCS8qCi0JICogT3B0aW9uYWwgYXJyYXkgb2YgV0FMIGZsdXNoIExTTnMgYXNzb2NpYXRl ZCB3aXRoIGVudHJpZXMgaW4gdGhlIFNMUlUKLQkgKiBwYWdlcy4gIElmIG5vdCB6ZXJvL05V TEwsIHdlIG11c3QgZmx1c2ggV0FMIGJlZm9yZSB3cml0aW5nIHBhZ2VzICh0cnVlCi0JICog Zm9yIHBnX3hhY3QsIGZhbHNlIGZvciBtdWx0aXhhY3QsIHBnX3N1YnRyYW5zLCBwZ19ub3Rp ZnkpLiAgZ3JvdXBfbHNuW10KLQkgKiBoYXMgbHNuX2dyb3Vwc19wZXJfcGFnZSBlbnRyaWVz IHBlciBidWZmZXIgc2xvdCwgZWFjaCBjb250YWluaW5nIHRoZQotCSAqIGhpZ2hlc3QgTFNO IGtub3duIGZvciBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgU0xSVSBlbnRyaWVzIG9uIHRoYXQg c2xvdCdzCi0JICogcGFnZS4KLQkgKi8KLQlYTG9nUmVjUHRyICpncm91cF9sc247Ci0JaW50 CQkJbHNuX2dyb3Vwc19wZXJfcGFnZTsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFdlIG1hcmsg YSBwYWdlICJtb3N0IHJlY2VudGx5IHVzZWQiIGJ5IHNldHRpbmcKLQkgKgkJcGFnZV9scnVf Y291bnRbc2xvdG5vXSA9ICsrY3VyX2xydV9jb3VudDsKLQkgKiBUaGUgb2xkZXN0IHBhZ2Ug aXMgdGhlcmVmb3JlIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCB2YWx1ZSBvZgotCSAqCQlj dXJfbHJ1X2NvdW50IC0gcGFnZV9scnVfY291bnRbc2xvdG5vXQotCSAqIFRoZSBjb3VudHMg d2lsbCBldmVudHVhbGx5IHdyYXAgYXJvdW5kLCBidXQgdGhpcyBjYWxjdWxhdGlvbiBzdGls bAotCSAqIHdvcmtzIGFzIGxvbmcgYXMgbm8gcGFnZSdzIGFnZSBleGNlZWRzIElOVF9NQVgg Y291bnRzLgotCSAqLS0tLS0tLS0tLQotCSAqLwotCWludAkJCWN1cl9scnVfY291bnQ7Ci0K LQkvKgotCSAqIGxhdGVzdF9wYWdlX251bWJlciBpcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhl IGN1cnJlbnQgZW5kIG9mIHRoZSBsb2c7Ci0JICogdGhpcyBpcyBub3QgY3JpdGljYWwgZGF0 YSwgc2luY2Ugd2UgdXNlIGl0IG9ubHkgdG8gYXZvaWQgc3dhcHBpbmcgb3V0Ci0JICogdGhl IGxhdGVzdCBwYWdlLgotCSAqLwotCWludAkJCWxhdGVzdF9wYWdlX251bWJlcjsKLQotCS8q IFNMUlUncyBpbmRleCBmb3Igc3RhdGlzdGljcyBwdXJwb3NlcyAobWlnaHQgbm90IGJlIHVu aXF1ZSkgKi8KLQlpbnQJCQlzbHJ1X3N0YXRzX2lkeDsKLX0gU2xydVNoYXJlZERhdGE7Ci0K LXR5cGVkZWYgU2xydVNoYXJlZERhdGEgKlNscnVTaGFyZWQ7Ci0KLS8qCi0gKiBTbHJ1Q3Rs RGF0YSBpcyBhbiB1bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2 ZSBpbmZvcm1hdGlvbgotICogaW4gc2hhcmVkIG1lbW9yeS4KLSAqLwotdHlwZWRlZiBzdHJ1 Y3QgU2xydUN0bERhdGEKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZDsKLQotCS8qCi0JICogV2hp Y2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhhbmRpbmcgc3luYyByZXF1 ZXN0cyBvdmVyIHRvCi0JICogdGhlIGNoZWNrcG9pbnRlci4gIFNZTkNfSEFORExFUl9OT05F IHRvIGRpc2FibGUgZnN5bmMgKGVnIHBnX25vdGlmeSkuCi0JICovCi0JU3luY1JlcXVlc3RI YW5kbGVyIHN5bmNfaGFuZGxlcjsKLQotCS8qCi0JICogRGVjaWRlIHdoZXRoZXIgYSBwYWdl IGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKLQkgKiBldmlj dGluZyBwYWdlcyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRyeSBv ZiB0aGUgZmlyc3QKLQkgKiBhcmd1bWVudCBpcyBvbGRlciB0aGFuIGV2ZXJ5IGVudHJ5IG9m IHRoZSBzZWNvbmQgYXJndW1lbnQuICBOb3RlIHRoYXQKLQkgKiAhUGFnZVByZWNlZGVzKGEs YikgJiYgIVBhZ2VQcmVjZWRlcyhiLGEpIG5lZWQgbm90IGltcGx5IGE9PWI7IGl0IGFsc28K LQkgKiBhcmlzZXMgd2hlbiBzb21lIGVudHJpZXMgYXJlIG9sZGVyIGFuZCBzb21lIGFyZSBu b3QuICBGb3IgU0xSVXMgdXNpbmcKLQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpLCB0aGlzIG11 c3QgdXNlIG1vZHVsYXIgYXJpdGhtZXRpYy4gIChGb3Igb3RoZXJzLAotCSAqIHRoZSBiZWhh dmlvciBvZiB0aGlzIGNhbGxiYWNrIGhhcyBubyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4p ICBVc2UKLQkgKiBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKCkgaW4gU0xSVXMgbWVldGlu ZyBpdHMgY3JpdGVyaWEuCi0JICovCi0JYm9vbAkJKCpQYWdlUHJlY2VkZXMpIChpbnQsIGlu dCk7Ci0KLQkvKgotCSAqIERpciBpcyBzZXQgZHVyaW5nIFNpbXBsZUxydUluaXQgYW5kIGRv ZXMgbm90IGNoYW5nZSB0aGVyZWFmdGVyLiBTaW5jZQotCSAqIGl0J3MgYWx3YXlzIHRoZSBz YW1lLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gc2hhcmVkIG1lbW9yeS4KLQkgKi8KLQlj aGFyCQlEaXJbNjRdOwotfSBTbHJ1Q3RsRGF0YTsKLQotdHlwZWRlZiBTbHJ1Q3RsRGF0YSAq U2xydUN0bDsKLQotCi1leHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90 cywgaW50IG5sc25zKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydUluaXQoU2xydUN0bCBjdGws IGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCQkJCSAgTFdM b2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJ CQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKTsKLWV4dGVybiBpbnQJU2lt cGxlTHJ1WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotZXh0ZXJuIGludAlT aW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9v aywKLQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgeGlkKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1 UmVhZFBhZ2VfUmVhZE9ubHkoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sCi0JCQkJCQkJCQkg ICBUcmFuc2FjdGlvbklkIHhpZCk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2Uo U2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVB bGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNs cnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRl c1VuaXRUZXN0cyhTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJ CQkJCQkJICBpbnQgcGVyX3BhZ2UpOwogI2Vsc2UKICNkZWZpbmUgU2xydVBhZ2VQcmVjZWRl c1VuaXRUZXN0cyhjdGwsIHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgotZXh0 ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGludCBjdXRvZmZQYWdl KTsKLWV4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3Rs IGN0bCwgaW50IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBTaW1wbGVMcnVUcnVuY2F0ZShPaWQg cmVsX2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJ CSAgaW50IGN1dG9mZlBhZ2UpOworZXh0ZXJuIGJvb2wgU2ltcGxlTHJ1RG9lc1BoeXNpY2Fs UGFnZUV4aXN0KE9pZCByZWxfaWQsIGludCBwYWdlbm8pOwogCi10eXBlZGVmIGJvb2wgKCpT bHJ1U2NhbkNhbGxiYWNrKSAoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2Vn cGFnZSwKK3R5cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2FsbGJhY2spIChPaWQgcmVsX2lkLAor CQkJCQkJCQkgIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJ CQkJCSAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgIHZvaWQgKmRh dGEpOwotZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVT Y2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgU2xydURl bGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubyk7Ci0KLWV4dGVybiBpbnQJU2xy dVN5bmNGaWxlVGFnKFNscnVDdGwgY3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpw YXRoKTsKK2V4dGVybiBib29sIFNscnVTY2FuRGlyZWN0b3J5KE9pZCByZWxfaWQsIFNscnVQ YWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJICBTbHJ1U2NhbkNh bGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIFNscnVEZWxldGVT ZWdtZW50KE9pZCByZWxfaWQsIGludCBzZWdubyk7CiAKIC8qIFNscnVTY2FuRGlyZWN0b3J5 IHB1YmxpYyBjYWxsYmFja3MgKi8KLWV4dGVybiBib29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQ cmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsCitleHRlcm4gYm9vbCBTbHJ1 U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoT2lkIHJlbF9pZCwKKwkJCQkJCQkJCQlTbHJ1UGFn ZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJCWNoYXIgKmZpbGVu YW1lLAogCQkJCQkJCQkJCWludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBib29s IFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBp bnQgc2VncGFnZSwKK2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoT2lkIHJl bF9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJ ICAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgICB2b2lkICpkYXRh KTsKIAorZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNMUlUodm9pZCk7CisKKy8qIEJ1ZmZlciBh Y2Nlc3MgKi8KK2V4dGVybiBCdWZmZXIgUmVhZFNscnVCdWZmZXIoT2lkIHJlbF9pZCwgaW50 IHBhZ2Vubyk7CitleHRlcm4gQnVmZmVyIFplcm9TbHJ1QnVmZmVyKE9pZCByZWxfaWQsIGlu dCBwYWdlbm8pOworCisvKiBJbnRlcmZhY2VzIHVzZSBieSBzdGF0cyB2aWV3ICovCitleHRl cm4gT2lkIFNscnVSZWxJZEJ5TmFtZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjb25z dCBjaGFyICpTbHJ1TmFtZShPaWQgcmVsX2lkKTsKKworLyogU3luYyBjYWxsYmFjayAqLwor ZXh0ZXJuIGludAlzbHJ1c3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAq cGF0aCk7CisKKy8qIFNNR1IgY2FsbGJhY2tzICovCitleHRlcm4gdm9pZCBzbHJ1b3BlbihT TWdyUmVsYXRpb24gcmVsbik7CitleHRlcm4gdm9pZCBzbHJ1Y2xvc2UoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBzbHJ1cmVhZChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkgQmxvY2tOdW1iZXIg YmxvY2tudW0sIGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gdm9pZCBzbHJ1d3JpdGUoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJICBCbG9ja051bWJlciBi bG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7CitleHRlcm4gdm9pZCBz bHJ1d3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJ CQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKTsKKwog I2VuZGlmCQkJCQkJCS8qIFNMUlVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3N1YnRyYW5zLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaAppbmRleCBm OTRlMTE2NjQwYi4uNDY4NWEwNWJjOTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9zdWJ0cmFucy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCkBAIC0x OCwxMSArMTgsOCBAQCBleHRlcm4gdm9pZCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlv bklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQg U3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQp OwogCi1leHRlcm4gU2l6ZSBTVUJUUkFOU1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lk IFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwU1VCVFJB TlModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBv bGRlc3RBY3RpdmVYSUQpOwotZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQp OwogZXh0ZXJuIHZvaWQgRXh0ZW5kU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0 KTsKIGV4dGVybiB2b2lkIFRydW5jYXRlU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RY YWN0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVk ZS9wZ3N0YXQuaAppbmRleCBhYzI4ZjgxM2I0ZS4uYmI3MDk5ZmM4MDkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC02 OTEsNSArNjkxLDQgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFNlc3Npb25FbmRUeXBlIHBnU3Rh dFNlc3Npb25FbmRDYXVzZTsKIC8qIHVwZGF0ZWQgZGlyZWN0bHkgYnkgYmFja2VuZHMgYW5k IGJhY2tncm91bmQgcHJvY2Vzc2VzICovCiBleHRlcm4gUEdETExJTVBPUlQgUGdTdGF0X1dh bFN0YXRzIFBlbmRpbmdXYWxTdGF0czsKIAotCiAjZW5kaWYJCQkJCQkJLyogUEdTVEFUX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggNjllNDU5MDBiYWUu LmYwNzE1MzkyODFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRl cm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApAQCAt MjMwLDYgKzIzMCwxMSBAQCB0eXBlZGVmIHVuaW9uIEJ1ZmZlckRlc2NQYWRkZWQKICNkZWZp bmUgQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJkZXNjKSBcCiAJKChMV0xvY2sq KSAoJihiZGVzYyktPmNvbnRlbnRfbG9jaykpCiAKKyNkZWZpbmUgQnVmZmVyR2V0RXh0ZXJu YWxMU04oYnVmSGRyKSBcCisJQnVmZmVyRXh0ZXJuYWxMU05zWyhidWZIZHIpLT5idWZfaWRd CisjZGVmaW5lIEJ1ZmZlclNldEV4dGVybmFsTFNOKGJ1ZkhkciwgbHNuKSBcCisJQnVmZmVy RXh0ZXJuYWxMU05zWyhidWZIZHIpLT5idWZfaWRdID0gKGxzbikKKwogZXh0ZXJuIFBHRExM SU1QT1JUIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJy YXk7CiAKIC8qCkBAIC0yNzYsNiArMjgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV3JpdGViYWNr Q29udGV4dAogCiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4gUEdETExJTVBPUlQgQnVm ZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CitleHRlcm4gUEdETExJTVBPUlQg WExvZ1JlY1B0ciAqQnVmZmVyRXh0ZXJuYWxMU05zOwogZXh0ZXJuIFBHRExMSU1QT1JUIFdy aXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRleHQ7CiAKIC8qIGluIGxvY2Fs YnVmLmMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IGJmOGNjZTdjY2Y2Li5iN2M3YTFl YWU5ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xMTYsMTIgKzExNiwyMSBAQCBleHRl cm4gQnVmZmVyIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsCiAJCQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a051bSwKIAkJCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwKIAkJCQkJCQkJCQlib29sIHBlcm1hbmVudCk7CitleHRlcm4gQnVm ZmVyIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLAorCQkJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVy IGJsb2NrTnVtLAorCQkJCQkJCQkJCQkgICBSZWFkQnVmZmVyTW9kZSBtb2RlLCBib29sICpo aXQpOwogZXh0ZXJuIHZvaWQgUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVy biB2b2lkIFVubG9ja1JlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9p ZCBNYXJrQnVmZmVyRGlydHkoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBJbmNyQnVm ZmVyUmVmQ291bnQoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gQnVmZmVyIFJlbGVhc2VBbmRS ZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkg ICBCbG9ja051bWJlciBibG9ja051bSk7CitleHRlcm4gdm9pZCBEaXNjYXJkQnVmZmVyKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJCQkJICBGb3JrTnVtYmVyIGZvcmtOdW0sCisJ CQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKK2V4dGVybiBib29sIEJ1ZmZlclByb2Jl KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLAor CQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwogCiBleHRlcm4gdm9pZCBJbml0QnVmZmVy UG9vbCh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRCdWZmZXJQb29sQWNjZXNzKHZvaWQpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2suaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbHdsb2NrLmgKaW5kZXggZTAzZDMxN2VlYWMuLmQ3MWJmNThkZTIyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9jay5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbHdsb2NrLmgKQEAgLTE2NiwxNCArMTY2LDcgQEAgZXh0ZXJuIHZvaWQgTFdM b2NrSW5pdGlhbGl6ZShMV0xvY2sgKmxvY2ssIGludCB0cmFuY2hlX2lkKTsKICAqLwogdHlw ZWRlZiBlbnVtIEJ1aWx0aW5UcmFuY2hlSWRzCiB7Ci0JTFdUUkFOQ0hFX1hBQ1RfQlVGRkVS ID0gTlVNX0lORElWSURVQUxfTFdMT0NLUywKLQlMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVS LAotCUxXVFJBTkNIRV9TVUJUUkFOU19CVUZGRVIsCi0JTFdUUkFOQ0hFX01VTFRJWEFDVE9G RlNFVF9CVUZGRVIsCi0JTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCi0JTFdU UkFOQ0hFX05PVElGWV9CVUZGRVIsCi0JTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIsCi0JTFdU UkFOQ0hFX1dBTF9JTlNFUlQsCisJTFdUUkFOQ0hFX1dBTF9JTlNFUlQgPSBOVU1fSU5ESVZJ RFVBTF9MV0xPQ0tTLAogCUxXVFJBTkNIRV9CVUZGRVJfQ09OVEVOVCwKIAlMV1RSQU5DSEVf UkVQTElDQVRJT05fT1JJR0lOX1NUQVRFLAogCUxXVFJBTkNIRV9SRVBMSUNBVElPTl9TTE9U X0lPLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRleCBhMDc3MTUzNTZiYS4uNzM5OGMwZDJjOWYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2Uvc21nci5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJsaWIvaWxp c3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9m ZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKIAogLyoKQEAgLTY4 LDYgKzY5LDEzIEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEKIAlpbnQJCQlt ZF9udW1fb3Blbl9zZWdzW01BWF9GT1JLTlVNICsgMV07CiAJc3RydWN0IF9NZGZkVmVjICpt ZF9zZWdfZmRzW01BWF9GT1JLTlVNICsgMV07CiAKKwkvKgorCSAqIGZvciBzbHJ1LmM7IHdl J2xsIGp1c3QgY2FjaGUgb25lIEZpbGUgZm9yIG5vdy4KKwkgKiBYWFggVW5pb25pemUgd2l0 aCBtZCBzdHVmZiBzb21laG93IHNvIHdlIGRvbid0IHdhc3RlIHNwYWNlCisJICovCisJaW50 CQkJc2xydV9maWxlX3NlZ21lbnQ7CisJRmlsZQkJc2xydV9maWxlOworCiAJLyogaWYgdW5v d25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2YgYWxsIHVub3duZWQgU01nclJlbGF0aW9ucyAq LwogCWRsaXN0X25vZGUJbm9kZTsKIH0gU01nclJlbGF0aW9uRGF0YTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3luYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zeW5j LmgKaW5kZXggMDQ5YWY4NzhkZWMuLjQ1Nzc4YjE4NWJjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3N5bmMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N5bmMuaApA QCAtMzUsMTEgKzM1LDcgQEAgdHlwZWRlZiBlbnVtIFN5bmNSZXF1ZXN0VHlwZQogdHlwZWRl ZiBlbnVtIFN5bmNSZXF1ZXN0SGFuZGxlcgogewogCVNZTkNfSEFORExFUl9NRCA9IDAsCi0J U1lOQ19IQU5ETEVSX0NMT0csCi0JU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKLQlTWU5DX0hB TkRMRVJfTVVMVElYQUNUX09GRlNFVCwKLQlTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJF UiwKLQlTWU5DX0hBTkRMRVJfTk9ORQorCVNZTkNfSEFORExFUl9TTFJVCiB9IFN5bmNSZXF1 ZXN0SGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3Rh dF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmgKaW5k ZXggOTMwM2QwNTQyN2YuLmVlYzE1MGFmNzNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRf aW50ZXJuYWwuaApAQCAtMTQsNiArMTQsNyBAQAogI2RlZmluZSBQR1NUQVRfSU5URVJOQUxf SAogCiAKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNo Zm4uaCIKICNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0Lmgi CkBAIC0yNjAsMjggKzI2MSw2IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9LaW5kSW5mbwog fSBQZ1N0YXRfS2luZEluZm87CiAKIAotLyoKLSAqIExpc3Qgb2YgU0xSVSBuYW1lcyB0aGF0 IHdlIGtlZXAgc3RhdHMgZm9yLiAgVGhlcmUgaXMgbm8gY2VudHJhbCByZWdpc3RyeSBvZgot ICogU0xSVXMsIHNvIHdlIHVzZSB0aGlzIGZpeGVkIGxpc3QgaW5zdGVhZC4gIFRoZSAib3Ro ZXIiIGVudHJ5IGlzIHVzZWQgZm9yCi0gKiBhbGwgU0xSVXMgd2l0aG91dCBhbiBleHBsaWNp dCBlbnRyeSAoZS5nLiBTTFJVcyBpbiBleHRlbnNpb25zKS4KLSAqCi0gKiBUaGlzIGlzIG9u bHkgZGVmaW5lZCBoZXJlIHNvIHRoYXQgU0xSVV9OVU1fRUxFTUVOVFMgaXMga25vd24gZm9y IGxhdGVyIHR5cGUKLSAqIGRlZmluaXRpb25zLgotICovCi1zdGF0aWMgY29uc3QgY2hhciAq Y29uc3Qgc2xydV9uYW1lc1tdID0gewotCSJDb21taXRUcyIsCi0JIk11bHRpWGFjdE1lbWJl ciIsCi0JIk11bHRpWGFjdE9mZnNldCIsCi0JIk5vdGlmeSIsCi0JIlNlcmlhbCIsCi0JIlN1 YnRyYW5zIiwKLQkiWGFjdCIsCi0JIm90aGVyIgkJCQkJCS8qIGhhcyB0byBiZSBsYXN0ICov Ci19OwotCi0jZGVmaW5lIFNMUlVfTlVNX0VMRU1FTlRTCWxlbmd0aG9mKHNscnVfbmFtZXMp Ci0KLQogLyogLS0tLS0tLS0tLQogICogVHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBkaWZm ZXJlbnQga2luZHMgb2YgZml4ZWQtYW1vdW50IHN0YXRzLgogICoKQEAgLTMzMyw3ICszMTIs NyBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRTaGFyZWRfU0xSVQogewogCS8qIGxvY2sgcHJv dGVjdHMgLT5zdGF0cyAqLwogCUxXTG9jawkJbG9jazsKLQlQZ1N0YXRfU0xSVVN0YXRzIHN0 YXRzW1NMUlVfTlVNX0VMRU1FTlRTXTsKKwlQZ1N0YXRfU0xSVVN0YXRzIHN0YXRzW1NMUlVf TlVNX1JFTFNdOwogfSBQZ1N0YXRTaGFyZWRfU0xSVTsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdT dGF0U2hhcmVkX1dhbApAQCAtNDQyLDcgKzQyMSw3IEBAIHR5cGVkZWYgc3RydWN0IFBnU3Rh dF9TbmFwc2hvdAogCiAJUGdTdGF0X0NoZWNrcG9pbnRlclN0YXRzIGNoZWNrcG9pbnRlcjsK IAotCVBnU3RhdF9TTFJVU3RhdHMgc2xydVtTTFJVX05VTV9FTEVNRU5UU107CisJUGdTdGF0 X1NMUlVTdGF0cyBzbHJ1W1NMUlVfTlVNX1JFTFNdOwogCiAJUGdTdGF0X1dhbFN0YXRzIHdh bDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IGMzYWRlMDExMjA2Li42MGMyMjFh NTcyOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtMjAzLDcgKzIwMyw3IEBAIHR5 cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfUkVQTElDQVRJT05fU0xPVF9SRVNUT1JFX1NZTkMs CiAJV0FJVF9FVkVOVF9SRVBMSUNBVElPTl9TTE9UX1NZTkMsCiAJV0FJVF9FVkVOVF9SRVBM SUNBVElPTl9TTE9UX1dSSVRFLAotCVdBSVRfRVZFTlRfU0xSVV9GTFVTSF9TWU5DLAorCVdB SVRfRVZFTlRfU0xSVV9GTFVTSCwKIAlXQUlUX0VWRU5UX1NMUlVfUkVBRCwKIAlXQUlUX0VW RU5UX1NMUlVfU1lOQywKIAlXQUlUX0VWRU5UX1NMUlVfV1JJVEUsCi0tIAoyLjMwLjIKCg== --------------S0XqJq8mk738jfTu0g3cRp6Z--