From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Cameron Subject: Re: [PATCH v2 20/25] power: supply: add battery driver for AXP20X and AXP22X PMICs Date: Sat, 28 Jan 2017 14:54:26 +0000 Message-ID: References: <20170127085458.18270-1-quentin.schulz@free-electrons.com> <20170127085458.18270-21-quentin.schulz@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170127085458.18270-21-quentin.schulz@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Quentin Schulz , knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, robh+dt@kernel.org, mark.rutland@arm.com, wens@csie.org, sre@kernel.org, linux@armlinux.org.uk, maxime.ripard@free-electrons.com, lee.jones@linaro.org Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, bonbons@linux-vserver.org, icenowy@aosc.xyz, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gMjcvMDEvMTcgMDg6NTQsIFF1ZW50aW4gU2NodWx6IHdyb3RlOgo+IFRoZSBYLVBvd2VycyBB WFAyMFggYW5kIEFYUDIyWCBQTUlDcyBjYW4gaGF2ZSBhIGJhdHRlcnkgYXMgcG93ZXIgc3VwcGx5 Lgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUgYmF0dGVyeSBwb3dlciBzdXBwbHkgZHJpdmVyIHRv IGdldCB2YXJpb3VzIGRhdGEgZnJvbQo+IHRoZSBQTUlDLCBzdWNoIGFzIHRoZSBiYXR0ZXJ5IHN0 YXR1cyAoY2hhcmdpbmcsIGRpc2NoYXJnaW5nLCBmdWxsLAo+IGRlYWQpLCBjdXJyZW50IG1heCBs aW1pdCwgY3VycmVudCBjdXJyZW50LCBiYXR0ZXJ5IGNhcGFjaXR5IChpbgo+IHBlcmNlbnRhZ2Up LCB2b2x0YWdlIG1heCBhbmQgbWluIGxpbWl0cywgY3VycmVudCB2b2x0YWdlIGFuZCBiYXR0ZXJ5 Cj4gY2FwYWNpdHkgKGluIEFoKS4KPiAKPiBUaGlzIGJhdHRlcnkgZHJpdmVyIHVzZXMgdGhlIEFY UDIwWC9BWFAyMlggQURDIGRyaXZlciBhcyBQTUlDIGRhdGEKPiBwcm92aWRlci4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMu Y29tPgpGb3IgSUlPIGJpdHMKQWNrZWQtYnk6IEpvbmF0aGFuIENhbWVyb24gPGppYzIzQGtlcm5l bC5vcmc+Cj4gLS0tCj4gCj4gdjI6Cj4gIC0gY2hhbmdlZCBCSVQoeCkgdG8gMSA8PCB4IHdoZW4g ZGVzY3JpYmluZyBiaXRzIHB1cnBvc2UgZm9yIHdoaWNoIDIgPDwKPiAgeCBvciAzIDw8IHggZXhp c3RzLCB0byBiZSBjb25zaXN0ZW50LAo+ICAtIHN3aXRjaGVkIGZyb20gUE9XRVJfU1VQUExZX1BS T1BfQ1VSUkVOVF9NQVggdG8KPiAgUE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hBUkdFX0NV UlJFTlQsCj4gIC0gYWRkZWQgUE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hBUkdFX0NVUlJF TlRfTUFYIHRvIHRoZSBsaXN0IG9mCj4gIHJlYWRhYmxlIHByb3BlcnRpZXMsCj4gIC0gcmVwbGFj ZWQgwrUgY2hhcmFjdGVyIGJ5IGEgY29tbW9uIHUgZm9yIG1pY3JvIHVuaXRzIHRvIG1ha2UgY2hl Y2twYXRjaAo+ICBoYXBweSwKPiAgLSBmYWN0b3JpemVkIGNvZGUgaW4gYXhwMjB4X2JhdHRlcnlf c2V0X21heF92b2x0YWdlLAo+ICAtIGFkZGVkIGEgYXhwMjB4X3NldF9jb25zdGFudF9jaGFyZ2Vf Y3VycmVudCBmdW5jdGlvbiB0byBiZSB1c2VkIHdoZW4KPiAgc2V0dGluZyB0aGUgdmFsdWUgZnJv bSBzeXNmcyBhbmQgZnJvbSB0aGUgRFQsCj4gIC0gcmVtb3ZlZCBzb21lIGRlYWQgY29kZSwKPiAg LSBhZGRlZCBhIERUIHByb3BlcnR5IHRvIHNldCBjb25zdGFudCBjdXJyZW50IGNoYXJnZSBvZiB0 aGUgYmF0dGVyeQo+ICAoeC1wb3dlcnMsY29uc3RhbnQtY2hhcmdlLWN1cnJlbnQpLAo+ICAtIG1p Z3JhdGVkIHRvIGRldl9nZXRfcmVnbWFwIGluc3RlYWQgb2YgbWFudWFsbHkgbG9va2luZyBmb3Ig dGhlIHJlZ21hcAo+ICBpbiB0aGUgZHJ2ZGF0YSBvZiB0aGUgcGFyZW50LAo+ICAtIHN3aXRjaGVk IGZyb20gaW50IHRvIHVpbnRwdHJfdCBjYXN0IHRvIG1ha2Ugc3VyZSB0aGUgY2FzdCBpcyBhbHdh eXMKPiAgZm9yIHRoZSBzYW1lIHNpemUgdHlwZSAobWFrZSBidWlsZCBvbiA2NGJpdHMgcGxhdGZv cm1zIGhhcHB5IG1haW5seSksCj4gCj4gIGRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcgICAg ICAgICAgfCAgMTIgKwo+ICBkcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZSAgICAgICAgIHwg ICAxICsKPiAgZHJpdmVycy9wb3dlci9zdXBwbHkvYXhwMjB4X2JhdHRlcnkuYyB8IDQ3NyArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNDkwIGlu c2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcG93ZXIvc3VwcGx5L2F4 cDIweF9iYXR0ZXJ5LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9zdXBwbHkvS2Nv bmZpZyBiL2RyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcKPiBpbmRleCBjNTUyYjRiLi40ODYx OWRlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcKPiArKysgYi9k cml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnCj4gQEAgLTIyNiw2ICsyMjYsMTggQEAgY29uZmln IENIQVJHRVJfQVhQMjBYCj4gIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEg bW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlCj4gIAkgIGNhbGxlZCBheHAyMHhfYWNf cG93ZXIuCj4gIAo+ICtjb25maWcgQkFUVEVSWV9BWFAyMFgKPiArCXRyaXN0YXRlICJYLVBvd2Vy cyBBWFAyMFggYmF0dGVyeSBkcml2ZXIiCj4gKwlkZXBlbmRzIG9uIE1GRF9BWFAyMFgKPiArCWRl cGVuZHMgb24gQVhQMjBYX0FEQwo+ICsJZGVwZW5kcyBvbiBJSU8KPiArCWhlbHAKPiArCSAgU2F5 IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQVhQMjBYIFBNSUNzJyBiYXR0 ZXJ5IHBvd2VyCj4gKwkgIHN1cHBseS4KPiArCj4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJl IGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlCj4gKwkgIGNhbGxl ZCBheHAyMHhfYmF0dGVyeS4KPiArCj4gIGNvbmZpZyBBWFAyODhfQ0hBUkdFUgo+ICAJdHJpc3Rh dGUgIlgtUG93ZXJzIEFYUDI4OCBDaGFyZ2VyIgo+ICAJZGVwZW5kcyBvbiBNRkRfQVhQMjBYICYm IEVYVENPTl9BWFAyODgKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9zdXBwbHkvTWFrZWZp bGUgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQo+IGluZGV4IDdkMjI0MTcuLjVhMjE3 YjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wb3dlci9zdXBwbHkvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQo+IEBAIC0xOCw2ICsxOCw3IEBAIG9iai0kKENP TkZJR19URVNUX1BPV0VSKQkrPSB0ZXN0X3Bvd2VyLm8KPiAgCj4gIG9iai0kKENPTkZJR19CQVRU RVJZXzg4UE04NjBYKQkrPSA4OHBtODYweF9iYXR0ZXJ5Lm8KPiAgb2JqLSQoQ09ORklHX0JBVFRF UllfQUNUODk0NUEpCSs9IGFjdDg5NDVhX2NoYXJnZXIubwo+ICtvYmotJChDT05GSUdfQkFUVEVS WV9BWFAyMFgpCSs9IGF4cDIweF9iYXR0ZXJ5Lm8KPiAgb2JqLSQoQ09ORklHX0NIQVJHRVJfQVhQ MjBYKQkrPSBheHAyMHhfYWNfcG93ZXIubwo+ICBvYmotJChDT05GSUdfQkFUVEVSWV9EUzI3NjAp CSs9IGRzMjc2MF9iYXR0ZXJ5Lm8KPiAgb2JqLSQoQ09ORklHX0JBVFRFUllfRFMyNzgwKQkrPSBk czI3ODBfYmF0dGVyeS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L2F4cDIw eF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9heHAyMHhfYmF0dGVyeS5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kZDA0MGI4Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvcG93ZXIvc3VwcGx5L2F4cDIweF9iYXR0ZXJ5LmMKPiBAQCAtMCww ICsxLDQ3NyBAQAo+ICsvKgo+ICsgKiBCYXR0ZXJ5IHBvd2VyIHN1cHBseSBkcml2ZXIgZm9yIFgt UG93ZXJzIEFYUDIwWCBhbmQgQVhQMjJYIFBNSUNzCj4gKyAqCj4gKyAqIENvcHlyaWdodCAyMDE2 IEZyZWUgRWxlY3Ryb25zIE5leHRUaGluZyBDby4KPiArICoJUXVlbnRpbiBTY2h1bHogPHF1ZW50 aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBkcml2ZXIgaXMg YmFzZWQgb24gYSBwcmV2aW91cyB1cHN0cmVhbWluZyBhdHRlbXB0IGJ5Ogo+ICsgKglCcnVubyBQ csOpbW9udCA8Ym9uYm9uc0BsaW51eC12c2VydmVyLm9yZz4KPiArICoKPiArICogVGhpcyBmaWxl IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJh bAo+ICsgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcwo+ICsgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2lycS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC90aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9paW8vaWlvLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9paW8vY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9h eHAyMHguaD4KPiArCj4gKyNkZWZpbmUgQVhQMjBYX1BXUl9TVEFUVVNfQkFUX0NIQVJHSU5HCUJJ VCgyKQo+ICsKPiArI2RlZmluZSBBWFAyMFhfUFdSX09QX0JBVFRfUFJFU0VOVAlCSVQoNSkKPiAr I2RlZmluZSBBWFAyMFhfUFdSX09QX0JBVFRfQUNUSVZBVEVECUJJVCgzKQo+ICsKPiArI2RlZmlu ZSBBWFAyMDlfRkdfUEVSQ0VOVAkJR0VOTUFTSyg2LCAwKQo+ICsjZGVmaW5lIEFYUDIyWF9GR19W QUxJRAkJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVAlH RU5NQVNLKDYsIDUpCj4gKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUXzRfMVYJKDAgPDwg NSkKPiArI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8xNVYJKDEgPDwgNSkKPiArI2Rl ZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8yVgkoMiA8PCA1KQo+ICsjZGVmaW5lIEFYUDIw WF9DSFJHX0NUUkwxX1RHVF80XzM2VgkoMyA8PCA1KQo+ICsKPiArI2RlZmluZSBBWFAyMlhfQ0hS R19DVFJMMV9UR1RfNF8yMlYJKDEgPDwgNSkKPiArI2RlZmluZSBBWFAyMlhfQ0hSR19DVFJMMV9U R1RfNF8yNFYJKDMgPDwgNSkKPiArCj4gKyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUX0NV UlIJR0VOTUFTSygzLCAwKQo+ICsKPiArI2RlZmluZSBBWFAyMFhfVl9PRkZfTUFTSwkJR0VOTUFT SygyLCAwKQo+ICsKPiArc3RydWN0IGF4cDIweF9iYXR0X3BzIHsKPiArCXN0cnVjdCByZWdtYXAg KnJlZ21hcDsKPiArCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdHQ7Cj4gKwlzdHJ1Y3QgYXhwMjB4 X2RldiAqYXhwMjB4Owo+ICsJc3RydWN0IGlpb19jaGFubmVsICpiYXR0X2NocmdfaTsKPiArCXN0 cnVjdCBpaW9fY2hhbm5lbCAqYmF0dF9kaXNjaHJnX2k7Cj4gKwlzdHJ1Y3QgaWlvX2NoYW5uZWwg KmJhdHRfdjsKPiArCXU4IGF4cF9pZDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYXhwMjB4X2Jh dHRlcnlfZ2V0X21heF92b2x0YWdlKHN0cnVjdCBheHAyMHhfYmF0dF9wcyAqYXhwMjB4X2JhdHQs Cj4gKwkJCQkJICBpbnQgKnZhbCkKPiArewo+ICsJaW50IHJldCwgcmVnOwo+ICsKPiArCXJldCA9 IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9DSFJHX0NUUkwxLCAmcmVn KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlzd2l0Y2ggKHJlZyAmIEFY UDIwWF9DSFJHX0NUUkwxX1RHVF9WT0xUKSB7Cj4gKwljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RH VF80XzFWOgo+ICsJCSp2YWwgPSA0MTAwMDAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBBWFAyMFhf Q0hSR19DVFJMMV9UR1RfNF8xNVY6Cj4gKwkJKnZhbCA9IDQxNTAwMDA7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzJWOgo+ICsJCSp2YWwgPSA0MjAwMDAwOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8zNlY6Cj4gKwkJKnZh bCA9IDQzNjAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF4cDIyeF9i YXR0ZXJ5X2dldF9tYXhfdm9sdGFnZShzdHJ1Y3QgYXhwMjB4X2JhdHRfcHMgKmF4cDIweF9iYXR0 LAo+ICsJCQkJCSAgaW50ICp2YWwpCj4gK3sKPiArCWludCByZXQsIHJlZzsKPiArCj4gKwlyZXQg PSByZWdtYXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFwLCBBWFAyMFhfQ0hSR19DVFJMMSwgJnJl Zyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc3dpdGNoIChyZWcgJiBB WFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVCkgewo+ICsJY2FzZSBBWFAyMFhfQ0hSR19DVFJMMV9U R1RfNF8xVjoKPiArCQkqdmFsID0gNDEwMDAwMDsKPiArCQlicmVhazsKPiArCWNhc2UgQVhQMjBY X0NIUkdfQ1RSTDFfVEdUXzRfMlY6Cj4gKwkJKnZhbCA9IDQyMDAwMDA7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIEFYUDIyWF9DSFJHX0NUUkwxX1RHVF80XzIyVjoKPiArCQkqdmFsID0gNDIyMDAwMDsK PiArCQlicmVhazsKPiArCWNhc2UgQVhQMjJYX0NIUkdfQ1RSTDFfVEdUXzRfMjRWOgo+ICsJCSp2 YWwgPSA0MjQwMDAwOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBheHAyMHhf YmF0dGVyeV9nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCj4gKwkJCQkgICBlbnVt IHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCj4gKwkJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlf cHJvcHZhbCAqdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgYXhwMjB4X2JhdHRfcHMgKmF4cDIweF9iYXR0 ID0gcG93ZXJfc3VwcGx5X2dldF9kcnZkYXRhKHBzeSk7Cj4gKwlzdHJ1Y3QgaWlvX2NoYW5uZWwg KmNoYW47Cj4gKwlpbnQgcmV0ID0gMCwgcmVnLCB2YWwxOwo+ICsKPiArCXN3aXRjaCAocHNwKSB7 Cj4gKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6Cj4gKwljYXNlIFBPV0VSX1NVUFBM WV9QUk9QX09OTElORToKPiArCQlyZXQgPSByZWdtYXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFw LCBBWFAyMFhfUFdSX09QX01PREUsCj4gKwkJCQkgICZyZWcpOwo+ICsJCWlmIChyZXQpCj4gKwkJ CXJldHVybiByZXQ7Cj4gKwo+ICsJCXZhbC0+aW50dmFsID0gISEocmVnICYgQVhQMjBYX1BXUl9P UF9CQVRUX1BSRVNFTlQpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgUE9XRVJfU1VQUExZX1BS T1BfU1RBVFVTOgo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFY UDIwWF9QV1JfSU5QVVRfU1RBVFVTLAo+ICsJCQkJICAmcmVnKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlyZXR1cm4gcmV0Owo+ICsKPiArCQlpZiAocmVnICYgQVhQMjBYX1BXUl9TVEFUVVNfQkFUX0NI QVJHSU5HKSB7Cj4gKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lO RzsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBpaW9fcmVhZF9jaGFubmVs X3Byb2Nlc3NlZChheHAyMHhfYmF0dC0+YmF0dF9kaXNjaHJnX2ksCj4gKwkJCQkJCSAmdmFsMSk7 Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJaWYgKHZhbDEpIHsKPiAr CQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOwo+ICsJCQly ZXR1cm4gMDsKPiArCQl9Cj4gKwo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5y ZWdtYXAsIEFYUDIwWF9GR19SRVMsICZ2YWwxKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4g cmV0Owo+ICsKPiArCQkvKgo+ICsJCSAqIEZ1ZWwgR2F1Z2UgZGF0YSB0YWtlcyA3IGJpdHMgYnV0 IHRoZSBzdG9yZWQgdmFsdWUgc2VlbXMgdG8gYmUKPiArCQkgKiBkaXJlY3RseSB0aGUgcmF3IHBl cmNlbnRhZ2Ugd2l0aG91dCBhbnkgc2NhbGluZyB0byA3IGJpdHMuCj4gKwkJICovCj4gKwkJaWYg KCh2YWwxICYgQVhQMjA5X0ZHX1BFUkNFTlQpID09IDEwMCkKPiArCQkJdmFsLT5pbnR2YWwgPSBQ T1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7Cj4gKwkJZWxzZQo+ICsJCQl2YWwtPmludHZhbCA9IFBP V0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2Ug UE9XRVJfU1VQUExZX1BST1BfSEVBTFRIOgo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9i YXR0LT5yZWdtYXAsIEFYUDIwWF9QV1JfT1BfTU9ERSwKPiArCQkJCSAgJnZhbDEpOwo+ICsJCWlm IChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCWlmICh2YWwxICYgQVhQMjBYX1BXUl9P UF9CQVRUX0FDVElWQVRFRCkgewo+ICsJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9IRUFM VEhfREVBRDsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsKPiArCQl2YWwtPmludHZhbCA9IFBP V0VSX1NVUFBMWV9IRUFMVEhfR09PRDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFBPV0VSX1NV UFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UOgo+ICsJCXJldCA9IHJlZ21hcF9yZWFk KGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9DSFJHX0NUUkwxLCAmcmVnKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlyZWcgJj0gQVhQMjBYX0NIUkdfQ1RSTDFf VEdUX0NVUlI7Cj4gKwkJdmFsLT5pbnR2YWwgPSByZWcgKiAxMDAwMDAgKyAzMDAwMDA7Cj4gKwkJ YnJlYWs7Cj4gKwo+ICsJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DT05TVEFOVF9DSEFSR0VfQ1VS UkVOVF9NQVg6Cj4gKwkJdmFsLT5pbnR2YWwgPSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfQ1VSUiAq IDEwMDAwMCArIDMwMDAwMDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFBPV0VSX1NVUFBMWV9Q Uk9QX0NVUlJFTlRfTk9XOgo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdt YXAsIEFYUDIwWF9QV1JfSU5QVVRfU1RBVFVTLAo+ICsJCQkJICAmcmVnKTsKPiArCQlpZiAocmV0 KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlpZiAocmVnICYgQVhQMjBYX1BXUl9TVEFUVVNf QkFUX0NIQVJHSU5HKQo+ICsJCQljaGFuID0gYXhwMjB4X2JhdHQtPmJhdHRfY2hyZ19pOwo+ICsJ CWVsc2UKPiArCQkJY2hhbiA9IGF4cDIweF9iYXR0LT5iYXR0X2Rpc2NocmdfaTsKPiArCj4gKwkJ cmV0ID0gaWlvX3JlYWRfY2hhbm5lbF9wcm9jZXNzZWQoY2hhbiwgJnZhbC0+aW50dmFsKTsKPiAr CQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkvKiBJSU8gZnJhbWV3b3JrIGdp dmVzIG1BIGJ1dCBQb3dlciBTdXBwbHkgZnJhbWV3b3JrIGdpdmVzIHVBICovCj4gKwkJdmFsLT5p bnR2YWwgKj0gMTAwMDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9Q X0NBUEFDSVRZOgo+ICsJCS8qIFdoZW4gbm8gYmF0dGVyeSBpcyBwcmVzZW50LCByZXR1cm4gY2Fw YWNpdHkgaXMgMTAwJSAqLwo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdt YXAsIEFYUDIwWF9QV1JfT1BfTU9ERSwKPiArCQkJCSAgJnJlZyk7Cj4gKwkJaWYgKHJldCkKPiAr CQkJcmV0dXJuIHJldDsKPiArCj4gKwkJaWYgKCEocmVnICYgQVhQMjBYX1BXUl9PUF9CQVRUX1BS RVNFTlQpKSB7Cj4gKwkJCXZhbC0+aW50dmFsID0gMTAwOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9 Cj4gKwo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9G R19SRVMsICZyZWcpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCWlm IChheHAyMHhfYmF0dC0+YXhwX2lkID09IEFYUDIyMV9JRCAmJgo+ICsJCSAgICAhKHJlZyAmIEFY UDIyWF9GR19WQUxJRCkpCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQkvKgo+ICsJCSAq IEZ1ZWwgR2F1Z2UgZGF0YSB0YWtlcyA3IGJpdHMgYnV0IHRoZSBzdG9yZWQgdmFsdWUgc2VlbXMg dG8gYmUKPiArCQkgKiBkaXJlY3RseSB0aGUgcmF3IHBlcmNlbnRhZ2Ugd2l0aG91dCBhbnkgc2Nh bGluZyB0byA3IGJpdHMuCj4gKwkJICovCj4gKwkJdmFsLT5pbnR2YWwgPSByZWcgJiBBWFAyMDlf RkdfUEVSQ0VOVDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZP TFRBR0VfTUFYX0RFU0lHTjoKPiArCQlpZiAoYXhwMjB4X2JhdHQtPmF4cF9pZCA9PSBBWFAyMDlf SUQpCj4gKwkJCXJldHVybiBheHAyMHhfYmF0dGVyeV9nZXRfbWF4X3ZvbHRhZ2UoYXhwMjB4X2Jh dHQsCj4gKwkJCQkJCQkgICAgICAmdmFsLT5pbnR2YWwpOwo+ICsJCXJldHVybiBheHAyMnhfYmF0 dGVyeV9nZXRfbWF4X3ZvbHRhZ2UoYXhwMjB4X2JhdHQsCj4gKwkJCQkJCSAgICAgICZ2YWwtPmlu dHZhbCk7Cj4gKwo+ICsJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR046 Cj4gKwkJcmV0ID0gcmVnbWFwX3JlYWQoYXhwMjB4X2JhdHQtPnJlZ21hcCwgQVhQMjBYX1ZfT0ZG LCAmcmVnKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQl2YWwtPmlu dHZhbCA9IDI2MDAwMDAgKyAxMDAwMDAgKiAocmVnICYgQVhQMjBYX1ZfT0ZGX01BU0spOwo+ICsJ CWJyZWFrOwo+ICsKPiArCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6Cj4gKwkJ cmV0ID0gaWlvX3JlYWRfY2hhbm5lbF9wcm9jZXNzZWQoYXhwMjB4X2JhdHQtPmJhdHRfdiwKPiAr CQkJCQkJICZ2YWwtPmludHZhbCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiAr Cj4gKwkJLyogSUlPIGZyYW1ld29yayBnaXZlcyBtViBidXQgUG93ZXIgU3VwcGx5IGZyYW1ld29y ayBnaXZlcyB1ViAqLwo+ICsJCXZhbC0+aW50dmFsICo9IDEwMDA7Cj4gKwkJYnJlYWs7Cj4gKwo+ ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBheHAyMHhfYmF0dGVyeV9zZXRfbWF4X3ZvbHRhZ2Uoc3Ry dWN0IGF4cDIweF9iYXR0X3BzICpheHAyMHhfYmF0dCwKPiArCQkJCQkgIGludCB2YWwpCj4gK3sK PiArCXN3aXRjaCAodmFsKSB7Cj4gKwljYXNlIDQxMDAwMDA6Cj4gKwkJdmFsID0gQVhQMjBYX0NI UkdfQ1RSTDFfVEdUXzRfMVY7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSA0MTUwMDAwOgo+ICsJ CWlmIChheHAyMHhfYmF0dC0+YXhwX2lkID09IEFYUDIyMV9JRCkKPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJCXZhbCA9IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzE1VjsKPiArCQlicmVh azsKPiArCj4gKwljYXNlIDQyMDAwMDA6Cj4gKwkJdmFsID0gQVhQMjBYX0NIUkdfQ1RSTDFfVEdU XzRfMlY7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQkvKgo+ICsJCSAqIEFYUDIw eCBtYXggdm9sdGFnZSBjYW4gYmUgc2V0IHRvIDQuMzZWIGFuZCBBWFAyMlggbWF4IHZvbHRhZ2UK PiArCQkgKiBjYW4gYmUgc2V0IHRvIDQuMjJWIGFuZCA0LjI0ViwgYnV0IHRoZXNlIHZvbHRhZ2Vz IGFyZSB0b28KPiArCQkgKiBoaWdoIGZvciBMaXRoaXVtIGJhc2VkIGJhdHRlcmllcyAoQVhQIFBN SUNzIGFyZSBzdXBwb3NlZCB0bwo+ICsJCSAqIGJlIHVzZWQgd2l0aCB0aGVzZSBraW5kcyBvZiBi YXR0ZXJ5KS4KPiArCQkgKi8KPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1 cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9DSFJHX0NU UkwxLAo+ICsJCQkJICBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVCwgdmFsKTsKPiArfQo+ICsK PiArc3RhdGljIGludCBheHAyMHhfc2V0X2NvbnN0YW50X2NoYXJnZV9jdXJyZW50KHN0cnVjdCBh eHAyMHhfYmF0dF9wcyAqYXhwX2JhdHQsCj4gKwkJCQkJICAgICAgaW50IGNoYXJnZV9jdXJyZW50 KQo+ICt7Cj4gKwlpZiAoYXhwX2JhdHQtPmF4cF9pZCA9PSBBWFAyMDlfSUQpCj4gKwkJY2hhcmdl X2N1cnJlbnQgPSAoY2hhcmdlX2N1cnJlbnQgLSAzMDAwMDApIC8gMTAwMDAwOwo+ICsJZWxzZQo+ ICsJCWNoYXJnZV9jdXJyZW50ID0gKGNoYXJnZV9jdXJyZW50IC0gMzAwMDAwKSAvIDE1MDAwMDsK PiArCj4gKwlpZiAoY2hhcmdlX2N1cnJlbnQgPiBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfQ1VSUiB8 fCBjaGFyZ2VfY3VycmVudCA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJu IHJlZ21hcF91cGRhdGVfYml0cyhheHBfYmF0dC0+cmVnbWFwLCBBWFAyMFhfQ0hSR19DVFJMMSwK PiArCQkJCSAgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUX0NVUlIsIGNoYXJnZV9jdXJyZW50KTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBheHAyMHhfYmF0dGVyeV9zZXRfcHJvcChzdHJ1Y3QgcG93ZXJf c3VwcGx5ICpwc3ksCj4gKwkJCQkgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCj4g KwkJCQkgICBjb25zdCB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQo+ICt7Cj4gKwlz dHJ1Y3QgYXhwMjB4X2JhdHRfcHMgKmF4cDIweF9iYXR0ID0gcG93ZXJfc3VwcGx5X2dldF9kcnZk YXRhKHBzeSk7Cj4gKwlpbnQgdmFsMTsKPiArCj4gKwlzd2l0Y2ggKHBzcCkgewo+ICsJY2FzZSBQ T1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR046Cj4gKwkJdmFsMSA9ICh2YWwtPmlu dHZhbCAtIDI2MDAwMDApIC8gMTAwMDAwOwo+ICsJCWlmICh2YWwxIDwgMCB8fCB2YWwxID4gQVhQ MjBYX1ZfT0ZGX01BU0spCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQlyZXR1cm4gcmVn bWFwX3VwZGF0ZV9iaXRzKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9WX09GRiwKPiArCQkJ CQkgIEFYUDIwWF9WX09GRl9NQVNLLCB2YWwxKTsKPiArCj4gKwljYXNlIFBPV0VSX1NVUFBMWV9Q Uk9QX1ZPTFRBR0VfTUFYX0RFU0lHTjoKPiArCQlyZXR1cm4gYXhwMjB4X2JhdHRlcnlfc2V0X21h eF92b2x0YWdlKGF4cDIweF9iYXR0LCB2YWwtPmludHZhbCk7Cj4gKwo+ICsJY2FzZSBQT1dFUl9T VVBQTFlfUFJPUF9DT05TVEFOVF9DSEFSR0VfQ1VSUkVOVDoKPiArCQlyZXR1cm4gYXhwMjB4X3Nl dF9jb25zdGFudF9jaGFyZ2VfY3VycmVudChheHAyMHhfYmF0dCwKPiArCQkJCQkJCSAgdmFsLT5p bnR2YWwpOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBheHAyMHhfYmF0dGVyeV9w cm9wc1tdID0gewo+ICsJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKPiArCVBPV0VSX1NVUFBM WV9QUk9QX09OTElORSwKPiArCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKPiArCVBPV0VSX1NV UFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAo+ICsJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1cs Cj4gKwlQT1dFUl9TVVBQTFlfUFJPUF9DT05TVEFOVF9DSEFSR0VfQ1VSUkVOVCwKPiArCVBPV0VS X1NVUFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UX01BWCwKPiArCVBPV0VSX1NVUFBM WV9QUk9QX0hFQUxUSCwKPiArCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUFYX0RFU0lHTiwK PiArCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKPiArCVBPV0VSX1NVUFBM WV9QUk9QX0NBUEFDSVRZLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBheHAyMHhfYmF0dGVyeV9w cm9wX3dyaXRlYWJsZShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCj4gKwkJCQkJIGVudW0gcG93 ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCkKPiArewo+ICsJcmV0dXJuIHBzcCA9PSBQT1dFUl9TVVBQ TFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR04gfHwKPiArCSAgICAgICBwc3AgPT0gUE9XRVJfU1VQ UExZX1BST1BfVk9MVEFHRV9NQVhfREVTSUdOIHx8Cj4gKwkgICAgICAgcHNwID09IFBPV0VSX1NV UFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHBvd2VyX3N1cHBseV9kZXNjIGF4cDIweF9iYXR0X3BzX2Rlc2MgPSB7Cj4gKwku bmFtZSA9ICJheHAyMHgtYmF0dGVyeSIsCj4gKwkudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX0JB VFRFUlksCj4gKwkucHJvcGVydGllcyA9IGF4cDIweF9iYXR0ZXJ5X3Byb3BzLAo+ICsJLm51bV9w cm9wZXJ0aWVzID0gQVJSQVlfU0laRShheHAyMHhfYmF0dGVyeV9wcm9wcyksCj4gKwkucHJvcGVy dHlfaXNfd3JpdGVhYmxlID0gYXhwMjB4X2JhdHRlcnlfcHJvcF93cml0ZWFibGUsCj4gKwkuZ2V0 X3Byb3BlcnR5ID0gYXhwMjB4X2JhdHRlcnlfZ2V0X3Byb3AsCj4gKwkuc2V0X3Byb3BlcnR5ID0g YXhwMjB4X2JhdHRlcnlfc2V0X3Byb3AsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBheHAyMHhfYmF0dGVyeV9wc19pZFtdID0gewo+ICsJewo+ICsJCS5jb21w YXRpYmxlID0gIngtcG93ZXJzLGF4cDIwOS1iYXR0ZXJ5LXBvd2VyLXN1cHBseSIsCj4gKwkJLmRh dGEgPSAodm9pZCAqKUFYUDIwOV9JRCwKPiArCX0sIHsKPiArCQkuY29tcGF0aWJsZSA9ICJ4LXBv d2VycyxheHAyMjEtYmF0dGVyeS1wb3dlci1zdXBwbHkiLAo+ICsJCS5kYXRhID0gKHZvaWQgKilB WFAyMjFfSUQsCj4gKwl9LCB7IC8qIHNlbnRpbmVsICovIH0sCj4gK307Cj4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGF4cDIweF9iYXR0ZXJ5X3BzX2lkKTsKPiArCj4gK3N0YXRpYyBpbnQgYXhw MjB4X3Bvd2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0 cnVjdCBheHAyMHhfYmF0dF9wcyAqYXhwMjB4X2JhdHQ7Cj4gKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5 X2NvbmZpZyBwc3lfY2ZnID0ge307Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIGNvbnN0X2NoYXJnZV9j dXJyZW50Owo+ICsKPiArCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwZGV2LT5kZXYub2Zf bm9kZSkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJYXhwMjB4X2JhdHQgPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpheHAyMHhfYmF0dCksCj4gKwkJCQkgICBHRlBfS0VS TkVMKTsKPiArCWlmICghYXhwMjB4X2JhdHQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ YXhwMjB4X2JhdHQtPmJhdHRfdiA9IGRldm1faWlvX2NoYW5uZWxfZ2V0KCZwZGV2LT5kZXYsICJi YXR0X3YiKTsKPiArCWlmIChJU19FUlIoYXhwMjB4X2JhdHQtPmJhdHRfdikpIHsKPiArCQlpZiAo UFRSX0VSUihheHAyMHhfYmF0dC0+YmF0dF92KSA9PSAtRU5PREVWKQo+ICsJCQlyZXR1cm4gLUVQ Uk9CRV9ERUZFUjsKPiArCQlyZXR1cm4gUFRSX0VSUihheHAyMHhfYmF0dC0+YmF0dF92KTsKPiAr CX0KPiArCj4gKwlheHAyMHhfYmF0dC0+YmF0dF9jaHJnX2kgPSBkZXZtX2lpb19jaGFubmVsX2dl dCgmcGRldi0+ZGV2LAo+ICsJCQkJCQkJImJhdHRfY2hyZ19pIik7Cj4gKwlpZiAoSVNfRVJSKGF4 cDIweF9iYXR0LT5iYXR0X2NocmdfaSkpIHsKPiArCQlpZiAoUFRSX0VSUihheHAyMHhfYmF0dC0+ YmF0dF9jaHJnX2kpID09IC1FTk9ERVYpCj4gKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJ CXJldHVybiBQVFJfRVJSKGF4cDIweF9iYXR0LT5iYXR0X2NocmdfaSk7Cj4gKwl9Cj4gKwo+ICsJ YXhwMjB4X2JhdHQtPmJhdHRfZGlzY2hyZ19pID0gZGV2bV9paW9fY2hhbm5lbF9nZXQoJnBkZXYt PmRldiwKPiArCQkJCQkJCSAgICJiYXR0X2Rpc2NocmdfaSIpOwo+ICsJaWYgKElTX0VSUihheHAy MHhfYmF0dC0+YmF0dF9kaXNjaHJnX2kpKSB7Cj4gKwkJaWYgKFBUUl9FUlIoYXhwMjB4X2JhdHQt PmJhdHRfZGlzY2hyZ19pKSA9PSAtRU5PREVWKQo+ICsJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK PiArCQlyZXR1cm4gUFRSX0VSUihheHAyMHhfYmF0dC0+YmF0dF9kaXNjaHJnX2kpOwo+ICsJfQo+ ICsKPiArCWF4cDIweF9iYXR0LT5yZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChwZGV2LT5kZXYucGFy ZW50LCBOVUxMKTsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGF4cDIweF9iYXR0KTsK PiArCj4gKwlwc3lfY2ZnLmRydl9kYXRhID0gYXhwMjB4X2JhdHQ7Cj4gKwlwc3lfY2ZnLm9mX25v ZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiArCj4gKwlheHAyMHhfYmF0dC0+YXhwX2lkID0gKHVp bnRwdHJfdClvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7Cj4gKwo+ICsJaWYg KCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoJnBkZXYtPmRldiwKPiArCQkJCSAgICAgICJ4LXBv d2Vycyxjb25zdGFudC1jaGFyZ2UtY3VycmVudCIsCj4gKwkJCQkgICAgICAmY29uc3RfY2hhcmdl X2N1cnJlbnQpKSB7Cj4gKwkJcmV0ID0gYXhwMjB4X3NldF9jb25zdGFudF9jaGFyZ2VfY3VycmVu dChheHAyMHhfYmF0dCwKPiArCQkJCQkJCSBjb25zdF9jaGFyZ2VfY3VycmVudCk7Cj4gKwkJaWYg KHJldCkKPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJCQkJImNvdWxkbid0IHNldCBjb25z dGFudCBjaGFyZ2UgY3VycmVudDogJWRcbiIsCj4gKwkJCQlyZXQpOwo+ICsJfQo+ICsKPiArCWF4 cDIweF9iYXR0LT5iYXR0ID0gZGV2bV9wb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwK PiArCQkJCQkJICAgICAgICZheHAyMHhfYmF0dF9wc19kZXNjLAo+ICsJCQkJCQkgICAgICAgJnBz eV9jZmcpOwo+ICsJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhheHAyMHhfYmF0dC0+YmF0dCk7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF4cDIweF9iYXR0X2RyaXZl ciA9IHsKPiArCS5wcm9iZSAgICA9IGF4cDIweF9wb3dlcl9wcm9iZSwKPiArCS5kcml2ZXIgICA9 IHsKPiArCQkubmFtZSAgPSAiYXhwMjB4LWJhdHRlcnktcG93ZXItc3VwcGx5IiwKPiArCQkub2Zf bWF0Y2hfdGFibGUgPSBheHAyMHhfYmF0dGVyeV9wc19pZCwKPiArCX0sCj4gK307Cj4gKwo+ICtt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDIweF9iYXR0X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVf REVTQ1JJUFRJT04oIkJhdHRlcnkgcG93ZXIgc3VwcGx5IGRyaXZlciBmb3IgQVhQMjBYIGFuZCBB WFAyMlggUE1JQ3MiKTsKPiArTU9EVUxFX0FVVEhPUigiUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4u c2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK