Return-Path: From: =?utf-8?B?6ZmI6Imz6JCN?= To: Larry Finger , Daniel Drake CC: Carlo Caione , Linux Bluetooth mailing list , "shaofu@realtek.com > shaofu" , =?utf-8?B?5byg5b+X56Wl?= , =?utf-8?B?6ZmG5pyx5Lyf?= , Chih-Hsiang Wang , =?utf-8?B?5q+b5Li66ZSL?= Subject: =?utf-8?B?562U5aSNOiBSZWFsdGVrIFVTQiBibHVldG9vdGg6IG5vIHNjYW4gcmVzdWx0?= =?utf-8?Q?s_when_wifi_is_connected?= Date: Tue, 12 May 2015 02:54:04 +0000 Message-ID: <54F70642BAB21D4498E1AA3EFE3D519A461012DA@rsex2.realsil.com.cn> References: <554E804F.9090407@lwfinger.net> In-Reply-To: <554E804F.9090407@lwfinger.net> Content-Type: multipart/mixed; boundary="_002_54F70642BAB21D4498E1AA3EFE3D519A461012DArsex2realsilcom_" MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --_002_54F70642BAB21D4498E1AA3EFE3D519A461012DArsex2realsilcom_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBEYW5pZWwsDQoJRm9yIHNvbWUgcmVhc29uLCA4NzIzQiBjaGlwIHdpdGggc2luZ2xlIGFu dGVubmEgYW5kIDIgYW50ZW5uYXMgaGF2ZSBkaWZmZXJlbnQgc2V0dGluZ3MgYW5kIHRoaXMgY2Fu IG9ubHkgYmUgbW9kaWZpZWQgbWFudWFsbHkuDQpCVCBkcml2ZXIgd2lsbCBzZXQgY29udHJvbGxl ciB0byB1c2UgUzAgd2hlbiB1c2UgMiBhbnRlbm5hcy4NCglJbiBteSBzdWJtaXR0ZWQgZHJpdmVy ICwgdGhlcmUgYXJlIGZvbGxvd2luZyBjb2RlcyB0byBhZGQgdGhlIGNvbmZpZyBzZXR0aW5ncyBh dCB0aGUgZW5kIG9mIGZpcm13YXJlIHRvIGJlIGRvd25sb2FkZWQuDQpXb3VsZCB5b3UgcGxlYXNl IHRyeSB0byBhZGQgdGhlc2UgY29kZXMgYW5kIHRlc3QgYWdhaW4/DQoJDQovKmZvciA4NzIzQix1 c2UgUzAgQW50dGVuYSBmb3IgYmx1ZXRvb3RoKi8NCglpZihsbXBfdmVyc2lvbj09Uk9NX0xNUF84 NzIzQikNCgl7CQ0KCQltZW1jcHkoKmJ1ZitwYXRjaF9lbnRyeS0+cGF0Y2hfbGVuZ3RoLFJUS19D T05GSUdfU0lHTkFUVVJFLDYpOw0KCQlpZiAoVVNFX1MwX0FOVFRFTkEpDQoJCQltZW1jcHkoKmJ1 ZitwYXRjaF9lbnRyeS0+cGF0Y2hfbGVuZ3RoKzYsQ09ORklHX1MwX0FOVFRFTkEsNCk7DQoJCWVs c2UNCgkJCW1lbWNweSgqYnVmK3BhdGNoX2VudHJ5LT5wYXRjaF9sZW5ndGgrNixDT05GSUdfUzFf QU5UVEVOQSw0KTsNCgkJKmJ1Zl9sZW4gKz0gMTA7DQoJCUJUX0RCRygiVVNFX1MwX0FOVFRFTkEi KTsNCgl9DQoNCi0tLS0t6YKu5Lu25Y6f5Lu2LS0tLS0NCuWPkeS7tuS6ujogTGFycnkgRmluZ2Vy IFttYWlsdG86bGFycnkuZmluZ2VyQGdtYWlsLmNvbV0g5Luj6KGoIExhcnJ5IEZpbmdlcg0K5Y+R 6YCB5pe26Ze0OiAyMDE15bm0NeaciDEw5pelIDU6NDcNCuaUtuS7tuS6ujogRGFuaWVsIERyYWtl OyDpmYjoibPokI0NCuaKhOmAgTogQ2FybG8gQ2Fpb25lOyBMaW51eCBCbHVldG9vdGggbWFpbGlu ZyBsaXN0OyBzaGFvZnVAcmVhbHRlay5jb20gPiBzaGFvZnUNCuS4u+mimDogUmU6IFJlYWx0ZWsg VVNCIGJsdWV0b290aDogbm8gc2NhbiByZXN1bHRzIHdoZW4gd2lmaSBpcyBjb25uZWN0ZWQNCg0K T24gMDUvMDkvMjAxNSAwMzozMiBQTSwgRGFuaWVsIERyYWtlIHdyb3RlOg0KPiBIaSBDaGFtcGlv biwNCj4NCj4gSSBoYXZlIGEgY2FyZCBoZXJlIHdoaWNoIGhhcyBSVEw4NzIzQkUgd2lmaSBhbmQg Ymx1ZXRvb3RoIGNvbWJpbmVkLiAyIGFudGVubmFzLg0KPg0KPiBJbiBsaW51eC1uZXh0IChMaW51 eCA0LjIpIHRoZSBibHVldG9vdGggYW5kIHdpZmkgd29yayBmaW5lIHNlcGFyYXRlbHksIA0KPiBi dXQgd2hlbiB1c2luZyB0aGVtIHRvZ2V0aGVyLCBJIGNhbiBzb21ldGltZXMgc2VlIGEgcHJvYmxl bS4gVGhpcyBpcyANCj4gdXNpbmcgdGhlIGJ0dXNiIGRyaXZlciBiYXNlZCBvbiB5b3VyIGNvZGUg KG5vdyBpbmNsdWRlZCBpbiBMaW51eCA0LjIpLCANCj4gYW5kIHRoZSBSVEw4NzIzQiBydGx3aWZp IGRyaXZlciwgYWxsIHVzaW5nIHRoZSBsYXRlc3QgZmlybXdhcmUgaW4gdGhlIA0KPiBsaW51eC1m aXJtd2FyZSBnaXQgcmVwby4NCj4NCj4gVG8gcmVwcm9kdWNlOg0KPiAgIC0gQm9vdCB3aXRoIG5v IHdpZmkgY29ubmVjdGlvbiBhY3RpdmUNCj4gICAtICJoY2l0b29sIHNjYW4iIGFuZCB2ZXJpZnkg dGhhdCBteSBsYXB0b3AgYW5kIHBob25lIGNhbiBiZSBzZWVuDQo+ICAgLSBDb25uZWN0IHRvIHdp ZmkNCj4gICAtIFJ1biAiaGNpdG9vbCBzY2FuIiBhZ2FpbiBhIGZldyB0aW1lcyBhIG1pbnV0ZSwg d2l0aGluIDItNSBtaW51dGVzIA0KPiBub3JtYWxseSBteSBwaG9uZSBhbmQgbGFwdG9wIGNhbiBu byBsb25nZXIgYmUgc2Vlbg0KPiAgIC0gRGlzY29ubmVjdCBmcm9tIHdpZmkgYW5kIGltbWVkaWF0 ZWx5IHJ1biAiaGNpdG9vbCBzY2FuIiBhZ2FpbiwgbXkgDQo+IHBob25lIGFuZCBsYXB0b3AgY2Fu IGJlIHNlZW4NCj4NCj4gMyBpbnRlcmVzdGluZyBvYnNlcnZhdGlvbnMgd2hlbiB0aGUgc2NhbiBy ZXN1bHRzIGFyZSBjb21pbmcgYmFjayBlbXB0eToNCj4gICAxLiBJIGNhbiBzdGlsbCBnZXQgdGhl IG5hbWVzIG9mIHRoZSByZW1vdGUgZGV2aWNlcyBieSBydW5uaW5nIA0KPiAiaGNpdG9vbCBuYW1l IDxhZGRyPiINCj4gICAyLiBJIGNhbiBzdGlsbCBxdWVyeSB0aGUgcmVtb3RlIGRldmljZXMgYnkg cnVubmluZyAiaGNpdG9vbCBpbmZvIA0KPiA8YWRkcj4iLiBBZnRlciB0aGlzLCB0aGUgc2NhbiBz dWRkZW5seSBzdGFydHMgd29ya2luZyBhZ2FpbiENCj4gICAzLiBFdmVuIHRob3VnaCBib3RoIG9m IG15IGxvY2FsIGJsdWV0b290aCBkZXZpY2VzIG5vIGxvbmdlciBhcHBlYXIgDQo+IGluIHNjYW4g cmVzdWx0cywgSSBjYW4gc29tZXRpbWVzIHNlZSBteSBuZWlnaGJvdXIncyBwaG9uZSBjb21pbmcg dXAgYXMgDQo+IGEgc2NhbiByZXN1bHQgYXQgdGhpcyB0aW1lLg0KPg0KPiBBbnl3YXksIGRpc2Fi bGluZyBidGNvZXhpc3QgYXZvaWRzIHRoZSBpc3N1ZSwgc28gSSBkdWcgdGhyb3VnaCB0aGF0IA0K PiBjb2RlLCBhbmQgZm91bmQgdGhlIGV4YWN0IGxpbmUgb2YgY29kZSB0aGF0IHNlZW1zIHRvIChz b21ldGltZXMpIG1ha2UgDQo+IHVzIGVudGVyIHRoaXMgc3RyYW5nZSBtb2RlLg0KPg0KPiBDYWxs IGNoYWluIGluc2lkZSBkcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2J0Y29leGlzdC9oYWxi dGM4NzIzYjJhbnQuYzoNCj4gZXhfYnRjODcyM2IyYW50X2J0X2luZm9fbm90aWZ5IChjYWxsZWQg d2hlbiBzdGFydGluZyBhbmQgZmluaXNoaW5nIGEgDQo+IEJUIHNjYW4pIGJ0Yzg3MjNiMmFudF9y dW5fY29leGlzdF9tZWNoYW5pc20NCj4gYnRjODcyM2IyYW50X2FjdGlvbl9idF9pbnF1aXJ5DQo+ DQo+IEFzIHdpZmkgaXMgY29ubmVjdGVkLCB3ZSBub3cgY2FsbDoNCj4gICAgICAgICAgYnRjODcy M2IyYW50X3BzX3RkbWEoYnRjb2V4aXN0LCBOT1JNQUxfRVhFQywgdHJ1ZSwgMyk7DQo+DQo+IFRo aXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGwgdGhhdCBzb21ldGltZXMgcHV0cyB1cyBpbnRvIHRoZSBt b2RlIHdoZXJlIA0KPiB0aGVyZSBhcmUgbm8gc2NhbiByZXN1bHRzLiBJbnNpZGUgdGhpcyBmdW5j dGlvbiwgaWYgSSBjb21tZW50IG91dCANCj4gdGhlc2UgbGluZXMgaW4gdGhlIHR1cm5fb24gc2Vj dGlvbiwgdGhlIGJ1ZyBpcyBhdm9pZGVkOg0KPg0KPiAgICAgICAgICBjYXNlIDM6DQo+ICAgICAg ICAgICAgICAvL2J0Yzg3MjNiMmFudF9zZXRfZndfcHNfdGRtYShidGNvZXhpc3QsIDB4ZTMsIDB4 MWMsDQo+ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAweDMsIDB4ZjEsIDB4OTApOw0K PiAgICAgICAgICAgICAgYnJlYWs7DQo+DQo+IEFueSBpZGVhIHdoYXQgaXMgaGFwcGVuaW5nIGhl cmU/IENhbiB5b3UgaGVscCBtZSBmaW5kIGEgYmV0dGVyIGZpeD8NCg0KRGFuaWVsLA0KDQpEbyB5 b3Ugc2VlIGFueSBhZHZlcnNlIHNpZGUgZWZmZWN0cyB3aGVuIHlvdSBjb21tZW50IG91dCB0aGUg ImNhc2UgMyIgY29kZT8NCg0KQXMgdGhlcmUgaGFzIG5vdCBiZWVuIGEgbG90IG9mIHRlc3Rpbmcg b2Ygd2lmaSBhbmQgQlQgd2l0aCBSZWFsdGVrIGRldmljZXMgaW4gdGhlIGZpZWxkLCBJIGV4cGVj dCB0byBzZWUgYSBudW1iZXIgb2YgYnVncyBsaWtlIHRoaXMuDQoNCkkgYWRkZWQgU2hhbyBGdSAo YWthIFJvY2spIHRvIHRoZSBDYyBsaXN0LiBIZSBpcyB0aGUgUmVhbHRlayBlbmdpbmVlciByZXNw b25zaWJsZSBmb3IgdGhlIHdpZmkgZHJpdmVyLg0KDQpMYXJyeQ0KDQo= --_002_54F70642BAB21D4498E1AA3EFE3D519A461012DArsex2realsilcom_ Content-Type: text/plain; name="btusb.c" Content-Description: btusb.c Content-Disposition: attachment; filename="btusb.c"; size=58527; creation-date="Tue, 12 May 2015 02:37:17 GMT"; modification-date="Fri, 08 May 2015 06:27:25 GMT" Content-Transfer-Encoding: base64 LyoKICoKICogIEdlbmVyaWMgQmx1ZXRvb3RoIFVTQiBkcml2ZXIKICoKICogIENvcHlyaWdodCAo QykgMjAwNS0yMDA4ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CiAqCiAq CiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAqICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQogKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoK ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCiAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQogKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl LCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKgogKi8KCiNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgojaW5jbHVkZSA8bGludXgv ZmlybXdhcmUuaD4KCiNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgojaW5jbHVk ZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgoKI2RlZmluZSBWRVJTSU9OICIwLjYiCgpzdGF0 aWMgYm9vbCBpZ25vcmVfZGdhOwpzdGF0aWMgYm9vbCBpZ25vcmVfY3NyOwpzdGF0aWMgYm9vbCBp Z25vcmVfc25pZmZlcjsKc3RhdGljIGJvb2wgZGlzYWJsZV9zY29maXg7CnN0YXRpYyBib29sIGZv cmNlX3Njb2ZpeDsKCnN0YXRpYyBib29sIHJlc2V0ID0gMTsKCnN0YXRpYyBzdHJ1Y3QgdXNiX2Ry aXZlciBidHVzYl9kcml2ZXI7CgojZGVmaW5lIEJUVVNCX0lHTk9SRQkJMHgwMQojZGVmaW5lIEJU VVNCX0RJR0lBTlNXRVIJMHgwMgojZGVmaW5lIEJUVVNCX0NTUgkJMHgwNAojZGVmaW5lIEJUVVNC X1NOSUZGRVIJCTB4MDgKI2RlZmluZSBCVFVTQl9CQ005MjAzNQkJMHgxMAojZGVmaW5lIEJUVVNC X0JST0tFTl9JU09DCTB4MjAKI2RlZmluZSBCVFVTQl9XUk9OR19TQ09fTVRVCTB4NDAKI2RlZmlu ZSBCVFVTQl9BVEgzMDEyCQkweDgwCiNkZWZpbmUgQlRVU0JfSU5URUwJCTB4MTAwCiNkZWZpbmUg QlRVU0JfQkNNX1BBVENIUkFNCTB4MjAwCgojZGVmaW5lIEJUVVNCX1JUTAkJMHg0MDAKCiNpZmRl ZiBCVF9EQkcKI3VuZGVmIEJUX0RCRwojZW5kaWYgCiNkZWZpbmUgQlRfREJHKGZtdCwgYXJnLi4u KSBwcmludGsgKCBLRVJOX0lORk8gInRlc3RfYnR1c2I6ICVzICIgZm10ICJcbiIgLCBfX2Z1bmNf XyAsICMjIGFyZykKCiNpZmRlZiBCVF9JTkZPCiN1bmRlZiBCVF9JTkZPCiNlbmRpZiAKI2RlZmlu ZSBCVF9JTkZPKGZtdCwgYXJnLi4uKSBwcmludGsgKCBLRVJOX0lORk8gInRlc3RfYnR1c2I6ICVz ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKCiNpZmRlZiBCVF9FUlIKI3VuZGVmIEJU X0VSUgojZW5kaWYgCiNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSBwcmludGsgKCBLRVJOX0lO Rk8gInRlc3RfYnR1c2I6ICVzICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKCnN0YXRp YyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gewoJLyogR2VuZXJp YyBCbHVldG9vdGggVVNCIGRldmljZSAqLwoJeyBVU0JfREVWSUNFX0lORk8oMHhlMCwgMHgwMSwg MHgwMSkgfSwKCgkvKiBBcHBsZS1zcGVjaWZpYyAoQnJvYWRjb20pIGRldmljZXMgKi8KCXsgVVNC X1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgwNWFjLCAweGZmLCAweDAxLCAweDAxKSB9LAoK CS8qIE1lZGlhVGVrIE1UNzZ4MEUgKi8KCXsgVVNCX0RFVklDRSgweDBlOGQsIDB4NzYzZikgfSwK CgkvKiBCcm9hZGNvbSBTb2Z0U2FpbGluZyByZXBvcnRpbmcgdmVuZG9yIHNwZWNpZmljICovCgl7 IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxZTEpIH0sCgoJLyogQXBwbGUgTWFjQm9va1BybyA3LDEg Ki8KCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4ODIxMykgfSwKCgkvKiBBcHBsZSBpTWFjMTEsMSAq LwoJeyBVU0JfREVWSUNFKDB4MDVhYywgMHg4MjE1KSB9LAoKCS8qIEFwcGxlIE1hY0Jvb2tQcm82 LDIgKi8KCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4ODIxOCkgfSwKCgkvKiBBcHBsZSBNYWNCb29r QWlyMywxLCBNYWNCb29rQWlyMywyICovCgl7IFVTQl9ERVZJQ0UoMHgwNWFjLCAweDgyMWIpIH0s CgoJLyogQXBwbGUgTWFjQm9va0FpcjQsMSAqLwoJeyBVU0JfREVWSUNFKDB4MDVhYywgMHg4MjFm KSB9LAoKCS8qIEFwcGxlIE1hY0Jvb2tQcm84LDIgKi8KCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4 ODIxYSkgfSwKCgkvKiBBcHBsZSBNYWNNaW5pNSwxICovCgl7IFVTQl9ERVZJQ0UoMHgwNWFjLCAw eDgyODEpIH0sCgoJLyogQVZNIEJsdWVGUklUWiEgVVNCIHYyLjAgKi8KCXsgVVNCX0RFVklDRSgw eDA1N2MsIDB4MzgwMCkgfSwKCgkvKiBCbHVldG9vdGggVWx0cmFwb3J0IE1vZHVsZSBmcm9tIElC TSAqLwoJeyBVU0JfREVWSUNFKDB4MDRiZiwgMHgwMzBhKSB9LAoKCS8qIEFMUFMgTW9kdWxlcyB3 aXRoIG5vbi1zdGFuZGFyZCBpZCAqLwoJeyBVU0JfREVWSUNFKDB4MDQ0ZSwgMHgzMDAxKSB9LAoJ eyBVU0JfREVWSUNFKDB4MDQ0ZSwgMHgzMDAyKSB9LAoKCS8qIEVyaWNzc29uIHdpdGggbm9uLXN0 YW5kYXJkIGlkICovCgl7IFVTQl9ERVZJQ0UoMHgwYmRiLCAweDEwMDIpIH0sCgoJLyogQ2FueW9u IENOLUJUVTEgd2l0aCBISUQgaW50ZXJmYWNlcyAqLwoJeyBVU0JfREVWSUNFKDB4MGMxMCwgMHgw MDAwKSB9LAoKCS8qIEJyb2FkY29tIEJDTTIwNzAyQTAgKi8KCXsgVVNCX0RFVklDRSgweDBiMDUs IDB4MTdiNSkgfSwKCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTdjYikgfSwKCXsgVVNCX0RFVklD RSgweDA0Y2EsIDB4MjAwMykgfSwKCXsgVVNCX0RFVklDRSgweDA0ODksIDB4ZTA0MikgfSwKCXsg VVNCX0RFVklDRSgweDQxM2MsIDB4ODE5NykgfSwKCgkvKiBGb3hjb25uIC0gSG9uIEhhaSAqLwoJ eyBVU0JfVkVORE9SX0FORF9JTlRFUkZBQ0VfSU5GTygweDA0ODksIDB4ZmYsIDB4MDEsIDB4MDEp IH0sCgoJLypCcm9hZGNvbSBkZXZpY2VzIHdpdGggdmVuZG9yIHNwZWNpZmljIGlkICovCgl7IFVT Ql9WRU5ET1JfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGE1YywgMHhmZiwgMHgwMSwgMHgwMSkgfSwK CgkvKiBCZWxraW4gRjgwNjViZiAtIEJyb2FkY29tIGJhc2VkICovCgl7IFVTQl9WRU5ET1JfQU5E X0lOVEVSRkFDRV9JTkZPKDB4MDUwZCwgMHhmZiwgMHgwMSwgMHgwMSkgfSwKCgkvKiBSZWFsdGVr IGJsdWV0b290aCAtZ2VuZXJpYyBtb2R1bGVzKi8KCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNF X0lORk8oMHgwYmRhLCAweGUwLCAweDAxLCAweDAxKSB9LAoJLyogUmVhbHRlayBibHVldG9vdGgg LXdpdGggdmVuZG9yIHNwZWNpZmljIGlkKi8KCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lO Rk8oMHgwYmQ1LCAweGUwLCAweDAxLCAweDAxKSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgxM2QzLCAweGUwLCAweDAx LCAweDAxKSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCXsgVVNCX1ZFTkRPUl9B TkRfSU5URVJGQUNFX0lORk8oMHgwNDg5LCAweGUwLCAweDAxLCAweDAxKSB9LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKCQoKCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwp9OwoK TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGJ0dXNiX3RhYmxlKTsKCnN0YXRpYyBjb25zdCBzdHJ1 Y3QgdXNiX2RldmljZV9pZCBibGFja2xpc3RfdGFibGVbXSA9IHsKCS8qIENTUiBCbHVlQ29yZSBk ZXZpY2VzICovCgl7IFVTQl9ERVZJQ0UoMHgwYTEyLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBC VFVTQl9DU1IgfSwKCgkvKiBCcm9hZGNvbSBCQ00yMDMzIHdpdGhvdXQgZmlybXdhcmUgKi8KCXsg VVNCX0RFVklDRSgweDBhNWMsIDB4MjAzMyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9 LAoKCS8qIEF0aGVyb3MgMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwoJeyBVU0JfREVWSUNF KDB4MGNmMywgMHgzMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCgl7IFVTQl9E RVZJQ0UoMHgwY2YzLCAweGUwMTkpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKCXsg VVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9 LAoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwMjE1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdO T1JFIH0sCgl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwM2QpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9JR05PUkUgfSwKCXsgVVNCX0RFVklDRSgweDA0ODksIDB4ZTAyNyksIC5kcml2ZXJfaW5mbyA9 IEJUVVNCX0lHTk9SRSB9LAoKCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBm aXJtd2FyZSAqLwoJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgzMTFkKSwgLmRyaXZlcl9pbmZvID0g QlRVU0JfSUdOT1JFIH0sCgoJLyogQXRoZXJvcyAzMDEyIHdpdGggc2ZsYXNoIGZpcm13YXJlICov Cgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDAwMzYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgz MDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDgpLCAuZHJpdmVyX2luZm8g PSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMxMWQpLCAuZHJpdmVy X2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDgxN2EpLCAu ZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMz NzUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwNGNh LCAweDMwMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0Uo MHgwNGNhLCAweDMwMDUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9E RVZJQ0UoMHgwNGNhLCAweDMwMDYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7 IFVTQl9ERVZJQ0UoMHgwNGNhLCAweDMwMDgpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEy IH0sCgl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzNjIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9B VEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweGUwMDQpLCAuZHJpdmVyX2luZm8gPSBC VFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweGUwMDUpLCAuZHJpdmVyX2lu Zm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTkpLCAuZHJp dmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMjAp LCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAw eGUwNTcpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgx M2QzLCAweDMzOTMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJ Q0UoMHgwNDg5LCAweGUwNGUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVT Ql9ERVZJQ0UoMHgwNDg5LCAweGUwNTYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0s Cgl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwNGQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgz MDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwNGM1LCAweDEzMzApLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDM0MDIpLCAuZHJpdmVyX2luZm8g PSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMxMjEpLCAuZHJpdmVy X2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweGUwMDMpLCAu ZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCgoJLyogQXRoZXJvcyBBUjVCQlUxMiB3aXRo IHNmbGFzaCBmaXJtd2FyZSAqLwoJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDJjKSwgLmRyaXZl cl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCgoJLyogQXRoZXJvcyBBUjVCQlUxMiB3aXRoIHNmbGFz aCBmaXJtd2FyZSAqLwoJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDNjKSwgLmRyaXZlcl9pbmZv ID0gQlRVU0JfQVRIMzAxMiB9LAoJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDM2KSwgLmRyaXZl cl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LAoKCS8qIEJyb2FkY29tIEJDTTIwMzUgKi8KCXsgVVNC X0RFVklDRSgweDBhNWMsIDB4MjAzNSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19N VFUgfSwKCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAwYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNC X1dST05HX1NDT19NVFUgfSwKCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAwOSksIC5kcml2ZXJf aW5mbyA9IEJUVVNCX0JDTTkyMDM1IH0sCgoJLyogQnJvYWRjb20gQkNNMjA0NSAqLwoJeyBVU0Jf REVWSUNFKDB4MGE1YywgMHgyMDM5KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01U VSB9LAoJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMTAxKSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf V1JPTkdfU0NPX01UVSB9LAoKCS8qIElCTS9MZW5vdm8gVGhpbmtQYWQgd2l0aCBCcm9hZGNvbSBj aGlwICovCgl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMWUpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9XUk9OR19TQ09fTVRVIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxMTApLCAuZHJpdmVy X2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sCgoJLyogSFAgbGFwdG9wIHdpdGggQnJvYWRj b20gY2hpcCAqLwoJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgxNzFkKSwgLmRyaXZlcl9pbmZvID0g QlRVU0JfV1JPTkdfU0NPX01UVSB9LAoKCS8qIERlbGwgbGFwdG9wIHdpdGggQnJvYWRjb20gY2hp cCAqLwoJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTI2KSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf V1JPTkdfU0NPX01UVSB9LAoKCS8qIERlbGwgV2lyZWxlc3MgMzcwIGFuZCA0MTAgZGV2aWNlcyAq LwoJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTUyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JP TkdfU0NPX01UVSB9LAoJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTU2KSwgLmRyaXZlcl9pbmZv ID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LAoKCS8qIEJlbGtpbiBGOFQwMTIgYW5kIEY4VDAxMyBk ZXZpY2VzICovCgl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTIpLCAuZHJpdmVyX2luZm8gPSBC VFVTQl9XUk9OR19TQ09fTVRVIH0sCgl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTMpLCAuZHJp dmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sCgoJLyogQXN1cyBXTC1CVEQyMDIgZGV2 aWNlICovCgl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MTUpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9XUk9OR19TQ09fTVRVIH0sCgoJLyogS2Vuc2luZ3RvbiBCbHVldG9vdGggVVNCIGFkYXB0ZXIg Ki8KCXsgVVNCX0RFVklDRSgweDA0N2QsIDB4MTA1ZSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dS T05HX1NDT19NVFUgfSwKCgkvKiBSVFggVGVsZWNvbSBiYXNlZCBhZGFwdGVycyB3aXRoIGJ1Z2d5 IFNDTyBzdXBwb3J0ICovCgl7IFVTQl9ERVZJQ0UoMHgwNDAwLCAweDA4MDcpLCAuZHJpdmVyX2lu Zm8gPSBCVFVTQl9CUk9LRU5fSVNPQyB9LAoJeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODBhKSwg LmRyaXZlcl9pbmZvID0gQlRVU0JfQlJPS0VOX0lTT0MgfSwKCgkvKiBDT05XSVNFIFRlY2hub2xv Z3kgYmFzZWQgYWRhcHRlcnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLwoJeyBVU0JfREVWSUNF KDB4MGU1ZSwgMHg2NjIyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQlJPS0VOX0lTT0MgfSwKCgkv KiBEaWdpYW5zd2VyIGRldmljZXMgKi8KCXsgVVNCX0RFVklDRSgweDA4ZmQsIDB4MDAwMSksIC5k cml2ZXJfaW5mbyA9IEJUVVNCX0RJR0lBTlNXRVIgfSwKCXsgVVNCX0RFVklDRSgweDA4ZmQsIDB4 MDAwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAoKCS8qIENTUiBCbHVlQ29yZSBC bHVldG9vdGggU25pZmZlciAqLwoJeyBVU0JfREVWSUNFKDB4MGExMiwgMHgwMDAyKSwgLmRyaXZl cl9pbmZvID0gQlRVU0JfU05JRkZFUiB9LAoKCS8qIEZyb250bGluZSBDb21Qcm9iZSBCbHVldG9v dGggU25pZmZlciAqLwoJeyBVU0JfREVWSUNFKDB4MTZkMywgMHgwMDAyKSwgLmRyaXZlcl9pbmZv ID0gQlRVU0JfU05JRkZFUiB9LAoKCS8qIEludGVsIEJsdWV0b290aCBkZXZpY2UgKi8KCXsgVVNC X0RFVklDRSgweDgwODcsIDB4MDdkYyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lOVEVMIH0sCgoJ LyogUmVhbHRlayBCbHVldG9vdGggZGV2aWNlICovCgkvKjg3MjNBRSovCgl7IFVTQl9ERVZJQ0Uo MHgwYmRhLCAweDA3MjMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RFVklD RSgweDBiZGEsIDB4YTcyMyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LC8vQlRVU0Jf UlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MjMpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9SVEwgfSwgCQkKCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDIxZCksIC5kcml2ZXJfaW5mbyA9 IEJUVVNCX1JUTCB9LAoJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzk0KSwgLmRyaXZlcl9pbmZv ID0gQlRVU0JfUlRMIH0sCgkvKjg3MjNBVSovCQoJeyBVU0JfREVWSUNFKDB4MGJkYSwgMHgwNzI0 KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweDE3 MjQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDBiZGEsIDB4 YTcyNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JUTCB9LAoJeyBVU0JfREVWSUNFKDB4MGJkYSwg MHg4NzI1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRh LCAweDg3MmEpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDBi ZGEsIDB4ODcyYiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JUTCB9LAoJLyo4NzIzQkUqLwoJeyBV U0JfREVWSUNFKDB4MGJkYSwgMHhiNzI4KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCgl7 IFVTQl9ERVZJQ0UoMHgwYmRhLCAweGI3MjMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwK CXsgVVNCX0RFVklDRSgweDBiZGEsIDB4YjcyQiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JUTCB9 LAoJeyBVU0JfREVWSUNFKDB4MGJkYSwgMHhiMDAxKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRM IH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweGIwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9S VEwgfSwKCXsgVVNCX0RFVklDRSgweDBiZGEsIDB4YjAwMyksIC5kcml2ZXJfaW5mbyA9IEJUVVNC X1JUTCB9LAoJeyBVU0JfREVWSUNFKDB4MGJkYSwgMHhiMDA0KSwgLmRyaXZlcl9pbmZvID0gQlRV U0JfUlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweGIwMDUpLCAuZHJpdmVyX2luZm8gPSBC VFVTQl9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQxMCksIC5kcml2ZXJfaW5mbyA9 IEJUVVNCX1JUTCB9LAoJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDE2KSwgLmRyaXZlcl9pbmZv ID0gQlRVU0JfUlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDM0NTkpLCAuZHJpdmVyX2lu Zm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDA0ODksIDB4ZTA4NSksIC5kcml2ZXJf aW5mbyA9IEJUVVNCX1JUTCB9LAoJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDhiKSwgLmRyaXZl cl9pbmZvID0gQlRVU0JfUlRMIH0sCgkvKjg3MjNCVSovCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAw eGI3MjApLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDBiZGEs IDB4YjcyYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JUTCB9LAoJLyo4ODIxQUUqLyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJeyBVU0JfREVWSUNFKDB4MGJk YSwgMHgwODIxKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCQoJeyBVU0JfREVWSUNFKDB4 MGJkYSwgMHg4ODIxKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCQoJeyBVU0JfREVWSUNF KDB4MTNkMywgMHgzNDE0KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCgl7IFVTQl9ERVZJ Q0UoMHgxM2QzLCAweDM0NTgpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwgfSwKCXsgVVNCX0RF VklDRSgweDEzZDMsIDB4MzQ2MSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JUTCB9LAoJeyBVU0Jf REVWSUNFKDB4MTNkMywgMHgzNDYyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCQoJeyBV U0JfREVWSUNFKDB4MGIwNSwgMHgxN2RjKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0sCQoJ Lyo4ODIxQVUqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJ eyBVU0JfREVWSUNFKDB4MGJkYSwgMHgwODIzKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfUlRMIH0s CgkvKjg3NjFBVSovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Cgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweEE3NjEpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9SVEwg fSwKCXsgVVNCX0RFVklDRSgweDBiZGEsIDB4ODc2MCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1JU TCB9LAoJeyBVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzYxKSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf UlRMIH0sCgl7IFVTQl9ERVZJQ0UoMHgwYmRhLCAweEI3NjEpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9SVEwgfSwKCXsgVVNCX0RFVklDRSgweDBiZGEsIDB4OEE2MCksIC5kcml2ZXJfaW5mbyA9IEJU VVNCX1JUTCB9LAoKCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwp9OwoKI2RlZmluZSBCVFVT Ql9NQVhfSVNPQ19GUkFNRVMJMTAKCiNkZWZpbmUgQlRVU0JfSU5UUl9SVU5OSU5HCTAKI2RlZmlu ZSBCVFVTQl9CVUxLX1JVTk5JTkcJMQojZGVmaW5lIEJUVVNCX0lTT0NfUlVOTklORwkyCiNkZWZp bmUgQlRVU0JfU1VTUEVORElORwkzCiNkZWZpbmUgQlRVU0JfRElEX0lTT19SRVNVTUUJNAoKc3Ry dWN0IGJ0dXNiX2RhdGEgewoJc3RydWN0IGhjaV9kZXYgICAgICAgKmhkZXY7CglzdHJ1Y3QgdXNi X2RldmljZSAgICAqdWRldjsKCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwoJc3RydWN0IHVz Yl9pbnRlcmZhY2UgKmlzb2M7CgoJc3BpbmxvY2tfdCBsb2NrOwoKCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CgoJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CglzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2FrZXI7 CgoJc3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yOwoJc3RydWN0IHVzYl9hbmNob3IgaW50cl9h bmNob3I7CglzdHJ1Y3QgdXNiX2FuY2hvciBidWxrX2FuY2hvcjsKCXN0cnVjdCB1c2JfYW5jaG9y IGlzb2NfYW5jaG9yOwoJc3RydWN0IHVzYl9hbmNob3IgZGVmZXJyZWQ7CglpbnQgdHhfaW5fZmxp Z2h0OwoJc3BpbmxvY2tfdCB0eGxvY2s7CgoJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9y ICppbnRyX2VwOwoJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX3R4X2VwOwoJ c3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX3J4X2VwOwoJc3RydWN0IHVzYl9l bmRwb2ludF9kZXNjcmlwdG9yICppc29jX3R4X2VwOwoJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNj cmlwdG9yICppc29jX3J4X2VwOwoKCV9fdTggY21kcmVxX3R5cGU7CgoJdW5zaWduZWQgaW50IHNj b19udW07CglpbnQgaXNvY19hbHRzZXR0aW5nOwoJaW50IHN1c3BlbmRfY291bnQ7Cn07CgpzdGF0 aWMgaW50IGluY190eChzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSkKewoJdW5zaWduZWQgbG9uZyBm bGFnczsKCWludCBydjsKCglzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7 CglydiA9IHRlc3RfYml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CglpZiAoIXJ2 KQoJCWRhdGEtPnR4X2luX2ZsaWdodCsrOwoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+ dHhsb2NrLCBmbGFncyk7CgoJcmV0dXJuIHJ2Owp9CgpzdGF0aWMgdm9pZCBidHVzYl9pbnRyX2Nv bXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKewoJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSB1cmItPmNv bnRleHQ7CglzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsK CWludCBlcnI7CgovLwlCVF9EQkcoIiVzIHVyYiAlcCBzdGF0dXMgJWQgY291bnQgJWQiLCBoZGV2 LT5uYW1lLAovLwkJCQkJdXJiLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKCglp ZiAoIXRlc3RfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKQoJCXJldHVybjsKCglpZiAo dXJiLT5zdGF0dXMgPT0gMCkgewoJCWhkZXYtPnN0YXQuYnl0ZV9yeCArPSB1cmItPmFjdHVhbF9s ZW5ndGg7CgoJCWlmIChoY2lfcmVjdl9mcmFnbWVudChoZGV2LCBIQ0lfRVZFTlRfUEtULAoJCQkJ CQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKSA8IDApIHsK CQkJQlRfRVJSKCIlcyBjb3JydXB0ZWQgZXZlbnQgcGFja2V0IiwgaGRldi0+bmFtZSk7CgkJCWhk ZXYtPnN0YXQuZXJyX3J4Kys7CgkJfQoJfQoJLyogQXZvaWQgc3VzcGVuZCBmYWlsZWQgd2hlbiB1 c2Jfa2lsbF91cmIgKi8KCWVsc2UgaWYodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkJewoJCXJldHVy bjsKCX0KCQoJaWYgKCF0ZXN0X2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncykp CgkJcmV0dXJuOwoKCXVzYl9tYXJrX2xhc3RfYnVzeShkYXRhLT51ZGV2KTsKCXVzYl9hbmNob3Jf dXJiKHVyYiwgJmRhdGEtPmludHJfYW5jaG9yKTsKCgllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIs IEdGUF9BVE9NSUMpOwoJaWYgKGVyciA8IDApIHsKCQkvKiAtRVBFUk06IHVyYiBpcyBiZWluZyBr aWxsZWQ7CgkJICogLUVOT0RFVjogZGV2aWNlIGdvdCBkaXNjb25uZWN0ZWQgKi8KCQlpZiAoZXJy ICE9IC1FUEVSTSAmJiBlcnIgIT0gLUVOT0RFVikKCQkJQlRfRVJSKCIlcyB1cmIgJXAgZmFpbGVk IHRvIHJlc3VibWl0ICglZCkiLAoJCQkJCQloZGV2LT5uYW1lLCB1cmIsIC1lcnIpOwoJCXVzYl91 bmFuY2hvcl91cmIodXJiKTsKCX0KfQoKc3RhdGljIGludCBidHVzYl9zdWJtaXRfaW50cl91cmIo c3RydWN0IGhjaV9kZXYgKmhkZXYsIGdmcF90IG1lbV9mbGFncykKewoJc3RydWN0IGJ0dXNiX2Rh dGEgKmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CglzdHJ1Y3QgdXJiICp1cmI7Cgl1bnNp Z25lZCBjaGFyICpidWY7Cgl1bnNpZ25lZCBpbnQgcGlwZTsKCWludCBlcnIsIHNpemU7CgoJLy9C VF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CglCVF9EQkcoIiVzIixfX2Z1bmNfXyk7CglpZiAoIWRh dGEtPmludHJfZXApCgkJcmV0dXJuIC1FTk9ERVY7CgoJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBt ZW1fZmxhZ3MpOwoJaWYgKCF1cmIpCgkJcmV0dXJuIC1FTk9NRU07CgoJc2l6ZSA9IGxlMTZfdG9f Y3B1KGRhdGEtPmludHJfZXAtPndNYXhQYWNrZXRTaXplKTsKCglidWYgPSBrbWFsbG9jKHNpemUs IG1lbV9mbGFncyk7CglpZiAoIWJ1ZikgewoJCXVzYl9mcmVlX3VyYih1cmIpOwoJCXJldHVybiAt RU5PTUVNOwoJfQoKCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkYXRhLT51ZGV2LCBkYXRhLT5pbnRy X2VwLT5iRW5kcG9pbnRBZGRyZXNzKTsKCgl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgZGF0YS0+dWRl diwgcGlwZSwgYnVmLCBzaXplLAoJCQkJCQlidHVzYl9pbnRyX2NvbXBsZXRlLCBoZGV2LAoJCQkJ CQlkYXRhLT5pbnRyX2VwLT5iSW50ZXJ2YWwpOwoKCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJC X0ZSRUVfQlVGRkVSOwoKCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEtPmludHJfYW5jaG9yKTsK CgllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIG1lbV9mbGFncyk7CglpZiAoZXJyIDwgMCkgewoJ CWlmIChlcnIgIT0gLUVQRVJNICYmIGVyciAhPSAtRU5PREVWKQoJCQlCVF9FUlIoIiVzIHVyYiAl cCBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpIiwKCQkJCQkJaGRldi0+bmFtZSwgdXJiLCAtZXJyKTsK CQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Cgl9CgoJdXNiX2ZyZWVfdXJiKHVyYik7CgoJcmV0dXJu IGVycjsKfQoKc3RhdGljIHZvaWQgYnR1c2JfYnVsa19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIp CnsKCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdXJiLT5jb250ZXh0OwoJc3RydWN0IGJ0dXNiX2Rh dGEgKmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CglpbnQgZXJyOwoKLy8JQlRfREJHKCIl cyB1cmIgJXAgc3RhdHVzICVkIGNvdW50ICVkIiwgaGRldi0+bmFtZSwKLy8JCQkJCXVyYiwgdXJi LT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgoJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklO RywgJmhkZXYtPmZsYWdzKSkKCQlyZXR1cm47CgoJaWYgKHVyYi0+c3RhdHVzID09IDApIHsKCQlo ZGV2LT5zdGF0LmJ5dGVfcnggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwoKCQlpZiAoaGNpX3JlY3Zf ZnJhZ21lbnQoaGRldiwgSENJX0FDTERBVEFfUEtULAoJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZl ciwKCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKSA8IDApIHsKCQkJQlRfRVJSKCIlcyBjb3JydXB0 ZWQgQUNMIHBhY2tldCIsIGhkZXYtPm5hbWUpOwoJCQloZGV2LT5zdGF0LmVycl9yeCsrOwoJCX0K CX0KCS8qIEF2b2lkIHN1c3BlbmQgZmFpbGVkIHdoZW4gdXNiX2tpbGxfdXJiICovCgllbHNlIGlm KHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCXsKCQlyZXR1cm47Cgl9CgkKCWlmICghdGVzdF9iaXQo QlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKQoJCXJldHVybjsKCgl1c2JfYW5jaG9y X3VyYih1cmIsICZkYXRhLT5idWxrX2FuY2hvcik7Cgl1c2JfbWFya19sYXN0X2J1c3koZGF0YS0+ dWRldik7CgoJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKCWlmIChlcnIg PCAwKSB7CgkJLyogLUVQRVJNOiB1cmIgaXMgYmVpbmcga2lsbGVkOwoJCSAqIC1FTk9ERVY6IGRl dmljZSBnb3QgZGlzY29ubmVjdGVkICovCgkJaWYgKGVyciAhPSAtRVBFUk0gJiYgZXJyICE9IC1F Tk9ERVYpCgkJCUJUX0VSUigiJXMgdXJiICVwIGZhaWxlZCB0byByZXN1Ym1pdCAoJWQpIiwKCQkJ CQkJaGRldi0+bmFtZSwgdXJiLCAtZXJyKTsKCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Cgl9Cn0K CnN0YXRpYyBpbnQgYnR1c2Jfc3VibWl0X2J1bGtfdXJiKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBn ZnBfdCBtZW1fZmxhZ3MpCnsKCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZk YXRhKGhkZXYpOwoJc3RydWN0IHVyYiAqdXJiOwoJdW5zaWduZWQgY2hhciAqYnVmOwoJdW5zaWdu ZWQgaW50IHBpcGU7CglpbnQgZXJyLCBzaXplID0gSENJX01BWF9GUkFNRV9TSVpFOwoKCS8vQlRf REJHKCIlcyIsIGhkZXYtPm5hbWUpOwoJQlRfREJHKCIlcyIsX19mdW5jX18pOwoJaWYgKCFkYXRh LT5idWxrX3J4X2VwKQoJCXJldHVybiAtRU5PREVWOwoKCXVyYiA9IHVzYl9hbGxvY191cmIoMCwg bWVtX2ZsYWdzKTsKCWlmICghdXJiKQoJCXJldHVybiAtRU5PTUVNOwoKCWJ1ZiA9IGttYWxsb2Mo c2l6ZSwgbWVtX2ZsYWdzKTsKCWlmICghYnVmKSB7CgkJdXNiX2ZyZWVfdXJiKHVyYik7CgkJcmV0 dXJuIC1FTk9NRU07Cgl9CgoJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkYXRhLT51ZGV2LCBkYXRh LT5idWxrX3J4X2VwLT5iRW5kcG9pbnRBZGRyZXNzKTsKCgl1c2JfZmlsbF9idWxrX3VyYih1cmIs IGRhdGEtPnVkZXYsIHBpcGUsCgkJCQkJYnVmLCBzaXplLCBidHVzYl9idWxrX2NvbXBsZXRlLCBo ZGV2KTsKCgl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUjsKCgl1c2JfbWFy a19sYXN0X2J1c3koZGF0YS0+dWRldik7Cgl1c2JfYW5jaG9yX3VyYih1cmIsICZkYXRhLT5idWxr X2FuY2hvcik7CgoJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBtZW1fZmxhZ3MpOwoJaWYgKGVy ciA8IDApIHsKCQlpZiAoZXJyICE9IC1FUEVSTSAmJiBlcnIgIT0gLUVOT0RFVikKCQkJQlRfRVJS KCIlcyB1cmIgJXAgc3VibWlzc2lvbiBmYWlsZWQgKCVkKSIsCgkJCQkJCWhkZXYtPm5hbWUsIHVy YiwgLWVycik7CgkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwoJfQoKCXVzYl9mcmVlX3VyYih1cmIp OwoKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyB2b2lkIGJ0dXNiX2lzb2NfY29tcGxldGUoc3RydWN0 IHVyYiAqdXJiKQp7CglzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHVyYi0+Y29udGV4dDsKCXN0cnVj dCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwoJaW50IGksIGVycjsK Ci8vCUJUX0RCRygiJXMgdXJiICVwIHN0YXR1cyAlZCBjb3VudCAlZCIsIGhkZXYtPm5hbWUsCi8v CQkJCQl1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOwoKCWlmICghdGVzdF9i aXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCgkJcmV0dXJuOwoKCWlmICh1cmItPnN0YXR1 cyA9PSAwKSB7CgkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykg ewoJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7 CgkJCXVuc2lnbmVkIGludCBsZW5ndGggPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9s ZW5ndGg7CgoJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpCgkJCQljb250aW51 ZTsKCgkJCWhkZXYtPnN0YXQuYnl0ZV9yeCArPSBsZW5ndGg7CgoJCQlpZiAoaGNpX3JlY3ZfZnJh Z21lbnQoaGRldiwgSENJX1NDT0RBVEFfUEtULAoJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciAr IG9mZnNldCwKCQkJCQkJCQlsZW5ndGgpIDwgMCkgewoJCQkJQlRfRVJSKCIlcyBjb3JydXB0ZWQg U0NPIHBhY2tldCIsIGhkZXYtPm5hbWUpOwoJCQkJaGRldi0+c3RhdC5lcnJfcngrKzsKCQkJfQoJ CX0KCX0KCS8qIEF2b2lkIHN1c3BlbmQgZmFpbGVkIHdoZW4gdXNiX2tpbGxfdXJiICovCgllbHNl IGlmKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCXsKCQlyZXR1cm47Cgl9CgoJaWYgKCF0ZXN0X2Jp dChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncykpCgkJcmV0dXJuOwoKCXVzYl9hbmNo b3JfdXJiKHVyYiwgJmRhdGEtPmlzb2NfYW5jaG9yKTsKCgllcnIgPSB1c2Jfc3VibWl0X3VyYih1 cmIsIEdGUF9BVE9NSUMpOwoJaWYgKGVyciA8IDApIHsKCQkvKiAtRVBFUk06IHVyYiBpcyBiZWlu ZyBraWxsZWQ7CgkJICogLUVOT0RFVjogZGV2aWNlIGdvdCBkaXNjb25uZWN0ZWQgKi8KCQlpZiAo ZXJyICE9IC1FUEVSTSAmJiBlcnIgIT0gLUVOT0RFVikKCQkJQlRfRVJSKCIlcyB1cmIgJXAgZmFp bGVkIHRvIHJlc3VibWl0ICglZCkiLAoJCQkJCQloZGV2LT5uYW1lLCB1cmIsIC1lcnIpOwoJCXVz Yl91bmFuY2hvcl91cmIodXJiKTsKCX0KfQoKc3RhdGljIGlubGluZSB2b2lkIF9fZmlsbF9pc29j X2Rlc2NyaXB0b3Ioc3RydWN0IHVyYiAqdXJiLCBpbnQgbGVuLCBpbnQgbXR1KQp7CglpbnQgaSwg b2Zmc2V0ID0gMDsKCglCVF9EQkcoImxlbiAlZCBtdHUgJWQiLCBsZW4sIG10dSk7CgoJZm9yIChp ID0gMDsgaSA8IEJUVVNCX01BWF9JU09DX0ZSQU1FUyAmJiBsZW4gPj0gbXR1OwoJCQkJCWkrKywg b2Zmc2V0ICs9IG10dSwgbGVuIC09IG10dSkgewoJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zm c2V0ID0gb2Zmc2V0OwoJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gbXR1OwoJfQoK CWlmIChsZW4gJiYgaSA8IEJUVVNCX01BWF9JU09DX0ZSQU1FUykgewoJCXVyYi0+aXNvX2ZyYW1l X2Rlc2NbaV0ub2Zmc2V0ID0gb2Zmc2V0OwoJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3Ro ID0gbGVuOwoJCWkrKzsKCX0KCgl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gaTsKfQoKc3RhdGlj IGludCBidHVzYl9zdWJtaXRfaXNvY191cmIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGdmcF90IG1l bV9mbGFncykKewoJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRl dik7CglzdHJ1Y3QgdXJiICp1cmI7Cgl1bnNpZ25lZCBjaGFyICpidWY7Cgl1bnNpZ25lZCBpbnQg cGlwZTsKCWludCBlcnIsIHNpemU7CgoJLy9CVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CgkvL0JU X0RCRygiJXMiLF9fZnVuY19fKTsKCWlmICghZGF0YS0+aXNvY19yeF9lcCkKCQlyZXR1cm4gLUVO T0RFVjsKCgl1cmIgPSB1c2JfYWxsb2NfdXJiKEJUVVNCX01BWF9JU09DX0ZSQU1FUywgbWVtX2Zs YWdzKTsKCWlmICghdXJiKQoJCXJldHVybiAtRU5PTUVNOwoKCXNpemUgPSBsZTE2X3RvX2NwdShk YXRhLT5pc29jX3J4X2VwLT53TWF4UGFja2V0U2l6ZSkgKgoJCQkJCQlCVFVTQl9NQVhfSVNPQ19G UkFNRVM7CgoJYnVmID0ga21hbGxvYyhzaXplLCBtZW1fZmxhZ3MpOwoJaWYgKCFidWYpIHsKCQl1 c2JfZnJlZV91cmIodXJiKTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCglwaXBlID0gdXNiX3Jjdmlz b2NwaXBlKGRhdGEtPnVkZXYsIGRhdGEtPmlzb2NfcnhfZXAtPmJFbmRwb2ludEFkZHJlc3MpOwoK CXVzYl9maWxsX2ludF91cmIodXJiLCBkYXRhLT51ZGV2LCBwaXBlLCBidWYsIHNpemUsIGJ0dXNi X2lzb2NfY29tcGxldGUsCgkJCQloZGV2LCBkYXRhLT5pc29jX3J4X2VwLT5iSW50ZXJ2YWwpOwoK CXVyYi0+dHJhbnNmZXJfZmxhZ3MgID0gVVJCX0ZSRUVfQlVGRkVSIHwgVVJCX0lTT19BU0FQOwoK CV9fZmlsbF9pc29jX2Rlc2NyaXB0b3IodXJiLCBzaXplLAoJCQlsZTE2X3RvX2NwdShkYXRhLT5p c29jX3J4X2VwLT53TWF4UGFja2V0U2l6ZSkpOwoKCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEt Pmlzb2NfYW5jaG9yKTsKCgllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIG1lbV9mbGFncyk7Cglp ZiAoZXJyIDwgMCkgewoJCWlmIChlcnIgIT0gLUVQRVJNICYmIGVyciAhPSAtRU5PREVWKQoJCQlC VF9FUlIoIiVzIHVyYiAlcCBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpIiwKCQkJCQkJaGRldi0+bmFt ZSwgdXJiLCAtZXJyKTsKCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Cgl9CgoJdXNiX2ZyZWVfdXJi KHVyYik7CgoJcmV0dXJuIGVycjsKfQoKc3RhdGljIHZvaWQgYnR1c2JfdHhfY29tcGxldGUoc3Ry dWN0IHVyYiAqdXJiKQp7CglzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwoJc3Ry dWN0IGhjaV9kZXYgKmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7CglzdHJ1Y3Qg YnR1c2JfZGF0YSAqZGF0YSA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKCgkvL0JUX0RCRygiJXMi LF9fZnVuY19fKTsKCS8vQlRfREJHKCIlcyB1cmIgJXAgc3RhdHVzICVkIGNvdW50ICVkIiwgaGRl di0+bmFtZSwKCS8vCQkJCXVyYiwgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgoJ aWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKCQlnb3RvIGRvbmU7CgoJ aWYgKCF1cmItPnN0YXR1cykKCQloZGV2LT5zdGF0LmJ5dGVfdHggKz0gdXJiLT50cmFuc2Zlcl9i dWZmZXJfbGVuZ3RoOwoJZWxzZQoJCWhkZXYtPnN0YXQuZXJyX3R4Kys7Cgpkb25lOgoJc3Bpbl9s b2NrKCZkYXRhLT50eGxvY2spOwoJZGF0YS0+dHhfaW5fZmxpZ2h0LS07CglzcGluX3VubG9jaygm ZGF0YS0+dHhsb2NrKTsKCglrZnJlZSh1cmItPnNldHVwX3BhY2tldCk7CgoJa2ZyZWVfc2tiKHNr Yik7Cn0KCnN0YXRpYyB2b2lkIGJ0dXNiX2lzb2NfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJi KQp7CglzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwoJc3RydWN0IGhjaV9kZXYg KmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7CgoJQlRfREJHKCIlcyB1cmIgJXAg c3RhdHVzICVkIGNvdW50ICVkIiwgaGRldi0+bmFtZSwKCQkJCQl1cmIsIHVyYi0+c3RhdHVzLCB1 cmItPmFjdHVhbF9sZW5ndGgpOwoKCWlmICghdGVzdF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5m bGFncykpCgkJZ290byBkb25lOwoKCWlmICghdXJiLT5zdGF0dXMpCgkJaGRldi0+c3RhdC5ieXRl X3R4ICs9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKCWVsc2UKCQloZGV2LT5zdGF0LmVy cl90eCsrOwoKZG9uZToKCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKCglrZnJlZV9za2Ioc2ti KTsKfQoKc3RhdGljIGludCBidHVzYl9vcGVuKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQp7CglzdHJ1 Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKCWludCBlcnI7CgoJ Ly9CVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CglCVF9EQkcoIiAlcyBzdGFydCA6aGRldi0+Zmxh Z3MgPSAweCVseCIsX19mdW5jX18saGRldi0+ZmxhZ3MpOwoKCWVyciA9IHVzYl9hdXRvcG1fZ2V0 X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKCWlmIChlcnIgPCAwKQoJCXJldHVybiBlcnI7CgoJZGF0 YS0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CgoJaWYgKHRlc3RfYW5kX3NldF9iaXQo SENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCgkJZ290byBkb25lOwoKCUJUX0RCRygiICVzIHRl c3RfYW5kX3NldCA6aGRldi0+ZmxhZ3MgPSAweCV4IFxuIixfX2Z1bmNfXywgKGludCloZGV2LT5m bGFncyk7CgoJaWYgKHRlc3RfYW5kX3NldF9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ ZmxhZ3MpKQoJCWdvdG8gZG9uZTsKCgllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwg R0ZQX0tFUk5FTCk7CglpZiAoZXJyIDwgMCkKCQlnb3RvIGZhaWxlZDsKCgllcnIgPSBidHVzYl9z dWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CglpZiAoZXJyIDwgMCkgewoJCXVzYl9r aWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKCQlnb3RvIGZhaWxlZDsKCX0K CglzZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKCWJ0dXNiX3N1Ym1p dF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKCmRvbmU6CglCVF9EQkcoIiAlcyBkb25lIDpo ZGV2LT5mbGFncyA9IDB4JXggXG4iLF9fZnVuY19fLCAoaW50KWhkZXYtPmZsYWdzKTsKCXVzYl9h dXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKCXJldHVybiAwOwoKZmFpbGVkOgoJQlRf REJHKCJmYWlsZWQgJXMiLF9fZnVuY19fKTsKCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcs ICZkYXRhLT5mbGFncyk7CgljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7Cgl1 c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CglyZXR1cm4gZXJyOwp9CgpzdGF0 aWMgdm9pZCBidHVzYl9zdG9wX3RyYWZmaWMoc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEpCnsKCXVz Yl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKCXVzYl9raWxsX2FuY2hv cmVkX3VyYnMoJmRhdGEtPmJ1bGtfYW5jaG9yKTsKCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRh dGEtPmlzb2NfYW5jaG9yKTsKfQoKc3RhdGljIGludCBidHVzYl9jbG9zZShzdHJ1Y3QgaGNpX2Rl diAqaGRldikKewoJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRl dik7CglpbnQgZXJyOwoKCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKCglpZiAoIXRlc3RfYW5k X2NsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKCQlyZXR1cm4gMDsKCgljYW5j ZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPndha2Vy KTsKCgljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwoJY2xlYXJf Yml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKCWNsZWFyX2JpdChCVFVTQl9J TlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CgoJYnR1c2Jfc3RvcF90cmFmZmljKGRhdGEpOwoJ ZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwoJaWYgKGVyciA8IDAp CgkJZ290byBmYWlsZWQ7CgoJZGF0YS0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7Cgl1 c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CgpmYWlsZWQ6Cgl1c2Jfc2N1dHRs ZV9hbmNob3JlZF91cmJzKCZkYXRhLT5kZWZlcnJlZCk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGlu dCBidHVzYl9mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKewoJc3RydWN0IGJ0dXNiX2RhdGEg KmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CgoJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUp OwoKCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPnR4X2FuY2hvcik7CgoJcmV0dXJuIDA7 Cn0KCnN0YXRpYyBpbnQgYnR1c2Jfc2VuZF9mcmFtZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKLy9zdGF0aWMgaW50IGJ0dXNiX3NlbmRfZnJhbWUoc3RydWN0IHNr X2J1ZmYgKnNrYikKewovLwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IChzdHJ1Y3QgaGNpX2RldiAq KSBza2ItPmRldjsKCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZkYXRhKGhk ZXYpOwoJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CglzdHJ1Y3QgdXJiICp1cmI7Cgl1bnNp Z25lZCBpbnQgcGlwZTsKCWludCBlcnI7Cgl1MTYgKm9wY29kZTsKCgkvL0JUX0RCRygiJXMiLCBo ZGV2LT5uYW1lKTsKCS8vQlRfREJHKCIlcyBoZGV2LT5mbGFncz0weCV4IixfX2Z1bmNfXyxoZGV2 LT5mbGFncyk7CgoJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKCQly ZXR1cm4gLUVCVVNZOwoKCXNrYi0+ZGV2ID0gKHZvaWQgKikgaGRldjsKCgkvL0JUX0RCRygiJXMg YnRfY2Ioc2tiKS0+cGt0X3R5cGU9JWQgICIsX19mdW5jX18sYnRfY2Ioc2tiKS0+cGt0X3R5cGUp OwoKCXN3aXRjaCAoYnRfY2Ioc2tiKS0+cGt0X3R5cGUpIHsKCWNhc2UgSENJX0NPTU1BTkRfUEtU OgoJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CgkJaWYgKCF1cmIpCgkJCXJl dHVybiAtRU5PTUVNOwoKCQlkciA9IGttYWxsb2Moc2l6ZW9mKCpkciksIEdGUF9BVE9NSUMpOwoJ CWlmICghZHIpIHsKCQkJdXNiX2ZyZWVfdXJiKHVyYik7CgkJCXJldHVybiAtRU5PTUVNOwoJCX0K CgkJZHItPmJSZXF1ZXN0VHlwZSA9IGRhdGEtPmNtZHJlcV90eXBlOwoJCWRyLT5iUmVxdWVzdCAg ICAgPSAwOwoJCWRyLT53SW5kZXggICAgICAgPSAwOwoJCWRyLT53VmFsdWUgICAgICAgPSAwOwoJ CWRyLT53TGVuZ3RoICAgICAgPSBfX2NwdV90b19sZTE2KHNrYi0+bGVuKTsKCgkJcGlwZSA9IHVz Yl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAweDAwKTsKCgkJb3Bjb2RlID0gKHUxNiopKHNrYi0+ ZGF0YSk7CgkvLwlCVF9EQkcoImRyLT53TGVuZ3RoID0lZCxvcGNvZGU9MHglMDR4Iixkci0+d0xl bmd0aCwqb3Bjb2RlKTsKCQl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRhdGEtPnVkZXYsIHBp cGUsICh2b2lkICopIGRyLAoJCQkJc2tiLT5kYXRhLCBza2ItPmxlbiwgYnR1c2JfdHhfY29tcGxl dGUsIHNrYik7CgoJCWhkZXYtPnN0YXQuY21kX3R4Kys7CgkJYnJlYWs7CgoJY2FzZSBIQ0lfQUNM REFUQV9QS1Q6CgkJaWYgKCFkYXRhLT5idWxrX3R4X2VwKQoJCQlyZXR1cm4gLUVOT0RFVjsKCgkJ dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKCQlpZiAoIXVyYikKCQkJcmV0dXJu IC1FTk9NRU07CgoJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGF0YS0+dWRldiwKCQkJCQlkYXRh LT5idWxrX3R4X2VwLT5iRW5kcG9pbnRBZGRyZXNzKTsKCgkJdXNiX2ZpbGxfYnVsa191cmIodXJi LCBkYXRhLT51ZGV2LCBwaXBlLAoJCQkJc2tiLT5kYXRhLCBza2ItPmxlbiwgYnR1c2JfdHhfY29t cGxldGUsIHNrYik7CgoJCWhkZXYtPnN0YXQuYWNsX3R4Kys7CgkJYnJlYWs7CgoJY2FzZSBIQ0lf U0NPREFUQV9QS1Q6CgkJaWYgKCFkYXRhLT5pc29jX3R4X2VwIHx8IGhjaV9jb25uX251bShoZGV2 LCBTQ09fTElOSykgPCAxKQoJCQlyZXR1cm4gLUVOT0RFVjsKCgkJdXJiID0gdXNiX2FsbG9jX3Vy YihCVFVTQl9NQVhfSVNPQ19GUkFNRVMsIEdGUF9BVE9NSUMpOwoJCWlmICghdXJiKQoJCQlyZXR1 cm4gLUVOT01FTTsKCgkJcGlwZSA9IHVzYl9zbmRpc29jcGlwZShkYXRhLT51ZGV2LAoJCQkJCWRh dGEtPmlzb2NfdHhfZXAtPmJFbmRwb2ludEFkZHJlc3MpOwoKCQl1c2JfZmlsbF9pbnRfdXJiKHVy YiwgZGF0YS0+dWRldiwgcGlwZSwKCQkJCXNrYi0+ZGF0YSwgc2tiLT5sZW4sIGJ0dXNiX2lzb2Nf dHhfY29tcGxldGUsCgkJCQlza2IsIGRhdGEtPmlzb2NfdHhfZXAtPmJJbnRlcnZhbCk7CgoJCXVy Yi0+dHJhbnNmZXJfZmxhZ3MgID0gVVJCX0lTT19BU0FQOwoKCQlfX2ZpbGxfaXNvY19kZXNjcmlw dG9yKHVyYiwgc2tiLT5sZW4sCgkJCQlsZTE2X3RvX2NwdShkYXRhLT5pc29jX3R4X2VwLT53TWF4 UGFja2V0U2l6ZSkpOwoKCQloZGV2LT5zdGF0LnNjb190eCsrOwoJCWdvdG8gc2tpcF93YWtpbmc7 CgoJZGVmYXVsdDoKCQlyZXR1cm4gLUVJTFNFUTsKCX0KCgllcnIgPSBpbmNfdHgoZGF0YSk7Cglp ZiAoZXJyKSB7CgkJdXNiX2FuY2hvcl91cmIodXJiLCAmZGF0YS0+ZGVmZXJyZWQpOwoJCXNjaGVk dWxlX3dvcmsoJmRhdGEtPndha2VyKTsKCQllcnIgPSAwOwoJCWdvdG8gZG9uZTsKCX0KCnNraXBf d2FraW5nOgoJdXNiX2FuY2hvcl91cmIodXJiLCAmZGF0YS0+dHhfYW5jaG9yKTsKCgllcnIgPSB1 c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwoJaWYgKGVyciA8IDApIHsKCQlpZiAoZXJy ICE9IC1FUEVSTSAmJiBlcnIgIT0gLUVOT0RFVikKCQkJQlRfRVJSKCIlcyB1cmIgJXAgc3VibWlz c2lvbiBmYWlsZWQgKCVkKSIsCgkJCQkJCWhkZXYtPm5hbWUsIHVyYiwgLWVycik7CgkJa2ZyZWUo dXJiLT5zZXR1cF9wYWNrZXQpOwoJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKCX0gZWxzZSB7CgkJ dXNiX21hcmtfbGFzdF9idXN5KGRhdGEtPnVkZXYpOwoJfQoKZG9uZToKCXVzYl9mcmVlX3VyYih1 cmIpOwoJcmV0dXJuIGVycjsKfQoKc3RhdGljIHZvaWQgYnR1c2Jfbm90aWZ5KHN0cnVjdCBoY2lf ZGV2ICpoZGV2LCB1bnNpZ25lZCBpbnQgZXZ0KQp7CglzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9 IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKCglCVF9EQkcoIiVzIGV2dCAlZCIsIGhkZXYtPm5hbWUs IGV2dCk7CgoJaWYgKGhjaV9jb25uX251bShoZGV2LCBTQ09fTElOSykgIT0gZGF0YS0+c2NvX251 bSkgewoJCWRhdGEtPnNjb19udW0gPSBoY2lfY29ubl9udW0oaGRldiwgU0NPX0xJTkspOwoJCXNj aGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOwoJfQp9CgpzdGF0aWMgaW5saW5lIGludCBfX3NldF9p c29jX2ludGVyZmFjZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IGFsdHNldHRpbmcpCnsKCXN0 cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwoJc3RydWN0IHVz Yl9pbnRlcmZhY2UgKmludGYgPSBkYXRhLT5pc29jOwoJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNj cmlwdG9yICplcF9kZXNjOwoJaW50IGksIGVycjsKCglpZiAoIWRhdGEtPmlzb2MpCgkJcmV0dXJu IC1FTk9ERVY7CgoJZXJyID0gdXNiX3NldF9pbnRlcmZhY2UoZGF0YS0+dWRldiwgMSwgYWx0c2V0 dGluZyk7CglpZiAoZXJyIDwgMCkgewoJCUJUX0VSUigiJXMgc2V0dGluZyBpbnRlcmZhY2UgZmFp bGVkICglZCkiLCBoZGV2LT5uYW1lLCAtZXJyKTsKCQlyZXR1cm4gZXJyOwoJfQoKCWRhdGEtPmlz b2NfYWx0c2V0dGluZyA9IGFsdHNldHRpbmc7CgoJZGF0YS0+aXNvY190eF9lcCA9IE5VTEw7Cglk YXRhLT5pc29jX3J4X2VwID0gTlVMTDsKCglmb3IgKGkgPSAwOyBpIDwgaW50Zi0+Y3VyX2FsdHNl dHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CgkJZXBfZGVzYyA9ICZpbnRmLT5jdXJf YWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKCgkJaWYgKCFkYXRhLT5pc29jX3R4X2VwICYm IHVzYl9lbmRwb2ludF9pc19pc29jX291dChlcF9kZXNjKSkgewoJCQlkYXRhLT5pc29jX3R4X2Vw ID0gZXBfZGVzYzsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoIWRhdGEtPmlzb2NfcnhfZXAgJiYg dXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oZXBfZGVzYykpIHsKCQkJZGF0YS0+aXNvY19yeF9lcCA9 IGVwX2Rlc2M7CgkJCWNvbnRpbnVlOwoJCX0KCX0KCglpZiAoIWRhdGEtPmlzb2NfdHhfZXAgfHwg IWRhdGEtPmlzb2NfcnhfZXApIHsKCQlCVF9FUlIoIiVzIGludmFsaWQgU0NPIGRlc2NyaXB0b3Jz IiwgaGRldi0+bmFtZSk7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9CgoJcmV0dXJuIDA7Cn0KCnN0YXRp YyB2b2lkIGJ0dXNiX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQp7CglzdHJ1Y3QgYnR1 c2JfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnR1c2JfZGF0YSwgd29y ayk7CglzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGEtPmhkZXY7CglpbnQgbmV3X2FsdHM7Cglp bnQgZXJyOwoKCWlmIChkYXRhLT5zY29fbnVtID4gMCkgewoJCWlmICghdGVzdF9iaXQoQlRVU0Jf RElEX0lTT19SRVNVTUUsICZkYXRhLT5mbGFncykpIHsKCQkJZXJyID0gdXNiX2F1dG9wbV9nZXRf aW50ZXJmYWNlKGRhdGEtPmlzb2MgPyBkYXRhLT5pc29jIDogZGF0YS0+aW50Zik7CgkJCWlmIChl cnIgPCAwKSB7CgkJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3Mp OwoJCQkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aXNvY19hbmNob3IpOwoJCQkJcmV0 dXJuOwoJCQl9CgoJCQlzZXRfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3Mp OwoJCX0KCgkJaWYgKGhkZXYtPnZvaWNlX3NldHRpbmcgJiAweDAwMjApIHsKCQkJc3RhdGljIGNv bnN0IGludCBhbHRzWzNdID0geyAyLCA0LCA1IH07CgkJCW5ld19hbHRzID0gYWx0c1tkYXRhLT5z Y29fbnVtIC0gMV07CgkJfSBlbHNlIHsKCQkJbmV3X2FsdHMgPSBkYXRhLT5zY29fbnVtOwoJCX0K CgkJaWYgKGRhdGEtPmlzb2NfYWx0c2V0dGluZyAhPSBuZXdfYWx0cykgewoJCQljbGVhcl9iaXQo QlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwoJCQl1c2Jfa2lsbF9hbmNob3JlZF91 cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CgoJCQlpZiAoX19zZXRfaXNvY19pbnRlcmZhY2UoaGRl diwgbmV3X2FsdHMpIDwgMCkKCQkJCXJldHVybjsKCQl9CgoJCWlmICghdGVzdF9hbmRfc2V0X2Jp dChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKCQkJaWYgKGJ0dXNiX3N1Ym1p dF9pc29jX3VyYihoZGV2LCBHRlBfS0VSTkVMKSA8IDApCgkJCQljbGVhcl9iaXQoQlRVU0JfSVNP Q19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwoJCQllbHNlCgkJCQlidHVzYl9zdWJtaXRfaXNvY191 cmIoaGRldiwgR0ZQX0tFUk5FTCk7CgkJfQoJfSBlbHNlIHsKCQljbGVhcl9iaXQoQlRVU0JfSVNP Q19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwoJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEt Pmlzb2NfYW5jaG9yKTsKCgkJX19zZXRfaXNvY19pbnRlcmZhY2UoaGRldiwgMCk7CgkJaWYgKHRl c3RfYW5kX2NsZWFyX2JpdChCVFVTQl9ESURfSVNPX1JFU1VNRSwgJmRhdGEtPmZsYWdzKSkKCQkJ dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MgPyBkYXRhLT5pc29jIDogZGF0YS0+ aW50Zik7Cgl9Cn0KCnN0YXRpYyB2b2lkIGJ0dXNiX3dha2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykKewoJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3Ry dWN0IGJ0dXNiX2RhdGEsIHdha2VyKTsKCWludCBlcnI7CgoJZXJyID0gdXNiX2F1dG9wbV9nZXRf aW50ZXJmYWNlKGRhdGEtPmludGYpOwoJaWYgKGVyciA8IDApCgkJcmV0dXJuOwoKCXVzYl9hdXRv cG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKfQoKc3RhdGljIGludCBidHVzYl9zZXR1cF9i Y205MjAzNShzdHJ1Y3QgaGNpX2RldiAqaGRldikKewoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCXU4 IHZhbCA9IDB4MDA7CgoJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwoKCXNrYiA9IF9faGNpX2Nt ZF9zeW5jKGhkZXYsIDB4ZmMzYiwgMSwgJnZhbCwgSENJX0lOSVRfVElNRU9VVCk7CglpZiAoSVNf RVJSKHNrYikpCgkJQlRfRVJSKCJCQ005MjAzNSBjb21tYW5kIGZhaWxlZCAoJWxkKSIsIC1QVFJf RVJSKHNrYikpOwoJZWxzZQoJCWtmcmVlX3NrYihza2IpOwoKCXJldHVybiAwOwp9CgpzdHJ1Y3Qg aW50ZWxfdmVyc2lvbiB7Cgl1OCBzdGF0dXM7Cgl1OCBod19wbGF0Zm9ybTsKCXU4IGh3X3Zhcmlh bnQ7Cgl1OCBod19yZXZpc2lvbjsKCXU4IGZ3X3ZhcmlhbnQ7Cgl1OCBmd19yZXZpc2lvbjsKCXU4 IGZ3X2J1aWxkX251bTsKCXU4IGZ3X2J1aWxkX3d3OwoJdTggZndfYnVpbGRfeXk7Cgl1OCBmd19w YXRjaF9udW07Cn0gX19wYWNrZWQ7CgpzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICpidHVz Yl9zZXR1cF9pbnRlbF9nZXRfZncoc3RydWN0IGhjaV9kZXYgKmhkZXYsCgkJCQkJCXN0cnVjdCBp bnRlbF92ZXJzaW9uICp2ZXIpCnsKCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CgljaGFyIGZ3 bmFtZVs2NF07CglpbnQgcmV0OwoKCXNucHJpbnRmKGZ3bmFtZSwgc2l6ZW9mKGZ3bmFtZSksCgkJ ICJpbnRlbC9pYnQtaHctJXguJXguJXgtZnctJXguJXguJXguJXguJXguYnNlcSIsCgkJIHZlci0+ aHdfcGxhdGZvcm0sIHZlci0+aHdfdmFyaWFudCwgdmVyLT5od19yZXZpc2lvbiwKCQkgdmVyLT5m d192YXJpYW50LCAgdmVyLT5md19yZXZpc2lvbiwgdmVyLT5md19idWlsZF9udW0sCgkJIHZlci0+ ZndfYnVpbGRfd3csIHZlci0+ZndfYnVpbGRfeXkpOwoKCXJldCA9IHJlcXVlc3RfZmlybXdhcmUo JmZ3LCBmd25hbWUsICZoZGV2LT5kZXYpOwoJaWYgKHJldCA8IDApIHsKCQlpZiAocmV0ID09IC1F SU5WQUwpIHsKCQkJQlRfRVJSKCIlcyBJbnRlbCBmaXJtd2FyZSBmaWxlIHJlcXVlc3QgZmFpbGVk ICglZCkiLAoJCQkgICAgICAgaGRldi0+bmFtZSwgcmV0KTsKCQkJcmV0dXJuIE5VTEw7CgkJfQoK CQlCVF9FUlIoIiVzIGZhaWxlZCB0byBvcGVuIEludGVsIGZpcm13YXJlIGZpbGU6ICVzKCVkKSIs CgkJICAgICAgIGhkZXYtPm5hbWUsIGZ3bmFtZSwgcmV0KTsKCgkJLyogSWYgdGhlIGNvcnJlY3Qg ZmlybXdhcmUgcGF0Y2ggZmlsZSBpcyBub3QgZm91bmQsIHVzZSB0aGUKCQkgKiBkZWZhdWx0IGZp cm13YXJlIHBhdGNoIGZpbGUgaW5zdGVhZAoJCSAqLwoJCXNucHJpbnRmKGZ3bmFtZSwgc2l6ZW9m KGZ3bmFtZSksICJpbnRlbC9pYnQtaHctJXguJXguYnNlcSIsCgkJCSB2ZXItPmh3X3BsYXRmb3Jt LCB2ZXItPmh3X3ZhcmlhbnQpOwoJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZnduYW1lLCAm aGRldi0+ZGV2KSA8IDApIHsKCQkJQlRfRVJSKCIlcyBmYWlsZWQgdG8gb3BlbiBkZWZhdWx0IElu dGVsIGZ3IGZpbGU6ICVzIiwKCQkJICAgICAgIGhkZXYtPm5hbWUsIGZ3bmFtZSk7CgkJCXJldHVy biBOVUxMOwoJCX0KCX0KCglCVF9JTkZPKCIlczogSW50ZWwgQmx1ZXRvb3RoIGZpcm13YXJlIGZp bGU6ICVzIiwgaGRldi0+bmFtZSwgZnduYW1lKTsKCglyZXR1cm4gZnc7Cn0KCnN0YXRpYyBpbnQg YnR1c2Jfc2V0dXBfaW50ZWxfcGF0Y2hpbmcoc3RydWN0IGhjaV9kZXYgKmhkZXYsCgkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAoJCQkJICAgICAgY29uc3QgdTggKipmd19wdHIs IGludCAqZGlzYWJsZV9wYXRjaCkKewoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCXN0cnVjdCBoY2lf Y29tbWFuZF9oZHIgKmNtZDsKCWNvbnN0IHU4ICpjbWRfcGFyYW07CglzdHJ1Y3QgaGNpX2V2ZW50 X2hkciAqZXZ0ID0gTlVMTDsKCWNvbnN0IHU4ICpldnRfcGFyYW0gPSBOVUxMOwoJaW50IHJlbWFp biA9IGZ3LT5zaXplIC0gKCpmd19wdHIgLSBmdy0+ZGF0YSk7CgoJLyogVGhlIGZpcnN0IGJ5dGUg aW5kaWNhdGVzIHRoZSB0eXBlcyBvZiB0aGUgcGF0Y2ggY29tbWFuZCBvciBldmVudC4KCSAqIDB4 MDEgbWVhbnMgSENJIGNvbW1hbmQgYW5kIDB4MDIgaXMgSENJIGV2ZW50LiBJZiB0aGUgZmlyc3Qg Ynl0ZXMKCSAqIGluIHRoZSBjdXJyZW50IGZpcm13YXJlIGJ1ZmZlciBkb2Vzbid0IHN0YXJ0IHdp dGggMHgwMSBvcgoJICogdGhlIHNpemUgb2YgcmVtYWluIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4g SENJIGNvbW1hbmQgaGVhZGVyLAoJICogdGhlIGZpcm13YXJlIGZpbGUgaXMgY29ycnVwdGVkIGFu ZCBpdCBzaG91bGQgc3RvcCB0aGUgcGF0Y2hpbmcKCSAqIHByb2Nlc3MuCgkgKi8KCWlmIChyZW1h aW4gPiBIQ0lfQ09NTUFORF9IRFJfU0laRSAmJiAqZndfcHRyWzBdICE9IDB4MDEpIHsKCQlCVF9F UlIoIiVzIEludGVsIGZ3IGNvcnJ1cHRlZDogaW52YWxpZCBjbWQgcmVhZCIsIGhkZXYtPm5hbWUp OwoJCXJldHVybiAtRUlOVkFMOwoJfQoJKCpmd19wdHIpKys7CglyZW1haW4tLTsKCgljbWQgPSAo c3RydWN0IGhjaV9jb21tYW5kX2hkciAqKSgqZndfcHRyKTsKCSpmd19wdHIgKz0gc2l6ZW9mKCpj bWQpOwoJcmVtYWluIC09IHNpemVvZigqY21kKTsKCgkvKiBFbnN1cmUgdGhhdCB0aGUgcmVtYWlu IGZpcm13YXJlIGRhdGEgaXMgbG9uZyBlbm91Z2ggdGhhbiB0aGUgbGVuZ3RoCgkgKiBvZiBjb21t YW5kIHBhcmFtZXRlci4gSWYgbm90LCB0aGUgZmlybXdhcmUgZmlsZSBpcyBjb3JydXB0ZWQuCgkg Ki8KCWlmIChyZW1haW4gPCBjbWQtPnBsZW4pIHsKCQlCVF9FUlIoIiVzIEludGVsIGZ3IGNvcnJ1 cHRlZDogaW52YWxpZCBjbWQgbGVuIiwgaGRldi0+bmFtZSk7CgkJcmV0dXJuIC1FRkFVTFQ7Cgl9 CgoJLyogSWYgdGhlcmUgaXMgYSBjb21tYW5kIHRoYXQgbG9hZHMgYSBwYXRjaCBpbiB0aGUgZmly bXdhcmUKCSAqIGZpbGUsIHRoZW4gZW5hYmxlIHRoZSBwYXRjaCB1cG9uIHN1Y2Nlc3MsIG90aGVy d2lzZSBqdXN0CgkgKiBkaXNhYmxlIHRoZSBtYW51ZmFjdHVyZXIgbW9kZSwgZm9yIGV4YW1wbGUg cGF0Y2ggYWN0aXZhdGlvbgoJICogaXMgbm90IHJlcXVpcmVkIHdoZW4gdGhlIGRlZmF1bHQgZmly bXdhcmUgcGF0Y2ggZmlsZSBpcyB1c2VkCgkgKiBiZWNhdXNlIHRoZXJlIGFyZSBubyBwYXRjaCBk YXRhIHRvIGxvYWQuCgkgKi8KCWlmICgqZGlzYWJsZV9wYXRjaCAmJiBsZTE2X3RvX2NwdShjbWQt Pm9wY29kZSkgPT0gMHhmYzhlKQoJCSpkaXNhYmxlX3BhdGNoID0gMDsKCgljbWRfcGFyYW0gPSAq ZndfcHRyOwoJKmZ3X3B0ciArPSBjbWQtPnBsZW47CglyZW1haW4gLT0gY21kLT5wbGVuOwoKCS8q IFRoaXMgcmVhZHMgdGhlIGV4cGVjdGVkIGV2ZW50cyB3aGVuIHRoZSBhYm92ZSBjb21tYW5kIGlz IHNlbnQgdG8gdGhlCgkgKiBkZXZpY2UuIFNvbWUgdmVuZG9yIGNvbW1hbmRzIGV4cGVjdHMgbW9y ZSB0aGFuIG9uZSBldmVudHMsIGZvcgoJICogZXhhbXBsZSBjb21tYW5kIHN0YXR1cyBldmVudCBm b2xsb3dlZCBieSB2ZW5kb3Igc3BlY2lmaWMgZXZlbnQuCgkgKiBGb3IgdGhpcyBjYXNlLCBpdCBv bmx5IGtlZXBzIHRoZSBsYXN0IGV4cGVjdGVkIGV2ZW50LiBzbyB0aGUgY29tbWFuZAoJICogY2Fu IGJlIHNlbnQgd2l0aCBfX2hjaV9jbWRfc3luY19ldigpIHdoaWNoIHJldHVybnMgdGhlIHNrX2J1 ZmYgb2YKCSAqIGxhc3QgZXhwZWN0ZWQgZXZlbnQuCgkgKi8KCXdoaWxlIChyZW1haW4gPiBIQ0lf RVZFTlRfSERSX1NJWkUgJiYgKmZ3X3B0clswXSA9PSAweDAyKSB7CgkJKCpmd19wdHIpKys7CgkJ cmVtYWluLS07CgoJCWV2dCA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKSgqZndfcHRyKTsKCQkq ZndfcHRyICs9IHNpemVvZigqZXZ0KTsKCQlyZW1haW4gLT0gc2l6ZW9mKCpldnQpOwoKCQlpZiAo cmVtYWluIDwgZXZ0LT5wbGVuKSB7CgkJCUJUX0VSUigiJXMgSW50ZWwgZncgY29ycnVwdGVkOiBp bnZhbGlkIGV2dCBsZW4iLAoJCQkgICAgICAgaGRldi0+bmFtZSk7CgkJCXJldHVybiAtRUZBVUxU OwoJCX0KCgkJZXZ0X3BhcmFtID0gKmZ3X3B0cjsKCQkqZndfcHRyICs9IGV2dC0+cGxlbjsKCQly ZW1haW4gLT0gZXZ0LT5wbGVuOwoJfQoKCS8qIEV2ZXJ5IEhDSSBjb21tYW5kcyBpbiB0aGUgZmly bXdhcmUgZmlsZSBoYXMgaXRzIGNvcnJlc3BvbmQgZXZlbnQuCgkgKiBJZiBldmVudCBpcyBub3Qg Zm91bmQgb3IgcmVtYWluIGlzIHNtYWxsZXIgdGhhbiB6ZXJvLCB0aGUgZmlybXdhcmUKCSAqIGZp bGUgaXMgY29ycnVwdGVkLgoJICovCglpZiAoIWV2dCB8fCAhZXZ0X3BhcmFtIHx8IHJlbWFpbiA8 IDApIHsKCQlCVF9FUlIoIiVzIEludGVsIGZ3IGNvcnJ1cHRlZDogaW52YWxpZCBldnQgcmVhZCIs IGhkZXYtPm5hbWUpOwoJCXJldHVybiAtRUZBVUxUOwoJfQoKCXNrYiA9IF9faGNpX2NtZF9zeW5j X2V2KGhkZXYsIGxlMTZfdG9fY3B1KGNtZC0+b3Bjb2RlKSwgY21kLT5wbGVuLAoJCQkJY21kX3Bh cmFtLCBldnQtPmV2dCwgSENJX0lOSVRfVElNRU9VVCk7CglpZiAoSVNfRVJSKHNrYikpIHsKCQlC VF9FUlIoIiVzIHNlbmRpbmcgSW50ZWwgcGF0Y2ggY29tbWFuZCAoMHglNC40eCkgZmFpbGVkICgl bGQpIiwKCQkgICAgICAgaGRldi0+bmFtZSwgY21kLT5vcGNvZGUsIFBUUl9FUlIoc2tiKSk7CgkJ cmV0dXJuIFBUUl9FUlIoc2tiKTsKCX0KCgkvKiBJdCBlbnN1cmVzIHRoYXQgdGhlIHJldHVybmVk IGV2ZW50IG1hdGNoZXMgdGhlIGV2ZW50IGRhdGEgcmVhZCBmcm9tCgkgKiB0aGUgZmlybXdhcmUg ZmlsZS4gQXQgZmlzdCwgaXQgY2hlY2tzIHRoZSBsZW5ndGggYW5kIHRoZW4KCSAqIHRoZSBjb250 ZW50cyBvZiB0aGUgZXZlbnQuCgkgKi8KCWlmIChza2ItPmxlbiAhPSBldnQtPnBsZW4pIHsKCQlC VF9FUlIoIiVzIG1pc21hdGNoIGV2ZW50IGxlbmd0aCAob3Bjb2RlIDB4JTQuNHgpIiwgaGRldi0+ bmFtZSwKCQkgICAgICAgbGUxNl90b19jcHUoY21kLT5vcGNvZGUpKTsKCQlrZnJlZV9za2Ioc2ti KTsKCQlyZXR1cm4gLUVGQVVMVDsKCX0KCglpZiAobWVtY21wKHNrYi0+ZGF0YSwgZXZ0X3BhcmFt LCBldnQtPnBsZW4pKSB7CgkJQlRfRVJSKCIlcyBtaXNtYXRjaCBldmVudCBwYXJhbWV0ZXIgKG9w Y29kZSAweCU0LjR4KSIsCgkJICAgICAgIGhkZXYtPm5hbWUsIGxlMTZfdG9fY3B1KGNtZC0+b3Bj b2RlKSk7CgkJa2ZyZWVfc2tiKHNrYik7CgkJcmV0dXJuIC1FRkFVTFQ7Cgl9CglrZnJlZV9za2Io c2tiKTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBidHVzYl9zZXR1cF9pbnRlbChzdHJ1Y3Qg aGNpX2RldiAqaGRldikKewoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCWNvbnN0IHN0cnVjdCBmaXJt d2FyZSAqZnc7Cgljb25zdCB1OCAqZndfcHRyOwoJaW50IGRpc2FibGVfcGF0Y2g7CglzdHJ1Y3Qg aW50ZWxfdmVyc2lvbiAqdmVyOwoKCWNvbnN0IHU4IG1mZ19lbmFibGVbXSA9IHsgMHgwMSwgMHgw MCB9OwoJY29uc3QgdTggbWZnX2Rpc2FibGVbXSA9IHsgMHgwMCwgMHgwMCB9OwoJY29uc3QgdTgg bWZnX3Jlc2V0X2RlYWN0aXZhdGVbXSA9IHsgMHgwMCwgMHgwMSB9OwoJY29uc3QgdTggbWZnX3Jl c2V0X2FjdGl2YXRlW10gPSB7IDB4MDAsIDB4MDIgfTsKCglCVF9EQkcoIiVzIiwgaGRldi0+bmFt ZSk7CgoJLyogVGhlIGNvbnRyb2xsZXIgaGFzIGEgYnVnIHdpdGggdGhlIGZpcnN0IEhDSSBjb21t YW5kIHNlbnQgdG8gaXQKCSAqIHJldHVybmluZyBudW1iZXIgb2YgY29tcGxldGVkIGNvbW1hbmRz IGFzIHplcm8uIFRoaXMgd291bGQgc3RhbGwgdGhlCgkgKiBjb21tYW5kIHByb2Nlc3NpbmcgaW4g dGhlIEJsdWV0b290aCBjb3JlLgoJICoKCSAqIEFzIGEgd29ya2Fyb3VuZCwgc2VuZCBIQ0kgUmVz ZXQgY29tbWFuZCBmaXJzdCB3aGljaCB3aWxsIHJlc2V0IHRoZQoJICogbnVtYmVyIG9mIGNvbXBs ZXRlZCBjb21tYW5kcyBhbmQgYWxsb3cgbm9ybWFsIGNvbW1hbmQgcHJvY2Vzc2luZwoJICogZnJv bSBub3cgb24uCgkgKi8KCXNrYiA9IF9faGNpX2NtZF9zeW5jKGhkZXYsIEhDSV9PUF9SRVNFVCwg MCwgTlVMTCwgSENJX0lOSVRfVElNRU9VVCk7CglpZiAoSVNfRVJSKHNrYikpIHsKCQlCVF9FUlIo IiVzIHNlbmRpbmcgaW5pdGlhbCBIQ0kgcmVzZXQgY29tbWFuZCBmYWlsZWQgKCVsZCkiLAoJCSAg ICAgICBoZGV2LT5uYW1lLCBQVFJfRVJSKHNrYikpOwoJCXJldHVybiBQVFJfRVJSKHNrYik7Cgl9 CglrZnJlZV9za2Ioc2tiKTsKCgkvKiBSZWFkIEludGVsIHNwZWNpZmljIGNvbnRyb2xsZXIgdmVy c2lvbiBmaXJzdCB0byBhbGxvdyBzZWxlY3Rpb24gb2YKCSAqIHdoaWNoIGZpcm13YXJlIGZpbGUg dG8gbG9hZC4KCSAqCgkgKiBUaGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gYXJlIGhhcmR3YXJlIHZh cmlhbnQgYW5kIHJldmlzaW9uIHBsdXMKCSAqIGZpcm13YXJlIHZhcmlhbnQsIHJldmlzaW9uIGFu ZCBidWlsZCBudW1iZXIuCgkgKi8KCXNrYiA9IF9faGNpX2NtZF9zeW5jKGhkZXYsIDB4ZmMwNSwg MCwgTlVMTCwgSENJX0lOSVRfVElNRU9VVCk7CglpZiAoSVNfRVJSKHNrYikpIHsKCQlCVF9FUlIo IiVzIHJlYWRpbmcgSW50ZWwgZncgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCAoJWxkKSIsCgkJICAg ICAgIGhkZXYtPm5hbWUsIFBUUl9FUlIoc2tiKSk7CgkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKCX0K CglpZiAoc2tiLT5sZW4gIT0gc2l6ZW9mKCp2ZXIpKSB7CgkJQlRfRVJSKCIlcyBJbnRlbCB2ZXJz aW9uIGV2ZW50IGxlbmd0aCBtaXNtYXRjaCIsIGhkZXYtPm5hbWUpOwoJCWtmcmVlX3NrYihza2Ip OwoJCXJldHVybiAtRUlPOwoJfQoKCXZlciA9IChzdHJ1Y3QgaW50ZWxfdmVyc2lvbiAqKXNrYi0+ ZGF0YTsKCWlmICh2ZXItPnN0YXR1cykgewoJCUJUX0VSUigiJXMgSW50ZWwgZncgdmVyc2lvbiBl dmVudCBmYWlsZWQgKCUwMngpIiwgaGRldi0+bmFtZSwKCQkgICAgICAgdmVyLT5zdGF0dXMpOwoJ CWtmcmVlX3NrYihza2IpOwoJCXJldHVybiAtYnRfdG9fZXJybm8odmVyLT5zdGF0dXMpOwoJfQoK CUJUX0lORk8oIiVzOiByZWFkIEludGVsIHZlcnNpb246ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAy eCUwMnglMDJ4JTAyeCIsCgkJaGRldi0+bmFtZSwgdmVyLT5od19wbGF0Zm9ybSwgdmVyLT5od192 YXJpYW50LAoJCXZlci0+aHdfcmV2aXNpb24sIHZlci0+ZndfdmFyaWFudCwgIHZlci0+ZndfcmV2 aXNpb24sCgkJdmVyLT5md19idWlsZF9udW0sIHZlci0+ZndfYnVpbGRfd3csIHZlci0+ZndfYnVp bGRfeXksCgkJdmVyLT5md19wYXRjaF9udW0pOwoKCS8qIGZ3X3BhdGNoX251bSBpbmRpY2F0ZXMg dGhlIHZlcnNpb24gb2YgcGF0Y2ggdGhlIGRldmljZSBjdXJyZW50bHkKCSAqIGhhdmUuIElmIHRo ZXJlIGlzIG5vIHBhdGNoIGRhdGEgaW4gdGhlIGRldmljZSwgaXQgaXMgYWx3YXlzIDB4MDAuCgkg KiBTbywgaWYgaXQgaXMgb3RoZXIgdGhhbiAweDAwLCBubyBuZWVkIHRvIHBhdGNoIHRoZSBkZWl2 Y2UgYWdhaW4uCgkgKi8KCWlmICh2ZXItPmZ3X3BhdGNoX251bSkgewoJCUJUX0lORk8oIiVzOiBJ bnRlbCBkZXZpY2UgaXMgYWxyZWFkeSBwYXRjaGVkLiBwYXRjaCBudW06ICUwMngiLAoJCQloZGV2 LT5uYW1lLCB2ZXItPmZ3X3BhdGNoX251bSk7CgkJa2ZyZWVfc2tiKHNrYik7CgkJcmV0dXJuIDA7 Cgl9CgoJLyogT3BlbnMgdGhlIGZpcm13YXJlIHBhdGNoIGZpbGUgYmFzZWQgb24gdGhlIGZpcm13 YXJlIHZlcnNpb24gcmVhZAoJICogZnJvbSB0aGUgY29udHJvbGxlci4gSWYgaXQgZmFpbHMgdG8g b3BlbiB0aGUgbWF0Y2hpbmcgZmlybXdhcmUKCSAqIHBhdGNoIGZpbGUsIGl0IHRyaWVzIHRvIG9w ZW4gdGhlIGRlZmF1bHQgZmlybXdhcmUgcGF0Y2ggZmlsZS4KCSAqIElmIG5vIHBhdGNoIGZpbGUg aXMgZm91bmQsIGFsbG93IHRoZSBkZXZpY2UgdG8gb3BlcmF0ZSB3aXRob3V0CgkgKiBhIHBhdGNo LgoJICovCglmdyA9IGJ0dXNiX3NldHVwX2ludGVsX2dldF9mdyhoZGV2LCB2ZXIpOwoJaWYgKCFm dykgewoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybiAwOwoJfQoJZndfcHRyID0gZnctPmRhdGE7 CgoJLyogVGhpcyBJbnRlbCBzcGVjaWZpYyBjb21tYW5kIGVuYWJsZXMgdGhlIG1hbnVmYWN0dXJl ciBtb2RlIG9mIHRoZQoJICogY29udHJvbGxlci4KCSAqCgkgKiBPbmx5IHdoaWxlIHRoaXMgbW9k ZSBpcyBlbmFibGVkLCB0aGUgZHJpdmVyIGNhbiBkb3dubG9hZCB0aGUKCSAqIGZpcm13YXJlIHBh dGNoIGRhdGEgYW5kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KCSAqLwoJc2tiID0gX19oY2lf Y21kX3N5bmMoaGRldiwgMHhmYzExLCAyLCBtZmdfZW5hYmxlLCBIQ0lfSU5JVF9USU1FT1VUKTsK CWlmIChJU19FUlIoc2tiKSkgewoJCUJUX0VSUigiJXMgZW50ZXJpbmcgSW50ZWwgbWFudWZhY3R1 cmVyIG1vZGUgZmFpbGVkICglbGQpIiwKCQkgICAgICAgaGRldi0+bmFtZSwgUFRSX0VSUihza2Ip KTsKCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKCQlyZXR1cm4gUFRSX0VSUihza2IpOwoJfQoKCWlm IChza2ItPmRhdGFbMF0pIHsKCQl1OCBldnRfc3RhdHVzID0gc2tiLT5kYXRhWzBdOwoJCUJUX0VS UigiJXMgZW5hYmxlIEludGVsIG1hbnVmYWN0dXJlciBtb2RlIGV2ZW50IGZhaWxlZCAoJTAyeCki LAoJCSAgICAgICBoZGV2LT5uYW1lLCBldnRfc3RhdHVzKTsKCQlrZnJlZV9za2Ioc2tiKTsKCQly ZWxlYXNlX2Zpcm13YXJlKGZ3KTsKCQlyZXR1cm4gLWJ0X3RvX2Vycm5vKGV2dF9zdGF0dXMpOwoJ fQoJa2ZyZWVfc2tiKHNrYik7CgoJZGlzYWJsZV9wYXRjaCA9IDE7CgoJLyogVGhlIGZpcm13YXJl IGRhdGEgZmlsZSBjb25zaXN0cyBvZiBsaXN0IG9mIEludGVsIHNwZWNpZmljIEhDSQoJICogY29t bWFuZHMgYW5kIGl0cyBleHBlY3RlZCBldmVudHMuIFRoZSBmaXJzdCBieXRlIGluZGljYXRlcyB0 aGUKCSAqIHR5cGUgb2YgdGhlIG1lc3NhZ2UsIGVpdGhlciBIQ0kgY29tbWFuZCBvciBIQ0kgZXZl bnQuCgkgKgoJICogSXQgcmVhZHMgdGhlIGNvbW1hbmQgYW5kIGl0cyBleHBlY3RlZCBldmVudCBm cm9tIHRoZSBmaXJtd2FyZSBmaWxlLAoJICogYW5kIHNlbmQgdG8gdGhlIGNvbnRyb2xsZXIuIE9u Y2UgX19oY2lfY21kX3N5bmNfZXYoKSByZXR1cm5zLAoJICogdGhlIHJldHVybmVkIGV2ZW50IGlz IGNvbXBhcmVkIHdpdGggdGhlIGV2ZW50IHJlYWQgZnJvbSB0aGUgZmlybXdhcmUKCSAqIGZpbGUg YW5kIGl0IHdpbGwgY29udGludWUgdW50aWwgYWxsIHRoZSBtZXNzYWdlcyBhcmUgZG93bmxvYWRl ZCB0bwoJICogdGhlIGNvbnRyb2xsZXIuCgkgKgoJICogT25jZSB0aGUgZmlybXdhcmUgcGF0Y2hp bmcgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKCSAqIHRoZSBtYW51ZmFjdHVyZXIgbW9kZSBp cyBkaXNhYmxlZCB3aXRoIHJlc2V0IGFuZCBhY3RpdmF0aW5nIHRoZQoJICogZG93bmxvYWRlZCBw YXRjaC4KCSAqCgkgKiBJZiB0aGUgZmlybXdhcmUgcGF0Y2hpbmcgZmFpbHMsIHRoZSBtYW51ZmFj dHVyZXIgbW9kZSBpcwoJICogZGlzYWJsZWQgd2l0aCByZXNldCBhbmQgZGVhY3RpdmF0aW5nIHRo ZSBwYXRjaC4KCSAqCgkgKiBJZiB0aGUgZGVmYXVsdCBwYXRjaCBmaWxlIGlzIHVzZWQsIG5vIHJl c2V0IGlzIGRvbmUgd2hlbiBkaXNhYmxpbmcKCSAqIHRoZSBtYW51ZmFjdHVyZXIuCgkgKi8KCXdo aWxlIChmdy0+c2l6ZSA+IGZ3X3B0ciAtIGZ3LT5kYXRhKSB7CgkJaW50IHJldDsKCgkJcmV0ID0g YnR1c2Jfc2V0dXBfaW50ZWxfcGF0Y2hpbmcoaGRldiwgZncsICZmd19wdHIsCgkJCQkJCSAmZGlz YWJsZV9wYXRjaCk7CgkJaWYgKHJldCA8IDApCgkJCWdvdG8gZXhpdF9tZmdfZGVhY3RpdmF0ZTsK CX0KCglyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKCglpZiAoZGlzYWJsZV9wYXRjaCkKCQlnb3RvIGV4 aXRfbWZnX2Rpc2FibGU7CgoJLyogUGF0Y2hpbmcgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQg ZGlzYWJsZSB0aGUgbWFudWZhY3R1cmVyIG1vZGUKCSAqIHdpdGggcmVzZXQgYW5kIGFjdGl2YXRl IHRoZSBkb3dubG9hZGVkIGZpcm13YXJlIHBhdGNoZXMuCgkgKi8KCXNrYiA9IF9faGNpX2NtZF9z eW5jKGhkZXYsIDB4ZmMxMSwgc2l6ZW9mKG1mZ19yZXNldF9hY3RpdmF0ZSksCgkJCSAgICAgbWZn X3Jlc2V0X2FjdGl2YXRlLCBIQ0lfSU5JVF9USU1FT1VUKTsKCWlmIChJU19FUlIoc2tiKSkgewoJ CUJUX0VSUigiJXMgZXhpdGluZyBJbnRlbCBtYW51ZmFjdHVyZXIgbW9kZSBmYWlsZWQgKCVsZCki LAoJCSAgICAgICBoZGV2LT5uYW1lLCBQVFJfRVJSKHNrYikpOwoJCXJldHVybiBQVFJfRVJSKHNr Yik7Cgl9CglrZnJlZV9za2Ioc2tiKTsKCglCVF9JTkZPKCIlczogSW50ZWwgQmx1ZXRvb3RoIGZp cm13YXJlIHBhdGNoIGNvbXBsZXRlZCBhbmQgYWN0aXZhdGVkIiwKCQloZGV2LT5uYW1lKTsKCgly ZXR1cm4gMDsKCmV4aXRfbWZnX2Rpc2FibGU6CgkvKiBEaXNhYmxlIHRoZSBtYW51ZmFjdHVyZXIg bW9kZSB3aXRob3V0IHJlc2V0ICovCglza2IgPSBfX2hjaV9jbWRfc3luYyhoZGV2LCAweGZjMTEs IHNpemVvZihtZmdfZGlzYWJsZSksIG1mZ19kaXNhYmxlLAoJCQkgICAgIEhDSV9JTklUX1RJTUVP VVQpOwoJaWYgKElTX0VSUihza2IpKSB7CgkJQlRfRVJSKCIlcyBleGl0aW5nIEludGVsIG1hbnVm YWN0dXJlciBtb2RlIGZhaWxlZCAoJWxkKSIsCgkJICAgICAgIGhkZXYtPm5hbWUsIFBUUl9FUlIo c2tiKSk7CgkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKCX0KCWtmcmVlX3NrYihza2IpOwoKCUJUX0lO Rk8oIiVzOiBJbnRlbCBCbHVldG9vdGggZmlybXdhcmUgcGF0Y2ggY29tcGxldGVkIiwgaGRldi0+ bmFtZSk7CglyZXR1cm4gMDsKCmV4aXRfbWZnX2RlYWN0aXZhdGU6CglyZWxlYXNlX2Zpcm13YXJl KGZ3KTsKCgkvKiBQYXRjaGluZyBmYWlsZWQuIERpc2FibGUgdGhlIG1hbnVmYWN0dXJlciBtb2Rl IHdpdGggcmVzZXQgYW5kCgkgKiBkZWFjdGl2YXRlIHRoZSBkb3dubG9hZGVkIGZpcm13YXJlIHBh dGNoZXMuCgkgKi8KCXNrYiA9IF9faGNpX2NtZF9zeW5jKGhkZXYsIDB4ZmMxMSwgc2l6ZW9mKG1m Z19yZXNldF9kZWFjdGl2YXRlKSwKCQkJICAgICBtZmdfcmVzZXRfZGVhY3RpdmF0ZSwgSENJX0lO SVRfVElNRU9VVCk7CglpZiAoSVNfRVJSKHNrYikpIHsKCQlCVF9FUlIoIiVzIGV4aXRpbmcgSW50 ZWwgbWFudWZhY3R1cmVyIG1vZGUgZmFpbGVkICglbGQpIiwKCQkgICAgICAgaGRldi0+bmFtZSwg UFRSX0VSUihza2IpKTsKCQlyZXR1cm4gUFRSX0VSUihza2IpOwoJfQoJa2ZyZWVfc2tiKHNrYik7 CgoJQlRfSU5GTygiJXM6IEludGVsIEJsdWV0b290aCBmaXJtd2FyZSBwYXRjaCBjb21wbGV0ZWQg YW5kIGRlYWN0aXZhdGVkIiwKCQloZGV2LT5uYW1lKTsKCglyZXR1cm4gMDsKfQoKLyogc2lnbmF0 dXJlOiBSZWFsdGVrICovCmNvbnN0IHVpbnQ4X3QgUlRLX0VQQVRDSF9TSUdOQVRVUkVbOF0gPSB7 MHg1MiwweDY1LDB4NjEsMHg2QywweDc0LDB4NjUsMHg2MywweDY4fTsKLyogRXh0ZW5zaW9uIFNl Y3Rpb24gSUdOQVRVUkUqLwpjb25zdCB1aW50OF90IEVYVEVOU0lPTl9TRUNUSU9OX1NJR05BVFVS RVs0XSA9IHsweDUxLDB4MDQsMHhGRCwweDc3fTsKLyogRXh0ZW5zaW9uIFNlY3Rpb24gSUdOQVRV UkUqLwpjb25zdCB1aW50OF90IFJUS19DT05GSUdfU0lHTkFUVVJFWzZdID0gezB4NTUsMHhhYiww eDIzLDB4ODcsMHgwNCwweDAwfTsKY29uc3QgdWludDhfdCBDT05GSUdfUzBfQU5UVEVOQVs0XSA9 IHsweEUzLDB4MDEsMHgwMSwweDA0fTsKY29uc3QgdWludDhfdCBDT05GSUdfUzFfQU5UVEVOQVs0 XSA9IHsweEUzLDB4MDEsMHgwMSwweDAwfTsKCiNkZWZpbmUgVVNFX1MwX0FOVFRFTkEgCTEKI2Rl ZmluZSBST01fTE1QXzg3MjNBCTB4MTIwMAojZGVmaW5lIFJPTV9MTVBfODcyM0IgICAgMHg4NzIz CiNkZWZpbmUgUk9NX0xNUF84ODIxQSAgICAwWDg4MjEKI2RlZmluZSBST01fTE1QXzg3NjFBICAg IDBYODc2MQp1aW50MTZfdCBwcm9qZWN0X2lkW10gPSB7CglST01fTE1QXzg3MjNBICwKCVJPTV9M TVBfODcyM0IsCglST01fTE1QXzg4MjFBLAoJUk9NX0xNUF84NzYxQQp9OwpzdHJ1Y3QgcnRsX3Jv bV92ZXJzaW9uX2V2dCB7Cgl1aW50OF90IHN0YXR1czsKCXVpbnQ4X3QgdmVyc2lvbjsKfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7CgpzdHJ1Y3QgcnRrX2VwYXRjaF9lbnRyeSB7Cgl1aW50MTZf dCBjaGlwX2lkOwoJdWludDE2X3QgcGF0Y2hfbGVuZ3RoOwoJdWludDMyX3Qgc3RhcnRfb2Zmc2V0 OwoJdWludDMyX3QgY29leF92ZXJzaW9uOwoJdWludDMyX3Qgc3ZuX3ZlcnNpb247Cgl1aW50MzJf dCBmd192ZXJzaW9uOwp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKCnN0cnVjdCBydGtfZXBh dGNoIHsKCXVpbnQ4X3Qgc2lnbmF0dXJlWzhdOwoJdWludDMyX3QgZndfdmVyc2lvbjsKCXVpbnQx Nl90IG51bWJlcl9vZl90b3RhbF9wYXRjaDsKCXN0cnVjdCBydGtfZXBhdGNoX2VudHJ5IGVudHJ5 WzBdOwp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKCgpzdGF0aWMgaW50IGJ0dXNiX3NldHVw X3J0bF9nZXRfb2xkZncoIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsdWludDhfdCAqKmJ1Ziwg aW50ICpidWZfbGVuKQp7CgkJCglCVF9JTkZPKCIlcyIsIF9fZnVuY19fKTsJCgkvKmNoZWNrIGZp bGUgbGVuZ3RoKi8KCWlmKGZ3LT5zaXplPDgpewoJCUJUX0VSUigiJXM6IGZpbGUgc2l6ZSAlZCBl cnJvciIsIF9fZnVuY19fLCAoaW50KWZ3LT5zaXplKTsKCQlyZXR1cm4gLTE7Cgl9CgkvKmNoZWNr IHNpZ25hdHVyZSovCglpZiAoIW1lbWNtcCggZnctPmRhdGEsIFJUS19FUEFUQ0hfU0lHTkFUVVJF LCA4KSkgewoJCQlCVF9FUlIoIiVzOiA4NzIzYSBjaGVjayBzaWduYXR1cmUgZXJyb3IiLCBfX2Z1 bmNfXyk7CgkJCXJldHVybiAtMTsKCX0gCglpZiAoISgqYnVmID0ga3phbGxvYyhmdy0+c2l6ZSwg R0ZQX0tFUk5FTCkpKSB7CgkJQlRfRVJSKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbSBmb3Ig ZncmY29uZmlnIiwgX19mdW5jX18pOwoJCXJldHVybiAtMTsKCX0gCgoJbWVtY3B5KCpidWYsIGZ3 LT5kYXRhLCBmdy0+c2l6ZSk7CQoJKmJ1Zl9sZW4gPSAgZnctPnNpemU7CglyZXR1cm4gMDsKfQoK c3RhdGljIHN0cnVjdCBydGtfZXBhdGNoX2VudHJ5ICpnZXRfZndfcGF0Y2hfZW50cnkoc3RydWN0 IHJ0a19lcGF0Y2ggKnBhdGNoX2luZm8sIHVpbnQxNl90IHJvbV92ZXIpCnsKCWludCBwYXRjaF9u dW0gPSBwYXRjaF9pbmZvLT5udW1iZXJfb2ZfdG90YWxfcGF0Y2g7Cgl1aW50OF90ICpwYXRjaF9i dWYgPSAodWludDhfdCAqKXBhdGNoX2luZm87CglzdHJ1Y3QgcnRrX2VwYXRjaF9lbnRyeSAqcF9l bnRyeSA9IE5VTEw7CglpbnQgY29leF9kYXRlOwoJaW50IGNvZXhfdmVyOwoJaW50IGk7CgoJZm9y IChpID0gMDsgaSA8IHBhdGNoX251bTsgaSsrKSB7CgkJaWYgKCoodWludDE2X3QgKikocGF0Y2hf YnVmICsgMTQgKyAyKmkpID09IHJvbV92ZXIgKyAxKSB7CgkJCXBfZW50cnkgPSBremFsbG9jKHNp emVvZigqcF9lbnRyeSksIEdGUF9LRVJORUwpOwoJCQlpZiAoIXBfZW50cnkpIHsKCQkJCUJUX0VS UigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW0gZm9yIHBhdGNoIGVudHJ5IiwgX19mdW5jX18p OwoJCQkJcmV0dXJuIE5VTEw7CgkJCX0KCQkJcF9lbnRyeS0+Y2hpcF9pZCA9IHJvbV92ZXIgKyAx OwoJCQlwX2VudHJ5LT5wYXRjaF9sZW5ndGggPSAqKHVpbnQxNl90KikocGF0Y2hfYnVmICsgMTQg KyAyKnBhdGNoX251bSArIDIqaSk7CgkJCXBfZW50cnktPnN0YXJ0X29mZnNldCA9ICoodWludDMy X3QqKShwYXRjaF9idWYgKyAxNCArIDQqcGF0Y2hfbnVtICsgNCppKTsKCQkJcF9lbnRyeS0+Y29l eF92ZXJzaW9uID0gKih1aW50MzJfdCopKHBhdGNoX2J1ZiArIHBfZW50cnktPnN0YXJ0X29mZnNl dCArIHBfZW50cnktPnBhdGNoX2xlbmd0aCAtIDEyKTsKCQkJcF9lbnRyeS0+c3ZuX3ZlcnNpb24g PSAqKHVpbnQzMl90KikocGF0Y2hfYnVmICsgcF9lbnRyeS0+c3RhcnRfb2Zmc2V0ICsgcF9lbnRy eS0+cGF0Y2hfbGVuZ3RoIC0gOCk7CgkJCXBfZW50cnktPmZ3X3ZlcnNpb24gPSAqKHVpbnQzMl90 KikocGF0Y2hfYnVmICsgcF9lbnRyeS0+c3RhcnRfb2Zmc2V0ICsgcF9lbnRyeS0+cGF0Y2hfbGVu Z3RoIC0gNCk7CgoJCQljb2V4X2RhdGUgPSAoKHBfZW50cnktPmNvZXhfdmVyc2lvbiA+PiAxNikg JiAweDdmZikgKyAoKHBfZW50cnktPmNvZXhfdmVyc2lvbiA+PiAyNykgKiAxMDAwMCk7CgkJCWNv ZXhfdmVyID0gcF9lbnRyeS0+Y29leF92ZXJzaW9uICYgMHhmZmZmOwoKCQkJQlRfSU5GTygiJXM6 IGNoaXAgaWQgJWQsIHBhdGNoIGxlbmd0aCAweCUwNHgsIHBhdGNoIG9mZnNldCAweCUwOHgsXG4g IgoJCQkJCSJjb2V4IHZlcnNpb24gMjAlMDZkLTB4JTA0eCwgc3ZuIHZlcnNpb24gMHglMDh4LCBm dyB2ZXJzaW9uIDB4JTA4eCIsCgkJCQkJX19mdW5jX18sIHBfZW50cnktPmNoaXBfaWQsIHBfZW50 cnktPnBhdGNoX2xlbmd0aCwgcF9lbnRyeS0+c3RhcnRfb2Zmc2V0LAoJCQkJCWNvZXhfZGF0ZSwg Y29leF92ZXIsIHBfZW50cnktPnN2bl92ZXJzaW9uLCBwX2VudHJ5LT5md192ZXJzaW9uKTsKCQkJ YnJlYWs7CgkJfQoJfQoKCXJldHVybiBwX2VudHJ5Owp9CgpzdGF0aWMgaW50IGJ0dXNiX3NldHVw X3J0bF9nZXRfbmV3ZncgKCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKCWNvbnN0IHN0cnVjdCBmaXJt d2FyZSAqZncsdWludDhfdCAqKmJ1ZixpbnQgKmJ1Zl9sZW4sdWludDE2X3QgbG1wX3ZlcnNpb24p CnsKCglzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoJdWludDE2X3Qgcm9tX3ZlcjsKCWNvbnN0IHVpbnQ4 X3QgKnRlbXA7Cgl1aW50OF90IG9wY29kZSxsZW47Cgl1aW50OF90IGRhdGE7CQoJc3RydWN0IHJ0 a19lcGF0Y2ggKnBhdGNoX2luZm8gPSBOVUxMOwoJc3RydWN0IHJ0a19lcGF0Y2hfZW50cnkgKnBh dGNoX2VudHJ5ID0gTlVMTDsKCXN0cnVjdCBydGxfcm9tX3ZlcnNpb25fZXZ0ICpyb21fZXZ0OwoK CUJUX0RCRygiJXMgc3RhcnQiLCBfX2Z1bmNfXyk7CgkvKnJlYWQgcm9tIHZlcnNpb24qLwoJc2ti ID0gX19oY2lfY21kX3N5bmMoaGRldiwgMHhmYzZkLCAwLCBOVUxMLCBIQ0lfSU5JVF9USU1FT1VU KTsKCWlmIChJU19FUlIoc2tiKSkgewoJCXJvbV92ZXIgPSAwOwkKCX0KCWVsc2UKCXsKCQlpZiAo c2tiLT5sZW4gIT0gc2l6ZW9mKCpyb21fZXZ0KSkgewoJCQlCVF9FUlIoIlJlYWx0ZWsgcm9tIHZl cnNpb24gZXZlbnQgbGVuZ3RoIG1pc21hdGNoIik7CgkJCWtmcmVlX3NrYihza2IpOwoJCQlyZXR1 cm4gLUVJTzsKCQl9CgoJCXJvbV9ldnQgPSAoc3RydWN0IHJ0bF9yb21fdmVyc2lvbl9ldnQgKilz a2ItPmRhdGE7CgkJaWYgKHJvbV9ldnQtPnN0YXR1cykgewoJCQlCVF9FUlIoIlJUTCBmdyB2ZXJz aW9uIGV2ZW50IGZhaWxlZCAoJTAyeCkiLHJvbV9ldnQtPnN0YXR1cyk7CgkJCWtmcmVlX3NrYihz a2IpOwoJCQlyb21fZXZ0LT52ZXJzaW9uID0gMDsKCQl9CgkJcm9tX3ZlciA9IHJvbV9ldnQtPnZl cnNpb247CgkJa2ZyZWVfc2tiKHNrYik7CQoJfQkKCUJUX0lORk8oInJlYWQgcm9tIHZlcnNpb246 ICVkIiwgcm9tX3Zlcik7CQoJCgkvKmNoZWNrIGZpbGUgbGVuZ3RoKi8KCWlmKGZ3LT5zaXplPDIw KXsKCQlCVF9FUlIoIiVzOiBmaWxlIHNpemUgJWQgZXJyb3IiLCBfX2Z1bmNfXywgKGludClmdy0+ c2l6ZSk7CgkJcmV0dXJuIC0xOwoJfQkKCS8qY2hlY2sgc2lnbmF0dXJlKi8KCXRlbXAgPSBmdy0+ ZGF0YTsKCWlmIChtZW1jbXAodGVtcCwgUlRLX0VQQVRDSF9TSUdOQVRVUkUsIDgpKSB7CgkJQlRf RVJSKCIlczogQ2hlY2sgc2lnbmF0dXJlIGVycm9yIiwgX19mdW5jX18pOwoJCXJldHVybiAtMTsK CX0KCS8qY2hlY2sgRXh0ZW5zaW9uIFNlY3Rpb24qLwoJaWYgKG1lbWNtcCh0ZW1wICsgZnctPnNp emUtNCwgRVhURU5TSU9OX1NFQ1RJT05fU0lHTkFUVVJFLCA0KSkgewoJCQlCVF9FUlIoIiVzOiBG YWlsZWQgdG8gY2hlY2sgZXh0ZW5zaW9uIHNlY3Rpb24gc2lnbmF0dXJlIiwgX19mdW5jX18pOwoJ CQlyZXR1cm4gLTE7Cgl9IAoJCgl0ZW1wID0gZnctPmRhdGEgK2Z3LT5zaXplIC0gNTsKCXdoaWxl ICgqdGVtcCAhPSAweEZGKSB7CgkJb3Bjb2RlID0gKnRlbXA7CgkJbGVuID0gKih0ZW1wLTEpOwoJ CWRhdGEgPSoodGVtcC0yKTsKCQlpZiAoKnRlbXAgPT0gMHgwMCkgewkJCgkJCWlmIChsbXBfdmVy c2lvbiAhPSBwcm9qZWN0X2lkW2RhdGFdKSB7CgkJCQlCVF9FUlIoIiVzOiBEZWZhdWx0IGxtcF92 ZXJzaW9uIDB4JTA0eCwgcHJvamVjdF9pZCAweCUwNHggIgoJCQkJCQkiLT4gbm90IG1hdGNoIiwg X19mdW5jX18sIGxtcF92ZXJzaW9uLCBwcm9qZWN0X2lkW2RhdGFdKTsKCQkJCXJldHVybiAtMTsK CQkJfQoJCQlCVF9EQkcoIiVzOiBvcGNvZGUgPSAweCV4LCBsZW5ndGggPSAweCV4LCBkYXRhID0g MHgleCIsIF9fZnVuY19fLAoJCQkJCW9wY29kZSwgbGVuLGRhdGEpOwoJCX0KCQl0ZW1wIC09IGxl bisgMjsKCX0KCQkKCS8qIEdldCByaWdodCBlcGF0Y2ggZW50cnkgKi8KCXBhdGNoX2luZm8gPSAo c3RydWN0IHJ0a19lcGF0Y2gqKWZ3LT5kYXRhOwoJQlRfSU5GTygiJXM6ZndfdmVyc2lvbiAweCV4 LCBudW1iZXJfb2ZfdG90YWxfcGF0Y2ggJWQiLCBfX2Z1bmNfXywKCQkJcGF0Y2hfaW5mby0+Zndf dmVyc2lvbixwYXRjaF9pbmZvLT5udW1iZXJfb2ZfdG90YWxfcGF0Y2gpOwoJCglwYXRjaF9lbnRy eSA9IGdldF9md19wYXRjaF9lbnRyeShwYXRjaF9pbmZvLCByb21fdmVyKTsKCWlmIChwYXRjaF9l bnRyeSA9PSBOVUxMKSB7CgkJYnRfZXJyKCIlczogRmFpbGVkIHRvIGdldCBmdyBwYXRjaCBlbnRy eSIsIF9fZnVuY19fKTsKCQlyZXR1cm4gLTE7Cgl9CgkvKnJlcGxhY2UgdmVyc2lvbiBpbmZvcm1h dGlvbnMqLwoJaWYgKCEoKmJ1ZiA9IGt6YWxsb2MocGF0Y2hfZW50cnktPnBhdGNoX2xlbmd0aCsx MCwgR0ZQX0tFUk5FTCkpKSB7CgkJQlRfRVJSKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbSBm b3IgZncmY29uZmlnIiwgX19mdW5jX18pOwoJCXJldHVybiAtMTsKCX0gCgl0ZW1wID0gZnctPmRh dGErcGF0Y2hfZW50cnktPnN0YXJ0X29mZnNldDsKCW1lbWNweSgqYnVmLCB0ZW1wLCBwYXRjaF9l bnRyeS0+cGF0Y2hfbGVuZ3RoKTsKCW1lbWNweSggKmJ1ZitwYXRjaF9lbnRyeS0+cGF0Y2hfbGVu Z3RoLTQsICZwYXRjaF9pbmZvLT5md192ZXJzaW9uLCA0KTsKCSpidWZfbGVuID0gcGF0Y2hfZW50 cnktPnBhdGNoX2xlbmd0aDsKCgkvKmZvciA4NzIzQix1c2UgUzAgQW50dGVuYSBmb3IgYmx1ZXRv b3RoKi8KCWlmKGxtcF92ZXJzaW9uPT1ST01fTE1QXzg3MjNCKQoJewkKCQltZW1jcHkoKmJ1Zitw YXRjaF9lbnRyeS0+cGF0Y2hfbGVuZ3RoLFJUS19DT05GSUdfU0lHTkFUVVJFLDYpOwoJCWlmIChV U0VfUzBfQU5UVEVOQSkKCQkJbWVtY3B5KCpidWYrcGF0Y2hfZW50cnktPnBhdGNoX2xlbmd0aCs2 LENPTkZJR19TMF9BTlRURU5BLDQpOwoJCWVsc2UKCQkJbWVtY3B5KCpidWYrcGF0Y2hfZW50cnkt PnBhdGNoX2xlbmd0aCs2LENPTkZJR19TMV9BTlRURU5BLDQpOwoJCSpidWZfbGVuICs9IDEwOwoJ CUJUX0RCRygiVVNFX1MwX0FOVFRFTkEiKTsKCX0KCQoJQlRfREJHKCIlcyBlbmQiLCBfX2Z1bmNf Xyk7CglyZXR1cm4gMDsKfQoKI2RlZmluZSBQQVRDSF9TRUdfTUFYCTI1Mgogc3RydWN0IGRvd25s b2FkX2NwewoJdWludDhfdCBpbmRleDsKCXVpbnQ4X3QgZGF0YVtQQVRDSF9TRUdfTUFYXTsKfSBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CgpzdHJ1Y3QgZG93bmxvYWRfcnB7Cgl1aW50OF90IHN0 YXR1czsKCXVpbnQ4X3QgaW5kZXg7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwoKc3RhdGlj IGludCBidHVzYl9zZXR1cF9ydGxfcGF0Y2hpbmcoc3RydWN0IGhjaV9kZXYgKmhkZXYsCgkJCQkg ICAgIHVpbnQ4X3QgKmZ3X2RhdGEgLGludCBmd19sZW4pCnsKCXVpbnQ4X3QgKnBjdXI9TlVMTDsK CXN0cnVjdCBza19idWZmICpza2I7CglpbnQgaSwgZnJhZ19udW0sIGZyYWdfbGVuOwoJc3RydWN0 IGhjaV9jb21tYW5kX2hkciBjbWQ7CglzdHJ1Y3QgZG93bmxvYWRfY3AgY21kX3BhcmE7CiAJc3Ry dWN0IGRvd25sb2FkX3JwICpldnRfcGFyYTsKCglpZighZndfZGF0YSkKCSAJcmV0dXJuIC0xOwoK CWNtZC5vcGNvZGUgPSAweGZjMjA7CgljbWQucGxlbiA9IHNpemVvZihzdHJ1Y3QgZG93bmxvYWRf Y3ApOwkKCWZyYWdfbnVtID0gZndfbGVuIC8gUEFUQ0hfU0VHX01BWCArIDE7CglmcmFnX2xlbiA9 IFBBVENIX1NFR19NQVg7CiAJcGN1ciA9IGZ3X2RhdGE7CgoJQlRfREJHKCIlcyBzdGFydCA6cGN1 cj0lcCwgZndfbGVuID0gJWQsZnJhZ19udW09JWQsZnJhZ19sZW49JWQgIiwKCQlfX2Z1bmNfXyxw Y3VyLGZ3X2xlbixmcmFnX251bSxmcmFnX2xlbik7CgkKCWZvciAoaSA9IDA7IGkgPCBmcmFnX251 bTsgaSsrKSB7CgkJY21kX3BhcmEuaW5kZXggPSBpOwoJCWlmIChpID09IChmcmFnX251bSAtIDEp KSB7CQkJCgkJCWZyYWdfbGVuID0gZndfbGVuICUgUEFUQ0hfU0VHX01BWDsKCQkJY21kLnBsZW4g PSAxK2ZyYWdfbGVuOwoJCQljbWRfcGFyYS5pbmRleCB8PSAweDgwOwoJCQlCVF9EQkcoImxhc3Q6 ZnJhZ19sZW4gPSAlZCIsZnJhZ19sZW4pOwoJCX0KCQlCVF9EQkcoImNtZF9wYXJhLmluZGV4PTB4 JXgsZnJhZ19sZW4gPSAlZCIsY21kX3BhcmEuaW5kZXgsIGZyYWdfbGVuKTsKCgkJbWVtY3B5KGNt ZF9wYXJhLmRhdGEsIHBjdXIsIGZyYWdfbGVuKTsKCQlwY3VyICs9IGZyYWdfbGVuOwoKCQlza2Ig PSBfX2hjaV9jbWRfc3luYyhoZGV2LCBjbWQub3Bjb2RlLCBjbWQucGxlbiwgJmNtZF9wYXJhLEhD SV9JTklUX1RJTUVPVVQpOwoJCWlmIChJU19FUlIoc2tiKSkgewoJCQlCVF9FUlIoInJlYWRpbmcg UmVhbHRlayBwYXRjaCBjb21tYW5kIGZhaWxlZCAoJWxkKSIsUFRSX0VSUihza2IpKTsKCQkJcmV0 dXJuIFBUUl9FUlIoc2tiKTsKCQl9CgkJaWYgKHNrYi0+bGVuICE9IHNpemVvZihzdHJ1Y3QgZG93 bmxvYWRfcnAgKSkgewoJCQlCVF9FUlIoIlJlYWx0ZWsgcGF0Y2ggZXZlbnQgbGVuZ3RoIG1pc21h dGNoIHNrYi0+bGVuPSVkIiwgc2tiLT5sZW4pOwoJCQlrZnJlZV9za2Ioc2tiKTsKCQkJcmV0dXJu IC1FSU87CgkJfQoKCQlldnRfcGFyYSA9IChzdHJ1Y3QgZG93bmxvYWRfcnAgKilza2ItPmRhdGE7 CgkJaWYgKGV2dF9wYXJhLT5zdGF0dXMpIHsKCQkJQlRfRVJSKCJSZWFsdGVrIHBhdGNoIGV2ZW50 IGZhaWxlZCAoJTAyeCkiLGV2dF9wYXJhLT5zdGF0dXMpOwoJCQlrZnJlZV9za2Ioc2tiKTsKCQkJ cmV0dXJuIC1idF90b19lcnJubyhldnRfcGFyYS0+c3RhdHVzKTsKCQl9CQoJCUJUX0lORk8oIlJl Y2VpdmUgYWNrZWQgaW5kZXggJWQiLGV2dF9wYXJhLT5pbmRleCk7CQkKCQlrZnJlZV9za2Ioc2ti KTsJCQoJfQkKCgoJQlRfREJHKCIlcyBlbmQgIixfX2Z1bmNfXyk7CnJldHVybiAwOwp9CgpzdGF0 aWMgaW50IGJ0dXNiX3NldHVwX3J0bChzdHJ1Y3QgaGNpX2RldiAqaGRldikKewoJc3RydWN0IHNr X2J1ZmYgKnNrYjsKCWNoYXIgZnduYW1lWzE2XTsKCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7 Cgl1aW50OF90ICpmd19wdHI9TlVMTDsKCWludCByZXQ9MCxmd19sZW49MDsJCgl1aW50MTZfdCBs bXBfdmVyc2lvbjsKCXN0cnVjdCBoY2lfcnBfcmVhZF9sb2NhbF92ZXJzaW9uICp2ZXI7CgoJQlRf REJHKCIlcyBzdGFydCIsX19mdW5jX18pOwoJCgkvKnJlYWQgbG9jYWwgdmVyc2lvbiB0byBjaGVj ayBtb2R1bGUgdHlwZSBhbmQgd2hldGhlciBwYXRjaGVkIG9yIG5vdCovCglza2IgPSBfX2hjaV9j bWRfc3luYyhoZGV2LCBIQ0lfT1BfUkVBRF9MT0NBTF9WRVJTSU9OLCAwLCBOVUxMLAoJCQkgICAg IEhDSV9JTklUX1RJTUVPVVQpOwoJaWYgKElTX0VSUihza2IpKSB7CgkJQlRfRVJSKCJyZWFkaW5n IFJlYWx0ZWsgZncgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCAoJWxkKSIsCgkJICAgICAgIFBUUl9F UlIoc2tiKSk7CgkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKCX0KCWlmIChza2ItPmxlbiAhPSBzaXpl b2Yoc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX3ZlcnNpb24pKSB7CgkJQlRfRVJSKCJSZWFsdGVr IGZ3IHZlcnNpb24gZXZlbnQgbGVuZ3RoIG1pc21hdGNoIik7CgkJa2ZyZWVfc2tiKHNrYik7CgkJ cmV0dXJuIC1FSU87Cgl9Cgl2ZXIgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX3ZlcnNpb24g Kilza2ItPmRhdGE7CglpZiAodmVyLT5zdGF0dXMpIHsKCQlCVF9FUlIoIlJlYWx0ZWsgZncgdmVy c2lvbiBldmVudCBmYWlsZWQgKCUwMngpIix2ZXItPnN0YXR1cyk7CgkJa2ZyZWVfc2tiKHNrYik7 CgkJcmV0dXJuIC1idF90b19lcnJubyh2ZXItPnN0YXR1cyk7Cgl9CgoJQlRfSU5GTygiJXM6IHJl YWQgbG9jYWwgdmVyc2lvbjogXG5cCgkJaGNpX3Jldj0lMDR4LFwKCQloY2lfdmVyPSUwNHgsXAoJ CWxtcF9zdWJ2ZXI9JTA0eCxcCgkJbG1wX3Zlcj0lMDRYLG1hbnVmYWN0dXJlcj0lMDRYIiwKCQlo ZGV2LT5uYW1lLCB2ZXItPmhjaV9yZXYsdmVyLT5oY2lfdmVyLAoJCXZlci0+bG1wX3N1YnZlcix2 ZXItPmxtcF92ZXIsCgkJdmVyLT5tYW51ZmFjdHVyZXIpOwoJCglsbXBfdmVyc2lvbiA9IHZlci0+ bG1wX3N1YnZlcjsKCWtmcmVlX3NrYihza2IpOwoJCglzd2l0Y2gobG1wX3ZlcnNpb24pewoJCWNh c2UgUk9NX0xNUF84NzIzQToJCgkJCXNucHJpbnRmKGZ3bmFtZSwgc2l6ZW9mKGZ3bmFtZSksICJy dGw4NzIzYV9mdyIpOyBicmVhazsKCQljYXNlIFJPTV9MTVBfODcyM0I6CQoJCQlzbnByaW50Zihm d25hbWUsIHNpemVvZihmd25hbWUpLCAicnRsODcyM2JfZnciKTsgYnJlYWs7CgkJY2FzZSBST01f TE1QXzg4MjFBOgkKCQkJc25wcmludGYoZnduYW1lLCBzaXplb2YoZnduYW1lKSwgInJ0bDg4MjFh X2Z3Iik7IGJyZWFrOwoJCWNhc2UgUk9NX0xNUF84NzYxQToJCgkJCXNucHJpbnRmKGZ3bmFtZSwg c2l6ZW9mKGZ3bmFtZSksICJydGw4NzYxYV9mdyIpOyBicmVhazsKCQlkZWZhdWx0OgkJCQoJCQlC VF9FUlIoIlJlYWx0ZWsgZGV2aWNlIGlzIGFscmVhZHkgcGF0Y2hlZC4iKTsJCQkJCgkJCXJldHVy biAwOwkKCX0JCQoJCgkvKmdldCBmaXJtd2FyZSBwYXRjaCBhY2NvcmRpbmcgdG8gbG9jYWwgdmVy c2lvbiovCglCVF9EQkcoIlJlYWx0ZWsgQmx1ZXRvb3RoIGZpcm13YXJlIGZpbGU6ICVzIixmd25h bWUpOwoJCglyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZnduYW1lLCAmaGRldi0+ZGV2KTsK CWlmIChyZXQgPCAwKSB7CgkJQlRfRVJSKCJmYWlsZWQgdG8gb3BlbiBSZWFsdGVrIGZpcm13YXJl IGZpbGU6ICVzKCVkKSIsCgkJICAgICAgIGZ3bmFtZSwgcmV0KTsJCQkKCQlyZXR1cm4gcmV0OwoJ fQoJQlRfREJHKCIlcyBmdy0+ZGF0YT0lcCBmdy0+c2l6ZT0gJWQgIiwgX19mdW5jX18sIGZ3LT5k YXRhLChpbnQpZnctPnNpemUpOwoJCgkvKkZvciA4NzIzYSwgdXNlIG9sZCBzdHlsZSBwYXRjaCov CglpZiAobG1wX3ZlcnNpb249PSBST01fTE1QXzg3MjNBKSAJCQoJCXJldCA9YnR1c2Jfc2V0dXBf cnRsX2dldF9vbGRmdyhmdywmZndfcHRyLCZmd19sZW4pOwoJLypGb3Igb3RoZXIgbW9kdWxlLCB1 c2UgbmV3IHN0eWxlIHBhdGNoKi8KCWVsc2UKCQlyZXQgPWJ0dXNiX3NldHVwX3J0bF9nZXRfbmV3 ZncoaGRldixmdywmZndfcHRyLCZmd19sZW4sbG1wX3ZlcnNpb24pOwoJaWYgKHJldDwwKSB7CgkJ cmVsZWFzZV9maXJtd2FyZShmdyk7CgkJcmV0dXJuIHJldDsKCX0KCS8qZG93bmxvYWQgZmlybXdh cmUgdG8gY29udHJvbGxlciovCglyZXQgPSBidHVzYl9zZXR1cF9ydGxfcGF0Y2hpbmcoaGRldixm d19wdHIsZndfbGVuKTsKCglyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKCWlmKGZ3X3B0cikgCgkJa2Zy ZWUoZndfcHRyKTsKCXJldHVybiByZXQ7Cgp9CgpzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVj dCB1c2JfaW50ZXJmYWNlICppbnRmLAoJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlk KQp7CglzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2Rlc2M7CglzdHJ1Y3QgYnR1 c2JfZGF0YSAqZGF0YTsKCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwoJaW50IGksIGVycjsKCglCVF9E QkcoIiVzIGludGYgJXAgaWQgJXAiLCAgX19mdW5jX18sIGludGYsIGlkKTsKCgkvKiBpbnRlcmZh Y2UgbnVtYmVycyBhcmUgaGFyZGNvZGVkIGluIHRoZSBzcGVjICovCglpZiAoaW50Zi0+Y3VyX2Fs dHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQoJCXJldHVybiAtRU5PREVWOwoK CWlmICghaWQtPmRyaXZlcl9pbmZvKSB7CgkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKm1h dGNoOwoJCW1hdGNoID0gdXNiX21hdGNoX2lkKGludGYsIGJsYWNrbGlzdF90YWJsZSk7CgkJaWYg KG1hdGNoKQoJCQlpZCA9IG1hdGNoOwoJfQoJCglpZiAoaWQtPmRyaXZlcl9pbmZvID09IEJUVVNC X0lHTk9SRSkKCQlyZXR1cm4gLUVOT0RFVjsKCglpZiAoaWdub3JlX2RnYSAmJiBpZC0+ZHJpdmVy X2luZm8gJiBCVFVTQl9ESUdJQU5TV0VSKQoJCXJldHVybiAtRU5PREVWOwoKCWlmIChpZ25vcmVf Y3NyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0NTUikKCQlyZXR1cm4gLUVOT0RFVjsKCglp ZiAoaWdub3JlX3NuaWZmZXIgJiYgaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfU05JRkZFUikKCQly ZXR1cm4gLUVOT0RFVjsKCglpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQVRIMzAxMikgewoJ CXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKCgkJ LyogT2xkIGZpcm13YXJlIHdvdWxkIG90aGVyd2lzZSBsZXQgYXRoM2sgZHJpdmVyIGxvYWQKCQkg KiBwYXRjaCBhbmQgc3lzY29uZmlnIGZpbGVzICovCgkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRl c2NyaXB0b3IuYmNkRGV2aWNlKSA8PSAweDAwMDEpCgkJCXJldHVybiAtRU5PREVWOwoJfQoKCWRh dGEgPSBkZXZtX2t6YWxsb2MoJmludGYtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7 CglpZiAoIWRhdGEpCgkJcmV0dXJuIC1FTk9NRU07CgoJZm9yIChpID0gMDsgaSA8IGludGYtPmN1 cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgewoJCWVwX2Rlc2MgPSAmaW50 Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7CgoJCWlmICghZGF0YS0+aW50cl9l cCAmJiB1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVwX2Rlc2MpKSB7CgkJCWRhdGEtPmludHJfZXAg PSBlcF9kZXNjOwoJCQljb250aW51ZTsKCQl9CgoJCWlmICghZGF0YS0+YnVsa190eF9lcCAmJiB1 c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZXBfZGVzYykpIHsKCQkJZGF0YS0+YnVsa190eF9lcCA9 IGVwX2Rlc2M7CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKCFkYXRhLT5idWxrX3J4X2VwICYmIHVz Yl9lbmRwb2ludF9pc19idWxrX2luKGVwX2Rlc2MpKSB7CgkJCWRhdGEtPmJ1bGtfcnhfZXAgPSBl cF9kZXNjOwoJCQljb250aW51ZTsKCQl9Cgl9CgoJaWYgKCFkYXRhLT5pbnRyX2VwIHx8ICFkYXRh LT5idWxrX3R4X2VwIHx8ICFkYXRhLT5idWxrX3J4X2VwKQoJCXJldHVybiAtRU5PREVWOwoKCWRh dGEtPmNtZHJlcV90eXBlID0gVVNCX1RZUEVfQ0xBU1M7CgoJZGF0YS0+dWRldiA9IGludGVyZmFj ZV90b191c2JkZXYoaW50Zik7CglkYXRhLT5pbnRmID0gaW50ZjsKCglzcGluX2xvY2tfaW5pdCgm ZGF0YS0+bG9jayk7CgoJSU5JVF9XT1JLKCZkYXRhLT53b3JrLCBidHVzYl93b3JrKTsKCUlOSVRf V09SSygmZGF0YS0+d2FrZXIsIGJ0dXNiX3dha2VyKTsKCXNwaW5fbG9ja19pbml0KCZkYXRhLT50 eGxvY2spOwoKCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+dHhfYW5jaG9yKTsKCWluaXRfdXNiX2Fu Y2hvcigmZGF0YS0+aW50cl9hbmNob3IpOwoJaW5pdF91c2JfYW5jaG9yKCZkYXRhLT5idWxrX2Fu Y2hvcik7Cglpbml0X3VzYl9hbmNob3IoJmRhdGEtPmlzb2NfYW5jaG9yKTsKCWluaXRfdXNiX2Fu Y2hvcigmZGF0YS0+ZGVmZXJyZWQpOwoKCWhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7CglpZiAoIWhk ZXYpCgkJcmV0dXJuIC1FTk9NRU07CgoJaGRldi0+YnVzID0gSENJX1VTQjsKCWhjaV9zZXRfZHJ2 ZGF0YShoZGV2LCBkYXRhKTsKCglkYXRhLT5oZGV2ID0gaGRldjsKCglTRVRfSENJREVWX0RFViho ZGV2LCAmaW50Zi0+ZGV2KTsKCgloZGV2LT5vcGVuICAgPSBidHVzYl9vcGVuOwoJaGRldi0+Y2xv c2UgID0gYnR1c2JfY2xvc2U7CgloZGV2LT5mbHVzaCAgPSBidHVzYl9mbHVzaDsKCWhkZXYtPnNl bmQgICA9IGJ0dXNiX3NlbmRfZnJhbWU7CgloZGV2LT5ub3RpZnkgPSBidHVzYl9ub3RpZnk7CgoJ aWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0JDTTkyMDM1KQoJCWhkZXYtPnNldHVwID0gYnR1 c2Jfc2V0dXBfYmNtOTIwMzU7CgoJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0lOVEVMKQoJ CWhkZXYtPnNldHVwID0gYnR1c2Jfc2V0dXBfaW50ZWw7CgoJaWYgKGlkLT5kcml2ZXJfaW5mbyAm IEJUVVNCX1JUTCkKCXsJCgkJc2V0X2JpdChIQ0lfUVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2 LT5xdWlya3MpOwoJCWlmICghZGV2aWNlX21heV93YWtldXAoJihkYXRhLT51ZGV2IC0+ZGV2KSkp CgkJCWludGYtPm5lZWRzX2JpbmRpbmcgPSAxOwoJCQoJCWhkZXYtPnNldHVwID0gYnR1c2Jfc2V0 dXBfcnRsOwoJfQoJCi8qCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9SVEw4NzYxQVc4MTky RVUpCgkJaGRldi0+c2V0dXAgPSBidHVzYl9zZXR1cF9ydGw4NzYxYXc4MTkyZXU7CglpZiAoaWQt PmRyaXZlcl9pbmZvICYgQlRVU0JfUlRMODc2MUFVODE5MkVFKQoJCWhkZXYtPnNldHVwID0gYnR1 c2Jfc2V0dXBfcnRsODc2MWF1ODE5MmVlOwoJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX1JU TDg3NjFBVTg4MTJBRSkKCQloZGV2LT5zZXR1cCA9IGJ0dXNiX3NldHVwX3J0bDg3NjFhdTg4MTJh ZTsKKi8KCS8qIEludGVyZmFjZSBudW1iZXJzIGFyZSBoYXJkY29kZWQgaW4gdGhlIHNwZWNpZmlj YXRpb24gKi8KCWRhdGEtPmlzb2MgPSB1c2JfaWZudW1fdG9faWYoZGF0YS0+dWRldiwgMSk7CgoJ aWYgKCFyZXNldCkKCQlzZXRfYml0KEhDSV9RVUlSS19SRVNFVF9PTl9DTE9TRSwgJmhkZXYtPnF1 aXJrcyk7CgoJaWYgKGZvcmNlX3Njb2ZpeCB8fCBpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9XUk9O R19TQ09fTVRVKSB7CgkJaWYgKCFkaXNhYmxlX3Njb2ZpeCkKCQkJc2V0X2JpdChIQ0lfUVVJUktf RklYVVBfQlVGRkVSX1NJWkUsICZoZGV2LT5xdWlya3MpOwoJfQoKCWlmIChpZC0+ZHJpdmVyX2lu Zm8gJiBCVFVTQl9CUk9LRU5fSVNPQykKCQlkYXRhLT5pc29jID0gTlVMTDsKCglpZiAoaWQtPmRy aXZlcl9pbmZvICYgQlRVU0JfRElHSUFOU1dFUikgewoJCWRhdGEtPmNtZHJlcV90eXBlID0gVVNC X1RZUEVfVkVORE9SOwoJCXNldF9iaXQoSENJX1FVSVJLX1JFU0VUX09OX0NMT1NFLCAmaGRldi0+ cXVpcmtzKTsKCX0KCglpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQ1NSKSB7CgkJc3RydWN0 IHVzYl9kZXZpY2UgKnVkZXYgPSBkYXRhLT51ZGV2OwoKCQkvKiBPbGQgZmlybXdhcmUgd291bGQg b3RoZXJ3aXNlIGV4ZWN1dGUgVVNCIHJlc2V0ICovCgkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRl c2NyaXB0b3IuYmNkRGV2aWNlKSA8IDB4MTE3KQoJCQlzZXRfYml0KEhDSV9RVUlSS19SRVNFVF9P Tl9DTE9TRSwgJmhkZXYtPnF1aXJrcyk7Cgl9CgoJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNC X1NOSUZGRVIpIHsKCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRhdGEtPnVkZXY7CgoJCS8q IE5ldyBzbmlmZmVyIGZpcm13YXJlIGhhcyBjcmlwcGxlZCBIQ0kgaW50ZXJmYWNlICovCgkJaWYg KGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA+IDB4OTk3KQoJCQlzZXRf Yml0KEhDSV9RVUlSS19SQVdfREVWSUNFLCAmaGRldi0+cXVpcmtzKTsKCgkJZGF0YS0+aXNvYyA9 IE5VTEw7Cgl9CgoJaWYgKGRhdGEtPmlzb2MpIHsKCQllcnIgPSB1c2JfZHJpdmVyX2NsYWltX2lu dGVyZmFjZSgmYnR1c2JfZHJpdmVyLAoJCQkJCQkJZGF0YS0+aXNvYywgZGF0YSk7CgkJaWYgKGVy ciA8IDApIHsKCQkJaGNpX2ZyZWVfZGV2KGhkZXYpOwoJCQlyZXR1cm4gZXJyOwoJCX0KCX0KCgll cnIgPSBoY2lfcmVnaXN0ZXJfZGV2KGhkZXYpOwoJaWYgKGVyciA8IDApIHsKCQloY2lfZnJlZV9k ZXYoaGRldik7CgkJcmV0dXJuIGVycjsKCX0KCgl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEp OwoKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBidHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2Jf aW50ZXJmYWNlICppbnRmKQp7CglzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50 ZmRhdGEoaW50Zik7CglzdHJ1Y3QgaGNpX2RldiAqaGRldjsKCglCVF9EQkcoImludGYgJXAiLCBp bnRmKTsKCglpZiAoIWRhdGEpCgkJcmV0dXJuOwoKCWhkZXYgPSBkYXRhLT5oZGV2OwoJdXNiX3Nl dF9pbnRmZGF0YShkYXRhLT5pbnRmLCBOVUxMKTsKCglpZiAoZGF0YS0+aXNvYykKCQl1c2Jfc2V0 X2ludGZkYXRhKGRhdGEtPmlzb2MsIE5VTEwpOwoKCWhjaV91bnJlZ2lzdGVyX2RldihoZGV2KTsK CglpZiAoaW50ZiA9PSBkYXRhLT5pc29jKQoJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2Uo JmJ0dXNiX2RyaXZlciwgZGF0YS0+aW50Zik7CgllbHNlIGlmIChkYXRhLT5pc29jKQoJCXVzYl9k cml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmJ0dXNiX2RyaXZlciwgZGF0YS0+aXNvYyk7CgoJaGNp X2ZyZWVfZGV2KGhkZXYpOwp9CgojaWZkZWYgQ09ORklHX1BNCnN0YXRpYyBpbnQgYnR1c2Jfc3Vz cGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCnsK CXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKCglCVF9E QkcoImludGYgJXAiLCBpbnRmKTsKCglpZiAoZGF0YS0+c3VzcGVuZF9jb3VudCsrKQoJCXJldHVy biAwOwoKCXNwaW5fbG9ja19pcnEoJmRhdGEtPnR4bG9jayk7CglpZiAoIShQTVNHX0lTX0FVVE8o bWVzc2FnZSkgJiYgZGF0YS0+dHhfaW5fZmxpZ2h0KSkgewoJCXNldF9iaXQoQlRVU0JfU1VTUEVO RElORywgJmRhdGEtPmZsYWdzKTsKCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPnR4bG9jayk7Cgl9 IGVsc2UgewoJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKCQlkYXRhLT5zdXNwZW5k X2NvdW50LS07CgkJcmV0dXJuIC1FQlVTWTsKCX0KCgljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53 b3JrKTsKCglidHVzYl9zdG9wX3RyYWZmaWMoZGF0YSk7Cgl1c2Jfa2lsbF9hbmNob3JlZF91cmJz KCZkYXRhLT50eF9hbmNob3IpOwoKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBwbGF5X2RlZmVy cmVkKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKQp7CglzdHJ1Y3QgdXJiICp1cmI7CglpbnQgZXJy OwoKCXdoaWxlICgodXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmZGF0YS0+ZGVmZXJyZWQpKSkg ewoJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CgkJaWYgKGVyciA8IDAp CgkJCWJyZWFrOwoKCQlkYXRhLT50eF9pbl9mbGlnaHQrKzsKCX0KCXVzYl9zY3V0dGxlX2FuY2hv cmVkX3VyYnMoJmRhdGEtPmRlZmVycmVkKTsKfQoKc3RhdGljIGludCBidHVzYl9yZXN1bWUoc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCnsKCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gdXNi X2dldF9pbnRmZGF0YShpbnRmKTsKCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YS0+aGRldjsK CWludCBlcnIgPSAwOwoKCUJUX0RCRygiaW50ZiAlcCIsIGludGYpOwoKCWlmICgtLWRhdGEtPnN1 c3BlbmRfY291bnQpCgkJcmV0dXJuIDA7CgoJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhk ZXYtPmZsYWdzKSkKCQlnb3RvIGRvbmU7CgoJaWYgKHRlc3RfYml0KEJUVVNCX0lOVFJfUlVOTklO RywgJmRhdGEtPmZsYWdzKSkgewoJCWVyciA9IGJ0dXNiX3N1Ym1pdF9pbnRyX3VyYihoZGV2LCBH RlBfTk9JTyk7CgkJaWYgKGVyciA8IDApIHsKCQkJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklO RywgJmRhdGEtPmZsYWdzKTsKCQkJZ290byBmYWlsZWQ7CgkJfQoJfQoKCWlmICh0ZXN0X2JpdChC VFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKCQllcnIgPSBidHVzYl9zdWJtaXRf YnVsa191cmIoaGRldiwgR0ZQX05PSU8pOwoJCWlmIChlcnIgPCAwKSB7CgkJCWNsZWFyX2JpdChC VFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CgkJCWdvdG8gZmFpbGVkOwoJCX0KCgkJ YnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKCX0KCglpZiAodGVzdF9iaXQo QlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKSB7CgkJaWYgKGJ0dXNiX3N1Ym1pdF9p c29jX3VyYihoZGV2LCBHRlBfTk9JTykgPCAwKQoJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5O SU5HLCAmZGF0YS0+ZmxhZ3MpOwoJCWVsc2UKCQkJYnR1c2Jfc3VibWl0X2lzb2NfdXJiKGhkZXYs IEdGUF9OT0lPKTsKCX0KCglzcGluX2xvY2tfaXJxKCZkYXRhLT50eGxvY2spOwoJcGxheV9kZWZl cnJlZChkYXRhKTsKCWNsZWFyX2JpdChCVFVTQl9TVVNQRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOwoJ c3Bpbl91bmxvY2tfaXJxKCZkYXRhLT50eGxvY2spOwoJc2NoZWR1bGVfd29yaygmZGF0YS0+d29y ayk7CgoJcmV0dXJuIDA7CgpmYWlsZWQ6Cgl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZkYXRh LT5kZWZlcnJlZCk7CmRvbmU6CglzcGluX2xvY2tfaXJxKCZkYXRhLT50eGxvY2spOwoJY2xlYXJf Yml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CglzcGluX3VubG9ja19pcnEoJmRh dGEtPnR4bG9jayk7CgoJcmV0dXJuIGVycjsKfQojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgdXNiX2Ry aXZlciBidHVzYl9kcml2ZXIgPSB7CgkubmFtZQkJPSAiYnR1c2IiLAoJLnByb2JlCQk9IGJ0dXNi X3Byb2JlLAoJLmRpc2Nvbm5lY3QJPSBidHVzYl9kaXNjb25uZWN0LAojaWZkZWYgQ09ORklHX1BN Cgkuc3VzcGVuZAk9IGJ0dXNiX3N1c3BlbmQsCgkucmVzdW1lCQk9IGJ0dXNiX3Jlc3VtZSwKI2Vu ZGlmCgkuaWRfdGFibGUJPSBidHVzYl90YWJsZSwKCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEs CgkuZGlzYWJsZV9odWJfaW5pdGlhdGVkX2xwbSA9IDEsCn07Cgptb2R1bGVfdXNiX2RyaXZlcihi dHVzYl9kcml2ZXIpOwoKbW9kdWxlX3BhcmFtKGlnbm9yZV9kZ2EsIGJvb2wsIDA2NDQpOwpNT0RV TEVfUEFSTV9ERVNDKGlnbm9yZV9kZ2EsICJJZ25vcmUgZGV2aWNlcyB3aXRoIGlkIDA4ZmQ6MDAw MSIpOwoKbW9kdWxlX3BhcmFtKGlnbm9yZV9jc3IsIGJvb2wsIDA2NDQpOwpNT0RVTEVfUEFSTV9E RVNDKGlnbm9yZV9jc3IsICJJZ25vcmUgZGV2aWNlcyB3aXRoIGlkIDBhMTI6MDAwMSIpOwoKbW9k dWxlX3BhcmFtKGlnbm9yZV9zbmlmZmVyLCBib29sLCAwNjQ0KTsKTU9EVUxFX1BBUk1fREVTQyhp Z25vcmVfc25pZmZlciwgIklnbm9yZSBkZXZpY2VzIHdpdGggaWQgMGExMjowMDAyIik7Cgptb2R1 bGVfcGFyYW0oZGlzYWJsZV9zY29maXgsIGJvb2wsIDA2NDQpOwpNT0RVTEVfUEFSTV9ERVNDKGRp c2FibGVfc2NvZml4LCAiRGlzYWJsZSBmaXh1cCBvZiB3cm9uZyBTQ08gYnVmZmVyIHNpemUiKTsK Cm1vZHVsZV9wYXJhbShmb3JjZV9zY29maXgsIGJvb2wsIDA2NDQpOwpNT0RVTEVfUEFSTV9ERVND KGZvcmNlX3Njb2ZpeCwgIkZvcmNlIGZpeHVwIG9mIHdyb25nIFNDTyBidWZmZXJzIHNpemUiKTsK Cm1vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMDY0NCk7Ck1PRFVMRV9QQVJNX0RFU0MocmVzZXQs ICJTZW5kIEhDSSByZXNldCBjb21tYW5kIG9uIGluaXRpYWxpemF0aW9uIik7CgpNT0RVTEVfQVVU SE9SKCJNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Iik7Ck1PRFVMRV9ERVND UklQVElPTigiR2VuZXJpYyBCbHVldG9vdGggVVNCIGRyaXZlciB2ZXIgIiBWRVJTSU9OKTsKTU9E VUxFX1ZFUlNJT04oVkVSU0lPTik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsK --_002_54F70642BAB21D4498E1AA3EFE3D519A461012DArsex2realsilcom_--