From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandre Courbot Subject: [PATCH v2 08/14] secboot: reorganize into more files Date: Thu, 27 Oct 2016 13:37:02 +0900 Message-ID: <20161027043708.22538-9-acourbot@nvidia.com> References: <20161027043708.22538-1-acourbot@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161027043708.22538-1-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Ben Skeggs Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org U3BsaXQgdGhlIGFjdCBvZiBidWlsZGluZyB0aGUgQUNSIGJsb2IgZnJvbSBmaXJtd2FyZSBmaWxl cyBmcm9tIHRoZSByZXN0Cm9mIHRoZSAoY2hpcC1kZXBlbmRlbnQpIHNlY3VyZSBib290IGxvZ2lj LiBBQ1IgbG9naWMgaXMgbW92ZWQgaW50bwphY3Jfcnh4eC5jIGZpbGVzLCB3aGVyZSByeHh4IGNv cnJlc3BvbmRzIHRvIHRoZSBjb21wYXRpYmxlIHJlbGVhc2Ugb2YKdGhlIE5WSURJQSBkcml2ZXIu IEF0IHRoZSBtb21lbnQgcjM1MiBhbmQgcjM2MSBhcmUgc3VwcG9ydGVkIHNpbmNlCmZpcm13YXJl cyBoYXZlIGJlZW4gcmVsZWFzZWQgZm9yIHRoZXNlIHZlcnNpb25zLiBTb21lIGFic3RyYWN0aW9u cyBhcmUKYWRkZWQgb24gdG9wIG9mIHIzNTIgc28gcjM2MSBjYW4gZWFzaWx5IGJlIGltcGxlbWVu dGVkIG9uIHRvcCBvZiBpdCBieQpqdXN0IG92ZXJyaWRpbmcgYSBmZXcgaG9va3MuCgpUaGlzIHNw bGl0IG1ha2VzIGl0IHBvc3NpYmxlIGFuZCBlYXN5IHRvIHJldXNlIHRoZSBzYW1lIEFDUiB2ZXJz aW9uIG9uCmRpZmZlcmVudCBjaGlwcy4gSXQgYWxzbyBob3BlZnVsbHkgbWFrZXMgdGhlIGNvZGUg bXVjaCBtb3JlIHJlYWRhYmxlIGFzCnRoZSBkaWZmZXJlbnQgc2VjdXJlIGJvb3QgbG9naWNzIGFy ZSBzZXBhcmF0ZWQuIEFzIG1vcmUgY2hpcHMgYW5kCmZpcm13YXJlIHZlcnNpb25zIHdpbGwgYmUg c3VwcG9ydGVkLCB0aGlzIGlzIGEgbmVjZXNzaXR5IHRvIG5vdCBnZXQgbG9zdAppbiBjb2RlIHRo YXQgaXMgYWxyZWFkeSBxdWl0ZSBjb21wbGV4LgoKVGhpcyBpcyBhIGJpZyBjb21taXQsIGJ1dCBp dCBlc3NlbnRpYWxseSBtb3ZlcyB0aGluZ3MgYXJvdW5kIChhbmQgc3BsaXQKdGhlIG52a21fc2Vj Ym9vdCBzdHJ1Y3R1cmUgaW50byB0d28sIG52a21fc2VjYm9vdCBhbmQgbnZrbV9hY3IpLiBDb2Rl CnNlbWFudGljcyBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgoKU2lnbmVkLW9mZi1ieTogQWxleGFu ZHJlIENvdXJib3QgPGFjb3VyYm90QG52aWRpYS5jb20+Ci0tLQogZHJtL25vdXZlYXUvaW5jbHVk ZS9udmttL3N1YmRldi9zZWNib290LmggICAgIHwgICAxMyArLQogZHJtL25vdXZlYXUvbnZrbS9z dWJkZXYvc2VjYm9vdC9LYnVpbGQgICAgICAgIHwgICAgNCArCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjci5jICAgICAgICAgfCAgIDU0ICsrCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjci5oICAgICAgICAgfCAgIDY4ICsrCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl9yMzUyLmMgICAgfCAgOTA1ICsrKysrKysrKysrKysrKysrKysKIGRy bS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaCAgICB8ICAxMjUgKysrCiBk cm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl9yMzYxLmMgICAgfCAgMTM1ICsrKwog ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9iYXNlLmMgICAgICAgIHwgICA5NSArLQog ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jICAgICAgIHwgMTIwMSArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2dt MjAwLmggICAgICAgfCAgIDQzICsKIGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20y MGIuYyAgICAgICB8ICAxMjYgKy0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xz X3Vjb2RlLmggICAgfCAgMjQ1ICsrKysrCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2xzX3Vjb2RlX2dyLmMgfCAgMTY1ICsrKysKIGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvcHJpdi5oICAgICAgICB8ICAzMjcgKy0tLS0tLQogMTQgZmlsZXMgY2hhbmdlZCwgMTg5NSBp bnNlcnRpb25zKCspLCAxNjExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcm0v bm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM2MS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9sc191Y29k ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9s c191Y29kZV9nci5jCgpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvaW5jbHVkZS9udmttL3N1YmRl di9zZWNib290LmggYi9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L3NlY2Jvb3QuaApp bmRleCBmZmMyMjA0ZDJhNTAuLjI0ZDk4ODc4YmI5MyAxMDA2NDQKLS0tIGEvZHJtL25vdXZlYXUv aW5jbHVkZS9udmttL3N1YmRldi9zZWNib290LmgKKysrIGIvZHJtL25vdXZlYXUvaW5jbHVkZS9u dmttL3N1YmRldi9zZWNib290LmgKQEAgLTI3LDE2ICsyNywyMyBAQAogI2luY2x1ZGUgPGNvcmUv ZmFsY29uLmg+CiAKIC8qKgotICogQGJhc2U6CQliYXNlIElPIGFkZHJlc3Mgb2YgdGhlIGZhbGNv biBwZXJmb3JtaW5nIHNlY3VyZSBib290Ci0gKiBAaXJxX21hc2s6CQlJUlEgbWFzayBvZiB0aGUg ZmFsY29uIHBlcmZvcm1pbmcgc2VjdXJlIGJvb3QKLSAqIEBlbmFibGVfbWFzazoJZW5hYmxlIG1h c2sgb2YgdGhlIGZhbGNvbiBwZXJmb3JtaW5nIHNlY3VyZSBib290CisgKiBAYmFzZTogYmFzZSBJ TyBhZGRyZXNzIG9mIHRoZSBmYWxjb24gcGVyZm9ybWluZyBzZWN1cmUgYm9vdAorICogQG1hbmFn ZWRfZmFsY29uczogYml0ZmllbGQgb2YgZmFsY29ucyBtYW5hZ2VkIGJ5IHRoaXMgQUNSCisgKiBA ZGVidWdfbW9kZTogd2hldGhlciB0aGUgZGVidWcgb3IgcHJvZHVjdGlvbiBzaWduYXR1cmVzIHNo b3VsZCBiZSB1c2VkCiAqLwogc3RydWN0IG52a21fc2VjYm9vdCB7CiAJY29uc3Qgc3RydWN0IG52 a21fc2VjYm9vdF9mdW5jICpmdW5jOworCXN0cnVjdCBudmttX2FjciAqYWNyOwogCXN0cnVjdCBu dmttX3N1YmRldiBzdWJkZXY7CiAKKwl1bnNpZ25lZCBsb25nIG1hbmFnZWRfZmFsY29uczsKIAll bnVtIG52a21fZGV2aWR4IGRldmlkeDsKIAl1MzIgYmFzZTsKKworCXU2NCB3cHJfYWRkcjsKKwl1 MzIgd3ByX3NpemU7CisKKwlib29sIGRlYnVnX21vZGU7CiB9OwogI2RlZmluZSBudmttX3NlY2Jv b3QocCkgY29udGFpbmVyX29mKChwKSwgc3RydWN0IG52a21fc2VjYm9vdCwgc3ViZGV2KQogCmRp ZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0tidWlsZCBiL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvS2J1aWxkCmluZGV4IGIwMmI4NjhhNjU4OS4uNTA3 NmQxNTAwZjQ3IDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0ti dWlsZAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0tidWlsZApAQCAtMSwz ICsxLDcgQEAKIG52a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Jhc2UubworbnZrbS15ICs9 IG52a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGVfZ3IubworbnZrbS15ICs9IG52a20vc3ViZGV2 L3NlY2Jvb3QvYWNyLm8KK252a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Fjcl9yMzUyLm8K K252a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Fjcl9yMzYxLm8KIG52a20teSArPSBudmtt L3N1YmRldi9zZWNib290L2dtMjAwLm8KIG52a20teSArPSBudmttL3N1YmRldi9zZWNib290L2dt MjBiLm8KZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyLmMg Yi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzVkYzA2NTU3ODc3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3IuYwpAQCAtMCwwICsxLDU0IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBOVklESUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYWNyLmgiCisKKyNpbmNsdWRl IDxjb3JlL2Zpcm13YXJlLmg+CisKKy8qKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZHVw bGljYXRlIGEgZmlybXdhcmUgZmlsZSBpbiBtZW1vcnkgYW5kIGNoZWNrIHRoYXQKKyAqIGl0IGhh cyB0aGUgcmVxdWlyZWQgbWluaW11bSBzaXplLgorICovCit2b2lkICoKK252a21fYWNyX2xvYWRf ZmlybXdhcmUoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsIGNvbnN0IGNoYXIgKm5h bWUsCisJCSAgICAgICBzaXplX3QgbWluX3NpemUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJl ICpmdzsKKwl2b2lkICpibG9iOworCWludCByZXQ7CisKKwlyZXQgPSBudmttX2Zpcm13YXJlX2dl dChzdWJkZXYtPmRldmljZSwgbmFtZSwgJmZ3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCWlmIChmdy0+c2l6ZSA8IG1pbl9zaXplKSB7CisJCW52a21fZXJyb3Ioc3ViZGV2 LCAiJXMgaXMgc21hbGxlciB0aGFuIGV4cGVjdGVkIHNpemUgJXp1XG4iLAorCQkJICAgbmFtZSwg bWluX3NpemUpOworCQludmttX2Zpcm13YXJlX3B1dChmdyk7CisJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOworCX0KKwlibG9iID0ga21lbWR1cChmdy0+ZGF0YSwgZnctPnNpemUsIEdGUF9LRVJO RUwpOworCW52a21fZmlybXdhcmVfcHV0KGZ3KTsKKwlpZiAoIWJsb2IpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJcmV0dXJuIGJsb2I7Cit9CmRpZmYgLS1naXQgYS9kcm0vbm91dmVh dS9udmttL3N1YmRldi9zZWNib290L2Fjci5oIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9hY3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI0OWMy MmViZTAzYgotLS0gL2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvYWNyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgTlZJ RElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNp Zm5kZWYgX19OVktNX1NFQ0JPT1RfQUNSX0hfXworI2RlZmluZSBfX05WS01fU0VDQk9PVF9BQ1Jf SF9fCisKKyNpbmNsdWRlICJwcml2LmgiCisKK3N0cnVjdCBudmttX2FjcjsKKworLyoqCisgKiBz dHJ1Y3QgbnZrbV9hY3JfZnVuYyAtIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyBzcGVjaWZpYyB0 byBhbiBBQ1IKKyAqCisgKiBAYm9vdF9mYWxjb246IElEIG9mIHRoZSBmYWxjb24gdGhhdCB3aWxs IHBlcmZvcm0gc2VjdXJlIGJvb3QKKyAqIEBsb2FkOiBtYWtlIHRoZSBBQ1IgcmVhZHkgdG8gcnVu IG9uIHRoZSBnaXZlbiBzZWNib290IGRldmljZQorICogQHJlc2V0OiByZXNldCB0aGUgc3BlY2lm aWVkIGZhbGNvbgorICogQHN0YXJ0OiBzdGFydCB0aGUgc3BlY2lmaWVkIGZhbGNvbiAoYXNzdW1l ZCB0byBoYXZlIGJlZW4gcmVzZXQpCisgKi8KK3N0cnVjdCBudmttX2Fjcl9mdW5jIHsKKwllbnVt IG52a21fZmFsY29uaWR4IGJvb3RfZmFsY29uOworCisJdm9pZCAoKmR0b3IpKHN0cnVjdCBudmtt X2FjciAqKTsKKwlpbnQgKCpvbmVpbml0KShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0IG52a21f c2VjYm9vdCAqKTsKKwlpbnQgKCpmaW5pKShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0IG52a21f c2VjYm9vdCAqLCBib29sKTsKKwlpbnQgKCpsb2FkKShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0 IG52a21fc2VjYm9vdCAqLAorCQkgICAgc3RydWN0IG52a21fZ3B1b2JqICosIHU2NCk7CisJaW50 ICgqcmVzZXQpKHN0cnVjdCBudmttX2FjciAqLCBzdHJ1Y3QgbnZrbV9zZWNib290ICosCisJCSAg ICAgZW51bSBudmttX2ZhbGNvbmlkeCk7CisJaW50ICgqc3RhcnQpKHN0cnVjdCBudmttX2FjciAq LCBzdHJ1Y3QgbnZrbV9zZWNib290ICosCisJCSAgICAgZW51bSBudmttX2ZhbGNvbmlkeCk7Cit9 OworCisvKioKKyAqIHN0cnVjdCBudmttX2FjciAtIGluc3RhbmNlIG9mIGFuIEFDUgorICoKKyAq IEBzdGFydF9hZGRyZXNzOiB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIEhTIGJvb3Rsb2Fk ZXIKKyAqLworc3RydWN0IG52a21fYWNyIHsKKwljb25zdCBzdHJ1Y3QgbnZrbV9hY3JfZnVuYyAq ZnVuYzsKKwljb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldjsKKworCXUzMiBzdGFydF9h ZGRyZXNzOworfTsKKwordm9pZCAqbnZrbV9hY3JfbG9hZF9maXJtd2FyZShjb25zdCBzdHJ1Y3Qg bnZrbV9zdWJkZXYgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworCitzdHJ1Y3QgbnZrbV9hY3Ig Km52a21fYWNyX3IzNTJfbmV3KHZvaWQpOworc3RydWN0IG52a21fYWNyICpudmttX2Fjcl9yMzYx X25ldyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2Fjcl9yMzUyLmMgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fj cl9yMzUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZjllNTg5 N2I2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2Fjcl9yMzUyLmMKQEAgLTAsMCArMSw5MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYs IE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpbmNsdWRlICJhY3JfcjM1Mi5oIgorI2luY2x1ZGUgImxzX3Vjb2RlLmgiCisKKyNpbmNs dWRlIDxjb3JlL2dwdW9iai5oPgorI2luY2x1ZGUgPGNvcmUvZmlybXdhcmUuaD4KKworLyoqCisg KiBzdHJ1Y3QgaHNmX2Z3X2hlYWRlciAtIEhTIGZpcm13YXJlIGRlc2NyaXB0b3IKKyAqIEBzaWdf ZGJnX29mZnNldDoJb2Zmc2V0IG9mIHRoZSBkZWJ1ZyBzaWduYXR1cmUKKyAqIEBzaWdfZGJnX3Np emU6CXNpemUgb2YgdGhlIGRlYnVnIHNpZ25hdHVyZQorICogQHNpZ19wcm9kX29mZnNldDoJb2Zm c2V0IG9mIHRoZSBwcm9kdWN0aW9uIHNpZ25hdHVyZQorICogQHNpZ19wcm9kX3NpemU6CXNpemUg b2YgdGhlIHByb2R1Y3Rpb24gc2lnbmF0dXJlCisgKiBAcGF0Y2hfbG9jOgkJb2Zmc2V0IG9mIHRo ZSBvZmZzZXQgKHNpYykgb2Ygd2hlcmUgdGhlIHNpZ25hdHVyZSBpcworICogQHBhdGNoX3NpZzoJ CW9mZnNldCBvZiB0aGUgb2Zmc2V0IChzaWMpIHRvIGFkZCB0byBzaWdfKl9vZmZzZXQKKyAqIEBo ZHJfb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBsb2FkIGhlYWRlciAoc2VlIHN0cnVjdCBoc19sb2Fk X2hlYWRlcikKKyAqIEBoZHJfc2l6ZToJCXNpemUgb2YgYWJvdmUgaGVhZGVyCisgKgorICogVGhp cyBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW4gdGhlIEhTIGZpcm13YXJlIGltYWdlIGF0CisgKiBo c19iaW5faGRyLmhlYWRlcl9vZmZzZXQuCisgKi8KK3N0cnVjdCBoc2ZfZndfaGVhZGVyIHsKKwl1 MzIgc2lnX2RiZ19vZmZzZXQ7CisJdTMyIHNpZ19kYmdfc2l6ZTsKKwl1MzIgc2lnX3Byb2Rfb2Zm c2V0OworCXUzMiBzaWdfcHJvZF9zaXplOworCXUzMiBwYXRjaF9sb2M7CisJdTMyIHBhdGNoX3Np ZzsKKwl1MzIgaGRyX29mZnNldDsKKwl1MzIgaGRyX3NpemU7Cit9OworCisvKioKKyAqIHN0cnVj dCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2MgLSBETUVNIGJvb3Rsb2FkZXIgZGVzY3JpcHRvcgorICog QHNpZ25hdHVyZToJCTE2QiBzaWduYXR1cmUgZm9yIHNlY3VyZSBjb2RlLiAwcyBpZiBubyBzZWN1 cmUgY29kZQorICogQGN0eF9kbWE6CQlETUEgY29udGV4dCB0byBiZSB1c2VkIGJ5IEJMIHdoaWxl IGxvYWRpbmcgY29kZS9kYXRhCisgKiBAY29kZV9kbWFfYmFzZToJMjU2Qi1hbGlnbmVkIFBoeXNp Y2FsIEZCIEFkZHJlc3Mgd2hlcmUgY29kZSBpcyBsb2NhdGVkCisgKgkJCShmYWxjb24ncyAkeGNi YXNlIHJlZ2lzdGVyKQorICogQG5vbl9zZWNfY29kZV9vZmY6CW9mZnNldCBmcm9tIGNvZGVfZG1h X2Jhc2Ugd2hlcmUgdGhlIG5vbi1zZWN1cmUgY29kZSBpcworICogICAgICAgICAgICAgICAgICAg ICAgbG9jYXRlZC4gVGhlIG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1NiB0byBoZWxwIHBl cmYKKyAqIEBub25fc2VjX2NvZGVfc2l6ZToJdGhlIHNpemUgb2YgdGhlIG5vblNlY3VyZSBjb2Rl IHBhcnQuCisgKiBAc2VjX2NvZGVfb2ZmOglvZmZzZXQgZnJvbSBjb2RlX2RtYV9iYXNlIHdoZXJl IHRoZSBzZWN1cmUgY29kZSBpcworICogICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4gVGhl IG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1NiB0byBoZWxwIHBlcmYKKyAqIEBzZWNfY29k ZV9zaXplOglvZmZzZXQgZnJvbSBjb2RlX2RtYV9iYXNlIHdoZXJlIHRoZSBzZWN1cmUgY29kZSBp cworICogICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4gVGhlIG9mZnNldCBtdXN0IGJlIG11 bHRpcGxlIG9mIDI1NiB0byBoZWxwIHBlcmYKKyAqIEBjb2RlX2VudHJ5X3BvaW50Ogljb2RlIGVu dHJ5IHBvaW50IHdoaWNoIHdpbGwgYmUgaW52b2tlZCBieSBCTCBhZnRlcgorICogICAgICAgICAg ICAgICAgICAgICAgY29kZSBpcyBsb2FkZWQuCisgKiBAZGF0YV9kbWFfYmFzZToJMjU2QiBhbGln bmVkIFBoeXNpY2FsIEZCIEFkZHJlc3Mgd2hlcmUgZGF0YSBpcyBsb2NhdGVkLgorICoJCQkoZmFs Y29uJ3MgJHhkYmFzZSByZWdpc3RlcikKKyAqIEBkYXRhX3NpemU6CQlzaXplIG9mIGRhdGEgYmxv Y2suIFNob3VsZCBiZSBtdWx0aXBsZSBvZiAyNTZCCisgKgorICogU3RydWN0dXJlIHVzZWQgYnkg dGhlIGJvb3Rsb2FkZXIgdG8gbG9hZCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gVGhpcyBoYXMKKyAq IHRvIGJlIGZpbGxlZCBieSBob3N0IGFuZCBjb3BpZWQgaW50byBETUVNIGF0IG9mZnNldCBwcm92 aWRlZCBpbiB0aGUKKyAqIGhzZmxjbl9ibF9kZXNjLmJsX2Rlc2NfZG1lbV9sb2FkX29mZi4KKyAq Lworc3RydWN0IGFjcl9yMzUyX2ZsY25fYmxfZGVzYyB7CisJdTMyIHJlc2VydmVkWzRdOworCXUz MiBzaWduYXR1cmVbNF07CisJdTMyIGN0eF9kbWE7CisJdTMyIGNvZGVfZG1hX2Jhc2U7CisJdTMy IG5vbl9zZWNfY29kZV9vZmY7CisJdTMyIG5vbl9zZWNfY29kZV9zaXplOworCXUzMiBzZWNfY29k ZV9vZmY7CisJdTMyIHNlY19jb2RlX3NpemU7CisJdTMyIGNvZGVfZW50cnlfcG9pbnQ7CisJdTMy IGRhdGFfZG1hX2Jhc2U7CisJdTMyIGRhdGFfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IGhz Zmxjbl9hY3JfZGVzYyAtIGRhdGEgc2VjdGlvbiBvZiB0aGUgSFMgZmlybXdhcmUKKyAqCisgKiBU aGlzIGhlYWRlciBpcyB0byBiZSBjb3BpZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBETUVNIGJ5IHRo ZSBIUyBib290bG9hZGVyLgorICoKKyAqIEBzaWduYXR1cmU6CQlzaWduYXR1cmUgb2YgQUNSIHVj b2RlCisgKiBAd3ByX3JlZ2lvbl9pZDoJcmVnaW9uIElEIGhvbGRpbmcgdGhlIFdQUiBoZWFkZXIg YW5kIGl0cyBkZXRhaWxzCisgKiBAd3ByX29mZnNldDoJCW9mZnNldCBmcm9tIHRoZSBXUFIgcmVn aW9uIGhvbGRpbmcgdGhlIHdwciBoZWFkZXIKKyAqIEByZWdpb25zOgkJcmVnaW9uIGRlc2NyaXB0 b3JzCisgKiBAbm9ud3ByX3Vjb2RlX2Jsb2Jfc2l6ZToJc2l6ZSBvZiBMUyBibG9iCisgKiBAbm9u d3ByX3Vjb2RlX2Jsb2Jfc3RhcnQ6CUZCIGxvY2F0aW9uIG9mIExTIGJsb2IgaXMKKyAqLworc3Ry dWN0IGhzZmxjbl9hY3JfZGVzYyB7CisJdW5pb24geworCQl1OCByZXNlcnZlZF9kbWVtWzB4MjAw XTsKKwkJdTMyIHNpZ25hdHVyZXNbNF07CisJfSB1Y29kZV9yZXNlcnZlZF9zcGFjZTsKKwl1MzIg d3ByX3JlZ2lvbl9pZDsKKwl1MzIgd3ByX29mZnNldDsKKwl1MzIgbW11X21lbV9yYW5nZTsKKyNk ZWZpbmUgRkxDTl9BQ1JfTUFYX1JFR0lPTlMgMgorCXN0cnVjdCB7CisJCXUzMiBub19yZWdpb25z OworCQlzdHJ1Y3QgeworCQkJdTMyIHN0YXJ0X2FkZHI7CisJCQl1MzIgZW5kX2FkZHI7CisJCQl1 MzIgcmVnaW9uX2lkOworCQkJdTMyIHJlYWRfbWFzazsKKwkJCXUzMiB3cml0ZV9tYXNrOworCQkJ dTMyIGNsaWVudF9tYXNrOworCQl9IHJlZ2lvbl9wcm9wc1tGTENOX0FDUl9NQVhfUkVHSU9OU107 CisJfSByZWdpb25zOworCXUzMiB1Y29kZV9ibG9iX3NpemU7CisJdTY0IHVjb2RlX2Jsb2JfYmFz ZSBfX2FsaWduZWQoOCk7CisJc3RydWN0IHsKKwkJdTMyIHZwcl9lbmFibGVkOworCQl1MzIgdnBy X3N0YXJ0OworCQl1MzIgdnByX2VuZDsKKwkJdTMyIGhkY3BfcG9saWNpZXM7CisJfSB2cHJfZGVz YzsKK307CisKKworLyoKKyAqIExvdy1zZWN1cmUgYmxvYiBjcmVhdGlvbgorICovCisKK3R5cGVk ZWYgaW50ICgqbHNmX2xvYWRfZnVuYykoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVj dCBsc191Y29kZV9pbWcgKik7CisKKy8qKgorICogbHNfdWNvZGVfaW1nX2xvYWQoKSAtIGNyZWF0 ZSBhIGxzZl91Y29kZV9pbWcgYW5kIGxvYWQgaXQKKyAqLworc3RhdGljIHN0cnVjdCBsc191Y29k ZV9pbWcgKgorbHNfdWNvZGVfaW1nX2xvYWQoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJk ZXYsIGxzZl9sb2FkX2Z1bmMgbG9hZF9mdW5jKQoreworCXN0cnVjdCBsc191Y29kZV9pbWcgKmlt ZzsKKwlpbnQgcmV0OworCisJaW1nID0ga3phbGxvYyhzaXplb2YoKmltZyksIEdGUF9LRVJORUwp OworCWlmICghaW1nKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGxvYWRf ZnVuYyhzdWJkZXYsIGltZyk7CisKKwlpZiAocmV0KSB7CisJCWtmcmVlKGltZyk7CisJCXJldHVy biBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIGltZzsKK30KKworCisKKy8qKgorICogYWNy X3IzNTJfZ2VuZXJhdGVfZmxjbl9ibF9kZXNjIC0gZ2VuZXJhdGUgZ2VuZXJpYyBCTCBkZXNjcmlw dG9yIGZvciBMUyBpbWFnZQorICovCitzdGF0aWMgdm9pZAorYWNyX3IzNTJfZ2VuZXJhdGVfZmxj bl9ibF9kZXNjKGNvbnN0IHN0cnVjdCBudmttX2FjciAqYWNyLAorCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBsc191Y29kZV9pbWcgKmltZywgdTY0IHdwcl9hZGRyLAorCQkJICAgICAgIHZvaWQgKl9k ZXNjKQoreworCXN0cnVjdCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2MgKmRlc2MgPSBfZGVzYzsKKwlj b25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVfZGVzYzsK Kwl1NjQgYmFzZTsKKworCWJhc2UgPSB3cHJfYWRkciArIGltZy0+bHNiX2hlYWRlci51Y29kZV9v ZmYgKyBwZGVzYy0+YXBwX3N0YXJ0X29mZnNldDsKKworCW1lbXNldChkZXNjLCAwLCBzaXplb2Yo KmRlc2MpKTsKKwlkZXNjLT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9VQ09ERTsKKwlkZXNjLT5j b2RlX2RtYV9iYXNlID0gKGJhc2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0KSA+ PiA4OworCWRlc2MtPm5vbl9zZWNfY29kZV9zaXplID0gcGRlc2MtPmFwcF9yZXNpZGVudF9jb2Rl X3NpemU7CisJZGVzYy0+ZGF0YV9kbWFfYmFzZSA9IChiYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVu dF9kYXRhX29mZnNldCkgPj4gODsKKwlkZXNjLT5kYXRhX3NpemUgPSBwZGVzYy0+YXBwX3Jlc2lk ZW50X2RhdGFfc2l6ZTsKKwlkZXNjLT5jb2RlX2VudHJ5X3BvaW50ID0gcGRlc2MtPmFwcF9pbWVt X2VudHJ5OworfQorCisjZGVmaW5lIExTRl9MU0JfSEVBREVSX0FMSUdOIDI1NgorI2RlZmluZSBM U0ZfQkxfREFUQV9BTElHTiAyNTYKKyNkZWZpbmUgTFNGX0JMX0RBVEFfU0laRV9BTElHTiAyNTYK KyNkZWZpbmUgTFNGX0JMX0NPREVfU0laRV9BTElHTiAyNTYKKyNkZWZpbmUgTFNGX1VDT0RFX0RB VEFfQUxJR04gNDA5NgorCisvKioKKyAqIGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMgLSBmaWxs IHRoZSBXUFIgYW5kIExTQiBoZWFkZXJzIG9mIGFuIGltYWdlCisgKiBAYWNyOglBQ1IgdG8gdXNl CisgKiBAaW1nOglpbWFnZSB0byBnZW5lcmF0ZSBmb3IKKyAqIEBvZmZzZXQ6CW9mZnNldCBpbiB0 aGUgV1BSIHJlZ2lvbiB3aGVyZSB0aGlzIGltYWdlIHN0YXJ0cworICoKKyAqIEFsbG9jYXRlIHNw YWNlIGluIHRoZSBXUFIgYXJlYSBmcm9tIG9mZnNldCBhbmQgd3JpdGUgdGhlIFdQUiBhbmQgTFNC IGhlYWRlcnMKKyAqIGFjY29yZGluZ2x5LgorICoKKyAqIFJldHVybjogb2Zmc2V0IGF0IHRoZSBl bmQgb2YgdGhpcyBpbWFnZS4KKyAqLworc3RhdGljIHUzMgorbHNfdWNvZGVfaW1nX2ZpbGxfaGVh ZGVycyhzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAqYWNyLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcs CisJCQkgIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IGxzZl93cHJfaGVhZGVyICp3aGRyID0gJmlt Zy0+d3ByX2hlYWRlcjsKKwlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgKmxoZHIgPSAmaW1nLT5sc2Jf aGVhZGVyOworCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVzYyA9ICZpbWctPnVjb2RlX2Rl c2M7CisJY29uc3Qgc3RydWN0IG52a21fYWNyX3IzNTJfbHNfZnVuYyAqZnVuYyA9CisJCQkJCSAg ICBhY3ItPmZ1bmMtPmxzX2Z1bmNbaW1nLT5mYWxjb25faWRdOworCisJaWYgKGltZy0+dWNvZGVf aGVhZGVyKSB7CisJCW52a21fZmF0YWwoYWNyLT5iYXNlLnN1YmRldiwKKwkJCSAgICJpbWFnZXMg d2l0aG91Z2ggbG9hZGVyIGFyZSBub3Qgc3VwcG9ydGVkIHlldCFcbiIpOworCQlyZXR1cm4gb2Zm c2V0OworCX0KKworCS8qIEZpbGwgV1BSIGhlYWRlciAqLworCXdoZHItPmZhbGNvbl9pZCA9IGlt Zy0+ZmFsY29uX2lkOworCXdoZHItPmJvb3RzdHJhcF9vd25lciA9IGFjci0+YmFzZS5mdW5jLT5i b290X2ZhbGNvbjsKKwl3aGRyLT5zdGF0dXMgPSBMU0ZfSU1BR0VfU1RBVFVTX0NPUFk7CisKKwkv KiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIGFuIExTQiBoZWFkZXIgc2l6ZSAqLworCW9m ZnNldCA9IEFMSUdOKG9mZnNldCwgTFNGX0xTQl9IRUFERVJfQUxJR04pOworCXdoZHItPmxzYl9v ZmZzZXQgPSBvZmZzZXQ7CisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIp OworCisJLyoKKwkgKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIHRoZSBvcmlnaW5hbCAo c3RhdGljKSB1Y29kZQorCSAqIGltYWdlIHNpemUKKwkgKi8KKwlvZmZzZXQgPSBBTElHTihvZmZz ZXQsIExTRl9VQ09ERV9EQVRBX0FMSUdOKTsKKwlsaGRyLT51Y29kZV9vZmYgPSBvZmZzZXQ7CisJ b2Zmc2V0ICs9IGltZy0+dWNvZGVfc2l6ZTsKKworCS8qCisJICogRm9yIGZhbGNvbnMgdGhhdCB1 c2UgYSBib290IGxvYWRlciAoQkwpLCB3ZSBhcHBlbmQgYSBsb2FkZXIKKwkgKiBkZXNjIHN0cnVj dHVyZSBvbiB0aGUgZW5kIG9mIHRoZSB1Y29kZSBpbWFnZSBhbmQgY29uc2lkZXIKKwkgKiB0aGlz IHRoZSBib290IGxvYWRlciBkYXRhLiBUaGUgaG9zdCB3aWxsIHRoZW4gY29weSB0aGUgbG9hZGVy CisJICogZGVzYyBhcmdzIHRvIHRoaXMgc3BhY2Ugd2l0aGluIHRoZSBXUFIgcmVnaW9uIChiZWZv cmUgbG9ja2luZworCSAqIGRvd24pIGFuZCB0aGUgSFMgYmluIHdpbGwgdGhlbiBjb3B5IHRoZW0g dG8gRE1FTSAwIGZvciB0aGUKKwkgKiBsb2FkZXIuCisJICovCisJbGhkci0+YmxfY29kZV9zaXpl ID0gQUxJR04oZGVzYy0+Ym9vdGxvYWRlcl9zaXplLAorCQkJCSAgIExTRl9CTF9DT0RFX1NJWkVf QUxJR04pOworCWxoZHItPnVjb2RlX3NpemUgPSBBTElHTihkZXNjLT5hcHBfcmVzaWRlbnRfZGF0 YV9vZmZzZXQsCisJCQkJIExTRl9CTF9DT0RFX1NJWkVfQUxJR04pICsgbGhkci0+YmxfY29kZV9z aXplOworCWxoZHItPmRhdGFfc2l6ZSA9IEFMSUdOKGRlc2MtPmFwcF9zaXplLCBMU0ZfQkxfQ09E RV9TSVpFX0FMSUdOKSArCisJCQkJbGhkci0+YmxfY29kZV9zaXplIC0gbGhkci0+dWNvZGVfc2l6 ZTsKKwkvKgorCSAqIFRob3VnaCB0aGUgQkwgaXMgbG9jYXRlZCBhdCAwdGggb2Zmc2V0IG9mIHRo ZSBpbWFnZSwgdGhlIFZBCisJICogaXMgZGlmZmVyZW50IHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGRv ZXNuJ3QgY29sbGlkZSB0aGUgYWN0dWFsCisJICogT1MgVkEgcmFuZ2UKKwkgKi8KKwlsaGRyLT5i bF9pbWVtX29mZiA9IGRlc2MtPmJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ7CisJbGhkci0+YXBwX2Nv ZGVfb2ZmID0gZGVzYy0+YXBwX3N0YXJ0X29mZnNldCArCisJCQkgICAgIGRlc2MtPmFwcF9yZXNp ZGVudF9jb2RlX29mZnNldDsKKwlsaGRyLT5hcHBfY29kZV9zaXplID0gZGVzYy0+YXBwX3Jlc2lk ZW50X2NvZGVfc2l6ZTsKKwlsaGRyLT5hcHBfZGF0YV9vZmYgPSBkZXNjLT5hcHBfc3RhcnRfb2Zm c2V0ICsKKwkJCSAgICAgZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OworCWxoZHItPmFw cF9kYXRhX3NpemUgPSBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplOworCisJbGhkci0+Zmxh Z3MgPSAwOworCWlmIChpbWctPmZhbGNvbl9pZCA9PSBhY3ItPmJhc2UuZnVuYy0+Ym9vdF9mYWxj b24pCisJCWxoZHItPmZsYWdzID0gTFNGX0ZMQUdfRE1BQ1RMX1JFUV9DVFg7CisKKwkvKiBHUEND UyB3aWxsIGJlIGxvYWRlZCB1c2luZyBQUkkgKi8KKwlpZiAoaW1nLT5mYWxjb25faWQgPT0gTlZL TV9GQUxDT05fR1BDQ1MpCisJCWxoZHItPmZsYWdzIHw9IExTRl9GTEFHX0ZPUkNFX1BSSVZfTE9B RDsKKworCS8qIEFsaWduIGFuZCBzYXZlIG9mZiBCTCBkZXNjcmlwdG9yIHNpemUgKi8KKwlsaGRy LT5ibF9kYXRhX3NpemUgPSBBTElHTihmdW5jLT5ibF9kZXNjX3NpemUsIExTRl9CTF9EQVRBX1NJ WkVfQUxJR04pOworCisJLyoKKwkgKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIHRoZSBh ZGRpdGlvbmFsIEJMIGRhdGEKKwkgKi8KKwlvZmZzZXQgPSBBTElHTihvZmZzZXQsIExTRl9CTF9E QVRBX0FMSUdOKTsKKwlsaGRyLT5ibF9kYXRhX29mZiA9IG9mZnNldDsKKwlvZmZzZXQgKz0gbGhk ci0+YmxfZGF0YV9zaXplOworCisJcmV0dXJuIG9mZnNldDsKK30KKworLyoqCisgKiBzdHJ1Y3Qg bHNfdWNvZGVfbWdyIC0gbWFuYWdlciBmb3IgYWxsIExTIGZhbGNvbiBmaXJtd2FyZXMKKyAqIEBj b3VudDoJbnVtYmVyIG9mIG1hbmFnZWQgTFMgZmFsY29ucworICogQHdwcl9zaXplOglzaXplIG9m IHRoZSByZXF1aXJlZCBXUFIgcmVnaW9uIGluIGJ5dGVzCisgKiBAaW1nX2xpc3Q6CWxpbmtlZCBs aXN0IG9mIGxzZl91Y29kZV9pbWcKKyAqLworc3RydWN0IGxzX3Vjb2RlX21nciB7CisJdTE2IGNv dW50OworCXUzMiB3cHJfc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGltZ19saXN0OworfTsKKwor c3RhdGljIHZvaWQKK2xzX3Vjb2RlX21ncl9pbml0KHN0cnVjdCBsc191Y29kZV9tZ3IgKm1ncikK K3sKKwltZW1zZXQobWdyLCAwLCBzaXplb2YoKm1ncikpOworCUlOSVRfTElTVF9IRUFEKCZtZ3It PmltZ19saXN0KTsKK30KKworc3RhdGljIHZvaWQKK2xzX3Vjb2RlX21ncl9jbGVhbnVwKHN0cnVj dCBsc191Y29kZV9tZ3IgKm1ncikKK3sKKwlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsICp0Owor CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGltZywgdCwgJm1nci0+aW1nX2xpc3QsIG5vZGUp IHsKKwkJa2ZyZWUoaW1nLT51Y29kZV9kYXRhKTsKKwkJa2ZyZWUoaW1nLT51Y29kZV9oZWFkZXIp OworCQlrZnJlZShpbWcpOworCX0KK30KKworc3RhdGljIHZvaWQKK2xzX3Vjb2RlX21ncl9hZGRf aW1nKHN0cnVjdCBsc191Y29kZV9tZ3IgKm1nciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nKQor eworCW1nci0+Y291bnQrKzsKKwlsaXN0X2FkZF90YWlsKCZpbWctPm5vZGUsICZtZ3ItPmltZ19s aXN0KTsKK30KKworLyoqCisgKiBsc191Y29kZV9tZ3JfZmlsbF9oZWFkZXJzIC0gZmlsbCBXUFIg YW5kIExTQiBoZWFkZXJzIG9mIGFsbCBtYW5hZ2VkIGltYWdlcworICovCitzdGF0aWMgdm9pZAor bHNfdWNvZGVfbWdyX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAqYWNyLCBzdHJ1 Y3QgbHNfdWNvZGVfbWdyICptZ3IpCit7CisJc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOworCXUz MiBvZmZzZXQ7CisKKwkvKgorCSAqIFN0YXJ0IHdpdGggYW4gYXJyYXkgb2YgV1BSIGhlYWRlcnMg YXQgdGhlIGJhc2Ugb2YgdGhlIFdQUi4KKwkgKiBUaGUgZXhwZWN0YXRpb24gaGVyZSBpcyB0aGF0 IHRoZSBzZWN1cmUgZmFsY29uIHdpbGwgZG8gYSBzaW5nbGUgRE1BCisJICogcmVhZCBvZiB0aGlz IGFycmF5IGFuZCBjYWNoZSBpdCBpbnRlcm5hbGx5IHNvIGl0J3Mgb2sgdG8gcGFjayB0aGVzZS4K KwkgKiBBbHNvLCB3ZSBhZGQgMSB0byB0aGUgZmFsY29uIGNvdW50IHRvIGluZGljYXRlIHRoZSBl bmQgb2YgdGhlIGFycmF5LgorCSAqLworCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbHNmX3dwcl9o ZWFkZXIpICogKG1nci0+Y291bnQgKyAxKTsKKworCS8qCisJICogV2FsayB0aGUgbWFuYWdlZCBm YWxjb25zLCBhY2NvdW50aW5nIGZvciB0aGUgTFNCIHN0cnVjdHMKKwkgKiBhcyB3ZWxsIGFzIHRo ZSB1Y29kZSBpbWFnZXMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsICZtZ3ItPmlt Z19saXN0LCBub2RlKSB7CisJCW9mZnNldCA9IGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMoYWNy LCBpbWcsIG9mZnNldCk7CisJfQorCisJbWdyLT53cHJfc2l6ZSA9IG9mZnNldDsKK30KKworLyoq CisgKiBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByIC0gd3JpdGUgdGhlIFdQUiBibG9iIGNvbnRlbnRz CisgKi8KK3N0YXRpYyBpbnQKK2xzX3Vjb2RlX21ncl93cml0ZV93cHIoc3RydWN0IG52a21fYWNy X3IzNTIgKmFjciwgc3RydWN0IGxzX3Vjb2RlX21nciAqbWdyLAorCQkgICAgICAgc3RydWN0IG52 a21fZ3B1b2JqICp3cHJfYmxvYiwgdTMyIHdwcl9hZGRyKQoreworCXN0cnVjdCBsc191Y29kZV9p bWcgKmltZzsKKwl1MzIgcG9zID0gMDsKKworCW52a21fa21hcCh3cHJfYmxvYik7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGltZywgJm1nci0+aW1nX2xpc3QsIG5vZGUpIHsKKwkJbnZrbV9ncHVv YmpfbWVtY3B5X3RvKHdwcl9ibG9iLCBwb3MsICZpbWctPndwcl9oZWFkZXIsCisJCQkJICAgICAg c2l6ZW9mKGltZy0+d3ByX2hlYWRlcikpOworCisJCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJf YmxvYiwgaW1nLT53cHJfaGVhZGVyLmxzYl9vZmZzZXQsCisJCQkJICAgICAmaW1nLT5sc2JfaGVh ZGVyLCBzaXplb2YoaW1nLT5sc2JfaGVhZGVyKSk7CisKKwkJLyogR2VuZXJhdGUgYW5kIHdyaXRl IEJMIGRlc2NyaXB0b3IgKi8KKwkJaWYgKCFpbWctPnVjb2RlX2hlYWRlcikgeworCQkJY29uc3Qg c3RydWN0IG52a21fYWNyX3IzNTJfbHNfZnVuYyAqbHNfZnVuYyA9CisJCQkJCSAgICAgYWNyLT5m dW5jLT5sc19mdW5jW2ltZy0+ZmFsY29uX2lkXTsKKwkJCXU4IGdkZXNjW2xzX2Z1bmMtPmJsX2Rl c2Nfc2l6ZV07CisKKwkJCWxzX2Z1bmMtPmdlbmVyYXRlX2JsX2Rlc2MoJmFjci0+YmFzZSwgaW1n LCB3cHJfYWRkciwKKwkJCQkJCSAgJmdkZXNjKTsKKworCQkJbnZrbV9ncHVvYmpfbWVtY3B5X3Rv KHdwcl9ibG9iLAorCQkJCQkgICAgICBpbWctPmxzYl9oZWFkZXIuYmxfZGF0YV9vZmYsCisJCQkJ CSAgICAgICZnZGVzYywgbHNfZnVuYy0+YmxfZGVzY19zaXplKTsKKwkJfQorCisJCS8qIENvcHkg dWNvZGUgKi8KKwkJbnZrbV9ncHVvYmpfbWVtY3B5X3RvKHdwcl9ibG9iLCBpbWctPmxzYl9oZWFk ZXIudWNvZGVfb2ZmLAorCQkJCSAgICAgIGltZy0+dWNvZGVfZGF0YSwgaW1nLT51Y29kZV9zaXpl KTsKKworCQlwb3MgKz0gc2l6ZW9mKGltZy0+d3ByX2hlYWRlcik7CisJfQorCisJbnZrbV93bzMy KHdwcl9ibG9iLCBwb3MsIE5WS01fRkFMQ09OX0lOVkFMSUQpOworCisJbnZrbV9kb25lKHdwcl9i bG9iKTsKKworCXJldHVybiAwOworfQorCisvKiBCb3RoIHNpemUgYW5kIGFkZHJlc3Mgb2YgV1BS IG5lZWQgdG8gYmUgMTI4Sy1hbGlnbmVkICovCisjZGVmaW5lIFdQUl9BTElHTk1FTlQJMHgyMDAw MAorLyoqCisgKiBhY3JfcjM1Ml9wcmVwYXJlX2xzX2Jsb2IoKSAtIHByZXBhcmUgdGhlIExTIGJs b2IKKyAqCisgKiBGb3IgZWFjaCBzZWN1cmVseSBtYW5hZ2VkIGZhbGNvbiwgbG9hZCB0aGUgRlcs IHNpZ25hdHVyZXMgYW5kIGJvb3Rsb2FkZXJzIGFuZAorICogcHJlcGFyZSBhIHVjb2RlIGJsb2Iu IFRoZW4sIGNvbXB1dGUgdGhlIG9mZnNldHMgaW4gdGhlIFdQUiByZWdpb24gZm9yIGVhY2gKKyAq IGJsb2IsIGFuZCBmaW5hbGx5IHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB1Y29kZSBibG9icyBpbnRv IGEgR1BVIG9iamVjdCB0aGF0CisgKiB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBXUFIgcmVnaW9u IGJ5IHRoZSBIUyBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludAorYWNyX3IzNTJfcHJlcGFyZV9s c19ibG9iKHN0cnVjdCBudmttX2Fjcl9yMzUyICphY3IsIHU2NCB3cHJfYWRkciwgdTMyIHdwcl9z aXplLAorCQkJIHVuc2lnbmVkIGxvbmcgbWFuYWdlZF9mYWxjb25zKQoreworCWNvbnN0IHN0cnVj dCBudmttX3N1YmRldiAqc3ViZGV2ID0gYWNyLT5iYXNlLnN1YmRldjsKKwlzdHJ1Y3QgbHNfdWNv ZGVfbWdyIG1ncjsKKwlpbnQgZmFsY29uX2lkOworCWludCByZXQ7CisKKwlsc191Y29kZV9tZ3Jf aW5pdCgmbWdyKTsKKworCS8qIExvYWQgYWxsIExTIGJsb2JzICovCisJZm9yX2VhY2hfc2V0X2Jp dChmYWxjb25faWQsICZtYW5hZ2VkX2ZhbGNvbnMsIE5WS01fRkFMQ09OX0VORCkgeworCQlzdHJ1 Y3QgbHNfdWNvZGVfaW1nICppbWc7CisKKwkJaW1nID0gbHNfdWNvZGVfaW1nX2xvYWQoc3ViZGV2 LAorCQkJCQlhY3ItPmZ1bmMtPmxzX2Z1bmNbZmFsY29uX2lkXS0+bG9hZCk7CisKKwkJaWYgKElT X0VSUihpbWcpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGltZyk7CisJCQlnb3RvIGNsZWFudXA7CisJ CX0KKwkJbHNfdWNvZGVfbWdyX2FkZF9pbWcoJm1nciwgaW1nKTsKKwl9CisKKwkvKgorCSAqIEZp bGwgdGhlIFdQUiBhbmQgTFNGIGhlYWRlcnMgd2l0aCB0aGUgcmlnaHQgb2Zmc2V0cyBhbmQgY29t cHV0ZQorCSAqIHJlcXVpcmVkIFdQUiBzaXplCisJICovCisJbHNfdWNvZGVfbWdyX2ZpbGxfaGVh ZGVycyhhY3IsICZtZ3IpOworCW1nci53cHJfc2l6ZSA9IEFMSUdOKG1nci53cHJfc2l6ZSwgV1BS X0FMSUdOTUVOVCk7CisKKwkvKiBBbGxvY2F0ZSBHUFUgb2JqZWN0IHRoYXQgd2lsbCBjb250YWlu IHRoZSBXUFIgcmVnaW9uICovCisJcmV0ID0gbnZrbV9ncHVvYmpfbmV3KHN1YmRldi0+ZGV2aWNl LCBtZ3Iud3ByX3NpemUsIFdQUl9BTElHTk1FTlQsCisJCQkgICAgICBmYWxzZSwgTlVMTCwgJmFj ci0+bHNfYmxvYik7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCisJbnZrbV9kZWJ1Zyhz dWJkZXYsICIlZCBtYW5hZ2VkIExTIGZhbGNvbnMsIFdQUiBzaXplIGlzICVkIGJ5dGVzXG4iLAor CQkgICAgbWdyLmNvdW50LCBtZ3Iud3ByX3NpemUpOworCisJLyogSWYgV1BSIGFkZHJlc3MgYW5k IHNpemUgYXJlIG5vdCBmaXhlZCwgc2V0IHRoZW0gdG8gZml0IHRoZSBMUyBibG9iICovCisJaWYg KHdwcl9zaXplID09IDApIHsKKwkJd3ByX2FkZHIgPSBhY3ItPmxzX2Jsb2ItPmFkZHI7CisJCXdw cl9zaXplID0gbWdyLndwcl9zaXplOworCS8qCisJICogQnV0IGlmIHRoZSBXUFIgcmVnaW9uIGlz IHNldCBieSB0aGUgYm9vdGxvYWRlciwgaXQgaXMgaWxsZWdhbCBmb3IKKwkgKiB0aGUgSFMgYmxv YiB0byBiZSBsYXJnZXIgdGhhbiB0aGlzIHJlZ2lvbi4KKwkgKi8KKwl9IGVsc2UgaWYgKG1nci53 cHJfc2l6ZSA+IHdwcl9zaXplKSB7CisJCW52a21fZXJyb3Ioc3ViZGV2LCAiV1BSIHJlZ2lvbiB0 b28gc21hbGwgZm9yIEZXIGJsb2IhXG4iKTsKKwkJbnZrbV9lcnJvcihzdWJkZXYsICJyZXF1aXJl ZDogJWRCXG4iLCBtZ3Iud3ByX3NpemUpOworCQludmttX2Vycm9yKHN1YmRldiwgImF2YWlsYWJs ZTogJWRCXG4iLCB3cHJfc2l6ZSk7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gY2xlYW51cDsK Kwl9CisKKwkvKiBXcml0ZSBMUyBibG9iICovCisJcmV0ID0gbHNfdWNvZGVfbWdyX3dyaXRlX3dw cihhY3IsICZtZ3IsIGFjci0+bHNfYmxvYiwgd3ByX2FkZHIpOworCWlmIChyZXQpCisJCW52a21f Z3B1b2JqX2RlbCgmYWNyLT5sc19ibG9iKTsKKworY2xlYW51cDoKKwlsc191Y29kZV9tZ3JfY2xl YW51cCgmbWdyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworCisKKy8qKgorICogYWNyX3IzNTJf aHNmX3BhdGNoX3NpZ25hdHVyZSgpIC0gcGF0Y2ggSFMgYmxvYiB3aXRoIGNvcnJlY3Qgc2lnbmF0 dXJlCisgKi8KK3N0YXRpYyB2b2lkCithY3JfcjM1Ml9oc2ZfcGF0Y2hfc2lnbmF0dXJlKHN0cnVj dCBudmttX3NlY2Jvb3QgKnNiLCB2b2lkICphY3JfaW1hZ2UpCit7CisJc3RydWN0IGZ3X2Jpbl9o ZWFkZXIgKmhzYmluX2hkciA9IGFjcl9pbWFnZTsKKwlzdHJ1Y3QgaHNmX2Z3X2hlYWRlciAqZndf aGRyID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5oZWFkZXJfb2Zmc2V0OworCXZvaWQgKmhzX2Rh dGEgPSBhY3JfaW1hZ2UgKyBoc2Jpbl9oZHItPmRhdGFfb2Zmc2V0OworCXZvaWQgKnNpZzsKKwl1 MzIgc2lnX3NpemU7CisKKwkvKiBGYWxjb24gaW4gZGVidWcgb3IgcHJvZHVjdGlvbiBtb2RlPyAq LworCWlmIChzYi0+ZGVidWdfbW9kZSkgeworCQlzaWcgPSBhY3JfaW1hZ2UgKyBmd19oZHItPnNp Z19kYmdfb2Zmc2V0OworCQlzaWdfc2l6ZSA9IGZ3X2hkci0+c2lnX2RiZ19zaXplOworCX0gZWxz ZSB7CisJCXNpZyA9IGFjcl9pbWFnZSArIGZ3X2hkci0+c2lnX3Byb2Rfb2Zmc2V0OworCQlzaWdf c2l6ZSA9IGZ3X2hkci0+c2lnX3Byb2Rfc2l6ZTsKKwl9CisKKwkvKiBQYXRjaCBzaWduYXR1cmUg Ki8KKwltZW1jcHkoaHNfZGF0YSArIGZ3X2hkci0+cGF0Y2hfbG9jLCBzaWcgKyBmd19oZHItPnBh dGNoX3NpZywgc2lnX3NpemUpOworfQorCitzdGF0aWMgdm9pZAorYWNyX3IzNTJfZml4dXBfaHNf ZGVzYyhzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAqYWNyLCBzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiwK KwkJICAgICAgIHN0cnVjdCBoc2ZsY25fYWNyX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IG52a21f Z3B1b2JqICpsc19ibG9iID0gYWNyLT5sc19ibG9iOworCisJZGVzYy0+dWNvZGVfYmxvYl9iYXNl ID0gbHNfYmxvYi0+YWRkcjsKKwlkZXNjLT51Y29kZV9ibG9iX3NpemUgPSBsc19ibG9iLT5zaXpl OworCisJZGVzYy0+d3ByX29mZnNldCA9IDA7CisKKwkvKiBXUFIgcmVnaW9uIGluZm9ybWF0aW9u IGlmIFdQUiBpcyBub3QgZml4ZWQgKi8KKwlpZiAoc2ItPndwcl9zaXplID09IDApIHsKKwkJZGVz Yy0+d3ByX3JlZ2lvbl9pZCA9IDE7CisJCWRlc2MtPnJlZ2lvbnMubm9fcmVnaW9ucyA9IDE7CisJ CWRlc2MtPnJlZ2lvbnMucmVnaW9uX3Byb3BzWzBdLnJlZ2lvbl9pZCA9IDE7CisJCWRlc2MtPnJl Z2lvbnMucmVnaW9uX3Byb3BzWzBdLnN0YXJ0X2FkZHIgPSBsc19ibG9iLT5hZGRyID4+IDg7CisJ CWRlc2MtPnJlZ2lvbnMucmVnaW9uX3Byb3BzWzBdLmVuZF9hZGRyID0KKwkJCQkJICAgKGxzX2Js b2ItPmFkZHIgKyBsc19ibG9iLT5zaXplKSA+PiA4OworCX0KK30KKworc3RhdGljIHZvaWQKK2Fj cl9yMzUyX2dlbmVyYXRlX2hsX2JsX2Rlc2MoY29uc3Qgc3RydWN0IGhzZl9sb2FkX2hlYWRlciAq bG9hZF9oZHIsCisJCQkgICAgIHZvaWQgKl9ibF9kZXNjLCB1NjQgb2Zmc2V0KQoreworCXN0cnVj dCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2MgKmJsX2Rlc2MgPSBfYmxfZGVzYzsKKworCW1lbXNldChi bF9kZXNjLCAwLCBzaXplb2YoKmJsX2Rlc2MpKTsKKwlibF9kZXNjLT5jdHhfZG1hID0gRkFMQ09O X0RNQUlEWF9WSVJUOworCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9vZmYgPSBsb2FkX2hkci0+bm9u X3NlY19jb2RlX29mZjsKKwlibF9kZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9IGxvYWRfaGRyLT5u b25fc2VjX2NvZGVfc2l6ZTsKKwlibF9kZXNjLT5zZWNfY29kZV9vZmYgPSBsb2FkX2hkci0+YXBw WzBdLnNlY19jb2RlX29mZjsKKwlibF9kZXNjLT5zZWNfY29kZV9zaXplID0gbG9hZF9oZHItPmFw cFswXS5zZWNfY29kZV9zaXplOworCWJsX2Rlc2MtPmNvZGVfZW50cnlfcG9pbnQgPSAwOworCWJs X2Rlc2MtPmNvZGVfZG1hX2Jhc2UgPSBvZmZzZXQgPj4gODsKKwlibF9kZXNjLT5kYXRhX2RtYV9i YXNlID0gKG9mZnNldCArIGxvYWRfaGRyLT5kYXRhX2RtYV9iYXNlKSA+PiA4OworCWJsX2Rlc2Mt PmRhdGFfc2l6ZSA9IGxvYWRfaGRyLT5kYXRhX3NpemU7Cit9CisKKy8qKgorICogYWNyX3IzNTJf cHJlcGFyZV9oc19ibG9iIC0gbG9hZCBhbmQgcHJlcGFyZSBhIEhTIGJsb2IgYW5kIEJMIGRlc2Ny aXB0b3IKKyAqCisgKiBAc2Igc2VjdXJlIGJvb3QgaW5zdGFuY2UgdG8gcHJlcGFyZSBmb3IKKyAq IEBmdyBuYW1lIG9mIHRoZSBIUyBmaXJtd2FyZSB0byBsb2FkCisgKiBAYmxvYiBwb2ludGVyIHRv IGdwdW9iaiB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIHRvIHJlY2VpdmUgdGhlIEhTIEZXIHBheWxv YWQKKyAqIEBibF9kZXNjIHBvaW50ZXIgdG8gdGhlIEJMIGRlc2NyaXB0b3IgdG8gd3JpdGUgZm9y IHRoaXMgZmlybXdhcmUKKyAqIEBwYXRjaCB3aGV0aGVyIHdlIHNob3VsZCBwYXRjaCB0aGUgSFMg ZGVzY3JpcHRvciAob25seSBmb3IgSFMgbG9hZGVycykKKyAqLworc3RhdGljIGludAorYWNyX3Iz NTJfcHJlcGFyZV9oc19ibG9iKHN0cnVjdCBudmttX2Fjcl9yMzUyICphY3IsIHN0cnVjdCBudmtt X3NlY2Jvb3QgKnNiLAorCQkJIGNvbnN0IGNoYXIgKmZ3LCBzdHJ1Y3QgbnZrbV9ncHVvYmogKipi bG9iLAorCQkJIHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgKmxvYWRfaGVhZGVyLCBib29sIHBhdGNo KQoreworCXN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2ID0gJnNiLT5zdWJkZXY7CisJdm9pZCAq YWNyX2ltYWdlOworCXN0cnVjdCBmd19iaW5faGVhZGVyICpoc2Jpbl9oZHI7CisJc3RydWN0IGhz Zl9md19oZWFkZXIgKmZ3X2hkcjsKKwlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyICpsb2FkX2hkcjsK Kwl2b2lkICphY3JfZGF0YTsKKwlpbnQgcmV0OworCisJYWNyX2ltYWdlID0gbnZrbV9hY3JfbG9h ZF9maXJtd2FyZShzdWJkZXYsIGZ3LCAwKTsKKwlpZiAoSVNfRVJSKGFjcl9pbWFnZSkpCisJCXJl dHVybiBQVFJfRVJSKGFjcl9pbWFnZSk7CisKKwloc2Jpbl9oZHIgPSBhY3JfaW1hZ2U7CisJZndf aGRyID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5oZWFkZXJfb2Zmc2V0OworCWxvYWRfaGRyID0g YWNyX2ltYWdlICsgZndfaGRyLT5oZHJfb2Zmc2V0OworCWFjcl9kYXRhID0gYWNyX2ltYWdlICsg aHNiaW5faGRyLT5kYXRhX29mZnNldDsKKworCS8qIFBhdGNoIHNpZ25hdHVyZSAqLworCWFjcl9y MzUyX2hzZl9wYXRjaF9zaWduYXR1cmUoc2IsIGFjcl9pbWFnZSk7CisKKwkvKiBQYXRjaCBkZXNj cmlwdG9yIHdpdGggV1BSIGluZm9ybWF0aW9uPyAqLworCWlmIChwYXRjaCkgeworCQlzdHJ1Y3Qg aHNmbGNuX2Fjcl9kZXNjICpkZXNjOworCisJCWRlc2MgPSBhY3JfZGF0YSArIGxvYWRfaGRyLT5k YXRhX2RtYV9iYXNlOworCQlhY3JfcjM1Ml9maXh1cF9oc19kZXNjKGFjciwgc2IsIGRlc2MpOwor CX0KKworCWlmIChsb2FkX2hkci0+bnVtX2FwcHMgPiBBQ1JfUjM1Ml9NQVhfQVBQUykgeworCQlu dmttX2Vycm9yKHN1YmRldiwgIm1vcmUgYXBwcyAoJWQpIHRoYW4gc3VwcG9ydGVkICglZCkhIiwK KwkJCSAgIGxvYWRfaGRyLT5udW1fYXBwcywgQUNSX1IzNTJfTUFYX0FQUFMpOworCQlyZXQgPSAt RUlOVkFMOworCQlnb3RvIGNsZWFudXA7CisJfQorCW1lbWNweShsb2FkX2hlYWRlciwgbG9hZF9o ZHIsIHNpemVvZigqbG9hZF9oZWFkZXIpICsKKwkJCSAgICAgICAoc2l6ZW9mKGxvYWRfaGRyLT5h cHBbMF0pICogbG9hZF9oZHItPm51bV9hcHBzKSk7CisKKwkvKiBDcmVhdGUgQUNSIGJsb2IgYW5k IGNvcHkgSFMgZGF0YSB0byBpdCAqLworCXJldCA9IG52a21fZ3B1b2JqX25ldyhzdWJkZXYtPmRl dmljZSwgQUxJR04oaHNiaW5faGRyLT5kYXRhX3NpemUsIDI1NiksCisJCQkgICAgICAweDEwMDAs IGZhbHNlLCBOVUxMLCBibG9iKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXA7CisKKwludmtt X2ttYXAoKmJsb2IpOworCW52a21fZ3B1b2JqX21lbWNweV90bygqYmxvYiwgMCwgYWNyX2RhdGEs IGhzYmluX2hkci0+ZGF0YV9zaXplKTsKKwludmttX2RvbmUoKmJsb2IpOworCitjbGVhbnVwOgor CWtmcmVlKGFjcl9pbWFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CithY3Jf cjM1Ml9wcmVwYXJlX2hzYmxfYmxvYihzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAqYWNyKQoreworCWNv bnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2ID0gYWNyLT5iYXNlLnN1YmRldjsKKwlzdHJ1 Y3QgZndfYmluX2hlYWRlciAqaGRyOworCXN0cnVjdCBmd19ibF9kZXNjICpoc2JsX2Rlc2M7CisK KwlhY3ItPmhzYmxfYmxvYiA9IG52a21fYWNyX2xvYWRfZmlybXdhcmUoc3ViZGV2LCAiYWNyL2Js IiwgMCk7CisJaWYgKElTX0VSUihhY3ItPmhzYmxfYmxvYikpIHsKKwkJaW50IHJldCA9IFBUUl9F UlIoYWNyLT5oc2JsX2Jsb2IpOworCisJCWFjci0+aHNibF9ibG9iID0gTlVMTDsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwloZHIgPSBhY3ItPmhzYmxfYmxvYjsKKwloc2JsX2Rlc2MgPSBhY3ItPmhz YmxfYmxvYiArIGhkci0+aGVhZGVyX29mZnNldDsKKworCS8qIHZpcnR1YWwgc3RhcnQgYWRkcmVz cyBmb3IgYm9vdCB2ZWN0b3IgKi8KKwlhY3ItPmJhc2Uuc3RhcnRfYWRkcmVzcyA9IGhzYmxfZGVz Yy0+c3RhcnRfdGFnIDw8IDg7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhY3JfcjM1Ml9s b2FkX2Jsb2JzIC0gbG9hZCBibG9icyBjb21tb24gdG8gYWxsIEFDUiBWMSB2ZXJzaW9ucy4KKyAq CisgKiBUaGlzIGluY2x1ZGVzIHRoZSBMUyBibG9iLCBIUyB1Y29kZSBsb2FkaW5nIGJsb2IsIGFu ZCBIUyBib290bG9hZGVyLgorICoKKyAqIFRoZSBIUyB1Y29kZSB1bmxvYWQgYmxvYiBpcyBvbmx5 IHVzZWQgb24gZEdQVSBpZiB0aGUgV1BSIHJlZ2lvbiBpcyB2YXJpYWJsZS4KKyAqLworaW50Cith Y3JfcjM1Ml9sb2FkX2Jsb2JzKHN0cnVjdCBudmttX2Fjcl9yMzUyICphY3IsIHN0cnVjdCBudmtt X3NlY2Jvb3QgKnNiKQoreworCWludCByZXQ7CisKKwkvKiBGaXJtd2FyZSBhbHJlYWR5IGxvYWRl ZD8gKi8KKwlpZiAoYWNyLT5maXJtd2FyZV9vaykKKwkJcmV0dXJuIDA7CisKKwkvKiBMb2FkIGFu ZCBwcmVwYXJlIHRoZSBtYW5hZ2VkIGZhbGNvbidzIGZpcm13YXJlcyAqLworCXJldCA9IGFjcl9y MzUyX3ByZXBhcmVfbHNfYmxvYihhY3IsIHNiLT53cHJfYWRkciwgc2ItPndwcl9zaXplLAorCQkJ CSAgICAgICBzYi0+bWFuYWdlZF9mYWxjb25zKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJLyogTG9hZCB0aGUgSFMgZmlybXdhcmUgdGhhdCB3aWxsIGxvYWQgdGhlIExTIGZpcm13YXJl cyAqLworCWlmICghYWNyLT5sb2FkX2Jsb2IpIHsKKwkJcmV0ID0gYWNyX3IzNTJfcHJlcGFyZV9o c19ibG9iKGFjciwgc2IsICJhY3IvdWNvZGVfbG9hZCIsCisJCQkJCSAgICAgICAmYWNyLT5sb2Fk X2Jsb2IsCisJCQkJCSAgICAgICAmYWNyLT5sb2FkX2JsX2hlYWRlciwgdHJ1ZSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIElmIHRoZSBBQ1IgcmVnaW9uIGlzIGR5bmFt aWNhbGx5IHByb2dyYW1tZWQsIHdlIG5lZWQgYW4gdW5sb2FkIEZXICovCisJaWYgKHNiLT53cHJf c2l6ZSA9PSAwKSB7CisJCXJldCA9IGFjcl9yMzUyX3ByZXBhcmVfaHNfYmxvYihhY3IsIHNiLCAi YWNyL3Vjb2RlX3VubG9hZCIsCisJCQkJCSAgICAgICAmYWNyLT51bmxvYWRfYmxvYiwKKwkJCQkJ ICAgICAgICZhY3ItPnVubG9hZF9ibF9oZWFkZXIsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJfQorCisJLyogTG9hZCB0aGUgSFMgZmlybXdhcmUgYm9vdGxvYWRlciAqLwor CWlmICghYWNyLT5oc2JsX2Jsb2IpIHsKKwkJcmV0ID0gYWNyX3IzNTJfcHJlcGFyZV9oc2JsX2Js b2IoYWNyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJYWNyLT5maXJtd2Fy ZV9vayA9IHRydWU7CisJbnZrbV9kZWJ1Zygmc2ItPnN1YmRldiwgIkxTIGJsb2Igc3VjY2Vzc2Z1 bGx5IGNyZWF0ZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbnZrbV9hY3JfcjM1 Ml9sb2FkKCkgLSBwcmVwYXJlIEhTIGZhbGNvbiB0byBydW4gdGhlIHNwZWNpZmllZCBibG9iLCBt YXBwZWQKKyAqIGF0IEdQVSBhZGRyZXNzIG9mZnNldC4KKyAqLworaW50CitudmttX2Fjcl9yMzUy X2xvYWQoc3RydWN0IG52a21fYWNyICpfYWNyLCBzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiwKKwkJ ICAgc3RydWN0IG52a21fZ3B1b2JqICpibG9iLCB1NjQgb2Zmc2V0KQoreworCXN0cnVjdCBudmtt X2Fjcl9yMzUyICphY3IgPSBudmttX2Fjcl9yMzUyKF9hY3IpOworCXN0cnVjdCBudmttX2Rldmlj ZSAqZGV2aWNlID0gc2ItPnN1YmRldi5kZXZpY2U7CisJc3RydWN0IGZ3X2Jpbl9oZWFkZXIgKmhk ciA9IGFjci0+aHNibF9ibG9iOworCXN0cnVjdCBmd19ibF9kZXNjICpoc2JsX2Rlc2MgPSBhY3It PmhzYmxfYmxvYiArIGhkci0+aGVhZGVyX29mZnNldDsKKwl2b2lkICpibG9iX2RhdGEgPSBhY3It PmhzYmxfYmxvYiArIGhkci0+ZGF0YV9vZmZzZXQ7CisJdm9pZCAqaHNibF9jb2RlID0gYmxvYl9k YXRhICsgaHNibF9kZXNjLT5jb2RlX29mZjsKKwl2b2lkICpoc2JsX2RhdGEgPSBibG9iX2RhdGEg KyBoc2JsX2Rlc2MtPmRhdGFfb2ZmOworCXUzMiBjb2RlX3NpemUgPSBBTElHTihoc2JsX2Rlc2Mt PmNvZGVfc2l6ZSwgMjU2KTsKKwljb25zdCBzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyICpsb2FkX2hk cjsKKwljb25zdCB1MzIgYmFzZSA9IHNiLT5iYXNlOworCWNvbnN0IHUzMiBibF9kZXNjX3NpemUg PSBhY3ItPmZ1bmMtPmhzX2JsX2Rlc2Nfc2l6ZTsKKwl1OCBibF9kZXNjW2JsX2Rlc2Nfc2l6ZV07 CisJdTMyIGNvZGVfc3RhcnQ7CisKKwkvKiBGaW5kIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3Ig Zm9yIG91ciBibG9iIGFuZCBjb3B5IGl0ICovCisJaWYgKGJsb2IgPT0gYWNyLT5sb2FkX2Jsb2Ip IHsKKwkJbG9hZF9oZHIgPSAmYWNyLT5sb2FkX2JsX2hlYWRlcjsKKwl9IGVsc2UgaWYgKGJsb2Ig PT0gYWNyLT51bmxvYWRfYmxvYikgeworCQlsb2FkX2hkciA9ICZhY3ItPnVubG9hZF9ibF9oZWFk ZXI7CisJfSBlbHNlIHsKKwkJbnZrbV9lcnJvcihfYWNyLT5zdWJkZXYsICJpbnZhbGlkIHNlY3Vy ZSBib290IGJsb2IhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBDb3B5 IEhTIGJvb3Rsb2FkZXIgZGF0YQorCSAqLworCW52a21fZmFsY29uX2xvYWRfZG1lbShkZXZpY2Us IHNiLT5iYXNlLCBoc2JsX2RhdGEsIDB4MDAwMDAsCisJCQkgICAgICBoc2JsX2Rlc2MtPmRhdGFf c2l6ZSk7CisKKwkvKiBDb3B5IEhTIGJvb3Rsb2FkZXIgY29kZSB0byBlbmQgb2YgSU1FTSAqLwor CWNvZGVfc3RhcnQgPSAobnZrbV9yZDMyKGRldmljZSwgYmFzZSArIDB4MTA4KSAmIDB4MWZmKSA8 PCA4OworCWNvZGVfc3RhcnQgLT0gY29kZV9zaXplOworCW52a21fZmFsY29uX2xvYWRfaW1lbShk ZXZpY2UsIHNiLT5iYXNlLCBoc2JsX2NvZGUsIGNvZGVfc3RhcnQsCisJCQkgICAgICBjb2RlX3Np emUsIGhzYmxfZGVzYy0+c3RhcnRfdGFnKTsKKworCS8qIEdlbmVyYXRlIHRoZSBCTCBoZWFkZXIg Ki8KKwlhY3ItPmZ1bmMtPmdlbmVyYXRlX2hzX2JsX2Rlc2MobG9hZF9oZHIsIGJsX2Rlc2MsIG9m ZnNldCk7CisKKwkvKgorCSAqIENvcHkgSFMgQkwgaGVhZGVyIHdoZXJlIHRoZSBIUyBkZXNjcmlw dG9yIGV4cGVjdHMgaXQgdG8gYmUKKwkgKi8KKwludmttX2ZhbGNvbl9sb2FkX2RtZW0oZGV2aWNl LCBiYXNlLCAmYmxfZGVzYywgaHNibF9kZXNjLT5kbWVtX2xvYWRfb2ZmLAorCQkJICAgICAgYmxf ZGVzY19zaXplKTsKKworCXJldHVybiAwOworfQorCisvKgorICogbnZrbV9hY3JfcjM1Ml9yZXNl dCgpIC0gZXhlY3V0ZSBzZWN1cmUgYm9vdCBmcm9tIHRoZSBwcmVwYXJlZCBzdGF0ZQorICoKKyAq IExvYWQgdGhlIEhTIGJvb3Rsb2FkZXIgYW5kIGFzayB0aGUgZmFsY29uIHRvIHJ1biBpdC4gVGhp cyB3aWxsIGluIHR1cm4KKyAqIGxvYWQgdGhlIEhTIGZpcm13YXJlIGFuZCBydW4gaXQsIHNvIG9u Y2UgdGhlIGZhbGNvbiBzdG9wcyBhbGwgdGhlIG1hbmFnZWQKKyAqIGZhbGNvbnMgc2hvdWxkIGhh dmUgdGhlaXIgTFMgZmlybXdhcmUgbG9hZGVkIGFuZCBiZSByZWFkeSB0byBydW4uCisgKi8KK2lu dAorbnZrbV9hY3JfcjM1Ml9yZXNldChzdHJ1Y3QgbnZrbV9hY3IgKl9hY3IsIHN0cnVjdCBudmtt X3NlY2Jvb3QgKnNiLAorCQkgICAgZW51bSBudmttX2ZhbGNvbmlkeCBmYWxjb24pCit7CisJc3Ry dWN0IG52a21fYWNyX3IzNTIgKmFjciA9IG52a21fYWNyX3IzNTIoX2Fjcik7CisJaW50IHJldDsK KworCS8qIE1ha2Ugc3VyZSBhbGwgYmxvYnMgYXJlIHJlYWR5ICovCisJcmV0ID0gYWNyX3IzNTJf bG9hZF9ibG9icyhhY3IsIHNiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkg KiBEdW1teSBHTTIwMCBpbXBsZW1lbnRhdGlvbjogcGVyZm9ybSBzZWN1cmUgYm9vdCBlYWNoIHRp bWUgd2UgYXJlCisJICogY2FsbGVkIG9uIEZFQ1MuIFNpbmNlIG9ubHkgRkVDUyBhbmQgR1BDQ1Mg YXJlIG1hbmFnZWQgYW5kIHN0YXJ0ZWQKKwkgKiB0b2dldGhlciwgdGhpcyBvdWdodCB0byBiZSBz YWZlLgorCSAqCisJICogT25jZSB3ZSBoYXZlIHByb3BlciBQTVUgZmlybXdhcmUgYW5kIHN1cHBv cnQsIHRoaXMgd2lsbCBiZSBjaGFuZ2VkCisJICogdG8gYSBwcm9wZXIgY2FsbCB0byB0aGUgUE1V IG1ldGhvZC4KKwkgKi8KKwlpZiAoZmFsY29uICE9IE5WS01fRkFMQ09OX0ZFQ1MpCisJCWdvdG8g ZW5kOworCisJLyogSWYgV1BSIGlzIHNldCBhbmQgd2UgaGF2ZSBhbiB1bmxvYWQgYmxvYiwgcnVu IGl0IHRvIHVubG9jayBXUFIgKi8KKwlpZiAoYWNyLT51bmxvYWRfYmxvYiAmJgorCSAgICBhY3It PmZhbGNvbl9zdGF0ZVtOVktNX0ZBTENPTl9GRUNTXSAhPSBOT05fU0VDVVJFKSB7CisJCXJldCA9 IHNiLT5mdW5jLT5ydW5fYmxvYihzYiwgYWNyLT51bmxvYWRfYmxvYik7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJlbG9hZCBhbGwgbWFuYWdlZCBmYWxjb25zICovCisJ cmV0ID0gc2ItPmZ1bmMtPnJ1bl9ibG9iKHNiLCBhY3ItPmxvYWRfYmxvYik7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworZW5kOgorCWFjci0+ZmFsY29uX3N0YXRlW2ZhbGNvbl0gPSBSRVNF VDsKKwlyZXR1cm4gMDsKK30KKworaW50CitudmttX2Fjcl9yMzUyX3N0YXJ0KHN0cnVjdCBudmtt X2FjciAqX2Fjciwgc3RydWN0IG52a21fc2VjYm9vdCAqc2IsCisJCSAgICBlbnVtIG52a21fZmFs Y29uaWR4IGZhbGNvbikKK3sKKwlzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAqYWNyID0gbnZrbV9hY3Jf cjM1MihfYWNyKTsKKwljb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9ICZzYi0+c3Vi ZGV2OworCWludCBiYXNlOworCisJc3dpdGNoIChmYWxjb24pIHsKKwljYXNlIE5WS01fRkFMQ09O X0ZFQ1M6CisJCWJhc2UgPSAweDQwOTAwMDsKKwkJYnJlYWs7CisJY2FzZSBOVktNX0ZBTENPTl9H UENDUzoKKwkJYmFzZSA9IDB4NDFhMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQludmttX2Vy cm9yKHN1YmRldiwgImNhbm5vdCBzdGFydCB1bmhhbmRsZWQgZmFsY29uIVxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCW52a21fd3IzMihzdWJkZXYtPmRldmljZSwgYmFzZSArIDB4MTMw LCAweDAwMDAwMDAyKTsKKwlhY3ItPmZhbGNvbl9zdGF0ZVtmYWxjb25dID0gUlVOTklORzsKKwor CXJldHVybiAwOworfQorCitpbnQKK252a21fYWNyX3IzNTJfZmluaShzdHJ1Y3QgbnZrbV9hY3Ig Kl9hY3IsIHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLCBib29sIHN1c3BlbmQpCit7CisJc3RydWN0 IG52a21fYWNyX3IzNTIgKmFjciA9IG52a21fYWNyX3IzNTIoX2Fjcik7CisJaW50IHJldCA9IDA7 CisJaW50IGk7CisKKwkvKiBSdW4gdGhlIHVubG9hZCBibG9iIHRvIHVucHJvdGVjdCB0aGUgV1BS IHJlZ2lvbiAqLworCWlmIChhY3ItPnVubG9hZF9ibG9iICYmCisJICAgIGFjci0+ZmFsY29uX3N0 YXRlW05WS01fRkFMQ09OX0ZFQ1NdICE9IE5PTl9TRUNVUkUpCisJCXJldCA9IHNiLT5mdW5jLT5y dW5fYmxvYihzYiwgYWNyLT51bmxvYWRfYmxvYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlZLTV9G QUxDT05fRU5EOyBpKyspCisJCWFjci0+ZmFsY29uX3N0YXRlW2ldID0gTk9OX1NFQ1VSRTsKKwor CXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK252a21fYWNyX3IzNTJfZHRvcihzdHJ1Y3QgbnZrbV9h Y3IgKl9hY3IpCit7CisJc3RydWN0IG52a21fYWNyX3IzNTIgKmFjciA9IG52a21fYWNyX3IzNTIo X2Fjcik7CisKKwludmttX2dwdW9ial9kZWwoJmFjci0+dW5sb2FkX2Jsb2IpOworCisJa2ZyZWUo YWNyLT5oc2JsX2Jsb2IpOworCW52a21fZ3B1b2JqX2RlbCgmYWNyLT5sb2FkX2Jsb2IpOworCW52 a21fZ3B1b2JqX2RlbCgmYWNyLT5sc19ibG9iKTsKKworCWtmcmVlKGFjcik7Cit9CisKK2NvbnN0 IHN0cnVjdCBudmttX2Fjcl9yMzUyX2xzX2Z1bmMKK2Fjcl9yMzUyX2xzX2ZlY3NfZnVuYyA9IHsK KwkubG9hZCA9IGFjcl9sc191Y29kZV9sb2FkX2ZlY3MsCisJLmdlbmVyYXRlX2JsX2Rlc2MgPSBh Y3JfcjM1Ml9nZW5lcmF0ZV9mbGNuX2JsX2Rlc2MsCisJLmJsX2Rlc2Nfc2l6ZSA9IHNpemVvZihz dHJ1Y3QgYWNyX3IzNTJfZmxjbl9ibF9kZXNjKSwKK307CisKK2NvbnN0IHN0cnVjdCBudmttX2Fj cl9yMzUyX2xzX2Z1bmMKK2Fjcl9yMzUyX2xzX2dwY2NzX2Z1bmMgPSB7CisJLmxvYWQgPSBhY3Jf bHNfdWNvZGVfbG9hZF9ncGNjcywKKwkuZ2VuZXJhdGVfYmxfZGVzYyA9IGFjcl9yMzUyX2dlbmVy YXRlX2ZsY25fYmxfZGVzYywKKwkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfcjM1 Ml9mbGNuX2JsX2Rlc2MpLAorfTsKKworY29uc3Qgc3RydWN0IG52a21fYWNyX3IzNTJfZnVuYwor YWNyX3IzNTJfZnVuYyA9IHsKKwkuZ2VuZXJhdGVfaHNfYmxfZGVzYyA9IGFjcl9yMzUyX2dlbmVy YXRlX2hsX2JsX2Rlc2MsCisJLmhzX2JsX2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNyX3Iz NTJfZmxjbl9ibF9kZXNjKSwKKwkubHNfZnVuYyA9IHsKKwkJW05WS01fRkFMQ09OX0ZFQ1NdID0g JmFjcl9yMzUyX2xzX2ZlY3NfZnVuYywKKwkJW05WS01fRkFMQ09OX0dQQ0NTXSA9ICZhY3JfcjM1 Ml9sc19ncGNjc19mdW5jLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG52a21fYWNy X2Z1bmMKK2Fjcl9yMzUyX2Jhc2VfZnVuYyA9IHsKKwkuYm9vdF9mYWxjb24gPSBOVktNX0ZBTENP Tl9QTVUsCisJLmR0b3IgPSBudmttX2Fjcl9yMzUyX2R0b3IsCisJLmZpbmkgPSBudmttX2Fjcl9y MzUyX2ZpbmksCisJLmxvYWQgPSBudmttX2Fjcl9yMzUyX2xvYWQsCisJLnJlc2V0ID0gbnZrbV9h Y3JfcjM1Ml9yZXNldCwKKwkuc3RhcnQgPSBudmttX2Fjcl9yMzUyX3N0YXJ0LAorfTsKKworc3Ry dWN0IG52a21fYWNyICoKK19udmttX2Fjcl9yMzUyX25ldyhjb25zdCBzdHJ1Y3QgbnZrbV9hY3Jf cjM1Ml9mdW5jICpmdW5jKQoreworCXN0cnVjdCBudmttX2Fjcl9yMzUyICphY3I7CisKKwlhY3Ig PSBremFsbG9jKHNpemVvZigqYWNyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3IpCisJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOworCisJYWNyLT5iYXNlLmZ1bmMgPSAmYWNyX3IzNTJfYmFzZV9m dW5jOworCWFjci0+ZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gJmFjci0+YmFzZTsKK30KKworc3Ry dWN0IG52a21fYWNyICoKK252a21fYWNyX3IzNTJfbmV3KHZvaWQpCit7CisJcmV0dXJuIF9udmtt X2Fjcl9yMzUyX25ldygmYWNyX3IzNTJfZnVuYyk7Cit9CmRpZmYgLS1naXQgYS9kcm0vbm91dmVh dS9udmttL3N1YmRldi9zZWNib290L2Fjcl9yMzUyLmggYi9kcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2Fjcl9yMzUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi42Mjg1OTM4NDFlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl9yMzUyLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTYsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICovCisjaWZuZGVmIF9fTlZLTV9TRUNCT09UX0FDUl9SMzUyX0hfXworI2RlZmlu ZSBfX05WS01fU0VDQk9PVF9BQ1JfUjM1Ml9IX18KKworI2luY2x1ZGUgImFjci5oIgorCitzdHJ1 Y3QgbHNfdWNvZGVfaW1nOworCisjZGVmaW5lIEFDUl9SMzUyX01BWF9BUFBTIDgKKworc3RydWN0 IGhzZl9sb2FkX2hlYWRlcl9hcHAgeworCXUzMiBzZWNfY29kZV9vZmY7CisJdTMyIHNlY19jb2Rl X3NpemU7Cit9OworCisvKioKKyAqIHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgLSBIUyBmaXJtd2Fy ZSBsb2FkIGhlYWRlcgorICovCitzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyIHsKKwl1MzIgbm9uX3Nl Y19jb2RlX29mZjsKKwl1MzIgbm9uX3NlY19jb2RlX3NpemU7CisJdTMyIGRhdGFfZG1hX2Jhc2U7 CisJdTMyIGRhdGFfc2l6ZTsKKwl1MzIgbnVtX2FwcHM7CisJc3RydWN0IGhzZl9sb2FkX2hlYWRl cl9hcHAgYXBwWzBdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbnZrbV9hY3JfcjM1Ml9sc19mdW5j IC0gbWFuYWdlcyBhIHNpbmdsZSBMUyBmaXJtd2FyZQorICoKKyAqIEBsb2FkOiBsb2FkIHRoZSBl eHRlcm5hbCBmaXJtd2FyZSBpbnRvIGEgbHNfdWNvZGVfaW1nCisgKiBAZ2VuZXJhdGVfYmxfZGVz YzogZnVuY3Rpb24gY2FsbGVkIG9uIGEgYmxvY2sgb2YgYmxfZGVzY19zaXplIHRvIGdlbmVyYXRl IHRoZQorICoJCSAgICAgIHByb3BlciBib290bG9hZGVyIGRlc2NyaXB0b3IgZm9yIHRoaXMgTFMg ZmlybXdhcmUKKyAqIEBibF9kZXNjX3NpemU6IHNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgZGVzY3Jp cHRvcgorICovCitzdHJ1Y3QgbnZrbV9hY3JfcjM1Ml9sc19mdW5jIHsKKwlpbnQgKCpsb2FkKShj b25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKKwl2b2lk ICgqZ2VuZXJhdGVfYmxfZGVzYykoY29uc3Qgc3RydWN0IG52a21fYWNyICosCisJCQkJIGNvbnN0 IHN0cnVjdCBsc191Y29kZV9pbWcgKiwgdTY0LCB2b2lkICopOworCXUzMiBibF9kZXNjX3NpemU7 Cit9OworCisvKioKKyAqIHN0cnVjdCBudmttX2Fjcl9yMzUyX2Z1bmMgLSBtYW5hZ2VzIG51YW5j ZXMgYmV0d2VlbiBBQ1IgdmVyc2lvbnMKKyAqCisgKiBAZ2VuZXJhdGVfaHNfYmxfZGVzYzogZnVu Y3Rpb24gY2FsbGVkIG9uIGEgYmxvY2sgb2YgYmxfZGVzY19zaXplIHRvIGdlbmVyYXRlCisgKgkJ CSB0aGUgcHJvcGVyIEhTIGJvb3Rsb2FkZXIgZGVzY3JpcHRvcgorICogQGhzX2JsX2Rlc2Nfc2l6 ZTogc2l6ZSBvZiB0aGUgSFMgYm9vdGxvYWRlciBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBudmtt X2Fjcl9yMzUyX2Z1bmMgeworCXZvaWQgKCpnZW5lcmF0ZV9oc19ibF9kZXNjKShjb25zdCBzdHJ1 Y3QgaHNmX2xvYWRfaGVhZGVyICosIHZvaWQgKiwKKwkJCQkgICAgdTY0KTsKKwl1MzIgaHNfYmxf ZGVzY19zaXplOworCisJY29uc3Qgc3RydWN0IG52a21fYWNyX3IzNTJfbHNfZnVuYyAqbHNfZnVu Y1tOVktNX0ZBTENPTl9FTkRdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbnZrbV9hY3JfcjM1MiAt IEFDUiBkYXRhIGZvciBkcml2ZXIgcmVsZWFzZSAzNTIgKGFuZCBiZXlvbmQpCisgKi8KK3N0cnVj dCBudmttX2Fjcl9yMzUyIHsKKwlzdHJ1Y3QgbnZrbV9hY3IgYmFzZTsKKwljb25zdCBzdHJ1Y3Qg bnZrbV9hY3JfcjM1Ml9mdW5jICpmdW5jOworCisJLyoKKwkgKiBIUyBGVyAtIGxvY2sgV1BSIHJl Z2lvbiAoZEdQVSBvbmx5KSBhbmQgbG9hZCBMUyBGV3MKKwkgKiBvbiBUZWdyYSB0aGUgSFMgRlcg Y29waWVzIHRoZSBMUyBibG9iIGludG8gdGhlIGZpeGVkIFdQUiBpbnN0ZWFkCisJICovCisJc3Ry dWN0IG52a21fZ3B1b2JqICpsb2FkX2Jsb2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGhzZl9sb2Fk X2hlYWRlciBsb2FkX2JsX2hlYWRlcjsKKwkJc3RydWN0IGhzZl9sb2FkX2hlYWRlcl9hcHAgX19s b2FkX2FwcHNbQUNSX1IzNTJfTUFYX0FQUFNdOworCX07CisKKwkvKiBIUyBGVyAtIHVubG9jayBX UFIgcmVnaW9uIChkR1BVIG9ubHkpICovCisJc3RydWN0IG52a21fZ3B1b2JqICp1bmxvYWRfYmxv YjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyIHVubG9hZF9ibF9oZWFkZXI7 CisJCXN0cnVjdCBoc2ZfbG9hZF9oZWFkZXJfYXBwIF9fdW5sb2FkX2FwcHNbQUNSX1IzNTJfTUFY X0FQUFNdOworCX07CisKKwkvKiBIUyBib290bG9hZGVyICovCisJdm9pZCAqaHNibF9ibG9iOwor CisJLyogTFMgRldzLCB0byBiZSBsb2FkZWQgYnkgdGhlIEhTIEFDUiAqLworCXN0cnVjdCBudmtt X2dwdW9iaiAqbHNfYmxvYjsKKworCS8qIEZpcm13YXJlIGFscmVhZHkgbG9hZGVkPyAqLworCWJv b2wgZmlybXdhcmVfb2s7CisKKwkvKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiBhbGwg bWFuYWdlZCBmYWxjb25zICovCisJZW51bSB7CisJCS8qIEluIG5vbi1zZWN1cmUgc3RhdGUsIG5v IGZpcm13YXJlIGxvYWRlZCwgbm8gcHJpdmlsZWdlcyovCisJCU5PTl9TRUNVUkUgPSAwLAorCQkv KiBJbiBsb3ctc2VjdXJlIG1vZGUgYW5kIHJlYWR5IHRvIGJlIHN0YXJ0ZWQgKi8KKwkJUkVTRVQs CisJCS8qIEluIGxvdy1zZWN1cmUgbW9kZSBhbmQgcnVubmluZyAqLworCQlSVU5OSU5HLAorCX0g ZmFsY29uX3N0YXRlW05WS01fRkFMQ09OX0VORF07Cit9OworI2RlZmluZSBudmttX2Fjcl9yMzUy KGFjcikgY29udGFpbmVyX29mKGFjciwgc3RydWN0IG52a21fYWNyX3IzNTIsIGJhc2UpCisKK3N0 cnVjdCBudmttX2FjciAqX252a21fYWNyX3IzNTJfbmV3KGNvbnN0IHN0cnVjdCBudmttX2Fjcl9y MzUyX2Z1bmMgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvbnZrbS9zdWJk ZXYvc2VjYm9vdC9hY3JfcjM2MS5jIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9h Y3JfcjM2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjVlZGJj NjZlMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9v dC9hY3JfcjM2MS5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LCBOVklESUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq LworCisjaW5jbHVkZSAiYWNyX3IzNTIuaCIKKyNpbmNsdWRlICJsc191Y29kZS5oIgorCisvKioK KyAqIHN0cnVjdCBhY3JfcjM2MV9mbGNuX2JsX2Rlc2MgLSBETUVNIGJvb3Rsb2FkZXIgZGVzY3Jp cHRvcgorICogQHNpZ25hdHVyZToJCTE2QiBzaWduYXR1cmUgZm9yIHNlY3VyZSBjb2RlLiAwcyBp ZiBubyBzZWN1cmUgY29kZQorICogQGN0eF9kbWE6CQlETUEgY29udGV4dCB0byBiZSB1c2VkIGJ5 IEJMIHdoaWxlIGxvYWRpbmcgY29kZS9kYXRhCisgKiBAY29kZV9kbWFfYmFzZToJMjU2Qi1hbGln bmVkIFBoeXNpY2FsIEZCIEFkZHJlc3Mgd2hlcmUgY29kZSBpcyBsb2NhdGVkCisgKgkJCShmYWxj b24ncyAkeGNiYXNlIHJlZ2lzdGVyKQorICogQG5vbl9zZWNfY29kZV9vZmY6CW9mZnNldCBmcm9t IGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIG5vbi1zZWN1cmUgY29kZSBpcworICogICAgICAgICAg ICAgICAgICAgICAgbG9jYXRlZC4gVGhlIG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1NiB0 byBoZWxwIHBlcmYKKyAqIEBub25fc2VjX2NvZGVfc2l6ZToJdGhlIHNpemUgb2YgdGhlIG5vblNl Y3VyZSBjb2RlIHBhcnQuCisgKiBAc2VjX2NvZGVfb2ZmOglvZmZzZXQgZnJvbSBjb2RlX2RtYV9i YXNlIHdoZXJlIHRoZSBzZWN1cmUgY29kZSBpcworICogICAgICAgICAgICAgICAgICAgICAgbG9j YXRlZC4gVGhlIG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1NiB0byBoZWxwIHBlcmYKKyAq IEBzZWNfY29kZV9zaXplOglvZmZzZXQgZnJvbSBjb2RlX2RtYV9iYXNlIHdoZXJlIHRoZSBzZWN1 cmUgY29kZSBpcworICogICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4gVGhlIG9mZnNldCBt dXN0IGJlIG11bHRpcGxlIG9mIDI1NiB0byBoZWxwIHBlcmYKKyAqIEBjb2RlX2VudHJ5X3BvaW50 Ogljb2RlIGVudHJ5IHBvaW50IHdoaWNoIHdpbGwgYmUgaW52b2tlZCBieSBCTCBhZnRlcgorICog ICAgICAgICAgICAgICAgICAgICAgY29kZSBpcyBsb2FkZWQuCisgKiBAZGF0YV9kbWFfYmFzZToJ MjU2QiBhbGlnbmVkIFBoeXNpY2FsIEZCIEFkZHJlc3Mgd2hlcmUgZGF0YSBpcyBsb2NhdGVkLgor ICoJCQkoZmFsY29uJ3MgJHhkYmFzZSByZWdpc3RlcikKKyAqIEBkYXRhX3NpemU6CQlzaXplIG9m IGRhdGEgYmxvY2suIFNob3VsZCBiZSBtdWx0aXBsZSBvZiAyNTZCCisgKgorICogU3RydWN0dXJl IHVzZWQgYnkgdGhlIGJvb3Rsb2FkZXIgdG8gbG9hZCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gVGhp cyBoYXMKKyAqIHRvIGJlIGZpbGxlZCBieSBob3N0IGFuZCBjb3BpZWQgaW50byBETUVNIGF0IG9m ZnNldCBwcm92aWRlZCBpbiB0aGUKKyAqIGhzZmxjbl9ibF9kZXNjLmJsX2Rlc2NfZG1lbV9sb2Fk X29mZi4KKyAqLworc3RydWN0IGFjcl9yMzYxX2ZsY25fYmxfZGVzYyB7CisJdTMyIHJlc2VydmVk WzRdOworCXUzMiBzaWduYXR1cmVbNF07CisJdTMyIGN0eF9kbWE7CisJc3RydWN0IGZsY25fdTY0 IGNvZGVfZG1hX2Jhc2U7CisJdTMyIG5vbl9zZWNfY29kZV9vZmY7CisJdTMyIG5vbl9zZWNfY29k ZV9zaXplOworCXUzMiBzZWNfY29kZV9vZmY7CisJdTMyIHNlY19jb2RlX3NpemU7CisJdTMyIGNv ZGVfZW50cnlfcG9pbnQ7CisJc3RydWN0IGZsY25fdTY0IGRhdGFfZG1hX2Jhc2U7CisJdTMyIGRh dGFfc2l6ZTsKK307CisKK3N0YXRpYyB2b2lkCithY3JfcjM2MV9nZW5lcmF0ZV9sc19ibF9kZXNj KGNvbnN0IHN0cnVjdCBudmttX2FjciAqYWNyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbHNfdWNv ZGVfaW1nICppbWcsIHU2NCB3cHJfYWRkciwKKwkJCSAgICAgdm9pZCAqX2Rlc2MpCit7CisJc3Ry dWN0IGFjcl9yMzYxX2ZsY25fYmxfZGVzYyAqZGVzYyA9IF9kZXNjOworCWNvbnN0IHN0cnVjdCBs c191Y29kZV9pbWdfZGVzYyAqcGRlc2MgPSAmaW1nLT51Y29kZV9kZXNjOworCXU2NCBiYXNlOwor CisJYmFzZSA9IHdwcl9hZGRyICsgaW1nLT5sc2JfaGVhZGVyLnVjb2RlX29mZiArIHBkZXNjLT5h cHBfc3RhcnRfb2Zmc2V0OworCisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOworCWRl c2MtPmN0eF9kbWEgPSBGQUxDT05fRE1BSURYX1VDT0RFOworCWRlc2MtPmNvZGVfZG1hX2Jhc2Uu bG8gPSBsb3dlcl8zMl9iaXRzKAorCQkJCSAoYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29k ZV9vZmZzZXQpKTsKKwlkZXNjLT5jb2RlX2RtYV9iYXNlLmhpID0gdXBwZXJfMzJfYml0cygKKwkJ CQkgKGJhc2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0KSk7CisJZGVzYy0+bm9u X3NlY19jb2RlX3NpemUgPSBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfc2l6ZTsKKwlkZXNjLT5k YXRhX2RtYV9iYXNlLmxvID0gbG93ZXJfMzJfYml0cygKKwkJCQkgKGJhc2UgKyBwZGVzYy0+YXBw X3Jlc2lkZW50X2RhdGFfb2Zmc2V0KSk7CisJZGVzYy0+ZGF0YV9kbWFfYmFzZS5oaSA9IHVwcGVy XzMyX2JpdHMoCisJCQkJIChiYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkp OworCWRlc2MtPmRhdGFfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplOworCWRl c2MtPmNvZGVfZW50cnlfcG9pbnQgPSBwZGVzYy0+YXBwX2ltZW1fZW50cnk7Cit9CisKK3N0YXRp YyB2b2lkCithY3JfcjM2MV9nZW5lcmF0ZV9obF9ibF9kZXNjKGNvbnN0IHN0cnVjdCBoc2ZfbG9h ZF9oZWFkZXIgKmhkciwgdm9pZCAqX2JsX2Rlc2MsCisJCQkgICAgdTY0IG9mZnNldCkKK3sKKwlz dHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjICpibF9kZXNjID0gX2JsX2Rlc2M7CisKKwltZW1z ZXQoYmxfZGVzYywgMCwgc2l6ZW9mKCpibF9kZXNjKSk7CisJYmxfZGVzYy0+Y3R4X2RtYSA9IEZB TENPTl9ETUFJRFhfVklSVDsKKwlibF9kZXNjLT5ub25fc2VjX2NvZGVfb2ZmID0gaGRyLT5ub25f c2VjX2NvZGVfb2ZmOworCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9zaXplID0gaGRyLT5ub25fc2Vj X2NvZGVfc2l6ZTsKKwlibF9kZXNjLT5zZWNfY29kZV9vZmYgPSBoZHItPmFwcFswXS5zZWNfY29k ZV9vZmY7CisJYmxfZGVzYy0+c2VjX2NvZGVfc2l6ZSA9IGhkci0+YXBwWzBdLnNlY19jb2RlX3Np emU7CisJYmxfZGVzYy0+Y29kZV9lbnRyeV9wb2ludCA9IDA7CisJYmxfZGVzYy0+Y29kZV9kbWFf YmFzZSA9IHU2NF90b19mbGNuNjQob2Zmc2V0KTsKKwlibF9kZXNjLT5kYXRhX2RtYV9iYXNlID0g dTY0X3RvX2ZsY242NChvZmZzZXQgKyBoZHItPmRhdGFfZG1hX2Jhc2UpOworCWJsX2Rlc2MtPmRh dGFfc2l6ZSA9IGhkci0+ZGF0YV9zaXplOworfQorCitjb25zdCBzdHJ1Y3QgbnZrbV9hY3JfcjM1 Ml9sc19mdW5jCithY3JfcjM2MV9sc19mZWNzX2Z1bmMgPSB7CisJLmxvYWQgPSBhY3JfbHNfdWNv ZGVfbG9hZF9mZWNzLAorCS5nZW5lcmF0ZV9ibF9kZXNjID0gYWNyX3IzNjFfZ2VuZXJhdGVfbHNf YmxfZGVzYywKKwkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfcjM2MV9mbGNuX2Js X2Rlc2MpLAorfTsKKworY29uc3Qgc3RydWN0IG52a21fYWNyX3IzNTJfbHNfZnVuYworYWNyX3Iz NjFfbHNfZ3BjY3NfZnVuYyA9IHsKKwkubG9hZCA9IGFjcl9sc191Y29kZV9sb2FkX2dwY2NzLAor CS5nZW5lcmF0ZV9ibF9kZXNjID0gYWNyX3IzNjFfZ2VuZXJhdGVfbHNfYmxfZGVzYywKKwkuYmxf ZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfcjM2MV9mbGNuX2JsX2Rlc2MpLAorfTsKKwor Y29uc3Qgc3RydWN0IG52a21fYWNyX3IzNTJfZnVuYworYWNyX3IzNjFfZnVuYyA9IHsKKwkuZ2Vu ZXJhdGVfaHNfYmxfZGVzYyA9IGFjcl9yMzYxX2dlbmVyYXRlX2hsX2JsX2Rlc2MsCisJLmhzX2Js X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjKSwKKwkubHNf ZnVuYyA9IHsKKwkJW05WS01fRkFMQ09OX0ZFQ1NdID0gJmFjcl9yMzYxX2xzX2ZlY3NfZnVuYywK KwkJW05WS01fRkFMQ09OX0dQQ0NTXSA9ICZhY3JfcjM2MV9sc19ncGNjc19mdW5jLAorCX0sCit9 OworCitzdHJ1Y3QgbnZrbV9hY3IgKgorbnZrbV9hY3JfcjM2MV9uZXcodm9pZCkKK3sKKwlyZXR1 cm4gX252a21fYWNyX3IzNTJfbmV3KCZhY3JfcjM2MV9mdW5jKTsKK30KZGlmZiAtLWdpdCBhL2Ry bS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYmFzZS5jIGIvZHJtL25vdXZlYXUvbnZrbS9z dWJkZXYvc2VjYm9vdC9iYXNlLmMKaW5kZXggZWEzNjg1MTM1OGVhLi42NGU3MGY1MDE2YTEgMTAw NjQ0Ci0tLSBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYmFzZS5jCisrKyBiL2Ry bS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYmFzZS5jCkBAIC0xOSw3ICsxOSw3MCBAQAog ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUgogICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCisKKy8qCisg KiBTZWN1cmUgYm9vdCBpcyB0aGUgcHJvY2VzcyBieSB3aGljaCBOVklESUEtc2lnbmVkIGZpcm13 YXJlIGlzIGxvYWRlZCBpbnRvCisgKiBzb21lIG9mIHRoZSBmYWxjb25zIG9mIGEgR1BVLiBGb3Ig cHJvZHVjdGlvbiBkZXZpY2VzIHRoaXMgaXMgdGhlIG9ubHkgd2F5CisgKiBmb3IgdGhlIGZpcm13 YXJlIHRvIGFjY2VzcyB1c2VmdWwgKGJ1dCBzZW5zaXRpdmUpIHJlZ2lzdGVycy4KKyAqCisgKiBB IEZhbGNvbiBtaWNyb3Byb2Nlc3NvciBzdXBwb3J0aW5nIGFkdmFuY2VkIHNlY3VyaXR5IG1vZGVz IGNhbiBydW4gaW4gb25lIG9mCisgKiB0aHJlZSBtb2RlczoKKyAqCisgKiAtIE5vbi1zZWN1cmUg KE5TKS4gSW4gdGhpcyBtb2RlLCBmdW5jdGlvbmFsaXR5IGlzIHNpbWlsYXIgdG8gRmFsY29uCisg KiAgIGFyY2hpdGVjdHVyZXMgYmVmb3JlIHNlY3VyaXR5IG1vZGVzIHdlcmUgaW50cm9kdWNlZCAo cHJlLU1heHdlbGwpLCBidXQKKyAqICAgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkLiBJbiBwYXJ0 aWN1bGFyLCBjZXJ0YWluIHJlZ2lzdGVycyBtYXkgYmUKKyAqICAgaW5hY2Nlc3NpYmxlIGZvciBy ZWFkcyBhbmQvb3Igd3JpdGVzLCBhbmQgcGh5c2ljYWwgbWVtb3J5IGFjY2VzcyBtYXkgYmUKKyAq ICAgZGlzYWJsZWQgKG9uIGNlcnRhaW4gRmFsY29uIGluc3RhbmNlcykuIFRoaXMgaXMgdGhlIG9u bHkgcG9zc2libGUgbW9kZSB0aGF0CisgKiAgIGNhbiBiZSB1c2VkIGlmIHlvdSBkb24ndCBoYXZl IG1pY3JvY29kZSBjcnlwdG9ncmFwaGljYWxseSBzaWduZWQgYnkgTlZJRElBLgorICoKKyAqIC0g SGVhdnkgU2VjdXJlIChIUykuIEluIHRoaXMgbW9kZSwgdGhlIG1pY3JvcHJvY2Vzc29yIGlzIGEg YmxhY2sgYm94IC0gaXQncworICogICBub3QgcG9zc2libGUgdG8gcmVhZCBvciB3cml0ZSBhbnkg RmFsY29uIGludGVybmFsIHN0YXRlIG9yIEZhbGNvbiByZWdpc3RlcnMKKyAqICAgZnJvbSBvdXRz aWRlIHRoZSBGYWxjb24gKGZvciBleGFtcGxlLCBmcm9tIHRoZSBob3N0IHN5c3RlbSkuIFRoZSBv bmx5IHdheQorICogICB0byBlbmFibGUgdGhpcyBtb2RlIGlzIGJ5IGxvYWRpbmcgbWljcm9jb2Rl IHRoYXQgaGFzIGJlZW4gc2lnbmVkIGJ5IE5WSURJQS4KKyAqICAgKFRoZSBsb2FkaW5nIHByb2Nl c3MgaW52b2x2ZXMgdGFnZ2luZyB0aGUgSU1FTSBibG9jayBhcyBzZWN1cmUsIHdyaXRpbmcgdGhl CisgKiAgIHNpZ25hdHVyZSBpbnRvIGEgRmFsY29uIHJlZ2lzdGVyLCBhbmQgc3RhcnRpbmcgZXhl Y3V0aW9uLiBUaGUgaGFyZHdhcmUgd2lsbAorICogICB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlLCBh bmQgaWYgdmFsaWQsIGdyYW50IEhTIHByaXZpbGVnZXMuKQorICoKKyAqIC0gTGlnaHQgU2VjdXJl IChMUykuIEluIHRoaXMgbW9kZSwgdGhlIG1pY3JvcHJvY2Vzc29yIGhhcyBtb3JlIHByaXZpbGVn ZXMKKyAqICAgdGhhbiBOUyBidXQgZmV3ZXIgdGhhbiBIUy4gU29tZSBvZiB0aGUgbWljcm9wcm9j ZXNzb3Igc3RhdGUgaXMgdmlzaWJsZSB0bworICogICBob3N0IHNvZnR3YXJlIHRvIGVhc2UgZGVi dWdnaW5nLiBUaGUgb25seSB3YXkgdG8gZW5hYmxlIHRoaXMgbW9kZSBpcyBieSBIUworICogICBt aWNyb2NvZGUgZW5hYmxpbmcgTFMgbW9kZS4gU29tZSBwcml2aWxlZ2VzIGF2YWlsYWJsZSB0byBI UyBtb2RlIGFyZSBub3QKKyAqICAgYXZhaWxhYmxlIGhlcmUuIExTIG1vZGUgaXMgaW50cm9kdWNl ZCBpbiBHTTIweC4KKyAqCisgKiBTZWN1cmUgYm9vdCBjb25zaXN0cyBpbiB0ZW1wb3JhcmlseSBz d2l0Y2hpbmcgYSBIUy1jYXBhYmxlIGZhbGNvbiAodHlwaWNhbGx5CisgKiBQTVUpIGludG8gSFMg bW9kZSBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgTFMgZmlybXdhcmVzIG9mIG1hbmFnZWQgZmFs Y29ucywKKyAqIGxvYWQgdGhlbSwgYW5kIHN3aXRjaCBtYW5hZ2VkIGZhbGNvbnMgaW50byBMUyBt b2RlLiBPbmNlIHNlY3VyZSBib290CisgKiBjb21wbGV0ZXMsIG5vIGZhbGNvbiByZW1haW5zIGlu IEhTIG1vZGUuCisgKgorICogU2VjdXJlIGJvb3QgcmVxdWlyZXMgYSB3cml0ZS1wcm90ZWN0ZWQg bWVtb3J5IHJlZ2lvbiAoV1BSKSB3aGljaCBjYW4gb25seSBiZQorICogd3JpdHRlbiBieSB0aGUg c2VjdXJlIGZhbGNvbi4gT24gZEdQVSwgdGhlIGRyaXZlciBzZXRzIHVwIHRoZSBXUFIgcmVnaW9u IGluCisgKiB2aWRlbyBtZW1vcnkuIE9uIFRlZ3JhLCBpdCBpcyBzZXQgdXAgYnkgdGhlIGJvb3Rs b2FkZXIgYW5kIGl0cyBsb2NhdGlvbiBhbmQKKyAqIHNpemUgd3JpdHRlbiBpbnRvIG1lbW9yeSBj b250cm9sbGVyIHJlZ2lzdGVycy4KKyAqCisgKiBUaGUgc2VjdXJlIGJvb3QgcHJvY2VzcyB0YWtl cyBwbGFjZSBhcyBmb2xsb3dzOgorICoKKyAqIDEpIEEgTFMgYmxvYiBpcyBjb25zdHJ1Y3RlZCB0 aGF0IGNvbnRhaW5zIGFsbCB0aGUgTFMgZmlybXdhcmVzIHdlIHdhbnQgdG8KKyAqICAgIGxvYWQs IGFsb25nIHdpdGggdGhlaXIgc2lnbmF0dXJlcyBhbmQgYm9vdGxvYWRlcnMuCisgKgorICogMikg QSBIUyBibG9iIChhbHNvIGNhbGxlZCBBQ1IpIGlzIGNyZWF0ZWQgdGhhdCBjb250YWlucyB0aGUg c2lnbmVkIEhTCisgKiAgICBmaXJtd2FyZSBpbiBjaGFyZ2Ugb2YgbG9hZGluZyB0aGUgTFMgZmly bXdhcmVzIGludG8gdGhlaXIgcmVzcGVjdGl2ZQorICogICAgZmFsY29ucy4KKyAqCisgKiAzKSBU aGUgSFMgYmxvYiBpcyBsb2FkZWQgKHZpYSBpdHMgb3duIGJvb3Rsb2FkZXIpIGFuZCBleGVjdXRl ZCBvbiB0aGUKKyAqICAgIEhTLWNhcGFibGUgZmFsY29uLiBJdCBhdXRoZW50aWNhdGVzIGl0c2Vs Ziwgc3dpdGNoZXMgdGhlIHNlY3VyZSBmYWxjb24gdG8KKyAqICAgIEhTIG1vZGUgYW5kIHNldHVw IHRoZSBXUFIgcmVnaW9uIGFyb3VuZCB0aGUgTFMgYmxvYiAoZEdQVSkgb3IgY29waWVzIHRoZQor ICogICAgTFMgYmxvYiBpbnRvIHRoZSBXUFIgcmVnaW9uIChUZWdyYSkuCisgKgorICogNCkgVGhl IExTIGJsb2IgaXMgbm93IHNlY3VyZSBmcm9tIGFsbCBleHRlcm5hbCB0YW1wZXJpbmcuIFRoZSBI UyBmYWxjb24KKyAqICAgIGNoZWNrcyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgTFMgZmlybXdhcmVz IGFuZCwgaWYgdmFsaWQsIHN3aXRjaGVzIHRoZQorICogICAgbWFuYWdlZCBmYWxjb25zIHRvIExT IG1vZGUgYW5kIG1ha2VzIHRoZW0gcmVhZHkgdG8gcnVuIHRoZSBMUyBmaXJtd2FyZS4KKyAqCisg KiA1KSBUaGUgbWFuYWdlZCBmYWxjb25zIHJlbWFpbiBpbiBMUyBtb2RlIGFuZCBjYW4gYmUgc3Rh cnRlZC4KKyAqCisgKi8KKwogI2luY2x1ZGUgInByaXYuaCIKKyNpbmNsdWRlICJhY3IuaCIKIAog I2luY2x1ZGUgPGNvcmUvZmFsY29uLmg+CiAjaW5jbHVkZSA8c3ViZGV2L21jLmg+CkBAIC0xNTQs MTIgKzIxNywxMiBAQCBpbnQKIG52a21fc2VjYm9vdF9yZXNldChzdHJ1Y3QgbnZrbV9zZWNib290 ICpzYiwgdTMyIGZhbGNvbikKIHsKIAkvKiBVbm1hbmFnZWQgZmFsY29uPyAqLwotCWlmICghKEJJ VChmYWxjb24pICYgc2ItPmZ1bmMtPm1hbmFnZWRfZmFsY29ucykpIHsKKwlpZiAoIShCSVQoZmFs Y29uKSAmIHNiLT5tYW5hZ2VkX2ZhbGNvbnMpKSB7CiAJCW52a21fZXJyb3IoJnNiLT5zdWJkZXYs ICJjYW5ub3QgcmVzZXQgdW5tYW5hZ2VkIGZhbGNvbiFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsK IAl9CiAKLQlyZXR1cm4gc2ItPmZ1bmMtPnJlc2V0KHNiLCBmYWxjb24pOworCXJldHVybiBzYi0+ YWNyLT5mdW5jLT5yZXNldChzYi0+YWNyLCBzYiwgZmFsY29uKTsKIH0KIAogLyoqCkBAIC0xNjks MjQgKzIzMiwyNCBAQCBpbnQKIG52a21fc2VjYm9vdF9zdGFydChzdHJ1Y3QgbnZrbV9zZWNib290 ICpzYiwgdTMyIGZhbGNvbikKIHsKIAkvKiBVbm1hbmFnZWQgZmFsY29uPyAqLwotCWlmICghKEJJ VChmYWxjb24pICYgc2ItPmZ1bmMtPm1hbmFnZWRfZmFsY29ucykpIHsKKwlpZiAoIShCSVQoZmFs Y29uKSAmIHNiLT5tYW5hZ2VkX2ZhbGNvbnMpKSB7CiAJCW52a21fZXJyb3IoJnNiLT5zdWJkZXYs ICJjYW5ub3Qgc3RhcnQgdW5tYW5hZ2VkIGZhbGNvbiFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsK IAl9CiAKLQlyZXR1cm4gc2ItPmZ1bmMtPnN0YXJ0KHNiLCBmYWxjb24pOworCXJldHVybiBzYi0+ YWNyLT5mdW5jLT5zdGFydChzYi0+YWNyLCBzYiwgZmFsY29uKTsKIH0KIAogLyoqCiAgKiBudmtt X3NlY2Jvb3RfaXNfbWFuYWdlZCgpIC0gY2hlY2sgd2hldGhlciBhIGdpdmVuIGZhbGNvbiBpcyBz ZWN1cmVseS1tYW5hZ2VkCiAgKi8KIGJvb2wKLW52a21fc2VjYm9vdF9pc19tYW5hZ2VkKHN0cnVj dCBudmttX3NlY2Jvb3QgKnNlY2Jvb3QsIGVudW0gbnZrbV9mYWxjb25pZHggZmlkKQorbnZrbV9z ZWNib290X2lzX21hbmFnZWQoc3RydWN0IG52a21fc2VjYm9vdCAqc2IsIGVudW0gbnZrbV9mYWxj b25pZHggZmlkKQogewotCWlmICghc2VjYm9vdCkKKwlpZiAoIXNiKQogCQlyZXR1cm4gZmFsc2U7 CiAKLQlyZXR1cm4gc2VjYm9vdC0+ZnVuYy0+bWFuYWdlZF9mYWxjb25zICYgQklUKGZpZCk7CisJ cmV0dXJuIHNiLT5tYW5hZ2VkX2ZhbGNvbnMgJiBCSVQoZmlkKTsKIH0KIAogc3RhdGljIGludApA QCAtMjM5LDE3ICszMDIsMjAgQEAgbnZrbV9zZWNib290ID0gewogfTsKIAogaW50Ci1udmttX3Nl Y2Jvb3RfY3Rvcihjb25zdCBzdHJ1Y3QgbnZrbV9zZWNib290X2Z1bmMgKmZ1bmMsCitudmttX3Nl Y2Jvb3RfY3Rvcihjb25zdCBzdHJ1Y3QgbnZrbV9zZWNib290X2Z1bmMgKmZ1bmMsIHN0cnVjdCBu dmttX2FjciAqYWNyLAogCQkgIHN0cnVjdCBudmttX2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgs Ci0JCSAgc3RydWN0IG52a21fc2VjYm9vdCAqc2IpCisJCSAgdW5zaWduZWQgbG9uZyBtYW5hZ2Vk X2ZhbGNvbnMsIHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiKQogewogCXVuc2lnbmVkIGxvbmcgaWQ7 CisJdTMyIHZhbDsKIAogCW52a21fc3ViZGV2X2N0b3IoJm52a21fc2VjYm9vdCwgZGV2aWNlLCBp bmRleCwgJnNiLT5zdWJkZXYpOwogCXNiLT5mdW5jID0gZnVuYzsKKwlzYi0+YWNyID0gYWNyOwor CWFjci0+c3ViZGV2ID0gJnNiLT5zdWJkZXY7CiAKIAkvKiBzZXR1cCB0aGUgcGVyZm9ybWluZyBm YWxjb24ncyBiYXNlIGFkZHJlc3MgYW5kIG1hc2tzICovCi0Jc3dpdGNoIChmdW5jLT5ib290X2Zh bGNvbikgeworCXN3aXRjaCAoYWNyLT5mdW5jLT5ib290X2ZhbGNvbikgewogCWNhc2UgTlZLTV9G QUxDT05fUE1VOgogCQlzYi0+ZGV2aWR4ID0gTlZLTV9TVUJERVZfUE1VOwogCQlzYi0+YmFzZSA9 IDB4MTBhMDAwOwpAQCAtMjU5LDggKzMyNSwxNSBAQCBudmttX3NlY2Jvb3RfY3Rvcihjb25zdCBz dHJ1Y3QgbnZrbV9zZWNib290X2Z1bmMgKmZ1bmMsCiAJCXJldHVybiAtRUlOVkFMOwogCX07CiAK KwkvKiBJcyB0aGUgZmFsY29uIGluIGRlYnVnIG1vZGU/ICovCisJdmFsID0gbnZrbV9yZDMyKHNi LT5zdWJkZXYuZGV2aWNlLCBzYi0+YmFzZSArIDB4YzA4KTsKKwlzYi0+ZGVidWdfbW9kZSA9ICh2 YWwgPj4gMjApICYgMHgxOworCisJdmFsID0gbnZrbV9yZDMyKGRldmljZSwgc2ItPmJhc2UgKyAw eDEwOCk7CisKKwlzYi0+bWFuYWdlZF9mYWxjb25zID0gbWFuYWdlZF9mYWxjb25zOwogCW52a21f ZGVidWcoJnNiLT5zdWJkZXYsICJzZWN1cmVseSBtYW5hZ2VkIGZhbGNvbnM6XG4iKTsKLQlmb3Jf ZWFjaF9zZXRfYml0KGlkLCAmc2ItPmZ1bmMtPm1hbmFnZWRfZmFsY29ucywgTlZLTV9GQUxDT05f RU5EKQorCWZvcl9lYWNoX3NldF9iaXQoaWQsICZzYi0+bWFuYWdlZF9mYWxjb25zLCBOVktNX0ZB TENPTl9FTkQpCiAJCW52a21fZGVidWcoJnNiLT5zdWJkZXYsICItICVzXG4iLCBudmttX2ZhbGNv bl9uYW1lW2lkXSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20v c3ViZGV2L3NlY2Jvb3QvZ20yMDAuYyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv Z20yMDAuYwppbmRleCA2ZjQ1NzA2Zjg1OTguLjc1ZjdkMzgxYTBjOSAxMDA2NDQKLS0tIGEvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jCisrKyBiL2RybS9ub3V2ZWF1L252 a20vc3ViZGV2L3NlY2Jvb3QvZ20yMDAuYwpAQCAtMjAsMTAzMCArMjAsMjAgQEAKICAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0vKgotICogU2VjdXJlIGJvb3QgaXMgdGhlIHBy b2Nlc3MgYnkgd2hpY2ggTlZJRElBLXNpZ25lZCBmaXJtd2FyZSBpcyBsb2FkZWQgaW50bwotICog c29tZSBvZiB0aGUgZmFsY29ucyBvZiBhIEdQVS4gRm9yIHByb2R1Y3Rpb24gZGV2aWNlcyB0aGlz IGlzIHRoZSBvbmx5IHdheQotICogZm9yIHRoZSBmaXJtd2FyZSB0byBhY2Nlc3MgdXNlZnVsIChi dXQgc2Vuc2l0aXZlKSByZWdpc3RlcnMuCi0gKgotICogQSBGYWxjb24gbWljcm9wcm9jZXNzb3Ig c3VwcG9ydGluZyBhZHZhbmNlZCBzZWN1cml0eSBtb2RlcyBjYW4gcnVuIGluIG9uZSBvZgotICog dGhyZWUgbW9kZXM6Ci0gKgotICogLSBOb24tc2VjdXJlIChOUykuIEluIHRoaXMgbW9kZSwgZnVu Y3Rpb25hbGl0eSBpcyBzaW1pbGFyIHRvIEZhbGNvbgotICogICBhcmNoaXRlY3R1cmVzIGJlZm9y ZSBzZWN1cml0eSBtb2RlcyB3ZXJlIGludHJvZHVjZWQgKHByZS1NYXh3ZWxsKSwgYnV0Ci0gKiAg IGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZC4gSW4gcGFydGljdWxhciwgY2VydGFpbiByZWdpc3Rl cnMgbWF5IGJlCi0gKiAgIGluYWNjZXNzaWJsZSBmb3IgcmVhZHMgYW5kL29yIHdyaXRlcywgYW5k IHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MgbWF5IGJlCi0gKiAgIGRpc2FibGVkIChvbiBjZXJ0YWlu IEZhbGNvbiBpbnN0YW5jZXMpLiBUaGlzIGlzIHRoZSBvbmx5IHBvc3NpYmxlIG1vZGUgdGhhdAot ICogICBjYW4gYmUgdXNlZCBpZiB5b3UgZG9uJ3QgaGF2ZSBtaWNyb2NvZGUgY3J5cHRvZ3JhcGhp Y2FsbHkgc2lnbmVkIGJ5IE5WSURJQS4KLSAqCi0gKiAtIEhlYXZ5IFNlY3VyZSAoSFMpLiBJbiB0 aGlzIG1vZGUsIHRoZSBtaWNyb3Byb2Nlc3NvciBpcyBhIGJsYWNrIGJveCAtIGl0J3MKLSAqICAg bm90IHBvc3NpYmxlIHRvIHJlYWQgb3Igd3JpdGUgYW55IEZhbGNvbiBpbnRlcm5hbCBzdGF0ZSBv ciBGYWxjb24gcmVnaXN0ZXJzCi0gKiAgIGZyb20gb3V0c2lkZSB0aGUgRmFsY29uIChmb3IgZXhh bXBsZSwgZnJvbSB0aGUgaG9zdCBzeXN0ZW0pLiBUaGUgb25seSB3YXkKLSAqICAgdG8gZW5hYmxl IHRoaXMgbW9kZSBpcyBieSBsb2FkaW5nIG1pY3JvY29kZSB0aGF0IGhhcyBiZWVuIHNpZ25lZCBi eSBOVklESUEuCi0gKiAgIChUaGUgbG9hZGluZyBwcm9jZXNzIGludm9sdmVzIHRhZ2dpbmcgdGhl IElNRU0gYmxvY2sgYXMgc2VjdXJlLCB3cml0aW5nIHRoZQotICogICBzaWduYXR1cmUgaW50byBh IEZhbGNvbiByZWdpc3RlciwgYW5kIHN0YXJ0aW5nIGV4ZWN1dGlvbi4gVGhlIGhhcmR3YXJlIHdp bGwKLSAqICAgdmFsaWRhdGUgdGhlIHNpZ25hdHVyZSwgYW5kIGlmIHZhbGlkLCBncmFudCBIUyBw cml2aWxlZ2VzLikKLSAqCi0gKiAtIExpZ2h0IFNlY3VyZSAoTFMpLiBJbiB0aGlzIG1vZGUsIHRo ZSBtaWNyb3Byb2Nlc3NvciBoYXMgbW9yZSBwcml2aWxlZ2VzCi0gKiAgIHRoYW4gTlMgYnV0IGZl d2VyIHRoYW4gSFMuIFNvbWUgb2YgdGhlIG1pY3JvcHJvY2Vzc29yIHN0YXRlIGlzIHZpc2libGUg dG8KLSAqICAgaG9zdCBzb2Z0d2FyZSB0byBlYXNlIGRlYnVnZ2luZy4gVGhlIG9ubHkgd2F5IHRv IGVuYWJsZSB0aGlzIG1vZGUgaXMgYnkgSFMKLSAqICAgbWljcm9jb2RlIGVuYWJsaW5nIExTIG1v ZGUuIFNvbWUgcHJpdmlsZWdlcyBhdmFpbGFibGUgdG8gSFMgbW9kZSBhcmUgbm90Ci0gKiAgIGF2 YWlsYWJsZSBoZXJlLiBMUyBtb2RlIGlzIGludHJvZHVjZWQgaW4gR00yMHguCi0gKgotICogU2Vj dXJlIGJvb3QgY29uc2lzdHMgaW4gdGVtcG9yYXJpbHkgc3dpdGNoaW5nIGEgSFMtY2FwYWJsZSBm YWxjb24gKHR5cGljYWxseQotICogUE1VKSBpbnRvIEhTIG1vZGUgaW4gb3JkZXIgdG8gdmFsaWRh dGUgdGhlIExTIGZpcm13YXJlcyBvZiBtYW5hZ2VkIGZhbGNvbnMsCi0gKiBsb2FkIHRoZW0sIGFu ZCBzd2l0Y2ggbWFuYWdlZCBmYWxjb25zIGludG8gTFMgbW9kZS4gT25jZSBzZWN1cmUgYm9vdAot ICogY29tcGxldGVzLCBubyBmYWxjb24gcmVtYWlucyBpbiBIUyBtb2RlLgotICoKLSAqIFNlY3Vy ZSBib290IHJlcXVpcmVzIGEgd3JpdGUtcHJvdGVjdGVkIG1lbW9yeSByZWdpb24gKFdQUikgd2hp Y2ggY2FuIG9ubHkgYmUKLSAqIHdyaXR0ZW4gYnkgdGhlIHNlY3VyZSBmYWxjb24uIE9uIGRHUFUs IHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgV1BSIHJlZ2lvbiBpbgotICogdmlkZW8gbWVtb3J5LiBP biBUZWdyYSwgaXQgaXMgc2V0IHVwIGJ5IHRoZSBib290bG9hZGVyIGFuZCBpdHMgbG9jYXRpb24g YW5kCi0gKiBzaXplIHdyaXR0ZW4gaW50byBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMuCi0g KgotICogVGhlIHNlY3VyZSBib290IHByb2Nlc3MgdGFrZXMgcGxhY2UgYXMgZm9sbG93czoKLSAq Ci0gKiAxKSBBIExTIGJsb2IgaXMgY29uc3RydWN0ZWQgdGhhdCBjb250YWlucyBhbGwgdGhlIExT IGZpcm13YXJlcyB3ZSB3YW50IHRvCi0gKiAgICBsb2FkLCBhbG9uZyB3aXRoIHRoZWlyIHNpZ25h dHVyZXMgYW5kIGJvb3Rsb2FkZXJzLgotICoKLSAqIDIpIEEgSFMgYmxvYiAoYWxzbyBjYWxsZWQg QUNSKSBpcyBjcmVhdGVkIHRoYXQgY29udGFpbnMgdGhlIHNpZ25lZCBIUwotICogICAgZmlybXdh cmUgaW4gY2hhcmdlIG9mIGxvYWRpbmcgdGhlIExTIGZpcm13YXJlcyBpbnRvIHRoZWlyIHJlc3Bl Y3RpdmUKLSAqICAgIGZhbGNvbnMuCi0gKgotICogMykgVGhlIEhTIGJsb2IgaXMgbG9hZGVkICh2 aWEgaXRzIG93biBib290bG9hZGVyKSBhbmQgZXhlY3V0ZWQgb24gdGhlCi0gKiAgICBIUy1jYXBh YmxlIGZhbGNvbi4gSXQgYXV0aGVudGljYXRlcyBpdHNlbGYsIHN3aXRjaGVzIHRoZSBzZWN1cmUg ZmFsY29uIHRvCi0gKiAgICBIUyBtb2RlIGFuZCBzZXR1cCB0aGUgV1BSIHJlZ2lvbiBhcm91bmQg dGhlIExTIGJsb2IgKGRHUFUpIG9yIGNvcGllcyB0aGUKLSAqICAgIExTIGJsb2IgaW50byB0aGUg V1BSIHJlZ2lvbiAoVGVncmEpLgotICoKLSAqIDQpIFRoZSBMUyBibG9iIGlzIG5vdyBzZWN1cmUg ZnJvbSBhbGwgZXh0ZXJuYWwgdGFtcGVyaW5nLiBUaGUgSFMgZmFsY29uCi0gKiAgICBjaGVja3Mg dGhlIHNpZ25hdHVyZXMgb2YgdGhlIExTIGZpcm13YXJlcyBhbmQsIGlmIHZhbGlkLCBzd2l0Y2hl cyB0aGUKLSAqICAgIG1hbmFnZWQgZmFsY29ucyB0byBMUyBtb2RlIGFuZCBtYWtlcyB0aGVtIHJl YWR5IHRvIHJ1biB0aGUgTFMgZmlybXdhcmUuCi0gKgotICogNSkgVGhlIG1hbmFnZWQgZmFsY29u cyByZW1haW4gaW4gTFMgbW9kZSBhbmQgY2FuIGJlIHN0YXJ0ZWQuCi0gKgotICovCiAKLSNpbmNs dWRlICJwcml2LmgiCisjaW5jbHVkZSAiYWNyLmgiCisjaW5jbHVkZSAiZ20yMDAuaCIKIAogI2lu Y2x1ZGUgPGNvcmUvZ3B1b2JqLmg+Ci0jaW5jbHVkZSA8Y29yZS9maXJtd2FyZS5oPgogI2luY2x1 ZGUgPHN1YmRldi9mYi5oPgogCiAvKioKLSAqIHN0cnVjdCBmd19iaW5faGVhZGVyIC0gaGVhZGVy IG9mIGZpcm13YXJlIGZpbGVzCi0gKiBAYmluX21hZ2ljOgkJYWx3YXlzIDB4M2IxZDE0ZjAKLSAq IEBiaW5fdmVyOgkJdmVyc2lvbiBvZiB0aGUgYmluIGZvcm1hdAotICogQGJpbl9zaXplOgkJZW50 aXJlIGltYWdlIHNpemUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyCi0gKiBAaGVhZGVyX29mZnNldDoJ b2Zmc2V0IG9mIHRoZSBmaXJtd2FyZS9ib290bG9hZGVyIGhlYWRlciBpbiB0aGUgZmlsZQotICog QGRhdGFfb2Zmc2V0OglvZmZzZXQgb2YgdGhlIGZpcm13YXJlL2Jvb3Rsb2FkZXIgcGF5bG9hZCBp biB0aGUgZmlsZQotICogQGRhdGFfc2l6ZToJCXNpemUgb2YgdGhlIHBheWxvYWQKLSAqCi0gKiBU aGlzIGhlYWRlciBpcyBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEhTIGZpcm13YXJl IGFuZCBIUyBib290bG9hZGVyCi0gKiBmaWxlcywgdG8gZGVzY3JpYmUgd2hlcmUgdGhlIGhlYWRl cnMgYW5kIGRhdGEgY2FuIGJlIGZvdW5kLgotICovCi1zdHJ1Y3QgZndfYmluX2hlYWRlciB7Ci0J dTMyIGJpbl9tYWdpYzsKLQl1MzIgYmluX3ZlcjsKLQl1MzIgYmluX3NpemU7Ci0JdTMyIGhlYWRl cl9vZmZzZXQ7Ci0JdTMyIGRhdGFfb2Zmc2V0OwotCXUzMiBkYXRhX3NpemU7Ci19OwotCi0vKioK LSAqIHN0cnVjdCBmd19ibF9kZXNjIC0gZmlybXdhcmUgYm9vdGxvYWRlciBkZXNjcmlwdG9yCi0g KiBAc3RhcnRfdGFnOgkJc3RhcnRpbmcgdGFnIG9mIGJvb3Rsb2FkZXIKLSAqIEBkZXNjX2RtZW1f bG9hZF9vZmY6CURNRU0gb2Zmc2V0IG9mIGZsY25fYmxfZG1lbV9kZXNjCi0gKiBAY29kZV9vZmY6 CQlvZmZzZXQgb2YgY29kZSBzZWN0aW9uCi0gKiBAY29kZV9zaXplOgkJc2l6ZSBvZiBjb2RlIHNl Y3Rpb24KLSAqIEBkYXRhX29mZjoJCW9mZnNldCBvZiBkYXRhIHNlY3Rpb24KLSAqIEBkYXRhX3Np emU6CQlzaXplIG9mIGRhdGEgc2VjdGlvbgotICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIGVtYmVk ZGVkIGluIGJvb3Rsb2FkZXIgZmlybXdhcmUgZmlsZXMgYXQgdG8gZGVzY3JpYmUgdGhlCi0gKiBJ TUVNIGFuZCBETUVNIGxheW91dCBleHBlY3RlZCBieSB0aGUgYm9vdGxvYWRlci4KLSAqLwotc3Ry dWN0IGZ3X2JsX2Rlc2MgewotCXUzMiBzdGFydF90YWc7Ci0JdTMyIGRtZW1fbG9hZF9vZmY7Ci0J dTMyIGNvZGVfb2ZmOwotCXUzMiBjb2RlX3NpemU7Ci0JdTMyIGRhdGFfb2ZmOwotCXUzMiBkYXRh X3NpemU7Ci19OwotCi0KLS8qKgotICogc3RydWN0IGxzX3Vjb2RlX21nciAtIG1hbmFnZXIgZm9y IGFsbCBMUyBmYWxjb24gZmlybXdhcmVzCi0gKiBAY291bnQ6CW51bWJlciBvZiBtYW5hZ2VkIExT IGZhbGNvbnMKLSAqIEB3cHJfc2l6ZToJc2l6ZSBvZiB0aGUgcmVxdWlyZWQgV1BSIHJlZ2lvbiBp biBieXRlcwotICogQGltZ19saXN0OglsaW5rZWQgbGlzdCBvZiBsc2ZfdWNvZGVfaW1nCi0gKi8K LXN0cnVjdCBsc191Y29kZV9tZ3IgewotCXUxNiBjb3VudDsKLQl1MzIgd3ByX3NpemU7Ci0Jc3Ry dWN0IGxpc3RfaGVhZCBpbWdfbGlzdDsKLX07Ci0KLQotLyoKLSAqCi0gKiBIUyBibG9iIHN0cnVj dHVyZXMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaHNmX2Z3X2hlYWRlciAtIEhTIGZpcm13 YXJlIGRlc2NyaXB0b3IKLSAqIEBzaWdfZGJnX29mZnNldDoJb2Zmc2V0IG9mIHRoZSBkZWJ1ZyBz aWduYXR1cmUKLSAqIEBzaWdfZGJnX3NpemU6CXNpemUgb2YgdGhlIGRlYnVnIHNpZ25hdHVyZQot ICogQHNpZ19wcm9kX29mZnNldDoJb2Zmc2V0IG9mIHRoZSBwcm9kdWN0aW9uIHNpZ25hdHVyZQot ICogQHNpZ19wcm9kX3NpemU6CXNpemUgb2YgdGhlIHByb2R1Y3Rpb24gc2lnbmF0dXJlCi0gKiBA cGF0Y2hfbG9jOgkJb2Zmc2V0IG9mIHRoZSBvZmZzZXQgKHNpYykgb2Ygd2hlcmUgdGhlIHNpZ25h dHVyZSBpcwotICogQHBhdGNoX3NpZzoJCW9mZnNldCBvZiB0aGUgb2Zmc2V0IChzaWMpIHRvIGFk ZCB0byBzaWdfKl9vZmZzZXQKLSAqIEBoZHJfb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBsb2FkIGhl YWRlciAoc2VlIHN0cnVjdCBoc19sb2FkX2hlYWRlcikKLSAqIEBoZHJfc2l6ZToJCXNpemUgb2Yg YWJvdmUgaGVhZGVyCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW4gdGhlIEhT IGZpcm13YXJlIGltYWdlIGF0Ci0gKiBoc19iaW5faGRyLmhlYWRlcl9vZmZzZXQuCi0gKi8KLXN0 cnVjdCBoc2ZfZndfaGVhZGVyIHsKLQl1MzIgc2lnX2RiZ19vZmZzZXQ7Ci0JdTMyIHNpZ19kYmdf c2l6ZTsKLQl1MzIgc2lnX3Byb2Rfb2Zmc2V0OwotCXUzMiBzaWdfcHJvZF9zaXplOwotCXUzMiBw YXRjaF9sb2M7Ci0JdTMyIHBhdGNoX3NpZzsKLQl1MzIgaGRyX29mZnNldDsKLQl1MzIgaGRyX3Np emU7Ci19OwotCi0KLS8qKgotICogc3RydWN0IGdtMjAwX2ZsY25fYmxfZGVzYyAtIERNRU0gYm9v dGxvYWRlciBkZXNjcmlwdG9yCi0gKiBAc2lnbmF0dXJlOgkJMTZCIHNpZ25hdHVyZSBmb3Igc2Vj dXJlIGNvZGUuIDBzIGlmIG5vIHNlY3VyZSBjb2RlCi0gKiBAY3R4X2RtYToJCURNQSBjb250ZXh0 IHRvIGJlIHVzZWQgYnkgQkwgd2hpbGUgbG9hZGluZyBjb2RlL2RhdGEKLSAqIEBjb2RlX2RtYV9i YXNlOgkyNTZCLWFsaWduZWQgUGh5c2ljYWwgRkIgQWRkcmVzcyB3aGVyZSBjb2RlIGlzIGxvY2F0 ZWQKLSAqCQkJKGZhbGNvbidzICR4Y2Jhc2UgcmVnaXN0ZXIpCi0gKiBAbm9uX3NlY19jb2RlX29m ZjoJb2Zmc2V0IGZyb20gY29kZV9kbWFfYmFzZSB3aGVyZSB0aGUgbm9uLXNlY3VyZSBjb2RlIGlz Ci0gKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVs dGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgotICogQG5vbl9zZWNfY29kZV9zaXplOgl0aGUgc2l6 ZSBvZiB0aGUgbm9uU2VjdXJlIGNvZGUgcGFydC4KLSAqIEBzZWNfY29kZV9vZmY6CW9mZnNldCBm cm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNlY3VyZSBjb2RlIGlzCi0gKiAgICAgICAgICAg ICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRv IGhlbHAgcGVyZgotICogQHNlY19jb2RlX3NpemU6CW9mZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ug d2hlcmUgdGhlIHNlY3VyZSBjb2RlIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVk LiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgotICogQGNv ZGVfZW50cnlfcG9pbnQ6CWNvZGUgZW50cnkgcG9pbnQgd2hpY2ggd2lsbCBiZSBpbnZva2VkIGJ5 IEJMIGFmdGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICBjb2RlIGlzIGxvYWRlZC4KLSAqIEBk YXRhX2RtYV9iYXNlOgkyNTZCIGFsaWduZWQgUGh5c2ljYWwgRkIgQWRkcmVzcyB3aGVyZSBkYXRh IGlzIGxvY2F0ZWQuCi0gKgkJCShmYWxjb24ncyAkeGRiYXNlIHJlZ2lzdGVyKQotICogQGRhdGFf c2l6ZToJCXNpemUgb2YgZGF0YSBibG9jay4gU2hvdWxkIGJlIG11bHRpcGxlIG9mIDI1NkIKLSAq Ci0gKiBTdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYm9vdGxvYWRlciB0byBsb2FkIHRoZSByZXN0IG9m IHRoZSBjb2RlLiBUaGlzIGhhcwotICogdG8gYmUgZmlsbGVkIGJ5IGhvc3QgYW5kIGNvcGllZCBp bnRvIERNRU0gYXQgb2Zmc2V0IHByb3ZpZGVkIGluIHRoZQotICogaHNmbGNuX2JsX2Rlc2MuYmxf ZGVzY19kbWVtX2xvYWRfb2ZmLgotICovCi1zdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNjIHsKLQl1 MzIgcmVzZXJ2ZWRbNF07Ci0JdTMyIHNpZ25hdHVyZVs0XTsKLQl1MzIgY3R4X2RtYTsKLQlzdHJ1 Y3QgZmxjbl91NjQgY29kZV9kbWFfYmFzZTsKLQl1MzIgbm9uX3NlY19jb2RlX29mZjsKLQl1MzIg bm9uX3NlY19jb2RlX3NpemU7Ci0JdTMyIHNlY19jb2RlX29mZjsKLQl1MzIgc2VjX2NvZGVfc2l6 ZTsKLQl1MzIgY29kZV9lbnRyeV9wb2ludDsKLQlzdHJ1Y3QgZmxjbl91NjQgZGF0YV9kbWFfYmFz ZTsKLQl1MzIgZGF0YV9zaXplOwotfTsKLQotCi0vKioKLSAqIENvbnZlbmllbmNlIGZ1bmN0aW9u IHRvIGR1cGxpY2F0ZSBhIGZpcm13YXJlIGZpbGUgaW4gbWVtb3J5IGFuZCBjaGVjayB0aGF0Ci0g KiBpdCBoYXMgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZS4KLSAqLwotc3RhdGljIHZvaWQgKgot Z20yMDBfc2VjYm9vdF9sb2FkX2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3Vi ZGV2LCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgc2l6ZV90IG1pbl9zaXplKQotewotCWNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0Jdm9pZCAqYmxvYjsKLQlpbnQgcmV0OwotCi0JcmV0ID0g bnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIG5hbWUsICZmdyk7Ci0JaWYgKHJldCkK LQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQlpZiAoZnctPnNpemUgPCBtaW5fc2l6ZSkgewotCQlu dmttX2Vycm9yKHN1YmRldiwgIiVzIGlzIHNtYWxsZXIgdGhhbiBleHBlY3RlZCBzaXplICV6dVxu IiwKLQkJCSAgIG5hbWUsIG1pbl9zaXplKTsKLQkJbnZrbV9maXJtd2FyZV9wdXQoZncpOwotCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0JYmxvYiA9IGttZW1kdXAoZnctPmRhdGEsIGZ3 LT5zaXplLCBHRlBfS0VSTkVMKTsKLQludmttX2Zpcm13YXJlX3B1dChmdyk7Ci0JaWYgKCFibG9i KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXJldHVybiBibG9iOwotfQotCi0KLS8q Ci0gKiBMb3ctc2VjdXJlIGJsb2IgY3JlYXRpb24KLSAqLwotCi0jZGVmaW5lIEJMX0RFU0NfQkxL X1NJWkUgMjU2Ci0vKioKLSAqIEJ1aWxkIGEgdWNvZGUgaW1hZ2UgYW5kIGRlc2NyaXB0b3IgZnJv bSBwcm92aWRlZCBib290bG9hZGVyLCBjb2RlIGFuZCBkYXRhLgotICoKLSAqIEBibDoJCWJvb3Rs b2FkZXIgaW1hZ2UsIGluY2x1ZGluZyAxNi1ieXRlcyBkZXNjcmlwdG9yCi0gKiBAY29kZToJTFMg ZmlybXdhcmUgY29kZSBzZWdtZW50Ci0gKiBAZGF0YToJTFMgZmlybXdhcmUgZGF0YSBzZWdtZW50 Ci0gKiBAZGVzYzoJdWNvZGUgZGVzY3JpcHRvciB0byBiZSB3cml0dGVuCi0gKgotICogUmV0dXJu OiBhbGxvY2F0ZWQgdWNvZGUgaW1hZ2Ugd2l0aCBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgaW5m b3JtYXRpb24uIGRlc2MKLSAqICAgICAgICAgaXMgYWxzbyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhl IHJpZ2h0IG9mZnNldHMgd2l0aGluIHJldHVybmVkIGltYWdlLgotICovCi1zdGF0aWMgdm9pZCAq Ci1sc191Y29kZV9pbWdfYnVpbGQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpibCwgY29uc3Qgc3Ry dWN0IGZpcm13YXJlICpjb2RlLAotCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRhdGEsIHN0 cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgZndfYmluX2hlYWRlciAq YmluX2hkciA9ICh2b2lkICopYmwtPmRhdGE7Ci0Jc3RydWN0IGZ3X2JsX2Rlc2MgKmJsX2Rlc2Mg PSAodm9pZCAqKWJsLT5kYXRhICsgYmluX2hkci0+aGVhZGVyX29mZnNldDsKLQl2b2lkICpibF9k YXRhID0gKHZvaWQgKilibC0+ZGF0YSArIGJpbl9oZHItPmRhdGFfb2Zmc2V0OwotCXUzMiBwb3Mg PSAwOwotCXZvaWQgKmltYWdlOwotCi0JZGVzYy0+Ym9vdGxvYWRlcl9zdGFydF9vZmZzZXQgPSBw b3M7Ci0JZGVzYy0+Ym9vdGxvYWRlcl9zaXplID0gQUxJR04oYmxfZGVzYy0+Y29kZV9zaXplLCBz aXplb2YodTMyKSk7Ci0JZGVzYy0+Ym9vdGxvYWRlcl9pbWVtX29mZnNldCA9IGJsX2Rlc2MtPnN0 YXJ0X3RhZyAqIDI1NjsKLQlkZXNjLT5ib290bG9hZGVyX2VudHJ5X3BvaW50ID0gYmxfZGVzYy0+ c3RhcnRfdGFnICogMjU2OwotCi0JcG9zID0gQUxJR04ocG9zICsgZGVzYy0+Ym9vdGxvYWRlcl9z aXplLCBCTF9ERVNDX0JMS19TSVpFKTsKLQlkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0ID0gcG9zOwot CWRlc2MtPmFwcF9zaXplID0gQUxJR04oY29kZS0+c2l6ZSwgQkxfREVTQ19CTEtfU0laRSkgKwot CQkJIEFMSUdOKGRhdGEtPnNpemUsIEJMX0RFU0NfQkxLX1NJWkUpOwotCWRlc2MtPmFwcF9pbWVt X29mZnNldCA9IDA7Ci0JZGVzYy0+YXBwX2ltZW1fZW50cnkgPSAwOwotCWRlc2MtPmFwcF9kbWVt X29mZnNldCA9IDA7Ci0JZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0ID0gMDsKLQlkZXNj LT5hcHBfcmVzaWRlbnRfY29kZV9zaXplID0gQUxJR04oY29kZS0+c2l6ZSwgQkxfREVTQ19CTEtf U0laRSk7Ci0KLQlwb3MgPSBBTElHTihwb3MgKyBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXpl LCBCTF9ERVNDX0JMS19TSVpFKTsKLQlkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQgPSBw b3MgLSBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0OwotCWRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX3Np emUgPSBBTElHTihkYXRhLT5zaXplLCBCTF9ERVNDX0JMS19TSVpFKTsKLQotCWRlc2MtPmltYWdl X3NpemUgPSBBTElHTihibF9kZXNjLT5jb2RlX3NpemUsIEJMX0RFU0NfQkxLX1NJWkUpICsKLQkJ CSAgIGRlc2MtPmFwcF9zaXplOwotCi0JaW1hZ2UgPSBremFsbG9jKGRlc2MtPmltYWdlX3NpemUs IEdGUF9LRVJORUwpOwotCWlmICghaW1hZ2UpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwot Ci0JbWVtY3B5KGltYWdlICsgZGVzYy0+Ym9vdGxvYWRlcl9zdGFydF9vZmZzZXQsIGJsX2RhdGEs Ci0JICAgICAgIGJsX2Rlc2MtPmNvZGVfc2l6ZSk7Ci0JbWVtY3B5KGltYWdlICsgZGVzYy0+YXBw X3N0YXJ0X29mZnNldCwgY29kZS0+ZGF0YSwgY29kZS0+c2l6ZSk7Ci0JbWVtY3B5KGltYWdlICsg ZGVzYy0+YXBwX3N0YXJ0X29mZnNldCArIGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCwK LQkgICAgICAgZGF0YS0+ZGF0YSwgZGF0YS0+c2l6ZSk7Ci0KLQlyZXR1cm4gaW1hZ2U7Ci19Ci0K LS8qKgotICogbHNfdWNvZGVfaW1nX2xvYWRfZ2VuZXJpYygpIC0gbG9hZCBhbmQgcHJlcGFyZSBh IExTIHVjb2RlIGltYWdlCi0gKgotICogTG9hZCB0aGUgTFMgbWljcm9jb2RlLCBib290bG9hZGVy IGFuZCBzaWduYXR1cmUgYW5kIHBhY2sgdGhlbSBpbnRvIGEgc2luZ2xlCi0gKiBibG9iLiBBbHNv IGdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIHVjb2RlIGRlc2NyaXB0b3IuCi0gKi8KLXN0YXRp YyBpbnQKLWxzX3Vjb2RlX2ltZ19sb2FkX2dlbmVyaWMoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2 ICpzdWJkZXYsCi0JCQkgIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZywgY29uc3QgY2hhciAqZmFs Y29uX25hbWUsCi0JCQkgIGNvbnN0IHUzMiBmYWxjb25faWQpCi17Ci0JY29uc3Qgc3RydWN0IGZp cm13YXJlICpibCwgKmNvZGUsICpkYXRhOwotCXN0cnVjdCBsc2ZfdWNvZGVfZGVzYyAqbHNmX2Rl c2M7Ci0JY2hhciBmWzY0XTsKLQlpbnQgcmV0OwotCi0JaW1nLT51Y29kZV9oZWFkZXIgPSBOVUxM OwotCi0Jc25wcmludGYoZiwgc2l6ZW9mKGYpLCAiZ3IvJXNfYmwiLCBmYWxjb25fbmFtZSk7Ci0J cmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIGYsICZibCk7Ci0JaWYgKHJl dCkKLQkJZ290byBlcnJvcjsKLQotCXNucHJpbnRmKGYsIHNpemVvZihmKSwgImdyLyVzX2luc3Qi LCBmYWxjb25fbmFtZSk7Ci0JcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2Us IGYsICZjb2RlKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWVfYmw7Ci0KLQlzbnByaW50ZihmLCBz aXplb2YoZiksICJnci8lc19kYXRhIiwgZmFsY29uX25hbWUpOwotCXJldCA9IG52a21fZmlybXdh cmVfZ2V0KHN1YmRldi0+ZGV2aWNlLCBmLCAmZGF0YSk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVl X2luc3Q7Ci0KLQlpbWctPnVjb2RlX2RhdGEgPSBsc191Y29kZV9pbWdfYnVpbGQoYmwsIGNvZGUs IGRhdGEsCi0JCQkJCSAgICAgJmltZy0+dWNvZGVfZGVzYyk7Ci0JaWYgKElTX0VSUihpbWctPnVj b2RlX2RhdGEpKSB7Ci0JCXJldCA9IFBUUl9FUlIoaW1nLT51Y29kZV9kYXRhKTsKLQkJZ290byBm cmVlX2RhdGE7Ci0JfQotCWltZy0+dWNvZGVfc2l6ZSA9IGltZy0+dWNvZGVfZGVzYy5pbWFnZV9z aXplOwotCi0Jc25wcmludGYoZiwgc2l6ZW9mKGYpLCAiZ3IvJXNfc2lnIiwgZmFsY29uX25hbWUp OwotCWxzZl9kZXNjID0gZ20yMDBfc2VjYm9vdF9sb2FkX2Zpcm13YXJlKHN1YmRldiwgZiwgc2l6 ZW9mKCpsc2ZfZGVzYykpOwotCWlmIChJU19FUlIobHNmX2Rlc2MpKSB7Ci0JCXJldCA9IFBUUl9F UlIobHNmX2Rlc2MpOwotCQlnb3RvIGZyZWVfaW1hZ2U7Ci0JfQotCS8qIG5vdCBuZWVkZWQ/IHRo ZSBzaWduYXR1cmUgc2hvdWxkIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgdmFsdWUgKi8KLQlsc2Zf ZGVzYy0+ZmFsY29uX2lkID0gZmFsY29uX2lkOwotCW1lbWNweSgmaW1nLT5sc2JfaGVhZGVyLnNp Z25hdHVyZSwgbHNmX2Rlc2MsIHNpemVvZigqbHNmX2Rlc2MpKTsKLQlpbWctPmZhbGNvbl9pZCA9 IGxzZl9kZXNjLT5mYWxjb25faWQ7Ci0Ja2ZyZWUobHNmX2Rlc2MpOwotCi0JLyogc3VjY2VzcyBw YXRoIC0gb25seSBmcmVlIHJlcXVlc3RlZCBmaXJtd2FyZSBmaWxlcyAqLwotCWdvdG8gZnJlZV9k YXRhOwotCi1mcmVlX2ltYWdlOgotCWtmcmVlKGltZy0+dWNvZGVfZGF0YSk7Ci1mcmVlX2RhdGE6 Ci0JbnZrbV9maXJtd2FyZV9wdXQoZGF0YSk7Ci1mcmVlX2luc3Q6Ci0JbnZrbV9maXJtd2FyZV9w dXQoY29kZSk7Ci1mcmVlX2JsOgotCW52a21fZmlybXdhcmVfcHV0KGJsKTsKLWVycm9yOgotCXJl dHVybiByZXQ7Ci19Ci0KLXR5cGVkZWYgaW50ICgqbHNmX2xvYWRfZnVuYykoY29uc3Qgc3RydWN0 IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7Ci0KLWludAotZ20yMDBfbHNf bG9hZF9mZWNzKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBzdHJ1Y3QgbHNfdWNv ZGVfaW1nICppbWcpCi17Ci0JcmV0dXJuIGxzX3Vjb2RlX2ltZ19sb2FkX2dlbmVyaWMoc3ViZGV2 LCBpbWcsICJmZWNzIiwKLQkJCQkJIE5WS01fRkFMQ09OX0ZFQ1MpOwotfQotCi1pbnQKLWdtMjAw X2xzX2xvYWRfZ3BjY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsIHN0cnVjdCBs c191Y29kZV9pbWcgKmltZykKLXsKLQlyZXR1cm4gbHNfdWNvZGVfaW1nX2xvYWRfZ2VuZXJpYyhz dWJkZXYsIGltZywgImdwY2NzIiwKLQkJCQkJIE5WS01fRkFMQ09OX0dQQ0NTKTsKLX0KLQotLyoq Ci0gKiBsc191Y29kZV9pbWdfbG9hZCgpIC0gY3JlYXRlIGEgbHNmX3Vjb2RlX2ltZyBhbmQgbG9h ZCBpdAotICovCi1zdGF0aWMgc3RydWN0IGxzX3Vjb2RlX2ltZyAqCi1sc191Y29kZV9pbWdfbG9h ZChzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwgbHNmX2xvYWRfZnVuYyBsb2FkX2Z1bmMpCi17 Ci0Jc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOwotCWludCByZXQ7Ci0KLQlpbWcgPSBremFsbG9j KHNpemVvZigqaW1nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbWcpCi0JCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwotCi0JcmV0ID0gbG9hZF9mdW5jKHN1YmRldiwgaW1nKTsKLQlpZiAocmV0KSB7 Ci0JCWtmcmVlKGltZyk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JfQotCi0JcmV0dXJuIGlt ZzsKLX0KLQotLyoqCi0gKiBnbTIwMF9zZWNib290X2xzX2JsX2Rlc2MoKSAtIHBvcHVsYXRlIGEg RE1FTSBCTCBkZXNjcmlwdG9yIGZvciBMUyBpbWFnZQotICogQGltZzoJdWNvZGUgaW1hZ2UgdG8g Z2VuZXJhdGUgYWdhaW5zdAotICogQGRlc2M6CWRlc2NyaXB0b3IgdG8gcG9wdWxhdGUKLSAqIEBz YjoJCXNlY3VyZSBib290IHN0YXRlIHRvIHVzZSBmb3IgYmFzZSBhZGRyZXNzZXMKLSAqCi0gKiBQ b3B1bGF0ZSB0aGUgRE1FTSBCTCBkZXNjcmlwdG9yIHdpdGggdGhlIGluZm9ybWF0aW9uIGNvbnRh aW5lZCBpbiBhCi0gKiBsc191Y29kZV9kZXNjLgotICoKLSAqLwotc3RhdGljIHZvaWQKLWdtMjAw X3NlY2Jvb3RfbHNfYmxfZGVzYyhjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsIHU2NCB3 cHJfYWRkciwKLQkJCSB2b2lkICpfZGVzYykKLXsKLQlzdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNj ICpkZXNjID0gX2Rlc2M7Ci0JY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9 ICZpbWctPnVjb2RlX2Rlc2M7Ci0JdTY0IGFkZHJfYmFzZTsKLQotCWFkZHJfYmFzZSA9IHdwcl9h ZGRyICsgaW1nLT5sc2JfaGVhZGVyLnVjb2RlX29mZiArCi0JCSAgICBwZGVzYy0+YXBwX3N0YXJ0 X29mZnNldDsKLQotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5jdHhf ZG1hID0gRkFMQ09OX0RNQUlEWF9VQ09ERTsKLQlkZXNjLT5jb2RlX2RtYV9iYXNlLmxvID0gbG93 ZXJfMzJfYml0cygKLQkJKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZz ZXQpKTsKLQlkZXNjLT5jb2RlX2RtYV9iYXNlLmhpID0gdXBwZXJfMzJfYml0cygKLQkJKGFkZHJf YmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQpKTsKLQlkZXNjLT5ub25fc2Vj X2NvZGVfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplOwotCWRlc2MtPmRhdGFf ZG1hX2Jhc2UubG8gPSBsb3dlcl8zMl9iaXRzKAotCQkoYWRkcl9iYXNlICsgcGRlc2MtPmFwcF9y ZXNpZGVudF9kYXRhX29mZnNldCkpOwotCWRlc2MtPmRhdGFfZG1hX2Jhc2UuaGkgPSB1cHBlcl8z Ml9iaXRzKAotCQkoYWRkcl9iYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkp OwotCWRlc2MtPmRhdGFfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplOwotCWRl c2MtPmNvZGVfZW50cnlfcG9pbnQgPSBwZGVzYy0+YXBwX2ltZW1fZW50cnk7Ci19Ci0KLSNkZWZp bmUgTFNGX0xTQl9IRUFERVJfQUxJR04gMjU2Ci0jZGVmaW5lIExTRl9CTF9EQVRBX0FMSUdOIDI1 NgotI2RlZmluZSBMU0ZfQkxfREFUQV9TSVpFX0FMSUdOIDI1NgotI2RlZmluZSBMU0ZfQkxfQ09E RV9TSVpFX0FMSUdOIDI1NgotI2RlZmluZSBMU0ZfVUNPREVfREFUQV9BTElHTiA0MDk2Ci0KLS8q KgotICogbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyAtIGZpbGwgdGhlIFdQUiBhbmQgTFNCIGhl YWRlcnMgb2YgYW4gaW1hZ2UKLSAqIEBnc2I6CXNlY3VyZSBib290IGRldmljZSB1c2VkCi0gKiBA aW1nOglpbWFnZSB0byBnZW5lcmF0ZSBmb3IKLSAqIEBvZmZzZXQ6CW9mZnNldCBpbiB0aGUgV1BS IHJlZ2lvbiB3aGVyZSB0aGlzIGltYWdlIHN0YXJ0cwotICoKLSAqIEFsbG9jYXRlIHNwYWNlIGlu IHRoZSBXUFIgYXJlYSBmcm9tIG9mZnNldCBhbmQgd3JpdGUgdGhlIFdQUiBhbmQgTFNCIGhlYWRl cnMKLSAqIGFjY29yZGluZ2x5LgotICoKLSAqIFJldHVybjogb2Zmc2V0IGF0IHRoZSBlbmQgb2Yg dGhpcyBpbWFnZS4KLSAqLwotc3RhdGljIHUzMgotbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhz dHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsCi0JCQkg IHUzMiBvZmZzZXQpCi17Ci0Jc3RydWN0IGxzZl93cHJfaGVhZGVyICp3aGRyID0gJmltZy0+d3By X2hlYWRlcjsKLQlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgKmxoZHIgPSAmaW1nLT5sc2JfaGVhZGVy OwotCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7Ci0J Y29uc3Qgc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xlX2Z1bmMgKmZ1bmMgPQotCQkJCQkJKCpnc2It PmxzX2Z1bmMpW2ltZy0+ZmFsY29uX2lkXTsKLQotCWlmIChpbWctPnVjb2RlX2hlYWRlcikgewot CQludmttX2ZhdGFsKCZnc2ItPmJhc2Uuc3ViZGV2LAotCQkJICAgICJpbWFnZXMgd2l0aG91Z2gg bG9hZGVyIGFyZSBub3Qgc3VwcG9ydGVkIHlldCFcbiIpOwotCQlyZXR1cm4gb2Zmc2V0OwotCX0K LQotCS8qIEZpbGwgV1BSIGhlYWRlciAqLwotCXdoZHItPmZhbGNvbl9pZCA9IGltZy0+ZmFsY29u X2lkOwotCXdoZHItPmJvb3RzdHJhcF9vd25lciA9IGdzYi0+YmFzZS5mdW5jLT5ib290X2ZhbGNv bjsKLQl3aGRyLT5zdGF0dXMgPSBMU0ZfSU1BR0VfU1RBVFVTX0NPUFk7Ci0KLQkvKiBBbGlnbiwg c2F2ZSBvZmYsIGFuZCBpbmNsdWRlIGFuIExTQiBoZWFkZXIgc2l6ZSAqLwotCW9mZnNldCA9IEFM SUdOKG9mZnNldCwgTFNGX0xTQl9IRUFERVJfQUxJR04pOwotCXdoZHItPmxzYl9vZmZzZXQgPSBv ZmZzZXQ7Ci0Jb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIpOwotCi0JLyoK LQkgKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIHRoZSBvcmlnaW5hbCAoc3RhdGljKSB1 Y29kZQotCSAqIGltYWdlIHNpemUKLQkgKi8KLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIExTRl9V Q09ERV9EQVRBX0FMSUdOKTsKLQlsaGRyLT51Y29kZV9vZmYgPSBvZmZzZXQ7Ci0Jb2Zmc2V0ICs9 IGltZy0+dWNvZGVfc2l6ZTsKLQotCS8qCi0JICogRm9yIGZhbGNvbnMgdGhhdCB1c2UgYSBib290 IGxvYWRlciAoQkwpLCB3ZSBhcHBlbmQgYSBsb2FkZXIKLQkgKiBkZXNjIHN0cnVjdHVyZSBvbiB0 aGUgZW5kIG9mIHRoZSB1Y29kZSBpbWFnZSBhbmQgY29uc2lkZXIKLQkgKiB0aGlzIHRoZSBib290 IGxvYWRlciBkYXRhLiBUaGUgaG9zdCB3aWxsIHRoZW4gY29weSB0aGUgbG9hZGVyCi0JICogZGVz YyBhcmdzIHRvIHRoaXMgc3BhY2Ugd2l0aGluIHRoZSBXUFIgcmVnaW9uIChiZWZvcmUgbG9ja2lu ZwotCSAqIGRvd24pIGFuZCB0aGUgSFMgYmluIHdpbGwgdGhlbiBjb3B5IHRoZW0gdG8gRE1FTSAw IGZvciB0aGUKLQkgKiBsb2FkZXIuCi0JICovCi0JbGhkci0+YmxfY29kZV9zaXplID0gQUxJR04o ZGVzYy0+Ym9vdGxvYWRlcl9zaXplLAotCQkJCSAgIExTRl9CTF9DT0RFX1NJWkVfQUxJR04pOwot CWxoZHItPnVjb2RlX3NpemUgPSBBTElHTihkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQs Ci0JCQkJIExTRl9CTF9DT0RFX1NJWkVfQUxJR04pICsgbGhkci0+YmxfY29kZV9zaXplOwotCWxo ZHItPmRhdGFfc2l6ZSA9IEFMSUdOKGRlc2MtPmFwcF9zaXplLCBMU0ZfQkxfQ09ERV9TSVpFX0FM SUdOKSArCi0JCQkJbGhkci0+YmxfY29kZV9zaXplIC0gbGhkci0+dWNvZGVfc2l6ZTsKLQkvKgot CSAqIFRob3VnaCB0aGUgQkwgaXMgbG9jYXRlZCBhdCAwdGggb2Zmc2V0IG9mIHRoZSBpbWFnZSwg dGhlIFZBCi0JICogaXMgZGlmZmVyZW50IHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGRvZXNuJ3QgY29s bGlkZSB0aGUgYWN0dWFsCi0JICogT1MgVkEgcmFuZ2UKLQkgKi8KLQlsaGRyLT5ibF9pbWVtX29m ZiA9IGRlc2MtPmJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ7Ci0JbGhkci0+YXBwX2NvZGVfb2ZmID0g ZGVzYy0+YXBwX3N0YXJ0X29mZnNldCArCi0JCQkgICAgIGRlc2MtPmFwcF9yZXNpZGVudF9jb2Rl X29mZnNldDsKLQlsaGRyLT5hcHBfY29kZV9zaXplID0gZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVf c2l6ZTsKLQlsaGRyLT5hcHBfZGF0YV9vZmYgPSBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0ICsKLQkJ CSAgICAgZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OwotCWxoZHItPmFwcF9kYXRhX3Np emUgPSBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplOwotCi0JbGhkci0+ZmxhZ3MgPSAwOwot CWlmIChpbWctPmZhbGNvbl9pZCA9PSBnc2ItPmJhc2UuZnVuYy0+Ym9vdF9mYWxjb24pCi0JCWxo ZHItPmZsYWdzID0gTFNGX0ZMQUdfRE1BQ1RMX1JFUV9DVFg7Ci0KLQkvKiBHUENDUyB3aWxsIGJl IGxvYWRlZCB1c2luZyBQUkkgKi8KLQlpZiAoaW1nLT5mYWxjb25faWQgPT0gTlZLTV9GQUxDT05f R1BDQ1MpCi0JCWxoZHItPmZsYWdzIHw9IExTRl9GTEFHX0ZPUkNFX1BSSVZfTE9BRDsKLQotCS8q IEFsaWduIGFuZCBzYXZlIG9mZiBCTCBkZXNjcmlwdG9yIHNpemUgKi8KLQlsaGRyLT5ibF9kYXRh X3NpemUgPSBBTElHTihmdW5jLT5ibF9kZXNjX3NpemUsIExTRl9CTF9EQVRBX1NJWkVfQUxJR04p OwotCi0JLyoKLQkgKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIHRoZSBhZGRpdGlvbmFs IEJMIGRhdGEKLQkgKi8KLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIExTRl9CTF9EQVRBX0FMSUdO KTsKLQlsaGRyLT5ibF9kYXRhX29mZiA9IG9mZnNldDsKLQlvZmZzZXQgKz0gbGhkci0+YmxfZGF0 YV9zaXplOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWxzX3Vjb2RlX21n cl9pbml0KHN0cnVjdCBsc191Y29kZV9tZ3IgKm1ncikKLXsKLQltZW1zZXQobWdyLCAwLCBzaXpl b2YoKm1ncikpOwotCUlOSVRfTElTVF9IRUFEKCZtZ3ItPmltZ19saXN0KTsKLX0KLQotc3RhdGlj IHZvaWQKLWxzX3Vjb2RlX21ncl9jbGVhbnVwKHN0cnVjdCBsc191Y29kZV9tZ3IgKm1ncikKLXsK LQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsICp0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKGltZywgdCwgJm1nci0+aW1nX2xpc3QsIG5vZGUpIHsKLQkJa2ZyZWUoaW1nLT51Y29kZV9k YXRhKTsKLQkJa2ZyZWUoaW1nLT51Y29kZV9oZWFkZXIpOwotCQlrZnJlZShpbWcpOwotCX0KLX0K LQotc3RhdGljIHZvaWQKLWxzX3Vjb2RlX21ncl9hZGRfaW1nKHN0cnVjdCBsc191Y29kZV9tZ3Ig Km1nciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nKQotewotCW1nci0+Y291bnQrKzsKLQlsaXN0 X2FkZF90YWlsKCZpbWctPm5vZGUsICZtZ3ItPmltZ19saXN0KTsKLX0KLQotLyoqCi0gKiBsc191 Y29kZV9tZ3JfZmlsbF9oZWFkZXJzIC0gZmlsbCBXUFIgYW5kIExTQiBoZWFkZXJzIG9mIGFsbCBt YW5hZ2VkIGltYWdlcwotICovCi1zdGF0aWMgdm9pZAotbHNfdWNvZGVfbWdyX2ZpbGxfaGVhZGVy cyhzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBzdHJ1Y3QgbHNfdWNvZGVfbWdyICptZ3IpCi17 Ci0Jc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOwotCXUzMiBvZmZzZXQ7Ci0KLQkvKgotCSAqIFN0 YXJ0IHdpdGggYW4gYXJyYXkgb2YgV1BSIGhlYWRlcnMgYXQgdGhlIGJhc2Ugb2YgdGhlIFdQUi4K LQkgKiBUaGUgZXhwZWN0YXRpb24gaGVyZSBpcyB0aGF0IHRoZSBzZWN1cmUgZmFsY29uIHdpbGwg ZG8gYSBzaW5nbGUgRE1BCi0JICogcmVhZCBvZiB0aGlzIGFycmF5IGFuZCBjYWNoZSBpdCBpbnRl cm5hbGx5IHNvIGl0J3Mgb2sgdG8gcGFjayB0aGVzZS4KLQkgKiBBbHNvLCB3ZSBhZGQgMSB0byB0 aGUgZmFsY29uIGNvdW50IHRvIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGFycmF5LgotCSAqLwot CW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIpICogKG1nci0+Y291bnQgKyAx KTsKLQotCS8qCi0JICogV2FsayB0aGUgbWFuYWdlZCBmYWxjb25zLCBhY2NvdW50aW5nIGZvciB0 aGUgTFNCIHN0cnVjdHMKLQkgKiBhcyB3ZWxsIGFzIHRoZSB1Y29kZSBpbWFnZXMuCi0JICovCi0J bGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsICZtZ3ItPmltZ19saXN0LCBub2RlKSB7Ci0JCW9mZnNl dCA9IGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMoZ3NiLCBpbWcsIG9mZnNldCk7Ci0JfQotCi0J bWdyLT53cHJfc2l6ZSA9IG9mZnNldDsKLX0KLQotLyoqCi0gKiBsc191Y29kZV9tZ3Jfd3JpdGVf d3ByIC0gd3JpdGUgdGhlIFdQUiBibG9iIGNvbnRlbnRzCi0gKi8KLXN0YXRpYyBpbnQKLWxzX3Vj b2RlX21ncl93cml0ZV93cHIoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiwgc3RydWN0IGxzX3Vj b2RlX21nciAqbWdyLAotCQkgICAgICAgc3RydWN0IG52a21fZ3B1b2JqICp3cHJfYmxvYikKLXsK LQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7Ci0JdTMyIHBvcyA9IDA7Ci0KLQludmttX2ttYXAo d3ByX2Jsb2IpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsICZtZ3ItPmltZ19saXN0LCBu b2RlKSB7Ci0JCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwgcG9zLCAmaW1nLT53cHJf aGVhZGVyLAotCQkJCSAgICAgIHNpemVvZihpbWctPndwcl9oZWFkZXIpKTsKLQotCQludmttX2dw dW9ial9tZW1jcHlfdG8od3ByX2Jsb2IsIGltZy0+d3ByX2hlYWRlci5sc2Jfb2Zmc2V0LAotCQkJ CSAgICAgJmltZy0+bHNiX2hlYWRlciwgc2l6ZW9mKGltZy0+bHNiX2hlYWRlcikpOwotCi0JCS8q IEdlbmVyYXRlIGFuZCB3cml0ZSBCTCBkZXNjcmlwdG9yICovCi0JCWlmICghaW1nLT51Y29kZV9o ZWFkZXIpIHsKLQkJCWNvbnN0IHN0cnVjdCBzZWNib290X2xzX3NpbmdsZV9mdW5jICpsc19mdW5j ID0KLQkJCQkJCSgqZ3NiLT5sc19mdW5jKVtpbWctPmZhbGNvbl9pZF07Ci0JCQl1OCBnZGVzY1ts c19mdW5jLT5ibF9kZXNjX3NpemVdOwotCi0JCQlsc19mdW5jLT5nZW5lcmF0ZV9ibF9kZXNjKGlt ZywgZ3NiLT5hY3Jfd3ByX2FkZHIsCi0JCQkJCQkgICZnZGVzYyk7Ci0KLQkJCW52a21fZ3B1b2Jq X21lbWNweV90byh3cHJfYmxvYiwKLQkJCQkJICAgICAgaW1nLT5sc2JfaGVhZGVyLmJsX2RhdGFf b2ZmLAotCQkJCQkgICAgICAmZ2Rlc2MsIGxzX2Z1bmMtPmJsX2Rlc2Nfc2l6ZSk7Ci0JCX0KLQot CQkvKiBDb3B5IHVjb2RlICovCi0JCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwgaW1n LT5sc2JfaGVhZGVyLnVjb2RlX29mZiwKLQkJCQkgICAgICBpbWctPnVjb2RlX2RhdGEsIGltZy0+ dWNvZGVfc2l6ZSk7Ci0KLQkJcG9zICs9IHNpemVvZihpbWctPndwcl9oZWFkZXIpOwotCX0KLQot CW52a21fd28zMih3cHJfYmxvYiwgcG9zLCBOVktNX0ZBTENPTl9JTlZBTElEKTsKLQotCW52a21f ZG9uZSh3cHJfYmxvYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQm90aCBzaXplIGFuZCBhZGRy ZXNzIG9mIFdQUiBuZWVkIHRvIGJlIDEyOEstYWxpZ25lZCAqLwotI2RlZmluZSBXUFJfQUxJR05N RU5UCTB4MjAwMDAKLS8qKgotICogZ20yMDBfc2VjYm9vdF9wcmVwYXJlX2xzX2Jsb2IoKSAtIHBy ZXBhcmUgdGhlIExTIGJsb2IKLSAqCi0gKiBGb3IgZWFjaCBzZWN1cmVseSBtYW5hZ2VkIGZhbGNv biwgbG9hZCB0aGUgRlcsIHNpZ25hdHVyZXMgYW5kIGJvb3Rsb2FkZXJzIGFuZAotICogcHJlcGFy ZSBhIHVjb2RlIGJsb2IuIFRoZW4sIGNvbXB1dGUgdGhlIG9mZnNldHMgaW4gdGhlIFdQUiByZWdp b24gZm9yIGVhY2gKLSAqIGJsb2IsIGFuZCBmaW5hbGx5IHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB1 Y29kZSBibG9icyBpbnRvIGEgR1BVIG9iamVjdCB0aGF0Ci0gKiB3aWxsIGJlIGNvcGllZCBpbnRv IHRoZSBXUFIgcmVnaW9uIGJ5IHRoZSBIUyBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludAotZ20y MDBfc2VjYm9vdF9wcmVwYXJlX2xzX2Jsb2Ioc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsK LQlzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiA9ICZnc2ItPmJhc2U7Ci0Jc3RydWN0IG52a21fZGV2 aWNlICpkZXZpY2UgPSBzYi0+c3ViZGV2LmRldmljZTsKLQlzdHJ1Y3QgbHNfdWNvZGVfbWdyIG1n cjsKLQlpbnQgZmFsY29uX2lkOwotCWludCByZXQ7Ci0KLQlsc191Y29kZV9tZ3JfaW5pdCgmbWdy KTsKLQotCS8qIExvYWQgYWxsIExTIGJsb2JzICovCi0JZm9yX2VhY2hfc2V0X2JpdChmYWxjb25f aWQsICZzYi0+ZnVuYy0+bWFuYWdlZF9mYWxjb25zLAotCQkJIE5WS01fRkFMQ09OX0VORCkgewot CQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7Ci0KLQkJaW1nID0gbHNfdWNvZGVfaW1nX2xvYWQo JnNiLT5zdWJkZXYsCi0JCQkJCSgqZ3NiLT5sc19mdW5jKVtmYWxjb25faWRdLT5sb2FkKTsKLQot CQlpZiAoSVNfRVJSKGltZykpIHsKLQkJCXJldCA9IFBUUl9FUlIoaW1nKTsKLQkJCWdvdG8gY2xl YW51cDsKLQkJfQotCQlsc191Y29kZV9tZ3JfYWRkX2ltZygmbWdyLCBpbWcpOwotCX0KLQotCS8q Ci0JICogRmlsbCB0aGUgV1BSIGFuZCBMU0YgaGVhZGVycyB3aXRoIHRoZSByaWdodCBvZmZzZXRz IGFuZCBjb21wdXRlCi0JICogcmVxdWlyZWQgV1BSIHNpemUKLQkgKi8KLQlsc191Y29kZV9tZ3Jf ZmlsbF9oZWFkZXJzKGdzYiwgJm1ncik7Ci0JbWdyLndwcl9zaXplID0gQUxJR04obWdyLndwcl9z aXplLCBXUFJfQUxJR05NRU5UKTsKLQotCS8qIEFsbG9jYXRlIEdQVSBvYmplY3QgdGhhdCB3aWxs IGNvbnRhaW4gdGhlIFdQUiByZWdpb24gKi8KLQlyZXQgPSBudmttX2dwdW9ial9uZXcoZGV2aWNl LCBtZ3Iud3ByX3NpemUsIFdQUl9BTElHTk1FTlQsIGZhbHNlLCBOVUxMLAotCQkJICAgICAgJmdz Yi0+bHNfYmxvYik7Ci0JaWYgKHJldCkKLQkJZ290byBjbGVhbnVwOwotCi0JbnZrbV9kZWJ1Zygm c2ItPnN1YmRldiwgIiVkIG1hbmFnZWQgTFMgZmFsY29ucywgV1BSIHNpemUgaXMgJWQgYnl0ZXNc biIsCi0JCSAgICBtZ3IuY291bnQsIG1nci53cHJfc2l6ZSk7Ci0KLQkvKiBJZiBXUFIgYWRkcmVz cyBhbmQgc2l6ZSBhcmUgbm90IGZpeGVkLCBzZXQgdGhlbSB0byBmaXQgdGhlIExTIGJsb2IgKi8K LQlpZiAoIWdzYi0+d3ByX3NpemUpIHsKLQkJZ3NiLT5hY3Jfd3ByX2FkZHIgPSBnc2ItPmxzX2Js b2ItPmFkZHI7Ci0JCWdzYi0+YWNyX3dwcl9zaXplID0gZ3NiLT5sc19ibG9iLT5zaXplOwotCX0g ZWxzZSB7Ci0JCWdzYi0+YWNyX3dwcl9hZGRyID0gZ3NiLT53cHJfYWRkcjsKLQkJZ3NiLT5hY3Jf d3ByX3NpemUgPSBnc2ItPndwcl9zaXplOwotCX0KLQotCS8qIFdyaXRlIExTIGJsb2IgKi8KLQly ZXQgPSBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByKGdzYiwgJm1nciwgZ3NiLT5sc19ibG9iKTsKLQlp ZiAocmV0KQotCQludmttX2dwdW9ial9kZWwoJmdzYi0+bHNfYmxvYik7Ci0KLWNsZWFudXA6Ci0J bHNfdWNvZGVfbWdyX2NsZWFudXAoJm1ncik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg Y29uc3Qgc2VjYm9vdF9sc19mdW5jCi1nbTIwMF9sc19mdW5jID0gewotCVtOVktNX0ZBTENPTl9G RUNTXSA9ICYoc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xlX2Z1bmMpIHsKLQkJLmxvYWQgPSBnbTIw MF9sc19sb2FkX2ZlY3MsCi0JCS5nZW5lcmF0ZV9ibF9kZXNjID0gZ20yMDBfc2VjYm9vdF9sc19i bF9kZXNjLAotCQkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rl c2MpLAotCX0sCi0JW05WS01fRkFMQ09OX0dQQ0NTXSA9ICYoc3RydWN0IHNlY2Jvb3RfbHNfc2lu Z2xlX2Z1bmMpIHsKLQkJLmxvYWQgPSBnbTIwMF9sc19sb2FkX2dwY2NzLAotCQkuZ2VuZXJhdGVf YmxfZGVzYyA9IGdtMjAwX3NlY2Jvb3RfbHNfYmxfZGVzYywKLQkJLmJsX2Rlc2Nfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNjKSwKLQl9LAotfTsKLQotLyoKLSAqIEhpZ2gt c2VjdXJlIGJsb2IgY3JlYXRpb24KLSAqLwotCi0vKioKLSAqIGdtMjAwX3NlY2Jvb3RfaHNmX3Bh dGNoX3NpZ25hdHVyZSgpIC0gcGF0Y2ggSFMgYmxvYiB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlCi0g Ki8KLXN0YXRpYyB2b2lkCi1nbTIwMF9zZWNib290X2hzZl9wYXRjaF9zaWduYXR1cmUoc3RydWN0 IGdtMjAwX3NlY2Jvb3QgKmdzYiwgdm9pZCAqYWNyX2ltYWdlKQotewotCXN0cnVjdCBudmttX3Nl Y2Jvb3QgKnNiID0gJmdzYi0+YmFzZTsKLQlzdHJ1Y3QgZndfYmluX2hlYWRlciAqaHNiaW5faGRy ID0gYWNyX2ltYWdlOwotCXN0cnVjdCBoc2ZfZndfaGVhZGVyICpmd19oZHIgPSBhY3JfaW1hZ2Ug KyBoc2Jpbl9oZHItPmhlYWRlcl9vZmZzZXQ7Ci0Jdm9pZCAqaHNfZGF0YSA9IGFjcl9pbWFnZSAr IGhzYmluX2hkci0+ZGF0YV9vZmZzZXQ7Ci0Jdm9pZCAqc2lnOwotCXUzMiBzaWdfc2l6ZTsKLQot CS8qIEZhbGNvbiBpbiBkZWJ1ZyBvciBwcm9kdWN0aW9uIG1vZGU/ICovCi0JaWYgKChudmttX3Jk MzIoc2ItPnN1YmRldi5kZXZpY2UsIHNiLT5iYXNlICsgMHhjMDgpID4+IDIwKSAmIDB4MSkgewot CQlzaWcgPSBhY3JfaW1hZ2UgKyBmd19oZHItPnNpZ19kYmdfb2Zmc2V0OwotCQlzaWdfc2l6ZSA9 IGZ3X2hkci0+c2lnX2RiZ19zaXplOwotCX0gZWxzZSB7Ci0JCXNpZyA9IGFjcl9pbWFnZSArIGZ3 X2hkci0+c2lnX3Byb2Rfb2Zmc2V0OwotCQlzaWdfc2l6ZSA9IGZ3X2hkci0+c2lnX3Byb2Rfc2l6 ZTsKLQl9Ci0KLQkvKiBQYXRjaCBzaWduYXR1cmUgKi8KLQltZW1jcHkoaHNfZGF0YSArIGZ3X2hk ci0+cGF0Y2hfbG9jLCBzaWcgKyBmd19oZHItPnBhdGNoX3NpZywgc2lnX3NpemUpOwotfQotCi0v KioKLSAqIHN0cnVjdCBoc2ZsY25fYWNyX2Rlc2MgLSBkYXRhIHNlY3Rpb24gb2YgdGhlIEhTIGZp cm13YXJlCi0gKgotICogVGhpcyBoZWFkZXIgaXMgdG8gYmUgY29waWVkIGF0IHRoZSBiZWdpbm5p bmcgb2YgRE1FTSBieSB0aGUgSFMgYm9vdGxvYWRlci4KLSAqCi0gKiBAc2lnbmF0dXJlOgkJc2ln bmF0dXJlIG9mIEFDUiB1Y29kZQotICogQHdwcl9yZWdpb25faWQ6CXJlZ2lvbiBJRCBob2xkaW5n IHRoZSBXUFIgaGVhZGVyIGFuZCBpdHMgZGV0YWlscwotICogQHdwcl9vZmZzZXQ6CQlvZmZzZXQg ZnJvbSB0aGUgV1BSIHJlZ2lvbiBob2xkaW5nIHRoZSB3cHIgaGVhZGVyCi0gKiBAcmVnaW9uczoJ CXJlZ2lvbiBkZXNjcmlwdG9ycwotICogQG5vbndwcl91Y29kZV9ibG9iX3NpemU6CXNpemUgb2Yg TFMgYmxvYgotICogQG5vbndwcl91Y29kZV9ibG9iX3N0YXJ0OglGQiBsb2NhdGlvbiBvZiBMUyBi bG9iIGlzCi0gKi8KLXN0cnVjdCBoc2ZsY25fYWNyX2Rlc2MgewotCXVuaW9uIHsKLQkJdTggcmVz ZXJ2ZWRfZG1lbVsweDIwMF07Ci0JCXUzMiBzaWduYXR1cmVzWzRdOwotCX0gdWNvZGVfcmVzZXJ2 ZWRfc3BhY2U7Ci0JdTMyIHdwcl9yZWdpb25faWQ7Ci0JdTMyIHdwcl9vZmZzZXQ7Ci0JdTMyIG1t dV9tZW1fcmFuZ2U7Ci0jZGVmaW5lIEZMQ05fQUNSX01BWF9SRUdJT05TIDIKLQlzdHJ1Y3Qgewot CQl1MzIgbm9fcmVnaW9uczsKLQkJc3RydWN0IHsKLQkJCXUzMiBzdGFydF9hZGRyOwotCQkJdTMy IGVuZF9hZGRyOwotCQkJdTMyIHJlZ2lvbl9pZDsKLQkJCXUzMiByZWFkX21hc2s7Ci0JCQl1MzIg d3JpdGVfbWFzazsKLQkJCXUzMiBjbGllbnRfbWFzazsKLQkJfSByZWdpb25fcHJvcHNbRkxDTl9B Q1JfTUFYX1JFR0lPTlNdOwotCX0gcmVnaW9uczsKLQl1MzIgdWNvZGVfYmxvYl9zaXplOwotCXU2 NCB1Y29kZV9ibG9iX2Jhc2UgX19hbGlnbmVkKDgpOwotCXN0cnVjdCB7Ci0JCXUzMiB2cHJfZW5h YmxlZDsKLQkJdTMyIHZwcl9zdGFydDsKLQkJdTMyIHZwcl9lbmQ7Ci0JCXUzMiBoZGNwX3BvbGlj aWVzOwotCX0gdnByX2Rlc2M7Ci19OwotCi1zdGF0aWMgdm9pZAotZ20yMDBfc2VjYm9vdF9maXh1 cF9oc19kZXNjKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IsCi0JCQkgICAgc3RydWN0IGhzZmxj bl9hY3JfZGVzYyAqZGVzYykKLXsKLQlkZXNjLT51Y29kZV9ibG9iX2Jhc2UgPSBnc2ItPmxzX2Js b2ItPmFkZHI7Ci0JZGVzYy0+dWNvZGVfYmxvYl9zaXplID0gZ3NiLT5sc19ibG9iLT5zaXplOwot Ci0JZGVzYy0+d3ByX29mZnNldCA9IDA7Ci0KLQkvKiBXUFIgcmVnaW9uIGluZm9ybWF0aW9uIGlm IFdQUiBpcyBub3QgZml4ZWQgKi8KLQlpZiAoZ3NiLT53cHJfc2l6ZSA9PSAwKSB7Ci0JCWRlc2Mt Pndwcl9yZWdpb25faWQgPSAxOwotCQlkZXNjLT5yZWdpb25zLm5vX3JlZ2lvbnMgPSAxOwotCQlk ZXNjLT5yZWdpb25zLnJlZ2lvbl9wcm9wc1swXS5yZWdpb25faWQgPSAxOwotCQlkZXNjLT5yZWdp b25zLnJlZ2lvbl9wcm9wc1swXS5zdGFydF9hZGRyID0KLQkJCQkJCQkgZ3NiLT5hY3Jfd3ByX2Fk ZHIgPj4gODsKLQkJZGVzYy0+cmVnaW9ucy5yZWdpb25fcHJvcHNbMF0uZW5kX2FkZHIgPQotCQkJ CSAgIChnc2ItPmFjcl93cHJfYWRkciArIGdzYi0+YWNyX3dwcl9zaXplKSA+PiA4OwotCX0KLX0K LQotLyoqCi0gKiBnbTIwMF9zZWNib290X3ByZXBhcmVfaHNfYmxvYiAtIGxvYWQgYW5kIHByZXBh cmUgYSBIUyBibG9iIGFuZCBCTCBkZXNjcmlwdG9yCi0gKgotICogQGdzYiBzZWN1cmUgYm9vdCBp bnN0YW5jZSB0byBwcmVwYXJlIGZvcgotICogQGZ3IG5hbWUgb2YgdGhlIEhTIGZpcm13YXJlIHRv IGxvYWQKLSAqIEBibG9iIHBvaW50ZXIgdG8gZ3B1b2JqIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQg dG8gcmVjZWl2ZSB0aGUgSFMgRlcgcGF5bG9hZAotICogQGJsX2Rlc2MgcG9pbnRlciB0byB0aGUg QkwgZGVzY3JpcHRvciB0byB3cml0ZSBmb3IgdGhpcyBmaXJtd2FyZQotICogQHBhdGNoIHdoZXRo ZXIgd2Ugc2hvdWxkIHBhdGNoIHRoZSBIUyBkZXNjcmlwdG9yIChvbmx5IGZvciBIUyBsb2FkZXJz KQotICovCi1zdGF0aWMgaW50Ci1nbTIwMF9zZWNib290X3ByZXBhcmVfaHNfYmxvYihzdHJ1Y3Qg Z20yMDBfc2VjYm9vdCAqZ3NiLCBjb25zdCBjaGFyICpmdywKLQkJCSAgICAgIHN0cnVjdCBudmtt X2dwdW9iaiAqKmJsb2IsCi0JCQkgICAgICBzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyICpsb2FkX2hl YWRlciwgYm9vbCBwYXRjaCkKLXsKLQlzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9ICZnc2It PmJhc2Uuc3ViZGV2OwotCXZvaWQgKmFjcl9pbWFnZTsKLQlzdHJ1Y3QgZndfYmluX2hlYWRlciAq aHNiaW5faGRyOwotCXN0cnVjdCBoc2ZfZndfaGVhZGVyICpmd19oZHI7Ci0Jc3RydWN0IGhzZl9s b2FkX2hlYWRlciAqbG9hZF9oZHI7Ci0Jdm9pZCAqYWNyX2RhdGE7Ci0JaW50IHJldDsKLQotCWFj cl9pbWFnZSA9IGdtMjAwX3NlY2Jvb3RfbG9hZF9maXJtd2FyZShzdWJkZXYsIGZ3LCAwKTsKLQlp ZiAoSVNfRVJSKGFjcl9pbWFnZSkpCi0JCXJldHVybiBQVFJfRVJSKGFjcl9pbWFnZSk7Ci0KLQlo c2Jpbl9oZHIgPSBhY3JfaW1hZ2U7Ci0JZndfaGRyID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5o ZWFkZXJfb2Zmc2V0OwotCWxvYWRfaGRyID0gYWNyX2ltYWdlICsgZndfaGRyLT5oZHJfb2Zmc2V0 OwotCWFjcl9kYXRhID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5kYXRhX29mZnNldDsKLQotCS8q IFBhdGNoIHNpZ25hdHVyZSAqLwotCWdtMjAwX3NlY2Jvb3RfaHNmX3BhdGNoX3NpZ25hdHVyZShn c2IsIGFjcl9pbWFnZSk7Ci0KLQkvKiBQYXRjaCBkZXNjcmlwdG9yIHdpdGggV1BSIGluZm9ybWF0 aW9uPyAqLwotCWlmIChwYXRjaCkgewotCQlzdHJ1Y3QgaHNmbGNuX2Fjcl9kZXNjICpkZXNjOwot Ci0JCWRlc2MgPSBhY3JfZGF0YSArIGxvYWRfaGRyLT5kYXRhX2RtYV9iYXNlOwotCQlnbTIwMF9z ZWNib290X2ZpeHVwX2hzX2Rlc2MoZ3NiLCBkZXNjKTsKLQl9Ci0KLQlpZiAobG9hZF9oZHItPm51 bV9hcHBzID4gR00yMDBfQUNSX01BWF9BUFBTKSB7Ci0JCW52a21fZXJyb3Ioc3ViZGV2LCAibW9y ZSBhcHBzICglZCkgdGhhbiBzdXBwb3J0ZWQgKCVkKSEiLAotCQkJICAgbG9hZF9oZHItPm51bV9h cHBzLCBHTTIwMF9BQ1JfTUFYX0FQUFMpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFu dXA7Ci0JfQotCW1lbWNweShsb2FkX2hlYWRlciwgbG9hZF9oZHIsIHNpemVvZigqbG9hZF9oZWFk ZXIpICsKLQkJCSAgICAgICAoc2l6ZW9mKGxvYWRfaGRyLT5hcHBbMF0pICogbG9hZF9oZHItPm51 bV9hcHBzKSk7Ci0KLQkvKiBDcmVhdGUgQUNSIGJsb2IgYW5kIGNvcHkgSFMgZGF0YSB0byBpdCAq LwotCXJldCA9IG52a21fZ3B1b2JqX25ldyhzdWJkZXYtPmRldmljZSwgQUxJR04oaHNiaW5faGRy LT5kYXRhX3NpemUsIDI1NiksCi0JCQkgICAgICAweDEwMDAsIGZhbHNlLCBOVUxMLCBibG9iKTsK LQlpZiAocmV0KQotCQlnb3RvIGNsZWFudXA7Ci0KLQludmttX2ttYXAoKmJsb2IpOwotCW52a21f Z3B1b2JqX21lbWNweV90bygqYmxvYiwgMCwgYWNyX2RhdGEsIGhzYmluX2hkci0+ZGF0YV9zaXpl KTsKLQludmttX2RvbmUoKmJsb2IpOwotCi1jbGVhbnVwOgotCWtmcmVlKGFjcl9pbWFnZSk7Ci0K LQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogSGlnaC1zZWN1cmUgYm9vdGxvYWRlciBibG9iIGNy ZWF0aW9uCi0gKi8KLQotc3RhdGljIGludAotZ20yMDBfc2VjYm9vdF9wcmVwYXJlX2hzYmxfYmxv YihzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiKQotewotCXN0cnVjdCBudmttX3N1YmRldiAqc3Vi ZGV2ID0gJmdzYi0+YmFzZS5zdWJkZXY7Ci0KLQlnc2ItPmhzYmxfYmxvYiA9IGdtMjAwX3NlY2Jv b3RfbG9hZF9maXJtd2FyZShzdWJkZXYsICJhY3IvYmwiLCAwKTsKLQlpZiAoSVNfRVJSKGdzYi0+ aHNibF9ibG9iKSkgewotCQlpbnQgcmV0ID0gUFRSX0VSUihnc2ItPmhzYmxfYmxvYik7Ci0KLQkJ Z3NiLT5oc2JsX2Jsb2IgPSBOVUxMOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwot fQotCi0vKioKLSAqIGdtMjB4X3NlY2Jvb3RfcHJlcGFyZV9ibG9icyAtIGxvYWQgYmxvYnMgY29t bW9uIHRvIGFsbCBHTTIwWCBHUFVzLgotICoKLSAqIFRoaXMgaW5jbHVkZXMgdGhlIExTIGJsb2Is IEhTIHVjb2RlIGxvYWRpbmcgYmxvYiwgYW5kIEhTIGJvb3Rsb2FkZXIuCi0gKgotICogVGhlIEhT IHVjb2RlIHVubG9hZCBibG9iIGlzIG9ubHkgdXNlZCBvbiBkR1BVLgotICovCi1pbnQKLWdtMjB4 X3NlY2Jvb3RfcHJlcGFyZV9ibG9icyhzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiKQotewotCWlu dCByZXQ7Ci0KLQkvKiBMb2FkIGFuZCBwcmVwYXJlIHRoZSBtYW5hZ2VkIGZhbGNvbidzIGZpcm13 YXJlcyAqLwotCWlmICghZ3NiLT5sc19ibG9iKSB7Ci0JCXJldCA9IGdtMjAwX3NlY2Jvb3RfcHJl cGFyZV9sc19ibG9iKGdzYik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8q IExvYWQgdGhlIEhTIGZpcm13YXJlIHRoYXQgd2lsbCBsb2FkIHRoZSBMUyBmaXJtd2FyZXMgKi8K LQlpZiAoIWdzYi0+YWNyX2xvYWRfYmxvYikgewotCQlyZXQgPSBnbTIwMF9zZWNib290X3ByZXBh cmVfaHNfYmxvYihnc2IsICJhY3IvdWNvZGVfbG9hZCIsCi0JCQkJCQkmZ3NiLT5hY3JfbG9hZF9i bG9iLAotCQkJCQkJJmdzYi0+bG9hZF9ibF9oZWFkZXIsIHRydWUpOwotCQlpZiAocmV0KQotCQkJ cmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBMb2FkIHRoZSBIUyBmaXJtd2FyZSBib290bG9hZGVyICov Ci0JaWYgKCFnc2ItPmhzYmxfYmxvYikgewotCQlyZXQgPSBnbTIwMF9zZWNib290X3ByZXBhcmVf aHNibF9ibG9iKGdzYik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50Ci1nbTIwMF9zZWNib290X3ByZXBhcmVfYmxvYnMoc3RydWN0 IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ20yMHhfc2VjYm9v dF9wcmVwYXJlX2Jsb2JzKGdzYik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIGRH UFUgb25seTogbG9hZCB0aGUgSFMgZmlybXdhcmUgdGhhdCB1bnByb3RlY3RzIHRoZSBXUFIgcmVn aW9uICovCi0JaWYgKCFnc2ItPmFjcl91bmxvYWRfYmxvYikgewotCQlyZXQgPSBnbTIwMF9zZWNi b290X3ByZXBhcmVfaHNfYmxvYihnc2IsICJhY3IvdWNvZGVfdW5sb2FkIiwKLQkJCQkJICAgICAg ICZnc2ItPmFjcl91bmxvYWRfYmxvYiwKLQkJCQkJICAgICAgICZnc2ItPnVubG9hZF9ibF9oZWFk ZXIsIGZhbHNlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQKLWdtMjAwX3NlY2Jvb3RfYmxvYnNfcmVhZHkoc3RydWN0IGdtMjAw X3NlY2Jvb3QgKmdzYikKLXsKLQlzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9ICZnc2ItPmJh c2Uuc3ViZGV2OwotCWludCByZXQ7Ci0KLQkvKiBmaXJtd2FyZSBhbHJlYWR5IGxvYWRlZCwgbm90 aGluZyB0byBkby4uLiAqLwotCWlmIChnc2ItPmZpcm13YXJlX29rKQotCQlyZXR1cm4gMDsKLQot CXJldCA9IGdzYi0+ZnVuYy0+cHJlcGFyZV9ibG9icyhnc2IpOwotCWlmIChyZXQpIHsKLQkJbnZr bV9lcnJvcihzdWJkZXYsICJmYWlsZWQgdG8gbG9hZCBzZWN1cmUgZmlybXdhcmVcbiIpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCWdzYi0+ZmlybXdhcmVfb2sgPSB0cnVlOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLQotLyoKLSAqIFNlY3VyZSBCb290IEV4ZWN1dGlvbgotICovCi0KLS8qKgotICogZ20y MDBfc2VjYm9vdF9sb2FkX2hzX2JsKCkgLSBsb2FkIEhTIGJvb3Rsb2FkZXIgaW50byBETUVNIGFu ZCBJTUVNCi0gKi8KLXN0YXRpYyB2b2lkCi1nbTIwMF9zZWNib290X2xvYWRfaHNfYmwoc3RydWN0 IGdtMjAwX3NlY2Jvb3QgKmdzYiwgdm9pZCAqZGF0YSwgdTMyIGRhdGFfc2l6ZSkKLXsKLQlzdHJ1 Y3QgbnZrbV9kZXZpY2UgKmRldmljZSA9IGdzYi0+YmFzZS5zdWJkZXYuZGV2aWNlOwotCXN0cnVj dCBmd19iaW5faGVhZGVyICpoZHIgPSBnc2ItPmhzYmxfYmxvYjsKLQlzdHJ1Y3QgZndfYmxfZGVz YyAqaHNibF9kZXNjID0gZ3NiLT5oc2JsX2Jsb2IgKyBoZHItPmhlYWRlcl9vZmZzZXQ7Ci0Jdm9p ZCAqYmxvYl9kYXRhID0gZ3NiLT5oc2JsX2Jsb2IgKyBoZHItPmRhdGFfb2Zmc2V0OwotCXZvaWQg KmhzYmxfY29kZSA9IGJsb2JfZGF0YSArIGhzYmxfZGVzYy0+Y29kZV9vZmY7Ci0Jdm9pZCAqaHNi bF9kYXRhID0gYmxvYl9kYXRhICsgaHNibF9kZXNjLT5kYXRhX29mZjsKLQl1MzIgY29kZV9zaXpl ID0gQUxJR04oaHNibF9kZXNjLT5jb2RlX3NpemUsIDI1Nik7Ci0JY29uc3QgdTMyIGJhc2UgPSBn c2ItPmJhc2UuYmFzZTsKLQl1MzIgY29kZV9zdGFydDsKLQotCS8qCi0JICogQ29weSBIUyBib290 bG9hZGVyIGRhdGEKLQkgKi8KLQludmttX2ZhbGNvbl9sb2FkX2RtZW0oZGV2aWNlLCBnc2ItPmJh c2UuYmFzZSwgaHNibF9kYXRhLCAweDAwMDAwLAotCQkJICAgICAgaHNibF9kZXNjLT5kYXRhX3Np emUpOwotCi0JLyoKLQkgKiBDb3B5IEhTIGJvb3Rsb2FkZXIgaW50ZXJmYWNlIHN0cnVjdHVyZSB3 aGVyZSB0aGUgSFMgZGVzY3JpcHRvcgotCSAqIGV4cGVjdHMgaXQgdG8gYmUKLQkgKi8KLQludmtt X2ZhbGNvbl9sb2FkX2RtZW0oZGV2aWNlLCBnc2ItPmJhc2UuYmFzZSwgZGF0YSwKLQkJCSAgICAg IGhzYmxfZGVzYy0+ZG1lbV9sb2FkX29mZiwgZGF0YV9zaXplKTsKLQotCS8qIENvcHkgSFMgYm9v dGxvYWRlciBjb2RlIHRvIGVuZCBvZiBJTUVNICovCi0JY29kZV9zdGFydCA9IChudmttX3JkMzIo ZGV2aWNlLCBiYXNlICsgMHgxMDgpICYgMHgxZmYpIDw8IDg7Ci0JY29kZV9zdGFydCAtPSBjb2Rl X3NpemU7Ci0JbnZrbV9mYWxjb25fbG9hZF9pbWVtKGRldmljZSwgZ3NiLT5iYXNlLmJhc2UsIGhz YmxfY29kZSwgY29kZV9zdGFydCwKLQkJCSAgICAgIGNvZGVfc2l6ZSwgaHNibF9kZXNjLT5zdGFy dF90YWcpOwotfQotCi0vKioKICAqIGdtMjAwX3NlY2Jvb3Rfc2V0dXBfZmFsY29uKCkgLSBzZXQg dXAgdGhlIHNlY3VyZSBmYWxjb24gZm9yIHNlY3VyZSBib290CiAgKi8KIHN0YXRpYyBpbnQKLWdt MjAwX3NlY2Jvb3Rfc2V0dXBfZmFsY29uKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IpCitnbTIw MF9zZWNib290X3NldHVwX2ZhbGNvbihzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBzdHJ1Y3Qg bnZrbV9hY3IgKmFjcikKIHsKIAlzdHJ1Y3QgbnZrbV9kZXZpY2UgKmRldmljZSA9IGdzYi0+YmFz ZS5zdWJkZXYuZGV2aWNlOwotCXN0cnVjdCBmd19iaW5faGVhZGVyICpoZHIgPSBnc2ItPmhzYmxf YmxvYjsKLQlzdHJ1Y3QgZndfYmxfZGVzYyAqaHNibF9kZXNjID0gZ3NiLT5oc2JsX2Jsb2IgKyBo ZHItPmhlYWRlcl9vZmZzZXQ7Ci0JLyogdmlydHVhbCBzdGFydCBhZGRyZXNzIGZvciBib290IHZl Y3RvciAqLwotCXUzMiB2aXJ0X2FkZHIgPSBoc2JsX2Rlc2MtPnN0YXJ0X3RhZyA8PCA4OwogCWNv bnN0IHUzMiBiYXNlID0gZ3NiLT5iYXNlLmJhc2U7CiAJY29uc3QgdTMyIHJlZ19iYXNlID0gYmFz ZSArIDB4ZTAwOwogCXUzMiBpbnN0X2xvYzsKQEAgLTEwNzUsMTM1ICs2NSw1MiBAQCBnbTIwMF9z ZWNib290X3NldHVwX2ZhbGNvbihzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiKQogCQkgIChpbnN0 X2xvYyA8PCAyOCkgfCAoMSA8PCAzMCkpOwogCiAJLyogU2V0IGJvb3QgdmVjdG9yIHRvIGNvZGUn cyBzdGFydGluZyB2aXJ0dWFsIGFkZHJlc3MgKi8KLQludmttX3dyMzIoZGV2aWNlLCBiYXNlICsg MHgxMDQsIHZpcnRfYWRkcik7CisJbnZrbV93cjMyKGRldmljZSwgYmFzZSArIDB4MTA0LCBhY3It PnN0YXJ0X2FkZHJlc3MpOworCisJLyogQ2xlYXIgbWFpbGJveCByZWdpc3RlciB1c2VkIHRvIHJl ZmxlY3QgY2FwYWJpbGl0aWVzICovCisJbnZrbV93cjMyKGRldmljZSwgYmFzZSArIDB4MDQ0LCAw eDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogZ20yMDBfc2VjYm9vdF9ydW5faHNfYmxv YigpIC0gcnVuIHRoZSBnaXZlbiBoaWdoLXNlY3VyZSBibG9iCisgKiBnbTIwMF9zZWNib290X3J1 bl9ibG9iKCkgLSBydW4gdGhlIGdpdmVuIGhpZ2gtc2VjdXJlIGJsb2IKKyAqCiAgKi8KLXN0YXRp YyBpbnQKLWdtMjAwX3NlY2Jvb3RfcnVuX2hzX2Jsb2Ioc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdz Yiwgc3RydWN0IG52a21fZ3B1b2JqICpibG9iKQoraW50CitnbTIwMF9zZWNib290X3J1bl9ibG9i KHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLCBzdHJ1Y3QgbnZrbV9ncHVvYmogKmJsb2IpCiB7CisJ c3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiA9IGdtMjAwX3NlY2Jvb3Qoc2IpOwogCXN0cnVjdCBu dmttX3ZtYSB2bWE7Ci0JY29uc3QgdTMyIGJsX2Rlc2Nfc2l6ZSA9IGdzYi0+ZnVuYy0+YmxfZGVz Y19zaXplOwotCWNvbnN0IHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgKmxvYWRfaGRyOwotCXU4IGJs X2Rlc2NbYmxfZGVzY19zaXplXTsKIAlpbnQgcmV0OwogCi0JLyogRmluZCB0aGUgYm9vdGxvYWRl ciBkZXNjcmlwdG9yIGZvciBvdXIgYmxvYiBhbmQgY29weSBpdCAqLwotCWlmIChibG9iID09IGdz Yi0+YWNyX2xvYWRfYmxvYikgewotCQlsb2FkX2hkciA9ICZnc2ItPmxvYWRfYmxfaGVhZGVyOwot Ci0JfSBlbHNlIGlmIChibG9iID09IGdzYi0+YWNyX3VubG9hZF9ibG9iKSB7Ci0JCWxvYWRfaGRy ID0gJmdzYi0+dW5sb2FkX2JsX2hlYWRlcjsKLQl9IGVsc2UgewotCQludmttX2Vycm9yKCZnc2It PmJhc2Uuc3ViZGV2LCAiaW52YWxpZCBzZWN1cmUgYm9vdCBibG9iIVxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQogCS8qIE1hcCB0aGUgSFMgZmlybXdhcmUgc28gdGhlIEhTIGJvb3Rsb2Fk ZXIgY2FuIHNlZSBpdCAqLwogCXJldCA9IG52a21fZ3B1b2JqX21hcChibG9iLCBnc2ItPnZtLCBO Vl9NRU1fQUNDRVNTX1JXLCAmdm1hKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JLyog R2VuZXJhdGUgdGhlIEJMIGhlYWRlciAqLwotCWdzYi0+ZnVuYy0+Z2VuZXJhdGVfYmxfZGVzYyhs b2FkX2hkciwgYmxfZGVzYywgdm1hLm9mZnNldCk7Ci0KIAkvKiBSZXNldCB0aGUgZmFsY29uIGFu ZCBtYWtlIGl0IHJlYWR5IHRvIHJ1biB0aGUgSFMgYm9vdGxvYWRlciAqLwotCXJldCA9IGdtMjAw X3NlY2Jvb3Rfc2V0dXBfZmFsY29uKGdzYik7CisJcmV0ID0gZ20yMDBfc2VjYm9vdF9zZXR1cF9m YWxjb24oZ3NiLCBzYi0+YWNyKTsKIAlpZiAocmV0KQotCQlnb3RvIGVuZDsKKwkJZ290byBkb25l OwogCiAJLyogTG9hZCB0aGUgSFMgYm9vdGxvYWRlciBpbnRvIHRoZSBmYWxjb24ncyBJTUVNL0RN RU0gKi8KLQlnbTIwMF9zZWNib290X2xvYWRfaHNfYmwoZ3NiLCAmYmxfZGVzYywgYmxfZGVzY19z aXplKTsKKwlyZXQgPSBzYi0+YWNyLT5mdW5jLT5sb2FkKHNiLT5hY3IsICZnc2ItPmJhc2UsIGJs b2IsIHZtYS5vZmZzZXQpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKIAogCS8qIFN0YXJ0IHRo ZSBIUyBib290bG9hZGVyICovCi0JcmV0ID0gbnZrbV9zZWNib290X2ZhbGNvbl9ydW4oJmdzYi0+ YmFzZSk7CisJcmV0ID0gbnZrbV9zZWNib290X2ZhbGNvbl9ydW4oc2IpOwogCWlmIChyZXQpCi0J CWdvdG8gZW5kOworCQlnb3RvIGRvbmU7CiAKLWVuZDoKK2RvbmU6CiAJLyogV2UgZG9uJ3QgbmVl ZCB0aGUgQUNSIGZpcm13YXJlIGFueW1vcmUgKi8KIAludmttX2dwdW9ial91bm1hcCgmdm1hKTsK IAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBnbTIwMF9zZWNib290X3Jlc2V0KCkgLSBleGVj dXRlIHNlY3VyZSBib290IGZyb20gdGhlIHByZXBhcmVkIHN0YXRlCi0gKgotICogTG9hZCB0aGUg SFMgYm9vdGxvYWRlciBhbmQgYXNrIHRoZSBmYWxjb24gdG8gcnVuIGl0LiBUaGlzIHdpbGwgaW4g dHVybgotICogbG9hZCB0aGUgSFMgZmlybXdhcmUgYW5kIHJ1biBpdCwgc28gb25jZSB0aGUgZmFs Y29uIHN0b3BzIGFsbCB0aGUgbWFuYWdlZAotICogZmFsY29ucyBzaG91bGQgaGF2ZSB0aGVpciBM UyBmaXJtd2FyZSBsb2FkZWQgYW5kIGJlIHJlYWR5IHRvIHJ1bi4KLSAqLwotaW50Ci1nbTIwMF9z ZWNib290X3Jlc2V0KHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLCBlbnVtIG52a21fZmFsY29uaWR4 IGZhbGNvbikKLXsKLQlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiID0gZ20yMDBfc2VjYm9vdChz Yik7Ci0JaW50IHJldDsKLQotCS8qIE1ha2Ugc3VyZSBhbGwgYmxvYnMgYXJlIHJlYWR5ICovCi0J cmV0ID0gZ20yMDBfc2VjYm9vdF9ibG9ic19yZWFkeShnc2IpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQkvKgotCSAqIER1bW15IEdNMjAwIGltcGxlbWVudGF0aW9uOiBwZXJmb3JtIHNl Y3VyZSBib290IGVhY2ggdGltZSB3ZSBhcmUKLQkgKiBjYWxsZWQgb24gRkVDUy4gU2luY2Ugb25s eSBGRUNTIGFuZCBHUENDUyBhcmUgbWFuYWdlZCBhbmQgc3RhcnRlZAotCSAqIHRvZ2V0aGVyLCB0 aGlzIG91Z2h0IHRvIGJlIHNhZmUuCi0JICoKLQkgKiBPbmNlIHdlIGhhdmUgcHJvcGVyIFBNVSBm aXJtd2FyZSBhbmQgc3VwcG9ydCwgdGhpcyB3aWxsIGJlIGNoYW5nZWQKLQkgKiB0byBhIHByb3Bl ciBjYWxsIHRvIHRoZSBQTVUgbWV0aG9kLgotCSAqLwotCWlmIChmYWxjb24gIT0gTlZLTV9GQUxD T05fRkVDUykKLQkJZ290byBlbmQ7Ci0KLQkvKiBJZiBXUFIgaXMgc2V0IGFuZCB3ZSBoYXZlIGFu IHVubG9hZCBibG9iLCBydW4gaXQgdG8gdW5sb2NrIFdQUiAqLwotCWlmIChnc2ItPmFjcl91bmxv YWRfYmxvYiAmJgotCSAgICBnc2ItPmZhbGNvbl9zdGF0ZVtOVktNX0ZBTENPTl9GRUNTXSAhPSBO T05fU0VDVVJFKSB7Ci0JCXJldCA9IGdtMjAwX3NlY2Jvb3RfcnVuX2hzX2Jsb2IoZ3NiLCBnc2It PmFjcl91bmxvYWRfYmxvYik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8q IFJlbG9hZCBhbGwgbWFuYWdlZCBmYWxjb25zICovCi0JcmV0ID0gZ20yMDBfc2VjYm9vdF9ydW5f aHNfYmxvYihnc2IsIGdzYi0+YWNyX2xvYWRfYmxvYik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJl dDsKLQotZW5kOgotCWdzYi0+ZmFsY29uX3N0YXRlW2ZhbGNvbl0gPSBSRVNFVDsKLQlyZXR1cm4g MDsKLX0KLQotaW50Ci1nbTIwMF9zZWNib290X3N0YXJ0KHN0cnVjdCBudmttX3NlY2Jvb3QgKnNi LCBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbikKLXsKLQlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAq Z3NiID0gZ20yMDBfc2VjYm9vdChzYik7Ci0JaW50IGJhc2U7Ci0KLQlzd2l0Y2ggKGZhbGNvbikg ewotCWNhc2UgTlZLTV9GQUxDT05fRkVDUzoKLQkJYmFzZSA9IDB4NDA5MDAwOwotCQlicmVhazsK LQljYXNlIE5WS01fRkFMQ09OX0dQQ0NTOgotCQliYXNlID0gMHg0MWEwMDA7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCW52a21fZXJyb3IoJnNiLT5zdWJkZXYsICJjYW5ub3Qgc3RhcnQgdW5oYW5k bGVkIGZhbGNvbiFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQludmttX3dyMzIoc2It PnN1YmRldi5kZXZpY2UsIGJhc2UgKyAweDEzMCwgMHgwMDAwMDAwMik7Ci0JZ3NiLT5mYWxjb25f c3RhdGVbZmFsY29uXSA9IFJVTk5JTkc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KIGludAogZ20y MDBfc2VjYm9vdF9vbmVpbml0KHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiKQogewpAQCAtMTI0MCwy MyArMTQ3LDIyIEBAIGdtMjAwX3NlY2Jvb3Rfb25laW5pdChzdHJ1Y3QgbnZrbV9zZWNib290ICpz YikKIAludmttX3dvMzIoZ3NiLT5pbnN0LCAweDIwYywgdXBwZXJfMzJfYml0cyh2bV9hcmVhX2xl biAtIDEpKTsKIAludmttX2RvbmUoZ3NiLT5pbnN0KTsKIAorCWlmIChzYi0+YWNyLT5mdW5jLT5v bmVpbml0KSB7CisJCXJldCA9IHNiLT5hY3ItPmZ1bmMtPm9uZWluaXQoc2ItPmFjciwgc2IpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogaW50CiBn bTIwMF9zZWNib290X2Zpbmkoc3RydWN0IG52a21fc2VjYm9vdCAqc2IsIGJvb2wgc3VzcGVuZCkK IHsKLQlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiID0gZ20yMDBfc2VjYm9vdChzYik7CiAJaW50 IHJldCA9IDA7Ci0JaW50IGk7CiAKLQkvKiBSdW4gdGhlIHVubG9hZCBibG9iIHRvIHVucHJvdGVj dCB0aGUgV1BSIHJlZ2lvbiAqLwotCWlmIChnc2ItPmFjcl91bmxvYWRfYmxvYiAmJgotCSAgICBn c2ItPmZhbGNvbl9zdGF0ZVtOVktNX0ZBTENPTl9GRUNTXSAhPSBOT05fU0VDVVJFKQotCQlyZXQg PSBnbTIwMF9zZWNib290X3J1bl9oc19ibG9iKGdzYiwgZ3NiLT5hY3JfdW5sb2FkX2Jsb2IpOwot Ci0JZm9yIChpID0gMDsgaSA8IE5WS01fRkFMQ09OX0VORDsgaSsrKQotCQlnc2ItPmZhbGNvbl9z dGF0ZVtpXSA9IE5PTl9TRUNVUkU7CisJaWYgKHNiLT5hY3ItPmZ1bmMtPmZpbmkpCisJCXJldCA9 IHNiLT5hY3ItPmZ1bmMtPmZpbmkoc2ItPmFjciwgc2IsIHN1c3BlbmQpOwogCiAJcmV0dXJuIHJl dDsKIH0KQEAgLTEyNjYsMTEgKzE3Miw3IEBAIGdtMjAwX3NlY2Jvb3RfZHRvcihzdHJ1Y3QgbnZr bV9zZWNib290ICpzYikKIHsKIAlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiID0gZ20yMDBfc2Vj Ym9vdChzYik7CiAKLQludmttX2dwdW9ial9kZWwoJmdzYi0+YWNyX3VubG9hZF9ibG9iKTsKLQot CWtmcmVlKGdzYi0+aHNibF9ibG9iKTsKLQludmttX2dwdW9ial9kZWwoJmdzYi0+YWNyX2xvYWRf YmxvYik7Ci0JbnZrbV9ncHVvYmpfZGVsKCZnc2ItPmxzX2Jsb2IpOworCXNiLT5hY3ItPmZ1bmMt PmR0b3Ioc2ItPmFjcik7CiAKIAludmttX3ZtX3JlZihOVUxMLCAmZ3NiLT52bSwgZ3NiLT5wZ2Qp OwogCW52a21fZ3B1b2JqX2RlbCgmZ3NiLT5wZ2QpOwpAQCAtMTI4NSwzNyArMTg3LDcgQEAgZ20y MDBfc2VjYm9vdCA9IHsKIAkuZHRvciA9IGdtMjAwX3NlY2Jvb3RfZHRvciwKIAkub25laW5pdCA9 IGdtMjAwX3NlY2Jvb3Rfb25laW5pdCwKIAkuZmluaSA9IGdtMjAwX3NlY2Jvb3RfZmluaSwKLQku cmVzZXQgPSBnbTIwMF9zZWNib290X3Jlc2V0LAotCS5zdGFydCA9IGdtMjAwX3NlY2Jvb3Rfc3Rh cnQsCi0JLm1hbmFnZWRfZmFsY29ucyA9IEJJVChOVktNX0ZBTENPTl9GRUNTKSB8Ci0JCQkgICBC SVQoTlZLTV9GQUxDT05fR1BDQ1MpLAotCS5ib290X2ZhbGNvbiA9IE5WS01fRkFMQ09OX1BNVSwK LX07Ci0KLXN0YXRpYyB2b2lkCi1nbTIwMF9zZWNib290X2dlbmVyYXRlX2JsX2Rlc2MoY29uc3Qg c3RydWN0IGhzZl9sb2FkX2hlYWRlciAqaGRyLAotCQkJICAgICAgIHZvaWQgKl9ibF9kZXNjLCB1 NjQgb2Zmc2V0KQotewotCXN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rlc2MgKmJsX2Rlc2MgPSBfYmxf ZGVzYzsKLQotCW1lbXNldChibF9kZXNjLCAwLCBzaXplb2YoKmJsX2Rlc2MpKTsKLQlibF9kZXNj LT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9WSVJUOwotCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9v ZmYgPSBoZHItPm5vbl9zZWNfY29kZV9vZmY7Ci0JYmxfZGVzYy0+bm9uX3NlY19jb2RlX3NpemUg PSBoZHItPm5vbl9zZWNfY29kZV9zaXplOwotCWJsX2Rlc2MtPnNlY19jb2RlX29mZiA9IGhkci0+ YXBwWzBdLnNlY19jb2RlX29mZjsKLQlibF9kZXNjLT5zZWNfY29kZV9zaXplID0gaGRyLT5hcHBb MF0uc2VjX2NvZGVfc2l6ZTsKLQlibF9kZXNjLT5jb2RlX2VudHJ5X3BvaW50ID0gMDsKLQotCWJs X2Rlc2MtPmNvZGVfZG1hX2Jhc2UgPSB1NjRfdG9fZmxjbjY0KG9mZnNldCk7Ci0JYmxfZGVzYy0+ ZGF0YV9kbWFfYmFzZSA9IHU2NF90b19mbGNuNjQob2Zmc2V0ICsgaGRyLT5kYXRhX2RtYV9iYXNl KTsKLQlibF9kZXNjLT5kYXRhX3NpemUgPSBoZHItPmRhdGFfc2l6ZTsKLX0KLQotc3RhdGljIGNv bnN0IHN0cnVjdCBnbTIwMF9zZWNib290X2Z1bmMKLWdtMjAwX3NlY2Jvb3RfZnVuYyA9IHsKLQku YmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rlc2MpLAotCS5nZW5l cmF0ZV9ibF9kZXNjID0gZ20yMDBfc2VjYm9vdF9nZW5lcmF0ZV9ibF9kZXNjLAotCS5wcmVwYXJl X2Jsb2JzID0gZ20yMDBfc2VjYm9vdF9wcmVwYXJlX2Jsb2JzLAorCS5ydW5fYmxvYiA9IGdtMjAw X3NlY2Jvb3RfcnVuX2Jsb2IsCiB9OwogCiBpbnQKQEAgLTEzMjQsNiArMTk2LDExIEBAIGdtMjAw X3NlY2Jvb3RfbmV3KHN0cnVjdCBudmttX2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgsCiB7CiAJ aW50IHJldDsKIAlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiOworCXN0cnVjdCBudmttX2FjciAq YWNyOworCisJYWNyID0gbnZrbV9hY3JfcjM2MV9uZXcoKTsKKwlpZiAoSVNfRVJSKGFjcikpCisJ CXJldHVybiBQVFJfRVJSKGFjcik7CiAKIAlnc2IgPSBremFsbG9jKHNpemVvZigqZ3NiKSwgR0ZQ X0tFUk5FTCk7CiAJaWYgKCFnc2IpIHsKQEAgLTEzMzIsMTYgKzIwOSwxNiBAQCBnbTIwMF9zZWNi b290X25ldyhzdHJ1Y3QgbnZrbV9kZXZpY2UgKmRldmljZSwgaW50IGluZGV4LAogCX0KIAkqcHNi ID0gJmdzYi0+YmFzZTsKIAotCXJldCA9IG52a21fc2VjYm9vdF9jdG9yKCZnbTIwMF9zZWNib290 LCBkZXZpY2UsIGluZGV4LCAmZ3NiLT5iYXNlKTsKKwlyZXQgPSBudmttX3NlY2Jvb3RfY3Rvcigm Z20yMDBfc2VjYm9vdCwgYWNyLCBkZXZpY2UsIGluZGV4LAorCQkJCUJJVChOVktNX0ZBTENPTl9G RUNTKSB8IEJJVChOVktNX0ZBTENPTl9HUENDUyksCisJCQkJJmdzYi0+YmFzZSk7CiAJaWYgKHJl dCkKIAkJcmV0dXJuIHJldDsKIAotCWdzYi0+ZnVuYyA9ICZnbTIwMF9zZWNib290X2Z1bmM7Ci0J Z3NiLT5sc19mdW5jID0gJmdtMjAwX2xzX2Z1bmM7Ci0KIAlyZXR1cm4gMDsKIH0KIAorCiBNT0RV TEVfRklSTVdBUkUoIm52aWRpYS9nbTIwMC9hY3IvYmwuYmluIik7CiBNT0RVTEVfRklSTVdBUkUo Im52aWRpYS9nbTIwMC9hY3IvdWNvZGVfbG9hZC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgibnZp ZGlhL2dtMjAwL2Fjci91Y29kZV91bmxvYWQuYmluIik7CmRpZmYgLS1naXQgYS9kcm0vbm91dmVh dS9udmttL3N1YmRldi9zZWNib290L2dtMjAwLmggYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9z ZWNib290L2dtMjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40 NWFkZjFhM2JjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9z ZWNib290L2dtMjAwLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NiwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworI2lmbmRlZiBfX05WS01fU0VDQk9PVF9HTTIwMF9IX18KKyNkZWZpbmUgX19OVktNX1NF Q0JPT1RfR00yMDBfSF9fCisKKyNpbmNsdWRlICJwcml2LmgiCisKK3N0cnVjdCBnbTIwMF9zZWNi b290IHsKKwlzdHJ1Y3QgbnZrbV9zZWNib290IGJhc2U7CisKKwkvKiBJbnN0YW5jZSBibG9jayAm IGFkZHJlc3Mgc3BhY2UgdXNlZCBmb3IgSFMgRlcgZXhlY3V0aW9uICovCisJc3RydWN0IG52a21f Z3B1b2JqICppbnN0OworCXN0cnVjdCBudmttX2dwdW9iaiAqcGdkOworCXN0cnVjdCBudmttX3Zt ICp2bTsKK307CisjZGVmaW5lIGdtMjAwX3NlY2Jvb3Qoc2IpIGNvbnRhaW5lcl9vZihzYiwgc3Ry dWN0IGdtMjAwX3NlY2Jvb3QsIGJhc2UpCisKK2ludCBnbTIwMF9zZWNib290X29uZWluaXQoc3Ry dWN0IG52a21fc2VjYm9vdCAqKTsKK2ludCBnbTIwMF9zZWNib290X2Zpbmkoc3RydWN0IG52a21f c2VjYm9vdCAqLCBib29sKTsKK3ZvaWQgKmdtMjAwX3NlY2Jvb3RfZHRvcihzdHJ1Y3QgbnZrbV9z ZWNib290ICopOworaW50IGdtMjAwX3NlY2Jvb3RfcnVuX2Jsb2Ioc3RydWN0IG52a21fc2VjYm9v dCAqLCBzdHJ1Y3QgbnZrbV9ncHVvYmogKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJtL25v dXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwYi5jIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJk ZXYvc2VjYm9vdC9nbTIwYi5jCmluZGV4IDQwM2I0ZDY5MDkwMi4uNDFhODllYmRmNDkxIDEwMDY0 NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2dtMjBiLmMKKysrIGIvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwYi5jCkBAIC0yMCw5OCArMjAsOCBAQAog ICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJwcml2LmgiCi0K LSNpbmNsdWRlIDxjb3JlL2dwdW9iai5oPgotCi0vKgotICogVGhlIEJMIGhlYWRlciBmb3JtYXQg dXNlZCBieSBHTTIwQidzIGZpcm13YXJlIGlzIHNsaWdodGx5IGRpZmZlcmVudAotICogZnJvbSB0 aGUgb25lIG9mIEdNMjAwLiBGaXggdGhlIGRpZmZlcmVuY2VzIGhlcmUuCi0gKi8KLXN0cnVjdCBn bTIwYl9mbGNuX2JsX2Rlc2MgewotCXUzMiByZXNlcnZlZFs0XTsKLQl1MzIgc2lnbmF0dXJlWzRd OwotCXUzMiBjdHhfZG1hOwotCXUzMiBjb2RlX2RtYV9iYXNlOwotCXUzMiBub25fc2VjX2NvZGVf b2ZmOwotCXUzMiBub25fc2VjX2NvZGVfc2l6ZTsKLQl1MzIgc2VjX2NvZGVfb2ZmOwotCXUzMiBz ZWNfY29kZV9zaXplOwotCXUzMiBjb2RlX2VudHJ5X3BvaW50OwotCXUzMiBkYXRhX2RtYV9iYXNl OwotCXUzMiBkYXRhX3NpemU7Ci19OwotCi1zdGF0aWMgdm9pZAotZ20yMGJfc2VjYm9vdF9sc19i bF9kZXNjKGNvbnN0IHN0cnVjdCBsc191Y29kZV9pbWcgKmltZywgdTY0IHdwcl9hZGRyLAotCQkJ IHZvaWQgKl9kZXNjKQotewotCXN0cnVjdCBnbTIwYl9mbGNuX2JsX2Rlc2MgKmRlc2MgPSBfZGVz YzsKLQljb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVf ZGVzYzsKLQl1NjQgYmFzZTsKLQotCWJhc2UgPSB3cHJfYWRkciArIGltZy0+bHNiX2hlYWRlci51 Y29kZV9vZmYgKyBwZGVzYy0+YXBwX3N0YXJ0X29mZnNldDsKLQotCW1lbXNldChkZXNjLCAwLCBz aXplb2YoKmRlc2MpKTsKLQlkZXNjLT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9VQ09ERTsKLQlk ZXNjLT5jb2RlX2RtYV9iYXNlID0gKGJhc2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zm c2V0KSA+PiA4OwotCWRlc2MtPm5vbl9zZWNfY29kZV9zaXplID0gcGRlc2MtPmFwcF9yZXNpZGVu dF9jb2RlX3NpemU7Ci0JZGVzYy0+ZGF0YV9kbWFfYmFzZSA9IChiYXNlICsgcGRlc2MtPmFwcF9y ZXNpZGVudF9kYXRhX29mZnNldCkgPj4gODsKLQlkZXNjLT5kYXRhX3NpemUgPSBwZGVzYy0+YXBw X3Jlc2lkZW50X2RhdGFfc2l6ZTsKLQlkZXNjLT5jb2RlX2VudHJ5X3BvaW50ID0gcGRlc2MtPmFw cF9pbWVtX2VudHJ5OwotfQotCi1zdGF0aWMgaW50Ci1nbTIwYl9zZWNib290X3ByZXBhcmVfYmxv YnMoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsKLQlzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1 YmRldiA9ICZnc2ItPmJhc2Uuc3ViZGV2OwotCWludCBhY3Jfc2l6ZTsKLQlpbnQgcmV0OwotCi0J cmV0ID0gZ20yMHhfc2VjYm9vdF9wcmVwYXJlX2Jsb2JzKGdzYik7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCWFjcl9zaXplID0gZ3NiLT5hY3JfbG9hZF9ibG9iLT5zaXplOwotCS8qCi0J ICogT24gVGVncmEgdGhlIFdQUiByZWdpb24gaXMgc2V0IGJ5IHRoZSBib290bG9hZGVyLiBJdCBp cyBpbGxlZ2FsIGZvcgotCSAqIHRoZSBIUyBibG9iIHRvIGJlIGxhcmdlciB0aGFuIHRoaXMgcmVn aW9uLgotCSAqLwotCWlmIChhY3Jfc2l6ZSA+IGdzYi0+d3ByX3NpemUpIHsKLQkJbnZrbV9lcnJv cihzdWJkZXYsICJXUFIgcmVnaW9uIHRvbyBzbWFsbCBmb3IgRlcgYmxvYiFcbiIpOwotCQludmtt X2Vycm9yKHN1YmRldiwgInJlcXVpcmVkOiAlZEJcbiIsIGFjcl9zaXplKTsKLQkJbnZrbV9lcnJv cihzdWJkZXYsICJXUFIgc2l6ZTogJWRCXG4iLCBnc2ItPndwcl9zaXplKTsKLQkJcmV0dXJuIC1F Tk9TUEM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nbTIwYl9zZWNib290 X2dlbmVyYXRlX2JsX2Rlc2MoY29uc3Qgc3RydWN0IGhzZl9sb2FkX2hlYWRlciAqbG9hZF9oZHIs Ci0JCQkgICAgICAgdm9pZCAqX2JsX2Rlc2MsIHU2NCBvZmZzZXQpCi17Ci0Jc3RydWN0IGdtMjBi X2ZsY25fYmxfZGVzYyAqYmxfZGVzYyA9IF9ibF9kZXNjOwotCi0JbWVtc2V0KGJsX2Rlc2MsIDAs IHNpemVvZigqYmxfZGVzYykpOwotCWJsX2Rlc2MtPmN0eF9kbWEgPSBGQUxDT05fRE1BSURYX1ZJ UlQ7Ci0JYmxfZGVzYy0+bm9uX3NlY19jb2RlX29mZiA9IGxvYWRfaGRyLT5ub25fc2VjX2NvZGVf b2ZmOwotCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9zaXplID0gbG9hZF9oZHItPm5vbl9zZWNfY29k ZV9zaXplOwotCWJsX2Rlc2MtPnNlY19jb2RlX29mZiA9IGxvYWRfaGRyLT5hcHBbMF0uc2VjX2Nv ZGVfb2ZmOwotCWJsX2Rlc2MtPnNlY19jb2RlX3NpemUgPSBsb2FkX2hkci0+YXBwWzBdLnNlY19j b2RlX3NpemU7Ci0JYmxfZGVzYy0+Y29kZV9lbnRyeV9wb2ludCA9IDA7Ci0JYmxfZGVzYy0+Y29k ZV9kbWFfYmFzZSA9IG9mZnNldCA+PiA4OwotCWJsX2Rlc2MtPmRhdGFfZG1hX2Jhc2UgPSAob2Zm c2V0ICsgbG9hZF9oZHItPmRhdGFfZG1hX2Jhc2UpID4+IDg7Ci0JYmxfZGVzYy0+ZGF0YV9zaXpl ID0gbG9hZF9oZHItPmRhdGFfc2l6ZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBnbTIwMF9z ZWNib290X2Z1bmMKLWdtMjBiX3NlY2Jvb3RfZnVuYyA9IHsKLQkuYmxfZGVzY19zaXplID0gc2l6 ZW9mKHN0cnVjdCBnbTIwYl9mbGNuX2JsX2Rlc2MpLAotCS5nZW5lcmF0ZV9ibF9kZXNjID0gZ20y MGJfc2VjYm9vdF9nZW5lcmF0ZV9ibF9kZXNjLAotCS5wcmVwYXJlX2Jsb2JzID0gZ20yMGJfc2Vj Ym9vdF9wcmVwYXJlX2Jsb2JzLAotfTsKLQorI2luY2x1ZGUgImFjci5oIgorI2luY2x1ZGUgImdt MjAwLmgiCiAKICNpZmRlZiBDT05GSUdfQVJDSF9URUdSQQogI2RlZmluZSBURUdSQV9NQ19CQVNF CQkJCTB4NzAwMTkwMDAKQEAgLTEzOSwxNSArNDksMTUgQEAgZ20yMGJfdGVncmFfcmVhZF93cHIo c3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKIAkJbnZrbV9lcnJvcigmc2ItPnN1YmRldiwgIkNh bm5vdCBtYXAgVGVncmEgTUMgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIobWMpOwog CX0KLQlnc2ItPndwcl9hZGRyID0gaW9yZWFkMzJfbmF0aXZlKG1jICsgTUNfU0VDVVJJVFlfQ0FS VkVPVVQyX0JPTV8wKSB8CisJc2ItPndwcl9hZGRyID0gaW9yZWFkMzJfbmF0aXZlKG1jICsgTUNf U0VDVVJJVFlfQ0FSVkVPVVQyX0JPTV8wKSB8CiAJICAgICAgKCh1NjQpaW9yZWFkMzJfbmF0aXZl KG1jICsgTUNfU0VDVVJJVFlfQ0FSVkVPVVQyX0JPTV9ISV8wKSA8PCAzMik7Ci0JZ3NiLT53cHJf c2l6ZSA9IGlvcmVhZDMyX25hdGl2ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9TSVpFXzEy OEspCisJc2ItPndwcl9zaXplID0gaW9yZWFkMzJfbmF0aXZlKG1jICsgTUNfU0VDVVJJVFlfQ0FS VkVPVVQyX1NJWkVfMTI4SykKIAkJPDwgMTc7CiAJY2ZnID0gaW9yZWFkMzJfbmF0aXZlKG1jICsg TUNfU0VDVVJJVFlfQ0FSVkVPVVQyX0NGRzApOwogCWlvdW5tYXAobWMpOwogCiAJLyogQ2hlY2sg dGhhdCBXUFIgc2V0dGluZ3MgYXJlIHZhbGlkICovCi0JaWYgKGdzYi0+d3ByX3NpemUgPT0gMCkg eworCWlmIChzYi0+d3ByX3NpemUgPT0gMCkgewogCQludmttX2Vycm9yKCZzYi0+c3ViZGV2LCAi V1BSIHJlZ2lvbiBpcyBlbXB0eVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE4NSwx OSArOTUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52a21fc2VjYm9vdF9mdW5jCiBnbTIwYl9z ZWNib290ID0gewogCS5kdG9yID0gZ20yMDBfc2VjYm9vdF9kdG9yLAogCS5vbmVpbml0ID0gZ20y MGJfc2VjYm9vdF9vbmVpbml0LAotCS5yZXNldCA9IGdtMjAwX3NlY2Jvb3RfcmVzZXQsCi0JLnN0 YXJ0ID0gZ20yMDBfc2VjYm9vdF9zdGFydCwKLQkubWFuYWdlZF9mYWxjb25zID0gQklUKE5WS01f RkFMQ09OX0ZFQ1MpLAotCS5ib290X2ZhbGNvbiA9IE5WS01fRkFMQ09OX1BNVSwKLX07Ci0KLXN0 YXRpYyBjb25zdCBzZWNib290X2xzX2Z1bmMKLWdtMjBiX2xzX2Z1bmMgPSB7Ci0JW05WS01fRkFM Q09OX0ZFQ1NdID0gJihzdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYykgewotCQkubG9hZCA9 IGdtMjAwX2xzX2xvYWRfZmVjcywKLQkJLmdlbmVyYXRlX2JsX2Rlc2MgPSBnbTIwYl9zZWNib290 X2xzX2JsX2Rlc2MsCi0JCS5ibF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGdtMjBiX2ZsY25f YmxfZGVzYyksCi0JfSwKKwkuZmluaSA9IGdtMjAwX3NlY2Jvb3RfZmluaSwKKwkucnVuX2Jsb2Ig PSBnbTIwMF9zZWNib290X3J1bl9ibG9iLAogfTsKIAogaW50CkBAIC0yMDYsNiArMTA1LDExIEBA IGdtMjBiX3NlY2Jvb3RfbmV3KHN0cnVjdCBudmttX2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgs CiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiOworCXN0cnVjdCBudmtt X2FjciAqYWNyOworCisJYWNyID0gbnZrbV9hY3JfcjM1Ml9uZXcoKTsKKwlpZiAoSVNfRVJSKGFj cikpCisJCXJldHVybiBQVFJfRVJSKGFjcik7CiAKIAlnc2IgPSBremFsbG9jKHNpemVvZigqZ3Ni KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnc2IpIHsKQEAgLTIxNCwxMyArMTE4LDExIEBAIGdtMjBi X3NlY2Jvb3RfbmV3KHN0cnVjdCBudmttX2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgsCiAJfQog CSpwc2IgPSAmZ3NiLT5iYXNlOwogCi0JcmV0ID0gbnZrbV9zZWNib290X2N0b3IoJmdtMjBiX3Nl Y2Jvb3QsIGRldmljZSwgaW5kZXgsICZnc2ItPmJhc2UpOworCXJldCA9IG52a21fc2VjYm9vdF9j dG9yKCZnbTIwYl9zZWNib290LCBhY3IsIGRldmljZSwgaW5kZXgsCisJCQkJQklUKE5WS01fRkFM Q09OX0ZFQ1MpLCAmZ3NiLT5iYXNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZ3Ni LT5mdW5jID0gJmdtMjBiX3NlY2Jvb3RfZnVuYzsKLQlnc2ItPmxzX2Z1bmMgPSAmZ20yMGJfbHNf ZnVuYzsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2xzX3Vjb2RlLmggYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2xzX3Vjb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wNTE4 MzcxYTI4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNi b290L2xzX3Vjb2RlLmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTQsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICovCisKKyNpZm5kZWYgX19OVktNX1NFQ0JPT1RfTFNfVUNPREVfSF9fCisjZGVmaW5lIF9fTlZL TV9TRUNCT09UX0xTX1VDT0RFX0hfXworCisjaW5jbHVkZSA8Y29yZS9vcy5oPgorI2luY2x1ZGUg PGNvcmUvZmFsY29uLmg+CisjaW5jbHVkZSA8Y29yZS9zdWJkZXYuaD4KKworLyoKKyAqCisgKiBM UyBibG9iIHN0cnVjdHVyZXMKKyAqCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgbHNmX3Vjb2RlX2Rl c2MgLSBMUyBmYWxjb24gc2lnbmF0dXJlcworICogQHByZF9rZXlzOgkJc2lnbmF0dXJlIHRvIHVz ZSB3aGVuIHRoZSBHUFUgaXMgaW4gcHJvZHVjdGlvbiBtb2RlCisgKiBAZGdiX2tleXM6CQlzaWdu YXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBkZWJ1ZyBtb2RlCisgKiBAYl9wcmRfcHJl c2VudDoJd2hldGhlciB0aGUgcHJvZHVjdGlvbiBrZXkgaXMgcHJlc2VudAorICogQGJfZGdiX3By ZXNlbnQ6CXdoZXRoZXIgdGhlIGRlYnVnIGtleSBpcyBwcmVzZW50CisgKiBAZmFsY29uX2lkOgkJ SUQgb2YgdGhlIGZhbGNvbiB0aGUgdWNvZGUgYXBwbGllcyB0bworICoKKyAqIERpcmVjdGx5IGxv YWRlZCBmcm9tIGEgc2lnbmF0dXJlIGZpbGUuCisgKi8KK3N0cnVjdCBsc2ZfdWNvZGVfZGVzYyB7 CisJdTggcHJkX2tleXNbMl1bMTZdOworCXU4IGRiZ19rZXlzWzJdWzE2XTsKKwl1MzIgYl9wcmRf cHJlc2VudDsKKwl1MzIgYl9kYmdfcHJlc2VudDsKKwl1MzIgZmFsY29uX2lkOworfTsKKworLyoq CisgKiBzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgLSBMUyBmaXJtd2FyZSBoZWFkZXIKKyAqIEBzaWdu YXR1cmU6CQlzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBmaXJtd2FyZSBhZ2FpbnN0CisgKiBAdWNv ZGVfb2ZmOgkJb2Zmc2V0IG9mIHRoZSB1Y29kZSBibG9iIGluIHRoZSBXUFIgcmVnaW9uLiBUaGUg dWNvZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJsb2IgY29udGFpbnMgdGhlIGJvb3Rsb2Fk ZXIsIGNvZGUgYW5kIGRhdGEgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBMUyBmYWxj b24KKyAqIEB1Y29kZV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNvZGUgYmxvYiwgaW5jbHVkaW5nIGJv b3Rsb2FkZXIKKyAqIEBkYXRhX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBibG9iIGRhdGEKKyAq IEBibF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgY29kZQorICogQGJsX2ltZW1f b2ZmOglvZmZzZXQgaW4gaW1lbSBvZiB0aGUgYm9vdGxvYWRlcgorICogQGJsX2RhdGFfb2ZmOglv ZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YSBpbiBXUFIgcmVnaW9uCisgKiBAYmxfZGF0YV9z aXplOglzaXplIG9mIHRoZSBib290bG9hZGVyIGRhdGEKKyAqIEBhcHBfY29kZV9vZmY6CW9mZnNl dCBvZiB0aGUgYXBwIGNvZGUgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCisgKiBAYXBwX2NvZGVfc2l6 ZToJc2l6ZSBvZiB0aGUgYXBwIGNvZGUKKyAqIEBhcHBfZGF0YV9vZmY6CW9mZnNldCBvZiB0aGUg YXBwIGRhdGEgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCisgKiBAYXBwX2RhdGFfc2l6ZToJc2l6ZSBv ZiB0aGUgYXBwIGRhdGEKKyAqIEBmbGFnczoJCWZsYWdzIGZvciB0aGUgc2VjdXJlIGJvb3Rsb2Fk ZXIKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB3cml0dGVuIGludG8gdGhlIFdQUiByZWdpb24g Zm9yIGVhY2ggbWFuYWdlZCBmYWxjb24uIEVhY2gKKyAqIGluc3RhbmNlIGlzIHJlZmVyZW5jZWQg YnkgdGhlIGxzYl9vZmZzZXQgbWVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiBsc2Zfd3By X2hlYWRlci4KKyAqLworc3RydWN0IGxzZl9sc2JfaGVhZGVyIHsKKwlzdHJ1Y3QgbHNmX3Vjb2Rl X2Rlc2Mgc2lnbmF0dXJlOworCXUzMiB1Y29kZV9vZmY7CisJdTMyIHVjb2RlX3NpemU7CisJdTMy IGRhdGFfc2l6ZTsKKwl1MzIgYmxfY29kZV9zaXplOworCXUzMiBibF9pbWVtX29mZjsKKwl1MzIg YmxfZGF0YV9vZmY7CisJdTMyIGJsX2RhdGFfc2l6ZTsKKwl1MzIgYXBwX2NvZGVfb2ZmOworCXUz MiBhcHBfY29kZV9zaXplOworCXUzMiBhcHBfZGF0YV9vZmY7CisJdTMyIGFwcF9kYXRhX3NpemU7 CisJdTMyIGZsYWdzOworI2RlZmluZSBMU0ZfRkxBR19MT0FEX0NPREVfQVRfMAkJMQorI2RlZmlu ZSBMU0ZfRkxBR19ETUFDVExfUkVRX0NUWAkJNAorI2RlZmluZSBMU0ZfRkxBR19GT1JDRV9QUklW X0xPQUQJOAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgLSBMUyBibG9iIFdQ UiBIZWFkZXIKKyAqIEBmYWxjb25faWQ6CQlMUyBmYWxjb24gSUQKKyAqIEBsc2Jfb2Zmc2V0OgkJ b2Zmc2V0IG9mIHRoZSBsc2JfbHNmX2hlYWRlciBpbiB0aGUgV1BSIHJlZ2lvbgorICogQGJvb3Rz dHJhcF9vd25lcjoJc2VjdXJlIGZhbGNvbiByZXBvbnNpYmxlIGZvciBib290c3RyYXBwaW5nIHRo ZSBMUyBmYWxjb24KKyAqIEBsYXp5X2Jvb3RzdHJhcDoJc2tpcCBib290c3RyYXBwaW5nIGJ5IEFD UgorICogQHN0YXR1czoJCWJvb3RzdHJhcHBpbmcgc3RhdHVzCisgKgorICogQW4gYXJyYXkgb2Yg dGhlc2UgaXMgd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBXUFIgcmVnaW9uLCBvbmUg Zm9yCisgKiBlYWNoIG1hbmFnZWQgZmFsY29uLiBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieSBh biBpbnN0YW5jZSB3aGljaCBmYWxjb25faWQKKyAqIGlzIExTRl9GQUxDT05fSURfSU5WQUxJRC4K KyAqLworc3RydWN0IGxzZl93cHJfaGVhZGVyIHsKKwl1MzIgZmFsY29uX2lkOworCXUzMiBsc2Jf b2Zmc2V0OworCXUzMiBib290c3RyYXBfb3duZXI7CisJdTMyIGxhenlfYm9vdHN0cmFwOworCXUz MiBzdGF0dXM7CisjZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfTk9ORQkJCQkwCisjZGVmaW5lIExT Rl9JTUFHRV9TVEFUVVNfQ09QWQkJCQkxCisjZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURB VElPTl9DT0RFX0ZBSUxFRAkJMgorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05f REFUQV9GQUlMRUQJCTMKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX0RPTkUJ CTQKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX1NLSVBQRUQJCTUKKyNkZWZp bmUgTFNGX0lNQUdFX1NUQVRVU19CT09UU1RSQVBfUkVBRFkJCTYKK307CisKKworLyoqCisgKiBz dHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgLSBkZXNjcmlwdG9yIG9mIGZpcm13YXJlIGltYWdlCisg KiBAZGVzY3JpcHRvcl9zaXplOgkJc2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IKKyAqIEBpbWFnZV9z aXplOgkJCXNpemUgb2YgdGhlIHdob2xlIGltYWdlCisgKiBAYm9vdGxvYWRlcl9zdGFydF9vZmZz ZXQ6CXN0YXJ0IG9mZnNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiB1Y29kZSBpbWFnZQorICogQGJv b3Rsb2FkZXJfc2l6ZToJCXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIKKyAqIEBib290bG9hZGVyX2lt ZW1fb2Zmc2V0OglzdGFydCBvZmYgc2V0IG9mIHRoZSBib290bG9hZGVyIGluIElNRU0KKyAqIEBi b290bG9hZGVyX2VudHJ5X3BvaW50OgllbnRyeSBwb2ludCBvZiB0aGUgYm9vdGxvYWRlciBpbiBJ TUVNCisgKiBAYXBwX3N0YXJ0X29mZnNldDoJCXN0YXJ0IG9mZnNldCBvZiB0aGUgTFMgZmlybXdh cmUKKyAqIEBhcHBfc2l6ZToJCQlzaXplIG9mIHRoZSBMUyBmaXJtd2FyZSdzIGNvZGUgYW5kIGRh dGEKKyAqIEBhcHBfaW1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGFwcCBpbiBJTUVNCisgKiBA YXBwX2ltZW1fZW50cnk6CQllbnRyeSBwb2ludCBvZiB0aGUgYXBwIGluIElNRU0KKyAqIEBhcHBf ZG1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGRhdGEgaW4gRE1FTQorICogQGFwcF9yZXNpZGVu dF9jb2RlX29mZnNldDoJb2Zmc2V0IG9mIGFwcCBjb2RlIGZyb20gYXBwX3N0YXJ0X29mZnNldAor ICogQGFwcF9yZXNpZGVudF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGNvZGUKKyAqIEBhcHBfcmVz aWRlbnRfZGF0YV9vZmZzZXQ6CW9mZnNldCBvZiBkYXRhIGZyb20gYXBwX3N0YXJ0X29mZnNldAor ICogQGFwcF9yZXNpZGVudF9kYXRhX3NpemU6CXNpemUgb2YgZGF0YQorICoKKyAqIEEgZmlybXdh cmUgaW1hZ2UgY29udGFpbnMgdGhlIGNvZGUsIGRhdGEsIGFuZCBib290bG9hZGVyIG9mIGEgZ2l2 ZW4gTFMKKyAqIGZhbGNvbiBpbiBhIHNpbmdsZSBibG9iLiBUaGlzIHN0cnVjdHVyZSBkZXNjcmli ZXMgd2hlcmUgZXZlcnl0aGluZyBpcy4KKyAqCisgKiBUaGlzIGNhbiBiZSBnZW5lcmF0ZWQgZnJv bSBhIChib290bG9hZGVyLCBjb2RlLCBkYXRhKSBzZXQgaWYgdGhleSBoYXZlCisgKiBiZWVuIGxv YWRlZCBzZXBhcmF0ZWx5LCBvciBjb21lIGRpcmVjdGx5IGZyb20gYSBmaWxlLgorICovCitzdHJ1 Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgeworCXUzMiBkZXNjcmlwdG9yX3NpemU7CisJdTMyIGltYWdl X3NpemU7CisJdTMyIHRvb2xzX3ZlcnNpb247CisJdTMyIGFwcF92ZXJzaW9uOworCWNoYXIgZGF0 ZVs2NF07CisJdTMyIGJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0OworCXUzMiBib290bG9hZGVyX3Np emU7CisJdTMyIGJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ7CisJdTMyIGJvb3Rsb2FkZXJfZW50cnlf cG9pbnQ7CisJdTMyIGFwcF9zdGFydF9vZmZzZXQ7CisJdTMyIGFwcF9zaXplOworCXUzMiBhcHBf aW1lbV9vZmZzZXQ7CisJdTMyIGFwcF9pbWVtX2VudHJ5OworCXUzMiBhcHBfZG1lbV9vZmZzZXQ7 CisJdTMyIGFwcF9yZXNpZGVudF9jb2RlX29mZnNldDsKKwl1MzIgYXBwX3Jlc2lkZW50X2NvZGVf c2l6ZTsKKwl1MzIgYXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OworCXUzMiBhcHBfcmVzaWRlbnRf ZGF0YV9zaXplOworCXUzMiBuYl9vdmVybGF5czsKKwlzdHJ1Y3Qge3UzMiBzdGFydDsgdTMyIHNp emU7IH0gbG9hZF9vdmxbNjRdOworCXUzMiBjb21wcmVzc2VkOworfTsKKworLyoqCisgKiBzdHJ1 Y3QgbHNfdWNvZGVfaW1nIC0gdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGxvYWRlZCBMUyBmaXJtd2Fy ZXMKKyAqIEBub2RlOgkJdG8gbGluayB3aXRoaW4gbHNmX3Vjb2RlX21ncgorICogQGZhbGNvbl9p ZDoJCUlEIG9mIHRoZSBmYWxjb24gdGhpcyBMUyBmaXJtd2FyZSBpcyBmb3IKKyAqIEB1Y29kZV9k ZXNjOgkJbG9hZGVkIG9yIGdlbmVyYXRlZCBtYXAgb2YgdWNvZGVfZGF0YQorICogQHVjb2RlX2hl YWRlcjoJaGVhZGVyIG9mIHRoZSBmaXJtd2FyZQorICogQHVjb2RlX2RhdGE6CQlmaXJtd2FyZSBw YXlsb2FkIChjb2RlIGFuZCBkYXRhKQorICogQHVjb2RlX3NpemU6CQlzaXplIGluIGJ5dGVzIG9m IGRhdGEgaW4gdWNvZGVfZGF0YQorICogQHdwcl9oZWFkZXI6CQlXUFIgaGVhZGVyIHRvIGJlIHdy aXR0ZW4gdG8gdGhlIExTIGJsb2IKKyAqIEBsc2JfaGVhZGVyOgkJTFNCIGhlYWRlciB0byBiZSB3 cml0dGVuIHRvIHRoZSBMUyBibG9iCisgKgorICogUHJlcGFyaW5nIHRoZSBXUFIgTFMgYmxvYiBy ZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIExTIGZpcm13YXJlcworICogKHNpemUs IGV0YykgdG8gYmUga25vd24uIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0aGUgZGF0YSBv ZiBvbmUgTFMKKyAqIGZpcm13YXJlLgorICovCitzdHJ1Y3QgbHNfdWNvZGVfaW1nIHsKKwlzdHJ1 Y3QgbGlzdF9oZWFkIG5vZGU7CisJZW51bSBudmttX2ZhbGNvbmlkeCBmYWxjb25faWQ7CisKKwlz dHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgdWNvZGVfZGVzYzsKKwl1MzIgKnVjb2RlX2hlYWRlcjsK Kwl1OCAqdWNvZGVfZGF0YTsKKwl1MzIgdWNvZGVfc2l6ZTsKKworCXN0cnVjdCBsc2Zfd3ByX2hl YWRlciB3cHJfaGVhZGVyOworCXN0cnVjdCBsc2ZfbHNiX2hlYWRlciBsc2JfaGVhZGVyOworfTsK KworLyoqCisgKiBzdHJ1Y3QgZndfYmluX2hlYWRlciAtIGhlYWRlciBvZiBmaXJtd2FyZSBmaWxl cworICogQGJpbl9tYWdpYzoJCWFsd2F5cyAweDNiMWQxNGYwCisgKiBAYmluX3ZlcjoJCXZlcnNp b24gb2YgdGhlIGJpbiBmb3JtYXQKKyAqIEBiaW5fc2l6ZToJCWVudGlyZSBpbWFnZSBzaXplIGlu Y2x1ZGluZyB0aGlzIGhlYWRlcgorICogQGhlYWRlcl9vZmZzZXQ6CW9mZnNldCBvZiB0aGUgZmly bXdhcmUvYm9vdGxvYWRlciBoZWFkZXIgaW4gdGhlIGZpbGUKKyAqIEBkYXRhX29mZnNldDoJb2Zm c2V0IG9mIHRoZSBmaXJtd2FyZS9ib290bG9hZGVyIHBheWxvYWQgaW4gdGhlIGZpbGUKKyAqIEBk YXRhX3NpemU6CQlzaXplIG9mIHRoZSBwYXlsb2FkCisgKgorICogVGhpcyBoZWFkZXIgaXMgbG9j YXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBIUyBmaXJtd2FyZSBhbmQgSFMgYm9vdGxvYWRl cgorICogZmlsZXMsIHRvIGRlc2NyaWJlIHdoZXJlIHRoZSBoZWFkZXJzIGFuZCBkYXRhIGNhbiBi ZSBmb3VuZC4KKyAqLworc3RydWN0IGZ3X2Jpbl9oZWFkZXIgeworCXUzMiBiaW5fbWFnaWM7CisJ dTMyIGJpbl92ZXI7CisJdTMyIGJpbl9zaXplOworCXUzMiBoZWFkZXJfb2Zmc2V0OworCXUzMiBk YXRhX29mZnNldDsKKwl1MzIgZGF0YV9zaXplOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfYmxf ZGVzYyAtIGZpcm13YXJlIGJvb3Rsb2FkZXIgZGVzY3JpcHRvcgorICogQHN0YXJ0X3RhZzoJCXN0 YXJ0aW5nIHRhZyBvZiBib290bG9hZGVyCisgKiBAZGVzY19kbWVtX2xvYWRfb2ZmOglETUVNIG9m ZnNldCBvZiBmbGNuX2JsX2RtZW1fZGVzYworICogQGNvZGVfb2ZmOgkJb2Zmc2V0IG9mIGNvZGUg c2VjdGlvbgorICogQGNvZGVfc2l6ZToJCXNpemUgb2YgY29kZSBzZWN0aW9uCisgKiBAZGF0YV9v ZmY6CQlvZmZzZXQgb2YgZGF0YSBzZWN0aW9uCisgKiBAZGF0YV9zaXplOgkJc2l6ZSBvZiBkYXRh IHNlY3Rpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBlbWJlZGRlZCBpbiBib290bG9hZGVy IGZpcm13YXJlIGZpbGVzIGF0IHRvIGRlc2NyaWJlIHRoZQorICogSU1FTSBhbmQgRE1FTSBsYXlv dXQgZXhwZWN0ZWQgYnkgdGhlIGJvb3Rsb2FkZXIuCisgKi8KK3N0cnVjdCBmd19ibF9kZXNjIHsK Kwl1MzIgc3RhcnRfdGFnOworCXUzMiBkbWVtX2xvYWRfb2ZmOworCXUzMiBjb2RlX29mZjsKKwl1 MzIgY29kZV9zaXplOworCXUzMiBkYXRhX29mZjsKKwl1MzIgZGF0YV9zaXplOworfTsKKworaW50 IGFjcl9sc191Y29kZV9sb2FkX2ZlY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVj dCBsc191Y29kZV9pbWcgKik7CitpbnQgYWNyX2xzX3Vjb2RlX2xvYWRfZ3BjY3MoY29uc3Qgc3Ry dWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7CisKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vjb2RlX2dyLmMg Yi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vjb2RlX2dyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wOWY1ZjFmMWE1MGQKLS0tIC9kZXYvbnVs bAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xzX3Vjb2RlX2dyLmMKQEAg LTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5WSURJQSBDT1JQT1JB VElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKworI2luY2x1ZGUg ImxzX3Vjb2RlLmgiCisjaW5jbHVkZSAiYWNyLmgiCisKKyNpbmNsdWRlIDxjb3JlL2Zpcm13YXJl Lmg+CisKKyNkZWZpbmUgQkxfREVTQ19CTEtfU0laRSAyNTYKKy8qKgorICogQnVpbGQgYSB1Y29k ZSBpbWFnZSBhbmQgZGVzY3JpcHRvciBmcm9tIHByb3ZpZGVkIGJvb3Rsb2FkZXIsIGNvZGUgYW5k IGRhdGEuCisgKgorICogQGJsOgkJYm9vdGxvYWRlciBpbWFnZSwgaW5jbHVkaW5nIDE2LWJ5dGVz IGRlc2NyaXB0b3IKKyAqIEBjb2RlOglMUyBmaXJtd2FyZSBjb2RlIHNlZ21lbnQKKyAqIEBkYXRh OglMUyBmaXJtd2FyZSBkYXRhIHNlZ21lbnQKKyAqIEBkZXNjOgl1Y29kZSBkZXNjcmlwdG9yIHRv IGJlIHdyaXR0ZW4KKyAqCisgKiBSZXR1cm46IGFsbG9jYXRlZCB1Y29kZSBpbWFnZSB3aXRoIGNv cnJlc3BvbmRpbmcgZGVzY3JpcHRvciBpbmZvcm1hdGlvbi4gZGVzYworICogICAgICAgICBpcyBh bHNvIHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgcmlnaHQgb2Zmc2V0cyB3aXRoaW4gcmV0dXJuZWQg aW1hZ2UuCisgKi8KK3N0YXRpYyB2b2lkICoKK2xzX3Vjb2RlX2ltZ19idWlsZChjb25zdCBzdHJ1 Y3QgZmlybXdhcmUgKmJsLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNvZGUsCisJCSAgIGNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqZGF0YSwgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpkZXNjKQor eworCXN0cnVjdCBmd19iaW5faGVhZGVyICpiaW5faGRyID0gKHZvaWQgKilibC0+ZGF0YTsKKwlz dHJ1Y3QgZndfYmxfZGVzYyAqYmxfZGVzYyA9ICh2b2lkICopYmwtPmRhdGEgKyBiaW5faGRyLT5o ZWFkZXJfb2Zmc2V0OworCXZvaWQgKmJsX2RhdGEgPSAodm9pZCAqKWJsLT5kYXRhICsgYmluX2hk ci0+ZGF0YV9vZmZzZXQ7CisJdTMyIHBvcyA9IDA7CisJdm9pZCAqaW1hZ2U7CisKKwlkZXNjLT5i b290bG9hZGVyX3N0YXJ0X29mZnNldCA9IHBvczsKKwlkZXNjLT5ib290bG9hZGVyX3NpemUgPSBB TElHTihibF9kZXNjLT5jb2RlX3NpemUsIHNpemVvZih1MzIpKTsKKwlkZXNjLT5ib290bG9hZGVy X2ltZW1fb2Zmc2V0ID0gYmxfZGVzYy0+c3RhcnRfdGFnICogMjU2OworCWRlc2MtPmJvb3Rsb2Fk ZXJfZW50cnlfcG9pbnQgPSBibF9kZXNjLT5zdGFydF90YWcgKiAyNTY7CisKKwlwb3MgPSBBTElH Tihwb3MgKyBkZXNjLT5ib290bG9hZGVyX3NpemUsIEJMX0RFU0NfQkxLX1NJWkUpOworCWRlc2Mt PmFwcF9zdGFydF9vZmZzZXQgPSBwb3M7CisJZGVzYy0+YXBwX3NpemUgPSBBTElHTihjb2RlLT5z aXplLCBCTF9ERVNDX0JMS19TSVpFKSArCisJCQkgQUxJR04oZGF0YS0+c2l6ZSwgQkxfREVTQ19C TEtfU0laRSk7CisJZGVzYy0+YXBwX2ltZW1fb2Zmc2V0ID0gMDsKKwlkZXNjLT5hcHBfaW1lbV9l bnRyeSA9IDA7CisJZGVzYy0+YXBwX2RtZW1fb2Zmc2V0ID0gMDsKKwlkZXNjLT5hcHBfcmVzaWRl bnRfY29kZV9vZmZzZXQgPSAwOworCWRlc2MtPmFwcF9yZXNpZGVudF9jb2RlX3NpemUgPSBBTElH Tihjb2RlLT5zaXplLCBCTF9ERVNDX0JMS19TSVpFKTsKKworCXBvcyA9IEFMSUdOKHBvcyArIGRl c2MtPmFwcF9yZXNpZGVudF9jb2RlX3NpemUsIEJMX0RFU0NfQkxLX1NJWkUpOworCWRlc2MtPmFw cF9yZXNpZGVudF9kYXRhX29mZnNldCA9IHBvcyAtIGRlc2MtPmFwcF9zdGFydF9vZmZzZXQ7CisJ ZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfc2l6ZSA9IEFMSUdOKGRhdGEtPnNpemUsIEJMX0RFU0Nf QkxLX1NJWkUpOworCisJZGVzYy0+aW1hZ2Vfc2l6ZSA9IEFMSUdOKGJsX2Rlc2MtPmNvZGVfc2l6 ZSwgQkxfREVTQ19CTEtfU0laRSkgKworCQkJICAgZGVzYy0+YXBwX3NpemU7CisKKwlpbWFnZSA9 IGt6YWxsb2MoZGVzYy0+aW1hZ2Vfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbWFnZSkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1jcHkoaW1hZ2UgKyBkZXNjLT5ib290bG9h ZGVyX3N0YXJ0X29mZnNldCwgYmxfZGF0YSwKKwkgICAgICAgYmxfZGVzYy0+Y29kZV9zaXplKTsK KwltZW1jcHkoaW1hZ2UgKyBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0LCBjb2RlLT5kYXRhLCBjb2Rl LT5zaXplKTsKKwltZW1jcHkoaW1hZ2UgKyBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0ICsgZGVzYy0+ YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0LAorCSAgICAgICBkYXRhLT5kYXRhLCBkYXRhLT5zaXpl KTsKKworCXJldHVybiBpbWFnZTsKK30KKworLyoqCisgKiBsc191Y29kZV9pbWdfbG9hZF9ncigp IC0gbG9hZCBhbmQgcHJlcGFyZSBhIExTIEdSIHVjb2RlIGltYWdlCisgKgorICogTG9hZCB0aGUg TFMgbWljcm9jb2RlLCBib290bG9hZGVyIGFuZCBzaWduYXR1cmUgYW5kIHBhY2sgdGhlbSBpbnRv IGEgc2luZ2xlCisgKiBibG9iLiBBbHNvIGdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIHVjb2Rl IGRlc2NyaXB0b3IuCisgKi8KK3N0YXRpYyBpbnQKK2xzX3Vjb2RlX2ltZ19sb2FkX2dyKGNvbnN0 IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsCisJ CSAgICAgY29uc3QgY2hhciAqZmFsY29uX25hbWUsIGNvbnN0IHUzMiBmYWxjb25faWQpCit7CisJ Y29uc3Qgc3RydWN0IGZpcm13YXJlICpibCwgKmNvZGUsICpkYXRhOworCXN0cnVjdCBsc2ZfdWNv ZGVfZGVzYyAqbHNmX2Rlc2M7CisJY2hhciBmWzY0XTsKKwlpbnQgcmV0OworCisJaW1nLT51Y29k ZV9oZWFkZXIgPSBOVUxMOworCisJc25wcmludGYoZiwgc2l6ZW9mKGYpLCAiZ3IvJXNfYmwiLCBm YWxjb25fbmFtZSk7CisJcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIGYs ICZibCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXNucHJpbnRmKGYsIHNpemVvZihm KSwgImdyLyVzX2luc3QiLCBmYWxjb25fbmFtZSk7CisJcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQo c3ViZGV2LT5kZXZpY2UsIGYsICZjb2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYmw7CisK KwlzbnByaW50ZihmLCBzaXplb2YoZiksICJnci8lc19kYXRhIiwgZmFsY29uX25hbWUpOworCXJl dCA9IG52a21fZmlybXdhcmVfZ2V0KHN1YmRldi0+ZGV2aWNlLCBmLCAmZGF0YSk7CisJaWYgKHJl dCkKKwkJZ290byBmcmVlX2luc3Q7CisKKwlpbWctPnVjb2RlX2RhdGEgPSBsc191Y29kZV9pbWdf YnVpbGQoYmwsIGNvZGUsIGRhdGEsCisJCQkJCSAgICAgJmltZy0+dWNvZGVfZGVzYyk7CisJaWYg KElTX0VSUihpbWctPnVjb2RlX2RhdGEpKSB7CisJCXJldCA9IFBUUl9FUlIoaW1nLT51Y29kZV9k YXRhKTsKKwkJZ290byBmcmVlX2RhdGE7CisJfQorCWltZy0+dWNvZGVfc2l6ZSA9IGltZy0+dWNv ZGVfZGVzYy5pbWFnZV9zaXplOworCisJc25wcmludGYoZiwgc2l6ZW9mKGYpLCAiZ3IvJXNfc2ln IiwgZmFsY29uX25hbWUpOworCWxzZl9kZXNjID0gbnZrbV9hY3JfbG9hZF9maXJtd2FyZShzdWJk ZXYsIGYsIHNpemVvZigqbHNmX2Rlc2MpKTsKKwlpZiAoSVNfRVJSKGxzZl9kZXNjKSkgeworCQly ZXQgPSBQVFJfRVJSKGxzZl9kZXNjKTsKKwkJZ290byBmcmVlX2ltYWdlOworCX0KKwkvKiBub3Qg bmVlZGVkPyB0aGUgc2lnbmF0dXJlIHNob3VsZCBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IHZhbHVl ICovCisJbHNmX2Rlc2MtPmZhbGNvbl9pZCA9IGZhbGNvbl9pZDsKKwltZW1jcHkoJmltZy0+bHNi X2hlYWRlci5zaWduYXR1cmUsIGxzZl9kZXNjLCBzaXplb2YoKmxzZl9kZXNjKSk7CisJaW1nLT5m YWxjb25faWQgPSBsc2ZfZGVzYy0+ZmFsY29uX2lkOworCWtmcmVlKGxzZl9kZXNjKTsKKworCS8q IHN1Y2Nlc3MgcGF0aCAtIG9ubHkgZnJlZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZXMgKi8KKwln b3RvIGZyZWVfZGF0YTsKKworZnJlZV9pbWFnZToKKwlrZnJlZShpbWctPnVjb2RlX2RhdGEpOwor ZnJlZV9kYXRhOgorCW52a21fZmlybXdhcmVfcHV0KGRhdGEpOworZnJlZV9pbnN0OgorCW52a21f ZmlybXdhcmVfcHV0KGNvZGUpOworZnJlZV9ibDoKKwludmttX2Zpcm13YXJlX3B1dChibCk7Citl cnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2Fjcl9sc191Y29kZV9sb2FkX2ZlY3MoY29u c3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsCisJCSAgICAgICBzdHJ1Y3QgbHNfdWNvZGVf aW1nICppbWcpCit7CisJcmV0dXJuIGxzX3Vjb2RlX2ltZ19sb2FkX2dyKHN1YmRldiwgaW1nLCAi ZmVjcyIsIE5WS01fRkFMQ09OX0ZFQ1MpOworfQorCitpbnQKK2Fjcl9sc191Y29kZV9sb2FkX2dw Y2NzKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LAorCQkJc3RydWN0IGxzX3Vjb2Rl X2ltZyAqaW1nKQoreworCXJldHVybiBsc191Y29kZV9pbWdfbG9hZF9ncihzdWJkZXYsIGltZywg ImdwY2NzIiwgTlZLTV9GQUxDT05fR1BDQ1MpOworfQpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUv bnZrbS9zdWJkZXYvc2VjYm9vdC9wcml2LmggYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNi b290L3ByaXYuaAppbmRleCAxOTIyNDIyZmQ1MzkuLjcwOGRmYTEzZTVkNSAxMDA2NDQKLS0tIGEv ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9wcml2LmgKKysrIGIvZHJtL25vdXZlYXUv bnZrbS9zdWJkZXYvc2VjYm9vdC9wcml2LmgKQEAgLTMwLDE4OCArMzAsMTUgQEAgc3RydWN0IG52 a21fc2VjYm9vdF9mdW5jIHsKIAlpbnQgKCpvbmVpbml0KShzdHJ1Y3QgbnZrbV9zZWNib290ICop OwogCWludCAoKmZpbmkpKHN0cnVjdCBudmttX3NlY2Jvb3QgKiwgYm9vbCBzdXNwZW5kKTsKIAl2 b2lkICooKmR0b3IpKHN0cnVjdCBudmttX3NlY2Jvb3QgKik7Ci0JaW50ICgqcmVzZXQpKHN0cnVj dCBudmttX3NlY2Jvb3QgKiwgZW51bSBudmttX2ZhbGNvbmlkeCk7Ci0JaW50ICgqc3RhcnQpKHN0 cnVjdCBudmttX3NlY2Jvb3QgKiwgZW51bSBudmttX2ZhbGNvbmlkeCk7Ci0KLQkvKiBJRCBvZiB0 aGUgZmFsY29uIHRoYXQgd2lsbCBwZXJmb3JtIHNlY3VyZSBib290ICovCi0JZW51bSBudmttX2Zh bGNvbmlkeCBib290X2ZhbGNvbjsKLQkvKiBCaXQtbWFzayBvZiBJRHMgb2YgbWFuYWdlZCBmYWxj b25zICovCi0JdW5zaWduZWQgbG9uZyBtYW5hZ2VkX2ZhbGNvbnM7CisJaW50ICgqcnVuX2Jsb2Ip KHN0cnVjdCBudmttX3NlY2Jvb3QgKiwgc3RydWN0IG52a21fZ3B1b2JqICopOwogfTsKIAotaW50 IG52a21fc2VjYm9vdF9jdG9yKGNvbnN0IHN0cnVjdCBudmttX3NlY2Jvb3RfZnVuYyAqLCBzdHJ1 Y3QgbnZrbV9kZXZpY2UgKiwKLQkJICAgICAgaW50IGluZGV4LCBzdHJ1Y3QgbnZrbV9zZWNib290 ICopOworaW50IG52a21fc2VjYm9vdF9jdG9yKGNvbnN0IHN0cnVjdCBudmttX3NlY2Jvb3RfZnVu YyAqLCBzdHJ1Y3QgbnZrbV9hY3IgKiwKKwkJICBzdHJ1Y3QgbnZrbV9kZXZpY2UgKiwgaW50LCB1 bnNpZ25lZCBsb25nLAorCQkgIHN0cnVjdCBudmttX3NlY2Jvb3QgKik7CiBpbnQgbnZrbV9zZWNi b290X2ZhbGNvbl9yZXNldChzdHJ1Y3QgbnZrbV9zZWNib290ICopOwogaW50IG52a21fc2VjYm9v dF9mYWxjb25fcnVuKHN0cnVjdCBudmttX3NlY2Jvb3QgKik7CiAKLS8qCi0gKgotICogTFMgYmxv YiBzdHJ1Y3R1cmVzCi0gKgotICovCi0KLS8qKgotICogc3RydWN0IGxzZl91Y29kZV9kZXNjIC0g TFMgZmFsY29uIHNpZ25hdHVyZXMKLSAqIEBwcmRfa2V5czoJCXNpZ25hdHVyZSB0byB1c2Ugd2hl biB0aGUgR1BVIGlzIGluIHByb2R1Y3Rpb24gbW9kZQotICogQGRnYl9rZXlzOgkJc2lnbmF0dXJl IHRvIHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gZGVidWcgbW9kZQotICogQGJfcHJkX3ByZXNlbnQ6 CXdoZXRoZXIgdGhlIHByb2R1Y3Rpb24ga2V5IGlzIHByZXNlbnQKLSAqIEBiX2RnYl9wcmVzZW50 Ogl3aGV0aGVyIHRoZSBkZWJ1ZyBrZXkgaXMgcHJlc2VudAotICogQGZhbGNvbl9pZDoJCUlEIG9m IHRoZSBmYWxjb24gdGhlIHVjb2RlIGFwcGxpZXMgdG8KLSAqCi0gKiBEaXJlY3RseSBsb2FkZWQg ZnJvbSBhIHNpZ25hdHVyZSBmaWxlLgotICovCi1zdHJ1Y3QgbHNmX3Vjb2RlX2Rlc2MgewotCXU4 IHByZF9rZXlzWzJdWzE2XTsKLQl1OCBkYmdfa2V5c1syXVsxNl07Ci0JdTMyIGJfcHJkX3ByZXNl bnQ7Ci0JdTMyIGJfZGJnX3ByZXNlbnQ7Ci0JdTMyIGZhbGNvbl9pZDsKLX07Ci0KLS8qKgotICog c3RydWN0IGxzZl9sc2JfaGVhZGVyIC0gTFMgZmlybXdhcmUgaGVhZGVyCi0gKiBAc2lnbmF0dXJl OgkJc2lnbmF0dXJlIHRvIHZlcmlmeSB0aGUgZmlybXdhcmUgYWdhaW5zdAotICogQHVjb2RlX29m ZjoJCW9mZnNldCBvZiB0aGUgdWNvZGUgYmxvYiBpbiB0aGUgV1BSIHJlZ2lvbi4gVGhlIHVjb2Rl Ci0gKiAgICAgICAgICAgICAgICAgICAgICBibG9iIGNvbnRhaW5zIHRoZSBib290bG9hZGVyLCBj b2RlIGFuZCBkYXRhIG9mIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgTFMgZmFsY29uCi0g KiBAdWNvZGVfc2l6ZToJCXNpemUgb2YgdGhlIHVjb2RlIGJsb2IsIGluY2x1ZGluZyBib290bG9h ZGVyCi0gKiBAZGF0YV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNvZGUgYmxvYiBkYXRhCi0gKiBAYmxf Y29kZV9zaXplOglzaXplIG9mIHRoZSBib290bG9hZGVyIGNvZGUKLSAqIEBibF9pbWVtX29mZjoJ b2Zmc2V0IGluIGltZW0gb2YgdGhlIGJvb3Rsb2FkZXIKLSAqIEBibF9kYXRhX29mZjoJb2Zmc2V0 IG9mIHRoZSBib290bG9hZGVyIGRhdGEgaW4gV1BSIHJlZ2lvbgotICogQGJsX2RhdGFfc2l6ZToJ c2l6ZSBvZiB0aGUgYm9vdGxvYWRlciBkYXRhCi0gKiBAYXBwX2NvZGVfb2ZmOglvZmZzZXQgb2Yg dGhlIGFwcCBjb2RlIHJlbGF0aXZlIHRvIHVjb2RlX29mZgotICogQGFwcF9jb2RlX3NpemU6CXNp emUgb2YgdGhlIGFwcCBjb2RlCi0gKiBAYXBwX2RhdGFfb2ZmOglvZmZzZXQgb2YgdGhlIGFwcCBk YXRhIHJlbGF0aXZlIHRvIHVjb2RlX29mZgotICogQGFwcF9kYXRhX3NpemU6CXNpemUgb2YgdGhl IGFwcCBkYXRhCi0gKiBAZmxhZ3M6CQlmbGFncyBmb3IgdGhlIHNlY3VyZSBib290bG9hZGVyCi0g KgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBpbnRvIHRoZSBXUFIgcmVnaW9uIGZvciBl YWNoIG1hbmFnZWQgZmFsY29uLiBFYWNoCi0gKiBpbnN0YW5jZSBpcyByZWZlcmVuY2VkIGJ5IHRo ZSBsc2Jfb2Zmc2V0IG1lbWJlciBvZiB0aGUgY29ycmVzcG9uZGluZwotICogbHNmX3dwcl9oZWFk ZXIuCi0gKi8KLXN0cnVjdCBsc2ZfbHNiX2hlYWRlciB7Ci0Jc3RydWN0IGxzZl91Y29kZV9kZXNj IHNpZ25hdHVyZTsKLQl1MzIgdWNvZGVfb2ZmOwotCXUzMiB1Y29kZV9zaXplOwotCXUzMiBkYXRh X3NpemU7Ci0JdTMyIGJsX2NvZGVfc2l6ZTsKLQl1MzIgYmxfaW1lbV9vZmY7Ci0JdTMyIGJsX2Rh dGFfb2ZmOwotCXUzMiBibF9kYXRhX3NpemU7Ci0JdTMyIGFwcF9jb2RlX29mZjsKLQl1MzIgYXBw X2NvZGVfc2l6ZTsKLQl1MzIgYXBwX2RhdGFfb2ZmOwotCXUzMiBhcHBfZGF0YV9zaXplOwotCXUz MiBmbGFnczsKLSNkZWZpbmUgTFNGX0ZMQUdfTE9BRF9DT0RFX0FUXzAJCTEKLSNkZWZpbmUgTFNG X0ZMQUdfRE1BQ1RMX1JFUV9DVFgJCTQKLSNkZWZpbmUgTFNGX0ZMQUdfRk9SQ0VfUFJJVl9MT0FE CTgKLX07Ci0KLS8qKgotICogc3RydWN0IGxzZl93cHJfaGVhZGVyIC0gTFMgYmxvYiBXUFIgSGVh ZGVyCi0gKiBAZmFsY29uX2lkOgkJTFMgZmFsY29uIElECi0gKiBAbHNiX29mZnNldDoJCW9mZnNl dCBvZiB0aGUgbHNiX2xzZl9oZWFkZXIgaW4gdGhlIFdQUiByZWdpb24KLSAqIEBib290c3RyYXBf b3duZXI6CXNlY3VyZSBmYWxjb24gcmVwb25zaWJsZSBmb3IgYm9vdHN0cmFwcGluZyB0aGUgTFMg ZmFsY29uCi0gKiBAbGF6eV9ib290c3RyYXA6CXNraXAgYm9vdHN0cmFwcGluZyBieSBBQ1IKLSAq IEBzdGF0dXM6CQlib290c3RyYXBwaW5nIHN0YXR1cwotICoKLSAqIEFuIGFycmF5IG9mIHRoZXNl IGlzIHdyaXR0ZW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgV1BSIHJlZ2lvbiwgb25lIGZvcgot ICogZWFjaCBtYW5hZ2VkIGZhbGNvbi4gVGhlIGFycmF5IGlzIHRlcm1pbmF0ZWQgYnkgYW4gaW5z dGFuY2Ugd2hpY2ggZmFsY29uX2lkCi0gKiBpcyBMU0ZfRkFMQ09OX0lEX0lOVkFMSUQuCi0gKi8K LXN0cnVjdCBsc2Zfd3ByX2hlYWRlciB7Ci0JdTMyIGZhbGNvbl9pZDsKLQl1MzIgbHNiX29mZnNl dDsKLQl1MzIgYm9vdHN0cmFwX293bmVyOwotCXUzMiBsYXp5X2Jvb3RzdHJhcDsKLQl1MzIgc3Rh dHVzOwotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX05PTkUJCQkJMAotI2RlZmluZSBMU0ZfSU1B R0VfU1RBVFVTX0NPUFkJCQkJMQotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05f Q09ERV9GQUlMRUQJCTIKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX0RBVEFf RkFJTEVECQkzCi0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9ET05FCQk0Ci0j ZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9TS0lQUEVECQk1Ci0jZGVmaW5lIExT Rl9JTUFHRV9TVEFUVVNfQk9PVFNUUkFQX1JFQURZCQk2Ci19OwotCi0KLS8qKgotICogc3RydWN0 IGxzX3Vjb2RlX2ltZ19kZXNjIC0gZGVzY3JpcHRvciBvZiBmaXJtd2FyZSBpbWFnZQotICogQGRl c2NyaXB0b3Jfc2l6ZToJCXNpemUgb2YgdGhpcyBkZXNjcmlwdG9yCi0gKiBAaW1hZ2Vfc2l6ZToJ CQlzaXplIG9mIHRoZSB3aG9sZSBpbWFnZQotICogQGJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0Oglz dGFydCBvZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgaW4gdWNvZGUgaW1hZ2UKLSAqIEBib290bG9h ZGVyX3NpemU6CQlzaXplIG9mIHRoZSBib290bG9hZGVyCi0gKiBAYm9vdGxvYWRlcl9pbWVtX29m ZnNldDoJc3RhcnQgb2ZmIHNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiBJTUVNCi0gKiBAYm9vdGxv YWRlcl9lbnRyeV9wb2ludDoJZW50cnkgcG9pbnQgb2YgdGhlIGJvb3Rsb2FkZXIgaW4gSU1FTQot ICogQGFwcF9zdGFydF9vZmZzZXQ6CQlzdGFydCBvZmZzZXQgb2YgdGhlIExTIGZpcm13YXJlCi0g KiBAYXBwX3NpemU6CQkJc2l6ZSBvZiB0aGUgTFMgZmlybXdhcmUncyBjb2RlIGFuZCBkYXRhCi0g KiBAYXBwX2ltZW1fb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBhcHAgaW4gSU1FTQotICogQGFwcF9p bWVtX2VudHJ5OgkJZW50cnkgcG9pbnQgb2YgdGhlIGFwcCBpbiBJTUVNCi0gKiBAYXBwX2RtZW1f b2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBkYXRhIGluIERNRU0KLSAqIEBhcHBfcmVzaWRlbnRfY29k ZV9vZmZzZXQ6CW9mZnNldCBvZiBhcHAgY29kZSBmcm9tIGFwcF9zdGFydF9vZmZzZXQKLSAqIEBh cHBfcmVzaWRlbnRfY29kZV9zaXplOglzaXplIG9mIHRoZSBjb2RlCi0gKiBAYXBwX3Jlc2lkZW50 X2RhdGFfb2Zmc2V0OglvZmZzZXQgb2YgZGF0YSBmcm9tIGFwcF9zdGFydF9vZmZzZXQKLSAqIEBh cHBfcmVzaWRlbnRfZGF0YV9zaXplOglzaXplIG9mIGRhdGEKLSAqCi0gKiBBIGZpcm13YXJlIGlt YWdlIGNvbnRhaW5zIHRoZSBjb2RlLCBkYXRhLCBhbmQgYm9vdGxvYWRlciBvZiBhIGdpdmVuIExT Ci0gKiBmYWxjb24gaW4gYSBzaW5nbGUgYmxvYi4gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHdo ZXJlIGV2ZXJ5dGhpbmcgaXMuCi0gKgotICogVGhpcyBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYSAo Ym9vdGxvYWRlciwgY29kZSwgZGF0YSkgc2V0IGlmIHRoZXkgaGF2ZQotICogYmVlbiBsb2FkZWQg c2VwYXJhdGVseSwgb3IgY29tZSBkaXJlY3RseSBmcm9tIGEgZmlsZS4KLSAqLwotc3RydWN0IGxz X3Vjb2RlX2ltZ19kZXNjIHsKLQl1MzIgZGVzY3JpcHRvcl9zaXplOwotCXUzMiBpbWFnZV9zaXpl OwotCXUzMiB0b29sc192ZXJzaW9uOwotCXUzMiBhcHBfdmVyc2lvbjsKLQljaGFyIGRhdGVbNjRd OwotCXUzMiBib290bG9hZGVyX3N0YXJ0X29mZnNldDsKLQl1MzIgYm9vdGxvYWRlcl9zaXplOwot CXUzMiBib290bG9hZGVyX2ltZW1fb2Zmc2V0OwotCXUzMiBib290bG9hZGVyX2VudHJ5X3BvaW50 OwotCXUzMiBhcHBfc3RhcnRfb2Zmc2V0OwotCXUzMiBhcHBfc2l6ZTsKLQl1MzIgYXBwX2ltZW1f b2Zmc2V0OwotCXUzMiBhcHBfaW1lbV9lbnRyeTsKLQl1MzIgYXBwX2RtZW1fb2Zmc2V0OwotCXUz MiBhcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ7Ci0JdTMyIGFwcF9yZXNpZGVudF9jb2RlX3NpemU7 Ci0JdTMyIGFwcF9yZXNpZGVudF9kYXRhX29mZnNldDsKLQl1MzIgYXBwX3Jlc2lkZW50X2RhdGFf c2l6ZTsKLQl1MzIgbmJfb3ZlcmxheXM7Ci0Jc3RydWN0IHt1MzIgc3RhcnQ7IHUzMiBzaXplOyB9 IGxvYWRfb3ZsWzY0XTsKLQl1MzIgY29tcHJlc3NlZDsKLX07Ci0KLS8qKgotICogc3RydWN0IGxz X3Vjb2RlX2ltZyAtIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBsb2FkZWQgTFMgZmlybXdhcmVzCi0g KiBAbm9kZToJCXRvIGxpbmsgd2l0aGluIGxzZl91Y29kZV9tZ3IKLSAqIEBmYWxjb25faWQ6CQlJ RCBvZiB0aGUgZmFsY29uIHRoaXMgTFMgZmlybXdhcmUgaXMgZm9yCi0gKiBAdWNvZGVfZGVzYzoJ CWxvYWRlZCBvciBnZW5lcmF0ZWQgbWFwIG9mIHVjb2RlX2RhdGEKLSAqIEB1Y29kZV9oZWFkZXI6 CWhlYWRlciBvZiB0aGUgZmlybXdhcmUKLSAqIEB1Y29kZV9kYXRhOgkJZmlybXdhcmUgcGF5bG9h ZCAoY29kZSBhbmQgZGF0YSkKLSAqIEB1Y29kZV9zaXplOgkJc2l6ZSBpbiBieXRlcyBvZiBkYXRh IGluIHVjb2RlX2RhdGEKLSAqIEB3cHJfaGVhZGVyOgkJV1BSIGhlYWRlciB0byBiZSB3cml0dGVu IHRvIHRoZSBMUyBibG9iCi0gKiBAbHNiX2hlYWRlcjoJCUxTQiBoZWFkZXIgdG8gYmUgd3JpdHRl biB0byB0aGUgTFMgYmxvYgotICoKLSAqIFByZXBhcmluZyB0aGUgV1BSIExTIGJsb2IgcmVxdWly ZXMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBMUyBmaXJtd2FyZXMKLSAqIChzaXplLCBldGMp IHRvIGJlIGtub3duLiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGhlIGRhdGEgb2Ygb25l IExTCi0gKiBmaXJtd2FyZS4KLSAqLwotc3RydWN0IGxzX3Vjb2RlX2ltZyB7Ci0Jc3RydWN0IGxp c3RfaGVhZCBub2RlOwotCWVudW0gbnZrbV9mYWxjb25pZHggZmFsY29uX2lkOwotCi0Jc3RydWN0 IGxzX3Vjb2RlX2ltZ19kZXNjIHVjb2RlX2Rlc2M7Ci0JdTMyICp1Y29kZV9oZWFkZXI7Ci0JdTgg KnVjb2RlX2RhdGE7Ci0JdTMyIHVjb2RlX3NpemU7Ci0KLQlzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIg d3ByX2hlYWRlcjsKLQlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgbHNiX2hlYWRlcjsKLX07CiAKIHN0 cnVjdCBmbGNuX3U2NCB7CiAJdTMyIGxvOwpAQCAtMjMzLDE1MCArNjAsNCBAQCBzdGF0aWMgaW5s aW5lIHN0cnVjdCBmbGNuX3U2NCB1NjRfdG9fZmxjbjY0KHU2NCB1KQogCXJldHVybiByZXQ7CiB9 CiAKLSNkZWZpbmUgR00yMDBfQUNSX01BWF9BUFBTIDgKLQotc3RydWN0IGhzZl9sb2FkX2hlYWRl cl9hcHAgewotCXUzMiBzZWNfY29kZV9vZmY7Ci0JdTMyIHNlY19jb2RlX3NpemU7Ci19OwotCi0v KioKLSAqIHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgLSBIUyBmaXJtd2FyZSBsb2FkIGhlYWRlcgot ICovCi1zdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyIHsKLQl1MzIgbm9uX3NlY19jb2RlX29mZjsKLQl1 MzIgbm9uX3NlY19jb2RlX3NpemU7Ci0JdTMyIGRhdGFfZG1hX2Jhc2U7Ci0JdTMyIGRhdGFfc2l6 ZTsKLQl1MzIgbnVtX2FwcHM7Ci0Jc3RydWN0IGhzZl9sb2FkX2hlYWRlcl9hcHAgYXBwWzBdOwot fTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYyAtIG1hbmFnZXMgYSBz aW5nbGUgTFMgZmlybXdhcmUKLSAqCi0gKiBAbG9hZDogbG9hZCB0aGUgZXh0ZXJuYWwgZmlybXdh cmUgaW50byBhIGxzX3Vjb2RlX2ltZwotICogQGdlbmVyYXRlX2JsX2Rlc2M6IGZ1bmN0aW9uIGNh bGxlZCBvbiBhIGJsb2NrIG9mIGJsX2Rlc2Nfc2l6ZSB0byBnZW5lcmF0ZSB0aGUKLSAqCQkgICAg ICBwcm9wZXIgYm9vdGxvYWRlciBkZXNjcmlwdG9yIGZvciB0aGlzIExTIGZpcm13YXJlCi0gKiBA YmxfZGVzY19zaXplOiBzaXplIG9mIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IKLSAqLwotc3Ry dWN0IHNlY2Jvb3RfbHNfc2luZ2xlX2Z1bmMgewotCWludCAoKmxvYWQpKGNvbnN0IHN0cnVjdCBu dmttX3N1YmRldiAqLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICopOwotCXZvaWQgKCpnZW5lcmF0ZV9i bF9kZXNjKShjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICosIHU2NCwgdm9pZCAqKTsKLQl1MzIg YmxfZGVzY19zaXplOwotfTsKLQotLyoqCi0gKiB0eXBlZGVmIHNlY2Jvb3RfbHNfZnVuYyAtIG1h bmFnZXMgYWxsIHRoZSBMUyBmaXJtd2FyZXMgZm9yIHRoaXMgQUNSCi0gKi8KLXR5cGVkZWYgY29u c3Qgc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xlX2Z1bmMgKgotc2VjYm9vdF9sc19mdW5jW05WS01f RkFMQ09OX0VORF07Ci0KLWludCBnbTIwMF9sc19sb2FkX2ZlY3MoY29uc3Qgc3RydWN0IG52a21f c3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7Ci1pbnQgZ20yMDBfbHNfbG9hZF9ncGNj cyhjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKLQot LyoqCi0gKiBDb250YWlucyB0aGUgd2hvbGUgc2VjdXJlIGJvb3Qgc3RhdGUsIGFsbG93aW5nIGl0 IHRvIGJlIHBlcmZvcm1lZCBhcyBuZWVkZWQKLSAqIEB3cHJfYWRkcjoJCXBoeXNpY2FsIGFkZHJl c3Mgb2YgdGhlIFdQUiByZWdpb24KLSAqIEB3cHJfc2l6ZToJCXNpemUgaW4gYnl0ZXMgb2YgdGhl IFdQUiByZWdpb24KLSAqIEBsc19ibG9iOgkJTFMgYmxvYiBvZiBhbGwgdGhlIExTIGZpcm13YXJl cywgc2lnbmF0dXJlcywgYm9vdGxvYWRlcnMKLSAqIEBsc19ibG9iX3NpemU6CXNpemUgb2YgdGhl IExTIGJsb2IKLSAqIEBsc19ibG9iX25iX3JlZ2lvbnM6CW51bWJlciBvZiBMUyBmaXJtd2FyZXMg dGhhdCB3aWxsIGJlIGxvYWRlZAotICogQGFjcl9ibG9iOgkJSFMgYmxvYgotICogQGFjcl9ibG9i X3ZtYToJbWFwcGluZyBvZiB0aGUgSFMgYmxvYiBpbnRvIHRoZSBzZWN1cmUgZmFsY29uJ3MgVk0K LSAqIEBhY3JfYmxfZGVzYzoJYm9vdGxvYWRlciBkZXNjcmlwdG9yIG9mIHRoZSBIUyBibG9iCi0g KiBAaHNibF9ibG9iOgkJSFMgYmxvYiBib290bG9hZGVyCi0gKiBAaW5zdDoJCWluc3RhbmNlIGJs b2NrIGZvciBIUyBmYWxjb24KLSAqIEBwZ2Q6CQlwYWdlIGRpcmVjdG9yeSBmb3IgdGhlIEhTIGZh bGNvbgotICogQHZtOgkJCWFkZHJlc3Mgc3BhY2UgdXNlZCBieSB0aGUgSFMgZmFsY29uCi0gKiBA ZmFsY29uX3N0YXRlOgljdXJyZW50IHN0YXRlIG9mIHRoZSBtYW5hZ2VkIGZhbGNvbnMKLSAqIEBm aXJtd2FyZV9vazoJd2hldGhlciB0aGUgZmlybXdhcmUgYmxvYnMgaGF2ZSBiZWVuIGNyZWF0ZWQK LSAqLwotc3RydWN0IGdtMjAwX3NlY2Jvb3QgewotCXN0cnVjdCBudmttX3NlY2Jvb3QgYmFzZTsK LQljb25zdCBzdHJ1Y3QgZ20yMDBfc2VjYm9vdF9mdW5jICpmdW5jOwotCWNvbnN0IHNlY2Jvb3Rf bHNfZnVuYyAqbHNfZnVuYzsKLQotCS8qCi0JICogQWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgZml4 ZWQgV1BSIHJlZ2lvbiwgaWYgYW55LiBPbiBUZWdyYSB0aGlzCi0JICogcmVnaW9uIGlzIHNldCBi eSB0aGUgYm9vdGxvYWRlcgotCSAqLwotCXU2NCB3cHJfYWRkcjsKLQl1MzIgd3ByX3NpemU7Ci0K LQkvKgotCSAqIEFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIGFjdHVhbCBXUFIgcmVnaW9uLgotCSAq LwotCXU2NCBhY3Jfd3ByX2FkZHI7Ci0JdTMyIGFjcl93cHJfc2l6ZTsKLQotCS8qCi0JICogSFMg RlcgLSBsb2NrIFdQUiByZWdpb24gKGRHUFUgb25seSkgYW5kIGxvYWQgTFMgRldzCi0JICogb24g VGVncmEgdGhlIEhTIEZXIGNvcGllcyB0aGUgTFMgYmxvYiBpbnRvIHRoZSBmaXhlZCBXUFIgaW5z dGVhZAotCSAqLwotCXN0cnVjdCBudmttX2dwdW9iaiAqYWNyX2xvYWRfYmxvYjsKLQlzdHJ1Y3Qg ewotCQlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyIGxvYWRfYmxfaGVhZGVyOwotCQlzdHJ1Y3QgaHNm X2xvYWRfaGVhZGVyX2FwcCBfX2xvYWRfYXBwc1tHTTIwMF9BQ1JfTUFYX0FQUFNdOwotCX07Ci0K LQkvKiBIUyBGVyAtIHVubG9jayBXUFIgcmVnaW9uIChkR1BVIG9ubHkpICovCi0Jc3RydWN0IG52 a21fZ3B1b2JqICphY3JfdW5sb2FkX2Jsb2I7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IGhzZl9sb2Fk X2hlYWRlciB1bmxvYWRfYmxfaGVhZGVyOwotCQlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyX2FwcCBf X3VubG9hZF9hcHBzW0dNMjAwX0FDUl9NQVhfQVBQU107Ci0JfTsKLQotCS8qIEhTIGJvb3Rsb2Fk ZXIgKi8KLQl2b2lkICpoc2JsX2Jsb2I7Ci0KLQkvKiBMUyBGV3MsIHRvIGJlIGxvYWRlZCBieSB0 aGUgSFMgQUNSICovCi0Jc3RydWN0IG52a21fZ3B1b2JqICpsc19ibG9iOwotCi0JLyogSW5zdGFu Y2UgYmxvY2sgJiBhZGRyZXNzIHNwYWNlIHVzZWQgZm9yIEhTIEZXIGV4ZWN1dGlvbiAqLwotCXN0 cnVjdCBudmttX2dwdW9iaiAqaW5zdDsKLQlzdHJ1Y3QgbnZrbV9ncHVvYmogKnBnZDsKLQlzdHJ1 Y3QgbnZrbV92bSAqdm07Ci0KLQkvKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiBhbGwg bWFuYWdlZCBmYWxjb25zICovCi0JZW51bSB7Ci0JCS8qIEluIG5vbi1zZWN1cmUgc3RhdGUsIG5v IGZpcm13YXJlIGxvYWRlZCwgbm8gcHJpdmlsZWdlcyovCi0JCU5PTl9TRUNVUkUgPSAwLAotCQkv KiBJbiBsb3ctc2VjdXJlIG1vZGUgYW5kIHJlYWR5IHRvIGJlIHN0YXJ0ZWQgKi8KLQkJUkVTRVQs Ci0JCS8qIEluIGxvdy1zZWN1cmUgbW9kZSBhbmQgcnVubmluZyAqLwotCQlSVU5OSU5HLAotCX0g ZmFsY29uX3N0YXRlW05WS01fRkFMQ09OX0VORF07Ci0KLQlib29sIGZpcm13YXJlX29rOwotfTsK LSNkZWZpbmUgZ20yMDBfc2VjYm9vdChzYikgY29udGFpbmVyX29mKHNiLCBzdHJ1Y3QgZ20yMDBf c2VjYm9vdCwgYmFzZSkKLQotLyoqCi0gKiBDb250YWlucyBmdW5jdGlvbnMgd2Ugd2lzaCB0byBh YnN0cmFjdCBiZXR3ZWVuIEdNMjAwLWxpa2UgaW1wbGVtZW50YXRpb25zCi0gKiBAYmxfZGVzY19z aXplOglzaXplIG9mIHRoZSBCTCBkZXNjcmlwdG9yIHVzZWQgYnkgdGhpcyBjaGlwLgotICogQGdl bmVyYXRlX2JsX2Rlc2M6CWhvb2sgdGhhdCBnZW5lcmF0ZXMgdGhlIHByb3BlciBCTCBkZXNjcmlw dG9yIGZvcm1hdCBmcm9tCi0gKgkJCXRoZSBoc2ZfbG9hZF9oZWFkZXIgZm9ybWF0IGludG8gYSBw cmVhbGxvY2F0ZWQgYXJyYXkgb2YKLSAqCQkJc2l6ZSBibF9kZXNjX3NpemUKLSAqIEBwcmVwYXJl X2Jsb2JzOglwcmVwYXJlcyB0aGUgdmFyaW91cyBibG9icyBuZWVkZWQgZm9yIHNlY3VyZSBib290 aW5nCi0gKi8KLXN0cnVjdCBnbTIwMF9zZWNib290X2Z1bmMgewotCS8qCi0JICogU2l6ZSBvZiB0 aGUgYm9vdGxvYWRlciBkZXNjcmlwdG9yIGZvciB0aGlzIGNoaXAuIEEgYmxvY2sgb2YgdGhpcwot CSAqIHNpemUgaXMgYWxsb2NhdGVkIGJlZm9yZSBib290aW5nIGEgZmFsY29uIGFuZCB0aGUgZml4 dXBfYmxfZGVzYwotCSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBvbiBpdAotCSAqLwotCXUzMiBibF9k ZXNjX3NpemU7Ci0Jdm9pZCAoKmdlbmVyYXRlX2JsX2Rlc2MpKGNvbnN0IHN0cnVjdCBoc2ZfbG9h ZF9oZWFkZXIgKiwgdm9pZCAqLCB1NjQpOwotCi0JaW50ICgqcHJlcGFyZV9ibG9icykoc3RydWN0 IGdtMjAwX3NlY2Jvb3QgKik7Ci19OwotCi1pbnQgZ20yMDBfc2VjYm9vdF9vbmVpbml0KHN0cnVj dCBudmttX3NlY2Jvb3QgKik7Ci12b2lkICpnbTIwMF9zZWNib290X2R0b3Ioc3RydWN0IG52a21f c2VjYm9vdCAqKTsKLWludCBnbTIwMF9zZWNib290X3Jlc2V0KHN0cnVjdCBudmttX3NlY2Jvb3Qg KiwgdTMyKTsKLWludCBnbTIwMF9zZWNib290X3N0YXJ0KHN0cnVjdCBudmttX3NlY2Jvb3QgKiwg dTMyKTsKLQotaW50IGdtMjB4X3NlY2Jvb3RfcHJlcGFyZV9ibG9icyhzdHJ1Y3QgZ20yMDBfc2Vj Ym9vdCAqKTsKLQogI2VuZGlmCi0tIAoyLjEwLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5vdXZlYXVAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vbm91dmVhdQo=