From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH v2 2/3] drm/msm/dp: add displayPort driver support Date: Wed, 23 Jan 2019 12:14:05 -0500 Message-ID: <20190123171405.GO114153@art_vandelay> References: <1546894271-25870-1-git-send-email-chandanu@codeaurora.org> <1546894271-25870-3-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1546894271-25870-3-git-send-email-chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Chandan Uddaraju Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: devicetree@vger.kernel.org T24gTW9uLCBKYW4gMDcsIDIwMTkgYXQgMTI6NTE6MTBQTSAtMDgwMCwgQ2hhbmRhbiBVZGRhcmFq dSB3cm90ZToKPiBBZGQgdGhlIG5lZWRlZCBkaXNwbGF5UG9ydCBmaWxlcyB0byBlbmFibGUgRFAg ZHJpdmVyCj4gb24gbXNtIHRhcmdldC4KPiAKPiAiZHBfZGlzcGxheSIgbW9kdWxlIGlzIHRoZSBt YWluIG1vZHVsZSB0aGF0IGNhbGxzIGludG8KPiBvdGhlciBzdWItbW9kdWxlcy4gImRwX2RybSIg ZmlsZSByZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UKPiBiZXR3ZWVuIERSTSBmcmFtZXdvcmsgYW5k IERQIGRyaXZlci4KPiAKPiBjaGFuZ2VzIGluIHYyOgo+IC0tIFVwZGF0ZSBjb3B5cmlnaHQgbWFy a2luZ3Mgb24gYWxsIHJlbGV2YW50IGZpbGVzLgo+IC0tIENoYW5nZSBwcl9lcnIoKSB0byBEUk1f RVJST1IoKQo+IC0tIFVzZSBBUElzIGRpcmVjdGx5IGluc3RlYWQgb2YgZnVuY3Rpb24gcG9pbnRl cnMuCj4gLS0gVXNlIGRybV9kaXNwbGF5X21vZGUgc3RydWN0dXJlIHRvIHN0b3JlIGxpbmsgcGFy YW1ldGVycyBpbiB0aGUgZHJpdmVyLgo+IC0tIFVzZSBtYWNyb3MgZm9yIHJlZ2lzdGVyIGRlZmlu aXRpb25zIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcy4KPiAtLSBSZXBsYWNlIHdyaXRlbF9y ZWxheGVkL3JlYWRsX3JlbGF4ZWQgd2l0aCB3cml0ZWwvcmVhZGwKPiAgICBhbmQgcmVtb3ZlIG1l bW9yeSBiYXJyaWVycy4KPiAtLSBSZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MuCj4gLS0g VXNlIGRybSBoZWxwZXIgZnVuY3Rpb25zIGZvciBkcGNkIHJlYWQvd3JpdGUuCj4gLS0gVXNlIERS TV9ERUJVR19EUCBmb3IgZGVidWcgbXNncy4KClNvIEkgc3RhcnRlZCByZXZpZXdpbmcgdGhpcyAo d2VsbCwgcmUtcmV2aWV3aW5nIHRoaXMgc2luY2UgbXkgZmlyc3QgcGFzcyB3YXMKZWF0ZW4gYnkg YW4gdW5mb3J0dW5hdGUgcG93ZXIgb3V0YWdlKSBhbmQgbm90aWNlZCBhIF9idW5jaF8gb2YgbXkg Y29tbWVudHMgZnJvbQp0aGUgdjEgcmV2aWV3IHdlcmUgaWdub3JlZC4gSSBzdGFydGVkIGFkZGlu ZyB0aGVtIGJhY2sgdG8gdjIsIGJ1dCB0aGF0J3MKaG9uZXN0bHkganVzdCBhIHdhc3RlIG9mIG15 IHRpbWUuIEl0IHRvb2sgbWUgYSBfbG9uZ18gdGltZSB0byByZXZpZXcgdGhlIHYxLCBzbwp5b3Ug Y291bGQgYXQgbGVhc3QgZ28gdGhyb3VnaCBhbmQgZW5zdXJlIGFsbCBvZiB0aGUgY29tbWVudHMg YXJlIGFkZHJlc3NlZAooZWl0aGVyIGJ5IHJlc3BvbmRpbmcgdG8gbXkgcXVlc3Rpb25zLCBwdXNo aW5nIGJhY2sgb24gbXkgc3VnZ2VzdGlvbnMsIG9yCmNoYW5naW5nIHRoZSBjb2RlKS4gU2lsZW50 bHkgaWdub3JpbmcgcmV2aWV3IGZlZWRiYWNrLCBlc3BlY2lhbGx5IG9uIGEgcmV2aWV3CnRoaXMg aW4tZGVwdGggaXMgc3VwZXIgYW5ub3lpbmcuCgpJJ3ZlIGFkZGVkIHNvbWUgYWRkaXRpb25hbCBj b21tZW50cyBvbiB0aGUgdjIsIHNvIHBsZWFzZSBhbHNvIGVuc3VyZSB0aG9zZSBhcmUKYWRkcmVz c2VkIGJlZm9yZSB5b3Ugc2VuZCBhIHYzLgoKU2VhbgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaGFu ZGFuIFVkZGFyYWp1IDxjaGFuZGFudUBjb2RlYXVyb3JhLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9n cHUvZHJtL21zbS9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgIDkgKwo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxMiArCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgfCAgIDIwICsKPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYyB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIHwgICAyNiArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfYXV4LmMgICAgICAgICAgICAgfCAgNTQ4ICsrKysrKysrKwo+ICBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5oICAgICAgICAgICAgIHwgICAzNyArCj4gIGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jICAgICAgICAgfCAgOTk2ICsrKysrKysrKysrKysr KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oICAgICAgICAgfCAgMTA4 ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jICAgICAgICAgICAgfCAxNjEx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2N0cmwuaCAgICAgICAgICAgIHwgICAzNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf ZGlzcGxheS5jICAgICAgICAgfCAgOTQxICsrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9kaXNwbGF5LmggICAgICAgICB8ICAgMjggKwo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2RybS5jICAgICAgICAgICAgIHwgIDE4OSArKysrCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfZHJtLmggICAgICAgICAgICAgfCAgIDIwICsKPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9leHRjb24uYyAgICAgICAgICB8ICAyMjggKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oICAgICAgICAgIHwgICA4NSArKwo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2xpbmsuYyAgICAgICAgICAgIHwgMTIxNiArKysrKysrKysrKysrKysr KysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaCAgICAgICAgICAgIHwgIDEz MiArKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICAgICAgICB8ICA1 MDQgKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgICAgICAg ICAgfCAgIDkxICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMgICAgICAg ICAgfCAgNjIxICsrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2Vy LmggICAgICAgICAgfCAgMTk2ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dl ci5jICAgICAgICAgICB8ICA3MzMgKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfcG93ZXIuaCAgICAgICAgICAgfCAgIDUxICsKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9yZWcuaCAgICAgICAgICAgICB8ICA0NzUgKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgIHwgICA0MSArCj4gIDI4IGZpbGVzIGNoYW5nZWQs IDg5NTggaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9hdXguYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9hdXguaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9jYXRhbG9nLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfY2F0YWxvZy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2N0cmwuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9jdHJsLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGlzcGxheS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2Rpc3BsYXkuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9kcm0uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kcm0uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9l eHRjb24uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9l eHRjb24uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9s aW5rLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGlu ay5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVs LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcmVnLmgKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9LY29uZmlnCj4gaW5kZXggY2Y1NDlmMS4uYzZiMmUwNyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tj b25maWcKPiBAQCAtNDksNiArNDksMTUgQEAgY29uZmlnIERSTV9NU01fSERNSV9IRENQCj4gIAlo ZWxwCj4gIAkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgSERDUCBzdGF0ZSBtYWNoaW5l Cj4gIAo+ICtjb25maWcgRFJNX01TTV9EUAo+ICsJYm9vbCAiRW5hYmxlIERQIHN1cHBvcnQgaW4g TVNNIERSTSBkcml2ZXIiCj4gKwlkZXBlbmRzIG9uIERSTV9NU00KPiArCWRlZmF1bHQgbgo+ICsJ aGVscAo+ICsJICBDb21waWxlIGluIHN1cHBvcnQgZm9yIERQIGRyaXZlciBpbiBtc20gZHJtIGRy aXZlci4gRFAgZXh0ZXJuYWwKPiArCSAgZGlzcGxheSBzdXBwb3J0IGlzIGVuYWJsZWQgdGhyb3Vn aCB0aGlzIGNvbmZpZyBvcHRpb24uIEl0IGNhbgo+ICsJICBiZSBwcmltYXJ5IG9yIHNlY29uZGFy eSBkaXNwbGF5IG9uIGRldmljZS4KPiArCj4gIGNvbmZpZyBEUk1fTVNNX0RTSQo+ICAJYm9vbCAi RW5hYmxlIERTSSBzdXBwb3J0IGluIE1TTSBEUk0gZHJpdmVyIgo+ICAJZGVwZW5kcyBvbiBEUk1f TVNNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gaW5kZXggNTZhNzBjNy4uNDUxNjZlZiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9NYWtlZmlsZQo+IEBAIC0yLDYgKzIsNyBAQAo+ICBjY2ZsYWdzLXkgOj0gLUlkcml2ZXJz L2dwdS9kcm0vbXNtCj4gIGNjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxCj4gIGNjZmxhZ3MtJChDT05GSUdfRFJNX01TTV9EU0kpICs9IC1JZHJpdmVycy9ncHUvZHJt L21zbS9kc2kKPiArY2NmbGFncy0kKENPTkZJR19EUk1fTVNNX0RQKSArPSAtSWRyaXZlcnMvZ3B1 L2RybS9tc20vZHAKPiAgCj4gIG1zbS15IDo9IFwKPiAgCWFkcmVuby9hZHJlbm9fZGV2aWNlLm8g XAo+IEBAIC05Niw2ICs5NywxNyBAQCBtc20teSA6PSBcCj4gIAo+ICBtc20tJChDT05GSUdfREVC VUdfRlMpICs9IGFkcmVuby9hNXh4X2RlYnVnZnMubwo+ICAKPiArbXNtLSQoQ09ORklHX0RSTV9N U01fRFApKz0gZHAvZHBfYXV4Lm8gXAo+ICsJZHAvZHBfY2F0YWxvZy5vIFwKPiArCWRwL2RwX2N0 cmwubyBcCj4gKwlkcC9kcF9kaXNwbGF5Lm8gXAo+ICsJZHAvZHBfZHJtLm8gXAo+ICsJZHAvZHBf ZXh0Y29uLm8gXAo+ICsJZHAvZHBfbGluay5vIFwKPiArCWRwL2RwX3BhbmVsLm8gXAo+ICsJZHAv ZHBfcGFyc2VyLm8gXAo+ICsJZHAvZHBfcG93ZXIubwo+ICsKPiAgbXNtLSQoQ09ORklHX0RSTV9G QkRFVl9FTVVMQVRJT04pICs9IG1zbV9mYmRldi5vCj4gIG1zbS0kKENPTkZJR19DT01NT05fQ0xL KSArPSBkaXNwL21kcDQvbWRwNF9sdmRzX3BsbC5vCj4gIG1zbS0kKENPTkZJR19DT01NT05fQ0xL KSArPSBoZG1pL2hkbWlfcGxsXzg5NjAubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXIuYwo+IGluZGV4IDBkZGE0YTYuLmU2ZjgxYTEgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiBAQCAtOTkxLDYgKzk5MSw5 IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jLAo+ICAKPiAgCXRyYWNlX2RwdV9lbmNfbW9kZV9zZXQoRFJNSUQoZHJtX2Vu YykpOwo+ICAKPiArCWlmIChkcm1fZW5jLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RF Ul9UTURTICYmIHByaXYtPmRwKQoKQ2FuIHlvdSBwdWxsIHRoaXMgb3V0IGludG8gYSBkcHVfZW5j b2Rlcl9pc19kcCgpIGhlbHBlciBpbnN0ZWFkIG9mIHNwcmlua2xpbmcKdGhpcyBhcm91bmQ/Cgo+ ICsJCW1zbV9kcF9kaXNwbGF5X21vZGVfc2V0KHByaXYtPmRwLCBkcm1fZW5jLCBtb2RlLCBhZGpf bW9kZSk7Cj4gKwo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uX2l0ZXIsIGNvbm5lY3Rvcl9s aXN0LCBoZWFkKQo+ICAJCWlmIChjb25uX2l0ZXItPmVuY29kZXIgPT0gZHJtX2VuYykKPiAgCQkJ Y29ubiA9IGNvbm5faXRlcjsKPiBAQCAtMTExNCw2ICsxMTE3LDcgQEAgc3RhdGljIHZvaWQgZHB1 X2VuY29kZXJfdmlydF9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQo+ICB7Cj4g IAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IE5VTEw7Cj4gIAlpbnQgcmV0ID0g MDsKPiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Cj4gIAlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqY3VyX21vZGUgPSBOVUxMOwo+ICAKPiAgCWlmICghZHJtX2VuYykgewo+IEBAIC0x MTI0LDYgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X2VuYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCj4gIAo+ICAJbXV0ZXhfbG9jaygmZHB1X2VuYy0+ZW5j X2xvY2spOwo+ICAJY3VyX21vZGUgPSAmZHB1X2VuYy0+YmFzZS5jcnRjLT5zdGF0ZS0+YWRqdXN0 ZWRfbW9kZTsKPiArCXByaXYgPSBkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlOwo+ICAKPiAgCXRy YWNlX2RwdV9lbmNfZW5hYmxlKERSTUlEKGRybV9lbmMpLCBjdXJfbW9kZS0+aGRpc3BsYXksCj4g IAkJCSAgICAgY3VyX21vZGUtPnZkaXNwbGF5KTsKPiBAQCAtMTE0NCw2ICsxMTQ5LDE1IEBAIHN0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYykKPiAgCj4gIAlfZHB1X2VuY29kZXJfdmlydF9lbmFibGVfaGVscGVyKGRybV9lbmMpOwo+ ICAKPiArCWlmIChkcm1fZW5jLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RFUl9UTURT ICYmIHByaXYtPmRwKSB7Cj4gKwkJcmV0ID0gbXNtX2RwX2Rpc3BsYXlfZW5hYmxlKHByaXYtPmRw LAo+ICsJCQkJCQlkcm1fZW5jKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURQVV9FUlJPUl9FTkMo ZHB1X2VuYywgImRwIGRpc3BsYXkgZW5hYmxlIGZhaWxlZDogJWRcbiIsCj4gKwkJCQlyZXQpOwo+ ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwl9Cj4gIAlkcHVfZW5jLT5lbmFibGVkID0gdHJ1ZTsK PiAgCj4gIG91dDoKPiBAQCAtMTE4MCw2ICsxMTk0LDEyIEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNv ZGVyX3ZpcnRfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCj4gIAlwcml2ID0g ZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYt Pmttcyk7Cj4gIAo+ICsJaWYgKGRybV9lbmMtPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNP REVSX1RNRFMgJiYgcHJpdi0+ZHApIHsKPiArCQlpZiAobXNtX2RwX2Rpc3BsYXlfZGlzYWJsZShw cml2LT5kcCwgZHJtX2VuYykpIHsKPiArCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiZHAgZGlz cGxheSBkaXNhYmxlIGZhaWxlZFxuIik7Cj4gKwkJCXJldHVybjsKPiArCQkgIH0KPiArCX0KPiAg CXRyYWNlX2RwdV9lbmNfZGlzYWJsZShEUk1JRChkcm1fZW5jKSk7Cj4gIAo+ICAJLyogd2FpdCBm b3IgaWRsZSAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaW9fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwu Ywo+IGluZGV4IDc4ODMzYzIuLmI0YjFkYjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9pb191dGlsLmMKPiBAQCAtMTQsNyArMTQsOSBAQAo+ICAjaW5jbHVkZSA8 bGludXgvY2xrLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYuaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiAgI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICAKPiAgI2luY2x1ZGUgPGRy bS9kcm1fcHJpbnQuaD4KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9pb191dGlsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aW9fdXRpbC5oCj4gaW5kZXggYmMwNzM4MS4uYTFkM2UwNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuaAo+IEBAIC0xNSw2ICsxNSw3IEBACj4gIAo+ ICAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gIAo+ICAjZGVmaW5lIERFVl9EQkcoZm10LCBhcmdzLi4uKSAg IHByX2RlYnVnKGZtdCwgIyNhcmdzKQo+IEBAIC0yMiw2ICsyMywyOSBAQAo+ICAjZGVmaW5lIERF Vl9XQVJOKGZtdCwgYXJncy4uLikgIHByX3dhcm4oZm10LCAjI2FyZ3MpCj4gICNkZWZpbmUgREVW X0VSUihmbXQsIGFyZ3MuLi4pICAgcHJfZXJyKGZtdCwgIyNhcmdzKQo+ICAKPiArc3RydWN0IGRz c19pb19kYXRhIHsKPiArCXUzMiBsZW47Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gK307Cj4g Kwo+ICtlbnVtIGRzc192cmVnX3R5cGUgewo+ICsJRFNTX1JFR19MRE8sCj4gKwlEU1NfUkVHX1ZT LAo+ICt9Owo+ICsKPiArc3RydWN0IGRzc192cmVnIHsKPiArCXN0cnVjdCByZWd1bGF0b3IgKnZy ZWc7IC8qIHZyZWcgaGFuZGxlICovCj4gKwljaGFyIHZyZWdfbmFtZVszMl07Cj4gKwlpbnQgbWlu X3ZvbHRhZ2U7Cj4gKwlpbnQgbWF4X3ZvbHRhZ2U7Cj4gKwlpbnQgZW5hYmxlX2xvYWQ7Cj4gKwlp bnQgZGlzYWJsZV9sb2FkOwo+ICsJaW50IHByZV9vbl9zbGVlcDsKPiArCWludCBwb3N0X29uX3Ns ZWVwOwo+ICsJaW50IHByZV9vZmZfc2xlZXA7Cj4gKwlpbnQgcG9zdF9vZmZfc2xlZXA7Cj4gK307 Cj4gKwo+ICBzdHJ1Y3QgZHNzX2dwaW8gewo+ICAJdW5zaWduZWQgaW50IGdwaW87Cj4gIAl1bnNp Z25lZCBpbnQgdmFsdWU7Cj4gQEAgLTQyLDYgKzY2LDggQEAgc3RydWN0IGRzc19jbGsgewo+ICB9 Owo+ICAKPiAgc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgewo+ICsJdW5zaWduZWQgaW50IG51bV92 cmVnOwo+ICsJc3RydWN0IGRzc192cmVnICp2cmVnX2NvbmZpZzsKPiAgCXVuc2lnbmVkIGludCBu dW1fZ3BpbzsKPiAgCXN0cnVjdCBkc3NfZ3BpbyAqZ3Bpb19jb25maWc7Cj4gIAl1bnNpZ25lZCBp bnQgbnVtX2NsazsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXgu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLmVmMGJlMTAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYwo+IEBAIC0wLDAgKzEsNTQ4IEBACj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoKPiArICogQ29weXJpZ2h0IChj KSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19m dW5jX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsKPiArI2luY2x1ZGUgImRw X2F1eC5oIgo+ICsKPiArI2RlZmluZSBEUF9BVVhfRU5VTV9TVFIoeCkJCSN4Cj4gKwo+ICtlbnVt IHsKPiArCURQX0FVWF9EQVRBX0lOREVYX1dSSVRFID0gQklUKDMxKSwKPiArfTsKPiArCj4gK3N0 cnVjdCBkcF9hdXhfcHJpdmF0ZSB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3Qg ZHBfYXV4IGRwX2F1eDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqY2F0YWxvZzsKPiArCj4g KwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwo+ICsKPiAr CXUzMiBhdXhfZXJyb3JfbnVtOwo+ICsJdTMyIHJldHJ5X2NudDsKPiArCWJvb2wgY21kX2J1c3k7 Cj4gKwlib29sIG5hdGl2ZTsKPiArCWJvb2wgcmVhZDsKPiArCWJvb2wgbm9fc2VuZF9hZGRyOwo+ ICsJYm9vbCBub19zZW5kX3N0b3A7Cj4gKwl1MzIgb2Zmc2V0Owo+ICsJdTMyIHNlZ21lbnQ7Cj4g Kwo+ICsJc3RydWN0IGRybV9kcF9hdXggZHJtX2F1eDsKPiArfTsKPiArCj4gK3N0YXRpYyBjaGFy ICpkcF9hdXhfZ2V0X2Vycm9yKHUzMiBhdXhfZXJyb3IpCj4gK3sKPiArCXN3aXRjaCAoYXV4X2Vy cm9yKSB7Cj4gKwljYXNlIERQX0FVWF9FUlJfTk9ORToKPiArCQlyZXR1cm4gRFBfQVVYX0VOVU1f U1RSKERQX0FVWF9FUlJfTk9ORSk7Cj4gKwljYXNlIERQX0FVWF9FUlJfQUREUjoKPiArCQlyZXR1 cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfQUREUik7Cj4gKwljYXNlIERQX0FVWF9FUlJf VE9VVDoKPiArCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfVE9VVCk7Cj4gKwlj YXNlIERQX0FVWF9FUlJfTkFDSzoKPiArCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9F UlJfTkFDSyk7Cj4gKwljYXNlIERQX0FVWF9FUlJfREVGRVI6Cj4gKwkJcmV0dXJuIERQX0FVWF9F TlVNX1NUUihEUF9BVVhfRVJSX0RFRkVSKTsKPiArCWNhc2UgRFBfQVVYX0VSUl9OQUNLX0RFRkVS Ogo+ICsJCXJldHVybiBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9OQUNLX0RFRkVSKTsKPiAr CWRlZmF1bHQ6Cj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IHUzMiBkcF9hdXhfd3JpdGUoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgsCj4gKwkJCXN0cnVj dCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICt7Cj4gKwl1MzIgZGF0YVs0XSwgcmVnLCBsZW47Cj4g Kwl1OCAqbXNnZGF0YSA9IG1zZy0+YnVmZmVyOwo+ICsJaW50IGNvbnN0IGF1eF9jbWRfZmlmb19s ZW4gPSAxMjg7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJaWYgKGF1eC0+cmVhZCkKPiArCQlsZW4g PSA0Owo+ICsJZWxzZQo+ICsJCWxlbiA9IG1zZy0+c2l6ZSArIDQ7Cj4gKwo+ICsJLyoKPiArCSAq IGNtZCBmaWZvIG9ubHkgaGFzIGRlcHRoIG9mIDE0NCBieXRlcwo+ICsJICogbGltaXQgYnVmIGxl bmd0aCB0byAxMjggYnl0ZXMgaGVyZQo+ICsJICovCj4gKwlpZiAobGVuID4gYXV4X2NtZF9maWZv X2xlbikgewo+ICsJCURSTV9FUlJPUigiYnVmIGxlbiBlcnJvclxuIik7Cj4gKwkJcmV0dXJuIDA7 Cj4gKwl9Cj4gKwo+ICsJLyogUGFjayBjbWQgYW5kIHdyaXRlIHRvIEhXICovCj4gKwlkYXRhWzBd ID0gKG1zZy0+YWRkcmVzcyA+PiAxNikgJiAweGY7IC8qIGFkZHJbMTk6MTZdICovCj4gKwlpZiAo YXV4LT5yZWFkKQo+ICsJCWRhdGFbMF0gfD0gIEJJVCg0KTsgLyogUi9XICovCj4gKwo+ICsJZGF0 YVsxXSA9IChtc2ctPmFkZHJlc3MgPj4gOCkgJiAweGZmOwkvKiBhZGRyWzE1OjhdICovCj4gKwlk YXRhWzJdID0gbXNnLT5hZGRyZXNzICYgMHhmZjsJCS8qIGFkZHJbNzowXSAqLwo+ICsJZGF0YVsz XSA9IChtc2ctPnNpemUgLSAxKSAmIDB4ZmY7CS8qIGxlbls3OjBdICovCj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gKwkJcmVnID0gKGkgPCA0KSA/IGRhdGFbaV0gOiBtc2dk YXRhW2kgLSA0XTsKPiArCQlyZWcgPSAoKHJlZykgPDwgOCkgJiAweDAwMDBmZjAwOyAvKiBpbmRl eCA9IDAsIHdyaXRlICovCj4gKwkJaWYgKGkgPT0gMCkKPiArCQkJcmVnIHw9IERQX0FVWF9EQVRB X0lOREVYX1dSSVRFOwo+ICsJCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IHJlZzsKPiArCQlkcF9jYXRh bG9nX2F1eF93cml0ZV9kYXRhKGF1eC0+Y2F0YWxvZyk7Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxv Z19hdXhfY2xlYXJfdHJhbnMoYXV4LT5jYXRhbG9nLCBmYWxzZSk7Cj4gKwo+ICsJcmVnID0gMDsg LyogVHJhbnNhY3Rpb24gbnVtYmVyID09IDEgKi8KPiArCWlmICghYXV4LT5uYXRpdmUpIHsgLyog aTJjICovCj4gKwkJcmVnIHw9IEJJVCg4KTsKPiArCj4gKwkJaWYgKGF1eC0+bm9fc2VuZF9hZGRy KQo+ICsJCQlyZWcgfD0gQklUKDEwKTsKPiArCj4gKwkJaWYgKGF1eC0+bm9fc2VuZF9zdG9wKQo+ ICsJCQlyZWcgfD0gQklUKDExKTsKPiArCX0KPiArCj4gKwlyZWcgfD0gQklUKDkpOwo+ICsJYXV4 LT5jYXRhbG9nLT5kYXRhID0gcmVnOwo+ICsJZHBfY2F0YWxvZ19hdXhfd3JpdGVfdHJhbnMoYXV4 LT5jYXRhbG9nKTsKPiArCj4gKwlyZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRw X2F1eF9jbWRfZmlmb190eChzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCwKPiArCQkJICAgICAg c3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCj4gK3sKPiArCXUzMiByZXQgPSAwLCBsZW4gPSAw LCB0aW1lb3V0Owo+ICsJaW50IGNvbnN0IGF1eF90aW1lb3V0X21zID0gSFovNDsKPiArCj4gKwly ZWluaXRfY29tcGxldGlvbigmYXV4LT5jb21wKTsKPiArCj4gKwlsZW4gPSBkcF9hdXhfd3JpdGUo YXV4LCBtc2cpOwo+ICsJaWYgKGxlbiA9PSAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJEUCBBVVggd3Jp dGUgZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwl0aW1lb3V0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhdXgtPmNvbXAsIGF1eF90aW1lb3V0X21z KTsKPiArCWlmICghdGltZW91dCkgewo+ICsJCURSTV9FUlJPUigiYXV4ICVzIHRpbWVvdXRcbiIs IChhdXgtPnJlYWQgPyAicmVhZCIgOiAid3JpdGUiKSk7Cj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7 Cj4gKwl9Cj4gKwo+ICsJaWYgKGF1eC0+YXV4X2Vycm9yX251bSA9PSBEUF9BVVhfRVJSX05PTkUp IHsKPiArCQlyZXQgPSBsZW47Cj4gKwl9IGVsc2Ugewo+ICsJCURSTV9FUlJPUl9SQVRFTElNSVRF RCgiYXV4IGVycjogJXNcbiIsCj4gKwkJCWRwX2F1eF9nZXRfZXJyb3IoYXV4LT5hdXhfZXJyb3Jf bnVtKSk7Cj4gKwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X2NtZF9maWZvX3J4KHN0cnVjdCBkcF9hdXhf cHJpdmF0ZSAqYXV4LAo+ICsJCXN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICt7Cj4gKwl1 MzIgZGF0YTsKPiArCXU4ICpkcDsKPiArCXUzMiBpLCBhY3R1YWxfaTsKPiArCXUzMiBsZW4gPSBt c2ctPnNpemU7Cj4gKwo+ICsJZHBfY2F0YWxvZ19hdXhfY2xlYXJfdHJhbnMoYXV4LT5jYXRhbG9n LCB0cnVlKTsKPiArCj4gKwlkYXRhID0gMDsKPiArCWRhdGEgfD0gRFBfQVVYX0RBVEFfSU5ERVhf V1JJVEU7IC8qIElOREVYX1dSSVRFICovCj4gKwlkYXRhIHw9IEJJVCgwKTsgIC8qIHJlYWQgKi8K PiArCj4gKwlhdXgtPmNhdGFsb2ctPmRhdGEgPSBkYXRhOwo+ICsJZHBfY2F0YWxvZ19hdXhfd3Jp dGVfZGF0YShhdXgtPmNhdGFsb2cpOwo+ICsKPiArCWRwID0gbXNnLT5idWZmZXI7Cj4gKwo+ICsJ LyogZGlzY2FyZCBmaXJzdCBieXRlICovCj4gKwlkYXRhID0gZHBfY2F0YWxvZ19hdXhfcmVhZF9k YXRhKGF1eC0+Y2F0YWxvZyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4g KwkJZGF0YSA9IGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShhdXgtPmNhdGFsb2cpOwo+ICsJCSpk cCsrID0gKHU4KSgoZGF0YSA+PiA4KSAmIDB4ZmYpOwo+ICsKPiArCQlhY3R1YWxfaSA9IChkYXRh ID4+IDE2KSAmIDB4RkY7Cj4gKwkJaWYgKGkgIT0gYWN0dWFsX2kpCj4gKwkJCXByX3dhcm4oIklu ZGV4IG1pc21hdGNoOiBleHBlY3RlZCAlZCwgZm91bmQgJWRcbiIsCj4gKwkJCQlpLCBhY3R1YWxf aSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2F1eF9uYXRpdmVfaGFuZGxlcihz dHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCkKPiArewo+ICsJdTMyIGlzciA9IGF1eC0+Y2F0YWxv Zy0+aXNyOwo+ICsKPiArCWlmIChpc3IgJiBEUF9JTlRSX0FVWF9JMkNfRE9ORSkKPiArCQlhdXgt PmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05PTkU7Cj4gKwllbHNlIGlmIChpc3IgJiBEUF9J TlRSX1dST05HX0FERFIpCj4gKwkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9BRERS Owo+ICsJZWxzZSBpZiAoaXNyICYgRFBfSU5UUl9USU1FT1VUKQo+ICsJCWF1eC0+YXV4X2Vycm9y X251bSA9IERQX0FVWF9FUlJfVE9VVDsKPiArCWlmIChpc3IgJiBEUF9JTlRSX05BQ0tfREVGRVIp Cj4gKwkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOwo+ICsKPiArCWNvbXBs ZXRlKCZhdXgtPmNvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9hdXhfaTJjX2hhbmRs ZXIoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgpCj4gK3sKPiArCXUzMiBpc3IgPSBhdXgtPmNh dGFsb2ctPmlzcjsKPiArCj4gKwlpZiAoaXNyICYgRFBfSU5UUl9BVVhfSTJDX0RPTkUpIHsKPiAr CQlpZiAoaXNyICYgKERQX0lOVFJfSTJDX05BQ0sgfCBEUF9JTlRSX0kyQ19ERUZFUikpCj4gKwkJ CWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTkFDSzsKPiArCQllbHNlCj4gKwkJCWF1 eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTk9ORTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYg KGlzciAmIERQX0lOVFJfV1JPTkdfQUREUikKPiArCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBf QVVYX0VSUl9BRERSOwo+ICsJCWVsc2UgaWYgKGlzciAmIERQX0lOVFJfVElNRU9VVCkKPiArCQkJ YXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9UT1VUOwo+ICsJCWlmIChpc3IgJiBEUF9J TlRSX05BQ0tfREVGRVIpCj4gKwkJCWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTkFD S19ERUZFUjsKPiArCQlpZiAoaXNyICYgRFBfSU5UUl9JMkNfTkFDSykKPiArCQkJYXV4LT5hdXhf ZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOwo+ICsJCWlmIChpc3IgJiBEUF9JTlRSX0kyQ19E RUZFUikKPiArCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9ERUZFUjsKPiArCX0K PiArCj4gKwljb21wbGV0ZSgmYXV4LT5jb21wKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBf YXV4X3VwZGF0ZV9vZmZzZXRfYW5kX3NlZ21lbnQoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgs Cj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKmlucHV0X21zZykKPiArewo+ICsJ dTMyIGNvbnN0IGVkaWRfYWRkcmVzcyA9IDB4NTA7Cj4gKwl1MzIgY29uc3Qgc2VnbWVudF9hZGRy ZXNzID0gMHgzMDsKPiArCWJvb2wgaTJjX3JlYWQgPSBpbnB1dF9tc2ctPnJlcXVlc3QgJgo+ICsJ CShEUF9BVVhfSTJDX1JFQUQgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOwo+ICsJdTggKmRhdGEgPSBO VUxMOwo+ICsKPiArCWlmIChhdXgtPm5hdGl2ZSB8fCBpMmNfcmVhZCB8fCAoKGlucHV0X21zZy0+ YWRkcmVzcyAhPSBlZGlkX2FkZHJlc3MpICYmCj4gKwkJKGlucHV0X21zZy0+YWRkcmVzcyAhPSBz ZWdtZW50X2FkZHJlc3MpKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsKPiArCWRhdGEgPSBpbnB1dF9t c2ctPmJ1ZmZlcjsKPiArCWlmIChpbnB1dF9tc2ctPmFkZHJlc3MgPT0gc2VnbWVudF9hZGRyZXNz KQo+ICsJCWF1eC0+c2VnbWVudCA9ICpkYXRhOwo+ICsJZWxzZQo+ICsJCWF1eC0+b2Zmc2V0ID0g KmRhdGE7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9hdXhfdHJhbnNmZXJfaGVscGVyKCkgLSBo ZWxwZXIgZnVuY3Rpb24gZm9yIEVESUQgcmVhZCB0cmFuc2FjdGlvbnMKPiArICoKPiArICogQGF1 eDogRFAgQVVYIHByaXZhdGUgc3RydWN0dXJlCj4gKyAqIEBpbnB1dF9tc2c6IGlucHV0IG1lc3Nh Z2UgZnJvbSBEUk0gdXBzdHJlYW0gQVBJcwo+ICsgKgo+ICsgKiByZXR1cm46IHZvaWQKPiArICoK PiArICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCB0byBmaXggRURJRCByZWFkcyBmb3Ig bm9uLWNvbXBsaWFudAo+ICsgKiBzaW5rcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIGkyYyBtaWRk bGUtb2YtdHJhbnNhY3Rpb24gZmxhZyBjb3JyZWN0bHkuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBk cF9hdXhfdHJhbnNmZXJfaGVscGVyKHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4LAo+ICsJCQkJ ICAgc3RydWN0IGRybV9kcF9hdXhfbXNnICppbnB1dF9tc2cpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZHBfYXV4X21zZyBoZWxwZXJfbXNnOwo+ICsJdTMyIGNvbnN0IG1lc3NhZ2Vfc2l6ZSA9IDB4MTA7 Cj4gKwl1MzIgY29uc3Qgc2VnbWVudF9hZGRyZXNzID0gMHgzMDsKPiArCWJvb2wgaTJjX21vdCA9 IGlucHV0X21zZy0+cmVxdWVzdCAmIERQX0FVWF9JMkNfTU9UOwo+ICsJYm9vbCBpMmNfcmVhZCA9 IGlucHV0X21zZy0+cmVxdWVzdCAmCj4gKwkJKERQX0FVWF9JMkNfUkVBRCAmIERQX0FVWF9OQVRJ VkVfUkVBRCk7Cj4gKwo+ICsJaWYgKCFpMmNfbW90IHx8ICFpMmNfcmVhZCB8fCAoaW5wdXRfbXNn LT5zaXplID09IDApKQo+ICsJCXJldHVybjsKPiArCj4gKwlhdXgtPnJlYWQgPSBmYWxzZTsKPiAr CWF1eC0+Y21kX2J1c3kgPSB0cnVlOwo+ICsJYXV4LT5ub19zZW5kX2FkZHIgPSB0cnVlOwo+ICsJ YXV4LT5ub19zZW5kX3N0b3AgPSB0cnVlOwo+ICsKPiArCS8qCj4gKwkgKiBTZW5kIHRoZSBzZWdt ZW50IGFkZHJlc3MgZm9yIGV2ZXJ5IGkyYyByZWFkIGluIHdoaWNoIHRoZQo+ICsJICogbWlkZGxl LW9mLXRyYW5hY3Rpb24gZmxhZyBpcyBzZXQuIFRoaXMgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBF RElECj4gKwkgKiByZWFkcyBvZiBtb3JlIHRoYW4gMiBibG9ja3MgYXMgdGhlIHNlZ21lbnQgYWRk cmVzcyBpcyByZXNldCB0byAwCj4gKwkgKiBzaW5jZSB3ZSBhcmUgb3ZlcnJpZGluZyB0aGUgbWlk ZGxlLW9mLXRyYW5zYWN0aW9uIGZsYWcgZm9yIHJlYWQKPiArCSAqIHRyYW5zYWN0aW9ucy4KPiAr CSAqLwo+ICsJbWVtc2V0KCZoZWxwZXJfbXNnLCAwLCBzaXplb2YoaGVscGVyX21zZykpOwo+ICsJ aGVscGVyX21zZy5hZGRyZXNzID0gc2VnbWVudF9hZGRyZXNzOwo+ICsJaGVscGVyX21zZy5idWZm ZXIgPSAmYXV4LT5zZWdtZW50Owo+ICsJaGVscGVyX21zZy5zaXplID0gMTsKPiArCWRwX2F1eF9j bWRfZmlmb190eChhdXgsICZoZWxwZXJfbXNnKTsKPiArCj4gKwkvKgo+ICsJICogU2VuZCB0aGUg b2Zmc2V0IGFkZHJlc3MgZm9yIGV2ZXJ5IGkyYyByZWFkIGluIHdoaWNoIHRoZQo+ICsJICogbWlk ZGxlLW9mLXRyYW5zYWN0aW9uIGZsYWcgaXMgc2V0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhl IHNpbmsKPiArCSAqIHdpbGwgdXBkYXRlIGl0cyByZWFkIHBvaW50ZXIgYW5kIHJldHVybiB0aGUg Y29ycmVjdCBwb3J0aW9uIG9mIHRoZQo+ICsJICogRURJRCBidWZmZXIgaW4gdGhlIHN1YnNlcXVl bnQgaTJjIHJlYWQgdHJhc250aW9uIHRyaWdnZXJlZCBpbiB0aGUKPiArCSAqIG5hdGl2ZSBBVVgg dHJhbnNmZXIgZnVuY3Rpb24uCj4gKwkgKi8KPiArCW1lbXNldCgmaGVscGVyX21zZywgMCwgc2l6 ZW9mKGhlbHBlcl9tc2cpKTsKPiArCWhlbHBlcl9tc2cuYWRkcmVzcyA9IGlucHV0X21zZy0+YWRk cmVzczsKPiArCWhlbHBlcl9tc2cuYnVmZmVyID0gJmF1eC0+b2Zmc2V0Owo+ICsJaGVscGVyX21z Zy5zaXplID0gMTsKPiArCWRwX2F1eF9jbWRfZmlmb190eChhdXgsICZoZWxwZXJfbXNnKTsKPiAr CWF1eC0+b2Zmc2V0ICs9IG1lc3NhZ2Vfc2l6ZTsKPiArCj4gKwlpZiAoYXV4LT5vZmZzZXQgPT0g MHg4MCB8fCBhdXgtPm9mZnNldCA9PSAweDEwMCkKPiArCQlhdXgtPnNlZ21lbnQgPSAweDA7IC8q IHJlc2V0IHNlZ21lbnQgYXQgZW5kIG9mIGJsb2NrICovCj4gK30KPiArCj4gKy8qCj4gKyAqIFRo aXMgZnVuY3Rpb24gZG9lcyB0aGUgcmVhbCBqb2IgdG8gcHJvY2VzcyBhbiBBVVggdHJhbnNhY3Rp b24uCj4gKyAqIEl0IHdpbGwgY2FsbCBhdXhfcmVzZXQoKSBmdW5jdGlvbiB0byByZXNldCB0aGUg QVVYIGNoYW5uZWwsCj4gKyAqIGlmIHRoZSB3YWl0aW5nIGlzIHRpbWVvdXQuCj4gKyAqLwo+ICtz dGF0aWMgc3NpemVfdCBkcF9hdXhfdHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmRybV9hdXgs Cj4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiArewo+ICsJc3NpemVf dCByZXQ7Cj4gKwlpbnQgY29uc3QgYXV4X2NtZF9uYXRpdmVfbWF4ID0gMTY7Cj4gKwlpbnQgY29u c3QgYXV4X2NtZF9pMmNfbWF4ID0gMTI4Owo+ICsJaW50IGNvbnN0IHJldHJ5X2NvdW50ID0gNTsK PiArCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4ID0gY29udGFpbmVyX29mKGRybV9hdXgsCj4g KwkJc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcm1fYXV4KTsKPiArCj4gKwltdXRleF9sb2NrKCZh dXgtPm11dGV4KTsKPiArCj4gKwlhdXgtPm5hdGl2ZSA9IG1zZy0+cmVxdWVzdCAmIChEUF9BVVhf TkFUSVZFX1dSSVRFICYgRFBfQVVYX05BVElWRV9SRUFEKTsKPiArCj4gKwkvKiBJZ25vcmUgYWRk cmVzcyBvbmx5IG1lc3NhZ2UgKi8KPiArCWlmICgobXNnLT5zaXplID09IDApIHx8IChtc2ctPmJ1 ZmZlciA9PSBOVUxMKSkgewo+ICsJCW1zZy0+cmVwbHkgPSBhdXgtPm5hdGl2ZSA/Cj4gKwkJCURQ X0FVWF9OQVRJVkVfUkVQTFlfQUNLIDogRFBfQVVYX0kyQ19SRVBMWV9BQ0s7Cj4gKwkJcmV0ID0g bXNnLT5zaXplOwo+ICsJCWdvdG8gdW5sb2NrX2V4aXQ7Cj4gKwl9Cj4gKwo+ICsJLyogbXNnIHNh bml0eSBjaGVjayAqLwo+ICsJaWYgKChhdXgtPm5hdGl2ZSAmJiAobXNnLT5zaXplID4gYXV4X2Nt ZF9uYXRpdmVfbWF4KSkgfHwKPiArCQkobXNnLT5zaXplID4gYXV4X2NtZF9pMmNfbWF4KSkgewo+ ICsJCURSTV9FUlJPUigiJXM6IGludmFsaWQgbXNnOiBzaXplKCV6dSksIHJlcXVlc3QoJXgpXG4i LAo+ICsJCQlfX2Z1bmNfXywgbXNnLT5zaXplLCBtc2ctPnJlcXVlc3QpOwo+ICsJCXJldCA9IC1F SU5WQUw7Cj4gKwkJZ290byB1bmxvY2tfZXhpdDsKPiArCX0KPiArCj4gKwlkcF9hdXhfdXBkYXRl X29mZnNldF9hbmRfc2VnbWVudChhdXgsIG1zZyk7Cj4gKwlkcF9hdXhfdHJhbnNmZXJfaGVscGVy KGF1eCwgbXNnKTsKPiArCj4gKwlhdXgtPnJlYWQgPSBtc2ctPnJlcXVlc3QgJiAoRFBfQVVYX0ky Q19SRUFEICYgRFBfQVVYX05BVElWRV9SRUFEKTsKPiArCWF1eC0+Y21kX2J1c3kgPSB0cnVlOwo+ ICsKPiArCWlmIChhdXgtPnJlYWQpIHsKPiArCQlhdXgtPm5vX3NlbmRfYWRkciA9IHRydWU7Cj4g KwkJYXV4LT5ub19zZW5kX3N0b3AgPSBmYWxzZTsKPiArCX0gZWxzZSB7Cj4gKwkJYXV4LT5ub19z ZW5kX2FkZHIgPSB0cnVlOwo+ICsJCWF1eC0+bm9fc2VuZF9zdG9wID0gdHJ1ZTsKPiArCX0KPiAr Cj4gKwlyZXQgPSBkcF9hdXhfY21kX2ZpZm9fdHgoYXV4LCBtc2cpOwo+ICsJaWYgKChyZXQgPCAw KSAmJiBhdXgtPm5hdGl2ZSkgewo+ICsJCWF1eC0+cmV0cnlfY250Kys7Cj4gKwkJaWYgKCEoYXV4 LT5yZXRyeV9jbnQgJSByZXRyeV9jb3VudCkpCj4gKwkJCWRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9j ZmcoYXV4LT5jYXRhbG9nLAo+ICsJCQkJYXV4LT5kcF9hdXguY2ZnLCBQSFlfQVVYX0NGRzEpOwo+ ICsJCWRwX2NhdGFsb2dfYXV4X3Jlc2V0KGF1eC0+Y2F0YWxvZyk7Cj4gKwkJZ290byB1bmxvY2tf ZXhpdDsKPiArCX0gZWxzZSBpZiAocmV0IDwgMCkgewo+ICsJCWdvdG8gdW5sb2NrX2V4aXQ7Cj4g Kwl9Cj4gKwo+ICsJaWYgKGF1eC0+YXV4X2Vycm9yX251bSA9PSBEUF9BVVhfRVJSX05PTkUpIHsK PiArCQlpZiAoYXV4LT5yZWFkKQo+ICsJCQlkcF9hdXhfY21kX2ZpZm9fcngoYXV4LCBtc2cpOwo+ ICsKPiArCQltc2ctPnJlcGx5ID0gYXV4LT5uYXRpdmUgPwo+ICsJCQlEUF9BVVhfTkFUSVZFX1JF UExZX0FDSyA6IERQX0FVWF9JMkNfUkVQTFlfQUNLOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBSZXBs eSBkZWZlciB0byByZXRyeSAqLwo+ICsJCW1zZy0+cmVwbHkgPSBhdXgtPm5hdGl2ZSA/Cj4gKwkJ CURQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVIgOiBEUF9BVVhfSTJDX1JFUExZX0RFRkVSOwo+ICsJ fQo+ICsKPiArCS8qIFJldHVybiByZXF1ZXN0ZWQgc2l6ZSBmb3Igc3VjY2VzcyBvciByZXRyeSAq Lwo+ICsJcmV0ID0gbXNnLT5zaXplOwo+ICsJYXV4LT5yZXRyeV9jbnQgPSAwOwo+ICsKPiArdW5s b2NrX2V4aXQ6Cj4gKwlhdXgtPmNtZF9idXN5ID0gZmFsc2U7Cj4gKwltdXRleF91bmxvY2soJmF1 eC0+bXV0ZXgpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4 X3Jlc2V0X3BoeV9jb25maWdfaW5kaWNlcyhzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZykKPiAr ewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7 IGkrKykKPiArCQlhdXhfY2ZnW2ldLmN1cnJlbnRfaW5kZXggPSAwOwo+ICt9Cj4gKwo+ICt2b2lk IGRwX2F1eF9pc3Ioc3RydWN0IGRwX2F1eCAqZHBfYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfYXV4 X3ByaXZhdGUgKmF1eDsKPiArCj4gKwlpZiAoIWRwX2F1eCkgewo+ICsJCURSTV9FUlJPUigiaW52 YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWF1eCA9IGNvbnRhaW5l cl9vZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKPiArCj4gKwlkcF9j YXRhbG9nX2F1eF9nZXRfaXJxKGF1eC0+Y2F0YWxvZywgYXV4LT5jbWRfYnVzeSk7Cj4gKwo+ICsJ aWYgKCFhdXgtPmNtZF9idXN5KQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoYXV4LT5uYXRpdmUp Cj4gKwkJZHBfYXV4X25hdGl2ZV9oYW5kbGVyKGF1eCk7Cj4gKwllbHNlCj4gKwkJZHBfYXV4X2ky Y19oYW5kbGVyKGF1eCk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfYXV4X3JlY29uZmlnKHN0cnVjdCBk cF9hdXggKmRwX2F1eCkKPiArewo+ICsJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7Cj4gKwo+ ICsJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9h dXgpOwo+ICsKPiArCWRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcoYXV4LT5jYXRhbG9nLAo+ICsJ CQlkcF9hdXgtPmNmZywgUEhZX0FVWF9DRkcxKTsKPiArCWRwX2NhdGFsb2dfYXV4X3Jlc2V0KGF1 eC0+Y2F0YWxvZyk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfYXV4X2luaXQoc3RydWN0IGRwX2F1eCAq ZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZykKPiArewo+ICsJc3RydWN0IGRwX2F1 eF9wcml2YXRlICphdXg7Cj4gKwo+ICsJaWYgKCFkcF9hdXggfHwgIWF1eF9jZmcpIHsKPiArCQlE Uk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlh dXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7 Cj4gKwo+ICsJZHBfYXV4X3Jlc2V0X3BoeV9jb25maWdfaW5kaWNlcyhhdXhfY2ZnKTsKPiArCWRw X2NhdGFsb2dfYXV4X3NldHVwKGF1eC0+Y2F0YWxvZywgYXV4X2NmZyk7Cj4gKwlkcF9jYXRhbG9n X2F1eF9yZXNldChhdXgtPmNhdGFsb2cpOwo+ICsJZHBfY2F0YWxvZ19hdXhfZW5hYmxlKGF1eC0+ Y2F0YWxvZywgdHJ1ZSk7Cj4gKwlhdXgtPnJldHJ5X2NudCA9IDA7Cj4gK30KPiArCj4gK3ZvaWQg ZHBfYXV4X2RlaW5pdChzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCj4gK3sKPiArCXN0cnVjdCBkcF9h dXhfcHJpdmF0ZSAqYXV4Owo+ICsKPiArCWlmICghZHBfYXV4KSB7Cj4gKwkJRFJNX0VSUk9SKCJp bnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJYXV4ID0gY29udGFp bmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsKPiArCWRw X2NhdGFsb2dfYXV4X2VuYWJsZShhdXgtPmNhdGFsb2csIGZhbHNlKTsKPiArfQo+ICsKPiAraW50 IGRwX2F1eF9yZWdpc3RlcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCj4gK3sKPiArCXN0cnVjdCBk cF9hdXhfcHJpdmF0ZSAqYXV4Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFkcF9hdXgp IHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgs IHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKPiArCj4gKwlhdXgtPmRybV9hdXgubmFt ZSA9ICJkcHVfZHBfYXV4IjsKPiArCWF1eC0+ZHJtX2F1eC5kZXYgPSBhdXgtPmRldjsKPiArCWF1 eC0+ZHJtX2F1eC50cmFuc2ZlciA9IGRwX2F1eF90cmFuc2ZlcjsKPiArCXJldCA9IGRybV9kcF9h dXhfcmVnaXN0ZXIoJmF1eC0+ZHJtX2F1eCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9S KCIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRybSBhdXg6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsK PiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlkcF9hdXgtPmRybV9hdXggPSAmYXV4LT5kcm1fYXV4 Owo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBkcF9hdXhfdW5yZWdp c3RlcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCj4gK3sKPiArCXN0cnVjdCBkcF9hdXhfcHJpdmF0 ZSAqYXV4Owo+ICsKPiArCWlmICghZHBfYXV4KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlu cHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJYXV4ID0gY29udGFpbmVyX29mKGRw X2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsJZHJtX2RwX2F1eF91bnJl Z2lzdGVyKCZhdXgtPmRybV9hdXgpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHBfYXV4ICpkcF9hdXhf Z2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2NhdGFsb2dfYXV4ICpjYXRhbG9nLAo+ ICsJCQkgIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ ICsJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7Cj4gKwlzdHJ1Y3QgZHBfYXV4ICpkcF9hdXg7 Cj4gKwo+ICsJaWYgKCFjYXRhbG9nIHx8ICFhdXhfY2ZnKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZh bGlkIGlucHV0XG4iKTsKPiArCQlyYyA9IC1FTk9ERVY7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0K PiArCj4gKwlhdXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmF1eCksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFhdXgpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJvcjsKPiAr CX0KPiArCj4gKwlpbml0X2NvbXBsZXRpb24oJmF1eC0+Y29tcCk7Cj4gKwlhdXgtPmNtZF9idXN5 ID0gZmFsc2U7Cj4gKwltdXRleF9pbml0KCZhdXgtPm11dGV4KTsKPiArCj4gKwlhdXgtPmRldiA9 IGRldjsKPiArCWF1eC0+Y2F0YWxvZyA9IGNhdGFsb2c7Cj4gKwlhdXgtPmRwX2F1eC5jZmcgPSBh dXhfY2ZnOwo+ICsJZHBfYXV4ID0gJmF1eC0+ZHBfYXV4Owo+ICsJYXV4LT5yZXRyeV9jbnQgPSAw Owo+ICsKPiArCXJldHVybiBkcF9hdXg7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIEVSUl9QVFIocmMp Owo+ICt9Cj4gKwo+ICt2b2lkIGRwX2F1eF9wdXQoc3RydWN0IGRwX2F1eCAqZHBfYXV4KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsKPiArCj4gKwlpZiAoIWRwX2F1eCkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJYXV4ID0gY29udGFpbmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1 eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsKPiArCW11dGV4X2Rlc3Ryb3koJmF1eC0+bXV0ZXgpOwo+ ICsKPiArCWRldm1fa2ZyZWUoYXV4LT5kZXYsIGF1eCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf YXV4LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjk4NDk1YzUKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAo+IEBA IC0wLDAgKzEsMzcgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRFBfQVVY X0hfCj4gKyNkZWZpbmUgX0RQX0FVWF9IXwo+ICsKPiArI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIK PiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gKwo+ICtlbnVtIGRwX2F1eF9lcnJv ciB7Cj4gKwlEUF9BVVhfRVJSX05PTkUJPSAwLAo+ICsJRFBfQVVYX0VSUl9BRERSCT0gLTEsCj4g KwlEUF9BVVhfRVJSX1RPVVQJPSAtMiwKPiArCURQX0FVWF9FUlJfTkFDSwk9IC0zLAo+ICsJRFBf QVVYX0VSUl9ERUZFUgk9IC00LAo+ICsJRFBfQVVYX0VSUl9OQUNLX0RFRkVSCT0gLTUsCj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZHBfYXV4IHsKPiArCXN0cnVjdCBkcm1fZHBfYXV4ICpkcm1fYXV4Owo+ ICsJc3RydWN0IGRwX2F1eF9jZmcgKmNmZzsKPiArfTsKPiArCj4gK2ludCBkcF9hdXhfcmVnaXN0 ZXIoc3RydWN0IGRwX2F1eCAqYXV4KTsKPiArdm9pZCBkcF9hdXhfdW5yZWdpc3RlcihzdHJ1Y3Qg ZHBfYXV4ICphdXgpOwo+ICt2b2lkIGRwX2F1eF9pc3Ioc3RydWN0IGRwX2F1eCAqYXV4KTsKPiAr dm9pZCBkcF9hdXhfaW5pdChzdHJ1Y3QgZHBfYXV4ICphdXgsIHN0cnVjdCBkcF9hdXhfY2ZnICph dXhfY2ZnKTsKPiArdm9pZCBkcF9hdXhfZGVpbml0KHN0cnVjdCBkcF9hdXggKmF1eCk7Cj4gK3Zv aWQgZHBfYXV4X3JlY29uZmlnKHN0cnVjdCBkcF9hdXggKmF1eCk7Cj4gKwo+ICtzdHJ1Y3QgZHBf YXV4ICpkcF9hdXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2NhdGFsb2dfYXV4 ICpjYXRhbG9nLAo+ICsJCQkgIHN0cnVjdCBkcF9hdXhfY2ZnICphdXhfY2ZnKTsKPiArdm9pZCBk cF9hdXhfcHV0KHN0cnVjdCBkcF9hdXggKmF1eCk7Cj4gKwo+ICsjZW5kaWYgLypfX0RQX0FVWF9I XyovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLmQ2YzQ2MWIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmMKPiBAQCAtMCwwICsxLDk5NiBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQs IF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2lvcG9sbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiArCj4gKyNp bmNsdWRlICJkcF9jYXRhbG9nLmgiCj4gKyNpbmNsdWRlICJkcF9yZWcuaCIKPiArCj4gKyNkZWZp bmUgUE9MTElOR19TTEVFUF9VUwkJCTEwMDAKPiArI2RlZmluZSBQT0xMSU5HX1RJTUVPVVRfVVMJ CQkxMDAwMAo+ICsKPiArI2RlZmluZSBSRUZUSU1FUl9ERUZBVUxUX1ZBTFVFCQkJMHgyMDAwMAo+ ICsjZGVmaW5lIFNDUkFNQkxFUl9SRVNFVF9DT1VOVF9WQUxVRQkJMHhGQwo+ICsKPiArI2RlZmlu ZSBkcF9jYXRhbG9nX2dldF9wcml2KHgpIHsgXAo+ICsJc3RydWN0IGRwX2NhdGFsb2cgKmRwX2Nh dGFsb2c7IFwKPiArCWRwX2NhdGFsb2cgPSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwX2NhdGFs b2csIHgpOyBcCj4gKwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUsIFwKPiArCQkJCWRwX2NhdGFsb2cpOyBcCj4gK30KPiArCj4gKyNk ZWZpbmUgRFBfSU5URVJSVVBUX1NUQVRVUzEgXAo+ICsJKERQX0lOVFJfQVVYX0kyQ19ET05FfCBc Cj4gKwlEUF9JTlRSX1dST05HX0FERFIgfCBEUF9JTlRSX1RJTUVPVVQgfCBcCj4gKwlEUF9JTlRS X05BQ0tfREVGRVIgfCBEUF9JTlRSX1dST05HX0RBVEFfQ05UIHwgXAo+ICsJRFBfSU5UUl9JMkNf TkFDSyB8IERQX0lOVFJfSTJDX0RFRkVSIHwgXAo+ICsJRFBfSU5UUl9QTExfVU5MT0NLRUQgfCBE UF9JTlRSX0FVWF9FUlJPUikKPiArCj4gKyNkZWZpbmUgRFBfSU5URVJSVVBUX1NUQVRVUzFfTUFT SwkoRFBfSU5URVJSVVBUX1NUQVRVUzEgPDwgMikKPiArCj4gKyNkZWZpbmUgRFBfSU5URVJSVVBU X1NUQVRVUzIgXAo+ICsJKERQX0lOVFJfUkVBRFlfRk9SX1ZJREVPIHwgRFBfSU5UUl9JRExFX1BB VFRFUk5fU0VOVCB8IFwKPiArCURQX0lOVFJfRlJBTUVfRU5EIHwgRFBfSU5UUl9DUkNfVVBEQVRF RCkKPiArCj4gKyNkZWZpbmUgRFBfSU5URVJSVVBUX1NUQVRVUzJfTUFTSwkoRFBfSU5URVJSVVBU X1NUQVRVUzIgPDwgMikKPiArCj4gK3N0YXRpYyB1OCBjb25zdCB2bV9wcmVfZW1waGFzaXNbNF1b NF0gPSB7Cj4gKwl7MHgwMCwgMHgwQiwgMHgxMiwgMHhGRn0sICAgICAgIC8qIHBlMCwgMCBkYiAq Lwo+ICsJezB4MDAsIDB4MEEsIDB4MTIsIDB4RkZ9LCAgICAgICAvKiBwZTEsIDMuNSBkYiAqLwo+ ICsJezB4MDAsIDB4MEMsIDB4RkYsIDB4RkZ9LCAgICAgICAvKiBwZTIsIDYuMCBkYiAqLwo+ICsJ ezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9ICAgICAgICAvKiBwZTMsIDkuNSBkYiAqLwo+ICt9Owo+ ICsKPiArLyogdm9sdGFnZSBzd2luZywgMC4ydiBhbmQgMS4wdiBhcmUgbm90IHN1cHBvcnQgKi8K PiArc3RhdGljIHU4IGNvbnN0IHZtX3ZvbHRhZ2Vfc3dpbmdbNF1bNF0gPSB7Cj4gKwl7MHgwNywg MHgwRiwgMHgxNCwgMHhGRn0sIC8qIHN3MCwgMC40diAgKi8KPiArCXsweDExLCAweDFELCAweDFG LCAweEZGfSwgLyogc3cxLCAwLjYgdiAqLwo+ICsJezB4MTgsIDB4MUYsIDB4RkYsIDB4RkZ9LCAv KiBzdzEsIDAuOCB2ICovCj4gKwl7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gIC8qIHN3MSwgMS4y IHYsIG9wdGlvbmFsICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlIHsK PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcF9pbyAqaW87Cj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZyBkcF9jYXRhbG9nOwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgZHBf cmVhZF9hdXgoc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywgdTMyIG9mZnNldCkK PiArewo+ICsJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlICsg b2Zmc2V0KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRwX3dyaXRlX2F1eChzdHJ1 Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nLAo+ICsJCQkgICAgICAgdTMyIG9mZnNldCwg dTMyIGRhdGEpCj4gK3sKPiArCS8qCj4gKwkgKiBUbyBtYWtlIHN1cmUgYXV4IHJlZyB3cml0ZXMg aGFwcGVucyBiZWZvcmUgYW55IG90aGVyIG9wZXJhdGlvbiwKPiArCSAqIHRoaXMgZnVuY3Rpb24g dXNlcyB3cml0ZWwoKSBpbnN0cmVhZCBvZiB3cml0ZWxfcmVsYXhlZCgpCj4gKwkgKi8KPiArCXdy aXRlbChkYXRhLCBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2UgKyBvZmZzZXQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHUzMiBkcF9yZWFkX2FoYihzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl ICpjYXRhbG9nLCB1MzIgb2Zmc2V0KQo+ICt7Cj4gKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChjYXRh bG9nLT5pby0+ZHBfYWhiLmJhc2UgKyBvZmZzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHZvaWQgZHBfd3JpdGVfYWhiKHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2csCj4g KwkJCSAgICAgICB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkKPiArewo+ICsJLyoKPiArCSAqIFRvIG1h a2Ugc3VyZSBwaHkgcmVnIHdyaXRlcyBoYXBwZW5zIGJlZm9yZSBhbnkgb3RoZXIgb3BlcmF0aW9u LAo+ICsJICogdGhpcyBmdW5jdGlvbiB1c2VzIHdyaXRlbCgpIGluc3RyZWFkIG9mIHdyaXRlbF9y ZWxheGVkKCkKPiArCSAqLwo+ICsJd3JpdGVsKGRhdGEsIGNhdGFsb2ctPmlvLT5kcF9haGIuYmFz ZSArIG9mZnNldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGRwX3JlYWRfY2Moc3Ry dWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywgdTMyIG9mZnNldCkKPiArewo+ICsJcmV0 dXJuIHJlYWRsX3JlbGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2NjX2lvLmJhc2UgKyBvZmZzZXQpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfcGh5KHN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2csCj4gKwkJCSAgICAgICB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkK PiArewo+ICsJLyoKPiArCSAqIFRvIG1ha2Ugc3VyZSBwaHkgcmVnIHdyaXRlcyBoYXBwZW5zIGJl Zm9yZSBhbnkgb3RoZXIgb3BlcmF0aW9uLAo+ICsJICogdGhpcyBmdW5jdGlvbiB1c2VzIHdyaXRl bCgpIGluc3RyZWFkIG9mIHdyaXRlbF9yZWxheGVkKCkKPiArCSAqLwo+ICsJd3JpdGVsKGRhdGEs IGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSArIG9mZnNldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBkcF93cml0ZV9wbGwoc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxv ZywKPiArCQkJICAgICAgIHUzMiBvZmZzZXQsIHUzMiBkYXRhKQo+ICt7Cj4gKwl3cml0ZWxfcmVs YXhlZChkYXRhLCBjYXRhbG9nLT5pby0+ZHBfcGxsX2lvLmJhc2UgKyBvZmZzZXQpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfbG5fdHgwKHN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2csCj4gKwkJCSAgICAgICB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkKPiAr ewo+ICsJd3JpdGVsX3JlbGF4ZWQoZGF0YSwgY2F0YWxvZy0+aW8tPmxuX3R4MF9pby5iYXNlICsg b2Zmc2V0KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRwX3dyaXRlX2xuX3R4MShz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nLAo+ICsJCQkgICAgICAgdTMyIG9mZnNl dCwgdTMyIGRhdGEpCj4gK3sKPiArCXdyaXRlbF9yZWxheGVkKGRhdGEsIGNhdGFsb2ctPmlvLT5s bl90eDFfaW8uYmFzZSArIG9mZnNldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBk cF93cml0ZV91c2JfY20oc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywKPiArCQkJ ICAgICAgIHUzMiBvZmZzZXQsIHUzMiBkYXRhKQo+ICt7Cj4gKwkvKgo+ICsJICogVG8gbWFrZSBz dXJlIHVzYiByZWcgd3JpdGVzIGhhcHBlbnMgYmVmb3JlIGFueSBvdGhlciBvcGVyYXRpb24sCj4g KwkgKiB0aGlzIGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3JpdGVsX3JlbGF4 ZWQoKQo+ICsJICovCj4gKwl3cml0ZWwoZGF0YSwgY2F0YWxvZy0+aW8tPnVzYjNfZHBfY29tLmJh c2UgKyBvZmZzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHBfd3JpdGVfcDAo c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZywKPiArCQkJICAgICAgIHUzMiBvZmZz ZXQsIHUzMiBkYXRhKQo+ICt7Cj4gKwkvKgo+ICsJICogVG8gbWFrZSBzdXJlIGludGVyZmFjZSBy ZWcgd3JpdGVzIGhhcHBlbnMgYmVmb3JlIGFueSBvdGhlciBvcGVyYXRpb24sCj4gKwkgKiB0aGlz IGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3JpdGVsX3JlbGF4ZWQoKQo+ICsJ ICovCj4gKwl3cml0ZWwoZGF0YSwgY2F0YWxvZy0+aW8tPmRwX3AwLmJhc2UgKyBvZmZzZXQpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBkcF9yZWFkX2xpbmsoc3RydWN0IGRwX2NhdGFs b2dfcHJpdmF0ZSAqY2F0YWxvZywgdTMyIG9mZnNldCkKPiArewo+ICsJcmV0dXJuIHJlYWRsX3Jl bGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZSArIG9mZnNldCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBkcF93cml0ZV9saW5rKHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2csCj4gKwkJCSAgICAgICB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkKPiArewo+ICsJLyoK PiArCSAqIFRvIG1ha2Ugc3VyZSBsaW5rIHJlZyB3cml0ZXMgaGFwcGVucyBiZWZvcmUgYW55IG90 aGVyIG9wZXJhdGlvbiwKPiArCSAqIHRoaXMgZnVuY3Rpb24gdXNlcyB3cml0ZWwoKSBpbnN0cmVh ZCBvZiB3cml0ZWxfcmVsYXhlZCgpCj4gKwkgKi8KPiArCXdyaXRlbChkYXRhLCBjYXRhbG9nLT5p by0+ZHBfbGluay5iYXNlICsgb2Zmc2V0KTsKPiArfQo+ICsKPiArLyogYXV4IHJlbGF0ZWQgY2F0 YWxvZyBmdW5jdGlvbnMgKi8KPiArdTMyIGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShzdHJ1Y3Qg ZHBfY2F0YWxvZ19hdXggKmF1eCkKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAq Y2F0YWxvZzsKPiArCj4gKwlpZiAoIWF1eCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1 dFxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihh dXgpOwo+ICsKPiArCXJldHVybiBkcF9yZWFkX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX0RBVEEp Owo+ICt9Cj4gKwo+ICtpbnQgZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YShzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFhdXgpIHsKPiArCQlEUk1fRVJST1IoImlu dmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoYXV4KTsKPiArCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVY X0RBVEEsIGF1eC0+ZGF0YSk7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBkcF9jYXRh bG9nX2F1eF93cml0ZV90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCkKPiArewo+ICsJ aW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ ICsJaWYgKCFhdXgpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPiAr CWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX1RSQU5TX0NUUkwsIGF1eC0+ZGF0YSk7 Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBkcF9jYXRhbG9nX2F1eF9jbGVhcl90cmFu cyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKQo+ICt7Cj4gKwlpbnQgcmMg PSAwOwo+ICsJdTMyIGRhdGEgPSAwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0 YWxvZzsKPiArCj4gKwlpZiAoIWF1eCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxu Iik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJp dihhdXgpOwo+ICsKPiArCWlmIChyZWFkKSB7Cj4gKwkJZGF0YSA9IGRwX3JlYWRfYXV4KGNhdGFs b2csIFJFR19EUF9BVVhfVFJBTlNfQ1RSTCk7Cj4gKwkJZGF0YSAmPSB+RFBfQVVYX1RSQU5TX0NU UkxfR087Cj4gKwkJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfVFJBTlNfQ1RSTCwg ZGF0YSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfQVVY X1RSQU5TX0NUUkwsIDApOwo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICt2b2lkIGRw X2NhdGFsb2dfYXV4X3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQo+ICt7Cj4gKwl1 MzIgYXV4X2N0cmw7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsK PiArCWlmICghYXV4KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQly ZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+ICsKPiArCWF1 eF9jdHJsID0gZHBfcmVhZF9hdXgoY2F0YWxvZywgUkVHX0RQX0FVWF9DVFJMKTsKPiArCj4gKwlh dXhfY3RybCB8PSBEUF9BVVhfQ1RSTF9SRVNFVDsKPiArCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBS RUdfRFBfQVVYX0NUUkwsIGF1eF9jdHJsKTsKPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsg LyogaC93IHJlY29tbWVuZGVkIGRlbGF5ICovCj4gKwo+ICsJYXV4X2N0cmwgJj0gfkRQX0FVWF9D VFJMX1JFU0VUOwo+ICsJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfQ1RSTCwgYXV4 X2N0cmwpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFsb2dfYXV4X2VuYWJsZShzdHJ1Y3QgZHBf Y2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpCj4gK3sKPiArCXUzMiBhdXhfY3RybDsKPiAr CXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFhdXgpIHsK PiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4gKwo+ICsJYXV4X2N0cmwgPSBkcF9yZWFk X2F1eChjYXRhbG9nLCBSRUdfRFBfQVVYX0NUUkwpOwo+ICsKPiArCWlmIChlbmFibGUpIHsKPiAr CQlkcF93cml0ZV9hdXgoY2F0YWxvZywgUkVHX0RQX1RJTUVPVVRfQ09VTlQsIDB4ZmZmZik7Cj4g KwkJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9BVVhfTElNSVRTLCAweGZmZmYpOwo+ICsJ CWF1eF9jdHJsIHw9IERQX0FVWF9DVFJMX0VOQUJMRTsKPiArCX0gZWxzZSB7Cj4gKwkJYXV4X2N0 cmwgJj0gfkRQX0FVWF9DVFJMX0VOQUJMRTsKPiArCX0KPiArCj4gKwlkcF93cml0ZV9hdXgoY2F0 YWxvZywgUkVHX0RQX0FVWF9DVFJMLCBhdXhfY3RybCk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfY2F0 YWxvZ19hdXhfdXBkYXRlX2NmZyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPiArCQlzdHJ1 Y3QgZHBfYXV4X2NmZyAqY2ZnLCBlbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgdHlwZSkKPiAr ewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXUzMiBuZXdfaW5k ZXggPSAwLCBjdXJyZW50X2luZGV4ID0gMDsKPiArCj4gKwlpZiAoIWF1eCB8fCAhY2ZnIHx8ICh0 eXBlID49IFBIWV9BVVhfQ0ZHX01BWCkpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7 Cj4gKwo+ICsJY3VycmVudF9pbmRleCA9IGNmZ1t0eXBlXS5jdXJyZW50X2luZGV4Owo+ICsJbmV3 X2luZGV4ID0gKGN1cnJlbnRfaW5kZXggKyAxKSAlIGNmZ1t0eXBlXS5jZmdfY250Owo+ICsJRFJN X0RFQlVHX0RQKCJVcGRhdGluZyAlcyBmcm9tIDB4JTA4eCB0byAweCUwOHhcbiIsCj4gKwkJZHBf cGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodHlwZSksCj4gKwljZmdbdHlwZV0ubHV0W2N1 cnJlbnRfaW5kZXhdLCBjZmdbdHlwZV0ubHV0W25ld19pbmRleF0pOwo+ICsKPiArCWRwX3dyaXRl X3BoeShjYXRhbG9nLCBjZmdbdHlwZV0ub2Zmc2V0LAo+ICsJCQljZmdbdHlwZV0ubHV0W25ld19p bmRleF0pOwo+ICsJY2ZnW3R5cGVdLmN1cnJlbnRfaW5kZXggPSBuZXdfaW5kZXg7Cj4gK30KPiAr Cj4gK3ZvaWQgZHBfY2F0YWxvZ19hdXhfc2V0dXAoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgs Cj4gKwkJc3RydWN0IGRwX2F1eF9jZmcgKmNmZykKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPiArCWludCBpID0gMDsKPiArCj4gKwlpZiAoIWF1eCB8fCAhY2Zn KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+ICsKPiArCWRwX3dyaXRlX3BoeShj YXRhbG9nLCBSRUdfRFBfUEhZX1BEX0NUTCwgRFBfUEhZX1BEX0NUTF9QV1JETiB8Cj4gKwkJRFBf UEhZX1BEX0NUTF9BVVhfUFdSRE4gfCBEUF9QSFlfUERfQ1RMX1BMTF9QV1JETiB8Cj4gKwkJRFBf UEhZX1BEX0NUTF9EUF9DTEFNUF9FTik7Cj4gKwo+ICsJLyogVHVybiBvbiBCSUFTIGN1cnJlbnQg Zm9yIFBIWS9QTEwgKi8KPiArCWRwX3dyaXRlX3BsbChjYXRhbG9nLAo+ICsJCVFTRVJERVNfQ09N X0JJQVNfRU5fQ0xLQlVGTFJfRU4sIFFTRVJERVNfQ09NX0JJQVNfRU4gfAo+ICsJCVFTRVJERVNf Q09NX0JJQVNfRU5fTVVYIHwgUVNFUkRFU19DT01fQ0xLQlVGX0xfRU4gfAo+ICsJCVFTRVJERVNf Q09NX0VOX1NZU0NMS19UWF9TRUwpOwo+ICsKPiArCS8qIERQIEFVWCBDRkcgcmVnaXN0ZXIgcHJv Z3JhbW1pbmcgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7IGkrKykgewo+ ICsJCURSTV9ERUJVR19EUCgiJXM6IG9mZnNldD0weCUwOHgsIHZhbHVlPTB4JTA4eFxuIiwKPiAr CQkJZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcoaSksCj4gKwkJCWNmZ1tpXS5vZmZz ZXQsIGNmZ1tpXS5sdXRbY2ZnW2ldLmN1cnJlbnRfaW5kZXhdKTsKPiArCQlkcF93cml0ZV9waHko Y2F0YWxvZywgY2ZnW2ldLm9mZnNldCwKPiArCQkJY2ZnW2ldLmx1dFtjZmdbaV0uY3VycmVudF9p bmRleF0pOwo+ICsJfQo+ICsKPiArCWRwX3dyaXRlX3BoeShjYXRhbG9nLCBSRUdfRFBfUEhZX0FV WF9JTlRFUlJVUFRfTUFTSywgUEhZX0FVWF9TVE9QX0VSUl9NQVNLIHwKPiArCQkJUEhZX0FVWF9E RUNfRVJSX01BU0sgfCBQSFlfQVVYX1NZTkNfRVJSX01BU0sgfAo+ICsJCQlQSFlfQVVYX0FMSUdO X0VSUl9NQVNLIHwgUEhZX0FVWF9SRVFfRVJSX01BU0spOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2Nh dGFsb2dfYXV4X2dldF9pcnEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgY21kX2J1 c3kpCj4gK3sKPiArCXUzMiBhY2s7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwo+ICsKPiArCWlmICghYXV4KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4i KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+ ICsKPiArCWF1eC0+aXNyID0gZHBfcmVhZF9haGIoY2F0YWxvZywgUkVHX0RQX0lOVFJfU1RBVFVT KTsKPiArCWF1eC0+aXNyICY9IH5EUF9JTlRFUlJVUFRfU1RBVFVTMV9NQVNLOwo+ICsJYWNrID0g YXV4LT5pc3IgJiBEUF9JTlRFUlJVUFRfU1RBVFVTMTsKPiArCWFjayA8PD0gMTsKPiArCWFjayB8 PSBEUF9JTlRFUlJVUFRfU1RBVFVTMV9NQVNLOwo+ICsJZHBfd3JpdGVfYWhiKGNhdGFsb2csIFJF R19EUF9JTlRSX1NUQVRVUywgYWNrKTsKPiArfQo+ICsKPiArLyogY29udHJvbGxlciByZWxhdGVk IGNhdGFsb2cgZnVuY3Rpb25zICovCj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV90cmFu c2Zlcl91bml0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCj4gK3sKPiArCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJRFJN X0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBf Y2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCj4gKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJF R19EUF9WQUxJRF9CT1VOREFSWSwgY3RybC0+dmFsaWRfYm91bmRhcnkpOwo+ICsJZHBfd3JpdGVf bGluayhjYXRhbG9nLCBSRUdfRFBfVFUsIGN0cmwtPmRwX3R1KTsKPiArCWRwX3dyaXRlX2xpbmso Y2F0YWxvZywgUkVHX0RQX1ZBTElEX0JPVU5EQVJZXzIsIGN0cmwtPnZhbGlkX2JvdW5kYXJ5Mik7 Cj4gK30KPiArCj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwgdTMyIHN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19w cml2YXRlICpjYXRhbG9nOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURSTV9FUlJPUigiaW52 YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0 X3ByaXYoY3RybCk7Cj4gKwo+ICsJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU1RBVEVf Q1RSTCwgc3RhdGUpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3Ry bChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgY2ZnKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURS TV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRw X2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJEUF9DT05GSUdV UkFUSU9OX0NUUkw9MHgleFxuIiwgY2ZnKTsKPiArCj4gKwlkcF93cml0ZV9saW5rKGNhdGFsb2cs IFJFR19EUF9DT05GSUdVUkFUSU9OX0NUUkwsIGNmZyk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfY2F0 YWxvZ19jdHJsX2xhbmVfbWFwcGluZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdTMyIGxuXzAgPSAw LCBsbl8xID0gMSwgbG5fMiA9IDIsIGxuXzMgPSAzOyAvKiBPbmUtdG8tT25lIG1hcHBpbmcgKi8K PiArCXUzMiBsbl9tYXBwaW5nOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURSTV9FUlJPUigi aW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2df Z2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJbG5fbWFwcGluZyA9IGxuXzAgPDwgTEFORTBfTUFQUElO R19TSElGVDsKPiArCWxuX21hcHBpbmcgfD0gbG5fMSA8PCBMQU5FMV9NQVBQSU5HX1NISUZUOwo+ ICsJbG5fbWFwcGluZyB8PSBsbl8yIDw8IExBTkUyX01BUFBJTkdfU0hJRlQ7Cj4gKwlsbl9tYXBw aW5nIHw9IGxuXzMgPDwgTEFORTNfTUFQUElOR19TSElGVDsKPiArCj4gKwlkcF93cml0ZV9saW5r KGNhdGFsb2csIFJFR19EUF9MT0dJQ0FMMlBIWVNJQ0FMX0xBTkVfTUFQUElORywgbG5fbWFwcGlu Zyk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX2N0cmwoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKPiArCQkJCQkJYm9vbCBlbmFibGUpCj4gK3sKPiArCXUz MiBtYWlubGlua19jdHJsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsK PiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsK PiArCWlmIChlbmFibGUpIHsKPiArCQkvKgo+ICsJCSogVG8gbWFrZSBzdXJlIGxpbmsgcmVnIHdy aXRlcyBoYXBwZW5zIGJlZm9yZSBhbnkgb3RoZXIgb3BlcmF0aW9uLAo+ICsJCSogZHBfd3JpdGVf bGluaygpIGZ1bmN0aW9uIHVzZXMgd3JpdGVsKCkgaW5zdHJlYWQgb2Ygd3JpdGVsX3JlbGF4ZWQo KQo+ICsJCSovCj4gKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJTktfQ1RS TCwgRFBfTUFJTkxJTktfRkJfQk9VTkRBUllfU0VMKTsKPiArCQlkcF93cml0ZV9saW5rKGNhdGFs b2csIFJFR19EUF9NQUlOTElOS19DVFJMLAo+ICsJCQkJCURQX01BSU5MSU5LX0ZCX0JPVU5EQVJZ X1NFTCB8IERQX01BSU5MSU5LX0NUUkxfUkVTRVQpOwo+ICsJCWRwX3dyaXRlX2xpbmsoY2F0YWxv ZywgUkVHX0RQX01BSU5MSU5LX0NUUkwsIERQX01BSU5MSU5LX0ZCX0JPVU5EQVJZX1NFTCk7Cj4g KwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJTktfQ1RSTCwKPiArCQkJCQlE UF9NQUlOTElOS19GQl9CT1VOREFSWV9TRUwgfCBEUF9NQUlOTElOS19DVFJMX0VOQUJMRSk7Cj4g Kwl9IGVsc2Ugewo+ICsJCW1haW5saW5rX2N0cmwgPSBkcF9yZWFkX2xpbmsoY2F0YWxvZywgUkVH X0RQX01BSU5MSU5LX0NUUkwpOwo+ICsJCW1haW5saW5rX2N0cmwgJj0gfkRQX01BSU5MSU5LX0NU UkxfRU5BQkxFOwo+ICsJCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX01BSU5MSU5LX0NU UkwsIG1haW5saW5rX2N0cmwpOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFsb2dfY3Ry bF9jb25maWdfbWlzYyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCQkJCXUzMiBj b2xvcmltZXRyeV9jZmcsIHUzMiB0ZXN0X2JpdHNfZGVwdGgpCj4gK3sKPiArCXUzMiBtaXNjX3Zh bDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFj dHJsKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCj4gKwltaXNjX3ZhbCA9 IGRwX3JlYWRfbGluayhjYXRhbG9nLCBSRUdfRFBfTUlTQzFfTUlTQzApOwo+ICsJbWlzY192YWwg fD0gY29sb3JpbWV0cnlfY2ZnIDw8IERQX01JU0MwX0NPTE9SSU1FVFJZX0NGR19TSElGVDsKPiAr CW1pc2NfdmFsIHw9IHRlc3RfYml0c19kZXB0aCA8PCBEUF9NSVNDMF9URVNUX0JJVFNfREVQVEhf U0hJRlQ7Cj4gKwkvKiBDb25maWd1cmUgY2xvY2sgdG8gc3luY2hyb25vdXMgbW9kZSAqLwo+ICsJ bWlzY192YWwgfD0gRFBfTUlTQzBfU1lOQ0hST05PVVNfQ0xLOwo+ICsKPiArCURSTV9ERUJVR19E UCgibWlzYyBzZXR0aW5ncyA9IDB4JXhcbiIsIG1pc2NfdmFsKTsKPiArCWRwX3dyaXRlX2xpbmso Y2F0YWxvZywgUkVHX0RQX01JU0MxX01JU0MwLCBtaXNjX3ZhbCk7Cj4gK30KPiArCj4gK3ZvaWQg ZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19tc2Eoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwK PiArCQkJCQl1MzIgcmF0ZSwgdTMyIHN0cmVhbV9yYXRlX2toeiwKPiArCQkJCQlib29sIGZpeGVk X252aWQpCj4gK3sKPiArCXUzMiBwaXhlbF9tLCBwaXhlbF9uOwo+ICsJdTMyIG12aWQsIG52aWQ7 Cj4gKwl1NjQgbXZpZF9jYWxjOwo+ICsJdTMyIGNvbnN0IG52aWRfZml4ZWQgPSAweDgwMDA7Cj4g Kwl1MzIgY29uc3QgbGlua19yYXRlX2hicjIgPSA1NDAwMDA7Cj4gKwl1MzIgY29uc3QgbGlua19y YXRlX2hicjMgPSA4MTAwMDA7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7 Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4g KwlpZiAoZml4ZWRfbnZpZCkgewo+ICsJCURSTV9ERUJVR19EUCgidXNlIGZpeGVkIE5WSUQ9MHgl eFxuIiwgbnZpZF9maXhlZCk7Cj4gKwkJbnZpZCA9IG52aWRfZml4ZWQ7Cj4gKwo+ICsJCURSTV9E RUJVR19EUCgibGluayByYXRlPSVka2Jwcywgc3RyZWFtX3JhdGVfa2h6PSV1S2h6IiwKPiArCQkJ cmF0ZSwgc3RyZWFtX3JhdGVfa2h6KTsKPiArCj4gKwkJLyoKPiArCQkgKiBGb3IgaW50ZXJtZWRp YXRlIHJlc3VsdHMsIHVzZSA2NCBiaXQgYXJpdGhtZXRpYyB0byBhdm9pZAo+ICsJCSAqIGxvc3Mg b2YgcHJlY2lzaW9uLgo+ICsJCSAqLwo+ICsJCW12aWRfY2FsYyA9ICh1NjQpIHN0cmVhbV9yYXRl X2toeiAqIG52aWQ7Cj4gKwkJbXZpZF9jYWxjID0gZGl2X3U2NChtdmlkX2NhbGMsIHJhdGUpOwo+ ICsKPiArCQkvKgo+ICsJCSAqIHRydW5jYXRlIGJhY2sgdG8gMzIgYml0cyBhcyB0aGlzIGZpbmFs IGRpdmlkZWQgdmFsdWUgd2lsbAo+ICsJCSAqIGFsd2F5cyBiZSB3aXRoaW4gdGhlIHJhbmdlIG9m IGEgMzIgYml0IHVuc2lnbmVkIGludC4KPiArCQkgKi8KPiArCQltdmlkID0gKHUzMikgbXZpZF9j YWxjOwo+ICsJfSBlbHNlIHsKPiArCQlwaXhlbF9tID0gZHBfcmVhZF9jYyhjYXRhbG9nLCBNTVNT X0RQX1BJWEVMX00pOwo+ICsJCXBpeGVsX24gPSBkcF9yZWFkX2NjKGNhdGFsb2csIE1NU1NfRFBf UElYRUxfTik7Cj4gKwkJRFJNX0RFQlVHX0RQKCJwaXhlbF9tPTB4JXgsIHBpeGVsX249MHgleFxu IiwgcGl4ZWxfbSwgcGl4ZWxfbik7Cj4gKwo+ICsJCW12aWQgPSAocGl4ZWxfbSAmIDB4RkZGRikg KiA1Owo+ICsJCW52aWQgPSAoMHhGRkZGICYgKH5waXhlbF9uKSkgKyAocGl4ZWxfbSAmIDB4RkZG Rik7Cj4gKwo+ICsJCURSTV9ERUJVR19EUCgicmF0ZSA9ICVkXG4iLCByYXRlKTsKPiArCj4gKwkJ aWYgKGxpbmtfcmF0ZV9oYnIyID09IHJhdGUpCj4gKwkJCW52aWQgKj0gMjsKPiArCj4gKwkJaWYg KGxpbmtfcmF0ZV9oYnIzID09IHJhdGUpCj4gKwkJCW52aWQgKj0gMzsKPiArCX0KPiArCj4gKwlE Uk1fREVCVUdfRFAoIm12aWQ9MHgleCwgbnZpZD0weCV4XG4iLCBtdmlkLCBudmlkKTsKPiArCWRw X3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX1NPRlRXQVJFX01WSUQsIG12aWQpOwo+ICsJZHBf d3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU09GVFdBUkVfTlZJRCwgbnZpZCk7Cj4gK30KPiAr Cj4gK2ludCBkcF9jYXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4oc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwKPiArCQkJCQl1MzIgcGF0dGVybikKPiArewo+ICsJaW50IGJpdCwgcmV0Owo+ICsJ dTMyIGRhdGE7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsKPiAr CWlmICghY3RybCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiAr Cj4gKwliaXQgPSBCSVQocGF0dGVybiAtIDEpOwo+ICsJRFJNX0RFQlVHX0RQKCJodzogYml0PSVk IHRyYWluPSVkXG4iLCBiaXQsIHBhdHRlcm4pOwo+ICsJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBS RUdfRFBfU1RBVEVfQ1RSTCwgYml0KTsKPiArCj4gKwliaXQgPSBCSVQocGF0dGVybiAtIDEpIDw8 IERQX01BSU5MSU5LX1JFQURZX0xJTktfVFJBSU5JTkdfU0hJRlQ7Cj4gKwo+ICsJLyogUG9sbCBm b3IgbWFpbmxpbmsgcmVhZHkgc3RhdHVzICovCj4gKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQo cmVhZGwsIGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2UgKyBSRUdfRFBfTUFJTkxJTktfUkVBRFks Cj4gKwkJCQkgZGF0YSwgZGF0YSAmIGJpdCwKPiArCQkJCSBQT0xMSU5HX1NMRUVQX1VTLCBQT0xM SU5HX1RJTUVPVVRfVVMpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fRVJST1IoInNldCBw YXR0ZXJuIGZvciBsaW5rX3RyYWluPSVkIGZhaWxlZFxuIiwgcGF0dGVybik7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFsb2dfY3Ry bF91c2JfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsKPiArCWlmICghY3Ry bCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJ fQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJZHBfd3JpdGVfdXNi X2NtKGNhdGFsb2csIFJFR19VU0IzX0RQX0NPTV9SRVNFVF9PVlJEX0NUUkwsCj4gKwkJCVVTQjNf RFBfQ09NX09WUkRfQ1RSTF9TV19EUFBIWV9SRVNFVF9NVVggfAo+ICsJCQlVU0IzX0RQX0NPTV9P VlJEX0NUUkxfU1dfVVNCM1BIWV9SRVNFVF9NVVgpOwo+ICsJZHBfd3JpdGVfdXNiX2NtKGNhdGFs b2csIFJFR19VU0IzX0RQX0NPTV9QSFlfTU9ERV9DVFJMLAo+ICsJCQkJCQlVU0IzX0RQX0NPTV9Q SFlfTU9ERV9EUCk7Cj4gKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVHX1VTQjNfRFBfQ09N X1NXX1JFU0VULAo+ICsJCQkJCQlVU0IzX0RQX0NPTV9TV19SRVNFVF9TRVQpOwo+ICsKPiArCWlm ICghZmxpcCkgLyogQ0MxICovCj4gKwkJZHBfd3JpdGVfdXNiX2NtKGNhdGFsb2csIFJFR19VU0Iz X0RQX0NPTV9UWVBFQ19DVFJMLAo+ICsJCQkJCVVTQjNfRFBfQ09NX1RZUEVDX0NUUkxfUE9SVFNF TF9NVVgpOwo+ICsJZWxzZSAvKiBDQzIgKi8KPiArCQlkcF93cml0ZV91c2JfY20oY2F0YWxvZywg UkVHX1VTQjNfRFBfQ09NX1RZUEVDX0NUUkwsCj4gKwkJCQkJVVNCM19EUF9DT01fVFlQRUNfQ1RS TF9QT1JUU0VMX01VWCB8Cj4gKwkJCQkJVVNCM19EUF9DT01fVFlQRUNfQ1RSTF9QT1JUU0VMKTsK PiArCj4gKwlkcF93cml0ZV91c2JfY20oY2F0YWxvZywgUkVHX1VTQjNfRFBfQ09NX1NXSV9DVFJM LCAweDAwKTsKPiArCWRwX3dyaXRlX3VzYl9jbShjYXRhbG9nLCBSRUdfVVNCM19EUF9DT01fU1df UkVTRVQsIDB4MDApOwo+ICsKPiArCWRwX3dyaXRlX3VzYl9jbShjYXRhbG9nLCBSRUdfVVNCM19E UF9DT01fUE9XRVJfRE9XTl9DVFJMLAo+ICsJCQkJCQlVU0IzX0RQX0NPTV9QT1dFUl9ET1dOX0NU UkxfU1dfUFdSRE4pOwo+ICsJZHBfd3JpdGVfdXNiX2NtKGNhdGFsb2csIFJFR19VU0IzX0RQX0NP TV9SRVNFVF9PVlJEX0NUUkwsIDB4MDApOwo+ICsKPiArfQo+ICsKPiArdm9pZCBkcF9jYXRhbG9n X2N0cmxfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKPiArewo+ICsJdTMyIHN3 X3Jlc2V0Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQg X19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlEUk1fRVJST1IoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9w cml2KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPiArCj4gKwlz d19yZXNldCA9IGRwX3JlYWRfYWhiKGNhdGFsb2csIFJFR19EUF9TV19SRVNFVCk7Cj4gKwo+ICsJ c3dfcmVzZXQgfD0gRFBfU1dfUkVTRVQ7Cj4gKwlkcF93cml0ZV9haGIoY2F0YWxvZywgUkVHX0RQ X1NXX1JFU0VULCBzd19yZXNldCk7Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTEwMCk7IC8qIGgv dyByZWNvbW1lbmRlZCBkZWxheSAqLwo+ICsKPiArCXN3X3Jlc2V0ICY9IH5EUF9TV19SRVNFVDsK PiArCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfU1dfUkVTRVQsIHN3X3Jlc2V0KTsKPiAr fQo+ICsKPiArYm9vbCBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHkoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCkKPiArewo+ICsJdTMyIGRhdGE7Cj4gKwlpbnQgcmV0Owo+ICsJc3Ry dWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiAr CQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0K PiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsKPiArCS8qIFBvbGwgZm9yIG1h aW5saW5rIHJlYWR5IHN0YXR1cyAqLwo+ICsJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRs LAo+ICsJCQkJIGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2UgKyBSRUdfRFBfTUFJTkxJTktfUkVB RFksCj4gKwkJCQkgZGF0YSwgZGF0YSAmIERQX01BSU5MSU5LX1JFQURZX0ZPUl9WSURFTywKPiAr CQkJCSBQT0xMSU5HX1NMRUVQX1VTLCBQT0xMSU5HX1RJTUVPVVRfVVMpOwo+ICsJaWYgKHJldCA8 IDApIHsKPiArCQlEUk1fRVJST1IoIm1haW5saW5rIG5vdCByZWFkeVxuIik7Cj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2Nh dGFsb2dfY3RybF9lbmFibGVfaXJxKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJ CQkJCWJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURS TV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRw X2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5i YXNlOwo+ICsKPiArCWlmIChlbmFibGUpIHsKPiArCQlkcF93cml0ZV9haGIoY2F0YWxvZywgUkVH X0RQX0lOVFJfU1RBVFVTLCBEUF9JTlRFUlJVUFRfU1RBVFVTMV9NQVNLKTsKPiArCQlkcF93cml0 ZV9haGIoY2F0YWxvZywgUkVHX0RQX0lOVFJfU1RBVFVTMiwgRFBfSU5URVJSVVBUX1NUQVRVUzJf TUFTSyk7Cj4gKwl9IGVsc2Ugewo+ICsJCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5U Ul9TVEFUVVMsIDB4MDApOwo+ICsJCWRwX3dyaXRlX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5UUl9T VEFUVVMyLCAweDAwKTsKPiArCX0KPiArfQo+ICsKPiArdm9pZCBkcF9jYXRhbG9nX2N0cmxfaHBk X2NvbmZpZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGVuKQo+ICt7Cj4gKwlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsKPiArCWlmICghY3RybCkgewo+ ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsK PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJaWYgKGVuKSB7Cj4gKwkJdTMy IHJlZnRpbWVyID0gZHBfcmVhZF9hdXgoY2F0YWxvZywgUkVHX0RQX0RQX0hQRF9SRUZUSU1FUik7 Cj4gKwo+ICsJCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfRFBfSFBEX0lOVF9BQ0ssCj4g KwkJCQlEUF9EUF9IUERfUExVR19JTlRfQUNLIHwgRFBfRFBfSVJRX0hQRF9JTlRfQUNLIHwKPiAr CQkJCURQX0RQX0hQRF9SRVBMVUdfSU5UX0FDSyB8IERQX0RQX0hQRF9VTlBMVUdfSU5UX0FDSyk7 Cj4gKwkJZHBfd3JpdGVfYXV4KGNhdGFsb2csIFJFR19EUF9EUF9IUERfSU5UX01BU0ssCj4gKwkJ CQlEUF9EUF9IUERfUExVR19JTlRfTUFTSyB8IERQX0RQX0lSUV9IUERfSU5UX01BU0sgfAo+ICsJ CQkJRFBfRFBfSFBEX1JFUExVR19JTlRfTUFTSyB8IERQX0RQX0hQRF9VTlBMVUdfSU5UX01BU0sp Owo+ICsKPiArCQkvKiBDb25maWd1cmUgUkVGVElNRVIgKi8KPiArCQlyZWZ0aW1lciB8PSBSRUZU SU1FUl9ERUZBVUxUX1ZBTFVFOwo+ICsJCWRwX3dyaXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfRFBf SFBEX1JFRlRJTUVSLCByZWZ0aW1lcik7Cj4gKwkJLyogRW5hYmxlIEhQRCAqLwo+ICsJCWRwX3dy aXRlX2F1eChjYXRhbG9nLCBSRUdfRFBfRFBfSFBEX0NUUkwsIERQX0RQX0hQRF9DVFJMX0hQRF9F Tik7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIERpc2FibGUgSFBEICovCj4gKwkJZHBfd3JpdGVfYXV4 KGNhdGFsb2csIFJFR19EUF9EUF9IUERfQ1RSTCwgMHgwKTsKPiArCX0KPiArfQo+ICsKPiArdm9p ZCBkcF9jYXRhbG9nX2N0cmxfZ2V0X2ludGVycnVwdChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpj dHJsKQo+ICt7Cj4gKwl1MzIgYWNrID0gMDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlu cHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKPiArCj4gKwljdHJsLT5pc3IgPSBkcF9yZWFkX2FoYihjYXRhbG9nLCBSRUdfRFBfSU5U Ul9TVEFUVVMyKTsKPiArCWN0cmwtPmlzciAmPSB+RFBfSU5URVJSVVBUX1NUQVRVUzJfTUFTSzsK PiArCWFjayA9IGN0cmwtPmlzciAmIERQX0lOVEVSUlVQVF9TVEFUVVMyOwo+ICsJYWNrIDw8PSAx Owo+ICsJYWNrIHw9IERQX0lOVEVSUlVQVF9TVEFUVVMyX01BU0s7Cj4gKwlkcF93cml0ZV9haGIo Y2F0YWxvZywgUkVHX0RQX0lOVFJfU1RBVFVTMiwgYWNrKTsKPiArfQo+ICsKPiArdm9pZCBkcF9j YXRhbG9nX2N0cmxfcGh5X3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCj4gK3sK PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFjdHJs KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCj4gKwlkcF93cml0ZV9haGIo Y2F0YWxvZywgUkVHX0RQX1BIWV9DVFJMLAo+ICsJCQlEUF9QSFlfQ1RSTF9TV19SRVNFVF9QTEwg fCBEUF9QSFlfQ1RSTF9TV19SRVNFVCk7Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTEwMCk7IC8q IGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLwo+ICsJZHBfd3JpdGVfYWhiKGNhdGFsb2csIFJFR19E UF9QSFlfQ1RSTCwgMHgwKTsKPiArfQo+ICsKPiArdm9pZCBkcF9jYXRhbG9nX2N0cmxfcGh5X2xh bmVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJYm9vbCBmbGlwcGVkLCB1 OCBsbl9jbnQpCj4gK3sKPiArCXUzMiBpbmZvID0gMHgwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPiArCXU4IG9yaWVudGF0aW9uID0gQklUKCEhZmxpcHBlZCk7Cj4g Kwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiAr CQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCj4g KwlpbmZvID0gbG5fY250ICYgRFBfUEhZX1NQQVJFMF9NQVNLOwo+ICsJaW5mbyB8PSAob3JpZW50 YXRpb24gJiBEUF9QSFlfU1BBUkUwX01BU0spIDw8IERQX1BIWV9TUEFSRTBfT1JJRU5UQVRJT05f SU5GT19TSElGVDsKPiArCURSTV9ERUJVR19EUCgiU2hhcmVkIEluZm8gPSAweCV4XG4iLCBpbmZv KTsKPiArCj4gKwlkcF93cml0ZV9waHkoY2F0YWxvZywgUkVHX0RQX1BIWV9TUEFSRTAsIGluZm8p Owo+ICt9Cj4gKwo+ICtpbnQgZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weChzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCXU4IHZfbGV2ZWwsIHU4IHBfbGV2ZWwpCj4gK3sKPiAr CXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl1OCB2YWx1ZTAsIHZhbHVl MTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYo Y3RybCk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJodzogdj0lZCBwPSVkXG4iLCB2X2xldmVsLCBw X2xldmVsKTsKPiArCj4gKwl2YWx1ZTAgPSB2bV92b2x0YWdlX3N3aW5nW3ZfbGV2ZWxdW3BfbGV2 ZWxdOwo+ICsJdmFsdWUxID0gdm1fcHJlX2VtcGhhc2lzW3ZfbGV2ZWxdW3BfbGV2ZWxdOwo+ICsK PiArCWlmICh2YWx1ZTAgPT0gMHhGRiAmJiB2YWx1ZTEgPT0gMHhGRikgewo+ICsJCURSTV9FUlJP UigiaW52YWxpZCB2eCAoMHgleD0weCV4KSwgcHggKDB4JXg9MHgleFxuIiwKPiArCQkJdl9sZXZl bCwgdmFsdWUwLCBwX2xldmVsLCB2YWx1ZTEpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsJLyogcHJvZ3JhbSBkZWZhdWx0IHNldHRpbmcgZmlyc3QgKi8KPiArCWRwX3dyaXRlX2xuX3R4 MChjYXRhbG9nLCBUWG5fVFhfRFJWX0xWTCwgMHgyQSk7Cj4gKwlkcF93cml0ZV9sbl90eDEoY2F0 YWxvZywgVFhuX1RYX0RSVl9MVkwsIDB4MkEpOwo+ICsJZHBfd3JpdGVfbG5fdHgwKGNhdGFsb2cs IFRYbl9UWF9FTVBfUE9TVDFfTFZMLCAweDIwKTsKPiArCWRwX3dyaXRlX2xuX3R4MShjYXRhbG9n LCBUWG5fVFhfRU1QX1BPU1QxX0xWTCwgMHgyMCk7Cj4gKwo+ICsJLyogRW5hYmxlIE1VWCB0byB1 c2UgQ3Vyc29yIHZhbHVlcyBmcm9tIHRoZXNlIHJlZ2lzdGVycyAqLwo+ICsJdmFsdWUwIHw9IEJJ VCg1KTsKPiArCXZhbHVlMSB8PSBCSVQoNSk7Cj4gKwo+ICsJLyogQ29uZmlndXJlIGhvc3QgYW5k IHBhbmVsIG9ubHkgaWYgYm90aCB2YWx1ZXMgYXJlIGFsbG93ZWQgKi8KPiArCWRwX3dyaXRlX2xu X3R4MChjYXRhbG9nLCBUWG5fVFhfRFJWX0xWTCwgdmFsdWUwKTsKPiArCWRwX3dyaXRlX2xuX3R4 MShjYXRhbG9nLCBUWG5fVFhfRFJWX0xWTCwgdmFsdWUwKTsKPiArCWRwX3dyaXRlX2xuX3R4MChj YXRhbG9nLCBUWG5fVFhfRU1QX1BPU1QxX0xWTCwgdmFsdWUxKTsKPiArCWRwX3dyaXRlX2xuX3R4 MShjYXRhbG9nLCBUWG5fVFhfRU1QX1BPU1QxX0xWTCwgdmFsdWUxKTsKPiArCURSTV9ERUJVR19E UCgiaHc6IHZ4X3ZhbHVlPTB4JXggcHhfdmFsdWU9MHgleFxuIiwKPiArCQkJdmFsdWUwLCB2YWx1 ZTEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9z ZW5kX3BoeV9wYXR0ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCXUzMiBw YXR0ZXJuKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJ dTMyIHZhbHVlID0gMHgwOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCURSTV9FUlJPUigiaW52 YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0 X3ByaXYoY3RybCk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBjdXJyZW50IHBh dHRlcm4gYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZSAqLwo+ICsJZHBfd3JpdGVfbGluayhjYXRh bG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgMHgwKTsKPiArCj4gKwlzd2l0Y2ggKHBhdHRlcm4pIHsK PiArCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fRDEwXzI6Cj4gKwkJZHBfd3JpdGVfbGluayhj YXRhbG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgRFBfU1RBVEVfQ1RSTF9MSU5LX1RSQUlOSU5HX1BB VFRFUk4xKTsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fRVJST1Jf UkFURToKPiArCQl2YWx1ZSAmPSB+RFBfSEJSMl9FUk1fUEFUVEVSTjsKPiArCQlkcF93cml0ZV9s aW5rKGNhdGFsb2csIFJFR19EUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1 ZSk7Cj4gKwkJdmFsdWUgfD0gU0NSQU1CTEVSX1JFU0VUX0NPVU5UX1ZBTFVFOwo+ICsJCWRwX3dy aXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQs IHZhbHVlKTsKPiArCQlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9NQUlOTElOS19MRVZF TFMsIERQX01BSU5MSU5LX1NBRkVfVE9fRVhJVF9MRVZFTF8yKTsKPiArCQlkcF93cml0ZV9saW5r KGNhdGFsb2csIFJFR19EUF9TVEFURV9DVFJMLCBEUF9TVEFURV9DVFJMX0xJTktfU1lNQk9MX0VS Ul9NRUFTVVJFKTsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fUFJC Uzc6Cj4gKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgRFBfU1RB VEVfQ1RSTF9MSU5LX1BSQlM3KTsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfTElOS19RVUFMX1BB VFRFUk5fODBCSVRfQ1VTVE9NOgo+ICsJCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX1NU QVRFX0NUUkwsIERQX1NUQVRFX0NUUkxfTElOS19URVNUX0NVU1RPTV9QQVRURVJOKTsKPiArCQkv KiAwMDExMTExMDAwMDAxMTExMTAwMDAwMTExMTEwMDAwMCAqLwo+ICsJCWRwX3dyaXRlX2xpbmso Y2F0YWxvZywgUkVHX0RQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBGODNF MCk7Cj4gKwkJLyogMDAwMDExMTExMDAwMDAxMTExMTAwMDAwMTExMTEwMDAgKi8KPiArCQlkcF93 cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzEs IDB4MEY4M0UwRjgpOwo+ICsJCS8qIDExMTExMDAwMDAxMTExMTAgKi8KPiArCQlkcF93cml0ZV9s aW5rKGNhdGFsb2csIFJFR19EUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzIsIDB4MDAw MEY4M0UpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUF9MSU5LX1FVQUxfUEFUVEVSTl9IQlIyX0VZ RToKPiArCQl2YWx1ZSA9IERQX0hCUjJfRVJNX1BBVFRFUk47Cj4gKwkJZHBfd3JpdGVfbGluayhj YXRhbG9nLCBSRUdfRFBfSEJSMl9DT01QTElBTkNFX1NDUkFNQkxFUl9SRVNFVCwgdmFsdWUpOwo+ ICsJCXZhbHVlIHw9IFNDUkFNQkxFUl9SRVNFVF9DT1VOVF9WQUxVRTsKPiArCQlkcF93cml0ZV9s aW5rKGNhdGFsb2csIFJFR19EUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1 ZSk7Cj4gKwkJZHBfd3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfTUFJTkxJTktfTEVWRUxTLCBE UF9NQUlOTElOS19TQUZFX1RPX0VYSVRfTEVWRUxfMik7Cj4gKwkJZHBfd3JpdGVfbGluayhjYXRh bG9nLCBSRUdfRFBfU1RBVEVfQ1RSTCwgRFBfU1RBVEVfQ1RSTF9MSU5LX1NZTUJPTF9FUlJfTUVB U1VSRSk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCURSTV9ERUJVR19EUCgiTm8gdmFs aWQgdGVzdCBwYXR0ZXJuIHJlcXVlc3RlZDogMHgleFxuIiwgcGF0dGVybik7Cj4gKwkJcmV0dXJu Owo+ICsJfQo+ICt9Cj4gKwo+ICt1MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4o c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlEUk1fRVJST1IoImlu dmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2df Z2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJcmV0dXJuIGRwX3JlYWRfbGluayhjYXRhbG9nLCBSRUdf RFBfTUFJTkxJTktfUkVBRFkpOwo+ICt9Cj4gKwo+ICsvKiBwYW5lbCByZWxhdGVkIGNhdGFsb2cg ZnVuY3Rpb25zICovCj4gK2ludCBkcF9jYXRhbG9nX3BhbmVsX3RpbWluZ19jZmcoc3RydWN0IGRw X2NhdGFsb2dfcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl ICpjYXRhbG9nOwo+ICsKPiArCWlmICghcGFuZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQg aW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2df Z2V0X3ByaXYocGFuZWwpOwo+ICsKPiArCWRwX3dyaXRlX2xpbmsoY2F0YWxvZywgUkVHX0RQX1RP VEFMX0hPUl9WRVIsIHBhbmVsLT50b3RhbCk7Cj4gKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJF R19EUF9TVEFSVF9IT1JfVkVSX0ZST01fU1lOQywgcGFuZWwtPnN5bmNfc3RhcnQpOwo+ICsJZHBf d3JpdGVfbGluayhjYXRhbG9nLCBSRUdfRFBfSFNZTkNfVlNZTkNfV0lEVEhfUE9MQVJJVFksIHBh bmVsLT53aWR0aF9ibGFua2luZyk7Cj4gKwlkcF93cml0ZV9saW5rKGNhdGFsb2csIFJFR19EUF9B Q1RJVkVfSE9SX1ZFUiwgcGFuZWwtPmRwX2FjdGl2ZSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArdm9pZCBkcF9jYXRhbG9nX3BhbmVsX3RwZ19lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfcGFu ZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ ICsKPiArCWlmICghcGFuZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KHBhbmVsKTsKPiAr Cj4gKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfQ09ORklHLCAweDApOwo+ICsJ ZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0hTWU5DX0NUTCwgcGFuZWwtPmhzeW5j X2N0bCk7Cj4gKwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfVlNZTkNfUEVSSU9E X0YwLCBwYW5lbC0+dnN5bmNfcGVyaW9kICoKPiArCQkJcGFuZWwtPmhzeW5jX3BlcmlvZCk7Cj4g KwlkcF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX0lOVEZfVlNZTkNfUFVMU0VfV0lEVEhfRjAs IHBhbmVsLT52X3N5bmNfd2lkdGggKgo+ICsJCQlwYW5lbC0+aHN5bmNfcGVyaW9kKTsKPiArCWRw X3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5URl9WU1lOQ19QRVJJT0RfRjEsIDApOwo+ICsJ ZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YxLCAw KTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEwsIHBh bmVsLT5kaXNwbGF5X2hjdGwpOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRG X0FDVElWRV9IQ1RMLCAwKTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfSU5URl9ESVNQ TEFZX1ZfU1RBUlRfRjAsIHBhbmVsLT5kaXNwbGF5X3Zfc3RhcnQpOwo+ICsJZHBfd3JpdGVfcDAo Y2F0YWxvZywgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjAsIHBhbmVsLT5kaXNwbGF5X3Zf ZW5kKTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfSU5URl9ESVNQTEFZX1ZfU1RBUlRf RjEsIDApOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9F TkRfRjEsIDApOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0FDVElWRV9W X1NUQVJUX0YwLCAwKTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5URl9BQ1RJ VkVfVl9FTkRfRjAsIDApOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9JTlRGX0FD VElWRV9WX1NUQVJUX0YxLCAwKTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfSU5U Rl9BQ1RJVkVfVl9FTkRfRjEsIDApOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9J TlRGX1BPTEFSSVRZX0NUTCwgMCk7Cj4gKwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19E UF9UUEdfTUFJTl9DT05UUk9MLCBEUF9UUEdfQ0hFQ0tFUkVEX1JFQ1RfUEFUVEVSTik7Cj4gKwlk cF93cml0ZV9wMChjYXRhbG9nLCBNTVNTX0RQX1RQR19WSURFT19DT05GSUcsCj4gKwkJCQkJRFBf VFBHX1ZJREVPX0NPTkZJR19CUFBfOEJJVCB8Cj4gKwkJCQkJRFBfVFBHX1ZJREVPX0NPTkZJR19S R0IpOwo+ICsJZHBfd3JpdGVfcDAoY2F0YWxvZywgTU1TU19EUF9CSVNUX0VOQUJMRSwgRFBfQklT VF9FTkFCTEVfRFBCSVNUX0VOKTsKPiArCWRwX3dyaXRlX3AwKGNhdGFsb2csIE1NU1NfRFBfVElN SU5HX0VOR0lORV9FTiwgRFBfVElNSU5HX0VOR0lORV9FTl9FTik7Cj4gKwlEUk1fREVCVUdfRFAo IiVzOiBlbmFibGVkIHRwZ1xuIiwgX19mdW5jX18pOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2NhdGFs b2dfcGFuZWxfdHBnX2Rpc2FibGUoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsKPiArCWlmICghcGFu ZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiAr CX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KHBhbmVsKTsKPiArCj4gKwlkcF93cml0ZV9w MChjYXRhbG9nLCBNTVNTX0RQX1RQR19NQUlOX0NPTlRST0wsIDB4MCk7Cj4gKwlkcF93cml0ZV9w MChjYXRhbG9nLCBNTVNTX0RQX0JJU1RfRU5BQkxFLCAweDApOwo+ICsJZHBfd3JpdGVfcDAoY2F0 YWxvZywgTU1TU19EUF9USU1JTkdfRU5HSU5FX0VOLCAweDApOwo+ICsJcmV0dXJuOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZ19nZXQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHBfaW8gKmlvKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Nh dGFsb2cgKmRwX2NhdGFsb2c7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsKPiArCWlmICghaW8pIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWNhdGFsb2cg ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjYXRhbG9nKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWNhdGFsb2cpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJvcjsKPiArCX0K PiArCj4gKwljYXRhbG9nLT5kZXYgPSBkZXY7Cj4gKwljYXRhbG9nLT5pbyA9IGlvOwo+ICsKPiAr CWRwX2NhdGFsb2cgPSAmY2F0YWxvZy0+ZHBfY2F0YWxvZzsKPiArCj4gKwlyZXR1cm4gZHBfY2F0 YWxvZzsKPiArZXJyb3I6Cj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7Cj4gK30KPiArCj4gK3ZvaWQg ZHBfY2F0YWxvZ19wdXQoc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2cpCj4gK3sKPiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFkcF9jYXRhbG9n KQo+ICsJCXJldHVybjsKPiArCj4gKwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2cs IHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUsCj4gKwkJCQlkcF9jYXRhbG9nKTsKPiArCj4gKwlk ZXZtX2tmcmVlKGNhdGFsb2ctPmRldiwgY2F0YWxvZyk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2NhdGFsb2cuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjUw OTMxMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Nh dGFsb2cuaAo+IEBAIC0wLDAgKzEsMTA4IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX0RQX0NBVEFMT0dfSF8KPiArI2RlZmluZSBfRFBfQ0FUQUxPR19IXwo+ICsKPiArI2lu Y2x1ZGUgImRwX3BhcnNlci5oIgo+ICsKPiArLyogaW50ZXJydXB0cyAqLwo+ICsjZGVmaW5lIERQ X0lOVFJfSFBECQlCSVQoMCkKPiArI2RlZmluZSBEUF9JTlRSX0FVWF9JMkNfRE9ORQlCSVQoMykK PiArI2RlZmluZSBEUF9JTlRSX1dST05HX0FERFIJQklUKDYpCj4gKyNkZWZpbmUgRFBfSU5UUl9U SU1FT1VUCQlCSVQoOSkKPiArI2RlZmluZSBEUF9JTlRSX05BQ0tfREVGRVIJQklUKDEyKQo+ICsj ZGVmaW5lIERQX0lOVFJfV1JPTkdfREFUQV9DTlQJQklUKDE1KQo+ICsjZGVmaW5lIERQX0lOVFJf STJDX05BQ0sJQklUKDE4KQo+ICsjZGVmaW5lIERQX0lOVFJfSTJDX0RFRkVSCUJJVCgyMSkKPiAr I2RlZmluZSBEUF9JTlRSX1BMTF9VTkxPQ0tFRAlCSVQoMjQpCj4gKyNkZWZpbmUgRFBfSU5UUl9B VVhfRVJST1IJQklUKDI3KQo+ICsKPiArI2RlZmluZSBEUF9JTlRSX1JFQURZX0ZPUl9WSURFTwkJ QklUKDApCj4gKyNkZWZpbmUgRFBfSU5UUl9JRExFX1BBVFRFUk5fU0VOVAlCSVQoMykKPiArI2Rl ZmluZSBEUF9JTlRSX0ZSQU1FX0VORAkJQklUKDYpCj4gKyNkZWZpbmUgRFBfSU5UUl9DUkNfVVBE QVRFRAkJQklUKDkpCj4gKwo+ICtzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggewo+ICsJdTMyIGRhdGE7 Cj4gKwl1MzIgaXNyOwo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2dfY3RybCB7Cj4gKwl1 MzIgZHBfdHU7Cj4gKwl1MzIgdmFsaWRfYm91bmRhcnk7Cj4gKwl1MzIgdmFsaWRfYm91bmRhcnky Owo+ICsJdTMyIGlzcjsKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIHsKPiAr CXUzMiB0b3RhbDsKPiArCXUzMiBzeW5jX3N0YXJ0Owo+ICsJdTMyIHdpZHRoX2JsYW5raW5nOwo+ ICsJdTMyIGRwX2FjdGl2ZTsKPiArCj4gKwkvKiBUUEcgKi8KPiArCXUzMiBoc3luY19wZXJpb2Q7 Cj4gKwl1MzIgdnN5bmNfcGVyaW9kOwo+ICsJdTMyIGRpc3BsYXlfdl9zdGFydDsKPiArCXUzMiBk aXNwbGF5X3ZfZW5kOwo+ICsJdTMyIHZfc3luY193aWR0aDsKPiArCXUzMiBoc3luY19jdGw7Cj4g Kwl1MzIgZGlzcGxheV9oY3RsOwo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2cgewo+ICsJ c3RydWN0IGRwX2NhdGFsb2dfYXV4IGF1eDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgY3Ry bDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIHBhbmVsOwo+ICt9Owo+ICsKPiArLyogQVVY IEFQSXMgKi8KPiArdTMyIGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShzdHJ1Y3QgZHBfY2F0YWxv Z19hdXggKmF1eCk7Cj4gK2ludCBkcF9jYXRhbG9nX2F1eF93cml0ZV9kYXRhKHN0cnVjdCBkcF9j YXRhbG9nX2F1eCAqYXV4KTsKPiAraW50IGRwX2NhdGFsb2dfYXV4X3dyaXRlX3RyYW5zKHN0cnVj dCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKPiAraW50IGRwX2NhdGFsb2dfYXV4X2NsZWFyX3RyYW5z KHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBib29sIHJlYWQpOwo+ICt2b2lkIGRwX2NhdGFs b2dfYXV4X3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKPiArdm9pZCBkcF9jYXRh bG9nX2F1eF9lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgZW5hYmxlKTsK PiArdm9pZCBkcF9jYXRhbG9nX2F1eF91cGRhdGVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAq YXV4LAo+ICsJCXN0cnVjdCBkcF9hdXhfY2ZnICpjZmcsIGVudW0gZHBfcGh5X2F1eF9jb25maWdf dHlwZSB0eXBlKTsKPiArdm9pZCBkcF9jYXRhbG9nX2F1eF9zZXR1cChzdHJ1Y3QgZHBfY2F0YWxv Z19hdXggKmF1eCwKPiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZyk7Cj4gK3ZvaWQgZHBf Y2F0YWxvZ19hdXhfZ2V0X2lycShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBjbWRf YnVzeSk7Cj4gKwo+ICsvKiBEUCBDb250cm9sbGVyIEFQSXMgKi8KPiArdm9pZCBkcF9jYXRhbG9n X2N0cmxfc3RhdGVfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgc3RhdGUp Owo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19j dHJsICpjdHJsLCB1MzIgY29uZmlnKTsKPiArdm9pZCBkcF9jYXRhbG9nX2N0cmxfbGFuZV9tYXBw aW5nKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICt2b2lkIGRwX2NhdGFsb2dfY3Ry bF9tYWlubGlua19jdHJsKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wgZW5hYmxl KTsKPiArdm9pZCBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCwgdTMyIGNjLCB1MzIgdGIpOwo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25m aWdfbXNhKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiByYXRlLAo+ICsJCQkJdTMy IHN0cmVhbV9yYXRlX2toeiwgYm9vbCBmaXhlZF9udmlkKTsKPiAraW50IGRwX2NhdGFsb2dfY3Ry bF9zZXRfcGF0dGVybihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgcGF0dGVybik7 Cj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwpOwo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF91c2JfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCwgYm9vbCBmbGlwKTsKPiArYm9vbCBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtf cmVhZHkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19j dHJsX2VuYWJsZV9pcnEoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBlbmFibGUp Owo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9ocGRfY29uZmlnKHN0cnVjdCBkcF9jYXRhbG9nX2N0 cmwgKmN0cmwsIGJvb2wgZW5hYmxlKTsKPiArdm9pZCBkcF9jYXRhbG9nX2N0cmxfcGh5X3Jlc2V0 KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICt2b2lkIGRwX2NhdGFsb2dfY3RybF9w aHlfbGFuZV9jZmcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwcGVkLAo+ ICsJCQkJdTggbGFuZV9jbnQpOwo+ICtpbnQgZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weChz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1OCB2X2xldmVsLAo+ICsJCQkJdTggcF9sZXZl bCk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX2dldF9pbnRlcnJ1cHQoc3RydWN0IGRwX2NhdGFs b2dfY3RybCAqY3RybCk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV90cmFuc2Zlcl91 bml0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICt2b2lkIGRwX2NhdGFsb2dfY3Ry bF9zZW5kX3BoeV9wYXR0ZXJuKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCXUz MiBwYXR0ZXJuKTsKPiArdTMyIGRwX2NhdGFsb2dfY3RybF9yZWFkX3BoeV9wYXR0ZXJuKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICsKPiArLyogRFAgUGFuZWwgQVBJcyAqLwo+ICtp bnQgZHBfY2F0YWxvZ19wYW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpw YW5lbCk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19wYW5lbF90cGdfZW5hYmxlKHN0cnVjdCBkcF9jYXRh bG9nX3BhbmVsICpwYW5lbCk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19wYW5lbF90cGdfZGlzYWJsZShz dHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAqcGFuZWwpOwo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2cg KmRwX2NhdGFsb2dfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2lvICppbyk7Cj4g K3ZvaWQgZHBfY2F0YWxvZ19wdXQoc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2cpOwo+ICsKPiAr I2VuZGlmIC8qIF9EUF9DQVRBTE9HX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfY3RybC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmExM2FiMjQKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPiBAQCAtMCwwICsx LDE2MTEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2Ry bS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9maXhlZC5oPgo+ICsKPiArI2luY2x1ZGUgImRwX3Jl Zy5oIgo+ICsjaW5jbHVkZSAiZHBfY3RybC5oIgo+ICsKPiArI2RlZmluZSBEUF9LSFpfVE9fSFog MTAwMAo+ICsjZGVmaW5lIElETEVfUEFUVEVSTl9DT01QTEVUSU9OX1RJTUVPVVRfSklGRklFUwko MzAgKiBIWiAvIDEwMDApIC8qIDMwIG1zICovCj4gKyNkZWZpbmUgV0FJVF9GT1JfVklERU9fUkVB RFlfVElNRU9VVF9KSUZGSUVTIChIWiAvIDIpCj4gKwo+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9S RUFEWV9GT1JfVklERU8gICAgIEJJVCgwKQo+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9JRExFX1BB VFRFUk5fU0VOVCAgQklUKDMpCj4gKwo+ICsjZGVmaW5lIE1SX0xJTktfVFJBSU5JTkcxICAweDgK PiArI2RlZmluZSBNUl9MSU5LX1NZTUJPTF9FUk0gMHg4MAo+ICsjZGVmaW5lIE1SX0xJTktfUFJC UzcgMHgxMDAKPiArI2RlZmluZSBNUl9MSU5LX0NVU1RPTTgwIDB4MjAwCj4gKwo+ICtzdHJ1Y3Qg ZHBfdHVfY2FsY19pbnB1dCB7Cj4gKwl1NjQgbGNsazsgICAgICAgIC8qIDE2MiwgMjcwLCA1NDAg YW5kIDgxMCAqLwo+ICsJdTY0IHBjbGtfa2h6OyAgICAvKiBpbiBLSHogKi8KPiArCXU2NCBoYWN0 aXZlOyAgICAgLyogYWN0aXZlIGgtd2lkdGggKi8KPiArCXU2NCBocG9yY2g7ICAgICAgLyogYnAg KyBmcCArIHB1bHNlICovCj4gKwlpbnQgbmxhbmVzOyAgICAgIC8qIG5vLm9mLmxhbmVzICovCj4g KwlpbnQgYnBwOyAgICAgICAgIC8qIGJpdHMgKi8KPiArCWludCBwaXhlbF9lbmM7ICAgLyogNDQ0 LCA0MjAsIDQyMiAqLwo+ICsJaW50IGRzY19lbjsgICAgIC8qIGRzYyBvbi9vZmYgKi8KPiArCWlu dCBhc3luY19lbjsgICAvKiBhc3luYyBtb2RlICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfdmNf dHVfbWFwcGluZ190YWJsZSB7Cj4gKwl1OCB2YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsJdTE2IGRl bGF5X3N0YXJ0X2xpbms7Cj4gKwlib29sIGJvdW5kYXJ5X21vZGVyYXRpb25fZW47Cj4gKwl1OCB2 YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOwo+ICsJdTggdXBwZXJfYm91bmRhcnlfY291bnQ7Cj4g Kwl1OCBsb3dlcl9ib3VuZGFyeV9jb3VudDsKPiArCXU4IHR1X3NpemVfbWludXMxOwo+ICt9Owo+ ICsKPiArc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSB7Cj4gKwlzdHJ1Y3QgZHBfY3RybCBkcF9jdHJs Owo+ICsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPiAr CXN0cnVjdCBkcF9wYW5lbCAqcGFuZWw7Cj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluazsKPiArCXN0 cnVjdCBkcF9wb3dlciAqcG93ZXI7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4gKwlz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjYXRhbG9nOwo+ICsKPiArCXN0cnVjdCBjb21wbGV0aW9u IGlkbGVfY29tcDsKPiArCXN0cnVjdCBtdXRleCBwdXNoX2lkbGVfbXV0ZXg7Cj4gKwlzdHJ1Y3Qg Y29tcGxldGlvbiB2aWRlb19jb21wOwo+ICt9Owo+ICsKPiArdm9pZCBkcF9jdHJsX2Fib3J0KHN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpj dHJsOwo+ICsKPiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSwgZHBfY3RybCk7Cj4gKwo+ICsJYXRvbWljX3NldCgmY3RybC0+ZHBfY3RybC5hYm9y dGVkLCAxKTsKPiArfQo+ICsKPiArdm9pZCBkcF9jdHJsX3B1c2hfaWRsZShzdHJ1Y3QgZHBfY3Ry bCAqZHBfY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCj4g KwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRw X2N0cmwpOwo+ICsKPiArCW11dGV4X2xvY2soJmN0cmwtPnB1c2hfaWRsZV9tdXRleCk7Cj4gKwo+ ICsJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7Cj4gKwlkcF9jYXRhbG9nX2N0 cmxfc3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCBEUF9TVEFURV9DVFJMX1BVU0hfSURMRSk7Cj4g Kwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmN0cmwtPmlkbGVfY29tcCwK PiArCQkJSURMRV9QQVRURVJOX0NPTVBMRVRJT05fVElNRU9VVF9KSUZGSUVTKSkKPiArCQlwcl93 YXJuKCJQVVNIX0lETEUgcGF0dGVybiB0aW1lZG91dFxuIik7Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZjdHJsLT5wdXNoX2lkbGVfbXV0ZXgpOwo+ICsJcHJfZGVidWcoIm1haW5saW5rIG9mZiBkb25l XG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWdfY3RybChzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwl1MzIgY29uZmlnID0gMCwgdGJkOwo+ICsJ dTggKmRwY2QgPSBjdHJsLT5wYW5lbC0+ZHBjZDsKPiArCj4gKwkvKiBEZWZhdWx0LT4gTFNDTEsg RElWOiAxLzQgTENMSyAgKi8KPiArCWNvbmZpZyB8PSAoMiA8PCBEUF9DT05GSUdVUkFUSU9OX0NU UkxfTFNDTEtfRElWX1NISUZUKTsKPiArCj4gKwkvKiBTY3JhbWJsZXIgcmVzZXQgZW5hYmxlICov Cj4gKwlpZiAoZHBjZFtEUF9FRFBfQ09ORklHVVJBVElPTl9DQVBdICYgRFBfQUxURVJOQVRFX1ND UkFNQkxFUl9SRVNFVF9DQVApCj4gKwkJY29uZmlnIHw9IERQX0NPTkZJR1VSQVRJT05fQ1RSTF9B U1NSOwo+ICsKPiArCXRiZCA9IGRwX2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0aChjdHJsLT5saW5r LAo+ICsJCQljdHJsLT5wYW5lbC0+ZHBfbW9kZS5icHApOwo+ICsKPiArCWlmICh0YmQgPT0gRFBf VEVTVF9CSVRfREVQVEhfVU5LTk9XTikgewo+ICsJCXByX2RlYnVnKCJCSVRfREVQVEggbm90IHNl dC4gQ29uZmlndXJlIGRlZmF1bHRcbiIpOwo+ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzg7 Cj4gKwl9Cj4gKwo+ICsJY29uZmlnIHw9IHRiZCA8PCBEUF9DT05GSUdVUkFUSU9OX0NUUkxfQlBD X1NISUZUOwo+ICsKPiArCS8qIE51bSBvZiBMYW5lcyAqLwo+ICsJY29uZmlnIHw9ICgoY3RybC0+ bGluay0+bGlua19wYXJhbXMubnVtX2xhbmVzIC0gMSkKPiArCQkJPDwgRFBfQ09ORklHVVJBVElP Tl9DVFJMX05VTV9PRl9MQU5FU19TSElGVCk7Cj4gKwo+ICsJaWYgKGRybV9kcF9lbmhhbmNlZF9m cmFtZV9jYXAoZHBjZCkpCj4gKwkJY29uZmlnIHw9IERQX0NPTkZJR1VSQVRJT05fQ1RSTF9FTkhB TkNFRF9GUkFNSU5HOwo+ICsKPiArCWNvbmZpZyB8PSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfUF9J TlRFUkxBQ0VEOyAvKiBwcm9ncmVzc2l2ZSB2aWRlbyAqLwo+ICsKPiArCS8qIHN5bmMgY2xvY2sg JiBzdGF0aWMgTXZpZCAqLwo+ICsJY29uZmlnIHw9IERQX0NPTkZJR1VSQVRJT05fQ1RSTF9TVEFU SUNfRFlOQU1JQ19DTjsKPiArCWNvbmZpZyB8PSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfU1lOQ19B U1lOQ19DTEs7Cj4gKwo+ICsJZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19jdHJsKGN0cmwtPmNhdGFs b2csIGNvbmZpZyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9jdHJsX2NvbmZpZ3VyZV9zb3Vy Y2VfcGFyYW1zKCkgLSBjb25maWd1cmVzIERQIHRyYW5zbWl0dGVyIHNvdXJjZSBwYXJhbXMKPiAr ICogQGN0cmw6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBDb25maWd1cmVz IHRoZSBEUCB0cmFuc21pdHRlciBzb3VyY2UgcGFyYW1zIGluY2x1ZGluZyBkZXRhaWxzIHN1Y2gg YXMgbGFuZQo+ICsgKiBjb25maWd1cmF0aW9uLCBvdXRwdXQgZm9ybWF0IGFuZCBzaW5rL3BhbmVs IHRpbWluZyBpbmZvcm1hdGlvbi4KPiArICovCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfY29uZmln dXJlX3NvdXJjZV9wYXJhbXMoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJ dTMyIGNjLCB0YjsKPiArCj4gKwlkcF9jYXRhbG9nX2N0cmxfbGFuZV9tYXBwaW5nKGN0cmwtPmNh dGFsb2cpOwo+ICsJZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywg dHJ1ZSk7Cj4gKwo+ICsJZHBfY3RybF9jb25maWdfY3RybChjdHJsKTsKPiArCj4gKwl0YiA9IGRw X2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0aChjdHJsLT5saW5rLAo+ICsJCWN0cmwtPnBhbmVsLT5k cF9tb2RlLmJwcCk7Cj4gKwljYyA9IGRwX2xpbmtfZ2V0X2NvbG9yaW1ldHJ5X2NvbmZpZyhjdHJs LT5saW5rKTsKPiArCWRwX2NhdGFsb2dfY3RybF9jb25maWdfbWlzYyhjdHJsLT5jYXRhbG9nLCBj YywgdGIpOwo+ICsJZHBfcGFuZWxfdGltaW5nX2NmZyhjdHJsLT5wYW5lbCk7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIFRoZSBzdHJ1Y3R1cmUgYW5kIGZldyBmdW5jdGlvbnMgcHJlc2VudCBiZWxvdyBh cmUgSVAvSGFyZHdhcmUKPiArICogc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIE1vc3Qgb2YgdGhl IGltcGxlbWVudGF0aW9uIHdpbGwgbm90Cj4gKyAqIGhhdmUgY29kaW5nIGNvbW1lbnRzCj4gKyAq Lwo+ICtzdHJ1Y3QgdHVfYWxnb19kYXRhIHsKPiArCXM2NCBsY2xrX2ZwOwo+ICsJczY0IHBjbGtf ZnA7Cj4gKwlzNjQgbHdpZHRoOwo+ICsJczY0IGhicF9yZWxhdGl2ZV90b19wY2xrOwo+ICsJaW50 IG5sYW5lczsKPiArCWludCBicHA7Cj4gKwlpbnQgcGl4ZWxFbmM7Cj4gKwlpbnQgZHNjX2VuOwo+ ICsJaW50IGFzeW5jX2VuOwo+ICsJaW50IGJwYzsKPiArCj4gKwl1aW50IGRlbGF5X3N0YXJ0X2xp bmtfZXh0cmFfcGl4Y2xrOwo+ICsJaW50IGV4dHJhX2J1ZmZlcl9tYXJnaW47Cj4gKwlzNjQgcmF0 aW9fZnA7Cj4gKwlzNjQgb3JpZ2luYWxfcmF0aW9fZnA7Cj4gKwo+ICsJczY0IGVycl9mcDsKPiAr CXM2NCBuX2Vycl9mcDsKPiArCXM2NCBuX25fZXJyX2ZwOwo+ICsJaW50IHR1X3NpemU7Cj4gKwlp bnQgdHVfc2l6ZV9kZXNpcmVkOwo+ICsJaW50IHR1X3NpemVfbWludXMxOwo+ICsKPiArCWludCB2 YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsJczY0IHJlc3VsdGluZ192YWxpZF9mcDsKPiArCXM2NCB0 b3RhbF92YWxpZF9mcDsKPiArCXM2NCBlZmZlY3RpdmVfdmFsaWRfZnA7Cj4gKwlzNjQgZWZmZWN0 aXZlX3ZhbGlkX3JlY29yZGVkX2ZwOwo+ICsJaW50IG5fdHVzOwo+ICsJaW50IG5fdHVzX3Blcl9s YW5lOwo+ICsJaW50IHBhaXJlZF90dXM7Cj4gKwlpbnQgcmVtYWluZGVyX3R1czsKPiArCWludCBy ZW1haW5kZXJfdHVzX3VwcGVyOwo+ICsJaW50IHJlbWFpbmRlcl90dXNfbG93ZXI7Cj4gKwlpbnQg ZXh0cmFfYnl0ZXM7Cj4gKwlpbnQgZmlsbGVyX3NpemU7Cj4gKwlpbnQgZGVsYXlfc3RhcnRfbGlu azsKPiArCj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXM7Cj4gKwlpbnQgZXh0cmFfcGNsa19jeWNs ZXNfaW5fbGlua19jbGs7Cj4gKwlzNjQgcmF0aW9fYnlfdHVfZnA7Cj4gKwlzNjQgYXZlcmFnZV92 YWxpZDJfZnA7Cj4gKwlpbnQgbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4gKwlpbnQgcmVtYWlu ZGVyX3N5bWJvbHNfZXhpc3Q7Cj4gKwlpbnQgbl9zeW1ib2xzOwo+ICsJczY0IG5fcmVtYWluZGVy X3N5bWJvbHNfcGVyX2xhbmVfZnA7Cj4gKwlzNjQgbGFzdF9wYXJ0aWFsX3R1X2ZwOwo+ICsJczY0 IFRVX3JhdGlvX2Vycl9mcDsKPiArCj4gKwlpbnQgbl90dXNfaW5jbF9sYXN0X2luY29tcGxldGVf dHU7Cj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNfdG1wOwo+ICsJaW50IGV4dHJhX3BjbGtfY3lj bGVzX2luX2xpbmtfY2xrX3RtcDsKPiArCWludCBleHRyYV9yZXF1aXJlZF9ieXRlc19uZXdfdG1w Owo+ICsJaW50IGZpbGxlcl9zaXplX3RtcDsKPiArCWludCBsb3dlcl9maWxsZXJfc2l6ZV90bXA7 Cj4gKwlpbnQgZGVsYXlfc3RhcnRfbGlua190bXA7Cj4gKwo+ICsJYm9vbCBib3VuZGFyeV9tb2Rl cmF0aW9uX2VuOwo+ICsJaW50IGJvdW5kYXJ5X21vZF9sb3dlcl9lcnI7Cj4gKwlpbnQgdXBwZXJf Ym91bmRhcnlfY291bnQ7Cj4gKwlpbnQgbG93ZXJfYm91bmRhcnlfY291bnQ7Cj4gKwlpbnQgaV91 cHBlcl9ib3VuZGFyeV9jb3VudDsKPiArCWludCBpX2xvd2VyX2JvdW5kYXJ5X2NvdW50Owo+ICsJ aW50IHZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbms7Cj4gKwlpbnQgZXZlbl9kaXN0cmlidXRpb25f QkY7Cj4gKwlpbnQgZXZlbl9kaXN0cmlidXRpb25fbGVnYWN5Owo+ICsJaW50IGV2ZW5fZGlzdHJp YnV0aW9uOwo+ICsJaW50IG1pbl9oYmxhbmtfdmlvbGF0ZWQ7Cj4gKwlzNjQgZGVsYXlfc3RhcnRf dGltZV9mcDsKPiArCXM2NCBoYnBfdGltZV9mcDsKPiArCXM2NCBoYWN0aXZlX3RpbWVfZnA7Cj4g KwlzNjQgZGlmZl9hYnNfZnA7Cj4gKwo+ICsJczY0IHJhdGlvOwo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBfdHVfcGFyYW1fY29tcGFyZShzNjQgYSwgczY0IGIpCj4gK3sKPiArCXUzMiBhX2ludCwg YV9mcmFjOwo+ICsJdTMyIGJfaW50LCBiX2ZyYWM7Cj4gKwo+ICsJaWYgKGEgPT0gYikKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlhX2ludCA9IChhID4+IDMyKSAmIDB4N0ZGRkZGRkY7Cj4gKwlhX2Zy YWMgPSBhICYgMHhGRkZGRkZGRjsKPiArCj4gKwliX2ludCA9IChiID4+IDMyKSAmIDB4N0ZGRkZG RkY7Cj4gKwliX2ZyYWMgPSBiICYgMHhGRkZGRkZGRjsKPiArCj4gKwlpZiAoYV9pbnQgPiBiX2lu dCkKPiArCQlyZXR1cm4gMTsKPiArCWVsc2UgaWYgKGFfaW50IDwgYl9pbnQpCj4gKwkJcmV0dXJu IDI7Cj4gKwllbHNlIGlmIChhX2ZyYWMgPiBiX2ZyYWMpCj4gKwkJcmV0dXJuIDE7Cj4gKwllbHNl Cj4gKwkJcmV0dXJuIDI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF90dV92YWxpZF9ib3VuZGFy eV9jYWxjKHN0cnVjdCB0dV9hbGdvX2RhdGEgKnR1KQo+ICt7Cj4gKwlzNjQgdGVtcDFfZnAsIHRl bXAyX2ZwLCB0ZW1wLCB0ZW1wMSwgdGVtcDI7Cj4gKwlpbnQgY29tcGFyZV9yZXN1bHRfMSwgY29t cGFyZV9yZXN1bHRfMiwgY29tcGFyZV9yZXN1bHRfMzsKPiArCj4gKwl0ZW1wMV9mcCA9IGRybV9m aXhwX2Zyb21fZnJhY3Rpb24odHUtPnR1X3NpemUsIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4 cF9tdWwodHUtPnJhdGlvX2ZwLCB0ZW1wMV9mcCk7Cj4gKwo+ICsJdHUtPm5ld192YWxpZF9ib3Vu ZGFyeV9saW5rID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDJfZnApOwo+ICsKPiArCXRlbXAgPSAo dHUtPmlfdXBwZXJfYm91bmRhcnlfY291bnQgKgo+ICsJCQkJdHUtPm5ld192YWxpZF9ib3VuZGFy eV9saW5rICsKPiArCQkJCXR1LT5pX2xvd2VyX2JvdW5kYXJ5X2NvdW50ICoKPiArCQkJCSh0dS0+ bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmstMSkpOwo+ICsJdHUtPmF2ZXJhZ2VfdmFsaWQyX2ZwID0g ZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0ZW1wLAo+ICsJCQkJCSh0dS0+aV91cHBlcl9ib3VuZGFy eV9jb3VudCArCj4gKwkJCQkJdHUtPmlfbG93ZXJfYm91bmRhcnlfY291bnQpKTsKPiArCj4gKwl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUtPmJwcCwgOCk7Cj4gKwl0ZW1wMl9m cCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUtPmx3aWR0aCwgMSk7Cj4gKwl0ZW1wMV9mcCA9 IGRybV9maXhwX211bCh0ZW1wMl9mcCwgdGVtcDFfZnApOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4 cF9kaXYodGVtcDFfZnAsIHR1LT5hdmVyYWdlX3ZhbGlkMl9mcCk7Cj4gKwl0dS0+bl90dXMgPSBk cm1fZml4cDJpbnQodGVtcDJfZnApOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbih0dS0+bl90dXMsIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFf ZnAsIHR1LT5hdmVyYWdlX3ZhbGlkMl9mcCk7Cj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21f ZnJhY3Rpb24odHUtPm5fc3ltYm9scywgMSk7Cj4gKwl0ZW1wMl9mcCA9IHRlbXAxX2ZwIC0gdGVt cDJfZnA7Cj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUtPm5sYW5lcywg MSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMl9mcCwgdGVtcDFfZnApOwo+ICsJ dHUtPm5fcmVtYWluZGVyX3N5bWJvbHNfcGVyX2xhbmVfZnAgPSB0ZW1wMl9mcDsKPiArCj4gKwl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUtPnR1X3NpemUsIDEpOwo+ICsJdHUt Pmxhc3RfcGFydGlhbF90dV9mcCA9Cj4gKwkJCWRybV9maXhwX2Rpdih0dS0+bl9yZW1haW5kZXJf c3ltYm9sc19wZXJfbGFuZV9mcCwKPiArCQkJCQl0ZW1wMV9mcCk7Cj4gKwo+ICsJaWYgKHR1LT5u X3JlbWFpbmRlcl9zeW1ib2xzX3Blcl9sYW5lX2ZwICE9IDApCj4gKwkJdHUtPnJlbWFpbmRlcl9z eW1ib2xzX2V4aXN0ID0gMTsKPiArCWVsc2UKPiArCQl0dS0+cmVtYWluZGVyX3N5bWJvbHNfZXhp c3QgPSAwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+bl90 dXMsIHR1LT5ubGFuZXMpOwo+ICsJdHUtPm5fdHVzX3Blcl9sYW5lID0gZHJtX2ZpeHAyaW50KHRl bXAxX2ZwKTsKPiArCj4gKwl0dS0+cGFpcmVkX3R1cyA9IChpbnQpKCh0dS0+bl90dXNfcGVyX2xh bmUpIC8KPiArCQkJCQkodHUtPmlfdXBwZXJfYm91bmRhcnlfY291bnQgKwo+ICsJCQkJCSB0dS0+ aV9sb3dlcl9ib3VuZGFyeV9jb3VudCkpOwo+ICsKPiArCXR1LT5yZW1haW5kZXJfdHVzID0gdHUt Pm5fdHVzX3Blcl9sYW5lIC0gdHUtPnBhaXJlZF90dXMgKgo+ICsJCQkJCQkodHUtPmlfdXBwZXJf Ym91bmRhcnlfY291bnQgKwo+ICsJCQkJCQl0dS0+aV9sb3dlcl9ib3VuZGFyeV9jb3VudCk7Cj4g Kwo+ICsJaWYgKCh0dS0+cmVtYWluZGVyX3R1cyAtIHR1LT5pX3VwcGVyX2JvdW5kYXJ5X2NvdW50 KSA+IDApIHsKPiArCQl0dS0+cmVtYWluZGVyX3R1c191cHBlciA9IHR1LT5pX3VwcGVyX2JvdW5k YXJ5X2NvdW50Owo+ICsJCXR1LT5yZW1haW5kZXJfdHVzX2xvd2VyID0gdHUtPnJlbWFpbmRlcl90 dXMgLQo+ICsJCQkJCQl0dS0+aV91cHBlcl9ib3VuZGFyeV9jb3VudDsKPiArCX0gZWxzZSB7Cj4g KwkJdHUtPnJlbWFpbmRlcl90dXNfdXBwZXIgPSB0dS0+cmVtYWluZGVyX3R1czsKPiArCQl0dS0+ cmVtYWluZGVyX3R1c19sb3dlciA9IDA7Cj4gKwl9Cj4gKwo+ICsJdGVtcCA9IHR1LT5wYWlyZWRf dHVzICogKHR1LT5pX3VwcGVyX2JvdW5kYXJ5X2NvdW50ICoKPiArCQkJCXR1LT5uZXdfdmFsaWRf Ym91bmRhcnlfbGluayArCj4gKwkJCQl0dS0+aV9sb3dlcl9ib3VuZGFyeV9jb3VudCAqCj4gKwkJ CQkodHUtPm5ld192YWxpZF9ib3VuZGFyeV9saW5rIC0gMSkpICsKPiArCQkJCSh0dS0+cmVtYWlu ZGVyX3R1c191cHBlciAqCj4gKwkJCQkgdHUtPm5ld192YWxpZF9ib3VuZGFyeV9saW5rKSArCj4g KwkJCQkodHUtPnJlbWFpbmRlcl90dXNfbG93ZXIgKgo+ICsJCQkJKHR1LT5uZXdfdmFsaWRfYm91 bmRhcnlfbGluayAtIDEpKTsKPiArCXR1LT50b3RhbF92YWxpZF9mcCA9IGRybV9maXhwX2Zyb21f ZnJhY3Rpb24odGVtcCwgMSk7Cj4gKwo+ICsJaWYgKHR1LT5yZW1haW5kZXJfc3ltYm9sc19leGlz dCkgewo+ICsJCXRlbXAxX2ZwID0gdHUtPnRvdGFsX3ZhbGlkX2ZwICsKPiArCQkJCXR1LT5uX3Jl bWFpbmRlcl9zeW1ib2xzX3Blcl9sYW5lX2ZwOwo+ICsJCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZnJv bV9mcmFjdGlvbih0dS0+bl90dXNfcGVyX2xhbmUsIDEpOwo+ICsJCXRlbXAyX2ZwID0gdGVtcDJf ZnAgKyB0dS0+bGFzdF9wYXJ0aWFsX3R1X2ZwOwo+ICsJCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZGl2 KHRlbXAxX2ZwLCB0ZW1wMl9mcCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXRlbXAyX2ZwID0gZHJtX2Zp eHBfZnJvbV9mcmFjdGlvbih0dS0+bl90dXNfcGVyX2xhbmUsIDEpOwo+ICsJCXRlbXAxX2ZwID0g ZHJtX2ZpeHBfZGl2KHR1LT50b3RhbF92YWxpZF9mcCwgdGVtcDJfZnApOwo+ICsJfQo+ICsJdHUt PmVmZmVjdGl2ZV92YWxpZF9mcCA9IHRlbXAxX2ZwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2Zp eHBfZnJvbV9mcmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhw X211bCh0dS0+cmF0aW9fZnAsIHRlbXAxX2ZwKTsKPiArCXR1LT5uX25fZXJyX2ZwID0gdHUtPmVm ZmVjdGl2ZV92YWxpZF9mcCAtIHRlbXAyX2ZwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX211 bCh0dS0+cmF0aW9fZnAsIHRlbXAxX2ZwKTsKPiArCXR1LT5uX2Vycl9mcCA9IHR1LT5hdmVyYWdl X3ZhbGlkMl9mcCAtIHRlbXAyX2ZwOwo+ICsKPiArCXR1LT5ldmVuX2Rpc3RyaWJ1dGlvbiA9IHR1 LT5uX3R1cyAlIHR1LT5ubGFuZXMgPT0gMCA/IDEgOiAwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJt X2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+YnBwLCA4KTsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS0+bHdpZHRoLCAxKTsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfbXVs KHRlbXAyX2ZwLCB0ZW1wMV9mcCk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMV9m cCwgdHUtPmF2ZXJhZ2VfdmFsaWQyX2ZwKTsKPiArCj4gKwlpZiAodGVtcDJfZnApCj4gKwkJdHUt Pm5fdHVzX2luY2xfbGFzdF9pbmNvbXBsZXRlX3R1ID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDJf ZnApOwo+ICsJZWxzZQo+ICsJCXR1LT5uX3R1c19pbmNsX2xhc3RfaW5jb21wbGV0ZV90dSA9IDA7 Cj4gKwo+ICsJdGVtcDEgPSAwOwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9u KHR1LT50dV9zaXplLCAxKTsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKHR1LT5vcmlnaW5h bF9yYXRpb19mcCwgdGVtcDFfZnApOwo+ICsJdGVtcDFfZnAgPSB0dS0+YXZlcmFnZV92YWxpZDJf ZnAgLSB0ZW1wMl9mcDsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS0+ bl90dXNfaW5jbF9sYXN0X2luY29tcGxldGVfdHUsIDEpOwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4 cF9tdWwodGVtcDJfZnAsIHRlbXAxX2ZwKTsKPiArCj4gKwlpZiAodGVtcDFfZnApCj4gKwkJdGVt cDEgPSBkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMV9mcCk7Cj4gKwo+ICsJdGVtcCA9IHR1LT5pX3Vw cGVyX2JvdW5kYXJ5X2NvdW50ICogdHUtPm5sYW5lczsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBf ZnJvbV9mcmFjdGlvbih0dS0+dHVfc2l6ZSwgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX211 bCh0dS0+b3JpZ2luYWxfcmF0aW9fZnAsIHRlbXAxX2ZwKTsKPiArCXRlbXAxX2ZwID0gZHJtX2Zp eHBfZnJvbV9mcmFjdGlvbih0dS0+bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmssIDEpOwo+ICsJdGVt cDJfZnAgPSB0ZW1wMV9mcCAtIHRlbXAyX2ZwOwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9t X2ZyYWN0aW9uKHRlbXAsIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFfZnAs IHRlbXAyX2ZwKTsKPiArCj4gKwlpZiAodGVtcDJfZnApCj4gKwkJdGVtcDIgPSBkcm1fZml4cDJp bnRfY2VpbCh0ZW1wMl9mcCk7Cj4gKwllbHNlCj4gKwkJdGVtcDIgPSAwOwo+ICsJdHUtPmV4dHJh X3JlcXVpcmVkX2J5dGVzX25ld190bXAgPSAoaW50KSh0ZW1wMSArIHRlbXAyKTsKPiArCj4gKwl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oOCwgdHUtPmJwcCk7Cj4gKwl0ZW1wMl9m cCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oCj4gKwl0dS0+ZXh0cmFfcmVxdWlyZWRfYnl0ZXNf bmV3X3RtcCwgMSk7Cj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX211bCh0ZW1wMl9mcCwgdGVtcDFf ZnApOwo+ICsKPiArCWlmICh0ZW1wMV9mcCkKPiArCQl0dS0+ZXh0cmFfcGNsa19jeWNsZXNfdG1w ID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDFfZnApOwo+ICsJZWxzZQo+ICsJCXR1LT5leHRyYV9w Y2xrX2N5Y2xlc190bXAgPSAwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFj dGlvbih0dS0+ZXh0cmFfcGNsa19jeWNsZXNfdG1wLCAxKTsKPiArCXRlbXAyX2ZwID0gZHJtX2Zp eHBfZGl2KHR1LT5sY2xrX2ZwLCB0dS0+cGNsa19mcCk7Cj4gKwl0ZW1wMV9mcCA9IGRybV9maXhw X211bCh0ZW1wMV9mcCwgdGVtcDJfZnApOwo+ICsKPiArCWlmICh0ZW1wMV9mcCkKPiArCQl0dS0+ ZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGtfdG1wID0KPiArCQkJCQkJZHJtX2ZpeHAyaW50 X2NlaWwodGVtcDFfZnApOwo+ICsJZWxzZQo+ICsJCXR1LT5leHRyYV9wY2xrX2N5Y2xlc19pbl9s aW5rX2Nsa190bXAgPSAwOwo+ICsKPiArCXR1LT5maWxsZXJfc2l6ZV90bXAgPSB0dS0+dHVfc2l6 ZSAtIHR1LT5uZXdfdmFsaWRfYm91bmRhcnlfbGluazsKPiArCj4gKwl0dS0+bG93ZXJfZmlsbGVy X3NpemVfdG1wID0gdHUtPmZpbGxlcl9zaXplX3RtcCArIDE7Cj4gKwo+ICsJdHUtPmRlbGF5X3N0 YXJ0X2xpbmtfdG1wID0gdHUtPmV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrX3RtcCArCj4g KwkJCQkJdHUtPmxvd2VyX2ZpbGxlcl9zaXplX3RtcCArCj4gKwkJCQkJdHUtPmV4dHJhX2J1ZmZl cl9tYXJnaW47Cj4gKwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LT5k ZWxheV9zdGFydF9saW5rX3RtcCwgMSk7Cj4gKwl0dS0+ZGVsYXlfc3RhcnRfdGltZV9mcCA9IGRy bV9maXhwX2Rpdih0ZW1wMV9mcCwgdHUtPmxjbGtfZnApOwo+ICsKPiArCWNvbXBhcmVfcmVzdWx0 XzEgPSBfdHVfcGFyYW1fY29tcGFyZSh0dS0+bl9uX2Vycl9mcCwgdHUtPmRpZmZfYWJzX2ZwKTsK PiArCWlmIChjb21wYXJlX3Jlc3VsdF8xID09IDIpCj4gKwkJY29tcGFyZV9yZXN1bHRfMSA9IDE7 Cj4gKwllbHNlCj4gKwkJY29tcGFyZV9yZXN1bHRfMSA9IDA7Cj4gKwo+ICsJY29tcGFyZV9yZXN1 bHRfMiA9IF90dV9wYXJhbV9jb21wYXJlKHR1LT5uX25fZXJyX2ZwLCB0dS0+ZXJyX2ZwKTsKPiAr CWlmIChjb21wYXJlX3Jlc3VsdF8yID09IDIpCj4gKwkJY29tcGFyZV9yZXN1bHRfMiA9IDE7Cj4g KwllbHNlCj4gKwkJY29tcGFyZV9yZXN1bHRfMiA9IDA7Cj4gKwo+ICsJY29tcGFyZV9yZXN1bHRf MyA9IF90dV9wYXJhbV9jb21wYXJlKHR1LT5oYnBfdGltZV9mcCwKPiArCQkJCQl0dS0+ZGVsYXlf c3RhcnRfdGltZV9mcCk7Cj4gKwlpZiAoY29tcGFyZV9yZXN1bHRfMyA9PSAyKQo+ICsJCWNvbXBh cmVfcmVzdWx0XzMgPSAwOwo+ICsJZWxzZQo+ICsJCWNvbXBhcmVfcmVzdWx0XzMgPSAxOwo+ICsK PiArCWlmICgoKHR1LT5ldmVuX2Rpc3RyaWJ1dGlvbiA9PSAxKSB8fAo+ICsJCQkoKHR1LT5ldmVu X2Rpc3RyaWJ1dGlvbl9CRiA9PSAwKSAmJgo+ICsJCQkodHUtPmV2ZW5fZGlzdHJpYnV0aW9uX2xl Z2FjeSA9PSAwKSkpICYmCj4gKwkJCXR1LT5uX2Vycl9mcCA+PSAwICYmIHR1LT5uX25fZXJyX2Zw ID49IDAgJiYKPiArCQkJY29tcGFyZV9yZXN1bHRfMiAmJgo+ICsJCQkoY29tcGFyZV9yZXN1bHRf MSB8fCAodHUtPm1pbl9oYmxhbmtfdmlvbGF0ZWQgPT0gMSkpICYmCj4gKwkJCSh0dS0+bmV3X3Zh bGlkX2JvdW5kYXJ5X2xpbmsgLSAxKSA+IDAgJiYKPiArCQkJY29tcGFyZV9yZXN1bHRfMyAmJgo+ ICsJCQkodHUtPmRlbGF5X3N0YXJ0X2xpbmtfdG1wIDw9IDEwMjMpKSB7Cj4gKwkJdHUtPnVwcGVy X2JvdW5kYXJ5X2NvdW50ID0gdHUtPmlfdXBwZXJfYm91bmRhcnlfY291bnQ7Cj4gKwkJdHUtPmxv d2VyX2JvdW5kYXJ5X2NvdW50ID0gdHUtPmlfbG93ZXJfYm91bmRhcnlfY291bnQ7Cj4gKwkJdHUt PmVycl9mcCA9IHR1LT5uX25fZXJyX2ZwOwo+ICsJCXR1LT5ib3VuZGFyeV9tb2RlcmF0aW9uX2Vu ID0gdHJ1ZTsKPiArCQl0dS0+dHVfc2l6ZV9kZXNpcmVkID0gdHUtPnR1X3NpemU7Cj4gKwkJdHUt PnZhbGlkX2JvdW5kYXJ5X2xpbmsgPSB0dS0+bmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4gKwkJ dHUtPmVmZmVjdGl2ZV92YWxpZF9yZWNvcmRlZF9mcCA9IHR1LT5lZmZlY3RpdmVfdmFsaWRfZnA7 Cj4gKwkJdHUtPmV2ZW5fZGlzdHJpYnV0aW9uX0JGID0gMTsKPiArCQl0dS0+ZGVsYXlfc3RhcnRf bGluayA9IHR1LT5kZWxheV9zdGFydF9saW5rX3RtcDsKPiArCX0gZWxzZSBpZiAodHUtPmJvdW5k YXJ5X21vZF9sb3dlcl9lcnIgPT0gMCkgewo+ICsJCWNvbXBhcmVfcmVzdWx0XzEgPSBfdHVfcGFy YW1fY29tcGFyZSh0dS0+bl9uX2Vycl9mcCwKPiArCQkJCQkJCXR1LT5kaWZmX2Fic19mcCk7Cj4g KwkJaWYgKGNvbXBhcmVfcmVzdWx0XzEgPT0gMikKPiArCQkJdHUtPmJvdW5kYXJ5X21vZF9sb3dl cl9lcnIgPSAxOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfZHBfY3RybF9jYWxjX3R1 KHN0cnVjdCBkcF90dV9jYWxjX2lucHV0ICppbiwKPiArCQkJCSAgIHN0cnVjdCBkcF92Y190dV9t YXBwaW5nX3RhYmxlICp0dV90YWJsZSkKPiArewo+ICsJc3RydWN0IHR1X2FsZ29fZGF0YSB0dTsK PiArCWludCBjb21wYXJlX3Jlc3VsdF8xLCBjb21wYXJlX3Jlc3VsdF8yOwo+ICsJdTY0IHRlbXAg PSAwOwo+ICsJczY0IHRlbXBfZnAgPSAwLCB0ZW1wMV9mcCA9IDAsIHRlbXAyX2ZwID0gMDsKPiAr Cj4gKwlzNjQgTENMS19GQVNUX1NLRVdfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKDYsIDEw MDAwKTsgLyogMC4wMDA2ICovCj4gKwlzNjQgY29uc3RfcDQ5X2ZwID0gZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbig0OSwgMTAwKTsgLyogMC40OSAqLwo+ICsJczY0IGNvbnN0X3A1Nl9mcCA9IGRybV9m aXhwX2Zyb21fZnJhY3Rpb24oNTYsIDEwMCk7IC8qIDAuNTYgKi8KPiArCXM2NCBSQVRJT19TQ0FM RV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oMTAwMSwgMTAwMCk7Cj4gKwo+ICsJdTggRFBf QlJVVEVfRk9SQ0UgPSAxOwo+ICsJczY0IEJSVVRFX0ZPUkNFX1RIUkVTSE9MRF9mcCA9IGRybV9m aXhwX2Zyb21fZnJhY3Rpb24oMSwgMTApOyAvKiAwLjEgKi8KPiArCXVpbnQgRVhUUkFfUElYQ0xL X0NZQ0xFX0RFTEFZID0gNDsKPiArCXVpbnQgSEJMQU5LX01BUkdJTiA9IDQ7Cj4gKwo+ICsJbWVt c2V0KCZ0dSwgMCwgc2l6ZW9mKHR1KSk7Cj4gKwo+ICsJdHUubGNsa19mcCAgICAgICAgICAgICAg PSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKGluLT5sY2xrLCAxKTsKPiArCXR1LnBjbGtfZnAgICAg ICAgICAgICAgID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbihpbi0+cGNsa19raHosIDEwMDApOwo+ ICsJdHUubHdpZHRoICAgICAgICAgICAgICAgPSBpbi0+aGFjdGl2ZTsKPiArCXR1LmhicF9yZWxh dGl2ZV90b19wY2xrID0gaW4tPmhwb3JjaDsKPiArCXR1Lm5sYW5lcyAgICAgICAgICAgICAgID0g aW4tPm5sYW5lczsKPiArCXR1LmJwcCAgICAgICAgICAgICAgICAgID0gaW4tPmJwcDsKPiArCXR1 LnBpeGVsRW5jICAgICAgICAgICAgID0gaW4tPnBpeGVsX2VuYzsKPiArCXR1LmRzY19lbiAgICAg ICAgICAgICAgID0gaW4tPmRzY19lbjsKPiArCXR1LmFzeW5jX2VuICAgICAgICAgICAgID0gaW4t PmFzeW5jX2VuOwo+ICsKPiArCXR1LmVycl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oMTAw MCwgMSk7IC8qIDEwMDAgKi8KPiArCj4gKwlpZiAodHUucGl4ZWxFbmMgPT0gNDIwKSB7Cj4gKwkJ dGVtcF9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oMiwgMSk7Cj4gKwkJdHUucGNsa19mcCA9 IGRybV9maXhwX2Rpdih0dS5wY2xrX2ZwLCB0ZW1wX2ZwKTsKPiArCQl0dS5sd2lkdGggLz0gMjsK PiArCQl0dS5oYnBfcmVsYXRpdmVfdG9fcGNsayAvPSAyOwo+ICsJfQo+ICsKPiArCWlmICh0dS5w aXhlbEVuYyA9PSA0MjIpIHsKPiArCQlzd2l0Y2ggKHR1LmJwcCkgewo+ICsJCWNhc2UgMjQ6Cj4g KwkJCXR1LmJwcCA9IDE2Owo+ICsJCQl0dS5icGMgPSA4Owo+ICsJCQlicmVhazsKPiArCQljYXNl IDMwOgo+ICsJCQl0dS5icHAgPSAyMDsKPiArCQkJdHUuYnBjID0gMTA7Cj4gKwkJCWJyZWFrOwo+ ICsJCWRlZmF1bHQ6Cj4gKwkJCXR1LmJwcCA9IDE2Owo+ICsJCQl0dS5icGMgPSA4Owo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCXR1LmJwYyA9IHR1LmJwcC8zOwo+ICsJfQo+ ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbig0LCAxKTsKPiArCXRlbXAy X2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAxX2ZwLCB0dS5sY2xrX2ZwKTsKPiArCXRlbXBfZnAgPSBk cm1fZml4cF9kaXYodGVtcDJfZnAsIHR1LnBjbGtfZnApOwo+ICsJdHUuZXh0cmFfYnVmZmVyX21h cmdpbiA9IGRybV9maXhwMmludF9jZWlsKHRlbXBfZnApOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJt X2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5icHAsIDgpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9t dWwodHUucGNsa19mcCwgdGVtcDFfZnApOwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2Zy YWN0aW9uKHR1Lm5sYW5lcywgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Rpdih0ZW1wMl9m cCwgdGVtcDFfZnApOwo+ICsJdHUucmF0aW9fZnAgPSBkcm1fZml4cF9kaXYodGVtcDJfZnAsIHR1 LmxjbGtfZnApOwo+ICsKPiArCXR1Lm9yaWdpbmFsX3JhdGlvX2ZwID0gdHUucmF0aW9fZnA7Cj4g Kwl0dS5ib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gZmFsc2U7Cj4gKwl0dS51cHBlcl9ib3VuZGFy eV9jb3VudCA9IDA7Cj4gKwl0dS5sb3dlcl9ib3VuZGFyeV9jb3VudCA9IDA7Cj4gKwl0dS5pX3Vw cGVyX2JvdW5kYXJ5X2NvdW50ID0gMDsKPiArCXR1LmlfbG93ZXJfYm91bmRhcnlfY291bnQgPSAw Owo+ICsJdHUudmFsaWRfbG93ZXJfYm91bmRhcnlfbGluayA9IDA7Cj4gKwl0dS5ldmVuX2Rpc3Ry aWJ1dGlvbl9CRiA9IDA7Cj4gKwl0dS5ldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSAwOwo+ICsJ dHUuZXZlbl9kaXN0cmlidXRpb24gPSAwOwo+ICsJdHUuZGVsYXlfc3RhcnRfdGltZV9mcCA9IDA7 Cj4gKwo+ICsJdHUuZXJyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigxMDAwLCAxKTsKPiAr CXR1Lm5fZXJyX2ZwID0gMDsKPiArCXR1Lm5fbl9lcnJfZnAgPSAwOwo+ICsKPiArCXR1LnJhdGlv ID0gZHJtX2ZpeHAyaW50KHR1LnJhdGlvX2ZwKTsKPiArCWlmICgoKCh1MzIpdHUubHdpZHRoICUg dHUubmxhbmVzKSAhPSAwKSAmJgo+ICsJCQkhdHUucmF0aW8gJiYgdHUuZHNjX2VuID09IDApIHsK PiArCQl0dS5yYXRpb19mcCA9IGRybV9maXhwX211bCh0dS5yYXRpb19mcCwgUkFUSU9fU0NBTEVf ZnApOwo+ICsJCXR1LnJhdGlvID0gZHJtX2ZpeHAyaW50KHR1LnJhdGlvX2ZwKTsKPiArCQlpZiAo dHUucmF0aW8pCj4gKwkJCXR1LnJhdGlvX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigxLCAx KTsKPiArCX0KPiArCj4gKwlpZiAodHUucmF0aW8gPiAxKQo+ICsJCXR1LnJhdGlvID0gMTsKPiAr Cj4gKwlpZiAodHUucmF0aW8gPT0gMSkKPiArCQlnb3RvIHR1X3NpemVfY2FsYzsKPiArCj4gKwlj b21wYXJlX3Jlc3VsdF8xID0gX3R1X3BhcmFtX2NvbXBhcmUodHUucmF0aW9fZnAsIGNvbnN0X3A0 OV9mcCk7Cj4gKwlpZiAoIWNvbXBhcmVfcmVzdWx0XzEgfHwgY29tcGFyZV9yZXN1bHRfMSA9PSAx KQo+ICsJCWNvbXBhcmVfcmVzdWx0XzEgPSAxOwo+ICsJZWxzZQo+ICsJCWNvbXBhcmVfcmVzdWx0 XzEgPSAwOwo+ICsKPiArCWNvbXBhcmVfcmVzdWx0XzIgPSBfdHVfcGFyYW1fY29tcGFyZSh0dS5y YXRpb19mcCwgY29uc3RfcDU2X2ZwKTsKPiArCWlmICghY29tcGFyZV9yZXN1bHRfMiB8fCBjb21w YXJlX3Jlc3VsdF8yID09IDIpCj4gKwkJY29tcGFyZV9yZXN1bHRfMiA9IDE7Cj4gKwllbHNlCj4g KwkJY29tcGFyZV9yZXN1bHRfMiA9IDA7Cj4gKwo+ICsJaWYgKHR1LmRzY19lbiAmJiBjb21wYXJl X3Jlc3VsdF8xICYmIGNvbXBhcmVfcmVzdWx0XzIpIHsKPiArCQlIQkxBTktfTUFSR0lOICs9IDQ7 Cj4gKwkJRFJNX0RFQlVHX0RQKCJJbmZvOiBpbmNyZWFzZSBIQkxBTktfTUFSR0lOIHRvICVkXG4i LCBIQkxBTktfTUFSR0lOKTsKPiArCX0KPiArCj4gK3R1X3NpemVfY2FsYzoKPiArCWZvciAodHUu dHVfc2l6ZSA9IDMyOyB0dS50dV9zaXplIDw9IDY0OyB0dS50dV9zaXplKyspIHsKPiArCQl0ZW1w MV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUudHVfc2l6ZSwgMSk7Cj4gKwkJdGVtcDJf ZnAgPSBkcm1fZml4cF9tdWwodHUucmF0aW9fZnAsIHRlbXAxX2ZwKTsKPiArCQl0ZW1wID0gZHJt X2ZpeHAyaW50X2NlaWwodGVtcDJfZnApOwo+ICsJCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9m cmFjdGlvbih0ZW1wLCAxKTsKPiArCQl0dS5uX2Vycl9mcCA9IHRlbXAxX2ZwIC0gdGVtcDJfZnA7 Cj4gKwo+ICsJCWlmICh0dS5uX2Vycl9mcCA8IHR1LmVycl9mcCkgewo+ICsJCQl0dS5lcnJfZnAg PSB0dS5uX2Vycl9mcDsKPiArCQkJdHUudHVfc2l6ZV9kZXNpcmVkID0gdHUudHVfc2l6ZTsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJdHUudHVfc2l6ZV9taW51czEgPSB0dS50dV9zaXplX2Rlc2lyZWQg LSAxOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS50dV9zaXpl X2Rlc2lyZWQsIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodHUucmF0aW9fZnAsIHRl bXAxX2ZwKTsKPiArCXR1LnZhbGlkX2JvdW5kYXJ5X2xpbmsgPSBkcm1fZml4cDJpbnRfY2VpbCh0 ZW1wMl9mcCk7Cj4gKwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LmJw cCwgOCk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubHdpZHRoLCAx KTsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7Cj4gKwo+ ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnZhbGlkX2JvdW5kYXJ5X2xp bmssIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9kaXYodGVtcDJfZnAsIHRlbXAxX2ZwKTsK PiArCXR1Lm5fdHVzID0gZHJtX2ZpeHAyaW50KHRlbXAyX2ZwKTsKPiArCj4gKwl0dS5ldmVuX2Rp c3RyaWJ1dGlvbl9sZWdhY3kgPSB0dS5uX3R1cyAlIHR1Lm5sYW5lcyA9PSAwID8gMSA6IDA7Cj4g KwlEUk1fREVCVUdfRFAoIkluZm86IG5fc3ltID0gJWQsIG51bV9vZl90dXMgPSAlZFxuIiwKPiAr CQl0dS52YWxpZF9ib3VuZGFyeV9saW5rLCB0dS5uX3R1cyk7Cj4gKwo+ICsJdGVtcDFfZnAgPSBk cm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnR1X3NpemVfZGVzaXJlZCwgMSk7Cj4gKwl0ZW1wMl9m cCA9IGRybV9maXhwX211bCh0dS5vcmlnaW5hbF9yYXRpb19mcCwgdGVtcDFfZnApOwo+ICsJdGVt cDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LnZhbGlkX2JvdW5kYXJ5X2xpbmssIDEp Owo+ICsJdGVtcDJfZnAgPSB0ZW1wMV9mcCAtIHRlbXAyX2ZwOwo+ICsJdGVtcDFfZnAgPSBkcm1f Zml4cF9mcm9tX2ZyYWN0aW9uKHR1Lm5fdHVzICsgMSwgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9m aXhwX211bCh0ZW1wMV9mcCwgdGVtcDJfZnApOwo+ICsKPiArCXRlbXAgPSBkcm1fZml4cDJpbnQo dGVtcDJfZnApOwo+ICsJaWYgKHRlbXAgJiYgdGVtcDJfZnApCj4gKwkJdHUuZXh0cmFfYnl0ZXMg PSBkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMl9mcCk7Cj4gKwllbHNlCj4gKwkJdHUuZXh0cmFfYnl0 ZXMgPSAwOwo+ICsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5leHRy YV9ieXRlcywgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24oOCwgdHUu YnBwKTsKPiArCXRlbXAxX2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAxX2ZwLCB0ZW1wMl9mcCk7Cj4g Kwo+ICsJdGVtcCA9IGRybV9maXhwMmludCh0ZW1wMV9mcCk7Cj4gKwlpZiAodGVtcCAmJiB0ZW1w MV9mcCkKPiArCQl0dS5leHRyYV9wY2xrX2N5Y2xlcyA9IGRybV9maXhwMmludF9jZWlsKHRlbXAx X2ZwKTsKPiArCWVsc2UKPiArCQl0dS5leHRyYV9wY2xrX2N5Y2xlcyA9IDA7Cj4gKwo+ICsJdGVt cDFfZnAgPSBkcm1fZml4cF9kaXYodHUubGNsa19mcCwgdHUucGNsa19mcCk7Cj4gKwl0ZW1wMl9m cCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUuZXh0cmFfcGNsa19jeWNsZXMsIDEpOwo+ICsJ dGVtcDFfZnAgPSBkcm1fZml4cF9tdWwodGVtcDJfZnAsIHRlbXAxX2ZwKTsKPiArCj4gKwl0ZW1w ID0gZHJtX2ZpeHAyaW50KHRlbXAxX2ZwKTsKPiArCWlmICh0ZW1wICYmIHRlbXAxX2ZwKQo+ICsJ CXR1LmV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrID0gZHJtX2ZpeHAyaW50X2NlaWwodGVt cDFfZnApOwo+ICsJZWxzZQo+ICsJCXR1LmV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrID0g MDsKPiArCj4gKwl0dS5maWxsZXJfc2l6ZSA9IHR1LnR1X3NpemVfZGVzaXJlZCAtIHR1LnZhbGlk X2JvdW5kYXJ5X2xpbms7Cj4gKwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9u KHR1LnR1X3NpemVfZGVzaXJlZCwgMSk7Cj4gKwl0dS5yYXRpb19ieV90dV9mcCA9IGRybV9maXhw X211bCh0dS5yYXRpb19mcCwgdGVtcDFfZnApOwo+ICsKPiArCXR1LmRlbGF5X3N0YXJ0X2xpbmsg PSB0dS5leHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2NsayArCj4gKwkJCQl0dS5maWxsZXJfc2l6 ZSArIHR1LmV4dHJhX2J1ZmZlcl9tYXJnaW47Cj4gKwo+ICsJdHUucmVzdWx0aW5nX3ZhbGlkX2Zw ID0KPiArCQkJZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS52YWxpZF9ib3VuZGFyeV9saW5rLCAx KTsKPiArCj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUudHVfc2l6ZV9k ZXNpcmVkLCAxKTsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBfZGl2KHR1LnJlc3VsdGluZ192YWxp ZF9mcCwgdGVtcDFfZnApOwo+ICsJdHUuVFVfcmF0aW9fZXJyX2ZwID0gdGVtcDJfZnAgLSB0dS5v cmlnaW5hbF9yYXRpb19mcDsKPiArCj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rp b24oCj4gKwkJCSh0dS5oYnBfcmVsYXRpdmVfdG9fcGNsayAtIEhCTEFOS19NQVJHSU4pLCAxKTsK PiArCXR1LmhicF90aW1lX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAxX2ZwLCB0dS5wY2xrX2ZwKTsK PiArCj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUuZGVsYXlfc3RhcnRf bGluaywgMSk7Cj4gKwl0dS5kZWxheV9zdGFydF90aW1lX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAx X2ZwLCB0dS5sY2xrX2ZwKTsKPiArCj4gKwljb21wYXJlX3Jlc3VsdF8xID0gX3R1X3BhcmFtX2Nv bXBhcmUodHUuaGJwX3RpbWVfZnAsCj4gKwkJCQkJdHUuZGVsYXlfc3RhcnRfdGltZV9mcCk7Cj4g KwlpZiAoY29tcGFyZV9yZXN1bHRfMSA9PSAyKSAvKiBpZiAoaGJwX3RpbWVfZnAgPCBkZWxheV9z dGFydF90aW1lX2ZwKSAqLwo+ICsJCXR1Lm1pbl9oYmxhbmtfdmlvbGF0ZWQgPSAxOwo+ICsKPiAr CXRlbXAxX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5sd2lkdGgsIDEpOwo+ICsJdHUu aGFjdGl2ZV90aW1lX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAxX2ZwLCB0dS5wY2xrX2ZwKTsKPiAr Cj4gKwljb21wYXJlX3Jlc3VsdF8yID0gX3R1X3BhcmFtX2NvbXBhcmUodHUuaGFjdGl2ZV90aW1l X2ZwLAo+ICsJCQkJCQl0dS5kZWxheV9zdGFydF90aW1lX2ZwKTsKPiArCWlmIChjb21wYXJlX3Jl c3VsdF8yID09IDIpCj4gKwkJdHUubWluX2hibGFua192aW9sYXRlZCA9IDE7Cj4gKwo+ICsJdHUu ZGVsYXlfc3RhcnRfdGltZV9mcCA9IDA7Cj4gKwo+ICsJLyogYnJ1dGUgZm9yY2UgKi8KPiArCj4g Kwl0dS5kZWxheV9zdGFydF9saW5rX2V4dHJhX3BpeGNsayA9IEVYVFJBX1BJWENMS19DWUNMRV9E RUxBWTsKPiArCXR1LmRpZmZfYWJzX2ZwID0gdHUucmVzdWx0aW5nX3ZhbGlkX2ZwIC0gdHUucmF0 aW9fYnlfdHVfZnA7Cj4gKwo+ICsJdGVtcCA9IGRybV9maXhwMmludCh0dS5kaWZmX2Fic19mcCk7 Cj4gKwlpZiAoIXRlbXAgJiYgdHUuZGlmZl9hYnNfZnAgPD0gMHhmZmZmKQo+ICsJCXR1LmRpZmZf YWJzX2ZwID0gMDsKPiArCj4gKwkvKiBpZihkaWZmX2FicyA8IDApIGRpZmZfYWJzICo9IC0xICov Cj4gKwlpZiAodHUuZGlmZl9hYnNfZnAgPCAwKQo+ICsJCXR1LmRpZmZfYWJzX2ZwID0gZHJtX2Zp eHBfbXVsKHR1LmRpZmZfYWJzX2ZwLCAtMSk7Cj4gKwo+ICsJdHUuYm91bmRhcnlfbW9kX2xvd2Vy X2VyciA9IDA7Cj4gKwlpZiAoKHR1LmRpZmZfYWJzX2ZwICE9IDAgJiYKPiArCQkJKCh0dS5kaWZm X2Fic19mcCA+IEJSVVRFX0ZPUkNFX1RIUkVTSE9MRF9mcCkgfHwKPiArCQkJICh0dS5ldmVuX2Rp c3RyaWJ1dGlvbl9sZWdhY3kgPT0gMCkgfHwKPiArCQkJIChEUF9CUlVURV9GT1JDRSA9PSAxKSkp IHx8Cj4gKwkJCSh0dS5taW5faGJsYW5rX3Zpb2xhdGVkID09IDEpKSB7Cj4gKwkJZG8gewo+ICsJ CQl0dS5lcnJfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKDEwMDAsIDEpOwo+ICsKPiArCQkJ dGVtcDFfZnAgPSBkcm1fZml4cF9kaXYodHUubGNsa19mcCwgdHUucGNsa19mcCk7Cj4gKwkJCXRl bXAyX2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigKPiArCQkJCQl0dS5kZWxheV9zdGFydF9s aW5rX2V4dHJhX3BpeGNsaywgMSk7Cj4gKwkJCXRlbXAxX2ZwID0gZHJtX2ZpeHBfbXVsKHRlbXAy X2ZwLCB0ZW1wMV9mcCk7Cj4gKwo+ICsJCQlpZiAodGVtcDFfZnApCj4gKwkJCQl0dS5leHRyYV9i dWZmZXJfbWFyZ2luID0KPiArCQkJCQlkcm1fZml4cDJpbnRfY2VpbCh0ZW1wMV9mcCk7Cj4gKwkJ CWVsc2UKPiArCQkJCXR1LmV4dHJhX2J1ZmZlcl9tYXJnaW4gPSAwOwo+ICsKPiArCQkJdGVtcDFf ZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1LmJwcCwgOCk7Cj4gKwkJCXRlbXAyX2ZwID0g ZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbih0dS5sd2lkdGgsIDEpOwo+ICsJCQl0ZW1wMV9mcCA9IGRy bV9maXhwX211bCh0ZW1wMl9mcCwgdGVtcDFfZnApOwo+ICsKPiArCQkJaWYgKHRlbXAxX2ZwKQo+ ICsJCQkJdHUubl9zeW1ib2xzID0gZHJtX2ZpeHAyaW50X2NlaWwodGVtcDFfZnApOwo+ICsJCQll bHNlCj4gKwkJCQl0dS5uX3N5bWJvbHMgPSAwOwo+ICsKPiArCQkJZm9yICh0dS50dV9zaXplID0g MzI7IHR1LnR1X3NpemUgPD0gNjQ7IHR1LnR1X3NpemUrKykgewo+ICsJCQkJZm9yICh0dS5pX3Vw cGVyX2JvdW5kYXJ5X2NvdW50ID0gMTsKPiArCQkJCQl0dS5pX3VwcGVyX2JvdW5kYXJ5X2NvdW50 IDw9IDE1Owo+ICsJCQkJCXR1LmlfdXBwZXJfYm91bmRhcnlfY291bnQrKykgewo+ICsJCQkJCWZv ciAodHUuaV9sb3dlcl9ib3VuZGFyeV9jb3VudCA9IDE7Cj4gKwkJCQkJCXR1LmlfbG93ZXJfYm91 bmRhcnlfY291bnQgPD0gMTU7Cj4gKwkJCQkJCXR1LmlfbG93ZXJfYm91bmRhcnlfY291bnQrKykg ewo+ICsJCQkJCQlfdHVfdmFsaWRfYm91bmRhcnlfY2FsYygmdHUpOwo+ICsJCQkJCX0KPiArCQkJ CX0KPiArCQkJfQo+ICsJCQl0dS5kZWxheV9zdGFydF9saW5rX2V4dHJhX3BpeGNsay0tOwo+ICsJ CX0gd2hpbGUgKHR1LmJvdW5kYXJ5X21vZGVyYXRpb25fZW4gIT0gdHJ1ZSAmJgo+ICsJCQl0dS5i b3VuZGFyeV9tb2RfbG93ZXJfZXJyID09IDEgJiYKPiArCQkJdHUuZGVsYXlfc3RhcnRfbGlua19l eHRyYV9waXhjbGsgIT0gMCk7Cj4gKwo+ICsJCWlmICh0dS5ib3VuZGFyeV9tb2RlcmF0aW9uX2Vu ID09IHRydWUpIHsKPiArCQkJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKAo+ICsJ CQkJCSh0dS51cHBlcl9ib3VuZGFyeV9jb3VudCAqCj4gKwkJCQkJdHUudmFsaWRfYm91bmRhcnlf bGluayArCj4gKwkJCQkJdHUubG93ZXJfYm91bmRhcnlfY291bnQgKgo+ICsJCQkJCSh0dS52YWxp ZF9ib3VuZGFyeV9saW5rIC0gMSkpLCAxKTsKPiArCQkJdGVtcDJfZnAgPSBkcm1fZml4cF9mcm9t X2ZyYWN0aW9uKAo+ICsJCQkJCSh0dS51cHBlcl9ib3VuZGFyeV9jb3VudCArCj4gKwkJCQkJdHUu bG93ZXJfYm91bmRhcnlfY291bnQpLCAxKTsKPiArCQkJdHUucmVzdWx0aW5nX3ZhbGlkX2ZwID0K PiArCQkJCQlkcm1fZml4cF9kaXYodGVtcDFfZnAsIHRlbXAyX2ZwKTsKPiArCj4gKwkJCXRlbXAx X2ZwID0gZHJtX2ZpeHBfZnJvbV9mcmFjdGlvbigKPiArCQkJCQl0dS50dV9zaXplX2Rlc2lyZWQs IDEpOwo+ICsJCQl0dS5yYXRpb19ieV90dV9mcCA9Cj4gKwkJCQlkcm1fZml4cF9tdWwodHUub3Jp Z2luYWxfcmF0aW9fZnAsIHRlbXAxX2ZwKTsKPiArCj4gKwkJCXR1LnZhbGlkX2xvd2VyX2JvdW5k YXJ5X2xpbmsgPQo+ICsJCQkJdHUudmFsaWRfYm91bmRhcnlfbGluayAtIDE7Cj4gKwo+ICsJCQl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUuYnBwLCA4KTsKPiArCQkJdGVtcDJf ZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0aW9uKHR1Lmx3aWR0aCwgMSk7Cj4gKwkJCXRlbXAxX2Zw ID0gZHJtX2ZpeHBfbXVsKHRlbXAyX2ZwLCB0ZW1wMV9mcCk7Cj4gKwkJCXRlbXAyX2ZwID0gZHJt X2ZpeHBfZGl2KHRlbXAxX2ZwLAo+ICsJCQkJCQl0dS5yZXN1bHRpbmdfdmFsaWRfZnApOwo+ICsJ CQl0dS5uX3R1cyA9IGRybV9maXhwMmludCh0ZW1wMl9mcCk7Cj4gKwo+ICsJCQl0dS50dV9zaXpl X21pbnVzMSA9IHR1LnR1X3NpemVfZGVzaXJlZCAtIDE7Cj4gKwkJCXR1LmV2ZW5fZGlzdHJpYnV0 aW9uX0JGID0gMTsKPiArCj4gKwkJCXRlbXAxX2ZwID0KPiArCQkJCWRybV9maXhwX2Zyb21fZnJh Y3Rpb24odHUudHVfc2l6ZV9kZXNpcmVkLCAxKTsKPiArCQkJdGVtcDJfZnAgPQo+ICsJCQkJZHJt X2ZpeHBfZGl2KHR1LnJlc3VsdGluZ192YWxpZF9mcCwgdGVtcDFfZnApOwo+ICsJCQl0dS5UVV9y YXRpb19lcnJfZnAgPSB0ZW1wMl9mcCAtIHR1Lm9yaWdpbmFsX3JhdGlvX2ZwOwo+ICsJCX0KPiAr CX0KPiArCj4gKwl0ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUubHdpZHRoLCAx KTsKPiArCXRlbXAyX2ZwID0gZHJtX2ZpeHBfbXVsKExDTEtfRkFTVF9TS0VXX2ZwLCB0ZW1wMV9m cCk7Cj4gKwo+ICsJaWYgKHRlbXAyX2ZwKQo+ICsJCXRlbXAgPSBkcm1fZml4cDJpbnRfY2VpbCh0 ZW1wMl9mcCk7Cj4gKwllbHNlCj4gKwkJdGVtcCA9IDA7Cj4gKwo+ICsJdGVtcDFfZnAgPSBkcm1f Zml4cF9mcm9tX2ZyYWN0aW9uKHR1Lm5sYW5lcywgMSk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhw X211bCh0dS5vcmlnaW5hbF9yYXRpb19mcCwgdGVtcDFfZnApOwo+ICsJdGVtcDFfZnAgPSBkcm1f Zml4cF9mcm9tX2ZyYWN0aW9uKHR1LmJwcCwgOCk7Cj4gKwl0ZW1wMl9mcCA9IGRybV9maXhwX2Rp dih0ZW1wMV9mcCwgdGVtcDJfZnApOwo+ICsJdGVtcDFfZnAgPSBkcm1fZml4cF9mcm9tX2ZyYWN0 aW9uKHRlbXAsIDEpOwo+ICsJdGVtcDJfZnAgPSBkcm1fZml4cF9tdWwodGVtcDFfZnAsIHRlbXAy X2ZwKTsKPiArCXRlbXAgPSBkcm1fZml4cDJpbnQodGVtcDJfZnApOwo+ICsKPiArCWlmICh0dS5h c3luY19lbikKPiArCQl0dS5kZWxheV9zdGFydF9saW5rICs9IChpbnQpdGVtcDsKPiArCj4gKwl0 ZW1wMV9mcCA9IGRybV9maXhwX2Zyb21fZnJhY3Rpb24odHUuZGVsYXlfc3RhcnRfbGluaywgMSk7 Cj4gKwl0dS5kZWxheV9zdGFydF90aW1lX2ZwID0gZHJtX2ZpeHBfZGl2KHRlbXAxX2ZwLCB0dS5s Y2xrX2ZwKTsKPiArCj4gKwkvKiBPVVRQVVRTICovCj4gKwl0dV90YWJsZS0+dmFsaWRfYm91bmRh cnlfbGluayAgICAgICA9IHR1LnZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4gKwl0dV90YWJsZS0+ZGVs YXlfc3RhcnRfbGluayAgICAgICAgICA9IHR1LmRlbGF5X3N0YXJ0X2xpbms7Cj4gKwl0dV90YWJs ZS0+Ym91bmRhcnlfbW9kZXJhdGlvbl9lbiAgICA9IHR1LmJvdW5kYXJ5X21vZGVyYXRpb25fZW47 Cj4gKwl0dV90YWJsZS0+dmFsaWRfbG93ZXJfYm91bmRhcnlfbGluayA9IHR1LnZhbGlkX2xvd2Vy X2JvdW5kYXJ5X2xpbms7Cj4gKwl0dV90YWJsZS0+dXBwZXJfYm91bmRhcnlfY291bnQgICAgICA9 IHR1LnVwcGVyX2JvdW5kYXJ5X2NvdW50Owo+ICsJdHVfdGFibGUtPmxvd2VyX2JvdW5kYXJ5X2Nv dW50ICAgICAgPSB0dS5sb3dlcl9ib3VuZGFyeV9jb3VudDsKPiArCXR1X3RhYmxlLT50dV9zaXpl X21pbnVzMSAgICAgICAgICAgID0gdHUudHVfc2l6ZV9taW51czE7Cj4gKwo+ICsJRFJNX0RFQlVH X0RQKCJUVTogdmFsaWRfYm91bmRhcnlfbGluazogJWRcbiIsIHR1X3RhYmxlLT52YWxpZF9ib3Vu ZGFyeV9saW5rKTsKPiArCURSTV9ERUJVR19EUCgiVFU6IGRlbGF5X3N0YXJ0X2xpbms6ICVkXG4i LCB0dV90YWJsZS0+ZGVsYXlfc3RhcnRfbGluayk7Cj4gKwlEUk1fREVCVUdfRFAoIlRVOiBib3Vu ZGFyeV9tb2RlcmF0aW9uX2VuOiAlZFxuIiwKPiArCQkJdHVfdGFibGUtPmJvdW5kYXJ5X21vZGVy YXRpb25fZW4pOwo+ICsJRFJNX0RFQlVHX0RQKCJUVTogdmFsaWRfbG93ZXJfYm91bmRhcnlfbGlu azogJWRcbiIsCj4gKwkJCXR1X3RhYmxlLT52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rKTsKPiAr CURSTV9ERUJVR19EUCgiVFU6IHVwcGVyX2JvdW5kYXJ5X2NvdW50OiAlZFxuIiwKPiArCQkJdHVf dGFibGUtPnVwcGVyX2JvdW5kYXJ5X2NvdW50KTsKPiArCURSTV9ERUJVR19EUCgiVFU6IGxvd2Vy X2JvdW5kYXJ5X2NvdW50OiAlZFxuIiwKPiArCQkJdHVfdGFibGUtPmxvd2VyX2JvdW5kYXJ5X2Nv dW50KTsKPiArCURSTV9ERUJVR19EUCgiVFU6IHR1X3NpemVfbWludXMxOiAlZFxuIiwgdHVfdGFi bGUtPnR1X3NpemVfbWludXMxKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9jYWxj X3R1X3BhcmFtZXRlcnMoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPiArCQlzdHJ1Y3Qg ZHBfdmNfdHVfbWFwcGluZ190YWJsZSAqdHVfdGFibGUpCj4gK3sKPiArCXN0cnVjdCBkcF90dV9j YWxjX2lucHV0IGluOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlOwo+ICsK PiArCWRybV9tb2RlID0gJmN0cmwtPnBhbmVsLT5kcF9tb2RlLmRybV9tb2RlOwo+ICsKPiArCWlu LmxjbGsgPSBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5yYXRlIC8gMTAwMDsKPiArCWluLnBjbGtf a2h6ID0gZHJtX21vZGUtPmNsb2NrOwo+ICsJaW4uaGFjdGl2ZSA9IGRybV9tb2RlLT5oZGlzcGxh eTsKPiArCWluLmhwb3JjaCA9IGRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9kZS0+aGRpc3BsYXk7 Cj4gKwlpbi5ubGFuZXMgPSBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXM7Cj4gKwlp bi5icHAgPSBjdHJsLT5wYW5lbC0+ZHBfbW9kZS5icHA7Cj4gKwlpbi5waXhlbF9lbmMgPSA0NDQ7 Cj4gKwlpbi5kc2NfZW4gPSAwOwo+ICsJaW4uYXN5bmNfZW4gPSAwOwo+ICsKPiArCV9kcF9jdHJs X2NhbGNfdHUoJmluLCB0dV90YWJsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxf c2V0dXBfdHJfdW5pdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwl1MzIg ZHBfdHUgPSAweDA7Cj4gKwl1MzIgdmFsaWRfYm91bmRhcnkgPSAweDA7Cj4gKwl1MzIgdmFsaWRf Ym91bmRhcnkyID0gMHgwOwo+ICsJc3RydWN0IGRwX3ZjX3R1X21hcHBpbmdfdGFibGUgdHVfY2Fs Y190YWJsZTsKPiArCj4gKwlkcF9jdHJsX2NhbGNfdHVfcGFyYW1ldGVycyhjdHJsLCAmdHVfY2Fs Y190YWJsZSk7Cj4gKwo+ICsJZHBfdHUgfD0gdHVfY2FsY190YWJsZS50dV9zaXplX21pbnVzMTsK PiArCXZhbGlkX2JvdW5kYXJ5IHw9IHR1X2NhbGNfdGFibGUudmFsaWRfYm91bmRhcnlfbGluazsK PiArCXZhbGlkX2JvdW5kYXJ5IHw9ICh0dV9jYWxjX3RhYmxlLmRlbGF5X3N0YXJ0X2xpbmsgPDwg MTYpOwo+ICsKPiArCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVfY2FsY190YWJsZS52YWxpZF9sb3dl cl9ib3VuZGFyeV9saW5rIDw8IDEpOwo+ICsJdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxjX3Rh YmxlLnVwcGVyX2JvdW5kYXJ5X2NvdW50IDw8IDE2KTsKPiArCXZhbGlkX2JvdW5kYXJ5MiB8PSAo dHVfY2FsY190YWJsZS5sb3dlcl9ib3VuZGFyeV9jb3VudCA8PCAyMCk7Cj4gKwo+ICsJaWYgKHR1 X2NhbGNfdGFibGUuYm91bmRhcnlfbW9kZXJhdGlvbl9lbikKPiArCQl2YWxpZF9ib3VuZGFyeTIg fD0gQklUKDApOwo+ICsKPiArCXByX2RlYnVnKCJkcF90dT0weCV4LCB2YWxpZF9ib3VuZGFyeT0w eCV4LCB2YWxpZF9ib3VuZGFyeTI9MHgleFxuIiwKPiArCQkJZHBfdHUsIHZhbGlkX2JvdW5kYXJ5 LCB2YWxpZF9ib3VuZGFyeTIpOwo+ICsKPiArCWN0cmwtPmNhdGFsb2ctPmRwX3R1ID0gZHBfdHU7 Cj4gKwljdHJsLT5jYXRhbG9nLT52YWxpZF9ib3VuZGFyeSA9IHZhbGlkX2JvdW5kYXJ5Owo+ICsJ Y3RybC0+Y2F0YWxvZy0+dmFsaWRfYm91bmRhcnkyID0gdmFsaWRfYm91bmRhcnkyOwo+ICsKPiAr CWRwX2NhdGFsb2dfY3RybF91cGRhdGVfdHJhbnNmZXJfdW5pdChjdHJsLT5jYXRhbG9nKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX3dhaXQ0dmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCF3YWl0 X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmN0cmwtPnZpZGVvX2NvbXAsCj4gKwkJCQlXQUlUX0ZP Ul9WSURFT19SRUFEWV9USU1FT1VUX0pJRkZJRVMpKSB7Cj4gKwkJRFJNX0VSUk9SKCJMaW5rIFRy YWluIHRpbWVkb3V0XG4iKTsKPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ICsJfQo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX3VwZGF0ZV92eF9weChzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluayA9IGN0 cmwtPmxpbms7Cj4gKwlpbnQgcmV0ID0gMCwgbGFuZTsKPiArCXU4IGJ1Zls0XTsKPiArCXUzMiBt YXhfbGV2ZWxfcmVhY2hlZCA9IDA7Cj4gKwl1MzIgdm9sdGFnZV9zd2luZ19sZXZlbCA9IGxpbmst PnBoeV9wYXJhbXMudl9sZXZlbDsKPiArCXUzMiBwcmVfZW1waGFzaXNfbGV2ZWwgPSBsaW5rLT5w aHlfcGFyYW1zLnBfbGV2ZWw7Cj4gKwo+ICsJcmV0ID0gZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92 eF9weChjdHJsLT5jYXRhbG9nLAo+ICsJCXZvbHRhZ2Vfc3dpbmdfbGV2ZWwsIHByZV9lbXBoYXNp c19sZXZlbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKHZvbHRh Z2Vfc3dpbmdfbGV2ZWwgPT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVgpIHsKPiArCQlwcl9k ZWJ1ZygibWF4LiB2b2x0YWdlIHN3aW5nIGxldmVsIHJlYWNoZWQgJWRcbiIsCj4gKwkJCQl2b2x0 YWdlX3N3aW5nX2xldmVsKTsKPiArCQltYXhfbGV2ZWxfcmVhY2hlZCB8PSBEUF9UUkFJTl9NQVhf U1dJTkdfUkVBQ0hFRDsKPiArCX0KPiArCj4gKwlpZiAocHJlX2VtcGhhc2lzX2xldmVsID09IERQ X1RSQUlOX1BSRV9FTVBIQVNJU19NQVgpIHsKPiArCQlwcl9kZWJ1ZygibWF4LiBwcmUtZW1waGFz aXMgbGV2ZWwgcmVhY2hlZCAlZFxuIiwKPiArCQkJCXByZV9lbXBoYXNpc19sZXZlbCk7Cj4gKwkJ bWF4X2xldmVsX3JlYWNoZWQgIHw9IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsK PiArCX0KPiArCj4gKwlwcmVfZW1waGFzaXNfbGV2ZWwgPDw9IERQX1RSQUlOX1BSRV9FTVBIQVNJ U19TSElGVDsKPiArCj4gKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKQo+ICsJCWJ1 ZltsYW5lXSA9IHZvbHRhZ2Vfc3dpbmdfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2ZWwgfCBtYXhf bGV2ZWxfcmVhY2hlZDsKPiArCj4gKwlwcl9kZWJ1Zygic2luazogcHx2PTB4JXhcbiIsIHZvbHRh Z2Vfc3dpbmdfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2ZWwpOwo+ICsJcmV0ID0gZHJtX2RwX2Rw Y2Rfd3JpdGUoY3RybC0+YXV4LT5kcm1fYXV4LCBEUF9UUkFJTklOR19MQU5FMF9TRVQsIGJ1Ziwg NCk7Cj4gKwlpZiAocmV0ID09IDQpCj4gKwkJcmV0ID0gMDsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9jdHJsX3RyYWluX3BhdHRlcm5fc2V0KHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwsCj4gKwkJdTggcGF0dGVybikKPiArewo+ICsJdTggYnVmWzRd Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcHJfZGVidWcoInNpbms6IHBhdHRlcm49JXhcbiIs IHBhdHRlcm4pOwo+ICsKPiArCWJ1ZlswXSA9IHBhdHRlcm47Cj4gKwlyZXQgPSBkcm1fZHBfZHBj ZF93cml0ZWIoY3RybC0+YXV4LT5kcm1fYXV4LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwgYnVm WzBdKTsKPiArCXJldHVybiByZXQgPT0gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJs X3JlYWRfbGlua19zdGF0dXMoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPiArCQkJCSAg ICB1OCAqbGlua19zdGF0dXMpCj4gK3sKPiArCWludCBsZW4gPSAwOwo+ICsJdTMyIGNvbnN0IG9m ZnNldCA9IERQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQgLSBEUF9MQU5FMF8xX1NUQVRVUzsK PiArCXUzMiBsaW5rX3N0YXR1c19yZWFkX21heF9yZXRyaWVzID0gMTAwOwo+ICsKPiArCXdoaWxl ICgtLWxpbmtfc3RhdHVzX3JlYWRfbWF4X3JldHJpZXMpIHsKPiArCQlsZW4gPSBkcm1fZHBfZHBj ZF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwtPmF1eC0+ZHJtX2F1eCwKPiArCQkJbGlua19zdGF0dXMp Owo+ICsJCWlmIChsZW4gIT0gRFBfTElOS19TVEFUVVNfU0laRSkgewo+ICsJCQlEUk1fRVJST1Io IkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkLCBlcnI6ICVkXG4iLCBsZW4pOwo+ICsJCQlyZXR1 cm4gbGVuOwo+ICsJCX0KPiArCj4gKwkJaWYgKCEobGlua19zdGF0dXNbb2Zmc2V0XSAmIERQX0xJ TktfU1RBVFVTX1VQREFURUQpKQo+ICsJCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4g LUVUSU1FRE9VVDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX2xpbmtfdHJhaW5fMShz dHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwlpbnQgdHJpZXMsIG9sZF92X2xl dmVsLCByZXQgPSAwOwo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cj4g KwlpbnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPiArCj4gKwlkcF9jYXRhbG9nX2N0cmxf c3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCAwKTsKPiArCj4gKwlyZXQgPSBkcF9jYXRhbG9nX2N0 cmxfc2V0X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQo Y3RybCwgRFBfVFJBSU5JTkdfUEFUVEVSTl8xIHwKPiArCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElT QUJMRSk7Cj4gKwlyZXQgPSBkcF9jdHJsX3VwZGF0ZV92eF9weChjdHJsKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwl0cmllcyA9IDA7Cj4gKwlvbGRfdl9sZXZlbCA9IGN0 cmwtPmxpbmstPnBoeV9wYXJhbXMudl9sZXZlbDsKPiArCWZvciAodHJpZXMgPSAwOyB0cmllcyA8 IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykgewo+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2Nr X3JlY292ZXJ5X2RlbGF5KGN0cmwtPnBhbmVsLT5kcGNkKTsKPiArCj4gKwkJcmV0ID0gZHBfY3Ry bF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwsIGxpbmtfc3RhdHVzKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlyZXR1cm4gcmV0Owo+ICsKPiArCQlpZiAoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtf c3RhdHVzLAo+ICsJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXMpKSB7Cj4gKwkJ CXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQlpZiAoY3RybC0+bGluay0+cGh5X3BhcmFtcy52 X2xldmVsID09IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFYKSB7Cj4gKwkJCURSTV9FUlJPUl9S QVRFTElNSVRFRCgibWF4IHZfbGV2ZWwgcmVhY2hlZFxuIik7Cj4gKwkJCXJldHVybiAtRUFHQUlO Owo+ICsJCX0KPiArCj4gKwkJaWYgKG9sZF92X2xldmVsICE9IGN0cmwtPmxpbmstPnBoeV9wYXJh bXMudl9sZXZlbCkgewo+ICsJCQl0cmllcyA9IDA7Cj4gKwkJCW9sZF92X2xldmVsID0gY3RybC0+ bGluay0+cGh5X3BhcmFtcy52X2xldmVsOwo+ICsJCX0KPiArCj4gKwkJcHJfZGVidWcoImNsb2Nr IHJlY292ZXJ5IG5vdCBkb25lLCBhZGp1c3RpbmcgdnggcHhcbiIpOwo+ICsKPiArCQlkcF9saW5r X2FkanVzdF9sZXZlbHMoY3RybC0+bGluaywgbGlua19zdGF0dXMpOwo+ICsJCXJldCA9IGRwX2N0 cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4g Kwl9Cj4gKwo+ICsJRFJNX0VSUk9SKCJtYXggdHJpZXMgcmVhY2hlZFxuIik7Cj4gKwlyZXR1cm4g LUVUSU1FRE9VVDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX2xpbmtfcmF0ZV9kb3du X3NoaWZ0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWludCByZXQgPSAw Owo+ICsKPiArCXN3aXRjaCAoY3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSkgewo+ICsJY2Fz ZSA4MTAwMDA6Cj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSA9IDU0MDAwMDsKPiAr CQlicmVhazsKPiArCWNhc2UgNTQwMDAwOgo+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLnJh dGUgPSAyNzAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI3MDAwMDoKPiArCWNhc2UgMTYyMDAw Ogo+ICsJZGVmYXVsdDoKPiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5yYXRlID0gMTYyMDAw Owo+ICsJCWJyZWFrOwo+ICsJfTsKPiArCj4gKwlwcl9kZWJ1ZygibmV3IHJhdGU9MHgleFxuIiwg Y3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9jbGVhcl90cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQo Y3RybCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPiArCWRybV9kcF9saW5rX3RyYWlu X2NoYW5uZWxfZXFfZGVsYXkoY3RybC0+cGFuZWwtPmRwY2QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRwX2N0cmxfbGlua190cmFpbmluZ18yKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwp Cj4gK3sKPiArCWludCB0cmllcyA9IDAsIHJldCA9IDA7Cj4gKwljaGFyIHBhdHRlcm47Cj4gKwlp bnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktf U1RBVFVTX1NJWkVdOwo+ICsKPiArCWRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKGN0cmwtPmNh dGFsb2csIDApOwo+ICsKPiArCWlmIChkcm1fZHBfdHBzM19zdXBwb3J0ZWQoY3RybC0+cGFuZWwt PmRwY2QpKQo+ICsJCXBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzM7Cj4gKwllbHNlCj4g KwkJcGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKPiArCj4gKwlyZXQgPSBkcF9jdHJs X3VwZGF0ZV92eF9weChjdHJsKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwlyZXQgPSBkcF9jYXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgcGF0dGVy bik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZHBfY3RybF90cmFpbl9w YXR0ZXJuX3NldChjdHJsLCBwYXR0ZXJuIHwgRFBfUkVDT1ZFUkVEX0NMT0NLX09VVF9FTik7Cj4g Kwo+ICsJZm9yICh0cmllcyA9IDA7IHRyaWVzIDw9IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykg ewo+ICsJCWRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY3RybC0+cGFuZWwtPmRw Y2QpOwo+ICsKPiArCQlyZXQgPSBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoY3RybCwgbGlua19z dGF0dXMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCWlmIChkcm1f ZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywKPiArCQkJY3RybC0+bGluay0+bGlua19wYXJh bXMubnVtX2xhbmVzKSkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJZHBfbGlua19hZGp1c3Rf bGV2ZWxzKGN0cmwtPmxpbmssIGxpbmtfc3RhdHVzKTsKPiArCQlyZXQgPSBkcF9jdHJsX3VwZGF0 ZV92eF9weChjdHJsKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCX0K PiArCj4gKwlyZXR1cm4gLUVUSU1FRE9VVDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJs X2xpbmtfdHJhaW4oc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJaW50IHJl dCA9IDA7Cj4gKwl1OCBlbmNvZGluZyA9IERQX1NFVF9BTlNJXzhCMTBCOwo+ICsJc3RydWN0IGRy bV9kcF9saW5rIGxpbmtfaW5mbyA9IHswfTsKPiArCj4gKwljdHJsLT5saW5rLT5waHlfcGFyYW1z LnBfbGV2ZWwgPSAwOwo+ICsJY3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsID0gMDsKPiAr Cj4gKwlkcF9jdHJsX2NvbmZpZ19jdHJsKGN0cmwpOwo+ICsKPiArCXJldCA9IGRybV9kcF9saW5r X3Byb2JlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgJmxpbmtfaW5mbyk7Cj4gKwlpZiAocmV0IDwgMCkg ewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJldHJpZXZlIGxpbmsgY2FwYWJpbGl0aWVzLiBy ZXQ9JWRcbiIsIHJldCk7Cj4gKwkJZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwoY3RybC0+Y2F0 YWxvZywgMCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fZHBfbGlua19jb25m aWd1cmUoY3RybC0+YXV4LT5kcm1fYXV4LCAmbGlua19pbmZvKTsKPiArCWRybV9kcF9kcGNkX3dy aXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfTUFJTl9MSU5LX0NIQU5ORUxfQ09ESU5HX1NFVCwK PiArCQkJCSZlbmNvZGluZywgMSk7Cj4gKwo+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluXzEo Y3RybCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJsaW5rIHRyYWluaW5nICMxIGZh aWxlZC4gcmV0PSVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCS8qIHBy aW50IHN1Y2Nlc3MgaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0IG9mIHVzZXIgaW5pdGlhdGVkIGFj dGlvbiAqLwo+ICsJRFJNX0RFQlVHX0RQKCJsaW5rIHRyYWluaW5nICMxIHN1Y2Nlc3NmdWxcbiIp Owo+ICsKPiArCXJldCA9IGRwX2N0cmxfbGlua190cmFpbmluZ18yKGN0cmwpOwo+ICsJaWYgKHJl dCkgewo+ICsJCURSTV9FUlJPUigibGluayB0cmFpbmluZyAjMiBmYWlsZWQuIHJldD0lZFxuIiwg cmV0KTsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwkvKiBwcmludCBzdWNjZXNzIGluZm8g YXMgdGhpcyBpcyBhIHJlc3VsdCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gKi8KPiArCURSTV9E RUJVR19EUCgibGluayB0cmFpbmluZyAjMiBzdWNjZXNzZnVsXG4iKTsKPiArCj4gK2VuZDoKPiAr CWRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKGN0cmwtPmNhdGFsb2csIDApOwo+ICsKPiArCWRw X2N0cmxfY2xlYXJfdHJhaW5pbmdfcGF0dGVybihjdHJsKTsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9zZXR1cF9tYWluX2xpbmsoc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybCwgYm9vbCB0cmFpbikKPiArewo+ICsJYm9vbCBtYWlubGlua19yZWFkeSA9 IGZhbHNlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZHBfY2F0YWxvZ19jdHJsX21haW5saW5r X2N0cmwoY3RybC0+Y2F0YWxvZywgdHJ1ZSk7Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19wc21fY29u ZmlnKGN0cmwtPmxpbmssICZjdHJsLT5wYW5lbC0+bGlua19pbmZvLCBmYWxzZSk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVz dCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJaWYgKCF0cmFpbikKPiArCQlnb3RvIHNlbmRfdmlkZW87Cj4gKwo+ICsJLyoKPiArCSAqIEFz IHBhcnQgb2YgcHJldmlvdXMgY2FsbHMsIERQIGNvbnRyb2xsZXIgc3RhdGUgbWlnaHQgaGF2ZQo+ ICsJICogdHJhbnNpdGlvbmVkIHRvIFBVU0hfSURMRS4gSW4gb3JkZXIgdG8gc3RhcnQgdHJhbnNt aXR0aW5nIGEgbGluawo+ICsJICogdHJhaW5pbmcgcGF0dGVybiwgd2UgaGF2ZSB0byBmaXJzdCBk byBhIERQIHNvZnR3YXJlIHJlc2V0Lgo+ICsJICovCj4gKwlkcF9jYXRhbG9nX2N0cmxfcmVzZXQo Y3RybC0+Y2F0YWxvZyk7Cj4gKwo+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluKGN0cmwpOwo+ ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArc2VuZF92aWRlbzoKPiArCS8qCj4g KwkgKiBTZXQgdXAgdHJhbnNmZXIgdW5pdCB2YWx1ZXMgYW5kIHNldCBjb250cm9sbGVyIHN0YXRl IHRvIHNlbmQKPiArCSAqIHZpZGVvLgo+ICsJICovCj4gKwlkcF9jdHJsX3NldHVwX3RyX3VuaXQo Y3RybCk7Cj4gKwlkcF9jYXRhbG9nX2N0cmxfc3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCBEUF9T VEFURV9DVFJMX1NFTkRfVklERU8pOwo+ICsKPiArCXJldCA9IGRwX2N0cmxfd2FpdDR2aWRlb19y ZWFkeShjdHJsKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwltYWlubGlu a19yZWFkeSA9IGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19yZWFkeShjdHJsLT5jYXRhbG9nKTsK PiArCURSTV9ERUJVR19EUCgibWFpbmxpbmsgJXNcbiIsIG1haW5saW5rX3JlYWR5ID8gIlJFQURZ IiA6ICJOT1QgUkVBRFkiKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPiAr CQkJCSAgIGNoYXIgKm5hbWUsIHUzMiByYXRlKQo+ICt7Cj4gKwl1MzIgbnVtID0gY3RybC0+cGFy c2VyLT5tcFtEUF9DVFJMX1BNXS5udW1fY2xrOwo+ICsJc3RydWN0IGRzc19jbGsgKmNmZyA9IGN0 cmwtPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0uY2xrX2NvbmZpZzsKPiArCj4gKwl3aGlsZSAobnVt ICYmIHN0cmNtcChjZmctPmNsa19uYW1lLCBuYW1lKSkgewo+ICsJCW51bS0tOwo+ICsJCWNmZysr Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19EUCgic2V0dGluZyByYXRlPSVkIG9uIGNsaz0lc1xu IiwgcmF0ZSwgbmFtZSk7Cj4gKwo+ICsJaWYgKG51bSkKPiArCQljZmctPnJhdGUgPSByYXRlOwo+ ICsJZWxzZQo+ICsJCURSTV9FUlJPUigiJXMgY2xvY2sgY291bGQgbm90IGJlIHNldCB3aXRoIHJh dGUgJWRcbiIsIG5hbWUsIHJhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2N0cmxfZW5h YmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4g KwlpbnQgcmV0ID0gMDsKPiArCj4gKwlkcF9wb3dlcl9zZXRfbGlua19jbGtfcGFyZW50KGN0cmwt PnBvd2VyKTsKPiArCWRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50KGN0cmwtPnBvd2VyKTsK PiArCj4gKwlkcF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwgY3Ry bC0+bGluay0+bGlua19wYXJhbXMucmF0ZSk7Cj4gKwo+ICsJZHBfY3RybF9zZXRfY2xvY2tfcmF0 ZShjdHJsLCAiY3RybF9waXhlbF9jbGsiLCBjdHJsLT5kcF9jdHJsLnBpeGVsX3JhdGUpOwo+ICsK PiArCXJldCA9IGRwX3Bvd2VyX2Nsa19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NUUkxfUE0sIHRy dWUpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fRVJST1IoIlVuYWJsZWQgdG8gc3RhcnQgbGluayBj bG9ja3MuIHJldD0lZFxuIiwgcmV0KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtp bnQgZHBfY3RybF9ob3N0X2luaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwsIGJvb2wgZmxpcCkK PiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCj4gKwlpZiAoIWRwX2N0 cmwpIHsKPiArCQlEUk1fRVJST1IoIkludmFsaWQgaW5wdXQgZGF0YVxuIik7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKPiArCj4gKwljdHJsLT5kcF9jdHJsLm9yaWVu dGF0aW9uID0gZmxpcDsKPiArCj4gKwlkcF9jYXRhbG9nX2N0cmxfdXNiX3Jlc2V0KGN0cmwtPmNh dGFsb2csIGZsaXApOwo+ICsJZHBfY2F0YWxvZ19jdHJsX3BoeV9yZXNldChjdHJsLT5jYXRhbG9n KTsKPiArCWRwX2NhdGFsb2dfY3RybF9lbmFibGVfaXJxKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfY3RybF9ob3N0X2RlaW5p dCgpIC0gVW5pbml0aWFsaXplIERQIGNvbnRyb2xsZXIKPiArICogQGN0cmw6IERpc3BsYXkgUG9y dCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBQZXJmb3JtIHJlcXVpcmVkIHN0ZXBzIHRvIHVuaW5p dGlhbGl6ZSBEUCBjb250cm9sbGVyCj4gKyAqIGFuZCBpdHMgcmVzb3VyY2VzLgo+ICsgKi8KPiAr dm9pZCBkcF9jdHJsX2hvc3RfZGVpbml0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ICt7Cj4g KwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsKPiArCWlmICghZHBfY3RybCkgewo+ ICsJCURSTV9FUlJPUigiSW52YWxpZCBpbnB1dCBkYXRhXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2 YXRlLCBkcF9jdHJsKTsKPiArCj4gKwlkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycShjdHJsLT5j YXRhbG9nLCBmYWxzZSk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJIb3N0IGRlaW5pdGlhbGl6ZWQg c3VjY2Vzc2Z1bGx5XG4iKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZHBfY3RybF91c2VfZml4 ZWRfbnZpZChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwl1OCAqZHBjZCA9 IGN0cmwtPnBhbmVsLT5kcGNkOwo+ICsKPiArCS8qCj4gKwkgKiBGb3IgYmV0dGVyIGludGVyb3Ag ZXhwZXJpZW5jZSwgdXNlZCBhIGZpeGVkIE5WSUQ9MHg4MDAwCj4gKwkgKiB3aGVuZXZlciBjb25u ZWN0ZWQgdG8gYSBWR0EgZG9uZ2xlIGRvd25zdHJlYW0uCj4gKwkgKi8KPiArCWlmIChkcGNkW0RQ X0RPV05TVFJFQU1QT1JUX1BSRVNFTlRdICYgRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKSB7Cj4g KwkJdTggdHlwZSA9IGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJgo+ICsJCQlEUF9E V05fU1RSTV9QT1JUX1RZUEVfTUFTSzsKPiArCQlpZiAodHlwZSA9PSBEUF9EV05fU1RSTV9QT1JU X1RZUEVfQU5BTE9HKQo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFs c2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9saW5rX21haW50ZW5hbmNlKHN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWRw X2N0cmxfcHVzaF9pZGxlKCZjdHJsLT5kcF9jdHJsKTsKPiArCWRwX2N0cmxfcmVzZXQoJmN0cmwt PmRwX2N0cmwpOwo+ICsKPiArCWN0cmwtPmRwX2N0cmwucGl4ZWxfcmF0ZSA9IGN0cmwtPnBhbmVs LT5kcF9tb2RlLmRybV9tb2RlLmNsb2NrOwo+ICsKPiArCWRvIHsKPiArCQlpZiAocmV0ID09IC1F QUdBSU4pIHsKPiArCQkJLyogdHJ5IHdpdGggbG93ZXIgbGluayByYXRlICovCj4gKwkJCWRwX2N0 cmxfbGlua19yYXRlX2Rvd25fc2hpZnQoY3RybCk7Cj4gKwo+ICsJCQlkcF9jYXRhbG9nX2N0cmxf bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4gKwkJfQo+ICsKPiArCQlkcF9j YXRhbG9nX2N0cmxfcGh5X2xhbmVfY2ZnKGN0cmwtPmNhdGFsb2csCj4gKwkJCWN0cmwtPmRwX2N0 cmwub3JpZW50YXRpb24sIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLm51bV9sYW5lcyk7Cj4gKwo+ ICsJCS8qCj4gKwkJICogRGlzYWJsZSBhbmQgcmUtZW5hYmxlIHRoZSBtYWlubGluayBjbG9jayBz aW5jZSB0aGUKPiArCQkgKiBsaW5rIGNsb2NrIG1pZ2h0IGhhdmUgYmVlbiBhZGp1c3RlZCBhcyBw YXJ0IG9mIHRoZQo+ICsJCSAqIGxpbmsgbWFpbnRlbmFuY2UuCj4gKwkJICovCj4gKwkJcmV0ID0g ZHBfcG93ZXJfY2xrX2VuYWJsZShjdHJsLT5wb3dlciwgRFBfQ1RSTF9QTSwgZmFsc2UpOwo+ICsJ CWlmIChyZXQpIHsKPiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZGlzYWJsZSBjbG9ja3MuIHJl dD0lZFxuIiwgcmV0KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBkcF9jdHJs X2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1f RVJST1IoIkZhaWxlZCB0byBlbmFibGUgbWFpbmxpbmsgY2xrcy4gcmV0PSVkXG4iLCByZXQpOwo+ ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJh bXMoY3RybCk7Cj4gKwo+ICsJCWRwX2NhdGFsb2dfY3RybF9jb25maWdfbXNhKGN0cmwtPmNhdGFs b2csCj4gKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLnJhdGUsCj4gKwkJCWN0cmwtPmRwX2N0 cmwucGl4ZWxfcmF0ZSwgZHBfY3RybF91c2VfZml4ZWRfbnZpZChjdHJsKSk7Cj4gKwo+ICsJCXJl aW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwo+ICsKPiArCQlyZXQgPSBkcF9jdHJs X3NldHVwX21haW5fbGluayhjdHJsLCB0cnVlKTsKPiArCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlO KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3By b2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucGh5 X3Rlc3RfcGF0dGVybl9zZWwpIHsKPiArCQlEUk1fREVCVUdfRFAoIm5vIHRlc3QgcGF0dGVybiBz ZWxlY3RlZCBieSBzaW5rXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY3RybF9w dXNoX2lkbGUoJmN0cmwtPmRwX2N0cmwpOwo+ICsJLyoKPiArCSAqIFRoZSBnbG9iYWwgcmVzZXQg d2lsbCBuZWVkIERQIGxpbmsgcmVsYXRlZCBjbG9ja3MgdG8gYmUKPiArCSAqIHJ1bm5pbmcuIEFk ZCB0aGUgZ2xvYmFsIHJlc2V0IGp1c3QgYmVmb3JlIGRpc2FibGluZyB0aGUKPiArCSAqIGxpbmsg Y2xvY2tzIGFuZCBjb3JlIGNsb2Nrcy4KPiArCSAqLwo+ICsJZHBfY3RybF9yZXNldCgmY3RybC0+ ZHBfY3RybCk7Cj4gKwlkcF9jdHJsX29mZigmY3RybC0+ZHBfY3RybCk7Cj4gKwo+ICsJcmV0ID0g ZHBfY3RybF9vbigmY3RybC0+ZHBfY3RybCk7Cj4gKwlpZiAocmV0KQo+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGVuYWJsZSBEUCBjb250cm9sbGVyXG4iKTsKPiArCj4gK30KPiArCj4gK3N0YXRp YyBib29sIGRwX2N0cmxfc2VuZF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcF9jdHJsX3ByaXZh dGUgKmN0cmwpCj4gK3sKPiArCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwo+ICsJdTMyIHBhdHRlcm5f c2VudCA9IDB4MDsKPiArCXUzMiBwYXR0ZXJuX3JlcXVlc3RlZCA9IGN0cmwtPmxpbmstPnBoeV9w YXJhbXMucGh5X3Rlc3RfcGF0dGVybl9zZWw7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJyZXF1ZXN0 OiAweCV4XG4iLCBwYXR0ZXJuX3JlcXVlc3RlZCk7Cj4gKwo+ICsJaWYgKGRwX2NhdGFsb2dfY3Ry bF91cGRhdGVfdnhfcHgoY3RybC0+Y2F0YWxvZywKPiArCQkJY3RybC0+bGluay0+cGh5X3BhcmFt cy52X2xldmVsLAo+ICsJCQljdHJsLT5saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpKSB7Cj4gKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHYvcCBsZXZlbHNcbiIpOwo+ICsJCXJldHVybiBmYWxz ZTsKPiArCX0KPiArCWRwX2NhdGFsb2dfY3RybF9zZW5kX3BoeV9wYXR0ZXJuKGN0cmwtPmNhdGFs b2csIHBhdHRlcm5fcmVxdWVzdGVkKTsKPiArCWRwX2xpbmtfc2VuZF90ZXN0X3Jlc3BvbnNlKGN0 cmwtPmxpbmspOwo+ICsKPiArCXBhdHRlcm5fc2VudCA9IGRwX2NhdGFsb2dfY3RybF9yZWFkX3Bo eV9wYXR0ZXJuKGN0cmwtPmNhdGFsb2cpOwo+ICsKPiArCXN3aXRjaCAocGF0dGVybl9zZW50KSB7 Cj4gKwljYXNlIE1SX0xJTktfVFJBSU5JTkcxOgo+ICsJCXN1Y2Nlc3MgPSBwYXR0ZXJuX3JlcXVl c3RlZCA9PQo+ICsJCQkJRFBfTElOS19RVUFMX1BBVFRFUk5fRDEwXzI7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIE1SX0xJTktfU1lNQk9MX0VSTToKPiArCQlzdWNjZXNzID0gKHBhdHRlcm5fcmVxdWVz dGVkID09Cj4gKwkJCQlEUF9MSU5LX1FVQUxfUEFUVEVSTl9FUlJPUl9SQVRFKQo+ICsJCQl8fCAo cGF0dGVybl9yZXF1ZXN0ZWQgPT0KPiArCQkJCURQX0xJTktfUVVBTF9QQVRURVJOX0hCUjJfRVlF KTsKPiArCQlicmVhazsKPiArCWNhc2UgTVJfTElOS19QUkJTNzoKPiArCQlzdWNjZXNzID0gcGF0 dGVybl9yZXF1ZXN0ZWQgPT0gRFBfTElOS19RVUFMX1BBVFRFUk5fUFJCUzc7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIE1SX0xJTktfQ1VTVE9NODA6Cj4gKwkJc3VjY2VzcyA9IHBhdHRlcm5fcmVxdWVz dGVkID09Cj4gKwkJCQlEUF9MSU5LX1FVQUxfUEFUVEVSTl84MEJJVF9DVVNUT007Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXN1Y2Nlc3MgPSBmYWxzZTsKPiArCX0KPiArCj4gKwlEUk1f REVCVUdfRFAoIiVzOiB0ZXN0LT4weCV4XG4iLCBzdWNjZXNzID8gInN1Y2Nlc3MiIDogImZhaWxl ZCIsCj4gKwkJCQkJCXBhdHRlcm5fcmVxdWVzdGVkKTsKPiArCXJldHVybiBzdWNjZXNzOwo+ICt9 Cj4gKwo+ICt2b2lkIGRwX2N0cmxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCXUzMiBz aW5rX3JlcXVlc3QgPSAweDA7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJRFJNX0VSUk9S KCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJY3RybCA9IGNv bnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKPiAr CXNpbmtfcmVxdWVzdCA9IGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdDsKPiArCj4gKwlpZiAoc2lu a19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pIHsKPiArCQlEUk1fREVC VUdfRFAoIlBIWV9URVNUX1BBVFRFUk4gcmVxdWVzdFxuIik7Cj4gKwkJZHBfY3RybF9wcm9jZXNz X3BoeV90ZXN0X3JlcXVlc3QoY3RybCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHNpbmtfcmVxdWVzdCAm IERQX0xJTktfU1RBVFVTX1VQREFURUQpCj4gKwkJZHBfY3RybF9saW5rX21haW50ZW5hbmNlKGN0 cmwpOwo+ICsKPiArCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHsK PiArCQlkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShjdHJsLT5saW5rKTsKPiArCQlkcF9jdHJs X2xpbmtfbWFpbnRlbmFuY2UoY3RybCk7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgZHBfY3RybF9y ZXNldChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybDsKPiArCj4gKwlpZiAoIWRwX2N0cmwpIHsKPiArCQlEUk1fRVJST1IoImludmFs aWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5l cl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKPiArCWRwX2Nh dGFsb2dfY3RybF9yZXNldChjdHJsLT5jYXRhbG9nKTsKPiArfQo+ICsKPiAraW50IGRwX2N0cmxf b24oc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsJdTMyIHJhdGUgPSAwOwo+ICsJdTMyIGxpbmtf dHJhaW5fbWF4X3JldHJpZXMgPSAxMDA7Cj4gKwl1MzIgY29uc3QgcGh5X2N0c19waXhlbF9jbGtf a2h6ID0gMTQ4NTAwOwo+ICsKPiArCWlmICghZHBfY3RybCkgewo+ICsJCXJjID0gLUVJTlZBTDsK PiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmws IHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+ICsKPiArCWF0b21pY19zZXQoJmN0 cmwtPmRwX2N0cmwuYWJvcnRlZCwgMCk7Cj4gKwlyYXRlID0gY3RybC0+cGFuZWwtPmxpbmtfaW5m by5yYXRlOwo+ICsKPiArCWRwX3Bvd2VyX2Nsa19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NPUkVf UE0sIHRydWUpOwo+ICsJZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcoY3RybC0+Y2F0YWxvZywg dHJ1ZSk7Cj4gKwo+ICsJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElO S19QSFlfVEVTVF9QQVRURVJOKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJ1c2luZyBwaHkgdGVzdCBs aW5rIHBhcmFtZXRlcnNcbiIpOwo+ICsJCWlmICghY3RybC0+cGFuZWwtPmRwX21vZGUuZHJtX21v ZGUuY2xvY2spCj4gKwkJCWN0cmwtPmRwX2N0cmwucGl4ZWxfcmF0ZSA9IHBoeV9jdHNfcGl4ZWxf Y2xrX2toejsKPiArCX0gZWxzZSB7Cj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSA9 IHJhdGU7Cj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMubnVtX2xhbmVzID0KPiArCQkJY3Ry bC0+cGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXM7Cj4gKwkJY3RybC0+ZHBfY3RybC5waXhlbF9y YXRlID0gY3RybC0+cGFuZWwtPmRwX21vZGUuZHJtX21vZGUuY2xvY2s7Cj4gKwl9Cj4gKwo+ICsJ RFJNX0RFQlVHX0RQKCJyYXRlPSVkLCBudW1fbGFuZXM9JWQsIHBpeGVsX3JhdGU9JWRcbiIsCj4g KwkJY3RybC0+bGluay0+bGlua19wYXJhbXMucmF0ZSwKPiArCQljdHJsLT5saW5rLT5saW5rX3Bh cmFtcy5udW1fbGFuZXMsIGN0cmwtPmRwX2N0cmwucGl4ZWxfcmF0ZSk7Cj4gKwo+ICsJZHBfY2F0 YWxvZ19jdHJsX3BoeV9sYW5lX2NmZyhjdHJsLT5jYXRhbG9nLAo+ICsJCQljdHJsLT5kcF9jdHJs Lm9yaWVudGF0aW9uLCBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXMpOwo+ICsKPiAr CXJjID0gZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwpOwo+ICsJaWYgKHJjKQo+ ICsJCWdvdG8gZW5kOwo+ICsKPiArCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXAp Owo+ICsKPiArCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJhbXMoY3RybCk7Cj4gKwo+ICsJ d2hpbGUgKC0tbGlua190cmFpbl9tYXhfcmV0cmllcyAmJiAhYXRvbWljX3JlYWQoJmN0cmwtPmRw X2N0cmwuYWJvcnRlZCkpIHsKPiArCQlkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21zYShjdHJsLT5j YXRhbG9nLAo+ICsJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5yYXRlLAo+ICsJCQljdHJsLT5k cF9jdHJsLnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2ZpeGVkX252aWQoY3RybCkpOwo+ICsKPiAr CQlyYyA9IGRwX2N0cmxfc2V0dXBfbWFpbl9saW5rKGN0cmwsIHRydWUpOwo+ICsJCWlmICghcmMp Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQkvKiB0cnkgd2l0aCBsb3dlciBsaW5rIHJhdGUgKi8KPiAr CQlkcF9jdHJsX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KGN0cmwpOwo+ICsKPiArCQlkcF9jYXRhbG9n X2N0cmxfbWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4gKwo+ICsJCXJjID0g ZHBfcG93ZXJfY2xrX2VuYWJsZShjdHJsLT5wb3dlciwgRFBfQ1RSTF9QTSwgZmFsc2UpOwo+ICsJ CWlmIChyYykgewo+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBkaXNhYmxlIGNsb2Nrcy4gcmV0 PSVkXG4iLCByYyk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQkvKiBodyByZWNvbW1lbmRlZCBk ZWxheSBiZWZvcmUgcmUtZW5hYmxpbmcgY2xvY2tzICovCj4gKwkJbXNsZWVwKDIwKTsKPiArCj4g KwkJZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwpOwo+ICsJfQo+ICsKPiArCWlm IChjdHJsLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVS TikKPiArCQlkcF9jdHJsX3NlbmRfcGh5X3Rlc3RfcGF0dGVybihjdHJsKTsKPiArCj4gKwlEUk1f REVCVUdfRFAoIkVuZC1cbiIpOwo+ICsKPiArZW5kOgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ ICt2b2lkIGRwX2N0cmxfb2ZmKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsKPiArCWlmICghZHBfY3RybCkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9w cml2YXRlLCBkcF9jdHJsKTsKPiArCj4gKwlkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfY3RybChj dHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4gKwlkcF9jYXRhbG9nX2N0cmxfcmVzZXQoY3RybC0+Y2F0 YWxvZyk7Cj4gKwlkcF9wb3dlcl9jbGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DVFJMX1BNLCBm YWxzZSk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJEUCBvZmYgZG9uZVxuIik7Cj4gK30KPiArCj4g K3ZvaWQgZHBfY3RybF9pc3Ioc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKQo+ICsJCXJldHVy bjsKPiArCj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3By aXZhdGUsIGRwX2N0cmwpOwo+ICsKPiArCWRwX2NhdGFsb2dfY3RybF9nZXRfaW50ZXJydXB0KGN0 cmwtPmNhdGFsb2cpOwo+ICsKPiArCWlmIChjdHJsLT5jYXRhbG9nLT5pc3IgJiBEUF9DVFJMX0lO VFJfUkVBRFlfRk9SX1ZJREVPKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJkcF92aWRlb19yZWFkeVxu Iik7Cj4gKwkJY29tcGxldGUoJmN0cmwtPnZpZGVvX2NvbXApOwo+ICsJfQo+ICsKPiArCWlmIChj dHJsLT5jYXRhbG9nLT5pc3IgJiBEUF9DVFJMX0lOVFJfSURMRV9QQVRURVJOX1NFTlQpIHsKPiAr CQlEUk1fREVCVUdfRFAoImlkbGVfcGF0dGVybnNfc2VudFxuIik7Cj4gKwkJY29tcGxldGUoJmN0 cmwtPmlkbGVfY29tcCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0cnVjdCBkcF9jdHJsICpkcF9jdHJs X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9saW5rICpsaW5rLCBzdHJ1Y3QgZHBf cGFuZWwgKnBhbmVsLAo+ICsJCQlzdHJ1Y3QgZHBfYXV4ICphdXgsIHN0cnVjdCBkcF9wb3dlciAq cG93ZXIsIHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2csCj4gKwkJCXN0cnVjdCBkcF9w YXJzZXIgKnBhcnNlcikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmw7Cj4gKwlzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybDsKPiArCj4gKwlpZiAoIWRl diB8fCAhcGFuZWwgfHwgIWF1eCB8fAo+ICsJICAgICFsaW5rIHx8ICFjYXRhbG9nKSB7Cj4gKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290 byBlcnJvcjsKPiArCX0KPiArCj4gKwljdHJsID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpj dHJsKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWN0cmwpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4g KwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVf Y29tcCk7Cj4gKwlpbml0X2NvbXBsZXRpb24oJmN0cmwtPnZpZGVvX2NvbXApOwo+ICsJbXV0ZXhf aW5pdCgmY3RybC0+cHVzaF9pZGxlX211dGV4KTsKPiArCj4gKwkvKiBpbiBwYXJhbWV0ZXJzICov Cj4gKwljdHJsLT5wYXJzZXIgICA9IHBhcnNlcjsKPiArCWN0cmwtPnBhbmVsICAgID0gcGFuZWw7 Cj4gKwljdHJsLT5wb3dlciAgICA9IHBvd2VyOwo+ICsJY3RybC0+YXV4ICAgICAgPSBhdXg7Cj4g KwljdHJsLT5saW5rICAgICA9IGxpbms7Cj4gKwljdHJsLT5jYXRhbG9nICA9IGNhdGFsb2c7Cj4g KwljdHJsLT5kZXYgICAgICA9IGRldjsKPiArCj4gKwlkcF9jdHJsID0gJmN0cmwtPmRwX2N0cmw7 Cj4gKwo+ICsJcmV0dXJuIGRwX2N0cmw7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIEVSUl9QVFIocmMp Owo+ICt9Cj4gKwo+ICt2b2lkIGRwX2N0cmxfcHV0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsKPiArCWlmICghZHBfY3Ry bCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKPiArCj4gKwltdXRleF9kZXN0cm95KCZjdHJs LT5wdXNoX2lkbGVfbXV0ZXgpOwo+ICsKPiArCWRldm1fa2ZyZWUoY3RybC0+ZGV2LCBjdHJsKTsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5kMTRjODA3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfY3RybC5oCj4gQEAgLTAsMCArMSwzNiBAQAo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9EUF9DVFJMX0hfCj4gKyNkZWZpbmUgX0RQX0NUUkxfSF8KPiAr Cj4gKyNpbmNsdWRlICJkcF9hdXguaCIKPiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4gKyNpbmNs dWRlICJkcF9saW5rLmgiCj4gKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKPiArI2luY2x1ZGUgImRw X3Bvd2VyLmgiCj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4gKwo+ICtzdHJ1Y3QgZHBfY3Ry bCB7Cj4gKwlib29sIG9yaWVudGF0aW9uOwo+ICsJYXRvbWljX3QgYWJvcnRlZDsKPiArCXUzMiBw aXhlbF9yYXRlOwo+ICt9Owo+ICsKPiAraW50IGRwX2N0cmxfaG9zdF9pbml0KHN0cnVjdCBkcF9j dHJsICpkcF9jdHJsLCBib29sIGZsaXApOwo+ICt2b2lkIGRwX2N0cmxfaG9zdF9kZWluaXQoc3Ry dWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICtpbnQgZHBfY3RybF9vbihzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCk7Cj4gK3ZvaWQgZHBfY3RybF9vZmYoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ ICt2b2lkIGRwX2N0cmxfcHVzaF9pZGxlKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiArdm9p ZCBkcF9jdHJsX2Fib3J0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiArdm9pZCBkcF9jdHJs X2lzcihzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4gK3ZvaWQgZHBfY3RybF9yZXNldChzdHJ1 Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4gK3ZvaWQgZHBfY3RybF9oYW5kbGVfc2lua19yZXF1ZXN0 KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiArc3RydWN0IGRwX2N0cmwgKmRwX2N0cmxfZ2V0 KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2xpbmsgKmxpbmssIHN0cnVjdCBkcF9wYW5l bCAqcGFuZWwsCj4gKwkJCXN0cnVjdCBkcF9hdXggKmF1eCwgc3RydWN0IGRwX3Bvd2VyICpwb3dl ciwgc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY2F0YWxvZywKPiArCQkJc3RydWN0IGRwX3BhcnNl ciAqcGFyc2VyKTsKPiArdm9pZCBkcF9jdHJsX3B1dChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7 Cj4gKwo+ICsjZW5kaWYgLyogX0RQX0NUUkxfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rp c3BsYXkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMWIwNjgyYQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku Ywo+IEBAIC0wLDAgKzEsOTQxIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFRoZSBMaW51eCBG b3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJf Zm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KPiArCj4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3VhY2Nlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2NvbXBvbmVudC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+Cj4gKwo+ICsj aW5jbHVkZSAibXNtX2Rydi5oIgo+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4gKyNpbmNsdWRl ICJkcF9wYXJzZXIuaCIKPiArI2luY2x1ZGUgImRwX3Bvd2VyLmgiCj4gKyNpbmNsdWRlICJkcF9j YXRhbG9nLmgiCj4gKyNpbmNsdWRlICJkcF9hdXguaCIKPiArI2luY2x1ZGUgImRwX2xpbmsuaCIK PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4gKyNpbmNsdWRlICJkcF9jdHJsLmgiCj4gKyNpbmNs dWRlICJkcF9kaXNwbGF5LmgiCj4gKyNpbmNsdWRlICJkcF9kcm0uaCIKPiArCj4gK3N0YXRpYyBz dHJ1Y3QgbXNtX2RwICpnX2RwX2Rpc3BsYXk7CgpBcyBtZW50aW9uZWQgaW4gdjEgcmV2aWV3LCBw bGVhc2UgcmVtb3ZlIHRoaXMKCj4gKyNkZWZpbmUgSFBEX1NUUklOR19TSVpFIDMwCgpUaGlzIGlz IHVudXNlZAoKPiArCj4gK3N0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgewo+ICsJY2hhciAqbmFt ZTsKPiArCWludCBpcnE7Cj4gKwo+ICsJLyogc3RhdGUgdmFyaWFibGVzICovCj4gKwlib29sIGNv cmVfaW5pdGlhbGl6ZWQ7Cj4gKwlib29sIHBvd2VyX29uOwo+ICsJYm9vbCBocGRfaXJxX29uOwo+ ICsJYm9vbCBhdWRpb19zdXBwb3J0ZWQ7Cj4gKwo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldjsKPiArCXN0cnVjdCBkZW50cnkgKnJvb3Q7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBub3Rp ZmljYXRpb25fY29tcDsKPiArCj4gKwlzdHJ1Y3QgZHBfdXNicGQgICAqdXNicGQ7Cj4gKwlzdHJ1 Y3QgZHBfcGFyc2VyICAqcGFyc2VyOwo+ICsJc3RydWN0IGRwX3Bvd2VyICAgKnBvd2VyOwo+ICsJ c3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2c7Cj4gKwlzdHJ1Y3QgZHBfYXV4ICAgICAqYXV4Owo+ ICsJc3RydWN0IGRwX2xpbmsgICAgKmxpbms7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWwgICAqcGFuZWw7 Cj4gKwlzdHJ1Y3QgZHBfY3RybCAgICAqY3RybDsKPiArCj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2Ig dXNicGRfY2I7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIGRwX21vZGU7Cj4gKwlzdHJ1Y3Qg bXNtX2RwIGRwX2Rpc3BsYXk7Cj4gKwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgZHBfZHRfbWF0Y2hbXSA9IHsKPiArCXsuY29tcGF0aWJsZSA9ICJxY29tLGRw LWRpc3BsYXkifSwKPiArCXt9Cj4gK307Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZHBfZGlz cGxheV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxh eV9wcml2YXRlICpkcCA9IGRldl9pZDsKPiArCj4gKwlpZiAoIWRwKSB7Cj4gKwkJRFJNX0VSUk9S KCJpbnZhbGlkIGRhdGFcbiIpOwo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCX0KPiArCj4gKwkv KiBEUCBjb250cm9sbGVyIGlzciAqLwo+ICsJZHBfY3RybF9pc3IoZHAtPmN0cmwpOwo+ICsKPiAr CS8qIERQIGF1eCBpc3IgKi8KPiArCWRwX2F1eF9pc3IoZHAtPmF1eCk7Cj4gKwo+ICsJcmV0dXJu IElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJICAgdm9pZCAqZGF0 YSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRw Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2 aWNlKGRldik7Cj4gKwo+ICsJaWYgKCFkZXYgfHwgIXBkZXYgfHwgIW1hc3Rlcikgewo+ICsJCURS TV9FUlJPUigiaW52YWxpZCBwYXJhbShzKSwgZGV2ICVwSywgcGRldiAlcEssIG1hc3RlciAlcEtc biIsCj4gKwkJCQlkZXYsIHBkZXYsIG1hc3Rlcik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdv dG8gZW5kOwo+ICsJfQo+ICsKPiArCWRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+ICsJ ZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCWlmICghZHJtIHx8ICFkcCkgewo+ ICsJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbShzKSwgZHJtICVwSywgZHAgJXBLXG4iLAo+ICsJ CQkJZHJtLCBkcCk7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsK PiArCWRwLT5kcF9kaXNwbGF5LmRybV9kZXYgPSBkcm07Cj4gKwlwcml2ID0gZHJtLT5kZXZfcHJp dmF0ZTsKPiArCXByaXYtPmRwID0gJihkcC0+ZHBfZGlzcGxheSk7Cj4gKwo+ICsJcmMgPSBkcC0+ cGFyc2VyLT5wYXJzZShkcC0+cGFyc2VyKTsKPiArCWlmIChyYykgewo+ICsJCURSTV9FUlJPUigi ZGV2aWNlIHRyZWUgcGFyc2luZyBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsK PiArCXJjID0gZHBfYXV4X3JlZ2lzdGVyKGRwLT5hdXgpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJN X0VSUk9SKCJEUk0gRFAgQVVYIHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4gKwkJZ290byBlbmQ7Cj4g Kwl9Cj4gKwo+ICsJcmMgPSBkcF9wb3dlcl9jbGllbnRfaW5pdChkcC0+cG93ZXIpOwo+ICsJaWYg KHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZFxuIik7Cj4g KwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZSAqbWFzdGVyLAo+ICsJCQkgICAgICB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBk ZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYg PSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCWlmICghZGV2IHx8ICFwZGV2KSB7Cj4gKwkJRFJN X0VSUk9SKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJ ZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlEUk1f RVJST1IoIkludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJKHZv aWQpZHBfcG93ZXJfY2xpZW50X2RlaW5pdChkcC0+cG93ZXIpOwo+ICsJKHZvaWQpZHBfYXV4X3Vu cmVnaXN0ZXIoZHAtPmF1eCk7Cj4gKwlwcml2LT5kcCA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkcF9kaXNwbGF5X2NvbXBfb3BzID0gewo+ICsJ LmJpbmQgPSBkcF9kaXNwbGF5X2JpbmQsCj4gKwkudW5iaW5kID0gZHBfZGlzcGxheV91bmJpbmQs Cj4gK307Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9kaXNwbGF5X2lzX2RzX2JyaWRnZShzdHJ1Y3Qg ZHBfcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gKHBhbmVsLT5kcGNkW0RQX0RPV05TVFJF QU1QT1JUX1BSRVNFTlRdICYKPiArCQlEUF9EV05fU1RSTV9QT1JUX1BSRVNFTlQpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgYm9vbCBkcF9kaXNwbGF5X2lzX3NpbmtfY291bnRfemVybyhzdHJ1Y3QgZHBf ZGlzcGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJcmV0dXJuIGRwX2Rpc3BsYXlfaXNfZHNfYnJp ZGdlKGRwLT5wYW5lbCkgJiYKPiArCQkoZHAtPmxpbmstPnNpbmtfY291bnQgPT0gMCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfc2VuZF9ocGRfZXZlbnQoc3RydWN0IG1zbV9k cCAqZHBfZGlzcGxheSkKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsKPiArCWRwID0gY29udGFpbmVy X29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ ICsJaWYgKCFkcCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwljb25uZWN0b3IgPSBkcC0+ZHBfZGlzcGxheS5jb25uZWN0b3I7 Cj4gKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoY29ubmVjdG9yLT5kZXYpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUgKmRwLAo+ICsJCQkJCSAgICBib29sIGhwZCkKCkkgc3BlbnQgYSBiaXQg b2YgdGltZSB0cnlpbmcgdG8gdW5yYXZlbCB0aGlzIGluIHYxLCBidXQgeW91IGRpZG4ndCByZXNw b25kIHRvCm15IGNvbW1lbnRzIG9yIGNoYW5nZSB0aGlzIGNvZGUuIENvdWxkIHlvdSBwbGVhc2Ug ZG8gb25lIG9yIHRoZSBvdGhlcj8KCgo+ICt7Cj4gKwlpZiAoKGhwZCAmJiBkcC0+ZHBfZGlzcGxh eS5pc19jb25uZWN0ZWQpIHx8Cj4gKwkJCSghaHBkICYmICFkcC0+ZHBfZGlzcGxheS5pc19jb25u ZWN0ZWQpKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJIUEQgYWxyZWFkeSAlc1xuIiwgKGhwZCA/ICJv biIgOiAib2ZmIikpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8qIHJlc2V0IHZpZGVv IHBhdHRlcm4gZmxhZyBvbiBkaXNjb25uZWN0ICovCj4gKwlpZiAoIWhwZCkKPiArCQlkcC0+cGFu ZWwtPnZpZGVvX3Rlc3QgPSBmYWxzZTsKPiArCj4gKwlkcC0+ZHBfZGlzcGxheS5pc19jb25uZWN0 ZWQgPSBocGQ7Cj4gKwlyZWluaXRfY29tcGxldGlvbigmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsK PiArCWRwX2Rpc3BsYXlfc2VuZF9ocGRfZXZlbnQoJmRwLT5kcF9kaXNwbGF5KTsKPiArCj4gKwlp ZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZHAtPm5vdGlmaWNhdGlvbl9jb21wLCBI WiAqIDIpKSB7Cj4gKwkJcHJfd2FybigiJXMgdGltZW91dFxuIiwgaHBkID8gImNvbm5lY3QiIDog ImRpc2Nvbm5lY3QiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goc3Ry dWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZWRpZCAqZWRpZDsKPiArCj4gKwlkcF9hdXhfaW5pdChkcC0+YXV4LCBkcC0+cGFyc2VyLT5h dXhfY2ZnKTsKPiArCj4gKwlpZiAoZHAtPmxpbmstPnBzbV9lbmFibGVkKQo+ICsJCWdvdG8gbm90 aWZ5Owo+ICsKPiArCXJjID0gZHBfcGFuZWxfcmVhZF9zaW5rX2NhcHMoZHAtPnBhbmVsLCBkcC0+ ZHBfZGlzcGxheS5jb25uZWN0b3IpOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gbm90aWZ5Owo+ICsK PiArCWRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKPiArCj4gKwlpZiAoZHBfZGlz cGxheV9pc19zaW5rX2NvdW50X3plcm8oZHApKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJubyBkb3du c3RyZWFtIGRldmljZXMgY29ubmVjdGVkXG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290 byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZWRpZCA9IGRwLT5wYW5lbC0+ZWRpZDsKPiArCj4gKwlkcC0+ YXVkaW9fc3VwcG9ydGVkID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwo+ICsKPiAr CWRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3QoZHAtPnBhbmVsKTsKPiArCj4gKwlkcC0+ZHBf ZGlzcGxheS5tYXhfcGNsa19raHogPSBkcC0+cGFyc2VyLT5tYXhfcGNsa19raHo7Cj4gK25vdGlm eToKPiArCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCB0cnVlKTsKPiArCj4g K2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9o b3N0X2luaXQoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4gK3sKPiArCWJvb2wgZmxp cCA9IGZhbHNlOwo+ICsKPiArCWlmIChkcC0+Y29yZV9pbml0aWFsaXplZCkgewo+ICsJCURSTV9E RUJVR19EUCgiRFAgY29yZSBhbHJlYWR5IGluaXRpYWxpemVkXG4iKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJaWYgKGRwLT51c2JwZC0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0My KQo+ICsJCWZsaXAgPSB0cnVlOwo+ICsKPiArCWRwX3Bvd2VyX2luaXQoZHAtPnBvd2VyLCBmbGlw KTsKPiArCWRwX2N0cmxfaG9zdF9pbml0KGRwLT5jdHJsLCBmbGlwKTsKPiArCWVuYWJsZV9pcnEo ZHAtPmlycSk7Cj4gKwlkcC0+Y29yZV9pbml0aWFsaXplZCA9IHRydWU7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaG9zdF9kZWluaXQoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHApCj4gK3sKPiArCWlmICghZHAtPmNvcmVfaW5pdGlhbGl6ZWQpIHsKPiArCQlEUk1fREVC VUdfRFAoIkRQIGNvcmUgYWxyZWFkeSBvZmZcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g KwlkcF9jdHJsX2hvc3RfZGVpbml0KGRwLT5jdHJsKTsKPiArCWRwX2F1eF9kZWluaXQoZHAtPmF1 eCk7Cj4gKwlkcF9wb3dlcl9kZWluaXQoZHAtPnBvd2VyKTsKPiArCWRpc2FibGVfaXJxKGRwLT5p cnEpOwo+ICsJZHAtPmNvcmVfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9sb3coc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHApCj4gK3sKPiArCS8qIGNhbmNlbCBhbnkgcGVuZGluZyByZXF1ZXN0ICovCj4gKwlkcF9j dHJsX2Fib3J0KGRwLT5jdHJsKTsKPiArCj4gKwlkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNh dGlvbihkcCwgZmFsc2UpOwo+ICsKPiArCWRwX2F1eF9kZWluaXQoZHAtPmF1eCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91c2JwZF9jb25maWd1cmVfY2Ioc3RydWN0IGRldmlj ZSAqZGV2KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkZXYpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgZGV2XG4i KTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlEUk1fRVJST1IoIm5vIGRy aXZlciBkYXRhIGZvdW5kXG4iKTsKPiArCQlyYyA9IC1FTk9ERVY7Cj4gKwkJZ290byBlbmQ7Cj4g Kwl9Cj4gKwo+ICsJZHBfZGlzcGxheV9ob3N0X2luaXQoZHApOwo+ICsKPiArCWlmIChkcC0+dXNi cGQtPmhwZF9oaWdoKQo+ICsJCWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7Cj4gK2Vu ZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9jbGVh bihzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJZHBfY3RybF9wdXNoX2lk bGUoZHAtPmN0cmwpOwo+ICsJZHBfY3RybF9vZmYoZHAtPmN0cmwpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGRwX2Rpc3BsYXlfdXNicGRfZGlzY29ubmVjdF9jYihzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsK PiArCj4gKwlpZiAoIWRldikgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBkZXZcbiIpOwo+ICsJ CXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlkcCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ICsJaWYgKCFkcCkgewo+ICsJCURSTV9FUlJPUigibm8gZHJpdmVyIGRh dGEgZm91bmRcbiIpOwo+ICsJCXJjID0gLUVOT0RFVjsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiAr Cj4gKwkvKiBjYW5jZWwgYW55IHBlbmRpbmcgcmVxdWVzdCAqLwo+ICsJZHBfY3RybF9hYm9ydChk cC0+Y3RybCk7Cj4gKwo+ICsJcmMgPSBkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihk cCwgZmFsc2UpOwo+ICsKPiArCS8qIGlmIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCwgcmVzZXQgcHNt X2VuYWJsZWQgZmxhZyAqLwo+ICsJaWYgKCFkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19kb25lKQo+ ICsJCWRwLT5saW5rLT5wc21fZW5hYmxlZCA9IGZhbHNlOwo+ICsKPiArCWlmICgocmMgPCAwKSAm JiBkcC0+cG93ZXJfb24pCj4gKwkJZHBfZGlzcGxheV9jbGVhbihkcCk7Cj4gKwo+ICsJZHBfZGlz cGxheV9ob3N0X2RlaW5pdChkcCk7Cj4gK2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZHBfZGlzcGxheV9oYW5kbGVfdmlkZW9fcmVxdWVzdChzdHJ1Y3QgZHBfZGlz cGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJaWYgKGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBE UF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgewo+ICsJCS8qIGZvcmNlIGRpc2Nvbm5lY3QgZm9s bG93ZWQgYnkgY29ubmVjdCAqLwo+ICsJCWRwLT51c2JwZC0+Y29ubmVjdChkcC0+dXNicGQsIGZh bHNlKTsKPiArCQlkcC0+cGFuZWwtPnZpZGVvX3Rlc3QgPSB0cnVlOwo+ICsJCWRwLT51c2JwZC0+ Y29ubmVjdChkcC0+dXNicGQsIHRydWUpOwo+ICsJCWRwX2xpbmtfc2VuZF90ZXN0X3Jlc3BvbnNl KGRwLT5saW5rKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X2hhbmRs ZV9ocGRfaXJxKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+ICt7Cj4gKwlpZiAoZHAt PmxpbmstPnNpbmtfcmVxdWVzdCAmIERTX1BPUlRfU1RBVFVTX0NIQU5HRUQpIHsKPiArCQlkcF9k aXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihkcCwgZmFsc2UpOwo+ICsKPiArCQlpZiAoZHBf ZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oZHApKSB7Cj4gKwkJCURSTV9ERUJVR19EUCgic2lu ayBjb3VudCBpcyB6ZXJvLCBub3RoaW5nIHRvIGRvXG4iKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJ fQo+ICsKPiArCQlyZXR1cm4gZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9oaWdoKGRwKTsKPiArCX0K PiArCj4gKwlkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVlc3QoZHAtPmN0cmwpOwo+ICsKPiArCWRw X2Rpc3BsYXlfaGFuZGxlX3ZpZGVvX3JlcXVlc3QoZHApOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfdXNicGRfYXR0ZW50aW9uX2NiKHN0cnVjdCBk ZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwOwo+ICsKPiArCWlmICghZGV2KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGRl dlxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHAgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlEUk1fRVJST1IoIm5vIGRyaXZlciBkYXRh IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlpZiAoZHAtPnVz YnBkLT5ocGRfaXJxKSB7Cj4gKwkJZHAtPmhwZF9pcnFfb24gPSB0cnVlOwo+ICsKPiArCQlyYyA9 IGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKPiArCQkvKiBjaGVjayBmb3IgYW55 IHRlc3QgcmVxdWVzdCBpc3N1ZWQgYnkgc2luayAqLwo+ICsJCWlmICghcmMpCj4gKwkJCWRwX2Rp c3BsYXlfaGFuZGxlX2hwZF9pcnEoZHApOwo+ICsKPiArCQlkcC0+aHBkX2lycV9vbiA9IGZhbHNl Owo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCWlmICghZHAtPnVzYnBkLT5ocGRfaGlnaCkg ewo+ICsJCWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfbG93KGRwKTsKPiArCQlnb3RvIGVuZDsKPiAr CX0KPiArCj4gKwlpZiAoZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9uZSkKPiArCQlkcF9kaXNw bGF5X3Byb2Nlc3NfaHBkX2hpZ2goZHApOwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfZGVpbml0X3N1Yl9tb2R1bGVzKHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUgKmRwKQo+ICt7Cj4gKwlkcF9jdHJsX3B1dChkcC0+Y3RybCk7Cj4gKwlk cF9saW5rX3B1dChkcC0+bGluayk7Cj4gKwlkcF9wYW5lbF9wdXQoZHAtPnBhbmVsKTsKPiArCWRw X2F1eF9wdXQoZHAtPmF1eCk7Cj4gKwlkcF9wb3dlcl9wdXQoZHAtPnBvd2VyKTsKPiArCWRwX2Nh dGFsb2dfcHV0KGRwLT5jYXRhbG9nKTsKPiArCWRwX3BhcnNlcl9wdXQoZHAtPnBhcnNlcik7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHBfaW5pdF9zdWJfbW9kdWxlcyhzdHJ1Y3QgZHBfZGlzcGxh eV9wcml2YXRlICpkcCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZkcC0+cGRldi0+ZGV2Owo+ICsJc3RydWN0IGRwX3VzYnBkX2NiICpjYiA9ICZkcC0+dXNi cGRfY2I7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfaW4gcGFuZWxfaW4gPSB7Cj4gKwkJLmRldiA9IGRl diwKPiArCX07Cj4gKwo+ICsJLyogQ2FsbGJhY2sgQVBJcyB1c2VkIGZvciBjYWJsZSBzdGF0dXMg Y2hhbmdlIGV2ZW50ICovCj4gKwljYi0+Y29uZmlndXJlICA9IGRwX2Rpc3BsYXlfdXNicGRfY29u ZmlndXJlX2NiOwo+ICsJY2ItPmRpc2Nvbm5lY3QgPSBkcF9kaXNwbGF5X3VzYnBkX2Rpc2Nvbm5l Y3RfY2I7Cj4gKwljYi0+YXR0ZW50aW9uICA9IGRwX2Rpc3BsYXlfdXNicGRfYXR0ZW50aW9uX2Ni Owo+ICsKPiArCWRwLT5wYXJzZXIgPSBkcF9wYXJzZXJfZ2V0KGRwLT5wZGV2KTsKPiArCWlmIChJ U19FUlIoZHAtPnBhcnNlcikpIHsKPiArCQlyYyA9IFBUUl9FUlIoZHAtPnBhcnNlcik7Cj4gKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXIsIHJjID0gJWRcbiIsIHJjKTsK PiArCQlkcC0+cGFyc2VyID0gTlVMTDsKPiArCQlnb3RvIGVycm9yX3BhcnNlcjsKPiArCX0KPiAr Cj4gKwlkcC0+Y2F0YWxvZyA9IGRwX2NhdGFsb2dfZ2V0KGRldiwgJmRwLT5wYXJzZXItPmlvKTsK PiArCWlmIChJU19FUlIoZHAtPmNhdGFsb2cpKSB7Cj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5jYXRh bG9nKTsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGNhdGFsb2csIHJjID0g JWRcbiIsIHJjKTsKPiArCQlkcC0+Y2F0YWxvZyA9IE5VTEw7Cj4gKwkJZ290byBlcnJvcl9jYXRh bG9nOwo+ICsJfQo+ICsKPiArCWRwLT5wb3dlciA9IGRwX3Bvd2VyX2dldChkcC0+cGFyc2VyKTsK PiArCWlmIChJU19FUlIoZHAtPnBvd2VyKSkgewo+ICsJCXJjID0gUFRSX0VSUihkcC0+cG93ZXIp Owo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgcG93ZXIsIHJjID0gJWRcbiIs IHJjKTsKPiArCQlkcC0+cG93ZXIgPSBOVUxMOwo+ICsJCWdvdG8gZXJyb3JfcG93ZXI7Cj4gKwl9 Cj4gKwo+ICsJZHAtPmF1eCA9IGRwX2F1eF9nZXQoZGV2LCAmZHAtPmNhdGFsb2ctPmF1eCwgZHAt PnBhcnNlci0+YXV4X2NmZyk7Cj4gKwlpZiAoSVNfRVJSKGRwLT5hdXgpKSB7Cj4gKwkJcmMgPSBQ VFJfRVJSKGRwLT5hdXgpOwo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgYXV4 LCByYyA9ICVkXG4iLCByYyk7Cj4gKwkJZHAtPmF1eCA9IE5VTEw7Cj4gKwkJZ290byBlcnJvcl9h dXg7Cj4gKwl9Cj4gKwo+ICsJZHAtPmxpbmsgPSBkcF9saW5rX2dldChkZXYsIGRwLT5hdXgpOwo+ ICsJaWYgKElTX0VSUihkcC0+bGluaykpIHsKPiArCQlyYyA9IFBUUl9FUlIoZHAtPmxpbmspOwo+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgbGluaywgcmMgPSAlZFxuIiwgcmMp Owo+ICsJCWRwLT5saW5rID0gTlVMTDsKPiArCQlnb3RvIGVycm9yX2xpbms7Cj4gKwl9Cj4gKwo+ ICsJcGFuZWxfaW4uYXV4ID0gZHAtPmF1eDsKPiArCXBhbmVsX2luLmNhdGFsb2cgPSAmZHAtPmNh dGFsb2ctPnBhbmVsOwo+ICsJcGFuZWxfaW4ubGluayA9IGRwLT5saW5rOwo+ICsKPiArCWRwLT5w YW5lbCA9IGRwX3BhbmVsX2dldCgmcGFuZWxfaW4pOwo+ICsJaWYgKElTX0VSUihkcC0+cGFuZWwp KSB7Cj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5wYW5lbCk7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gaW5pdGlhbGl6ZSBwYW5lbCwgcmMgPSAlZFxuIiwgcmMpOwo+ICsJCWRwLT5wYW5lbCA9IE5V TEw7Cj4gKwkJZ290byBlcnJvcl9wYW5lbDsKPiArCX0KPiArCj4gKwlkcC0+Y3RybCA9IGRwX2N0 cmxfZ2V0KGRldiwgZHAtPmxpbmssIGRwLT5wYW5lbCwgZHAtPmF1eCwKPiArCQkJICAgICAgIGRw LT5wb3dlciwgJmRwLT5jYXRhbG9nLT5jdHJsLCBkcC0+cGFyc2VyKTsKPiArCWlmIChJU19FUlIo ZHAtPmN0cmwpKSB7Cj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5jdHJsKTsKPiArCQlEUk1fRVJST1Io ImZhaWxlZCB0byBpbml0aWFsaXplIGN0cmwsIHJjID0gJWRcbiIsIHJjKTsKPiArCQlkcC0+Y3Ry bCA9IE5VTEw7Cj4gKwkJZ290byBlcnJvcl9jdHJsOwo+ICsJfQo+ICsKPiArCXJldHVybiByYzsK PiArZXJyb3JfY3RybDoKPiArCWRwX3BhbmVsX3B1dChkcC0+cGFuZWwpOwo+ICtlcnJvcl9wYW5l bDoKPiArCWRwX2xpbmtfcHV0KGRwLT5saW5rKTsKPiArZXJyb3JfbGluazoKPiArCWRwX2F1eF9w dXQoZHAtPmF1eCk7Cj4gK2Vycm9yX2F1eDoKPiArCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOwo+ ICtlcnJvcl9wb3dlcjoKPiArCWRwX2NhdGFsb2dfcHV0KGRwLT5jYXRhbG9nKTsKPiArZXJyb3Jf Y2F0YWxvZzoKPiArCWRwX3BhcnNlcl9wdXQoZHAtPnBhcnNlcik7Cj4gK2Vycm9yX3BhcnNlcjoK PiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3NldF9tb2Rl KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHBfZGlzcGxh eV9tb2RlICptb2RlKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSAqZHA7Cj4gKwo+ICsJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7Cj4gKwo+ICsJZHAtPnBhbmVsLT5kcF9t b2RlLmRybV9tb2RlID0gbW9kZS0+ZHJtX21vZGU7Cj4gKwlkcC0+cGFuZWwtPmRwX21vZGUuYnBw ID0gbW9kZS0+YnBwOwo+ICsJZHAtPnBhbmVsLT5kcF9tb2RlLmNhcGFiaWxpdGllcyA9IG1vZGUt PmNhcGFiaWxpdGllczsKPiArCWRwX3BhbmVsX2luaXRfcGFuZWxfaW5mbyhkcC0+cGFuZWwpOwo+ ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJlcGFyZShz dHJ1Y3QgbXNtX2RwICpkcCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KClJlbW92ZSBwbGVhc2UK Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rp c3BsYXkpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRl ICpkcDsKPiArCj4gKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlz cGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKPiArCj4gKwlpZiAoZHAtPnBvd2VyX29uKSB7Cj4g KwkJRFJNX0RFQlVHX0RQKCJMaW5rIGFscmVhZHkgc2V0dXAsIHJldHVyblxuIik7Cj4gKwkJcmV0 dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZHBfYXV4X2luaXQoZHAtPmF1eCwgZHAtPnBhcnNlci0+YXV4 X2NmZyk7Cj4gKwo+ICsJcmMgPSBkcF9jdHJsX29uKGRwLT5jdHJsKTsKPiArCWlmICghcmMpCj4g KwkJZHAtPnBvd2VyX29uID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV9wb3N0X2VuYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5 KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Cj4gKwo+ICsJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSwgZHBfZGlzcGxheSk7Cj4gKwo+ICsJY29tcGxldGVfYWxsKCZkcC0+bm90aWZpY2F0 aW9uX2NvbXApOwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3Bs YXlfcHJlX2Rpc2FibGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkKPiArewo+ICsJaW50IHJj ID0gMDsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ICsKPiArCWRwID0gY29u dGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3Bs YXkpOwo+ICsKPiArCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19kb25lICYmIChkcC0+dXNi cGQtPmhwZF9oaWdoIHx8Cj4gKwkJZHAtPnVzYnBkLT5mb3JjZWRfZGlzY29ubmVjdCkpCj4gKwkJ ZHBfbGlua19wc21fY29uZmlnKGRwLT5saW5rLCAmZHAtPnBhbmVsLT5saW5rX2luZm8sIHRydWUp Owo+ICsKPiArCWRwX2N0cmxfcHVzaF9pZGxlKGRwLT5jdHJsKTsKPiArCXJldHVybiByYzsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG1zbV9kcCAqZHBf ZGlzcGxheSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwOwo+ICsKPiArCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ICsKPiArCWlmICghZHAtPnBvd2VyX29uIHx8 ICFkcC0+Y29yZV9pbml0aWFsaXplZCkKPiArCQlnb3RvIGVycm9yOwo+ICsKPiArCWRwX2N0cmxf b2ZmKGRwLT5jdHJsKTsKPiArCj4gKwlkcC0+cG93ZXJfb24gPSBmYWxzZTsKPiArCj4gKwljb21w bGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIHJj Owo+ICt9Cj4gKwo+ICtpbnQgZHBfZGlzcGxheV9yZXF1ZXN0X2lycShzdHJ1Y3QgbXNtX2RwICpk cF9kaXNwbGF5KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZh bGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkcCA9IGNv bnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNw bGF5KTsKPiArCj4gKwlkcC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZHAtPnBkZXYtPmRl di5vZl9ub2RlLCAwKTsKPiArCWlmIChkcC0+aXJxIDwgMCkgewo+ICsJCXJjID0gZHAtPmlycTsK PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgcmMpOwo+ICsJCXJldHVy biByYzsKPiArCX0KPiArCj4gKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEoJmRwLT5wZGV2LT5kZXYs IGRwLT5pcnEsIGRwX2Rpc3BsYXlfaXJxLAo+ICsJCUlSUUZfVFJJR0dFUl9ISUdILCAiZHBfZGlz cGxheV9pc3IiLCBkcCk7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gcmVxdWVzdCBJUlEldTogJWRcbiIsCj4gKwkJCQlkcC0+aXJxLCByYyk7Cj4gKwkJcmV0dXJu IHJjOwo+ICsJfQo+ICsJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91bnByZXBhcmUoc3RydWN0IG1zbV9kcCAq ZHApCj4gK3sKPiArCXJldHVybiAwOwo+ICt9CgpQbGVhc2UgcmVtb3ZlCgo+ICsKPiAraW50IGRw X2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNtX2RwICpkcCwgdTMyIG1vZGVfcGNsa19r aHopCj4gK3sKPiArCWNvbnN0IHUzMiBudW1fY29tcG9uZW50cyA9IDMsIGRlZmF1bHRfYnBwID0g MjQ7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5Owo+ICsJc3RydWN0 IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4gKwl1MzIgbW9kZV9yYXRlX2toeiA9IDAsIHN1cHBv cnRlZF9yYXRlX2toeiA9IDAsIG1vZGVfYnBwID0gMDsKPiArCj4gKwlpZiAoIWRwIHx8ICFtb2Rl X3BjbGtfa2h6IHx8ICFkcC0+Y29ubmVjdG9yKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBh cmFtc1xuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHBfZGlzcGxheSA9 IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7 Cj4gKwlsaW5rX2luZm8gPSAmZHBfZGlzcGxheS0+cGFuZWwtPmxpbmtfaW5mbzsKPiArCj4gKwlt b2RlX2JwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgKiBudW1fY29tcG9uZW50 czsKPiArCWlmICghbW9kZV9icHApCj4gKwkJbW9kZV9icHAgPSBkZWZhdWx0X2JwcDsKPiArCj4g Kwltb2RlX2JwcCA9IGRwX3BhbmVsX2dldF9tb2RlX2JwcChkcF9kaXNwbGF5LT5wYW5lbCwKPiAr CQkJbW9kZV9icHAsIG1vZGVfcGNsa19raHopOwo+ICsKPiArCW1vZGVfcmF0ZV9raHogPSBtb2Rl X3BjbGtfa2h6ICogbW9kZV9icHA7Cj4gKwlzdXBwb3J0ZWRfcmF0ZV9raHogPSBsaW5rX2luZm8t Pm51bV9sYW5lcyAqIGxpbmtfaW5mby0+cmF0ZSAqIDg7Cj4gKwo+ICsJaWYgKG1vZGVfcmF0ZV9r aHogPiBzdXBwb3J0ZWRfcmF0ZV9raHopCj4gKwkJcmV0dXJuIE1PREVfQkFEOwo+ICsKPiArCXJl dHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtpbnQgZHBfZGlzcGxheV9nZXRfbW9kZXMoc3RydWN0 IG1zbV9kcCAqZHAsCj4gKwkJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5Owo+ICsJaW50IHJldCA9 IDA7Cj4gKwo+ICsJaWYgKCFkcCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIp Owo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2Yo ZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ICsKPiArCXJldCA9 IGRwX3BhbmVsX2dldF9tb2RlcyhkcF9kaXNwbGF5LT5wYW5lbCwKPiArCQlkcC0+Y29ubmVjdG9y LCBkcF9tb2RlKTsKPiArCWlmIChkcF9tb2RlLT5kcm1fbW9kZS5jbG9jaykKPiArCQlkcC0+bWF4 X3BjbGtfa2h6ID0gZHBfbW9kZS0+ZHJtX21vZGUuY2xvY2s7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtib29sIGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9fdGVzdChzdHJ1Y3QgbXNtX2RwICpk cCkKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKPiArCj4g KwlpZiAoIWRwKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0 cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ICsKPiArCWlmIChkcF9kaXNw bGF5LT5wYW5lbC0+dmlkZW9fdGVzdCkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4g ZmFsc2U7Cj4gK30KPiArCj4gK2ludCBkcF9kaXNwbGF5X2dldF90ZXN0X2JwcChzdHJ1Y3QgbXNt X2RwICpkcCkKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsK PiArCj4gKwlpZiAoIWRwKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwg c3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7Cj4gKwo+ICsJcmV0dXJuIGRw X2xpbmtfYml0X2RlcHRoX3RvX2JwcCgKPiArCQlkcF9kaXNwbGF5LT5saW5rLT50ZXN0X3ZpZGVv LnRlc3RfYml0X2RlcHRoKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlz dHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPiArCj4gKwlpZiAoIXBkZXYgfHwgIXBkZXYt PmRldi5vZl9ub2RlKSB7Cj4gKwkJRFJNX0VSUk9SKCJwZGV2IG5vdCBmb3VuZFxuIik7Cj4gKwkJ cmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJZHAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkcCkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlpbml0X2NvbXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Cj4g Kwo+ICsJZHAtPnBkZXYgPSBwZGV2Owo+ICsJZHAtPm5hbWUgPSAiZHJtX2RwIjsKPiArCj4gKwly YyA9IGRwX2luaXRfc3ViX21vZHVsZXMoZHApOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9S KCJpbml0IHN1YiBtb2R1bGUgZmFpbGVkXG4iKTsKPiArCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYs IGRwKTsKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCj4gKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCBkcCk7Cj4gKwo+ICsJZ19kcF9kaXNwbGF5ID0gJmRwLT5kcF9kaXNw bGF5Owo+ICsKPiArCXJjID0gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmZHBfZGlzcGxheV9j b21wX29wcyk7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImNvbXBvbmVudCBhZGQgZmFp bGVkLCByYz0lZFxuIiwgcmMpOwo+ICsJCWRwX2Rpc3BsYXlfZGVpbml0X3N1Yl9tb2R1bGVzKGRw KTsKPiArCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRwKTsKPiArCX0KPiArCj4gKwlyZXR1cm4g cmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Cj4gKwo+ICsJaWYgKCFwZGV2KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRwID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJZHBfZGlzcGxheV9kZWluaXRfc3ViX21v ZHVsZXMoZHApOwo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+ICsJ ZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRwX2Rpc3BsYXlfZHJpdmVyID0gewo+ICsJ LnByb2JlICA9IGRwX2Rpc3BsYXlfcHJvYmUsCj4gKwkucmVtb3ZlID0gZHBfZGlzcGxheV9yZW1v dmUsCj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gIm1zbS1kcC1kaXNwbGF5IiwKPiArCQku b2ZfbWF0Y2hfdGFibGUgPSBkcF9kdF9tYXRjaCwKPiArCX0sCj4gK307Cj4gKwo+ICtpbnQgX19p bml0IG1zbV9kcF9yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9 IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHBfZGlzcGxheV9kcml2ZXIpOwo+ICsJaWYgKHJl dCkgewo+ICsJCURSTV9FUlJPUigiZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCIpOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBfX2V4aXQg bXNtX2RwX3VucmVnaXN0ZXIodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJmRwX2Rpc3BsYXlfZHJpdmVyKTsKPiArfQo+ICsKPiAraW50IG1zbV9kcF9tb2Rlc2V0X2lu aXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAr CQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgbXNtX2RybV9w cml2YXRlICpwcml2Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoV0FSTl9PTighZW5jb2Rlcikg fHwgV0FSTl9PTighZHBfZGlzcGxheSkgfHwgV0FSTl9PTighZGV2KSkKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWRwX2Rpc3BsYXktPmRy bV9kZXYgPSBkZXY7Cj4gKwo+ICsJcmV0ID0gZHBfZGlzcGxheV9yZXF1ZXN0X2lycShkcF9kaXNw bGF5KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoInJlcXVlc3RfaXJxIGZhaWxlZCwg cmV0PSVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHBfZGlzcGxh eS0+ZW5jb2RlciA9IGVuY29kZXI7Cj4gKwo+ICsJZHBfZGlzcGxheS0+Y29ubmVjdG9yID0gZHBf ZHJtX2Nvbm5lY3Rvcl9pbml0KGRwX2Rpc3BsYXkpOwo+ICsJaWYgKElTX0VSUihkcF9kaXNwbGF5 LT5jb25uZWN0b3IpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkcF9kaXNwbGF5LT5jb25uZWN0b3Ip Owo+ICsJCURSTV9ERVZfRVJST1IoZGV2LT5kZXYsCj4gKwkJCSJmYWlsZWQgdG8gY3JlYXRlIGRw IGNvbm5lY3RvcjogJWRcbiIsIHJldCk7Cj4gKwkJZHBfZGlzcGxheS0+Y29ubmVjdG9yID0gTlVM TDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXByaXYtPmNvbm5lY3RvcnNbcHJpdi0+ bnVtX2Nvbm5lY3RvcnMrK10gPSBkcF9kaXNwbGF5LT5jb25uZWN0b3I7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiAraW50IG1zbV9kcF9kaXNwbGF5X2VuYWJsZShzdHJ1Y3QgbXNtX2RwICpkcCwg c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3Ry dWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKPiArCj4gKwlkcF9kaXNwbGF5ID0g Y29udGFpbmVyX29mKGRwLCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsK PiArCWlmICghZHBfZGlzcGxheS0+ZHBfbW9kZS5kcm1fbW9kZS5jbG9jaykgewo+ICsJCURSTV9F UlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCXJjID0gZHBfZGlzcGxheV9zZXRfbW9kZShkcCwgJmRwX2Rpc3BsYXktPmRwX21vZGUpOwo+ ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcGVyZm9ybSBhIG1vZGUgc2V0 LCByYz0lZFxuIiwgcmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlyYyA9IGRwX2Rp c3BsYXlfcHJlcGFyZShkcCk7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoIkRQIGRpc3Bs YXkgcHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ ICsKPiArCXJjID0gZHBfZGlzcGxheV9lbmFibGUoZHApOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJN X0VSUk9SKCJEUCBkaXNwbGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Cj4gKwkJZHBf ZGlzcGxheV91bnByZXBhcmUoZHApOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlyYyA9 IGRwX2Rpc3BsYXlfcG9zdF9lbmFibGUoZHApOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9S KCJEUCBkaXNwbGF5IHBvc3QgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiArCQlkcF9k aXNwbGF5X2Rpc2FibGUoZHApOwo+ICsJCWRwX2Rpc3BsYXlfdW5wcmVwYXJlKGRwKTsKPiArCX0K PiArCXJldHVybiByYzsKPiArfQo+ICsKPiAraW50IG1zbV9kcF9kaXNwbGF5X2Rpc2FibGUoc3Ry dWN0IG1zbV9kcCAqZHAsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJaW50 IHJjID0gMDsKPiArCj4gKwlyYyA9IGRwX2Rpc3BsYXlfcHJlX2Rpc2FibGUoZHApOwo+ICsJaWYg KHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJEUCBkaXNwbGF5IHByZSBkaXNhYmxlIGZhaWxlZCwgcmM9 JWRcbiIsIHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBkcF9kaXNwbGF5 X2Rpc2FibGUoZHApOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJEUCBkaXNwbGF5IGRp c2FibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4g KwlyYyA9IGRwX2Rpc3BsYXlfdW5wcmVwYXJlKGRwKTsKPiArCWlmIChyYykgewo+ICsJCURSTV9F UlJPUigiRFAgZGlzcGxheSB1bnByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwo+ICsJfQo+ ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICt2b2lkIG1zbV9kcF9kaXNwbGF5X21vZGVfc2V0KHN0 cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9k aXNwbGF5Owo+ICsKPiArCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ICsKPiArCW1lbXNldCgmZHBfZGlzcGxheS0+ ZHBfbW9kZSwgMHgwLCBzaXplb2Yoc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSkpOwo+ICsKPiArCWlm IChkcF9kaXNwbGF5X2NoZWNrX3ZpZGVvX3Rlc3QoZHApKQo+ICsJCWRwX2Rpc3BsYXktPmRwX21v ZGUuYnBwID0gZHBfZGlzcGxheV9nZXRfdGVzdF9icHAoZHApOwo+ICsJZWxzZSAvKiBEZWZhdWx0 IG51bV9jb21wb25lbnRzIHBlciBwaXhlbCA9IDMgKi8KPiArCQlkcF9kaXNwbGF5LT5kcF9tb2Rl LmJwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgKiAzOwo+ICsKPiArCWlmICgh ZHBfZGlzcGxheS0+ZHBfbW9kZS5icHApCj4gKwkJZHBfZGlzcGxheS0+ZHBfbW9kZS5icHAgPSAy NDsgLyogRGVmYXVsdCBicHAgKi8KPiArCj4gKwlkcm1fbW9kZV9jb3B5KCZkcF9kaXNwbGF5LT5k cF9tb2RlLmRybV9tb2RlLCBhZGp1c3RlZF9tb2RlKTsKPiArCj4gKwlkcF9kaXNwbGF5LT5kcF9t b2RlLnZfYWN0aXZlX2xvdyA9Cj4gKwkJISEoZHBfZGlzcGxheS0+ZHBfbW9kZS5kcm1fbW9kZS5m bGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKPiArCj4gKwlkcF9kaXNwbGF5LT5kcF9tb2Rl LmhfYWN0aXZlX2xvdyA9Cj4gKwkJISEoZHBfZGlzcGxheS0+ZHBfbW9kZS5kcm1fbW9kZS5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlz cGxheS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jZTA5YmI2Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5o Cj4gQEAgLTAsMCArMSwyOCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9E UF9ESVNQTEFZX0hfCj4gKyNkZWZpbmUgX0RQX0RJU1BMQVlfSF8KPiArCj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ICsKPiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4gKwo+ICtzdHJ1Y3QgbXNt X2RwIHsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owo+ICsJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiArCWJv b2wgaXNfY29ubmVjdGVkOwo+ICsJdTMyIG1heF9wY2xrX2toejsKPiArfTsKPiArCj4gK2ludCBk cF9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgdTMyIG1v ZGVfcGNsa19raHopOwo+ICtpbnQgZHBfZGlzcGxheV9nZXRfbW9kZXMoc3RydWN0IG1zbV9kcCAq ZHBfZGlzcGxheSwKPiArCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlKTsKPiAraW50 IGRwX2Rpc3BsYXlfcmVxdWVzdF9pcnEoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7Cj4gK2Jv b2wgZHBfZGlzcGxheV9jaGVja192aWRlb190ZXN0KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkp Owo+ICtpbnQgZHBfZGlzcGxheV9nZXRfdGVzdF9icHAoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxh eSk7Cj4gKwo+ICsjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf ZHJtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjUzMTZlYzU3Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmMKPiBA QCAtMCwwICsxLDE4OSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChm bXQpCSJbZHJtLWRwXTogJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsKPiArI2luY2x1ZGUgIm1zbV9kcnYuaCIKPiArI2lu Y2x1ZGUgIm1zbV9rbXMuaCIKPiArI2luY2x1ZGUgImRwX2RybS5oIgo+ICsKPiArc3RydWN0IGRw X2Nvbm5lY3RvciB7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwo+ICsJc3RydWN0IG1z bV9kcCAqZHBfZGlzcGxheTsKPiArfTsKPiArI2RlZmluZSB0b19kcF9jb25uZWN0b3IoeCkgY29u dGFpbmVyX29mKHgsIHN0cnVjdCBkcF9jb25uZWN0b3IsIGJhc2UpCj4gKwo+ICsvKioKPiArICog ZHBfY29ubmVjdG9yX2RldGVjdCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBjb25uZWN0b3Ig aXMgY29ubmVjdGVkCj4gKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBz dHJ1Y3R1cmUKPiArICogQGZvcmNlOiBGb3JjZSBkZXRlY3Qgc2V0dGluZyBmcm9tIGRybSBmcmFt ZXdvcmsKPiArICogUmV0dXJuczogQ29ubmVjdG9yICdpcyBjb25uZWN0ZWQnIHN0YXR1cwo+ICsg Ki8KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHBfY29ubmVjdG9yX2RldGVj dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKPiArCQlib29sIGZvcmNlKQo+ICt7Cj4gKwll bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93 bjsKPiArCXN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGN1cnJlbnRfc3RhdHVzID0g Y29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4gKwlzdHJ1 Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uOwo+ICsJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJp diA9IGNvbm4tPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbXNtX2ttcyAqa21zID0gcHJp di0+a21zOwo+ICsKPiArCWRwX2Nvbm4gPSB0b19kcF9jb25uZWN0b3IoY29ubik7Cj4gKwlkcCA9 IGRwX2Nvbm4tPmRwX2Rpc3BsYXk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJpc19jb25uZWN0ZWQg PSAlc1xuIiwKPiArCQkoZHAtPmlzX2Nvbm5lY3RlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKPiAr Cj4gKwlzdGF0dXMgPSAoZHAtPmlzX2Nvbm5lY3RlZCkgPyBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZCA6Cj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gKwo+ICsJaWYg KGRwLT5pc19jb25uZWN0ZWQgJiYgKGN1cnJlbnRfc3RhdHVzICE9IHN0YXR1cykKPiArCQkJCSYm IGttcy0+ZnVuY3MtPnNldF9lbmNvZGVyX21vZGUpIHsKPiArCQlrbXMtPmZ1bmNzLT5zZXRfZW5j b2Rlcl9tb2RlKGttcywKPiArCQkJCWRwLT5lbmNvZGVyLCBmYWxzZSk7Cj4gKwkJRFJNX0RFQlVH X0RQKCJjYWxsIHNldF9lbmNvZGVyX21vZGVcbiIpOwo+ICsJfQo+ICsJY3VycmVudF9zdGF0dXMg PSBzdGF0dXM7Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfY29u bmVjdG9yX2dldF9tb2RlcyAtIGNhbGxiYWNrIHRvIGFkZCBkcm0gbW9kZXMgdmlhIGRybV9tb2Rl X3Byb2JlZF9hZGQoKQo+ICsgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RydWN0dXJlCj4gKyAqIFJldHVybnM6IE51bWJlciBvZiBtb2RlcyBhZGRlZAo+ICsgKi8KPiAr c3RhdGljIGludCBkcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPiAr CXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKmRwX21vZGUgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm0sIGRybV9tb2RlOwo+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29u bjsKPiArCj4gKwlpZiAoIWNvbm5lY3RvcikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlkcF9jb25u ID0gdG9fZHBfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlkcCA9IGRwX2Nvbm4tPmRwX2Rpc3Bs YXk7Cj4gKwo+ICsJZHBfbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9tb2RlKSwgIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFkcF9tb2RlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS8qIHBsdWdnYWJs ZSBjYXNlIGFzc3VtZXMgRURJRCBpcyByZWFkIHdoZW4gSFBEICovCj4gKwlpZiAoZHAtPmlzX2Nv bm5lY3RlZCkgewo+ICsJCS8qCj4gKwkJICpUaGUgZ2V0X21vZGVzKCkgZnVuY3Rpb24gbWlnaHQg cmV0dXJuIG9uZSBtb2RlIHRoYXQgaXMgc3RvcmVkCj4gKwkJICogaW4gZHBfbW9kZSB3aGVuIGNv bXBsaWFuY2UgdGVzdCBpcyBpbiBwcm9ncmVzcy4gSWYgbm90LCB0aGUKPiArCQkgKiByZXR1cm4g dmFsdWUgaXMgZXF1YWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBtb2RlcyBzdXBwb3J0ZWQKPiAr CQkgKiBieSB0aGUgc2luawo+ICsJCSAqLwo+ICsJCXJjID0gZHBfZGlzcGxheV9nZXRfbW9kZXMo ZHAsIGRwX21vZGUpOwo+ICsJCWlmIChyYyA8PSAwKSB7Cj4gKwkJCURSTV9FUlJPUigiZmFpbGVk IHRvIGdldCBEUCBzaW5rIG1vZGVzLCByYz0lZFxuIiwgcmMpOwo+ICsJCQlyZXR1cm4gcmM7Cj4g KwkJfQo+ICsJCWlmIChkcF9tb2RlLT5kcm1fbW9kZS5jbG9jaykgeyAvKiB2YWxpZCBEUCBtb2Rl ICovCj4gKwkJCW1lbXNldCgmZHJtX21vZGUsIDB4MCwgc2l6ZW9mKGRybV9tb2RlKSk7Cj4gKwkJ CWRybV9tb2RlX2NvcHkoJmRybV9tb2RlLCAmZHBfbW9kZS0+ZHJtX21vZGUpOwo+ICsJCQltID0g ZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOwo+ICsJCQlpZiAo IW0pIHsKPiArCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1XG4iLAo+ICsJ CQkJICAgICAgIGRybV9tb2RlLmhkaXNwbGF5LAo+ICsJCQkJICAgICAgIGRybV9tb2RlLnZkaXNw bGF5KTsKPiArCQkJCWtmcmVlKGRwX21vZGUpOwo+ICsJCQkJcmV0dXJuIDA7Cj4gKwkJCX0KPiAr CQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG0pOwo+ICsJCX0KPiArCX0gZWxzZSB7 Cj4gKwkJRFJNX0RFQlVHX0RQKCJObyBzaW5rIGNvbm5lY3RlZFxuIik7Cj4gKwl9Cj4gKwlrZnJl ZShkcF9tb2RlKTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9j b25uZWN0b3JfbW9kZV92YWxpZCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBzcGVjaWZpZWQg bW9kZSBpcyB2YWxpZAo+ICsgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RydWN0dXJlCj4gKyAqIEBtb2RlOiBQb2ludGVyIHRvIGRybSBtb2RlIHN0cnVjdHVyZQo+ICsg KiBSZXR1cm5zOiBWYWxpZGl0eSBzdGF0dXMgZm9yIHNwZWNpZmllZCBtb2RlCj4gKyAqLwo+ICtz dGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgZHBfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKPiArewo+ICsJc3RydWN0IG1zbV9kcCAqZHBfZGlzcDsKPiArCXN0cnVjdCBkcF9jb25u ZWN0b3IgKmRwX2Nvbm47Cj4gKwo+ICsJaWYgKCFtb2RlIHx8ICFjb25uZWN0b3IpIHsKPiArCQlE Uk1fRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm4gTU9ERV9FUlJPUjsKPiAr CX0KPiArCj4gKwlkcF9jb25uID0gdG9fZHBfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlkcF9k aXNwID0gZHBfY29ubi0+ZHBfZGlzcGxheTsKPiArCj4gKwltb2RlLT52cmVmcmVzaCA9IGRybV9t b2RlX3ZyZWZyZXNoKG1vZGUpOwo+ICsKPiArCWlmICgoZHBfZGlzcC0+bWF4X3BjbGtfa2h6IDw9 IDApIHx8Cj4gKwkJCShkcF9kaXNwLT5tYXhfcGNsa19raHogPiBEUF9NQVhfUElYRUxfQ0xLX0tI WikgfHwKPiArCQkJKG1vZGUtPmNsb2NrID4gZHBfZGlzcC0+bWF4X3BjbGtfa2h6KSkKPiArCQly ZXR1cm4gTU9ERV9CQUQ7Cj4gKwo+ICsJcmV0dXJuIGRwX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShk cF9kaXNwLCBtb2RlLT5jbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyBkcF9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZGV0ZWN0ID0gZHBf Y29ubmVjdG9yX2RldGVjdCwKPiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5n bGVfY29ubmVjdG9yX21vZGVzLAo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAs Cj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsK PiArCS5nZXRfbW9kZXMgPSBkcF9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVfdmFsaWQg PSBkcF9jb25uZWN0b3JfbW9kZV92YWxpZCwKPiArfTsKPiArCj4gKy8qIGNvbm5lY3RvciBpbml0 aWFsaXphdGlvbiAqLwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHBfZHJtX2Nvbm5lY3Rvcl9p bml0KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBOVUxMOwo+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubmVj dG9yOwo+ICsJaW50IHJldDsKPiArCj4gKwlkcF9jb25uZWN0b3IgPSBkZXZtX2t6YWxsb2MoZHBf ZGlzcGxheS0+ZHJtX2Rldi0+ZGV2LCBzaXplb2YoKmRwX2Nvbm5lY3RvciksCj4gKwkJCQkgICAg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRwX2Nvbm5lY3RvcikKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiArCj4gKwlkcF9jb25uZWN0b3ItPmRwX2Rpc3BsYXkgPSBkcF9kaXNwbGF5Owo+ ICsKPiArCWNvbm5lY3RvciA9ICZkcF9jb25uZWN0b3ItPmJhc2U7Cj4gKwo+ICsJcmV0ID0gZHJt X2Nvbm5lY3Rvcl9pbml0KGRwX2Rpc3BsYXktPmRybV9kZXYsIGNvbm5lY3RvciwgJmRwX2Nvbm5l Y3Rvcl9mdW5jcywKPiArCQkJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsKPiArCWlm IChyZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwlkcm1fY29ubmVjdG9yX2hl bHBlcl9hZGQoY29ubmVjdG9yLCAmZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJ LyoKPiArCSAqIEVuYWJsZSBIUEQgdG8gbGV0IGhwZCBldmVudCBpcyBoYW5kbGVkIHdoZW4gY2Fi bGUgaXMgYXR0YWNoZWQgdG8gdGhlIGhvc3QuCj4gKwkgKi8KPiArCWNvbm5lY3Rvci0+cG9sbGVk ID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKPiArCj4gKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9l bmNvZGVyKGNvbm5lY3RvciwgZHBfZGlzcGxheS0+ZW5jb2Rlcik7Cj4gKwo+ICsJcmV0dXJuIGNv bm5lY3RvcjsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Ry bS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uY2Y0NzJjNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5oCj4gQEAgLTAsMCArMSwyMCBAQAo+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9EUF9EUk1fSF8KPiArI2RlZmluZSBfRFBfRFJNX0hf Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19o ZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJtc21fZHJ2LmgiCj4gKyNpbmNsdWRlICJkcF9kaXNw bGF5LmgiCj4gKwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHBfZHJtX2Nvbm5lY3Rvcl9pbml0 KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsKPiArI2VuZGlmIC8qIF9EUF9EUk1fSF8g Ki8KPiArCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi5jNWFkNWFjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKPiBAQCAtMCwwICsxLDIyOCBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQs IF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4gKwo+ICsvKiBEUCBzcGVj aWZpYyBWRE0gY29tbWFuZHMgKi8KPiArI2RlZmluZSBEUF9VU0JQRF9WRE1fU1RBVFVTCTB4MTAK PiArI2RlZmluZSBEUF9VU0JQRF9WRE1fQ09ORklHVVJFCTB4MTEKPiArCj4gKy8qIFVTQlBELVR5 cGVDIHNwZWNpZmljIE1hY3JvcyAqLwo+ICsjZGVmaW5lIFZETV9WRVJTSU9OCQkweDAKPiArI2Rl ZmluZSBVU0JfQ19EUF9TSUQJCTB4RkYwMQo+ICsKPiArc3RydWN0IGRwX2V4dGNvbl9wcml2YXRl IHsKPiArCXUzMiB2ZG87Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgZXh0Y29uX25iOwo+ICsJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsKPiArCXN0 cnVjdCB3b3JrcXVldWVfc3RydWN0ICpleHRjb25fd3E7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg ZXZlbnRfd29yazsKPiArCXN0cnVjdCB1c2JwZCAqcGQ7Cj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2Ig KmRwX2NiOwo+ICsJc3RydWN0IGRwX3VzYnBkIGRwX3VzYnBkOwo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBkcF9leHRjb25fY29ubmVjdChzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkLCBib29sIGhw ZCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0 Y29uOwo+ICsKPiArCWV4dGNvbiA9IGNvbnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0IGRwX2V4 dGNvbl9wcml2YXRlLCBkcF91c2JwZCk7Cj4gKwo+ICsJZHBfdXNicGQtPmhwZF9oaWdoID0gaHBk Owo+ICsJZHBfdXNicGQtPmZvcmNlZF9kaXNjb25uZWN0ID0gIWhwZDsKPiArCj4gKwlpZiAoaHBk KQo+ICsJCWV4dGNvbi0+ZHBfY2ItPmNvbmZpZ3VyZShleHRjb24tPmRldik7Cj4gKwllbHNlCj4g KwkJZXh0Y29uLT5kcF9jYi0+ZGlzY29ubmVjdChleHRjb24tPmRldik7Cj4gKwo+ICsJcmV0dXJu IHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2V4dGNvbl9nZXRfbGFuZXMoc3RydWN0IGRw X2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdikKPiArewo+ICsJdW5pb24gZXh0Y29uX3Byb3Bl cnR5X3ZhbHVlIHByb3BlcnR5Owo+ICsKPiArCWV4dGNvbl9nZXRfcHJvcGVydHkoZXh0Y29uX3By aXYtPmV4dGNvbiwKPiArCQkJCQlFWFRDT05fRElTUF9EUCwKPiArCQkJCQlFWFRDT05fUFJPUF9V U0JfU1MsCj4gKwkJCQkJJnByb3BlcnR5KTsKPiArCXJldHVybiAoKHByb3BlcnR5LmludHZhbCkg PyAyIDogNCk7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9leHRjb25fZXZlbnRfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBkcF9leHRjb25fcHJp dmF0ZSAqZXh0Y29uX3ByaXY7Cj4gKwlpbnQgZHBfc3RhdGUsIHJldDsKPiArCWludCBsYW5lczsK PiArCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKPiArCj4gKwlleHRjb25f cHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLAo+ICsJCQlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUs IGV2ZW50X3dvcmspOwo+ICsKPiArCWlmICghZXh0Y29uX3ByaXYgfHwgIWV4dGNvbl9wcml2LT5l eHRjb24pIHsKPiArCQlEUk1fRVJST1IoIkludmFsaWQgZXh0Y29uIGRldmljZSBoYW5kbGVyXG4i KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfc3RhdGUgPSBleHRjb25fZ2V0X3N0YXRl KGV4dGNvbl9wcml2LT5leHRjb24sIEVYVENPTl9ESVNQX0RQKTsKPiArCj4gKwlpZiAoZHBfc3Rh dGUgPiAwKSB7Cj4gKwkJcmV0ID0gZXh0Y29uX2dldF9wcm9wZXJ0eShleHRjb25fcHJpdi0+ZXh0 Y29uLAo+ICsJCQkJCUVYVENPTl9ESVNQX0RQLAo+ICsJCQkJCUVYVENPTl9QUk9QX1VTQl9UWVBF Q19QT0xBUklUWSwKPiArCQkJCQkmcHJvcGVydHkpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJRFJN X0VSUk9SKCJHZXQgUG9sYXJpdHkgcHJvcGVydHkgZmFpbGVkXG4iKTsKPiArCQkJcmV0dXJuOwo+ ICsJCX0KPiArCQlleHRjb25fcHJpdi0+ZHBfdXNicGQub3JpZW50YXRpb24gPQo+ICsJCQkocHJv cGVydHkuaW50dmFsKSA/IE9SSUVOVEFUSU9OX0NDMiA6IE9SSUVOVEFUSU9OX0NDMTsKPiArCj4g KwkJbGFuZXMgPSBkcF9leHRjb25fZ2V0X2xhbmVzKGV4dGNvbl9wcml2KTsKPiArCQlpZiAoIWxh bmVzKQo+ICsJCQlyZXR1cm47Cj4gKwkJZXh0Y29uX3ByaXYtPmRwX3VzYnBkLm11bHRpX2Z1bmMg PQo+ICsJCQkJCSgobGFuZXMgPT0gMikgPyBmYWxzZSA6IHRydWUpOwo+ICsKPiArCQlpZiAoZXh0 Y29uX3ByaXYtPmRwX2NiICYmIGV4dGNvbl9wcml2LT5kcF9jYi0+Y29uZmlndXJlKSB7Cj4gKwkJ CXJldCA9IGRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQsIHRydWUpOwo+ ICsJCQlpZiAocmV0KSB7Cj4gKwkJCQlEUk1fRVJST1IoImV4dGNvbl9jb25uZWN0LT50cnVlIGZh aWxlZFxuIik7Cj4gKwkJCQlyZXR1cm47Cj4gKwkJCX0KPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJ CWlmIChleHRjb25fcHJpdi0+ZHBfY2IgJiYgZXh0Y29uX3ByaXYtPmRwX2NiLT5kaXNjb25uZWN0 KSB7Cj4gKwkJCXJldCA9IGRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQs IGZhbHNlKTsKPiArCQkJaWYgKHJldCkgewo+ICsJCQkJRFJNX0VSUk9SKCJleHRjb25fY29ubmVj dC0+ZmFsc2UgZmFpbGVkXG4iKTsKPiArCQkJCXJldHVybjsKPiArCQkJfQo+ICsJCX0KPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGludCBkcF9leHRjb25fZXZlbnRfbm90aWZ5KHN0cnVjdCBub3Rp Zmllcl9ibG9jayAqbmIsCj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnByaXYp Cj4gK3sKPiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7Cj4gKwo+ICsJ ZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSwK PiArCQkJCQkJZXh0Y29uX25iKTsKPiArCj4gKwlxdWV1ZV93b3JrKGV4dGNvbl9wcml2LT5leHRj b25fd3EsICZleHRjb25fcHJpdi0+ZXZlbnRfd29yayk7Cj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7 Cj4gK30KPiArCj4gK2ludCBkcF9leHRjb25fcmVnaXN0ZXIoc3RydWN0IGRwX3VzYnBkICpkcF91 c2JwZCkKPiArewo+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdjsKPiAr CWludCByZXQgPSAwOwo+ICsKPiArCWlmICghZHBfdXNicGQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwo+ICsJZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2YoZHBfdXNicGQsIHN0cnVjdCBkcF9l eHRjb25fcHJpdmF0ZSwgZHBfdXNicGQpOwo+ICsKPiArCWV4dGNvbl9wcml2LT5leHRjb25fbmIu bm90aWZpZXJfY2FsbCA9IGRwX2V4dGNvbl9ldmVudF9ub3RpZnk7Cj4gKwlyZXQgPSBkZXZtX2V4 dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihleHRjb25fcHJpdi0+ZGV2LCBleHRjb25fcHJpdi0+ZXh0 Y29uLAo+ICsJCQkJCSAgICBFWFRDT05fRElTUF9EUCwKPiArCQkJCQkgICAgJmV4dGNvbl9wcml2 LT5leHRjb25fbmIpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoZXh0Y29uX3By aXYtPmRldiwKPiArCQkJInJlZ2lzdGVyIEVYVENPTl9ESVNQX0RQIG5vdGlmaWVyIGVyclxuIik7 Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWV4dGNv bl9wcml2LT5leHRjb25fd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZHJtX2Rw X2V4dGNvbiIpOwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGV4dGNvbl9wcml2LT5leHRjb25fd3Ep KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7Cj4gKwkJ ZHBfZXh0Y29uX3VucmVnaXN0ZXIoZHBfdXNicGQpOwo+ICsJCXJldHVybiAtRVBFUk07Cj4gKwl9 Cj4gKwo+ICsJSU5JVF9XT1JLKCZleHRjb25fcHJpdi0+ZXZlbnRfd29yaywgZHBfZXh0Y29uX2V2 ZW50X3dvcmspOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBkcF9leHRjb25fdW5y ZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZXh0 Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2Owo+ICsKPiArCWlmICghZHBfdXNicGQpIHsKPiArCQlE Uk1fRVJST1IoIkludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwll eHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihkcF91c2JwZCwgc3RydWN0IGRwX2V4dGNvbl9wcml2 YXRlLCBkcF91c2JwZCk7Cj4gKwo+ICsJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmllcihl eHRjb25fcHJpdi0+ZGV2LCBleHRjb25fcHJpdi0+ZXh0Y29uLAo+ICsJCQkJCSAgICBFWFRDT05f RElTUF9EUCwKPiArCQkJCQkgICAgJmV4dGNvbl9wcml2LT5leHRjb25fbmIpOwo+ICsKPiArCWlm IChleHRjb25fcHJpdi0+ZXh0Y29uX3dxKQo+ICsJCWRlc3Ryb3lfd29ya3F1ZXVlKGV4dGNvbl9w cml2LT5leHRjb25fd3EpOwo+ICsKPiArCXJldHVybjsKPiArfQo+ICsKPiArc3RydWN0IGRwX3Vz YnBkICpkcF9leHRjb25fZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX3VzYnBkX2Ni ICpjYikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAq ZHBfZXh0Y29uOwo+ICsJc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZDsKPiArCj4gKwlpZiAoIWNi KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGNiIGRhdGFcbiIpOwo+ICsJCXJjID0gLUVJTlZB TDsKPiArCQlyZXR1cm4gRVJSX1BUUihyYyk7Cj4gKwl9Cj4gKwo+ICsJZHBfZXh0Y29uID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcF9leHRjb24pLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh ZHBfZXh0Y29uKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ICsJCXJldHVybiBFUlJfUFRSKHJjKTsK PiArCX0KPiArCj4gKwlkcF9leHRjb24tPmV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFu ZGxlKGRldiwgMCk7Cj4gKwlpZiAoIWRwX2V4dGNvbi0+ZXh0Y29uKSB7Cj4gKwkJRFJNX0VSUk9S KCJpbnZhbGlkIGV4dGNvbiBkYXRhXG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZGV2bV9r ZnJlZShkZXYsIGRwX2V4dGNvbik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmMpOwo+ICsgICAgICAg IH0KPiArCj4gKwlkcF9leHRjb24tPmRldiA9IGRldjsKPiArCWRwX2V4dGNvbi0+ZHBfY2IgPSBj YjsKPiArCj4gKwlkcF9leHRjb24tPmRwX3VzYnBkLmNvbm5lY3QgPSBkcF9leHRjb25fY29ubmVj dDsKPiArCWRwX3VzYnBkID0gJmRwX2V4dGNvbi0+ZHBfdXNicGQ7Cj4gKwo+ICsJcmV0dXJuIGRw X3VzYnBkOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2V4dGNvbl9wdXQoc3RydWN0IGRwX3VzYnBkICpk cF91c2JwZCkKPiArewo+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb247Cj4gKwo+ ICsJaWYgKCFkcF91c2JwZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZXh0Y29uID0gY29udGFpbmVy X29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKPiArCj4g KwlkZXZtX2tmcmVlKGV4dGNvbi0+ZGV2LCBleHRjb24pOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2V4dGNvbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4yOGM3 ZjA5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0 Y29uLmgKPiBAQCAtMCwwICsxLDg1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX0RQX0VYVENPTl9IXwo+ICsjZGVmaW5lIF9EUF9FWFRDT05fSF8KPiArCj4gKy8vI2luY2x1 ZGUgPGxpbnV4L3VzYi91c2JwZC5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArCj4gK2VudW0gcGx1Z19vcmllbnRhdGlvbiB7 Cj4gKwlPUklFTlRBVElPTl9OT05FLAo+ICsJT1JJRU5UQVRJT05fQ0MxLAo+ICsJT1JJRU5UQVRJ T05fQ0MyLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcF91c2JwZCAtIERpc3BsYXlQ b3J0IHN0YXR1cwo+ICsgKgo+ICsgKiBAb3JpZW50YXRpb246IHBsdWcgb3JpZW50YXRpb24gY29u ZmlndXJhdGlvbgo+ICsgKiBAbG93X3Bvd19zdDogbG93IHBvd2VyIHN0YXRlCj4gKyAqIEBhZGFw dG9yX2RwX2VuOiBhZGFwdG9yIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZAo+ICsgKiBAbXVsdGlfZnVu YzogbXVsdGktZnVuY3Rpb24gcHJlZmVycmVkCj4gKyAqIEB1c2JfY29uZmlnX3JlcTogcmVxdWVz dCB0byBzd2l0Y2ggdG8gdXNiCj4gKyAqIEBleGl0X2RwX21vZGU6IHJlcXVlc3QgZXhpdCBmcm9t IGRpc3BsYXlwb3J0IG1vZGUKPiArICogQGhwZF9oaWdoOiBIb3QgUGx1ZyBEZXRlY3Qgc2lnbmFs IGlzIGhpZ2guCj4gKyAqIEBocGRfaXJxOiBDaGFuZ2UgaW4gdGhlIHN0YXR1cyBzaW5jZSBsYXN0 IG1lc3NhZ2UKPiArICogQGFsdF9tb2RlX2NmZ19kb25lOiBib29sIHRvIHNwZWNpZnkgYWx0IG1v ZGUgc3RhdHVzCj4gKyAqIEBkZWJ1Z19lbjogYm9vbCB0byBzcGVjaWZ5IGRlYnVnIG1vZGUKPiAr ICogQGNvbm5lY3Q6IHNpbXVsYXRlIGRpc2Nvbm5lY3Qgb3IgY29ubmVjdCBmb3IgZGVidWcgbW9k ZQo+ICsgKi8KPiArc3RydWN0IGRwX3VzYnBkIHsKPiArCWVudW0gcGx1Z19vcmllbnRhdGlvbiBv cmllbnRhdGlvbjsKPiArCWJvb2wgbG93X3Bvd19zdDsKPiArCWJvb2wgYWRhcHRvcl9kcF9lbjsK PiArCWJvb2wgbXVsdGlfZnVuYzsKPiArCWJvb2wgdXNiX2NvbmZpZ19yZXE7Cj4gKwlib29sIGV4 aXRfZHBfbW9kZTsKPiArCWJvb2wgaHBkX2hpZ2g7Cj4gKwlib29sIGhwZF9pcnE7Cj4gKwlib29s IGFsdF9tb2RlX2NmZ19kb25lOwo+ICsJYm9vbCBkZWJ1Z19lbjsKPiArCWJvb2wgZm9yY2VkX2Rp c2Nvbm5lY3Q7Cj4gKwo+ICsJaW50ICgqY29ubmVjdCkoc3RydWN0IGRwX3VzYnBkICpkcF91c2Jw ZCwgYm9vbCBocGQpOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcF91c2JwZF9jYiAt IGNhbGxiYWNrIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgY2xpZW50Cj4gKyAqCj4gKyAqIEBj b25maWd1cmU6IGNhbGxlZCBieSB1c2JwZCBtb2R1bGUgd2hlbiBQRCBjb21tdW5pY2F0aW9uIGhh cwo+ICsgKiBiZWVuIGNvbXBsZXRlZCBhbmQgdGhlIHVzYiBwZXJpcGhlcmFsIGhhcyBiZWVuIGNv bmZpZ3VyZWQgb24KPiArICogZHAgbW9kZS4KPiArICogQGRpc2Nvbm5lY3Q6IG5vdGlmeSB0aGUg Y2FibGUgZGlzY29ubmVjdCBpc3N1ZWQgYnkgdXNiLgo+ICsgKiBAYXR0ZW50aW9uOiBub3RpZnkg YW55IGF0dGVudGlvbiBtZXNzYWdlIGlzc3VlZCBieSB1c2IuCj4gKyAqLwo+ICtzdHJ1Y3QgZHBf dXNicGRfY2Igewo+ICsJaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICsJ aW50ICgqZGlzY29ubmVjdCkoc3RydWN0IGRldmljZSAqZGV2KTsKPiArCWludCAoKmF0dGVudGlv bikoc3RydWN0IGRldmljZSAqZGV2KTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBkcF9leHRjb25f Z2V0KCkgLSBzZXR1cCB1c2JwZCBtb2R1bGUKPiArICoKPiArICogQGRldjogZGV2aWNlIGluc3Rh bmNlIG9mIHRoZSBjYWxsZXIKPiArICogQGNiOiBzdHJ1Y3QgY29udGFpbmluZyBjYWxsYmFjayBm dW5jdGlvbiBwb2ludGVycy4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNs aWVudCB0byBpbml0aWFsaXplIHRoZSB1c2JwZAo+ICsgKiBtb2R1bGUuIFRoZSBtb2R1bGUgd2ls bCBjb21tdW5pY2F0ZSB3aXRoIHVzYiBkcml2ZXIgYW5kCj4gKyAqIGhhbmRsZXMgdGhlIHBvd2Vy IGRlbGl2ZXJ5IChQRCkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQo+ICsgKiBzaW5rL3VzYiBkZXZp Y2UuIFRoaXMgbW9kdWxlIHdpbGwgbm90aWZ5IHRoZSBjbGllbnQgdXNpbmcKPiArICogdGhlIGNh bGxiYWNrIGZ1bmN0aW9ucyBhYm91dCB0aGUgY29ubmVjdGlvbiBhbmQgc3RhdHVzLgo+ICsgKi8K PiArc3RydWN0IGRwX3VzYnBkICpkcF9leHRjb25fZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRwX3VzYnBkX2NiICpjYik7Cj4gKwo+ICt2b2lkIGRwX2V4dGNvbl9wdXQoc3RydWN0IGRw X3VzYnBkICpwZCk7Cj4gKwo+ICtpbnQgZHBfZXh0Y29uX3JlZ2lzdGVyKHN0cnVjdCBkcF91c2Jw ZCAqZHBfdXNicGQpOwo+ICt2b2lkIGRwX2V4dGNvbl91bnJlZ2lzdGVyKHN0cnVjdCBkcF91c2Jw ZCAqZHBfdXNicGQpOwo+ICsKPiArI2VuZGlmIC8qIF9EUF9FWFRDT05fSF8gKi8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX2xpbmsuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u NDk3NDViYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2xpbmsuYwo+IEBAIC0wLDAgKzEsMTIxNiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjZGVm aW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5j bHVkZSAiZHBfbGluay5oIgo+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPiArCj4gKyNkZWZpbmUg RFBfVEVTVF9SRVFVRVNUX01BU0sJCTB4N0YKPiArCj4gK2VudW0gYXVkaW9fc2FtcGxlX3JhdGUg ewo+ICsJQVVESU9fU0FNUExFX1JBVEVfMzJfS0haCT0gMHgwMCwKPiArCUFVRElPX1NBTVBMRV9S QVRFXzQ0XzFfS0haCT0gMHgwMSwKPiArCUFVRElPX1NBTVBMRV9SQVRFXzQ4X0tIWgk9IDB4MDIs Cj4gKwlBVURJT19TQU1QTEVfUkFURV84OF8yX0tIWgk9IDB4MDMsCj4gKwlBVURJT19TQU1QTEVf UkFURV85Nl9LSFoJPSAweDA0LAo+ICsJQVVESU9fU0FNUExFX1JBVEVfMTc2XzRfS0haCT0gMHgw NSwKPiArCUFVRElPX1NBTVBMRV9SQVRFXzE5Ml9LSFoJPSAweDA2LAo+ICt9Owo+ICsKPiArZW51 bSBhdWRpb19wYXR0ZXJuX3R5cGUgewo+ICsJQVVESU9fVEVTVF9QQVRURVJOX09QRVJBVE9SX0RF RklORUQJPSAweDAwLAo+ICsJQVVESU9fVEVTVF9QQVRURVJOX1NBV1RPT1RICQk9IDB4MDEsCj4g K307Cj4gKwo+ICtzdHJ1Y3QgZHBfbGlua19yZXF1ZXN0IHsKPiArCXUzMiB0ZXN0X3JlcXVlc3Rl ZDsKPiArCXUzMiB0ZXN0X2xpbmtfcmF0ZTsKPiArCXUzMiB0ZXN0X2xhbmVfY291bnQ7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZHBfbGlua19wcml2YXRlIHsKPiArCXUzMiBwcmV2X3NpbmtfY291bnQ7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZHBfYXV4ICphdXg7Cj4gKwlzdHJ1 Y3QgZHBfbGluayBkcF9saW5rOwo+ICsKPiArCXN0cnVjdCBkcF9saW5rX3JlcXVlc3QgcmVxdWVz dDsKPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ICt9Owo+ICsKPiAr c3RhdGljIGludCBkcF9saW5rX2dldF9wZXJpb2Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGlu aywgaW50IGNvbnN0IGFkZHIpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJdTggZGF0YTsKPiAr CXUzMiBjb25zdCBtYXhfYXVkaW9fcGVyaW9kID0gMHhBOwo+ICsKPiArCS8qIFRFU1RfQVVESU9f UEVSSU9EX0NIX1hYICovCj4gKwlpZiAoZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1f YXV4LCBhZGRyLCAmZGF0YSkgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCB0 ZXN0X2F1ZGlvX3BlcmlvZCAoMHgleClcbiIsIGFkZHIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4g KwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCS8qIFBlcmlvZCAtIEJpdHMgMzowICovCj4gKwlk YXRhID0gZGF0YSAmIDB4RjsKPiArCWlmICgoaW50KWRhdGEgPiBtYXhfYXVkaW9fcGVyaW9kKSB7 Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4i LCBkYXRhKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4g KwlyZXQgPSBkYXRhOwo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9saW5rX3BhcnNlX2F1ZGlvX2NoYW5uZWxfcGVyaW9kKHN0cnVjdCBkcF9saW5rX3By aXZhdGUgKmxpbmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJc3RydWN0IGRwX2xpbmtfdGVz dF9hdWRpbyAqcmVxID0gJmxpbmstPmRwX2xpbmsudGVzdF9hdWRpbzsKPiArCj4gKwlyZXQgPSBk cF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gxKTsKPiArCWlm IChyZXQgPT0gLUVJTlZBTCkKPiArCQlnb3RvIGV4aXQ7Cj4gKwo+ICsJcmVxLT50ZXN0X2F1ZGlv X3BlcmlvZF9jaF8xID0gcmV0Owo+ICsJRFJNX0RFQlVHX0RQKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9j aF8xID0gMHgleFxuIiwgcmV0KTsKPiArCj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGlu aywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gyKTsKPiArCWlmIChyZXQgPT0gLUVJTlZBTCkKPiAr CQlnb3RvIGV4aXQ7Cj4gKwo+ICsJcmVxLT50ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yID0gcmV0Owo+ ICsJRFJNX0RFQlVHX0RQKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yID0gMHgleFxuIiwgcmV0KTsK PiArCj4gKwkvKiBURVNUX0FVRElPX1BFUklPRF9DSF8zIChCeXRlIDB4Mjc1KSAqLwo+ICsJcmV0 ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMyk7Cj4g KwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9h dWRpb19wZXJpb2RfY2hfMyA9IHJldDsKPiArCURSTV9ERUJVR19EUCgidGVzdF9hdWRpb19wZXJp b2RfY2hfMyA9IDB4JXhcbiIsIHJldCk7Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9k KGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINCk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwp Cj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IHJl dDsKPiArCURSTV9ERUJVR19EUCgidGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IDB4JXhcbiIsIHJl dCk7Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9f UEVSSU9EX0NINSk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsK PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IHJldDsKPiArCURSTV9ERUJVR19EUCgi dGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IDB4JXhcbiIsIHJldCk7Cj4gKwo+ICsJcmV0ID0gZHBf bGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINik7Cj4gKwlpZiAo cmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9hdWRpb19w ZXJpb2RfY2hfNiA9IHJldDsKPiArCURSTV9ERUJVR19EUCgidGVzdF9hdWRpb19wZXJpb2RfY2hf NiA9IDB4JXhcbiIsIHJldCk7Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmss IERQX1RFU1RfQVVESU9fUEVSSU9EX0NINyk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJ Z290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IHJldDsKPiAr CURSTV9ERUJVR19EUCgidGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IDB4JXhcbiIsIHJldCk7Cj4g Kwo+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9E X0NIOCk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJl cS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IHJldDsKPiArCURSTV9ERUJVR19EUCgidGVzdF9h dWRpb19wZXJpb2RfY2hfOCA9IDB4JXhcbiIsIHJldCk7Cj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVybl90eXBl KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJ dTggZGF0YTsKPiArCXNzaXplX3QgcmxlbjsKPiArCWludCBjb25zdCBtYXhfYXVkaW9fcGF0dGVy bl90eXBlID0gMHgxOwo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkYihsaW5rLT5hdXgt PmRybV9hdXgsCj4gKwkJCQlEUF9URVNUX0FVRElPX1BBVFRFUk5fVFlQRSwgJmRhdGEpOwo+ICsJ aWYgKHJsZW4gPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCBsaW5rIGF1ZGlv IG1vZGUuIHJsZW49JXpkXG4iLCBybGVuKTsKPiArCQlyZXR1cm4gcmxlbjsKPiArCX0KPiArCj4g KwkvKiBBdWRpbyBQYXR0ZXJuIFR5cGUgLSBCaXRzIDc6MCAqLwo+ICsJaWYgKChpbnQpZGF0YSA+ IG1heF9hdWRpb19wYXR0ZXJuX3R5cGUpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgYXVkaW8g cGF0dGVybiB0eXBlID0gMHgleFxuIiwgZGF0YSk7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQln b3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVk aW9fcGF0dGVybl90eXBlID0gZGF0YTsKPiArCURSTV9ERUJVR19EUCgiYXVkaW8gcGF0dGVybiB0 eXBlID0gMHgleFxuIiwgZGF0YSk7Cj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fbW9kZShzdHJ1Y3QgZHBfbGlua19wcml2 YXRlICpsaW5rKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXU4IGRhdGE7Cj4gKwlzc2l6ZV90 IHJsZW47Cj4gKwlpbnQgY29uc3QgbWF4X2F1ZGlvX3NhbXBsaW5nX3JhdGUgPSAweDY7Cj4gKwlp bnQgY29uc3QgbWF4X2F1ZGlvX2NoYW5uZWxfY291bnQgPSAweDg7Cj4gKwlpbnQgc2FtcGxpbmdf cmF0ZSA9IDB4MDsKPiArCWludCBjaGFubmVsX2NvdW50ID0gMHgwOwo+ICsKPiArCXJsZW4gPSBk cm1fZHBfZHBjZF9yZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfQVVESU9fTU9ERSwg JmRhdGEpOwo+ICsJaWYgKHJsZW4gPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVh ZCBsaW5rIGF1ZGlvIG1vZGUuIHJsZW49JXpkXG4iLCBybGVuKTsKPiArCQlyZXR1cm4gcmxlbjsK PiArCX0KPiArCj4gKwkvKiBTYW1wbGluZyBSYXRlIC0gQml0cyAzOjAgKi8KPiArCXNhbXBsaW5n X3JhdGUgPSBkYXRhICYgMHhGOwo+ICsJaWYgKHNhbXBsaW5nX3JhdGUgPiBtYXhfYXVkaW9fc2Ft cGxpbmdfcmF0ZSkgewo+ICsJCURSTV9FUlJPUigic2FtcGxpbmcgcmF0ZSAoMHgleCkgZ3JlYXRl ciB0aGFuIG1heCAoMHgleClcbiIsCj4gKwkJCQlzYW1wbGluZ19yYXRlLCBtYXhfYXVkaW9fc2Ft cGxpbmdfcmF0ZSk7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4g Kwo+ICsJLyogQ2hhbm5lbCBDb3VudCAtIEJpdHMgNzo0ICovCj4gKwljaGFubmVsX2NvdW50ID0g KChkYXRhICYgMHhGMCkgPj4gNCkgKyAxOwo+ICsJaWYgKGNoYW5uZWxfY291bnQgPiBtYXhfYXVk aW9fY2hhbm5lbF9jb3VudCkgewo+ICsJCURSTV9FUlJPUigiY2hhbm5lbF9jb3VudCAoMHgleCkg Z3JlYXRlciB0aGFuIG1heCAoMHgleClcbiIsCj4gKwkJCQljaGFubmVsX2NvdW50LCBtYXhfYXVk aW9fY2hhbm5lbF9jb3VudCk7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4g Kwl9Cj4gKwo+ICsJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fc2FtcGxpbmdf cmF0ZSA9IHNhbXBsaW5nX3JhdGU7Cj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9h dWRpb19jaGFubmVsX2NvdW50ID0gY2hhbm5lbF9jb3VudDsKPiArCURSTV9ERUJVR19EUCgic2Ft cGxpbmdfcmF0ZSA9IDB4JXgsIGNoYW5uZWxfY291bnQgPSAweCV4XG4iLAo+ICsJCQkJCXNhbXBs aW5nX3JhdGUsIGNoYW5uZWxfY291bnQpOwo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGRwX3BhcnNlX2F1ZGlvX3BhdHRlcm5fcGFyYW1zKCkgLSBwYXJzZXMg YXVkaW8gcGF0dGVybiBwYXJhbWV0ZXJzIGZyb20gRFBDRAo+ICsgKiBAbGluazogRGlzcGxheSBQ b3J0IERyaXZlciBkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkg cGFyc2VzIHRoZSBhdWRpbyBsaW5rIHBhdHRlcm4gcGFyYW1ldGVycy4KPiArICovCj4gK3N0YXRp YyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19w cml2YXRlICpsaW5rKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXQgPSBkcF9saW5r X3BhcnNlX2F1ZGlvX21vZGUobGluayk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXhpdDsKPiAr Cj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX3BhdHRlcm5fdHlwZShsaW5rKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9f Y2hhbm5lbF9wZXJpb2QobGluayk7Cj4gKwo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl92YWxpZCgpIC0gdmFsaWRh dGVzIHRoZSB2aWRlbyBwYXR0ZXJuCj4gKyAqIEBwYXR0ZXJuOiB2aWRlbyBwYXR0ZXJuIHJlcXVl c3RlZCBieSB0aGUgc2luawo+ICsgKgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3Rl ZCB2aWRlbyBwYXR0ZXJuIGlzIHN1cHBvcnRlZC4KPiArICovCj4gK3N0YXRpYyBib29sIGRwX2xp bmtfaXNfdmlkZW9fcGF0dGVybl92YWxpZCh1MzIgcGF0dGVybikKPiArewo+ICsJc3dpdGNoIChw YXR0ZXJuKSB7Cj4gKwljYXNlIERQX05PX1RFU1RfUEFUVEVSTjoKPiArCWNhc2UgRFBfQ09MT1Jf UkFNUDoKPiArCWNhc2UgRFBfQkxBQ0tfQU5EX1dISVRFX1ZFUlRJQ0FMX0xJTkVTOgo+ICsJY2Fz ZSBEUF9DT0xPUl9TUVVBUkU6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfaXNfYml0X2Rl cHRoX3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGJpdCBkZXB0aCByZXF1ZXN0ZWQKPiArICogQGJp dF9kZXB0aDogYml0IGRlcHRoIHJlcXVlc3RlZCBieSB0aGUgc2luawo+ICsgKgo+ICsgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBiaXQgZGVwdGggaXMgc3VwcG9ydGVkLgo+ICsgKi8K PiArc3RhdGljIGJvb2wgZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQodTMyIHRiZCkKPiArewo+ ICsJLyogRFBfVEVTVF9WSURFT19QQVRURVJOX05PTkUgaXMgdHJlYXRlZCBhcyBpbnZhbGlkICov Cj4gKwlzd2l0Y2ggKHRiZCkgewo+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogo+ICsJY2Fz ZSBEUF9URVNUX0JJVF9ERVBUSF84Ogo+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF8xMDoKPiAr CQlyZXR1cm4gdHJ1ZTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEoc3RydWN0IGRw X2xpbmtfcHJpdmF0ZSAqbGluaywKPiArCQkJCQlpbnQgYWRkciwgaW50IGxlbiwgdTMyICp2YWwp Cj4gK3sKPiArCXU4IGJwWzJdOwo+ICsJaW50IHJsZW47Cj4gKwo+ICsJaWYgKGxlbiAhPSAyKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIFJlYWQgdGhlIHJlcXVlc3RlZCB2aWRlbyBs aW5rIHBhdHRlcm4gKEJ5dGUgMHgyMjEpLiAqLwo+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQo bGluay0+YXV4LT5kcm1fYXV4LCBhZGRyLCBicCwgbGVuKTsKPiArCWlmIChybGVuIDwgbGVuKSB7 Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVhZCAweCV4XG4iLCBhZGRyKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkqdmFsID0gYnBbMV0gfCAoYnBbMF0gPDwgOCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV90aW1p bmdfcGFyYW1zMihzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rLAo+ICsJCQkJCWludCBhZGRy LCBpbnQgbGVuLAo+ICsJCQkJCXUzMiAqdmFsMSwgdTMyICp2YWwyKQo+ICt7Cj4gKwl1OCBicFsy XTsKPiArCWludCBybGVuOwo+ICsKPiArCWlmIChsZW4gIT0gMikKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRl IDB4MjIxKS4gKi8KPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1 eCwgYWRkciwgYnAsIGxlbik7Cj4gKwlpZiAocmxlbiA8IGxlbikgewo+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJKnZhbDEgPSAoYnBbMF0gJiBCSVQoNykpID4+IDc7Cj4gKwkqdmFsMiA9IGJwWzFd IHwgKChicFswXSAmIDB4N0YpIDw8IDgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczMoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaywKPiArCQkJCQlpbnQgYWRkciwgdTMyICp2YWwpCj4gK3sKPiArCXU4IGJwOwo+ ICsJdTMyIGxlbiA9IDE7Cj4gKwlpbnQgcmxlbjsKPiArCj4gKwlybGVuID0gZHJtX2RwX2RwY2Rf cmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsICZicCwgbGVuKTsKPiArCWlmIChybGVuIDwg MSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Cj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwkqdmFsID0gYnA7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBkcF9wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFy c2VzIHZpZGVvIHBhdHRlcm4gcGFyYW1ldGVycyBmcm9tIERQQ0QKPiArICogQGxpbms6IERpc3Bs YXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1 bGx5IHBhcnNlcyB0aGUgdmlkZW8gbGluayBwYXR0ZXJuIGFuZCB0aGUgbGluawo+ICsgKiBiaXQg ZGVwdGggcmVxdWVzdGVkIGJ5IHRoZSBzaW5rIGFuZCwgYW5kIGlmIHRoZSB2YWx1ZXMgcGFyc2Vk IGFyZSB2YWxpZC4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV92aWRlb19wYXR0 ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4gKwlpbnQgcmV0 ID0gMDsKPiArCXNzaXplX3QgcmxlbjsKPiArCXU4IGJwOwo+ICsKPiArCXJsZW4gPSBkcm1fZHBf ZHBjZF9yZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUEFUVEVSTiwgJmJwKTsKPiAr CWlmIChybGVuIDwgMCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGluayB2aWRl byBwYXR0ZXJuLiBybGVuPSV6ZFxuIiwgcmxlbik7Cj4gKwkJcmV0dXJuIHJsZW47Cj4gKwl9Cj4g Kwo+ICsJaWYgKCFkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQoYnApKSB7Cj4gKwkJRFJN X0VSUk9SKCJpbnZhbGlkIGxpbmsgdmlkZW8gcGF0dGVybiA9IDB4JXhcbiIsIGJwKTsKPiArCQly ZXQgPSAtRUlOVkFMOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3RfdmlkZW9fcGF0dGVybiA9IGJwOwo+ICsKPiArCS8qIFJlYWQgdGhl IHJlcXVlc3RlZCBjb2xvciBiaXQgZGVwdGggYW5kIGR5bmFtaWMgcmFuZ2UgKEJ5dGUgMHgyMzIp ICovCj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9U RVNUX01JU0MwLCAmYnApOwo+ICsJaWYgKHJsZW4gPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcmVhZCBsaW5rIGJpdCBkZXB0aC4gcmxlbj0lemRcbiIsIHJsZW4pOwo+ICsJCXJldHVy biBybGVuOwo+ICsJfQo+ICsKPiArCS8qIER5bmFtaWMgUmFuZ2UgKi8KPiArCWxpbmstPmRwX2xp bmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZSA9IChicCAmIERQX1RFU1RfRFlOQU1JQ19SQU5H RV9DRUEpOwo+ICsKPiArCS8qIENvbG9yIGJpdCBkZXB0aCAqLwo+ICsJYnAgJj0gRFBfVEVTVF9C SVRfREVQVEhfTUFTSzsKPiArCWlmICghZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQoYnApKSB7 Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGxpbmsgYml0IGRlcHRoID0gMHgleFxuIiwgYnApOwo+ ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlsaW5rLT5k cF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGggPSBicDsKPiArCj4gKwkvKiByZXNvbHV0 aW9uIHRpbWluZyBwYXJhbXMgKi8KPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czEobGluaywgRFBfVEVTVF9IX1RPVEFMX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvLnRlc3RfaF90b3RhbCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF9oX3RvdGFsIChEUF9URVNUX0hfVE9UQUxfSEkpXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czEobGluaywgRFBfVEVTVF9WX1RPVEFMX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvLnRlc3Rfdl90b3RhbCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF92X3RvdGFsIChEUF9URVNUX1ZfVE9UQUxfSEkpXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czEobGluaywgRFBfVEVTVF9IX1NUQVJUX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvLnRlc3RfaF9zdGFydCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF9oX3N0YXJ0IChEUF9URVNUX0hfU1RBUlRfSEkpXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvLnRlc3Rfdl9zdGFydCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRfSEkpXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czIobGluaywgRFBfVEVTVF9IU1lOQ19ISSwgMiwKPiArCQkJJmxpbmstPmRwX2xpbmsudGVzdF92 aWRlby50ZXN0X2hzeW5jX3BvbCwKPiArCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X2hzeW5jX3dpZHRoKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBw YXJzZSAoRFBfVEVTVF9IU1lOQ19ISSlcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMihsaW5rLCBEUF9URVNUX1ZTWU5D X0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfcG9sLAo+ ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfd2lkdGgpOwo+ICsJaWYg KHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIChEUF9URVNUX1ZTWU5DX0hJ KVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcF9saW5rX3BhcnNl X3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9XSURUSF9ISSwgMiwKPiArCQkJJmxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfd2lkdGgpOwo+ICsJaWYgKHJldCkgewo+ICsJCURS TV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF93aWR0aCAoRFBfVEVTVF9IX1dJRFRIX0hJ KVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcF9saW5rX3BhcnNl X3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfVl9IRUlHSFRfSEksIDIsCj4gKwkJCSZsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hlaWdodCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X2hlaWdodCAoRFBfVEVTVF9WX0hFSUdI VF9ISSlcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19w YXJzZV90aW1pbmdfcGFyYW1zMyhsaW5rLCBEUF9URVNUX01JU0MxLAo+ICsJCSZsaW5rLT5kcF9s aW5rLnRlc3RfdmlkZW8udGVzdF9ycl9kKTsKPiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50 ZXN0X3JyX2QgJj0gRFBfVEVTVF9SRUZSRVNIX0RFTk9NSU5BVE9SOwo+ICsJaWYgKHJldCkgewo+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfcnJfZCAoRFBfVEVTVF9NSVNDMSlc biIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90 aW1pbmdfcGFyYW1zMyhsaW5rLCBEUF9URVNUX1JFRlJFU0hfUkFURV9OVU1FUkFUT1IsCj4gKwkJ JmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3JyX24pOwo+ICsJaWYgKHJldCkgewo+ICsJ CURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfcnJfbiAoRFBfVEVTVF9SRUZSRVNIX1JB VEVfTlVNRVJBVE9SKVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlEUk1fREVC VUdfRFAoImxpbmsgdmlkZW8gcGF0dGVybiA9IDB4JXhcbiIgXAo+ICsJCSJsaW5rIGR5bmFtaWMg cmFuZ2UgPSAweCV4XG4iIFwKPiArCQkibGluayBiaXQgZGVwdGggPSAweCV4XG4iIFwKPiArCQki VEVTVF9IX1RPVEFMID0gJWQsIFRFU1RfVl9UT1RBTCA9ICVkXG4iIFwKPiArCQkiVEVTVF9IX1NU QVJUID0gJWQsIFRFU1RfVl9TVEFSVCA9ICVkXG4iIFwKPiArCQkiVEVTVF9IU1lOQ19QT0wgPSAl ZFxuIiBcCj4gKwkJIlRFU1RfSFNZTkNfV0lEVEggPSAlZFxuIiBcCj4gKwkJIlRFU1RfVlNZTkNf UE9MID0gJWRcbiIgXAo+ICsJCSJURVNUX1ZTWU5DX1dJRFRIID0gJWRcbiIgXAo+ICsJCSJURVNU X0hfV0lEVEggPSAlZFxuIiBcCj4gKwkJIlRFU1RfVl9IRUlHSFQgPSAlZFxuIiBcCj4gKwkJIlRF U1RfUkVGUkVTSF9ERU5PTUlOQVRPUiA9ICVkXG4iIFwKPiArCQkgIlRFU1RfUkVGUkVTSF9OVU1F UkFUT1IgPSAlZFxuIiwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRlb19w YXR0ZXJuLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZSwKPiAr CQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGgsCj4gKwkJbGluay0+ZHBf bGluay50ZXN0X3ZpZGVvLnRlc3RfaF90b3RhbCwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3Rfdmlk ZW8udGVzdF92X3RvdGFsLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfc3Rh cnQsCj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl9zdGFydCwKPiArCQlsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oc3luY19wb2wsCj4gKwkJbGluay0+ZHBfbGluay50 ZXN0X3ZpZGVvLnRlc3RfaHN5bmNfd2lkdGgsCj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVv LnRlc3RfdnN5bmNfcG9sLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZzeW5j X3dpZHRoLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfd2lkdGgsCj4gKwkJ bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl9oZWlnaHQsCj4gKwkJbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9ycl9uKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfbGlu a19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcygpIC0gcGFyc2VzIGxpbmsgdHJhaW5pbmcgcGFy YW1ldGVycyBmcm9tCj4gKyAqIERQQ0QKPiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIg ZGF0YQo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUg bGluayByYXRlIChCeXRlIDB4MjE5KSBhbmQgbGFuZQo+ICsgKiBjb3VudCAoQnl0ZSAweDIyMCks IGFuZCBpZiB0aGVzZSB2YWx1ZXMgcGFyc2UgYXJlIHZhbGlkLgo+ICsgKi8KPiArc3RhdGljIGlu dCBkcF9saW5rX3BhcnNlX2xpbmtfdHJhaW5pbmdfcGFyYW1zKHN0cnVjdCBkcF9saW5rX3ByaXZh dGUgKmxpbmspCj4gK3sKPiArCXU4IGJwOwo+ICsJc3NpemVfdCBybGVuOwo+ICsKPiArCXJsZW4g PSBkcm1fZHBfZHBjZF9yZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfTElOS19SQVRF LAkmYnApOwo+ICsJaWYgKHJsZW4gPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVh ZCBsaW5rIHJhdGUuIHJsZW49JXpkXG4iLCBybGVuKTsKPiArCQlyZXR1cm4gcmxlbjsKPiArCX0K PiArCj4gKwlpZiAoIWlzX2xpbmtfcmF0ZV92YWxpZChicCkpIHsKPiArCQlEUk1fRVJST1IoImlu dmFsaWQgbGluayByYXRlID0gMHgleFxuIiwgYnApOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJ fQo+ICsKPiArCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUgPSBicDsKPiArCURSTV9ERUJV R19EUCgibGluayByYXRlID0gMHgleFxuIiwgbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZSk7 Cj4gKwo+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWRiKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9MQU5FX0NPVU5ULCAmYnApOwo+ICsJaWYgKHJsZW4gPCAwKSB7Cj4gKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gcmVhZCBsYW5lIGNvdW50LiBybGVuPSV6ZFxuIiwgcmxlbik7Cj4gKwkJcmV0 dXJuIHJsZW47Cj4gKwl9Cj4gKwlicCAmPSBEUF9NQVhfTEFORV9DT1VOVF9NQVNLOwo+ICsKPiAr CWlmICghaXNfbGFuZV9jb3VudF92YWxpZChicCkpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQg bGFuZSBjb3VudCA9IDB4JXhcbiIsIGJwKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiAr Cj4gKwlsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCA9IGJwOwo+ICsJRFJNX0RFQlVHX0RQ KCJsYW5lIGNvdW50ID0gMHgleFxuIiwgbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQpOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfcGh5X3Rlc3Rf cGF0dGVybl9zdXBwb3J0ZWQodTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsKQo+ICt7Cj4gKwlzd2l0 Y2ggKHBoeV90ZXN0X3BhdHRlcm5fc2VsKSB7Cj4gKwljYXNlIERQX0xJTktfUVVBTF9QQVRURVJO X0RJU0FCTEU6Cj4gKwljYXNlIERQX0xJTktfUVVBTF9QQVRURVJOX0QxMF8yOgo+ICsJY2FzZSBE UF9MSU5LX1FVQUxfUEFUVEVSTl9FUlJPUl9SQVRFOgo+ICsJY2FzZSBEUF9MSU5LX1FVQUxfUEFU VEVSTl9QUkJTNzoKPiArCWNhc2UgRFBfTElOS19RVUFMX1BBVFRFUk5fODBCSVRfQ1VTVE9NOgo+ ICsJY2FzZSBEUF9MSU5LX1FVQUxfUEFUVEVSTl9IQlIyX0VZRToKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKioKPiAr ICogZHBfcGFyc2VfcGh5X3Rlc3RfcGFyYW1zKCkgLSBwYXJzZXMgdGhlIHBoeSBsaW5rIHBhcmFt ZXRlcnMKPiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBQ YXJzZXMgdGhlIERQQ0QgKEJ5dGUgMHgyNDgpIGZvciB0aGUgRFAgUEhZIGxpbmsgcGF0dGVybiB0 aGF0IGlzIGJlaW5nCj4gKyAqIHJlcXVlc3RlZC4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlu a19wYXJzZV9waHlfdGVzdF9wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiAr ewo+ICsJdTggZGF0YTsKPiArCXNzaXplX3QgcmxlbjsKPiArCWludCByZXQgPSAwOwo+ICsKPiAr CXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUEhZ X1BBVFRFUk4sICZkYXRhKTsKPiArCWlmIChybGVuIDwgMCkgewo+ICsJCURSTV9FUlJPUigiZmFp bGVkIHRvIHJlYWQgcGh5IGxpbmsgcGF0dGVybi4gcmxlbj0lemRcbiIsIHJsZW4pOwo+ICsJCXJl dHVybiBybGVuOwo+ICsJfQo+ICsKPiArCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy5waHlfdGVz dF9wYXR0ZXJuX3NlbCA9IGRhdGE7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJwaHlfdGVzdF9wYXR0 ZXJuX3NlbCA9IDB4JXhcbiIsIGRhdGEpOwo+ICsKPiArCWlmICghZHBfbGlua19pc19waHlfdGVz dF9wYXR0ZXJuX3N1cHBvcnRlZChkYXRhKSkKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rl c3RfcmVxdWVzdGVkKCkgLSBjaGVja3MgZm9yIGF1ZGlvL3ZpZGVvIGxpbmsgcmVxdWVzdAo+ICsg KiBAbGluazogbGluayByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPiArICoKPiArICogUmV0dXJucyB0 cnVlIGlmIHRoZSByZXF1ZXN0ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyBsaW5r Lgo+ICsgKi8KPiArc3RhdGljIGJvb2wgZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVl c3RlZCh1MzIgbGluaykKPiArewo+ICsJdTggdmlkZW9fYXVkaW9fdGVzdCA9IChEUF9URVNUX0xJ TktfVklERU9fUEFUVEVSTiB8Cj4gKwkJCQlEUF9URVNUX0xJTktfQVVESU9fUEFUVEVSTiB8Cj4g KwkJCQlEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8pOwo+ICsKPiArCXJldHVybiAo KGxpbmsgJiB2aWRlb19hdWRpb190ZXN0KSAmJgo+ICsJCSEobGluayAmIH52aWRlb19hdWRpb190 ZXN0KSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5rX3BhcnNlX3JlcXVlc3QoKSAtIHBh cnNlcyBsaW5rIHJlcXVlc3QgcGFyYW1ldGVycyBmcm9tIHNpbmsKPiArICogQGxpbms6IERpc3Bs YXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBQYXJzZXMgdGhlIERQQ0QgdG8gY2hlY2sg aWYgYW4gYXV0b21hdGVkIGxpbmsgaXMgcmVxdWVzdGVkIChCeXRlIDB4MjAxKSwKPiArICogYW5k IHdoYXQgdHlwZSBvZiBsaW5rIGF1dG9tYXRpb24gaXMgYmVpbmcgcmVxdWVzdGVkIChCeXRlIDB4 MjE4KS4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9yZXF1ZXN0KHN0cnVjdCBk cF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJdTggZGF0YTsK PiArCXNzaXplX3QgcmxlbjsKPiArCj4gKwkvKioKPiArCSAqIFJlYWQgdGhlIGRldmljZSBzZXJ2 aWNlIElSUSB2ZWN0b3IgKEJ5dGUgMHgyMDEpIHRvIGRldGVybWluZQo+ICsJICogd2hldGhlciBh biBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsuCj4gKwkgKi8K PiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkYihsaW5rLT5hdXgtPmRybV9hdXgsCj4gKwkJCQlE UF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SLCAmZGF0YSk7Cj4gKwlpZiAocmxlbiA8IDApIHsK PiArCQlEUk1fRVJST1IoImF1eCByZWFkIGZhaWxlZC4gcmxlbj0lemRcbiIsIHJsZW4pOwo+ICsJ CXJldHVybiBybGVuOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19EUCgiZGV2aWNlIHNlcnZpY2Ug aXJxIHZlY3RvciA9IDB4JXhcbiIsIGRhdGEpOwo+ICsKPiArCWlmICghKGRhdGEgJiBEUF9BVVRP TUFURURfVEVTVF9SRVFVRVNUKSkgewo+ICsJCURSTV9ERUJVR19EUCgibm8gdGVzdCByZXF1ZXN0 ZWRcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8qKgo+ICsJICogUmVhZCB0aGUg bGluayByZXF1ZXN0IGJ5dGUgKEJ5dGUgMHgyMTgpIHRvIGRldGVybWluZSB3aGF0IHR5cGUKPiAr CSAqIG9mIGF1dG9tYXRlZCBsaW5rIGhhcyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgc2luay4KPiAr CSAqLwo+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWRiKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9SRVFVRVNULCAmZGF0YSk7Cj4gKwlpZiAocmxlbiA8IDApIHsKPiArCQlEUk1fRVJST1Io ImF1eCByZWFkIGZhaWxlZC4gcmxlbj0lemRcbiIsIHJsZW4pOwo+ICsJCXJldHVybiBybGVuOwo+ ICsJfQo+ICsKPiArCWlmICghZGF0YSB8fCAoZGF0YSA9PSBEUF9URVNUX0xJTktfRkFVWF9QQVRU RVJOKSkgewo+ICsJCURSTV9ERUJVR19EUCgibGluayAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsIGRh dGEpOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19EUCgiVGVzdDooMHgl eCkgcmVxdWVzdGVkXG4iLCBkYXRhKTsKPiArCWxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQg PSBkYXRhOwo+ICsKPiArCWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RF U1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7Cj4gKwkJcmV0ID0gZHBfbGlua19wYXJzZV9waHlf dGVzdF9wYXJhbXMobGluayk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlbmQ7Cj4gKwkJcmV0 ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsKPiArCQlpZiAocmV0 KQo+ICsJCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlpZiAobGluay0+cmVxdWVzdC50ZXN0X3Jl cXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHsKPiArCQlyZXQgPSBkcF9saW5rX3Bh cnNlX2xpbmtfdHJhaW5pbmdfcGFyYW1zKGxpbmspOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8g ZW5kOwo+ICsJfQo+ICsKPiArCWlmIChkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVz dGVkKAo+ICsJCQlsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkKSkgewo+ICsJCXJldCA9IGRw X2xpbmtfcGFyc2VfdmlkZW9fcGF0dGVybl9wYXJhbXMobGluayk7Cj4gKwkJaWYgKHJldCkKPiAr CQkJZ290byBlbmQ7Cj4gKwo+ICsJCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVybl9w YXJhbXMobGluayk7Cj4gKwl9Cj4gK2VuZDoKPiArCS8qKgo+ICsJICogU2VuZCBhIERQX1RFU1Rf QUNLIGlmIGFsbCBsaW5rIHBhcmFtZXRlcnMgYXJlIHZhbGlkLCBvdGhlcndpc2Ugc2VuZAo+ICsJ ICogYSBEUF9URVNUX05BSy4KPiArCSAqLwo+ICsJaWYgKHJldCkgewo+ICsJCWxpbmstPmRwX2xp bmsudGVzdF9yZXNwb25zZSA9IERQX1RFU1RfTkFLOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAobGlu ay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCAhPSBEUF9URVNUX0xJTktfRURJRF9SRUFEKQo+ICsJ CQlsaW5rLT5kcF9saW5rLnRlc3RfcmVzcG9uc2UgPSBEUF9URVNUX0FDSzsKPiArCQllbHNlCj4g KwkJCWxpbmstPmRwX2xpbmsudGVzdF9yZXNwb25zZSA9Cj4gKwkJCQlEUF9URVNUX0VESURfQ0hF Q0tTVU1fV1JJVEU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgpIC0gcGFyc2VzIHRoZSBzaW5rIGNvdW50Cj4g KyAqCj4gKyAqIFBhcnNlcyB0aGUgRFBDRCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiB1cGRhdGUg dG8gdGhlIHNpbmsgY291bnQKPiArICogKEJ5dGUgMHgyMDApLCBhbmQgd2hldGhlciBhbGwgdGhl IHNpbmsgZGV2aWNlcyBjb25uZWN0ZWQgaGF2ZSBDb250ZW50Cj4gKyAqIFByb3RlY3Rpb24gZW5h YmxlZC4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9zaW5rX2NvdW50KHN0cnVj dCBkcF9saW5rICpkcF9saW5rKQo+ICt7Cj4gKwlzc2l6ZV90IHJsZW47Cj4gKwlib29sIGNwX3Jl YWR5Owo+ICsKPiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsgPSBjb250YWluZXJfb2Yo ZHBfbGluaywKPiArCQkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4gKwo+ICsJ cmxlbiA9IGRybV9kcF9kcGNkX3JlYWRiKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfU0lOS19DT1VO VCwKPiArCQkJCSAmbGluay0+ZHBfbGluay5zaW5rX2NvdW50KTsKPiArCWlmIChybGVuIDwgMCkg ewo+ICsJCURSTV9FUlJPUigic2luayBjb3VudCByZWFkIGZhaWxlZC4gcmxlbj0lemRcbiIsIHJs ZW4pOwo+ICsJCXJldHVybiBybGVuOwo+ICsJfQo+ICsKPiArCWNwX3JlYWR5ID0gbGluay0+ZHBf bGluay5zaW5rX2NvdW50ICYgRFBfU0lOS19DUF9SRUFEWTsKPiArCj4gKwlsaW5rLT5kcF9saW5r LnNpbmtfY291bnQgPQo+ICsJCURQX0dFVF9TSU5LX0NPVU5UKGxpbmstPmRwX2xpbmsuc2lua19j b3VudCk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJzaW5rX2NvdW50ID0gMHgleCwgY3BfcmVhZHkg PSAweCV4XG4iLAo+ICsJCWxpbmstPmRwX2xpbmsuc2lua19jb3VudCwgY3BfcmVhZHkpOwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2xpbmtfcGFyc2Vfc2lua19zdGF0 dXNfZmllbGQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJaW50IGxlbiA9 IDA7Cj4gKwo+ICsJbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGluay0+ZHBfbGluay5zaW5rX2Nv dW50Owo+ICsJZHBfbGlua19wYXJzZV9zaW5rX2NvdW50KCZsaW5rLT5kcF9saW5rKTsKPiArCj4g KwlsZW4gPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGxpbmstPmF1eC0+ZHJtX2F1eCwK PiArCQlsaW5rLT5saW5rX3N0YXR1cyk7Cj4gKwlpZiAobGVuIDwgRFBfTElOS19TVEFUVVNfU0la RSkKPiArCQlEUk1fRVJST1IoIkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkXG4iKTsKPiArCWRw X2xpbmtfcGFyc2VfcmVxdWVzdChsaW5rKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtf cHJvY2Vzc19saW5rX3RyYWluaW5nX3JlcXVlc3QoKSAtIHByb2Nlc3NlcyBuZXcgdHJhaW5pbmcg cmVxdWVzdHMKPiArICogQGxpbms6IERpc3BsYXkgUG9ydCBsaW5rIGRhdGEKPiArICoKPiArICog VGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBuZXcgbGluayB0cmFpbmluZyByZXF1ZXN0cyB0aGF0 IGFyZSBpbml0aWF0ZWQgYnkKPiArICogdGhlIHNpbmsuIEluIHBhcnRpY3VsYXIsIGl0IHdpbGwg dXBkYXRlIHRoZSByZXF1ZXN0ZWQgbGFuZSBjb3VudCBhbmQgbGluawo+ICsgKiBsaW5rIHJhdGUs IGFuZCB0aGVuIHRyaWdnZXIgdGhlIGxpbmsgcmV0cmFpbmluZyBwcm9jZWR1cmUuCj4gKyAqCj4g KyAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIGEgbGluayB0cmFpbmluZyByZXF1ZXN0 IGhhcyBiZWVuIHByb2Nlc3NlZCwKPiArICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5W QUwuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19saW5rX3RyYWluaW5nX3Jl cXVlc3Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJaWYgKGxpbmstPnJl cXVlc3QudGVzdF9yZXF1ZXN0ZWQgIT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKQo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCURSTV9ERUJVR19EUCgiVGVzdDoweCV4IGxpbmsgcmF0ZSA9IDB4 JXgsIGxhbmUgY291bnQgPSAweCV4XG4iLAo+ICsJCQlEUF9URVNUX0xJTktfVFJBSU5JTkcsCj4g KwkJCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUsCj4gKwkJCWxpbmstPnJlcXVlc3QudGVz dF9sYW5lX2NvdW50KTsKPiArCj4gKwlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5l cyA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50Owo+ICsJbGluay0+ZHBfbGluay5saW5r X3BhcmFtcy5yYXRlID0gbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArYm9vbCBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShzdHJ1Y3Qg ZHBfbGluayAqZHBfbGluaykKPiArewo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9 IE5VTEw7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlEUk1f RVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4g KwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRw X2xpbmspOwo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihsaW5rLT5hdXgtPmRybV9h dXgsIERQX1RFU1RfUkVTUE9OU0UsCj4gKwkJCWRwX2xpbmstPnRlc3RfcmVzcG9uc2UpOwo+ICsJ cmV0dXJuIHJldCA9PSAxOwo+ICt9Cj4gKwo+ICtpbnQgZHBfbGlua19wc21fY29uZmlnKHN0cnVj dCBkcF9saW5rICpkcF9saW5rLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtf aW5mbywgYm9vbCBlbmFibGUpCj4gK3sKPiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsg PSBOVUxMOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFkcF9saW5rKSB7Cj4gKwkJRFJN X0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRl LCBkcF9saW5rKTsKPiArCj4gKwlpZiAoZW5hYmxlKQo+ICsJCXJldCA9IGRybV9kcF9saW5rX3Bv d2VyX2Rvd24obGluay0+YXV4LT5kcm1fYXV4LCBsaW5rX2luZm8pOwo+ICsJZWxzZQo+ICsJCXJl dCA9IGRybV9kcF9saW5rX3Bvd2VyX3VwKGxpbmstPmF1eC0+ZHJtX2F1eCwgbGlua19pbmZvKTsK PiArCj4gKwlpZiAocmV0KQo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvICVzIGxvdyBwb3dlciBt b2RlXG4iLCBlbmFibGUgPyAiZW50ZXIiIDogImV4aXQiKTsKPiArCWVsc2UKPiArCQlkcF9saW5r LT5wc21fZW5hYmxlZCA9IGVuYWJsZTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICti b29sIGRwX2xpbmtfc2VuZF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1 OCBjaGVja3N1bSkKPiArewo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9IE5VTEw7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlEUk1fRVJST1Io ImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlsaW5r ID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmsp Owo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihsaW5rLT5hdXgtPmRybV9hdXgsIERQ X1RFU1RfRURJRF9DSEVDS1NVTSwgY2hlY2tzdW0pOwo+ICsJcmV0dXJuIHJldCA9PSAxOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdnhfcHgoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaykKPiArewo+ICsJdTggZGF0YTsKPiArCWludCByZXQgPSAwOwo+ICsJdTMyIHYw LCBwMCwgdjEsIHAxLCB2MiwgcDIsIHYzLCBwMzsKPiArCXNzaXplX3QgcmxlbjsKPiArCj4gKwly bGVuID0gZHJtX2RwX2RwY2RfcmVhZGIobGluay0+YXV4LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVR VUVTVF9MQU5FMF8xLCAmZGF0YSk7Cj4gKwlpZiAocmxlbiA8IDApIHsKPiArCQlEUk1fRVJST1Io ImZhaWxlZCB0byByZWFkIGxhbmVzLiBybGVuPSV6ZFxuIiwgcmxlbik7Cj4gKwkJcmV0dXJuIHJs ZW47Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJsYW5lcyAwLzEgKEJ5dGUgMHgyMDYpOiAw eCV4XG4iLCBkYXRhKTsKPiArCj4gKwl2MCA9IGRhdGEgJiAweDM7Cj4gKwlkYXRhID0gZGF0YSA+ PiAyOwo+ICsJcDAgPSBkYXRhICYgMHgzOwo+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPiArCj4gKwl2 MSA9IGRhdGEgJiAweDM7Cj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+ICsJcDEgPSBkYXRhICYgMHgz Owo+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPiArCj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZGIo bGluay0+YXV4LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMl8zLCAmZGF0YSk7Cj4g KwlpZiAocmxlbiA8IDApIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWFkIGxhbmVzIDIv My4gcmxlbj0lemRcbiIsIHJsZW4pOwo+ICsJCXJldHVybiBybGVuOwo+ICsJfQo+ICsKPiArCURS TV9ERUJVR19EUCgibGFuZXMgMi8zIChCeXRlIDB4MjA3KTogMHgleFxuIiwgZGF0YSk7Cj4gKwo+ ICsJdjIgPSBkYXRhICYgMHgzOwo+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPiArCXAyID0gZGF0YSAm IDB4MzsKPiArCWRhdGEgPSBkYXRhID4+IDI7Cj4gKwo+ICsJdjMgPSBkYXRhICYgMHgzOwo+ICsJ ZGF0YSA9IGRhdGEgPj4gMjsKPiArCXAzID0gZGF0YSAmIDB4MzsKPiArCWRhdGEgPSBkYXRhID4+ IDI7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJ2eDogMD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxuIiwg djAsIHYxLCB2MiwgdjMpOwo+ICsJRFJNX0RFQlVHX0RQKCJweDogMD0lZCwgMT0lZCwgMj0lZCwg Mz0lZFxuIiwgcDAsIHAxLCBwMiwgcDMpOwo+ICsKPiArCS8qKgo+ICsJICogVXBkYXRlIHRoZSB2 b2x0YWdlIGFuZCBwcmUtZW1waGFzaXMgbGV2ZWxzIGFzIHBlciBEUENEIHJlcXVlc3QKPiArCSAq IHZlY3Rvci4KPiArCSAqLwo+ICsJRFJNX0RFQlVHX0RQKCJDdXJyZW50OiB2X2xldmVsID0gMHgl eCwgcF9sZXZlbCA9IDB4JXhcbiIsCj4gKwkJCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy52X2xl dmVsLAo+ICsJCQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucF9sZXZlbCk7Cj4gKwlEUk1fREVC VUdfRFAoIlJlcXVlc3RlZDogdl9sZXZlbCA9IDB4JXgsIHBfbGV2ZWwgPSAweCV4XG4iLCB2MCwg cDApOwo+ICsJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnZfbGV2ZWwgPSB2MDsKPiArCWxpbmst PmRwX2xpbmsucGh5X3BhcmFtcy5wX2xldmVsID0gcDA7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19waHlfdGVzdF9wYXR0ZXJuX3JlcXVl c3QoKSAtIHByb2Nlc3MgbmV3IHBoeSBsaW5rIHJlcXVlc3RzCj4gKyAqIEBsaW5rOiBEaXNwbGF5 IFBvcnQgRHJpdmVyIGRhdGEKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBu ZXcgcGh5IGxpbmsgcGF0dGVybiByZXF1ZXN0cyB0aGF0IGFyZSBpbml0aWF0ZWQKPiArICogYnkg dGhlIHNpbmsuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIGEgcGh5IGxpbmsgcGF0dGVy biBoYXMgYmVlbgo+ICsgKiBwcm9jZXNzZWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiAtRUlO VkFMLgo+ICsgKi8KPiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rlc3RfcGF0dGVy bl9yZXF1ZXN0KAo+ICsJCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCWlu dCByZXQgPSAwOwo+ICsKPiArCWlmICghKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBE UF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikpIHsKPiArCQlEUk1fREVCVUdfRFAoIm5vIHBo eSB0ZXN0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAoIWlzX2xp bmtfcmF0ZV92YWxpZChsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlKSB8fAo+ICsJCSFpc19s YW5lX2NvdW50X3ZhbGlkKGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50KSkgewo+ICsJCURS TV9FUlJPUigiSW52YWxpZCBwYXJhbXM6IGxpbmsgcmF0ZSA9IDB4JXgsIGxhbmUgY291bnQgPSAw eCV4XG4iLAo+ICsJCQlsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlLCBsaW5rLT5yZXF1ZXN0 LnRlc3RfbGFuZV9jb3VudCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJRFJN X0RFQlVHX0RQKCJDdXJyZW50OiByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCj4g KwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMucmF0ZSwKPiArCQkJbGluay0+ZHBfbGluay5s aW5rX3BhcmFtcy5udW1fbGFuZXMpOwo+ICsKPiArCURSTV9ERUJVR19EUCgiUmVxdWVzdGVkOiBy YXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCj4gKwkJCWxpbmstPnJlcXVlc3QudGVz dF9saW5rX3JhdGUsIGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50KTsKPiArCj4gKwlsaW5r LT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5lcyA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5l X2NvdW50Owo+ICsJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5yYXRlID0gbGluay0+cmVxdWVz dC50ZXN0X2xpbmtfcmF0ZTsKPiArCj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX3Z4X3B4KGxpbmsp Owo+ICsJaWYgKHJldCkKPiArCQkgIERSTV9FUlJPUigicGFyc2VfdnhfcHggZmFpbGVkLiByZXQ9 JWRcbiIsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHU4IGdl dF9saW5rX3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwg aW50IHIpCj4gK3sKPiArCXJldHVybiBsaW5rX3N0YXR1c1tyIC0gRFBfTEFORTBfMV9TVEFUVVNd Owo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0 ZSgpIC0gcHJvY2Vzc2VzIGxpbmsgc3RhdHVzIHVwZGF0ZXMKPiArICogQGxpbms6IERpc3BsYXkg UG9ydCBsaW5rIG1vZHVsZSBkYXRhCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVj ayBmb3IgY2hhbmdlcyBpbiB0aGUgbGluayBzdGF0dXMsIGUuZy4gY2xvY2sKPiArICogcmVjb3Zl cnkgZG9uZSBvbiBhbGwgbGFuZXMsIGFuZCB0cmlnZ2VyIGxpbmsgdHJhaW5pbmcgaWYgdGhlcmUg aXMgYQo+ICsgKiBmYWlsdXJlL2Vycm9yIG9uIHRoZSBsaW5rLgo+ICsgKgo+ICsgKiBUaGUgZnVu Y3Rpb24gd2lsbCByZXR1cm4gMCBpZiB0aGUgYSBsaW5rIHN0YXR1cyB1cGRhdGUgaGFzIGJlZW4g cHJvY2Vzc2VkLAo+ICsgKiBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gLUVJTlZBTC4KPiArICov Cj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4gKwlpZiAoIShnZXRfbGlua19zdGF0dXMobGlu ay0+bGlua19zdGF0dXMsIERQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQpICYKPiArCQkJCQkJ CURQX0xJTktfU1RBVFVTX1VQREFURUQpIHx8Cj4gKwkJCShkcm1fZHBfY2xvY2tfcmVjb3Zlcnlf b2sobGluay0+bGlua19zdGF0dXMsCj4gKwkJCQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5u dW1fbGFuZXMpICYmCj4gKwkJCWRybV9kcF9jaGFubmVsX2VxX29rKGxpbmstPmxpbmtfc3RhdHVz LAo+ICsJCQkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubnVtX2xhbmVzKSkpCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJRFJNX0RFQlVHX0RQKCJjaGFubmVsX2VxX2RvbmUgPSAlZCwg Y2xvY2tfcmVjb3ZlcnlfZG9uZSA9ICVkXG4iLAo+ICsJCQlkcm1fZHBfY2xvY2tfcmVjb3Zlcnlf b2sobGluay0+bGlua19zdGF0dXMsCj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubnVt X2xhbmVzKSwKPiArCQkJZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmstPmxpbmtfc3RhdHVz LAo+ICsJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLm51bV9sYW5lcykpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfbGlua19wcm9jZXNzX2Rvd25zdHJlYW1f cG9ydF9zdGF0dXNfY2hhbmdlKCkgLSBwcm9jZXNzIHBvcnQgc3RhdHVzIGNoYW5nZXMKPiArICog QGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9u IHdpbGwgaGFuZGxlIGRvd25zdHJlYW0gcG9ydCB1cGRhdGVzIHRoYXQgYXJlIGluaXRpYXRlZCBi eQo+ICsgKiB0aGUgc2luay4gSWYgdGhlIGRvd25zdHJlYW0gcG9ydCBzdGF0dXMgaGFzIGNoYW5n ZWQsIHRoZSBFRElEIGlzIHJlYWQgdmlhCj4gKyAqIEFVWC4KPiArICoKPiArICogVGhlIGZ1bmN0 aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBkb3duc3RyZWFtIHBvcnQgdXBkYXRlIGhhcyBiZWVuCj4g KyAqIHByb2Nlc3NlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCj4gKyAqLwo+ ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19kc19wb3J0X3N0YXR1c19jaGFuZ2Uoc3RydWN0 IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJaWYgKGdldF9saW5rX3N0YXR1cyhsaW5r LT5saW5rX3N0YXR1cywgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCkgJgo+ICsJCQkJCURQ X0RPV05TVFJFQU1fUE9SVF9TVEFUVVNfQ0hBTkdFRCkKPiArCQlnb3RvIHJlc2V0Owo+ICsKPiAr CWlmIChsaW5rLT5wcmV2X3NpbmtfY291bnQgPT0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50KQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArcmVzZXQ6Cj4gKwkvKiByZXNldCBwcmV2X3Npbmtf Y291bnQgKi8KPiArCWxpbmstPnByZXZfc2lua19jb3VudCA9IGxpbmstPmRwX2xpbmsuc2lua19j b3VudDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZHBfbGlua19p c192aWRlb19wYXR0ZXJuX3JlcXVlc3RlZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ ICt7Cj4gKwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBEUF9URVNUX0xJ TktfVklERU9fUEFUVEVSTikKPiArCQkmJiAhKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQg Jgo+ICsJCURQX1RFU1RfTElOS19BVURJT19ESVNBQkxFRF9WSURFTyk7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIGRwX2xpbmtfaXNfYXVkaW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVx dWVzdGVkICYgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkcF9saW5rX3Jlc2V0X2RhdGEoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiAr ewo+ICsJbGluay0+cmVxdWVzdCA9IChjb25zdCBzdHJ1Y3QgZHBfbGlua19yZXF1ZXN0KXsgMCB9 Owo+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3Rl c3RfdmlkZW8peyAwIH07Cj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVw dGggPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOwo+ICsJbGluay0+ZHBfbGluay50ZXN0X2F1 ZGlvID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8peyAwIH07Cj4gKwlsaW5rLT5k cF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0dGVybl9zZWwgPSAwOwo+ICsJbGluay0+ZHBf bGluay5zaW5rX3JlcXVlc3QgPSAwOwo+ICsJbGluay0+ZHBfbGluay50ZXN0X3Jlc3BvbnNlID0g MDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KCkgLSBoYW5k bGUgSFBEIElSUSB0cmFuc2l0aW9uIHRvIEhJR0gKPiArICogQGxpbms6IHBvaW50ZXIgdG8gbGlu ayBtb2R1bGUgZGF0YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBI UEQgSVJRIHN0YXRlIHRyYW5zaXRpb25zIGZyb20gTE9XIHRvIEhJR0gKPiArICogKGluY2x1ZGlu ZyBjYXNlcyB3aGVuIHRoZXJlIGFyZSBiYWNrIHRvIGJhY2sgSFBEIElSUSBISUdIKSBpbmRpY2F0 aW5nCj4gKyAqIHRoZSBzdGFydCBvZiBhIG5ldyBsaW5rIHRyYWluaW5nIHJlcXVlc3Qgb3Igc2lu ayBzdGF0dXMgdXBkYXRlLgo+ICsgKi8KPiAraW50IGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KHN0 cnVjdCBkcF9saW5rICpkcF9saW5rKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXN0cnVjdCBk cF9saW5rX3ByaXZhdGUgKmxpbms7Cj4gKwo+ICsJaWYgKCFkcF9saW5rKSB7Cj4gKwkJRFJNX0VS Uk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRw X2xpbmspOwo+ICsKPiArCWRwX2xpbmtfcmVzZXRfZGF0YShsaW5rKTsKPiArCj4gKwlkcF9saW5r X3BhcnNlX3Npbmtfc3RhdHVzX2ZpZWxkKGxpbmspOwo+ICsKPiArCWlmIChsaW5rLT5yZXF1ZXN0 LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19FRElEX1JFQUQpIHsKPiArCQlkcF9saW5r LT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX0VESURfUkVBRDsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19kc19wb3J0X3N0YXR1c19jaGFu Z2UobGluayk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBE U19QT1JUX1NUQVRVU19DSEFOR0VEOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0 ID0gZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdChsaW5rKTsKPiArCWlmICgh cmV0KSB7Cj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19UUkFJTklO RzsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19w aHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3QobGluayk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCWRwX2xp bmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTjsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1 c191cGRhdGUobGluayk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVz dCB8PSBEUF9MSU5LX1NUQVRVU19VUERBVEVEOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl9yZXF1ZXN0ZWQobGluaykpIHsKPiArCQlk cF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk47Cj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRwX2xpbmtfaXNfYXVkaW9fcGF0dGVy bl9yZXF1ZXN0ZWQobGluaykpIHsKPiArCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVT VF9MSU5LX0FVRElPX1BBVFRFUk47Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IGRwX2xpbmtfZ2V0X2NvbG9yaW1ldHJ5X2NvbmZp ZyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKPiArewo+ICsJdTMyIGNjOwo+ICsJc3RydWN0IGRw X2xpbmtfcHJpdmF0ZSAqbGluazsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlEUk1fRVJS T1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBf bGluayk7Cj4gKwo+ICsJLyoKPiArCSAqIFVubGVzcyBhIHZpZGVvIHBhdHRlcm4gQ1RTIHRlc3Qg aXMgb25nb2luZywgdXNlIFJHQl9WRVNBCj4gKwkgKiBPbmx5IFJHQl9WRVNBIGFuZCBSR0JfQ0VB IHN1cHBvcnRlZCBmb3Igbm93Cj4gKwkgKi8KPiArCWlmIChkcF9saW5rX2lzX3ZpZGVvX3BhdHRl cm5fcmVxdWVzdGVkKGxpbmspKQo+ICsJCWNjID0gbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3RfZHluX3JhbmdlOwo+ICsJZWxzZQo+ICsJCWNjID0gRFBfVEVTVF9EWU5BTUlDX1JBTkdFX1ZF U0E7Cj4gKwo+ICsJcmV0dXJuIGNjOwo+ICt9Cj4gKwo+ICtpbnQgZHBfbGlua19hZGp1c3RfbGV2 ZWxzKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCAqbGlua19zdGF0dXMpCj4gK3sKPiArCWlu dCBpOwo+ICsJaW50IG1heCA9IDA7Cj4gKwl1OCBkYXRhOwo+ICsJc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluazsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlEUk1fRVJST1IoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWxpbmsgPSBj b250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4g Kwo+ICsJLyogdXNlIHRoZSBtYXggbGV2ZWwgYWNyb3NzIGxhbmVzICovCj4gKwlmb3IgKGkgPSAw OyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubnVtX2xhbmVzOyBpKyspIHsKPiArCQlkYXRhID0g ZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLCBpKTsKPiArCQlE Uk1fREVCVUdfRFAoImxhbmU9JWQgcmVxX3ZvbHRhZ2Vfc3dpbmc9JWRcbiIsIGksIGRhdGEpOwo+ ICsJCWlmIChtYXggPCBkYXRhKQo+ICsJCQltYXggPSBkYXRhOwo+ICsJfQo+ICsKPiArCWRwX2xp bmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NI SUZUOwo+ICsKPiArCS8qIHVzZSB0aGUgbWF4IGxldmVsIGFjcm9zcyBsYW5lcyAqLwo+ICsJbWF4 ID0gMDsKPiArCWZvciAoaSA9IDA7IGkgPCBkcF9saW5rLT5saW5rX3BhcmFtcy5udW1fbGFuZXM7 IGkrKykgewo+ICsJCWRhdGEgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNp cyhsaW5rX3N0YXR1cywgaSk7Cj4gKwkJRFJNX0RFQlVHX0RQKCJsYW5lPSVkIHJlcV9wcmVfZW1w aGFzaXM9JWRcbiIsIGksIGRhdGEpOwo+ICsJCWlmIChtYXggPCBkYXRhKQo+ICsJCQltYXggPSBk YXRhOwo+ICsJfQo+ICsKPiArCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IG1heCA+PiBE UF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBBZGp1c3QgdGhl IHZvbHRhZ2Ugc3dpbmcgYW5kIHByZS1lbXBoYXNpcyBsZXZlbCBjb21iaW5hdGlvbiB0byB3aXRo aW4KPiArCSAqIHRoZSBhbGxvd2FibGUgcmFuZ2UuCj4gKwkgKi8KPiArCWlmIChkcF9saW5rLT5w aHlfcGFyYW1zLnZfbGV2ZWwgPiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BWCkgewo+ICsJCURS TV9ERUJVR19EUCgiUmVxdWVzdGVkIHZTd2luZ0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIsCj4g KwkJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19N QVgpOwo+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTUFYOwo+ICsJfQo+ICsKPiArCWlmIChkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwg PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFYKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJSZXF1ZXN0 ZWQgcHJlRW1waGFzaXNMZXZlbD0lZCwgY2hhbmdlIHRvICVkXG4iLAo+ICsJCQlkcF9saW5rLT5w aHlfcGFyYW1zLnBfbGV2ZWwsIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVgpOwo+ICsJCWRwX2xp bmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVg7Cj4gKwl9 Cj4gKwo+ICsJaWYgKChkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPiBEUF9UUkFJTl9QUkVf RU1QSEFTSVNfTFZMXzEpCj4gKwkJJiYgKGRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9PSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xWTF8yKSkgewo+ICsJCURSTV9ERUJVR19EUCgiUmVxdWVz dGVkIHByZUVtcGhhc2lzTGV2ZWw9JWQsIGNoYW5nZSB0byAlZFxuIiwKPiArCQkJZHBfbGluay0+ cGh5X3BhcmFtcy5wX2xldmVsLAo+ICsJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTFZMXzEpOwo+ ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IERQX1RSQUlOX1BSRV9FTVBIQVNJU19M VkxfMTsKPiArCX0KPiArCj4gKwlEUk1fREVCVUdfRFAoImFkanVzdGVkOiB2X2xldmVsPSVkLCBw X2xldmVsPSVkXG4iLAo+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgZHBfbGluay0+ cGh5X3BhcmFtcy5wX2xldmVsKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdTMyIGRw X2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0aChzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTMyIGJw cCkKPiArewo+ICsJdTMyIHRiZDsKPiArCj4gKwkvKgo+ICsJICogRmV3IHNpbXBsaXN0aWMgcnVs ZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKPiArCSAqICAgIDEuIFRlc3QgYml0IGRlcHRo IGlzIGJpdCBkZXB0aCBwZXIgY29sb3IgY29tcG9uZW50Cj4gKwkgKiAgICAyLiBBc3N1bWUgMyBj b2xvciBjb21wb25lbnRzCj4gKwkgKi8KPiArCXN3aXRjaCAoYnBwKSB7Cj4gKwljYXNlIDE4Ogo+ ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI0Ogo+ ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzg7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDMwOgo+ ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzEwOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCWlmICh0YmQgIT0gRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTikKPiArCQl0YmQgPSAo dGJkID4+IERQX1RFU1RfQklUX0RFUFRIX1NISUZUKTsKPiArCj4gKwlyZXR1cm4gdGJkOwo+ICt9 Cj4gKwo+ICtzdHJ1Y3QgZHBfbGluayAqZHBfbGlua19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZHBfYXV4ICphdXgpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfbGlu a19wcml2YXRlICpsaW5rOwo+ICsJc3RydWN0IGRwX2xpbmsgKmRwX2xpbms7Cj4gKwo+ICsJaWYg KCFkZXYgfHwgIWF1eCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJ cmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJbGluayA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqbGluayksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFsaW5rKSB7 Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJbGluay0+ ZGV2ICAgPSBkZXY7Cj4gKwlsaW5rLT5hdXggICA9IGF1eDsKPiArCj4gKwlkcF9saW5rID0gJmxp bmstPmRwX2xpbms7Cj4gKwo+ICsJcmV0dXJuIGRwX2xpbms7Cj4gK2Vycm9yOgo+ICsJcmV0dXJu IEVSUl9QVFIocmMpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9saW5r ICpkcF9saW5rKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+ICsKPiAr CWlmICghZHBfbGluaykKPiArCQlyZXR1cm47Cj4gKwo+ICsJbGluayA9IGNvbnRhaW5lcl9vZihk cF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPiArCj4gKwlkZXZtX2tm cmVlKGxpbmstPmRldiwgbGluayk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9saW5rLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjA3OTA0Ygo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+IEBAIC0wLDAgKzEs MTMyIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiAr LyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RQX0xJTktfSF8KPiAr I2RlZmluZSBfRFBfTElOS19IXwo+ICsKPiArI2luY2x1ZGUgImRwX2F1eC5oIgo+ICsKPiArI2Rl ZmluZSBEU19QT1JUX1NUQVRVU19DSEFOR0VEIDB4MjAwCj4gKyNkZWZpbmUgRFBfVEVTVF9CSVRf REVQVEhfVU5LTk9XTiAweEZGRkZGRkZGCj4gKwo+ICtlbnVtIGRwX2xpbmtfdm9sdGFnZV9sZXZl bCB7Cj4gKwlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xWTF8wCT0gMCwKPiArCURQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTFZMXzEJPSAxLAo+ICsJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MVkxfMgk9 IDIsCj4gKwlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BWAk9IERQX1RSQUlOX1ZPTFRBR0VfU1dJ TkdfTFZMXzIsCj4gK307Cj4gKwo+ICtlbnVtIGRwX2xpbmtfcHJlZW1hcGhhc2lzX2xldmVsIHsK PiArCURQX1RSQUlOX1BSRV9FTVBIQVNJU19MVkxfMAk9IDAsCj4gKwlEUF9UUkFJTl9QUkVfRU1Q SEFTSVNfTFZMXzEJPSAxLAo+ICsJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX0xWTF8yCT0gMiwKPiAr CURQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVgJPSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTFZMXzIs Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfbGlua190ZXN0X3ZpZGVvIHsKPiArCXUzMiB0ZXN0X3Zp ZGVvX3BhdHRlcm47Cj4gKwl1MzIgdGVzdF9iaXRfZGVwdGg7Cj4gKwl1MzIgdGVzdF9keW5fcmFu Z2U7Cj4gKwl1MzIgdGVzdF9oX3RvdGFsOwo+ICsJdTMyIHRlc3Rfdl90b3RhbDsKPiArCXUzMiB0 ZXN0X2hfc3RhcnQ7Cj4gKwl1MzIgdGVzdF92X3N0YXJ0Owo+ICsJdTMyIHRlc3RfaHN5bmNfcG9s Owo+ICsJdTMyIHRlc3RfaHN5bmNfd2lkdGg7Cj4gKwl1MzIgdGVzdF92c3luY19wb2w7Cj4gKwl1 MzIgdGVzdF92c3luY193aWR0aDsKPiArCXUzMiB0ZXN0X2hfd2lkdGg7Cj4gKwl1MzIgdGVzdF92 X2hlaWdodDsKPiArCXUzMiB0ZXN0X3JyX2Q7Cj4gKwl1MzIgdGVzdF9ycl9uOwo+ICt9Owo+ICsK PiArc3RydWN0IGRwX2xpbmtfdGVzdF9hdWRpbyB7Cj4gKwl1MzIgdGVzdF9hdWRpb19zYW1wbGlu Z19yYXRlOwo+ICsJdTMyIHRlc3RfYXVkaW9fY2hhbm5lbF9jb3VudDsKPiArCXUzMiB0ZXN0X2F1 ZGlvX3BhdHRlcm5fdHlwZTsKPiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8xOwo+ICsJdTMy IHRlc3RfYXVkaW9fcGVyaW9kX2NoXzI7Cj4gKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfMzsK PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF80Owo+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9k X2NoXzU7Cj4gKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfNjsKPiArCXUzMiB0ZXN0X2F1ZGlv X3BlcmlvZF9jaF83Owo+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzg7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgZHBfbGlua19waHlfcGFyYW1zIHsKPiArCXUzMiBwaHlfdGVzdF9wYXR0ZXJuX3Nl bDsKPiArCXU4IHZfbGV2ZWw7Cj4gKwl1OCBwX2xldmVsOwo+ICt9Owo+ICsKPiArc3RydWN0IGRw X2xpbmsgewo+ICsJdTMyIHNpbmtfcmVxdWVzdDsKPiArCXUzMiB0ZXN0X3Jlc3BvbnNlOwo+ICsJ Ym9vbCBwc21fZW5hYmxlZDsKPiArCj4gKwl1OCBzaW5rX2NvdW50Owo+ICsJc3RydWN0IGRwX2xp bmtfdGVzdF92aWRlbyB0ZXN0X3ZpZGVvOwo+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF9hdWRpbyB0 ZXN0X2F1ZGlvOwo+ICsJc3RydWN0IGRwX2xpbmtfcGh5X3BhcmFtcyBwaHlfcGFyYW1zOwo+ICsJ c3RydWN0IGRybV9kcF9saW5rIGxpbmtfcGFyYW1zOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIG1k c3NfZHBfdGVzdF9iaXRfZGVwdGhfdG9fYnBwKCkgLSBjb252ZXJ0IHRlc3QgYml0IGRlcHRoIHRv IGJwcAo+ICsgKiBAdGJkOiB0ZXN0IGJpdCBkZXB0aAo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBi aXRzIHBlciBwaXhlbCAoYnBwKSB0byBiZSB1c2VkIGNvcnJlc3BvbmRpbmcgdG8gdGhlCj4gKyAq IGdpdCBiaXQgZGVwdGggdmFsdWUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGJpdCBkZXB0 aCBoYXMKPiArICogYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KPiArICovCj4gK3N0YXRpYyBpbmxp bmUgdTMyIGRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCh1MzIgdGJkKQo+ICt7Cj4gKwkvKgo+ICsJ ICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKPiArCSAq ICAgIDEuIEJpdCBkZXB0aCBpcyBwZXIgY29sb3IgY29tcG9uZW50Cj4gKwkgKiAgICAyLiBJZiBi aXQgZGVwdGggaXMgdW5rbm93biByZXR1cm4gMAo+ICsJICogICAgMy4gQXNzdW1lIDMgY29sb3Ig Y29tcG9uZW50cwo+ICsJICovCj4gKwlzd2l0Y2ggKHRiZCkgewo+ICsJY2FzZSBEUF9URVNUX0JJ VF9ERVBUSF82Ogo+ICsJCXJldHVybiAxODsKPiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfODoK PiArCQlyZXR1cm4gMjQ7Cj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgo+ICsJCXJldHVy biAzMDsKPiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjoKPiArCWRlZmF1bHQ6Cj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gK30KPiArCj4gK3UzMiBkcF9saW5rX2dldF90ZXN0X2JpdHNf ZGVwdGgoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHUzMiBicHApOwo+ICtpbnQgZHBfbGlua19w cm9jZXNzX3JlcXVlc3Qoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+ICtpbnQgZHBfbGlua19n ZXRfY29sb3JpbWV0cnlfY29uZmlnKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPiAraW50IGRw X2xpbmtfYWRqdXN0X2xldmVscyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTggKmxpbmtfc3Rh dHVzKTsKPiArYm9vbCBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShzdHJ1Y3QgZHBfbGluayAq ZHBfbGluayk7Cj4gK2ludCBkcF9saW5rX3BzbV9jb25maWcoc3RydWN0IGRwX2xpbmsgKmRwX2xp bmssCj4gKwkJc3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm8sIGJvb2wgZW5hYmxlKTsKPiAr Ym9vbCBkcF9saW5rX3NlbmRfZWRpZF9jaGVja3N1bShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywg dTggY2hlY2tzdW0pOwo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfZ2V0KCkgLSBnZXQgdGhlIGZ1 bmN0aW9uYWxpdGllcyBvZiBkcCB0ZXN0IG1vZHVsZQo+ICsgKgo+ICsgKgo+ICsgKiByZXR1cm46 IGEgcG9pbnRlciB0byBkcF9saW5rIHN0cnVjdAo+ICsgKi8KPiArc3RydWN0IGRwX2xpbmsgKmRw X2xpbmtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2F1eCAqYXV4KTsKPiArCj4g Ky8qKgo+ICsgKiBkcF9saW5rX3B1dCgpIC0gcmVsZWFzZXMgdGhlIGRwIHRlc3QgbW9kdWxlJ3Mg cmVzb3VyY2VzCj4gKyAqCj4gKyAqIEBkcF9saW5rOiBhbiBpbnN0YW5jZSBvZiBkcF9saW5rIG1v ZHVsZQo+ICsgKgo+ICsgKi8KPiArdm9pZCBkcF9saW5rX3B1dChzdHJ1Y3QgZHBfbGluayAqZHBf bGluayk7Cj4gKwo+ICsjZW5kaWYgLyogX0RQX0xJTktfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9wYW5lbC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kN2UxNjVm MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVs LmMKPiBAQCAtMCwwICsxLDUwNCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE5LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjZGVmaW5lIHBy X2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSAi ZHBfcGFuZWwuaCIKPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4gKwo+ICsjZGVmaW5lIERQX01BWF9EU19QT1JUX0NPVU5U IDEKPiArCj4gK3N0cnVjdCBkcF9wYW5lbF9wcml2YXRlIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRl djsKPiArCXN0cnVjdCBkcF9wYW5lbCBkcF9wYW5lbDsKPiArCXN0cnVjdCBkcF9hdXggKmF1eDsK PiArCXN0cnVjdCBkcF9saW5rICpsaW5rOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNh dGFsb2c7Cj4gKwlib29sIHBhbmVsX29uOwo+ICsJYm9vbCBhdXhfY2ZnX3VwZGF0ZV9kb25lOwo+ ICt9Owo+ICsKPiArc3RhdGljIGludCBkcF9wYW5lbF9yZWFkX2RwY2Qoc3RydWN0IGRwX3BhbmVs ICpkcF9wYW5lbCkKPiArewo+ICsJaW50IHJsZW4sIHJjID0gMDsKPiArCXN0cnVjdCBkcF9wYW5l bF9wcml2YXRlICpwYW5lbDsKPiArCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOwo+ICsJ dTggKmRwY2QsIG1ham9yID0gMCwgbWlub3IgPSAwOwo+ICsJdTMyIGRmcF9jb3VudCA9IDA7Cj4g Kwl1bnNpZ25lZCBsb25nIGNhcHMgPSBEUF9MSU5LX0NBUF9FTkhBTkNFRF9GUkFNSU5HOwo+ICsK PiArCWRwY2QgPSBkcF9wYW5lbC0+ZHBjZDsKPiArCj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihk cF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiArCWxpbmtfaW5m byA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFk KHBhbmVsLT5hdXgtPmRybV9hdXgsIERQX0RQQ0RfUkVWLAo+ICsJCWRwY2QsIChEUF9SRUNFSVZF Ul9DQVBfU0laRSArIDEpKTsKPiArCWlmIChybGVuIDwgKERQX1JFQ0VJVkVSX0NBUF9TSVpFICsg MSkpIHsKPiArCQlEUk1fRVJST1IoImRwY2QgcmVhZCBmYWlsZWQsIHJsZW49JWRcbiIsIHJsZW4p Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWxpbmtfaW5mby0+cmV2aXNpb24g PSBkcF9wYW5lbC0+ZHBjZFtEUF9EUENEX1JFVl07Cj4gKwo+ICsJbWFqb3IgPSAobGlua19pbmZv LT5yZXZpc2lvbiA+PiA0KSAmIDB4MGY7Cj4gKwltaW5vciA9IGxpbmtfaW5mby0+cmV2aXNpb24g JiAweDBmOwo+ICsJRFJNX0RFQlVHX0RQKCJ2ZXJzaW9uOiAlZC4lZFxuIiwgbWFqb3IsIG1pbm9y KTsKPiArCj4gKwlsaW5rX2luZm8tPnJhdGUgPQo+ICsJCWRybV9kcF9id19jb2RlX3RvX2xpbmtf cmF0ZShkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTElOS19SQVRFXSk7Cj4gKwlEUk1fREVCVUdfRFAo ImxpbmtfcmF0ZT0lZFxuIiwgbGlua19pbmZvLT5yYXRlKTsKPiArCj4gKwlsaW5rX2luZm8tPm51 bV9sYW5lcyA9IGRwX3BhbmVsLT5kcGNkW0RQX01BWF9MQU5FX0NPVU5UXSAmCj4gKwkJCQlEUF9N QVhfTEFORV9DT1VOVF9NQVNLOwo+ICsKPiArCURSTV9ERUJVR19EUCgibGFuZV9jb3VudD0lZFxu IiwgbGlua19pbmZvLT5udW1fbGFuZXMpOwo+ICsKPiArCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJh bWVfY2FwKGRwY2QpKQo+ICsJCWxpbmtfaW5mby0+Y2FwYWJpbGl0aWVzIHw9IGNhcHM7Cj4gKwo+ ICsJZGZwX2NvdW50ID0gZHBjZFtEUF9ET1dOX1NUUkVBTV9QT1JUX0NPVU5UXSAmCj4gKwkJCQkJ CURQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlQ7Cj4gKwlpZiAoZGZwX2NvdW50ID4gRFBfTUFYX0RT X1BPUlRfQ09VTlQpCj4gKwkJRFJNX0VSUk9SKCJEUyBwb3J0IGNvdW50ICVkIGdyZWF0ZXIgdGhh dCBtYXggKCVkKSBzdXBwb3J0ZWRcbiIsCj4gKwkJCWRmcF9jb3VudCwgRFBfTUFYX0RTX1BPUlRf Q09VTlQpOwo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wYW5l bF9yZWFkX2VkaWQoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKPiArCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCWludCByZXRyeV9jbnQgPSAwOwo+ICsJY29uc3Qg aW50IG1heF9yZXRyeSA9IDEwOwo+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+ ICsKPiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJp dmF0ZSwgZHBfcGFuZWwpOwo+ICsKPiArCWRvIHsKPiArCQlrZnJlZShkcF9wYW5lbC0+ZWRpZCk7 Cj4gKwkJZHBfcGFuZWwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLAo+ICsJCQkJCSAg ICAgICZwYW5lbC0+YXV4LT5kcm1fYXV4LT5kZGMpOwo+ICsJCWlmICghZHBfcGFuZWwtPmVkaWQp IHsKPiArCQkJRFJNX0VSUk9SKCJFRElEIHJlYWQgZmFpbGVkXG4iKTsKPiArCQkJcmV0cnlfY250 Kys7Cj4gKwkJCWRwX2F1eF9yZWNvbmZpZyhwYW5lbC0+YXV4KTsKPiArCQkJcGFuZWwtPmF1eF9j ZmdfdXBkYXRlX2RvbmUgPSB0cnVlOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJldHVybiAwOwo+ICsJ CX0KPiArCX0gd2hpbGUgKHJldHJ5X2NudCA8IG1heF9yZXRyeSk7Cj4gKwo+ICsJcmV0dXJuIC1F SU5WQUw7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgZHBfcGFuZWxfZ2V0X3N1cHBvcnRlZF9icHAo c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKPiArCQl1MzIgbW9kZV9lZGlkX2JwcCwgdTMyIG1v ZGVfcGNsa19raHopCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOwo+ICsJ Y29uc3QgdTMyIG1heF9zdXBwb3J0ZWRfYnBwID0gMzAsIG1pbl9zdXBwb3J0ZWRfYnBwID0gMTg7 Cj4gKwl1MzIgYnBwID0gMCwgZGF0YV9yYXRlX2toeiA9IDA7Cj4gKwo+ICsJYnBwID0gbWluX3Qo dTMyLCBtb2RlX2VkaWRfYnBwLCBtYXhfc3VwcG9ydGVkX2JwcCk7Cj4gKwo+ICsJbGlua19pbmZv ID0gJmRwX3BhbmVsLT5saW5rX2luZm87Cj4gKwlkYXRhX3JhdGVfa2h6ID0gbGlua19pbmZvLT5u dW1fbGFuZXMgKiBsaW5rX2luZm8tPnJhdGUgKiA4Owo+ICsKPiArCXdoaWxlIChicHAgPiBtaW5f c3VwcG9ydGVkX2JwcCkgewo+ICsJCWlmIChtb2RlX3BjbGtfa2h6ICogYnBwIDw9IGRhdGFfcmF0 ZV9raHopCj4gKwkJCWJyZWFrOwo+ICsJCWJwcCAtPSA2Owo+ICsJfQo+ICsKPiArCXJldHVybiBi cHA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhbmVsX3NldF90ZXN0X21vZGUoc3RydWN0 IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsLAo+ICsJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1v ZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSA9IE5VTEw7Cj4g KwlzdHJ1Y3QgZHBfbGlua190ZXN0X3ZpZGVvICp0ZXN0X2luZm8gPSBOVUxMOwo+ICsKPiArCWlm ICghcGFuZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1 cm47Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGUgPSAmbW9kZS0+ZHJtX21vZGU7Cj4gKwl0ZXN0X2lu Zm8gPSAmcGFuZWwtPmxpbmstPnRlc3RfdmlkZW87Cj4gKwo+ICsJZHJtX21vZGUtPmhkaXNwbGF5 ID0gdGVzdF9pbmZvLT50ZXN0X2hfd2lkdGg7Cj4gKwlkcm1fbW9kZS0+aHN5bmNfc3RhcnQgPSBk cm1fbW9kZS0+aGRpc3BsYXkgKyB0ZXN0X2luZm8tPnRlc3RfaF90b3RhbCAtCj4gKwkJCSh0ZXN0 X2luZm8tPnRlc3RfaF9zdGFydCArIHRlc3RfaW5mby0+dGVzdF9oX3dpZHRoKTsKPiArCWRybV9t b2RlLT5oc3luY19lbmQgPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3Rf aHN5bmNfd2lkdGg7Cj4gKwlkcm1fbW9kZS0+aHRvdGFsID0gZHJtX21vZGUtPmhzeW5jX2VuZCAr IHRlc3RfaW5mby0+dGVzdF9oX3N0YXJ0IC0KPiArCQkJCQkJdGVzdF9pbmZvLT50ZXN0X2hzeW5j X3dpZHRoOwo+ICsKPiArCWRybV9tb2RlLT52ZGlzcGxheSA9IHRlc3RfaW5mby0+dGVzdF92X2hl aWdodDsKPiArCWRybV9tb2RlLT52c3luY19zdGFydCA9IGRybV9tb2RlLT52ZGlzcGxheSArIHRl c3RfaW5mby0+dGVzdF92X3RvdGFsIC0KPiArCQkJKHRlc3RfaW5mby0+dGVzdF92X3N0YXJ0ICsg dGVzdF9pbmZvLT50ZXN0X3ZfaGVpZ2h0KTsKPiArCWRybV9tb2RlLT52c3luY19lbmQgPSBkcm1f bW9kZS0+dnN5bmNfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3RfdnN5bmNfd2lkdGg7Cj4gKwlkcm1f bW9kZS0+dnRvdGFsID0gZHJtX21vZGUtPnZzeW5jX2VuZCArIHRlc3RfaW5mby0+dGVzdF92X3N0 YXJ0IC0KPiArCQkJCQkJdGVzdF9pbmZvLT50ZXN0X3ZzeW5jX3dpZHRoOwo+ICsKPiArCWRybV9t b2RlLT52cmVmcmVzaCA9IHRlc3RfaW5mby0+dGVzdF9ycl9uOwo+ICsJZHJtX21vZGUtPmNsb2Nr ID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgKgo+ICsJCXRlc3RfaW5mby0+dGVzdF92X3RvdGFs ICogZHJtX21vZGUtPnZyZWZyZXNoOwo+ICsKPiArCWRybV9tb2RlLT50eXBlID0gMHg0ODsKPiAr CWRybV9tb2RlX3NldF9uYW1lKGRybV9tb2RlKTsKPiArCj4gKwlpZiAodGVzdF9pbmZvLT50ZXN0 X3JyX2QgPT0gMCkKPiArCQlkcm1fbW9kZS0+Y2xvY2sgLz0gMTAwMDsKPiArCWVsc2UKPiArCQlk cm1fbW9kZS0+Y2xvY2sgLz0gMTAwMTsKPiArCj4gKwlpZiAodGVzdF9pbmZvLT50ZXN0X2hfd2lk dGggPT0gNjQwKQo+ICsJCWRybV9tb2RlLT5jbG9jayA9IDI1MTcwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGRwX3BhbmVsX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ICsJc3RydWN0IGVkaWQgKmVkaWQpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwo+ICsJ aWYgKGVkaWQpIHsKPiArCQlyYyA9IGRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHko Y29ubmVjdG9yLCBlZGlkKTsKPiArCQlpZiAocmMpIHsKPiArCQkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gdXBkYXRlIGVkaWQgcHJvcGVydHkgJWRcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJ CX0KPiArCQlyYyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICsJCURS TV9ERUJVR19EUCgiJXMgLSIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ ICsJcmMgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVM TCk7Cj4gKwlpZiAocmMpCj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGVkaWQgcHJv cGVydHkgJWRcbiIsIHJjKTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBkcF9w YW5lbF9yZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJaW50IHJjID0gMCwgYndfY29kZTsK PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPiArCj4gKwlpZiAoIWRwX3BhbmVs IHx8ICFjb25uZWN0b3IpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3Bh bmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ICsKPiArCXJjID0gZHBf cGFuZWxfcmVhZF9kcGNkKGRwX3BhbmVsKTsKPiArCWJ3X2NvZGUgPSBkcm1fZHBfbGlua19yYXRl X3RvX2J3X2NvZGUoZHBfcGFuZWwtPmxpbmtfaW5mby5yYXRlKTsKPiArCWlmIChyYyB8fCAhaXNf bGlua19yYXRlX3ZhbGlkKGJ3X2NvZGUpIHx8Cj4gKwkJCSFpc19sYW5lX2NvdW50X3ZhbGlkKGRw X3BhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzKSB8fAo+ICsJCQkoYndfY29kZSA+IGRwX3BhbmVs LT5tYXhfYndfY29kZSkpIHsKPiArCQlEUk1fRVJST1IoInJlYWQgZHBjZCBmYWlsZWQgJWRcbiIs IHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBkcF9wYW5lbF9yZWFkX2Vk aWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoInBh bmVsIGVkaWQgcmVhZCBmYWlsZWQsIHNldCBmYWlsc2FmZSBtb2RlLnJjPSVkXG4iLCByYyk7Cj4g KwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCWlmIChwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9u ZSkgewo+ICsJCURSTV9ERUJVR19EUCgicmVhZCBEUENEIHdpdGggdXBkYXRlZCBBVVggY29uZmln XG4iKTsKPiArCQlyYyA9IGRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5lbCk7Cj4gKwkJYndfY29k ZSA9IGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShkcF9wYW5lbC0+bGlua19pbmZvLnJhdGUp Owo+ICsJCWlmIChyYyB8fCAhaXNfbGlua19yYXRlX3ZhbGlkKGJ3X2NvZGUpIHx8Cj4gKwkJCQkh aXNfbGFuZV9jb3VudF92YWxpZChkcF9wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lcykgfHwKPiAr CQkJCShid19jb2RlID4gZHBfcGFuZWwtPm1heF9id19jb2RlKSkgewo+ICsJCQlEUk1fRVJST1Io InJlYWQgZHBjZCBmYWlsZWQgJWRcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiAr CQlwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICt1MzIgZHBfcGFuZWxfZ2V0X21vZGVfYnBwKHN0cnVjdCBkcF9wYW5l bCAqZHBfcGFuZWwsCj4gKwkJdTMyIG1vZGVfZWRpZF9icHAsIHUzMiBtb2RlX3BjbGtfa2h6KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gKwl1MzIgYnBwID0gbW9k ZV9lZGlkX2JwcDsKPiArCj4gKwlpZiAoIWRwX3BhbmVsIHx8ICFtb2RlX2VkaWRfYnBwIHx8ICFt b2RlX3BjbGtfa2h6KSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQly ZXR1cm4gMDsKPiArCX0KPiArCj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3Ry dWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiArCj4gKwlpZiAoZHBfcGFuZWwtPnZp ZGVvX3Rlc3QpCj4gKwkJYnBwID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAo+ICsJCQkJcGFu ZWwtPmxpbmstPnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGgpOwo+ICsJZWxzZQo+ICsJCWJwcCA9 IGRwX3BhbmVsX2dldF9zdXBwb3J0ZWRfYnBwKGRwX3BhbmVsLCBtb2RlX2VkaWRfYnBwLAo+ICsJ CQkJbW9kZV9wY2xrX2toeik7Cj4gKwo+ICsJcmV0dXJuIGJwcDsKPiArfQo+ICsKPiAraW50IGRw X3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAr ewo+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+ICsKPiArCWlmICghZHBfcGFu ZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3Qg ZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ICsKPiArCWlmIChkcF9wYW5lbC0+dmlkZW9f dGVzdCkgewo+ICsJCWRwX3BhbmVsX3NldF90ZXN0X21vZGUocGFuZWwsIG1vZGUpOwo+ICsJCXJl dHVybiAxOwo+ICsJfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgewo+ICsJCXJldHVybiBkcF9w YW5lbF91cGRhdGVfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZCk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3U4IGRwX3BhbmVsX2dldF9lZGlkX2NoZWNrc3VtKHN0 cnVjdCBlZGlkICplZGlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZWRpZCAqbGFzdF9ibG9jazsKPiArCXU4 ICpyYXdfZWRpZDsKPiArCWJvb2wgaXNfZWRpZF9jb3JydXB0Owo+ICsKPiArCWlmICghZWRpZCkg ewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwlyYXdfZWRpZCA9ICh1OCAqKWVkaWQ7Cj4gKwlyYXdfZWRpZCArPSAoZWRp ZC0+ZXh0ZW5zaW9ucyAqIEVESURfTEVOR1RIKTsKPiArCWxhc3RfYmxvY2sgPSAoc3RydWN0IGVk aWQgKilyYXdfZWRpZDsKPiArCj4gKwkvKiBibG9jayB0eXBlIGV4dGVuc2lvbiAqLwo+ICsJZHJt X2VkaWRfYmxvY2tfdmFsaWQocmF3X2VkaWQsIDEsIGZhbHNlLCAmaXNfZWRpZF9jb3JydXB0KTsK PiArCWlmICghaXNfZWRpZF9jb3JydXB0KQo+ICsJCXJldHVybiBsYXN0X2Jsb2NrLT5jaGVja3N1 bTsKPiArCj4gKwlEUk1fRVJST1IoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Qo c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPiArewo+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZh dGUgKnBhbmVsOwo+ICsKPiArCWlmICghZHBfcGFuZWwpIHsKPiArCQlEUk1fRVJST1IoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlwYW5lbCA9IGNvbnRhaW5l cl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiArCj4g KwlpZiAocGFuZWwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19FRElEX1JFQUQp IHsKPiArCQl1OCBjaGVja3N1bSA9IGRwX3BhbmVsX2dldF9lZGlkX2NoZWNrc3VtKGRwX3BhbmVs LT5lZGlkKTsKPiArCj4gKwkJZHBfbGlua19zZW5kX2VkaWRfY2hlY2tzdW0ocGFuZWwtPmxpbmss IGNoZWNrc3VtKTsKPiArCQlkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShwYW5lbC0+bGluayk7 Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgZHBfcGFuZWxfdHBnX2NvbmZpZyhzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsLCBib29sIGVuYWJsZSkKPiArewo+ICsJdTMyIGhzeW5jX3N0YXJ0X3gsIGhz eW5jX2VuZF94Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNhdGFsb2c7Cj4gKwlzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq ZHJtX21vZGU7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkgewo+ICsJCURSTV9FUlJPUigiaW52YWxp ZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXBhbmVsID0gY29udGFpbmVy X29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ICsJY2F0 YWxvZyA9IHBhbmVsLT5jYXRhbG9nOwo+ICsJZHJtX21vZGUgPSAmcGFuZWwtPmRwX3BhbmVsLmRw X21vZGUuZHJtX21vZGU7Cj4gKwo+ICsJaWYgKCFwYW5lbC0+cGFuZWxfb24pIHsKPiArCQlEUk1f REVCVUdfRFAoIkRQIHBhbmVsIG5vdCBlbmFibGVkLCBoYW5kbGUgVFBHIG9uIG5leHQgcGFuZWwg b25cbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAoIWVuYWJsZSkgewo+ICsJCWRw X2NhdGFsb2dfcGFuZWxfdHBnX2Rpc2FibGUoY2F0YWxvZyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ ICsKPiArCS8qIFRQRyBjb25maWcgKi8KPiArCWNhdGFsb2ctPmhzeW5jX3BlcmlvZCA9IGRybV9t b2RlLT5odG90YWw7Cj4gKwljYXRhbG9nLT52c3luY19wZXJpb2QgPSBkcm1fbW9kZS0+dnRvdGFs Owo+ICsKPiArCWNhdGFsb2ctPmRpc3BsYXlfdl9zdGFydCA9ICgoZHJtX21vZGUtPnZ0b3RhbCAt IGRybV9tb2RlLT52c3luY19zdGFydCkgKgo+ICsJCQkJCWNhdGFsb2ctPmhzeW5jX3BlcmlvZCk7 Cj4gKwljYXRhbG9nLT5kaXNwbGF5X3ZfZW5kID0gKChjYXRhbG9nLT52c3luY19wZXJpb2QgLSBk cm1fbW9kZS0+dnN5bmNfc3RhcnQgLQo+ICsJCQkJCWRybV9tb2RlLT52ZGlzcGxheSkgKiBjYXRh bG9nLT5oc3luY19wZXJpb2QpIC0gMTsKPiArCj4gKwljYXRhbG9nLT5kaXNwbGF5X3Zfc3RhcnQg Kz0gZHJtX21vZGUtPmh0b3RhbCAtIGRybV9tb2RlLT5oc3luY19zdGFydDsKPiArCWNhdGFsb2ct PmRpc3BsYXlfdl9lbmQgLT0gZHJtX21vZGUtPmhzeW5jX3N0YXJ0IC0gZHJtX21vZGUtPmhkaXNw bGF5Owo+ICsKPiArCWhzeW5jX3N0YXJ0X3ggPSBkcm1fbW9kZS0+aHRvdGFsIC0gZHJtX21vZGUt PmhzeW5jX3N0YXJ0Owo+ICsJaHN5bmNfZW5kX3ggPSBjYXRhbG9nLT5oc3luY19wZXJpb2QgLSBk cm1fbW9kZS0+aHN5bmNfc3RhcnQgLQo+ICsJCQkJCWRybV9tb2RlLT5oZGlzcGxheSAtIDE7Cj4g Kwo+ICsJY2F0YWxvZy0+dl9zeW5jX3dpZHRoID0gZHJtX21vZGUtPnZzeW5jX2VuZCAtIGRybV9t b2RlLT52c3luY19zdGFydDsKPiArCj4gKwljYXRhbG9nLT5oc3luY19jdGwgPSAoY2F0YWxvZy0+ aHN5bmNfcGVyaW9kIDw8IDE2KSB8Cj4gKwkJCShkcm1fbW9kZS0+aHN5bmNfZW5kIC0gZHJtX21v ZGUtPmhzeW5jX3N0YXJ0KTsKPiArCWNhdGFsb2ctPmRpc3BsYXlfaGN0bCA9IChoc3luY19lbmRf eCA8PCAxNikgfCBoc3luY19zdGFydF94Owo+ICsKPiArCURSTV9ERUJVR19EUCgiJXM6IGNhbGxp bmcgY2F0YWxvZyB0cGdfZW5hYmxlXG4iLCBfX2Z1bmNfXyk7Cj4gKwlkcF9jYXRhbG9nX3BhbmVs X3RwZ19lbmFibGUoY2F0YWxvZyk7Cj4gK30KPiArCj4gK2ludCBkcF9wYW5lbF90aW1pbmdfY2Zn KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwl1MzIg ZGF0YSwgdG90YWxfdmVyLCB0b3RhbF9ob3I7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAq Y2F0YWxvZzsKPiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPiArCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKPiArCj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihk cF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiArCWNhdGFsb2cg PSBwYW5lbC0+Y2F0YWxvZzsKPiArCWRybV9tb2RlID0gJnBhbmVsLT5kcF9wYW5lbC5kcF9tb2Rl LmRybV9tb2RlOwo+ICsKPiArCURSTV9ERUJVR19EUCgid2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAl ZFxuIiwKPiArCQlkcm1fbW9kZS0+aGRpc3BsYXksIGRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9k ZS0+aHN5bmNfZW5kLAo+ICsJCWRybV9tb2RlLT5oc3luY19zdGFydCAtIGRybV9tb2RlLT5oZGlz cGxheSwKPiArCQlkcm1fbW9kZS0+aHN5bmNfZW5kIC0gZHJtX21vZGUtPmhzeW5jX3N0YXJ0KTsK PiArCj4gKwlEUk1fREVCVUdfRFAoImhlaWdodD0lZCB2cG9yY2g9ICVkICVkICVkXG4iLAo+ICsJ CWRybV9tb2RlLT52ZGlzcGxheSwgZHJtX21vZGUtPnZ0b3RhbCAtIGRybV9tb2RlLT52c3luY19l bmQsCj4gKwkJZHJtX21vZGUtPnZzeW5jX3N0YXJ0IC0gZHJtX21vZGUtPnZkaXNwbGF5LAo+ICsJ CWRybV9tb2RlLT52c3luY19lbmQgLSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQpOwo+ICsKPiArCXRv dGFsX2hvciA9IGRybV9tb2RlLT5odG90YWw7Cj4gKwo+ICsJdG90YWxfdmVyID0gZHJtX21vZGUt PnZ0b3RhbDsKPiArCj4gKwlkYXRhID0gdG90YWxfdmVyOwo+ICsJZGF0YSA8PD0gMTY7Cj4gKwlk YXRhIHw9IHRvdGFsX2hvcjsKPiArCj4gKwljYXRhbG9nLT50b3RhbCA9IGRhdGE7Cj4gKwo+ICsJ ZGF0YSA9IChkcm1fbW9kZS0+dnRvdGFsIC0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0KTsKPiArCWRh dGEgPDw9IDE2Owo+ICsJZGF0YSB8PSAoZHJtX21vZGUtPmh0b3RhbCAtIGRybV9tb2RlLT5oc3lu Y19zdGFydCk7Cj4gKwo+ICsJY2F0YWxvZy0+c3luY19zdGFydCA9IGRhdGE7Cj4gKwo+ICsJZGF0 YSA9IGRybV9tb2RlLT52c3luY19lbmQgLSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQ7Cj4gKwlkYXRh IDw8PSAxNjsKPiArCWRhdGEgfD0gKHBhbmVsLT5kcF9wYW5lbC5kcF9tb2RlLnZfYWN0aXZlX2xv dyA8PCAzMSk7Cj4gKwlkYXRhIHw9IGRybV9tb2RlLT5oc3luY19lbmQgLSBkcm1fbW9kZS0+aHN5 bmNfc3RhcnQ7Cj4gKwlkYXRhIHw9IChwYW5lbC0+ZHBfcGFuZWwuZHBfbW9kZS5oX2FjdGl2ZV9s b3cgPDwgMTUpOwo+ICsKPiArCWNhdGFsb2ctPndpZHRoX2JsYW5raW5nID0gZGF0YTsKPiArCj4g KwlkYXRhID0gZHJtX21vZGUtPnZkaXNwbGF5Owo+ICsJZGF0YSA8PD0gMTY7Cj4gKwlkYXRhIHw9 IGRybV9tb2RlLT5oZGlzcGxheTsKPiArCj4gKwljYXRhbG9nLT5kcF9hY3RpdmUgPSBkYXRhOwo+ ICsKPiArCWRwX2NhdGFsb2dfcGFuZWxfdGltaW5nX2NmZyhjYXRhbG9nKTsKPiArCXBhbmVsLT5w YW5lbF9vbiA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQgZHBfcGFu ZWxfaW5pdF9wYW5lbF9pbmZvKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gK3sKPiArCWlu dCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7Cj4gKwo+ICsJ ZHJtX21vZGUgPSAmZHBfcGFuZWwtPmRwX21vZGUuZHJtX21vZGU7Cj4gKwo+ICsJLyoKPiArCSAq IHByaW50IHJlc29sdXRpb24gaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0Cj4gKwkgKiBvZiB1c2Vy IGluaXRpYXRlZCBhY3Rpb24gb2YgY2FibGUgY29ubmVjdGlvbgo+ICsJICovCj4gKwlEUk1fREVC VUdfRFAoIlNFVCBORVcgUkVTT0xVVElPTjpcbiIpOwo+ICsJRFJNX0RFQlVHX0RQKCIlZHglZEAl ZGZwc1xuIiwgZHJtX21vZGUtPmhkaXNwbGF5LAo+ICsJCWRybV9tb2RlLT52ZGlzcGxheSwgZHJt X21vZGUtPnZyZWZyZXNoKTsKPiArCURSTV9ERUJVR19EUCgiaF9wb3JjaGVzKGJhY2t8ZnJvbnR8 d2lkdGgpID0gKCVkfCVkfCVkKVxuIiwKPiArCQkJZHJtX21vZGUtPmh0b3RhbCAtIGRybV9tb2Rl LT5oc3luY19lbmQsCj4gKwkJCWRybV9tb2RlLT5oc3luY19zdGFydCAtIGRybV9tb2RlLT5oZGlz cGxheSwKPiArCQkJZHJtX21vZGUtPmhzeW5jX2VuZCAtIGRybV9tb2RlLT5oc3luY19zdGFydCk7 Cj4gKwlEUk1fREVCVUdfRFAoInZfcG9yY2hlcyhiYWNrfGZyb250fHdpZHRoKSA9ICglZHwlZHwl ZClcbiIsCj4gKwkJCWRybV9tb2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfZW5kLAo+ICsJ CQlkcm1fbW9kZS0+dnN5bmNfc3RhcnQgLSBkcm1fbW9kZS0+dmRpc3BsYXksCj4gKwkJCWRybV9t b2RlLT52c3luY19lbmQgLSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQpOwo+ICsJRFJNX0RFQlVHX0RQ KCJwaXhlbCBjbG9jayAoS0h6KT0oJWQpXG4iLCBkcm1fbW9kZS0+Y2xvY2spOwo+ICsJRFJNX0RF QlVHX0RQKCJicHAgPSAlZFxuIiwgZHBfcGFuZWwtPmRwX21vZGUuYnBwKTsKPiArCj4gKwlkcF9w YW5lbC0+ZHBfbW9kZS5icHAgPSBtYXhfdCh1MzIsIDE4LCBtaW5fdCh1MzIsIGRwX3BhbmVsLT5k cF9tb2RlLmJwcCwgMzApKTsKPiArCURSTV9ERUJVR19EUCgidXBkYXRlZCBicHAgPSAlZFxuIiwg ZHBfcGFuZWwtPmRwX21vZGUuYnBwKTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0 cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWxfZ2V0KHN0cnVjdCBkcF9wYW5lbF9pbiAqaW4pCj4gK3sK PiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gKwlz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsOwo+ICsKPiArCWlmICghaW4tPmRldiB8fCAhaW4tPmNh dGFsb2cgfHwgIWluLT5hdXggfHwgIWluLT5saW5rKSB7Cj4gKwkJRFJNX0VSUk9SKCJpbnZhbGlk IGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiAr Cj4gKwlwYW5lbCA9IGRldm1fa3phbGxvYyhpbi0+ZGV2LCBzaXplb2YoKnBhbmVsKSwgR0ZQX0tF Uk5FTCk7Cj4gKwlpZiAoIXBhbmVsKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJy b3I7Cj4gKwl9Cj4gKwo+ICsJcGFuZWwtPmRldiA9IGluLT5kZXY7Cj4gKwlwYW5lbC0+YXV4ID0g aW4tPmF1eDsKPiArCXBhbmVsLT5jYXRhbG9nID0gaW4tPmNhdGFsb2c7Cj4gKwlwYW5lbC0+bGlu ayA9IGluLT5saW5rOwo+ICsKPiArCWRwX3BhbmVsID0gJnBhbmVsLT5kcF9wYW5lbDsKPiArCWRw X3BhbmVsLT5tYXhfYndfY29kZSA9IERQX0xJTktfQldfOF8xOwo+ICsJcGFuZWwtPmF1eF9jZmdf dXBkYXRlX2RvbmUgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4gZHBfcGFuZWw7Cj4gK2Vycm9yOgo+ ICsJcmV0dXJuIEVSUl9QVFIocmMpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3BhbmVsX3B1dChzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAq cGFuZWw7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcGFuZWwg PSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5l bCk7Cj4gKwo+ICsJa2ZyZWUoZHBfcGFuZWwtPmVkaWQpOwo+ICsJZHBfcGFuZWwtPmVkaWQgPSBO VUxMOwo+ICsJZGV2bV9rZnJlZShwYW5lbC0+ZGV2LCBwYW5lbCk7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYW5lbC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4w ZDM2YTFhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaAo+IEBAIC0wLDAgKzEsOTEgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfRFBfUEFORUxfSF8KPiArI2RlZmluZSBfRFBfUEFORUxfSF8KPiArCj4gKyNpbmNsdWRl IDxkcm0vbXNtX2RybS5oPgo+ICsKPiArI2luY2x1ZGUgImRwX2F1eC5oIgo+ICsjaW5jbHVkZSAi ZHBfbGluay5oIgo+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4gKwo+ICtzdHJ1Y3QgZWRpZDsK PiArCj4gKyNkZWZpbmUgRFBfTUFYX0RPV05TVFJFQU1fUE9SVFMgMHgxMAo+ICsKPiArc3RydWN0 IGRwX2Rpc3BsYXlfbW9kZSB7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkcm1fbW9kZTsK PiArCXUzMiBjYXBhYmlsaXRpZXM7Cj4gKwl1MzIgYnBwOwo+ICsJdTMyIGhfYWN0aXZlX2xvdzsK PiArCXUzMiB2X2FjdGl2ZV9sb3c7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfcGFuZWxfaW4gewo+ ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRwX2F1eCAqYXV4Owo+ICsJc3RydWN0 IGRwX2xpbmsgKmxpbms7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAqY2F0YWxvZzsKPiAr fTsKPiArCj4gK3N0cnVjdCBkcF9wYW5lbCB7Cj4gKwkvKiBkcGNkIHJhdyBkYXRhICovCj4gKwl1 OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFICsgMV07Cj4gKwo+ICsJc3RydWN0IGRybV9kcF9s aW5rIGxpbmtfaW5mbzsKPiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICsJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgZHBfbW9kZTsKPiAr CWJvb2wgdmlkZW9fdGVzdDsKPiArCj4gKwl1MzIgdmljOwo+ICsJdTMyIG1heF9wY2xrX2toejsK PiArCj4gKwl1MzIgbWF4X2J3X2NvZGU7Cj4gK307Cj4gKwo+ICtpbnQgZHBfcGFuZWxfaW5pdF9w YW5lbF9pbmZvKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ICtpbnQgZHBfcGFuZWxfZGVp bml0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ICtpbnQgZHBfcGFuZWxfdGltaW5nX2Nm ZyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiAraW50IGRwX3BhbmVsX3JlYWRfc2lua19j YXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3Rvcik7Cj4gK3UzMiBkcF9wYW5lbF9nZXRfbW9kZV9icHAoc3RydWN0IGRwX3BhbmVs ICpkcF9wYW5lbCwgdTMyIG1vZGVfbWF4X2JwcCwKPiArCQkJdTMyIG1vZGVfcGNsa19raHopOwo+ ICtpbnQgZHBfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4gKwkJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAq bW9kZSk7Cj4gK3ZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsKTsKPiArdm9pZCBkcF9wYW5lbF90cGdfY29uZmlnKHN0cnVjdCBkcF9wYW5l bCAqZHBfcGFuZWwsIGJvb2wgZW5hYmxlKTsKPiArCj4gKy8qKgo+ICsgKiBpc19saW5rX3JhdGVf dmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgbGluayByYXRlCj4gKyAqIEBsYW5lX3JhdGU6IGxpbmsg cmF0ZSByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRo ZSByZXF1ZXN0ZWQgbGluayByYXRlIGlzIHN1cHBvcnRlZC4KPiArICovCj4gK3N0YXRpYyBpbmxp bmUgYm9vbCBpc19saW5rX3JhdGVfdmFsaWQodTMyIGJ3X2NvZGUpCj4gK3sKPiArCXJldHVybiAo YndfY29kZSA9PSBEUF9MSU5LX0JXXzFfNjIgfHwKPiArCQlid19jb2RlID09IERQX0xJTktfQldf Ml83IHx8Cj4gKwkJYndfY29kZSA9PSBEUF9MSU5LX0JXXzVfNCB8fAo+ICsJCWJ3X2NvZGUgPT0g RFBfTElOS19CV184XzEpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfbGlua19pc19sYW5lX2Nv dW50X3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxhbmUgY291bnQKPiArICogQGxhbmVfY291bnQ6 IGxhbmUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgcmVxdWVzdGVkIGxhbmUgY291bnQgaXMgc3VwcG9ydGVkLgo+ICsgKi8KPiArc3Rh dGljIGlubGluZSBib29sIGlzX2xhbmVfY291bnRfdmFsaWQodTMyIGxhbmVfY291bnQpCj4gK3sK PiArCXJldHVybiAobGFuZV9jb3VudCA9PSAxIHx8Cj4gKwkJbGFuZV9jb3VudCA9PSAyIHx8Cj4g KwkJbGFuZV9jb3VudCA9PSA0KTsKPiArfQo+ICsKPiArc3RydWN0IGRwX3BhbmVsICpkcF9wYW5l bF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICppbik7Cj4gK3ZvaWQgZHBfcGFuZWxfcHV0KHN0cnVj dCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ICsjZW5kaWYgLyogX0RQX1BBTkVMX0hfICovCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi41MDIwZDEwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFyc2VyLmMKPiBAQCAtMCwwICsxLDYyMSBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0y MDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4g Kwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgo+ICsKPiArI2luY2x1ZGUgImRwX3BhcnNl ci5oIgo+ICsKPiArc3RhdGljIGludCBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJCSAgIHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSwg Y29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOwo+ ICsKPiArCWlmICghaW9fZGF0YSkgewo+ICsJCURSTV9FUlJPUigiJXBTLT4lczogaW52YWxpZCBp bnB1dFxuIiwKPiArCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXyk7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7Cj4gKwlpZiAoIXJlcykgewo+ ICsJCURSTV9FUlJPUigiJXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1lIGZhaWxl ZFxuIiwKClRoaXMgZXJyb3IgbWVzc2FnZSBpcyBzdGlsbCB1c2luZyB0aGUgb2xkIGZ1bmN0aW9u IG5hbWUKCj4gKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sIG5hbWUp Owo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCWlvX2RhdGEtPmxlbiA9ICh1MzIp cmVzb3VyY2Vfc2l6ZShyZXMpOwo+ICsJaW9fZGF0YS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFy dCwgaW9fZGF0YS0+bGVuKTsKPiArCWlmICghaW9fZGF0YS0+YmFzZSkgewo+ICsJCURSTV9FUlJP UigiJXBTLT4lczogJyVzJyBpb3JlbWFwIGZhaWxlZFxuIiwKPiArCQkJX19idWlsdGluX3JldHVy bl9hZGRyZXNzKDApLCBfX2Z1bmNfXywgbmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1zbV9kc3NfaW91bm1hcChz dHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpCgpUaGFua3MgZm9yIG1vdmluZyB0aGVzZS4gWW91 ICBwcm9iYWJseSBhbHNvIHdhbnQgdG8gdXBkYXRlIHRoZSBmdW5jdGlvbiBuYW1lcyBzbwp0aGV5 J3JlIGNvbnNpc3RlbnQgd2l0aCB0aGVpciBuZXcgZmlsZSAoaWU6IGRwX3BhcnNlcl9pbyopCgo+ ICt7Cj4gKwlpZiAoIWlvX2RhdGEpIHsKPiArCQlEUk1fRVJST1IoIiVwUy0+JXM6IGludmFsaWQg aW5wdXRcbiIsCj4gKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18pOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAoaW9fZGF0YS0+YmFzZSkgewo+ICsJCWlvdW5t YXAoaW9fZGF0YS0+YmFzZSk7Cj4gKwkJaW9fZGF0YS0+YmFzZSA9IE5VTEw7Cj4gKwl9Cj4gKwlp b19kYXRhLT5sZW4gPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9wYXJzZXJfdW5tYXBf aW9fcmVzb3VyY2VzKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPiArewo+ICsJc3RydWN0IGRw X2lvICppbyA9ICZwYXJzZXItPmlvOwo+ICsKPiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX2Fo Yik7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9hdXgpOwo+ICsJbXNtX2Rzc19pb3VubWFw KCZpby0+ZHBfbGluayk7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9wMCk7Cj4gKwltc21f ZHNzX2lvdW5tYXAoJmlvLT5waHlfaW8pOwo+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+bG5fdHgw X2lvKTsKPiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmxuX3R4MF9pbyk7Cj4gKwltc21fZHNzX2lv dW5tYXAoJmlvLT5kcF9wbGxfaW8pOwo+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfY2NfaW8p Owo+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+dXNiM19kcF9jb20pOwo+ICsJbXNtX2Rzc19pb3Vu bWFwKCZpby0+cWZwcm9tX2lvKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wYXJzZXJfY3Ry bF9yZXMoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJ dTMyIGluZGV4Owo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBhcnNlci0+cGRl djsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9m X25vZGU7Cj4gKwlzdHJ1Y3QgZHBfaW8gKmlvID0gJnBhcnNlci0+aW87Cj4gKwo+ICsJcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAiY2VsbC1pbmRleCIsICZpbmRleCk7Cj4gKwlp ZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImNlbGwtaW5kZXggbm90IHNwZWNpZmllZCwgJWRcbiIs IHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBf YnluYW1lKHBkZXYsICZpby0+ZHBfYWhiLCAiZHBfYWhiIik7Cj4gKwlpZiAocmMpIHsKPiArCQlE Uk1fRVJST1IoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXMsICVkXG4iLCByYyk7Cj4g KwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBk ZXYsICZpby0+ZHBfYXV4LCAiZHBfYXV4Iik7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1Io InVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXMsICVkXG4iLCByYyk7Cj4gKwkJZ290byBl cnI7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ ZHBfbGluaywgImRwX2xpbmsiKTsKPiArCWlmIChyYykgewo+ICsJCURSTV9FUlJPUigidW5hYmxl IHRvIHJlbWFwIGRwIGlvIHJlc291cmNlcywgJWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycjsKPiAr CX0KPiArCj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9wMCwg ImRwX3AwIik7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoInVuYWJsZSB0byByZW1hcCBk cCBpbyByZXNvdXJjZXMsICVkXG4iLCByYyk7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ cmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+cGh5X2lvLCAiZHBfcGh5Iik7 Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoInVuYWJsZSB0byByZW1hcCBkcCBQSFkgcmVz b3VyY2VzLCAlZFxuIiwgcmMpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXJjID0gbXNt X2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmxuX3R4MF9pbywgImRwX2xuX3R4MCIpOwo+ ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgwIHJlc291 cmNlcywgJWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyYyA9IG1zbV9k c3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5sbl90eDFfaW8sICJkcF9sbl90eDEiKTsKPiAr CWlmIChyYykgewo+ICsJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIGRwIFRYMSByZXNvdXJj ZXMsICVkXG4iLCByYyk7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBtc21fZHNz X2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfcGxsX2lvLCAiZHBfcGxsIik7Cj4gKwlpZiAo cmMpIHsKPiArCQlEUk1fRVJST1IoInVuYWJsZSB0byByZW1hcCBEUCBQTEwgcmVzb3VyY2VzLCAl ZFxuIiwgcmMpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rzc19pb3Jl bWFwX2J5bmFtZShwZGV2LCAmaW8tPnVzYjNfZHBfY29tLCAidXNiM19kcF9jb20iKTsKPiArCWlm IChyYykgewo+ICsJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIFVTQjMgRFAgY29tIHJlc291 cmNlcywgJWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyYyA9IG1zbV9k c3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9jY19pbywgImRwX21tc3NfY2MiKTsKPiAr CWlmIChyYykgewo+ICsJCURSTV9FUlJPUigidW5hYmxlIHRvIHJlbWFwIGRwIE1NU1NfQ0MgcmVz b3VyY2VzXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlpZiAobXNtX2Rzc19pb3Jl bWFwX2J5bmFtZShwZGV2LCAmaW8tPnFmcHJvbV9pbywgInFmcHJvbV9waHlzaWNhbCIpKQo+ICsJ CXByX3dhcm4oInVuYWJsZSB0byByZW1hcCBkcCBxZnByb20gcmVzb3VyY2VzXG4iKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArZXJyOgo+ICsJZHBfcGFyc2VyX3VubWFwX2lvX3Jlc291cmNlcyhwYXJz ZXIpOwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqZHBfZ2V0 X3BoeV9hdXhfY29uZmlnX3Byb3BlcnR5KHUzMiBjZmdfdHlwZSkKPiArewo+ICsJc3dpdGNoIChj ZmdfdHlwZSkgewo+ICsJY2FzZSBQSFlfQVVYX0NGRzA6Cj4gKwkJcmV0dXJuICJxY29tLGF1eC1j ZmcwLXNldHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9DRkcxOgo+ICsJCXJldHVybiAicWNvbSxh dXgtY2ZnMS1zZXR0aW5ncyI7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHMjoKPiArCQlyZXR1cm4gInFj b20sYXV4LWNmZzItc2V0dGluZ3MiOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzM6Cj4gKwkJcmV0dXJu ICJxY29tLGF1eC1jZmczLXNldHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9DRkc0Ogo+ICsJCXJl dHVybiAicWNvbSxhdXgtY2ZnNC1zZXR0aW5ncyI7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNToKPiAr CQlyZXR1cm4gInFjb20sYXV4LWNmZzUtc2V0dGluZ3MiOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzY6 Cj4gKwkJcmV0dXJuICJxY29tLGF1eC1jZmc2LXNldHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9D Rkc3Ogo+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnNy1zZXR0aW5ncyI7Cj4gKwljYXNlIFBIWV9B VVhfQ0ZHODoKPiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzgtc2V0dGluZ3MiOwo+ICsJY2FzZSBQ SFlfQVVYX0NGRzk6Cj4gKwkJcmV0dXJuICJxY29tLGF1eC1jZmc5LXNldHRpbmdzIjsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlu dCBkcF9wYXJzZXJfYXV4KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPiArewo+ICsJc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2LT5kZXYub2Zfbm9kZTsKPiArCWlu dCBsZW4gPSAwLCBpID0gMCwgaiA9IDAsIGNvbmZpZ19jb3VudCA9IDA7Cj4gKwljb25zdCBjaGFy ICpkYXRhOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7IGkrKykgewo+ ICsJCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0gZHBfZ2V0X3BoeV9hdXhfY29uZmlnX3Byb3BlcnR5 KGkpOwo+ICsKPiArCQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsIHByb3BlcnR5LCAm bGVuKTsKPiArCQlpZiAoIWRhdGEpIHsKPiArCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gcmVhZCAl c1xuIiwgcHJvcGVydHkpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCj4gKwkJY29uZmln X2NvdW50ID0gbGVuIC0gMTsKPiArCQlpZiAoY29uZmlnX2NvdW50IDwgMSB8fCAvKiBtaW5pbXVt IGNvbmZpZyBjb3VudCA9IDEgKi8KPiArCQkJY29uZmlnX2NvdW50ID4gRFBfQVVYX0NGR19NQVhf VkFMVUVfQ05UKSB7Cj4gKwkJCURSTV9FUlJPUigiSW52YWxpZCBjb25maWcgY291bnQgKCVkKSBj b25maWdzIGZvciAlc1xuIiwKPiArCQkJCQljb25maWdfY291bnQsIHByb3BlcnR5KTsKPiArCQkJ Z290byBlcnJvcjsKPiArCQl9Cj4gKwo+ICsJCXBhcnNlci0+YXV4X2NmZ1tpXS5vZmZzZXQgPSBk YXRhWzBdOwo+ICsJCXBhcnNlci0+YXV4X2NmZ1tpXS5jZmdfY250ID0gY29uZmlnX2NvdW50Owo+ ICsJCURSTV9ERUJVR19EUCgiJXMgb2Zmc2V0PTB4JXgsIGNmZ19jbnQ9JWRcbiIsCj4gKwkJCQlw cm9wZXJ0eSwKPiArCQkJCXBhcnNlci0+YXV4X2NmZ1tpXS5vZmZzZXQsCj4gKwkJCQlwYXJzZXIt PmF1eF9jZmdbaV0uY2ZnX2NudCk7Cj4gKwkJZm9yIChqID0gMTsgaiA8IGxlbjsgaisrKSB7Cj4g KwkJCXBhcnNlci0+YXV4X2NmZ1tpXS5sdXRbaiAtIDFdID0gZGF0YVtqXTsKPiArCQkJRFJNX0RF QlVHX0RQKCIlcyBsdXRbJWRdPTB4JXhcbiIsCj4gKwkJCQkJcHJvcGVydHksCj4gKwkJCQkJaSwK PiArCQkJCQlwYXJzZXItPmF1eF9jZmdbaV0ubHV0W2ogLSAxXSk7Cj4gKwkJfQo+ICsJfQo+ICsJ CXJldHVybiAwOwo+ICsKPiArZXJyb3I6Cj4gKwlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdf TUFYOyBpKyspIHsKPiArCQlwYXJzZXItPmF1eF9jZmdbaV0gPSAoY29uc3Qgc3RydWN0IGRwX2F1 eF9jZmcpeyAwIH07Cj4gKwl9Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9wYXJzZXJfbWlzYyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4gK3sKPiArCWlu dCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYt PmRldi5vZl9ub2RlOwo+ICsKPiArCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwK PiArCQkicWNvbSxtYXgtcGNsay1mcmVxdWVuY3kta2h6IiwgJnBhcnNlci0+bWF4X3BjbGtfa2h6 KTsKPiArCWlmIChyYykKPiArCQlwYXJzZXItPm1heF9wY2xrX2toeiA9IERQX01BWF9QSVhFTF9D TEtfS0haOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNl cl9waW5jdHJsKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPiArewo+ICsJc3RydWN0IGRwX3Bp bmN0cmwgKnBpbmN0cmwgPSAmcGFyc2VyLT5waW5jdHJsOwo+ICsKPiArCXBpbmN0cmwtPnBpbiA9 IGRldm1fcGluY3RybF9nZXQoJnBhcnNlci0+cGRldi0+ZGV2KTsKPiArCj4gKwlpZiAoSVNfRVJS X09SX05VTEwocGluY3RybC0+cGluKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBw aW5jdHJsLCByYz0lbGRcbiIsIFBUUl9FUlIocGluY3RybC0+cGluKSk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcGluY3RybC0+c3RhdGVfYWN0aXZlID0gcGluY3RybF9sb29r dXBfc3RhdGUocGluY3RybC0+cGluLAo+ICsJCQkJCSJtZHNzX2RwX2FjdGl2ZSIpOwo+ICsJaWYg KElTX0VSUl9PUl9OVUxMKHBpbmN0cmwtPnN0YXRlX2FjdGl2ZSkpIHsKPiArCQlEUk1fRVJST1Io ImZhaWxlZCB0byBnZXQgcGluY3RybCBhY3RpdmUgc3RhdGUsICVsZFxuIiwKPiArCQkJUFRSX0VS UihwaW5jdHJsLT5zdGF0ZV9hY3RpdmUpKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiAr Cj4gKwlwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kID0gcGluY3RybF9sb29rdXBfc3RhdGUocGluY3Ry bC0+cGluLAo+ICsJCQkJCSJtZHNzX2RwX3NsZWVwIik7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwo cGluY3RybC0+c3RhdGVfc3VzcGVuZCkpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQg cGluY3RybCBzdXNwZW5kIHN0YXRlLCAlbGRcbiIsCj4gKwkJCVBUUl9FUlIocGluY3RybC0+c3Rh dGVfc3VzcGVuZCkpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9ncGlvKHN0cnVjdCBkcF9wYXJzZXIg KnBhcnNlcikKPiArewo+ICsJaW50IGkgPSAwOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBh cnNlci0+cGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gZGV2LT5v Zl9ub2RlOwo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBhcnNlci0+bXBbRFBf Q09SRV9QTV07Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRwX2dwaW9zW10gPSB7Cj4g KwkJInFjb20sYXV4LWVuLWdwaW8iLAo+ICsJCSJxY29tLGF1eC1zZWwtZ3BpbyIsCj4gKwkJInFj b20sdXNicGx1Zy1jYy1ncGlvIiwKPiArCX07Cj4gKwo+ICsJbXAtPmdwaW9fY29uZmlnID0gZGV2 bV9remFsbG9jKGRldiwKPiArCQlzaXplb2Yoc3RydWN0IGRzc19ncGlvKSAqIEFSUkFZX1NJWkUo ZHBfZ3Bpb3MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbXAtPmdwaW9fY29uZmlnKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICsKPiArCW1wLT5udW1fZ3BpbyA9IEFSUkFZX1NJWkUoZHBfZ3Bpb3Mp Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87IGkrKykgewo+ICsJCW1wLT5n cGlvX2NvbmZpZ1tpXS5ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKPiArCQkJZHBf Z3Bpb3NbaV0sIDApOwo+ICsKPiArCQlpZiAoIWdwaW9faXNfdmFsaWQobXAtPmdwaW9fY29uZmln W2ldLmdwaW8pKSB7Cj4gKwkJCURSTV9FUlJPUigiJXMgZ3BpbyBub3Qgc3BlY2lmaWVkXG4iLCBk cF9ncGlvc1tpXSk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJc3RybGNw eShtcC0+Z3Bpb19jb25maWdbaV0uZ3Bpb19uYW1lLCBkcF9ncGlvc1tpXSwKPiArCQkJc2l6ZW9m KG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvX25hbWUpKTsKPiArCj4gKwkJbXAtPmdwaW9fY29uZmln W2ldLnZhbHVlID0gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IGNoYXIgKmRwX3BhcnNlcl9zdXBwbHlfbm9kZV9uYW1lKGVudW0gZHBfcG1fdHlwZSBt b2R1bGUpCj4gK3sKPiArCXN3aXRjaCAobW9kdWxlKSB7Cj4gKwljYXNlIERQX0NPUkVfUE06CXJl dHVybiAicWNvbSxjb3JlLXN1cHBseS1lbnRyaWVzIjsKPiArCWNhc2UgRFBfQ1RSTF9QTToJcmV0 dXJuICJxY29tLGN0cmwtc3VwcGx5LWVudHJpZXMiOwo+ICsJY2FzZSBEUF9QSFlfUE06CQlyZXR1 cm4gInFjb20scGh5LXN1cHBseS1lbnRyaWVzIjsKPiArCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2dldF92cmVnKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlciwKPiArCQllbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQo+ICt7Cj4gKwlp bnQgaSA9IDAsIHJjID0gMDsKPiArCXUzMiB0bXAgPSAwOwo+ICsJY29uc3QgY2hhciAqcG1fc3Vw cGx5X25hbWUgPSBOVUxMOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlfbm9kZSA9IE5V TEw7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5v Zl9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlfcm9vdF9ub2RlID0gTlVMTDsK PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwYXJzZXItPm1wW21vZHVsZV07Cj4g Kwo+ICsJbXAtPm51bV92cmVnID0gMDsKPiArCXBtX3N1cHBseV9uYW1lID0gZHBfcGFyc2VyX3N1 cHBseV9ub2RlX25hbWUobW9kdWxlKTsKPiArCXN1cHBseV9yb290X25vZGUgPSBvZl9nZXRfY2hp bGRfYnlfbmFtZShvZl9ub2RlLCBwbV9zdXBwbHlfbmFtZSk7Cj4gKwlpZiAoIXN1cHBseV9yb290 X25vZGUpIHsKPiArCQlEUk1fRVJST1IoIm5vIHN1cHBseSBlbnRyeSBwcmVzZW50OiAlc1xuIiwg cG1fc3VwcGx5X25hbWUpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCW1wLT5udW1fdnJl ZyA9IG9mX2dldF9hdmFpbGFibGVfY2hpbGRfY291bnQoc3VwcGx5X3Jvb3Rfbm9kZSk7Cj4gKwo+ ICsJaWYgKG1wLT5udW1fdnJlZyA9PSAwKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJubyB2cmVnXG4i KTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlEUk1fREVCVUdfRFAoInZyZWcgZm91bmQu IGNvdW50PSVkXG4iLCBtcC0+bnVtX3ZyZWcpOwo+ICsKPiArCW1wLT52cmVnX2NvbmZpZyA9IGRl dm1fa3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsCj4gKwkJc2l6ZW9mKHN0cnVjdCBkc3NfdnJl ZykgKiBtcC0+bnVtX3ZyZWcsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtcC0+dnJlZ19jb25maWcp IHsKPiArCQltcC0+bnVtX3ZyZWcgPSAwOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsK PiArCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoc3VwcGx5X3Jvb3Rfbm9kZSwgc3VwcGx5X25vZGUp IHsKPiArCQljb25zdCBjaGFyICpzdCA9IE5VTEw7Cj4gKwkJLyogdnJlZy1uYW1lICovCj4gKwkJ cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdXBwbHlfbm9kZSwKPiArCQkJInFjb20sc3Vw cGx5LW5hbWUiLCAmc3QpOwo+ICsJCWlmIChyYykgewo+ICsJCQlEUk1fRVJST1IoImVycm9yIHJl YWRpbmcgbmFtZS4gcmM9JWRcbiIsIHJjKTsKPiArCQkJbXAtPm51bV92cmVnID0gMDsKPiArCQkJ cmV0dXJuIHJjOwo+ICsJCX0KPiArCQlzbnByaW50ZihtcC0+dnJlZ19jb25maWdbaV0udnJlZ19u YW1lLAo+ICsJCQlBUlJBWV9TSVpFKChtcC0+dnJlZ19jb25maWdbaV0udnJlZ19uYW1lKSksICIl cyIsIHN0KTsKPiArCQkvKiB2cmVnLW1pbi12b2x0YWdlICovCj4gKwkJcmMgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPiArCQkJInFjb20sc3VwcGx5LW1pbi12b2x0YWdlIiwg JnRtcCk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCURSTV9FUlJPUigiZXJyb3IgcmVhZGluZyBtaW4g dm9sdC4gcmM9JWRcbiIsIHJjKTsKPiArCQkJbXAtPm51bV92cmVnID0gMDsKPiArCQkJcmV0dXJu IHJjOwo+ICsJCX0KPiArCQltcC0+dnJlZ19jb25maWdbaV0ubWluX3ZvbHRhZ2UgPSB0bXA7Cj4g Kwo+ICsJCS8qIHZyZWctbWF4LXZvbHRhZ2UgKi8KPiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKHN1cHBseV9ub2RlLAo+ICsJCQkicWNvbSxzdXBwbHktbWF4LXZvbHRhZ2UiLCAmdG1wKTsK PiArCQlpZiAocmMpIHsKPiArCQkJRFJNX0VSUk9SKCJlcnJvciByZWFkaW5nIG1heCB2b2x0LiBy Yz0lZFxuIiwgcmMpOwo+ICsJCQltcC0+bnVtX3ZyZWcgPSAwOwo+ICsJCQlyZXR1cm4gcmM7Cj4g KwkJfQo+ICsJCW1wLT52cmVnX2NvbmZpZ1tpXS5tYXhfdm9sdGFnZSA9IHRtcDsKPiArCj4gKwkJ LyogZW5hYmxlLWxvYWQgKi8KPiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9u b2RlLAo+ICsJCQkicWNvbSxzdXBwbHktZW5hYmxlLWxvYWQiLCAmdG1wKTsKPiArCQlpZiAocmMp IHsKPiArCQkJRFJNX0VSUk9SKCJlcnJvciByZWFkaW5nIGVuYWJsZSBsb2FkLiByYz0lZFxuIiwg cmMpOwo+ICsJCQltcC0+bnVtX3ZyZWcgPSAwOwo+ICsJCQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsJ CW1wLT52cmVnX2NvbmZpZ1tpXS5lbmFibGVfbG9hZCA9IHRtcDsKPiArCj4gKwkJLyogZGlzYWJs ZS1sb2FkICovCj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPiAr CQkJInFjb20sc3VwcGx5LWRpc2FibGUtbG9hZCIsICZ0bXApOwo+ICsJCWlmIChyYykgewo+ICsJ CQlEUk1fRVJST1IoImVycm9yIHJlYWRpbmcgZGlzYWJsZSBsb2FkLiByYz0lZFxuIiwgcmMpOwo+ ICsJCQkgbXAtPm51bV92cmVnID0gMDsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCQltcC0+ dnJlZ19jb25maWdbaV0uZGlzYWJsZV9sb2FkID0gdG1wOwo+ICsKPiArCQlEUk1fREVCVUdfRFAo IiVzIG1pbj0lZCwgbWF4PSVkLCBlbmFibGU9JWQsIGRpc2FibGU9JWRcbiIsCj4gKwkJCW1wLT52 cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5taW5fdm9s dGFnZSwKPiArCQkJbXAtPnZyZWdfY29uZmlnW2ldLm1heF92b2x0YWdlLAo+ICsJCQltcC0+dnJl Z19jb25maWdbaV0uZW5hYmxlX2xvYWQsCj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5kaXNhYmxl X2xvYWQKPiArCQkJKTsKPiArCQkrK2k7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX3JlZ3VsYXRvcihzdHJ1Y3QgZHBfcGFyc2VyICpwYXJz ZXIpCj4gK3sKPiArCWludCBpLCByYyA9IDA7Cj4gKwo+ICsJLyogUGFyc2UgdGhlIHJlZ3VsYXRv ciBpbmZvcm1hdGlvbiAqLwo+ICsJZm9yIChpID0gRFBfQ09SRV9QTTsgaSA8IERQX01BWF9QTTsg aSsrKSB7Cj4gKwkJcmMgPSBkcF9wYXJzZXJfZ2V0X3ZyZWcocGFyc2VyLCBpKTsKPiArCQlpZiAo cmMpIHsKPiArCQkJRFJNX0VSUk9SKCJnZXRfZHRfdnJlZ19kYXRhIGZhaWxlZCBmb3IgJXMuIHJj PSVkXG4iLAo+ICsJCQkJZHBfcGFyc2VyX3BtX25hbWUoaSksIHJjKTsKPiArCQkJaS0tOwo+ICsJ CQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIGJvb2wgZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjb25zdCBjaGFyICpjbGtf cHJlZml4LCBjb25zdCBjaGFyICpjbGtfbmFtZSkKPiArewo+ICsJcmV0dXJuICFzdHJuY21wKGNs a19wcmVmaXgsIGNsa19uYW1lLCBzdHJsZW4oY2xrX3ByZWZpeCkpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikK PiArewo+ICsJaW50IG51bV9jbGsgPSAwLCBpID0gMCwgcmMgPSAwOwo+ICsJaW50IGNvcmVfY2xr X2NvdW50ID0gMCwgY3RybF9jbGtfY291bnQgPSAwOwo+ICsJY29uc3QgY2hhciAqY2xrX25hbWU7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGFyc2VyLT5wZGV2LT5kZXY7Cj4gKwlzdHJ1Y3Qg ZHNzX21vZHVsZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+ ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9D VFJMX1BNXTsKPiArCj4gKwludW1fY2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYt Pm9mX25vZGUsICJjbG9jay1uYW1lcyIpOwo+ICsJaWYgKG51bV9jbGsgPD0gMCkgewo+ICsJCURS TV9FUlJPUigibm8gY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsazsgaSsrKSB7Cj4gKwkJcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtPm9mX25vZGUsCj4gKwkJCQkiY2xvY2st bmFtZXMiLCBpLCAmY2xrX25hbWUpOwo+ICsJCWlmIChyYykgewo+ICsJCQlEUk1fRVJST1IoImVy cm9yIHJlYWRpbmcgY2xvY2stbmFtZXMgJWRcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJ CX0KPiArCj4gKwkJaWYgKGRwX3BhcnNlcl9jaGVja19wcmVmaXgoImNvcmUiLCBjbGtfbmFtZSkp Cj4gKwkJCWNvcmVfY2xrX2NvdW50Kys7Cj4gKwo+ICsJCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJl Zml4KCJjdHJsIiwgY2xrX25hbWUpKQo+ICsJCQljdHJsX2Nsa19jb3VudCsrOwo+ICsJfQo+ICsK PiArCS8qIEluaXRpYWxpemUgdGhlIENPUkUgcG93ZXIgbW9kdWxlICovCj4gKwlpZiAoY29yZV9j bGtfY291bnQgPD0gMCkgewo+ICsJCURSTV9FUlJPUigibm8gY29yZSBjbG9ja3MgYXJlIGRlZmlu ZWRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWNvcmVfcG93ZXItPm51 bV9jbGsgPSBjb3JlX2Nsa19jb3VudDsKPiArCWNvcmVfcG93ZXItPmNsa19jb25maWcgPSBkZXZt X2t6YWxsb2MoZGV2LAo+ICsJCQlzaXplb2Yoc3RydWN0IGRzc19jbGspICogY29yZV9wb3dlci0+ bnVtX2NsaywKPiArCQkJR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNvcmVfcG93ZXItPmNsa19jb25m aWcpIHsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBJbml0aWFsaXplIHRo ZSBDVFJMIHBvd2VyIG1vZHVsZSAqLwo+ICsJaWYgKGN0cmxfY2xrX2NvdW50IDw9IDApIHsKPiAr CQlEUk1fRVJST1IoIm5vIGN0cmwgY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCj4gKwljdHJsX3Bvd2VyLT5udW1fY2xrID0gY3RybF9jbGtfY291 bnQ7Cj4gKwljdHJsX3Bvd2VyLT5jbGtfY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwKPiArCQkJ c2l6ZW9mKHN0cnVjdCBkc3NfY2xrKSAqIGN0cmxfcG93ZXItPm51bV9jbGssCj4gKwkJCUdGUF9L RVJORUwpOwo+ICsJaWYgKCFjdHJsX3Bvd2VyLT5jbGtfY29uZmlnKSB7Cj4gKwkJY3RybF9wb3dl ci0+bnVtX2NsayA9IDA7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2Nsb2NrKHN0cnVjdCBkcF9wYXJz ZXIgKnBhcnNlcikKPiArewo+ICsJaW50IHJjID0gMCwgaSA9IDA7Cj4gKwlpbnQgbnVtX2NsayA9 IDA7Cj4gKwlpbnQgY29yZV9jbGtfaW5kZXggPSAwLCBjdHJsX2Nsa19pbmRleCA9IDA7Cj4gKwlp bnQgY29yZV9jbGtfY291bnQgPSAwLCBjdHJsX2Nsa19jb3VudCA9IDA7Cj4gKwljb25zdCBjaGFy ICpjbGtfbmFtZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBkZXYtPmRldjsK PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpjb3JlX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBf Q09SRV9QTV07Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY3RybF9wb3dlciA9ICZwYXJz ZXItPm1wW0RQX0NUUkxfUE1dOwo+ICsKPiArCWNvcmVfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9D T1JFX1BNXTsKPiArCWN0cmxfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKPiArCj4g KwlyYyA9ICBkcF9wYXJzZXJfaW5pdF9jbGtfZGF0YShwYXJzZXIpOwo+ICsJaWYgKHJjKSB7Cj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwb3dlciBkYXRhICVkXG4iLCByYyk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJY29yZV9jbGtfY291bnQgPSBjb3Jl X3Bvd2VyLT5udW1fY2xrOwo+ICsJY3RybF9jbGtfY291bnQgPSBjdHJsX3Bvd2VyLT5udW1fY2xr Owo+ICsKPiArCW51bV9jbGsgPSBjb3JlX2Nsa19jb3VudCArIGN0cmxfY2xrX2NvdW50Owo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBudW1fY2xrOyBpKyspIHsKPiArCQlyYyA9IG9mX3Byb3BlcnR5 X3JlYWRfc3RyaW5nX2luZGV4KGRldi0+b2Zfbm9kZSwgImNsb2NrLW5hbWVzIiwKPiArCQkJCWks ICZjbGtfbmFtZSk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCSBEUk1fRVJST1IoImVycm9yIHJlYWRp bmcgY2xvY2stbmFtZXMgJWRcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCQlp ZiAoZHBfcGFyc2VyX2NoZWNrX3ByZWZpeCgiY29yZSIsIGNsa19uYW1lKSAmJgo+ICsJCQkJY29y ZV9jbGtfaW5kZXggPCBjb3JlX2Nsa19jb3VudCkgewo+ICsJCQlzdHJ1Y3QgZHNzX2NsayAqY2xr ID0KPiArCQkJCSZjb3JlX3Bvd2VyLT5jbGtfY29uZmlnW2NvcmVfY2xrX2luZGV4XTsKPiArCQkJ c3RybGNweShjbGstPmNsa19uYW1lLCBjbGtfbmFtZSwgc2l6ZW9mKGNsay0+Y2xrX25hbWUpKTsK PiArCQkJY2xrLT50eXBlID0gRFNTX0NMS19BSEI7Cj4gKwkJCWNvcmVfY2xrX2luZGV4Kys7Cj4g KwkJfSBlbHNlIGlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KCJjdHJsIiwgY2xrX25hbWUpICYm Cj4gKwkJCSAgIGN0cmxfY2xrX2luZGV4IDwgY3RybF9jbGtfY291bnQpIHsKPiArCQkJc3RydWN0 IGRzc19jbGsgKmNsayA9Cj4gKwkJCQkmY3RybF9wb3dlci0+Y2xrX2NvbmZpZ1tjdHJsX2Nsa19p bmRleF07Cj4gKwkJCXN0cmxjcHkoY2xrLT5jbGtfbmFtZSwgY2xrX25hbWUsIHNpemVvZihjbGst PmNsa19uYW1lKSk7Cj4gKwkJCWN0cmxfY2xrX2luZGV4Kys7Cj4gKwo+ICsJCQlpZiAoIXN0cm5j bXAoY2xrX25hbWUsICJjdHJsX2xpbmtfY2xrIiwgc3RybGVuKCJjdHJsX2xpbmtfY2xrIikpIHx8 Cj4gKwkJCSAgIXN0cm5jbXAoY2xrX25hbWUsICJjdHJsX3BpeGVsX2NsayIsIHN0cmxlbigiY3Ry bF9waXhlbF9jbGsiKSkpCj4gKwkJCQljbGstPnR5cGUgPSBEU1NfQ0xLX1BDTEs7Cj4gKwkJCWVs c2UKPiArCQkJCWNsay0+dHlwZSA9IERTU19DTEtfQUhCOwo+ICsJCX0KPiArCX0KPiArCj4gKwlE Uk1fREVCVUdfRFAoImNsb2NrIHBhcnNpbmcgc3VjY2Vzc2Z1bFxuIik7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX3BhcnNlKHN0cnVjdCBkcF9wYXJz ZXIgKnBhcnNlcikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlpZiAoIXBhcnNlcikgewo+ ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9Cj4gKwo+ICsJcmMgPSBkcF9wYXJzZXJfY3RybF9yZXMocGFyc2VyKTsKPiArCWlmIChyYykK PiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJcmMgPSBkcF9wYXJzZXJfYXV4KHBhcnNlcik7Cj4gKwlp ZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCXJjID0gZHBfcGFyc2VyX21pc2MocGFyc2Vy KTsKPiArCWlmIChyYykKPiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJcmMgPSBkcF9wYXJzZXJfY2xv Y2socGFyc2VyKTsKPiArCWlmIChyYykKPiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJcmMgPSBkcF9w YXJzZXJfcmVndWxhdG9yKHBhcnNlcik7Cj4gKwlpZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsK PiArCXJjID0gZHBfcGFyc2VyX2dwaW8ocGFyc2VyKTsKPiArCWlmIChyYykgewo+ICsJCURSTV9F UlJPUigidW5hYmxlIHRvIHBhcnNlIEdQSU9zXG4iKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4g Kwo+ICsJcmMgPSBkcF9wYXJzZXJfcGluY3RybChwYXJzZXIpOwo+ICsKPiArCXJldHVybiByYzsK PiArfQo+ICsKPiArc3RydWN0IGRwX3BhcnNlciAqZHBfcGFyc2VyX2dldChzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4gKwo+ ICsJcGFyc2VyID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGFyc2VyKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIXBhcnNlcikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiArCj4gKwlwYXJzZXItPnBhcnNlID0gZHBfcGFyc2VyX3BhcnNlOwo+ICsJcGFyc2VyLT5wZGV2 ID0gcGRldjsKPiArCj4gKwlyZXR1cm4gcGFyc2VyOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3BhcnNl cl9wdXQoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwo+ICt9CgpSZW1vdmUKCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5lMzVhNTBiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcGFyc2VyLmgKPiBAQCAtMCwwICsxLDE5NiBAQAo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxMi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9EUF9QQVJTRVJfSF8KPiArI2RlZmluZSBfRFBfUEFSU0VSX0hf Cj4gKwo+ICsjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIKPiArCj4gKyNkZWZpbmUgRFBfTEFCRUwg Ik1EU1MgRFAgRElTUExBWSIKPiArI2RlZmluZSBBVVhfQ0ZHX0xFTgkxMAo+ICsjZGVmaW5lIERQ X01BWF9QSVhFTF9DTEtfS0haCTY3NTAwMAo+ICsKPiArZW51bSBkcF9wbV90eXBlIHsKPiArCURQ X0NPUkVfUE0sCj4gKwlEUF9DVFJMX1BNLAo+ICsJRFBfUEhZX1BNLAo+ICsJRFBfTUFYX1BNCj4g K307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRwX3BhcnNlcl9wbV9uYW1lKGVu dW0gZHBfcG1fdHlwZSBtb2R1bGUpCj4gK3sKPiArCXN3aXRjaCAobW9kdWxlKSB7Cj4gKwljYXNl IERQX0NPUkVfUE06CXJldHVybiAiRFBfQ09SRV9QTSI7Cj4gKwljYXNlIERQX0NUUkxfUE06CXJl dHVybiAiRFBfQ1RSTF9QTSI7Cj4gKwljYXNlIERQX1BIWV9QTToJCXJldHVybiAiRFBfUEhZX1BN IjsKPiArCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7Cj4gKwl9Cj4gK30KCkZyb20gdjE6CiAgICAg ICAgRGVsZXRlIHRoZSBmdW5jdGlvbiBhbmQganVzdCBwcmludCB0aGUgZW51bSB2YWx1ZQoKCj4g Kwo+ICsvKioKPiArICogc3RydWN0IGRwX2Rpc3BsYXlfZGF0YSAgLSBkaXNwbGF5IHJlbGF0ZWQg ZGV2aWNlIHRyZWUgZGF0YS4KPiArICoKPiArICogQGN0cmxfbm9kZTogcmVmZXJlY2UgdG8gY29u dHJvbGxlciBkZXZpY2UKPiArICogQHBoeV9ub2RlOiAgcmVmZXJlbmNlIHRvIHBoeSBkZXZpY2UK PiArICogQGlzX2FjdGl2ZTogaXMgdGhlIGNvbnRyb2xsZXIgY3VycmVudGx5IGFjdGl2ZQo+ICsg KiBAbmFtZTogbmFtZSBvZiB0aGUgZGlzcGxheQo+ICsgKiBAZGlzcGxheV90eXBlOiB0eXBlIG9m IHRoZSBkaXNwbGF5Cj4gKyAqLwo+ICtzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhIHsKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqY3RybF9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9k ZTsKPiArCWJvb2wgaXNfYWN0aXZlOwo+ICsJY29uc3QgY2hhciAqbmFtZTsKPiArCWNvbnN0IGNo YXIgKmRpc3BsYXlfdHlwZTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfY3RybF9y ZXNvdXJjZSAtIGNvbnRyb2xsZXIncyBJTyByZWxhdGVkIGRhdGEKPiArICoKPiArICogQGRwX2Fo YjogY29udHJvbGxlcidzIGFoYiBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQGRwX2F1eDog Y29udHJvbGxlcidzIGF1eCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQGRwX2xpbms6IGNv bnRyb2xsZXIncyBsaW5rIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+ICsgKiBAZHBfcDA6IGNvbnRy b2xsZXIncyBwMCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQHBoeV9pbzogcGh5J3MgbWFw cGVkIG1lbW9yeSBhZGRyZXNzCj4gKyAqIEBsbl90eDBfaW86IFVTQi1EUCBsYW5lIFRYMCdzIG1h cHBlZCBtZW1vcnkgYWRkcmVzcwo+ICsgKiBAbG5fdHgxX2lvOiBVU0ItRFAgbGFuZSBUWDEncyBt YXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQGRwX2NjX2lvOiBEUCBjYydzIG1hcHBlZCBtZW1v cnkgYWRkcmVzcwo+ICsgKiBAcWZwcm9tX2lvOiBxZnByb20ncyBtYXBwZWQgbWVtb3J5IGFkZHJl c3MKPiArICogQGRwX3BsbF9pbzogRFAgUExMIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+ICsgKiBA dXNiM19kcF9jb206IFVTQjMgRFAgUEhZIGNvbWJvIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+ICsg Ki8KPiArc3RydWN0IGRwX2lvIHsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBjdHJsX2lvOwo+ICsJ c3RydWN0IGRzc19pb19kYXRhIGRwX2FoYjsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9hdXg7 Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfbGluazsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBk cF9wMDsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBwaHlfaW87Cj4gKwlzdHJ1Y3QgZHNzX2lvX2Rh dGEgbG5fdHgwX2lvOwo+ICsJc3RydWN0IGRzc19pb19kYXRhIGxuX3R4MV9pbzsKPiArCXN0cnVj dCBkc3NfaW9fZGF0YSBkcF9jY19pbzsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBxZnByb21faW87 Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfcGxsX2lvOwo+ICsJc3RydWN0IGRzc19pb19kYXRh IHVzYjNfZHBfY29tOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcF9waW5jdHJsIC0g RFAncyBwaW4gY29udHJvbAo+ICsgKgo+ICsgKiBAcGluOiBwaW4tY29udHJvbGxlcidzIGluc3Rh bmNlCj4gKyAqIEBzdGF0ZV9hY3RpdmU6IGFjdGl2ZSBzdGF0ZSBwaW4gY29udHJvbAo+ICsgKiBA c3RhdGVfaHBkX2FjdGl2ZTogaHBkIGFjdGl2ZSBzdGF0ZSBwaW4gY29udHJvbAo+ICsgKiBAc3Rh dGVfc3VzcGVuZDogc3VzcGVuZCBzdGF0ZSBwaW4gY29udHJvbAo+ICsgKi8KPiArc3RydWN0IGRw X3BpbmN0cmwgewo+ICsJc3RydWN0IHBpbmN0cmwgKnBpbjsKPiArCXN0cnVjdCBwaW5jdHJsX3N0 YXRlICpzdGF0ZV9hY3RpdmU7Cj4gKwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGVfaHBkX2Fj dGl2ZTsKPiArCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9zdXNwZW5kOwo+ICt9Owo+ICsK PiArI2RlZmluZSBEUF9FTlVNX1NUUih4KQkjeAo+ICsjZGVmaW5lIERQX0FVWF9DRkdfTUFYX1ZB TFVFX0NOVCAzCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfYXV4X2NmZyAtIERQJ3MgQVVYIGNvbmZp Z3VyYXRpb24gc2V0dGluZ3MKPiArICoKPiArICogQGNmZ19jbnQ6IGNvdW50IG9mIHRoZSBjb25m aWd1cmFibGUgc2V0dGluZ3MgZm9yIHRoZSBBVVggcmVnaXN0ZXIKPiArICogQGN1cnJlbnRfaW5k ZXg6IGN1cnJlbnQgaW5kZXggb2YgdGhlIEFVWCBjb25maWcgbHV0Cj4gKyAqIEBvZmZzZXQ6IHJl Z2lzdGVyIG9mZnNldCBvZiB0aGUgQVVYIGNvbmZpZyByZWdpc3Rlcgo+ICsgKiBAbHV0OiBsb29r IHVwIHRhYmxlIGZvciB0aGUgQVVYIGNvbmZpZyB2YWx1ZXMgZm9yIHRoaXMgcmVnaXN0ZXIKPiAr ICovCj4gK3N0cnVjdCBkcF9hdXhfY2ZnIHsKPiArCXUzMiBjZmdfY250Owo+ICsJdTMyIGN1cnJl bnRfaW5kZXg7Cj4gKwl1MzIgb2Zmc2V0Owo+ICsJdTMyIGx1dFtEUF9BVVhfQ0ZHX01BWF9WQUxV RV9DTlRdOwo+ICt9Owo+ICsKPiArLyogUEhZIEFVWCBjb25maWcgcmVnaXN0ZXJzICovCj4gK2Vu dW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB7Cj4gKwlQSFlfQVVYX0NGRzAsCj4gKwlQSFlfQVVY X0NGRzEsCj4gKwlQSFlfQVVYX0NGRzIsCj4gKwlQSFlfQVVYX0NGRzMsCj4gKwlQSFlfQVVYX0NG RzQsCj4gKwlQSFlfQVVYX0NGRzUsCj4gKwlQSFlfQVVYX0NGRzYsCj4gKwlQSFlfQVVYX0NGRzcs Cj4gKwlQSFlfQVVYX0NGRzgsCj4gKwlQSFlfQVVYX0NGRzksCj4gKwlQSFlfQVVYX0NGR19NQVgs Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmRwX3BoeV9hdXhfY29uZmlnX3R5cGVf dG9fc3RyaW5nKHUzMiBjZmdfdHlwZSkKPiArewo+ICsJc3dpdGNoIChjZmdfdHlwZSkgewo+ICsJ Y2FzZSBQSFlfQVVYX0NGRzA6Cj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMCk7 Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHMToKPiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9D RkcxKTsKPiArCWNhc2UgUEhZX0FVWF9DRkcyOgo+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlf QVVYX0NGRzIpOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzM6Cj4gKwkJcmV0dXJuIERQX0VOVU1fU1RS KFBIWV9BVVhfQ0ZHMyk7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNDoKPiArCQlyZXR1cm4gRFBfRU5V TV9TVFIoUEhZX0FVWF9DRkc0KTsKPiArCWNhc2UgUEhZX0FVWF9DRkc1Ogo+ICsJCXJldHVybiBE UF9FTlVNX1NUUihQSFlfQVVYX0NGRzUpOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzY6Cj4gKwkJcmV0 dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHNik7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNzoKPiAr CQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc3KTsKPiArCWNhc2UgUEhZX0FVWF9DRkc4 Ogo+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzgpOwo+ICsJY2FzZSBQSFlfQVVY X0NGRzk6Cj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHOSk7Cj4gKwlkZWZhdWx0 Ogo+ICsJCXJldHVybiAidW5rbm93biI7Cj4gKwl9Cj4gK30KCkFza2VkIGluIHYxIHRvIHJlbW92 ZSB0aGlzLgoKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfcGFyc2VyIC0gRFAgcGFyc2VyJ3Mg ZGF0YSBleHBvc2VkIHRvIGNsaWVudHMKPiArICoKPiArICogQHBkZXY6IHBsYXRmb3JtIGRhdGEg b2YgdGhlIGNsaWVudAo+ICsgKiBAbXA6IGdwaW8sIHJlZ3VsYXRvciBhbmQgY2xvY2sgcmVsYXRl ZCBkYXRhCj4gKyAqIEBwaW5jdHJsOiBwaW4tY29udHJvbCByZWxhdGVkIGRhdGEKPiArICogQGRp c3BfZGF0YTogY29udHJvbGxlcidzIGRpc3BsYXkgcmVsYXRlZCBkYXRhCj4gKyAqIEBwYXJzZTog ZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IGNsaWVudCB0byBwYXJzZSBkZXZpY2UgdHJlZS4KPiAr ICovCj4gK3N0cnVjdCBkcF9wYXJzZXIgewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyIG1wW0RQX01BWF9QTV07Cj4gKwlzdHJ1Y3Qg ZHBfcGluY3RybCBwaW5jdHJsOwo+ICsJc3RydWN0IGRwX2lvIGlvOwo+ICsJc3RydWN0IGRwX2Rp c3BsYXlfZGF0YSBkaXNwX2RhdGE7CgpUaGlzIHNlZW1zIHVudXNlZAoKPiArCj4gKwl1OCBsX21h cFs0XTsKCkFuZCB0aGlzCgo+ICsJc3RydWN0IGRwX2F1eF9jZmcgYXV4X2NmZ1tBVVhfQ0ZHX0xF Tl07Cj4gKwl1MzIgbWF4X3BjbGtfa2h6Owo+ICsKPiArCWludCAoKnBhcnNlKShzdHJ1Y3QgZHBf cGFyc2VyICpwYXJzZXIpOwoKTm8gbmVlZCBmb3IgdGhpcyB0byBiZSBhIGNhbGxiYWNrLCBqdXN0 ICBleHBvc2UgdGhlIGZ1bmN0aW9uIGFuZCBjYWxsIGl0LgoKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBkcF9wYXJzZXJfZ2V0KCkgLSBnZXQgdGhlIERQJ3MgZGV2aWNlIHRyZWUgcGFyc2VyIG1vZHVs ZQo+ICsgKgo+ICsgKiBAcGRldjogcGxhdGZvcm0gZGF0YSBvZiB0aGUgY2xpZW50Cj4gKyAqIHJl dHVybjogcG9pbnRlciB0byBkcF9wYXJzZXIgc3RydWN0dXJlLgo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIHByb3ZpZGVzIGNsaWVudCBjYXBhYmlsaXR5IHRvIHBhcnNlIHRoZQo+ICsgKiBkZXZp Y2UgdHJlZSBhbmQgcG9wdWxhdGUgdGhlIGRhdGEgc3RydWN0dXJlcy4gVGhlIGRhdGEKPiArICog cmVsYXRlZCB0byBjbG9jaywgcmVndWxhdG9ycywgcGluLWNvbnRyb2wgYW5kIG90aGVyCj4gKyAq IGNhbiBiZSBwYXJzZWQgdXNpbmcgdGhpcyBtb2R1bGUuCj4gKyAqLwo+ICtzdHJ1Y3QgZHBfcGFy c2VyICpkcF9wYXJzZXJfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwo+ICsKPiAr LyoqCj4gKyAqIGRwX3BhcnNlcl9wdXQoKSAtIGNsZWFucyB0aGUgZHBfcGFyc2VyIG1vZHVsZQo+ ICsgKgo+ICsgKiBAcGFyc2VyOiBwb2ludGVyIHRvIHRoZSBwYXJzZXIncyBkYXRhLgo+ICsgKi8K PiArdm9pZCBkcF9wYXJzZXJfcHV0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7Cj4gKyNlbmRp ZgoKVGhlIHdob2xlIHNlcGFyYXRlIHBhcnNlciBjb25jZXB0IGlzIG92ZXJraWxsIGltby4gSnVz dCBkbyB0aGUgZHQgcGFyc2luZyB3aGVyZQphcHBsaWNhYmxlIChpZTogaW5zdGVhZCBvZiBkb2lu ZyBhbGwgb2YgdGhlIGRwX3Bvd2VyIHBhcnNpbmcgaW4gZHBfcGFyc2VyLCBqdXN0CnBhcnNlIGlu IGRwX3Bvd2VyLCBzYW1lIHdpdGggYXV4LCBldGMuKS4gSXQganVzdCBhZGRzIGEgbGF5ZXIgb2Yg aW5kaXJlY3Rpb24gZm9yCm5vIGJlbmVmaXQuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX3Bvd2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjQ3OGRlNzAKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5jCj4gQEAgLTAs MCArMSw3MzMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQki W2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlICJk cF9wb3dlci5oIgo+ICsKPiArI2RlZmluZSBEUF9DTElFTlRfTkFNRV9TSVpFCTIwCj4gKwo+ICtz dHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSB7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4g KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+ICsJc3RydWN0IGNsayAqcGl4ZWxfY2xr X3JjZzsKPiArCXN0cnVjdCBjbGsgKmxpbmtfY2xrX3NyYzsKPiArCXN0cnVjdCBjbGsgKnBpeGVs X3Byb3ZpZGVyOwo+ICsJc3RydWN0IGNsayAqbGlua19wcm92aWRlcjsKPiArCj4gKwlzdHJ1Y3Qg ZHBfcG93ZXIgZHBfcG93ZXI7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG1zbV9kc3NfaW5pdF92 cmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRzc192cmVnICppbl92cmVnLAo+ICsJCQlp bnQgbnVtX3ZyZWcpCj4gK3sKPiArCWludCBpID0gMCwgcmMgPSAwOwo+ICsJc3RydWN0IGRzc192 cmVnICpjdXJyX3ZyZWcgPSBOVUxMOwo+ICsJZW51bSBkc3NfdnJlZ190eXBlIHR5cGU7Cj4gKwo+ ICsJaWYgKCFpbl92cmVnIHx8ICFudW1fdnJlZykKPiArCQlyZXR1cm4gcmM7CgpTbyB0aGVzZSBh cmUgdGhlIHR5cGVzIG9mIGNoZWNrcyBJIHdhcyB0YWxraW5nIGFib3V0IGluIHYxLCBpZiBudW1f dnJlZyBpcyA+CjAgYW5kIGluX3ZyZWcgaXMgTlVMTCwgd2UgaGF2ZSBhIHNlcmlvdXMgcHJvYmxl bSB0aGF0IGlzIGRlZmluaXRlbHkgd29ydGh5IG9mIGEKY3Jhc2guIAoKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX3ZyZWc7IGkrKykgewo+ICsJCWN1cnJfdnJlZyA9ICZpbl92cmVnW2ldOwo+ ICsJCWN1cnJfdnJlZy0+dnJlZyA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsCj4gKwkJCWN1cnJf dnJlZy0+dnJlZ19uYW1lKTsKClRoaXMgd2lsbCBmaXQgb24gb25lIGxpbmUKCj4gKwkJcmMgPSBQ VFJfUkVUKGN1cnJfdnJlZy0+dnJlZyk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCURSTV9ERVZfRVJS T1IoZGV2LCAiJXBTLT4lczogJXMgZ2V0IGZhaWxlZC4gcmM9JWRcbiIsCj4gKwkJCQkgX19idWls dGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPiArCQkJCSBjdXJyX3ZyZWctPnZyZWdf bmFtZSwgcmMpOwo+ICsJCQljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOwo+ICsJCQlnb3RvIHZyZWdf Z2V0X2ZhaWw7Cj4gKwkJfQo+ICsJCXR5cGUgPSAocmVndWxhdG9yX2NvdW50X3ZvbHRhZ2VzKGN1 cnJfdnJlZy0+dnJlZykgPiAwKQo+ICsJCQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdfVlM7Cj4g KwkJaWYgKHR5cGUgPT0gRFNTX1JFR19MRE8pIHsKPiArCQkJcmMgPSByZWd1bGF0b3Jfc2V0X3Zv bHRhZ2UoCj4gKwkJCQljdXJyX3ZyZWctPnZyZWcsCj4gKwkJCQljdXJyX3ZyZWctPm1pbl92b2x0 YWdlLAo+ICsJCQkJY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7Cj4gKwkJCWlmIChyYyA8IDApIHsK PiArCQkJCURSTV9ERVZfRVJST1IoZGV2LCAiJXBTLT4lczolcyBzZXQgdmx0ZyBmYWlsXG4iLAo+ ICsJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwKPiArCQkJCQlfX2Z1bmNfXywKPiAr CQkJCQljdXJyX3ZyZWctPnZyZWdfbmFtZSk7Cj4gKwkJCQlnb3RvIHZyZWdfc2V0X3ZvbHRhZ2Vf ZmFpbDsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCXJldHVybiAwOwo+ICsKPiArdnJlZ191bmNv bmZpZzoKPiAraWYgKHR5cGUgPT0gRFNTX1JFR19MRE8pCj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQo Y3Vycl92cmVnLT52cmVnLCAwKTsKPiArCj4gK3ZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDoKPiArCWRl dm1fcmVndWxhdG9yX3B1dChjdXJyX3ZyZWctPnZyZWcpOwo+ICsJY3Vycl92cmVnLT52cmVnID0g TlVMTDsKPiArCj4gK3ZyZWdfZ2V0X2ZhaWw6Cj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsK PiArCQljdXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKPiArCQl0eXBlID0gKHJlZ3VsYXRvcl9jb3Vu dF92b2x0YWdlcyhjdXJyX3ZyZWctPnZyZWcpID4gMCkKPiArCQkJPyBEU1NfUkVHX0xETyA6IERT U19SRUdfVlM7Cj4gKwkJZ290byB2cmVnX3VuY29uZmlnOwoKSSBkb24ndCBnZXQgYSBnb29kIGZl ZWxpbmcgYWJvdXQganVtcGluZyBvdXQgYW5kIGJhY2sgaW50byB0aGUgbG9vcCBoZXJlLiBUaGlz CnNlZW1zIGxpa2UgaXQnZCBiZSBwcmV0dHkgZWFzeSB0byBicmVhayB3aXRoICBmdXR1cmUgY2hh bmdlcy4gSG93IGFib3V0CnNpbXBsaWZ5aW5nIHRoaXMgZnVuY3Rpb24gdG8gKHVuY29tcGlsZWQv dW50ZXN0ZWQpOgoKc3RhdGljIGludCBkcF9wb3dlcl9pbml0X3ZyZWcoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZHNzX3ZyZWcgKmluX3ZyZWcsCgkJICAgICAgICAgICAgICBpbnQgbnVtX3Zy ZWcpCnsKCWludCBpLCByYzsKCglmb3IgKGkgPSAwOyBpIDwgbnVtX3ZyZWc7IGkrKykgewoJCXN0 cnVjdCByZWd1bGF0b3IgKnJlZzsKCgkJcmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgaW5f dnJlZ1tpXS52cmVnX25hbWUpOwoJCXJjID0gUFRSX1JFVChyZWcpOwoJCWlmIChyYykgewoJCQlE Uk1fREVWX0VSUk9SKGRldiwgIiVzIGdldCBmYWlsZWQuICglZClcbiIsCgkJCQkgICAgICBpbl92 cmVnW2ldLnZyZWdfbmFtZSwgcmMpOwoJCQlnb3RvIGVycm9yOwoJCX0KCgkJaWYgKHJlZ3VsYXRv cl9jb3VudF92b2x0YWdlcyhyZWcpID4gMCkKCQkJcmMgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uo cmVnLCBpbl92cmVnW2ldLm1pbl92b2x0YWdlLAoJCQkJCQkgICBpbl92cmVnW2ldLm1heF92b2x0 YWdlKTsKCQkJaWYgKHJjIDwgMCkgewoJCQkJRFJNX0RFVl9FUlJPUihkZXYsICIlcyBzZXRfdm9s dGFnZSBmYWlsICglZClcbiIsCgkJCQkJICAgICAgaW5fdnJlZ1tpXS52cmVnX25hbWUsIHJjKTsK CQkJCWdvdG8gZXJyb3I7CgkJCX0KCQl9CgkJaW5fdnJlZ1tpXS52cmVnID0gcmVnOwoJfQoJcmV0 dXJuIDA7CgplcnJvcjoKCWZvciAoaS0tOyBpID49IDA7IGktLSkgewoJCWlmIChyZWd1bGF0b3Jf Y291bnRfdm9sdGFnZXMoaW5fdnJlZ1tpXS52cmVnKSA+IDApCgkJCXJlZ3VsYXRvcl9zZXRfbG9h ZChpbl92cmVnW2ldLnZyZWcsIDApOwoJCWluX3ZyZWdbaV0udnJlZyA9IE5VTEw7Cgl9CglyZXR1 cm4gcmM7Cn0KCgo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1z bV9kc3NfZGVpbml0X3ZyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHNzX3ZyZWcgKmlu X3ZyZWcsCj4gKwkJCWludCBudW1fdnJlZykKPiArewo+ICsJaW50IGkgPSAwLCByYyA9IDA7Cj4g KwlzdHJ1Y3QgZHNzX3ZyZWcgKmN1cnJfdnJlZyA9IE5VTEw7Cj4gKwllbnVtIGRzc192cmVnX3R5 cGUgdHlwZTsKPiArCj4gKwlpZiAoIWluX3ZyZWcgfHwgIW51bV92cmVnKQo+ICsJCXJldHVybiBy YzsKClNhbWUgY29tbWVudCBoZXJlIGFzIGFib3ZlCgo+ICsKPiArCWZvciAoaSA9IG51bV92cmVn LTE7IGkgPj0gMDsgaS0tKSB7Cj4gKwkJY3Vycl92cmVnID0gJmluX3ZyZWdbaV07Cj4gKwkJaWYg KGN1cnJfdnJlZy0+dnJlZykgewoKT3IgeW91IGNvdWxkIHNhdmUgYSBsZXZlbCBvZiBpbmRlbnQg YW5kIGRvOgoKICAgICAgICAgICAgICAgIGlmICghY3Vycl92cmVnLT52cmVnKQogICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKCgo+ICsJCQl0eXBlID0gKHJlZ3VsYXRvcl9jb3VudF92 b2x0YWdlcygKPiArCQkJCWN1cnJfdnJlZy0+dnJlZykgPiAwKQo+ICsJCQkJPyBEU1NfUkVHX0xE TyA6IERTU19SRUdfVlM7Cj4gKwkJCWlmICh0eXBlID09IERTU19SRUdfTERPKSB7CgpObyBuZWVk IGZvciB0aGUgdHlwZSBsb2NhbCwganVzdCBkbyB0aGUgY291bnQgY2hlY2sgaW4gdGhlIGlmIChs aWtlIEkndmUgZG9uZQphYm92ZSkKCj4gKwkJCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoY3Vycl92 cmVnLT52cmVnLAo+ICsJCQkJCTAsIGN1cnJfdnJlZy0+bWF4X3ZvbHRhZ2UpOwoKRG8geW91IGFs c28gbmVlZCB0byBjbGVhciB0aGUgbG9hZCBoZXJlPwoKPiArCQkJfQo+ICsJCQlkZXZtX3JlZ3Vs YXRvcl9wdXQoY3Vycl92cmVnLT52cmVnKTsKClRoaXMgaXMgdW5uZWNlc3NhcnkKCj4gKwkJCWN1 cnJfdnJlZy0+dnJlZyA9IE5VTEw7CgpUaGlzIGlzIGxpa2VseSB1bm5lY2Vzc2FyeSB0b28sIHJp Z2h0PwoKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBt c21fZHNzX2VuYWJsZV92cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVn LCBpbnQgZW5hYmxlKQo+ICt7Cj4gKwlpbnQgaSA9IDAsIHJjID0gMDsKPiArCWJvb2wgbmVlZF9z bGVlcDsKPiArCj4gKwlpZiAoZW5hYmxlKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51bV92cmVn OyBpKyspIHsKPiArCQkJaWYgKElTX0VSUl9PUl9OVUxMKGluX3ZyZWdbaV0udnJlZykpIHsKPiAr CQkJCXJjID0gUFRSX0VSUihpbl92cmVnW2ldLnZyZWcpOwo+ICsJCQkJRFJNX0VSUk9SKCIlcFMt PiVzOiAlcyB2cmVnIGVycm9yLiByYz0lZFxuIiwKPiArCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMCksIF9fZnVuY19fLAo+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lLCByYyk7Cj4g KwkJCQlnb3RvIHZyZWdfc2V0X29wdF9tb2RlX2ZhaWw7Cj4gKwkJCX0KPiArCQkJbmVlZF9zbGVl cCA9ICFyZWd1bGF0b3JfaXNfZW5hYmxlZChpbl92cmVnW2ldLnZyZWcpOwo+ICsJCQlpZiAoaW5f dnJlZ1tpXS5wcmVfb25fc2xlZXAgJiYgbmVlZF9zbGVlcCkKPiArCQkJCXVzbGVlcF9yYW5nZShp bl92cmVnW2ldLnByZV9vbl9zbGVlcCAqIDEwMDAsCj4gKwkJCQkJaW5fdnJlZ1tpXS5wcmVfb25f c2xlZXAgKiAxMDAwKTsKPiArCQkJcmMgPSByZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52 cmVnLAo+ICsJCQkJaW5fdnJlZ1tpXS5lbmFibGVfbG9hZCk7Cj4gKwkJCWlmIChyYyA8IDApIHsK PiArCQkJCURSTV9FUlJPUigiJXBTLT4lczogJXMgc2V0IG9wdCBtIGZhaWxcbiIsCj4gKwkJCQkJ X19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPiArCQkJCQlpbl92cmVnW2ld LnZyZWdfbmFtZSk7Cj4gKwkJCQlnb3RvIHZyZWdfc2V0X29wdF9tb2RlX2ZhaWw7Cj4gKwkJCX0K PiArCQkJcmMgPSByZWd1bGF0b3JfZW5hYmxlKGluX3ZyZWdbaV0udnJlZyk7Cj4gKwkJCWlmIChp bl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgJiYgbmVlZF9zbGVlcCkKPiArCQkJCXVzbGVlcF9yYW5n ZShpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgKiAxMDAwLAo+ICsJCQkJCWluX3ZyZWdbaV0ucG9z dF9vbl9zbGVlcCAqIDEwMDApOwo+ICsJCQlpZiAocmMgPCAwKSB7Cj4gKwkJCQlEUk1fRVJST1Io IiVwUy0+JXM6ICVzIGVuYWJsZSBmYWlsZWRcbiIsCj4gKwkJCQkJX19idWlsdGluX3JldHVybl9h ZGRyZXNzKDApLCBfX2Z1bmNfXywKPiArCQkJCQlpbl92cmVnW2ldLnZyZWdfbmFtZSk7Cj4gKwkJ CQlnb3RvIGRpc2FibGVfdnJlZzsKPiArCQkJfQo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJZm9y IChpID0gbnVtX3ZyZWctMTsgaSA+PSAwOyBpLS0pIHsKPiArCQkJaWYgKGluX3ZyZWdbaV0ucHJl X29mZl9zbGVlcCkKPiArCQkJCXVzbGVlcF9yYW5nZShpbl92cmVnW2ldLnByZV9vZmZfc2xlZXAg KiAxMDAwLAo+ICsJCQkJCWluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAqIDEwMDApOwo+ICsJCQly ZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAo+ICsJCQkJaW5fdnJlZ1tpXS5kaXNh YmxlX2xvYWQpOwo+ICsJCQlyZWd1bGF0b3JfZGlzYWJsZShpbl92cmVnW2ldLnZyZWcpOwo+ICsJ CQlpZiAoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCkKPiArCQkJCXVzbGVlcF9yYW5nZShpbl92 cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwICogMTAwMCwKPiArCQkJCQlpbl92cmVnW2ldLnBvc3Rfb2Zm X3NsZWVwICogMTAwMCk7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIHJjOwoKVGhlc2UgYXJlIDIg Y29tcGxldGVseSBzZXBhcmF0ZSBmdW5jdGlvbnMgc21hc2hlZCBpbnRvIG9uZS4gUGxlYXNlIHNw bGl0IG9mZgppbnRvIGRwX3Bvd2VyX2VuYWJsZS9kaXNhYmxlX3ZyZWcKCj4gKwo+ICtkaXNhYmxl X3ZyZWc6Cj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLCBpbl92cmVnW2ld LmRpc2FibGVfbG9hZCk7CgpJbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBsYWJlbCBmb3IgdGhpcywg anVzdCBjYWxsIHRoZSBzZXRfbG9hZCBpbiB0aGUgZXJyb3IKY29uZGl0aW9uIGFib3ZlLgoKPiAr Cj4gK3ZyZWdfc2V0X29wdF9tb2RlX2ZhaWw6Cj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsK PiArCQlpZiAoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwKQo+ICsJCQl1c2xlZXBfcmFuZ2UoaW5f dnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCwKPiArCQkJCWluX3ZyZWdbaV0ucHJlX29mZl9z bGVlcCAqIDEwMDApOwo+ICsJCXJlZ3VsYXRvcl9zZXRfbG9hZChpbl92cmVnW2ldLnZyZWcsCj4g KwkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsKPiArCQlyZWd1bGF0b3JfZGlzYWJsZShpbl92 cmVnW2ldLnZyZWcpOwo+ICsJCWlmIChpbl92cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwKQo+ICsJCQl1 c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDAsCj4gKwkJCQlpbl92 cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwICogMTAwMCk7Cj4gKwl9CgpUaGlzIGlzIGp1c3QgY29waWVk IGZyb20gdGhlIGRpc2FibGUgcGF0aCBhYm92ZS4gU28gb25jZSB0aGVzZSBmdW5jdGlvbnMgYXJl CnNwbGl0IG91dCwganVzdCBjYWxsIHRoZSBfZGlzYWJsZSBmdW5jdGlvbiBpbiBjYXNlIG9mIGVy cm9yLgoKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30gLyogbXNtX2Rzc19lbmFibGVfdnJlZyAqLwoK UGxlYXNlIHVwZGF0ZSB0aGVzZSBmdW5jdGlvbiBuYW1lcyB0byBtYXRjaCB0aGUgcmVzdCBvZiB0 aGUgZmlsZSAoaWU6CmRwX3Bvd2VyXyopCgo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9yZWd1 bGF0b3JfaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIpCj4gK3sKPiArCWludCBy YyA9IDAsIGkgPSAwLCBqID0gMDsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4g KwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4gKwo+ICsJcGFyc2VyID0gcG93ZXItPnBhcnNl cjsKPiArCXBkZXYgPSBwb3dlci0+cGRldjsKPiArCj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyAh cmMgJiYgKGkgPCBEUF9NQVhfUE0pOyBpKyspIHsKCnJjIGNhbiBvbmx5IGJlIHplcm8gaGVyZSwg c28gdGhhdCBjaGVjayBpcyB1bm5lY3NzYXJ5LiBBbHNvIHRoZSAoKSBhcm91bmQgdGhlCmJvdW5k cyBjaGVjayBhcmUgYWxzbyBub3QgbmVlZGVkLgoKPiArCQlyYyA9IG1zbV9kc3NfaW5pdF92cmVn KCZwZGV2LT5kZXYsCj4gKwkJCXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCj4gKwkJCXBhcnNl ci0+bXBbaV0ubnVtX3ZyZWcpOwo+ICsJCWlmIChyYykgewo+ICsJCQlEUk1fRVJST1IoImZhaWxl ZCB0byBpbml0IHZyZWdzIGZvciAlc1xuIiwKPiArCQkJCWRwX3BhcnNlcl9wbV9uYW1lKGkpKTsK PiArCQkJZm9yIChqID0gaSAtIDE7IGogPj0gRFBfQ09SRV9QTTsgai0tKSB7Cj4gKwkJCQltc21f ZHNzX2RlaW5pdF92cmVnKCZwZGV2LT5kZXYsCgpZb3UgYWxyZWFkeSBjbGVhbiB0aGVzZSB1cCBh bmQgY2xlYXIgdGhlbSBpbiBpbml0X3ZyZWcoKSBmdW5jdGlvbiAoYXMgeW91CnNob3VsZCksIHNv IHRoaXMgbG9vcCBpcyB1bm5lY2Vzc2FyeSwganVzdCByZXR1cm4gcmMuCgo+ICsJCQkJcGFyc2Vy LT5tcFtqXS52cmVnX2NvbmZpZywKPiArCQkJCXBhcnNlci0+bXBbal0ubnVtX3ZyZWcpOwo+ICsJ CQl9Cj4gKwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCX0KPiArZXJyb3I6CgpTYW1lIGNv bW1lbnQgaGVyZSBhcyBpbiBteSB2MSByZXZpZXdzIHJlZ2FyZGluZyBsYWJlbHMKCj4gKwlyZXR1 cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQo c3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwLCBpID0g MDsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2Vy ICpwYXJzZXI7Cj4gKwo+ICsJcGFyc2VyID0gcG93ZXItPnBhcnNlcjsKPiArCXBkZXYgPSBwb3dl ci0+cGRldjsKPiArCj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyAoaSA8IERQX01BWF9QTSk7IGkr KykgewoKRnJvbSBteSB2MSByZXZpZXc6CiAgVW5uZWNlc3NhcnkgKCksIGFwcGxpZXMgZWxzZXdo ZXJlIHRvbywgcGxlYXNlIG1ha2UgYSBwYXNzCgpJZiBJJ20gZ29pbmcgdG8gdGFrZSB0aGUgdGlt ZSB0byByZXZpZXcgYW4gPiAxMGsgbGluZSByZXZpZXcsIGNvdWxkIHlvdSBwbGVhc2UKdGFrZSB0 aGUgdGltZSB0byBhZGRyZXNzIHRoZSBjb21tZW50cz8KCj4gKwkJcmMgPSBtc21fZHNzX2RlaW5p dF92cmVnKCZwZGV2LT5kZXYsCj4gKwkJCXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCj4gKwkJ CXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcpOwo+ICsJCWlmIChyYykKPiArCQkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gZGVpbml0IHZyZWdzIGZvciAlc1xuIiwKPiArCQkJCWRwX3BhcnNlcl9wbV9uYW1l KGkpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9yZWd1bGF0b3JfY3Ry bChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlp bnQgcmMgPSAwLCBpID0gMCwgaiA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIgPSBw b3dlci0+cGFyc2VyOwo+ICsKPiArCWZvciAoaSA9IERQX0NPUkVfUE07IGkgPCBEUF9NQVhfUE07 IGkrKykgewo+ICsJCXJjID0gbXNtX2Rzc19lbmFibGVfdnJlZygKPiArCQkJcGFyc2VyLT5tcFtp XS52cmVnX2NvbmZpZywKPiArCQkJcGFyc2VyLT5tcFtpXS5udW1fdnJlZywgZW5hYmxlKTsKPiAr CQlpZiAocmMpIHsKPiArCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gJyVzJyB2cmVncyBmb3IgJXNc biIsCj4gKwkJCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIsCj4gKwkJCQkJZHBfcGFy c2VyX3BtX25hbWUoaSkpOwo+ICsJCQlpZiAoZW5hYmxlKSB7Cj4gKwkJCQlmb3IgKGogPSBpLTE7 IGogPj0gRFBfQ09SRV9QTTsgai0tKSB7Cj4gKwkJCQkJbXNtX2Rzc19lbmFibGVfdnJlZygKPiAr CQkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAo+ICsJCQkJCXBhcnNlci0+bXBbal0ubnVt X3ZyZWcsIDApOwo+ICsJCQkJfQo+ICsJCQl9CgpBZ2FpbiwgdGhlIGVuYWJsZV92cmVnIGZ1bmN0 aW9uIGFscmVhZHkgY2xlYW5zIHRoaXMgdXAsIHNvIHlvdSBkb24ndCBoYXZlIHRvCmhlcmUuCgo+ ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCX0KPiArZXJyb3I6Cj4gKwlyZXR1cm4gcmM7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfcGluY3RybF9zZXQoc3RydWN0IGRwX3Bvd2Vy X3ByaXZhdGUgKnBvd2VyLCBib29sIGFjdGl2ZSkKPiArewo+ICsJaW50IHJjID0gLUVGQVVMVDsK PiArCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpwaW5fc3RhdGU7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2Vy ICpwYXJzZXIgPSBwb3dlci0+cGFyc2VyOwo+ICsKPiArCWlmIChJU19FUlJfT1JfTlVMTChwYXJz ZXItPnBpbmN0cmwucGluKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwYXJzZXItPnBpbmN0cmwucGlu KTsKPiArCj4gKwlwaW5fc3RhdGUgPSBhY3RpdmUgPyBwYXJzZXItPnBpbmN0cmwuc3RhdGVfYWN0 aXZlCj4gKwkJCQk6IHBhcnNlci0+cGluY3RybC5zdGF0ZV9zdXNwZW5kOwo+ICsKPiArCXJjID0g cGluY3RybF9zZWxlY3Rfc3RhdGUocGFyc2VyLT5waW5jdHJsLnBpbiwgcGluX3N0YXRlKTsKPiAr CWlmIChyYykgewo+ICsJCURSTV9FUlJPUigiY2FuIG5vdCBzZXQgJXMgcGluc1xuIiwKPiArCQkJ YWN0aXZlID8gImRwX2FjdGl2ZSIgOiAiZHBfc2xlZXAiKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfY2xrX2lu aXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmNvcmUsICpjdHJsOwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBvd2VyLT5wZGV2LT5kZXY7Cj4gKwo+ICsJY29yZSA9ICZwb3dlci0+cGFyc2Vy LT5tcFtEUF9DT1JFX1BNXTsKPiArCWN0cmwgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ1RSTF9Q TV07Cj4gKwo+ICsJaWYgKHBvd2VyLT5wYXJzZXItPnBsbCAmJiBwb3dlci0+cGFyc2VyLT5wbGwt PmdldF9wcm92aWRlcikgewo+ICsJCXJjID0gcG93ZXItPnBhcnNlci0+cGxsLT5nZXRfcHJvdmlk ZXIocG93ZXItPnBhcnNlci0+cGxsLAo+ICsJCQkJJnBvd2VyLT5saW5rX3Byb3ZpZGVyLCAmcG93 ZXItPnBpeGVsX3Byb3ZpZGVyKTsKPiArCQlpZiAocmMpIHsKPiArCQkJcHJfaW5mbygiJXM6IGNh bid0IGdldCBwcm92aWRlciBmcm9tIHBsbCwgZG9uJ3Qgc2V0IHBhcmVudFxuIiwKPiArCQkJCV9f ZnVuY19fKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rz c19nZXRfY2xrKGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4gKwlpZiAo cmMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgJXMgY2xrLiBlcnI9JWRcbiIsCj4g KwkJCWRwX3BhcnNlcl9wbV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rzc19nZXRfY2xrKGRldiwgY3RybC0+Y2xrX2NvbmZpZywg Y3RybC0+bnVtX2Nsayk7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBn ZXQgJXMgY2xrLiBlcnI9JWRcbiIsCj4gKwkJCWRwX3BhcnNlcl9wbV9uYW1lKERQX0NUUkxfUE0p LCByYyk7Cj4gKwkJbXNtX2Rzc19wdXRfY2xrKGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51bV9j bGspOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXBvd2VyLT5waXhlbF9jbGtf cmNnID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsX2Nsa19yY2ciKTsKPiArCWlmIChJU19FUlIo cG93ZXItPnBpeGVsX2Nsa19yY2cpKSB7Cj4gKwkJRFJNX0RFQlVHX0RQKCJVbmFibGUgdG8gZ2V0 IERQIHBpeGVsIGNsayBSQ0dcbiIpOwo+ICsJCXBvd2VyLT5waXhlbF9jbGtfcmNnID0gTlVMTDsK PiArCQltc21fZHNzX3B1dF9jbGsoY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHBfcG93ZXJfY2xrX2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXIpCj4gK3sKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpjb3JlLCAqY3RybDsKPiArCj4g Kwljb3JlID0gJnBvd2VyLT5wYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+ICsJY3RybCA9ICZwb3dl ci0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKPiArCj4gKwlpZiAoIWNvcmUgfHwgIWN0cmwpIHsK PiArCQlEUk1fRVJST1IoImludmFsaWQgcG93ZXJfZGF0YVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJbXNtX2Rzc19wdXRfY2xrKGN0cmwtPmNsa19jb25maWcsIGN0cmwt Pm51bV9jbGspOwo+ICsJbXNtX2Rzc19wdXRfY2xrKGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51 bV9jbGspOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfY2xr X3NldF9yYXRlKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwKPiArCQllbnVtIGRwX3Bt X3R5cGUgbW9kdWxlLCBib29sIGVuYWJsZSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVj dCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwb3dlci0+cGFyc2VyLT5tcFttb2R1bGVdOwo+ICsK PiArCWlmIChlbmFibGUpIHsKPiArCQlyYyA9IG1zbV9kc3NfY2xrX3NldF9yYXRlKG1wLT5jbGtf Y29uZmlnLCBtcC0+bnVtX2Nsayk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCURSTV9FUlJPUigiZmFp bGVkIHRvIHNldCBjbGtzIHJhdGUuXG4iKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCX0K PiArCj4gKwlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9j bGssIGVuYWJsZSk7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byAlZCBj bGtzLCBlcnI6ICVkXG4iLCBlbmFibGUsIHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBkcF9wb3dlcl9jbGtfZW5hYmxlKHN0cnVjdCBk cF9wb3dlciAqZHBfcG93ZXIsCj4gKwkJZW51bSBkcF9wbV90eXBlIHBtX3R5cGUsIGJvb2wgZW5h YmxlKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1w Owo+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+ICsKPiArCXBvd2VyID0gY29u dGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwo+ ICsJbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbcG1fdHlwZV07Cj4gKwo+ICsJaWYgKHBtX3R5cGUg IT0gRFBfQ09SRV9QTSAmJiBwbV90eXBlICE9IERQX0NUUkxfUE0pIHsKPiArCQlEUk1fRVJST1Io InVuc3VwcG9ydGVkIHBvd2VyIG1vZHVsZTogJXNcbiIsCj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFt ZShwbV90eXBlKSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVuYWJs ZSkgewo+ICsJCWlmIChwbV90eXBlID09IERQX0NPUkVfUE0gJiYgZHBfcG93ZXItPmNvcmVfY2xr c19vbikgewo+ICsJCQlEUk1fREVCVUdfRFAoImNvcmUgY2xrcyBhbHJlYWR5IGVuYWJsZWRcbiIp Owo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwo+ICsJCWlmIChwbV90eXBlID09IERQX0NUUkxf UE0gJiYgZHBfcG93ZXItPmxpbmtfY2xrc19vbikgewo+ICsJCQlEUk1fREVCVUdfRFAoImxpbmtz IGNsa3MgYWxyZWFkeSBlbmFibGVkXG4iKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsKPiAr CQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkgJiYgKCFkcF9wb3dlci0+Y29yZV9jbGtzX29u KSkgewo+ICsJCQlEUk1fREVCVUdfRFAoIk5lZWQgdG8gZW5hYmxlIGNvcmUgY2xrcyBiZWZvcmUg bGluayBjbGtzXG4iKTsKPiArCj4gKwkJCXJjID0gZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2Vy LCBEUF9DT1JFX1BNLCBlbmFibGUpOwo+ICsJCQlpZiAocmMpIHsKPiArCQkJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGVuYWJsZSBjbGtzOiAlcy4gZXJyPSVkXG4iLAo+ICsJCQkJCWRwX3BhcnNlcl9w bV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Cj4gKwkJCQlyZXR1cm4gcmM7Cj4gKwkJCX0KPiArCQkJ ZHBfcG93ZXItPmNvcmVfY2xrc19vbiA9IHRydWU7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJjID0g ZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2VyLCBwbV90eXBlLCBlbmFibGUpOwo+ICsJaWYgKHJj KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gJyVzJyBjbGtzIGZvcjogJXMuIGVycj0lZFxu IiwKPiArCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIsCj4gKwkJCWRwX3BhcnNlcl9w bV9uYW1lKHBtX3R5cGUpLCByYyk7Cj4gKwkJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlpZiAo cG1fdHlwZSA9PSBEUF9DT1JFX1BNKQo+ICsJCWRwX3Bvd2VyLT5jb3JlX2Nsa3Nfb24gPSBlbmFi bGU7Cj4gKwllbHNlCj4gKwkJZHBfcG93ZXItPmxpbmtfY2xrc19vbiA9IGVuYWJsZTsKPiArCj4g KwlEUk1fREVCVUdfRFAoIiVzIGNsb2NrcyBmb3IgJXNcbiIsCj4gKwkJCWVuYWJsZSA/ICJlbmFi bGUiIDogImRpc2FibGUiLAo+ICsJCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSk7Cj4gKwlE Uk1fREVCVUdfRFAoImxpbmtfY2xrczolcyBjb3JlX2Nsa3M6JXNcbiIsCj4gKwkJZHBfcG93ZXIt PmxpbmtfY2xrc19vbiA/ICJvbiIgOiAib2ZmIiwKPiArCQlkcF9wb3dlci0+Y29yZV9jbGtzX29u ID8gIm9uIiA6ICJvZmYiKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkcF9wb3dlcl9yZXF1ZXN0X2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikK PiArewo+ICsJaW50IHJjID0gMCwgaTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3dlci0+ cGRldi0+ZGV2Owo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBvd2VyLT5wYXJz ZXItPm1wW0RQX0NPUkVfUE1dOwo+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncGlvX25h bWVzW10gPSB7Cj4gKwkJImF1eF9lbmFibGUiLCAiYXV4X3NlbCIsICJ1c2JwbHVnX2NjIiwKPiAr CX07Cj4gKwo+ICsJaWYgKCFwb3dlcikgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBwb3dlciBk YXRhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShncGlvX25hbWVzKTsgaSsrKSB7Cj4gKwkJdW5zaWduZWQgaW50IGdwaW8g PSBtcC0+Z3Bpb19jb25maWdbaV0uZ3BpbzsKPiArCj4gKwkJaWYgKCFncGlvX2lzX3ZhbGlkKGdw aW8pKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmMgPSBkZXZtX2dwaW9fcmVxdWVzdChkZXYs IGdwaW8sIGdwaW9fbmFtZXNbaV0pOwo+ICsJCWlmIChyYykgewo+ICsJCQlEUk1fRVJST1IoInJl cXVlc3QgJXMgZ3BpbyBmYWlsZWQsIHJjPSVkXG4iLAo+ICsJCQkJICAgICAgIGdwaW9fbmFtZXNb aV0sIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCX0KPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9wb3dlcl9maW5kX2dwaW8oY29uc3QgY2hhciAqZ3BpbzEs IGNvbnN0IGNoYXIgKmdwaW8yKQo+ICt7Cj4gKwlyZXR1cm4gISFzdHJuc3RyKGdwaW8xLCBncGlv Miwgc3RybGVuKGdwaW8xKSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3Bvd2VyX3NldF9n cGlvKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBmbGlwKQo+ICt7Cj4gKwlp bnQgaTsKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwb3dlci0+cGFyc2VyLT5t cFtEUF9DT1JFX1BNXTsKPiArCXN0cnVjdCBkc3NfZ3BpbyAqY29uZmlnID0gbXAtPmdwaW9fY29u ZmlnOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87IGkrKykgewo+ICsJCWlm IChkcF9wb3dlcl9maW5kX2dwaW8oY29uZmlnLT5ncGlvX25hbWUsICJhdXgtc2VsIikpCj4gKwkJ CWNvbmZpZy0+dmFsdWUgPSBmbGlwOwo+ICsKPiArCQlpZiAoZ3Bpb19pc192YWxpZChjb25maWct PmdwaW8pKSB7Cj4gKwkJCURSTV9ERUJVR19EUCgiZ3BpbyAlcywgdmFsdWUgJWRcbiIsIGNvbmZp Zy0+Z3Bpb19uYW1lLAo+ICsJCQkJY29uZmlnLT52YWx1ZSk7Cj4gKwo+ICsJCQlpZiAoZHBfcG93 ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LWVuIikgfHwKPiArCQkJICAgIGRw X3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdwaW9fbmFtZSwgImF1eC1zZWwiKSkKPiArCQkJCWdw aW9fZGlyZWN0aW9uX291dHB1dChjb25maWctPmdwaW8sCj4gKwkJCQkJY29uZmlnLT52YWx1ZSk7 Cj4gKwkJCWVsc2UKPiArCQkJCWdwaW9fc2V0X3ZhbHVlKGNvbmZpZy0+Z3BpbywgY29uZmlnLT52 YWx1ZSk7Cj4gKwo+ICsJCX0KPiArCQljb25maWcrKzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9wb3dlcl9jb25maWdfZ3Bpb3Moc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2Vy LCBib29sIGZsaXAsCj4gKwkJCQkJYm9vbCBlbmFibGUpCj4gK3sKPiArCWludCByYyA9IDAsIGk7 Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBf Q09SRV9QTV07Cj4gKwlzdHJ1Y3QgZHNzX2dwaW8gKmNvbmZpZyA9IG1wLT5ncGlvX2NvbmZpZzsK PiArCj4gKwltcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPiArCWNvbmZpZyA9 IG1wLT5ncGlvX2NvbmZpZzsKPiArCj4gKwlpZiAoZW5hYmxlKSB7Cj4gKwkJcmMgPSBkcF9wb3dl cl9yZXF1ZXN0X2dwaW9zKHBvd2VyKTsKPiArCQlpZiAocmMpIHsKPiArCQkJRFJNX0VSUk9SKCJn cGlvIHJlcXVlc3QgZmFpbGVkXG4iKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCj4gKwkJ ZHBfcG93ZXJfc2V0X2dwaW8ocG93ZXIsIGZsaXApOwo+ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkg PSAwOyBpIDwgbXAtPm51bV9ncGlvOyBpKyspIHsKPiArCQkJZ3Bpb19zZXRfdmFsdWUoY29uZmln W2ldLmdwaW8sIDApOwo+ICsJCQlncGlvX2ZyZWUoY29uZmlnW2ldLmdwaW8pOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGRwX3Bvd2VyX2NsaWVudF9pbml0 KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4gKwo+ICsJaWYgKCFkcF9wb3dlcikgewo+ICsJ CURSTV9FUlJPUigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bv d2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZSgmcG93ZXIt PnBkZXYtPmRldik7Cj4gKwo+ICsJcmMgPSBkcF9wb3dlcl9yZWd1bGF0b3JfaW5pdChwb3dlcik7 Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0IHJlZ3VsYXRvcnMg JWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycm9yX3Bvd2VyOwo+ICsJfQo+ICsKPiArCXJjID0gZHBf cG93ZXJfY2xrX2luaXQocG93ZXIpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdCBjbG9ja3MgJWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycm9yX2NsazsKPiArCX0K PiArCXJldHVybiAwOwo+ICsKPiArZXJyb3JfY2xrOgo+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2Rl aW5pdChwb3dlcik7Cj4gK2Vycm9yX3Bvd2VyOgo+ICsJcG1fcnVudGltZV9kaXNhYmxlKCZwb3dl ci0+cGRldi0+ZGV2KTsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArdm9pZCBkcF9wb3dlcl9j bGllbnRfZGVpbml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCj4gK3sKPiArCXN0cnVjdCBk cF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPiArCj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4gKwkJRFJN X0VSUk9SKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g Kwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUs IGRwX3Bvd2VyKTsKPiArCj4gKwlkcF9wb3dlcl9jbGtfZGVpbml0KHBvd2VyKTsKPiArCWRwX3Bv d2VyX3JlZ3VsYXRvcl9kZWluaXQocG93ZXIpOwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKCZwb3dl ci0+cGRldi0+ZGV2KTsKPiArCj4gK30KPiArCj4gK2ludCBkcF9wb3dlcl9zZXRfbGlua19jbGtf cGFyZW50KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4g KwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4gKwl1MzIgbnVtOwo+ICsJc3RydWN0 IGRzc19jbGsgKmNmZzsKPiArCWNoYXIgKm5hbWUgPSAiY3RybF9saW5rX2NsayI7Cj4gKwo+ICsJ aWYgKCFkcF9wb3dlcikgewo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsK PiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCXBvd2VyID0g Y29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIp Owo+ICsKPiArCW51bSA9IHBvd2VyLT5wYXJzZXItPm1wW0RQX0NUUkxfUE1dLm51bV9jbGs7Cj4g KwljZmcgPSBwb3dlci0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXS5jbGtfY29uZmlnOwo+ICsKPiAr CXdoaWxlIChudW0gJiYgc3RyY21wKGNmZy0+Y2xrX25hbWUsIG5hbWUpKSB7Cj4gKwkJbnVtLS07 Cj4gKwkJY2ZnKys7Cj4gKwl9Cj4gKwo+ICsJaWYgKG51bSAmJiBwb3dlci0+bGlua19wcm92aWRl cikgewo+ICsJCXBvd2VyLT5saW5rX2Nsa19zcmMgPSBjbGtfZ2V0X3BhcmVudChjZmctPmNsayk7 Cj4gKwkJCWlmIChwb3dlci0+bGlua19jbGtfc3JjKSB7Cj4gKwkJCQljbGtfc2V0X3BhcmVudChw b3dlci0+bGlua19jbGtfc3JjLCBwb3dlci0+bGlua19wcm92aWRlcik7Cj4gKwkJCQlEUk1fREVC VUdfRFAoIiVzOiBpcyB0aGUgcGFyZW50IG9mIGNsaz0lc1xuIiwKPiArCQkJCQkJX19jbGtfZ2V0 X25hbWUocG93ZXItPmxpbmtfcHJvdmlkZXIpLAo+ICsJCQkJCQlfX2Nsa19nZXRfbmFtZShwb3dl ci0+bGlua19jbGtfc3JjKSk7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlEUk1fRVJST1IoImNvdWxk bid0IGdldCBwYXJlbnQgZm9yIGNsaz0lc1xuIiwgbmFtZSk7Cj4gKwkJCQlyYyA9IC1FSU5WQUw7 Cj4gKwkJCX0KPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCIlcyBjbG9jayBjb3VsZCBub3Qg YmUgc2V0IHBhcmVudFxuIiwgbmFtZSk7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJfQo+ICtleGl0 Ogo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQgZHBfcG93ZXJfc2V0X3BpeGVsX2Nsa19w YXJlbnQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKPiArewo+ICsJaW50IHJjID0gMDsKPiAr CXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPiArCj4gKwlwb3dlciA9IGNvbnRhaW5l cl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPiArCj4g KwlpZiAocG93ZXItPnBpeGVsX2Nsa19yY2cgJiYgcG93ZXItPnBpeGVsX3Byb3ZpZGVyKSB7Cj4g KwkJcmMgPSBjbGtfc2V0X3BhcmVudChwb3dlci0+cGl4ZWxfY2xrX3JjZywgcG93ZXItPnBpeGVs X3Byb3ZpZGVyKTsKPiArCQlpZiAocmMpIHsKPiArCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0 IHBhcmVudCBjbGsgc3JjLCAlZFxuIiwgcmMpOwo+ICsJCQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsJ CURSTV9ERUJVR19EUCgiJXM6IGlzIHRoZSBwYXJlbnQgb2YgY2xrPSVzXG4iLAo+ICsJCQkJCV9f Y2xrX2dldF9uYW1lKHBvd2VyLT5waXhlbF9wcm92aWRlciksCj4gKwkJCQkJX19jbGtfZ2V0X25h bWUocG93ZXItPnBpeGVsX2Nsa19yY2cpKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiAraW50IGRwX3Bvd2VyX2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwgYm9vbCBm bGlwKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBv d2VyOwo+ICsKPiArCWlmICghZHBfcG93ZXIpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgcG93 ZXIgZGF0YVxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiAr Cj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUsIGRwX3Bvd2VyKTsKPiArCj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwb3dlci0+cGRldi0+ ZGV2KTsKPiArCXJjID0gZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwocG93ZXIsIHRydWUpOwo+ICsJ aWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnMsICVk XG4iLCByYyk7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCXJjID0gZHBfcG93ZXJfcGlu Y3RybF9zZXQocG93ZXIsIHRydWUpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gc2V0IHBpbmN0cmwgc3RhdGUsICVkXG4iLCByYyk7Cj4gKwkJZ290byBlcnJfcGluY3Ry bDsKPiArCX0KPiArCj4gKwlyYyA9IGRwX3Bvd2VyX2NvbmZpZ19ncGlvcyhwb3dlciwgZmxpcCwg dHJ1ZSk7Cj4gKwlpZiAocmMpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgZ3Bp b3MsICVkXG4iLCByYyk7Cj4gKwkJZ290byBlcnJfZ3BpbzsKPiArCX0KPiArCj4gKwlyYyA9IGRw X3Bvd2VyX2Nsa19lbmFibGUoZHBfcG93ZXIsIERQX0NPUkVfUE0sIHRydWUpOwo+ICsJaWYgKHJj KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIERQIGNvcmUgY2xvY2tzLCAlZFxu IiwgcmMpOwo+ICsJCWdvdG8gZXJyX2NsazsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g K2Vycl9jbGs6Cj4gKwlkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93ZXIsIGZsaXAsIGZhbHNlKTsK PiArZXJyX2dwaW86Cj4gKwlkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgZmFsc2UpOwo+ICtl cnJfcGluY3RybDoKPiArCWRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCBmYWxzZSk7Cj4g K2V4aXQ6Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKCZwb3dlci0+cGRldi0+ZGV2KTsKPiArCXJl dHVybiByYzsKPiArfQo+ICsKPiAraW50IGRwX3Bvd2VyX2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXIg KmRwX3Bvd2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4gKwo+ ICsJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRl LCBkcF9wb3dlcik7Cj4gKwo+ICsJZHBfcG93ZXJfY2xrX2VuYWJsZShkcF9wb3dlciwgRFBfQ09S RV9QTSwgZmFsc2UpOwo+ICsJZHBfcG93ZXJfY29uZmlnX2dwaW9zKHBvd2VyLCBmYWxzZSwgZmFs c2UpOwo+ICsJZHBfcG93ZXJfcGluY3RybF9zZXQocG93ZXIsIGZhbHNlKTsKPiArCWRwX3Bvd2Vy X3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCBmYWxzZSk7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKCZw b3dlci0+cGRldi0+ZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHBfcG93 ZXIgKmRwX3Bvd2VyX2dldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4gK3sKPiArCWludCBy YyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4gKwlzdHJ1Y3QgZHBf cG93ZXIgKmRwX3Bvd2VyOwo+ICsKPiArCWlmICghcGFyc2VyKSB7Cj4gKwkJRFJNX0VSUk9SKCJp bnZhbGlkIGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKPiAr CX0KPiArCj4gKwlwb3dlciA9IGRldm1fa3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsIHNpemVv ZigqcG93ZXIpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcG93ZXIpIHsKPiArCQlyYyA9IC1FTk9N RU07Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlwb3dlci0+cGFyc2VyID0gcGFyc2Vy Owo+ICsJcG93ZXItPnBkZXYgPSBwYXJzZXItPnBkZXY7Cj4gKwo+ICsJZHBfcG93ZXIgPSAmcG93 ZXItPmRwX3Bvd2VyOwo+ICsKPiArCXJldHVybiBkcF9wb3dlcjsKPiArZXJyb3I6Cj4gKwlyZXR1 cm4gRVJSX1BUUihyYyk7Cj4gK30KPiArCj4gK3ZvaWQgZHBfcG93ZXJfcHV0KHN0cnVjdCBkcF9w b3dlciAqZHBfcG93ZXIpCj4gK3sKPiArCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciA9 IE5VTEw7Cj4gKwo+ICsJaWYgKCFkcF9wb3dlcikKPiArCQlyZXR1cm47Cj4gKwo+ICsJcG93ZXIg PSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dl cik7Cj4gKwo+ICsJZGV2bV9rZnJlZSgmcG93ZXItPnBkZXYtPmRldiwgcG93ZXIpOwo+ICt9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uNzZlMmQzYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3Bvd2VyLmgKPiBAQCAtMCwwICsxLDUxIEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEy LTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgX0RQX1BPV0VSX0hfCj4gKyNkZWZpbmUgX0RQX1BPV0VSX0hfCj4gKwo+ ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4gKwo+ICsvKioKPiArICogc3J1Y3QgZHBfcG93ZXIg LSBEaXNwbGF5UG9ydCdzIHBvd2VyIHJlbGF0ZWQgZGF0YQo+ICsgKgo+ICsgKiBAaW5pdDogaW5p dGlhbGl6ZXMgdGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAo+ICsgKiBA ZGVpbml0OiB0dXJucyBvZmYgdGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3Ry bAo+ICsgKiBAY2xrX2VuYWJsZTogZW5hYmxlL2Rpc2FibGUgdGhlIERQIGNsb2Nrcwo+ICsgKiBA c2V0X3BpeGVsX2Nsa19wYXJlbnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNsb2NrCj4g KyAqLwo+ICtzdHJ1Y3QgZHBfcG93ZXIgewo+ICsJYm9vbCBjb3JlX2Nsa3Nfb247Cj4gKwlib29s IGxpbmtfY2xrc19vbjsKPiArfTsKPiArCj4gK2ludCBkcF9wb3dlcl9pbml0KHN0cnVjdCBkcF9w b3dlciAqcG93ZXIsIGJvb2wgZmxpcCk7Cj4gK2ludCBkcF9wb3dlcl9kZWluaXQoc3RydWN0IGRw X3Bvd2VyICpwb3dlcik7Cj4gK2ludCBkcF9wb3dlcl9jbGtfZW5hYmxlKHN0cnVjdCBkcF9wb3dl ciAqcG93ZXIsIGVudW0gZHBfcG1fdHlwZSBwbV90eXBlLAo+ICsJCQkJYm9vbCBlbmFibGUpOwo+ ICtpbnQgZHBfcG93ZXJfc2V0X2xpbmtfY2xrX3BhcmVudChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2Vy KTsKPiAraW50IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50KHN0cnVjdCBkcF9wb3dlciAq cG93ZXIpOwo+ICtpbnQgZHBfcG93ZXJfY2xpZW50X2luaXQoc3RydWN0IGRwX3Bvd2VyICpwb3dl cik7Cj4gK3ZvaWQgZHBfcG93ZXJfY2xpZW50X2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2Vy KTsKPiArCj4gKy8qKgo+ICsgKiBkcF9wb3dlcl9nZXQoKSAtIGNvbmZpZ3VyZSBhbmQgZ2V0IHRo ZSBEaXNwbGF5UG9ydCBwb3dlciBtb2R1bGUgZGF0YQo+ICsgKgo+ICsgKiBAcGFyc2VyOiBpbnN0 YW5jZSBvZiBwYXJzZXIgbW9kdWxlCj4gKyAqIHJldHVybjogcG9pbnRlciB0byBhbGxvY2F0ZWQg cG93ZXIgbW9kdWxlIGRhdGEKPiArICoKPiArICogVGhpcyBBUEkgd2lsbCBjb25maWd1cmUgdGhl IERpc3BsYXlQb3J0J3MgcG93ZXIgbW9kdWxlIGFuZCBwcm92aWRlcwo+ICsgKiBtZXRob2RzIHRv IGJlIGNhbGxlZCBieSB0aGUgY2xpZW50IHRvIGNvbmZpZ3VyZSB0aGUgcG93ZXIgcmVsYXRlZAo+ ICsgKiBtb2R1ZWxlcy4KPiArICovCj4gK3N0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXJfZ2V0KHN0 cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7Cj4gKwo+ICsvKioKPiArICogZHBfcG93ZXJfcHV0KCkg LSByZWxlYXNlIHRoZSBwb3dlciByZWxhdGVkIHJlc291cmNlcwo+ICsgKgo+ICsgKiBAcG93ZXI6 IHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1vZHVsZSdzIGRhdGEKPiArICovCj4gK3ZvaWQgZHBfcG93 ZXJfcHV0KHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwo+ICsjZW5kaWYgLyogX0RQX1BPV0VSX0hf ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcmVnLmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3JlZy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5jMTAwOGU3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcmVnLmgKPiBAQCAtMCwwICsxLDQ3NSBAQAo+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAx Ny0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICov Cj4gKwo+ICsjaWZuZGVmIF9EUF9SRUdfSF8KPiArI2RlZmluZSBfRFBfUkVHX0hfCj4gKwo+ICsv KiBEUF9UWCBSZWdpc3RlcnMgKi8KPiArI2RlZmluZSBSRUdfRFBfSFdfVkVSU0lPTgkJCSgweDAw MDAwMDAwKQo+ICsKPiArI2RlZmluZSBSRUdfRFBfU1dfUkVTRVQJCQkJKDB4MDAwMDAwMTApCj4g KyNkZWZpbmUgRFBfU1dfUkVTRVQJCQkJKDB4MDAwMDAwMDEpCj4gKwo+ICsjZGVmaW5lIFJFR19E UF9QSFlfQ1RSTAkJCQkoMHgwMDAwMDAxNCkKPiArI2RlZmluZSBEUF9QSFlfQ1RSTF9TV19SRVNF VF9QTEwJCSgweDAwMDAwMDAxKQo+ICsjZGVmaW5lIERQX1BIWV9DVFJMX1NXX1JFU0VUCQkJKDB4 MDAwMDAwMDQpCj4gKwo+ICsjZGVmaW5lIFJFR19EUF9DTEtfQ1RSTAkJCQkoMHgwMDAwMDAxOCkK PiArI2RlZmluZSBSRUdfRFBfQ0xLX0FDVElWRQkJCSgweDAwMDAwMDFDKQo+ICsjZGVmaW5lIFJF R19EUF9JTlRSX1NUQVRVUwkJCSgweDAwMDAwMDIwKQo+ICsjZGVmaW5lIFJFR19EUF9JTlRSX1NU QVRVUzIJCQkoMHgwMDAwMDAyNCkKPiArI2RlZmluZSBSRUdfRFBfSU5UUl9TVEFUVVMzCQkJKDB4 MDAwMDAwMjgpCj4gKwo+ICsjZGVmaW5lIFJFR19EUF9EUF9IUERfQ1RSTAkJCSgweDAwMDAwMDAw KQo+ICsjZGVmaW5lIERQX0RQX0hQRF9DVFJMX0hQRF9FTgkJCSgweDAwMDAwMDAxKQo+ICsKPiAr I2RlZmluZSBSRUdfRFBfRFBfSFBEX0lOVF9TVEFUVVMJCSgweDAwMDAwMDA0KQo+ICsKPiArI2Rl ZmluZSBSRUdfRFBfRFBfSFBEX0lOVF9BQ0sJCQkoMHgwMDAwMDAwOCkKPiArI2RlZmluZSBEUF9E UF9IUERfUExVR19JTlRfQUNLCQkJKDB4MDAwMDAwMDEpCj4gKyNkZWZpbmUgRFBfRFBfSVJRX0hQ RF9JTlRfQUNLCQkJKDB4MDAwMDAwMDIpCj4gKyNkZWZpbmUgRFBfRFBfSFBEX1JFUExVR19JTlRf QUNLCQkoMHgwMDAwMDAwNCkKPiArI2RlZmluZSBEUF9EUF9IUERfVU5QTFVHX0lOVF9BQ0sJCSgw eDAwMDAwMDA4KQo+ICsKPiArI2RlZmluZSBSRUdfRFBfRFBfSFBEX0lOVF9NQVNLCQkJKDB4MDAw MDAwMEMpCj4gKyNkZWZpbmUgRFBfRFBfSFBEX1BMVUdfSU5UX01BU0sJCQkoMHgwMDAwMDAwMSkK PiArI2RlZmluZSBEUF9EUF9JUlFfSFBEX0lOVF9NQVNLCQkJKDB4MDAwMDAwMDIpCj4gKyNkZWZp bmUgRFBfRFBfSFBEX1JFUExVR19JTlRfTUFTSwkJKDB4MDAwMDAwMDQpCj4gKyNkZWZpbmUgRFBf RFBfSFBEX1VOUExVR19JTlRfTUFTSwkJKDB4MDAwMDAwMDgpCj4gKwo+ICsjZGVmaW5lIFJFR19E UF9EUF9IUERfUkVGVElNRVIJCQkoMHgwMDAwMDAxOCkKPiArI2RlZmluZSBSRUdfRFBfRFBfSFBE X0VWRU5UX1RJTUVfMAkJKDB4MDAwMDAwMUMpCj4gKyNkZWZpbmUgUkVHX0RQX0RQX0hQRF9FVkVO VF9USU1FXzEJCSgweDAwMDAwMDIwKQo+ICsKPiArI2RlZmluZSBSRUdfRFBfQVVYX0NUUkwJCQkJ KDB4MDAwMDAwMzApCj4gKyNkZWZpbmUgRFBfQVVYX0NUUkxfRU5BQkxFCQkJKDB4MDAwMDAwMDEp Cj4gKyNkZWZpbmUgRFBfQVVYX0NUUkxfUkVTRVQJCQkoMHgwMDAwMDAwMikKPiArCj4gKyNkZWZp bmUgUkVHX0RQX0FVWF9EQVRBCQkJCSgweDAwMDAwMDM0KQo+ICsKPiArI2RlZmluZSBSRUdfRFBf QVVYX1RSQU5TX0NUUkwJCQkoMHgwMDAwMDAzOCkKPiArI2RlZmluZSBEUF9BVVhfVFJBTlNfQ1RS TF9JMkMJCQkoMHgwMDAwMDEwMCkKPiArI2RlZmluZSBEUF9BVVhfVFJBTlNfQ1RSTF9HTwkJCSgw eDAwMDAwMjAwKQo+ICsKPiArI2RlZmluZSBSRUdfRFBfVElNRU9VVF9DT1VOVAkJCSgweDAwMDAw MDNDKQo+ICsjZGVmaW5lIFJFR19EUF9BVVhfTElNSVRTCQkJKDB4MDAwMDAwNDApCj4gKyNkZWZp bmUgUkVHX0RQX0FVWF9TVEFUVVMJCQkoMHgwMDAwMDA0NCkKPiArCj4gKyNkZWZpbmUgRFBfRFBD RF9DUF9JUlEJCQkJKDB4MjAxKQo+ICsjZGVmaW5lIERQX0RQQ0RfUlhTVEFUVVMJCQkoMHg2OTQ5 MykKPiArCj4gKyNkZWZpbmUgRFBfSU5URVJSVVBUX1RSQU5TX05VTQkJCSgweDAwMDAwMEEwKQo+ ICsKPiArI2RlZmluZSBSRUdfRFBfTUFJTkxJTktfQ1RSTAkJCSgweDAwMDAwMDAwKQo+ICsjZGVm aW5lIERQX01BSU5MSU5LX0NUUkxfRU5BQkxFCQkJKDB4MDAwMDAwMDEpCj4gKyNkZWZpbmUgRFBf TUFJTkxJTktfQ1RSTF9SRVNFVAkJCSgweDAwMDAwMDAyKQo+ICsjZGVmaW5lIERQX01BSU5MSU5L X0ZCX0JPVU5EQVJZX1NFTAkJKDB4MDIwMDAwMDApCj4gKwo+ICsjZGVmaW5lIFJFR19EUF9TVEFU RV9DVFJMCQkJKDB4MDAwMDAwMDQpCj4gKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTF9MSU5LX1RSQUlO SU5HX1BBVFRFUk4xCSgweDAwMDAwMDAxKQo+ICsjZGVmaW5lIERQX1NUQVRFX0NUUkxfTElOS19U UkFJTklOR19QQVRURVJOMgkoMHgwMDAwMDAwMikKPiArI2RlZmluZSBEUF9TVEFURV9DVFJMX0xJ TktfVFJBSU5JTkdfUEFUVEVSTjMJKDB4MDAwMDAwMDQpCj4gKyNkZWZpbmUgRFBfU1RBVEVfQ1RS TF9MSU5LX1RSQUlOSU5HX1BBVFRFUk40CSgweDAwMDAwMDA4KQo+ICsjZGVmaW5lIERQX1NUQVRF X0NUUkxfTElOS19TWU1CT0xfRVJSX01FQVNVUkUJKDB4MDAwMDAwMTApCj4gKyNkZWZpbmUgRFBf U1RBVEVfQ1RSTF9MSU5LX1BSQlM3CQkoMHgwMDAwMDAyMCkKPiArI2RlZmluZSBEUF9TVEFURV9D VFJMX0xJTktfVEVTVF9DVVNUT01fUEFUVEVSTgkoMHgwMDAwMDA0MCkKPiArI2RlZmluZSBEUF9T VEFURV9DVFJMX1NFTkRfVklERU8JCSgweDAwMDAwMDgwKQo+ICsjZGVmaW5lIERQX1NUQVRFX0NU UkxfUFVTSF9JRExFIAkJKDB4MDAwMDAxMDApCj4gKwo+ICsjZGVmaW5lIFJFR19EUF9DT05GSUdV UkFUSU9OX0NUUkwJCSgweDAwMDAwMDA4KQo+ICsjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05fQ1RS TF9TWU5DX0FTWU5DX0NMSwkoMHgwMDAwMDAwMSkKPiArI2RlZmluZSBEUF9DT05GSUdVUkFUSU9O X0NUUkxfU1RBVElDX0RZTkFNSUNfQ04gKDB4MDAwMDAwMDIpCj4gKyNkZWZpbmUgRFBfQ09ORklH VVJBVElPTl9DVFJMX1BfSU5URVJMQUNFRAkoMHgwMDAwMDAwNCkKPiArI2RlZmluZSBEUF9DT05G SUdVUkFUSU9OX0NUUkxfSU5URVJMQUNFRF9CVEYJKDB4MDAwMDAwMDgpCj4gKyNkZWZpbmUgRFBf Q09ORklHVVJBVElPTl9DVFJMX05VTV9PRl9MQU5FUwkoMHgwMDAwMDAxMCkKPiArI2RlZmluZSBE UF9DT05GSUdVUkFUSU9OX0NUUkxfRU5IQU5DRURfRlJBTUlORwkoMHgwMDAwMDA0MCkKPiArI2Rl ZmluZSBEUF9DT05GSUdVUkFUSU9OX0NUUkxfU0VORF9WU0MJCSgweDAwMDAwMDgwKQo+ICsjZGVm aW5lIERQX0NPTkZJR1VSQVRJT05fQ1RSTF9CUEMJCSgweDAwMDAwMTAwKQo+ICsjZGVmaW5lIERQ X0NPTkZJR1VSQVRJT05fQ1RSTF9BU1NSCQkoMHgwMDAwMDQwMCkKPiArI2RlZmluZSBEUF9DT05G SUdVUkFUSU9OX0NUUkxfUkdCX1lVVgkJKDB4MDAwMDA4MDApCj4gKyNkZWZpbmUgRFBfQ09ORklH VVJBVElPTl9DVFJMX0xTQ0xLX0RJVgkJKDB4MDAwMDIwMDApCj4gKyNkZWZpbmUgRFBfQ09ORklH VVJBVElPTl9DVFJMX05VTV9PRl9MQU5FU19TSElGVCAgICAgICgweDA0KQo+ICsjZGVmaW5lIERQ X0NPTkZJR1VSQVRJT05fQ1RSTF9CUENfU0hJRlQgCSAgICAgICgweDA4KQo+ICsjZGVmaW5lIERQ X0NPTkZJR1VSQVRJT05fQ1RSTF9MU0NMS19ESVZfU0hJRlQJICAgICAgKDB4MEQpCj4gKwo+ICsj ZGVmaW5lIFJFR19EUF9TT0ZUV0FSRV9NVklECQkJKDB4MDAwMDAwMTApCj4gKyNkZWZpbmUgUkVH X0RQX1NPRlRXQVJFX05WSUQJCQkoMHgwMDAwMDAxOCkKPiArI2RlZmluZSBSRUdfRFBfVE9UQUxf SE9SX1ZFUgkJCSgweDAwMDAwMDFDKQo+ICsjZGVmaW5lIFJFR19EUF9TVEFSVF9IT1JfVkVSX0ZS T01fU1lOQwkJKDB4MDAwMDAwMjApCj4gKyNkZWZpbmUgUkVHX0RQX0hTWU5DX1ZTWU5DX1dJRFRI X1BPTEFSSVRZCSgweDAwMDAwMDI0KQo+ICsjZGVmaW5lIFJFR19EUF9BQ1RJVkVfSE9SX1ZFUgkJ CSgweDAwMDAwMDI4KQo+ICsKPiArI2RlZmluZSBSRUdfRFBfTUlTQzFfTUlTQzAJCQkoMHgwMDAw MDAyQykKPiArI2RlZmluZSBEUF9NSVNDMF9TWU5DSFJPTk9VU19DTEsJCSgweDAwMDAwMDAxKQo+ ICsjZGVmaW5lIERQX01JU0MwX0NPTE9SSU1FVFJZX0NGR19TSElGVAkJKDB4MDAwMDAwMDEpCj4g KyNkZWZpbmUgRFBfTUlTQzBfVEVTVF9CSVRTX0RFUFRIX1NISUZUCQkoMHgwMDAwMDAwNSkKPiAr Cj4gKyNkZWZpbmUgUkVHX0RQX1ZBTElEX0JPVU5EQVJZCQkJKDB4MDAwMDAwMzApCj4gKyNkZWZp bmUgUkVHX0RQX1ZBTElEX0JPVU5EQVJZXzIJCQkoMHgwMDAwMDAzNCkKPiArCj4gKyNkZWZpbmUg UkVHX0RQX0xPR0lDQUwyUEhZU0lDQUxfTEFORV9NQVBQSU5HCSgweDAwMDAwMDM4KQo+ICsjZGVm aW5lIExBTkUwX01BUFBJTkdfU0hJRlQJCQkoMHgwMDAwMDAwMCkKPiArI2RlZmluZSBMQU5FMV9N QVBQSU5HX1NISUZUCQkJKDB4MDAwMDAwMDIpCj4gKyNkZWZpbmUgTEFORTJfTUFQUElOR19TSElG VAkJCSgweDAwMDAwMDA0KQo+ICsjZGVmaW5lIExBTkUzX01BUFBJTkdfU0hJRlQJCQkoMHgwMDAw MDAwNikKPiArCj4gKyNkZWZpbmUgUkVHX0RQX01BSU5MSU5LX1JFQURZCQkJKDB4MDAwMDAwNDAp Cj4gKyNkZWZpbmUgRFBfTUFJTkxJTktfUkVBRFlfRk9SX1ZJREVPCQkoMHgwMDAwMDAwMSkKPiAr I2RlZmluZSBEUF9NQUlOTElOS19SRUFEWV9MSU5LX1RSQUlOSU5HX1NISUZUCSgweDAwMDAwMDAz KQo+ICsKPiArI2RlZmluZSBSRUdfRFBfTUFJTkxJTktfTEVWRUxTCQkJKDB4MDAwMDAwNDQpCj4g KyNkZWZpbmUgRFBfTUFJTkxJTktfU0FGRV9UT19FWElUX0xFVkVMXzIJKDB4MDAwMDAwMDIpCj4g Kwo+ICsKPiArI2RlZmluZSBSRUdfRFBfVFUJCQkJKDB4MDAwMDAwNEMpCj4gKwo+ICsjZGVmaW5l IFJFR19EUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VUCSgweDAwMDAwMDU0KQo+ICsj ZGVmaW5lIERQX0hCUjJfRVJNX1BBVFRFUk4JCQkoMHgwMDAxMDAwMCkKPiArCj4gKyNkZWZpbmUg UkVHX0RQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMAkoMHgwMDAwMDBDMCkKPiArI2Rl ZmluZSBSRUdfRFBfVEVTVF84MEJJVF9DVVNUT01fUEFUVEVSTl9SRUcxCSgweDAwMDAwMEM0KQo+ ICsjZGVmaW5lIFJFR19EUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzIJKDB4MDAwMDAw QzgpCj4gKwo+ICsjZGVmaW5lIE1NU1NfRFBfTUlTQzFfTUlTQzAJCQkoMHgwMDAwMDAyQykKPiAr I2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19HRU4JCSgweDAwMDAwMDgwKQo+ICsjZGVmaW5l IE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl8zMgkJKDB4MDAwMDAwODQpCj4gKyNkZWZpbmUgTU1T U19EUF9BVURJT19USU1JTkdfSEJSXzMyCQkoMHgwMDAwMDA4OCkKPiArI2RlZmluZSBNTVNTX0RQ X0FVRElPX1RJTUlOR19SQlJfNDQJCSgweDAwMDAwMDhDKQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVE SU9fVElNSU5HX0hCUl80NAkJKDB4MDAwMDAwOTApCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19U SU1JTkdfUkJSXzQ4CQkoMHgwMDAwMDA5NCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlO R19IQlJfNDgJCSgweDAwMDAwMDk4KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX1BTUl9DUkNfUkcJ CQkoMHgwMDAwMDE1NCkKPiArI2RlZmluZSBNTVNTX0RQX1BTUl9DUkNfQgkJCSgweDAwMDAwMTU4 KQo+ICsKPiArI2RlZmluZSBSRUdfRFBfQ09NUFJFU1NJT05fTU9ERV9DVFJMCQkoMHgwMDAwMDE4 MCkKPiArCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19DRkcJCQkoMHgwMDAwMDIwMCkKPiArI2Rl ZmluZSBNTVNTX0RQX0FVRElPX1NUQVRVUwkJCSgweDAwMDAwMjA0KQo+ICsjZGVmaW5lIE1NU1Nf RFBfQVVESU9fUEtUX0NUUkwJCQkoMHgwMDAwMDIwOCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElP X1BLVF9DVFJMMgkJCSgweDAwMDAwMjBDKQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fQUNSX0NU UkwJCQkoMHgwMDAwMDIxMCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NUUkxfUkVTRVQJCSgw eDAwMDAwMjE0KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX1NEUF9DRkcJCQkJKDB4MDAwMDAyMjgp Cj4gKyNkZWZpbmUgTU1TU19EUF9TRFBfQ0ZHMgkJCSgweDAwMDAwMjJDKQo+ICsjZGVmaW5lIE1N U1NfRFBfQVVESU9fVElNRVNUQU1QXzAJCSgweDAwMDAwMjMwKQo+ICsjZGVmaW5lIE1NU1NfRFBf QVVESU9fVElNRVNUQU1QXzEJCSgweDAwMDAwMjM0KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX0FV RElPX1NUUkVBTV8wCQkJKDB4MDAwMDAyNDApCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19TVFJF QU1fMQkJCSgweDAwMDAwMjQ0KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8wCQkJ KDB4MDAwMDAyNTApCj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fMQkJCSgweDAwMDAwMjU0 KQo+ICsjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzIJCQkoMHgwMDAwMDI1OCkKPiArI2RlZmlu ZSBNTVNTX0RQX0VYVEVOU0lPTl8zCQkJKDB4MDAwMDAyNUMpCj4gKyNkZWZpbmUgTU1TU19EUF9F WFRFTlNJT05fNAkJCSgweDAwMDAwMjYwKQo+ICsjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzUJ CQkoMHgwMDAwMDI2NCkKPiArI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl82CQkJKDB4MDAwMDAy NjgpCj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNwkJCSgweDAwMDAwMjZDKQo+ICsjZGVm aW5lIE1NU1NfRFBfRVhURU5TSU9OXzgJCQkoMHgwMDAwMDI3MCkKPiArI2RlZmluZSBNTVNTX0RQ X0VYVEVOU0lPTl85CQkJKDB4MDAwMDAyNzQpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZ TUFOQUdFTUVOVF8wCQkoMHgwMDAwMDI3OCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlN QU5BR0VNRU5UXzEJCSgweDAwMDAwMjdDKQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1B TkFHRU1FTlRfMgkJKDB4MDAwMDAyODApCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19DT1BZTUFO QUdFTUVOVF8zCQkoMHgwMDAwMDI4NCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5B R0VNRU5UXzQJCSgweDAwMDAwMjg4KQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fQ09QWU1BTkFH RU1FTlRfNQkJKDB4MDAwMDAyOEMpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzAJCQko MHgwMDAwMDI5MCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfMQkJCSgweDAwMDAwMjk0 KQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18yCQkJKDB4MDAwMDAyOTgpCj4gKyNkZWZp bmUgTU1TU19EUF9BVURJT19JU1JDXzMJCQkoMHgwMDAwMDI5QykKPiArI2RlZmluZSBNTVNTX0RQ X0FVRElPX0lTUkNfNAkJCSgweDAwMDAwMkEwKQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNS Q181CQkJKDB4MDAwMDAyQTQpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMAkJ KDB4MDAwMDAyQTgpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMQkJKDB4MDAw MDAyQUMpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMgkJKDB4MDAwMDAyQjAp Cj4gKwo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMAkJCSgweDAwMDAwMzAwKQo+ICsjZGVm aW5lIE1NU1NfRFBfR0VORVJJQzBfMQkJCSgweDAwMDAwMzA0KQo+ICsjZGVmaW5lIE1NU1NfRFBf R0VORVJJQzBfMgkJCSgweDAwMDAwMzA4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMwkJ CSgweDAwMDAwMzBDKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNAkJCSgweDAwMDAwMzEw KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNQkJCSgweDAwMDAwMzE0KQo+ICsjZGVmaW5l IE1NU1NfRFBfR0VORVJJQzBfNgkJCSgweDAwMDAwMzE4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VO RVJJQzBfNwkJCSgweDAwMDAwMzFDKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfOAkJCSgw eDAwMDAwMzIwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfOQkJCSgweDAwMDAwMzI0KQo+ ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMAkJCSgweDAwMDAwMzI4KQo+ICsjZGVmaW5lIE1N U1NfRFBfR0VORVJJQzFfMQkJCSgweDAwMDAwMzJDKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJ QzFfMgkJCSgweDAwMDAwMzMwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMwkJCSgweDAw MDAwMzM0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNAkJCSgweDAwMDAwMzM4KQo+ICsj ZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNQkJCSgweDAwMDAwMzNDKQo+ICsjZGVmaW5lIE1NU1Nf RFBfR0VORVJJQzFfNgkJCSgweDAwMDAwMzQwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFf NwkJCSgweDAwMDAwMzQ0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfOAkJCSgweDAwMDAw MzQ4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfOQkJCSgweDAwMDAwMzRDKQo+ICsKPiAr I2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8wCQkJKDB4MDAwMDAyRDApCj4gKyNkZWZpbmUgTU1TU19E UF9WU0NFWFRfMQkJCSgweDAwMDAwMkQ0KQo+ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzIJCQko MHgwMDAwMDJEOCkKPiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8zCQkJKDB4MDAwMDAyREMpCj4g KyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNAkJCSgweDAwMDAwMkUwKQo+ICsjZGVmaW5lIE1NU1Nf RFBfVlNDRVhUXzUJCQkoMHgwMDAwMDJFNCkKPiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF82CQkJ KDB4MDAwMDAyRTgpCj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNwkJCSgweDAwMDAwMkVDKQo+ ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzgJCQkoMHgwMDAwMDJGMCkKPiArI2RlZmluZSBNTVNT X0RQX1ZTQ0VYVF85CQkJKDB4MDAwMDAyRjQpCj4gKwo+ICsjZGVmaW5lIE1NU1NfRFBfQklTVF9F TkFCTEUJCQkoMHgwMDAwMDAwMCkKPiArI2RlZmluZSBEUF9CSVNUX0VOQUJMRV9EUEJJU1RfRU4J CSgweDAwMDAwMDAxKQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX1RJTUlOR19FTkdJTkVfRU4JCSgw eDAwMDAwMDEwKQo+ICsjZGVmaW5lIERQX1RJTUlOR19FTkdJTkVfRU5fRU4JCQkoMHgwMDAwMDAw MSkKPiArCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX0NPTkZJRwkJCSgweDAwMDAwMDE0KQo+ICsj ZGVmaW5lIE1NU1NfRFBfSU5URl9IU1lOQ19DVEwJCQkoMHgwMDAwMDAxOCkKPiArI2RlZmluZSBN TVNTX0RQX0lOVEZfVlNZTkNfUEVSSU9EX0YwCQkoMHgwMDAwMDAxQykKPiArI2RlZmluZSBNTVNT X0RQX0lOVEZfVlNZTkNfUEVSSU9EX0YxCQkoMHgwMDAwMDAyMCkKPiArI2RlZmluZSBNTVNTX0RQ X0lOVEZfVlNZTkNfUFVMU0VfV0lEVEhfRjAJKDB4MDAwMDAwMjQpCj4gKyNkZWZpbmUgTU1TU19E UF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YxCSgweDAwMDAwMDI4KQo+ICsjZGVmaW5lIE1NU1Nf SU5URl9ESVNQTEFZX1ZfU1RBUlRfRjAJCSgweDAwMDAwMDJDKQo+ICsjZGVmaW5lIE1NU1NfSU5U Rl9ESVNQTEFZX1ZfU1RBUlRfRjEJCSgweDAwMDAwMDMwKQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5U Rl9ESVNQTEFZX1ZfRU5EX0YwCQkoMHgwMDAwMDAzNCkKPiArI2RlZmluZSBNTVNTX0RQX0lOVEZf RElTUExBWV9WX0VORF9GMQkJKDB4MDAwMDAwMzgpCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX0FD VElWRV9WX1NUQVJUX0YwCQkoMHgwMDAwMDAzQykKPiArI2RlZmluZSBNTVNTX0RQX0lOVEZfQUNU SVZFX1ZfU1RBUlRfRjEJCSgweDAwMDAwMDQwKQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJ VkVfVl9FTkRfRjAJCSgweDAwMDAwMDQ0KQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVf Vl9FTkRfRjEJCSgweDAwMDAwMDQ4KQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hD VEwJCSgweDAwMDAwMDRDKQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVfSENUTAkJKDB4 MDAwMDAwNTApCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX1BPTEFSSVRZX0NUTAkJKDB4MDAwMDAw NTgpCj4gKwo+ICsjZGVmaW5lIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTAkJKDB4MDAwMDAwNjAp Cj4gKyNkZWZpbmUgRFBfVFBHX0NIRUNLRVJFRF9SRUNUX1BBVFRFUk4JCSgweDAwMDAwMTAwKQo+ ICsKPiArI2RlZmluZSBNTVNTX0RQX1RQR19WSURFT19DT05GSUcJCSgweDAwMDAwMDY0KQo+ICsj ZGVmaW5lIERQX1RQR19WSURFT19DT05GSUdfQlBQXzhCSVQJCSgweDAwMDAwMDAxKQo+ICsjZGVm aW5lIERQX1RQR19WSURFT19DT05GSUdfUkdCCQkJKDB4MDAwMDAwMDQpCj4gKwo+ICsjZGVmaW5l IE1NU1NfRFBfQVNZTkNfRklGT19DT05GSUcJCSgweDAwMDAwMDg4KQo+ICsKPiArLypEUCBQSFkg UmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ICsjZGVmaW5lIFJFR19EUF9QSFlfUkVWSVNJT05fSUQwICAg ICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKPiArI2RlZmluZSBSRUdfRFBfUEhZX1JFVklTSU9O X0lEMSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9S RVZJU0lPTl9JRDIgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4KQo+ICsjZGVmaW5lIFJFR19E UF9QSFlfUkVWSVNJT05fSUQzICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwQykKPiArCj4gKyNk ZWZpbmUgUkVHX0RQX1BIWV9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDEw KQo+ICsKPiArI2RlZmluZSBSRUdfRFBfUEhZX1BEX0NUTCAgICAgICAgICAgICAgICAgICAgICAg KDB4MDAwMDAwMTgpCj4gKyNkZWZpbmUgRFBfUEhZX1BEX0NUTF9QV1JETiAgICAgICAgICAgICAg ICAgICAgICgweDAwMDAwMDAxKQo+ICsjZGVmaW5lIERQX1BIWV9QRF9DVExfUFNSX1BXUkROCQkJ KDB4MDAwMDAwMDIpCj4gKyNkZWZpbmUgRFBfUEhZX1BEX0NUTF9BVVhfUFdSRE4JCQkoMHgwMDAw MDAwNCkKPiArI2RlZmluZSBEUF9QSFlfUERfQ1RMX0xBTkVfMF8xX1BXUkROCQkoMHgwMDAwMDAw OCkKPiArI2RlZmluZSBEUF9QSFlfUERfQ1RMX0xBTkVfMl8zX1BXUkROCQkoMHgwMDAwMDAxMCkK PiArI2RlZmluZSBEUF9QSFlfUERfQ1RMX1BMTF9QV1JETgkJCSgweDAwMDAwMDIwKQo+ICsjZGVm aW5lIERQX1BIWV9QRF9DVExfRFBfQ0xBTVBfRU4JCSgweDAwMDAwMDQwKQo+ICsKPiArI2RlZmlu ZSBSRUdfRFBfUEhZX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMUMpCj4g Kwo+ICsjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzAgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDAyMCkKPiArI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9DRkcxICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwMjQpCj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfQ0ZHMiAgICAgICAgICAg ICAgICAgICAgICgweDAwMDAwMDI4KQo+ICsjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzMgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyQykKPiArI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9D Rkc0ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMzApCj4gKyNkZWZpbmUgUkVHX0RQX1BI WV9BVVhfQ0ZHNSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDM0KQo+ICsjZGVmaW5lIFJF R19EUF9QSFlfQVVYX0NGRzYgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzOCkKPiArI2Rl ZmluZSBSRUdfRFBfUEhZX0FVWF9DRkc3ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwM0Mp Cj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfQ0ZHOCAgICAgICAgICAgICAgICAgICAgICgweDAw MDAwMDQwKQo+ICsjZGVmaW5lIFJFR19EUF9QSFlfQVVYX0NGRzkgICAgICAgICAgICAgICAgICAg ICAoMHgwMDAwMDA0NCkKPiArCj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfSU5URVJSVVBUX01B U0sgICAgICAgICAgICgweDAwMDAwMDQ4KQo+ICsjZGVmaW5lIFBIWV9BVVhfU1RPUF9FUlJfTUFT SyAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKPiArI2RlZmluZSBQSFlfQVVYX0RFQ19F UlJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCj4gKyNkZWZpbmUgUEhZX0FV WF9TWU5DX0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQo+ICsjZGVmaW5l IFBIWV9BVVhfQUxJR05fRVJSX01BU0sgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKPiAr I2RlZmluZSBQSFlfQVVYX1JFUV9FUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAw MTApCj4gKwo+ICsKPiArI2RlZmluZSBSRUdfRFBfUEhZX0FVWF9JTlRFUlJVUFRfQ0xFQVIgICAg ICAgICAgKDB4MDAwMDAwNEMpCj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9BVVhfQklTVF9DRkcJCQko MHgwMDAwMDA1MCkKPiArCj4gKyNkZWZpbmUgUkVHX0RQX1BIWV9WQ09fRElWCQkJMHgwMDY0Cj4g KyNkZWZpbmUgUkVHX0RQX1BIWV9UWDBfVFgxX0xBTkVfQ1RMCQkweDAwNkMKPiArI2RlZmluZSBS RUdfRFBfUEhZX1RYMl9UWDNfTEFORV9DVEwJCTB4MDA4OAo+ICsKPiArI2RlZmluZSBSRUdfRFBf UEhZX1NQQVJFMAkJCSgweDAwQUMpCj4gKyNkZWZpbmUgRFBfUEhZX1NQQVJFMF9NQVNLCQkJKDB4 MDAwRikKPiArI2RlZmluZSBEUF9QSFlfU1BBUkUwX09SSUVOVEFUSU9OX0lORk9fU0hJRlQJKDB4 MDAwNCk7Cj4gKwo+ICsjZGVmaW5lIFJFR19EUF9QSFlfU1RBVFVTCQkJKDB4MDBDMCkKPiArCj4g Ky8qIFR4IHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIFRYbl9CSVNUX01PREVfTEFORU5PCQkJMHgw MDAwCj4gKyNkZWZpbmUgVFhuX0NMS0JVRl9FTkFCTEUJCQkweDAwMDgKPiArI2RlZmluZSBUWG5f VFhfRU1QX1BPU1QxX0xWTAkJCTB4MDAwQwo+ICsKPiArI2RlZmluZSBUWG5fVFhfRFJWX0xWTAkJ CQkweDAwMUMKPiArCj4gKyNkZWZpbmUgVFhuX1JFU0VUX1RTWU5DX0VOCQkJMHgwMDI0Cj4gKyNk ZWZpbmUgVFhuX1BSRV9TVEFMTF9MRE9fQk9PU1RfRU4JCTB4MDAyOAo+ICsjZGVmaW5lIFRYbl9U WF9CQU5ECQkJCTB4MDAyQwo+ICsjZGVmaW5lIFRYbl9TTEVXX0NOVEwJCQkJMHgwMDMwCj4gKyNk ZWZpbmUgVFhuX0lOVEVSRkFDRV9TRUxFQ1QJCQkweDAwMzQKPiArCj4gKyNkZWZpbmUgVFhuX1JF U19DT0RFX0xBTkVfVFgJCQkweDAwM0MKPiArI2RlZmluZSBUWG5fUkVTX0NPREVfTEFORV9SWAkJ CTB4MDA0MAo+ICsjZGVmaW5lIFRYbl9SRVNfQ09ERV9MQU5FX09GRlNFVF9UWAkJMHgwMDQ0Cj4g KyNkZWZpbmUgVFhuX1JFU19DT0RFX0xBTkVfT0ZGU0VUX1JYCQkweDAwNDgKPiArCj4gKyNkZWZp bmUgVFhuX0RFQlVHX0JVU19TRUwJCQkweDAwNTgKPiArI2RlZmluZSBUWG5fVFJBTlNDRUlWRVJf QklBU19FTgkJCTB4MDA1Qwo+ICsjZGVmaW5lIFRYbl9ISUdIWl9EUlZSX0VOCQkJMHgwMDYwCj4g KyNkZWZpbmUgVFhuX1RYX1BPTF9JTlYJCQkJMHgwMDY0Cj4gKyNkZWZpbmUgVFhuX1BBUlJBVEVf UkVDX0RFVEVDVF9JRExFX0VOCQkweDAwNjgKPiArCj4gKyNkZWZpbmUgVFhuX0xBTkVfTU9ERV8x CQkJCTB4MDA4Qwo+ICsKPiArI2RlZmluZSBUWG5fVFJBTl9EUlZSX0VNUF9FTgkJCTB4MDBDMAo+ ICsjZGVmaW5lIFRYbl9UWF9JTlRFUkZBQ0VfTU9ERQkJCTB4MDBDNAo+ICsKPiArI2RlZmluZSBU WG5fVk1PREVfQ1RSTDEJCQkJMHgwMEYwCj4gKwo+ICsvKiBQTEwgcmVnaXN0ZXIgb2Zmc2V0ICov Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQVRCX1NFTDEJCQkweDAwMDAKPiArI2RlZmluZSBRU0VS REVTX0NPTV9BVEJfU0VMMgkJCTB4MDAwNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0ZSRVFfVVBE QVRFCQkJMHgwMDA4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQkdfVElNRVIJCQkweDAwMEMKPiAr I2RlZmluZSBRU0VSREVTX0NPTV9TU0NfRU5fQ0VOVEVSCQkweDAwMTAKPiArI2RlZmluZSBRU0VS REVTX0NPTV9TU0NfQURKX1BFUjEJCTB4MDAxNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19B REpfUEVSMgkJMHgwMDE4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX1BFUjEJCQkweDAwMUMK PiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0NfUEVSMgkJCTB4MDAyMAo+ICsjZGVmaW5lIFFTRVJE RVNfQ09NX1NTQ19TVEVQX1NJWkUxCQkweDAwMjQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0Nf U1RFUF9TSVpFMgkJMHgwMDI4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUE9TVF9ESVYJCQkweDAw MkMKPiArI2RlZmluZSBRU0VSREVTX0NPTV9QT1NUX0RJVl9NVVgJCTB4MDAzMAo+ICsKPiArI2Rl ZmluZSBRU0VSREVTX0NPTV9CSUFTX0VOX0NMS0JVRkxSX0VOCQkweDAwMzQKPiArI2RlZmluZSBR U0VSREVTX0NPTV9CSUFTX0VOCQkJMHgwMDAxCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQklBU19F Tl9NVVgJCQkweDAwMDIKPiArI2RlZmluZSBRU0VSREVTX0NPTV9DTEtCVUZfUl9FTgkJCTB4MDAw NAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NMS0JVRl9MX0VOCQkJMHgwMDA4Cj4gKyNkZWZpbmUg UVNFUkRFU19DT01fRU5fU1lTQ0xLX1RYX1NFTAkJMHgwMDEwCj4gKyNkZWZpbmUgUVNFUkRFU19D T01fQ0xLQlVGX1JYX0RSSVZFX0wJCTB4MDAyMAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NMS0JV Rl9SWF9EUklWRV9SCQkweDAwNDAKPiArCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ0xLX0VOQUJM RTEJCQkweDAwMzgKPiArI2RlZmluZSBRU0VSREVTX0NPTV9TWVNfQ0xLX0NUUkwJCTB4MDAzQwo+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NZU0NMS19CVUZfRU5BQkxFCQkweDAwNDAKPiArI2RlZmlu ZSBRU0VSREVTX0NPTV9QTExfRU4JCQkweDAwNDQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9QTExf SVZDTwkJCTB4MDA0OAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9JRVRSSU0JCQkweDAwNEMK PiArI2RlZmluZSBRU0VSREVTX0NPTV9DTU5fSVBUUklNCQkJMHgwMDUwCj4gKwo+ICsjZGVmaW5l IFFTRVJERVNfQ09NX0NQX0NUUkxfTU9ERTAJCTB4MDA2MAo+ICsjZGVmaW5lIFFTRVJERVNfQ09N X0NQX0NUUkxfTU9ERTEJCTB4MDA2NAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9N T0RFMAkJMHgwMDY4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX1JDVFJMX01PREUxCQkweDAw NkMKPiArI2RlZmluZSBRU0VSREVTX0NPTV9QTExfQ0NUUkxfTU9ERTAJCTB4MDA3MAo+ICsjZGVm aW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMQkJMHgwMDc0Cj4gKyNkZWZpbmUgUVNFUkRF U19DT01fUExMX0NOVFJMCQkJMHgwMDc4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQklBU19FTl9D VFJMX0JZX1BTTQkJMHgwMDdDCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fU1lTQ0xLX0VOX1NFTAkJ MHgwMDgwCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01MX1NZU0NMS19TRUwJCTB4MDA4NAo+ICsj ZGVmaW5lIFFTRVJERVNfQ09NX1JFU0VUU01fQ05UUkwJCTB4MDA4OAo+ICsjZGVmaW5lIFFTRVJE RVNfQ09NX1JFU0VUU01fQ05UUkwyCQkweDAwOEMKPiArI2RlZmluZSBRU0VSREVTX0NPTV9MT0NL X0NNUF9FTgkJCTB4MDA5MAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0xPQ0tfQ01QX0NGRwkJMHgw MDk0Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUwCQkweDAwOTgKPiArI2Rl ZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUDJfTU9ERTAJCTB4MDA5Qwo+ICsjZGVmaW5lIFFTRVJE RVNfQ09NX0xPQ0tfQ01QM19NT0RFMAkJMHgwMEEwCj4gKwo+ICsjZGVmaW5lIFFTRVJERVNfQ09N X0RFQ19TVEFSVF9NT0RFMAkJMHgwMEIwCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fREVDX1NUQVJU X01PREUxCQkweDAwQjQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9E RTAJMHgwMEI4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUwCTB4 MDBCQwo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMAkweDAwQzAK PiArI2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTEJMHgwMEM0Cj4gKyNk ZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUxCTB4MDBDOAo+ICsjZGVmaW5l IFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMQkweDAwQ0MKPiArI2RlZmluZSBRU0VS REVTX0NPTV9JTlRFR0xPT1BfSU5JVFZBTAkJMHgwMEQwCj4gKyNkZWZpbmUgUVNFUkRFU19DT01f SU5URUdMT09QX0VOCQkweDAwRDQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJ TjBfTU9ERTAJMHgwMEQ4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4xX01P REUwCTB4MDBEQwo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMF9NT0RFMQkw eDAwRTAKPiArI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjFfTU9ERTEJMHgwMEU0 Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fVkNPQ0FMX0RFQURNQU5fQ1RSTAkJMHgwMEU4Cj4gKyNk ZWZpbmUgUVNFUkRFU19DT01fVkNPX1RVTkVfQ1RSTAkJMHgwMEVDCj4gKyNkZWZpbmUgUVNFUkRF U19DT01fVkNPX1RVTkVfTUFQCQkweDAwRjAKPiArCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01O X1NUQVRVUwkJCTB4MDEyNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1JFU0VUX1NNX1NUQVRVUwkJ MHgwMTI4Cj4gKwo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NMS19TRUwJCQkweDAxMzgKPiArI2Rl ZmluZSBRU0VSREVTX0NPTV9IU0NMS19TRUwJCQkweDAxM0MKPiArCj4gKyNkZWZpbmUgUVNFUkRF U19DT01fQ09SRUNMS19ESVZfTU9ERTAJCTB4MDE0OAo+ICsKPiArI2RlZmluZSBRU0VSREVTX0NP TV9TV19SRVNFVAkJCTB4MDE1MAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NPUkVfQ0xLX0VOCQkJ MHgwMTU0Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ19SRUFEWV9TVEFUVVMJCTB4MDE1OAo+ICsj ZGVmaW5lIFFTRVJERVNfQ09NX0NNTl9DT05GSUcJCQkweDAxNUMKPiArCj4gKyNkZWZpbmUgUVNF UkRFU19DT01fU1ZTX01PREVfQ0xLX1NFTAkJMHgwMTY0Cj4gKwo+ICsvKiBEUCBNTVNTX0NDIHJl Z2lzdGVycyAqLwo+ICsjZGVmaW5lIE1NU1NfRFBfTElOS19DTURfUkNHUgkJCSgweDAxMzgpCj4g KyNkZWZpbmUgTU1TU19EUF9MSU5LX0NGR19SQ0dSCQkJKDB4MDEzQykKPiArI2RlZmluZSBNTVNT X0RQX1BJWEVMX00JCQkJKDB4MDE3NCkKPiArI2RlZmluZSBNTVNTX0RQX1BJWEVMX04JCQkJKDB4 MDE3OCkKPiArCj4gKy8qIERQIEhEQ1AgMS4zIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIERQX0hE Q1BfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEwKQo+ICsjZGVm aW5lIERQX0hEQ1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEE0 KQo+ICsjZGVmaW5lIERQX0hEQ1BfU1dfVVBQRVJfQUtTViAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDk4KQo+ICsjZGVmaW5lIERQX0hEQ1BfU1dfTE9XRVJfQUtTViAgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDlDKQo+ICsjZGVmaW5lIERQX0hEQ1BfRU5UUk9QWV9DVFJMMCAgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MzUwKQo+ICsjZGVmaW5lIERQX0hEQ1BfRU5UUk9QWV9D VFJMMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzVDKQo+ICsjZGVmaW5lIERQX0hEQ1Bf U0hBX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEM4KQo+ICsjZGVmaW5l IERQX0hEQ1BfUkNWUE9SVF9EQVRBMl8wICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEIwKQo+ ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBMyAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MEE0KQo+ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBNCAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MEE4KQo+ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBNSAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MEMwKQo+ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRB NiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEM0KQo+ICsKPiArI2RlZmluZSBIRENQX1NF Q19EUF9UWl9IVl9ITE9TX0hEQ1BfU0hBX0NUUkwgICAgICAgICAgICgweDAyNCkKPiArI2RlZmlu ZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfU0hBX0RBVEEgICAgICAgICAgICgweDAyOCkK PiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMCAgICAg ICgweDAwNCkKPiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9E QVRBMSAgICAgICgweDAwOCkKPiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1Bf UkNWUE9SVF9EQVRBNyAgICAgICgweDAwQykKPiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9I TE9TX0hEQ1BfUkNWUE9SVF9EQVRBOCAgICAgICgweDAxMCkKPiArI2RlZmluZSBIRENQX1NFQ19E UF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBOSAgICAgICgweDAxNCkKPiArI2RlZmluZSBI RENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTAgICAgICgweDAxOCkKPiAr I2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTEgICAgICgw eDAxQykKPiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRB MTIgICAgICgweDAyMCkKPiArCj4gKy8qIFVTQjMgRFAgQ09NIHJlZ2lzdGVycyAqLwo+ICsjZGVm aW5lIFJFR19VU0IzX0RQX0NPTV9SRVNFVF9PVlJEX0NUUkwJCQkoMHgxQykKPiArI2RlZmluZSBV U0IzX0RQX0NPTV9PVlJEX0NUUkxfU1dfRFBQSFlfUkVTRVQJCSgweDAxKQo+ICsjZGVmaW5lIFVT QjNfRFBfQ09NX09WUkRfQ1RSTF9TV19EUFBIWV9SRVNFVF9NVVgJKDB4MDIpCj4gKyNkZWZpbmUg VVNCM19EUF9DT01fT1ZSRF9DVFJMX1NXX1VTQjNQSFlfUkVTRVQJCSgweDA0KQo+ICsjZGVmaW5l IFVTQjNfRFBfQ09NX09WUkRfQ1RSTF9TV19VU0IzUEhZX1JFU0VUX01VWAkoMHgwOCkKPiArCj4g KyNkZWZpbmUgUkVHX1VTQjNfRFBfQ09NX1BIWV9NT0RFX0NUUkwJCQkoMHgwMCkKPiArI2RlZmlu ZSBVU0IzX0RQX0NPTV9QSFlfTU9ERV9EUAkJCQkoMHgwMikKPiArCj4gKyNkZWZpbmUgUkVHX1VT QjNfRFBfQ09NX1NXX1JFU0VUCQkJKDB4MDQpCj4gKyNkZWZpbmUgVVNCM19EUF9DT01fU1dfUkVT RVRfU0VUCQkJKDB4MDEpCj4gKwo+ICsjZGVmaW5lIFJFR19VU0IzX0RQX0NPTV9UWVBFQ19DVFJM CQkJKDB4MTApCj4gKyNkZWZpbmUgVVNCM19EUF9DT01fVFlQRUNfQ1RSTF9QT1JUU0VMCQkJKDB4 MDEpCj4gKyNkZWZpbmUgVVNCM19EUF9DT01fVFlQRUNfQ1RSTF9QT1JUU0VMX01VWAkJKDB4MDIp Cj4gKwo+ICsjZGVmaW5lIFJFR19VU0IzX0RQX0NPTV9TV0lfQ1RSTAkJCSgweDBjKQo+ICsKPiAr I2RlZmluZSBSRUdfVVNCM19EUF9DT01fUE9XRVJfRE9XTl9DVFJMCQkJKDB4MDgpCj4gKyNkZWZp bmUgVVNCM19EUF9DT01fUE9XRVJfRE9XTl9DVFJMX1NXX1BXUkROCQkoMHgwMSkKPiArCj4gKwo+ ICsKPiArI2VuZGlmIC8qIF9EUF9SRUdfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+IGluZGV4 IDYyNjViZTguLjUyNzcxNzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f ZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+IEBAIC0xNDM0LDYg KzE0MzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtc21fZHJtX3JlZ2lzdGVyKHZvaWQpCj4gIAlt c21fZHNpX3JlZ2lzdGVyKCk7Cj4gIAltc21fZWRwX3JlZ2lzdGVyKCk7Cj4gIAltc21faGRtaV9y ZWdpc3RlcigpOwo+ICsJbXNtX2RwX3JlZ2lzdGVyKCk7Cj4gIAlhZHJlbm9fcmVnaXN0ZXIoKTsK PiAgCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zbV9wbGF0Zm9ybV9kcml2ZXIp Owo+ICB9Cj4gQEAgLTE0NDIsNiArMTQ0Myw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBtc21fZHJt X3VucmVnaXN0ZXIodm9pZCkKPiAgewo+ICAJREJHKCJmaW5pIik7Cj4gIAlwbGF0Zm9ybV9kcml2 ZXJfdW5yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7Cj4gKwltc21fZHBfdW5yZWdpc3Rl cigpOwo+ICAJbXNtX2hkbWlfdW5yZWdpc3RlcigpOwo+ICAJYWRyZW5vX3VucmVnaXN0ZXIoKTsK PiAgCW1zbV9lZHBfdW5yZWdpc3RlcigpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gaW5kZXggOWNk NmE5Ni4uM2NkYmZjOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gQEAgLTE3Niw2ICsxNzYs NyBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKPiAgCS8qIERTSSBpcyBzaGFyZWQgYnkgbWRw NCBhbmQgbWRwNSAqLwo+ICAJc3RydWN0IG1zbV9kc2kgKmRzaVsyXTsKPiAgCj4gKwlzdHJ1Y3Qg bXNtX2RwICpkcDsKPiAgCS8qIHdoZW4gd2UgaGF2ZSBtb3JlIHRoYW4gb25lICdtc21fZ3B1JyB0 aGVzZSBuZWVkIHRvIGJlIGFuIGFycmF5OiAqLwo+ICAJc3RydWN0IG1zbV9ncHUgKmdwdTsKPiAg CXN0cnVjdCBtc21fZmlsZV9wcml2YXRlICpsYXN0Y3R4Owo+IEBAIC0zODQsNiArMzg1LDQ2IEBA IHN0YXRpYyBpbmxpbmUgaW50IG1zbV9kc2lfbW9kZXNldF9pbml0KHN0cnVjdCBtc21fZHNpICpt c21fZHNpLAo+ICB9Cj4gICNlbmRpZgo+ICAKPiArI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQCj4g K2ludCBfX2luaXQgbXNtX2RwX3JlZ2lzdGVyKHZvaWQpOwo+ICt2b2lkIF9fZXhpdCBtc21fZHBf dW5yZWdpc3Rlcih2b2lkKTsKPiAraW50IG1zbV9kcF9tb2Rlc2V0X2luaXQoc3RydWN0IG1zbV9k cCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJIHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2Rlcik7Cj4gK2ludCBtc21fZHBfZGlzcGxheV9lbmFibGUoc3RydWN0IG1z bV9kcCAqZHAsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4gK2ludCBtc21fZHBfZGlz cGxheV9kaXNhYmxlKHN0cnVjdCBtc21fZHAgKmRwLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpOwo+ICt2b2lkIG1zbV9kcF9kaXNwbGF5X21vZGVfc2V0KHN0cnVjdCBtc21fZHAgKmRwLCBz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKPiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsK PiArCj4gKyNlbHNlCj4gK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIo dm9pZCkKPiArewo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArc3RhdGljIGlubGluZSB2b2lk IF9fZXhpdCBtc21fZHBfdW5yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gK30KPiArc3RhdGljIGlubGlu ZSBpbnQgbXNtX2RwX21vZGVzZXRfaW5pdChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAo+ICsJ CQkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgICAgICAgc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICtzdGF0 aWMgaW5saW5lIGludCBtc21fZHBfZGlzcGxheV9lbmFibGUoc3RydWN0IG1zbV9kcCAqZHAsIHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30K PiArc3RhdGljIGlubGluZSBpbnQgbXNtX2RwX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3QgbXNtX2Rw ICpkcCwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlyZXR1cm4gLUVJTlZB TDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXNtX2RwX2Rpc3BsYXlfbW9kZV9zZXQoc3Ry dWN0IG1zbV9kcCAqZHAsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCj4gK3sKPiArfQo+ICsjZW5kaWYKPiArCj4gIHZvaWQgX19pbml0IG1z bV9tZHBfcmVnaXN0ZXIodm9pZCk7Cj4gIHZvaWQgX19leGl0IG1zbV9tZHBfdW5yZWdpc3Rlcih2 b2lkKTsKPiAgdm9pZCBfX2luaXQgbXNtX2RwdV9yZWdpc3Rlcih2b2lkKTsKPiAtLSAKPiBUaGUg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUg QXVyb3JhIEZvcnVtLAo+IGEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QK PiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEZy ZWVkcmVubyBtYWlsaW5nIGxpc3QKPiBGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K Ci0tIApTZWFuIFBhdWwsIFNvZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8g bWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K