Return-Path: From: "Ho, Albert O" To: Marcel Holtmann CC: linux-bluetooth , "Hedberg, Johan" , "tedd.hj.an@gmail.com" , "An, Tedd" Subject: RE: [RFC 1/2] Bluetooth: Add driver extension for vendor specific init Date: Wed, 24 Oct 2012 08:27:54 +0000 Message-ID: <95EBF2BD638BE24EB7C4104AF2911E3945F4C895@ORSMSX101.amr.corp.intel.com> References: <39660287.XHkFNqYcyS@tedd-ubuntu> <1349346013.27233.28.camel@aeonflux> In-Reply-To: <1349346013.27233.28.camel@aeonflux> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 List-ID: SGkgTWFyY2VsLA0KDQpJIGhhdmUgYSBxdWVzdGlvbiBhZnRlciBvdXIgY2hhdCB2aWEgSVJDLiAg U2VlIGJlbG93Lg0KIA0KDQo+IFRoaXMgcGF0Y2ggcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIG9mIGJ0 dXNiIHRvIHN1cHBvcnQgZGV2aWNlIHZlbmRvciBjYW4gDQo+IGltcGxlbWVudCB0aGVpciBvd24g bW9kdWxlIHRvIGV4ZWN1dGUgdGhlIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgDQo+IGluaXRpYWxp emF0aW9uIGJlZm9yZSB0aGUgc3RhY2sgc2VuZHMgZ2VuZXJpYyBCVCBkZXZpY2UgDQo+IGluaXRp YWxpemF0aW9uLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogVGVkZCBIby1KZW9uZyBBbiA8dGVkZC5h bkBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyAgICAgICAg fCAgMTkxICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJz L2JsdWV0b290aC9idHVzYi5oICAgICAgICB8ICAgNTMgKysrKysrKysrKysNCj4gIGluY2x1ZGUv bmV0L2JsdWV0b290aC9oY2lfY29yZS5oIHwgICAxMCArKw0KPiAgbmV0L2JsdWV0b290aC9oY2lf Y29yZS5jICAgICAgICAgfCAgIDE1ICsrLQ0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMDQgaW5zZXJ0 aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZSANCj4gMTAwNjQ0IGRyaXZlcnMv Ymx1ZXRvb3RoL2J0dXNiLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9i dHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyANCj4gaW5kZXggZjYzN2MyNS4uYWZh MTU1OCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYw0KPiArKysgYi9k cml2ZXJzL2JsdWV0b290aC9idHVzYi5jDQo+IEBAIC0yNiw2ICsyNiw3IEBADQo+ICANCj4gICNp bmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPg0KPiAgI2luY2x1ZGUgPG5ldC9ibHVl dG9vdGgvaGNpX2NvcmUuaD4NCj4gKyNpbmNsdWRlICJidHVzYi5oIg0KPiAgDQo+ICAjZGVmaW5l IFZFUlNJT04gIjAuNiINCj4gIA0KPiBAQCAtMzksMTQgKzQwLDU5IEBAIHN0YXRpYyBib29sIHJl c2V0ID0gMTsNCj4gIA0KPiAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJ0dXNiX2RyaXZlcjsN Cj4gIA0KPiAtI2RlZmluZSBCVFVTQl9JR05PUkUJCTB4MDENCj4gLSNkZWZpbmUgQlRVU0JfRElH SUFOU1dFUgkweDAyDQo+IC0jZGVmaW5lIEJUVVNCX0NTUgkJMHgwNA0KPiAtI2RlZmluZSBCVFVT Ql9TTklGRkVSCQkweDA4DQo+IC0jZGVmaW5lIEJUVVNCX0JDTTkyMDM1CQkweDEwDQo+IC0jZGVm aW5lIEJUVVNCX0JST0tFTl9JU09DCTB4MjANCj4gLSNkZWZpbmUgQlRVU0JfV1JPTkdfU0NPX01U VQkweDQwDQo+IC0jZGVmaW5lIEJUVVNCX0FUSDMwMTIJCTB4ODANCj4gKy8qDQo+ICsgKiBDcmVh dGUgYnR1c2JfZHJpdmVyX2luZm8gc3RydWN0IGZvciBlYWNoIGRyaXZlcl9pbmZvIGZsYWdzIHVz ZWQgYnkNCj4gKyAqIGJsYWNrbGlzdCBzaW5jZSB2ZW5kb3IncyBidHVzYiBkcml2ZXIgd2lsbCBy ZXR1cm4gYnR1c2JfZHJpdmVyX2luZm8gc3RydWN0Lg0KPiArICovDQo+ICsNCj4gKy8qDQo+ICsg KiBpZiB0aGUgZGV2aWNlIGlzIHNldCB0byB0aGlzLCB0aGlzIG1lbmFzIHRoYXQgdGhlIGRldmlj ZSBpcyANCj4gK2dlbmVyaWMgYW5kDQo+ICsgKiBkb2Vzbid0IHJlcXVpcmUgYW55IHZlbmRvciBz cGVjaWZpYyBoYW5kbGluZyAgKi8gc3RhdGljIGNvbnN0IA0KPiArc3RydWN0IGJ0dXNiX2RyaXZl cl9pbmZvIGdlbmVyaWMgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNCIEdlbmVyaWMiLA0K PiArCS5mbGFncwkJPSBCVFVTQl9HRU5FUklDLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBpZ25vcmUgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0g IkJUVVNCIElnbm9yZSIsDQo+ICsJLmZsYWdzCQk9IEJUVVNCX0lHTk9SRSwNCj4gK307DQoNCj4+ IEkgbGlrZSB0aGUgZWZmb3J0LCBidXQgSSB0aGluayB5b3Ugd2VudCBhIGxpdHRsZSBiaXQgdG9v IGZhciBoZXJlLiBGb3IgdGhlc2Ugc2ltcGxlIG9uZXMsIHdlIGNhbiBlYXNpbHkga2VlcCBvdXIg c2ltcGxlIGJsYWNrbGlzdC4gSXQga2VlcHMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSB0aGFuIHRo aXMgcGFydC4gQnV0IEkgZG8gYXBwcmVjaWF0ZSB0aGUgYXR0ZW1wdCBpbiB1bmlmeWluZyB0aGlz Lg0KDQoNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBkaWdp YW5zd2VyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9ICJCVFVTQiBESUdJQU5TV0VSIiwNCj4gKwku ZmxhZ3MJCT0gQlRVU0JfRElHSUFOU1dFUiwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgYnR1c2JfZHJpdmVyX2luZm8gY3NyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9ICJCVFVT QiBDU1IiLA0KPiArCS5mbGFncwkJPSBCVFVTQl9DU1IsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvIHNuaWZmZXIgPSB7DQo+ICsJLmRlc2NyaXB0 aW9uCT0gIkJUVVNCIFNuaWZmZXIiLA0KPiArCS5mbGFncwkJPSBCVFVTQl9TTklGRkVSLA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBiY205MjAz NSA9IHsNCj4gKwkuZGVzY3JpcHRpb24JPSAiQlRVU0IgQkNNOTIwMzUiLA0KPiArCS5mbGFncwkJ PSBCVFVTQl9CQ005MjAzNSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnR1 c2JfZHJpdmVyX2luZm8gYnJva2VuX2lzb2MgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNC IEJyb2tlbiBJU09DIiwNCj4gKwkuZmxhZ3MJCT0gQlRVU0JfQlJPS0VOX0lTT0MsDQo+ICt9Ow0K PiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvIHdyb25nX3Njb19t dHUgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNCIFdyb25nIFNDTyBNVFUiLA0KPiArCS5m bGFncwkJPSBCVFVTQl9XUk9OR19TQ09fTVRVLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBhdGgzMDEyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9 ICJCVFVTQiBBdGgzMDEyIiwNCj4gKwkuZmxhZ3MJCT0gQlRVU0JfQVRIMzAxMiwNCj4gK307DQo+ ICANCj4gIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KPiAg CS8qIEdlbmVyaWMgQmx1ZXRvb3RoIFVTQiBkZXZpY2UgKi8NCj4gQEAgLTEwNSw5MCArMTUxLDg5 IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KPiAgDQo+ ICAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovDQo+ICB9Ow0KPiAtDQo+ICBNT0RVTEVfREVW SUNFX1RBQkxFKHVzYiwgYnR1c2JfdGFibGUpOw0KPiAgDQo+ICBzdGF0aWMgc3RydWN0IHVzYl9k ZXZpY2VfaWQgYmxhY2tsaXN0X3RhYmxlW10gPSB7DQo+ICAJLyogQ1NSIEJsdWVDb3JlIGRldmlj ZXMgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTEyLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBC VFVTQl9DU1IgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTEyLCAweDAwMDEpLCAuZHJpdmVyX2lu Zm8gPSAodW5zaWduZWQgbG9uZykgJmNzciB9LA0KDQo+PiBLZWVwIHRoZSBibGFja2xpc3RfdGFi bGUgYXMgaXQgaXMuIFRoZSBpbXBvcnRhbnQgdGFibGUgdG8gbW9kaWZ5IGlzIGJ0dXNiX3RhYmxl IGFuZCB1c2UgYSBjb21tb24gZHJpdmVyX2luZm8gdGhhdCB3aWxsIGJlIHNoYXJlZCBiZXR3ZWVu IGRyaXZlcnMuDQoNCj4+IFRoYXQgd291bGQgYWxzbyBtYWtlIGl0IHNpbXBsZSB0byBqdXN0IGFk ZCBCVFVTQl9JR05PUkUgb3IgYSBuZXcgQlRVU0JfVkVORE9SIGZsYWcgdG8gY2FsbCBvdXQgdGhl IGRyaXZlcnMgdGhhdCBoYXZlIGEgc2VwYXJhdGUgZHJpdmVyIHdpdGggYSB2ZW5kb3IgaW5pdCBm dW5jdGlvbiwgYnV0IHdvdWxkIG1hdGNoID4+IHRoZSBCbHVldG9vdGggZ2VuZXJhbCBVU0IgZGVz Y3JpcHRvcnMuDQoNCkkgbG9va2VkIGF0IHVzYm5ldCBtaW5pZHJpdmVyIGFzIHlvdSBzdWdnZXN0 ZWQuICBJZiB3ZSBkbyBhIHNpbWlsYXIgc2NoZW1lIHN1Y2ggdGhhdCBidHVzYl9wcm9iZSgpIGlu dm9rZXMgdGhlIG1pbmlfZHJpdmVyJ3MgYmluZCgpL3VuYmluZCgpIHRoZW4gYnR1c2IncyB1c2Fn ZSBvZiBkcml2ZXJfaW5mbyB3aWxsIG5lZWQgdG8gY2hhbmdlIGZyb20gc3RvcmluZyBmbGFncyAo ZXg6IEJUVVNCX0lHTk9SRSkgYW5kIGNoYW5nZSB0byBzdG9yZSAic3RhdGljIGNvbnN0IHN0cnVj dCIgd2hlcmUgaXQgaG9sZHMgYSBzdHJ1Y3QgY29udGFpbmluZyB0aGUgbWluaS1kcml2ZXIncyBi aW5kL3VuYmluZCBmdW5jdGlvbnMgKGp1c3QgbGlrZSB1c2JuZXQgbWluaWRyaXZlcikuICAgQXJl IHlvdSBnb29kIHdpdGggdGhpcyBjaGFuZ2U/ICBJIGFsc28gd2FudCB0byBtZW50aW9uIHRoYXQg aW4gdGhlIHBhdGNoIGNvbnRhaW5pbmcgdGhlIEJUIFVTQiBtaW5pIGRyaXZlciB0ZW1wbGF0ZSwg aXQgYWxyZWFkeSBoYXMgaXRzIG93biBtb2R1bGVfdXNiX2RyaXZlcigpIHNlY3Rpb24gd2l0aCBp dHMgVklEL1BJRCBsaXN0ZWQuDQoNCg0KPj4gVGhlbiBvdmVyIHRpbWUsIHdlIGNhbiBtb3ZlIHRo ZSBCVFVTQl9CQ005MjAzNSBmb3IgZXhhbXBsZSBpbnRvIGl0cyBzZXBhcmF0ZSBkcml2ZXIuIEFu ZCBhbHNvIGRlYWwgd2l0aCBjbGVhbmluZyB1cCBhbGwgdGhlIG90aGVyIEJyb2FkY29tIHNwZWNp YWx0aWVzLg0KDQo+ICANCj4gIAkvKiBCcm9hZGNvbSBCQ00yMDMzIHdpdGhvdXQgZmlybXdhcmUg Ki8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzMpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9JR05PUkUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzMpLCAuZHJpdmVyX2lu Zm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSANCj4gK30sDQo+ICANCj4gIAkvKiBBdGhlcm9z IDMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAw eDMwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwNCj4gLQl7IFVTQl9ERVZJQ0Uo MHgwY2YzLCAweGUwMTkpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwNCj4gLQl7IFVT Ql9ERVZJQ0UoMHgxM2QzLCAweDMzMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwN Cj4gLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9J R05PUkUgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwM2QpLCAuZHJpdmVyX2luZm8g PSBCVFVTQl9JR05PUkUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDIpLCAuZHJp dmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSB9LA0KPiArCXsgVVNCX0RFVklDRSgw eDBjZjMsIDB4ZTAxOSksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIH0s DQo+ICsJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA0KSwgLmRyaXZlcl9pbmZvID0gKHVuc2ln bmVkIGxvbmcpICZpZ25vcmUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTUpLCAu ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSB9LA0KPiArCXsgVVNCX0RFVklD RSgweDA0ODksIDB4ZTAzZCksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3Jl IA0KPiArfSwNCj4gIA0KPiAgCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBm aXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MzExZCksIC5kcml2ZXJfaW5m byA9IEJUVVNCX0lHTk9SRSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MzExZCksIC5k cml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIA0KPiArfSwNCj4gIA0KPiAgCS8q IEF0aGVyb3MgMzAxMiB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgw eDBjZjMsIDB4MzAwNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gLQl7IFVT Ql9ERVZJQ0UoMHgwY2YzLCAweDMxMWQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0s DQo+IC0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzc1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf QVRIMzAxMiB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDA0Y2EsIDB4MzAwNSksIC5kcml2ZXJfaW5m byA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzNjIpLCAu ZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MGNmMywg MHhlMDA0KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LA0KPiAtCXsgVVNCX0RFVklD RSgweDA5MzAsIDB4MDIxOSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gKwl7 IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDQpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9u ZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMxMWQpLCAuZHJpdmVy X2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgx M2QzLCAweDMzNzUpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwN Cj4gKwl7IFVTQl9ERVZJQ0UoMHgwNGNhLCAweDMwMDUpLCAuZHJpdmVyX2luZm8gPSAodW5zaWdu ZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzNjIpLCAu ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJ Q0UoMHgwY2YzLCAweGUwMDQpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMw MTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTkpLCAuZHJpdmVyX2luZm8gPSAo dW5zaWduZWQgbG9uZykgDQo+ICsmYXRoMzAxMiB9LA0KPiAgDQo+ICAJLyogQXRoZXJvcyBBUjVC QlUxMiB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDA0ODksIDB4 ZTAyYyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LA0KPiArCXsgVVNCX0RFVklDRSgw eDA0ODksIDB4ZTAyYyksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIA0K PiArfSwNCj4gIA0KPiAgCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUg Ki8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwM2MpLCAuZHJpdmVyX2luZm8gPSBCVFVT Ql9BVEgzMDEyIH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDNjKSwgLmRyaXZlcl9p bmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJmF0aDMwMTIgfSwNCj4gIA0KPiAgCS8qIEJyb2Fk Y29tIEJDTTIwMzUgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzUpLCAuZHJpdmVy X2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MGE1Yywg MHgyMDBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LA0KPiAtCXsgVVNC X0RFVklDRSgweDBhNWMsIDB4MjAwOSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JDTTkyMDM1IH0s DQo+ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM1KSwgLmRyaXZlcl9pbmZvID0gKHVuc2ln bmVkIGxvbmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgy MDBhKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+ ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDA5KSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVk IGxvbmcpIA0KPiArJmJjbTkyMDM1IH0sDQo+ICANCj4gIAkvKiBCcm9hZGNvbSBCQ00yMDQ1ICov DQo+IC0JeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM5KSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf V1JPTkdfU0NPX01UVSB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjEwMSksIC5kcml2 ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVj LCAweDIwMzkpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJndyb25nX3Njb19tdHUg fSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxMDEpLCAuZHJpdmVyX2luZm8gPSAodW5z aWduZWQgbG9uZykgDQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogSUJNL0xlbm92 byBUaGlua1BhZCB3aXRoIEJyb2FkY29tIGNoaXAgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVj LCAweDIwMWUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+IC0JeyBV U0JfREVWSUNFKDB4MGE1YywgMHgyMTEwKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NP X01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAxZSksIC5kcml2ZXJfaW5mbyA9 ICh1bnNpZ25lZCBsb25nKSAmd3Jvbmdfc2NvX210dSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBh NWMsIDB4MjExMCksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19z Y29fbXR1IH0sDQo+ICANCj4gIAkvKiBIUCBsYXB0b3Agd2l0aCBCcm9hZGNvbSBjaGlwICovDQo+ IC0JeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgxNzFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JP TkdfU0NPX01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MTcxZCksIC5kcml2ZXJf aW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19zY29fbXR1IH0sDQo+ICANCj4gIAkv KiBEZWxsIGxhcHRvcCB3aXRoIEJyb2FkY29tIGNoaXAgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHg0 MTNjLCAweDgxMjYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+ICsJ eyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTI2KSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxv bmcpIA0KPiArJndyb25nX3Njb19tdHUgfSwNCj4gIA0KPiAgCS8qIERlbGwgV2lyZWxlc3MgMzcw IGFuZCA0MTAgZGV2aWNlcyAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDQxM2MsIDB4ODE1MiksIC5k cml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHg0 MTNjLCAweDgxNTYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+ICsJ eyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTUyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxv bmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTU2KSwg LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJndyb25nX3Njb19tdHUgfSwNCj4g IA0KPiAgCS8qIEJlbGtpbiBGOFQwMTIgYW5kIEY4VDAxMyBkZXZpY2VzICovDQo+IC0JeyBVU0Jf REVWSUNFKDB4MDUwZCwgMHgwMDEyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01U VSB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAxMyksIC5kcml2ZXJfaW5mbyA9IEJU VVNCX1dST05HX1NDT19NVFUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTIpLCAu ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJndyb25nX3Njb19tdHUgfSwNCj4gKwl7IFVT Ql9ERVZJQ0UoMHgwNTBkLCAweDAwMTMpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykg DQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogQXN1cyBXTC1CVEQyMDIgZGV2aWNl ICovDQo+IC0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzE1KSwgLmRyaXZlcl9pbmZvID0gQlRV U0JfV1JPTkdfU0NPX01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcxNSksIC5k cml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19zY29fbXR1IH0sDQo+ICAN Cj4gIAkvKiBLZW5zaW5ndG9uIEJsdWV0b290aCBVU0IgYWRhcHRlciAqLw0KPiAtCXsgVVNCX0RF VklDRSgweDA0N2QsIDB4MTA1ZSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUg fSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDEwNWUpLCAuZHJpdmVyX2luZm8gPSAodW5z aWduZWQgbG9uZykgDQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogUlRYIFRlbGVj b20gYmFzZWQgYWRhcHRlcnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLw0KPiAtCXsgVVNCX0RF VklDRSgweDA0MDAsIDB4MDgwNyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JST0tFTl9JU09DIH0s DQo+IC0JeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf QlJPS0VOX0lTT0MgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNDAwLCAweDA4MDcpLCAuZHJpdmVy X2luZm8gPSAodW5zaWduZWQgbG9uZykgJmJyb2tlbl9pc29jIH0sDQo+ICsJeyBVU0JfREVWSUNF KDB4MDQwMCwgMHgwODBhKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJmJy b2tlbl9pc29jIH0sDQo+ICANCj4gIAkvKiBDT05XSVNFIFRlY2hub2xvZ3kgYmFzZWQgYWRhcHRl cnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDBlNWUsIDB4 NjYyMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JST0tFTl9JU09DIH0sDQo+ICsJeyBVU0JfREVW SUNFKDB4MGU1ZSwgMHg2NjIyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiAr JmJyb2tlbl9pc29jIH0sDQo+ICANCj4gIAkvKiBEaWdpYW5zd2VyIGRldmljZXMgKi8NCj4gLQl7 IFVTQl9ERVZJQ0UoMHgwOGZkLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9ESUdJQU5T V0VSIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0g QlRVU0JfSUdOT1JFIH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAxKSwgLmRyaXZl cl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZkaWdpYW5zd2VyIH0sDQo+ICsJeyBVU0JfREVWSUNF KDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZpZ25vcmUg DQo+ICt9LA0KPiAgDQo+ICAJLyogQ1NSIEJsdWVDb3JlIEJsdWV0b290aCBTbmlmZmVyICovDQo+ IC0JeyBVU0JfREVWSUNFKDB4MGExMiwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfU05J RkZFUiB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBhMTIsIDB4MDAwMiksIC5kcml2ZXJfaW5mbyA9 ICh1bnNpZ25lZCBsb25nKSANCj4gKyZzbmlmZmVyIH0sDQo+ICANCj4gIAkvKiBGcm9udGxpbmUg Q29tUHJvYmUgQmx1ZXRvb3RoIFNuaWZmZXIgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgxNmQzLCAw eDAwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9TTklGRkVSIH0sDQo+ICsJeyBVU0JfREVWSUNF KDB4MTZkMywgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJnNu aWZmZXIgfSwNCj4gIA0KPiAgCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLw0KPiAgfTsNCj4g QEAgLTkxMCwxMiArOTU1LDEyIEBAIHN0YXRpYyB2b2lkIGJ0dXNiX3dha2VyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykNCj4gIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7 DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBpbnQgYnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZh Y2UgKmludGYsDQo+IC0JCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQ0KPiAraW50 IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgDQo+ ICt1c2JfZGV2aWNlX2lkICppZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2Ny aXB0b3IgKmVwX2Rlc2M7DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGE7DQo+ICAJc3RydWN0 IGhjaV9kZXYgKmhkZXY7DQo+ICsJc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvICppbmZvOw0KPiAg CWludCBpLCBlcnI7DQo+ICANCj4gIAlCVF9EQkcoImludGYgJXAgaWQgJXAiLCBpbnRmLCBpZCk7 DQo+IEBAIC05MzEsMTkgKzk3NiwyOCBAQCBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1 c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQkJaWQgPSBtYXRjaDsNCj4gIAl9DQo+ICANCj4gLQlp ZiAoaWQtPmRyaXZlcl9pbmZvID09IEJUVVNCX0lHTk9SRSkNCj4gKwkvKg0KPiArCSAqIE1ha2Ug c3VyZSB0aGUgZHJpdmVyX2luZm8gaXMgbm90IG51bGwgb3IgMCBiZWNhdXNlIHRoZSBjb2RlIGJl bG93DQo+ICsJICogbmVlZCB0byBhY2Nlc3MgdGhlIGZsYWdzDQo+ICsJICovDQo+ICsJaWYgKCFp ZC0+ZHJpdmVyX2luZm8pDQo+ICsJCWluZm8gPSAoc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvICop ICZnZW5lcmljOw0KPiArCWVsc2UNCj4gKwkJaW5mbyA9IChzdHJ1Y3QgYnR1c2JfZHJpdmVyX2lu Zm8gKikgaWQtPmRyaXZlcl9pbmZvOw0KPiArDQo+ICsJaWYgKGluZm8tPmZsYWdzID09IEJUVVNC X0lHTk9SRSkNCj4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICANCj4gLQlpZiAoaWdub3JlX2RnYSAm JiBpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9ESUdJQU5TV0VSKQ0KPiArCWlmIChpZ25vcmVfZGdh ICYmIChpbmZvLT5mbGFncyAmIEJUVVNCX0RJR0lBTlNXRVIpKQ0KPiAgCQlyZXR1cm4gLUVOT0RF VjsNCj4gIA0KPiAtCWlmIChpZ25vcmVfY3NyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0NT UikNCj4gKwlpZiAoaWdub3JlX2NzciAmJiAoaW5mby0+ZmxhZ3MgJiBCVFVTQl9DU1IpKQ0KPiAg CQlyZXR1cm4gLUVOT0RFVjsNCj4gIA0KPiAtCWlmIChpZ25vcmVfc25pZmZlciAmJiBpZC0+ZHJp dmVyX2luZm8gJiBCVFVTQl9TTklGRkVSKQ0KPiArCWlmIChpZ25vcmVfc25pZmZlciAmJiAoaW5m by0+ZmxhZ3MgJiBCVFVTQl9TTklGRkVSKSkNCj4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICANCj4g LQlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQVRIMzAxMikgew0KPiArCWlmIChpbmZvLT5m bGFncyAmIEJUVVNCX0FUSDMwMTIpIHsNCj4gIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBp bnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOw0KPiAgDQo+ICAJCS8qIE9sZCBmaXJtd2FyZSB3b3Vs ZCBvdGhlcndpc2UgbGV0IGF0aDNrIGRyaXZlciBsb2FkIEBAIC0xMDEyLDI2IA0KPiArMTA2Niwz MCBAQCBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0K PiAgCWhkZXYtPnNlbmQgICAgID0gYnR1c2Jfc2VuZF9mcmFtZTsNCj4gIAloZGV2LT5ub3RpZnkg ICA9IGJ0dXNiX25vdGlmeTsNCj4gIA0KPiArCS8qIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5p dGlhbGl6YXRpb24gcm91dGluZXMgKi8NCj4gKwloZGV2LT52c2Rldl9pbml0ID0gaW5mby0+dnNk ZXZfaW5pdDsNCj4gKwloZGV2LT52c2Rldl9ldmVudCA9IGluZm8tPnZzZGV2X2V2ZW50Ow0KPiAr DQo+ICAJLyogSW50ZXJmYWNlIG51bWJlcnMgYXJlIGhhcmRjb2RlZCBpbiB0aGUgc3BlY2lmaWNh dGlvbiAqLw0KPiAgCWRhdGEtPmlzb2MgPSB1c2JfaWZudW1fdG9faWYoZGF0YS0+dWRldiwgMSk7 DQo+ICANCj4gIAlpZiAoIXJlc2V0KQ0KPiAgCQlzZXRfYml0KEhDSV9RVUlSS19SRVNFVF9PTl9D TE9TRSwgJmhkZXYtPnF1aXJrcyk7DQo+ICANCj4gLQlpZiAoZm9yY2Vfc2NvZml4IHx8IGlkLT5k cml2ZXJfaW5mbyAmIEJUVVNCX1dST05HX1NDT19NVFUpIHsNCj4gKwlpZiAoZm9yY2Vfc2NvZml4 IHx8IChpbmZvLT5mbGFncyAmIEJUVVNCX1dST05HX1NDT19NVFUpKSB7DQo+ICAJCWlmICghZGlz YWJsZV9zY29maXgpDQo+ICAJCQlzZXRfYml0KEhDSV9RVUlSS19GSVhVUF9CVUZGRVJfU0laRSwg JmhkZXYtPnF1aXJrcyk7DQo+ICAJfQ0KPiAgDQo+IC0JaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJU VVNCX0JST0tFTl9JU09DKQ0KPiArCWlmIChpbmZvLT5mbGFncyAmIEJUVVNCX0JST0tFTl9JU09D KQ0KPiAgCQlkYXRhLT5pc29jID0gTlVMTDsNCj4gIA0KPiAtCWlmIChpZC0+ZHJpdmVyX2luZm8g JiBCVFVTQl9ESUdJQU5TV0VSKSB7DQo+ICsJaWYgKGluZm8tPmZsYWdzICYgQlRVU0JfRElHSUFO U1dFUikgew0KPiAgCQlkYXRhLT5jbWRyZXFfdHlwZSA9IFVTQl9UWVBFX1ZFTkRPUjsNCj4gIAkJ c2V0X2JpdChIQ0lfUVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2LT5xdWlya3MpOw0KPiAgCX0N Cj4gIA0KPiAtCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9DU1IpIHsNCj4gKwlpZiAoaW5m by0+ZmxhZ3MgJiBCVFVTQl9DU1IpIHsNCj4gIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBk YXRhLT51ZGV2Ow0KPiAgDQo+ICAJCS8qIE9sZCBmaXJtd2FyZSB3b3VsZCBvdGhlcndpc2UgZXhl Y3V0ZSBVU0IgcmVzZXQgKi8gQEAgLTEwMzksNyANCj4gKzEwOTcsNyBAQCBzdGF0aWMgaW50IGJ0 dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQkJc2V0X2JpdChIQ0lf UVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2LT5xdWlya3MpOw0KPiAgCX0NCj4gIA0KPiAtCWlm IChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9TTklGRkVSKSB7DQo+ICsJaWYgKGluZm8tPmZsYWdz ICYgQlRVU0JfU05JRkZFUikgew0KPiAgCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRhdGEt PnVkZXY7DQo+ICANCj4gIAkJLyogTmV3IHNuaWZmZXIgZmlybXdhcmUgaGFzIGNyaXBwbGVkIEhD SSBpbnRlcmZhY2UgKi8gQEAgLTEwNDksNyANCj4gKzExMDcsNyBAQCBzdGF0aWMgaW50IGJ0dXNi X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQlkYXRhLT5pc29jID0gTlVM TDsNCj4gIAl9DQo+ICANCj4gLQlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQkNNOTIwMzUp IHsNCj4gKwlpZiAoaW5mby0+ZmxhZ3MgJiBCVFVTQl9CQ005MjAzNSkgew0KPiAgCQl1bnNpZ25l ZCBjaGFyIGNtZFtdID0geyAweDNiLCAweGZjLCAweDAxLCAweDAwIH07DQo+ICAJCXN0cnVjdCBz a19idWZmICpza2I7DQo+ICANCj4gQEAgLTEwNzksOCArMTEzNyw5IEBAIHN0YXRpYyBpbnQgYnR1 c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgDQo+ICppbnRmLA0KPiAgDQo+ICAJcmV0dXJu IDA7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChidHVzYl9wcm9iZSk7DQo+ICANCj4gLXN0 YXRpYyB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+ ICt2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+ICB7 DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOw0K PiAgCXN0cnVjdCBoY2lfZGV2ICpoZGV2Ow0KPiBAQCAtMTEwNSw5ICsxMTY0LDEwIEBAIHN0YXRp YyB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IA0KPiB1c2JfaW50ZXJmYWNlICppbnRmKQ0K PiAgDQo+ICAJaGNpX2ZyZWVfZGV2KGhkZXYpOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwo YnR1c2JfZGlzY29ubmVjdCk7DQo+ICANCj4gICNpZmRlZiBDT05GSUdfUE0NCj4gLXN0YXRpYyBp bnQgYnR1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90 IA0KPiBtZXNzYWdlKQ0KPiAraW50IGJ0dXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2Ug KmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQ0KPiAgew0KPiAgCXN0cnVjdCBidHVzYl9kYXRh ICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsNCj4gIA0KPiBAQCAtMTEzMyw2ICsxMTkz LDcgQEAgc3RhdGljIGludCBidHVzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlIA0KPiAq aW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpDQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4g K0VYUE9SVF9TWU1CT0xfR1BMKGJ0dXNiX3N1c3BlbmQpOw0KPiAgDQo+ICBzdGF0aWMgdm9pZCBw bGF5X2RlZmVycmVkKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKSAgeyBAQCAtMTE0OSw3IA0KPiAr MTIxMCw3IEBAIHN0YXRpYyB2b2lkIHBsYXlfZGVmZXJyZWQoc3RydWN0IGJ0dXNiX2RhdGEgKmRh dGEpDQo+ICAJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmZGF0YS0+ZGVmZXJyZWQpOw0KPiAg fQ0KPiAgDQo+IC1zdGF0aWMgaW50IGJ0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAq aW50ZikNCj4gK2ludCBidHVzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+ ICB7DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYp Ow0KPiAgCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YS0+aGRldjsNCj4gQEAgLTEyMDUsOCAr MTI2NiwxMCBAQCBkb25lOg0KPiAgDQo+ICAJcmV0dXJuIGVycjsNCj4gIH0NCj4gK0VYUE9SVF9T WU1CT0xfR1BMKGJ0dXNiX3Jlc3VtZSk7DQo+ICAjZW5kaWYNCj4gIA0KPiArDQo+ICBzdGF0aWMg c3RydWN0IHVzYl9kcml2ZXIgYnR1c2JfZHJpdmVyID0gew0KPiAgCS5uYW1lCQk9ICJidHVzYiIs DQo+ICAJLnByb2JlCQk9IGJ0dXNiX3Byb2JlLA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVl dG9vdGgvYnR1c2IuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmggbmV3IA0KPiBmaWxlIG1v ZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLmMyNmE4NDUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5oDQo+IEBAIC0wLDAgKzEsNTMgQEANCj4gKy8qDQo+ ICsgKg0KPiArICogIEdlbmVyaWMgQmx1ZXRvb3RoIFVTQiBkcml2ZXINCj4gKyAqDQo+ICsgKiAg Q29weXJpZ2h0IChDKSAyMDA1LTIwMDggIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5u Lm9yZz4NCj4gKyAqDQo+ICsgKg0KPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgDQo+ICttb2RpZnkNCj4gKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCANCj4gK2J5DQo+ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCj4gKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLg0KPiArICoNCj4gKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiAr ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUNCj4gKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLg0KPiArICoNCj4gKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KPiArICogIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiAgRm91bmRhdGlv biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIA0KPiArMDIx MTEtMTMwNyAgVVNBDQo+ICsgKg0KPiArICovDQo+ICsjaWZuZGVmIF9CVFVTQl9IDQo+ICsjZGVm aW5lIF9CVFVTQl9IDQo+ICsNCj4gK3N0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyB7DQo+ICsJY2hh cgkqZGVzY3JpcHRpb247DQo+ICsJaW50CWZsYWdzOw0KPiArI2RlZmluZSBCVFVTQl9HRU5FUklD CQkweDAwDQo+ICsjZGVmaW5lIEJUVVNCX0lHTk9SRQkJMHgwMQ0KPiArI2RlZmluZSBCVFVTQl9E SUdJQU5TV0VSCTB4MDINCj4gKyNkZWZpbmUgQlRVU0JfQ1NSCQkweDA0DQo+ICsjZGVmaW5lIEJU VVNCX1NOSUZGRVIJCTB4MDgNCj4gKyNkZWZpbmUgQlRVU0JfQkNNOTIwMzUJCTB4MTANCj4gKyNk ZWZpbmUgQlRVU0JfQlJPS0VOX0lTT0MJMHgyMA0KPiArI2RlZmluZSBCVFVTQl9XUk9OR19TQ09f TVRVCTB4NDANCj4gKyNkZWZpbmUgQlRVU0JfQVRIMzAxMgkJMHg4MA0KPiArDQo+ICsJLyogZW50 cnkgcG9pbnQgZm9yIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8NCj4g KwlpbnQJKCp2c2Rldl9pbml0KShzdHJ1Y3QgaGNpX2RldiAqaGRldik7DQoNCj4+IEtlZXAgaXQg c2ltcGxlLiBDYWxsIHRoaXMgKCpzZXR1cCkuDQoNCj4gKw0KPiArCS8qIGV2ZW50IGhhbmRsZXIg ZHVyaW5nIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhdGlvbiBwaGFzZSAqLw0KPiArCXZv aWQJKCp2c2Rldl9ldmVudCkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpz a2IpOw0KDQo+PkFuZCB0aGlzIGp1c3QgKCpldmVudCkuDQoNCj4+IEkgYW0gc3RpbGwgY3VyaW91 cyBpZiB3ZSB3b3VsZCBuZWVkIHRoZSBldmVudCBwYXJ0IGF0IGFsbCB3aGVuIHVzaW5nIEhDSSBj b21tYW5kIGhhbmRsaW5nIHdpdGggY2FsbGJhY2tzLCBidXQgSSBrbm93IGF0IGxlYXN0IHRoYXQg Q1NSIGlzIG5vdCBmb2xsb3dpbmcgdGhlIEhDSSBzcGVjaWZpY2F0aW9uIGZvciBjb21tYW5kICsg ZXZlbnQsIHNvIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhLg0KDQo+ICt9Ow0KPiArDQo+ICtleHRl cm4gaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCAN Cj4gK3VzYl9kZXZpY2VfaWQgKik7IGV4dGVybiB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0 IHVzYl9pbnRlcmZhY2UgDQo+ICsqKTsgI2lmZGVmIENPTkZJR19QTSBleHRlcm4gaW50IGJ0dXNi X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwgDQo+ICtwbV9tZXNzYWdlX3QpOyBleHRl cm4gaW50IGJ0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsgDQo+ICsjZW5kaWYN Cj4gKw0KPiArI2VuZGlmIC8qIF9CVFVTQl9IICovDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL25l dC9ibHVldG9vdGgvaGNpX2NvcmUuaCANCj4gYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2Nv cmUuaA0KPiBpbmRleCA2YTMzMzdlLi40YWY2MDFkIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL25l dC9ibHVldG9vdGgvaGNpX2NvcmUuaA0KPiArKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNp X2NvcmUuaA0KPiBAQCAtMjc1LDYgKzI3NSwxNiBAQCBzdHJ1Y3QgaGNpX2RldiB7DQo+ICAJaW50 ICgqc2VuZCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7DQo+ICAJdm9pZCAoKm5vdGlmeSkoc3RydWN0 IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGludCBldnQpOw0KPiAgCWludCAoKmlvY3RsKShzdHJ1 Y3QgaGNpX2RldiAqaGRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyANCj4gYXJn KTsNCj4gKw0KPiArCS8qDQo+ICsJICogVE9ETzogQWRkZWQgZm9sbG93aW5nIG1lbWJlcnMgZm9y IHZlbmRvciBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0bw0KPiArCSAqIG1ha2UgdGhlIGJsdWV0 b290aC5rbyB0cmFuc3BhcmVudCB0byB0aGUgaW50ZXJmYWNlLg0KPiArCSAqIFRoZXNlIG1lbWJl cnMgYXJlIHNldCBieSB0aGUgdmVuZG9yIHByb3ZpZGVkIGRyaXZlcg0KPiArCSAqLw0KPiArCWlu dAkJCXZzZGV2X2luaXRfZG9uZTsNCg0KPj4gRm9yIHRoaXMsIHBsZWFzZSB1c2UgZGV2X2ZsYWdz LiBObyBuZWVkIHdhc3RlIHNwYWNlIHdpdGggYW5vdGhlciB2YXJpYWJsZS4NCg0KPiArCXZvaWQJ CQkqdnNkZXZfcHJpdl9kYXRhOw0KPiArCWludCAoKnZzZGV2X2luaXQpKHN0cnVjdCBoY2lfZGV2 ICpoZGV2KTsNCj4gKwl2b2lkICgqdnNkZXZfZXZlbnQpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCj4gIH07DQoNCj4+IFJhdGhlciBsaWtlIHZlbmRvcl9zZXR1 cCBhbmQgdmVuZG9yX2V2ZW50IGhlcmUuIEkgZG8gbm90IGV2ZW4gd2FudCB0byBrbm93IHdoYXQg dnMgc3RhbmRzIGZvciA7KQ0KDQo+PiBIb3BlIHdlIGFyZSBub3QgZ2V0dGluZyBpbnRvIHRyb3Vi bGUgd2l0aCBkcml2ZXIgaWQgdGFibGVzIG5vcm1hbGx5IGJlaW5nIGNvbnN0Lg0KDQo+ICANCj4g IHN0cnVjdCBoY2lfY29ubiB7DQo+IGRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3Jl LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgaW5kZXggDQo+IGU0MDcwNTEuLjgwYWExM2Yg MTAwNjQ0DQo+IC0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYw0KPiArKysgYi9uZXQvYmx1 ZXRvb3RoL2hjaV9jb3JlLmMNCj4gQEAgLTY4NSw2ICs2ODUsMTUgQEAgaW50IGhjaV9kZXZfb3Bl bihfX3UxNiBkZXYpDQo+ICAJCXNldF9iaXQoSENJX0lOSVQsICZoZGV2LT5mbGFncyk7DQo+ICAJ CWhkZXYtPmluaXRfbGFzdF9jbWQgPSAwOw0KPiAgDQo+ICsJCS8qIHZlbmRvciBzcGVjaWZpYyBk ZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8NCj4gKwkJaWYgKGhkZXYtPnZzZGV2X2luaXQpIHsNCj4g KwkJCXJldCA9IGhkZXYtPnZzZGV2X2luaXQoaGRldik7DQo+ICsJCQloZGV2LT52c2Rldl9pbml0 X2RvbmUgPSAxOw0KPiArCQkJaGRldi0+dnNkZXZfZXZlbnQgPSBOVUxMOw0KPiArCQkJaWYgKHJl dCA8IDApDQo+ICsJCQkJZ290byBkb25lOw0KPiArCQl9DQo+ICsNCg0KPj4gRG8geW91IHJlYWxs eSB3YW50IHRvIGRvIHRoaXMgb24gZXZlcnkgaGNpY29uZmlnIGhjaTAgdXA/IEkgYXNzdW1lZCB0 aGlzIGlzIGEgb25lIHRpbWUgdGFzay4gU28geW91IG1pZ2h0IGJldHRlciBsb29rIGF0IGhjaV9w b3dlcl9vbigpIGZvciB0aGlzLg0KDQo+PiBJcyBhIEhDSV9SZXNldCBjb21tYW5kIHVubG9hZGlu ZyB0aGUgZmlybXdhcmUgcGF0Y2hlcy4NCg0KPiAgCQlyZXQgPSBfX2hjaV9yZXF1ZXN0KGhkZXYs IGhjaV9pbml0X3JlcSwgMCwgSENJX0lOSVRfVElNRU9VVCk7DQo+ICANCj4gIAkJaWYgKGxtcF9o b3N0X2xlX2NhcGFibGUoaGRldikpDQo+IEBAIC0yMTE5LDYgKzIxMjgsNyBAQCBpbnQgaGNpX3Nl bmRfY21kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3UxNiANCj4gb3Bjb2RlLCBfX3UzMiBwbGVu LCB2b2lkICpwYXJhbSkNCj4gIA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJP TChoY2lfc2VuZF9jbWQpOw0KPiAgDQo+ICAvKiBHZXQgZGF0YSBmcm9tIHRoZSBwcmV2aW91c2x5 IHNlbnQgY29tbWFuZCAqLyAgdm9pZCANCj4gKmhjaV9zZW50X2NtZF9kYXRhKHN0cnVjdCBoY2lf ZGV2ICpoZGV2LCBfX3UxNiBvcGNvZGUpIEBAIC0yODAwLDcgDQo+ICsyODEwLDEwIEBAIHN0YXRp YyB2b2lkIGhjaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gIAkJc3dpdGNo IChidF9jYihza2IpLT5wa3RfdHlwZSkgew0KPiAgCQljYXNlIEhDSV9FVkVOVF9QS1Q6DQo+ICAJ CQlCVF9EQkcoIiVzIEV2ZW50IHBhY2tldCIsIGhkZXYtPm5hbWUpOw0KPiAtCQkJaGNpX2V2ZW50 X3BhY2tldChoZGV2LCBza2IpOw0KPiArCQkJaWYgKGhkZXYtPnZzZGV2X2V2ZW50ICYmICFoZGV2 LT52c2Rldl9pbml0X2RvbmUpDQo+ICsJCQkJaGRldi0+dnNkZXZfZXZlbnQoaGRldiwgc2tiKTsN Cj4gKwkJCWVsc2UNCj4gKwkJCQloY2lfZXZlbnRfcGFja2V0KGhkZXYsIHNrYik7DQo+ICAJCQli cmVhazsNCg0KPj4gTm90IGdvaW5nIHRocm91Z2ggaGNpX2V2ZW50X3BhY2tldCBpcyBhIGJhZCBp ZGVhLiBUaGF0IHdpbGwgc2NyZXcgb3ZlciB0aGUgZmxvdyBjb250cm9sIGhhbmRsaW5nIGZvciBj b21tYW5kcy4NCg0KPj4gUmVnYXJkcw0KDQo+PiBNYXJjZWwNCg0KUmVnYXJkcywNCkFsYmVydA0K DQoNCg0K