From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: Re: [PATCH v2 3/6] drm/exynos: mic: add MIC driver Date: Thu, 26 Mar 2015 11:41:15 +0900 Message-ID: <20150326114115.35893488@hwh-ubuntu> References: <1426666591-16103-1-git-send-email-human.hwang@samsung.com> <1426666591-16103-4-git-send-email-human.hwang@samsung.com> <5510FB63.9070001@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <5510FB63.9070001@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Inki Dae Cc: devicetree@vger.kernel.org, sw0312.kim@samsung.com, dh09.lee@samsung.com, dri-devel@lists.freedesktop.org, cw00.choi@samsung.com List-Id: devicetree@vger.kernel.org RGVhciBJbmtpIGRhZSwKClNvcnJ5IGZvciB0aGUgcHJldmlvdXMgbWFpbCB3aGljaCBpcyBub3Qg Y29tcGxldGVkLiBJIHR5cGVkIHNvbWV0aGluZwphbmQgaXQgd2FzIHRoZSBzaG9ydGN1dCBmb3Ig bWF5YmUuCgpPbiBUdWUsIDI0IE1hciAyMDE1IDE0OjUxOjMxICswOTAwCklua2kgRGFlIDxpbmtp LmRhZUBzYW1zdW5nLmNvbT4gd3JvdGU6Cgo+IE9uIDIwMTXrhYQgMDPsm5QgMTjsnbwgMTc6MTYs IEh5dW5nd29uIEh3YW5nIHdyb3RlOgo+ID4gTUlDKE1vYmlsZSBpbWFnZSBjb21wcmVzc29yKSBp cyBuZXdseSBhZGRlZCBJUCBpbiBFeHlub3M1NDMzLiBNSUMKPiA+IHJlc2lkZXMgYmV0d2VlbiBk ZWNvbiBhbmQgbWlwaSBkc2ltLCBhbmQgY29tcHJlc3NlcyBmcmFtZSBkYXRhIGJ5Cj4gPiA1MCUu IFdpdGggZHNpLCBub3QgZGlzcGxheSBwb3J0LCB0byBzZW5kIGZyYW1lIGRhdGEgdG8gdGhlIHBh bmVsLAo+ID4gdGhlIGJhbmR3aWR0aCBpcyBub3QgZW5vdWdoLiBUaGF0IGlzIHdoeSB0aGlzIGNv bXByZXNzb3IgaXMKPiA+IGludHJvZHVjZWQuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEh5dW5n d29uIEh3YW5nIDxodW1hbi5od2FuZ0BzYW1zdW5nLmNvbT4KPiA+IC0tLQo+ID4gQ2hhbmdlcyBm b3IgdjI6Cj4gPiAtIG1ha2UgbWljIGRyaXZlciB0byBiZSByZWdpc3RlcmVkIGJ5IGV4eW5vcyBk cm0gZHJpdmVyIGluc3RlYWQgYXMKPiA+IGEgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gPiBkcml2ZXIKPiA+IHwKPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+IC0gY2hhbmdlIHRoZSBkZXNjcmlw dGlvbiBvZiBtaWMgZHJpdmVyIGluIGRvY3VtZW50YXRpb24KPiA+IC0gYWRkIG1vZHVsZSBhdXRo b3IgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGZpbGUgcmVtb3ZpbmcKPiA+IE1PRFVMRV9PV05F UiwgTU9EVUxFX0RFU0NSSVBUSU9OLCBNT0RVTEVfTElDRU5TRQo+ID4gIC4uLi9kZXZpY2V0cmVl L2JpbmRpbmdzL3ZpZGVvL2V4eW5vcy1taWMudHh0ICAgICAgIHwgIDQ5ICsrKwo+ID4gIGRyaXZl cnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKPiA+ ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAg MSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jICAgICAgICAg ICAgfCAgIDMgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuaCAg ICAgICAgICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1f bWljLmMgICAgICAgICAgICB8IDQ4MQo+ID4gKysrKysrKysrKysrKysrKysrKysrIDYgZmlsZXMg Y2hhbmdlZCwgNTQxIGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQKPiA+IERv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3MtbWljLnR4dCBjcmVh dGUgbW9kZQo+ID4gMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9taWMu Ywo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L3ZpZGVvL2V4eW5vcy1taWMudHh0Cj4gPiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy92aWRlby9leHlub3MtbWljLnR4dCBuZXcgZmlsZQo+ID4gbW9kZSAxMDA2NDQgaW5kZXgg MDAwMDAwMC4uMDA2ZDA3Mgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvRG9jdW1lbnRhdGlv bi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL2V4eW5vcy1taWMudHh0Cj4gPiBAQCAtMCwwICsx LDQ5IEBACj4gPiArRGV2aWNlLVRyZWUgYmluZGluZ3MgZm9yIFNhbXN1bmcgRXh5bm9zIFNvQyBt b2JpbGUgaW1hZ2UKPiA+IGNvbXByZXNzb3IgKE1JQykgKwo+ID4gK01JQyAobW9iaWxlIGltYWdl IGNvbXByZXNzb3IpIHJlc2lkZXMgYmV0d2VlbiBkZWNvbiBhbmQgbWlwaSBkc2kuCj4gPiBNaXBp IGRzaSBpcyArbm90IGNhcGFibGUgdG8gdHJhbnNmZXIgaGlnaCByZXNvbHR1aW9uIGZyYW1lIGRh dGEgYXMKPiA+IGRlY29uIGNhbiBzZW5kLiBNSUMgK3NvbHZlcyB0aGlzIHByb2JsZW0gYnkgY29t cHJlc3NpbmcgdGhlIGZyYW1lCj4gPiBkYXRhIGJ5IDEvMiBiZWZvcmUgaXQgaXMgdHJhbnNmZXJl ZCArdGhyb3VnaCBtaXBpIGRzaS4gVGhlCj4gPiBjb21wcmVzc2VkIGZyYW1lIGRhdGEgbXVzdCBi ZSB1bmNvbXByZXNzZWQgaW4gdGhlIHBhbmVsICtQQ0IuCj4gPiArCj4gPiArUmVxdWlyZWQgcHJv cGVydGllczoKPiA+ICstIGNvbXBhdGlibGU6IHZhbHVlIHNob3VsZCBiZSAic2Ftc3VuZyxleHlu b3M1NDMzLW1pYyIuCj4gPiArLSByZWc6IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBhbmQgbGVuZ3Ro IG9mIHRoZSBNSUMgcmVnaXN0ZXJzIHNldAo+ID4gYW5kIHN5c3RlbQo+ID4gKyAgICAgICByZWdp c3RlciBvZiBtaWMuCj4gPiArLSBjbG9ja3M6IG11c3QgaW5jbHVkZSBjbG9jayBzcGVjaWZpZXJz IGNvcnJlc3BvbmRpbmcgdG8gZW50cmllcwo+ID4gaW4gdGhlCj4gPiArCSAgY2xvY2stbmFtZXMg cHJvcGVydHkuCj4gPiArLSBjbG9jay1uYW1lczogbGlzdCBvZiBjbG9jayBuYW1lcyBzb3J0ZWQg aW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCj4gPiBjbG9ja3MKPiA+ICsJICAgICAgIHByb3BlcnR5 LiBNdXN0IGNvbnRhaW4gInBjbGtfbWljMCIsCj4gPiAic2Nsa19yZ2JfdmNsa190b19taWMwIi4g Ky0gcG9ydHM6IGNvbnRhaW5zIGEgcG9ydCB3aGljaCBpcwo+ID4gY29ubmVjdGVkIHRvIGRlY29u IG5vZGUgYW5kIGRzaSBub2RlLgo+ID4gKwkgYWRkcmVzcy1jZWxscyBhbmQgc2l6ZS1jZWxscyBt dXN0IDEgYW5kIDAsIHJlc3BlY3RpdmVseS4KPiA+ICstIHBvcnQ6IGNvbnRhaW5zIGFuIGVuZHBv aW50IG5vZGUgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZQo+ID4gZW5kcG9pbnQgaW4gdGhlCj4g PiArCWRlY29uIG5vZGUgb3IgZHNpIG5vZGUuIFRoZSByZWcgdmFsdWUgbXVzdCBiZSAwIGFuZCAx Cj4gPiByZXNwZWN0aXZlbHkuICsKPiA+ICtFeGFtcGxlOgo+ID4gK1NvQyBzcGVjaWZpYyBEVCBl bnRyeToKPiA+ICttaWM6IG1pY0AxMzkzMDAwMCB7Cj4gPiArCWNvbXBhdGlibGUgPSAic2Ftc3Vu ZyxleHlub3M1NDMzLW1pYyI7Cj4gPiArCXJlZyA9IDwweDEzOTMwMDAwIDB4NDggMHgxM0I4MDAw MCAweDEwMTA+Owo+ID4gKwljbG9ja3MgPSA8JmNtdV9kaXNwIENMS19QQ0xLX01JQzA+LAo+ID4g KwkgICAgICAgPCZjbXVfZGlzcCBDTEtfU0NMS19SR0JfVkNMS19UT19NSUMwPjsKPiA+ICsJY2xv Y2stbmFtZXMgPSAicGNsa19taWMwIiwgInNjbGtfcmdiX3ZjbGtfdG9fbWljMCI7Cj4gPiArCj4g PiArCXBvcnRzIHsKPiA+ICsJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+ID4gKwkJI3NpemUtY2Vs bHMgPSA8MD47Cj4gPiArCj4gPiArCQlwb3J0QDAgewo+ID4gKwkJCXJlZyA9IDwwPjsKPiA+ICsJ CQltaWNfdG9fZGVjb246IGVuZHBvaW50IHsKPiA+ICsJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZk ZWNvbl90b19taWM+Owo+ID4gKwkJCX07Cj4gPiArCQl9Owo+ID4gKwo+ID4gKwkJcG9ydEAxIHsK PiA+ICsJCQlyZWcgPSA8MT47Cj4gPiArCQkJbWljX3RvX2RzaTogZW5kcG9pbnQgewo+ID4gKwkJ CQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRzaV90b19taWM+Owo+ID4gKwkJCX07Cj4gPiArCQl9Owo+ ID4gKwl9Owo+ID4gK307Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9L Y29uZmlnCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyBpbmRleCBlMTVjYzJl Li5hNzk2MTc1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmln Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tjb25maWcKPiA+IEBAIC0xMDMsMyAr MTAzLDkgQEAgY29uZmlnIERSTV9FWFlOT1NfR1NDCj4gPiAgCWRlcGVuZHMgb24gRFJNX0VYWU5P U19JUFAgJiYgQVJDSF9FWFlOT1M1Cj4gPiAmJiAhQVJDSF9NVUxUSVBMQVRGT1JNIGhlbHAKPiA+ ICAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEV4eW5vcyBHU0MgZm9y IERSTS4KPiA+ICsKPiA+ICtjb25maWcgRFJNX0VYWU5PU19NSUMKPiA+ICsJYm9vbCAiRXh5bm9z IERSTSBNSUMiCj4gPiArCWRlcGVuZHMgb24gKERSTV9FWFlOT1MgJiYgRFJNX0VYWU5PUzU0MzNf REVDT04pCj4gPiArCWhlbHAKPiA+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQg dG8gdXNlIEV4eW5vcyBNSUMgZm9yIERSTS4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZXh5bm9zL01ha2VmaWxlCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUg aW5kZXggZmJkMDg0ZC4uN2RlMGIxMCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9l eHlub3MvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUK PiA+IEBAIC0yMiw1ICsyMiw2IEBAIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX0lQUCkJ Kz0KPiA+IGV4eW5vc19kcm1faXBwLm8gZXh5bm9zZHJtLSQoQ09ORklHX0RSTV9FWFlOT1NfRklN QykJKz0KPiA+IGV4eW5vc19kcm1fZmltYy5vIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9T X1JPVEFUT1IpCSs9Cj4gPiBleHlub3NfZHJtX3JvdGF0b3IubyBleHlub3Nkcm0tJChDT05GSUdf RFJNX0VYWU5PU19HU0MpCSs9Cj4gPiBleHlub3NfZHJtX2dzYy5vICtleHlub3Nkcm0tJChDT05G SUdfRFJNX0VYWU5PU19NSUMpICAgICArPQo+ID4gZXh5bm9zX2RybV9taWMubwo+ID4gCj4gPiAg b2JqLSQoQ09ORklHX0RSTV9FWFlOT1MpCQkrPSBleHlub3Nkcm0ubwo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYwo+ID4gYi9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgaW5kZXggMWZhMGRkMC4uZWM5OTg0ZAo+ID4g MTAwNjQ0IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCj4gPiBAQCAtNTYy LDYgKzU2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpjb25zdAo+ID4gZXh5 bm9zX2RybV9rbXNfZHJpdmVyc1tdID0geyAjaWZkZWYgQ09ORklHX0RSTV9FWFlOT1M3X0RFQ09O Cj4gPiAgCSZkZWNvbl9kcml2ZXIsCj4gPiAgI2VuZGlmCj4gPiArI2lmZGVmIENPTkZJR19EUk1f RVhZTk9TX01JQwo+ID4gKwkmbWljX2RyaXZlciwKPiA+ICsjZW5kaWYKPiA+ICAjaWZkZWYgQ09O RklHX0RSTV9FWFlOT1NfRFAKPiA+ICAJJmRwX2RyaXZlciwKPiA+ICAjZW5kaWYKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmgKPiA+IGIvZHJp dmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5oIGluZGV4IDQwOTk2ZDguLjljOTRk YzkKPiA+IDEwMDY0NCAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2 LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuaAo+ID4g QEAgLTM1Nyw0ICszNTcsNSBAQCBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmaW1jX2Ry aXZlcjsKPiA+ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciByb3RhdG9yX2RyaXZlcjsK PiA+ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnc2NfZHJpdmVyOwo+ID4gIGV4dGVy biBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwcF9kcml2ZXI7Cj4gPiArZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbWljX2RyaXZlcjsKPiA+ICAjZW5kaWYKPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fbWljLmMKPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2V4eW5vcy9leHlub3NfZHJtX21pYy5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRl eCAwMDAwMDAwLi5iODk4YTJhCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fbWljLmMKPiA+IEBAIC0wLDAgKzEsNDgxIEBACj4gPiAr LyoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQK PiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqCUh5dW5nd29uIEh3YW5nIDxodW1hbi5od2FuZ0BzYW1z dW5nLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiA+IG1vZGlmeQo+ID4gKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCj4g PiBhcwo+ID4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9ucgo+ ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KPiA+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsKPiA+ICsvKiBTeXNyZWcgcmVnaXN0ZXJzIGZv ciBNSUMgKi8KPiA+ICsjZGVmaW5lIERTRF9DRkdfTVVYCTB4MTAwNAo+ID4gKyNkZWZpbmUgTUlD MF9SR0JfTVVYCSgxIDw8IDApCj4gPiArI2RlZmluZSBNSUMwX0k4MF9NVVgJKDEgPDwgMSkKPiA+ ICsjZGVmaW5lIE1JQzBfT05fTVVYCSgxIDw8IDUpCj4gPiArCj4gPiArLyogTUlDIHJlZ2lzdGVy cyAqLwo+ID4gKyNkZWZpbmUgTUlDX09QCQkJCTB4MAo+ID4gKyNkZWZpbmUgTUlDX0lQX1ZFUgkJ CTB4MDAwNAo+ID4gKyNkZWZpbmUgTUlDX1ZfVElNSU5HXzAJCQkweDAwMDgKPiA+ICsjZGVmaW5l IE1JQ19WX1RJTUlOR18xCQkJMHgwMDBDCj4gPiArI2RlZmluZSBNSUNfSU1HX1NJWkUJCQkweDAw MTAKPiA+ICsjZGVmaW5lIE1JQ19JTlBVVF9USU1JTkdfMAkJMHgwMDE0Cj4gPiArI2RlZmluZSBN SUNfSU5QVVRfVElNSU5HXzEJCTB4MDAxOAo+ID4gKyNkZWZpbmUgTUlDXzJEX09VVFBVVF9USU1J TkdfMAkJMHgwMDFDCj4gPiArI2RlZmluZSBNSUNfMkRfT1VUUFVUX1RJTUlOR18xCQkweDAwMjAK PiA+ICsjZGVmaW5lIE1JQ18yRF9PVVRQVVRfVElNSU5HXzIJCTB4MDAyNAo+ID4gKyNkZWZpbmUg TUlDXzNEX09VVFBVVF9USU1JTkdfMAkJMHgwMDI4Cj4gPiArI2RlZmluZSBNSUNfM0RfT1VUUFVU X1RJTUlOR18xCQkweDAwMkMKPiA+ICsjZGVmaW5lIE1JQ18zRF9PVVRQVVRfVElNSU5HXzIJCTB4 MDAzMAo+ID4gKyNkZWZpbmUgTUlDX0NPUkVfUEFSQV8wCQkJMHgwMDM0Cj4gPiArI2RlZmluZSBN SUNfQ09SRV9QQVJBXzEJCQkweDAwMzgKPiA+ICsjZGVmaW5lIE1JQ19DVENfQ1RSTAkJCTB4MDA0 MAo+ID4gKyNkZWZpbmUgTUlDX1JEX0RBVEEJCQkweDAwNDQKPiA+ICsKPiA+ICsjZGVmaW5lIE1J Q19VUERfUkVHCQkJKDEgPDwgMzEpCj4gPiArI2RlZmluZSBNSUNfT05fUkVHCQkJKDEgPDwgMzAp Cj4gPiArI2RlZmluZSBNSUNfVERfT05fUkVHCQkJKDEgPDwgMjkpCj4gPiArI2RlZmluZSBNSUNf QlNfQ0hHX09VVAkJCSgxIDw8IDE2KQo+ID4gKyNkZWZpbmUgTUlDX1ZJREVPX1RZUEUoeCkJCSgo KHgpICYgMHhmKSA8PCAxMikKPiA+ICsjZGVmaW5lIE1JQ19QU1JfRU4JCQkoMSA8PCA1KQo+ID4g KyNkZWZpbmUgTUlDX1NXX1JTVAkJCSgxIDw8IDQpCj4gPiArI2RlZmluZSBNSUNfQUxMX1JTVAkJ CSgxIDw8IDMpCj4gPiArI2RlZmluZSBNSUNfQ09SRV9WRVJfQ09OVFJPTAkJKDEgPDwgMikKPiA+ ICsjZGVmaW5lIE1JQ19NT0RFX1NFTF9DT01NQU5EX01PREUJKDEgPDwgMSkKPiA+ICsjZGVmaW5l IE1JQ19NT0RFX1NFTF9NQVNLCQkoMSA8PCAxKQo+ID4gKyNkZWZpbmUgTUlDX0NPUkVfRU4JCQko MSA8PCAwKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX1ZfUFVMU0VfV0lEVEgoeCkJCSgoKHgpICYg MHgzZmZmKSA8PCAxNikKPiA+ICsjZGVmaW5lIE1JQ19WX1BFUklPRF9MSU5FKHgpCQkoKHgpICYg MHgzZmZmKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX1ZCUF9TSVpFKHgpCQkJKCgoeCkgJiAweDNm ZmYpIDw8Cj4gPiAxNikgKyNkZWZpbmUgTUlDX1ZGUF9TSVpFKHgpCQkJKCh4KSAmIDB4M2ZmZikK PiA+ICsKPiA+ICsjZGVmaW5lIE1JQ19JTUdfVl9TSVpFKHgpCQkoKCh4KSAmIDB4M2ZmZikgPDwg MTYpCj4gPiArI2RlZmluZSBNSUNfSU1HX0hfU0laRSh4KQkJKCh4KSAmIDB4M2ZmZikKPiA+ICsK PiA+ICsjZGVmaW5lIE1JQ19IX1BVTFNFX1dJRFRIX0lOKHgpCQkoKCh4KSAmIDB4M2ZmZikgPDwK PiA+IDE2KSArI2RlZmluZSBNSUNfSF9QRVJJT0RfUElYRUxfSU4oeCkJKCh4KSAmIDB4M2ZmZikK PiA+ICsKPiA+ICsjZGVmaW5lIE1JQ19IQlBfU0laRV9JTih4KQkJKCgoeCkgJiAweDNmZmYpIDw8 IDE2KQo+ID4gKyNkZWZpbmUgTUlDX0hGUF9TSVpFX0lOKHgpCQkoKHgpICYgMHgzZmZmKQo+ID4g Kwo+ID4gKyNkZWZpbmUgTUlDX0hfUFVMU0VfV0lEVEhfMkQoeCkJCSgoKHgpICYgMHgzZmZmKSA8 PAo+ID4gMTYpICsjZGVmaW5lIE1JQ19IX1BFUklPRF9QSVhFTF8yRCh4KQkoKHgpICYgMHgzZmZm KQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX0hCUF9TSVpFXzJEKHgpCQkoKCh4KSAmIDB4M2ZmZikg PDwgMTYpCj4gPiArI2RlZmluZSBNSUNfSEZQX1NJWkVfMkQoeCkJCSgoeCkgJiAweDNmZmYpCj4g PiArCj4gPiArI2RlZmluZSBNSUNfQlNfU0laRV8yRCh4KQkoKHgpICYgMHgzZmZmKQo+ID4gKwo+ ID4gK2VudW0gewo+ID4gKwlFTkRQT0lOVF9ERUNPTl9OT0RFLAo+ID4gKwlFTkRQT0lOVF9EU0lf Tk9ERSwKPiA+ICsJTlVNX0VORFBPSU5UUwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNoYXIg KmNsa19uYW1lc1tdID0geyAicGNsa19taWMwIiwKPiA+ICJzY2xrX3JnYl92Y2xrX3RvX21pYzAi IH07ICsjZGVmaW5lIE5VTV9DTEtTCj4gPiBBUlJBWV9TSVpFKGNsa19uYW1lcykgK3N0YXRpYyBE RUZJTkVfTVVURVgobWljX211dGV4KTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZXh5bm9zX21pYyB7Cj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICsJdm9pZCBfX2lvbWVtICpyZWc7Cj4gPiArCXZv aWQgX19pb21lbSAqc3lzcmVnOwo+ID4gKwlzdHJ1Y3QgY2xrICpjbGtzW05VTV9DTEtTXTsKPiA+ ICsKPiA+ICsJYm9vbCBpODBfbW9kZTsKPiA+ICsJc3RydWN0IHZpZGVvbW9kZSB2bTsKPiA+ICsJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ID4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlk Z2U7Cj4gPiArCj4gPiArCWJvb2wgZW5hYmxlZDsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIG1pY19zZXRfcGF0aChzdHJ1Y3QgZXh5bm9zX21pYyAqbWljLCBib29sIGVuYWJsZSkKPiA+ ICt7Cj4gPiArCXUzMiByZWc7Cj4gPiArCj4gPiArCXJlZyA9IHJlYWRsKG1pYy0+c3lzcmVnICsg RFNEX0NGR19NVVgpOwo+ID4gKwlpZiAoZW5hYmxlKQo+ID4gKwkJcmVnIHw9IE1JQzBfUkdCX01V WCB8IE1JQzBfSTgwX01VWCB8IE1JQzBfT05fTVVYOwo+ID4gKwllbHNlCj4gPiArCQlyZWcgJj0g fihNSUMwX1JHQl9NVVggfCBNSUMwX0k4MF9NVVggfAo+ID4gTUlDMF9PTl9NVVgpOwo+IAo+IGV4 eW5vc19taWMgaGFzIGFscmVhZHkgd2hpY2ggdmlkZW8gbW9kZSAtIFJHQiBvciBpODAgLSBpcyB1 c2VkIHNvIGl0J2QKPiBiZSByZWFzb25hYmxlIHRvIHNlbGVjdCBvbmUgb2YgdGhlbSB0byBhdm9p ZCBjb25mdXNpbmcuCj4gCgpZZXMuIEkgYWdyZWUuCgo+ID4gKwo+ID4gKwl3cml0ZWwocmVnLCBt aWMtPnN5c3JlZyArIERTRF9DRkdfTVVYKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBt aWNfc3dfcmVzZXQoc3RydWN0IGV4eW5vc19taWMgKm1pYykKPiA+ICt7Cj4gPiArCXVuc2lnbmVk IGludCByZXRyeSA9IDEwMDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJd3JpdGVsKE1JQ19T V19SU1QsIG1pYy0+cmVnICsgTUlDX09QKTsKPiA+ICsKPiA+ICsJd2hpbGUgKHJldHJ5LS0gPiAw KSB7Cj4gPiArCQlyZXQgPSByZWFkbChtaWMtPnJlZyArIE1JQ19PUCk7Cj4gPiArCQlpZiAoIShy ZXQgJiBNSUNfU1dfUlNUKSkKPiA+ICsJCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJCXVkZWxheSgx MCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIC1FVElNRURPVVQ7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIG1pY19zZXRfcG9yY2hfdGltaW5nKHN0cnVjdCBleHlub3NfbWljICpt aWMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ID4gKwl1MzIgcmVnOwo+ID4g Kwo+ID4gKwlpZiAoIW1pYy0+aTgwX21vZGUpIHsKPiAKPiBJdCdkIGJlIGJldHRlciB0byBjaGVj ayBpdCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMKPiBmdW5jaW9uIGNhbGwg cmVhbGx5IGlzIHVubmVjZXNzYXJ5IGluIGNhc2Ugb2YgaTgwIG1vZGUuCj4gCgpZZXMuIEkgYWdy ZWUuCgo+ID4gKwkJdm0gPSBtaWMtPnZtOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZfUFVMU0Vf V0lEVEgodm0udnN5bmNfbGVuKSArCj4gPiArCQkJTUlDX1ZfUEVSSU9EX0xJTkUodm0udnN5bmNf bGVuICsKPiA+IHZtLnZhY3RpdmUgKwo+ID4gKwkJCQkJdm0udmJhY2tfcG9yY2ggKwo+ID4gdm0u dmZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX1ZfVElNSU5H XzApOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZCUF9TSVpFKHZtLnZiYWNrX3BvcmNoKSArCj4g PiArCj4gPiBNSUNfVkZQX1NJWkUodm0udmZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcs IG1pYy0+cmVnICsgTUlDX1ZfVElNSU5HXzEpOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZfUFVM U0VfV0lEVEgodm0uaHN5bmNfbGVuKSArCj4gPiArCQkJTUlDX1ZfUEVSSU9EX0xJTkUodm0uaHN5 bmNfbGVuICsKPiA+IHZtLmhhY3RpdmUgKwo+ID4gKwkJCQkJdm0uaGJhY2tfcG9yY2ggKwo+ID4g dm0uaGZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX0lOUFVU X1RJTUlOR18wKTsKPiA+ICsKPiA+ICsJCXJlZyA9IE1JQ19WQlBfU0laRSh2bS5oYmFja19wb3Jj aCkgKwo+ID4gKwo+ID4gTUlDX1ZGUF9TSVpFKHZtLmhmcm9udF9wb3JjaCk7Cj4gPiArCQl3cml0 ZWwocmVnLCBtaWMtPnJlZyArIE1JQ19JTlBVVF9USU1JTkdfMSk7Cj4gPiArCX0KPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgbWljX3NldF9pbWdfc2l6ZShzdHJ1Y3QgZXh5bm9zX21pYyAq bWljKQo+ID4gK3sKPiA+ICsJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmbWljLT52bTsKPiA+ICsJ dTMyIHJlZzsKPiA+ICsKPiA+ICsJcmVnID0gTUlDX0lNR19IX1NJWkUodm0tPmhhY3RpdmUpICsK PiA+ICsJCU1JQ19JTUdfVl9TSVpFKHZtLT52YWN0aXZlKTsKPiA+ICsKPiA+ICsJd3JpdGVsKHJl ZywgbWljLT5yZWcgKyBNSUNfSU1HX1NJWkUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBtaWNfc2V0X291dHB1dF90aW1pbmcoc3RydWN0IGV4eW5vc19taWMgKm1pYykKPiA+ICt7Cj4g PiArCXN0cnVjdCB2aWRlb21vZGUgdm0gPSBtaWMtPnZtOwo+ID4gKwl1MzIgcmVnLCBic19zaXpl XzJkOwo+ID4gKwo+ID4gKwlEUk1fREVCVUcoInc6ICV1LCBoOiAldVxuIiwgdm0uaGFjdGl2ZSwg dm0udmFjdGl2ZSk7Cj4gPiArCWJzX3NpemVfMmQgPSAoKHZtLmhhY3RpdmUgPj4gMikgPDwgMSkg KyAodm0udmFjdGl2ZSAlIDQpOwo+ID4gKwlyZWcgPSBNSUNfQlNfU0laRV8yRChic19zaXplXzJk KTsKPiA+ICsJd3JpdGVsKHJlZywgbWljLT5yZWcgKyBNSUNfMkRfT1VUUFVUX1RJTUlOR18yKTsK PiA+ICsKPiA+ICsJaWYgKCFtaWMtPmk4MF9tb2RlKSB7Cj4gCj4gRGl0dG8uCgpJbiB0aGlzIGNh c2UsIE1JQ18yRF9PVVRQVVRfVElNSU5HXzIgbXVzdCBiZSBzZXQgd2hldGhlciBpdCBpcyBiZWlu Zwp1c2VkIHdpdGggaTgwIG9yIFJHQiBpbnRlcmZhY2UuIE1JQ18yRF9PVVRQVVRfVElNSU5HX3sw LzEvMn0gaGF2ZQpzaW1pbGFyIG5hbWVzLCBzbyBJIHRob3VnaHQgdGhhdCBpdCBpcyBnb29kIHRv IHNldCB0aGVtIGluIGEgZnVuY3Rpb24uCkRvIHlvdSB0aGluayB0aGF0IG1ha2UgYSBuZXcgZnVu Y3Rpb24gZm9yIE1JQ18yRF9PVVRQVVRfVElNSU5HXzI/Cgo+IAo+ID4gKwkJcmVnID0gTUlDX0hf UFVMU0VfV0lEVEhfMkQodm0uaHN5bmNfbGVuKSArCj4gPiArCQkJTUlDX0hfUEVSSU9EX1BJWEVM XzJEKHZtLmhzeW5jX2xlbiArCj4gPiBic19zaXplXzJkICsKPiA+ICsJCQkJCXZtLmhiYWNrX3Bv cmNoICsKPiA+IHZtLmhmcm9udF9wb3JjaCk7Cj4gPiArCQl3cml0ZWwocmVnLCBtaWMtPnJlZyAr IE1JQ18yRF9PVVRQVVRfVElNSU5HXzApOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX0hCUF9TSVpF XzJEKHZtLmhiYWNrX3BvcmNoKSArCj4gPiArCQkJTUlDX0hfUEVSSU9EX1BJWEVMXzJEKHZtLmhm cm9udF9wb3JjaCk7Cj4gPiArCQl3cml0ZWwocmVnLCBtaWMtPnJlZyArIE1JQ18yRF9PVVRQVVRf VElNSU5HXzEpOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1pY19zZXRf cmVnX29uKHN0cnVjdCBleHlub3NfbWljICptaWMsIGJvb2wgZW5hYmxlKQo+ID4gK3sKPiA+ICsJ dTMyIHJlZyA9IHJlYWRsKG1pYy0+cmVnICsgTUlDX09QKTsKPiA+ICsKPiA+ICsJaWYgKGVuYWJs ZSkgewo+ID4gKwkJcmVnICY9IH4oTUlDX01PREVfU0VMX01BU0sgfCBNSUNfQ09SRV9WRVJfQ09O VFJPTAo+ID4gfCBNSUNfUFNSX0VOKTsKPiA+ICsJCXJlZyB8PSAoTUlDX0NPUkVfRU4gfCBNSUNf QlNfQ0hHX09VVCB8IE1JQ19PTl9SRUcpOwo+ID4gKwo+ID4gKwkJaWYgKG1pYy0+aTgwX21vZGUp Cj4gPiArCQkJcmVnIHw9IE1JQ19NT0RFX1NFTF9DT01NQU5EX01PREU7Cj4gCj4gU2V0IGV4cGxp Y2l0bHkgaXQgdG8gdmlkZW8gbW9kZSBpbiBjYXNlIG9mIFJHQiBtb2RlIGV2ZW4gdGhvdWdoCj4g TU9ERV9TRVQgZmllbGQgb2YgdGhpcyByZWdpc3RlciBoYXMgMHgwIGFzIGRlZmF1bHQuCj4gCj4g aS5lLiwKPiAgICAgICAgICAgICAgICByZWcgICY9IH5NSUNfTU9ERV9TRUxfQ09NTUFORF9NT0RF Owo+ICAgICAgICAgICAgICAgIGlmIChtaWMtPmk4MF9tb2RlKQo+ICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZyB8PSBNSUNfTU9ERV9TRUxfQ09NTUFORF9NT0RFOwo+IAoKWWVzLiBUaGF0IHdp bGwgbWFrZSB0aGUgY29kZSBtb3JlIGNsZWFyLgoKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCXJlZyAm PSB+TUlDX0NPUkVfRU47Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmVnIHw9IE1JQ19VUERfUkVHOwo+ ID4gKwl3cml0ZWwocmVnLCBtaWMtPnJlZyArIE1JQ19PUCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmdldF9yZW1vdGVfbm9kZShzdHJ1Y3QgZGV2aWNlX25v ZGUKPiA+ICpmcm9tLCBpbnQgcmVnKSArewo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuZHBv aW50ID0gTlVMTCwgKnJlbW90ZV9ub2RlID0gTlVMTDsKPiA+ICsKPiA+ICsJZW5kcG9pbnQgPSBv Zl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhmcm9tLCByZWcsIC0xKTsKPiA+ICsJaWYgKCFl bmRwb2ludCkgewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byBmaW5kIHJlbW90ZSBw b3J0IGZyb20KPiA+ICVzIiwKPiA+ICsJCQkJZnJvbS0+ZnVsbF9uYW1lKTsKPiA+ICsJCWdvdG8g ZXhpdDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZW1vdGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1v dGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOwo+ID4gKwlpZiAoIXJlbW90ZV9ub2RlKSB7Cj4gPiAr CQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIGZpbmQgcmVtb3RlIHBvcnQgcGFyZW50Cj4gPiBm cm9tICVzIiwKPiA+ICsKPiA+IGZyb20tPmZ1bGxfbmFtZSk7Cj4gPiArCQlnb3RvIGV4aXQ7Cj4g PiArCX0KPiA+ICsKPiA+ICtleGl0Ogo+ID4gKwlvZl9ub2RlX3B1dChlbmRwb2ludCk7Cj4gPiAr CXJldHVybiByZW1vdGVfbm9kZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwYXJzZV9k dChzdHJ1Y3QgZXh5bm9zX21pYyAqbWljKQo+ID4gK3sKPiA+ICsJaW50IHJldCA9IDAsIGksIGo7 Cj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlX25vZGU7Cj4gPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZXNbM107Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBvcmRlciBvZiBl bmRwb2ludHMgZG9lcyBtYXR0ZXIuCj4gPiArCSAqIFRoZSBmaXJzdCBub2RlIG11c3QgYmUgZm9y IGRlY29uIGFuZCB0aGUgc2Vjb25kIG9uZQo+ID4gbXVzdCBiZSBmb3IgZHNpLgo+ID4gKwkgKi8K PiA+ICsJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBOVU1fRU5EUE9JTlRTOyBpKyspIHsKPiA+ICsJ CXJlbW90ZV9ub2RlID0gZ2V0X3JlbW90ZV9ub2RlKG1pYy0+ZGV2LT5vZl9ub2RlLAo+ID4gaSk7 Cj4gPiArCQlpZiAoIXJlbW90ZV9ub2RlKSB7Cj4gPiArCQkJcmV0ID0gLUVQSVBFOwo+ID4gKwkJ CWdvdG8gZXhpdDsKPiA+ICsJCX0KPiA+ICsJCW5vZGVzW2orK10gPSByZW1vdGVfbm9kZTsKPiA+ ICsKPiA+ICsJCXN3aXRjaCAoaSkgewo+ID4gKwkJY2FzZSBFTkRQT0lOVF9ERUNPTl9OT0RFOgo+ ID4gKwkJCS8qIGRlY29uIG5vZGUgKi8KPiA+ICsJCQlpZiAob2ZfZ2V0X2NoaWxkX2J5X25hbWUo cmVtb3RlX25vZGUsCj4gPiArCQkJCQkJImk4MC1pZi10aW1pbmdzIikpCj4gPiArCQkJCW1pYy0+ aTgwX21vZGUgPSAxOwo+ID4gKwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSBFTkRQT0lOVF9E U0lfTk9ERToKPiA+ICsJCQkvKiBwYW5lbCBub2RlICovCj4gPiArCQkJcmVtb3RlX25vZGUgPSBn ZXRfcmVtb3RlX25vZGUocmVtb3RlX25vZGUsCj4gPiAxKTsKPiA+ICsJCQlpZiAoIXJlbW90ZV9u b2RlKSB7Cj4gPiArCQkJCXJldCA9IC1FUElQRTsKPiA+ICsJCQkJZ290byBleGl0Owo+ID4gKwkJ CX0KPiA+ICsJCQlub2Rlc1tqKytdID0gcmVtb3RlX25vZGU7Cj4gPiArCj4gPiArCQkJcmV0ID0g b2ZfZ2V0X3ZpZGVvbW9kZShyZW1vdGVfbm9kZSwKPiA+ICsJCQkJCQkJJm1pYy0+dm0sCj4gPiAw KTsKPiA+ICsJCQlpZiAocmV0KSB7Cj4gPiArCQkJCURSTV9FUlJPUigibWljOiBmYWlsZWQgdG8g Z2V0Cj4gPiB2aWRlb21vZGUiKTsKPiA+ICsJCQkJZ290byBleGl0Owo+ID4gKwkJCX0KPiA+ICsK PiA+ICsJCQlicmVhazsKPiA+ICsJCWRlZmF1bHQ6Cj4gPiArCQkJRFJNX0VSUk9SKCJtaWM6IFVu a25vd24gZW5kcG9pbnQgZnJvbQo+ID4gTUlDIik7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4g PiArCX0KPiA+ICsKPiA+ICtleGl0Ogo+ID4gKwl3aGlsZSAoLS1qID4gLTEpCj4gPiArCQlvZl9u b2RlX3B1dChub2Rlc1tqXSk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ ID4gK3ZvaWQgbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkgeyB9Cj4gCj4g SXQgc2VlbXMgdGhhdCBkcm1fZW5jb2Rlcl9kaXNhYmxlIGZ1bmN0aW9uIG9mIGRybV9jcnRjX2hl bHBlci5jCj4gZG9lc24ndCBjaGVjayBpZiB0aGUgZGlzYWJsZSBjYWxsYmFjayBpcyBOVUxMIG9y IG5vdC4gQW55d2F5LCBubwo+IHByb2JsZW0gYnV0IHRoaXMgZnVudGlvbiBjb3VsZCBiZSByZW1v dmVkIHdpdGggdGhlIGRpc2FibGUgY2FsbGJhY2sKPiBjaGVja2luZyBsYXRlci4KPiAKClllcy4g QWZ0ZXIgdGhlIGNoZWNraW5nIGNvZGUgaXMgaW5zZXJ0ZWQsIGl0IHdvdWxkIGJlIGJldHRlciB0 byByZW1vdmUKdGhpcyBmdW5jdGlvbi4KCj4gPiArCj4gPiArdm9pZCBtaWNfcG9zdF9kaXNhYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZXh5bm9zX21p YyAqbWljID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiAr CW11dGV4X2xvY2soJm1pY19tdXRleCk7Cj4gPiArCWlmICghbWljLT5lbmFibGVkKQo+ID4gKwkJ Z290byBhbHJlYWR5X2Rpc2FibGVkOwo+ID4gKwo+ID4gKwltaWNfc2V0X3BhdGgobWljLCAwKTsK PiA+ICsKPiA+ICsJZm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4gLTE7IGktLSkKPiA+ICsJCWNs a19kaXNhYmxlX3VucHJlcGFyZShtaWMtPmNsa3NbaV0pOwo+ID4gKwo+ID4gKwltaWMtPmVuYWJs ZWQgPSAwOwo+ID4gKwo+ID4gK2FscmVhZHlfZGlzYWJsZWQ6Cj4gPiArCW11dGV4X3VubG9jaygm bWljX211dGV4KTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtaWNfcHJlX2VuYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGV4eW5vc19taWMgKm1pYyA9 IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCj4gPiArCW11 dGV4X2xvY2soJm1pY19tdXRleCk7Cj4gPiArCWlmIChtaWMtPmVuYWJsZWQpCj4gPiArCQlnb3Rv IGFscmVhZHlfZW5hYmxlZDsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IE5VTV9DTEtTOyBp KyspIHsKPiA+ICsJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtaWMtPmNsa3NbaV0pOwo+ID4g KwkJaWYgKHJldCA8IDApIHsKPiA+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgY2xv Y2sgKCVzKVxuIiwKPiA+ICsKPiA+IGNsa19uYW1lc1tpXSk7Cj4gPiArCQkJZ290byB0dXJuX29m Zl9jbGtzOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCW1pY19zZXRfcGF0aChtaWMsIDEp Owo+ID4gKwo+ID4gKwlyZXQgPSBtaWNfc3dfcmVzZXQobWljKTsKPiA+ICsJaWYgKHJldCkgewo+ ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzZXRcbiIpOwo+ID4gKwkJZ290byB0dXJuX29m Zl9jbGtzOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1pY19zZXRfcG9yY2hfdGltaW5nKG1pYyk7Cj4g PiArCW1pY19zZXRfaW1nX3NpemUobWljKTsKPiA+ICsJbWljX3NldF9vdXRwdXRfdGltaW5nKG1p Yyk7Cj4gPiArCW1pY19zZXRfcmVnX29uKG1pYywgMSk7Cj4gPiArCW1pYy0+ZW5hYmxlZCA9IDE7 Cj4gPiArCW11dGV4X3VubG9jaygmbWljX211dGV4KTsKPiA+ICsKPiA+ICsJcmV0dXJuOwo+ID4g Kwo+ID4gK3R1cm5fb2ZmX2Nsa3M6Cj4gPiArCXdoaWxlICgtLWkgPiAtMSkKPiA+ICsJCWNsa19k aXNhYmxlX3VucHJlcGFyZShtaWMtPmNsa3NbaV0pOwo+ID4gK2FscmVhZHlfZW5hYmxlZDoKPiA+ ICsJbXV0ZXhfdW5sb2NrKCZtaWNfbXV0ZXgpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1pY19l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkgeyB9Cj4gPiArCj4gPiArdm9pZCBtaWNf ZGVzdHJveShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGV4 eW5vc19taWMgKm1pYyA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gPiArCWludCBpOwo+ID4g Kwo+ID4gKwltdXRleF9sb2NrKCZtaWNfbXV0ZXgpOwo+ID4gKwlpZiAoIW1pYy0+ZW5hYmxlZCkK PiA+ICsJCWdvdG8gYWxyZWFkeV9kaXNhYmxlZDsKPiA+ICsKPiA+ICsJZm9yIChpID0gTlVNX0NM S1MgLSAxOyBpID4gLTE7IGktLSkKPiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtaWMtPmNs a3NbaV0pOwo+ID4gKwo+ID4gK2FscmVhZHlfZGlzYWJsZWQ6Cj4gPiArCW11dGV4X3VubG9jaygm bWljX211dGV4KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgbWlj X2JyaWRnZV9mdW5jcyA9IHsKPiA+ICsJLmRpc2FibGUgPSBtaWNfZGlzYWJsZSwKPiA+ICsJLnBv c3RfZGlzYWJsZSA9IG1pY19wb3N0X2Rpc2FibGUsCj4gPiArCS5wcmVfZW5hYmxlID0gbWljX3By ZV9lbmFibGUsCj4gPiArCS5lbmFibGUgPSBtaWNfZW5hYmxlLAo+ID4gK307Cj4gPiArCj4gPiAr aW50IGV4eW5vc19taWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7 Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCXN0cnVjdCBleHlu b3NfbWljICptaWM7Cj4gPiArCXN0cnVjdCByZXNvdXJjZSByZXM7Cj4gPiArCWludCByZXQsIGk7 Cj4gPiArCj4gPiArCW1pYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWljKSwgR0ZQX0tF Uk5FTCk7Cj4gPiArCWlmICghbWljKSB7Cj4gPiArCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRv IGFsbG9jYXRlIG1lbW9yeSBmb3IgTUlDCj4gPiBvYmplY3RcbiIpOwo+ID4gKwkJcmV0ID0gLUVO T01FTTsKPiA+ICsJCWdvdG8gZXJyOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1pYy0+ZGV2ID0gZGV2 Owo+ID4gKwo+ID4gKwlyZXQgPSBwYXJzZV9kdChtaWMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJ Z290byBlcnI7Cj4gPiArCj4gPiArCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5v Zl9ub2RlLCAwLCAmcmVzKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6 IEZhaWxlZCB0byBnZXQgbWVtIHJlZ2lvbiBmb3IKPiA+IE1JQ1xuIik7Cj4gPiArCQlnb3RvIGVy cjsKPiA+ICsJfQo+ID4gKwltaWMtPnJlZyA9IGRldm1faW9yZW1hcChkZXYsIHJlcy5zdGFydCwK PiA+IHJlc291cmNlX3NpemUoJnJlcykpOwo+ID4gKwlpZiAoIW1pYy0+cmVnKSB7Cj4gPiArCQlE Uk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIHJlbWFwIGZvciBNSUNcbiIpOwo+ID4gKwkJcmV0ID0g LUVOT01FTTsKPiA+ICsJCWdvdG8gZXJyOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IG9mX2Fk ZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5vZl9ub2RlLCAxLCAmcmVzKTsKPiA+ICsJaWYgKHJldCkg ewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byBnZXQgbWVtIHJlZ2lvbiBmb3IKPiA+ IE1JQ1xuIik7Cj4gPiArCQlnb3RvIGVycjsKPiA+ICsJfQo+ID4gKwltaWMtPnN5c3JlZyA9IGRl dm1faW9yZW1hcChkZXYsIHJlcy5zdGFydCwKPiA+IHJlc291cmNlX3NpemUoJnJlcykpOwo+IAo+ IENvbnNpZGVyIHRvIHVzZSBzeXNjb24gZnJhbWV3b3JrIHRvIGFjY2VzcyBzeXN0ZW0gcmVnaXN0 ZXJzLgo+IAoKWWVzLiBJIHdpbGwgaW52ZXN0aWdhdGUgdGhhdCBtb3JlIGFuZCB1c2UgdGhhdCBp ZiBpdCBpcyBwb3NzaWJsZS4KCj4gPiArCWlmICghbWljLT5zeXNyZWcpIHsKPiA+ICsJCURSTV9F UlJPUigibWljOiBGYWlsZWQgdG8gcmVtYXAgZm9yIE1JQ1xuIik7Cj4gPiArCQlnb3RvIGVycjsK PiA+ICsJfQo+ID4gKwo+ID4gKwltaWMtPmJyaWRnZS5mdW5jcyA9ICZtaWNfYnJpZGdlX2Z1bmNz Owo+ID4gKwltaWMtPmJyaWRnZS5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwo+ID4gKwltaWMtPmJy aWRnZS5kcml2ZXJfcHJpdmF0ZSA9IG1pYzsKPiA+ICsJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJm1p Yy0+YnJpZGdlKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxl ZCB0byBhZGQgTUlDIHRvIHRoZSBnbG9iYWwKPiA+IGJyaWRnZSBsaXN0XG4iKTsKPiA+ICsJCWdv dG8gZXJyOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0xLUzsgaSsr KSB7Cj4gPiArCQltaWMtPmNsa3NbaV0gPSBvZl9jbGtfZ2V0X2J5X25hbWUoZGV2LT5vZl9ub2Rl LAo+ID4gY2xrX25hbWVzW2ldKTsKPiA+ICsJCWlmIChJU19FUlIobWljLT5jbGtzW2ldKSkgewo+ ID4gKwkJCURSTV9FUlJPUigibWljOiBGYWlsZWQgdG8gZ2V0IGNsb2NrCj4gPiAoJXMpXG4iLAo+ ID4gKwo+ID4gY2xrX25hbWVzW2ldKTsKPiA+ICsJCQlyZXQgPSBQVFJfRVJSKG1pYy0+Y2xrc1tp XSk7Cj4gPiArCQkJZ290byBlcnI7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJRFJNX0lO Rk8oIk1JQyBoYXMgYmVlbiBwcm9iZWRcbiIpOwo+IAo+IFVzZSBEUk1fREVCVUdfS01TIGluc3Rl YWQuCj4gCgpUaGF0IHdvdWxkIGJlIGJldHRlci4KClRoYW5rcyBmb3IgeW91ciByZXZpZXcuCgpC ZXN0IHJlZ2FyZHMsCkh5dW5nd29uIEh3YW5nCgo+IFRoYW5rcywKPiBJbmtpIERhZQo+IAo+ID4g Kwo+ID4gK2VycjoKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBleHlub3NfbWljX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sK PiA+ICsJc3RydWN0IGV4eW5vc19taWMgKm1pYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJm1pYy0+YnJpZGdl KTsKPiA+ICsKPiA+ICsJZm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4gLTE7IGktLSkKPiA+ICsJ CWNsa19wdXQobWljLT5jbGtzW2ldKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19taWNfb2ZfbWF0 Y2hbXSA9IHsKPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MzMtbWljIiB9 LAo+ID4gKwl7IH0KPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGV4eW5vc19t aWNfb2ZfbWF0Y2gpOwo+ID4gKwo+ID4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWljX2RyaXZl ciA9IHsKPiA+ICsJLnByb2JlCQk9IGV4eW5vc19taWNfcHJvYmUsCj4gPiArCS5yZW1vdmUJCT0g ZXh5bm9zX21pY19yZW1vdmUsCj4gPiArCS5kcml2ZXIJCT0gewo+ID4gKwkJLm5hbWUJPSAiZXh5 bm9zLW1pYyIsCj4gPiArCQkub3duZXIJPSBUSElTX01PRFVMRSwKPiA+ICsJCS5vZl9tYXRjaF90 YWJsZSA9IGV4eW5vc19taWNfb2ZfbWF0Y2gsCj4gPiArCX0sCj4gPiArfTsKPiA+IC0tCj4gPiAx LjkuMQo+ID4gCj4gPiAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==