From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?6rmA7Iq57Jqw?= Subject: Re: [RFC 2/4] drm/exynos: add fimc ipp driver Date: Thu, 22 Nov 2012 11:30:52 +0900 Message-ID: <50AD8E5C.8060707@samsung.com> References: <1351516246-25853-1-git-send-email-chulspro.kim@samsung.com> <1351516246-25853-3-git-send-email-chulspro.kim@samsung.com> Reply-To: sw0312.kim@samsung.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by gabe.freedesktop.org (Postfix) with ESMTP id A6B53E5C3E for ; Wed, 21 Nov 2012 18:30:52 -0800 (PST) Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MDV007VMAZAH7F0@mailout1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 22 Nov 2012 11:30:51 +0900 (KST) Received: from [10.90.51.68] by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MDV00G6UAZEBZ50@mmp1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 22 Nov 2012 11:30:50 +0900 (KST) In-reply-to: <1351516246-25853-3-git-send-email-chulspro.kim@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Eunchul Kim Cc: jy0.jeon@samsung.com, jaejoon.seo@samsung.com, kyungmin.park@samsung.com, dri-devel@lists.freedesktop.org, jmock.shin@samsung.com List-Id: dri-devel@lists.freedesktop.org SGkgRXVuY2h1bCwKCklNSE8sIGVhY2ggZnVuY3Rpb24gZm9yIHNvdXJjZSBhbmQgZGVzdGluYXRp b24gaGFzIHF1aXRlIHNpbWlsYXIgcm91dGluZQphbmQgaXQgc2VlbXMgdGhhdCB0aGVyZSBhcmUg c29tZSByZWR1bmRhbnQgY29kZS4gSSdtIG5vdCBzdXJlIHRoZXNlCmR1cGxpY2F0ZWQgY29kZSBj YW4gYmUgcmVtb3ZlZCB3aXRoIG1lcmdlaW5nIHNpbWlsYXIgcGFydC4KClNvbWUgY29tbWVudHMg YXJlIGJlbG93LgoKT24gMjAxMuuFhCAxMOyblCAyOeydvCAyMjoxMCwgRXVuY2h1bCBLaW0gd3Jv dGU6Cj4gRklNQyBpcyBzdGFuZCBmb3IgRnVsbHkgSW50ZXJmYWN0aXZlIE1vYmlsZSBDYW1lcmEg YW5kCj4gc3VwcG9ydHMgaW1hZ2Ugc2NhbGVyL3JvdGF0b3IvY3JvcC9mbGlwL2NzYyBhbmQgaW5w dXQvb3V0cHV0IERNQSBvcGVyYXRpb25zLgo+IGlucHV0IERNQSByZWFkcyBpbWFnZSBkYXRhIGZy b20gdGhlIG1lbW9yeS4KPiBvdXRwdXQgRE1BIHdyaXRlcyBpbWFnZSBkYXRhIHRvIG1lbW9yeS4K PiBGSU1DIHN1cHBvcnRzIGltYWdlIHJvdGF0aW9uIGFuZCBpbWFnZSBlZmZlY3QgZnVuY3Rpb25z Lgo+IGFsc28gc3VwcG9ydHMgd3JpdGViYWNrIGFuZCBkaXNwbGF5IG91dHB1dCBvcGVyYXRpb25z Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEV1bmNodWwgS2ltIDxjaHVsc3Byby5raW1Ac2Ftc3VuZy5j b20+Cj4gU2lnbmVkLW9mZi1ieTogSmlueW91bmcgSmVvbiA8ankwLmplb25Ac2Ftc3VuZy5jb20+ Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyAgICAgICAgICAgfCAgICA2 ICsKPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDEgKwo+ ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgIHwgICAxNSArCj4gIGRy aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuaCAgfCAgICAxICsKPiAgZHJpdmVy cy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZpbWMuYyB8IDIwNDEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9maW1j LmggfCAgIDM1ICsKPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9yZWdzLWZpbWMuaCAgICAgICB8 ICA2NjkgKysrKysrKysrKwo+ICBpbmNsdWRlL2RybS9leHlub3NfZHJtLmggICAgICAgICAgICAg ICAgIHwgICAzMyArCj4gIDggZmlsZXMgY2hhbmdlZCwgMjgwMSBpbnNlcnRpb25zKCspLCAwIGRl bGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9l eHlub3NfZHJtX2ZpbWMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4 eW5vcy9leHlub3NfZHJtX2ZpbWMuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2V4eW5vcy9yZWdzLWZpbWMuaAoKPHNuaXA+Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZmltYy5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9l eHlub3NfZHJtX2ZpbWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u M2FkYjQ1Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4 eW5vc19kcm1fZmltYy5jCj4gQEAgLTAsMCArMSwyMDQxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAo+ICsgKiBBdXRob3JzOgo+ICsg KglFdW5jaHVsIEtpbSA8Y2h1bHNwcm8ua2ltQHNhbXN1bmcuY29tPgo+ICsgKglKaW55b3VuZyBK ZW9uIDxqeTAuamVvbkBzYW1zdW5nLmNvbT4KPiArICoJU2FuZ21pbiBMZWUgPGxzbWluLmxlZUBz YW1zdW5nLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyICB0aGUg dGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiArICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4K PiArI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2V4eW5vc19kcm0uaD4KPiArI2luY2x1ZGUgInJlZ3MtZmltYy5o Igo+ICsjaW5jbHVkZSAiZXh5bm9zX2RybV9kcnYuaCIKPiArI2luY2x1ZGUgImV4eW5vc19kcm1f Z2VtLmgiCj4gKyNpbmNsdWRlICJleHlub3NfZHJtX2lwcC5oIgo+ICsjaW5jbHVkZSAiZXh5bm9z X2RybV9maW1jLmgiCj4gKwo+ICsvKgo+ICsgKiBGSU1DIGlzIHN0YW5kIGZvciBGdWxseSBJbnRl cmFjdGl2ZSBNb2JpbGUgQ2FtZXJhIGFuZAo+ICsgKiBzdXBwb3J0cyBpbWFnZSBzY2FsZXIvcm90 YXRvciBhbmQgaW5wdXQvb3V0cHV0IERNQSBvcGVyYXRpb25zLgo+ICsgKiBpbnB1dCBETUEgcmVh ZHMgaW1hZ2UgZGF0YSBmcm9tIHRoZSBtZW1vcnkuCj4gKyAqIG91dHB1dCBETUEgd3JpdGVzIGlt YWdlIGRhdGEgdG8gbWVtb3J5Lgo+ICsgKiBGSU1DIHN1cHBvcnRzIGltYWdlIHJvdGF0aW9uIGFu ZCBpbWFnZSBlZmZlY3QgZnVuY3Rpb25zLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgRklNQ19NQVhf REVWUwk0Cj4gKyNkZWZpbmUgRklNQ19NQVhfU1JDCTIKPiArI2RlZmluZSBGSU1DX01BWF9EU1QJ MzIKPiArI2RlZmluZSBGSU1DX0NMS19SQVRFCQkxNjY3NTAwMDAKPiArI2RlZmluZSBGSU1DX0NM S19SQVRFX1IyCQkxODAwMDAwMDAKPiArI2RlZmluZSBGSU1DX0JVRl9TVE9QCTEKPiArI2RlZmlu ZSBGSU1DX0JVRl9TVEFSVAkyCj4gKyNkZWZpbmUgRklNQ19SRUdfU1oJCTMyCj4gKyNkZWZpbmUg RklNQ19XSURUSF9JVFVfNzA5CTEyODAKPiArCj4gKyNkZWZpbmUgZ2V0X2ZpbWNfY29udGV4dChk ZXYpCXBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKQo+ICsjZGVm aW5lIGdldF9jdHhfZnJvbV9pcHBkcnYoaXBwZHJ2KQljb250YWluZXJfb2YoaXBwZHJ2LFwKPiAr CQkJCQlzdHJ1Y3QgZmltY19jb250ZXh0LCBpcHBkcnYpOwo+ICsjZGVmaW5lIGZpbWNfcmVhZChv ZmZzZXQpCQlyZWFkbChjdHgtPnJlZ3MgKyAob2Zmc2V0KSk7Cj4gKyNkZWZpbmUgZmltY193cml0 ZShjZmcsIG9mZnNldCkJd3JpdGVsKGNmZywgY3R4LT5yZWdzICsgKG9mZnNldCkpOwo+ICsKPiAr ZW51bSBmaW1jX3diIHsKPiArCUZJTUNfV0JfTk9ORSwKPiArCUZJTUNfV0JfQSwKPiArCUZJTUNf V0JfQiwKPiArfTsKPiArCj4gKy8qCj4gKyAqIEEgc3RydWN0dXJlIG9mIHNjYWxlci4KPiArICoK PiArICogQHJhbmdlOiBuYXJyb3csIHdpZGUuCj4gKyAqIEBieXBhc3M6IHVudXNlZCBzY2FsZXIg cGF0aC4KPiArICogQHVwX2g6IGhvcml6b250YWwgc2NhbGUgdXAuCj4gKyAqIEB1cF92OiB2ZXJ0 aWNhbCBzY2FsZSB1cC4KPiArICogQGhyYXRpbzogaG9yaXpvbnRhbCByYXRpby4KPiArICogQHZy YXRpbzogdmVydGljYWwgcmF0aW8uCj4gKyAqLwo+ICtzdHJ1Y3QgZmltY19zY2FsZXIgewo+ICsJ Ym9vbAlyYW5nZTsKPiArCWJvb2wgYnlwYXNzOwo+ICsJYm9vbCB1cF9oOwo+ICsJYm9vbCB1cF92 Owo+ICsJdTMyIGhyYXRpbzsKPiArCXUzMiB2cmF0aW87Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBB IHN0cnVjdHVyZSBvZiBzY2FsZXIgY2FwYWJpbGl0eS4KPiArICoKPiArICogZmluZCB1c2VyIG1h bnVhbCB0YWJsZSA0My0xLgo+ICsgKiBAaW5faG9yaTogc2NhbGVyIGlucHV0IGhvcml6b250YWwg c2l6ZS4KPiArICogQGJ5cGFzczogc2NhbGVyIGJ5cGFzcyBtb2RlLgo+ICsgKiBAZHN0X2hfd29f cm90OiB0YXJnZXQgaG9yaXpvbnRhbCBzaXplIHdpdGhvdXQgb3V0cHV0IHJvdGF0aW9uLgo+ICsg KiBAZHN0X2hfcm90OiB0YXJnZXQgaG9yaXpvbnRhbCBzaXplIHdpdGggb3V0cHV0IHJvdGF0aW9u Lgo+ICsgKiBAcmxfd193b19yb3Q6IHJlYWwgd2lkdGggd2l0aG91dCBpbnB1dCByb3RhdGlvbi4K PiArICogQHJsX2hfcm90OiByZWFsIGhlaWdodCB3aXRob3V0IG91dHB1dCByb3RhdGlvbi4KPiAr ICovCj4gK3N0cnVjdCBmaW1jX2NhcGFiaWxpdHkgewo+ICsJLyogc2NhbGVyICovCj4gKwl1MzIJ aW5faG9yaTsKPiArCXUzMglieXBhc3M7Cj4gKwkvKiBvdXRwdXQgcm90YXRvciAqLwo+ICsJdTMy CWRzdF9oX3dvX3JvdDsKPiArCXUzMglkc3RfaF9yb3Q7Cj4gKwkvKiBpbnB1dCByb3RhdG9yICov Cj4gKwl1MzIJcmxfd193b19yb3Q7Cj4gKwl1MzIJcmxfaF9yb3Q7Cj4gK307Cj4gKwo+ICsvKgo+ ICsgKiBBIHN0cnVjdHVyZSBvZiBmaW1jIGNvbnRleHQuCj4gKyAqCj4gKyAqIEBpcHBkcnY6IHBy ZXBhcmUgaW5pdGlhbGl6YXRpb24gdXNpbmcgaXBwZHJ2Lgo+ICsgKiBAcmVnc19yZXM6IHJlZ2lz dGVyIHJlc291cmNlcy4KPiArICogQHJlZ3M6IG1lbW9yeSBtYXBwZWQgaW8gcmVnaXN0ZXJzLgo+ ICsgKiBAbG9jazogbG9ja2luZyBvZiBvcGVyYXRpb25zLgo+ICsgKiBAc2Nsa19maW1jX2Nsazog ZmltYyBzb3VyY2UgY2xvY2suCj4gKyAqIEBmaW1jX2NsazogZmltYyBjbG9jay4KPiArICogQHdi X2Nsazogd3JpdGViYWNrIGEgY2xvY2suCj4gKyAqIEB3Yl9iX2Nsazogd3JpdGViYWNrIGIgY2xv Y2suCj4gKyAqIEBzYzogc2NhbGVyIGluZm9tYXRpb25zLgo+ICsgKiBAY2FwYTogc2NhbGVyIGNh cGFiaWxpdHkuCj4gKyAqIEBvZHI6IG9yZGVyaW5nIG9mIFlVVi4KPiArICogQHZlcjogZmltYyB2 ZXJzaW9uLgo+ICsgKiBAcG9sOiBwb3Jhcml0eSBvZiB3cml0ZWJhY2suCj4gKyAqIEBpZDogZmlt YyBpZC4KPiArICogQGlycTogaXJxIG51bWJlci4KPiArICogQHN1c3BlbmRlZDogcW9zIG9wZXJh dGlvbnMuCj4gKyAqLwo+ICtzdHJ1Y3QgZmltY19jb250ZXh0IHsKPiArCXN0cnVjdCBleHlub3Nf ZHJtX2lwcGRydglpcHBkcnY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlZ3NfcmVzOwo+ICsJdm9p ZCBfX2lvbWVtCSpyZWdzOwo+ICsJc3BpbmxvY2tfdAlsb2NrOwo+ICsJc3RydWN0IGNsawkqc2Ns a19maW1jX2NsazsKPiArCXN0cnVjdCBjbGsJKmZpbWNfY2xrOwo+ICsJc3RydWN0IGNsawkqd2Jf Y2xrOwo+ICsJc3RydWN0IGNsawkqd2JfYl9jbGs7Cj4gKwlzdHJ1Y3QgZmltY19zY2FsZXIJc2M7 Cj4gKwlzdHJ1Y3QgZmltY19jYXBhYmlsaXR5CSpjYXBhOwo+ICsJZW51bSBleHlub3NfZHJtX2Zp bWNfdmVyCXZlcjsKPiArCXN0cnVjdCBleHlub3NfZHJtX2ZpbWNfcG9sCXBvbDsKPiArCWludAlp ZDsKPiArCWludAlpcnE7Cj4gKwlib29sCXN1c3BlbmRlZDsKPiArfTsKPiArCj4gK3N0cnVjdCBm aW1jX2NhcGFiaWxpdHkgZmltYzUxX2NhcGFbRklNQ19NQVhfREVWU10gPSB7Cj4gKwl7Cj4gKwkJ LmluX2hvcmkgPSA0MjI0LAo+ICsJCS5ieXBhc3MgPSA4MTkyLAo+ICsJCS5kc3RfaF93b19yb3Qg PSA0MjI0LAo+ICsJCS5kc3RfaF9yb3QgPSAxOTIwLAo+ICsJCS5ybF93X3dvX3JvdCA9IDgxOTIs Cj4gKwkJLnJsX2hfcm90ID0gMTkyMCwKPiArCX0sIHsKPiArCQkuaW5faG9yaSA9IDQyMjQsCj4g KwkJLmJ5cGFzcyA9IDgxOTIsCj4gKwkJLmRzdF9oX3dvX3JvdCA9IDQyMjQsCj4gKwkJLmRzdF9o X3JvdCA9IDE5MjAsCj4gKwkJLnJsX3dfd29fcm90ID0gODE5MiwKPiArCQkucmxfaF9yb3QgPSAx OTIwLAo+ICsJfSwgewo+ICsJCS5pbl9ob3JpID0gNDIyNCwKPiArCQkuYnlwYXNzID0gODE5MiwK PiArCQkuZHN0X2hfd29fcm90ID0gNDIyNCwKPiArCQkuZHN0X2hfcm90ID0gMTkyMCwKPiArCQku cmxfd193b19yb3QgPSA4MTkyLAo+ICsJCS5ybF9oX3JvdCA9IDE5MjAsCj4gKwl9LCB7Cj4gKwkJ LmluX2hvcmkgPSAxOTIwLAo+ICsJCS5ieXBhc3MgPSA4MTkyLAo+ICsJCS5kc3RfaF93b19yb3Qg PSAxOTIwLAo+ICsJCS5kc3RfaF9yb3QgPSAxMzY2LAo+ICsJCS5ybF93X3dvX3JvdCA9IDgxOTIs Cj4gKwkJLnJsX2hfcm90ID0gMTM2NiwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBm aW1jX3N3X3Jlc2V0KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgYm9vbCBwYXR0ZXJuKQo+ICt7 Cj4gKwl1MzIgY2ZnOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOnBhdHRlcm5bJWRdXG4iLCBf X2Z1bmNfXywgcGF0dGVybik7Cj4gKwo+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVNSQ0ZN VCk7Cj4gKwljZmcgfD0gRVhZTk9TX0NJU1JDRk1UX0lUVTYwMV84QklUOwo+ICsJaWYgKHBhdHRl cm4pCj4gKwkJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX1RFU1RQQVRURVJOX0NPTE9SX0JBUjsKPiAr Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU1JDRk1UKTsKPiArCj4gKwkvKiBzL3cgcmVz ZXQgKi8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwljZmcgfD0gKEVY WU5PU19DSUdDVFJMX1NXUlNUKTsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7 Cj4gKwo+ICsJLyogcy93IHJlc2V0IGNvbXBsZXRlICovCj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZ Tk9TX0NJR0NUUkwpOwo+ICsJY2ZnICY9IH5FWFlOT1NfQ0lHQ1RSTF9TV1JTVDsKPiArCWZpbWNf d3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwo+ICsJLyogcmVzZXQgc2VxdWVuY2UgKi8K PiArCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lGQ05UU0VRKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZmltY19zZXRfY2FtYmxrX2ZpbWQwX3diKHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCkK PiArewo+ICsJdTMyIGNhbWJsa19jZmc7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIF9f ZnVuY19fKTsKPiArCj4gKwljYW1ibGtfY2ZnID0gcmVhZGwoU1lTUkVHX0NBTUVSQV9CTEspOwo+ ICsJY2FtYmxrX2NmZyAmPSB+KFNZU1JFR19GSU1EMFdCX0RFU1RfTUFTSyk7Cj4gKwljYW1ibGtf Y2ZnIHw9IGN0eC0+aWQgPDwgKFNZU1JFR19GSU1EMFdCX0RFU1RfU0hJRlQpOwo+ICsKPiArCXdy aXRlbChjYW1ibGtfY2ZnLCBTWVNSRUdfQ0FNRVJBX0JMSyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGZpbWNfc2V0X3R5cGVfY3RybChzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgsIGVudW0gZmlt Y193YiB3YikKPiArewo+ICsJdTMyIGNmZzsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczp3Ylsl ZF1cbiIsIF9fZnVuY19fLCB3Yik7Cj4gKwo+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSUdD VFJMKTsKPiArCWNmZyAmPSB+KEVYWU5PU19DSUdDVFJMX1RFU1RQQVRURVJOX01BU0sgfAo+ICsJ CUVYWU5PU19DSUdDVFJMX1NFTENBTV9JVFVfTUFTSyB8Cj4gKwkJRVhZTk9TX0NJR0NUUkxfU0VM Q0FNX01JUElfTUFTSyB8Cj4gKwkJRVhZTk9TX0NJR0NUUkxfU0VMQ0FNX0ZJTUNfTUFTSyB8Cj4g KwkJRVhZTk9TX0NJR0NUUkxfU0VMV0JfQ0FNSUZfTUFTSyB8Cj4gKwkJRVhZTk9TX0NJR0NUUkxf U0VMV1JJVEVCQUNLX01BU0spOwo+ICsKPiArCXN3aXRjaCAod2IpIHsKPiArCWNhc2UgRklNQ19X Ql9BOgo+ICsJCWNmZyB8PSAoRVhZTk9TX0NJR0NUUkxfU0VMV1JJVEVCQUNLX0EgfAo+ICsJCQlF WFlOT1NfQ0lHQ1RSTF9TRUxXQl9DQU1JRl9XUklURUJBQ0spOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBGSU1DX1dCX0I6Cj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lHQ1RSTF9TRUxXUklURUJBQ0tfQiB8 Cj4gKwkJCUVYWU5PU19DSUdDVFJMX1NFTFdCX0NBTUlGX1dSSVRFQkFDSyk7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIEZJTUNfV0JfTk9ORToKPiArCWRlZmF1bHQ6Cj4gKwkJY2ZnIHw9IChFWFlOT1Nf Q0lHQ1RSTF9TRUxDQU1fSVRVX0EgfAo+ICsJCQlFWFlOT1NfQ0lHQ1RSTF9TRUxXUklURUJBQ0tf QSB8Cj4gKwkJCUVYWU5PU19DSUdDVFJMX1NFTENBTV9NSVBJX0EgfAo+ICsJCQlFWFlOT1NfQ0lH Q1RSTF9TRUxDQU1fRklNQ19JVFUpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWZpbWNfd3Jp dGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZpbWNfc2V0 X3BvbGFyaXR5KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwKPiArCXN0cnVjdCBleHlub3NfZHJt X2ZpbWNfcG9sICpwb2wpCj4gK3sKPiArCXUzMiBjZmc7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygi JXM6aW52X3BjbGtbJWRdaW52X3ZzeW5jWyVkXVxuIiwKPiArCQlfX2Z1bmNfXywgcG9sLT5pbnZf cGNsaywgcG9sLT5pbnZfdnN5bmMpOwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6aW52X2hyZWZbJWRd aW52X2hzeW5jWyVkXVxuIiwKPiArCQlfX2Z1bmNfXywgcG9sLT5pbnZfaHJlZiwgcG9sLT5pbnZf aHN5bmMpOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwljZmcg Jj0gfihFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xQQ0xLIHwgRVhZTk9TX0NJR0NUUkxfSU5WUE9MVlNZ TkMgfAo+ICsJCSBFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xIUkVGIHwgRVhZTk9TX0NJR0NUUkxfSU5W UE9MSFNZTkMpOwo+ICsKPiArCWlmIChwb2wtPmludl9wY2xrKQo+ICsJCWNmZyB8PSBFWFlOT1Nf Q0lHQ1RSTF9JTlZQT0xQQ0xLOwo+ICsJaWYgKHBvbC0+aW52X3ZzeW5jKQo+ICsJCWNmZyB8PSBF WFlOT1NfQ0lHQ1RSTF9JTlZQT0xWU1lOQzsKPiArCWlmIChwb2wtPmludl9ocmVmKQo+ICsJCWNm ZyB8PSBFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xIUkVGOwo+ICsJaWYgKHBvbC0+aW52X2hzeW5jKQo+ ICsJCWNmZyB8PSBFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xIU1lOQzsKPiArCj4gKwlmaW1jX3dyaXRl KGNmZywgRVhZTk9TX0NJR0NUUkwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmaW1jX2hhbmRs ZV9qcGVnKHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgYm9vbCBlbmFibGUpCj4gK3sKPiArCXUz MiBjZmc7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6ZW5hYmxlWyVkXVxuIiwgX19mdW5jX18s IGVuYWJsZSk7Cj4gKwo+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSUdDVFJMKTsKPiArCWlm IChlbmFibGUpCj4gKwkJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX0NBTV9KUEVHOwo+ICsJZWxzZQo+ ICsJCWNmZyAmPSB+RVhZTk9TX0NJR0NUUkxfQ0FNX0pQRUc7Cj4gKwo+ICsJZmltY193cml0ZShj ZmcsIEVYWU5PU19DSUdDVFJMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmltY19oYW5kbGVf aXJxKHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgYm9vbCBlbmFibGUsCj4gKwlib29sIG92ZXJm bG93LCBib29sIGxldmVsKQo+ICt7Cj4gKwl1MzIgY2ZnOwo+ICsKPiArCURSTV9ERUJVR19LTVMo IiVzOmVuYWJsZVslZF1vdmVyZmxvd1slZF1sZXZlbFslZF1cbiIsIF9fZnVuY19fLAo+ICsJCQll bmFibGUsIG92ZXJmbG93LCBsZXZlbCk7Cj4gKwo+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19D SUdDVFJMKTsKPiArCWlmIChlbmFibGUpIHsKPiArCQljZmcgJj0gfihFWFlOT1NfQ0lHQ1RSTF9J UlFfT1ZGRU4gfCBFWFlOT1NfQ0lHQ1RSTF9JUlFfTEVWRUwpOwo+ICsJCWNmZyB8PSBFWFlOT1Nf Q0lHQ1RSTF9JUlFfRU5BQkxFOwo+ICsJCWlmIChvdmVyZmxvdykKPiArCQkJY2ZnIHw9IEVYWU5P U19DSUdDVFJMX0lSUV9PVkZFTjsKPiArCQlpZiAobGV2ZWwpCj4gKwkJCWNmZyB8PSBFWFlOT1Nf Q0lHQ1RSTF9JUlFfTEVWRUw7Cj4gKwl9IGVsc2UKPiArCQljZmcgJj0gfihFWFlOT1NfQ0lHQ1RS TF9JUlFfT1ZGRU4gfCBFWFlOT1NfQ0lHQ1RSTF9JUlFfRU5BQkxFKTsKPiArCj4gKwlmaW1jX3dy aXRlKGNmZywgRVhZTk9TX0NJR0NUUkwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmaW1jX2Ns ZWFyX2lycShzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4gK3sKPiArCXUzMiBjZmc7Cj4gKwo+ ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwljZmcgPSBmaW1jX3Jl YWQoRVhZTk9TX0NJR0NUUkwpOwo+ICsJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX0lSUV9DTFI7Cj4g KwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJR0NUUkwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCBmaW1jX2NoZWNrX292ZihzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4gK3sKPiArCXN0cnVj dCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJdTMyIGNmZywg c3RhdHVzLCBmbGFnOwo+ICsKPiArCXN0YXR1cyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lTVEFUVVMp Owo+ICsJZmxhZyA9IEVYWU5PU19DSVNUQVRVU19PVkZJWSB8IEVYWU5PU19DSVNUQVRVU19PVkZJ Q0IgfAo+ICsJCUVYWU5PU19DSVNUQVRVU19PVkZJQ1I7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygi JXM6ZmxhZ1sweCV4XVxuIiwgX19mdW5jX18sIGZsYWcpOwo+ICsKPiArCWlmIChzdGF0dXMgJiBm bGFnKSB7Cj4gKwkJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVdET0ZTVCk7Cj4gKwkJY2ZnIHw9 IChFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSVkgfCBFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSUNCIHwK PiArCQkJRVhZTk9TX0NJV0RPRlNUX0NMUk9WRklDUik7Cj4gKwo+ICsJCWZpbWNfd3JpdGUoY2Zn LCBFWFlOT1NfQ0lXRE9GU1QpOwo+ICsKPiArCQljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJV0RP RlNUKTsKPiArCQljZmcgJj0gfihFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSVkgfCBFWFlOT1NfQ0lX RE9GU1RfQ0xST1ZGSUNCIHwKPiArCQkJRVhZTk9TX0NJV0RPRlNUX0NMUk9WRklDUik7Cj4gKwo+ ICsJCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lXRE9GU1QpOwo+ICsKPiArCQlkZXZfZXJyKGlw cGRydi0+ZGV2LCAib2NjdXJlZCBvdmVyZmxvdyBhdCAlZCwgc3RhdHVzIDB4JXguXG4iLAo+ICsJ CQljdHgtPmlkLCBzdGF0dXMpOwo+ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVy biBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZmltY19jaGVja19mcmFtZV9lbmQoc3Ry dWN0IGZpbWNfY29udGV4dCAqY3R4KQo+ICt7Cj4gKwl1MzIgY2ZnOwo+ICsKPiArCWNmZyA9IGZp bWNfcmVhZChFWFlOT1NfQ0lTVEFUVVMpOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOmNmZ1sw eCV4XVxuIiwgX19mdW5jX18sIGNmZyk7Cj4gKwo+ICsJaWYgKCEoY2ZnICYgRVhZTk9TX0NJU1RB VFVTX0ZSQU1FRU5EKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJY2ZnICY9IH4oRVhZTk9T X0NJU1RBVFVTX0ZSQU1FRU5EKTsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTVEFUVVMp Owo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfZ2V0X2J1 Zl9pZChzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4gK3sKPiArCXUzMiBjZmc7Cj4gKwlpbnQg ZnJhbWVfY250LCBidWZfaWQ7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIF9fZnVuY19f KTsKPiArCj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJU1RBVFVTMik7Cj4gKwlmcmFtZV9j bnQgPSBFWFlOT1NfQ0lTVEFUVVMyX0dFVF9GUkFNRUNPVU5UX0JFRk9SRShjZmcpOwo+ICsKPiAr CWlmIChmcmFtZV9jbnQgPT0gMCkKPiArCQlmcmFtZV9jbnQgPSBFWFlOT1NfQ0lTVEFUVVMyX0dF VF9GUkFNRUNPVU5UX1BSRVNFTlQoY2ZnKTsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpwcmVz ZW50WyVkXWJlZm9yZVslZF1cbiIsIF9fZnVuY19fLAo+ICsJCUVYWU5PU19DSVNUQVRVUzJfR0VU X0ZSQU1FQ09VTlRfUFJFU0VOVChjZmcpLAo+ICsJCUVYWU5PU19DSVNUQVRVUzJfR0VUX0ZSQU1F Q09VTlRfQkVGT1JFKGNmZykpOwo+ICsKPiArCWlmIChmcmFtZV9jbnQgPT0gMCkgewo+ICsJCURS TV9FUlJPUigiZmFpbGVkIHRvIGdldCBmcmFtZSBjb3VudC5cbiIpOwo+ICsJCXJldHVybiAtRUlP Owo+ICsJfQo+ICsKPiArCWJ1Zl9pZCA9IGZyYW1lX2NudCAtIDE7Cj4gKwlEUk1fREVCVUdfS01T KCIlczpidWZfaWRbJWRdXG4iLCBfX2Z1bmNfXywgYnVmX2lkKTsKPiArCj4gKwlyZXR1cm4gYnVm X2lkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmaW1jX2hhbmRsZV9sYXN0ZW5kKHN0cnVjdCBm aW1jX2NvbnRleHQgKmN0eCwgYm9vbCBlbmFibGUpCj4gK3sKPiArCXUzMiBjZmc7Cj4gKwo+ICsJ RFJNX0RFQlVHX0tNUygiJXM6ZW5hYmxlWyVkXVxuIiwgX19mdW5jX18sIGVuYWJsZSk7Cj4gKwo+ ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSU9DVFJMKTsKPiArCWlmIChlbmFibGUpCj4gKwkJ Y2ZnIHw9IEVYWU5PU19DSU9DVFJMX0xBU1RFTkRFTjsKPiArCWVsc2UKPiArCQljZmcgJj0gfkVY WU5PU19DSU9DVFJMX0xBU1RFTkRFTjsKPiArCj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJ T0NUUkwpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBmaW1jX3NyY19zZXRfZm10X29yZGVy KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgdTMyIGZtdCkKPiArewo+ICsJc3RydWN0IGV4eW5v c19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwl1MzIgY2ZnOwo+ICsKPiAr CURSTV9ERUJVR19LTVMoIiVzOmZtdFsweCV4XVxuIiwgX19mdW5jX18sIGZtdCk7Cj4gKwo+ICsJ LyogUkdCICovCj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsKPiArCWNmZyAm PSB+RVhZTk9TX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0JfTUFTSzsKPiArCj4gKwlzd2l0Y2ggKGZt dCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCQljZmcgfD0gRVhZTk9TX0NJU0ND VFJMX0lOUkdCX0ZNVF9SR0I1NjU7Cj4gKwkJZmltY193cml0ZShjZmcsIEVYWU5PU19DSVNDQ1RS TCk7Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4Ogo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lTQ0NUUkxfSU5SR0JfRk1U X1JHQjg4ODsKPiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJMKTsKPiArCQlyZXR1 cm4gMDsKPiArCWRlZmF1bHQ6Cj4gKwkJLyogYnlwYXNzICovCj4gKwkJYnJlYWs7Cj4gKwl9Cj4g Kwo+ICsJLyogWVVWICovCj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX01TQ1RSTCk7Cj4gKwlj ZmcgJj0gfihFWFlOT1NfTVNDVFJMX09SREVSMlBfU0hJRlRfTUFTSyB8Cj4gKwkJRVhZTk9TX01T Q1RSTF9DX0lOVF9JTl8yUExBTkUgfAo+ICsJCUVYWU5PU19NU0NUUkxfT1JERVI0MjJfWUNCWUNS KTsKPiArCj4gKwlzd2l0Y2ggKGZtdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gKwkJ Y2ZnIHw9IEVYWU5PU19NU0NUUkxfT1JERVI0MjJfWUNCWUNSOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBEUk1fRk9STUFUX1lWWVU6Cj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfT1JERVI0MjJfWUNS WUNCOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1VZVlk6Cj4gKwkJY2ZnIHw9IEVY WU5PU19NU0NUUkxfT1JERVI0MjJfQ0JZQ1JZOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9S TUFUX1ZZVVk6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0Ogo+ICsJCWNmZyB8PSBFWFlOT1Nf TVNDVFJMX09SREVSNDIyX0NSWUNCWTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9O VjIxOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WNjE6Cj4gKwkJY2ZnIHw9IChFWFlOT1NfTVNDVFJM X09SREVSMlBfTFNCX0NSQ0IgfAo+ICsJCQlFWFlOT1NfTVNDVFJMX0NfSU5UX0lOXzJQTEFORSk7 Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+ICsJY2FzZSBEUk1fRk9S TUFUX1lVVjQyMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4gKwkJY2ZnIHw9IEVYWU5P U19NU0NUUkxfQ19JTlRfSU5fM1BMQU5FOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFU X05WMTI6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYxMk1UOgo+ICsJY2FzZSBEUk1fRk9STUFUX05W MTY6Cj4gKwkJY2ZnIHw9IChFWFlOT1NfTVNDVFJMX09SREVSMlBfTFNCX0NCQ1IgfAo+ICsJCQlF WFlOT1NfTVNDVFJMX0NfSU5UX0lOXzJQTEFORSk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJpbmF2bGlkIHNvdXJjZSB5dXYgb3JkZXIgMHgleC5c biIsIGZtdCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZmltY193cml0ZShj ZmcsIEVYWU5PU19NU0NUUkwpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9CgpUaGlzIGZ1bmN0aW9u IGlzIG9ubHkgY2FsbGVkIGJ5IGZpbWNfc3JjX3NldF9mbXQoKSBhbmQgYm90aCBmdW5jdGlvbnMK aGF2ZSByb3V0aW5lIHRvIGNoZWNrIGZvcm1hdC4gVGhlcmUgYXJlIGFsc28gYWNjZXNzaW5nIEVY WU5PU19NU0NUUkwuIFNvCmRvbmUgdGhvc2Ugcm91dGluZSBhdCBvbmUgbWVyZ2VkIGZ1bmN0aW9u IGNhbiBiZSBoZWxwZnVsLgoKPiArCj4gK3N0YXRpYyBpbnQgZmltY19zcmNfc2V0X2ZtdChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4gK3sKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0 eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAq aXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJdTMyIGNmZzsKPiArCj4gKwlEUk1fREVCVUdfS01T KCIlczpmbXRbMHgleF1cbiIsIF9fZnVuY19fLCBmbXQpOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVh ZChFWFlOT1NfTVNDVFJMKTsKPiArCWNmZyAmPSB+RVhZTk9TX01TQ1RSTF9JTkZPUk1BVF9SR0I7 Cj4gKwo+ICsJc3dpdGNoIChmbXQpIHsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKwlj YXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ICsJ CWNmZyB8PSBFWFlOT1NfTVNDVFJMX0lORk9STUFUX1JHQjsKPiArCQlicmVhazsKPiArCWNhc2Ug RFJNX0ZPUk1BVF9ZVVY0NDQ6Cj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfSU5GT1JNQVRfWUNC Q1I0MjA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKPiArCWNhc2UgRFJN X0ZPUk1BVF9ZVllVOgo+ICsJY2FzZSBEUk1fRk9STUFUX1VZVlk6Cj4gKwljYXNlIERSTV9GT1JN QVRfVllVWToKPiArCQljZmcgfD0gRVhZTk9TX01TQ1RSTF9JTkZPUk1BVF9ZQ0JDUjQyMl8xUExB TkU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYxNjoKPiArCWNhc2UgRFJNX0ZP Uk1BVF9OVjYxOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKPiArCQljZmcgfD0gRVhZTk9T X01TQ1RSTF9JTkZPUk1BVF9ZQ0JDUjQyMjsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ICsJY2FzZSBEUk1fRk9STUFU X05WMTI6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEy TVQ6Cj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfSU5GT1JNQVRfWUNCQ1I0MjA7Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJpbmF2bGlkIHNvdXJj ZSBmb3JtYXQgMHgleC5cbiIsIGZtdCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19NU0NUUkwpOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVh ZChFWFlOT1NfQ0lETUFQQVJBTSk7Cj4gKwljZmcgJj0gfkVYWU5PU19DSURNQVBBUkFNX1JfTU9E RV9NQVNLOwo+ICsKPiArCWlmIChmbXQgPT0gRFJNX0ZPUk1BVF9OVjEyTVQpCj4gKwkJY2ZnIHw9 IEVYWU5PU19DSURNQVBBUkFNX1JfTU9ERV82NFgzMjsKPiArCWVsc2UKPiArCQljZmcgfD0gRVhZ Tk9TX0NJRE1BUEFSQU1fUl9NT0RFX0xJTkVBUjsKPiArCj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZ Tk9TX0NJRE1BUEFSQU0pOwo+ICsKPiArCXJldHVybiBmaW1jX3NyY19zZXRfZm10X29yZGVyKGN0 eCwgZm10KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaW1jX3NyY19zZXRfdHJhbnNmKHN0cnVj dCBkZXZpY2UgKmRldiwKPiArCQllbnVtIGRybV9leHlub3NfZGVncmVlIGRlZ3JlZSwKPiArCQll bnVtIGRybV9leHlub3NfZmxpcCBmbGlwKQo+ICt7Cj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpj dHggPSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYg KmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiArCXUzMiBjZmcxLCBjZmcyOwo+ICsKPiArCURSTV9E RUJVR19LTVMoIiVzOmRlZ3JlZVslZF1mbGlwWzB4JXhdXG4iLCBfX2Z1bmNfXywKPiArCQlkZWdy ZWUsIGZsaXApOwo+ICsKPiArCWNmZzEgPSBmaW1jX3JlYWQoRVhZTk9TX01TQ1RSTCk7Cj4gKwlj ZmcxICY9IH4oRVhZTk9TX01TQ1RSTF9GTElQX1hfTUlSUk9SIHwKPiArCQlFWFlOT1NfTVNDVFJM X0ZMSVBfWV9NSVJST1IpOwo+ICsKPiArCWNmZzIgPSBmaW1jX3JlYWQoRVhZTk9TX0NJVFJHRk1U KTsKPiArCWNmZzIgJj0gfkVYWU5PU19DSVRSR0ZNVF9JTlJPVDkwX0NMT0NLV0lTRTsKPiArCj4g Kwlzd2l0Y2ggKGRlZ3JlZSkgewo+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8wOgo+ICsJCWlm IChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4gKwkJCWNmZzEgfD0gRVhZTk9T X01TQ1RSTF9GTElQX1hfTUlSUk9SOwo+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX1ZF UlRJQ0FMKQo+ICsJCQljZmcxIHw9IEVYWU5PU19NU0NUUkxfRkxJUF9ZX01JUlJPUjsKPiArCQli cmVhazsKPiArCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfOTA6Cj4gKwkJY2ZnMiB8PSBFWFlOT1Nf Q0lUUkdGTVRfSU5ST1Q5MF9DTE9DS1dJU0U7Cj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZM SVBfSE9SSVpPTlRBTCkKPiArCQkJY2ZnMSB8PSBFWFlOT1NfTVNDVFJMX0ZMSVBfWF9NSVJST1I7 Cj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCj4gKwkJCWNmZzEgfD0g RVhZTk9TX01TQ1RSTF9GTElQX1lfTUlSUk9SOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBFWFlOT1Nf RFJNX0RFR1JFRV8xODA6Cj4gKwkJY2ZnMSB8PSAoRVhZTk9TX01TQ1RSTF9GTElQX1hfTUlSUk9S IHwKPiArCQkJRVhZTk9TX01TQ1RSTF9GTElQX1lfTUlSUk9SKTsKPiArCQlpZiAoZmxpcCAmIEVY WU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+ICsJCQljZmcxICY9IH5FWFlOT1NfTVNDVFJMX0ZM SVBfWF9NSVJST1I7Cj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCj4g KwkJCWNmZzEgJj0gfkVYWU5PU19NU0NUUkxfRkxJUF9ZX01JUlJPUjsKPiArCQlicmVhazsKPiAr CWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgo+ICsJCWNmZzEgfD0gKEVYWU5PU19NU0NUUkxf RkxJUF9YX01JUlJPUiB8Cj4gKwkJCUVYWU5PU19NU0NUUkxfRkxJUF9ZX01JUlJPUik7Cj4gKwkJ Y2ZnMiB8PSBFWFlOT1NfQ0lUUkdGTVRfSU5ST1Q5MF9DTE9DS1dJU0U7Cj4gKwkJaWYgKGZsaXAg JiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKPiArCQkJY2ZnMSAmPSB+RVhZTk9TX01TQ1RS TF9GTElQX1hfTUlSUk9SOwo+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FM KQo+ICsJCQljZmcxICY9IH5FWFlOT1NfTVNDVFJMX0ZMSVBfWV9NSVJST1I7Cj4gKwkJYnJlYWs7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJpbmF2bGlkIGRlZ3JlZSB2 YWx1ZSAlZC5cbiIsIGRlZ3JlZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ ZmltY193cml0ZShjZmcxLCBFWFlOT1NfTVNDVFJMKTsKPiArCWZpbWNfd3JpdGUoY2ZnMiwgRVhZ Tk9TX0NJVFJHRk1UKTsKPiArCj4gKwlyZXR1cm4gKGNmZzIgJiBFWFlOT1NfQ0lUUkdGTVRfSU5S T1Q5MF9DTE9DS1dJU0UpID8gMSA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19zZXRf d2luZG93KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwKPiArCXN0cnVjdCBkcm1fZXh5bm9zX3Bv cyAqcG9zLCBzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3opCj4gK3sKPiArCXUzMiBjZmcsIGgxLCBo MiwgdjEsIHYyOwo+ICsKPiArCS8qIGNyb3BwZWQgaW1hZ2UgKi8KPiArCWgxID0gcG9zLT54Owo+ ICsJaDIgPSBzei0+aHNpemUgLSBwb3MtPncgLSBwb3MtPng7Cj4gKwl2MSA9IHBvcy0+eTsKPiAr CXYyID0gc3otPnZzaXplIC0gcG9zLT5oIC0gcG9zLT55Owo+ICsKPiArCURSTV9ERUJVR19LTVMo IiVzOnhbJWRdeVslZF13WyVkXWhbJWRdaHNpemVbJWRddnNpemVbJWRdXG4iLAo+ICsJX19mdW5j X18sIHBvcy0+eCwgcG9zLT55LCBwb3MtPncsIHBvcy0+aCwgc3otPmhzaXplLCBzei0+dnNpemUp Owo+ICsJRFJNX0RFQlVHX0tNUygiJXM6aDFbJWRdaDJbJWRddjFbJWRddjJbJWRdXG4iLCBfX2Z1 bmNfXywKPiArCQloMSwgaDIsIHYxLCB2Mik7Cj4gKwo+ICsJLyoKPiArCSAqIHNldCB3aW5kb3cg b2Zmc2V0IDEsIDIgc2l6ZQo+ICsJICogY2hlY2sgZmlndXJlIDQzLTIxIGluIHVzZXIgbWFudWFs Cj4gKwkgKi8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lXRE9GU1QpOwo+ICsJY2ZnICY9 IH4oRVhZTk9TX0NJV0RPRlNUX1dJTkhPUk9GU1RfTUFTSyB8Cj4gKwkJRVhZTk9TX0NJV0RPRlNU X1dJTlZFUk9GU1RfTUFTSyk7Cj4gKwljZmcgfD0gKEVYWU5PU19DSVdET0ZTVF9XSU5IT1JPRlNU KGgxKSB8Cj4gKwkJRVhZTk9TX0NJV0RPRlNUX1dJTlZFUk9GU1QodjEpKTsKPiArCWNmZyB8PSBF WFlOT1NfQ0lXRE9GU1RfV0lOT0ZTRU47Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJV0RP RlNUKTsKPiArCj4gKwljZmcgPSAoRVhZTk9TX0NJV0RPRlNUMl9XSU5IT1JPRlNUMihoMikgfAo+ ICsJCUVYWU5PU19DSVdET0ZTVDJfV0lOVkVST0ZTVDIodjIpKTsKPiArCWZpbWNfd3JpdGUoY2Zn LCBFWFlOT1NfQ0lXRE9GU1QyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBmaW1jX3NyY19zZXRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzd2FwLAo+ICsJ c3RydWN0IGRybV9leHlub3NfcG9zICpwb3MsIHN0cnVjdCBkcm1fZXh5bm9zX3N6ICpzeikKPiAr ewo+ICsJc3RydWN0IGZpbWNfY29udGV4dCAqY3R4ID0gZ2V0X2ZpbWNfY29udGV4dChkZXYpOwo+ ICsJc3RydWN0IGRybV9leHlub3NfcG9zIGltZ19wb3MgPSAqcG9zOwo+ICsJc3RydWN0IGRybV9l eHlub3Nfc3ogaW1nX3N6ID0gKnN6Owo+ICsJdTMyIGNmZzsKPiArCj4gKwkvKiBUb0RvOiBjaGVj ayB3aWR0aCBhbmQgaGVpZ2h0ICovCj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6c3dhcFslZF1o c2l6ZVslZF12c2l6ZVslZF1cbiIsCj4gKwkJX19mdW5jX18sIHN3YXAsIHN6LT5oc2l6ZSwgc3ot PnZzaXplKTsKPiArCj4gKwkvKiBvcmlnaW5hbCBzaXplICovCj4gKwljZmcgPSAoRVhZTk9TX09S R0lTSVpFX0hPUklaT05UQUwoaW1nX3N6LmhzaXplKSB8Cj4gKwkJRVhZTk9TX09SR0lTSVpFX1ZF UlRJQ0FMKGltZ19zei52c2l6ZSkpOwo+ICsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfT1JH SVNJWkUpOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOnhbJWRdeVslZF13WyVkXWhbJWRdXG4i LCBfX2Z1bmNfXywKPiArCQlwb3MtPngsIHBvcy0+eSwgcG9zLT53LCBwb3MtPmgpOwo+ICsKPiAr CWlmIChzd2FwKSB7Cj4gKwkJaW1nX3Bvcy53ID0gcG9zLT5oOwo+ICsJCWltZ19wb3MuaCA9IHBv cy0+dzsKPiArCQlpbWdfc3ouaHNpemUgPSBzei0+dnNpemU7Cj4gKwkJaW1nX3N6LnZzaXplID0g c3otPmhzaXplOwo+ICsJfQo+ICsKPiArCS8qIHNldCBpbnB1dCBETUEgaW1hZ2Ugc2l6ZSAqLwo+ ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVJFQUxfSVNJWkUpOwo+ICsJY2ZnICY9IH4oRVhZ Tk9TX0NJUkVBTF9JU0laRV9IRUlHSFRfTUFTSyB8Cj4gKwkJRVhZTk9TX0NJUkVBTF9JU0laRV9X SURUSF9NQVNLKTsKPiArCWNmZyB8PSAoRVhZTk9TX0NJUkVBTF9JU0laRV9XSURUSChpbWdfcG9z LncpIHwKPiArCQlFWFlOT1NfQ0lSRUFMX0lTSVpFX0hFSUdIVChpbWdfcG9zLmgpKTsKPiArCWZp bWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lSRUFMX0lTSVpFKTsKPiArCj4gKwkvKgo+ICsJICogc2V0 IGlucHV0IEZJRk8gaW1hZ2Ugc2l6ZQo+ICsJICogZm9yIG5vdywgd2Ugc3VwcG9ydCBvbmx5IElU VTYwMSA4IGJpdCBtb2RlCj4gKwkgKi8KPiArCWNmZyA9IChFWFlOT1NfQ0lTUkNGTVRfSVRVNjAx XzhCSVQgfAo+ICsJCUVYWU5PU19DSVNSQ0ZNVF9TT1VSQ0VIU0laRShpbWdfc3ouaHNpemUpIHwK PiArCQlFWFlOT1NfQ0lTUkNGTVRfU09VUkNFVlNJWkUoaW1nX3N6LnZzaXplKSk7Cj4gKwlmaW1j X3dyaXRlKGNmZywgRVhZTk9TX0NJU1JDRk1UKTsKPiArCj4gKwkvKiBvZmZzZXQgWShSR0IpLCBD YiwgQ3IgKi8KPiArCWNmZyA9IChFWFlOT1NfQ0lJWU9GRl9IT1JJWk9OVEFMKGltZ19wb3MueCkg fAo+ICsJCUVYWU5PU19DSUlZT0ZGX1ZFUlRJQ0FMKGltZ19wb3MueSkpOwo+ICsJZmltY193cml0 ZShjZmcsIEVYWU5PU19DSUlZT0ZGKTsKPiArCWNmZyA9IChFWFlOT1NfQ0lJQ0JPRkZfSE9SSVpP TlRBTChpbWdfcG9zLngpIHwKPiArCQlFWFlOT1NfQ0lJQ0JPRkZfVkVSVElDQUwoaW1nX3Bvcy55 KSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJSUNCT0ZGKTsKPiArCWNmZyA9IChFWFlO T1NfQ0lJQ1JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPiArCQlFWFlOT1NfQ0lJQ1JPRkZf VkVSVElDQUwoaW1nX3Bvcy55KSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJSUNST0ZG KTsKPiArCj4gKwlyZXR1cm4gZmltY19zZXRfd2luZG93KGN0eCwgJmltZ19wb3MsICZpbWdfc3op Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfc3JjX3NldF9hZGRyKHN0cnVjdCBkZXZpY2Ug KmRldiwKPiArCQkJc3RydWN0IGRybV9leHlub3NfaXBwX2J1Zl9pbmZvICpidWZfaW5mbywgdTMy IGJ1Zl9pZCwKPiArCQkJZW51bSBkcm1fZXh5bm9zX2lwcF9idWZfdHlwZSBidWZfdHlwZSkKPiAr ewo+ICsJc3RydWN0IGZpbWNfY29udGV4dCAqY3R4ID0gZ2V0X2ZpbWNfY29udGV4dChkZXYpOwo+ ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwlz dHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlwcGRydi0+Y21kOwo+ICsJ c3RydWN0IGRybV9leHlub3NfaXBwX3Byb3BlcnR5ICpwcm9wZXJ0eTsKPiArCXN0cnVjdCBkcm1f ZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsKPiArCj4gKwlpZiAoIWNfbm9kZSkgewo+ICsJCURS TV9FUlJPUigiZmFpbGVkIHRvIGdldCBjX25vZGUuXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlwcm9wZXJ0eSA9ICZjX25vZGUtPnByb3BlcnR5Owo+ICsJaWYgKCFwcm9w ZXJ0eSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBwcm9wZXJ0eS5cbiIpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOnByb3BfaWRb JWRdYnVmX2lkWyVkXWJ1Zl90eXBlWyVkXVxuIiwgX19mdW5jX18sCj4gKwkJcHJvcGVydHktPnBy b3BfaWQsIGJ1Zl9pZCwgYnVmX3R5cGUpOwo+ICsKPiArCWlmIChidWZfaWQgPiBGSU1DX01BWF9T UkMpIHsKPiArCQlkZXZfaW5mbyhpcHBkcnYtPmRldiwgImluYXZsaWQgYnVmX2lkICVkLlxuIiwg YnVmX2lkKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwkvKiBhZGRyZXNzIHJl Z2lzdGVyIHNldCAqLwo+ICsJc3dpdGNoIChidWZfdHlwZSkgewo+ICsJY2FzZSBJUFBfQlVGX0VO UVVFVUU6Cj4gKwkJY29uZmlnID0gJnByb3BlcnR5LT5jb25maWdbRVhZTk9TX0RSTV9PUFNfU1JD XTsKPiArCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExBTkFSX1ldLAo+ ICsJCQlFWFlOT1NfQ0lJWVNBKGJ1Zl9pZCkpOwo+ICsKPiArCQlpZiAoY29uZmlnLT5mbXQgPT0g RFJNX0ZPUk1BVF9ZVlU0MjApIHsKPiArCQkJZmltY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlO T1NfRFJNX1BMQU5BUl9DUl0sCj4gKwkJCQlFWFlOT1NfQ0lJQ0JTQShidWZfaWQpKTsKPiArCQkJ ZmltY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DQl0sCj4gKwkJCQlF WFlOT1NfQ0lJQ1JTQShidWZfaWQpKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlmaW1jX3dyaXRlKGJ1 Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExBTkFSX0NCXSwKPiArCQkJCUVYWU5PU19DSUlDQlNB KGJ1Zl9pZCkpOwo+ICsJCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExB TkFSX0NSXSwKPiArCQkJCUVYWU5PU19DSUlDUlNBKGJ1Zl9pZCkpOwo+ICsJCX0KPiArCQlicmVh azsKPiArCWNhc2UgSVBQX0JVRl9ERVFVRVVFOgo+ICsJCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1Nf Q0lJWVNBKGJ1Zl9pZCkpOwo+ICsJCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lJQ0JTQShidWZf aWQpKTsKPiArCQlmaW1jX3dyaXRlKDB4MCwgRVhZTk9TX0NJSUNSU0EoYnVmX2lkKSk7Cj4gKwkJ YnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCS8qIGJ5cGFzcyAqLwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGV4eW5vc19kcm1faXBw X29wcyBmaW1jX3NyY19vcHMgPSB7Cj4gKwkuc2V0X2ZtdCA9IGZpbWNfc3JjX3NldF9mbXQsCj4g Kwkuc2V0X3RyYW5zZiA9IGZpbWNfc3JjX3NldF90cmFuc2YsCj4gKwkuc2V0X3NpemUgPSBmaW1j X3NyY19zZXRfc2l6ZSwKPiArCS5zZXRfYWRkciA9IGZpbWNfc3JjX3NldF9hZGRyLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCBmaW1jX2RzdF9zZXRfZm10X29yZGVyKHN0cnVjdCBmaW1jX2NvbnRl eHQgKmN0eCwgdTMyIGZtdCkKPiArewo+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBk cnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwl1MzIgY2ZnOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVz OmZtdFsweCV4XVxuIiwgX19mdW5jX18sIGZtdCk7Cj4gKwo+ICsJLyogUkdCICovCj4gKwljZmcg PSBmaW1jX3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsKPiArCWNmZyAmPSB+RVhZTk9TX0NJU0NDVFJM X09VVFJHQl9GTVRfUkdCX01BU0s7Cj4gKwo+ICsJc3dpdGNoIChmbXQpIHsKPiArCWNhc2UgRFJN X0ZPUk1BVF9SR0I1NjU6Cj4gKwkJY2ZnIHw9IEVYWU5PU19DSVNDQ1RSTF9PVVRSR0JfRk1UX1JH QjU2NTsKPiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJMKTsKPiArCQlyZXR1cm4g MDsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Cj4gKwkJY2ZnIHw9IEVYWU5PU19DSVNDQ1RS TF9PVVRSR0JfRk1UX1JHQjg4ODsKPiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJM KTsKPiArCQlyZXR1cm4gMDsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQljZmcg fD0gKEVYWU5PU19DSVNDQ1RSTF9PVVRSR0JfRk1UX1JHQjg4OCB8Cj4gKwkJCUVYWU5PU19DSVND Q1RSTF9FWFRSR0JfRVhURU5TSU9OKTsKPiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0ND VFJMKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJLyogYnlwYXNzICovCj4gKwkJYnJl YWs7Cj4gKwl9Cj4gKwo+ICsJLyogWVVWICovCj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJ T0NUUkwpOwo+ICsJY2ZnICY9IH4oRVhZTk9TX0NJT0NUUkxfT1JERVIyUF9NQVNLIHwKPiArCQlF WFlOT1NfQ0lPQ1RSTF9PUkRFUjQyMl9NQVNLIHwKPiArCQlFWFlOT1NfQ0lPQ1RSTF9ZQ0JDUl9Q TEFORV9NQVNLKTsKPiArCj4gKwlzd2l0Y2ggKGZtdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1hS R0I4ODg4Ogo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lPQ1RSTF9BTFBIQV9PVVQ7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKPiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfT1JE RVI0MjJfWUNCWUNSOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4gKwkJ Y2ZnIHw9IEVYWU5PU19DSU9DVFJMX09SREVSNDIyX1lDUllDQjsKPiArCQlicmVhazsKPiArCWNh c2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lPQ1RSTF9PUkRFUjQyMl9D QllDUlk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfVllVWToKPiArCQljZmcgfD0g RVhZTk9TX0NJT0NUUkxfT1JERVI0MjJfQ1JZQ0JZOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1f Rk9STUFUX05WMjE6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlY2MToKPiArCQljZmcgfD0gRVhZTk9T X0NJT0NUUkxfT1JERVIyUF9MU0JfQ1JDQjsKPiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfWUNC Q1JfMlBMQU5FOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKPiArCWNh c2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ICsJCWNm ZyB8PSBFWFlOT1NfQ0lPQ1RSTF9ZQ0JDUl8zUExBTkU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERS TV9GT1JNQVRfTlYxMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEyTVQ6Cj4gKwljYXNlIERSTV9G T1JNQVRfTlYxNjoKPiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfT1JERVIyUF9MU0JfQ0JDUjsK PiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfWUNCQ1JfMlBMQU5FOwo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCB0YXJnZXQgeXV2IG9y ZGVyIDB4JXguXG4iLCBmbXQpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWZp bWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lPQ1RSTCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KClRo aXMgZnVuY3Rpb24gaXMgYWxzbyBvbmx5IGNhbGxlZCBieSBmaW1jX2RzdF9zZXRfZm10IGFuZCBi b3RoIGZ1bmN0aW9ucwpoYXZlIGZvcm1hdCBjaGVjay4gU28gdGhlciBjYW4gYmUgbWVyZ2VkIGlu dG8gb25lIGZ1bmN0aW9uLgoKPiArCj4gK3N0YXRpYyBpbnQgZmltY19kc3Rfc2V0X2ZtdChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4gK3sKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0 eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAq aXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJdTMyIGNmZzsKPiArCj4gKwlEUk1fREVCVUdfS01T KCIlczpmbXRbMHgleF1cbiIsIF9fZnVuY19fLCBmbXQpOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVh ZChFWFlOT1NfQ0lFWFRFTik7Cj4gKwo+ICsJaWYgKGZtdCA9PSBEUk1fRk9STUFUX0FZVVYpIHsK PiArCQljZmcgfD0gRVhZTk9TX0NJRVhURU5fWVVWNDQ0X09VVDsKPiArCQlmaW1jX3dyaXRlKGNm ZywgRVhZTk9TX0NJRVhURU4pOwo+ICsJfSBlbHNlIHsKPiArCQljZmcgJj0gfkVYWU5PU19DSUVY VEVOX1lVVjQ0NF9PVVQ7Cj4gKwkJZmltY193cml0ZShjZmcsIEVYWU5PU19DSUVYVEVOKTsKPiAr Cj4gKwkJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVRSR0ZNVCk7Cj4gKwkJY2ZnICY9IH5FWFlO T1NfQ0lUUkdGTVRfT1VURk9STUFUX01BU0s7Cj4gKwo+ICsJCXN3aXRjaCAoZm10KSB7Cj4gKwkJ Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCQljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJ CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9P VVRGT1JNQVRfUkdCOwo+ICsJCQlicmVhazsKPiArCQljYXNlIERSTV9GT1JNQVRfWVVZVjoKPiAr CQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiArCQljYXNlIERSTV9GT1JNQVRfVVlWWToKPiArCQlj YXNlIERSTV9GT1JNQVRfVllVWToKPiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9PVVRGT1JN QVRfWUNCQ1I0MjJfMVBMQU5FOwo+ICsJCQlicmVhazsKPiArCQljYXNlIERSTV9GT1JNQVRfTlYx NjoKPiArCQljYXNlIERSTV9GT1JNQVRfTlY2MToKPiArCQljYXNlIERSTV9GT1JNQVRfWVVWNDIy Ogo+ICsJCQljZmcgfD0gRVhZTk9TX0NJVFJHRk1UX09VVEZPUk1BVF9ZQ0JDUjQyMjsKPiArCQkJ YnJlYWs7Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiArCQljYXNlIERSTV9GT1JNQVRf WVZVNDIwOgo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9O VjEyTVQ6Cj4gKwkJY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gKwkJCWNmZyB8PSBFWFlOT1NfQ0lU UkdGTVRfT1VURk9STUFUX1lDQkNSNDIwOwo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJ CQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCB0YXJnZXQgZm9ybWF0IDB4JXguXG4iLAo+ ICsJCQkJZm10KTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlmaW1jX3dy aXRlKGNmZywgRVhZTk9TX0NJVFJHRk1UKTsKPiArCX0KPiArCj4gKwljZmcgPSBmaW1jX3JlYWQo RVhZTk9TX0NJRE1BUEFSQU0pOwo+ICsJY2ZnICY9IH5FWFlOT1NfQ0lETUFQQVJBTV9XX01PREVf TUFTSzsKPiArCj4gKwlpZiAoZm10ID09IERSTV9GT1JNQVRfTlYxMk1UKQo+ICsJCWNmZyB8PSBF WFlOT1NfQ0lETUFQQVJBTV9XX01PREVfNjRYMzI7Cj4gKwllbHNlCj4gKwkJY2ZnIHw9IEVYWU5P U19DSURNQVBBUkFNX1dfTU9ERV9MSU5FQVI7Cj4gKwo+ICsJZmltY193cml0ZShjZmcsIEVYWU5P U19DSURNQVBBUkFNKTsKPiArCj4gKwlyZXR1cm4gZmltY19kc3Rfc2V0X2ZtdF9vcmRlcihjdHgs IGZtdCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19kc3Rfc2V0X3RyYW5zZihzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gKwkJZW51bSBkcm1fZXh5bm9zX2RlZ3JlZSBkZWdyZWUsCj4gKwkJZW51 bSBkcm1fZXh5bm9zX2ZsaXAgZmxpcCkKPiArewo+ICsJc3RydWN0IGZpbWNfY29udGV4dCAqY3R4 ID0gZ2V0X2ZpbWNfY29udGV4dChkZXYpOwo+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICpp cHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwl1MzIgY2ZnOwo+ICsKPiArCURSTV9ERUJVR19LTVMo IiVzOmRlZ3JlZVslZF1mbGlwWzB4JXhdXG4iLCBfX2Z1bmNfXywKPiArCQlkZWdyZWUsIGZsaXAp Owo+ICsKPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lUUkdGTVQpOwo+ICsJY2ZnICY9IH5F WFlOT1NfQ0lUUkdGTVRfRkxJUF9NQVNLOwo+ICsJY2ZnICY9IH5FWFlOT1NfQ0lUUkdGTVRfT1VU Uk9UOTBfQ0xPQ0tXSVNFOwo+ICsKPiArCXN3aXRjaCAoZGVncmVlKSB7Cj4gKwljYXNlIEVYWU5P U19EUk1fREVHUkVFXzA6Cj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRB TCkKPiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9GTElQX1hfTUlSUk9SOwo+ICsJCWlmIChm bGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+ICsJCQljZmcgfD0gRVhZTk9TX0NJVFJH Rk1UX0ZMSVBfWV9NSVJST1I7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEVYWU5PU19EUk1fREVHUkVF XzkwOgo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lUUkdGTVRfT1VUUk9UOTBfQ0xPQ0tXSVNFOwo+ICsJ CWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4gKwkJCWNmZyB8PSBFWFlO T1NfQ0lUUkdGTVRfRkxJUF9YX01JUlJPUjsKPiArCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJ UF9WRVJUSUNBTCkKPiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9GTElQX1lfTUlSUk9SOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8xODA6Cj4gKwkJY2ZnIHw9IChF WFlOT1NfQ0lUUkdGTVRfRkxJUF9YX01JUlJPUiB8Cj4gKwkJCUVYWU5PU19DSVRSR0ZNVF9GTElQ X1lfTUlSUk9SKTsKPiArCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+ ICsJCQljZmcgJj0gfkVYWU5PU19DSVRSR0ZNVF9GTElQX1hfTUlSUk9SOwo+ICsJCWlmIChmbGlw ICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+ICsJCQljZmcgJj0gfkVYWU5PU19DSVRSR0ZN VF9GTElQX1lfTUlSUk9SOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8y NzA6Cj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lUUkdGTVRfT1VUUk9UOTBfQ0xPQ0tXSVNFIHwKPiAr CQkJRVhZTk9TX0NJVFJHRk1UX0ZMSVBfWF9NSVJST1IgfAo+ICsJCQlFWFlOT1NfQ0lUUkdGTVRf RkxJUF9ZX01JUlJPUik7Cj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRB TCkKPiArCQkJY2ZnICY9IH5FWFlOT1NfQ0lUUkdGTVRfRkxJUF9YX01JUlJPUjsKPiArCQlpZiAo ZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9WRVJUSUNBTCkKPiArCQkJY2ZnICY9IH5FWFlOT1NfQ0lU UkdGTVRfRkxJUF9ZX01JUlJPUjsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZGV2X2Vy cihpcHBkcnYtPmRldiwgImluYXZsaWQgZGVncmVlIHZhbHVlICVkLlxuIiwgZGVncmVlKTsKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJ VFJHRk1UKTsKPiArCj4gKwlyZXR1cm4gKGNmZyAmIEVYWU5PU19DSVRSR0ZNVF9PVVRST1Q5MF9D TE9DS1dJU0UpID8gMSA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19nZXRfcmF0aW9f c2hpZnQodTMyIHNyYywgdTMyIGRzdCwgdTMyICpyYXRpbywgdTMyICpzaGlmdCkKPiArewo+ICsJ RFJNX0RFQlVHX0tNUygiJXM6c3JjWyVkXWRzdFslZF1cbiIsIF9fZnVuY19fLCBzcmMsIGRzdCk7 Cj4gKwo+ICsJaWYgKHNyYyA+PSBkc3QgKiA2NCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRv IG1ha2UgcmF0aW8gYW5kIHNoaWZ0LlxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9IGVs c2UgaWYgKHNyYyA+PSBkc3QgKiAzMikgewo+ICsJCSpyYXRpbyA9IDMyOwo+ICsJCSpzaGlmdCA9 IDU7Cj4gKwl9IGVsc2UgaWYgKHNyYyA+PSBkc3QgKiAxNikgewo+ICsJCSpyYXRpbyA9IDE2Owo+ ICsJCSpzaGlmdCA9IDQ7Cj4gKwl9IGVsc2UgaWYgKHNyYyA+PSBkc3QgKiA4KSB7Cj4gKwkJKnJh dGlvID0gODsKPiArCQkqc2hpZnQgPSAzOwo+ICsJfSBlbHNlIGlmIChzcmMgPj0gZHN0ICogNCkg ewo+ICsJCSpyYXRpbyA9IDQ7Cj4gKwkJKnNoaWZ0ID0gMjsKPiArCX0gZWxzZSBpZiAoc3JjID49 IGRzdCAqIDIpIHsKPiArCQkqcmF0aW8gPSAyOwo+ICsJCSpzaGlmdCA9IDE7Cj4gKwl9IGVsc2Ug ewo+ICsJCSpyYXRpbyA9IDE7Cj4gKwkJKnNoaWZ0ID0gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaW1jX3NldF9wcmVzY2FsZXIoc3RydWN0IGZpbWNf Y29udGV4dCAqY3R4LCBzdHJ1Y3QgZmltY19zY2FsZXIgKnNjLAo+ICsJCXN0cnVjdCBkcm1fZXh5 bm9zX3BvcyAqc3JjLCBzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKmRzdCkKPiArewo+ICsJc3RydWN0 IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwl1MzIgY2ZnLCBj ZmdfZXh0LCBzaGZhY3RvcjsKPiArCXUzMiBwcmVfZHN0X3dpZHRoLCBwcmVfZHN0X2hlaWdodDsK PiArCXUzMiBwcmVfaHJhdGlvLCBoZmFjdG9yLCBwcmVfdnJhdGlvLCB2ZmFjdG9yOwo+ICsJaW50 IHJldCA9IDA7Cj4gKwl1MzIgc3JjX3csIHNyY19oLCBkc3RfdywgZHN0X2g7Cj4gKwo+ICsJY2Zn X2V4dCA9IGZpbWNfcmVhZChFWFlOT1NfQ0lUUkdGTVQpOwo+ICsJaWYgKGNmZ19leHQgJiBFWFlO T1NfQ0lUUkdGTVRfSU5ST1Q5MF9DTE9DS1dJU0UpIHsKPiArCQlzcmNfdyA9IHNyYy0+aDsKPiAr CQlzcmNfaCA9IHNyYy0+dzsKPiArCX0gZWxzZSB7Cj4gKwkJc3JjX3cgPSBzcmMtPnc7Cj4gKwkJ c3JjX2ggPSBzcmMtPmg7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNmZ19leHQgJiBFWFlOT1NfQ0lUUkdG TVRfT1VUUk9UOTBfQ0xPQ0tXSVNFKSB7Cj4gKwkJZHN0X3cgPSBkc3QtPmg7Cj4gKwkJZHN0X2gg PSBkc3QtPnc7Cj4gKwl9IGVsc2Ugewo+ICsJCWRzdF93ID0gZHN0LT53Owo+ICsJCWRzdF9oID0g ZHN0LT5oOwo+ICsJfQo+ICsKPiArCXJldCA9IGZpbWNfZ2V0X3JhdGlvX3NoaWZ0KHNyY193LCBk c3RfdywgJnByZV9ocmF0aW8sICZoZmFjdG9yKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJy KGlwcGRydi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByYXRpbyBob3Jpem9udGFsLlxuIik7Cj4gKwkJ cmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBmaW1jX2dldF9yYXRpb19zaGlmdChzcmNf aCwgZHN0X2gsICZwcmVfdnJhdGlvLCAmdmZhY3Rvcik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2 X2VycihpcHBkcnYtPmRldiwgImZhaWxlZCB0byBnZXQgcmF0aW8gdmVydGljYWwuXG4iKTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXByZV9kc3Rfd2lkdGggPSBzcmNfdyAvIHByZV9o cmF0aW87Cj4gKwlwcmVfZHN0X2hlaWdodCA9IHNyY19oIC8gcHJlX3ZyYXRpbzsKPiArCURSTV9E RUJVR19LTVMoIiVzOnByZV9kc3Rfd2lkdGhbJWRdcHJlX2RzdF9oZWlnaHRbJWRdXG4iLCBfX2Z1 bmNfXywKPiArCQlwcmVfZHN0X3dpZHRoLCBwcmVfZHN0X2hlaWdodCk7Cj4gKwlEUk1fREVCVUdf S01TKCIlczpwcmVfaHJhdGlvWyVkXWhmYWN0b3JbJWRdcHJlX3ZyYXRpb1slZF12ZmFjdG9yWyVk XVxuIiwKPiArCQlfX2Z1bmNfXywgcHJlX2hyYXRpbywgaGZhY3RvciwgcHJlX3ZyYXRpbywgdmZh Y3Rvcik7Cj4gKwo+ICsJc2MtPmhyYXRpbyA9IChzcmNfdyA8PCAxNCkgLyAoZHN0X3cgPDwgaGZh Y3Rvcik7Cj4gKwlzYy0+dnJhdGlvID0gKHNyY19oIDw8IDE0KSAvIChkc3RfaCA8PCB2ZmFjdG9y KTsKPiArCXNjLT51cF9oID0gKGRzdF93ID49IHNyY193KSA/IHRydWUgOiBmYWxzZTsKPiArCXNj LT51cF92ID0gKGRzdF9oID49IHNyY19oKSA/IHRydWUgOiBmYWxzZTsKPiArCURSTV9ERUJVR19L TVMoIiVzOmhyYXRpb1slZF12cmF0aW9bJWRddXBfaFslZF11cF92WyVkXVxuIiwKPiArCV9fZnVu Y19fLCBzYy0+aHJhdGlvLCBzYy0+dnJhdGlvLCBzYy0+dXBfaCwgc2MtPnVwX3YpOwo+ICsKPiAr CXNoZmFjdG9yID0gMTAgLSAoaGZhY3RvciArIHZmYWN0b3IpOwo+ICsJRFJNX0RFQlVHX0tNUygi JXM6c2hmYWN0b3JbJWRdXG4iLCBfX2Z1bmNfXywgc2hmYWN0b3IpOwo+ICsKPiArCWNmZyA9IChF WFlOT1NfQ0lTQ1BSRVJBVElPX1NIRkFDVE9SKHNoZmFjdG9yKSB8Cj4gKwkJRVhZTk9TX0NJU0NQ UkVSQVRJT19QUkVIT1JSQVRJTyhwcmVfaHJhdGlvKSB8Cj4gKwkJRVhZTk9TX0NJU0NQUkVSQVRJ T19QUkVWRVJSQVRJTyhwcmVfdnJhdGlvKSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJ U0NQUkVSQVRJTyk7Cj4gKwo+ICsJY2ZnID0gKEVYWU5PU19DSVNDUFJFRFNUX1BSRURTVFdJRFRI KHByZV9kc3Rfd2lkdGgpIHwKPiArCQlFWFlOT1NfQ0lTQ1BSRURTVF9QUkVEU1RIRUlHSFQocHJl X2RzdF9oZWlnaHQpKTsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTQ1BSRURTVCk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmltY19zZXRfc2NhbGVy KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgc3RydWN0IGZpbWNfc2NhbGVyICpzYykKPiArewo+ ICsJdTMyIGNmZywgY2ZnX2V4dDsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpyYW5nZVslZF1i eXBhc3NbJWRddXBfaFslZF11cF92WyVkXVxuIiwKPiArCQlfX2Z1bmNfXywgc2MtPnJhbmdlLCBz Yy0+YnlwYXNzLCBzYy0+dXBfaCwgc2MtPnVwX3YpOwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6aHJh dGlvWyVkXXZyYXRpb1slZF1cbiIsCj4gKwkJX19mdW5jX18sIHNjLT5ocmF0aW8sIHNjLT52cmF0 aW8pOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lTQ0NUUkwpOwo+ICsJY2ZnICY9 IH4oRVhZTk9TX0NJU0NDVFJMX1NDQUxFUkJZUEFTUyB8Cj4gKwkJRVhZTk9TX0NJU0NDVFJMX1ND QUxFVVBfSCB8IEVYWU5PU19DSVNDQ1RSTF9TQ0FMRVVQX1YgfAo+ICsJCUVYWU5PU19DSVNDQ1RS TF9NQUlOX1ZfUkFUSU9fTUFTSyB8Cj4gKwkJRVhZTk9TX0NJU0NDVFJMX01BSU5fSF9SQVRJT19N QVNLIHwKPiArCQlFWFlOT1NfQ0lTQ0NUUkxfQ1NDUjJZX1dJREUgfAo+ICsJCUVYWU5PU19DSVND Q1RSTF9DU0NZMlJfV0lERSk7Cj4gKwo+ICsJaWYgKHNjLT5yYW5nZSkKPiArCQljZmcgfD0gKEVY WU5PU19DSVNDQ1RSTF9DU0NSMllfV0lERSB8Cj4gKwkJCUVYWU5PU19DSVNDQ1RSTF9DU0NZMlJf V0lERSk7Cj4gKwlpZiAoc2MtPmJ5cGFzcykKPiArCQljZmcgfD0gRVhZTk9TX0NJU0NDVFJMX1ND QUxFUkJZUEFTUzsKPiArCWlmIChzYy0+dXBfaCkKPiArCQljZmcgfD0gRVhZTk9TX0NJU0NDVFJM X1NDQUxFVVBfSDsKPiArCWlmIChzYy0+dXBfdikKPiArCQljZmcgfD0gRVhZTk9TX0NJU0NDVFJM X1NDQUxFVVBfVjsKPiArCj4gKwljZmcgfD0gKEVYWU5PU19DSVNDQ1RSTF9NQUlOSE9SUkFUSU8o KHNjLT5ocmF0aW8gPj4gNikpIHwKPiArCQlFWFlOT1NfQ0lTQ0NUUkxfTUFJTlZFUlJBVElPKChz Yy0+dnJhdGlvID4+IDYpKSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJMKTsK PiArCj4gKwljZmdfZXh0ID0gZmltY19yZWFkKEVYWU5PU19DSUVYVEVOKTsKPiArCWNmZ19leHQg Jj0gfkVYWU5PU19DSUVYVEVOX01BSU5IT1JSQVRJT19FWFRfTUFTSzsKPiArCWNmZ19leHQgJj0g fkVYWU5PU19DSUVYVEVOX01BSU5WRVJSQVRJT19FWFRfTUFTSzsKPiArCWNmZ19leHQgfD0gKEVY WU5PU19DSUVYVEVOX01BSU5IT1JSQVRJT19FWFQoc2MtPmhyYXRpbykgfAo+ICsJCUVYWU5PU19D SUVYVEVOX01BSU5WRVJSQVRJT19FWFQoc2MtPnZyYXRpbykpOwo+ICsJZmltY193cml0ZShjZmdf ZXh0LCBFWFlOT1NfQ0lFWFRFTik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19kc3Rfc2V0 X3NpemUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc3dhcCwKPiArCXN0cnVjdCBkcm1fZXh5bm9z X3BvcyAqcG9zLCBzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3opCj4gK3sKPiArCXN0cnVjdCBmaW1j X2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBkcm1fZXh5 bm9zX3BvcyBpbWdfcG9zID0gKnBvczsKPiArCXN0cnVjdCBkcm1fZXh5bm9zX3N6IGltZ19zeiA9 ICpzejsKPiArCXUzMiBjZmc7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6c3dhcFslZF1oc2l6 ZVslZF12c2l6ZVslZF1cbiIsCj4gKwkJX19mdW5jX18sIHN3YXAsIHN6LT5oc2l6ZSwgc3otPnZz aXplKTsKPiArCj4gKwkvKiBvcmlnaW5hbCBzaXplICovCj4gKwljZmcgPSAoRVhZTk9TX09SR09T SVpFX0hPUklaT05UQUwoaW1nX3N6LmhzaXplKSB8Cj4gKwkJRVhZTk9TX09SR09TSVpFX1ZFUlRJ Q0FMKGltZ19zei52c2l6ZSkpOwo+ICsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfT1JHT1NJ WkUpOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOnhbJWRdeVslZF13WyVkXWhbJWRdXG4iLAo+ ICsJCV9fZnVuY19fLCBwb3MtPngsIHBvcy0+eSwgcG9zLT53LCBwb3MtPmgpOwo+ICsKPiArCS8q IENTQyBJVFUgKi8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwljZmcg Jj0gfkVYWU5PU19DSUdDVFJMX0NTQ19NQVNLOwo+ICsKPiArCWlmIChzei0+aHNpemUgPj0gRklN Q19XSURUSF9JVFVfNzA5KQo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lHQ1RSTF9DU0NfSVRVNzA5Owo+ ICsJZWxzZQo+ICsJCWNmZyB8PSBFWFlOT1NfQ0lHQ1RSTF9DU0NfSVRVNjAxOwo+ICsKPiArCWZp bWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwo+ICsJaWYgKHN3YXApIHsKPiArCQlp bWdfcG9zLncgPSBwb3MtPmg7Cj4gKwkJaW1nX3Bvcy5oID0gcG9zLT53Owo+ICsJCWltZ19zei5o c2l6ZSA9IHN6LT52c2l6ZTsKPiArCQlpbWdfc3oudnNpemUgPSBzei0+aHNpemU7Cj4gKwl9Cj4g Kwo+ICsJLyogdGFyZ2V0IGltYWdlIHNpemUgKi8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1Nf Q0lUUkdGTVQpOwo+ICsJY2ZnICY9IH4oRVhZTk9TX0NJVFJHRk1UX1RBUkdFVEhfTUFTSyB8Cj4g KwkJRVhZTk9TX0NJVFJHRk1UX1RBUkdFVFZfTUFTSyk7Cj4gKwljZmcgfD0gKEVYWU5PU19DSVRS R0ZNVF9UQVJHRVRIU0laRShpbWdfcG9zLncpIHwKPiArCQlFWFlOT1NfQ0lUUkdGTVRfVEFSR0VU VlNJWkUoaW1nX3Bvcy5oKSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJVFJHRk1UKTsK PiArCj4gKwkvKiB0YXJnZXQgYXJlYSAqLwo+ICsJY2ZnID0gRVhZTk9TX0NJVEFSRUFfVEFSR0VU X0FSRUEoaW1nX3Bvcy53ICogaW1nX3Bvcy5oKTsKPiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1Nf Q0lUQVJFQSk7Cj4gKwo+ICsJLyogVG9EbzogTW92ZSBTY2FsZXIgaW4gdGhpcyBsaW5lIGFuZCBZ VVYgKi8KPiArCj4gKwkvKiBvZmZzZXQgWShSR0IpLCBDYiwgQ3IgKi8KPiArCWNmZyA9IChFWFlO T1NfQ0lPWU9GRl9IT1JJWk9OVEFMKGltZ19wb3MueCkgfAo+ICsJCUVYWU5PU19DSU9ZT0ZGX1ZF UlRJQ0FMKGltZ19wb3MueSkpOwo+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19DSU9ZT0ZGKTsK PiArCWNmZyA9IChFWFlOT1NfQ0lPQ0JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPiArCQlF WFlOT1NfQ0lPQ0JPRkZfVkVSVElDQUwoaW1nX3Bvcy55KSk7Cj4gKwlmaW1jX3dyaXRlKGNmZywg RVhZTk9TX0NJT0NCT0ZGKTsKPiArCWNmZyA9IChFWFlOT1NfQ0lPQ1JPRkZfSE9SSVpPTlRBTChp bWdfcG9zLngpIHwKPiArCQlFWFlOT1NfQ0lPQ1JPRkZfVkVSVElDQUwoaW1nX3Bvcy55KSk7Cj4g KwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJT0NST0ZGKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBmaW1jX2RzdF9nZXRfYnVmX3NlcShzdHJ1Y3QgZmltY19jb250 ZXh0ICpjdHgpCj4gK3sKPiArCXUzMiBjZmcsIGksIGJ1Zl9udW0gPSAwOwo+ICsJdTMyIG1hc2sg PSAweDAwMDAwMDAxOwo+ICsKPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lGQ05UU0VRKTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgRklNQ19SRUdfU1o7IGkrKykKPiArCQlpZiAoY2ZnICYg KG1hc2sgPDwgaSkpCj4gKwkJCWJ1Zl9udW0rKzsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpi dWZfbnVtWyVkXVxuIiwgX19mdW5jX18sIGJ1Zl9udW0pOwo+ICsKPiArCXJldHVybiBidWZfbnVt Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfZHN0X3NldF9idWZfc2VxKHN0cnVjdCBmaW1j X2NvbnRleHQgKmN0eCwgdTMyIGJ1Zl9pZCwKPiArCWVudW0gZHJtX2V4eW5vc19pcHBfYnVmX3R5 cGUgYnVmX3R5cGUpCj4gK3sKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0g JmN0eC0+aXBwZHJ2Owo+ICsJYm9vbCBlbmFibGU7Cj4gKwl1MzIgY2ZnOwo+ICsJdTMyIG1hc2sg PSAweDAwMDAwMDAxIDw8IGJ1Zl9pZDsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlpbnQg cmV0ID0gMDsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpidWZfaWRbJWRdYnVmX3R5cGVbJWRd XG4iLCBfX2Z1bmNfXywKPiArCQlidWZfaWQsIGJ1Zl90eXBlKTsKPiArCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJLyogbWFzayByZWdpc3RlciBzZXQg Ki8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lGQ05UU0VRKTsKPiArCj4gKwlzd2l0Y2gg KGJ1Zl90eXBlKSB7Cj4gKwljYXNlIElQUF9CVUZfRU5RVUVVRToKPiArCQllbmFibGUgPSB0cnVl Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJUFBfQlVGX0RFUVVFVUU6Cj4gKwkJZW5hYmxlID0gZmFs c2U7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJp bnZhbGlkIGJ1ZiBjdHJsIHBhcmFtZXRlci5cbiIpOwo+ICsJCXJldCA9ICAtRUlOVkFMOwo+ICsJ CWdvdG8gZXJyX3VubG9jazsKPiArCX0KPiArCj4gKwkvKiBzZXF1ZW5jZSBpZCAqLwo+ICsJY2Zn ICY9ICh+bWFzayk7Cj4gKwljZmcgfD0gKGVuYWJsZSA8PCBidWZfaWQpOwo+ICsJZmltY193cml0 ZShjZmcsIEVYWU5PU19DSUZDTlRTRVEpOwo+ICsKPiArCS8qIGludGVycnVwdCBlbmFibGUgKi8K PiArCWlmIChidWZfdHlwZSA9PSBJUFBfQlVGX0VOUVVFVUUgJiYKPiArCSAgICBmaW1jX2RzdF9n ZXRfYnVmX3NlcShjdHgpID49IEZJTUNfQlVGX1NUQVJUKQo+ICsJCWZpbWNfaGFuZGxlX2lycShj dHgsIHRydWUsIGZhbHNlLCB0cnVlKTsKPiArCj4gKwkvKiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwo+ ICsJaWYgKGJ1Zl90eXBlID09IElQUF9CVUZfREVRVUVVRSAmJgo+ICsJICAgIGZpbWNfZHN0X2dl dF9idWZfc2VxKGN0eCkgPD0gRklNQ19CVUZfU1RPUCkKPiArCQlmaW1jX2hhbmRsZV9pcnEoY3R4 LCBmYWxzZSwgZmFsc2UsIHRydWUpOwo+ICsKPiArZXJyX3VubG9jazoKPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBmaW1jX2RzdF9zZXRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJ CXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9idWZfaW5mbyAqYnVmX2luZm8sIHUzMiBidWZfaWQsCj4g KwkJCWVudW0gZHJtX2V4eW5vc19pcHBfYnVmX3R5cGUgYnVmX3R5cGUpCj4gK3sKPiArCXN0cnVj dCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBl eHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJc3RydWN0IGRybV9l eHlub3NfaXBwX2NtZF9ub2RlICpjX25vZGUgPSBpcHBkcnYtPmNtZDsKPiArCXN0cnVjdCBkcm1f ZXh5bm9zX2lwcF9wcm9wZXJ0eSAqcHJvcGVydHk7Cj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBf Y29uZmlnICpjb25maWc7Cj4gKwo+ICsJaWYgKCFjX25vZGUpIHsKPiArCQlEUk1fRVJST1IoImZh aWxlZCB0byBnZXQgY19ub2RlLlxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ ICsJcHJvcGVydHkgPSAmY19ub2RlLT5wcm9wZXJ0eTsKPiArCWlmICghcHJvcGVydHkpIHsKPiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgcHJvcGVydHkuXG4iKTsKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCX0KPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpwcm9wX2lkWyVkXWJ1Zl9pZFsl ZF1idWZfdHlwZVslZF1cbiIsIF9fZnVuY19fLAo+ICsJCXByb3BlcnR5LT5wcm9wX2lkLCBidWZf aWQsIGJ1Zl90eXBlKTsKPiArCj4gKwlpZiAoYnVmX2lkID4gRklNQ19NQVhfRFNUKSB7Cj4gKwkJ ZGV2X2luZm8oaXBwZHJ2LT5kZXYsICJpbmF2bGlkIGJ1Zl9pZCAlZC5cbiIsIGJ1Zl9pZCk7Cj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJLyogYWRkcmVzcyByZWdpc3RlciBzZXQg Ki8KPiArCXN3aXRjaCAoYnVmX3R5cGUpIHsKPiArCWNhc2UgSVBQX0JVRl9FTlFVRVVFOgo+ICsJ CWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW0VYWU5PU19EUk1fT1BTX0RTVF07Cj4gKwo+ICsJ CWZpbWNfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfWV0sCj4gKwkJCUVY WU5PU19DSU9ZU0EoYnVmX2lkKSk7Cj4gKwo+ICsJCWlmIChjb25maWctPmZtdCA9PSBEUk1fRk9S TUFUX1lWVTQyMCkgewo+ICsJCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1f UExBTkFSX0NSXSwKPiArCQkJCUVYWU5PU19DSU9DQlNBKGJ1Zl9pZCkpOwo+ICsJCQlmaW1jX3dy aXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExBTkFSX0NCXSwKPiArCQkJCUVYWU5PU19D SU9DUlNBKGJ1Zl9pZCkpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWZpbWNfd3JpdGUoYnVmX2luZm8t PmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfQ0JdLAo+ICsJCQkJRVhZTk9TX0NJT0NCU0EoYnVmX2lk KSk7Cj4gKwkJCWZpbWNfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfQ1Jd LAo+ICsJCQkJRVhZTk9TX0NJT0NSU0EoYnVmX2lkKSk7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBJUFBfQlVGX0RFUVVFVUU6Cj4gKwkJZmltY193cml0ZSgweDAsIEVYWU5PU19DSU9ZU0Eo YnVmX2lkKSk7Cj4gKwkJZmltY193cml0ZSgweDAsIEVYWU5PU19DSU9DQlNBKGJ1Zl9pZCkpOwo+ ICsJCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lPQ1JTQShidWZfaWQpKTsKPiArCQlicmVhazsK PiArCWRlZmF1bHQ6Cj4gKwkJLyogYnlwYXNzICovCj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIGZpbWNfZHN0X3NldF9idWZfc2VxKGN0eCwgYnVmX2lkLCBidWZfdHlwZSk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfb3BzIGZpbWNfZHN0X29wcyA9IHsK PiArCS5zZXRfZm10ID0gZmltY19kc3Rfc2V0X2ZtdCwKPiArCS5zZXRfdHJhbnNmID0gZmltY19k c3Rfc2V0X3RyYW5zZiwKPiArCS5zZXRfc2l6ZSA9IGZpbWNfZHN0X3NldF9zaXplLAo+ICsJLnNl dF9hZGRyID0gZmltY19kc3Rfc2V0X2FkZHIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNf cG93ZXJfb24oc3RydWN0IGZpbWNfY29udGV4dCAqY3R4LCBib29sIGVuYWJsZSkKPiArewo+ICsJ c3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gKwo+ICsJ RFJNX0RFQlVHX0tNUygiJXM6ZW5hYmxlWyVkXVxuIiwgX19mdW5jX18sIGVuYWJsZSk7Cj4gKwo+ ICsJaWYgKGVuYWJsZSkgewo+ICsJCWlmIChjdHgtPnZlciA9PSBGSU1DX0VYWU5PU180MjEwKSB7 Cj4gKwkJCWN0eC0+c2Nsa19maW1jX2NsayA9IGNsa19nZXQoaXBwZHJ2LT5kZXYsICJzY2xrX2Zp bWMiKTsKPiArCQkJaWYgKElTX0VSUihjdHgtPnNjbGtfZmltY19jbGspKSB7Cj4gKwkJCQlkZXZf ZXJyKGlwcGRydi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBzcmMgZmltYyBjbG9jay5cbiIpOwo+ICsJ CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCX0KPiArCQkJY2xrX2VuYWJsZShjdHgtPnNjbGtfZmlt Y19jbGspOwo+ICsJCX0gZWxzZQo+ICsJCQljbGtfZW5hYmxlKGN0eC0+c2Nsa19maW1jX2Nsayk7 Cj4gKwo+ICsJCWNsa19lbmFibGUoY3R4LT5maW1jX2Nsayk7Cj4gKwkJY2xrX2VuYWJsZShjdHgt PndiX2Nsayk7Cj4gKwkJLyogVG9EbyA6IHdiX2JfY2xrICovCj4gKwkJY3R4LT5zdXNwZW5kZWQg PSBmYWxzZTsKPiArCX0gZWxzZSB7Cj4gKwkJY2xrX2Rpc2FibGUoY3R4LT5zY2xrX2ZpbWNfY2xr KTsKPiArCQljbGtfZGlzYWJsZShjdHgtPmZpbWNfY2xrKTsKPiArCQljbGtfZGlzYWJsZShjdHgt PndiX2Nsayk7Cj4gKwkJLyogVG9EbyA6IHdiX2JfY2xrICovCj4gKwkJY3R4LT5zdXNwZW5kZWQg PSB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgZmltY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0 cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGRldl9pZDsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lw cGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJc3RydWN0IGRybV9leHlub3NfaXBwX2Nt ZF9ub2RlICpjX25vZGUgPSBpcHBkcnYtPmNtZDsKPiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9l dmVudF93b3JrICpldmVudF93b3JrID0KPiArCQljX25vZGUtPmV2ZW50X3dvcms7Cj4gKwlpbnQg YnVmX2lkOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOmZpbWMgaWRbJWRdXG4iLCBfX2Z1bmNf XywgY3R4LT5pZCk7Cj4gKwo+ICsJZmltY19jbGVhcl9pcnEoY3R4KTsKPiArCWlmIChmaW1jX2No ZWNrX292ZihjdHgpKQo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwlpZiAoIWZpbWNfY2hl Y2tfZnJhbWVfZW5kKGN0eCkpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiArCWJ1Zl9pZCA9 IGZpbWNfZ2V0X2J1Zl9pZChjdHgpOwo+ICsJaWYgKGJ1Zl9pZCA8IDApCj4gKwkJcmV0dXJuIElS UV9IQU5ETEVEOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzOmJ1Zl9pZFslZF1cbiIsIF9fZnVu Y19fLCBidWZfaWQpOwo+ICsKPiArCWlmIChmaW1jX2RzdF9zZXRfYnVmX3NlcShjdHgsIGJ1Zl9p ZCwgSVBQX0JVRl9ERVFVRVVFKSA8IDApIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBkZXF1 ZXVlLlxuIik7Cj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsJfQo+ICsKPiArCWV2ZW50X3dv cmstPmlwcGRydiA9IGlwcGRydjsKPiArCWV2ZW50X3dvcmstPmJ1Zl9pZFtFWFlOT1NfRFJNX09Q U19EU1RdID0gYnVmX2lkOwo+ICsJcXVldWVfd29yayhpcHBkcnYtPmV2ZW50X3dvcmtxLCAoc3Ry dWN0IHdvcmtfc3RydWN0ICopZXZlbnRfd29yayk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVE Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfaW5pdF9wcm9wX2xpc3Qoc3RydWN0IGRybV9l eHlub3NfaXBwX3Byb3BfbGlzdCAqKnByb3BfbGlzdCkKPiArewo+ICsJRFJNX0RFQlVHX0tNUygi JXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwlpZiAoIXByb3BfbGlzdCkgewo+ICsJCURSTV9FUlJP UigiZW1wdHkgcHJvcF9saXN0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwkqcHJvcF9saXN0ID0ga3phbGxvYyhzaXplb2YoKipwcm9wX2xpc3QpLCBHRlBfS0VSTkVMKTsK PiArCWlmICghKnByb3BfbGlzdCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jIHBy b3BlcnR5IGxpc3QuXG4iKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCS8qVG9EbyA6 IGZpeCBzdXBwb3J0ZWQgZnVuY3Rpb24gbGlzdCovCj4gKwkoKnByb3BfbGlzdCktPnZlcnNpb24g PSAxOwo+ICsJKCpwcm9wX2xpc3QpLT53cml0ZWJhY2sgPSAxOwo+ICsJKCpwcm9wX2xpc3QpLT5y ZWZyZXNoX21pbiA9IDEyOwo+ICsJKCpwcm9wX2xpc3QpLT5yZWZyZXNoX21heCA9IDYwOwo+ICsJ KCpwcm9wX2xpc3QpLT5mbGlwID0gKDEgPDwgRVhZTk9TX0RSTV9GTElQX05PTkUpIHwKPiArCQkJ CSgxIDw8IEVYWU5PU19EUk1fRkxJUF9WRVJUSUNBTCkgfAo+ICsJCQkJKDEgPDwgRVhZTk9TX0RS TV9GTElQX0hPUklaT05UQUwpOwo+ICsJKCpwcm9wX2xpc3QpLT5kZWdyZWUgPSAoMSA8PCBFWFlO T1NfRFJNX0RFR1JFRV8wKSB8Cj4gKwkJCQkoMSA8PCBFWFlOT1NfRFJNX0RFR1JFRV85MCkgfAo+ ICsJCQkJKDEgPDwgRVhZTk9TX0RSTV9ERUdSRUVfMTgwKSB8Cj4gKwkJCQkoMSA8PCBFWFlOT1Nf RFJNX0RFR1JFRV8yNzApOwo+ICsJKCpwcm9wX2xpc3QpLT5jc2MgPSAxOwo+ICsJKCpwcm9wX2xp c3QpLT5jcm9wID0gMTsKPiArCSgqcHJvcF9saXN0KS0+Y3JvcF9tYXguaHNpemUgPSA4MTkyOwo+ ICsJKCpwcm9wX2xpc3QpLT5jcm9wX21heC52c2l6ZSA9IDgxOTI7Cj4gKwkoKnByb3BfbGlzdCkt PmNyb3BfbWluLmhzaXplID0gMzI7Cj4gKwkoKnByb3BfbGlzdCktPmNyb3BfbWluLnZzaXplID0g MzI7Cj4gKwkoKnByb3BfbGlzdCktPnNjYWxlID0gMTsKPiArCSgqcHJvcF9saXN0KS0+c2NhbGVf bWF4LmhzaXplID0gNDIyNDsKPiArCSgqcHJvcF9saXN0KS0+c2NhbGVfbWF4LnZzaXplID0gNDIy NDsKPiArCSgqcHJvcF9saXN0KS0+c2NhbGVfbWluLmhzaXplID0gMzI7Cj4gKwkoKnByb3BfbGlz dCktPnNjYWxlX21pbi52c2l6ZSA9IDMyOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGZpbWNfaXBwZHJ2X2NoZWNrX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwK PiArCQkJCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wZXJ0eSAqcHJvcGVydHkpCj4gK3sKPiAr CXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0 cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsJc3RydWN0 IGRybV9leHlub3NfaXBwX3Byb3BfbGlzdCAqcHAgPSBpcHBkcnYtPnByb3BfbGlzdDsKPiArCXN0 cnVjdCBkcm1fZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsKPiArCXN0cnVjdCBkcm1fZXh5bm9z X3BvcyAqcG9zOwo+ICsJc3RydWN0IGRybV9leHlub3Nfc3ogKnN6Owo+ICsJYm9vbCBzd2FwOwo+ ICsJaW50IGk7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4g Kwlmb3JfZWFjaF9pcHBfb3BzKGkpIHsKPiArCQlpZiAoKGkgPT0gRVhZTk9TX0RSTV9PUFNfU1JD KSAmJgo+ICsJCQkocHJvcGVydHktPmNtZCA9PSBJUFBfQ01EX1dCKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW2ldOwo+ICsJCXBvcyA9ICZjb25m aWctPnBvczsKPiArCQlzeiA9ICZjb25maWctPnN6Owo+ICsKPiArCQkvKiBjaGVjayBmb3IgZmxp cCAqLwo+ICsJCXN3aXRjaCAoY29uZmlnLT5mbGlwKSB7Cj4gKwkJY2FzZSBFWFlOT1NfRFJNX0ZM SVBfTk9ORToKPiArCQljYXNlIEVYWU5PU19EUk1fRkxJUF9WRVJUSUNBTDoKPiArCQljYXNlIEVY WU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMOgo+ICsJCQkvKiBObyBwcm9ibGVtICovCj4gKwkJCWJy ZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCURSTV9FUlJPUigiaW52YWxpZCBmbGlwLlxuIik7Cj4g KwkJCWdvdG8gZXJyX3Byb3BlcnR5Owo+ICsJCX0KPiArCj4gKwkJLyogY2hlY2sgZm9yIGRlZ3Jl ZSAqLwo+ICsJCXN3aXRjaCAoY29uZmlnLT5kZWdyZWUpIHsKPiArCQljYXNlIEVYWU5PU19EUk1f REVHUkVFXzkwOgo+ICsJCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgo+ICsJCQlzd2FwID0g dHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8wOgo+ICsJCWNh c2UgRVhZTk9TX0RSTV9ERUdSRUVfMTgwOgo+ICsJCQlzd2FwID0gZmFsc2U7Cj4gKwkJCWJyZWFr Owo+ICsJCWRlZmF1bHQ6Cj4gKwkJCURSTV9FUlJPUigiaW52YWxpZCBkZWdyZWUuXG4iKTsKPiAr CQkJZ290byBlcnJfcHJvcGVydHk7Cj4gKwkJfQo+ICsKPiArCQkvKiBjaGVjayBmb3IgYnVmZmVy IGJvdW5kICovCj4gKwkJaWYgKChwb3MtPnggKyBwb3MtPncgPiBzei0+aHNpemUpIHx8Cj4gKwkJ CShwb3MtPnkgKyBwb3MtPmggPiBzei0+dnNpemUpKSB7Cj4gKwkJCURSTV9FUlJPUigib3V0IG9m IGJ1ZiBib3VuZC5cbiIpOwo+ICsJCQlnb3RvIGVycl9wcm9wZXJ0eTsKPiArCQl9Cj4gKwo+ICsJ CS8qIGNoZWNrIGZvciBjcm9wICovCj4gKwkJaWYgKChpID09IEVYWU5PU19EUk1fT1BTX1NSQykg JiYgKHBwLT5jcm9wKSkgewo+ICsJCQlpZiAoc3dhcCkgewo+ICsJCQkJaWYgKChwb3MtPmggPCBw cC0+Y3JvcF9taW4uaHNpemUpIHx8Cj4gKwkJCQkJKHN6LT52c2l6ZSA+IHBwLT5jcm9wX21heC5o c2l6ZSkgfHwKPiArCQkJCQkocG9zLT53IDwgcHAtPmNyb3BfbWluLnZzaXplKSB8fAo+ICsJCQkJ CShzei0+aHNpemUgPiBwcC0+Y3JvcF9tYXgudnNpemUpKSB7Cj4gKwkJCQkJRFJNX0VSUk9SKCJv dXQgb2YgY3JvcCBzaXplLlxuIik7Cj4gKwkJCQkJZ290byBlcnJfcHJvcGVydHk7Cj4gKwkJCQl9 Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZiAoKHBvcy0+dyA8IHBwLT5jcm9wX21pbi5oc2l6ZSkg fHwKPiArCQkJCQkoc3otPmhzaXplID4gcHAtPmNyb3BfbWF4LmhzaXplKSB8fAo+ICsJCQkJCShw b3MtPmggPCBwcC0+Y3JvcF9taW4udnNpemUpIHx8Cj4gKwkJCQkJKHN6LT52c2l6ZSA+IHBwLT5j cm9wX21heC52c2l6ZSkpIHsKPiArCQkJCQlEUk1fRVJST1IoIm91dCBvZiBjcm9wIHNpemUuXG4i KTsKPiArCQkJCQlnb3RvIGVycl9wcm9wZXJ0eTsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0KPiAr Cj4gKwkJLyogY2hlY2sgZm9yIHNjYWxlICovCj4gKwkJaWYgKChpID09IEVYWU5PU19EUk1fT1BT X0RTVCkgJiYgKHBwLT5zY2FsZSkpIHsKPiArCQkJaWYgKHN3YXApIHsKPiArCQkJCWlmICgocG9z LT5oIDwgcHAtPnNjYWxlX21pbi5oc2l6ZSkgfHwKPiArCQkJCQkoc3otPnZzaXplID4gcHAtPnNj YWxlX21heC5oc2l6ZSkgfHwKPiArCQkJCQkocG9zLT53IDwgcHAtPnNjYWxlX21pbi52c2l6ZSkg fHwKPiArCQkJCQkoc3otPmhzaXplID4gcHAtPnNjYWxlX21heC52c2l6ZSkpIHsKPiArCQkJCQlE Uk1fRVJST1IoIm91dCBvZiBzY2FsZSBzaXplLlxuIik7Cj4gKwkJCQkJZ290byBlcnJfcHJvcGVy dHk7Cj4gKwkJCQl9Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZiAoKHBvcy0+dyA8IHBwLT5zY2Fs ZV9taW4uaHNpemUpIHx8Cj4gKwkJCQkJKHN6LT5oc2l6ZSA+IHBwLT5zY2FsZV9tYXguaHNpemUp IHx8Cj4gKwkJCQkJKHBvcy0+aCA8IHBwLT5zY2FsZV9taW4udnNpemUpIHx8Cj4gKwkJCQkJKHN6 LT52c2l6ZSA+IHBwLT5zY2FsZV9tYXgudnNpemUpKSB7Cj4gKwkJCQkJRFJNX0VSUk9SKCJvdXQg b2Ygc2NhbGUgc2l6ZS5cbiIpOwo+ICsJCQkJCWdvdG8gZXJyX3Byb3BlcnR5Owo+ICsJCQkJfQo+ ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX3Byb3BlcnR5 Ogo+ICsJZm9yX2VhY2hfaXBwX29wcyhpKSB7Cj4gKwkJaWYgKChpID09IEVYWU5PU19EUk1fT1BT X1NSQykgJiYKPiArCQkJKHByb3BlcnR5LT5jbWQgPT0gSVBQX0NNRF9XQikpCj4gKwkJCWNvbnRp bnVlOwo+ICsKPiArCQljb25maWcgPSAmcHJvcGVydHktPmNvbmZpZ1tpXTsKPiArCQlwb3MgPSAm Y29uZmlnLT5wb3M7Cj4gKwkJc3ogPSAmY29uZmlnLT5zejsKPiArCj4gKwkJRFJNX0VSUk9SKCJb JXNdZlslZF1yWyVkXXBvc1slZCAlZCAlZCAlZF1zelslZCAlZF1cbiIsCj4gKwkJCWkgPyAiZHN0 IiA6ICJzcmMiLCBjb25maWctPmZsaXAsIGNvbmZpZy0+ZGVncmVlLAo+ICsJCQlwb3MtPngsIHBv cy0+eSwgcG9zLT53LCBwb3MtPmgsCj4gKwkJCXN6LT5oc2l6ZSwgc3otPnZzaXplKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaW1jX2lwcGRy dl9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQg KmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlc1xu IiwgX19mdW5jX18pOwo+ICsKPiArCS8qIHJlc2V0IGgvdyBibG9jayAqLwo+ICsJZmltY19zd19y ZXNldChjdHgsIGZhbHNlKTsKPiArCj4gKwkvKiByZXNldCBzY2FsZXIgY2FwYWJpbGl0eSAqLwo+ ICsJbWVtc2V0KCZjdHgtPnNjLCAweDAsIHNpemVvZihjdHgtPnNjKSk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19jaGVja19wcmVwYXJlKHN0cnVjdCBmaW1j X2NvbnRleHQgKmN0eCkKPiArewo+ICsJLyogVG9EbzogY2hlY2sgcHJlcGFyZSB1c2luZyByZWFk IHJlZ2lzdGVyICovCj4gKwlEUk1fREVCVUdfS01TKCIlc1xuIiwgX19mdW5jX18pOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfaXBwZHJ2X3N0YXJ0KHN0cnVj dCBkZXZpY2UgKmRldiwgZW51bSBkcm1fZXh5bm9zX2lwcF9jbWQgY21kKQo+ICt7Cj4gKwlzdHJ1 Y3QgZmltY19jb250ZXh0ICpjdHggPSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4gKwlzdHJ1Y3Qg ZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiArCXN0cnVjdCBkcm1f ZXh5bm9zX2lwcF9jbWRfbm9kZSAqY19ub2RlID0gaXBwZHJ2LT5jbWQ7Cj4gKwlzdHJ1Y3QgZHJt X2V4eW5vc19pcHBfcHJvcGVydHkgKnByb3BlcnR5Owo+ICsJc3RydWN0IGRybV9leHlub3NfaXBw X2NvbmZpZyAqY29uZmlnOwo+ICsJc3RydWN0IGRybV9leHlub3NfcG9zCWltZ19wb3NbRVhZTk9T X0RSTV9PUFNfTUFYXTsKPiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9zZXRfd2Igc2V0X3diOwo+ ICsJaW50IHJldCwgaTsKPiArCXUzMiBjZmcwLCBjZmcxOwo+ICsKPiArCURSTV9ERUJVR19LTVMo IiVzOmNtZFslZF1cbiIsIF9fZnVuY19fLCBjbWQpOwo+ICsKPiArCWlmICghY19ub2RlKSB7Cj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNfbm9kZS5cbiIpOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCXByb3BlcnR5ID0gJmNfbm9kZS0+cHJvcGVydHk7Cj4gKwlpZiAo IXByb3BlcnR5KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHByb3BlcnR5LlxuIik7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZmltY19jaGVja19wcmVw YXJlKGN0eCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY2hl Y2sgcHJlcGFyZS5cbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZmltY19oYW5k bGVfaXJxKGN0eCwgdHJ1ZSwgZmFsc2UsIHRydWUpOwo+ICsKPiArCS8qIFRvRG86IHdpbmRvdyBz aXplLCBwcmVzY2FsZXIgY29uZmlnICovCj4gKwlmb3JfZWFjaF9pcHBfb3BzKGkpIHsKPiArCQlj b25maWcgPSAmcHJvcGVydHktPmNvbmZpZ1tpXTsKPiArCQlpbWdfcG9zW2ldID0gY29uZmlnLT5w b3M7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZmltY19zZXRfcHJlc2NhbGVyKGN0eCwgJmN0eC0+c2Ms Cj4gKwkJJmltZ19wb3NbRVhZTk9TX0RSTV9PUFNfU1JDXSwKPiArCQkmaW1nX3Bvc1tFWFlOT1Nf RFJNX09QU19EU1RdKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBzZXQgcHJlY2Fsc2VyLlxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBJ ZiBzZXQgdHVyZSwgd2UgY2FuIHNhdmUganBlZyBhYm91dCBzY3JlZW4gKi8KPiArCWZpbWNfaGFu ZGxlX2pwZWcoY3R4LCBmYWxzZSk7Cj4gKwlmaW1jX3NldF9zY2FsZXIoY3R4LCAmY3R4LT5zYyk7 Cj4gKwlmaW1jX3NldF9wb2xhcml0eShjdHgsICZjdHgtPnBvbCk7Cj4gKwo+ICsJc3dpdGNoIChj bWQpIHsKPiArCWNhc2UgSVBQX0NNRF9NMk06Cj4gKwkJZmltY19zZXRfdHlwZV9jdHJsKGN0eCwg RklNQ19XQl9OT05FKTsKPiArCQlmaW1jX2hhbmRsZV9sYXN0ZW5kKGN0eCwgZmFsc2UpOwo+ICsK PiArCQkvKiBzZXR1cCBkbWEgKi8KPiArCQljZmcwID0gZmltY19yZWFkKEVYWU5PU19NU0NUUkwp Owo+ICsJCWNmZzAgJj0gfkVYWU5PU19NU0NUUkxfSU5QVVRfTUFTSzsKPiArCQljZmcwIHw9IEVY WU5PU19NU0NUUkxfSU5QVVRfTUVNT1JZOwo+ICsJCWZpbWNfd3JpdGUoY2ZnMCwgRVhZTk9TX01T Q1RSTCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElQUF9DTURfV0I6Cj4gKwkJZmltY19zZXRfdHlw ZV9jdHJsKGN0eCwgRklNQ19XQl9BKTsKPiArCQlmaW1jX2hhbmRsZV9sYXN0ZW5kKGN0eCwgdHJ1 ZSk7Cj4gKwo+ICsJCS8qIHNldHVwIEZJTUQgKi8KPiArCQlmaW1jX3NldF9jYW1ibGtfZmltZDBf d2IoY3R4KTsKPiArCj4gKwkJLyogVG9EbzogbmVlZCB0byByZXBsYWNlIHRoZSBwcm9wZXJ0eSBz dHJ1Y3R1cmUuICovCj4gKwkJc2V0X3diLmVuYWJsZSA9IDE7Cj4gKwkJc2V0X3diLnJlZnJlc2gg PSBwcm9wZXJ0eS0+cmVzZXJ2ZWQ7Cj4gKwkJZXh5bm9zX2RybV9pcHBuYl9zZW5kX2V2ZW50KElQ UF9TRVRfV1JJVEVCQUNLLCAodm9pZCAqKSZzZXRfd2IpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJ UFBfQ01EX09VVFBVVDoKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlkZXZf ZXJyKGRldiwgImludmFsaWQgb3BlcmF0aW9ucy5cbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJLyogUmVzZXQgc3RhdHVzICovCj4gKwlmaW1jX3dyaXRlKDB4MCwgRVhZTk9TX0NJ U1RBVFVTKTsKPiArCj4gKwljZmcwID0gZmltY19yZWFkKEVYWU5PU19DSUlNR0NQVCk7Cj4gKwlj ZmcwICY9IH5FWFlOT1NfQ0lJTUdDUFRfSU1HQ1BURU5fU0M7Cj4gKwljZmcwIHw9IEVYWU5PU19D SUlNR0NQVF9JTUdDUFRFTl9TQzsKPiArCj4gKwkvKiBTY2FsZXIgKi8KPiArCWNmZzEgPSBmaW1j X3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsKPiArCWNmZzEgJj0gfkVYWU5PU19DSVNDQ1RSTF9TQ0FO X01BU0s7Cj4gKwljZmcxIHw9IChFWFlOT1NfQ0lTQ0NUUkxfUFJPR1JFU1NJVkUgfAo+ICsJCUVY WU5PU19DSVNDQ1RSTF9TQ0FMRVJTVEFSVCk7Cj4gKwo+ICsJZmltY193cml0ZShjZmcxLCBFWFlO T1NfQ0lTQ0NUUkwpOwo+ICsKPiArCS8qIEVuYWJsZSBpbWFnZSBjYXB0dXJlKi8KPiArCWNmZzAg fD0gRVhZTk9TX0NJSU1HQ1BUX0lNR0NQVEVOOwo+ICsJZmltY193cml0ZShjZmcwLCBFWFlOT1Nf Q0lJTUdDUFQpOwo+ICsKPiArCS8qIERpc2FibGUgZnJhbWUgZW5kIGlycSAqLwo+ICsJY2ZnMCA9 IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4gKwljZmcwICY9IH5FWFlOT1NfQ0lHQ1RSTF9J UlFfRU5EX0RJU0FCTEU7Cj4gKwlmaW1jX3dyaXRlKGNmZzAsIEVYWU5PU19DSUdDVFJMKTsKPiAr Cj4gKwljZmcwID0gZmltY19yZWFkKEVYWU5PU19DSU9DVFJMKTsKPiArCWNmZzAgJj0gfkVYWU5P U19DSU9DVFJMX1dFQVZFX01BU0s7Cj4gKwlmaW1jX3dyaXRlKGNmZzAsIEVYWU5PU19DSU9DVFJM KTsKPiArCj4gKwkvKiBUb0RvOiBtMm0gc3RhcnQgZXJyYXRhIC0gcmVmZXIgZmltZCAqLwo+ICsJ aWYgKGNtZCA9PSBJUFBfQ01EX00yTSkgewo+ICsJCWNmZzAgPSBmaW1jX3JlYWQoRVhZTk9TX01T Q1RSTCk7Cj4gKwkJY2ZnMCB8PSBFWFlOT1NfTVNDVFJMX0VOVklEOwo+ICsJCWZpbWNfd3JpdGUo Y2ZnMCwgRVhZTk9TX01TQ1RSTCk7Cj4gKwo+ICsJCWNmZzAgPSBmaW1jX3JlYWQoRVhZTk9TX01T Q1RSTCk7Cj4gKwkJY2ZnMCB8PSBFWFlOT1NfTVNDVFJMX0VOVklEOwo+ICsJCWZpbWNfd3JpdGUo Y2ZnMCwgRVhZTk9TX01TQ1RSTCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGZpbWNfaXBwZHJ2X3N0b3Aoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGRy bV9leHlub3NfaXBwX2NtZCBjbWQpCj4gK3sKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9 IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9zZXRfd2Ig c2V0X3diID0gezAsIDB9Owo+ICsJdTMyIGNmZzsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczpj bWRbJWRdXG4iLCBfX2Z1bmNfXywgY21kKTsKPiArCj4gKwlzd2l0Y2ggKGNtZCkgewo+ICsJY2Fz ZSBJUFBfQ01EX00yTToKPiArCQkvKiBTb3VyY2UgY2xlYXIgKi8KPiArCQljZmcgPSBmaW1jX3Jl YWQoRVhZTk9TX01TQ1RSTCk7Cj4gKwkJY2ZnICY9IH5FWFlOT1NfTVNDVFJMX0lOUFVUX01BU0s7 Cj4gKwkJY2ZnICY9IH5FWFlOT1NfTVNDVFJMX0VOVklEOwo+ICsJCWZpbWNfd3JpdGUoY2ZnLCBF WFlOT1NfTVNDVFJMKTsKPiArCQlicmVhazsKPiArCWNhc2UgSVBQX0NNRF9XQjoKPiArCQlleHlu b3NfZHJtX2lwcG5iX3NlbmRfZXZlbnQoSVBQX1NFVF9XUklURUJBQ0ssICh2b2lkICopJnNldF93 Yik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElQUF9DTURfT1VUUFVUOgo+ICsJZGVmYXVsdDoKPiAr CQlkZXZfZXJyKGRldiwgImludmFsaWQgb3BlcmF0aW9ucy5cbiIpOwo+ICsJCWJyZWFrOwo+ICsJ fQo+ICsKPiArCWZpbWNfaGFuZGxlX2lycShjdHgsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7Cj4gKwo+ ICsJLyogcmVzZXQgc2VxdWVuY2UgKi8KPiArCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lGQ05U U0VRKTsKPiArCj4gKwkvKiBTY2FsZXIgZGlzYWJsZSAqLwo+ICsJY2ZnID0gZmltY19yZWFkKEVY WU5PU19DSVNDQ1RSTCk7Cj4gKwljZmcgJj0gfkVYWU5PU19DSVNDQ1RSTF9TQ0FMRVJTVEFSVDsK PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTQ0NUUkwpOwo+ICsKPiArCS8qIERpc2FibGUg aW1hZ2UgY2FwdHVyZSAqLwo+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSUlNR0NQVCk7Cj4g KwljZmcgJj0gfihFWFlOT1NfQ0lJTUdDUFRfSU1HQ1BURU5fU0MgfCBFWFlOT1NfQ0lJTUdDUFRf SU1HQ1BURU4pOwo+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19DSUlNR0NQVCk7Cj4gKwo+ICsJ LyogRW5hYmxlIGZyYW1lIGVuZCBpcnEgKi8KPiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lH Q1RSTCk7Cj4gKwljZmcgfD0gRVhZTk9TX0NJR0NUUkxfSVJRX0VORF9ESVNBQkxFOwo+ICsJZmlt Y193cml0ZShjZmcsIEVYWU5PU19DSUdDVFJMKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBm aW1jX2NhcGFiaWxpdHkgKmZpbWNfZ2V0X2NhcGFiaWxpdHkoCj4gKwllbnVtIGV4eW5vc19kcm1f ZmltY192ZXIgdmVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZmltY19jYXBhYmlsaXR5ICpjYXBhOwo+ICsK PiArCURSTV9ERUJVR19LTVMoIiVzOnZlclsweCV4XVxuIiwgX19mdW5jX18sIHZlcik7Cj4gKwo+ ICsJLyogVG9EbzogdmVyc2lvbiBjaGVjayAqLwo+ICsJc3dpdGNoICh2ZXIpIHsKPiArCWNhc2Ug RklNQ19FWFlOT1NfNDQxMjoKPiArCWNhc2UgRklNQ19FWFlOT1NfNDQxMl9SMjoKPiArCWRlZmF1 bHQ6Cj4gKwkJY2FwYSA9IGZpbWM1MV9jYXBhOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJl dHVybiBjYXBhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbWNfZ2V0X2Nsa19yYXRlKGVudW0g ZXh5bm9zX2RybV9maW1jX3ZlciB2ZXIpCj4gK3sKPiArCWludCBjbGtfcmF0ZTsKPiArCj4gKwlE Uk1fREVCVUdfS01TKCIlczp2ZXJbMHgleF1cbiIsIF9fZnVuY19fLCB2ZXIpOwo+ICsKPiArCXN3 aXRjaCAodmVyKSB7Cj4gKwljYXNlIEZJTUNfRVhZTk9TXzQ0MTJfUjI6Cj4gKwkJY2xrX3JhdGUg PSBGSU1DX0NMS19SQVRFX1IyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBGSU1DX0VYWU5PU180NDEy Ogo+ICsJZGVmYXVsdDoKPiArCQljbGtfcmF0ZSA9IEZJTUNfQ0xLX1JBVEU7Cj4gKwkJYnJlYWs7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNsa19yYXRlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9f ZGV2aW5pdCBmaW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0 ICpjdHg7Cj4gKwlzdHJ1Y3QgY2xrCSpwYXJlbnRfY2xrOwo+ICsJc3RydWN0IHJlc291cmNlICpy ZXM7Cj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydjsKPiArCXN0cnVjdCBleHlu b3NfZHJtX2ZpbWNfcGRhdGEgKnBkYXRhOwo+ICsJaW50IHJldCA9IC1FSU5WQUw7Cj4gKwo+ICsJ cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKPiArCWlmICghcGRhdGEpIHsKPiArCQlk ZXZfZXJyKGRldiwgIm5vIHBsYXRmb3JtIGRhdGEgc3BlY2lmaWVkLlxuIik7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJLyogY2xv Y2sgY29udHJvbCAqLwo+ICsJY3R4LT5zY2xrX2ZpbWNfY2xrID0gY2xrX2dldChkZXYsICJzY2xr X2ZpbWMiKTsKPiArCWlmIChJU19FUlIoY3R4LT5zY2xrX2ZpbWNfY2xrKSkgewo+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzcmMgZmltYyBjbG9jay5cbiIpOwo+ICsJCXJldCA9IFBU Ul9FUlIoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPiArCQlnb3RvIGVycl9jdHg7Cj4gKwl9Cj4gKwlj bGtfZW5hYmxlKGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4gKwo+ICsJY3R4LT5maW1jX2NsayA9IGNs a19nZXQoZGV2LCAiZmltYyIpOwo+ICsJaWYgKElTX0VSUihjdHgtPmZpbWNfY2xrKSkgewo+ICsJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBmaW1jIGNsb2NrLlxuIik7Cj4gKwkJcmV0ID0g UFRSX0VSUihjdHgtPmZpbWNfY2xrKTsKPiArCQljbGtfcHV0KGN0eC0+c2Nsa19maW1jX2Nsayk7 Cj4gKwkJZ290byBlcnJfY3R4Owo+ICsJfQo+ICsKPiArCWN0eC0+d2JfY2xrID0gY2xrX2dldChk ZXYsICJweGxfYXN5bmMwIik7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+d2JfY2xrKSkgewo+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCB3cml0ZWJhY2sgYSBjbG9jay5cbiIpOwo+ICsJCXJl dCA9IFBUUl9FUlIoY3R4LT53Yl9jbGspOwo+ICsJCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNfY2xr KTsKPiArCQljbGtfcHV0KGN0eC0+ZmltY19jbGspOwo+ICsJCWdvdG8gZXJyX2N0eDsKPiArCX0K PiArCj4gKwljdHgtPndiX2JfY2xrID0gY2xrX2dldChkZXYsICJweGxfYXN5bmMxIik7Cj4gKwlp ZiAoSVNfRVJSKGN0eC0+d2JfYl9jbGspKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g Z2V0IHdyaXRlYmFjayBiIGNsb2NrLlxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihjdHgtPndiX2Jf Y2xrKTsKPiArCQljbGtfcHV0KGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4gKwkJY2xrX3B1dChjdHgt PmZpbWNfY2xrKTsKPiArCQljbGtfcHV0KGN0eC0+d2JfY2xrKTsKPiArCQlnb3RvIGVycl9jdHg7 Cj4gKwl9Cj4gKwo+ICsJaWYgKHBkYXRhLT52ZXIgPT0gRklNQ19FWFlOT1NfNDIxMCkKPiArCQlw YXJlbnRfY2xrID0gY2xrX2dldChkZXYsICJtb3V0X21wbGwiKTsKPiArCWVsc2UKPiArCQlwYXJl bnRfY2xrID0gY2xrX2dldChkZXYsICJtb3V0X21wbGxfdXNlciIpOwo+ICsKPiArCWlmIChJU19F UlIocGFyZW50X2NsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcGFyZW50 IGNsb2NrLlxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihwYXJlbnRfY2xrKTsKPiArCQljbGtfcHV0 KGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4gKwkJY2xrX3B1dChjdHgtPmZpbWNfY2xrKTsKPiArCQlj bGtfcHV0KGN0eC0+d2JfY2xrKTsKPiArCQljbGtfcHV0KGN0eC0+d2JfYl9jbGspOwo+ICsJCWdv dG8gZXJyX2N0eDsKPiArCX0KPiArCj4gKwlpZiAoY2xrX3NldF9wYXJlbnQoY3R4LT5zY2xrX2Zp bWNfY2xrLCBwYXJlbnRfY2xrKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBw YXJlbnQuXG4iKTsKPiArCQljbGtfcHV0KHBhcmVudF9jbGspOwo+ICsJCWNsa19wdXQoY3R4LT5z Y2xrX2ZpbWNfY2xrKTsKPiArCQljbGtfcHV0KGN0eC0+ZmltY19jbGspOwo+ICsJCWNsa19wdXQo Y3R4LT53Yl9jbGspOwo+ICsJCWNsa19wdXQoY3R4LT53Yl9iX2Nsayk7Cj4gKwkJZ290byBlcnJf Y3R4Owo+ICsJfQo+ICsJY2xrX3B1dChwYXJlbnRfY2xrKTsKPiArCWNsa19zZXRfcmF0ZShjdHgt PnNjbGtfZmltY19jbGssIGZpbWNfZ2V0X2Nsa19yYXRlKHBkYXRhLT52ZXIpKTsKPiArCWlmIChw ZGF0YS0+dmVyID09IEZJTUNfRVhZTk9TXzQyMTApCj4gKwkJY2xrX3B1dChjdHgtPnNjbGtfZmlt Y19jbGspOwo+ICsJZWxzZQo+ICsJCWNsa19kaXNhYmxlKGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4g Kwo+ICsJLyogcmVzb3VyY2UgbWVtb3J5ICovCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJaWYgKCFyZXMpIHsKPiArCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byBmaW5kIHJlZ2lzdGVycy5cbiIpOwo+ICsJCXJldCA9IC1FTk9FTlQ7 Cj4gKwkJZ290byBlcnJfY2xrOwo+ICsJfQo+ICsKPiArCWN0eC0+cmVnc19yZXMgPSByZXF1ZXN0 X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAo+ICsJCQkJCSAgIGRl dl9uYW1lKGRldikpOwo+ICsJaWYgKCFjdHgtPnJlZ3NfcmVzKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gY2xhaW0gcmVnaXN0ZXIgcmVnaW9uLlxuIik7Cj4gKwkJcmV0ID0gLUVOT0VO VDsKPiArCQlnb3RvIGVycl9jbGs7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5yZWdzID0gaW9yZW1hcChy ZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwo+ICsJaWYgKCFjdHgtPnJlZ3MpIHsKPiAr CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLlxuIik7Cj4gKwkJcmV0ID0g LUVOWElPOwo+ICsJCWdvdG8gZXJyX3JlcV9yZWdpb247Cj4gKwl9Cj4gKwo+ICsJLyogcmVzb3Vy Y2UgaXJxICovCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9JUlEsIDApOwo+ICsJaWYgKCFyZXMpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBy ZXF1ZXN0IGlycSByZXNvdXJjZS5cbiIpOwo+ICsJCWdvdG8gZXJyX2dldF9yZWdzOwo+ICsJfQo+ ICsKPiArCWN0eC0+aXJxID0gcmVzLT5zdGFydDsKPiArCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRf aXJxKGN0eC0+aXJxLCBOVUxMLCBmaW1jX2lycV9oYW5kbGVyLAo+ICsJCUlSUUZfT05FU0hPVCwg ImRybV9maW1jIiwgY3R4KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gcmVxdWVzdCBpcnEuXG4iKTsKPiArCQlnb3RvIGVycl9nZXRfcmVnczsKPiArCX0K PiArCj4gKwkvKiBjb250ZXh0IGluaXRhaWxpemF0aW9uICovCj4gKwljdHgtPnZlciA9IHBkYXRh LT52ZXI7Cj4gKwljdHgtPmlkID0gcGRldi0+aWQ7Cj4gKwljdHgtPmNhcGEgPSBmaW1jX2dldF9j YXBhYmlsaXR5KGN0eC0+dmVyKTsKPiArCWlmICghY3R4LT5jYXBhKSB7Cj4gKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gZ2V0IGNhcGFiaWxpdHkuXG4iKTsKPiArCQlnb3RvIGVycl9nZXRfaXJx Owo+ICsJfQo+ICsJY3R4LT5wb2wgPSBwZGF0YS0+cG9sOwo+ICsKPiArCWlwcGRydiA9ICZjdHgt PmlwcGRydjsKPiArCWlwcGRydi0+ZGV2ID0gZGV2Owo+ICsJaXBwZHJ2LT5vcHNbRVhZTk9TX0RS TV9PUFNfU1JDXSA9ICZmaW1jX3NyY19vcHM7Cj4gKwlpcHBkcnYtPm9wc1tFWFlOT1NfRFJNX09Q U19EU1RdID0gJmZpbWNfZHN0X29wczsKPiArCWlwcGRydi0+Y2hlY2tfcHJvcGVydHkgPSBmaW1j X2lwcGRydl9jaGVja19wcm9wZXJ0eTsKPiArCWlwcGRydi0+cmVzZXQgPSBmaW1jX2lwcGRydl9y ZXNldDsKPiArCWlwcGRydi0+c3RhcnQgPSBmaW1jX2lwcGRydl9zdGFydDsKPiArCWlwcGRydi0+ c3RvcCA9IGZpbWNfaXBwZHJ2X3N0b3A7Cj4gKwlyZXQgPSBmaW1jX2luaXRfcHJvcF9saXN0KCZp cHBkcnYtPnByb3BfbGlzdCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGluaXQgcHJvcGVydHkgbGlzdC5cbiIpOwo+ICsJCWdvdG8gZXJyX2dldF9pcnE7 Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6aWRbJWRdaXBwZHJ2WzB4JXhdXG4iLCBf X2Z1bmNfXywgY3R4LT5pZCwKPiArCQkoaW50KWlwcGRydik7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lu aXQoJmN0eC0+bG9jayk7Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjdHgpOwo+ICsK PiArCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2 KTsKPiArCj4gKwlyZXQgPSBleHlub3NfZHJtX2lwcGRydl9yZWdpc3RlcihpcHBkcnYpOwo+ICsJ aWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkcm0g ZmltYyBkZXZpY2UuXG4iKTsKPiArCQlnb3RvIGVycl9pcHBkcnZfcmVnaXN0ZXI7Cj4gKwl9Cj4g Kwo+ICsJZGV2X2luZm8oJnBkZXYtPmRldiwgImRybSBmaW1jIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1 bGx5LlxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfaXBwZHJ2X3JlZ2lzdGVyOgo+ ICsJa2ZyZWUoaXBwZHJ2LT5wcm9wX2xpc3QpOwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRldik7 Cj4gKwlmcmVlX2lycShjdHgtPmlycSwgY3R4KTsKPiArZXJyX2dldF9pcnE6Cj4gKwlmcmVlX2ly cShjdHgtPmlycSwgY3R4KTsKPiArZXJyX2dldF9yZWdzOgo+ICsJaW91bm1hcChjdHgtPnJlZ3Mp Owo+ICtlcnJfcmVxX3JlZ2lvbjoKPiArCXJlbGVhc2VfcmVzb3VyY2UoY3R4LT5yZWdzX3Jlcyk7 Cj4gKwlrZnJlZShjdHgtPnJlZ3NfcmVzKTsKPiArZXJyX2NsazoKPiArCWNsa19wdXQoY3R4LT5z Y2xrX2ZpbWNfY2xrKTsKPiArCWNsa19wdXQoY3R4LT5maW1jX2Nsayk7Cj4gKwljbGtfcHV0KGN0 eC0+d2JfY2xrKTsKPiArCWNsa19wdXQoY3R4LT53Yl9iX2Nsayk7Cj4gK2Vycl9jdHg6Cj4gKwlr ZnJlZShjdHgpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2RldmV4 aXQgZmltY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0 eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAq aXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+ICsKPiArCWtmcmVlKGlwcGRydi0+cHJvcF9saXN0KTsK PiArCWV4eW5vc19kcm1faXBwZHJ2X3VucmVnaXN0ZXIoaXBwZHJ2KTsKPiArCj4gKwlwbV9ydW50 aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwo+ICsK PiArCWZyZWVfaXJxKGN0eC0+aXJxLCBjdHgpOwo+ICsJaW91bm1hcChjdHgtPnJlZ3MpOwo+ICsJ cmVsZWFzZV9yZXNvdXJjZShjdHgtPnJlZ3NfcmVzKTsKPiArCWtmcmVlKGN0eC0+cmVnc19yZXMp Owo+ICsKPiArCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPiArCWNsa19wdXQoY3R4LT5m aW1jX2Nsayk7Cj4gKwljbGtfcHV0KGN0eC0+d2JfY2xrKTsKPiArCWNsa19wdXQoY3R4LT53Yl9i X2Nsayk7Cj4gKwo+ICsJa2ZyZWUoY3R4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr I2lmZGVmIENPTkZJR19QTV9TTEVFUAo+ICtzdGF0aWMgaW50IGZpbWNfc3VzcGVuZChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1j X2NvbnRleHQoZGV2KTsKPiArCj4gKwlEUk1fREVCVUdfS01TKCIlczppZFslZF1cbiIsIF9fZnVu Y19fLCBjdHgtPmlkKTsKPiArCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ICsJCXJl dHVybiAwOwo+ICsJLyogVG9EbyAqLwo+ICsJcmV0dXJuIGZpbWNfcG93ZXJfb24oY3R4LCBmYWxz ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmltY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHggPSBnZXRfZmltY19jb250ZXh0KGRl dik7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXM6aWRbJWRdXG4iLCBfX2Z1bmNfXywgY3R4LT5p ZCk7Cj4gKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCj4gKwkJcmV0dXJuIGZpbWNf cG93ZXJfb24oY3R4LCB0cnVlKTsKPiArCS8qIFRvRG8gKi8KPiArCXJldHVybiAwOwo+ICt9Cj4g KyNlbmRpZgo+ICsKPiArI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCj4gK3N0YXRpYyBpbnQgZmlt Y19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZmlt Y19jb250ZXh0ICpjdHggPSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4gKwo+ICsJRFJNX0RFQlVH X0tNUygiJXM6aWRbJWRdXG4iLCBfX2Z1bmNfXywgY3R4LT5pZCk7Cj4gKwkvKiBUb0RvICovCj4g KwlyZXR1cm4gIGZpbWNfcG93ZXJfb24oY3R4LCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZmltY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVj dCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPiArCj4gKwlEUk1f REVCVUdfS01TKCIlczppZFslZF1cbiIsIF9fZnVuY19fLCBjdHgtPmlkKTsKPiArCS8qIFRvRG8g Ki8KPiArCXJldHVybiAgZmltY19wb3dlcl9vbihjdHgsIHRydWUpOwo+ICt9Cj4gKyNlbmRpZgo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGZpbWNfcG1fb3BzID0gewo+ICsJ U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoZmltY19zdXNwZW5kLCBmaW1jX3Jlc3VtZSkKPiArCVNF VF9SVU5USU1FX1BNX09QUyhmaW1jX3J1bnRpbWVfc3VzcGVuZCwgZmltY19ydW50aW1lX3Jlc3Vt ZSwgTlVMTCkKPiArfTsKPiArCj4gKy8qIFRvRG86IG5lZWQgdG8gY2hlY2sgdXNlIGNhc2UgcGxh dGZvcm1fZGV2aWNlX2lkICovCj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmltY19kcml2ZXIg PSB7Cj4gKwkucHJvYmUJCT0gZmltY19wcm9iZSwKPiArCS5yZW1vdmUJCT0gX19kZXZleGl0X3Ao ZmltY19yZW1vdmUpLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAiZXh5bm9zLWRybS1m aW1jIiwKPiArCQkub3duZXIJPSBUSElTX01PRFVMRSwKPiArCQkucG0JPSAmZmltY19wbV9vcHMs Cj4gKwl9LAo+ICt9Owo+ICsKCjxzbmlwPgoKQmVzdCBSZWdhcmRzLAotIFNldW5nLVdvbyBLaW0K Ci0tIApTZXVuZy1Xb28gS2ltClNhbXN1bmcgU29mdHdhcmUgUiZEIENlbnRlcgotLQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK