From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Murphy Subject: [PATCH] (final rfc revision) input: xpad.c - Xbox 360 wireless support and sysfs interface Date: Tue, 24 Feb 2009 23:46:01 -0500 Message-ID: <5aa163d00902242046h76c92411u1c4f999958c96de6@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6464ef2a4f6690463b6e9c6 Return-path: Received: from el-out-1112.google.com ([209.85.162.181]:47231 "EHLO el-out-1112.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755556AbZBYEqF (ORCPT ); Tue, 24 Feb 2009 23:46:05 -0500 Sender: linux-input-owner@vger.kernel.org List-Id: linux-input@vger.kernel.org To: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, linux-usb@vger.kernel.org Cc: Greg KH , Oliver Neukum , Frederic Weisbecker --0016e6464ef2a4f6690463b6e9c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Greetings, Attached is what I hope to be the final RFC version of the Xbox driver patch. I have made the following changes: 1. Removed check for CONFIG_SYSFS (rely on dummy implementations of the sysfs subsystem whenever sysfs is not enabled). Thanks Frederic Weisbecker. 2. Fixed backwards ordering of sscanf return check. Thanks Frederic Weisbecker and Greg K-H. 3. Checked code and made style adjustments to pass automated checks in scripts/checkpatch.pl. There is one reported error in the xpad.h file, as the following multi-line preprocessor macros cannot be wrapped in a do-while loop (lines 279-288): #define XPAD_XBOX360_VENDOR_PROTOCOL(vend,pr) \ .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \ USB_DEVICE_ID_MATCH_INT_INFO, \ .idVendor = (vend), \ .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \ .bInterfaceSubClass = 93, \ .bInterfaceProtocol = (pr) #define XPAD_XBOX360_VENDOR(vend) \ { XPAD_XBOX360_VENDOR_PROTOCOL(vend, 1) }, \ { XPAD_XBOX360_VENDOR_PROTOCOL(vend, 129) } I have managed to remove all other errors and warnings, but I'm not sure all the changes actually enhance code readability. 4. The current full version of the source for the header and C file, as well as a userspace support file to prevent X11 picking the game pad up as a pointer input, are available at: http://cirg.cs.clemson.edu/~mamurph/pub/xpad/ I was _NOT_ able to test the driver with any wired Xbox or Xbox 360 input devices. It turns out that the devices we thought were wired (Xbox 360 wireless controller connected via a cable) actually communicate with the receiver wirelessly, and the USB cable merely provides power. Thus, I would appreciate it if anyone with wired hardware is able to test this driver and report any bugs. Assuming there are no more substantive changes, I plan to sign off on the "final" version of this revision sometime over the weekend. Prior to this final version, I will make the following "minor" changes: 1. Change default modes on read-write sysfs attributes from 0666 to 0644. Userspace can handle assigning appropriate permissions while operational. The modes are 0666 for now to permit easier testing. 2. Document the sysfs interface in Documentation/ABI/testing/game_device-sysfs-interface (perhaps this needs a better name?) 3. Update Documentation/input/xpad.txt Thanks, Mike -- Mike Murphy Ph.D. Candidate and NSF Graduate Research Fellow Clemson University School of Computing 120 McAdams Hall Clemson, SC 29634-0974 USA Tel: +1 864.656.2838 Fax: +1 864.656.0145 http://cirg.cs.clemson.edu/~mamurph --0016e6464ef2a4f6690463b6e9c6 Content-Type: text/x-patch; charset=US-ASCII; name="xpad-20080224.patch" Content-Disposition: attachment; filename="xpad-20080224.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frli4d4h0 ZGlmZiAtdU5yIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCi0tLSBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95 c3RpY2sveHBhZC5jCTIwMDktMDItMTQgMjI6Mzk6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBuZXdk cnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMJMjAwOS0wMi0yMyAyMzowMDo1OC4wMDAw MDAwMDAgLTA1MDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogWC1Cb3ggZ2FtZXBhZCBkcml2ZXIK KyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBw b3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMjMgRmVicnVhcnkgMjAwOQorICoJCQlNaWtlIE11 cnBoeSA8bWFtdXJwaEBjcy5jbGVtc29uLmVkdT4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIg TWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5kZT4KICAqICAgICAgICAgICAgICAg MjAwNCBPbGl2ZXIgU2Nod2FydHogPE9saXZlci5TY2h3YXJ0ekBnbXguZGU+LApAQCAtOSw2ICsx Miw4IEBACiAgKiAgICAgICAgICAgICAgIDIwMDUgRG9taW5pYyBDZXJxdWV0dGkgPGJpbmFyeTEy MzBAeWFob28uY29tPgogICogICAgICAgICAgICAgICAyMDA2IEFkYW0gQnVjaGJpbmRlciA8YWRh bS5idWNoYmluZGVyQGdtYWlsLmNvbT4KICAqICAgICAgICAgICAgICAgMjAwNyBKYW4gS3JhdG9j aHZpbCA8aG9uemFAamlrb3MuY3o+CisgKiAgICAgICAgICAgICAgIDIwMDkgQ2xlbXNvbiBVbml2 ZXJzaXR5CisgKgkJICAgICAgKGNvbnRhY3Q6IE1pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNsZW1z b24uZWR1PikKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjQsMjI0ICsyOSwzMTMgQEAKICAq IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKKyAqIFBsZWFzZSBzZWUgeGJveC5oIGZvciB0aGUg Q2hhbmdlTG9nLgorICovCisKKworCisjaW5jbHVkZSAieHBhZC5oIgorCisKKy8qIFRoZSBkZWFk IHpvbmUgYW5kIHN0aWNrIGxpbWl0IGJvdGggYWZmZWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgY29y cmVzcG9uZGluZworICogYW5hbG9nIHN0aWNrLCBzaW5jZSB0aGUgb3V0cHV0IHZhbHVlcyByZXBv cnRlZCBmb3IgdGhlIHN0aWNrIGlucHV0cyB3aWxsCisgKiBiZSBzY2FsZWQgb250byBbMCwzMjc2 N10uIEl0IGlzIHRodXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWFkIHpvbmUKKyAq IGlzIG5ldmVyIGxhcmdlciB0aGFuIHRoZSBzdGljayBsaW1pdC4gSW4gZmFjdCwgYSBtaW5pbWFs IGFtb3VudCBvZiBzdGljaworICogdHJhdmVsIHNwYWNlICgxMDI0KSBpcyBtYWludGFpbmVkIGJl dHdlZW4gdGhlIHR3byB2YWx1ZXMuIEluIHByYWN0aWNlLAorICogaG93ZXZlciwgdGhlIHN0aWNr IGxpbWl0IHNob3VsZCBhbHdheXMgYmUgbXVjaCBncmVhdGVyIHRoYW4gdGhlIGRlYWQgem9uZS4K KyAqLworCitzdGF0aWMgdm9pZCBzZXRfZGVhZF96b25lKHVuc2lnbmVkIGludCBuZXdfc2l6ZSwg dW5zaWduZWQgaW50ICpkeiwKKwkJdW5zaWduZWQgaW50IHN0aWNrX2xpbWl0KQoreworCWlmICgo bmV3X3NpemUgKyAxMDI0KSA+PSBzdGlja19saW1pdCkKKwkJbmV3X3NpemUgPSAoc3RpY2tfbGlt aXQgPiAxMDI0KSA/IHN0aWNrX2xpbWl0IC0gMTAyNCA6IDA7CisJKmR6ID0gbmV3X3NpemU7Cit9 CisKK3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVu c2lnbmVkIGludCAqc2wsCisJCXVuc2lnbmVkIGludCBkZWFkX3pvbmUpCit7CisJaWYgKG5ld19z aXplIDwgKGRlYWRfem9uZSArIDEwMjQpKQorCQluZXdfc2l6ZSA9IGRlYWRfem9uZSArIDEwMjQ7 CisJaWYgKG5ld19zaXplID4gMzI3NjcpCisJCW5ld19zaXplID0gMzI3Njc7CisJKnNsID0gbmV3 X3NpemU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU3lzRnMgaW50ZXJm YWNlIGZ1bmN0aW9ucwogICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgotICogIC0gaW5m b3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5q YS5odG1sCi0gKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIvam95c3RpY2sv aWZvcmNlLmMKLSAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNiL3VzYi1za2Vs ZXRvbi5jCi0gKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3LmZyZWU2MC5vcmcv d2lraS9HYW1lcGFkCi0gKgotICogVGhhbmtzIHRvOgotICogIC0gSVRPIFRha2F5dWtpIGZvciBw cm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNpdGUKLSAqICAt IFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KLSAq ICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKLSAqICAtIFhCT1gg TGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCi0gKgotICogVE9ETzoKLSAqICAtIGZpbmUg dHVuZSBheGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKLSAqICAtIGZpeCAiYW5hbG9nIiBi dXR0b25zIChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKLSAqICAtIGdldCBydW1ibGUgd29ya2lu ZwotICogIC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCi0gKgotICogSGlzdG9y eToKLSAqCi0gKiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBqdXN0IHNhaWQg IlhCT1ggSElEIGNvbnRyb2xsZXIiCi0gKgotICogMjAwMi0wNy0wMiAtIDAuMC4yIDogYmFzaWMg d29ya2luZyB2ZXJzaW9uCi0gKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAgYnV0dG9ucyB3 b3JrIChnZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQotICogIC0gdGhlIGJsYWNrIGJ1dHRvbiBkb2Vz IG5vdCB3b3JrCi0gKgotICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3b3JrIGJ5IFZvanRlY2gg UGF2bGlrCi0gKiAgLSBpbmRlbnRhdGlvbiBmaXhlcwotICogIC0gdXNiICsgaW5wdXQgaW5pdCBz ZXF1ZW5jZSBmaXhlcwotICoKLSAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9yIGNoYW5nZXMs IG1lcmdlIHdpdGggVm9qdGVjaCdzIHYwLjAuMwotICogIC0gdmVyaWZpZWQgdGhlIGxhY2sgb2Yg SElEIGFuZCByZXBvcnQgZGVzY3JpcHRvcnMKLSAqICAtIHZlcmlmaWVkIHRoYXQgQUxMIGJ1dHRv bnMgV09SSwotICogIC0gZml4ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCi0gKgotICogMjAwMi0w Ny0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwotICoKLSAqIDIwMDQtMTAt MDIgLSAwLjAuNiA6IEREUiBwYWQgc3VwcG9ydAotICogIC0gYm9ycm93ZWQgZnJvbSB0aGUgWEJP WCBsaW51eCBrZXJuZWwKLSAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2VkIGRhbmNlIHBh ZHMgYXJlIHByZXNlbnQKLSAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQgdG8gYnV0dG9u cywgbm90IGF4ZXMKLSAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2RwYWRfdG9fYnV0 dG9ucycgdG8gZm9yY2UKLSAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9ucyBpZiB5b3Vy IHBhZCBpcyBub3QgZGV0ZWN0ZWQKLSAqCi0gKiBMYXRlciBjaGFuZ2VzIGNhbiBiZSB0cmFja2Vk IGluIFNDTS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0 Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1j aGVtbml0ei5kZT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJpdmVyIgotCi0j ZGVmaW5lIFhQQURfUEtUX0xFTiAzMgotCi0vKiB4Ym94IGQtcGFkcyBzaG91bGQgbWFwIHRvIGJ1 dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcwotICAgYnV0IHdlIG1hcCB0aGVtIHRv IGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8KLSNkZWZpbmUgTUFQX0RQ QURfVE9fQlVUVE9OUyAgICAwCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0FYRVMgICAgICAgMQotI2Rl ZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKLQotI2RlZmluZSBYVFlQRV9YQk9YICAgICAg ICAwCi0jZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKLSNkZWZpbmUgWFRZUEVfWEJPWDM2MFcg ICAgMgotI2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCi0KLXN0YXRpYyBpbnQgZHBhZF90b19i dXR0b25zOwotbW9kdWxlX3BhcmFtKGRwYWRfdG9fYnV0dG9ucywgYm9vbCwgU19JUlVHTyk7Ci1N T0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9ucywgIk1hcCBELVBBRCB0byBidXR0b25zIHJh dGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IHhwYWRfZGV2aWNlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljaGFyICpu YW1lOwotCXU4IGRwYWRfbWFwcGluZzsKLQl1OCB4dHlwZTsKLX0geHBhZF9kZXZpY2VbXSA9IHsK LQl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMpIiwgTUFQX0RQ QURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODksICJNaWNyb3NvZnQg WC1Cb3ggcGFkIHYyIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWljcm9zb2Z0IFhib3gg Q29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVl LCAweDA3MTksICJYYm94IDM2MCBXaXJlbGVzcyBSZWNlaXZlciIsIE1BUF9EUEFEX1RPX0JVVFRP TlMsIFhUWVBFX1hCT1gzNjBXIH0sCi0JeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFuZSBYYm94 IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ0 ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19B WEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3Ry ZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAw eDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ2ZCwgMHhjYTg4LCAiTG9naXRlY2gg Q29tcGFjdCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJP WCB9LAotCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVk KSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwgMHgxMDdhLCAi SW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENhdHogQ29udHJv bCBQYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUy MiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0J eyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENhdHogTWljcm9D T04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDU0MCwg Ik1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwNzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBN QVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDcxNiwgIk1hZCBD YXR6IFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9Y Qk9YMzYwIH0sCi0JeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1B UF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODAyLCAiWmVy b3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwYzEyLCAweDg4MGEsICJQZWxpY2FuIEVjbGlwc2UgUEwtMjAyMyIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3BsdXMgWGJveCBD b250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwYzEyLCAw eDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUqIiwgTUFQX0RQQURfVE9fQVhF UywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTRjLCAweDEwOTcsICJSYWRpY2EgR2FtZXN0ZXIgQ29u dHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU0YywgMHgy MzkwLCAiUmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBY VFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmlyZCB3aXJlbGVz cyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZm LCAweDAwMDUsICJFY2xpcHNlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2ZiwgMHgwMDA2 LCAiUGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwZThmLCAweDAyMDEsICJTbWFydEpveSBGcmFn IFhwYWQvUFMyIGFkYXB0b3IiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVuIFhCTWluaVBh ZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxMDJj LCAweGZmMGMsICJKb3l0ZWNoIFdpcmVsZXNzIEFkdmFuY2VkIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRh bmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxNDMwLCAw eDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFk IChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwK LQl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9U T19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFk ZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAw eDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5LTk9XTiwgWFRZ UEVfVU5LTk9XTiB9Ci19OwotCi0vKiBidXR0b25zIHNoYXJlZCB3aXRoIHhib3ggYW5kIHhib3gz NjAgKi8KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9jb21tb25fYnRuW10gPSB7Ci0J QlROX0EsIEJUTl9CLCBCVE5fWCwgQlROX1ksCQkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwotCUJU Tl9TVEFSVCwgQlROX0JBQ0ssIEJUTl9USFVNQkwsIEJUTl9USFVNQlIsCS8qIHN0YXJ0L2JhY2sv c3RpY2tzICovCi0JLTEJCQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb3Jp Z2luYWwgeGJveCBjb250cm9sbGVycyBvbmx5ICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0 IHhwYWRfYnRuW10gPSB7Ci0JQlROX0MsIEJUTl9aLAkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwot CS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLS8qIG9ubHkgdXNlZCBpZiBNQVBf RFBBRF9UT19CVVRUT05TICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYnRuX3Bh ZFtdID0gewotCUJUTl9MRUZULCBCVE5fUklHSFQsCQkvKiBkLXBhZCBsZWZ0LCByaWdodCAqLwot CUJUTl8wLCBCVE5fMSwJCQkvKiBkLXBhZCB1cCwgZG93biAoWFhYIG5hbWVzPz8pICovCi0JLTEJ CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hv cnQgeHBhZDM2MF9idG5bXSA9IHsgIC8qIGJ1dHRvbnMgZm9yIHgzNjAgY29udHJvbGxlciAqLwot CUJUTl9UTCwgQlROX1RSLAkJLyogQnV0dG9uIExCL1JCICovCi0JQlROX01PREUsCQkvKiBUaGUg YmlnIFggYnV0dG9uICovCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBh ZF9hYnNbXSA9IHsKLQlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCi0JQUJTX1JYLCBB QlNfUlksCQkvKiByaWdodCBzdGljayAqLwotCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBs ZWZ0L3JpZ2h0ICovCi0JLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb25s eSB1c2VkIGlmIE1BUF9EUEFEX1RPX0FYRVMgKi8KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQg eHBhZF9hYnNfcGFkW10gPSB7Ci0JQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGQtcGFkIGF4ZXMg Ki8KLQktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0vKiBYYm94IDM2MCBoYXMg YSB2ZW5kb3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkK LSAqIFVTQl9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Ig c3Vic3lzdGVtKSwgc28gd2UKLSAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdp cmVkIFhib3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLAotICogd2lyZWxlc3MgY29udHJv bGxlcnMgaGF2ZSBwcm90b2NvbCAxMjkuICovCi0jZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1Jf UFJPVE9DT0wodmVuZCxwcikgXAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hf VkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywgXAotCS5pZFZlbmRvciA9ICh2 ZW5kKSwgXAotCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsIFwKLQku YkludGVyZmFjZVN1YkNsYXNzID0gOTMsIFwKLQkuYkludGVyZmFjZVByb3RvY29sID0gKHByKQot I2RlZmluZSBYUEFEX1hCT1gzNjBfVkVORE9SKHZlbmQpIFwKLQl7IFhQQURfWEJPWDM2MF9WRU5E T1JfUFJPVE9DT0wodmVuZCwxKSB9LCBcCi0JeyBYUEFEX1hCT1gzNjBfVkVORE9SX1BST1RPQ09M KHZlbmQsMTI5KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB4cGFkX3RhYmxlIFtd ID0gewotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKCdYJywgJ0InLCAwKSB9LAkvKiBYLUJveCBVU0It SUYgbm90IGFwcHJvdmVkIGNsYXNzICovCi0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA0NWUpLAkJ LyogTWljcm9zb2Z0IFgtQm94IDM2MCBjb250cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5E T1IoMHgwNDZkKSwJCS8qIExvZ2l0ZWNoIFgtQm94IDM2MCBzdHlsZSBjb250cm9sbGVycyAqLwot CVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJCS8qIE1hZCBDYXR6IFgtQm94IDM2MCBjb250 cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwZTZmKSwJCS8qIDB4MGU2ZiBYLUJv eCAzNjAgY29udHJvbGxlcnMgKi8KLQlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQzMCksCQkvKiBS ZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCi0JeyB9Ci19OwotCi1NT0RVTEVfREVW SUNFX1RBQkxFICh1c2IsIHhwYWRfdGFibGUpOwotCi1zdHJ1Y3QgdXNiX3hwYWQgewotCXN0cnVj dCBpbnB1dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3Qg dXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwotCi0JaW50IHBhZF9wcmVzZW50Owot Ci0Jc3RydWN0IHVyYiAqaXJxX2luOwkJLyogdXJiIGZvciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICov Ci0JdW5zaWduZWQgY2hhciAqaWRhdGE7CQkvKiBpbnB1dCBkYXRhICovCi0JZG1hX2FkZHJfdCBp ZGF0YV9kbWE7CisgKiBXZSB1c2UgY29tbW9uIGZ1bmN0aW9ucywgd2hlcmUgcG9zc2libGUsIHRv IGltcGxlbWVudCB0aGUgc2hvdy9zdG9yZQorICogcm91dGluZXMuIFRoaXMgZGVzaWduIHNhdmVz IG9uIGNvZGUgYW5kIHJlZHVjZXMgdGhlIGJ1cmRlbiBvZiBhZGRpbmcgdG8gb3IKKyAqIGNoYW5n aW5nIHRoZSBpbnRlcmZhY2UuCisgKi8KIAotCXN0cnVjdCB1cmIgKmJ1bGtfb3V0OwotCXVuc2ln bmVkIGNoYXIgKmJkYXRhOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikg fHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQotCXN0cnVjdCB1cmIgKmlycV9v dXQ7CQkvKiB1cmIgZm9yIGludGVycnVwdCBvdXQgcmVwb3J0ICovCi0JdW5zaWduZWQgY2hhciAq b2RhdGE7CQkvKiBvdXRwdXQgZGF0YSAqLwotCWRtYV9hZGRyX3Qgb2RhdGFfZG1hOwotCXN0cnVj dCBtdXRleCBvZGF0YV9tdXRleDsKLSNlbmRpZgorc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3Vp bnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJ Y2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRvX3hwYWQoZGV2KTsKKwl1 bnNpZ25lZCBpbnQgdmFsdWU7CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xlZnRfZGVhZF96b25l KQorCQl2YWx1ZSA9IHhwYWQtPmxlZnRfZGVhZF96b25lOworCWVsc2UgaWYgKGF0dHIgPT0gJmRl dl9hdHRyX3JpZ2h0X2RlYWRfem9uZSkKKwkJdmFsdWUgPSB4cGFkLT5yaWdodF9kZWFkX3pvbmU7 CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbGVmdF9zdGlja19saW1pdCkKKwkJdmFsdWUg PSB4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3Jp Z2h0X3N0aWNrX2xpbWl0KQorCQl2YWx1ZSA9IHhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0OworCWVs c2UKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVc biIsIHZhbHVlKTsKK30KIAotI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUykK LQlzdHJ1Y3QgeHBhZF9sZWQgKmxlZDsKLSNlbmRpZgogCi0JY2hhciBwaHlzWzY0XTsJCQkvKiBw aHlzaWNhbCBkZXZpY2UgcGF0aCAqLworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV91aW50KHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRv X3hwYWQoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAi JXUiLCAmbmV3X3ZhbHVlKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChhdHRyID09ICZk ZXZfYXR0cl9sZWZ0X2RlYWRfem9uZSkKKwkJc2V0X2RlYWRfem9uZShuZXdfdmFsdWUsICZ4cGFk LT5sZWZ0X2RlYWRfem9uZSwKKwkJCQl4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlm IChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9kZWFkX3pvbmUpCisJCXNldF9kZWFkX3pvbmUobmV3 X3ZhbHVlLCAmeHBhZC0+cmlnaHRfZGVhZF96b25lLAorCQkJCXhwYWQtPnJpZ2h0X3N0aWNrX2xp bWl0KTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X3N0aWNrX2xpbWl0KQorCQlz ZXRfc3RpY2tfbGltaXQobmV3X3ZhbHVlLCAmeHBhZC0+bGVmdF9zdGlja19saW1pdCwKKwkJCQl4 cGFkLT5sZWZ0X2RlYWRfem9uZSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRf c3RpY2tfbGltaXQpCisJCXNldF9zdGlja19saW1pdChuZXdfdmFsdWUsICZ4cGFkLT5yaWdodF9z dGlja19saW1pdCwKKwkJCQl4cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCWVsc2UKKwkJcmV0dXJu IC1FSU87CisJcmV0dXJuIHN0cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworfQorCisKK3N0YXRpYyBz c2l6ZV90IHhwYWRfc3RvcmVfcnVtYmxlX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJaW50IG5ld3J1 bWJsZSA9IHhwYWQtPnJ1bWJsZV9lbmFibGU7CisJaWYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwg Jm5ld3J1bWJsZSkpCisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAobmV3cnVtYmxlKSA/IDEgOiAw OworCXJldHVybiBjb3VudDsKK30KKworCisvKiByZWFkLW9ubHkgYXR0cmlidXRlcyBzaGFyZSBh IGNvbW1vbiBzdG9yZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgKi8KK3N0YXRpYyBz c2l6ZV90IHhwYWRfc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0 dXJuIC1FSU87Cit9CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2ludChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7 CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCWludCB2YWx1ZTsKKwlp ZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZSkKKwkJdmFsdWUgPSB4cGFkLT5ydW1i bGVfZW5hYmxlOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfbnVtYmVy KQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOworCWVsc2UgaWYgKGF0dHIgPT0g JmRldl9hdHRyX2NvbnRyb2xsZXJfcHJlc2VudCkKKwkJdmFsdWUgPSB4cGFkLT5jb250cm9sbGVy X3ByZXNlbnQ7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfY29udHJvbGxlcl90eXBlKQor CQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfdHlwZTsKKwllbHNlCisJCXJldHVybiAtRUlPOwor CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWx1ZSk7Cit9CisKKwor c3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQg KnhwYWQgPSB0b194cGFkKGRldik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAi JXNcbiIsIHhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkKTsKK30KKworCisvKiBlbmQgb2Ygc3lz ZnMgaW50ZXJmYWNlICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElucHV0IHNlY3Rp b24gKi8KKworLyoJeHBhZF9pbml0X2NvbnRyb2xsZXIKKyAqCisgKglQZXJmb3JtcyBjb250cm9s bGVyIHNldHVwIGJhc2VkIG9uIGNvbnRyb2xsZXIgdHlwZS4KKyAqCisgKglOT1RFOiB4cGFkLT5j b250cm9sbGVyX2RhdGEtPmNvbnRyb2xsZXJfdHlwZSBuZWVkcyB0byBiZSBzZXQgQkVGT1JFCisg KgljYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KKworc3RhdGljIHZvaWQgeHBhZF9pbml0X2Nv bnRyb2xsZXIoc3RydWN0IHVzYl94cGFkICp4cGFkKQoreworCXNldF9zdGlja19saW1pdChYU1RJ Q0tfTElNSVRfREVGQVVMVCwgJnhwYWQtPmxlZnRfc3RpY2tfbGltaXQsCisJCQl4cGFkLT5sZWZ0 X2RlYWRfem9uZSk7CisJc2V0X3N0aWNrX2xpbWl0KFhTVElDS19MSU1JVF9ERUZBVUxULCAmeHBh ZC0+cmlnaHRfc3RpY2tfbGltaXQsCisJCQl4cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCXNldF9k ZWFkX3pvbmUoWERFQURfWk9ORV9ERUZBVUxULCAmeHBhZC0+bGVmdF9kZWFkX3pvbmUsCisJCQl4 cGFkLT5sZWZ0X3N0aWNrX2xpbWl0KTsKKwlzZXRfZGVhZF96b25lKFhERUFEX1pPTkVfREVGQVVM VCwgJnhwYWQtPnJpZ2h0X2RlYWRfem9uZSwKKwkJCXhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0KTsK KworCWlmICh4cGFkLT5jb250cm9sbGVyX3R5cGUgPT0gWENPTlRST0xMRVJfVFlQRV9HVUlUQVIp CisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAwOworCWVsc2UgaWYgKHhwYWQtPmNvbnRyb2xsZXJf dHlwZSA9PSBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCkKKwkJeHBhZC0+cnVtYmxlX2VuYWJs ZSA9IDA7CisJZWxzZQorCQl4cGFkLT5ydW1ibGVfZW5hYmxlID0gMTsKK30KKworCisvKgorICoJ eHBhZF93b3JrX2NvbnRyb2xsZXIKKyAqCisgKglTdWJtaXRzIGNvbW1hbmQgdG8gc2V0IHBhZCBu dW1iZXIgb24gTEVEIGRpc3BsYXkgb2Ygd2lyZWxlc3MgMzYwCisgKgljb250cm9sbGVycy4gVGhl IHNoYXJlZCB3b3JrcXVldWUgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLCBzbyB0aGF0CisgKgl0 aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMga2VwdCBzaG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCB4 cGFkX3dvcmtfY29udHJvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisgICBzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHVzYl94cGFkLCB3b3JrKTsK KyAgIHhwYWRfc2VuZF9sZWRfY29tbWFuZCh4cGFkLCB4cGFkLT5jb250cm9sbGVyX251bWJlciAr IDEpOworICAgeHBhZC0+d29ya19wZW5kaW5nID0gMDsKK30KKworCisvKgorICoJeHBhZF9wcm9j ZXNzX3N0aWNrcworICoKKyAqCUhhbmRsZXMgc3RpY2sgaW5wdXQsIGFjY291bnRpbmcgZm9yIGRl YWQgem9uZXMgYW5kIHNxdWFyZSBheGVzLiBCYXNlZAorICoJb24gdGhlIG9yaWdpbmFsIGhhbmRs ZXJzIGZvciB0aGUgWGJveCBhbmQgWGJveCAzNjAgaW4KKyAqCXhwYWRfcHJvY2Vzc19wYWNrZXQg YW5kIHhwYWQzNjBfcHJvY2Vzc19wYWNrZXQsIGJ1dCB1bmlmaWVkIHRvIGF2b2lkCisgKglkdXBs aWNhdGlvbi4KKyAqCisgKglXaGVuZXZlciBhIGRlYWQgem9uZSBpcyB1c2VkLCBlYWNoIGF4aXMg aXMgc2NhbGVkIHNvIHRoYXQgbW92aW5nIHRoZQorICoJc3RpY2sgc2xpZ2h0bHkgb3V0IG9mIHRo ZSBkZWFkIHpvbmUgcmFuZ2UgcmVzdWx0cyBpbiBhIGxvdyBheGlzCisgKgl2YWx1ZSBpbiBqc3Rl c3QoMSksIHdoaWxlIG1vdmluZyB0aGUgc3RpY2sgdG8gdGhlIG1heGltdW0gcG9zaXRpb24KKyAq CWFsb25nIGFueSBheGlzIHN0aWxsIHJlc3VsdHMgaW4gMzI3NjcuCisgKgorICoJSW4gb3JkZXIg dG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBtYXAgaW5wdXRzIHRvIGEgc3F1YXJlIGF4aXMgKHVz ZWQKKyAqCWJ5IG9sZGVyIGdhbWVzKSwgdGhlIGxlZnRfc3RpY2tfbGltaXQgYW5kIHJpZ2h0X3N0 aWNrX2xpbWl0IGNhbiBiZQorICoJc2V0LiBUaGVzZSBsaW1pdHMgc3BlY2lmeSBhdCB3aGF0IHBv aW50IGluIHRoZSByYXcgaW5wdXQgY29vcmRpbmF0ZXMKKyAqCWFuIGF4aXMgaXMgcmVwb3J0ZWQg dG8gYmUgYXQgbWF4aW11bSB2YWx1ZSAoMzI3Njcgb3IgLTMyNzY3KS4KKyAqCisgKglCb3RoIHRo ZSBkZWFkIHpvbmUgYW5kIHN0aWNrIGxpbWl0IGFsZ29yaXRobXMgYXJlIGltcGxlbWVudGVkCisg Kgl0b2dldGhlciBhcyBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gZnJvbSAiZWZmZWN0aXZl IGNvb3JkaW5hdGVzIgorICoJb250byB0aGUgb3V0cHV0IGNvb3JkaW5hdGVzICh3aGljaCBoYXZl IGFic29sdXRlIHZhbHVlcyBmcm9tIDAgdG8KKyAqCTMyNzY3IGFuZCBhcmUgcG9zaXRpdmUgb3Ig bmVnYXRpdmUgYmFzZWQgb24gZGlyZWN0aW9uKS4gRWZmZWN0aXZlCisgKgljb29yZGluYXRlcyBh cmUgZGVmaW5lZCBhcyB0aG9zZSBpbnB1dCB2YWx1ZXMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuCisg Kgl0aGUgZGVhZCB6b25lIGJ1dCBsZXNzIHRoYW4gdGhlIHN0aWNrIGxpbWl0IG9uIHRoZSBheGlz IGluIHF1ZXN0aW9uLgorICoKKyAqCURBTkdFUjogQWxsIGRlbm9taW5hdG9yIHZhbHVlcyBpbiBk aXZpc2lvbiBvcGVyYXRpb25zIE1VU1QgYmUgY2hlY2tlZAorICoJZm9yIG5vbi16ZXJvIGNvbmRp dGlvbi4gRGl2aWRpbmcgYnkgemVybyBpbnNpZGUgdGhlIGtlcm5lbCBjYW4gY2F1c2UKKyAqCWEg c3lzdGVtIGRlYWRsb2NrLgorICovCisKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19zdGlja3Mo c3RydWN0IHVzYl94cGFkICp4cGFkLCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBp bnB1dF9kZXYgKmRldiA9IHhwYWQtPmRldjsKKwlpbnQgY29vcmRzWzRdOyAgICAvKiB4LCB5LCBy eCwgcnkgKi8KKwlpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0LCByeF9vZmZzZXQsIHJ5X29mZnNldDsK KwlpbnQgYzsKKwlpbnQgcmFuZ2U7CisJaW50IGFic19tYWduaXR1ZGUsIGFkanVzdGVkX21hZ25p dHVkZSwgZGlmZmVyZW5jZSwgc2NhbGVfZnJhY3Rpb247CisJaW50IGRlYWRfem9uZVsyXSwgc3Rp Y2tfbGltaXRbMl07CisKKwlkZWFkX3pvbmVbMF0gPSB4cGFkLT5sZWZ0X2RlYWRfem9uZTsKKwlk ZWFkX3pvbmVbMV0gPSB4cGFkLT5yaWdodF9kZWFkX3pvbmU7CisJc3RpY2tfbGltaXRbMF0gPSB4 cGFkLT5sZWZ0X3N0aWNrX2xpbWl0OworCXN0aWNrX2xpbWl0WzFdID0geHBhZC0+cmlnaHRfc3Rp Y2tfbGltaXQ7CisKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWCkgeworCQl4X29mZnNl dCA9IDEyOworCQl5X29mZnNldCA9IDE0OworCQlyeF9vZmZzZXQgPSAxNjsKKwkJcnlfb2Zmc2V0 ID0gMTg7CisJfSBlbHNlIHsKKwkJeF9vZmZzZXQgPSA2OworCQl5X29mZnNldCA9IDg7CisJCXJ4 X29mZnNldCA9IDEwOworCQlyeV9vZmZzZXQgPSAxMjsKKwl9CisKKwljb29yZHNbMF0gPSAoX19z MTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyB4X29mZnNldCkpOworCWNvb3Jkc1sx XSA9IH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyB5X29mZnNldCkpOwor CWNvb3Jkc1syXSA9IChfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIHJ4X29m ZnNldCkpOworCWNvb3Jkc1szXSA9IH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRh dGEgKyByeV9vZmZzZXQpKTsKKworCS8qIEFkanVzdG1lbnQgZm9yIGRlYWQgem9uZSBhbmQgc3F1 YXJlIGF4aXMgKi8KKwlmb3IgKGMgPSAwOyBjIDwgNDsgYysrKSB7CisJCWFic19tYWduaXR1ZGUg PSAoaW50KSBjb29yZHNbY107CisJCWlmIChhYnNfbWFnbml0dWRlIDwgMCkKKwkJCWFic19tYWdu aXR1ZGUgPSAtYWJzX21hZ25pdHVkZTsKKwkJYWRqdXN0ZWRfbWFnbml0dWRlID0gYWJzX21hZ25p dHVkZTsKKworCQlyYW5nZSA9IChzdGlja19saW1pdFtjLzJdIC0gZGVhZF96b25lW2MvMl0pOwor CisJCWlmIChhYnNfbWFnbml0dWRlID49IHN0aWNrX2xpbWl0W2MvMl0pIHsKKwkJCWFkanVzdGVk X21hZ25pdHVkZSA9IDMyNzY3OworCQl9IGVsc2UgaWYgKGFic19tYWduaXR1ZGUgPD0gZGVhZF96 b25lW2MvMl0pIHsKKwkJCWFkanVzdGVkX21hZ25pdHVkZSA9IDA7CisJCX0gZWxzZSBpZiAocmFu Z2UgPiAwKSB7CisJCQlkaWZmZXJlbmNlID0gMzI3NjcgLSByYW5nZTsKKwkJCWlmIChkaWZmZXJl bmNlKSB7CisJCQkJLyogRElWSVNJT046IGRpZmZlcmVuY2Ugbm9uLXplcm8gKi8KKwkJCQlzY2Fs ZV9mcmFjdGlvbiA9IHJhbmdlIC8gZGlmZmVyZW5jZTsKKwkJCQlhZGp1c3RlZF9tYWduaXR1ZGUg PQorCQkJCQlhYnNfbWFnbml0dWRlIC0gZGVhZF96b25lW2MvMl07CisKKwkJCQkvKiBBcHByb3hp bWF0ZSBmbG9hdGluZy1wb2ludCBkaXZpc2lvbiB3aXRoIGEKKwkJCQkgKiAiY2F0Y2gtdXAiIHNj YWxpbmcgYWxnb3JpdGhtIHRoYXQgYWRkcyBiYWNrCisJCQkJICogdG8gdGhlIGFkanVzdGVkX21h Z25pdHVkZSBiYXNlZCBvbiBkaXN0YW5jZQorCQkJCSAqIGZyb20gdGhlIG9yaWdpbiAoMCBpbiBh ZGp1c3RlZCBjb29yZGluYXRlcykuCisJCQkJICogSWYgdGhlIHJhbmdlIC8gZGlmZmVyZW5jZSBp cyBhdCBsZWFzdCAxLAorCQkJCSAqIHRoZW4gMSBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYWRq dXN0ZWQKKwkJCQkgKiBtYWduaXR1ZGUgZm9yIGV2ZXJ5IHNjYWxlX2ZyYWN0aW9uIHVuaXRzCisJ CQkJICogZnJvbSB0aGUgb3JpZ2luLiBJZiB0aGUgcmFuZ2UgLyBkaWZmZXJlbmNlCisJCQkJICog aXMgbGVzcyB0aGFuIDEgKDAgaW4gaW50ZWdlciBkaXZpc2lvbiksCisJCQkJICogdGhlbiBkaXZp ZGUgdGhlIGRpZmZlcmVuY2UgYnkgdGhlIHJhbmdlIHRvCisJCQkJICogb2J0YWluIHRoZSBudW1i ZXIgb2YgdW5pdHMgdG8gYWRkIHBlciB1bml0CisJCQkJICogZnJvbSB0aGUgYWRqdXN0ZWQgb3Jp Z2luLgorCQkJCSAqLworCQkJCWlmIChzY2FsZV9mcmFjdGlvbikgeworCQkJCQkvKiBESVZJU0lP Tjogc2NhbGVfZnJhY3Rpb24gbm9uLXplcm8gKi8KKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlICs9 CisJCQkJCQlhZGp1c3RlZF9tYWduaXR1ZGUKKwkJCQkJCS8gc2NhbGVfZnJhY3Rpb247CisJCQkJ fSBlbHNlIHsKKwkJCQkJLyogRElWSVNJT046IHJhbmdlIG5vbi16ZXJvICovCisJCQkJCXNjYWxl X2ZyYWN0aW9uID0gZGlmZmVyZW5jZSAvIHJhbmdlOworCQkJCQlhZGp1c3RlZF9tYWduaXR1ZGUg Kz0KKwkJCQkJCWFkanVzdGVkX21hZ25pdHVkZQorCQkJCQkJKiBzY2FsZV9mcmFjdGlvbjsKKwkJ CQl9CisJCQkJaWYgKGFkanVzdGVkX21hZ25pdHVkZSA+IDMyNzY3KQorCQkJCQlhZGp1c3RlZF9t YWduaXR1ZGUgPSAzMjc2NzsKKwkJCX0KKwkJfQorCQljb29yZHNbY10gPSAoY29vcmRzW2NdIDwg MCkgPworCQkJCS1hZGp1c3RlZF9tYWduaXR1ZGUgOiBhZGp1c3RlZF9tYWduaXR1ZGU7CisJfQor CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoX19zMTYpIGNvb3Jkc1swXSk7CisJaW5w dXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoX19zMTYpIGNvb3Jkc1sxXSk7CisJaW5wdXRfcmVw b3J0X2FicyhkZXYsIEFCU19SWCwgKF9fczE2KSBjb29yZHNbMl0pOworCWlucHV0X3JlcG9ydF9h YnMoZGV2LCBBQlNfUlksIChfX3MxNikgY29vcmRzWzNdKTsKK30KIAotCWludCBkcGFkX21hcHBp bmc7CQkvKiBtYXAgZC1wYWQgdG8gYnV0dG9ucyBvciB0byBheGVzICovCi0JaW50IHh0eXBlOwkJ CS8qIHR5cGUgb2YgeGJveCBkZXZpY2UgKi8KLX07CiAKIC8qCiAgKgl4cGFkX3Byb2Nlc3NfcGFj a2V0CkBAIC0yNTMsMjEgKzM0NywxMyBAQAogICoJIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94 LWNvbnRyb2xsZXIuamEuaHRtbAogICovCiAKLXN0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNr ZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKQor c3RhdGljIHZvaWQgeHBhZF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUx NiBjbWQsCisJCXVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2 ID0geHBhZC0+ZGV2OwogCi0JLyogbGVmdCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2 LCBBQlNfWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikp KTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksCi0JCQkgfihfX3MxNikgbGUxNl90b19j cHVwKChfX2xlMTYgKikoZGF0YSArIDE0KSkpOwotCi0JLyogcmlnaHQgc3RpY2sgKi8KLQlpbnB1 dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JYLAotCQkJIChfX3MxNikgbGUxNl90b19jcHVwKChfX2xl MTYgKikoZGF0YSArIDE2KSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksCi0JCQkg fihfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIDE4KSkpOworCS8qIGxlZnQg YW5kIHJpZ2h0IHN0aWNrcyAqLworCXhwYWRfcHJvY2Vzc19zdGlja3MoeHBhZCwgZGF0YSk7CiAK IAkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19a LCBkYXRhWzEwXSk7CkBAIC0zMDUsNiArMzkxLDcgQEAKIAlpbnB1dF9zeW5jKGRldik7CiB9CiAK KwogLyoKICAqCXhwYWQzNjBfcHJvY2Vzc19wYWNrZXQKICAqCkBAIC0zMTYsNyArNDAzLDcgQEAK ICAqLwogCiBzdGF0aWMgdm9pZCB4cGFkMzYwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBh ZCAqeHBhZCwKLQkJCQkgICB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKQorCQl1MTYgY21k LCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHhwYWQt PmRldjsKIApAQCAtMzUxLDE3ICs0MzgsOCBAQAogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5f VFIsCWRhdGFbM10gJiAweDAyKTsKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01PREUsCWRh dGFbM10gJiAweDA0KTsKIAotCS8qIGxlZnQgc3RpY2sgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRl diwgQUJTX1gsCi0JCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgNikp KTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksCi0JCQkgfihfX3MxNikgbGUxNl90b19j cHVwKChfX2xlMTYgKikoZGF0YSArIDgpKSk7Ci0KLQkvKiByaWdodCBzdGljayAqLwotCWlucHV0 X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCi0JCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUx NiAqKShkYXRhICsgMTApKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWSwKLQkJCSB+ KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTIpKSk7CisJLyogbGVmdCBh bmQgcmlnaHQgc3RpY2tzICovCisJeHBhZF9wcm9jZXNzX3N0aWNrcyh4cGFkLCBkYXRhKTsKIAog CS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1os IGRhdGFbNF0pOwpAQCAtMzcwLDYgKzQ0OCwzNSBAQAogCWlucHV0X3N5bmMoZGV2KTsKIH0KIAor CitzdGF0aWMgdm9pZCB4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBh ZCAqeHBhZCwKKwkJdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwl1MzIgaWQ7CisJaW50IGk7CisK KwlzbnByaW50Zih4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZCwgMTcsCisJCSIlMDJ4JTAyeCUw MnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisJCWRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBk YXRhWzExXSwgZGF0YVsxMl0sIGRhdGFbMTNdLAorCQlkYXRhWzE0XSwgZGF0YVsxNV0pOworCisJ LyogSWRlbnRpZnkgY29udHJvbGxlciB0eXBlICovCisJaWQgPSAodTMyKSAqKGRhdGEgKyAyMik7 CisJeHBhZC0+Y29udHJvbGxlcl90eXBlID0gWENPTlRST0xMRVJfVFlQRV9PVEhFUjsKKwlmb3Ig KGkgPSAwOyB3MzYwX2lkW2ldLmlkX2J5dGVzOyBpKyspIHsKKwkJaWYgKGlkID09IHczNjBfaWRb aV0uaWRfYnl0ZXMpIHsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9CisJCQkJdzM2MF9pZFtp XS5jb250cm9sbGVyX3R5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpZCA9PSBYQ09O VFJPTExFUl9UWVBFX09USEVSKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkieHBhZDogdW5rbm93 biB3aXJlbGVzcyBjb250cm9sbGVyIHR5cGU6ICUwOHhcbiIsIGlkKTsKK30KKworCiAvKgogICog eHBhZDM2MHdfcHJvY2Vzc19wYWNrZXQKICAqCkBAIC0zNzksMzAgKzQ4Niw2NCBAQAogICogQnl0 ZS5CaXQKICAqIDAwLjEgLSBTdGF0dXMgY2hhbmdlOiBUaGUgY29udHJvbGxlciBvciBoZWFkc2V0 IGhhcyBjb25uZWN0ZWQvZGlzY29ubmVjdGVkCiAgKiAgICAgICAgICAgICAgICAgICAgICAgQml0 cyAwMS43IGFuZCAwMS42IGFyZSB2YWxpZAorICogMDEuZiAtIFNvbWUga2luZCBvZiB1bmlxdWUg aWRlbnRpZmllciBtZXNzYWdlIChzZWUgYWJvdmUpCiAgKiAwMS43IC0gQ29udHJvbGxlciBwcmVz ZW50CiAgKiAwMS42IC0gSGVhZHNldCBwcmVzZW50CiAgKiAwMS4xIC0gUGFkIHN0YXRlIChCeXRl cyA0KykgdmFsaWQKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgeHBhZDM2MHdfcHJvY2Vzc19wYWNr ZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKQor c3RhdGljIHZvaWQgeHBhZDM2MHdfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFk LCB1MTYgY21kLAorCQl1bnNpZ25lZCBjaGFyICpkYXRhKQogeworCWludCBwYWRudW0gPSAwOwor CiAJLyogUHJlc2VuY2UgY2hhbmdlICovCiAJaWYgKGRhdGFbMF0gJiAweDA4KSB7CisJCXBhZG51 bSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOwogCQlpZiAoZGF0YVsxXSAmIDB4ODApIHsKLQkJ CXhwYWQtPnBhZF9wcmVzZW50ID0gMTsKLQkJCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmJ1bGtfb3V0 LCBHRlBfQVRPTUlDKTsKLQkJfSBlbHNlCi0JCQl4cGFkLT5wYWRfcHJlc2VudCA9IDA7CisJCQkv KiBpZ25vcmUgZHVwbGljYXRlcyAqLworCQkJaWYgKCF4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQp IHsKKwkJCQl4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQgPSAxOworCisJCQkJaWYgKHhwYWQtPndv cmtfcGVuZGluZykKKwkJCQkJUFJFUEFSRV9XT1JLKCZ4cGFkLT53b3JrLAorCQkJCQkJJnhwYWRf d29ya19jb250cm9sbGVyKTsKKwkJCQllbHNlCisJCQkJCUlOSVRfV09SSygmeHBhZC0+d29yaywK KwkJCQkJCSZ4cGFkX3dvcmtfY29udHJvbGxlcik7CisJCQkJeHBhZC0+d29ya19wZW5kaW5nID0g MTsKKwkJCQlzY2hlZHVsZV93b3JrKCZ4cGFkLT53b3JrKTsKKwkJCQlrb2JqZWN0X3VldmVudCgm eHBhZC0+ZGV2LT5kZXYua29iaiwKKwkJCQkJCUtPQkpfT05MSU5FKTsKKwkJCX0KKwkJfSBlbHNl IHsKKwkJCWtvYmplY3RfdWV2ZW50KCZ4cGFkLT5kZXYtPmRldi5rb2JqLCBLT0JKX09GRkxJTkUp OworCQkJeHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMDsKKwkJCXhwYWQtPmNvbnRyb2xsZXJf dW5pcXVlX2lkWzBdID0gJ1wwJzsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9IFhDT05UUk9M TEVSX1RZUEVfTk9ORTsKKwkJCS8qIFdlIGRvIE5PVCBmbHVzaCB0aGUgc2hhcmVkIHdvcmtxdWV1 ZSBoZXJlLCBiZWNhdXNlCisJCQkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGlu dGVycnVwdCBoYW5kbGVyLgorCQkJICogSWYgdGhlIGNvbnRyb2xsZXIgaGFzIGRpc2Nvbm5lY3Rl ZCBmcm9tIHRoZSByZWNlaXZlciwKKwkJCSAqIHRoZSB3b3JzdCB0aGF0IHdpbGwgaGFwcGVuIGZy b20gdGhlIHdvcmsgdGFzayBydW5uaW5nCisJCQkgKiBpcyB0aGF0IGEgcGFja2V0IHdpbGwgYmUg dHJhbnNtaXR0ZWQgZnJvbSB0aGUKKwkJCSAqIHJlY2VpdmVyIHRvIGEgbm9uLWxpc3RlbmluZyBj b250cm9sbGVyCisJCQkgKi8KKwkJfQogCX0KIAotCS8qIFZhbGlkIHBhZCBkYXRhICovCi0JaWYg KCEoZGF0YVsxXSAmIDB4MSkpCi0JCXJldHVybjsKLQotCXhwYWQzNjBfcHJvY2Vzc19wYWNrZXQo eHBhZCwgY21kLCAmZGF0YVs0XSk7CisJLyogUHJvY2VzcyBwYWNrZXRzIGFjY29yZGluZyB0byB0 eXBlICovCisJaWYgKGRhdGFbMV0gPT0gMHgwZikgeworCQlpZiAoIXhwYWQtPmNvbnRyb2xsZXJf dW5pcXVlX2lkWzBdKSB7CisJCQl4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHhwYWQsIGRh dGEpOworCQkJeHBhZF9pbml0X2NvbnRyb2xsZXIoeHBhZCk7CisJCX0KKwl9IGVsc2UgaWYgKGRh dGFbMV0gJiAweDEpIHsKKwkJeHBhZDM2MF9wcm9jZXNzX3BhY2tldCh4cGFkLCBjbWQsICZkYXRh WzRdKTsKKwl9CiB9CiAKKwogc3RhdGljIHZvaWQgeHBhZF9pcnFfaW4oc3RydWN0IHVyYiAqdXJi KQogewogCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHVyYi0+Y29udGV4dDsKQEAgLTQzOSwzMCAr NTgwLDIyIEBACiAJfQogCiBleGl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdG UF9BVE9NSUMpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJ aWYgKHJldHZhbCkKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1 bHQgJWQiLAorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVk IiwKIAkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAotc3RhdGljIHZvaWQgeHBhZF9idWxr X291dChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2Ug MDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2Ug LUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQs IGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czog JWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmco IiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0 YXR1cyk7Ci0JfQotfQorCisvKiBlbmQgaW5wdXQgc2VjdGlvbiAqLworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisvKiBJUlEgb3V0cHV0IHNlY3Rpb246IHByZXNlbnQgaW4gb2JqZWN0IGNvZGUg b25seSBpZiB0aGUgZm9yY2UgZmVlZGJhY2sgb3IKKyAqIExFRCBpbnRlcmZhY2UgaXMgZW5hYmxl ZC4KKyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikgfHwgZGVmaW5l ZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQorCiBzdGF0aWMgdm9pZCB4cGFkX2lycV9vdXQo c3RydWN0IHVyYiAqdXJiKQogewogCWludCByZXR2YWwsIHN0YXR1czsKQEAgLTQ3MCwyMCArNjAz LDIwIEBACiAJc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewotCQlj YXNlIDA6CisJY2FzZSAwOgogCQkvKiBzdWNjZXNzICovCiAJCWJyZWFrOwotCQljYXNlIC1FQ09O TlJFU0VUOgotCQljYXNlIC1FTk9FTlQ6Ci0JCWNhc2UgLUVTSFVURE9XTjoKLQkJCS8qIHRoaXMg dXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5n IGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCXJldHVy bjsKLQkJZGVmYXVsdDoKLQkJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6 ICVkIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCWdvdG8gZXhpdDsKKwljYXNlIC1FQ09O TlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJi IGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93 biB3aXRoIHN0YXR1czogJWQiLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlk ZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJ CQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBleGl0OwogCX0KIAogZXhpdDoKQEAgLTQ5Mywx MiArNjI2LDEzIEBACiAJCSAgICBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAorCiBzdGF0aWMgaW50 IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCB1c2Jf eHBhZCAqeHBhZCkKIHsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2lycV9v dXQ7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9Y Qk9YMzYwKQorCWlmICgoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0 eXBlICE9IFhUWVBFX1hCT1gzNjBXKSkKIAkJcmV0dXJuIDA7CiAKIAl4cGFkLT5vZGF0YSA9IHVz Yl9idWZmZXJfYWxsb2MoeHBhZC0+dWRldiwgWFBBRF9QS1RfTEVOLApAQCAtNTE0LDcgKzY0OCw4 IEBACiAKIAllcF9pcnFfb3V0ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5k ZXNjOwogCXVzYl9maWxsX2ludF91cmIoeHBhZC0+aXJxX291dCwgeHBhZC0+dWRldiwKLQkJCSB1 c2Jfc25kaW50cGlwZSh4cGFkLT51ZGV2LCBlcF9pcnFfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKSwK KwkJCSB1c2Jfc25kaW50cGlwZSh4cGFkLT51ZGV2LAorCQkJCWVwX2lycV9vdXQtPmJFbmRwb2lu dEFkZHJlc3MpLAogCQkJIHhwYWQtPm9kYXRhLCBYUEFEX1BLVF9MRU4sCiAJCQkgeHBhZF9pcnFf b3V0LCB4cGFkLCBlcF9pcnFfb3V0LT5iSW50ZXJ2YWwpOwogCXhwYWQtPmlycV9vdXQtPnRyYW5z ZmVyX2RtYSA9IHhwYWQtPm9kYXRhX2RtYTsKQEAgLTUyNiw0NSArNjYxLDgyIEBACiAgZmFpbDE6 CXJldHVybiBlcnJvcjsKIH0KIAorCiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVj dCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkK KwlpZiAoKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHx8ICh4cGFkLT54dHlwZSA9PSBY VFlQRV9YQk9YMzYwVykpCiAJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfb3V0KTsKIH0KIAorCiBz dGF0aWMgdm9pZCB4cGFkX2RlaW5pdF9vdXRwdXQoc3RydWN0IHVzYl94cGFkICp4cGFkKQogewot CWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwKSB7CisJaWYgKCh4cGFkLT54dHlwZSA9 PSBYVFlQRV9YQk9YMzYwKSB8fCAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpKSB7CiAJ CXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfb3V0KTsKIAkJdXNiX2J1ZmZlcl9mcmVlKHhwYWQtPnVk ZXYsIFhQQURfUEtUX0xFTiwKIAkJCQl4cGFkLT5vZGF0YSwgeHBhZC0+b2RhdGFfZG1hKTsKIAl9 CiB9CisKICNlbHNlCi1zdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRl cmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQorLyogRHVt bXkgaW1wbGVtZW50YXRpb25zIGZvciB4cGFkX3Byb2JlIGFuZCB4cGFkX2Rpc2Nvbm5lY3QgKi8K K3N0YXRpYyBpbnQgeHBhZF9pbml0X291dHB1dChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Ziwg c3RydWN0IHVzYl94cGFkICp4cGFkKQorCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyB2b2lkIHhwYWRf ZGVpbml0X291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHt9CiBzdGF0aWMgdm9pZCB4cGFk X3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkge30KICNlbmRpZgogCi0jaWZkZWYg Q09ORklHX0pPWVNUSUNLX1hQQURfRkYKKy8qIGVuZCBvdXRwdXQgc2VjdGlvbiAqLworCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qIEZvcmNlIGZlZWRiYWNrIChydW1ibGUgZWZmZWN0KSBz ZWN0aW9uLCBkZXBlbmRzIG9uIENPTkZJR19KT1lTVElDS19YUEFEX0ZGICovCisKKyNpZiBkZWZp bmVkKENPTkZJR19KT1lTVElDS19YUEFEX0ZGKQorCisvKiBSdW1ibGUgc3VwcG9ydCBmb3Igd2ly ZWxlc3MgY29udHJvbGxlcnMgZm9sbG93cyBwcm90b2NvbCBkZXNjcmlwdGlvbgorICogZnJvbSB4 Ym94ZHJ2IHVzZXJzcGFjZSBkcml2ZXI6CisgKiAgICAgICBodHRwOi8vcGluZ3VzLnNldWwub3Jn L35ncnVtYmVsL3hib3hkcnYvCisgKi8KIHN0YXRpYyBpbnQgeHBhZF9wbGF5X2VmZmVjdChzdHJ1 Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGZmX2VmZmVjdCAq ZWZmZWN0KQogewogCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRl dik7CiAKKwlpZiAoIXhwYWQtPnJ1bWJsZV9lbmFibGUpCisJCXJldHVybiAwOworCiAJaWYgKGVm ZmVjdC0+dHlwZSA9PSBGRl9SVU1CTEUpIHsKIAkJX191MTYgc3Ryb25nID0gZWZmZWN0LT51LnJ1 bWJsZS5zdHJvbmdfbWFnbml0dWRlOwogCQlfX3UxNiB3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53 ZWFrX21hZ25pdHVkZTsKLQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVsx XSA9IDB4MDg7Ci0JCXhwYWQtPm9kYXRhWzJdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbM10gPSBz dHJvbmcgLyAyNTY7Ci0JCXhwYWQtPm9kYXRhWzRdID0gd2VhayAvIDI1NjsKLQkJeHBhZC0+b2Rh dGFbNV0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzdd ID0gMHgwMDsKLQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJ CW11dGV4X2xvY2soJnhwYWQtPm9kYXRhX211dGV4KTsKKwkJaWYgKHhwYWQtPnh0eXBlID09IFhU WVBFX1hCT1gzNjBXKSB7CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0 YVsxXSA9IDB4MDE7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MGY7CisJCQl4cGFkLT5vZGF0YVsz XSA9IDB4YzA7CisJCQl4cGFkLT5vZGF0YVs0XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs1XSA9 IHN0cm9uZyAvIDI1NjsKKwkJCXhwYWQtPm9kYXRhWzZdID0gd2VhayAvIDI1NjsKKwkJCXhwYWQt Pm9kYXRhWzddID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzhdID0gMHgwMDsKKwkJCXhwYWQtPm9k YXRhWzldID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzEwXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0 YVsxMV0gPSAweDAwOworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9 IDEyOworCQl9IGVsc2UgeworCQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOworCQkJeHBhZC0+b2Rh dGFbMV0gPSAweDA4OworCQkJeHBhZC0+b2RhdGFbMl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFb M10gPSBzdHJvbmcgLyAyNTY7CisJCQl4cGFkLT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7CisJCQl4 cGFkLT5vZGF0YVs1XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7CisJCQl4cGFk LT5vZGF0YVs3XSA9IDB4MDA7CisJCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVu Z3RoID0gODsKKwkJfQogCQl1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfS0VSTkVM KTsKKwkJbXV0ZXhfdW5sb2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7 CkBAIC01NzIsNyArNzQ0LDcgQEAKIAogc3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVz Yl94cGFkICp4cGFkKQogewotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlm ICgoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBF X1hCT1gzNjBXKSkKIAkJcmV0dXJuIDA7CiAKIAlpbnB1dF9zZXRfY2FwYWJpbGl0eSh4cGFkLT5k ZXYsIEVWX0ZGLCBGRl9SVU1CTEUpOwpAQCAtNTgxLDI2ICs3NTMsNDkgQEAKIH0KIAogI2Vsc2UK Ky8qIGR1bW15IGltcGxlbWVudGF0aW9uIGZvciB4cGFkX3Byb2JlICovCiBzdGF0aWMgaW50IHhw YWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgog CisKKy8qIGVuZCBmb3JjZSBmZWVkYmFjayBzZWN0aW9uICovCisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworLyogTEVEIGhhbmRsaW5nIHNlY3Rpb246IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRo ZSByaW5nIG9mIExFRHMgb24gdGhlIDM2MAorICogY29udHJvbGxlcnMuICovCisKICNpZiBkZWZp bmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgog Ci1zdHJ1Y3QgeHBhZF9sZWQgewotCWNoYXIgbmFtZVsxNl07Ci0Jc3RydWN0IGxlZF9jbGFzc2Rl diBsZWRfY2RldjsKLQlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQ7Ci19OwogCisvKiBYQm94IDM2MCB3 aXJlbGVzcyBjb250cm9sbGVyIGZvbGxvd3MgcHJvdG9jb2wgZnJvbSB4Ym94ZHJ2IHVzZXJzcGFj ZQorICogZHJpdmVyOgorICogICAgaHR0cDovL3Bpbmd1cy5zZXVsLm9yZy9+Z3J1bWJlbC94Ym94 ZHJ2LworICovCiBzdGF0aWMgdm9pZCB4cGFkX3NlbmRfbGVkX2NvbW1hbmQoc3RydWN0IHVzYl94 cGFkICp4cGFkLCBpbnQgY29tbWFuZCkKIHsKIAlpZiAoY29tbWFuZCA+PSAwICYmIGNvbW1hbmQg PCAxNCkgewogCQltdXRleF9sb2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7Ci0JCXhwYWQtPm9kYXRh WzBdID0gMHgwMTsKLQkJeHBhZC0+b2RhdGFbMV0gPSAweDAzOwotCQl4cGFkLT5vZGF0YVsyXSA9 IGNvbW1hbmQ7Ci0JCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOwor CQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpIHsKKwkJCXhwYWQtPm9kYXRhWzBd ID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzFdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzJdID0g MHgwODsKKwkJCXhwYWQtPm9kYXRhWzNdID0gMHg0MCArIChjb21tYW5kICUgMHgwZSk7CisJCQl4 cGFkLT5vZGF0YVs0XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs1XSA9IDB4MDA7CisJCQl4cGFk LT5vZGF0YVs2XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs3XSA9IDB4MDA7CisJCQl4cGFkLT5v ZGF0YVs4XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs5XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0 YVsxMF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMTFdID0gMHgwMDsKKwkJCXhwYWQtPmlycV9v dXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxMjsKKwkJfSBlbHNlIHsKKwkJCXhwYWQtPm9k YXRhWzBdID0gMHgwMTsKKwkJCXhwYWQtPm9kYXRhWzFdID0gMHgwMzsKKwkJCXhwYWQtPm9kYXRh WzJdID0gY29tbWFuZDsKKwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgg PSAzOworCQl9CiAJCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmlycV9vdXQsIEdGUF9LRVJORUwpOwog CQltdXRleF91bmxvY2soJnhwYWQtPm9kYXRhX211dGV4KTsKIAl9CkBAIC02MTUsNiArODEwLDcg QEAKIAl4cGFkX3NlbmRfbGVkX2NvbW1hbmQoeHBhZF9sZWQtPnhwYWQsIHZhbHVlKTsKIH0KIAor CiBzdGF0aWMgaW50IHhwYWRfbGVkX3Byb2JlKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKIAlz dGF0aWMgYXRvbWljX3QgbGVkX3NlcQk9IEFUT01JQ19JTklUKDApOwpAQCAtNjIzLDcgKzgxOSw3 IEBACiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiAJaW50IGVycm9yOwogCi0JaWYg KHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjApCisJaWYgKCh4cGFkLT54dHlwZSAhPSBYVFlQ RV9YQk9YMzYwKSAmJiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MFcpKQogCQlyZXR1cm4g MDsKIAogCXhwYWQtPmxlZCA9IGxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGFkX2xlZCks IEdGUF9LRVJORUwpOwpAQCAtNjY0LDE3ICs4NjAsMjMgQEAKIAl9CiB9CiAjZWxzZQorLyogZHVt bWllcyBmb3IgeHBhZF9wcm9iZSBhbmQgeHBhZF9kaXNjb25uZWN0ICovCiBzdGF0aWMgaW50IHhw YWRfbGVkX3Byb2JlKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQogc3RhdGlj IHZvaWQgeHBhZF9sZWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgfQogI2Vu ZGlmCiAKKy8qIGVuZCBMRUQgc2VjdGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK Ky8qIE1vZHVsZSBhbmQgZGV2aWNlIGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgaW50IHhwYWRfb3Bl bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5w dXRfZ2V0X2RydmRhdGEoZGV2KTsKIAogCS8qIFVSQiB3YXMgc3VibWl0dGVkIGluIHByb2JlICov Ci0JaWYoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpCisJaWYgKHhwYWQtPnh0eXBlID09 IFhUWVBFX1hCT1gzNjBXKQogCQlyZXR1cm4gMDsKIAogCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBh ZC0+dWRldjsKQEAgLTY4OCw3ICs4OTAsNyBAQAogewogCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9 IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZih4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9Y MzYwVykKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MFcpCiAJCXVzYl9raWxsX3Vy Yih4cGFkLT5pcnFfaW4pOwogCXhwYWRfc3RvcF9vdXRwdXQoeHBhZCk7CiB9CkBAIC03MTUsMTgg KzkxNywyMiBAQAogCX0KIH0KIAotc3RhdGljIGludCB4cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50 ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50 IHhwYWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1 c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFj ZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkOwogCXN0cnVjdCBpbnB1 dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2ly cV9pbjsKKwlpbnQgY29udHJvbGxlcl90eXBlOwogCWludCBpOwogCWludCBlcnJvciA9IC1FTk9N RU07CiAKIAlmb3IgKGkgPSAwOyB4cGFkX2RldmljZVtpXS5pZFZlbmRvcjsgaSsrKSB7Ci0JCWlm ICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0geHBhZF9kZXZpY2Vb aV0uaWRWZW5kb3IpICYmCi0JCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFBy b2R1Y3QpID09IHhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCisJCWlmICgobGUxNl90b19jcHUo dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0KKwkJCQkJCXhwYWRfZGV2aWNlW2ldLmlkVmVu ZG9yKSAmJgorCQkJCShsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0K KwkJCQkJCXhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTc0 NywxMSArOTUzLDE0IEBACiAJeHBhZC0+dWRldiA9IHVkZXY7CiAJeHBhZC0+ZHBhZF9tYXBwaW5n ID0geHBhZF9kZXZpY2VbaV0uZHBhZF9tYXBwaW5nOwogCXhwYWQtPnh0eXBlID0geHBhZF9kZXZp Y2VbaV0ueHR5cGU7CisJY29udHJvbGxlcl90eXBlID0geHBhZF9kZXZpY2VbaV0uY29udHJvbGxl cl90eXBlOwogCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVU5LTk9XTikKIAkJ eHBhZC0+ZHBhZF9tYXBwaW5nID0gIWRwYWRfdG9fYnV0dG9uczsKIAlpZiAoeHBhZC0+eHR5cGUg PT0gWFRZUEVfVU5LTk9XTikgewotCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYklu dGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgewotCQkJaWYgKGludGYtPmN1 cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAxMjkpCisJCWlmIChpbnRm LT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0KKwkJCQkJVVNCX0NMQVNT X1ZFTkRPUl9TUEVDKSB7CisJCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVy ZmFjZVByb3RvY29sID09CisJCQkJCTEyOSkKIAkJCQl4cGFkLT54dHlwZSA9IFhUWVBFX1hCT1gz NjBXOwogCQkJZWxzZQogCQkJCXhwYWQtPnh0eXBlID0gWFRZUEVfWEJPWDM2MDsKQEAgLTc4Mywx NiArOTkyLDE4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyB4cGFkX2J0bltpXSA+PSAwOyBpKysp CiAJCQlzZXRfYml0KHhwYWRfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JaWYgKHhwYWQt PmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TKQorCWlmICh4cGFkLT5kcGFkX21h cHBpbmcgPT0gTUFQX0RQQURfVE9fQlVUVE9OUykgewogCQlmb3IgKGkgPSAwOyB4cGFkX2J0bl9w YWRbaV0gPj0gMDsgaSsrKQogCQkJc2V0X2JpdCh4cGFkX2J0bl9wYWRbaV0sIGlucHV0X2Rldi0+ a2V5Yml0KTsKKwl9CiAKIAkvKiBzZXQgdXAgYXhlcyAqLwogCWZvciAoaSA9IDA7IHhwYWRfYWJz W2ldID49IDA7IGkrKykKIAkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNbaV0p OwotCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQVhFUykKKwlpZiAoeHBh ZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpIHsKIAkJZm9yIChpID0gMDsgeHBh ZF9hYnNfcGFkW2ldID49IDA7IGkrKykKLQkJICAgIHhwYWRfc2V0X3VwX2FicyhpbnB1dF9kZXYs IHhwYWRfYWJzX3BhZFtpXSk7CisJCQl4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fi c19wYWRbaV0pOworCX0KIAogCWVycm9yID0geHBhZF9pbml0X291dHB1dChpbnRmLCB4cGFkKTsK IAlpZiAoZXJyb3IpCkBAIC04MjAsNiArMTAzMSwxMCBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShp bnRmLCB4cGFkKTsKIAorCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9IGNvbnRyb2xsZXJfdHlwZTsK KwlpZiAoY29udHJvbGxlcl90eXBlICE9IFhDT05UUk9MTEVSX1RZUEVfTk9ORSkKKwkJeHBhZF9p bml0X2NvbnRyb2xsZXIoeHBhZCk7CisKIAkvKgogCSAqIFN1Ym1pdCB0aGUgaW50IFVSQiBpbW1l ZGlhdGx5IHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIG9wZW4KIAkgKiBiZWNhdXNlIHdlIGdldCBz dGF0dXMgbWVzc2FnZXMgZnJvbSB0aGUgZGV2aWNlIHdoZXRoZXIKQEAgLTgyOCw0OCArMTA0Mywz OCBAQAogCSAqIHdlJ3JlIHdhaXRpbmcgZm9yLgogCSAqLwogCWlmICh4cGFkLT54dHlwZSA9PSBY VFlQRV9YQk9YMzYwVykgeworCQl4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQgPSAwOworCQl4cGFk LT5jb250cm9sbGVyX3VuaXF1ZV9pZFswXSA9ICdcMCc7CisJCXhwYWQtPmNvbnRyb2xsZXJfbnVt YmVyID0KKwkJCShpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyIC8g MikgKyAxOwogCQl4cGFkLT5pcnFfaW4tPmRldiA9IHhwYWQtPnVkZXY7CiAJCWVycm9yID0gdXNi X3N1Ym1pdF91cmIoeHBhZC0+aXJxX2luLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVycm9yKQotCQkJ Z290byBmYWlsNDsKLQotCQkvKgotCQkgKiBTZXR1cCB0aGUgbWVzc2FnZSB0byBzZXQgdGhlIExF RHMgb24gdGhlCi0JCSAqIGNvbnRyb2xsZXIgd2hlbiBpdCBzaG93cyB1cAotCQkgKi8KLQkJeHBh ZC0+YnVsa19vdXQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZigheHBhZC0+ YnVsa19vdXQpCiAJCQlnb3RvIGZhaWw1OworCX0gZWxzZSB7CisJCXhwYWQtPmNvbnRyb2xsZXJf cHJlc2VudCA9IDE7CisJCXN0cm5jcHkoeHBhZC0+Y29udHJvbGxlcl91bmlxdWVfaWQsICJ3aXJl ZCIsIDE3KTsKKwkJeHBhZC0+Y29udHJvbGxlcl9udW1iZXIgPSAwOworCX0KIAotCQl4cGFkLT5i ZGF0YSA9IGt6YWxsb2MoWFBBRF9QS1RfTEVOLCBHRlBfS0VSTkVMKTsKLQkJaWYoIXhwYWQtPmJk YXRhKQotCQkJZ290byBmYWlsNjsKLQotCQl4cGFkLT5iZGF0YVsyXSA9IDB4MDg7Ci0JCXN3aXRj aCAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcikgewotCQljYXNl IDA6Ci0JCQl4cGFkLT5iZGF0YVszXSA9IDB4NDI7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJ eHBhZC0+YmRhdGFbM10gPSAweDQzOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCXhwYWQtPmJk YXRhWzNdID0gMHg0NDsKLQkJCWJyZWFrOwotCQljYXNlIDY6Ci0JCQl4cGFkLT5iZGF0YVszXSA9 IDB4NDU7Ci0JCX0KLQotCQllcF9pcnFfaW4gPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBv aW50WzFdLmRlc2M7Ci0JCXVzYl9maWxsX2J1bGtfdXJiKHhwYWQtPmJ1bGtfb3V0LCB1ZGV2LAot CQkJCXVzYl9zbmRidWxrcGlwZSh1ZGV2LCBlcF9pcnFfaW4tPmJFbmRwb2ludEFkZHJlc3MpLAot CQkJCXhwYWQtPmJkYXRhLCBYUEFEX1BLVF9MRU4sIHhwYWRfYnVsa19vdXQsIHhwYWQpOworCS8q IFNldCB1cCBkZXZpY2UgYXR0cmlidXRlcyAqLworCXhwYWQtPnN5c2ZzX29rID0gMTsKKwllcnJv ciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW5wdXRfZGV2LT5kZXYua29iaiwKKwkJCQkJCSZ4cGFk X2RlZmF1bHRfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCS8qIERyaXZlciB3aWxsIHdv cmsgd2l0aG91dCB0aGUgc3lzZnMgaW50ZXJmYWNlLCBidXQgcGFyYW1ldGVycworCQkgKiB3aWxs IG5vdCBiZSBhZGp1c3RhYmxlLCBzbyB0aGlzIGZhaWx1cmUgaXMgYSB3YXJuaW5nLiAqLworCQlw cmludGsoS0VSTl9XQVJOSU5HCisJCQkieHBhZDogc3lzZnNfY3JlYXRlX2dyb3VwIGZhaWxlZCB3 aXRoIGVycm9yICVkXG4iLAorCQkJZXJyb3IpOworCQl4cGFkLT5zeXNmc19vayA9IDA7CiAJfQog CiAJcmV0dXJuIDA7CiAKLSBmYWlsNjoJdXNiX2ZyZWVfdXJiKHhwYWQtPmJ1bGtfb3V0KTsKLSBm YWlsNToJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9pbik7CisgZmFpbDU6IHVzYl9zZXRfaW50ZmRh dGEoaW50ZiwgTlVMTCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoeHBhZC0+ZGV2KTsKKwl4 cGFkX2xlZF9kaXNjb25uZWN0KHhwYWQpOwogIGZhaWw0Ogl1c2JfZnJlZV91cmIoeHBhZC0+aXJx X2luKTsKICBmYWlsMzoJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwogIGZhaWwyOgl1c2JfYnVm ZmVyX2ZyZWUodWRldiwgWFBBRF9QS1RfTEVOLCB4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1h KTsKQEAgLTg4MSwxOCArMTA4NiwyNSBAQAogCiBzdGF0aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qo c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHVzYl94cGFkICp4cGFkID0g dXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdXNiX2dl dF9pbnRmZGF0YShpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYg KHhwYWQpIHsKKwkJLyogSWYgYSB3b3JrIHRhc2sgcmVtYWlucywgZ2V0IHJpZCBvZiBpdCBieSBm bHVzaGluZyB0aGUKKwkJICogc2hhcmVkIHdvcmsgcXVldWUuCisJCSAqLworCQlpZiAoeHBhZC0+ d29ya19wZW5kaW5nKQorCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQlpZiAoeHBhZC0+ c3lzZnNfb2spCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnhwYWQtPmRldi0+ZGV2LmtvYmosCisJ CQkJCQkmeHBhZF9kZWZhdWx0X2F0dHJfZ3JvdXApOworCiAJCXhwYWRfbGVkX2Rpc2Nvbm5lY3Qo eHBhZCk7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHhwYWQtPmRldik7CiAJCXhwYWRfZGVp bml0X291dHB1dCh4cGFkKTsKLQkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7 Ci0JCQl1c2Jfa2lsbF91cmIoeHBhZC0+YnVsa19vdXQpOwotCQkJdXNiX2ZyZWVfdXJiKHhwYWQt PmJ1bGtfb3V0KTsKKwkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKQogCQkJdXNi X2tpbGxfdXJiKHhwYWQtPmlycV9pbik7Ci0JCX0KIAkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9p bik7CiAJCXVzYl9idWZmZXJfZnJlZSh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCiAJCQkJeHBh ZC0+aWRhdGEsIHhwYWQtPmlkYXRhX2RtYSk7CkBAIC05MDAsMTIgKzExMTIsNyBAQAogCX0KIH0K IAotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhwYWRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJ4 cGFkIiwKLQkucHJvYmUJCT0geHBhZF9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHhwYWRfZGlzY29u bmVjdCwKLQkuaWRfdGFibGUJPSB4cGFkX3RhYmxlLAotfTsKKwogCiBzdGF0aWMgaW50IF9faW5p dCB1c2JfeHBhZF9pbml0KHZvaWQpCiB7CkBAIC05MjAsOSArMTEyNyw0IEBACiAJdXNiX2RlcmVn aXN0ZXIoJnhwYWRfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQodXNiX3hwYWRfaW5pdCk7Ci1t b2R1bGVfZXhpdCh1c2JfeHBhZF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9S KTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BM Iik7CmRpZmYgLXVOciBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5oIG5ld2Ry di9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuaAotLS0gb3JpZ2Rydi9kcml2ZXJzL2lucHV0 L2pveXN0aWNrL3hwYWQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysg bmV3ZHJ2L2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5oCTIwMDktMDItMjMgMjM6MDk6MzEu MDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogWGJveCBnYW1lcGFkIGRy aXZlciB3aXRoIFhib3ggMzYwIHdpcmVkL3dpcmVsZXNzIHN1cHBvcnQKKyAqCisgKiBMYXN0IE1v ZGlmaWVkOgkyMyBGZWJydWFyeSAyMDA5CisgKgkJCU1pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNs ZW1zb24uZWR1PgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJrbyBGcmllZGVtYW5uIDxt ZnJAYm14LWNoZW1uaXR6LmRlPgorICogICAgICAgICAgICAgICAyMDA0IE9saXZlciBTY2h3YXJ0 eiA8T2xpdmVyLlNjaHdhcnR6QGdteC5kZT4sCisgKiAgICAgICAgICAgICAgICAgICAgU3RldmVu IFRvdGggPHN0ZXZlQHRvdGguZGVtb24uY28udWs+LAorICogICAgICAgICAgICAgICAgICAgIEZy YW56IExlaG5lciA8ZnJhbnpAY2Fvcy5hdD4sCisgKiAgICAgICAgICAgICAgICAgICAgSXZhbiBI YXdrZXMgPGJsYWNraGF3a0BpdmFuaGF3a2VzLmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNSBE b21pbmljIENlcnF1ZXR0aSA8YmluYXJ5MTIzMEB5YWhvby5jb20+CisgKiAgICAgICAgICAgICAg IDIwMDYgQWRhbSBCdWNoYmluZGVyIDxhZGFtLmJ1Y2hiaW5kZXJAZ21haWwuY29tPgorICogICAg ICAgICAgICAgICAyMDA3IEphbiBLcmF0b2NodmlsIDxob256YUBqaWtvcy5jej4KKyAqICAgICAg ICAgICAgICAgMjAwOSBDbGVtc29uIFVuaXZlcnNpdHkKKyAqCQkgICAgICAoY29udGFjdDogTWlr ZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5lZHU+KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0 b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9u OgorICogIC0gaW5mb3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gt Y29udHJvbGxlci5qYS5odG1sCisgKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2No YXIvam95c3RpY2svaWZvcmNlLmMKKyAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMv dXNiL3VzYi1za2VsZXRvbi5jCisgKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3 LmZyZWU2MC5vcmcvd2lraS9HYW1lcGFkCisgKiAgLSB4Ym94ZHJ2IGRvY3MgICAgICAgICBodHRw Oi8vcGluZ3VzLnNldWwub3JnL35ncnVtYmVsL3hib3hkcnYvCisgKgorICogVGhhbmtzIHRvOgor ICogIC0gSVRPIFRha2F5dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRp b24gb24gaGlzIHdlYnNpdGUKKyAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2 ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KKyAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2Vs ZXRvbiBkcml2ZXIKKyAqICAtIFhCT1ggTGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCisg KgorICogVE9ETzoKKyAqICAtIGZpeCAiYW5hbG9nIiBidXR0b25zIChyZXBvcnRlZCBhcyBkaWdp dGFsIG5vdykKKyAqICAtIG5lZWQgVVNCIElEcyBmb3Igb3RoZXIgZGFuY2UgcGFkcworICoKKyAq IERyaXZlciBoaXN0b3J5IGlzIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCisg Ki8KKworI2lmbmRlZiBfWFBBRF9ICisjZGVmaW5lIF9YUEFEX0gKKworI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+ CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElD S19YUEFEX0xFRFMpCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCitzdHJ1Y3QgeHBhZF9sZWQg eworCWNoYXIgbmFtZVsxNl07CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKKwlzdHJ1 Y3QgdXNiX3hwYWQgKnhwYWQ7Cit9OworI2VuZGlmCisKKworI2RlZmluZSBEUklWRVJfQVVUSE9S ICJNYXJrbyBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPiIKKyNkZWZpbmUgRFJJVkVS X0RFU0MgIlhib3gvMzYwIHBhZCBkcml2ZXIiCisKKyNkZWZpbmUgWFBBRF9QS1RfTEVOIDMyCisK KworLyogeGJveCBkLXBhZHMgc2hvdWxkIG1hcCB0byBidXR0b25zLCBhcyBpcyByZXF1aXJlZCBm b3IgRERSIHBhZHMKKyAgIGJ1dCB3ZSBtYXAgdGhlbSB0byBheGVzIHdoZW4gcG9zc2libGUgdG8g c2ltcGxpZnkgdGhpbmdzICovCisjZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMgICAgMAorI2Rl ZmluZSBNQVBfRFBBRF9UT19BWEVTICAgICAgIDEKKyNkZWZpbmUgTUFQX0RQQURfVU5LTk9XTiAg ICAgICAyCisKKy8qIFR5cGUgb2YgY29udHJvbGxlciAqaW50ZXJmYWNlKiAob3JpZ2luYWwsIHdp cmVkIDM2MCwgd2lyZWxlc3MgMzYwKSAqLworI2RlZmluZSBYVFlQRV9YQk9YICAgICAgICAwCisj ZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKKyNkZWZpbmUgWFRZUEVfWEJPWDM2MFcgICAgMgor I2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCisKKy8qIFR5cGUgb2YgY29udHJvbGxlciAoZS5n LiBwYWQsIGd1aXRhciwgb3RoZXIgaW5wdXQgZGV2aWNlKSAqLworI2RlZmluZSBYQ09OVFJPTExF Ul9UWVBFX05PTkUJCTAKKyNkZWZpbmUgWENPTlRST0xMRVJfVFlQRV9QQUQJCTEKKyNkZWZpbmUg WENPTlRST0xMRVJfVFlQRV9HVUlUQVIJCTIKKyNkZWZpbmUgWENPTlRST0xMRVJfVFlQRV9EQU5D RV9QQUQJMworI2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX09USEVSCQkyNTUKKworCisvKiBUaGUg WGJveCAzNjAgY29udHJvbGxlcnMgaGF2ZSBzZW5zaXRpdmUgc3RpY2tzIHRoYXQgb2Z0ZW4gZG8g bm90IGNlbnRlcgorICogZXhhY3RseS4gQSBkZWFkIHpvbmUgY2F1c2VzIHN0aWNrIGV2ZW50cyBi ZWxvdyBhIGNlcnRhaW4gdGhyZXNoaG9sZCB0byBiZQorICogcmVwb3J0ZWQgYXMgemVyby4KKyAq CisgKiBUaGUgZGVmYXVsdCBkZWFkIHpvbmUgc2l6ZSBpcyA4MTkyLCB3aGljaCB3YXMgb2J0YWlu ZWQgYnkgdGVzdGluZyBhCisgKiB3aXJlbGVzcyAzNjAgY29udHJvbGxlciB3aXRoIGpzdGVzdCgx KSBhbmQgY29uc3VsdGluZyBnYW1pbmcgZm9ydW1zIGZvcgorICogYSByZWNvbW1lbmRlZCBkZWFk IHpvbmUgZm9yIHRoaXMgY29udHJvbGxlci4gVGhlIGNvbnNlbnN1cyBvcGluaW9uIHdhcworICog MC4yNSAob24gYSBzY2FsZSBmcm9tIDAgdG8gMSksIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDgxOTIg KG91dCBvZiAzMjc2NykuCisgKi8KKyNkZWZpbmUgWERFQURfWk9ORV9ERUZBVUxUICAgODE5Mgor CisvKiBEZWZhdWx0IGxpbWl0IGZvciB0aGUgc3RpY2tzIGlzIHRoZSBtYXhpbXVtIGF4aXMgdmFs dWUgKDMyNzY3KSwgd2hpY2ggd2lsbAorICogY2F1c2UgdGhlIHN0aWNrcyB0byBoYXZlIGEgcmFk aWFsIGF4aXMgYXMgZGVzaWduZWQgaW4gdGhlIGhhcmR3YXJlLiBUbworICogZW5hYmxlIHNxdWFy ZSBheGlzIHN1cHBvcnQsIHNldCB0aGUgc3RpY2sgbGltaXRzIHRvIDIzMTcwIG9yIGxvd2VyIGF0 IHJ1bgorICogdGltZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgWFNUSUNL X0xJTUlUX0RFRkFVTFQgMzI3NjcKKworLyogUnVtYmxlIG5vcm1hbGx5IGVuYWJsZWQgKi8KKyNk ZWZpbmUgWFJVTUJMRV9ERUZBVUxUCQkxCisKKworLyogVGhpcyBtb2R1bGUgcGFyYW1ldGVyIGlz IHNvbWV0aGluZyBvZiBhIHJlbGljLCBidXQgaXQgcmVtYWlucyBmb3IKKyAqIGNvbXBhdGliaWxp dHkuIEltcG9ydGFudGx5LCB0aGUgb3B0aW9uIHRvIG1hcCB0aGUgRC1QQUQgYnV0dG9ucyBhcHBs aWVzCisgKiBvbmx5IHRvIGNvbnRyb2xsZXIgKmludGVyZmFjZXMqIChpLmUuIHZlbmRvciBhbmQg cHJvZHVjdCBjb2Rlcykgbm90CisgKiBleHBsaWNpdGx5IHByZXNlbnQgaW4geHBhZF9kZXZpY2Vb XS4gKi8KK3N0YXRpYyBpbnQgZHBhZF90b19idXR0b25zOworbW9kdWxlX3BhcmFtKGRwYWRfdG9f YnV0dG9ucywgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9u cywKKwkiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5rbm93biBw YWRzIik7CisKKworLyogVGFibGUgb2YgdmFyaW91cyBkZXZpY2UgaW50ZXJmYWNlcyByZWNvZ25p emVkIGJ5IHRoaXMgZHJpdmVyLiBFYWNoIHN1cHBvcnRlZAorICogZGV2aWNlIGhhcyBhIGRpcmVj dGlvbmFsIHBhZCBtYXBwaW5nLCBpbnRlcmZhY2UgdHlwZSwgYW5kIGNvbnRyb2xsZXIgdHlwZS4K KyAqIE5vdGUgdGhhdCB3aXJlbGVzcyAzNjAgZGV2aWNlcyBoYXZlIFhDT05UUk9MTEVSX1RZUEVf Tk9ORSwgYXMgdGhlIGFjdHVhbAorICogdHlwZSBvZiB0aGUgZ2FtaW5nIGNvbnRyb2xsZXIgaXMg bm90IGtub3duIHVudGlsIHRoZSBjb250cm9sbGVyIGJpbmRzCisgKiB3aXJlbGVzc2x5IHdpdGgg dGhlIHJlY2VpdmVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHBhZF9kZXZpY2UgeworCXUx NiBpZFZlbmRvcjsKKwl1MTYgaWRQcm9kdWN0OworCWNoYXIgKm5hbWU7CisJdTggZHBhZF9tYXBw aW5nOworCXU4IHh0eXBlOworCXU4IGNvbnRyb2xsZXJfdHlwZTsKK30geHBhZF9kZXZpY2VbXSA9 IHsKKwl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMpIiwgTUFQ X0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7 IDB4MDQ1ZSwgMHgwMjg5LCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MiAoVVMpIiwgTUFQX0RQQURf VE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1 ZSwgMHgwMjg1LCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoSmFwYW4pIiwgTUFQX0RQQURfVE9fQVhF UywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgw Mjg3LCAiTWljcm9zb2Z0IFhib3ggQ29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJ WFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwNzE5LCAi WGJveCAzNjAgV2lyZWxlc3MgUmVjZWl2ZXIiLCBNQVBfRFBBRF9UT19CVVRUT05TLAorCQlYVFlQ RV9YQk9YMzYwVywgWENPTlRST0xMRVJfVFlQRV9OT05FIH0sCisJeyAweDBjMTIsIDB4ODgwOSwg IlJlZE9jdGFuZSBYYm94IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsCisJCVhUWVBF X1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfREFOQ0VfUEFEIH0sCisJeyAweDA0NGYsIDB4MGYwNywg IlRocnVzdG1hc3RlciwgSW5jLiBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDQ2ZCwgMHhjMjQyLCAiTG9n aXRlY2ggQ2hpbGxzdHJlYW0gQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBF X1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NmQsIDB4Y2E4NCwgIkxv Z2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhU WVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NmQsIDB4Y2E4OCwgIkxv Z2l0ZWNoIENvbXBhY3QgQ29udHJvbGxlciBmb3IgWGJveCIsCisJCU1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA1ZmQsIDB4MTAwNywg Ik1hZCBDYXR6IENvbnRyb2xsZXIgKHVudmVyaWZpZWQpIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJ WFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDVmZCwgMHgxMDdhLCAi SW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsCisJCU1BUF9EUEFE X1RPX0FYRVMsIFhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA3Mzgs IDB4NDUxNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVf WEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg0NTIyLCAiTWFk IENhdHogTHVtaUNPTiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFk IFBybyIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDA3MzgsIDB4NDUzNiwgIk1hZCBDYXR6IE1pY3JvQ09OIiwgTUFQX0RQQURf VE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDcz OCwgMHg0NTQwLCAiTWFkIENhdHogQmVhdCBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQ RV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1 NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVT LAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ3 MTYsICJNYWQgQ2F0eiBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwKKwkJTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwg MHg2MDQwLCAiTWFkIENhdHogQmVhdCBQYWQgUHJvIiwgTUFQX0RQQURfVE9fQlVUVE9OUywKKwkJ WFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4 ODAyLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4ODBhLCAiUGVs aWNhbiBFY2xpcHNlIFBMLTIwMjMiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBY Q09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwYzEyLCAweDg4MTAsICJaZXJvcGx1cyBYYm94 IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExF Ul9UWVBFX1BBRCB9LAorCXsgMHgwYzEyLCAweDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkg SEFSRFdBUkUqIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJf VFlQRV9QQUQgfSwKKwl7IDB4MGU0YywgMHgxMDk3LCAiUmFkaWNhIEdhbWVzdGVyIENvbnRyb2xs ZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BB RCB9LAorCXsgMHgwZTRjLCAweDIzOTAsICJSYWRpY2EgR2FtZXMgSnRlY2ggQ29udHJvbGxlciIs IE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0s CisJeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmlyZCB3aXJlbGVzcyBDb250cm9sbGVy IiwKKwkJTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQg fSwKKwl7IDB4MGU2ZiwgMHgwMDA1LCAiRWNsaXBzZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQ X0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7 IDB4MGU2ZiwgMHgwMDA2LCAiRWRnZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9f QVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU2Ziwg MHgwMDA2LCAiUGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwKKwkJTUFQ X0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7 IDB4MGU4ZiwgMHgwMjAxLCAiU21hcnRKb3kgRnJhZyBYcGFkL1BTMiBhZGFwdG9yIiwgTUFQX0RQ QURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4 MGYzMCwgMHgwMjAyLCAiSm95dGVjaCBBZHZhbmNlZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9f QVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGYzMCwg MHg4ODg4LCAiQmlnQmVuIFhCTWluaVBhZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywK KwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MTAyYywgMHhmZjBj LCAiSm95dGVjaCBXaXJlbGVzcyBBZHZhbmNlZCBDb250cm9sbGVyIiwKKwkJTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MTJhYiwgMHg4 ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9Y LAorCQlYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgxNDMwLCAweDQ3NDgsICJS ZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQ RV9YQk9YMzYwLCBYQ09OVFJPTExFUl9UWVBFX0dVSVRBUiB9LAorCXsgMHgxNDMwLCAweDg4ODgs ICJUWDY1MDArIERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLAorCQlNQVBfRFBBRF9UT19C VVRUT05TLCBYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgw NDVlLCAweDAyOGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIE1BUF9EUEFEX1RPX0FYRVMs CisJCVhUWVBFX1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweGZmZmYsIDB4 ZmZmZiwgIkNoaW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAor CQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwMDAwLCAweDAwMDAs ICJHZW5lcmljIFgtQm94IHBhZCIsIE1BUF9EUEFEX1VOS05PV04sIFhUWVBFX1VOS05PV04sCisJ CVhDT05UUk9MTEVSX1RZUEVfUEFEIH0KK307CisKKworLyogYnV0dG9ucyBzaGFyZWQgd2l0aCB4 Ym94IGFuZCB4Ym94MzYwICovCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfY29tbW9u X2J0bltdID0geworCUJUTl9BLCBCVE5fQiwgQlROX1gsIEJUTl9ZLAkJCS8qICJhbmFsb2ciIGJ1 dHRvbnMgKi8KKwlCVE5fU1RBUlQsIEJUTl9CQUNLLCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSLAkv KiBzdGFydC9iYWNrL3N0aWNrcyAqLworCS0xCQkJCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8K K307CisKKy8qIG9yaWdpbmFsIHhib3ggY29udHJvbGxlcnMgb25seSAqLworc3RhdGljIGNvbnN0 IHNpZ25lZCBzaG9ydCB4cGFkX2J0bltdID0geworCUJUTl9DLCBCVE5fWiwJCS8qICJhbmFsb2ci IGJ1dHRvbnMgKi8KKwktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBvbmx5 IHVzZWQgaWYgTUFQX0RQQURfVE9fQlVUVE9OUyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9y dCB4cGFkX2J0bl9wYWRbXSA9IHsKKwlCVE5fTEVGVCwgQlROX1JJR0hULAkJLyogZC1wYWQgbGVm dCwgcmlnaHQgKi8KKwlCVE5fMCwgQlROXzEsCQkJLyogZC1wYWQgdXAsIGRvd24gKFhYWCBuYW1l cz8/KSAqLworCS0xCQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBidXR0b25z IGZvciB4MzYwIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZDM2 MF9idG5bXSA9IHsKKwlCVE5fVEwsIEJUTl9UUiwJCS8qIEJ1dHRvbiBMQi9SQiAqLworCUJUTl9N T0RFLAkJLyogVGhlIGJpZyBYIGJ1dHRvbiAqLworCS0xCit9OworCisvKiBzdGlja3MgYW5kIHRy aWdnZXJzIGNvbW1vbiB0byBhbGwgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9y dCB4cGFkX2Fic1tdID0geworCUFCU19YLCBBQlNfWSwJCS8qIGxlZnQgc3RpY2sgKi8KKwlBQlNf UlgsIEFCU19SWSwJCS8qIHJpZ2h0IHN0aWNrICovCisJQUJTX1osIEFCU19SWiwJCS8qIHRyaWdn ZXJzIGxlZnQvcmlnaHQgKi8KKwktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisv KiBvbmx5IHVzZWQgaWYgTUFQX0RQQURfVE9fQVhFUyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBz aG9ydCB4cGFkX2Fic19wYWRbXSA9IHsKKwlBQlNfSEFUMFgsIEFCU19IQVQwWSwJLyogZC1wYWQg YXhlcyAqLworCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworLyogWGJveCAz NjAgaGFzIGEgdmVuZG9yLXNwZWNpZmljIGNsYXNzLCBzbyB3ZSBjYW5ub3QgbWF0Y2ggaXQgd2l0 aCBvbmx5CisgKiBVU0JfSU5URVJGQUNFX0lORk8gKGFsc28gc3BlY2lmaWNhbGx5IHJlZnVzZWQg YnkgVVNCIHN1YnN5c3RlbSksIHNvIHdlCisgKiBtYXRjaCBhZ2FpbnN0IHZlbmRvciBpZCBhcyB3 ZWxsLiBXaXJlZCBYYm94IDM2MCBkZXZpY2VzIGhhdmUgcHJvdG9jb2wgMSwKKyAqIHdpcmVsZXNz IGNvbnRyb2xsZXJzIGhhdmUgcHJvdG9jb2wgMTI5LiAqLworI2RlZmluZSBYUEFEX1hCT1gzNjBf VkVORE9SX1BST1RPQ09MKHZlbmQscHIpIFwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lE X01BVENIX1ZFTkRPUiB8IFwKKwkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sIFwKKwku aWRWZW5kb3IgPSAodmVuZCksIFwKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRP Ul9TUEVDLCBcCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDkzLCBcCisJLmJJbnRlcmZhY2VQcm90 b2NvbCA9IChwcikKKyNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRPUih2ZW5kKSBcCisJeyBYUEFE X1hCT1gzNjBfVkVORE9SX1BST1RPQ09MKHZlbmQsIDEpIH0sIFwKKwl7IFhQQURfWEJPWDM2MF9W RU5ET1JfUFJPVE9DT0wodmVuZCwgMTI5KSB9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9p ZCB4cGFkX3RhYmxlW10gPSB7CisJCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQgY2xhc3Mg Ki8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygnWCcsICdCJywgMCkgfSwKKwlYUEFEX1hCT1gzNjBf VkVORE9SKDB4MDQ1ZSksCS8qIE1pY3Jvc29mdCBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwlY UEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ2ZCksCS8qIExvZ2l0ZWNoIDM2MCBzdHlsZSBjb250cm9s bGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJLyogTWFkIENhdHogWC1Cb3gg MzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkvKiAweDBl NmYgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDE0MzAp LAkvKiBSZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJeyB9Cit9OworCitNT0RV TEVfREVWSUNFX1RBQkxFKHVzYiwgeHBhZF90YWJsZSk7CisKKworLyogV2lyZWxlc3MgMzYwIGRl dmljZSBpZGVudGlmaWNhdGlvbi4KKyAqCisgKiBXaGVuIGEgd2lyZWxlc3MgY29udHJvbGxlciBj b25uZWN0cywgdGhlIDJuZCBwYWNrZXQgaXQgc2VuZHMgU0VFTVMgdG8KKyAqIGJlIHNvbWUga2lu ZCBvZiB1bmlxdWUgY29udHJvbGxlciBpZGVudGlmaWNhdGlvbiBtZXNzYWdlLiBVc2luZyB1c2Jt b24KKyAqIChzZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCksIEkgdHJpZWQgNCBnYW1l cGFkcyBhbmQgYSBndWl0YXIsIGFuZAorICogSSBjb2xsZWN0ZWQgdGhlIGZvbGxvd2luZyA1IElE IHBhY2tldHMgZnJvbSB0aGUgNSBkZXZpY2VzOgorICoKKyAqIDAwMGYwMGYwIDAwY2NmZDI3IDAw NjBlMjI2IDYzNzAwMDEwIDEzZTMyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBm MCBmMGNjZmQyNyAwMDYwZDhjNCBlOTYwMDAwOSAxM2U3MjAxZCAzMDAzNDAwMSA1MDAxZmZmZiBm ZgorICogMDAwZjAwZjAgMDBjY2ZkMjcgMDA2MDU3OGIgODJmMDAwMTAgMTNlMzIwMWQgMzAwMzQw MDEgNTAwMWZmZmYgZmYKKyAqIDAwMGYwMGYwIGYwY2NmZDI3IDAwNjBkYTFjIGIxNTAwMDA5IDEz ZTcyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAwMDYwMDJk MSA3MWQxMDAwMCAxM2UzMjAxZCAzMDAzNDQzMCA1MTA3ZmZmZiBmZgorICoKKyAqIEZyb20gdGhp cyB0cmFjZSBkYXRhLCBJIGNvbmNvY3RlZCB0aGUgZm9sbG93aW5nIChwb3RlbnRpYWxseSBpbmNv cnJlY3QpCisgKiBzY2hlbWUgZm9yIGRldGVjdGluZyB0eXBlIGFuZCB1bmlxdWUgSUQ6CisgKgor ICogKioqKioqKiogeHgqKioqeHggeHh4eHh4eHggeHh4eCoqeHggKip4eCoqKiogKioqKnR0dHQg dHR0dCoqKiogKioKKyAqICAgICAgICAgICAgICAgIHwgIHVuaXF1ZSBpZCB8ICAgICAgICAgICAg ICAgICAgICB8ICB0eXBlIHwKKyAqCisgKiBJdCBhcHBlYXJzIHRoYXQgc29tZSBvZiB0aGUgYnl0 ZXMgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIG1lc3NhZ2UsIG5vdGVkCisgKiBhYm92ZSBhcyAi dW5pcXVlIGlkIiBhcmUgc29tZSBzb3J0IG9mIHNlcmlhbCBudW1iZXIsIHRob3VnaCBJIGNhbm5v dCB3b3JrCisgKiBvdXQgYW55IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlc2UgYnl0ZXMgYW5k IHRoZSBzZXJpYWwgbnVtYmVyIHByaW50ZWQKKyAqIHVuZGVyIHRoZSBiYXR0ZXJ5IHBhY2suIE1h bnkgb2YgdGhlIGJ5dGVzIGluIHRoaXMgcG9zc2libHkgdW5pcXVlIGZpZWxkCisgKiBhcmUgbm90 IHVuaXF1ZSBhY3Jvc3MgbXkgY29udHJvbGxlcnMsIGFuZCBtYXkgbm90IGluIGZhY3QgYmUgcGFy dCBvZiB0aGUKKyAqIGNvbnRyb2xsZXIncyB1bmlxdWUgaWRlbnRpZmljYXRpb24sIGJ1dCBJIGZp Z3VyZWQgaXQgd2FzIGJldHRlciB0byBoYXZlCisgKiBleHRyYSBieXRlcyBvbiBlaXRoZXIgZW5k IG9mIHRoZSB1bmlxdWUgYnl0ZSBzdHJpbmcgaW5zdGVhZCBvZiB0aGUKKyAqIGFsdGVybmF0aXZl LiBJbiBhZGRpdGlvbiwgdGhlIHBhY2tldCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9m CisgKiB0aGUgY29udHJvbGxlciB0b3dhcmQgdGhlIGVuZDogdGhlIHBhZHMgYWxsIHNlbmQgNDAw MSA1MDAxLCB3aGlsZSB0aGUKKyAqIGd1aXRhciBzZW5kcyA0NDMwIDUxMDcuCisgKgorICogRnVy dGhlciB0ZXN0aW5nIG92ZXIgYSB3aWRlciB2YXJpZXR5IG9mIGRldmljZXMgaXMgcHJvYmFibHkg bmVlZGVkIHRvCisgKiBkZXRlcm1pbmUgaWYgY2hhbmdlcyBuZWVkIHRvIGJlIG1hZGUgdG8gdGhp cyBzY2hlbWUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdzM2MF9pZCB7CisJdTMyIGlkX2J5 dGVzOworCXU4IGNvbnRyb2xsZXJfdHlwZTsKK30gdzM2MF9pZFtdID0geworCXsgMHg0MDAxNTAw MSwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4NDQzMDUxMDcsIFhDT05UUk9MTEVSX1RZ UEVfR1VJVEFSIH0sCisJeyAweDAwMDAwMDAwLCBYQ09OVFJPTExFUl9UWVBFX05PTkUgfQorfTsK KworCisvKiBTb21lIG9mIHRoZSBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgYXJl IGZvciBsYXRlciB1c2Ugd2l0aAorICogdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0byByZWNvZ25p emUgaW5kaXZpZHVhbCBjb250cm9sbGVycy4gVGhlIGRlYWQgem9uZXMKKyAqIGFuZCBheGlzIGxp bWl0cyBjYW4gYmUgY2hhbmdlZCAib24gdGhlIGZseSIgYW5kIGFyZSBlZmZlY3RpdmUgaW1tZWRp YXRlbHkuCisgKgorICogVGhlIGZpZWxkcyBsYWJlbGVkICJybyIgYW5kICJydyIgYXJlIGludGVu ZGVkIHRvIGJlIHJlYWQtb25seSBhbmQKKyAqIHJlYWQtd3JpdGUsIHJlc3BlY3RpdmVseSwgd2hl biBleHBvc2VkIGluIHN5c2ZzLiBNb3N0IG9mIHRoZSByZWFkLW9ubHkKKyAqIGZpZWxkcyBhcmUg dG8gc3VwcG9ydCAqd2lyZWxlc3MqIDM2MCBjb250cm9sbGVycy4gVGhlIGNvbnRyb2xsZXJfbnVt YmVyCisgKiBpcyB1c2VkIHRvIHNldCB0aGUgTEVELCB3aGlsZSBjb250cm9sbGVyX3ByZXNlbnQg dHJhY2tzIHdoZXRoZXIgdGhlCisgKiBjb250cm9sbGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgd2ly ZWxlc3MgcmVjZWl2ZXIuIENvbnRyb2xsZXIgdHlwZSBhcHBsaWVzCisgKiB0byBhbGwgbW9kZWxz ICh3aXJlZCBhbmQgd2lyZWxlc3MpLCBhbmQgdHJhY2tzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBh IHBhZCwKKyAqIGd1aXRhciwgZXRjLiBmb3IgbGF0ZXIgdXNlcnNwYWNlIHVzZS4gU2VlIHRoZSBj b21tZW50IGFib3ZlIHJlZ2FyZGluZworICogdHlwZSBhbmQgdW5pcXVlIElEIGRldGVjdGlvbiBv biB3aXJlbGVzcyAzNjAgcmVjZWl2ZXJzLgorICovCitzdHJ1Y3QgdXNiX3hwYWQgeworCXN0cnVj dCBpbnB1dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3Qg dXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLworCisJc3RydWN0IHVyYiAqaXJxX2lu OwkJLyogdXJiIGZvciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICovCisJdW5zaWduZWQgY2hhciAqaWRh dGE7CQkvKiBpbnB1dCBkYXRhICovCisJZG1hX2FkZHJfdCBpZGF0YV9kbWE7CisKKyNpZiBkZWZp bmVkKENPTkZJR19KT1lTVElDS19YUEFEX0ZGKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19Y UEFEX0xFRFMpCisJc3RydWN0IHVyYiAqaXJxX291dDsJCS8qIHVyYiBmb3IgaW50ZXJydXB0IG91 dCByZXBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyICpvZGF0YTsJCS8qIG91dHB1dCBkYXRhICovCisJ ZG1hX2FkZHJfdCBvZGF0YV9kbWE7CisJc3RydWN0IG11dGV4IG9kYXRhX211dGV4OworI2VuZGlm CisKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCisJc3RydWN0IHhwYWRf bGVkICpsZWQ7CisjZW5kaWYKKworCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNl IHBhdGggKi8KKworCWludCBkcGFkX21hcHBpbmc7CQkvKiBtYXAgZC1wYWQgdG8gYnV0dG9ucyBv ciB0byBheGVzICovCisJaW50IHh0eXBlOwkJCS8qIHR5cGUgb2YgeGJveCBkZXZpY2UgKi8KKwor CS8qIFdvcmsgc3RydWN0dXJlIGZvciBtb3ZpbmcgdGhlIGNhbGwgdG8geHBhZF9zZW5kX2xlZF9j b21tYW5kCisJICogb3V0c2lkZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHBhY2tldCBwcm9j ZXNzaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IHdvcmtfcGVuZGluZzsK KworCWludCBjb250cm9sbGVyX251bWJlcjsJCS8qIGNvbnRyb2xsZXIgIyAoMS00KSBmb3IgMzYw dy4gcm8gKi8KKwlpbnQgY29udHJvbGxlcl9wcmVzZW50OyAgICAgICAgIC8qIDM2MHcgY29udHJv bGxlciBwcmVzZW5jZS4gcm8gKi8KKwlpbnQgY29udHJvbGxlcl90eXBlOyAgICAgICAgICAgIC8q IGNvbnRyb2xsZXIgdHlwZS4gcm8gKi8KKwljaGFyIGNvbnRyb2xsZXJfdW5pcXVlX2lkWzE3XTsg IC8qIHVuaXF1ZSBJRCBvZiBjb250cm9sbGVyICgzNjB3KS4gcm8gKi8KKwl1bnNpZ25lZCBpbnQg bGVmdF9kZWFkX3pvbmU7ICAgIC8qIGRlYWQgem9uZSBmb3IgbGVmdCBzdGljay4gcncgKi8KKwl1 bnNpZ25lZCBpbnQgcmlnaHRfZGVhZF96b25lOyAgIC8qIGRlYWQgem9uZSBmb3IgcmlnaHQgc3Rp Y2suIHJ3ICovCisJdW5zaWduZWQgaW50IGxlZnRfc3RpY2tfbGltaXQ7ICAvKiBheGlzIGxpbWl0 IGZvciBsZWZ0IHN0aWNrLiBydyAqLworCXVuc2lnbmVkIGludCByaWdodF9zdGlja19saW1pdDsg LyogYXhpcyBsaW1pdCBmb3IgcmlnaHQgc3RpY2suIHJ3ICovCisJaW50IHJ1bWJsZV9lbmFibGU7 ICAgICAgICAgICAgICAvKiBlbmFibGUvZGlzYWJsZSBydW1ibGUuIHJ3ICovCisKKwlpbnQgc3lz ZnNfb2s7ICAgICAgICAgICAgICAgICAgIC8qIHN5c2ZzIGludGVyZmFjZSBPSyAqLworfTsKKyNk ZWZpbmUgdG9feHBhZChkKSBpbnB1dF9nZXRfZHJ2ZGF0YSh0b19pbnB1dF9kZXYoZCkpCisKKwor LyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igbm9uLXN5c2ZzIGludGVyZmFjZSBmdW5jdGlvbnMg Ki8KK3N0YXRpYyB2b2lkIHNldF9kZWFkX3pvbmUodW5zaWduZWQgaW50IG5ld19zaXplLCB1bnNp Z25lZCBpbnQgKmR6LAorCXVuc2lnbmVkIGludCBzdGlja19saW1pdCk7CitzdGF0aWMgdm9pZCBz ZXRfc3RpY2tfbGltaXQodW5zaWduZWQgaW50IG5ld19zaXplLCB1bnNpZ25lZCBpbnQgKnNsLAor CXVuc2lnbmVkIGludCBkZWFkX3pvbmUpOworc3RhdGljIHZvaWQgeHBhZF9pbml0X2NvbnRyb2xs ZXIoc3RydWN0IHVzYl94cGFkICp4cGFkKTsKK3N0YXRpYyB2b2lkIHhwYWRfc2VuZF9sZWRfY29t bWFuZChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIGludCBjb21tYW5kKTsKK3N0YXRpYyB2b2lkIHhw YWRfd29ya19jb250cm9sbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7CitzdGF0aWMgdm9pZCB4 cGFkX3Byb2Nlc3Nfc3RpY2tzKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgdW5zaWduZWQgY2hhciAq ZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBhZCAq eHBhZCwgdTE2IGNtZCwKKwl1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3N0YXRpYyB2b2lkIHhwYWQz NjBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLAorCXUxNiBjbWQsIHVuc2ln bmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgeHBhZDM2MHdfaWRlbnRpZnlfY29udHJvbGxl cihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsCisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMg dm9pZCB4cGFkMzYwd19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBj bWQsCisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkX2lycV9pbihzdHJ1 Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgeHBhZF9pcnFfb3V0KHN0cnVjdCB1cmIgKnVyYik7 CitzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYs IHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVj dCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qoc3RydWN0IGlu cHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVj dCk7CitzdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3Rh dGljIHZvaWQgeHBhZF9zZW5kX2xlZF9jb21tYW5kKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgaW50 IGNvbW1hbmQpOworc3RhdGljIHZvaWQgeHBhZF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYg KmxlZF9jZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpOworc3RhdGljIGludCB4cGFk X2xlZF9wcm9iZShzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQgeHBhZF9sZWRf ZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIGludCB4cGFkX29wZW4o c3RydWN0IGlucHV0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfY2xvc2Uoc3RydWN0IGlu cHV0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfc2V0X3VwX2FicyhzdHJ1Y3QgaW5wdXRf ZGV2ICppbnB1dF9kZXYsIHNpZ25lZCBzaG9ydCBhYnMpOworc3RhdGljIGludCB4cGFkX3Byb2Jl KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lk ICppZCk7CitzdGF0aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGYpOworc3RhdGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2b2lkKTsKK3N0YXRpYyB2 b2lkIF9fZXhpdCB1c2JfeHBhZF9leGl0KHZvaWQpOworCisKKy8qIHN5c2ZzIGludGVyZmFjZSAq Lworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3VpbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90 IHhwYWRfc3RvcmVfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMgc3Np emVfdCB4cGFkX3N0b3JlX3J1bWJsZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQp Oworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCk7CitzdGF0aWMgc3NpemVfdCB4cGFkX3Nob3dfaW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVf dCB4cGFkX3Nob3dfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKKworCisKKy8qIERldmljZSBhdHRyaWJ1dGVzICovCitz dGF0aWMgREVWSUNFX0FUVFIobGVmdF9kZWFkX3pvbmUsIDA2NjYsIHhwYWRfc2hvd191aW50LCB4 cGFkX3N0b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJpZ2h0X2RlYWRfem9uZSwgMDY2 NiwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7CitzdGF0aWMgREVWSUNFX0FUVFIo bGVmdF9zdGlja19saW1pdCwgMDY2NiwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7 CitzdGF0aWMgREVWSUNFX0FUVFIocmlnaHRfc3RpY2tfbGltaXQsIDA2NjYsIHhwYWRfc2hvd191 aW50LCB4cGFkX3N0b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJ1bWJsZV9lbmFibGUs IDA2NjYsIHhwYWRfc2hvd19pbnQsCisJCQl4cGFkX3N0b3JlX3J1bWJsZV9lbmFibGUpOworc3Rh dGljIERFVklDRV9BVFRSKGNvbnRyb2xsZXJfbnVtYmVyLCAwNDQ0LCB4cGFkX3Nob3dfaW50LCB4 cGFkX3N0b3JlX3JvKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sbGVyX3ByZXNlbnQsIDA0 NDQsIHhwYWRfc2hvd19pbnQsIHhwYWRfc3RvcmVfcm8pOworc3RhdGljIERFVklDRV9BVFRSKGNv bnRyb2xsZXJfdHlwZSwgMDQ0NCwgeHBhZF9zaG93X2ludCwgeHBhZF9zdG9yZV9ybyk7CitzdGF0 aWMgREVWSUNFX0FUVFIoaWQsIDA0NDQsIHhwYWRfc2hvd19pZCwgeHBhZF9zdG9yZV9ybyk7CisK K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp4cGFkX2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmZGV2 X2F0dHJfbGVmdF9kZWFkX3pvbmUuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfZGVhZF96b25lLmF0 dHIsCisJJmRldl9hdHRyX2xlZnRfc3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRf c3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZS5hdHRyLAorCSZkZXZf YXR0cl9jb250cm9sbGVyX251bWJlci5hdHRyLAorCSZkZXZfYXR0cl9jb250cm9sbGVyX3ByZXNl bnQuYXR0ciwKKwkmZGV2X2F0dHJfY29udHJvbGxlcl90eXBlLmF0dHIsCisJJmRldl9hdHRyX2lk LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgeHBhZF9k ZWZhdWx0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0geHBhZF9kZWZhdWx0X2F0dHJzLAorCS5u YW1lID0gImdhbWVfZGV2aWNlIiwKK307CisKKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIg eHBhZF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInhwYWQiLAorCS5wcm9iZQkJPSB4cGFkX3Byb2Jl LAorCS5kaXNjb25uZWN0CT0geHBhZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHhwYWRfdGFi bGUsCit9OworCittb2R1bGVfaW5pdCh1c2JfeHBhZF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl94 cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NS SVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2VuZGlmCisK Ky8qIERyaXZlciBIaXN0b3J5OgorICoKKyAqIDIwMDktMDItMjMgOiBDaGFuZ2VzIHBlciBtYWls aW5nIGxpc3QgKHRoYW5rcyBGcmVkZXJpYyBXZWlzYmVja2VyKQorICogIC0gbm8gbW9yZSBjaGVj ayBmb3IgQ09ORklHX1NZU0ZTOiBzeXNmcyBmdW5jdGlvbnMgd2lsbCBzaW1wbHkgcmV0dXJuCisg KiAgICAwIGlmIHN5c2ZzIGhhcyBub3QgYmVlbiBlbmFibGVkCisgKiAgLSBmaXhlZCB3ZWlyZCBv cmRlcmluZyBpbiBzc2NhbmYgcmV0dXJuIGNoZWNrCisgKiAgLSBjaGVja2VkIGNvZGUgd2l0aCBz Y3JpcHRzL2NoZWNrcGF0Y2gucGwgYW5kIG1hZGUgc3R5bGUgYWRqdXN0bWVudHMKKyAqCisgKiAy MDA5LTAyLTIxIDogUmVmYWN0b3JlZCBhbmQgY2hhbmdlZCBzdGljayBoYW5kbGluZworICogIC0g c3BsaXQgY29kZSBpbnRvIHR3byBwaWVjZXMgKHhwYWQuaCBhbmQgeHBhZC5jKQorICogIC0gY2xl YW5lZCB1cCBzeXNmcyBpbnRlcmZhY2UKKyAqICAtIGNoYW5nZWQgc3F1YXJlIGF4aXMgYWxnb3Jp dGhtIHRvIGFuIGF4aXMgbGltaXQgYWxnb3JpdGhtLCB3aGljaCBhbGxvd3MKKyAqICAgIHNpemUg b2YgaW5zY3JpYmVkIHNxdWFyZSB0byBiZSBhZGp1c3RlZDsgYXZhaWxhYmxlIGZvciBib3RoIHN0 aWNrcworICogIC0gZGVhZCB6b25lcyBub3cgcGVyLXN0aWNrCisgKgorICogMjAwOS0wMi0xOCA6 IENoYW5nZXMgcGVyIG1haWxpbmcgbGlzdCAoYW5kIHNvbWUgYWRkaXRpb25zKQorICogIC0gcmV2 aXNlZCBzeXNmcyBpbnRlcmZhY2UgKHRoYW5rcyBHcmVnIEstSCkKKyAqICAtIGNoZWNrIHJldHVy biB2YWx1ZXMgb2Ygc3NjYW5mICh0aGFua3MgT2xpdmVyIE5ldWt1bSkKKyAqICAtIHVyYiBzdWJt aXNzaW9uIHdoaWxlIGhvbGRpbmcgbXV0ZXggbm93IG9uY2UgYWdhaW4gR0ZQX0tFUk5FTAorICog ICAgKHRoYW5rcyBPbGl2ZXIgTmV1a3VtKQorICogIC0gd29yayBzdHJ1Y3R1cmUgZml4ZXMgKHRo YW5rcyBPbGl2ZXIgTmV1a3VtKQorICogIC0gdWV2ZW50cyBnZW5lcmF0ZWQgZm9yIHdpcmVsZXNz IGNvbnRyb2xsZXIgb25saW5lL29mZmxpbmUKKyAqICAtIHN5c2ZzIGludGVyZmFjZSBvbmx5IGlm IENPTkZJR19TWVNGUyBpcyBzZXQKKyAqCisgKiAyMDA5LTAyLTE1IDogTWlub3IgYWRqdXN0bWVu dHMKKyAqICAtIGFkZGVkIEtPQkpfT05MSU5FL0tPQkpfT0ZGTElORSBldmVudHMgd2hlbiBjb250 cm9sbGVycyBhcmUgY29ubmVjdGVkIHRvCisgKiAgICBvciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUg d2lyZWxlc3MgMzYwIHJlY2VpdmVyCisgKiAgLSBpZ25vcmUgZHVwbGljYXRlIGNvbm5lY3QgbWVz c2FnZXMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorICogIC0gYWRkZWQgb3B0aW9uIHRvIGVuYWJs ZS9kaXNhYmxlIHJ1bWJsZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzCisgKiAgLSBydW1ibGUg ZXZlbnRzIGFyZSBub3Qgc2VudCB0byBndWl0YXIgb3IgZGFuY2UgcGFkIGRldmljZXMKKyAqCisg KiAyMDA5LTAyLTE0IDogQWRkZWQgc3lzZnMgaW50ZXJmYWNlCisgKiAgLSBkZWFkIHpvbmVzIGFu ZCBzcXVhcmUgYXhpcyBzZXR0aW5ncyBjYW4gbm93IGJlIG1hZGUgcGVyLWNvbnRyb2xsZXIKKyAq ICAtIHJlbW92ZWQgZGVhZF96b25lIGFuZCBzcXVhcmVfYXhpcyBtb2R1bGUgcGFyYW1ldGVycyAo dXNlIHN5c2ZzKQorICogIC0gbmV3IHNxdWFyZSBheGlzIGFsZ29yaXRobQorICoKKyAqIDIwMDkt MDItMTMgOiBEaXNhYmxlIHNxdWFyZSBheGlzIGZvciByaWdodCBzdGljaworICogIC0gc3F1YXJl IGF4aXMgYXBwbGllcyB0byBsZWZ0IHN0aWNrIG9ubHkKKyAqCisgKiAyMDA5LTAyLTEyIDogU2Nh bGluZyBmb3IgZGVhZCB6b25lIGFuZCBzcXVhcmUgYXhpcyBzdXBwb3J0CisgKiAgLSBheGVzIG5v dyBzY2FsZSBmcm9tIDAgdG8gMzI3Njcgc3RhcnRpbmcgYXQgZWRnZSBvZiBkZWFkIHpvbmUKKyAq ICAtIGluY3JlYXNlZCBkZWZhdWx0IGRlYWQgem9uZSB0byA4MTkyCisgKiAgLSBpbml0aWFsIHNx dWFyZSBheGlzIHN1cHBvcnQgKHJlbGlhYmxlIG9ubHkgd2l0aCBsZWZ0IHN0aWNrKQorICoKKyAq IDIwMDktMDItMDcgOiBNb3JlIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIGZpeGVzCisgKiAgLSBy ZW1vdmVkIGJ1bGsgdXJiIGNvbXBsZXRlbHkKKyAqICAtIHVzZSB4cGFkX3NlbmRfbGVkX2NvbW1h bmQgdG8gc2V0IGNvbnRyb2xsZXIgbnVtYmVyIG9uIExFRCBkaXNwbGF5CisgKiAgICAod2lyZWxl c3MgMzYwIGNvbnRyb2xsZXIpCisgKiAgLSBkZWFkX3pvbmUgaXMgbm93IGFuIGFkanVzdGFibGUg bW9kdWxlIHBhcmFtZXRlcgorICoKKyAqIDIwMDktMDItMDYgOiBBeGlzIGhhbmRsaW5nIGltcHJv dmVtZW50cworICogIC0gdW5pZmllZCBoYW5kbGVyIGZvciBsZWZ0IGFuZCByaWdodCBzdGlja3MK KyAqICAtIGluaXRpYWwgc3VwcG9ydCBmb3IgZGVhZCB6b25lcworICoKKyAqIDIwMDktMDItMDIg OiBXaXJlbGVzcyAzNjAgY29udHJvbGxlciBmaXhlcworICogIC0gZm9sbG93ZWQgUFJPVE9DT0wg ZGVzY3JpcHRpb24gZnJvbSB4Ym94ZHJ2IHVzZXJzcGFjZSBkcml2ZXIKKyAqICAtIExFRCBhbmQg cnVtYmxlIHN1cHBvcnQgYWRkZWQgZm9yIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIChwcm90b2Nv bAorICogICAgaXMgZGlmZmVyZW50IGZyb20gd2lyZWQhKQorICoKKyAqIDIwMDQtMTAtMDIgLSAw LjAuNiA6IEREUiBwYWQgc3VwcG9ydAorICogIC0gYm9ycm93ZWQgZnJvbSB0aGUgWEJPWCBsaW51 eCBrZXJuZWwKKyAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2VkIGRhbmNlIHBhZHMgYXJl IHByZXNlbnQKKyAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQgdG8gYnV0dG9ucywgbm90 IGF4ZXMKKyAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2RwYWRfdG9fYnV0dG9ucycg dG8gZm9yY2UKKyAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9ucyBpZiB5b3VyIHBhZCBp cyBub3QgZGV0ZWN0ZWQKKyAqCisgKiAyMDAyLTA3LTE3IC0gMC4wLjUgOiBzaW1wbGlmaWVkIGQt cGFkIGhhbmRsaW5nCisgKgorICogMjAwMi0wNy0xNiAtIDAuMC40IDogbWlub3IgY2hhbmdlcywg bWVyZ2Ugd2l0aCBWb2p0ZWNoJ3MgdjAuMC4zCisgKiAgLSB2ZXJpZmllZCB0aGUgbGFjayBvZiBI SUQgYW5kIHJlcG9ydCBkZXNjcmlwdG9ycworICogIC0gdmVyaWZpZWQgdGhhdCBBTEwgYnV0dG9u cyBXT1JLCisgKiAgLSBmaXhlZCBkLXBhZCB0byBheGVzIG1hcHBpbmcKKyAqCisgKiAyMDAyLTA3 LTE0IC0gMC4wLjMgOiByZXdvcmsgYnkgVm9qdGVjaCBQYXZsaWsKKyAqICAtIGluZGVudGF0aW9u IGZpeGVzCisgKiAgLSB1c2IgKyBpbnB1dCBpbml0IHNlcXVlbmNlIGZpeGVzCisgKgorICogMjAw Mi0wNy0wMiAtIDAuMC4yIDogYmFzaWMgd29ya2luZyB2ZXJzaW9uCisgKiAgLSBhbGwgYXhlcyBh bmQgOSBvZiB0aGUgMTAgYnV0dG9ucyB3b3JrIChnZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQorICog IC0gdGhlIGJsYWNrIGJ1dHRvbiBkb2VzIG5vdCB3b3JrCisgKgorICogMjAwMi0wNi0yNyAtIDAu MC4xIDogZmlyc3QgdmVyc2lvbiwganVzdCBzYWlkICJYQk9YIEhJRCBjb250cm9sbGVyIgorICoK KyAqLwo= --0016e6464ef2a4f6690463b6e9c6--