Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S266185AbUFYDR1 (ORCPT ); Thu, 24 Jun 2004 23:17:27 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S266189AbUFYDR1 (ORCPT ); Thu, 24 Jun 2004 23:17:27 -0400 Received: from cfcafw.sgi.com ([198.149.23.1]:61467 "EHLO omx1.americas.sgi.com") by vger.kernel.org with ESMTP id S266185AbUFYDPz (ORCPT ); Thu, 24 Jun 2004 23:15:55 -0400 Date: Thu, 24 Jun 2004 22:15:41 -0500 From: Erik Jacobson To: Jesse Barnes cc: Andrew Morton , Pat Gefre , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2.6] Altix serial driver In-Reply-To: <200406231754.56837.jbarnes@engr.sgi.com> Message-ID: References: <20040623143801.74781235.akpm@osdl.org> <200406231754.56837.jbarnes@engr.sgi.com> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-2136806248-1650276762-1088133341=:343801" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 93467 Lines: 1552 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---2136806248-1650276762-1088133341=:343801 Content-Type: TEXT/PLAIN; charset=US-ASCII Andrew and LKML folks - Pat is on vacation and said he wouldn't mind if I posted the latest version of this patch. - I fixed up Kconfig (x86 problem) - I changed SYSFS_ONLY to USE_DYNAMIC_MINOR Finally, I added support for what appeared in the "early printk" patch from Jesse Barnes. That patch applied to the old driver, so I've implemented it with this new driver here. This will make it so we don't have to patch it later. I wasn't sure if Andrew still wanted me to patch devices.txt. I've separated that patch - it's the 2nd attachment. Please let me know if anything else needs attention. Signed-off-by: Erik Jacobson -- Erik Jacobson - Linux System Software - Silicon Graphics - Eagan, Minnesota ---2136806248-1650276762-1088133341=:343801 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=sn_console-erikj-patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=sn_console-erikj-patch IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBkaWZmIC1OcnUgc3R5 bGUgcGF0Y2guDQojDQojIENoYW5nZVNldA0KIyAgIDIwMDQvMDYvMjQgMTc6 Mjc6MDAtMDU6MDAgZXJpa2pAYXR0aWNhLmFtZXJpY2FzLnNnaS5jb20gDQoj ICAgU3VwcG9ydCBmb3IgdGhlICJlYXJseSBwcmludGsiIHBhdGNoIHRoYXQg SmVzc2UgQmFybmVzIG9yaWdpbmFsbHkgbWFkZQ0KIyAgIGZvciB0aGUgb2xk IGNvbnNvbGUgZHJpdmVyIC0tIG5vdyBwb3J0ZWQgdG8gdGhlIG5ldyBkcml2 ZXIuDQojIA0KIyBkcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMNCiMgICAy MDA0LzA2LzI0IDE3OjI2OjUxLTA1OjAwIGVyaWtqQGF0dGljYS5hbWVyaWNh cy5zZ2kuY29tICs3OCAtMjUNCiMgICBJbmNsdWRlIEFsdGl4IGNvbnNvbGUg ZHJpdmVyIHBhcnQgb2YgSmVzc2UgQmFybmVzJ3MgImVhcmx5X3ByaW50ayIg cGF0Y2ggc28gDQojICAgd2UgZG9uJ3QgaGF2ZSB0byBqdXN0IHBhdGNoIHRo aXMgYWdhaW4gbGF0ZXIuIA0KIyANCiMgQ2hhbmdlU2V0DQojICAgMjAwNC8w Ni8yNCAxNTowNDoyNS0wNTowMCBlcmlrakBhdHRpY2EuYW1lcmljYXMuc2dp LmNvbSANCiMgICBDb21tdW5pdHkgc3VnZ2VzdGVkIGZpeGVzIC0gU1lTRlNf T05MWSAtPiBVU0VfRFlOQU1JQ19NSU5PUiBhbmQgYSBmaXgNCiMgICB0byBh dm9pZCBicmVha2luZyB4ODYuDQojIA0KIyBkcml2ZXJzL3NlcmlhbC9zbl9j b25zb2xlLmMNCiMgICAyMDA0LzA2LzI0IDE1OjA0OjE2LTA1OjAwIGVyaWtq QGF0dGljYS5hbWVyaWNhcy5zZ2kuY29tICs5IC05DQojICAgcmUtbmFtZSBT WVNGU19PTkxZIHRvIFVTRV9EWU5BTUlDX01JTk9SDQojIA0KIyBkcml2ZXJz L3NlcmlhbC9LY29uZmlnDQojICAgMjAwNC8wNi8yNCAxNTowNDoxNi0wNTow MCBlcmlrakBhdHRpY2EuYW1lcmljYXMuc2dpLmNvbSArMSAtMA0KIyAgIFdl IG5lZWQgdG8gYWRkIGEgZGVwZW5kcyBsaW5lIHRvIGF2b2lkIHg4NiBicmVh a2FnZS4NCiMgDQojIENoYW5nZVNldA0KIyAgIDIwMDQvMDYvMTggMTc6MzQ6 NTAtMDU6MDAgZXJpa2pAYXR0aWNhLmFtZXJpY2FzLnNnaS5jb20gDQojICAg UmVtb3ZlIG9sZCBzbl9zZXJpYWwgZHJpdmVyLCBhZGQgbmV3IHNuX2NvbnNv bGUgZHJpdmVyLg0KIyANCiMgZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUNCiMg ICAyMDA0LzA2LzE4IDE3OjM0OjQxLTA1OjAwIGVyaWtqQGF0dGljYS5hbWVy aWNhcy5zZ2kuY29tICsxIC0wDQojICAgQWRkIG5ldyBzbiBjb25zb2xlIGRy aXZlciB0byBNYWtlZmlsZQ0KIyANCiMgZHJpdmVycy9zZXJpYWwvS2NvbmZp Zw0KIyAgIDIwMDQvMDYvMTggMTc6MzQ6NDEtMDU6MDAgZXJpa2pAYXR0aWNh LmFtZXJpY2FzLnNnaS5jb20gKzggLTENCiMgICBBZGQgbmV3IHNuIGNvbnNv bGUgZHJpdmVyIHRvIEtjb25maWcNCiMgDQojIGRyaXZlcnMvY2hhci9NYWtl ZmlsZQ0KIyAgIDIwMDQvMDYvMTggMTc6MzQ6NDEtMDU6MDAgZXJpa2pAYXR0 aWNhLmFtZXJpY2FzLnNnaS5jb20gKzAgLTENCiMgICBSZW1vdmUgb2xkIHNu X3NlcmlhbCBkcml2ZXIgZnJvbSBNYWtlZmlsZQ0KIyANCiMgZHJpdmVycy9j aGFyL0tjb25maWcNCiMgICAyMDA0LzA2LzE4IDE3OjM0OjQxLTA1OjAwIGVy aWtqQGF0dGljYS5hbWVyaWNhcy5zZ2kuY29tICswIC0xNg0KIyAgIFJlbW92 ZSBvbGQgc25fc2VyaWFsIGRyaXZlciBmcm9tIEtjb25maWcNCiMgDQojIGRy aXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYw0KIyAgIDIwMDQvMDYvMTggMTc6 MjI6MTYtMDU6MDAgZXJpa2pAYXR0aWNhLmFtZXJpY2FzLnNnaS5jb20gKzEx MzggLTANCiMgDQojIGRyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYw0KIyAg IDIwMDQvMDYvMTggMTc6MjI6MTYtMDU6MDAgZXJpa2pAYXR0aWNhLmFtZXJp Y2FzLnNnaS5jb20gKzAgLTANCiMgICBCaXRLZWVwZXIgZmlsZSAvZGF0YS9s d29yay9hdHRpY2EzL2VyaWtqL2xpbnV4LTIuNS1jb25zb2xlL2RyaXZlcnMv c2VyaWFsL3NuX2NvbnNvbGUuYw0KIyANCiMgQml0S2VlcGVyL2RlbGV0ZWQv LmRlbC1zbl9zZXJpYWwuY345YzUyZjE0NGFjNTViN2NiDQojICAgMjAwNC8w Ni8xOCAxNzoyMTozMy0wNTowMCBlcmlrakBhdHRpY2EuYW1lcmljYXMuc2dp LmNvbSArMCAtMA0KIyAgIERlbGV0ZTogZHJpdmVycy9jaGFyL3NuX3Nlcmlh bC5jDQojIA0KZGlmZiAtTnJ1IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9k cml2ZXJzL2NoYXIvS2NvbmZpZw0KLS0tIGEvZHJpdmVycy9jaGFyL0tjb25m aWcJMjAwNC0wNi0yNCAxNzoyODozMyAtMDU6MDANCisrKyBiL2RyaXZlcnMv Y2hhci9LY29uZmlnCTIwMDQtMDYtMjQgMTc6Mjg6MzMgLTA1OjAwDQpAQCAt MzcxLDIyICszNzEsNiBAQA0KIAkgIElmIHlvdSBoYXZlIGFuIEFsY2hlbXkg QVUxMDAwIHByb2Nlc3NvciAoTUlQUyBiYXNlZCkgYW5kIHlvdSB3YW50DQog CSAgdG8gdXNlIHNlcmlhbCBwb3J0cywgc2F5IFkuICBPdGhlcndpc2UsIHNh eSBOLg0KIA0KLWNvbmZpZyBTR0lfTDFfU0VSSUFMDQotCWJvb2wgIlNHSSBB bHRpeCBMMSBzZXJpYWwgc3VwcG9ydCINCi0JZGVwZW5kcyBvbiBTRVJJQUxf Tk9OU1RBTkRBUkQgJiYgSUE2NA0KLQloZWxwDQotCSAgSWYgeW91IGhhdmUg YW4gU0dJIEFsdGl4IGFuZCB5b3Ugd2FudCB0byB1c2UgdGhlIHNlcmlhbCBw b3J0DQotCSAgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0gY29udHJvbGxlciAo eW91IHdhbnQgdGhpcyEpLCBzYXkgWS4NCi0JICBPdGhlcndpc2UsIHNheSBO Lg0KLQ0KLWNvbmZpZyBTR0lfTDFfU0VSSUFMX0NPTlNPTEUNCi0JYm9vbCAi U0dJIEFsdGl4IEwxIHNlcmlhbCBjb25zb2xlIHN1cHBvcnQiDQotCWRlcGVu ZHMgb24gU0dJX0wxX1NFUklBTA0KLQloZWxwDQotCSAgSWYgeW91IGhhdmUg YW4gU0dJIEFsdGl4IGFuZCB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhlIHN5 c3RlbQ0KLQkgIGNvbnRyb2xsZXIgc2VyaWFsIHBvcnQgYXMgeW91ciBjb25z b2xlICh5b3Ugd2FudCB0aGlzISksDQotCSAgc2F5IFkuICBPdGhlcndpc2Us IHNheSBOLg0KLQ0KIGNvbmZpZyBBVTEwMDBfU0VSSUFMX0NPTlNPTEUNCiAJ Ym9vbCAiRW5hYmxlIEF1MTAwMCBzZXJpYWwgY29uc29sZSINCiAJZGVwZW5k cyBvbiBBVTEwMDBfVUFSVA0KZGlmZiAtTnJ1IGEvZHJpdmVycy9jaGFyL01h a2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlDQotLS0gYS9kcml2ZXJz L2NoYXIvTWFrZWZpbGUJMjAwNC0wNi0yNCAxNzoyODozMyAtMDU6MDANCisr KyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQkyMDA0LTA2LTI0IDE3OjI4OjMz IC0wNTowMA0KQEAgLTQxLDcgKzQxLDYgQEANCiBvYmotJChDT05GSUdfUklP KQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vDQogb2JqLSQoQ09ORklHX0hW Q19DT05TT0xFKQkrPSBodmNfY29uc29sZS5vDQogb2JqLSQoQ09ORklHX1JB V19EUklWRVIpCSs9IHJhdy5vDQotb2JqLSQoQ09ORklHX1NHSV9MMV9TRVJJ QUwpCSs9IHNuX3NlcmlhbC5vDQogb2JqLSQoQ09ORklHX1ZJT0NPTlMpICs9 IHZpb2NvbnMubw0KIG9iai0kKENPTkZJR19WSU9UQVBFKQkJKz0gdmlvdGFw ZS5vDQogDQpkaWZmIC1OcnUgYS9kcml2ZXJzL2NoYXIvc25fc2VyaWFsLmMg Yi9kcml2ZXJzL2NoYXIvc25fc2VyaWFsLmMNCi0tLSBhL2RyaXZlcnMvY2hh ci9zbl9zZXJpYWwuYwkyMDA0LTA2LTI0IDE3OjI4OjMzIC0wNTowMA0KKysr IC9kZXYvbnVsbAlXZWQgRGVjIDMxIDE2OjAwOjAwIDE5NjkwMA0KQEAgLTEs MTAyOCArMCwwIEBADQotLyoNCi0gKiBDLUJyaWNrIFNlcmlhbCBQb3J0IChh bmQgY29uc29sZSkgZHJpdmVyIGZvciBTR0kgQWx0aXggbWFjaGluZXMuDQot ICoNCi0gKiBUaGlzIGRyaXZlciBpcyBOT1Qgc3VpdGFibGUgZm9yIHRhbGtp bmcgdG8gdGhlIGwxLWNvbnRyb2xsZXIgZm9yDQotICogYW55dGhpbmcgb3Ro ZXIgdGhhbiAnY29uc29sZSBhY3Rpdml0aWVzJyAtLS0gcGxlYXNlIHVzZSB0 aGUgbDENCi0gKiBkcml2ZXIgZm9yIHRoYXQuDQotICoNCi0gKiBUaGlzIGZp bGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KLSAqIExpY2Vuc2UuICBTZWUgdGhl IGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlz IGFyY2hpdmUNCi0gKiBmb3IgbW9yZSBkZXRhaWxzLg0KLSAqDQotICogQ29w eXJpZ2h0IChDKSAyMDAzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJp Z2h0cyByZXNlcnZlZC4NCi0gKi8NCi0NCi0jaW5jbHVkZSA8bGludXgvY29u ZmlnLmg+DQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KLSNpbmNs dWRlIDxsaW51eC90dHkuaD4NCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+ DQotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4NCi0jaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+DQotI2lu Y2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+DQotI2luY2x1ZGUgPGxpbnV4L3Nl cmlhbF9yZWcuaD4NCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5j bHVkZSA8YXNtL3NuL3NnaS5oPg0KLSNpbmNsdWRlIDxhc20vc24vc25fc2Fs Lmg+DQotI2luY2x1ZGUgPGFzbS9zbi9wY2kvcGNpaW8uaD4NCi0jaW5jbHVk ZSA8YXNtL3NuL3NpbXVsYXRvci5oPg0KLSNpbmNsdWRlIDxhc20vc24vc24y L3NuX3ByaXZhdGUuaD4NCi0NCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0wx X1NFUklBTF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNS USkNCi1zdGF0aWMgY2hhciBzeXNycV9zZXJpYWxfc3RyW10gPSAiXGVTWVMi Ow0KLXN0YXRpYyBjaGFyICpzeXNycV9zZXJpYWxfcHRyID0gc3lzcnFfc2Vy aWFsX3N0cjsNCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNycV9yZXF1ZXN0 ZWQ7DQotI2VuZGlmIC8qIENPTkZJR19TR0lfTDFfU0VSSUFMX0NPTlNPTEUg JiYgQ09ORklHX01BR0lDX1NZU1JRICovDQotDQotLyogbWlub3IgZGV2aWNl IG51bWJlciAqLw0KLSNkZWZpbmUgU05fU0FMX01JTk9SIDY0DQotDQotLyog bnVtYmVyIG9mIGNoYXJhY3RlcnMgbGVmdCBpbiB4bWl0IGJ1ZmZlciBiZWZv cmUgd2UgYXNrIGZvciBtb3JlICovDQotI2RlZmluZSBXQUtFVVBfQ0hBUlMg MTI4DQotDQotLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2UgY2FuIHRyYW5z bWl0IHRvIHRoZSBTQUwgY29uc29sZSBhdCBhIHRpbWUgKi8NCi0jZGVmaW5l IFNOX1NBTF9NQVhfQ0hBUlMgMTIwDQotDQotI2RlZmluZSBTTl9TQUxfRVZF TlRfV1JJVEVfV0FLRVVQIDANCi0NCi0vKiA2NEssIHdoZW4gd2UncmUgYXN5 bmNoLCBpdCBtdXN0IGJlIGF0IGxlYXN0IHByaW50aydzIExPR19CVUZfTEVO IHRvDQotICogYXZvaWQgbG9zaW5nIGNoYXJzLCAoYWx3YXlzIGhhcyB0byBi ZSBhIHBvd2VyIG9mIDIpICovDQotI2RlZmluZSBTTl9TQUxfQlVGRkVSX1NJ WkUgKDY0ICogKDEgPDwgMTApKQ0KLQ0KLSNkZWZpbmUgU05fU0FMX1VBUlRf RklGT19ERVBUSCAxNg0KLSNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19TUEVF RF9DUFMgOTYwMC8xMA0KLQ0KLS8qIHdlIGRvbid0IGttYWxsb2MvZ2V0X2Zy ZWVfcGFnZSB0aGVzZSBhcyB3ZSB3YW50IHRoZW0gYXZhaWxhYmxlDQotICog YmVmb3JlIGVpdGhlciBvZiB0aG9zZSBhcmUgaW5pdGlhbGl6ZWQgKi8NCi1z dGF0aWMgY2hhciBzbl94bWl0X2J1ZmZfbWVtW1NOX1NBTF9CVUZGRVJfU0la RV07DQotDQotc3RydWN0IHZvbGF0aWxlX2NpcmNfYnVmIHsNCi0JY2hhciAq Y2JfYnVmOw0KLQlpbnQgY2JfaGVhZDsNCi0JaW50IGNiX3RhaWw7DQotfTsN Ci0NCi1zdGF0aWMgc3RydWN0IHZvbGF0aWxlX2NpcmNfYnVmIHhtaXQgPSB7 IC5jYl9idWYgPSBzbl94bWl0X2J1ZmZfbWVtIH07DQotc3RhdGljIGNoYXIg c25fdG1wX2J1ZmZlcltTTl9TQUxfQlVGRkVSX1NJWkVdOw0KLQ0KLXN0YXRp YyBzdHJ1Y3QgdHR5X3N0cnVjdCAqc25fc2FsX3R0eTsNCi0NCi1zdGF0aWMg c3RydWN0IHRpbWVyX2xpc3Qgc25fc2FsX3RpbWVyOw0KLXN0YXRpYyBpbnQg c25fc2FsX2V2ZW50OyAvKiBldmVudCB0eXBlIGZvciB0YXNrIHF1ZXVlICov DQotDQotc3RhdGljIGludCBzbl9zYWxfaXNfYXN5bmNoOw0KLXN0YXRpYyBp bnQgc25fc2FsX2lycTsNCi1zdGF0aWMgc3BpbmxvY2tfdCBzbl9zYWxfbG9j ayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCi1zdGF0aWMgaW50IHNuX3RvdGFs X3R4X2NvdW50Ow0KLXN0YXRpYyBpbnQgc25fdG90YWxfcnhfY291bnQ7DQot DQotc3RhdGljIHZvaWQgc25fc2FsX3Rhc2tsZXRfYWN0aW9uKHVuc2lnbmVk IGxvbmcgZGF0YSk7DQotc3RhdGljIERFQ0xBUkVfVEFTS0xFVChzbl9zYWxf dGFza2xldCwgc25fc2FsX3Rhc2tsZXRfYWN0aW9uLCAwKTsNCi0NCi1zdGF0 aWMgdW5zaWduZWQgbG9uZyBzbl9pbnRlcnJ1cHRfdGltZW91dDsNCi0NCi1l eHRlcm4gdTY0IG1hc3Rlcl9ub2RlX2JlZHJvY2tfYWRkcmVzczsNCi0NCi0j dW5kZWYgREVCVUcNCi0jaWZkZWYgREVCVUcNCi1zdGF0aWMgaW50IHNuX2Rl YnVnX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7DQotI2RlZmluZSBE UFJJTlRGKHguLi4pIHNuX2RlYnVnX3ByaW50Zih4KQ0KLSNlbHNlDQotI2Rl ZmluZSBEUFJJTlRGKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkNCi0jZW5kaWYN Ci0NCi1zdHJ1Y3Qgc25fc2FsX29wcyB7DQotCWludCAoKnNhbF9wdXRzKShj b25zdCBjaGFyICpzLCBpbnQgbGVuKTsNCi0JaW50ICgqc2FsX2dldGMpKHZv aWQpOw0KLQlpbnQgKCpzYWxfaW5wdXRfcGVuZGluZykodm9pZCk7DQotCXZv aWQgKCpzYWxfd2FrZXVwX3RyYW5zbWl0KSh2b2lkKTsNCi19Ow0KLQ0KLS8q IFRoaXMgaXMgdGhlIHBvaW50ZXIgdXNlZC4gSXQgaXMgYXNzaWduZWQgdG8g cG9pbnQgdG8gb25lIG9mDQotICogdGhlIHRhYmxlcyBiZWxvdy4NCi0gKi8N Ci1zdGF0aWMgc3RydWN0IHNuX3NhbF9vcHMgKnNuX2Z1bmM7DQotDQotLyog UHJvdG90eXBlcyAqLw0KLXN0YXRpYyBpbnQgc250X2h3X3B1dHMoY29uc3Qg Y2hhciAqLCBpbnQpOw0KLXN0YXRpYyBpbnQgc250X3BvbGxfZ2V0Yyh2b2lk KTsNCi1zdGF0aWMgaW50IHNudF9wb2xsX2lucHV0X3BlbmRpbmcodm9pZCk7 DQotc3RhdGljIGludCBzbnRfc2ltX3B1dHMoY29uc3QgY2hhciAqLCBpbnQp Ow0KLXN0YXRpYyBpbnQgc250X3NpbV9nZXRjKHZvaWQpOw0KLXN0YXRpYyBp bnQgc250X3NpbV9pbnB1dF9wZW5kaW5nKHZvaWQpOw0KLXN0YXRpYyBpbnQg c250X2ludHJfZ2V0Yyh2b2lkKTsNCi1zdGF0aWMgaW50IHNudF9pbnRyX2lu cHV0X3BlbmRpbmcodm9pZCk7DQotc3RhdGljIHZvaWQgc25faW50cl90cmFu c21pdF9jaGFycyh2b2lkKTsNCi0NCi0vKiBBIHRhYmxlIGZvciBwb2xsaW5n ICovDQotc3RhdGljIHN0cnVjdCBzbl9zYWxfb3BzIHBvbGxfb3BzID0gew0K LQkuc2FsX3B1dHMJCT0gc250X2h3X3B1dHMsDQotCS5zYWxfZ2V0YwkJPSBz bnRfcG9sbF9nZXRjLA0KLQkuc2FsX2lucHV0X3BlbmRpbmcJPSBzbnRfcG9s bF9pbnB1dF9wZW5kaW5nDQotfTsNCi0NCi0vKiBBIHRhYmxlIGZvciB0aGUg c2ltdWxhdG9yICovDQotc3RhdGljIHN0cnVjdCBzbl9zYWxfb3BzIHNpbV9v cHMgPSB7DQotCS5zYWxfcHV0cwkJPSBzbnRfc2ltX3B1dHMsDQotCS5zYWxf Z2V0YwkJPSBzbnRfc2ltX2dldGMsDQotCS5zYWxfaW5wdXRfcGVuZGluZwk9 IHNudF9zaW1faW5wdXRfcGVuZGluZw0KLX07DQotDQotLyogQSB0YWJsZSBm b3IgaW50ZXJydXB0cyBlbmFibGVkICovDQotc3RhdGljIHN0cnVjdCBzbl9z YWxfb3BzIGludHJfb3BzID0gew0KLQkuc2FsX3B1dHMJCT0gc250X2h3X3B1 dHMsDQotCS5zYWxfZ2V0YwkJPSBzbnRfaW50cl9nZXRjLA0KLQkuc2FsX2lu cHV0X3BlbmRpbmcJPSBzbnRfaW50cl9pbnB1dF9wZW5kaW5nLA0KLQkuc2Fs X3dha2V1cF90cmFuc21pdAk9IHNuX2ludHJfdHJhbnNtaXRfY2hhcnMNCi19 Ow0KLQ0KLQ0KLS8qIHRoZSBjb25zb2xlIGRvZXMgb3V0cHV0IGluIHR3byBk aXN0aW5jdGx5IGRpZmZlcmVudCB3YXlzOg0KLSAqIHN5bmNocm9ub3VzIGFu ZCBhc3luY2hyb25vdXMgKGJ1ZmZlcmVkKS4gIGluaXRhbGx5LCBlYXJseV9w cmludGsNCi0gKiBkb2VzIHN5bmNocm9ub3VzIG91dHB1dC4gIGFueSBkYXRh IHdyaXR0ZW4gZ29lcyBkaXJlY3RseSB0byB0aGUgU0FMDQotICogdG8gYmUg b3V0cHV0IChpbmNpZGVudGFsbHksIGl0IGlzIGludGVybmFsbHkgYnVmZmVy ZWQgYnkgdGhlIFNBTCkNCi0gKiBhZnRlciBpbnRlcnJ1cHRzIGFuZCB0aW1l cnMgYXJlIGluaXRpYWxpemVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZSwNCi0g KiB0aGUgY29uc29sZSBpbml0IGNvZGUgc3dpdGNoZXMgdG8gYXN5bmNocm9u b3VzIG91dHB1dC4gIHRoaXMgaXMNCi0gKiBhbHNvIHRoZSBlYXJsaWVzdCBv cHBvcnR1bml0eSB0byBiZWdpbiBwb2xsaW5nIGZvciBjb25zb2xlIGlucHV0 Lg0KLSAqIGFmdGVyIGNvbnNvbGUgaW5pdGlhbGl6YXRpb24sIGNvbnNvbGUg b3V0cHV0IGFuZCB0dHkgKHNlcmlhbCBwb3J0KQ0KLSAqIG91dHB1dCBpcyBi dWZmZXJlZCBhbmQgc2VudCB0byB0aGUgU0FMIGFzeW5jaHJvbm91c2x5IChl aXRoZXIgYnkNCi0gKiB0aW1lciBjYWxsYmFjayBvciBieSBVQVJUIGludGVy cnVwdCkgKi8NCi0NCi0NCi0vKiByb3V0aW5lcyBmb3IgcnVubmluZyB0aGUg Y29uc29sZSBpbiBwb2xsaW5nIG1vZGUgKi8NCi0NCi1zdGF0aWMgaW50DQot c250X2h3X3B1dHMoY29uc3QgY2hhciAqcywgaW50IGxlbikNCi17DQotCS8q IGxvb2tpbmcgYXQgdGhlIFBST00gc291cmNlIGNvZGUsIHB1dGIgY2FsbHMg dGhlIGZsdXNoDQotCSAqIHJvdXRpbmUsIHNvIGlmIHdlIHNlbmQgY2hhcmFj dGVycyBpbiBGSUZPIHNpemVkIGNodW5rcywgaXQNCi0JICogc2hvdWxkIGdv IG91dCBieSB0aGUgbmV4dCB0aW1lIHRoZSB0aW1lciBnZXRzIGNhbGxlZCAq Lw0KLQlyZXR1cm4gaWE2NF9zbl9jb25zb2xlX3B1dGIocywgbGVuKTsNCi19 DQotDQotc3RhdGljIGludA0KLXNudF9wb2xsX2dldGModm9pZCkNCi17DQot CWludCBjaDsNCi0JaWE2NF9zbl9jb25zb2xlX2dldGMoJmNoKTsNCi0JcmV0 dXJuIGNoOw0KLX0NCi0NCi1zdGF0aWMgaW50DQotc250X3BvbGxfaW5wdXRf cGVuZGluZyh2b2lkKQ0KLXsNCi0JaW50IHN0YXR1cywgaW5wdXQ7DQotDQot CXN0YXR1cyA9IGlhNjRfc25fY29uc29sZV9jaGVjaygmaW5wdXQpOw0KLQly ZXR1cm4gIXN0YXR1cyAmJiBpbnB1dDsNCi19DQotDQotDQotLyogcm91dGlu ZXMgZm9yIHJ1bm5pbmcgdGhlIGNvbnNvbGUgb24gdGhlIHNpbXVsYXRvciAq Lw0KLQ0KLXN0YXRpYyBpbnQNCi1zbnRfc2ltX3B1dHMoY29uc3QgY2hhciAq c3RyLCBpbnQgY291bnQpDQotew0KLQlpbnQgY291bnRlciA9IGNvdW50Ow0K LQ0KLSNpZmRlZiBGTEFHX0RJUkVDVF9DT05TT0xFX1dSSVRFUw0KLQkvKiBU aGlzIGlzIGFuIGVhc3kgd2F5IHRvIHByZS1wZW5kIHRoZSBvdXRwdXQgdG8g a25vdyB3aGV0aGVyIHRoZSBvdXRwdXQNCi0JICogd2FzIGRvbmUgdmlhIHNh bCBvciBkaXJlY3RseSAqLw0KLQl3cml0ZWIoJ1snLCBtYXN0ZXJfbm9kZV9i ZWRyb2NrX2FkZHJlc3MgKyAoVUFSVF9UWCA8PCAzKSk7DQotCXdyaXRlYign KycsIG1hc3Rlcl9ub2RlX2JlZHJvY2tfYWRkcmVzcyArIChVQVJUX1RYIDw8 IDMpKTsNCi0Jd3JpdGViKCddJywgbWFzdGVyX25vZGVfYmVkcm9ja19hZGRy ZXNzICsgKFVBUlRfVFggPDwgMykpOw0KLQl3cml0ZWIoJyAnLCBtYXN0ZXJf bm9kZV9iZWRyb2NrX2FkZHJlc3MgKyAoVUFSVF9UWCA8PCAzKSk7DQotI2Vu ZGlmIC8qIEZMQUdfRElSRUNUX0NPTlNPTEVfV1JJVEVTICovDQotCXdoaWxl IChjb3VudGVyID4gMCkgew0KLQkJd3JpdGViKCpzdHIsIG1hc3Rlcl9ub2Rl X2JlZHJvY2tfYWRkcmVzcyArIChVQVJUX1RYIDw8IDMpKTsNCi0JCWNvdW50 ZXItLTsNCi0JCXN0cisrOw0KLQl9DQotDQotCXJldHVybiBjb3VudDsNCi19 DQotDQotc3RhdGljIGludA0KLXNudF9zaW1fZ2V0Yyh2b2lkKQ0KLXsNCi0J cmV0dXJuIHJlYWRiKG1hc3Rlcl9ub2RlX2JlZHJvY2tfYWRkcmVzcyArIChV QVJUX1JYIDw8IDMpKTsNCi19DQotDQotc3RhdGljIGludA0KLXNudF9zaW1f aW5wdXRfcGVuZGluZyh2b2lkKQ0KLXsNCi0JcmV0dXJuIHJlYWRiKG1hc3Rl cl9ub2RlX2JlZHJvY2tfYWRkcmVzcyArIChVQVJUX0xTUiA8PCAzKSkgJiBV QVJUX0xTUl9EUjsNCi19DQotDQotDQotLyogcm91dGluZXMgZm9yIGFuIGlu dGVycnVwdCBkcml2ZW4gY29uc29sZSAobm9ybWFsKSAqLw0KLQ0KLXN0YXRp YyBpbnQNCi1zbnRfaW50cl9nZXRjKHZvaWQpDQotew0KLQlyZXR1cm4gaWE2 NF9zbl9jb25zb2xlX3JlYWRjKCk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQNCi1z bnRfaW50cl9pbnB1dF9wZW5kaW5nKHZvaWQpDQotew0KLQlyZXR1cm4gaWE2 NF9zbl9jb25zb2xlX2ludHJfc3RhdHVzKCkgJiBTQUxfQ09OU09MRV9JTlRS X1JFQ1Y7DQotfQ0KLQ0KLS8qIFRoZSBlYXJseSBwcmludGsgKHBvc3NpYmxl IHNldHVwKSBhbmQgZnVuY3Rpb24gY2FsbCAqLw0KLQ0KLXZvaWQNCi1lYXJs eV9wcmludGtfc25fc2FsKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50 KQ0KLXsNCi0JZXh0ZXJuIHZvaWQgZWFybHlfc25fc2V0dXAodm9pZCk7DQot DQotCWlmICghc25fZnVuYykgew0KLQkJaWYgKElTX1JVTk5JTkdfT05fU0lN VUxBVE9SKCkpDQotCQkJc25fZnVuYyA9ICZzaW1fb3BzOw0KLQkJZWxzZQ0K LQkJCXNuX2Z1bmMgPSAmcG9sbF9vcHM7DQotDQotCQllYXJseV9zbl9zZXR1 cCgpOw0KLQl9DQotCXNuX2Z1bmMtPnNhbF9wdXRzKHMsIGNvdW50KTsNCi19 DQotDQotI2lmZGVmIERFQlVHDQotLyogdGhpcyBpcyBhcyAiY2xvc2UgdG8g dGhlIG1ldGFsIiBhcyB3ZSBjYW4gZ2V0LCB1c2VkIHdoZW4gdGhlIGRyaXZl cg0KLSAqIGl0c2VsZiBtYXkgYmUgYnJva2VuICovDQotc3RhdGljIGludA0K LXNuX2RlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikNCi17DQot CXN0YXRpYyBjaGFyIHByaW50a19idWZbMTAyNF07DQotCWludCBwcmludGVk X2xlbjsNCi0JdmFfbGlzdCBhcmdzOw0KLQ0KLQl2YV9zdGFydChhcmdzLCBm bXQpOw0KLQlwcmludGVkX2xlbiA9IHZzY25wcmludGYocHJpbnRrX2J1Ziwg c2l6ZW9mKHByaW50a19idWYpLCBmbXQsIGFyZ3MpOw0KLQllYXJseV9wcmlu dGtfc25fc2FsKHByaW50a19idWYsIHByaW50ZWRfbGVuKTsNCi0JdmFfZW5k KGFyZ3MpOw0KLQlyZXR1cm4gcHJpbnRlZF9sZW47DQotfQ0KLSNlbmRpZiAv KiBERUJVRyAqLw0KLQ0KLS8qDQotICogSW50ZXJydXB0IGhhbmRsaW5nIHJv dXRpbmVzLg0KLSAqLw0KLQ0KLXN0YXRpYyB2b2lkDQotc25fc2FsX3NjaGVk X2V2ZW50KGludCBldmVudCkNCi17DQotCXNuX3NhbF9ldmVudCB8PSAoMSA8 PCBldmVudCk7DQotCXRhc2tsZXRfc2NoZWR1bGUoJnNuX3NhbF90YXNrbGV0 KTsNCi19DQotDQotLyogc25fcmVjZWl2ZV9jaGFycyBjYW4gYmUgY2FsbGVk IGJlZm9yZSBzbl9zYWxfdHR5IGlzIGluaXRpYWxpemVkLiAgaW4NCi0gKiB0 aGF0IGNhc2UsIGl0cyBvbmx5IHVzZSBpcyB0byB0cmlnZ2VyIHN5c3JxIGFu ZCBrZGIgKi8NCi1zdGF0aWMgdm9pZA0KLXNuX3JlY2VpdmVfY2hhcnMoc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQ0KLXsN Ci0JaW50IGNoOw0KLQ0KLQl3aGlsZSAoc25fZnVuYy0+c2FsX2lucHV0X3Bl bmRpbmcoKSkgew0KLQkJY2ggPSBzbl9mdW5jLT5zYWxfZ2V0YygpOw0KLQkJ aWYgKGNoIDwgMCkgew0KLQkJCXByaW50ayhLRVJOX0VSUiAic25fc2VyaWFs OiBBbiBlcnJvciBvY2N1cmVkIHdoaWxlICINCi0JCQkgICAgICAgIm9idGFp bmluZyBkYXRhIGZyb20gdGhlIGNvbnNvbGUgKDB4JTB4KVxuIiwgY2gpOw0K LQkJCWJyZWFrOw0KLQkJfQ0KLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfTDFf U0VSSUFMX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JR KQ0KLQkJaWYgKHN5c3JxX3JlcXVlc3RlZCkgew0KLQkJCXVuc2lnbmVkIGxv bmcgc3lzcnFfdGltZW91dCA9IHN5c3JxX3JlcXVlc3RlZCArIEhaKjU7DQot DQotCQkJc3lzcnFfcmVxdWVzdGVkID0gMDsNCi0JCQlpZiAoY2ggJiYgdGlt ZV9iZWZvcmUoamlmZmllcywgc3lzcnFfdGltZW91dCkpIHsNCi0JCQkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmc25fc2FsX2xvY2ssICpmbGFncyk7DQot CQkJCWhhbmRsZV9zeXNycShjaCwgcmVncywgTlVMTCk7DQotCQkJCXNwaW5f bG9ja19pcnFzYXZlKCZzbl9zYWxfbG9jaywgKmZsYWdzKTsNCi0JCQkJLyog ZG9uJ3QgcmVjb3JkIHRoaXMgY2hhciAqLw0KLQkJCQljb250aW51ZTsNCi0J CQl9DQotCQl9DQotCQlpZiAoY2ggPT0gKnN5c3JxX3NlcmlhbF9wdHIpIHsN Ci0JCQlpZiAoISgqKytzeXNycV9zZXJpYWxfcHRyKSkgew0KLQkJCQlzeXNy cV9yZXF1ZXN0ZWQgPSBqaWZmaWVzOw0KLQkJCQlzeXNycV9zZXJpYWxfcHRy ID0gc3lzcnFfc2VyaWFsX3N0cjsNCi0JCQl9DQotCQl9DQotCQllbHNlDQot CQkJc3lzcnFfc2VyaWFsX3B0ciA9IHN5c3JxX3NlcmlhbF9zdHI7DQotI2Vu ZGlmIC8qIENPTkZJR19TR0lfTDFfU0VSSUFMX0NPTlNPTEUgJiYgQ09ORklH X01BR0lDX1NZU1JRICovDQotDQotCQkvKiByZWNvcmQgdGhlIGNoYXJhY3Rl ciB0byBwYXNzIHVwIHRvIHRoZSB0dHkgbGF5ZXIgKi8NCi0JCWlmIChzbl9z YWxfdHR5KSB7DQotCQkJKnNuX3NhbF90dHktPmZsaXAuY2hhcl9idWZfcHRy ID0gY2g7DQotCQkJc25fc2FsX3R0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIrKzsN Ci0JCQlzbl9zYWxfdHR5LT5mbGlwLmNvdW50Kys7DQotCQkJaWYgKHNuX3Nh bF90dHktPmZsaXAuY291bnQgPT0gVFRZX0ZMSVBCVUZfU0laRSkNCi0JCQkJ YnJlYWs7DQotCQl9DQotCQlzbl90b3RhbF9yeF9jb3VudCsrOw0KLQl9DQot DQotCWlmIChzbl9zYWxfdHR5KQ0KLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2go KHN0cnVjdCB0dHlfc3RydWN0ICopc25fc2FsX3R0eSk7DQotfQ0KLQ0KLQ0K LS8qIHN5bmNoX2ZsdXNoX3htaXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBzbl9z YWxfbG9jayAqLw0KLXN0YXRpYyB2b2lkDQotc3luY2hfZmx1c2hfeG1pdCh2 b2lkKQ0KLXsNCi0JaW50IHhtaXRfY291bnQsIHRhaWwsIGhlYWQsIGxvb3Bz LCBpaTsNCi0JaW50IHJlc3VsdDsNCi0JY2hhciAqc3RhcnQ7DQotDQotCWlm ICh4bWl0LmNiX2hlYWQgPT0geG1pdC5jYl90YWlsKQ0KLQkJcmV0dXJuOyAv KiBOb3RoaW5nIHRvIGRvLiAqLw0KLQ0KLQloZWFkID0geG1pdC5jYl9oZWFk Ow0KLQl0YWlsID0geG1pdC5jYl90YWlsOw0KLQlzdGFydCA9ICZ4bWl0LmNi X2J1Zlt0YWlsXTsNCi0NCi0JLyogdHdpY2UgYXJvdW5kIGdldHMgdGhlIHRh aWwgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZA0KLQkgKiB0aGVuIHRv IHRoZSBoZWFkLCBpZiBuZWVkZWQgKi8NCi0JbG9vcHMgPSAoaGVhZCA8IHRh aWwpID8gMiA6IDE7DQotDQotCWZvciAoaWkgPSAwOyBpaSA8IGxvb3BzOyBp aSsrKSB7DQotCQl4bWl0X2NvdW50ID0gKGhlYWQgPCB0YWlsKSA/ICAoU05f U0FMX0JVRkZFUl9TSVpFIC0gdGFpbCkgOiAoaGVhZCAtIHRhaWwpOw0KLQ0K LQkJaWYgKHhtaXRfY291bnQgPiAwKSB7DQotCQkJcmVzdWx0ID0gc25fZnVu Yy0+c2FsX3B1dHMoKGNoYXIgKilzdGFydCwgeG1pdF9jb3VudCk7DQotCQkJ aWYgKCFyZXN1bHQpDQotCQkJCURQUklOVEYoIlxuKioqIHN5bmNoX2ZsdXNo X3htaXQgZmFpbGVkIHRvIGZsdXNoXG4iKTsNCi0JCQlpZiAocmVzdWx0ID4g MCkgew0KLQkJCQl4bWl0X2NvdW50IC09IHJlc3VsdDsNCi0JCQkJc25fdG90 YWxfdHhfY291bnQgKz0gcmVzdWx0Ow0KLQkJCQl0YWlsICs9IHJlc3VsdDsN Ci0JCQkJdGFpbCAmPSBTTl9TQUxfQlVGRkVSX1NJWkUgLSAxOw0KLQkJCQl4 bWl0LmNiX3RhaWwgPSB0YWlsOw0KLQkJCQlzdGFydCA9IChjaGFyICopJnht aXQuY2JfYnVmW3RhaWxdOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi0v KiBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgbG9jayBwcm90ZWN0aW5nIHRoZSBj aXJjdWxhciBidWZmZXIgYW5kDQotICogc25fc2FsX3R0eSAqLw0KLXN0YXRp YyB2b2lkDQotc25fcG9sbF90cmFuc21pdF9jaGFycyh2b2lkKQ0KLXsNCi0J aW50IHhtaXRfY291bnQsIHRhaWwsIGhlYWQ7DQotCWludCByZXN1bHQ7DQot CWNoYXIgKnN0YXJ0Ow0KLQ0KLQlCVUdfT04oIXNuX3NhbF9pc19hc3luY2gp Ow0KLQ0KLQlpZiAoeG1pdC5jYl9oZWFkID09IHhtaXQuY2JfdGFpbCB8fA0K LQkgICAgKHNuX3NhbF90dHkgJiYgKHNuX3NhbF90dHktPnN0b3BwZWQgfHwg c25fc2FsX3R0eS0+aHdfc3RvcHBlZCkpKSB7DQotCQkvKiBOb3RoaW5nIHRv IGRvLiAqLw0KLQkJcmV0dXJuOw0KLQl9DQotDQotCWhlYWQgPSB4bWl0LmNi X2hlYWQ7DQotCXRhaWwgPSB4bWl0LmNiX3RhaWw7DQotCXN0YXJ0ID0gJnht aXQuY2JfYnVmW3RhaWxdOw0KLQ0KLQl4bWl0X2NvdW50ID0gKGhlYWQgPCB0 YWlsKSA/ICAoU05fU0FMX0JVRkZFUl9TSVpFIC0gdGFpbCkgOiAoaGVhZCAt IHRhaWwpOw0KLQ0KLQlpZiAoeG1pdF9jb3VudCA9PSAwKQ0KLQkJRFBSSU5U RigiXG4qKiogZW1wdHkgeG1pdF9jb3VudFxuIik7DQotDQotCS8qIHVzZSB0 aGUgb3BzLCBhcyB3ZSBjb3VsZCBiZSBvbiB0aGUgc2ltdWxhdG9yICovDQot CXJlc3VsdCA9IHNuX2Z1bmMtPnNhbF9wdXRzKChjaGFyICopc3RhcnQsIHht aXRfY291bnQpOw0KLQlpZiAoIXJlc3VsdCkNCi0JCURQUklOVEYoIlxuKioq IGVycm9yIGluIHN5bmNocm9ub3VzIHNhbF9wdXRzXG4iKTsNCi0JLyogWFhY IGNoYWR0IGNsZWFuIHRoaXMgdXAgKi8NCi0JaWYgKHJlc3VsdCA+IDApIHsN Ci0JCXhtaXRfY291bnQgLT0gcmVzdWx0Ow0KLQkJc25fdG90YWxfdHhfY291 bnQgKz0gcmVzdWx0Ow0KLQkJdGFpbCArPSByZXN1bHQ7DQotCQl0YWlsICY9 IFNOX1NBTF9CVUZGRVJfU0laRSAtIDE7DQotCQl4bWl0LmNiX3RhaWwgPSB0 YWlsOw0KLQkJc3RhcnQgPSAmeG1pdC5jYl9idWZbdGFpbF07DQotCX0NCi0N Ci0JLyogaWYgdGhlcmUncyBmZXcgZW5vdWdoIGNoYXJhY3RlcnMgbGVmdCBp biB0aGUgeG1pdCBidWZmZXINCi0JICogdGhhdCB3ZSBjb3VsZCBzdGFuZCBm b3IgdGhlIHVwcGVyIGxheWVyIHRvIHNlbmQgdXMgc29tZQ0KLQkgKiBtb3Jl LCBhc2sgZm9yIGl0LiAqLw0KLQlpZiAoc25fc2FsX3R0eSkNCi0JCWlmIChD SVJDX0NOVCh4bWl0LmNiX2hlYWQsIHhtaXQuY2JfdGFpbCwgU05fU0FMX0JV RkZFUl9TSVpFKSA8IFdBS0VVUF9DSEFSUykNCi0JCQlzbl9zYWxfc2NoZWRf ZXZlbnQoU05fU0FMX0VWRU5UX1dSSVRFX1dBS0VVUCk7DQotfQ0KLQ0KLQ0K LS8qIG11c3QgYmUgY2FsbGVkIHdpdGggYSBsb2NrIHByb3RlY3RpbmcgdGhl IGNpcmN1bGFyIGJ1ZmZlciBhbmQNCi0gKiBzbl9zYWxfdHR5ICovDQotc3Rh dGljIHZvaWQNCi1zbl9pbnRyX3RyYW5zbWl0X2NoYXJzKHZvaWQpDQotew0K LQlpbnQgeG1pdF9jb3VudCwgdGFpbCwgaGVhZCwgbG9vcHMsIGlpOw0KLQlp bnQgcmVzdWx0Ow0KLQljaGFyICpzdGFydDsNCi0NCi0JQlVHX09OKCFzbl9z YWxfaXNfYXN5bmNoKTsNCi0NCi0JaWYgKHhtaXQuY2JfaGVhZCA9PSB4bWl0 LmNiX3RhaWwgfHwNCi0JICAgIChzbl9zYWxfdHR5ICYmIChzbl9zYWxfdHR5 LT5zdG9wcGVkIHx8IHNuX3NhbF90dHktPmh3X3N0b3BwZWQpKSkgew0KLQkJ LyogTm90aGluZyB0byBkby4gKi8NCi0JCXJldHVybjsNCi0JfQ0KLQ0KLQlo ZWFkID0geG1pdC5jYl9oZWFkOw0KLQl0YWlsID0geG1pdC5jYl90YWlsOw0K LQlzdGFydCA9ICZ4bWl0LmNiX2J1Zlt0YWlsXTsNCi0NCi0JLyogdHdpY2Ug YXJvdW5kIGdldHMgdGhlIHRhaWwgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVy IGFuZA0KLQkgKiB0aGVuIHRvIHRoZSBoZWFkLCBpZiBuZWVkZWQgKi8NCi0J bG9vcHMgPSAoaGVhZCA8IHRhaWwpID8gMiA6IDE7DQotDQotCWZvciAoaWkg PSAwOyBpaSA8IGxvb3BzOyBpaSsrKSB7DQotCQl4bWl0X2NvdW50ID0gKGhl YWQgPCB0YWlsKSA/DQotCQkJKFNOX1NBTF9CVUZGRVJfU0laRSAtIHRhaWwp IDogKGhlYWQgLSB0YWlsKTsNCi0NCi0JCWlmICh4bWl0X2NvdW50ID4gMCkg ew0KLQkJCXJlc3VsdCA9IGlhNjRfc25fY29uc29sZV94bWl0X2NoYXJzKChj aGFyICopc3RhcnQsIHhtaXRfY291bnQpOw0KLSNpZmRlZiBERUJVRw0KLQkJ CWlmICghcmVzdWx0KQ0KLQkJCQlEUFJJTlRGKCJgIik7DQotI2VuZGlmDQot CQkJaWYgKHJlc3VsdCA+IDApIHsNCi0JCQkJeG1pdF9jb3VudCAtPSByZXN1 bHQ7DQotCQkJCXNuX3RvdGFsX3R4X2NvdW50ICs9IHJlc3VsdDsNCi0JCQkJ dGFpbCArPSByZXN1bHQ7DQotCQkJCXRhaWwgJj0gU05fU0FMX0JVRkZFUl9T SVpFIC0gMTsNCi0JCQkJeG1pdC5jYl90YWlsID0gdGFpbDsNCi0JCQkJc3Rh cnQgPSAmeG1pdC5jYl9idWZbdGFpbF07DQotCQkJfQ0KLQkJfQ0KLQl9DQot DQotCS8qIGlmIHRoZXJlJ3MgZmV3IGVub3VnaCBjaGFyYWN0ZXJzIGxlZnQg aW4gdGhlIHhtaXQgYnVmZmVyDQotCSAqIHRoYXQgd2UgY291bGQgc3RhbmQg Zm9yIHRoZSB1cHBlciBsYXllciB0byBzZW5kIHVzIHNvbWUNCi0JICogbW9y ZSwgYXNrIGZvciBpdC4gKi8NCi0JaWYgKHNuX3NhbF90dHkpDQotCQlpZiAo Q0lSQ19DTlQoeG1pdC5jYl9oZWFkLCB4bWl0LmNiX3RhaWwsIFNOX1NBTF9C VUZGRVJfU0laRSkgPCBXQUtFVVBfQ0hBUlMpDQotCQkJc25fc2FsX3NjaGVk X2V2ZW50KFNOX1NBTF9FVkVOVF9XUklURV9XQUtFVVApOw0KLX0NCi0NCi0N Ci1zdGF0aWMgaXJxcmV0dXJuX3QNCi1zbl9zYWxfaW50ZXJydXB0KGludCBp cnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpDQotew0K LQkvKiB0aGlzIGNhbGwgaXMgbmVjZXNzYXJ5IHRvIHBhc3MgdGhlIGludGVy cnVwdCBiYWNrIHRvIHRoZQ0KLQkgKiBTQUwsIHNpbmNlIGl0IGRvZXNuJ3Qg aW50ZXJjZXB0IHRoZSBVQVJUIGludGVycnVwdHMNCi0JICogaXRzZWxmICov DQotCWludCBzdGF0dXMgPSBpYTY0X3NuX2NvbnNvbGVfaW50cl9zdGF0dXMo KTsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCWlmIChzdGF0dXMgJiBT QUxfQ09OU09MRV9JTlRSX1JFQ1YpDQotCQlzbl9yZWNlaXZlX2NoYXJzKHJl Z3MsICZmbGFncyk7DQotCWlmIChzdGF0dXMgJiBTQUxfQ09OU09MRV9JTlRS X1hNSVQpDQotCQlzbl9pbnRyX3RyYW5zbWl0X2NoYXJzKCk7DQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCXJl dHVybiBJUlFfSEFORExFRDsNCi19DQotDQotDQotLyogcmV0dXJucyB0aGUg Y29uc29sZSBpcnEgaWYgaW50ZXJydXB0IGlzIHN1Y2Nlc3NmdWxseSByZWdp c3RlcmVkLA0KLSAqIGVsc2UgMCAqLw0KLXN0YXRpYyBpbnQNCi1zbl9zYWxf Y29ubmVjdF9pbnRlcnJ1cHQodm9pZCkNCi17DQotCWNwdWlkX3QgaW50cl9j cHVpZDsNCi0JdW5zaWduZWQgaW50IGludHJfY3B1bG9jOw0KLQluYXNpZF90 IGNvbnNvbGVfbmFzaWQ7DQotCXVuc2lnbmVkIGludCBjb25zb2xlX2lycTsN Ci0JaW50IHJlc3VsdDsNCi0NCi0JY29uc29sZV9uYXNpZCA9IGlhNjRfc25f Z2V0X2NvbnNvbGVfbmFzaWQoKTsNCi0JaW50cl9jcHVpZCA9IGZpcnN0X2Nw dShub2RlX3RvX2NwdW1hc2sobmFzaWRfdG9fY25vZGVpZChjb25zb2xlX25h c2lkKSkpOw0KLQlpbnRyX2NwdWxvYyA9IGNwdV9waHlzaWNhbF9pZChpbnRy X2NwdWlkKTsNCi0JY29uc29sZV9pcnEgPSBDUFVfVkVDVE9SX1RPX0lSUShp bnRyX2NwdWxvYywgU0dJX1VBUlRfVkVDVE9SKTsNCi0NCi0JcmVzdWx0ID0g aW50cl9jb25uZWN0X2xldmVsKGludHJfY3B1aWQsIFNHSV9VQVJUX1ZFQ1RP Uik7DQotCUJVR19PTihyZXN1bHQgIT0gU0dJX1VBUlRfVkVDVE9SKTsNCi0N Ci0JcmVzdWx0ID0gcmVxdWVzdF9pcnEoY29uc29sZV9pcnEsIHNuX3NhbF9p bnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgICJTQUwgY29uc29sZSBkcml2ZXIi LCAmc25fc2FsX3R0eSk7DQotCWlmIChyZXN1bHQgPj0gMCkNCi0JCXJldHVy biBjb25zb2xlX2lycTsNCi0NCi0JcHJpbnRrKEtFUk5fV0FSTklORyAic25f c2VyaWFsOiBjb25zb2xlIHByb2NlZWRpbmcgaW4gcG9sbGVkIG1vZGVcbiIp Ow0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQNCi1zbl9zYWxf dGFza2xldF9hY3Rpb24odW5zaWduZWQgbG9uZyBkYXRhKQ0KLXsNCi0JdW5z aWduZWQgbG9uZyBmbGFnczsNCi0NCi0JaWYgKHNuX3NhbF90dHkpIHsNCi0J CXNwaW5fbG9ja19pcnFzYXZlKCZzbl9zYWxfbG9jaywgZmxhZ3MpOw0KLQkJ aWYgKHNuX3NhbF90dHkpIHsNCi0JCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0 KFNOX1NBTF9FVkVOVF9XUklURV9XQUtFVVAsICZzbl9zYWxfZXZlbnQpKSB7 DQotCQkJCWlmICgoc25fc2FsX3R0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9f V1JJVEVfV0FLRVVQKSkgJiYgc25fc2FsX3R0eS0+bGRpc2Mud3JpdGVfd2Fr ZXVwKQ0KLQkJCQkJKHNuX3NhbF90dHktPmxkaXNjLndyaXRlX3dha2V1cCko KHN0cnVjdCB0dHlfc3RydWN0ICopc25fc2FsX3R0eSk7DQotCQkJCXdha2Vf dXBfaW50ZXJydXB0aWJsZSgod2FpdF9xdWV1ZV9oZWFkX3QgKikmc25fc2Fs X3R0eS0+d3JpdGVfd2FpdCk7DQotCQkJfQ0KLQkJfQ0KLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmc25fc2FsX2xvY2ssIGZsYWdzKTsNCi0JfQ0KLX0N Ci0NCi0NCi0vKg0KLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwb2xsZWQg bW9kZS4NCi0gKi8NCi1zdGF0aWMgdm9pZA0KLXNuX3NhbF90aW1lcl9wb2xs KHVuc2lnbmVkIGxvbmcgZHVtbXkpDQotew0KLQl1bnNpZ25lZCBsb25nIGZs YWdzOw0KLQ0KLQlpZiAoIXNuX3NhbF9pcnEpIHsNCi0JCXNwaW5fbG9ja19p cnFzYXZlKCZzbl9zYWxfbG9jaywgZmxhZ3MpOw0KLQkJc25fcmVjZWl2ZV9j aGFycyhOVUxMLCAmZmxhZ3MpOw0KLQkJc25fcG9sbF90cmFuc21pdF9jaGFy cygpOw0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25fc2FsX2xvY2ss IGZsYWdzKTsNCi0JCW1vZF90aW1lcigmc25fc2FsX3RpbWVyLCBqaWZmaWVz ICsgc25faW50ZXJydXB0X3RpbWVvdXQpOw0KLQl9DQotfQ0KLQ0KLQ0KLS8q DQotICogVXNlci1sZXZlbCBjb25zb2xlIHJvdXRpbmVzDQotICovDQotDQot c3RhdGljIGludA0KLXNuX3NhbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0 dHksIHN0cnVjdCBmaWxlICpmaWxwKQ0KLXsNCi0JdW5zaWduZWQgbG9uZyBm bGFnczsNCi0NCi0JRFBSSU5URigic25fc2FsX29wZW46IHNuX3NhbF90dHkg PSAlcCwgdHR5ID0gJXAsIGZpbHAgPSAlcFxuIiwNCi0JCXNuX3NhbF90dHks IHR0eSwgZmlscCk7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbl9zYWxf bG9jaywgZmxhZ3MpOw0KLQlpZiAoIXNuX3NhbF90dHkpDQotCQlzbl9zYWxf dHR5ID0gdHR5Ow0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbl9zYWxf bG9jaywgZmxhZ3MpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotDQotLyog V2UncmUga2VlcGluZyBhbGwgb3VyIHJlc291cmNlcy4gIFdlJ3JlIGtlZXBp bmcgaW50ZXJydXB0cyB0dXJuZWQNCi0gKiBvbi4gIE1heWJlIGp1c3QgbGV0 IHRoZSB0dHkgbGF5ZXIgZmluaXNoIGl0cyBzdHVmZi4uLj8gR01TSA0KLSAq Lw0KLXN0YXRpYyB2b2lkDQotc25fc2FsX2Nsb3NlKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkNCi17DQotCWlmICh0dHkt PmNvdW50ID09IDEpIHsNCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCQl0 dHktPmNsb3NpbmcgPSAxOw0KLQkJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9i dWZmZXIpDQotCQkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOw0K LQkJaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQ0KLQkJCXR0eS0+bGRp c2MuZmx1c2hfYnVmZmVyKHR0eSk7DQotCQl0dHktPmNsb3NpbmcgPSAwOw0K LQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQot CQlzbl9zYWxfdHR5ID0gTlVMTDsNCi0JCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCX0NCi19DQotDQotDQotc3Rh dGljIGludA0KLXNuX3NhbF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5 LCBpbnQgZnJvbV91c2VyLA0KLQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmJ1ZiwgaW50IGNvdW50KQ0KLXsNCi0JaW50IGMsIHJldCA9IDA7DQotCXVu c2lnbmVkIGxvbmcgZmxhZ3M7DQotDQotCWlmIChmcm9tX3VzZXIpIHsNCi0J CXdoaWxlICgxKSB7DQotCQkJaW50IGMxOw0KLQkJCWMgPSBDSVJDX1NQQUNF X1RPX0VORCh4bWl0LmNiX2hlYWQsIHhtaXQuY2JfdGFpbCwNCi0JCQkJCSAg ICAgIFNOX1NBTF9CVUZGRVJfU0laRSk7DQotDQotCQkJaWYgKGNvdW50IDwg YykNCi0JCQkJYyA9IGNvdW50Ow0KLQkJCWlmIChjIDw9IDApDQotCQkJCWJy ZWFrOw0KLQ0KLQkJCWMgLT0gY29weV9mcm9tX3VzZXIoc25fdG1wX2J1ZmZl ciwgYnVmLCBjKTsNCi0JCQlpZiAoIWMpIHsNCi0JCQkJaWYgKCFyZXQpDQot CQkJCQlyZXQgPSAtRUZBVUxUOw0KLQkJCQlicmVhazsNCi0JCQl9DQotDQot CQkJLyogVHVybiBvZmYgaW50ZXJydXB0cyBhbmQgc2VlIGlmIHRoZSB4bWl0 IGJ1ZmZlciBoYXMNCi0JCQkgKiBtb3ZlZCBzaW5jZSB0aGUgbGFzdCB0aW1l IHdlIGxvb2tlZC4NCi0JCQkgKi8NCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgm c25fc2FsX2xvY2ssIGZsYWdzKTsNCi0JCQljMSA9IENJUkNfU1BBQ0VfVE9f RU5EKHhtaXQuY2JfaGVhZCwgeG1pdC5jYl90YWlsLCBTTl9TQUxfQlVGRkVS X1NJWkUpOw0KLQ0KLQkJCWlmIChjMSA8IGMpDQotCQkJCWMgPSBjMTsNCi0N Ci0JCQltZW1jcHkoeG1pdC5jYl9idWYgKyB4bWl0LmNiX2hlYWQsIHNuX3Rt cF9idWZmZXIsIGMpOw0KLQkJCXhtaXQuY2JfaGVhZCA9ICgoeG1pdC5jYl9o ZWFkICsgYykgJiAoU05fU0FMX0JVRkZFUl9TSVpFIC0gMSkpOw0KLQkJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQot DQotCQkJYnVmICs9IGM7DQotCQkJY291bnQgLT0gYzsNCi0JCQlyZXQgKz0g YzsNCi0JCX0NCi0JfQ0KLQllbHNlIHsNCi0JCS8qIFRoZSBidWZmZXIgcGFz c2VkIGluIGlzbid0IGNvbWluZyBmcm9tIHVzZXJsYW5kLA0KLQkJICogc28g Y3V0IG91dCB0aGUgbWlkZGxlbWFuIChzbl90bXBfYnVmZmVyKS4NCi0JCSAq Lw0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7 DQotCQl3aGlsZSAoMSkgew0KLQkJCWMgPSBDSVJDX1NQQUNFX1RPX0VORCh4 bWl0LmNiX2hlYWQsIHhtaXQuY2JfdGFpbCwgU05fU0FMX0JVRkZFUl9TSVpF KTsNCi0NCi0JCQlpZiAoY291bnQgPCBjKQ0KLQkJCQljID0gY291bnQ7DQot CQkJaWYgKGMgPD0gMCkgew0KLQkJCQlicmVhazsNCi0JCQl9DQotCQkJbWVt Y3B5KHhtaXQuY2JfYnVmICsgeG1pdC5jYl9oZWFkLCBidWYsIGMpOw0KLQkJ CXhtaXQuY2JfaGVhZCA9ICgoeG1pdC5jYl9oZWFkICsgYykgJiAoU05fU0FM X0JVRkZFUl9TSVpFIC0gMSkpOw0KLQkJCWJ1ZiArPSBjOw0KLQkJCWNvdW50 IC09IGM7DQotCQkJcmV0ICs9IGM7DQotCQl9DQotCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZzbl9zYWxfbG9jaywgZmxhZ3MpOw0KLQl9DQotDQotCXNw aW5fbG9ja19pcnFzYXZlKCZzbl9zYWxfbG9jaywgZmxhZ3MpOw0KLQlpZiAo eG1pdC5jYl9oZWFkICE9IHhtaXQuY2JfdGFpbCAmJiAhKHR0eSAmJiAodHR5 LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkpKQ0KLQkJaWYgKHNuX2Z1 bmMtPnNhbF93YWtldXBfdHJhbnNtaXQpDQotCQkJc25fZnVuYy0+c2FsX3dh a2V1cF90cmFuc21pdCgpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz bl9zYWxfbG9jaywgZmxhZ3MpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0N Ci0NCi1zdGF0aWMgdm9pZA0KLXNuX3NhbF9wdXRfY2hhcihzdHJ1Y3QgdHR5 X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQ0KLXsNCi0JdW5zaWdu ZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuX3Nh bF9sb2NrLCBmbGFncyk7DQotCWlmIChDSVJDX1NQQUNFKHhtaXQuY2JfaGVh ZCwgeG1pdC5jYl90YWlsLCBTTl9TQUxfQlVGRkVSX1NJWkUpICE9IDApIHsN Ci0JCXhtaXQuY2JfYnVmW3htaXQuY2JfaGVhZF0gPSBjaDsNCi0JCXhtaXQu Y2JfaGVhZCA9ICh4bWl0LmNiX2hlYWQgKyAxKSAmIChTTl9TQUxfQlVGRkVS X1NJWkUtMSk7DQotCQlpZiAoIHNuX2Z1bmMtPnNhbF93YWtldXBfdHJhbnNt aXQgKQ0KLQkJCXNuX2Z1bmMtPnNhbF93YWtldXBfdHJhbnNtaXQoKTsNCi0J fQ0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbl9zYWxfbG9jaywgZmxh Z3MpOw0KLX0NCi0NCi0NCi1zdGF0aWMgdm9pZA0KLXNuX3NhbF9mbHVzaF9j aGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQ0KLXsNCi0JdW5zaWduZWQg bG9uZyBmbGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuX3NhbF9s b2NrLCBmbGFncyk7DQotCWlmIChDSVJDX0NOVCh4bWl0LmNiX2hlYWQsIHht aXQuY2JfdGFpbCwgU05fU0FMX0JVRkZFUl9TSVpFKSkNCi0JCWlmIChzbl9m dW5jLT5zYWxfd2FrZXVwX3RyYW5zbWl0KQ0KLQkJCXNuX2Z1bmMtPnNhbF93 YWtldXBfdHJhbnNtaXQoKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c25fc2FsX2xvY2ssIGZsYWdzKTsNCi19DQotDQotDQotc3RhdGljIGludA0K LXNuX3NhbF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpDQot ew0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlpbnQgc3BhY2U7DQotDQot CXNwaW5fbG9ja19pcnFzYXZlKCZzbl9zYWxfbG9jaywgZmxhZ3MpOw0KLQlz cGFjZSA9IENJUkNfU1BBQ0UoeG1pdC5jYl9oZWFkLCB4bWl0LmNiX3RhaWws IFNOX1NBTF9CVUZGRVJfU0laRSk7DQotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCXJldHVybiBzcGFjZTsNCi19 DQotDQotDQotc3RhdGljIGludA0KLXNuX3NhbF9jaGFyc19pbl9idWZmZXIo c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkNCi17DQotCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQotCWludCBzcGFjZTsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUo JnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCXNwYWNlID0gQ0lSQ19DTlQoeG1p dC5jYl9oZWFkLCB4bWl0LmNiX3RhaWwsIFNOX1NBTF9CVUZGRVJfU0laRSk7 DQotCURQUklOVEYoIjwlZD4iLCBzcGFjZSk7DQotCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCXJldHVybiBzcGFj ZTsNCi19DQotDQotDQotc3RhdGljIHZvaWQNCi1zbl9zYWxfZmx1c2hfYnVm ZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpDQotew0KLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KLQ0KLQkvKiBkcm9wIGV2ZXJ5dGhpbmcgKi8NCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotCXhtaXQu Y2JfaGVhZCA9IHhtaXQuY2JfdGFpbCA9IDA7DQotCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQotDQotCS8qIHdha2Ug dXAgdHR5IGxldmVsICovDQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5 LT53cml0ZV93YWl0KTsNCi0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZ X0RPX1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVw KQ0KLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOw0KLX0NCi0N Ci0NCi1zdGF0aWMgdm9pZA0KLXNuX3NhbF9oYW5ndXAoc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSkNCi17DQotCXNuX3NhbF9mbHVzaF9idWZmZXIodHR5KTsN Ci19DQotDQotDQotc3RhdGljIHZvaWQNCi1zbl9zYWxfd2FpdF91bnRpbF9z ZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQ0KLXsN Ci0JLyogdGhpcyBpcyBTQUwncyBwcm9ibGVtICovDQotCURQUklOVEYoIjxz bl9zZXJpYWw6IHNob3VsZCB3YWl0IHVudGlsIHNlbnQ+Iik7DQotfQ0KLQ0K LQ0KLS8qDQotICogc25fc2FsX3JlYWRfcHJvYw0KLSAqDQotICogQ29uc29s ZSAvcHJvYyBpbnRlcmZhY2UNCi0gKi8NCi0NCi1zdGF0aWMgaW50DQotc25f c2FsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90 IG9mZiwgaW50IGNvdW50LA0KLQkJICAgaW50ICplb2YsIHZvaWQgKmRhdGEp DQotew0KLQlpbnQgbGVuID0gMDsNCi0Jb2ZmX3QJYmVnaW4gPSAwOw0KLQ0K LQlsZW4gKz0gc3ByaW50ZihwYWdlLCAic25fc2VyaWFsOiBuYXNpZDolbGQg aXJxOiVkIHR4OiVkIHJ4OiVkXG4iLA0KLQkJICAgICAgIGlhNjRfc25fZ2V0 X2NvbnNvbGVfbmFzaWQoKSwgc25fc2FsX2lycSwNCi0JCSAgICAgICBzbl90 b3RhbF90eF9jb3VudCwgc25fdG90YWxfcnhfY291bnQpOw0KLQkqZW9mID0g MTsNCi0NCi0JaWYgKG9mZiA+PSBsZW4rYmVnaW4pDQotCQlyZXR1cm4gMDsN Ci0JKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOw0KLQ0KLQlyZXR1cm4g Y291bnQgPCBiZWdpbitsZW4tb2ZmID8gY291bnQgOiBiZWdpbitsZW4tb2Zm Ow0KLX0NCi0NCi0NCi1zdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNu X3NhbF9kcml2ZXJfb3BzID0gew0KLQkub3BlbgkJID0gc25fc2FsX29wZW4s DQotCS5jbG9zZQkJID0gc25fc2FsX2Nsb3NlLA0KLQkud3JpdGUJCSA9IHNu X3NhbF93cml0ZSwNCi0JLnB1dF9jaGFyCSA9IHNuX3NhbF9wdXRfY2hhciwN Ci0JLmZsdXNoX2NoYXJzCSA9IHNuX3NhbF9mbHVzaF9jaGFycywNCi0JLndy aXRlX3Jvb20JID0gc25fc2FsX3dyaXRlX3Jvb20sDQotCS5jaGFyc19pbl9i dWZmZXIgPSBzbl9zYWxfY2hhcnNfaW5fYnVmZmVyLA0KLQkuaGFuZ3VwCQkg PSBzbl9zYWxfaGFuZ3VwLA0KLQkud2FpdF91bnRpbF9zZW50ID0gc25fc2Fs X3dhaXRfdW50aWxfc2VudCwNCi0JLnJlYWRfcHJvYwkgPSBzbl9zYWxfcmVh ZF9wcm9jLA0KLX07DQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpzbl9z YWxfZHJpdmVyOw0KLQ0KLS8qIHNuX3NhbF9pbml0IHdpc2hsaXN0Og0KLSAq IC0gYWxsb2NhdGUgc25fdG1wX2J1ZmZlcg0KLSAqIC0gZml4IHVwIHRoZSB0 dHlfZHJpdmVyIHN0cnVjdA0KLSAqIC0gdHVybiBvbiByZWNlaXZlIGludGVy cnVwdHMNCi0gKiAtIGRvIGFueSB0ZXJtaW9zIHR3aWRkbGluZyBvbmNlIGFu ZCBmb3IgYWxsDQotICovDQotDQotLyoNCi0gKiBCb290LXRpbWUgaW5pdGlh bGl6YXRpb24gY29kZQ0KLSAqLw0KLQ0KLXN0YXRpYyB2b2lkIF9faW5pdA0K LXNuX3NhbF9zd2l0Y2hfdG9fYXN5bmNoKHZvaWQpDQotew0KLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KLQ0KLQkvKiB3aXRob3V0IGVhcmx5X3ByaW50aywg d2UgbWF5IGJlIGludm9rZWQgbGF0ZSBlbm91Z2ggdG8gcmFjZQ0KLQkgKiB3 aXRoIG90aGVyIGNwdXMgZG9pbmcgY29uc29sZSBJTyBhdCB0aGlzIHBvaW50 LCBob3dldmVyDQotCSAqIGNvbnNvbGUgaW50ZXJydXB0cyB3aWxsIG5ldmVy IGJlIGVuYWJsZWQgKi8NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuX3NhbF9s b2NrLCBmbGFncyk7DQotDQotCWlmIChzbl9zYWxfaXNfYXN5bmNoKSB7DQot CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbl9zYWxfbG9jaywgZmxhZ3Mp Ow0KLQkJcmV0dXJuOw0KLQl9DQotDQotCURQUklOVEYoInNuX3NlcmlhbDog c3dpdGNoIHRvIGFzeW5jaHJvbm91cyBjb25zb2xlXG4iKTsNCi0NCi0JLyog ZWFybHlfcHJpbnRrIGludm9jYXRpb24gbWF5IGhhdmUgZG9uZSB0aGlzIGZv ciB1cyAqLw0KLQlpZiAoIXNuX2Z1bmMpIHsNCi0JCWlmIChJU19SVU5OSU5H X09OX1NJTVVMQVRPUigpKQ0KLQkJCXNuX2Z1bmMgPSAmc2ltX29wczsNCi0J CWVsc2UNCi0JCQlzbl9mdW5jID0gJnBvbGxfb3BzOw0KLQl9DQotDQotCS8q IHdlIGNhbid0IHR1cm4gb24gdGhlIGNvbnNvbGUgaW50ZXJydXB0IChhcyBy ZXF1ZXN0X2lycQ0KLQkgKiBjYWxscyBrbWFsbG9jLCB3aGljaCBpc24ndCBz ZXQgdXAgeWV0KSwgc28gd2UgcmVseSBvbiBhDQotCSAqIHRpbWVyIHRvIHBv bGwgZm9yIGlucHV0IGFuZCBwdXNoIGRhdGEgZnJvbSB0aGUgY29uc29sZQ0K LQkgKiBidWZmZXIuDQotCSAqLw0KLQlpbml0X3RpbWVyKCZzbl9zYWxfdGlt ZXIpOw0KLQlzbl9zYWxfdGltZXIuZnVuY3Rpb24gPSBzbl9zYWxfdGltZXJf cG9sbDsNCi0NCi0JaWYgKElTX1JVTk5JTkdfT05fU0lNVUxBVE9SKCkpDQot CQlzbl9pbnRlcnJ1cHRfdGltZW91dCA9IDY7DQotCWVsc2Ugew0KLQkJLyog OTYwY3BzIC8gMTYgY2hhciBGSUZPID0gNjBIWg0KLQkJICogSFogLyAoU05f U0FMX0ZJRk9fU1BFRURfQ1BTIC8gU05fU0FMX0ZJRk9fREVQVEgpICovDQot CQlzbl9pbnRlcnJ1cHRfdGltZW91dCA9IEhaICogU05fU0FMX1VBUlRfRklG T19ERVBUSCAvIFNOX1NBTF9VQVJUX0ZJRk9fU1BFRURfQ1BTOw0KLQl9DQot CW1vZF90aW1lcigmc25fc2FsX3RpbWVyLCBqaWZmaWVzICsgc25faW50ZXJy dXB0X3RpbWVvdXQpOw0KLQ0KLQlzbl9zYWxfaXNfYXN5bmNoID0gMTsNCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25fc2FsX2xvY2ssIGZsYWdzKTsN Ci19DQotDQotc3RhdGljIHZvaWQgX19pbml0DQotc25fc2FsX3N3aXRjaF90 b19pbnRlcnJ1cHRzKHZvaWQpDQotew0KLQlpbnQgaXJxOw0KLQ0KLQlEUFJJ TlRGKCJzbl9zZXJpYWw6IHN3aXRjaGluZyB0byBpbnRlcnJ1cHQgZHJpdmVu IGNvbnNvbGVcbiIpOw0KLQ0KLQlpcnEgPSBzbl9zYWxfY29ubmVjdF9pbnRl cnJ1cHQoKTsNCi0JaWYgKGlycSkgew0KLQkJdW5zaWduZWQgbG9uZyBmbGFn czsNCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzbl9zYWxfbG9jaywgZmxhZ3Mp Ow0KLQ0KLQkJLyogc25fc2FsX2lycSBpcyBhIGdsb2JhbCB2YXJpYWJsZS4g IFdoZW4gaXQncyBzZXQgdG8NCi0JCSAqIGEgbm9uLXplcm8gdmFsdWUsIHdl IHN0b3AgcG9sbGluZyBmb3IgaW5wdXQgKHNpbmNlDQotCQkgKiBpbnRlcnJ1 cHRzIHNob3VsZCBub3cgYmUgZW5hYmxlZCkuICovDQotCQlzbl9zYWxfaXJx ID0gaXJxOw0KLQkJc25fZnVuYyA9ICZpbnRyX29wczsNCi0NCi0JCS8qIHR1 cm4gb24gcmVjZWl2ZSBpbnRlcnJ1cHRzICovDQotCQlpYTY0X3NuX2NvbnNv bGVfaW50cl9lbmFibGUoU0FMX0NPTlNPTEVfSU5UUl9SRUNWKTsNCi0JCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuX3NhbF9sb2NrLCBmbGFncyk7DQot CX0NCi19DQotDQotc3RhdGljIGludCBfX2luaXQNCi1zbl9zYWxfbW9kdWxl X2luaXQodm9pZCkNCi17DQotCWludCByZXR2YWw7DQotDQotCURQUklOVEYo InNuX3NlcmlhbDogc25fc2FsX21vZHVsZV9pbml0XG4iKTsNCi0NCi0JaWYg KCFpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkNCi0JCXJldHVybiAtRU5PREVW Ow0KLQ0KLQlzbl9zYWxfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcigxKTsN Ci0JaWYgKCAhc25fc2FsX2RyaXZlciApDQotCQlyZXR1cm4gLUVOT01FTTsN Ci0NCi0Jc25fc2FsX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsNCi0J c25fc2FsX2RyaXZlci0+ZHJpdmVyX25hbWUgPSAic25fc2VyaWFsIjsNCi0J c25fc2FsX2RyaXZlci0+bmFtZSA9ICJ0dHlTIjsNCi0Jc25fc2FsX2RyaXZl ci0+bWFqb3IgPSBUVFlfTUFKT1I7DQotCXNuX3NhbF9kcml2ZXItPm1pbm9y X3N0YXJ0ID0gU05fU0FMX01JTk9SOw0KLQlzbl9zYWxfZHJpdmVyLT50eXBl ID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsNCi0Jc25fc2FsX2RyaXZlci0+ c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsNCi0Jc25fc2FsX2RyaXZl ci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9O T19ERVZGUzsNCi0NCi0JdHR5X3NldF9vcGVyYXRpb25zKHNuX3NhbF9kcml2 ZXIsICZzbl9zYWxfZHJpdmVyX29wcyk7DQotDQotCS8qIHdoZW4gdGhpcyBk cml2ZXIgaXMgY29tcGlsZWQgaW4sIHRoZSBjb25zb2xlIGluaXRpYWxpemF0 aW9uDQotCSAqIHdpbGwgaGF2ZSBhbHJlYWR5IHN3aXRjaGVkIHVzIGludG8g YXN5bmNocm9ub3VzIG9wZXJhdGlvbg0KLQkgKiBiZWZvcmUgd2UgZ2V0IGhl cmUgdGhyb3VnaCB0aGUgbW9kdWxlIGluaXRjYWxscyAqLw0KLQlzbl9zYWxf c3dpdGNoX3RvX2FzeW5jaCgpOw0KLQ0KLQkvKiBhdCB0aGlzIHBvaW50ICht b2R1bGVfaW5pdCkgd2UgY2FuIHRyeSB0byB0dXJuIG9uIGludGVycnVwdHMg Ki8NCi0JaWYgKCFJU19SVU5OSU5HX09OX1NJTVVMQVRPUigpKQ0KLQkgICAg c25fc2FsX3N3aXRjaF90b19pbnRlcnJ1cHRzKCk7DQotDQotCXNuX3NhbF9k cml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsNCi0Jc25f c2FsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENT OCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7DQotDQotCWlmICgocmV0dmFs ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzbl9zYWxfZHJpdmVyKSkpIHsNCi0J CXByaW50ayhLRVJOX0VSUiAic25fc2VyaWFsOiBVbmFibGUgdG8gcmVnaXN0 ZXIgdHR5IGRyaXZlclxuIik7DQotCQlyZXR1cm4gcmV0dmFsOw0KLQl9DQot CXJldHVybiAwOw0KLX0NCi0NCi0NCi1zdGF0aWMgdm9pZCBfX2V4aXQNCi1z bl9zYWxfbW9kdWxlX2V4aXQodm9pZCkNCi17DQotCWRlbF90aW1lcl9zeW5j KCZzbl9zYWxfdGltZXIpOw0KLQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc25f c2FsX2RyaXZlcik7DQotCXB1dF90dHlfZHJpdmVyKHNuX3NhbF9kcml2ZXIp Ow0KLX0NCi0NCi1tb2R1bGVfaW5pdChzbl9zYWxfbW9kdWxlX2luaXQpOw0K LW1vZHVsZV9leGl0KHNuX3NhbF9tb2R1bGVfZXhpdCk7DQotDQotLyoNCi0g KiBLZXJuZWwgY29uc29sZSBkZWZpbml0aW9ucw0KLSAqLw0KLQ0KLSNpZmRl ZiBDT05GSUdfU0dJX0wxX1NFUklBTF9DT05TT0xFDQotLyoNCi0gKiBQcmlu dCBhIHN0cmluZyB0byB0aGUgU0FMIGNvbnNvbGUuICBUaGUgY29uc29sZV9s b2NrIG11c3QgYmUgaGVsZA0KLSAqIHdoZW4gd2UgZ2V0IGhlcmUuDQotICov DQotc3RhdGljIHZvaWQNCi1zbl9zYWxfY29uc29sZV93cml0ZShzdHJ1Y3Qg Y29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQ0K LXsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JY29uc3QgY2hhciAqczE7 DQotDQotCUJVR19PTighc25fc2FsX2lzX2FzeW5jaCk7DQotDQotCS8qIHNv bWVib2R5IHJlYWxseSB3YW50cyB0aGlzIG91dHB1dCwgbWlnaHQgYmUgYW4N Ci0JICogb29wcywga2RiLCBwYW5pYywgZXRjLiAgbWFrZSBzdXJlIHRoZXkg Z2V0IGl0LiAqLw0KLQlpZiAoc3Bpbl9pc19sb2NrZWQoJnNuX3NhbF9sb2Nr KSkgew0KLQkJc3luY2hfZmx1c2hfeG1pdCgpOw0KLQkJLyogT3V0cHV0ICdc cicgYmVmb3JlIGVhY2ggJ1xuJyAqLw0KLQkJd2hpbGUgKChzMSA9IG1lbWNo cihzLCAnXG4nLCBjb3VudCkpICE9IE5VTEwpIHsNCi0JCQlzbl9mdW5jLT5z YWxfcHV0cyhzLCBzMSAtIHMpOw0KLQkJCXNuX2Z1bmMtPnNhbF9wdXRzKCJc clxuIiwgMik7DQotCQkJY291bnQgLT0gczEgKyAxIC0gczsNCi0JCQlzID0g czEgKyAxOw0KLQkJfQ0KLQkJc25fZnVuYy0+c2FsX3B1dHMocywgY291bnQp Ow0KLQl9DQotCWVsc2UgaWYgKGluX2ludGVycnVwdCgpKSB7DQotCQlzcGlu X2xvY2tfaXJxc2F2ZSgmc25fc2FsX2xvY2ssIGZsYWdzKTsNCi0JCXN5bmNo X2ZsdXNoX3htaXQoKTsNCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNu X3NhbF9sb2NrLCBmbGFncyk7DQotCQkvKiBPdXRwdXQgJ1xyJyBiZWZvcmUg ZWFjaCAnXG4nICovDQotCQl3aGlsZSAoKHMxID0gbWVtY2hyKHMsICdcbics IGNvdW50KSkgIT0gTlVMTCkgew0KLQkJCXNuX2Z1bmMtPnNhbF9wdXRzKHMs IHMxIC0gcyk7DQotCQkJc25fZnVuYy0+c2FsX3B1dHMoIlxyXG4iLCAyKTsN Ci0JCQljb3VudCAtPSBzMSArIDEgLSBzOw0KLQkJCXMgPSBzMSArIDE7DQot CQl9DQotCQlzbl9mdW5jLT5zYWxfcHV0cyhzLCBjb3VudCk7DQotCX0NCi0J ZWxzZSB7DQotCQkvKiBPdXRwdXQgJ1xyJyBiZWZvcmUgZWFjaCAnXG4nICov DQotCQl3aGlsZSAoKHMxID0gbWVtY2hyKHMsICdcbicsIGNvdW50KSkgIT0g TlVMTCkgew0KLQkJCXNuX3NhbF93cml0ZShOVUxMLCAwLCBzLCBzMSAtIHMp Ow0KLQkJCXNuX3NhbF93cml0ZShOVUxMLCAwLCAiXHJcbiIsIDIpOw0KLQkJ CWNvdW50IC09IHMxICsgMSAtIHM7DQotCQkJcyA9IHMxICsgMTsNCi0JCX0N Ci0JCXNuX3NhbF93cml0ZShOVUxMLCAwLCBzLCBjb3VudCk7DQotCX0NCi19 DQotDQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICoNCi1zbl9zYWxfY29u c29sZV9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpDQot ew0KLQkqaW5kZXggPSBjLT5pbmRleDsNCi0JcmV0dXJuIHNuX3NhbF9kcml2 ZXI7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgX19pbml0DQotc25fc2FsX2NvbnNv bGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQ0K LXsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgY29u c29sZSBzYWxfY29uc29sZSA9IHsNCi0JLm5hbWUgPSAidHR5UyIsDQotCS53 cml0ZSA9IHNuX3NhbF9jb25zb2xlX3dyaXRlLA0KLQkuZGV2aWNlID0gc25f c2FsX2NvbnNvbGVfZGV2aWNlLA0KLQkuc2V0dXAgPSBzbl9zYWxfY29uc29s ZV9zZXR1cCwNCi0JLmluZGV4ID0gLTENCi19Ow0KLQ0KLXN0YXRpYyBpbnQg X19pbml0DQotc25fc2FsX3NlcmlhbF9jb25zb2xlX2luaXQodm9pZCkNCi17 DQotCWlmIChpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkgew0KLQkJc25fc2Fs X3N3aXRjaF90b19hc3luY2goKTsNCi0JCURQUklOVEYoInNuX3NhbF9zZXJp YWxfY29uc29sZV9pbml0IDogcmVnaXN0ZXIgY29uc29sZVxuIik7DQotCQly ZWdpc3Rlcl9jb25zb2xlKCZzYWxfY29uc29sZSk7DQotCX0NCi0JcmV0dXJu IDA7DQotfQ0KLWNvbnNvbGVfaW5pdGNhbGwoc25fc2FsX3NlcmlhbF9jb25z b2xlX2luaXQpOw0KLQ0KLSNlbmRpZiAvKiBDT05GSUdfU0dJX0wxX1NFUklB TF9DT05TT0xFICovDQpkaWZmIC1OcnUgYS9kcml2ZXJzL3NlcmlhbC9LY29u ZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZw0KLS0tIGEvZHJpdmVycy9z ZXJpYWwvS2NvbmZpZwkyMDA0LTA2LTI0IDE3OjI4OjMzIC0wNTowMA0KKysr IGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwkyMDA0LTA2LTI0IDE3OjI4OjMz IC0wNTowMA0KQEAgLTYwMyw1ICs2MDMsMTMgQEANCiAJICBvbiB5b3VyIFBv d2VyTWFjIGFzIHRoZSBjb25zb2xlLCB5b3UgY2FuIGRvIHNvIGJ5IGFuc3dl cmluZw0KIAkgIFkgdG8gdGhpcyBvcHRpb24uDQogDQotZW5kbWVudQ0KK2Nv bmZpZyBTRVJJQUxfU0dJX0wxX0NPTlNPTEUNCisJYm9vbCAiU0dJIEFsdGl4 IEwxIHNlcmlhbCBjb25zb2xlIHN1cHBvcnQiDQorCWRlcGVuZHMgb24gSUE2 NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMg0KKwlzZWxlY3QgU0VSSUFMX0NP UkUNCisJaGVscA0KKwkJSWYgeW91IGhhdmUgYW4gU0dJIEFsdGl4IGFuZCB5 b3Ugd291bGQgbGlrZSB0byB1c2UgdGhlIHN5c3RlbQ0KKwkJY29udHJvbGxl ciBzZXJpYWwgcG9ydCBhcyB5b3VyIGNvbnNvbGUgKHlvdSB3YW50IHRoaXMh KSwNCisJCXNheSBZLiAgT3RoZXJ3aXNlLCBzYXkgTi4NCiANCitlbmRtZW51 DQpkaWZmIC1OcnUgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZl cnMvc2VyaWFsL01ha2VmaWxlDQotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtl ZmlsZQkyMDA0LTA2LTI0IDE3OjI4OjMzIC0wNTowMA0KKysrIGIvZHJpdmVy cy9zZXJpYWwvTWFrZWZpbGUJMjAwNC0wNi0yNCAxNzoyODozMyAtMDU6MDAN CkBAIC0zOCwzICszOCw0IEBADQogb2JqLSQoQ09ORklHX1NFUklBTF9EWikg Kz0gZHoubw0KIG9iai0kKENPTkZJR19TRVJJQUxfU0hfU0NJKSArPSBzaC1z Y2kubw0KIG9iai0kKENPTkZJR19TRVJJQUxfQkFTVF9TSU8pICs9IGJhc3Rf c2lvLm8NCitvYmotJChDT05GSUdfU0VSSUFMX1NHSV9MMV9DT05TT0xFKSAr PSBzbl9jb25zb2xlLm8NCmRpZmYgLU5ydSBhL2RyaXZlcnMvc2VyaWFsL3Nu X2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYw0KLS0t IC9kZXYvbnVsbAlXZWQgRGVjIDMxIDE2OjAwOjAwIDE5NjkwMA0KKysrIGIv ZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCTIwMDQtMDYtMjQgMTc6Mjg6 MzMgLTA1OjAwDQpAQCAtMCwwICsxLDExOTEgQEANCisvKg0KKyAqIEMtQnJp Y2sgU2VyaWFsIFBvcnQgKGFuZCBjb25zb2xlKSBkcml2ZXIgZm9yIFNHSSBB bHRpeCBtYWNoaW5lcy4NCisgKg0KKyAqIFRoaXMgZHJpdmVyIGlzIE5PVCBz dWl0YWJsZSBmb3IgdGFsa2luZyB0byB0aGUgbDEtY29udHJvbGxlciBmb3IN CisgKiBhbnl0aGluZyBvdGhlciB0aGFuICdjb25zb2xlIGFjdGl2aXRpZXMn IC0tLSBwbGVhc2UgdXNlIHRoZSBsMQ0KKyAqIGRyaXZlciBmb3IgdGhhdC4N CisgKg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbGljb24gR3Jh cGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorICoNCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyIHRoZSB0ZXJt cyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlDQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dA0K KyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuDQorICoNCisgKiBGdXJ0 aGVyLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55 IHdhcnJhbnR5IHRoYXQgaXQgaXMNCisgKiBmcmVlIG9mIHRoZSByaWdodGZ1 bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5n ZW1lbnQNCisgKiBvciB0aGUgbGlrZS4gIEFueSBsaWNlbnNlIHByb3ZpZGVk IGhlcmVpbiwgd2hldGhlciBpbXBsaWVkIG9yDQorICogb3RoZXJ3aXNlLCBh cHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBmaWxlLiAgUGF0ZW50IGxp Y2Vuc2VzLCBpZg0KKyAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBh cHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgNCisg KiBvdGhlciBzb2Z0d2FyZSwgb3IgYW55IG90aGVyIHByb2R1Y3Qgd2hhdHNv ZXZlci4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUg U29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuDQor ICoNCisgKiBDb250YWN0IGluZm9ybWF0aW9uOiAgU2lsaWNvbiBHcmFwaGlj cywgSW5jLiwgMTUwMCBDcml0dGVuZGVuIExhbmUsDQorICogTW91bnRhaW4g VmlldywgQ0EgIDk0MDQzLCBvcjoNCisgKg0KKyAqIGh0dHA6Ly93d3cuc2dp LmNvbQ0KKyAqDQorICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJk aW5nIHRoaXMgbm90aWNlLCBzZWU6DQorICoNCisgKiBodHRwOi8vb3NzLnNn aS5jb20vcHJvamVjdHMvR2VuSW5mby9Ob3RpY2VFeHBsYW4NCisgKi8NCisN CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQorI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4NCisjaW5j bHVkZSA8bGludXgvc2VyaWFsLmg+DQorI2luY2x1ZGUgPGxpbnV4L2NvbnNv bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUg PGxpbnV4L3N5c3JxLmg+DQorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4NCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4gLyogZm9yIG1kZWxheSAqLw0KKyNpbmNsdWRlIDxs aW51eC9taXNjZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9j b3JlLmg+DQorDQorI2luY2x1ZGUgPGFzbS9zbi9zaW11bGF0b3IuaD4NCisj aW5jbHVkZSA8YXNtL3NuL3NuMi9zbl9wcml2YXRlLmg+DQorI2luY2x1ZGUg PGFzbS9zbi9zbl9zYWwuaD4NCisNCisvKiBudW1iZXIgb2YgY2hhcmFjdGVy cyB3ZSBjYW4gdHJhbnNtaXQgdG8gdGhlIFNBTCBjb25zb2xlIGF0IGEgdGlt ZSAqLw0KKyNkZWZpbmUgU05fU0FMX01BWF9DSEFSUyAxMjANCisNCisvKiA2 NEssIHdoZW4gd2UncmUgYXN5bmNoLCBpdCBtdXN0IGJlIGF0IGxlYXN0IHBy aW50aydzIExPR19CVUZfTEVOIHRvDQorICogYXZvaWQgbG9zaW5nIGNoYXJz LCAoYWx3YXlzIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIpICovDQorI2RlZmlu ZSBTTl9TQUxfQlVGRkVSX1NJWkUgKDY0ICogKDEgPDwgMTApKQ0KKw0KKyNk ZWZpbmUgU05fU0FMX1VBUlRfRklGT19ERVBUSCAxNg0KKyNkZWZpbmUgU05f U0FMX1VBUlRfRklGT19TUEVFRF9DUFMgOTYwMC8xMA0KKw0KKy8qIHNuX3Ry YW5zbWl0X2NoYXJzKCkgY2FsbGluZyBhcmdzICovDQorI2RlZmluZSBUUkFO U01JVF9CVUZGRVJFRAkwDQorI2RlZmluZSBUUkFOU01JVF9SQVcJCTENCisN CisvKiBUbyB1c2UgZHluYW1pYyBudW1iZXJzIG9ubHkgYW5kIG5vdCB1c2Ug dGhlIGFzc2lnbmVkIG1ham9yIGFuZCBtaW5vciwgDQorICogZGVmaW5lIHRo ZSBmb2xsb3dpbmcuLiAqLw0KKy8qICNkZWZpbmUgVVNFX0RZTkFNSUNfTUlO T1IgMSAqLyAvKiB1c2UgZHluYW1pYyBtaW5vciBudW1iZXIgKi8NCisjZGVm aW5lIFVTRV9EWU5BTUlDX01JTk9SIDAgLyogRG9uJ3QgcmVseSBvbiBtaXNj X3JlZ2lzdGVyIGR5bmFtaWMgbWlub3IgKi8NCisNCisvKiBEZXZpY2UgbmFt ZSB3ZSdyZSB1c2luZyAqLw0KKyNkZWZpbmUgREVWSUNFX05BTUUgInR0eVNH Ig0KKyNkZWZpbmUgREVWSUNFX05BTUVfRFlOQU1JQyAidHR5U0cwIiAgLyog bmVlZCBmdWxsIG5hbWUgZm9yIG1pc2NfcmVnaXN0ZXIgKi8NCisvKiBUaGUg bWFqb3IvbWlub3Igd2UgYXJlIHVzaW5nLCBpZ25vcmVkIGZvciBVU0VfRFlO QU1JQ19NSU5PUiAqLw0KKyNkZWZpbmUgREVWSUNFX01BSk9SIDIwNA0KKyNk ZWZpbmUgREVWSUNFX01JTk9SIDQwDQorDQorLyoNCisgKiBQb3J0IGRlZmlu aXRpb24gLSB0aGlzIGtpbmRhIGRyaXZlcyBpdCBhbGwNCisgKi8NCitzdHJ1 Y3Qgc25fY29uc19wb3J0IHsNCisJc3RydWN0IHRpbWVyX2xpc3Qgc2NfdGlt ZXI7DQorCXN0cnVjdCB1YXJ0X3BvcnQgc2NfcG9ydDsNCisJc3RydWN0IHNu X3NhbF9vcHMgew0KKwkJaW50ICgqc2FsX3B1dHNfcmF3KSAoY29uc3QgY2hh ciAqcywgaW50IGxlbik7DQorCQlpbnQgKCpzYWxfcHV0cykgKGNvbnN0IGNo YXIgKnMsIGludCBsZW4pOw0KKwkJaW50ICgqc2FsX2dldGMpICh2b2lkKTsN CisJCWludCAoKnNhbF9pbnB1dF9wZW5kaW5nKSAodm9pZCk7DQorCQl2b2lk ICgqc2FsX3dha2V1cF90cmFuc21pdCkgKHN0cnVjdCBzbl9jb25zX3BvcnQg KiwgaW50KTsNCisJfSAqc2Nfb3BzOw0KKwl1bnNpZ25lZCBsb25nIHNjX2lu dGVycnVwdF90aW1lb3V0Ow0KKwlpbnQgc2NfaXNfYXN5bmNoOw0KK307DQor DQorc3RhdGljIHN0cnVjdCBzbl9jb25zX3BvcnQgc2FsX2NvbnNvbGVfcG9y dDsNCisNCisvKiBPbmx5IHVzZWQgaWYgVVNFX0RZTkFNSUNfTUlOT1IgaXMg c2V0IHRvIDEgKi8NCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzYzsg LyogdXNlZCB3aXRoIG1pc2NfcmVnaXN0ZXIgZm9yIGR5bmFtaWMgKi8NCisN CitleHRlcm4gdTY0IG1hc3Rlcl9ub2RlX2JlZHJvY2tfYWRkcmVzczsNCitl eHRlcm4gdm9pZCBlYXJseV9zbl9zZXR1cCh2b2lkKTsNCisNCitzdGF0aWMg aW50IHNuX2RlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7DQor DQorI3VuZGVmIERFQlVHDQorI2lmZGVmIERFQlVHDQorI2RlZmluZSBEUFJJ TlRGKHguLi4pIHNuX2RlYnVnX3ByaW50Zih4KQ0KKyNlbHNlDQorI2RlZmlu ZSBEUFJJTlRGKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkNCisjZW5kaWYNCisN CisvKiBQcm90b3R5cGVzICovDQorc3RhdGljIGludCBzbnRfaHdfcHV0c19y YXcoY29uc3QgY2hhciAqLCBpbnQpOw0KK3N0YXRpYyBpbnQgc250X2h3X3B1 dHNfYnVmZmVyZWQoY29uc3QgY2hhciAqLCBpbnQpOw0KK3N0YXRpYyBpbnQg c250X3BvbGxfZ2V0Yyh2b2lkKTsNCitzdGF0aWMgaW50IHNudF9wb2xsX2lu cHV0X3BlbmRpbmcodm9pZCk7DQorc3RhdGljIGludCBzbnRfc2ltX3B1dHMo Y29uc3QgY2hhciAqLCBpbnQpOw0KK3N0YXRpYyBpbnQgc250X3NpbV9nZXRj KHZvaWQpOw0KK3N0YXRpYyBpbnQgc250X3NpbV9pbnB1dF9wZW5kaW5nKHZv aWQpOw0KK3N0YXRpYyBpbnQgc250X2ludHJfZ2V0Yyh2b2lkKTsNCitzdGF0 aWMgaW50IHNudF9pbnRyX2lucHV0X3BlbmRpbmcodm9pZCk7DQorc3RhdGlj IHZvaWQgc25fdHJhbnNtaXRfY2hhcnMoc3RydWN0IHNuX2NvbnNfcG9ydCAq LCBpbnQpOw0KKw0KKy8qIEEgdGFibGUgZm9yIHBvbGxpbmc6DQorICovDQor c3RhdGljIHN0cnVjdCBzbl9zYWxfb3BzIHBvbGxfb3BzID0gew0KKwkuc2Fs X3B1dHNfcmF3ID0gc250X2h3X3B1dHNfcmF3LA0KKwkuc2FsX3B1dHMgPSBz bnRfaHdfcHV0c19yYXcsDQorCS5zYWxfZ2V0YyA9IHNudF9wb2xsX2dldGMs DQorCS5zYWxfaW5wdXRfcGVuZGluZyA9IHNudF9wb2xsX2lucHV0X3BlbmRp bmcNCit9Ow0KKw0KKy8qIEEgdGFibGUgZm9yIHRoZSBzaW11bGF0b3IgKi8N CitzdGF0aWMgc3RydWN0IHNuX3NhbF9vcHMgc2ltX29wcyA9IHsNCisJLnNh bF9wdXRzX3JhdyA9IHNudF9zaW1fcHV0cywNCisJLnNhbF9wdXRzID0gc250 X3NpbV9wdXRzLA0KKwkuc2FsX2dldGMgPSBzbnRfc2ltX2dldGMsDQorCS5z YWxfaW5wdXRfcGVuZGluZyA9IHNudF9zaW1faW5wdXRfcGVuZGluZw0KK307 DQorDQorLyogQSB0YWJsZSBmb3IgaW50ZXJydXB0cyBlbmFibGVkICovDQor c3RhdGljIHN0cnVjdCBzbl9zYWxfb3BzIGludHJfb3BzID0gew0KKwkuc2Fs X3B1dHNfcmF3ID0gc250X2h3X3B1dHNfcmF3LA0KKwkuc2FsX3B1dHMgPSBz bnRfaHdfcHV0c19idWZmZXJlZCwNCisJLnNhbF9nZXRjID0gc250X2ludHJf Z2V0YywNCisJLnNhbF9pbnB1dF9wZW5kaW5nID0gc250X2ludHJfaW5wdXRf cGVuZGluZywNCisJLnNhbF93YWtldXBfdHJhbnNtaXQgPSBzbl90cmFuc21p dF9jaGFycw0KK307DQorDQorLyogdGhlIGNvbnNvbGUgZG9lcyBvdXRwdXQg aW4gdHdvIGRpc3RpbmN0bHkgZGlmZmVyZW50IHdheXM6DQorICogc3luY2hy b25vdXMgKHJhdykgYW5kIGFzeW5jaHJvbm91cyAoYnVmZmVyZWQpLiAgaW5p dGFsbHksIGVhcmx5X3ByaW50aw0KKyAqIGRvZXMgc3luY2hyb25vdXMgb3V0 cHV0LiAgYW55IGRhdGEgd3JpdHRlbiBnb2VzIGRpcmVjdGx5IHRvIHRoZSBT QUwNCisgKiB0byBiZSBvdXRwdXQgKGluY2lkZW50YWxseSwgaXQgaXMgaW50 ZXJuYWxseSBidWZmZXJlZCBieSB0aGUgU0FMKQ0KKyAqIGFmdGVyIGludGVy cnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGF2YWlsYWJs ZSBmb3IgdXNlLA0KKyAqIHRoZSBjb25zb2xlIGluaXQgY29kZSBzd2l0Y2hl cyB0byBhc3luY2hyb25vdXMgb3V0cHV0LiAgdGhpcyBpcw0KKyAqIGFsc28g dGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IHRvIGJlZ2luIHBvbGxpbmcgZm9y IGNvbnNvbGUgaW5wdXQuDQorICogYWZ0ZXIgY29uc29sZSBpbml0aWFsaXph dGlvbiwgY29uc29sZSBvdXRwdXQgYW5kIHR0eSAoc2VyaWFsIHBvcnQpDQor ICogb3V0cHV0IGlzIGJ1ZmZlcmVkIGFuZCBzZW50IHRvIHRoZSBTQUwgYXN5 bmNocm9ub3VzbHkgKGVpdGhlciBieQ0KKyAqIHRpbWVyIGNhbGxiYWNrIG9y IGJ5IFVBUlQgaW50ZXJydXB0KSAqLw0KKw0KKw0KKy8qIHJvdXRpbmVzIGZv ciBydW5uaW5nIHRoZSBjb25zb2xlIGluIHBvbGxpbmcgbW9kZSAqLw0KKw0K Ky8qKg0KKyAqIHNudF9wb2xsX2dldGMgLSBHZXQgYSBjaGFyYWN0ZXIgZnJv bSB0aGUgY29uc29sZSBpbiBwb2xsaW5nIG1vZGUNCisgKg0KKyAqLw0KK3N0 YXRpYyBpbnQNCitzbnRfcG9sbF9nZXRjKHZvaWQpDQorew0KKwlpbnQgY2g7 DQorDQorCWlhNjRfc25fY29uc29sZV9nZXRjKCZjaCk7DQorCXJldHVybiBj aDsNCit9DQorDQorLyoqDQorICogc250X3BvbGxfaW5wdXRfcGVuZGluZyAt IENoZWNrIGlmIGFueSBpbnB1dCBpcyB3YWl0aW5nIC0gcG9sbGluZyBtb2Rl Lg0KKyAqDQorICovDQorc3RhdGljIGludA0KK3NudF9wb2xsX2lucHV0X3Bl bmRpbmcodm9pZCkNCit7DQorCWludCBzdGF0dXMsIGlucHV0Ow0KKw0KKwlz dGF0dXMgPSBpYTY0X3NuX2NvbnNvbGVfY2hlY2soJmlucHV0KTsNCisJcmV0 dXJuICFzdGF0dXMgJiYgaW5wdXQ7DQorfQ0KKw0KKy8qIHJvdXRpbmVzIGZv ciBydW5uaW5nIHRoZSBjb25zb2xlIG9uIHRoZSBzaW11bGF0b3IgKi8NCisN CisvKioNCisgKiBzbnRfc2ltX3B1dHMgLSBzZW5kIHRvIHRoZSBjb25zb2xl LCB1c2VkIGluIHNpbXVsYXRvciBtb2RlDQorICogQHN0cjogU3RyaW5nIHRv IHNlbmQNCisgKiBAY291bnQ6IGxlbmd0aCBvZiBzdHJpbmcNCisgKg0KKyAq Lw0KK3N0YXRpYyBpbnQNCitzbnRfc2ltX3B1dHMoY29uc3QgY2hhciAqc3Ry LCBpbnQgY291bnQpDQorew0KKwlpbnQgY291bnRlciA9IGNvdW50Ow0KKw0K KyNpZmRlZiBGTEFHX0RJUkVDVF9DT05TT0xFX1dSSVRFUw0KKwkvKiBUaGlz IGlzIGFuIGVhc3kgd2F5IHRvIHByZS1wZW5kIHRoZSBvdXRwdXQgdG8ga25v dyB3aGV0aGVyIHRoZSBvdXRwdXQNCisJICogd2FzIGRvbmUgdmlhIHNhbCBv ciBkaXJlY3RseSAqLw0KKwl3cml0ZWIoJ1snLCBtYXN0ZXJfbm9kZV9iZWRy b2NrX2FkZHJlc3MgKyAoVUFSVF9UWCA8PCAzKSk7DQorCXdyaXRlYignKycs IG1hc3Rlcl9ub2RlX2JlZHJvY2tfYWRkcmVzcyArIChVQVJUX1RYIDw8IDMp KTsNCisJd3JpdGViKCddJywgbWFzdGVyX25vZGVfYmVkcm9ja19hZGRyZXNz ICsgKFVBUlRfVFggPDwgMykpOw0KKwl3cml0ZWIoJyAnLCBtYXN0ZXJfbm9k ZV9iZWRyb2NrX2FkZHJlc3MgKyAoVUFSVF9UWCA8PCAzKSk7DQorI2VuZGlm CQkJCS8qIEZMQUdfRElSRUNUX0NPTlNPTEVfV1JJVEVTICovDQorCXdoaWxl IChjb3VudGVyID4gMCkgew0KKwkJd3JpdGViKCpzdHIsIG1hc3Rlcl9ub2Rl X2JlZHJvY2tfYWRkcmVzcyArIChVQVJUX1RYIDw8IDMpKTsNCisJCWNvdW50 ZXItLTsNCisJCXN0cisrOw0KKwl9DQorCXJldHVybiBjb3VudDsNCit9DQor DQorLyoqDQorICogc250X3NpbV9nZXRjIC0gR2V0IGNoYXJhY3RlciBmcm9t IGNvbnNvbGUgaW4gc2ltdWxhdG9yIG1vZGUNCisgKg0KKyAqLw0KK3N0YXRp YyBpbnQNCitzbnRfc2ltX2dldGModm9pZCkNCit7DQorCXJldHVybiByZWFk YihtYXN0ZXJfbm9kZV9iZWRyb2NrX2FkZHJlc3MgKyAoVUFSVF9SWCA8PCAz KSk7DQorfQ0KKw0KKy8qKg0KKyAqIHNudF9zaW1faW5wdXRfcGVuZGluZyAt IENoZWNrIGlmIHRoZXJlIGlzIGlucHV0IHBlbmRpbmcgaW4gc2ltdWxhdG9y IG1vZGUNCisgKg0KKyAqLw0KK3N0YXRpYyBpbnQNCitzbnRfc2ltX2lucHV0 X3BlbmRpbmcodm9pZCkNCit7DQorCXJldHVybiByZWFkYihtYXN0ZXJfbm9k ZV9iZWRyb2NrX2FkZHJlc3MgKw0KKwkJICAgICAoVUFSVF9MU1IgPDwgMykp ICYgVUFSVF9MU1JfRFI7DQorfQ0KKw0KKy8qIHJvdXRpbmVzIGZvciBhbiBp bnRlcnJ1cHQgZHJpdmVuIGNvbnNvbGUgKG5vcm1hbCkgKi8NCisNCisvKioN CisgKiBzbnRfaW50cl9nZXRjIC0gR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhl IGNvbnNvbGUsIGludGVycnVwdCBtb2RlDQorICoNCisgKi8NCitzdGF0aWMg aW50DQorc250X2ludHJfZ2V0Yyh2b2lkKQ0KK3sNCisJcmV0dXJuIGlhNjRf c25fY29uc29sZV9yZWFkYygpOw0KK30NCisNCisvKioNCisgKiBzbnRfaW50 cl9pbnB1dF9wZW5kaW5nIC0gQ2hlY2sgaWYgaW5wdXQgaXMgcGVuZGluZywg aW50ZXJydXB0IG1vZGUNCisgKg0KKyAqLw0KK3N0YXRpYyBpbnQNCitzbnRf aW50cl9pbnB1dF9wZW5kaW5nKHZvaWQpDQorew0KKwlyZXR1cm4gaWE2NF9z bl9jb25zb2xlX2ludHJfc3RhdHVzKCkgJiBTQUxfQ09OU09MRV9JTlRSX1JF Q1Y7DQorfQ0KKw0KKy8qIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcG9sbGVkIGFu ZCBpbnRlcnJ1cHQgKi8NCisNCisvKioNCisgKiBzbnRfaHdfcHV0c19yYXcg LSBTZW5kIHJhdyBzdHJpbmcgdG8gdGhlIGNvbnNvbGUsIHBvbGxlZCBvciBp bnRlcnJ1cHQgbW9kZQ0KKyAqIEBzOiBTdHJpbmcNCisgKiBAbGVuOiBMZW5n dGgNCisgKg0KKyAqLw0KK3N0YXRpYyBpbnQNCitzbnRfaHdfcHV0c19yYXco Y29uc3QgY2hhciAqcywgaW50IGxlbikNCit7DQorCS8qIHRoaXMgd2lsbCBj YWxsIHRoZSBQUk9NIGFuZCBub3QgcmV0dXJuIHVudGlsIHRoaXMgaXMgZG9u ZSAqLw0KKwlyZXR1cm4gaWE2NF9zbl9jb25zb2xlX3B1dGIocywgbGVuKTsN Cit9DQorDQorLyoqDQorICogc250X2h3X3B1dHNfYnVmZmVyZWQgLSBTZW5k IHN0cmluZyB0byBjb25zb2xlLCBwb2xsZWQgb3IgaW50ZXJydXB0IG1vZGUN CisgKiBAczogU3RyaW5nDQorICogQGxlbjogTGVuZ3RoDQorICoNCisgKi8N CitzdGF0aWMgaW50DQorc250X2h3X3B1dHNfYnVmZmVyZWQoY29uc3QgY2hh ciAqcywgaW50IGxlbikNCit7DQorCS8qIHF1ZXVlIGRhdGEgdG8gdGhlIFBS T00gKi8NCisJcmV0dXJuIGlhNjRfc25fY29uc29sZV94bWl0X2NoYXJzKChj aGFyICopcywgbGVuKTsNCit9DQorDQorLyogdWFydCBpbnRlcmZhY2Ugc3Ry dWN0cyANCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgdWFydF9wb3J0IHRoYXQgdGhlIHNlcmlhbCBjb3JlDQorICogaW5m cmFzdHJ1Y3R1cmUgY2FsbHMuDQorICoNCisgKiBOb3RlOiBEdWUgdG8gaG93 IHRoZSBjb25zb2xlIHdvcmtzLCBtYW55IHJvdXRpbmVzIGFyZSBuby1vcHMu DQorICovDQorDQorLyoqDQorICogc25wX3R5cGUgLSBXaGF0IHR5cGUgb2Yg Y29uc29sZSBhcmUgd2U/DQorICogQHBvcnQ6IFBvcnQgdG8gb3BlcmF0ZSB3 aXRoICh3ZSBpZ25vcmUgc2luY2Ugd2Ugb25seSBoYXZlIG9uZSBwb3J0KQ0K KyAqDQorICovDQorc3RhdGljIGNvbnN0IGNoYXIgKg0KK3NucF90eXBlKHN0 cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQorew0KKwlyZXR1cm4gKCJTR0kgU04g TDEiKTsNCit9DQorDQorLyoqDQorICogc25wX3R4X2VtcHR5IC0gSXMgdGhl IHRyYW5zbWl0dGVyIGVtcHR5PyAgV2UgcHJldGVuZCB3ZSdyZSBhbHdheXMg ZW1wdHkNCisgKiBAcG9ydDogUG9ydCB0byBvcGVyYXRlIG9uICh3ZSBpZ25v cmUgc2luY2Ugd2Ugb25seSBoYXZlIG9uZSBwb3J0KQ0KKyAqDQorICovDQor c3RhdGljIHVuc2lnbmVkIGludA0KK3NucF90eF9lbXB0eShzdHJ1Y3QgdWFy dF9wb3J0ICpwb3J0KQ0KK3sNCisJcmV0dXJuIDE7DQorfQ0KKw0KKy8qKg0K KyAqIHNucF9zdG9wX3R4IC0gc3RvcCB0aGUgdHJhbnNtaXR0ZXIgLSBuby1v cCBmb3IgdXMNCisgKiBAcG9ydDogUG9ydCB0byBvcGVyYXQgZW9uIC0gd2Ug aWdub3JlIC0gbm8tb3AgZnVuY3Rpb24NCisgKiBAdHR5X3N0b3A6IFNldCB0 byAxIGlmIGNhbGxlZCB2aWEgdWFydF9zdG9wDQorICoNCisgKi8NCitzdGF0 aWMgdm9pZA0KK3NucF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQs IHVuc2lnbmVkIGludCB0dHlfc3RvcCkNCit7DQorfQ0KKw0KKy8qKg0KKyAq IHNucF9yZWxlYXNlX3BvcnQgLSBGcmVlIGkvbyBhbmQgcmVzb3VyY2VzIGZv ciBwb3J0IC0gbm8tb3AgZm9yIHVzDQorICogQHBvcnQ6IFBvcnQgdG8gb3Bl cmF0ZSBvbiAtIHdlIGlnbm9yZSAtIG5vLW9wIGZ1bmN0aW9uDQorICoNCisg Ki8NCitzdGF0aWMgdm9pZA0KK3NucF9yZWxlYXNlX3BvcnQoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIHNucF9lbmFi bGVfbXMgLSBGb3JjZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cyBvbiAtIG5v LW9wIGZvciB1cw0KKyAqIEBwb3J0OiBQb3J0IHRvIG9wZXJhdGUgb24gLSB3 ZSBpZ25vcmUgLSBuby1vcCBmdW5jdGlvbg0KKyAqDQorICovDQorc3RhdGlj IHZvaWQNCitzbnBfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQp DQorew0KK30NCisNCisvKioNCisgKiBzbnBfc2h1dGRvd24gLSBzaHV0IGRv d24gdGhlIHBvcnQgLSBmcmVlIGlycSBhbmQgZGlzYWJsZSAtIG5vLW9wIGZv ciB1cw0KKyAqIEBwb3J0OiBQb3J0IHRvIHNodXQgZG93biAtIHdlIGlnbm9y ZQ0KKyAqDQorICovDQorc3RhdGljIHZvaWQNCitzbnBfc2h1dGRvd24oc3Ry dWN0IHVhcnRfcG9ydCAqcG9ydCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIHNu cF9zZXRfbWN0cmwgLSBzZXQgY29udHJvbCBsaW5lcyAoZHRyLCBydHMsIGV0 YykgLSBuby1vcCBmb3Igb3VyIGNvbnNvbGUNCisgKiBAcG9ydDogUG9ydCB0 byBvcGVyYXRlIG9uIC0gd2UgaWdub3JlDQorICogQG1jdHJsOiBMaW5lcyB0 byBzZXQvdW5zZXQgLSB3ZSBpZ25vcmUNCisgKg0KKyAqLw0KK3N0YXRpYyB2 b2lkDQorc25wX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1 bnNpZ25lZCBpbnQgbWN0cmwpDQorew0KK30NCisNCisvKioNCisgKiBzbnBf Z2V0X21jdHJsIC0gZ2V0IGNvbnRvcmwgbGluZSBpbmZvLCB3ZSBqdXN0IHJl dHVybiBhIHN0YXRpYyB2YWx1ZQ0KKyAqIEBwb3J0OiBwb3J0IHRvIG9wZXJh dGUgb24gLSB3ZSBvbmx5IGhhdmUgb25lIHBvcnQgc28gd2UgaWdub3JlIHRo aXMNCisgKg0KKyAqLw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQNCitzbnBfZ2V0 X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQorew0KKwlyZXR1cm4g VElPQ01fQ0FSIHwgVElPQ01fUk5HIHwgVElPQ01fRFNSIHwgVElPQ01fQ1RT Ow0KK30NCisNCisvKioNCisgKiBzbnBfc3RvcF9yeCAtIFN0b3AgdGhlIHJl Y2VpdmVyIC0gd2UgaWdub3IgZXRoaXMNCisgKiBAcG9ydDogUG9ydCB0byBv cGVyYXRlIG9uIC0gd2UgaWdub3JlDQorICoNCisgKi8NCitzdGF0aWMgdm9p ZA0KK3NucF9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQorew0K K30NCisNCisvKioNCisgKiBzbnBfc3RhcnRfdHggLSBTdGFydCB0cmFuc21p dHRlcg0KKyAqIEBwb3J0OiBQb3J0IHRvIG9wZXJhdGUgb24NCisgKiBAdHR5 X3N0b3A6IFNldCB0byAxIGlmIGNhbGxlZCB2aWEgdWFydF9zdGFydA0KKyAq DQorICovDQorc3RhdGljIHZvaWQNCitzbnBfc3RhcnRfdHgoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHR0eV9zdG9wKQ0KK3sNCisJ aWYgKHNhbF9jb25zb2xlX3BvcnQuc2Nfb3BzLT5zYWxfd2FrZXVwX3RyYW5z bWl0KQ0KKwkJc2FsX2NvbnNvbGVfcG9ydC5zY19vcHMtPnNhbF93YWtldXBf dHJhbnNtaXQoJnNhbF9jb25zb2xlX3BvcnQsIFRSQU5TTUlUX0JVRkZFUkVE KTsNCisNCit9DQorDQorLyoqDQorICogc25wX2JyZWFrX2N0bCAtIGhhbmRs ZSBicmVha3MgLSBpZ25vcmVkIGJ5IHVzDQorICogQHBvcnQ6IFBvcnQgdG8g b3BlcmF0ZSBvbg0KKyAqIEBicmVha19zdGF0ZTogQnJlYWsgc3RhdGUNCisg Kg0KKyAqLw0KK3N0YXRpYyB2b2lkDQorc25wX2JyZWFrX2N0bChzdHJ1Y3Qg dWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpDQorew0KK30NCisN CisvKioNCisgKiBzbnBfc3RhcnR1cCAtIFN0YXJ0IHVwIHRoZSBzZXJpYWwg cG9ydCAtIGFsd2F5cyByZXR1cm4gMCAoV2UncmUgYWx3YXlzIG9uKQ0KKyAq IEBwb3J0OiBQb3J0IHRvIG9wZXJhdGUgb24NCisgKg0KKyAqLw0KK3N0YXRp YyBpbnQNCitzbnBfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQ0K K3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIHNucF9zZXRfdGVy bWlvcyAtIHNldCB0ZXJtaW9zIHN0dWZmIC0gd2UgaWdub3JlIHRoZXNlDQor ICogQHBvcnQ6IHBvcnQgdG8gb3BlcmF0ZSBvbg0KKyAqIEB0ZXJtaW9zOiBO ZXcgc2V0dGluZ3MNCisgKiBAdGVybWlvczogT2xkDQorICoNCisgKi8NCitz dGF0aWMgdm9pZA0KK3NucF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0 ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywNCisJCXN0cnVjdCB0 ZXJtaW9zICpvbGQpDQorew0KK30NCisNCisvKioNCisgKiBzbnBfcmVxdWVz dF9wb3J0IC0gYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBwb3J0IC0gaWdub3Jl ZCBieSB1cw0KKyAqIEBwb3J0OiBwb3J0IHRvIG9wZXJhdGUgb24NCisgKg0K KyAqLw0KK3N0YXRpYyBpbnQNCitzbnBfcmVxdWVzdF9wb3J0KHN0cnVjdCB1 YXJ0X3BvcnQgKnBvcnQpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoq DQorICogc25wX2NvbmZpZ19wb3J0IC0gYWxsb2NhdGUgcmVzb3VyY2VzLCBz ZXQgdXAgLSB3ZSBpZ25vcmUsICB3ZSdyZSBhbHdheXMgb24NCisgKiBAcG9y dDogUG9ydCB0byBvcGVyYXRlIG9uDQorICogQGZsYWdzOiBmbGFncyB1c2Vk IGZvciBwb3J0IHNldHVwDQorICoNCisgKi8NCitzdGF0aWMgdm9pZA0KK3Nu cF9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxh Z3MpDQorew0KK30NCisNCisvKiBBc3NvY2lhdGUgdGhlIHVhcnQgZnVuY3Rp b25zIGFib3ZlIC0gZ2l2ZW4gdG8gc2VyaWFsIGNvcmUgKi8NCisNCitzdGF0 aWMgc3RydWN0IHVhcnRfb3BzIHNuX2NvbnNvbGVfb3BzID0gew0KKwkudHhf ZW1wdHkgPSBzbnBfdHhfZW1wdHksDQorCS5zZXRfbWN0cmwgPSBzbnBfc2V0 X21jdHJsLA0KKwkuZ2V0X21jdHJsID0gc25wX2dldF9tY3RybCwNCisJLnN0 b3BfdHggPSBzbnBfc3RvcF90eCwNCisJLnN0YXJ0X3R4ID0gc25wX3N0YXJ0 X3R4LA0KKwkuc3RvcF9yeCA9IHNucF9zdG9wX3J4LA0KKwkuZW5hYmxlX21z ID0gc25wX2VuYWJsZV9tcywNCisJLmJyZWFrX2N0bCA9IHNucF9icmVha19j dGwsDQorCS5zdGFydHVwID0gc25wX3N0YXJ0dXAsDQorCS5zaHV0ZG93biA9 IHNucF9zaHV0ZG93biwNCisJLnNldF90ZXJtaW9zID0gc25wX3NldF90ZXJt aW9zLA0KKwkucG0gPSBOVUxMLA0KKwkudHlwZSA9IHNucF90eXBlLA0KKwku cmVsZWFzZV9wb3J0ID0gc25wX3JlbGVhc2VfcG9ydCwNCisJLnJlcXVlc3Rf cG9ydCA9IHNucF9yZXF1ZXN0X3BvcnQsDQorCS5jb25maWdfcG9ydCA9IHNu cF9jb25maWdfcG9ydCwNCisJLnZlcmlmeV9wb3J0ID0gTlVMTCwNCit9Ow0K Kw0KKy8qIEVuZCBvZiB1YXJ0IHN0cnVjdCBmdW5jdGlvbnMgYW5kIGRlZmlu ZXMgKi8NCisNCisvKioNCisgKiBzbl9kZWJ1Z19wcmludGYgLSBjbG9zZSB0 byBoYXJkd2FyZSBkZWJ1Z2dpbmcgcHJpbnRmDQorICogQGZtdDogcHJpbnRm IGZvcm1hdA0KKyAqDQorICogVGhpcyBpcyBhcyAiY2xvc2UgdG8gdGhlIG1l dGFsIiBhcyB3ZSBjYW4gZ2V0LCB1c2VkIHdoZW4gdGhlIGRyaXZlcg0KKyAq IGl0c2VsZiBtYXkgYmUgYnJva2VuLg0KKyAqDQorICovDQorc3RhdGljIGlu dA0KK3NuX2RlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikNCit7 DQorCXN0YXRpYyBjaGFyIHByaW50a19idWZbMTAyNF07DQorCWludCBwcmlu dGVkX2xlbjsNCisJdmFfbGlzdCBhcmdzOw0KKw0KKwl2YV9zdGFydChhcmdz LCBmbXQpOw0KKwlwcmludGVkX2xlbiA9IHZzbnByaW50ZihwcmludGtfYnVm LCBzaXplb2YgKHByaW50a19idWYpLCBmbXQsIGFyZ3MpOw0KKw0KKwlpZiAo IXNhbF9jb25zb2xlX3BvcnQuc2Nfb3BzKSB7DQorCQlpZiAoSVNfUlVOTklO R19PTl9TSU1VTEFUT1IoKSkNCisJCQlzYWxfY29uc29sZV9wb3J0LnNjX29w cyA9ICZzaW1fb3BzOw0KKwkJZWxzZQ0KKwkJCXNhbF9jb25zb2xlX3BvcnQu c2Nfb3BzID0gJnBvbGxfb3BzOw0KKw0KKwkJZWFybHlfc25fc2V0dXAoKTsN CisJfQ0KKwlzYWxfY29uc29sZV9wb3J0LnNjX29wcy0+c2FsX3B1dHNfcmF3 KHByaW50a19idWYsIHByaW50ZWRfbGVuKTsNCisNCisJdmFfZW5kKGFyZ3Mp Ow0KKwlyZXR1cm4gcHJpbnRlZF9sZW47DQorfQ0KKw0KKy8qDQorICogSW50 ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmVzLg0KKyAqLw0KKw0KKw0KKy8qKg0K KyAqIHNuX3JlY2VpdmVfY2hhcnMgLSBHcmFiIGNoYXJhY3RlcnMsIHBhc3Mg dGhlbSB0byB0dHkgbGF5ZXINCisgKiBAcG9ydDogUG9ydCB0byBvcGVyYXRl IG9uDQorICogQHJlZ3M6IFNhdmVkIHJlZ2lzdGVycyAobmVlZGVkIGJ5IHVh cnRfaGFuZGxlX3N5c3JxX2NoYXIpDQorICoNCisgKiBOb3RlOiBJZiB3ZSdy ZSBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzZXJpYWwgY29yZSBpbmZyYXN0 cnVjdHVyZSB5ZXQsDQorICogd2UgZG9uJ3QgdHJ5IHRvIHNlbmQgY2hhcmFj dGVycyB0byBpdC4uLg0KKyAqDQorICovDQorc3RhdGljIHZvaWQNCitzbl9y ZWNlaXZlX2NoYXJzKHN0cnVjdCBzbl9jb25zX3BvcnQgKnBvcnQsIHN0cnVj dCBwdF9yZWdzICpyZWdzKQ0KK3sNCisJaW50IGNoOw0KKwlzdHJ1Y3QgdHR5 X3N0cnVjdCAqdHR5Ow0KKw0KKwlpZiAoIXBvcnQpIHsNCisJCXByaW50ayhL RVJOX0VSUiAic25fcmVjZWl2ZV9jaGFycyAtIHBvcnQgTlVMTCBzbyBjYW4n dCByZWNlaWV2ZVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKCFw b3J0LT5zY19vcHMpIHsNCisJCXByaW50ayhLRVJOX0VSUiAic25fcmVjZWl2 ZV9jaGFycyAtIHBvcnQtPnNjX29wcyAgTlVMTCBzbyBjYW4ndCByZWNlaWV2 ZVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKHBvcnQtPnNjX3Bv cnQuaW5mbykgew0KKwkJLyogVGhlIHNlcmlhbF9jb3JlIHN0dWZmcyBhcmUg aW5pdGlsaXplZCwgdXNlIHRoZW0gKi8NCisJCXR0eSA9IHBvcnQtPnNjX3Bv cnQuaW5mby0+dHR5Ow0KKwl9DQorCWVsc2Ugew0KKwkJLyogTm90IHJlZ2lz dGVyZWQgeWV0IC0gY2FuJ3QgcGFzcyB0byB0dHkgbGF5ZXIuICAqLw0KKwkJ dHR5ID0gTlVMTDsNCisJfQ0KKw0KKwl3aGlsZSAocG9ydC0+c2Nfb3BzLT5z YWxfaW5wdXRfcGVuZGluZygpKSB7DQorCQljaCA9IHBvcnQtPnNjX29wcy0+ c2FsX2dldGMoKTsNCisJCWlmIChjaCA8IDApIHsNCisJCQlwcmludGsoS0VS Tl9FUlIgInNuX2NvbnNvbGU6IEFuIGVycm9yIG9jY3VyZWQgd2hpbGUgIg0K KwkJCSAgICAgICAib2J0YWluaW5nIGRhdGEgZnJvbSB0aGUgY29uc29sZSAo MHglMHgpXG4iLCBjaCk7DQorCQkJYnJlYWs7DQorCQl9DQorI2lmIGRlZmlu ZWQoQ09ORklHX1NFUklBTF9TR0lfTDFfQ09OU09MRSkgJiYgZGVmaW5lZChD T05GSUdfTUFHSUNfU1lTUlEpDQorCQlpZiAodWFydF9oYW5kbGVfc3lzcnFf Y2hhcigmcG9ydC0+c2NfcG9ydCwgY2gsIHJlZ3MpKQ0KKwkJCWNvbnRpbnVl Ow0KKyNlbmRpZgkJCQkvKiBDT05GSUdfU0VSSUFMX1NHSV9MMV9DT05TT0xF ICYmIENPTkZJR19NQUdJQ19TWVNSUSAqLw0KKw0KKwkJLyogcmVjb3JkIHRo ZSBjaGFyYWN0ZXIgdG8gcGFzcyB1cCB0byB0aGUgdHR5IGxheWVyICovDQor CQlpZiAodHR5KSB7DQorCQkJKnR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgPSBj aDsNCisJCQkqdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciA9IFRUWV9OT1JNQUw7 DQorCQkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0cisrOw0KKwkJCXR0eS0+Zmxp cC5jb3VudCsrOw0KKwkJCWlmICh0dHktPmZsaXAuY291bnQgPT0gVFRZX0ZM SVBCVUZfU0laRSkNCisJCQkJYnJlYWs7DQorCQl9DQorCQllbHNlIHsNCisJ CX0NCisJCXBvcnQtPnNjX3BvcnQuaWNvdW50LnJ4Kys7DQorCX0NCisNCisJ aWYgKHR0eSkNCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7DQorfQ0K Kw0KKy8qKg0KKyAqIHNuX3RyYW5zbWl0X2NoYXJzIC0gZ3JhYiBjaGFyYWN0 ZXJzIGZyb20gc2VyaWFsIGNvcmUsIHNlbmQgb2ZmDQorICogQHBvcnQ6IFBv cnQgdG8gb3BlcmF0ZSBvbg0KKyAqIEByYXc6IFRyYW5zbWl0IHJhdyBvciBi dWZmZXJlZA0KKyAqDQorICogTm90ZTogSWYgd2UncmUgZWFybHksIGJlZm9y ZSB3ZSdyZSByZWdpc3RlcmVkIHdpdGggc2VyaWFsIGNvcmUsIHRoZQ0KKyAq IHdyaXRlcyBhcmUgZ29pbmcgdGhyb3VnaCBzbl9zYWxfY29uc29sZV93cml0 ZSBiZWNhdXNlIHRoYXQncyBob3cgDQorICogcmVnaXN0ZXJfY29uc29sZSBo YXMgYmVlbiBzZXQgdXAuICBXZSBjdXJyZW50bHkgY291bGQgaGF2ZSBhc3lu Y2gNCisgKiBwb2xscyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZHVlIHRvIHNu X3NhbF9zd2l0Y2hfdG9fYXN5bmNoIGJ1dCB3ZSBjYW4NCisgKiBpZ25vcmUg dGhlbSB1bnRpbCB3ZSByZWdpc3RlciB3aXRoIHRoZSBzZXJpYWwgY29yZSBz dHVmZnMuDQorICoNCisgKi8NCitzdGF0aWMgdm9pZA0KK3NuX3RyYW5zbWl0 X2NoYXJzKHN0cnVjdCBzbl9jb25zX3BvcnQgKnBvcnQsIGludCByYXcpDQor ew0KKwlpbnQgeG1pdF9jb3VudCwgdGFpbCwgaGVhZCwgbG9vcHMsIGlpOw0K KwlpbnQgcmVzdWx0Ow0KKwljaGFyICpzdGFydDsNCisJc3RydWN0IGNpcmNf YnVmICp4bWl0Ow0KKw0KKwlpZiAoIXBvcnQpDQorCQlyZXR1cm47DQorDQor CUJVR19PTighcG9ydC0+c2NfaXNfYXN5bmNoKTsNCisNCisJaWYgKHBvcnQt PnNjX3BvcnQuaW5mbykgew0KKwkJLyogV2UncmUgaW5pdGlsaXplZCwgdXNp bmcgc2VyaWFsIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgKi8NCisJCXhtaXQgPSAm cG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0Ow0KKwl9DQorCWVsc2Ugew0KKwkJ LyogUHJvYmFibHkgc25fc2FsX3N3aXRjaF90b19hc3luY2ggaGFzIGJlZW4g cnVuIGJ1dCBzZXJpYWwgY29yZSBpc24ndA0KKwkJICogaW5pdGlsaXplZCB5 ZXQuICBKdXN0IHJldHVybi4gIFdyaXRlcyBhcmUgZ29pbmcgdGhyb3VnaCAN CisJCSAqIHNuX3NhbF9jb25zb2xlX3dyaXRlIChkdWUgdG8gcmVnaXN0ZXJf Y29uc29sZSkgYXQgdGhpcyB0aW1lLg0KKwkJICovDQorCQlyZXR1cm47DQor CX0NCisNCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4 X3N0b3BwZWQoJnBvcnQtPnNjX3BvcnQpKSB7DQorCQkvKiBOb3RoaW5nIHRv IGRvLiAqLw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWhlYWQgPSB4bWl0LT5o ZWFkOw0KKwl0YWlsID0geG1pdC0+dGFpbDsNCisJc3RhcnQgPSAmeG1pdC0+ YnVmW3RhaWxdOw0KKw0KKwkvKiB0d2ljZSBhcm91bmQgZ2V0cyB0aGUgdGFp bCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYW5kDQorCSAqIHRoZW4gdG8g dGhlIGhlYWQsIGlmIG5lZWRlZCAqLw0KKwlsb29wcyA9IChoZWFkIDwgdGFp bCkgPyAyIDogMTsNCisNCisJZm9yIChpaSA9IDA7IGlpIDwgbG9vcHM7IGlp KyspIHsNCisJCXhtaXRfY291bnQgPSAoaGVhZCA8IHRhaWwpID8NCisJCSAg ICAoVUFSVF9YTUlUX1NJWkUgLSB0YWlsKSA6IChoZWFkIC0gdGFpbCk7DQor DQorCQlpZiAoeG1pdF9jb3VudCA+IDApIHsNCisJCQlpZiAocmF3ID09IFRS QU5TTUlUX1JBVykNCisJCQkJcmVzdWx0ID0NCisJCQkJICAgIHBvcnQtPnNj X29wcy0+c2FsX3B1dHNfcmF3KHN0YXJ0LA0KKwkJCQkJCQkgICAgICAgeG1p dF9jb3VudCk7DQorCQkJZWxzZQ0KKwkJCQlyZXN1bHQgPQ0KKwkJCQkgICAg cG9ydC0+c2Nfb3BzLT5zYWxfcHV0cyhzdGFydCwgeG1pdF9jb3VudCk7DQor I2lmZGVmIERFQlVHDQorCQkJaWYgKCFyZXN1bHQpDQorCQkJCXNuX2RlYnVn X3ByaW50ZigiYCIpOw0KKyNlbmRpZg0KKwkJCWlmIChyZXN1bHQgPiAwKSB7 DQorCQkJCXhtaXRfY291bnQgLT0gcmVzdWx0Ow0KKwkJCQlwb3J0LT5zY19w b3J0Lmljb3VudC50eCArPSByZXN1bHQ7DQorCQkJCXRhaWwgKz0gcmVzdWx0 Ow0KKwkJCQl0YWlsICY9IFVBUlRfWE1JVF9TSVpFIC0gMTsNCisJCQkJeG1p dC0+dGFpbCA9IHRhaWw7DQorCQkJCXN0YXJ0ID0gJnhtaXQtPmJ1Zlt0YWls XTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJaWYgKHVhcnRfY2lyY19jaGFy c19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQ0KKwkJdWFydF93cml0 ZV93YWtldXAoJnBvcnQtPnNjX3BvcnQpOw0KKw0KKwlpZiAodWFydF9jaXJj X2VtcHR5KHhtaXQpKQ0KKwkJc25wX3N0b3BfdHgoJnBvcnQtPnNjX3BvcnQs IDApOyAvKiBuby1vcCBmb3IgdXMgKi8NCit9DQorDQorLyoqDQorICogc25f c2FsX2ludGVycnVwdCAtIEhhbmRsZSBjb25zb2xlIGludGVycnVwdHMNCisg KiBAaXJxOiBpcnEgIywgdXNlZnVsIGZvciBkZWJ1ZyBzdGF0ZW1lbnRzDQor ICogQGRldl9pZDogb3VyIHBvaW50ZXIgdG8gb3VyIHBvcnQgKHNuX2NvbnNf cG9ydCB3aGljaCBjb250YWlucyB0aGUgdWFydCBwb3J0KQ0KKyAqIEByZWdz OiBTYXZlZCByZWdpc3RlcnMsIHVzZWQgYnkgc25fcmVjZWl2ZV9jaGFycyBm b3IgdWFydF9oYW5kbGVfc3lzcnFfY2hhcg0KKyAqDQorICovDQorc3RhdGlj IGlycXJldHVybl90DQorc25fc2FsX2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQ0KK3sNCisJc3RydWN0 IHNuX2NvbnNfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc25fY29uc19wb3J0ICop IGRldl9pZDsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJaW50IHN0YXR1 cyA9IGlhNjRfc25fY29uc29sZV9pbnRyX3N0YXR1cygpOw0KKw0KKwlpZiAo IXBvcnQpDQorCQlyZXR1cm4gSVJRX05PTkU7DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZwb3J0LT5zY19wb3J0LmxvY2ssIGZsYWdzKTsNCisJaWYgKHN0 YXR1cyAmIFNBTF9DT05TT0xFX0lOVFJfUkVDVikgew0KKwkJc25fcmVjZWl2 ZV9jaGFycyhwb3J0LCByZWdzKTsNCisJfQ0KKwlpZiAoc3RhdHVzICYgU0FM X0NPTlNPTEVfSU5UUl9YTUlUKSB7DQorCQlzbl90cmFuc21pdF9jaGFycyhw b3J0LCBUUkFOU01JVF9CVUZGRVJFRCk7DQorCX0NCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmcG9ydC0+c2NfcG9ydC5sb2NrLCBmbGFncyk7DQorCXJl dHVybiBJUlFfSEFORExFRDsNCit9DQorDQorLyoqDQorICogc25fc2FsX2Nv bm5lY3RfaW50ZXJydXB0IC0gUmVxdWVzdCBpbnRlcnJ1cHQsIGhhbmRsZWQg Ynkgc25fc2FsX2ludGVycnVwdA0KKyAqIEBwb3J0OiBPdXIgc25fY29uc19w b3J0ICh3aGljaCBjb250YWlucyB0aGUgdWFydCBwb3J0KQ0KKyAqIA0KKyAq IHJldHVybnMgdGhlIGNvbnNvbGUgaXJxIGlmIGludGVycnVwdCBpcyBzdWNj ZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSAwIA0KKyAqDQorICovDQorc3Rh dGljIGludA0KK3NuX3NhbF9jb25uZWN0X2ludGVycnVwdChzdHJ1Y3Qgc25f Y29uc19wb3J0ICpwb3J0KQ0KK3sNCisJaWYgKHJlcXVlc3RfaXJxKFNHSV9V QVJUX1ZFQ1RPUiwgc25fc2FsX2ludGVycnVwdCwgU0FfSU5URVJSVVBULA0K KwkJCSJTQUwgY29uc29sZSBkcml2ZXIiLCBwb3J0KSA+PSAwKSB7DQorCQly ZXR1cm4gU0dJX1VBUlRfVkVDVE9SOw0KKwl9DQorDQorCXByaW50ayhLRVJO X0lORk8gInNuX2NvbnNvbGU6IGNvbnNvbGUgcHJvY2VlZGluZyBpbiBwb2xs ZWQgbW9kZVxuIik7DQorCXJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBz bl9zYWxfdGltZXJfcG9sbCAtIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwb2xs ZWQgY29uc29sZSBtb2RlDQorICogQGRhdGE6IEEgcG9pbnRlciB0byBvdXIg c25fY29uc19wb3J0ICh3aGljaCBjb250YWlucyB0aGUgdWFydCBwb3J0KSAN CisgKg0KKyAqIGRhdGEgaXMgdGhlIHBvaW50ZXIgdGhhdCBpbml0X3RpbWVy IHdpbGwgc3RvcmUgZm9yIHVzLiAgVGhpcyBmdW5jdGlvbiBpcw0KKyAqIGFz c29jaWF0ZWQgd2l0aCBpbml0X3RpbWVyIHRvIHNlZSBpZiB0aGVyZSBpcyBh bnkgY29uc29sZSB0cmFmZmljLg0KKyAqIE9idmlvdXNseSBub3QgdXNlZCBp biBpbnRlcnJ1cHQgbW9kZQ0KKyAqDQorICovDQorc3RhdGljIHZvaWQNCitz bl9zYWxfdGltZXJfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpDQorew0KKwlz dHJ1Y3Qgc25fY29uc19wb3J0ICpwb3J0ID0gKHN0cnVjdCBzbl9jb25zX3Bv cnQgKikgZGF0YTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJaWYg KCFwb3J0KQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoIXBvcnQtPnNjX3BvcnQu aXJxKSB7DQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+c2NfcG9ydC5s b2NrLCBmbGFncyk7DQorCQlzbl9yZWNlaXZlX2NoYXJzKHBvcnQsIE5VTEwp Ow0KKwkJc25fdHJhbnNtaXRfY2hhcnMocG9ydCwgVFJBTlNNSVRfUkFXKTsN CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNjX3BvcnQubG9j aywgZmxhZ3MpOw0KKwkJbW9kX3RpbWVyKCZwb3J0LT5zY190aW1lciwNCisJ CQkgIGppZmZpZXMgKyBwb3J0LT5zY19pbnRlcnJ1cHRfdGltZW91dCk7DQor CX0NCit9DQorDQorLyoNCisgKiBCb290LXRpbWUgaW5pdGlhbGl6YXRpb24g Y29kZQ0KKyAqLw0KKw0KKy8qKg0KKyAqIHNuX3NhbF9zd2l0Y2hfdG9fYXN5 bmNoIC0gU3dpdGNoIHRvIGFzeW5jIG1vZGUgKGFzIG9wcG9zZWQgdG8gc3lu Y2gpDQorICogQHBvcnQ6IE91ciBzbl9jb25zX3BvcnQgKHdoaWNoIGNvbnRh aW5zIHRoZSB1YXJ0IHBvcnQpDQorICoNCisgKiBTbyB0aGlzIGlzIHVzZWQg Ynkgc25fc2FsX3NlcmlhbF9jb25zb2xlX2luaXQgKGVhcmx5IG9uLCBiZWZv cmUgd2UncmUNCisgKiByZWdpc3RlcmVkIHdpdGggc2VyaWFsIGNvcmUpLiAg SXQncyBhbHNvIHVzZWQgYnkgc25fc2FsX21vZHVsZV9pbml0DQorICogcmln aHQgYWZ0ZXIgd2UndmUgcmVnaXN0ZXJlZCB3aXRoIHNlcmlhbCBjb3JlLiAg VGhlIGxhdGVyIG9ubHkgaGFwcGVucw0KKyAqIGlmIHdlIGRpZG4ndCBhbHJl YWR5IGNvbWUgdGhyb3VnaCBoZXJlIHZpYSBzbl9zYWxfc2VyaWFsX2NvbnNv bGVfaW5pdC4NCisgKg0KKyAqLw0KK3N0YXRpYyB2b2lkIF9faW5pdA0KK3Nu X3NhbF9zd2l0Y2hfdG9fYXN5bmNoKHN0cnVjdCBzbl9jb25zX3BvcnQgKnBv cnQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwlpZiAoIXBv cnQpDQorCQlyZXR1cm47DQorDQorCURQUklOVEYoInNuX2NvbnNvbGU6IGFi b3V0IHRvIHN3aXRjaCB0byBhc3luY2hyb25vdXMgY29uc29sZVxuIik7DQor DQorCS8qIHdpdGhvdXQgZWFybHlfcHJpbnRrLCB3ZSBtYXkgYmUgaW52b2tl ZCBsYXRlIGVub3VnaCB0byByYWNlDQorCSAqIHdpdGggb3RoZXIgY3B1cyBk b2luZyBjb25zb2xlIElPIGF0IHRoaXMgcG9pbnQsIGhvd2V2ZXINCisJICog Y29uc29sZSBpbnRlcnJ1cHRzIHdpbGwgbmV2ZXIgYmUgZW5hYmxlZCAqLw0K KwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+c2NfcG9ydC5sb2NrLCBmbGFn cyk7DQorDQorCS8qIGVhcmx5X3ByaW50ayBpbnZvY2F0aW9uIG1heSBoYXZl IGRvbmUgdGhpcyBmb3IgdXMgKi8NCisJaWYgKCFwb3J0LT5zY19vcHMpIHsN CisJCWlmIChJU19SVU5OSU5HX09OX1NJTVVMQVRPUigpKQ0KKwkJCXBvcnQt PnNjX29wcyA9ICZzaW1fb3BzOw0KKwkJZWxzZQ0KKwkJCXBvcnQtPnNjX29w cyA9ICZwb2xsX29wczsNCisJfQ0KKw0KKwkvKiB3ZSBjYW4ndCB0dXJuIG9u IHRoZSBjb25zb2xlIGludGVycnVwdCAoYXMgcmVxdWVzdF9pcnENCisJICog Y2FsbHMga21hbGxvYywgd2hpY2ggaXNuJ3Qgc2V0IHVwIHlldCksIHNvIHdl IHJlbHkgb24gYQ0KKwkgKiB0aW1lciB0byBwb2xsIGZvciBpbnB1dCBhbmQg cHVzaCBkYXRhIGZyb20gdGhlIGNvbnNvbGUNCisJICogYnVmZmVyLg0KKwkg Ki8NCisJaW5pdF90aW1lcigmcG9ydC0+c2NfdGltZXIpOw0KKwlwb3J0LT5z Y190aW1lci5mdW5jdGlvbiA9IHNuX3NhbF90aW1lcl9wb2xsOw0KKwlwb3J0 LT5zY190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBvcnQ7DQorDQor CWlmIChJU19SVU5OSU5HX09OX1NJTVVMQVRPUigpKQ0KKwkJcG9ydC0+c2Nf aW50ZXJydXB0X3RpbWVvdXQgPSA2Ow0KKwllbHNlIHsNCisJCS8qIDk2MGNw cyAvIDE2IGNoYXIgRklGTyA9IDYwSFogDQorCQkgKiBIWiAvIChTTl9TQUxf RklGT19TUEVFRF9DUFMgLyBTTl9TQUxfRklGT19ERVBUSCkgKi8NCisJCXBv cnQtPnNjX2ludGVycnVwdF90aW1lb3V0ID0NCisJCSAgICBIWiAqIFNOX1NB TF9VQVJUX0ZJRk9fREVQVEggLyBTTl9TQUxfVUFSVF9GSUZPX1NQRUVEX0NQ UzsNCisJfQ0KKwltb2RfdGltZXIoJnBvcnQtPnNjX3RpbWVyLCBqaWZmaWVz ICsgcG9ydC0+c2NfaW50ZXJydXB0X3RpbWVvdXQpOw0KKw0KKwlwb3J0LT5z Y19pc19hc3luY2ggPSAxOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZw b3J0LT5zY19wb3J0LmxvY2ssIGZsYWdzKTsNCit9DQorDQorLyoqDQorICog c25fc2FsX3N3aXRjaF90b19pbnRlcnJ1cHRzIC0gU3dpdGNoIHRvIGludGVy cnVwdCBkcml2ZW4gbW9kZQ0KKyAqIEBwb3J0OiBPdXIgc25fY29uc19wb3J0 ICh3aGljaCBjb250YWlucyB0aGUgdWFydCBwb3J0KQ0KKyAqDQorICogSW4g c25fc2FsX21vZHVsZV9pbml0LCBhZnRlciB3ZSdyZSByZWdpc3RlcmVkIHdp dGggc2VyaWFsIGNvcmUgYW5kDQorICogdGhlIHBvcnQgaXMgYWRkZWQsIHRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHN3aXRjaCB1cyB0byBpbnRlcnJ1 cHQNCisgKiBtb2RlLiAgV2Ugd2VyZSBwcmV2aW91c2x5IGluIGFzeW5jaC9w b2xsaW5nIG1vZGUgKHVzaW5nIGluaXRfdGltZXIpLg0KKyAqDQorICogV2Ug YXR0ZW1wdCB0byBzd2l0Y2ggdG8gaW50ZXJydXB0IG1vZGUgaGVyZSBieSBj YWxsaW5nIA0KKyAqIHNuX3NhbF9jb25uZWN0X2ludGVycnVwdC4gIElmIHRo YXQgd29ya3Mgb3V0LCB3ZSBlbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzLg0K KyAqLw0KK3N0YXRpYyB2b2lkIF9faW5pdA0KK3NuX3NhbF9zd2l0Y2hfdG9f aW50ZXJydXB0cyhzdHJ1Y3Qgc25fY29uc19wb3J0ICpwb3J0KQ0KK3sNCisJ aW50IGlycTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJaWYgKCFw b3J0KQ0KKwkJcmV0dXJuOw0KKw0KKwlEUFJJTlRGKCJzbl9jb25zb2xlOiBz d2l0Y2hpbmcgdG8gaW50ZXJydXB0IGRyaXZlbiBjb25zb2xlXG4iKTsNCisN CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnNjX3BvcnQubG9jaywgZmxh Z3MpOw0KKw0KKwlpcnEgPSBzbl9zYWxfY29ubmVjdF9pbnRlcnJ1cHQocG9y dCk7DQorDQorCWlmIChpcnEpIHsNCisJCXBvcnQtPnNjX3BvcnQuaXJxID0g aXJxOw0KKwkJcG9ydC0+c2Nfb3BzID0gJmludHJfb3BzOw0KKw0KKwkJLyog dHVybiBvbiByZWNlaXZlIGludGVycnVwdHMgKi8NCisJCWlhNjRfc25fY29u c29sZV9pbnRyX2VuYWJsZShTQUxfQ09OU09MRV9JTlRSX1JFQ1YpOw0KKwl9 DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNjX3BvcnQubG9j aywgZmxhZ3MpOw0KK30NCisNCisvKg0KKyAqIEtlcm5lbCBjb25zb2xlIGRl ZmluaXRpb25zDQorICovDQorDQorI2lmZGVmIENPTkZJR19TRVJJQUxfU0dJ X0wxX0NPTlNPTEUNCitzdGF0aWMgdm9pZCBzbl9zYWxfY29uc29sZV93cml0 ZShzdHJ1Y3QgY29uc29sZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkKTsN CitzdGF0aWMgaW50IF9faW5pdCBzbl9zYWxfY29uc29sZV9zZXR1cChzdHJ1 Y3QgY29uc29sZSAqLCBjaGFyICopOw0KK2V4dGVybiBzdHJ1Y3QgdWFydF9k cml2ZXIgc2FsX2NvbnNvbGVfdWFydDsNCitleHRlcm4gc3RydWN0IHR0eV9k cml2ZXIgKnVhcnRfY29uc29sZV9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKiwg aW50ICopOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzYWxfY29uc29s ZSA9IHsNCisJLm5hbWUgPSBERVZJQ0VfTkFNRSwNCisJLndyaXRlID0gc25f c2FsX2NvbnNvbGVfd3JpdGUsDQorCS5kZXZpY2UgPSB1YXJ0X2NvbnNvbGVf ZGV2aWNlLA0KKwkuc2V0dXAgPSBzbl9zYWxfY29uc29sZV9zZXR1cCwNCisJ LmluZGV4ID0gLTEsIC8qIHVuc3BlY2lmaWVkICovDQorCS5kYXRhID0gJnNh bF9jb25zb2xlX3VhcnQsDQorfTsNCisNCisjZGVmaW5lIFNBTF9DT05TT0xF CSZzYWxfY29uc29sZQ0KKyNlbHNlDQorI2RlZmluZSBTQUxfQ09OU09MRQkw DQorI2VuZGlmCQkJCS8qIENPTkZJR19TRVJJQUxfU0dJX0wxX0NPTlNPTEUg Ki8NCisNCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNhbF9jb25zb2xl X3VhcnQgPSB7DQorCS5vd25lciA9IFRISVNfTU9EVUxFLA0KKwkuZHJpdmVy X25hbWUgPSAic25fY29uc29sZSIsDQorCS5kZXZfbmFtZSA9IERFVklDRV9O QU1FLA0KKwkubWFqb3IgPSAwLCAvKiBtYWpvci9taW5vciBzZXQgYXQgcmVn aXN0cmF0aW9uIHRpbWUgcGVyIFVTRV9EWU5BTUlDX01JTk9SICovDQorCS5t aW5vciA9IDAsDQorCS5uciA9IDEsCS8qIG9uZSBwb3J0ICovDQorCS5jb25z ID0gU0FMX0NPTlNPTEUsDQorfTsNCisNCisvKioNCisgKiBzbl9zYWxfbW9k dWxlX2luaXQgLSBXaGVuIHRoZSBrZXJuZWwgbG9hZHMgdXMsIGdldCB1cyBy b2xsaW5nIHcvIHNlcmlhbCBjb3JlDQorICoNCisgKiBCZWZvcmUgdGhpcyBp cyBjYWxsZWQsIHdlJ3ZlIGJlZW4gcHJpbnRpbmcga2VybmVsIG1lc3NhZ2Vz IGluIGEgc3BlY2lhbA0KKyAqIGVhcmx5IG1vZGUgbm90IG1ha2luZyB1c2Ug b2YgdGhlIHNlcmlhbCBjb3JlIGluZnJhc3RydWN0dXJlLiAgV2hlbiBvdXIN CisgKiBkcml2ZXIgaXMgbG9hZGVkIGZvciByZWFsLCB3ZSByZWdpc3RlciB0 aGUgZHJpdmVyIGFuZCBwb3J0IHdpdGggc2VyaWFsDQorICogY29yZSBhbmQg dHJ5IHRvIGVuYWJsZSBpbnRlcnJ1cHQgZHJpdmVuIG1vZGUuDQorICoNCisg Ki8NCitzdGF0aWMgaW50IF9faW5pdA0KK3NuX3NhbF9tb2R1bGVfaW5pdCh2 b2lkKQ0KK3sNCisJaW50IHJldHZhbDsNCisNCisJcHJpbnRrKEtFUk5fSU5G TyAic25fY29uc29sZTogQ29uc29sZSBkcml2ZXIgaW5pdFxuIik7DQorDQor CWlmICghaWE2NF9wbGF0Zm9ybV9pcygic24yIikpDQorCQlyZXR1cm4gLUVO T0RFVjsNCisNCisJaWYgKFVTRV9EWU5BTUlDX01JTk9SID09IDEpIHsNCisJ CW1pc2MubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7DQorCQltaXNjLm5h bWUgPSBERVZJQ0VfTkFNRV9EWU5BTUlDOw0KKwkJcmV0dmFsID0gbWlzY19y ZWdpc3RlcigmbWlzYyk7DQorCQlpZiAocmV0dmFsICE9IDApIHsNCisJCQlw cmludGsoIkZhaWxlZCB0byByZWdpc3RlciBjb25zb2xlIGRldmljZSB1c2lu ZyBtaXNjX3JlZ2lzdGVyLlxuIik7DQorCQkJcmV0dXJuIC1FTk9ERVY7DQor CQl9DQorCQlzYWxfY29uc29sZV91YXJ0Lm1ham9yID0gTUlTQ19NQUpPUjsN CisJCXNhbF9jb25zb2xlX3VhcnQubWlub3IgPSBtaXNjLm1pbm9yOw0KKwl9 DQorCWVsc2Ugew0KKwkJc2FsX2NvbnNvbGVfdWFydC5tYWpvciA9IERFVklD RV9NQUpPUjsNCisJCXNhbF9jb25zb2xlX3VhcnQubWlub3IgPSBERVZJQ0Vf TUlOT1I7DQorCX0NCisNCisJLyogV2UgcmVnaXN0ZXIgdGhlIGRyaXZlciBh bmQgdGhlIHBvcnQgYmVmb3JlIHN3aXRjaGluZyB0byBpbnRlcnJ1cHRzDQor ICAgICogb3IgYXN5bmMgYWJvdmUgc28gdGhlIHByb3BlciB1YXJ0IHN0cnVj dHVyZXMgYXJlIHBvcHVsYXRlZCAqLw0KKw0KKwlpZiAodWFydF9yZWdpc3Rl cl9kcml2ZXIoJnNhbF9jb25zb2xlX3VhcnQpIDwgMCkgew0KKwkJcHJpbnRr KCJFUlJPUiBzbl9zYWxfbW9kdWxlX2luaXQgZmFpbGVkIHVhcnRfcmVnaXN0 ZXJfZHJpdmVyLCBsaW5lICVkXG4iLCANCisJCSAgX19MSU5FX18pOw0KKwkJ cmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJc2FsX2NvbnNvbGVfcG9ydC5z Y19wb3J0LmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7DQorDQorCS8qIFNl dHVwIHRoZSBwb3J0IHN0cnVjdCB3aXRoIHRoZSBtaW5pbXVtIG5lZWRlZCAq Lw0KKwlzYWxfY29uc29sZV9wb3J0LnNjX3BvcnQubWVtYmFzZSA9IChjaGFy ICopMTsJLyoganVzdCBuZWVkcyB0byBiZSBub24temVybyAqLw0KKwlzYWxf Y29uc29sZV9wb3J0LnNjX3BvcnQudHlwZSA9IFBPUlRfMTY1NTBBOw0KKwlz YWxfY29uc29sZV9wb3J0LnNjX3BvcnQuZmlmb3NpemUgPSBTTl9TQUxfTUFY X0NIQVJTOw0KKwlzYWxfY29uc29sZV9wb3J0LnNjX3BvcnQub3BzID0gJnNu X2NvbnNvbGVfb3BzOw0KKwlzYWxfY29uc29sZV9wb3J0LnNjX3BvcnQubGlu ZSA9IDA7DQorDQorCWlmICh1YXJ0X2FkZF9vbmVfcG9ydCgmc2FsX2NvbnNv bGVfdWFydCwgJnNhbF9jb25zb2xlX3BvcnQuc2NfcG9ydCkgPCAwKSB7DQor CQkvKiBlcnJvciAtIG5vdCBzdXJlIHdoYXQgSSdkIGRvIC0gc28gSSdsbCBk byBub3RoaW5nICovDQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUg dG8gYWRkIHBvcnRcbiIsIF9fRlVOQ1RJT05fXyk7DQorCX0NCisNCisJLyog d2hlbiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBpbiwgdGhlIGNvbnNvbGUg aW5pdGlhbGl6YXRpb24NCisJICogd2lsbCBoYXZlIGFscmVhZHkgc3dpdGNo ZWQgdXMgaW50byBhc3luY2hyb25vdXMgb3BlcmF0aW9uDQorCSAqIGJlZm9y ZSB3ZSBnZXQgaGVyZSB0aHJvdWdoIHRoZSBtb2R1bGUgaW5pdGNhbGxzICov DQorCWlmICghc2FsX2NvbnNvbGVfcG9ydC5zY19pc19hc3luY2gpIHsNCisJ CXNuX3NhbF9zd2l0Y2hfdG9fYXN5bmNoKCZzYWxfY29uc29sZV9wb3J0KTsN CisJfQ0KKw0KKwkvKiBhdCB0aGlzIHBvaW50IChtb2R1bGVfaW5pdCkgd2Ug Y2FuIHRyeSB0byB0dXJuIG9uIGludGVycnVwdHMgKi8NCisJaWYgKCFJU19S VU5OSU5HX09OX1NJTVVMQVRPUigpKSB7DQorCQlzbl9zYWxfc3dpdGNoX3Rv X2ludGVycnVwdHMoJnNhbF9jb25zb2xlX3BvcnQpOw0KKwl9DQorCXJldHVy biAwOw0KK30NCisNCisvKioNCisgKiBzbl9zYWxfbW9kdWxlX2V4aXQgLSBX aGVuIHdlJ3JlIHVubG9hZGVkLCByZW1vdmUgdGhlIGRyaXZlci9wb3J0DQor ICoNCisgKi8NCitzdGF0aWMgdm9pZCBfX2V4aXQNCitzbl9zYWxfbW9kdWxl X2V4aXQodm9pZCkNCit7DQorCWRlbF90aW1lcl9zeW5jKCZzYWxfY29uc29s ZV9wb3J0LnNjX3RpbWVyKTsNCisJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNh bF9jb25zb2xlX3VhcnQsICZzYWxfY29uc29sZV9wb3J0LnNjX3BvcnQpOw0K Kwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzYWxfY29uc29sZV91YXJ0KTsN CisJbWlzY19kZXJlZ2lzdGVyKCZtaXNjKTsNCit9DQorDQorbW9kdWxlX2lu aXQoc25fc2FsX21vZHVsZV9pbml0KTsNCittb2R1bGVfZXhpdChzbl9zYWxf bW9kdWxlX2V4aXQpOw0KKw0KKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NHSV9M MV9DT05TT0xFDQorDQorLyoqDQorICogcHV0c19yYXdfZml4ZWQgLSBzbl9z YWxfY29uc29sZV93cml0ZSBoZWxwZXIgZm9yIGFkZGluZyBccidzIGFzIHJl cXVpcmVkDQorICogQHM6IGlucHV0IHN0cmluZw0KKyAqIEBjb3VudDogbGVu Z3RoDQorICoNCisgKiBXZSBuZWVkIGEgXHIgYWhlYWQgb2YgZXZlcnkgXG4g Zm9yIGRpcmVjdCB3cml0ZXMgdGhyb3VnaA0KKyAqIGlhNjRfc25fY29uc29s ZV9wdXRiICh3aGF0IHNhbF9wdXRzX3JhdyBiZWxvdyBhY3R1YWxseSBkb2Vz KS4NCisgKg0KKyAqLw0KK3N0YXRpYyB2b2lkIHB1dHNfcmF3X2ZpeGVkKGNv bnN0IGNoYXIgKnMsIGludCBjb3VudCkgDQorew0KKwljb25zdCBjaGFyICpz MTsNCisJc3RydWN0IHNuX2NvbnNfcG9ydCAqcG9ydCA9ICZzYWxfY29uc29s ZV9wb3J0OwkJCQ0KKw0KKwkvKiBPdXRwdXQgJ1xyJyBiZWZvcmUgZWFjaCAn XG4nICovDQorCXdoaWxlICgoczEgPSBtZW1jaHIocywgJ1xuJywgY291bnQp KSAhPSBOVUxMKSB7DQorCQlwb3J0LT5zY19vcHMtPnNhbF9wdXRzX3Jhdyhz LCBzMSAtIHMpOw0KKwkJcG9ydC0+c2Nfb3BzLT5zYWxfcHV0c19yYXcoIlxy XG4iLCAyKTsNCisJCWNvdW50IC09IHMxICsgMSAtIHM7DQorCQlzID0gczEg KyAxOw0KKwl9DQorCXBvcnQtPnNjX29wcy0+c2FsX3B1dHNfcmF3KHMsIGNv dW50KTsNCit9DQorDQorLyoqDQorICogc25fc2FsX2NvbnNvbGVfd3JpdGUg LSBQcmludCBzdGF0ZW1lbnRzIGJlZm9yZSBzZXJpYWwgY29yZSBhdmFpbGFi bGUNCisgKiBAY29uc29sZTogQ29uc29sZSB0byBvcGVyYXRlIG9uIC0gd2Ug aWdub3JlIHNpbmNlIHdlIGhhdmUganVzdCBvbmUNCisgKiBAczogU3RyaW5n IHRvIHNlbmQNCisgKiBAY291bnQ6IGxlbmd0aA0KKyAqIA0KKyAqIFRoaXMg aXMgcmVmZXJlbmNlZCBpbiB0aGUgY29uc29sZSBzdHJ1Y3QuICBJdCBpcyB1 c2VkIGZvciBlYXJseSANCisgKiBjb25zb2xlIHByaW50aW5nIGJlZm9yZSB3 ZSByZWdpc3RlciB3aXRoIHNlcmlhbCBjb3JlIGFuZCBmb3IgdGhpbmdzDQor ICogc3VjaCBhcyBrZGIuICBUaGUgY29uc29sZV9sb2NrIG11c3QgYmUgaGVs ZCB3aGVuIHdlIGdldCBoZXJlLiAgDQorICoNCisgKiBUaGlzIGZ1bmN0aW9u IGhhcyBzb21lIGNvZGUgZm9yIHRyeWluZyB0byBwcmludCBvdXRwdXQgZXZl biBpZiB0aGUgbG9jaw0KKyAqIGlzIGhlbGQuICBXZSB0cnkgdG8gY292ZXIg dGhlIGNhc2Ugd2hlcmUgYSBsb2NrIGhvbGRlciBjb3VsZCBoYXZlIGRpZWQu DQorICogV2UgZG9uJ3QgdXNlIHRoaXMgc3BlY2lhbCBjYXNlIGNvZGUgaWYg d2UncmUgbm90IHJlZ2lzdGVyZWQgd2l0aCBzZXJpYWwgDQorICogY29yZSB5 ZXQuICBBZnRlciB3ZSdyZSByZWdpc3RlcmVkIHdpdGggc2VyaWFsIGNvcmUs IHRoZSBvbmx5IHRpbWUgdGhpcw0KKyAqIGZ1bmN0aW9uIHdvdWxkIGJlIHVz ZWQgaXMgZm9yIGhpZ2ggbGV2ZWwga2VybmVsIG91dHB1dCBsaWtlIG1hZ2lj IHN5cyByZXEsDQorICoga2RiLCBhbmQgcHJpbnRrJ3MuDQorICovDQorc3Rh dGljIHZvaWQNCitzbl9zYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29s ZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQ0KK3sNCisJ dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorCXN0cnVjdCBzbl9jb25zX3Bv cnQgKnBvcnQgPSAmc2FsX2NvbnNvbGVfcG9ydDsJCQkNCisjaWYgZGVmaW5l ZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQ0KKwlz dGF0aWMgaW50IHN0b2xlX2xvY2sgPSAwOw0KKyNlbmRpZg0KKw0KKwlCVUdf T04oIXBvcnQtPnNjX2lzX2FzeW5jaCk7DQorDQorCS8qIFdlIGNhbid0IGxv b2sgYXQgdGhlIHhtaXQgYnVmZmVyIGlmIHdlJ3JlIG5vdCByZWdpc3RlcmVk IHdpdGggc2VyaWFsIGNvcmUNCisJICogIHlldC4gIFNvIG9ubHkgZG8gdGhl IGZhbmN5IHJlY292ZXJ5IGFmdGVyIHJlZ2lzdGVyaW5nIA0KKwkgKi8NCisJ aWYgKHBvcnQtPnNjX3BvcnQuaW5mbykgew0KKw0KKwkJLyogc29tZWJvZHkg cmVhbGx5IHdhbnRzIHRoaXMgb3V0cHV0LCBtaWdodCBiZSBhbg0KKwkgCSog b29wcywga2RiLCBwYW5pYywgZXRjLiAgbWFrZSBzdXJlIHRoZXkgZ2V0IGl0 LiAqLw0KKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09O RklHX1BSRUVNUFQpDQorCQlpZiAoc3Bpbl9pc19sb2NrZWQoJnBvcnQtPnNj X3BvcnQubG9jaykpIHsNCisJCQlpbnQgbGhlYWQgPSBwb3J0LT5zY19wb3J0 LmluZm8tPnhtaXQuaGVhZDsNCisJCQlpbnQgbHRhaWwgPSBwb3J0LT5zY19w b3J0LmluZm8tPnhtaXQudGFpbDsNCisJCQlpbnQgY291bnRlciwgZ290X2xv Y2sgPSAwOw0KKw0KKwkJCS8qDQorCQkgCSAqIFdlIGF0dGVtcHQgdG8gZGV0 ZXJtaW5lIGlmIHNvbWVvbmUgaGFzIGRpZWQgd2l0aCB0aGUNCisJCSAJICog bG9jay4gV2Ugd2FpdCB+MjAgc2VjcyBhZnRlciB0aGUgaGVhZCBhbmQgdGFp bCBwdHJzDQorCQkgCSAqIHN0b3AgbW92aW5nIGFuZCBhc3N1bWUgdGhlIGxv Y2sgaG9sZGVyIGlzIG5vdCBmdW5jdGlvbmFsDQorCQkgCSAqIGFuZCBwbG93 IGFoZWFkLiBJZiB0aGUgbG9jayBpcyBmcmVlZCB3aXRoaW4gdGhlIHRpbWUg b3V0DQorCQkgCSAqIHBlcmlvZCB3ZSByZS1nZXQgdGhlIGxvY2sgYW5kIGdv IGFoZWFkIG5vcm1hbGx5LiBXZSBhbHNvDQorCQkgCSAqIHJlbWVtYmVyIGlm IHdlIGhhdmUgcGxvd2VkIGFoZWFkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZQ0K KwkJCSAqIHRvIHdhaXQgb3V0IHRoZSB0aW1lIG91dCBwZXJpb2QgYWdhaW4g LSB0aGUgYXN1bXB0aW9uDQorCQkgCSAqIGlzIHRoYXQgd2Ugd2lsbCB0aW1l IG91dCBhZ2Fpbi4NCisJCSAJICovDQorDQorCQkJZm9yIChjb3VudGVyID0g MDsgY291bnRlciA8IDE1MDsgbWRlbGF5KDEyNSksIGNvdW50ZXIrKykgew0K KwkJCQlpZiAoIXNwaW5faXNfbG9ja2VkKCZwb3J0LT5zY19wb3J0LmxvY2sp IHx8IHN0b2xlX2xvY2spIHsNCisJCQkJCWlmICghc3RvbGVfbG9jaykgew0K KwkJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5zY19wb3J0LmxvY2ss IGZsYWdzKTsNCisJCQkJCQlnb3RfbG9jayA9IDE7DQorCQkJCQl9DQorCQkJ CQlicmVhazsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8qIHN0aWxs IGxvY2tlZCAqLw0KKwkJCQkJaWYgKChsaGVhZCAhPSBwb3J0LT5zY19wb3J0 LmluZm8tPnhtaXQuaGVhZCkgfHwgKGx0YWlsICE9IHBvcnQtPnNjX3BvcnQu aW5mby0+eG1pdC50YWlsKSkgew0KKwkJCQkJCWxoZWFkID0gcG9ydC0+c2Nf cG9ydC5pbmZvLT54bWl0LmhlYWQ7DQorCQkJCQkJbHRhaWwgPSBwb3J0LT5z Y19wb3J0LmluZm8tPnhtaXQudGFpbDsNCisJCQkJCQljb3VudGVyID0gMDsN CisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkvKiBmbHVzaCBhbnl0aGlu ZyBpbiB0aGUgc2VyaWFsIGNvcmUgeG1pdCBidWZmZXIsIHJhdyAqLw0KKwkJ CXNuX3RyYW5zbWl0X2NoYXJzKHBvcnQsIDEpOw0KKwkJCWlmIChnb3RfbG9j aykgew0KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5zY19w b3J0LmxvY2ssIGZsYWdzKTsNCisJCQkJc3RvbGVfbG9jayA9IDA7DQorCQkJ fQ0KKwkJCWVsc2Ugew0KKwkJCQkvKiBmZWxsIHRocnUgKi8NCisJCQkJc3Rv bGVfbG9jayA9IDE7DQorCQkJfQ0KKwkJCXB1dHNfcmF3X2ZpeGVkKHMsIGNv dW50KTsNCisJCX0gDQorCQllbHNlIHsNCisJCQlzdG9sZV9sb2NrID0gMDsN CisjZW5kaWYNCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+c2NfcG9y dC5sb2NrLCBmbGFncyk7DQorCQkJc25fdHJhbnNtaXRfY2hhcnMocG9ydCwg MSk7DQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+c2NfcG9y dC5sb2NrLCBmbGFncyk7DQorDQorCQkJcHV0c19yYXdfZml4ZWQocywgY291 bnQpOw0KKwkJfQ0KKwl9DQorCWVsc2Ugew0KKwkJLyogTm90IHlldCByZWdp c3RlcmVkIHdpdGggc2VyaWFsIGNvcmUgLSBzaW1wbGUgY2FzZSAqLw0KKwkJ cHV0c19yYXdfZml4ZWQocywgY291bnQpOw0KKwl9DQorfQ0KKw0KKw0KKy8q Kg0KKyAqIHNuX3NhbF9jb25zb2xlX3NldHVwIC0gU2V0IHVwIGNvbnNvbGUg Zm9yIGVhcmx5IHByaW50aW5nDQorICogQGNvOiBDb25zb2xlIHRvIHdvcmsg d2l0aA0KKyAqIEBvcHRpb25zOiBPcHRpb25zIHRvIHNldA0KKyAqDQorICog QWx0aXggY29uc29sZSBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggYmF1ZCBy YXRlcywgZXRjLCBhbnl3YXkuDQorICogDQorICogVGhpcyBpc24ndCByZXF1 aXJlZCBzaW5jZSBub3QgcHJvdmlkaW5nIHRoZSBzZXR1cCBmdW5jdGlvbiBp biB0aGUNCisgKiBjb25zb2xlIHN0cnVjdCBpcyBvay4gIEhvd2V2ZXIsIG90 aGVyIHBhdGNoZXMgbGlrZSBLREIgcGxvcCBzb21ldGhpbmcNCisgKiBoZXJl IHNvIHByb3ZpZGluZyBpdCBpcyBlYXNpZXIuDQorICoNCisgKi8NCitzdGF0 aWMgaW50IF9faW5pdA0KK3NuX3NhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBj b25zb2xlICpjbywgY2hhciAqb3B0aW9ucykNCit7DQorCXJldHVybiAwOw0K K30NCisNCisvKioNCisgKiBzbl9zYWxfY29uc29sZV93cml0ZV9lYXJseSAt IHNpbXBsZSBlYXJseSBvdXRwdXQgcm91dGluZQ0KKyAqIEBjbyAtIGNvbnNv bGUgc3RydWN0DQorICogQHMgLSBzdHJpbmcgdG8gcHJpbnQNCisgKiBAY291 bnQgLSBjb3VudA0KKyAqDQorICogU2ltcGxlIGZ1bmN0aW9uIHRvIHByb3Zp ZGUgZWFybHkgb3V0cHV0LCBiZWZvcmUgZXZlbiANCisgKiBzbl9zYWxfc2Vy aWFsX2NvbnNvbGVfaW5pdCBpcyBjYWxsZWQuICBSZWZlcmVuY2VkIGluIHRo ZSANCisgKiBjb25zb2xlIHN0cnVjdCByZWdpc3RlcmQgaW4gc25fc2VyaWFs X2NvbnNvbGVfZWFybHlfc2V0dXAuDQorICoNCisgKi8NCitzdGF0aWMgdm9p ZCBfX2luaXQNCitzbl9zYWxfY29uc29sZV93cml0ZV9lYXJseShzdHJ1Y3Qg Y29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQ0K K3sNCisJc2FsX2NvbnNvbGVfcG9ydC5zY19vcHMtPnNhbF9wdXRzKHMsIGNv dW50KTsNCit9DQorDQorLyogVXNlZCBmb3IgdmVyeSBlYXJseSBjb25zb2xl IHByaW50aW5nIC0gYWdhaW4sIGJlZm9yZSANCisgKiBzbl9zYWxfc2VyaWFs X2NvbnNvbGVfaW5pdCBpcyBydW4gKi8NCitzdGF0aWMgc3RydWN0IGNvbnNv bGUgc2FsX2NvbnNvbGVfZWFybHkgX19pbml0ZGF0YSA9IHsNCisJLm5hbWUg PSAic25fc2FsIiwNCisJLndyaXRlID0gc25fc2FsX2NvbnNvbGVfd3JpdGVf ZWFybHksDQorCS5mbGFncyA9IENPTl9QUklOVEJVRkZFUiwNCisJLmluZGV4 ICA9IC0xLA0KK307DQorDQorLyoqDQorICogc25fc2VyaWFsX2NvbnNvbGVf ZWFybHlfc2V0dXAgLSBTZXRzIHVwIGVhcmx5IGNvbnNvbGUgb3V0cHV0IHN1 cHBvcnQNCisgKiANCisgKiBSZWdpc3RlciBhIGNvbnNvbGUgZWFybHkgb24u Li4gIFRoaXMgaXMgZm9yIG91dHB1dCBiZWZvcmUgZXZlbiANCisgKiBzbl9z YWxfc2VyaWFsX2Nvc25vbGVfaW5pdCBpcyBjYWxsZWQuICBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBmcm9tDQorICogc2V0dXAuYy4gIFRoaXMgYWxsb3dz IHVzIHRvIGRvIHJlYWxseSBlYXJseSBwb2xsZWQgd3JpdGVzLiBXaGVuIA0K KyAqIHNuX3NhbF9zZXJpYWxfY29uc29sZV9pbml0IGlzIGNhbGxlZCwgdGhp cyBjb25zb2xlIGlzIHVucmVnaXN0ZXJlZCANCisgKiBhbmQgYSBuZXcgb25l IHJlZ2lzdGVyZWQuDQorICovDQoraW50IF9faW5pdA0KK3NuX3NlcmlhbF9j b25zb2xlX2Vhcmx5X3NldHVwKHZvaWQpDQorew0KKwlpZiAoIWlhNjRfcGxh dGZvcm1faXMoInNuMiIpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlpZiAoSVNf UlVOTklOR19PTl9TSU1VTEFUT1IoKSkNCisJCXNhbF9jb25zb2xlX3BvcnQu c2Nfb3BzID0gJnNpbV9vcHM7DQorCWVsc2UNCisJCXNhbF9jb25zb2xlX3Bv cnQuc2Nfb3BzID0gJnBvbGxfb3BzOw0KKw0KKwllYXJseV9zbl9zZXR1cCgp OyAvKiBGaW5kIFNBTCBlbnRyeSBwb2ludHMgKi8NCisJcmVnaXN0ZXJfY29u c29sZSgmc2FsX2NvbnNvbGVfZWFybHkpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorDQorLyoqDQorICogc25fc2FsX3NlcmlhbF9jb25zb2xlX2luaXQg LSBFYXJseSBjb25zb2xlIG91dHB1dCAtIHNldCB1cCBmb3IgcmVnaXN0ZXIN CisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcmVndWxh ciBjb25zb2xlIGluaXQgaGFwcGVucy4gIEJlY2F1c2Ugd2UNCisgKiBzdXBw b3J0IGV2ZW4gZWFybGllciBjb25zb2xlIG91dHB1dCB3aXRoIHNuX3Nlcmlh bF9jb25zb2xlX2Vhcmx5X3NldHVwDQorICogKGNhbGxlZCBmcm9tIHNldHVw LmMgZGlyZWN0bHkpLCB0aGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBy ZWFsbHkNCisgKiBlYXJseSBjb25zb2xlLg0KKyAqDQorICogTm90ZTogRXZl biBpZiBzZXR1cC5jIGRvZXNuJ3QgcmVnaXN0ZXIgc2FsX2NvbnNvbGVfZWFy bHksIHVucmVnaXN0ZXJpbmcNCisgKiBpdCBoZXJlIGRvZXNuJ3QgaHVydCBh bnl0aGluZy4NCisgKg0KKyAqLw0KK3N0YXRpYyBpbnQgX19pbml0DQorc25f c2FsX3NlcmlhbF9jb25zb2xlX2luaXQodm9pZCkNCit7DQorCWlmIChpYTY0 X3BsYXRmb3JtX2lzKCJzbjIiKSkgew0KKwkJc25fc2FsX3N3aXRjaF90b19h c3luY2goJnNhbF9jb25zb2xlX3BvcnQpOw0KKwkJRFBSSU5URiAoInNuX3Nh bF9zZXJpYWxfY29uc29sZV9pbml0IDogcmVnaXN0ZXIgY29uc29sZVxuIik7 DQorCQlyZWdpc3Rlcl9jb25zb2xlKCZzYWxfY29uc29sZSk7DQorCQl1bnJl Z2lzdGVyX2NvbnNvbGUoJnNhbF9jb25zb2xlX2Vhcmx5KTsNCisJfQ0KKwly ZXR1cm4gMDsNCit9DQorDQorY29uc29sZV9pbml0Y2FsbChzbl9zYWxfc2Vy aWFsX2NvbnNvbGVfaW5pdCk7DQorDQorI2VuZGlmCQkJCS8qIENPTkZJR19T RVJJQUxfU0dJX0wxX0NPTlNPTEUgKi8NCg== ---2136806248-1650276762-1088133341=:343801 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="devices.txt-patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="devices.txt-patch" IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBkaWZmIC1OcnUgc3R5 bGUgcGF0Y2guDQojDQojIENoYW5nZVNldA0KIyAgIDIwMDQvMDYvMjQgMjI6 MDg6MzYtMDU6MDAgZXJpa2pAYXR0aWNhLmFtZXJpY2FzLnNnaS5jb20gDQoj ICAgRml4IHVwIGRldmljZXMudHh0IGZvciBhbHRpeC4NCiMgDQojIERvY3Vt ZW50YXRpb24vZGV2aWNlcy50eHQNCiMgICAyMDA0LzA2LzI0IDIyOjA4OjI2 LTA1OjAwIGVyaWtqQGF0dGljYS5hbWVyaWNhcy5zZ2kuY29tICsyIC0wDQoj ICAgVXBkYXRlIGRldmljZXMudHh0IGZvciBhbHRpeCBjb25zb2xlIGRyaXZl ci4NCiMgDQpkaWZmIC1OcnUgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0 IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dA0KLS0tIGEvRG9jdW1lbnRh dGlvbi9kZXZpY2VzLnR4dAkyMDA0LTA2LTI0IDIyOjEwOjU5IC0wNTowMA0K KysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAkyMDA0LTA2LTI0IDIy OjEwOjU5IC0wNTowMA0KQEAgLTI3MTgsNiArMjcxOCw3IEBADQogCQkgMzIg PSAvZGV2L3R0eURCMAkJRGF0YUJvb3N0ZXIgc2VyaWFsIHBvcnQgMA0KIAkJ ICAgIC4uLg0KIAkJIDM5ID0gL2Rldi90dHlEQjcJCURhdGFCb29zdGVyIHNl cmlhbCBwb3J0IDcNCisJCSA0MCA9IC9kZXYvdHR5U0cwCQlTR0kgQWx0aXgg Y29uc29sZSBwb3J0DQogDQogMjA1IGNoYXIJTG93LWRlbnNpdHkgc2VyaWFs IHBvcnRzIChhbHRlcm5hdGUgZGV2aWNlKQ0KIAkJICAwID0gL2Rldi9jdWx1 MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUxVMA0KQEAgLTI3NDIsNiArMjc0 Myw3IEBADQogCQkgMzIgPSAvZGV2L2N1ZGIwCQlDYWxsb3V0IGRldmljZSBm b3IgdHR5REIwDQogCQkgICAgLi4uDQogCQkgMzkgPSAvZGV2L2N1ZGI3CQlD YWxsb3V0IGRldmljZSBmb3IgdHR5REI3DQorCQkgNDAgPSAvZGV2L2N1c2cw CQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0cwDQogDQogMjA2IGNoYXIJT25T dHJlYW0gU0MteDAgdGFwZSBkZXZpY2VzDQogCQkgIDAgPSAvZGV2L29zc3Qw CQlGaXJzdCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMA0K ---2136806248-1650276762-1088133341=:343801-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/