Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:56585 "EHLO mx0a-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752818AbbKLDvO (ORCPT ); Wed, 11 Nov 2015 22:51:14 -0500 From: David Lin To: Kalle Valo CC: Johannes Berg , "linux-wireless@vger.kernel.org" , "Chor Teck Law" , Pete Hsieh Subject: [PATCH v7] Add new mac80211 driver mwlwifi. Date: Thu, 12 Nov 2015 03:51:03 +0000 Message-ID: (sfid-20151112_045142_798165_58CB6002) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: VGhpcyBwYXRjaCBwcm92aWRlcyB0aGUgbXdsd2lmaSBkcml2ZXIgZm9yIE1hcnZlbGwgODg2Mywg ODg2NCBhbmQgODg5Nw0KY2hpcHNldHMuDQpUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGFzIHBh cnQgb2YgdGhlIG9wZW53cnQub3JnIHByb2plY3QgdG8gc3VwcG9ydA0KTGlua3N5cyBXUlQxOTAw QUMgYW5kIGlzIG1haW50YWluZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2thbG96L213bHdpZmku DQoNClRoZSBtd2x3aWZpIGRyaXZlciBkaWZmZXJzIGZyb20gZXhpc3RpbmcgbXdpZmlleCBkcml2 ZXI6DQpvIG13bHdpZmkgaXMgYSAic29mdG1hYyBkcml2ZXIiIHVzaW5nIHRoZSBrZXJuZWw/7qiD IG1hYzgwMi4xMSBzdWJzeXN0ZW0NCnRvIHByb3ZpZGUgZnVsbCBBUC9XaXJlbGVzcyBCcmlkZ2Ug ZnVuY3Rpb25hbGl0eSAocm91dGVycykuDQpvIG13aWZpZXggaXMgYSAiZnVsbG1hYyBkcml2ZXIi IHdoaWNoIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YNCmNsaWVudCBmdW5jdGlvbnMg KGxhcHRvcHMvZW1iZWRkZWQgZGV2aWNlcykNCm8gb25seSBtd2x3aWZpIHN1cHBvcnRzIE1hcnZl bGwgQVAgY2hpcCA4ODZYIHNlcmllcw0KDQpOT1RFOiBVc2VycyB3aXRoIE1hcnZlbGwgODhXODg5 NyBjaGlwc2V0cyBjdXJyZW50bHkgc2hvdWxkIGVuYWJsZQ0KKENPTkZJRz1ZIG9yIE0pIGVpdGhl ciBDT05GSUdfTVdJRklFWCBvciBDT05GSUdfTVdMV0lGSSwgTk9UIEJPVEguDQoNCm13bHdpZmkg ZHJpdmVyIGxldmVyYWdlZCBjb2RlIGZyb20gZXhpc3RpbmcgTVdMOEsgZHJpdmVyIGluIHRoZQ0K Zm9sbG93aW5nIGFyZWFzOg0KLSA4MDIuMTFuIHNldHRpbmcgZm9yIG1hYzgwMjExDQotIEZ1bmN0 aW9ucyBuZWVkZWQgdG8gaG9vayB1cCB0byBtYWM4MDIxMQ0KLSBJbnRlcmFjdGlvbnMgd2l0aCBt YWM4MDIxMSB0byBlc3RhYmxpc2ggQkEgc3RyZWFtcw0KLSBQYXJ0aWFsIGZpcm13YXJlIEFQSXMs IHNvbWUgZGF0YSBmaWVsZHMNCi0gTWV0aG9kIHRvIHBhc3MgUnggcGFja2V0cyB0byBtYWM4MDIx MSBleGNlcHQgMTFhYyByYXRlcw0KDQpJbiBhZGRpdGlvbiwgbXdsd2lmaSBkcml2ZXIgc3VwcG9y dHM6DQotIGZ1dHVyZSBzY2FsYWJpbGl0eSBhbmQgZnV0dXJlIGRldmVsb3BtZW50IChyZWZhY3Rv cmVkIHNvdXJjZSBjb2RlKQ0KLSBNYXJ2ZWxsIDgwMi4xMWFjIGNoaXBzZXRzLCBpbmNsdWRpbmcg Y29tYm8gQlQgZGV2aWNlcw0KLSA4MDIuMTFhYyByZWxhdGVkIHNldHRpbmdzIGFuZCBmdW5jdGlv bnMNCi0gY29uY3VycmVudCBBUCtTVEEgZnVuY3Rpb25hbGl0aWVzIHdpdGggc2luZ2xlIGZpcm13 YXJlIHBlciBjaGlwDQotIGZpcm13YXJlIEFQSXMgZm9yIHRoZSBzdXBwb3J0ZWQgY2hpcHNldA0K LSBjb21tdW5pY2F0aW5nIG5ldyBtYWM4MDIxMSBzZXR0aW5ncyB0byBmaXJtd2FyZQ0KLSBEaWZm ZXJlbnQgVFgvUlggZGF0YXBhdGggd2hlcmUgYXBwbGljYWJsZQ0KLSBBLU1TRFUgYW5kIEEtTVBE VQ0KLSBtYWM4MDIxMS1iYXNlZCBNRVNIICh3b3JrIGluIHByb2dyZXNzKQ0KLSBSZWZpbmVkIHRo ZSBjb2RlIHRvIGVzdGFibGlzaCBCQSBzdHJlYW1zDQoNCk5PVEU6IE1XTFdJRkkgd2lsbCBiZSBv cmdhbml6ZWQgdW5kZXIgbmV3IHZlbmRvciBzcGVjaWZpYyBmb2xkZXIvbWFydmVsbCwNCmFzIHBl ciByZXF1ZXN0IG9mIHRoZSBnYXRlIGtlZXBlciBhbmQgY29tbXVuaXR5Lg0KDQpTaWduZWQtb2Zm LWJ5OiBEYXZpZCBMaW4gPGRsaW5AbWFydmVsbC5jb20+DQotLS0NCiBNQUlOVEFJTkVSUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKw0KIGRyaXZlcnMvbmV0L3dp cmVsZXNzL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVycy9uZXQv d2lyZWxlc3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgICAyICsNCiBkcml2ZXJzL25l dC93aXJlbGVzcy9tYXJ2ZWxsL0tjb25maWcgICAgICAgICAgICB8ICAgIDggKw0KIGRyaXZlcnMv bmV0L3dpcmVsZXNzL21hcnZlbGwvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL0tjb25maWcgICAgfCAgIDIzICsNCiBkcml2 ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvTWFrZWZpbGUgICB8ICAgMTIgKw0KIGRy aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9kZWJ1Z2ZzLmMgIHwgIDQzMyArKysr DQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuaCAgfCAgIDI0 ICsNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZGV2LmggICAgICB8ICA0 NzcgKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndjbWQuYyAg ICB8IDI0MjEgKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9t YXJ2ZWxsL213bHdpZmkvZndjbWQuaCAgICB8ICAxOTggKysNCiBkcml2ZXJzL25ldC93aXJlbGVz cy9tYXJ2ZWxsL213bHdpZmkvZndkbC5jICAgICB8ICAxOTkgKysNCiBkcml2ZXJzL25ldC93aXJl bGVzcy9tYXJ2ZWxsL213bHdpZmkvZndkbC5oICAgICB8ICAgMjUgKw0KIGRyaXZlcnMvbmV0L3dp cmVsZXNzL21hcnZlbGwvbXdsd2lmaS9ob3N0Y21kLmggIHwgIDc4NiArKysrKysrKw0KIGRyaXZl cnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuYyAgICAgIHwgIDE1MCArKw0KIGRy aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuaCAgICAgIHwgICAyNiArDQog ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMgfCAgNjk5ICsr KysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvbWFpbi5jICAgICB8 ICA3MzkgKysrKysrKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9yeC5j ICAgICAgIHwgIDYyNCArKysrKysNCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp ZmkvcnguaCAgICAgICB8ICAgMjUgKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS9zeXNhZHB0LmggIHwgICA3MyArDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t d2x3aWZpL3R4LmMgICAgICAgfCAxMjUxICsrKysrKysrKysrKw0KIGRyaXZlcnMvbmV0L3dpcmVs ZXNzL21hcnZlbGwvbXdsd2lmaS90eC5oICAgICAgIHwgICAzNiArDQogMjQgZmlsZXMgY2hhbmdl ZCwgODIzOSBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dp cmVsZXNzL21hcnZlbGwvS2NvbmZpZw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93 aXJlbGVzcy9tYXJ2ZWxsL01ha2VmaWxlDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9NYWtlZmlsZQ0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZGVidWdmcy5jDQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9k ZWJ1Z2ZzLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs bC9td2x3aWZpL2Rldi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNz L21hcnZlbGwvbXdsd2lmaS9md2NtZC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2NtZC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2RsLmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuaA0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaG9zdGNt ZC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS9pc3IuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2 ZWxsL213bHdpZmkvaXNyLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxl c3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21haW4uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvcnguYw0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvcnguaA0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvc3lzYWRw dC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS90eC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS90eC5oDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJT DQppbmRleCAyN2IyN2MwLi43YzMyZjBhIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBi L01BSU5UQUlORVJTDQpAQCAtNjYyOSw2ICs2NjI5LDEyIEBAIEw6CWxpbnV4LXdpcmVsZXNzQHZn ZXIua2VybmVsLm9yZw0KIFM6CU9kZCBGaXhlcw0KIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL213 bDhrLmMNCiANCitNQVJWRUxMIE1XTFdJRkkgV0lSRUxFU1MgRFJJVkVSDQorTToJRGF2aWQgTGlu IDxkbGluQG1hcnZlbGwuY29tPg0KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZw0K K1M6CU1haW50YWluZWQNCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkN CisNCiBNQVJWRUxMIFNPQyBNTUMvU0QvU0RJTyBDT05UUk9MTEVSIERSSVZFUg0KIE06CU5pY29s YXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+DQogUzoJT2RkIEZpeGVzDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25m aWcNCmluZGV4IGY5Zjk0MjIuLmQ1OTliMzUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC93aXJl bGVzcy9LY29uZmlnDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnDQpAQCAtMjg1 LDUgKzI4NSw2IEBAIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZp ZyINCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvS2NvbmZpZyINCiBzb3Vy Y2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9LY29uZmlnIg0KIHNvdXJjZSAiZHJpdmVy cy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWciDQorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVz cy9tYXJ2ZWxsL0tjb25maWciDQogDQogZW5kaWYgIyBXTEFODQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQ0K aW5kZXggNzQwZmRkMy4uNzE1MDRhNyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L01ha2VmaWxlDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQ0KQEAgLTYwLDMg KzYwLDUgQEAgb2JqLSQoQ09ORklHX0JSQ01TTUFDKQkrPSBicmNtODAyMTEvDQogDQogb2JqLSQo Q09ORklHX0NXMTIwMCkJKz0gY3cxMjAwLw0KIG9iai0kKENPTkZJR19SU0lfOTFYKQkrPSByc2kv DQorDQorb2JqLSQoQ09ORklHX1dMX01BUlZFTEwpCSs9IG1hcnZlbGwvDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWFydmVsbC9LY29uZmlnDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4u ZDczZTY0Mg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs bC9LY29uZmlnDQpAQCAtMCwwICsxLDggQEANCittZW51Y29uZmlnIFdMX01BUlZFTEwNCisJYm9v bCAiTWFydmVsbCBXaXJlbGVzcyBMQU4gc3VwcG9ydCINCisJLS0taGVscC0tLQ0KKwkgIEVuYWJs ZSBjb21tdW5pdHkgZHJpdmVycyBmb3IgTWFydmVsbCBXaS1GaSBkZXZpY2VzLg0KKw0KK2lmIFdM X01BUlZFTEwNCitzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9L Y29uZmlnIg0KK2VuZGlmICMgV0xfTUFSVkVMTA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21hcnZlbGwvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL01h a2VmaWxlDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNzBkMWIzZg0KLS0t IC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9NYWtlZmlsZQ0K QEAgLTAsMCArMSBAQA0KK29iai0kKENPTkZJR19NV0xXSUZJKQkrPSBtd2x3aWZpLw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL0tjb25maWcNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwLi5hOWJjYjljDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvS2NvbmZpZw0KQEAgLTAsMCArMSwyMyBA QA0KK2NvbmZpZyBNV0xXSUZJDQorCXRyaXN0YXRlICJNYXJ2ZWxsIEF2YXN0YXIgODhXODg2NC84 OFc4ODk3IFBDSWUgZHJpdmVyIChtYWM4MDIxMSBjb21wYXRpYmxlKSINCisJZGVwZW5kcyBvbiBQ Q0kgJiYgTUFDODAyMTENCisJc2VsZWN0IEZXX0xPQURFUg0KKwktLS1oZWxwLS0tDQorCQlTZWxl Y3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToNCisNCisJCU1hcnZlbGwgV2ly ZWxlc3MgV2ktRmkgODhXODg2NCBtb2R1bGVzDQorCQlNYXJ2ZWxsIFdpcmVsZXNzIFdpLUZpIDg4 Vzg4OTcgbW9kdWxlcw0KKw0KKwkJVGhpcyBkcml2ZXIgdXNlcyB0aGUga2VybmVsJ3MgbWFjODAy MTEgc3Vic3lzdGVtLg0KKw0KKwkJSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFz IGEgbW9kdWxlICg9IGNvZGUgd2hpY2ggY2FuIGJlDQorCQlpbnNlcnRlZCBpbiBhbmQgcmVtb3Zl ZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksDQorCQlzYXkgTSBo ZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRo ZQ0KKwkJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG13bHdpZmkuDQorDQorCQlOT1RFOiBTZWxlY3Rp bmcgdGhpcyBkcml2ZXIgbWF5IGNhdXNlIGNvbmZsaWN0IHdpdGggTVdJRklFWCBkcml2ZXINCisJ CXRoYXQgYWxzbyBvcGVyYXRlcyBvbiB0aGUgc2FtZSBwYXJ0IG51bWJlciA4OFc4ODk3LiBVc2Vy cyBzaG91bGQNCisJCXNlbGVjdCBlaXRoZXIgTVdJRklFWCBvciBNV0xXSUZJLCBub3QgYm90aC4g TVdJRklFWCBpcyBmdWxsbWFjLA0KKwkJc3VwcG9ydGluZyBtb3JlIGNvbXByZWhlbnNpdmUgY2xp ZW50IGZ1bmN0aW9ucyBmb3IgbGFwdG9wcy9lbWJlZGRlZA0KKwkJZGV2aWNlcy4gTVdMV0lGSSBp cyBtYWM4MDIxMS1iYXNlZCBmb3IgZnVsbCBBUC9XaXJlbGVzcyBCcmlkZ2UuDQorDQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uODhmN2VmZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01ha2VmaWxlDQpAQCAtMCwwICsxLDEy IEBADQorb2JqLSQoQ09ORklHX01XTFdJRkkpCSs9IG13bHdpZmkubw0KKw0KK213bHdpZmktb2Jq cwkJKz0gbWFpbi5vDQorbXdsd2lmaS1vYmpzCQkrPSBtYWM4MDIxMS5vDQorbXdsd2lmaS1vYmpz CQkrPSBmd2RsLm8NCittd2x3aWZpLW9ianMJCSs9IGZ3Y21kLm8NCittd2x3aWZpLW9ianMJCSs9 IHR4Lm8NCittd2x3aWZpLW9ianMJCSs9IHJ4Lm8NCittd2x3aWZpLW9ianMJCSs9IGlzci5vDQor bXdsd2lmaS0kKENPTkZJR19ERUJVR19GUykgKz0gZGVidWdmcy5vDQorDQorY2NmbGFncy15ICs9 IC1EX19DSEVDS19FTkRJQU5fXw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h cnZlbGwvbXdsd2lmaS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213 bHdpZmkvZGVidWdmcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOTk3 NDYxYQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t d2x3aWZpL2RlYnVnZnMuYw0KQEAgLTAsMCArMSw0MzMgQEANCisvKg0KKyAqIENvcHlyaWdodCAo QykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBz b2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVy bmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZ b3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICog YWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwg YSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVU RUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2Ug cHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNj bGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMg ZGVidWcgZnMgcmVsYXRlZCBmdW5jdGlvbnMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2RlYnVn ZnMuaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5j bHVkZSAiaG9zdGNtZC5oIg0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJkZWJ1Z2Zz LmgiDQorDQorI2RlZmluZSBNV0xXSUZJX0RFQlVHRlNfQUREX0ZJTEUobmFtZSkgZG8geyBcDQor CWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDY0NCwgcHJpdi0+ZGVidWdmc19waHks IFwNCisJCQkJIHByaXYsICZtd2xfZGVidWdmc18jI25hbWUjI19mb3BzKSkgXA0KKwkJcmV0dXJu OyBcDQorfSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIE1XTFdJRklfREVCVUdGU19GSUxFX09QUyhu YW1lKSBcDQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXdsX2RlYnVnZnNf IyNuYW1lIyNfZm9wcyA9IHsgXA0KKwkucmVhZCA9IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3JlYWQs IFwNCisJLndyaXRlID0gbXdsX2RlYnVnZnNfIyNuYW1lIyNfd3JpdGUsIFwNCisJLm9wZW4gPSBz aW1wbGVfb3BlbiwgXA0KK30NCisNCisjZGVmaW5lIE1XTFdJRklfREVCVUdGU19GSUxFX1JFQURf T1BTKG5hbWUpIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtd2xfZGVi dWdmc18jI25hbWUjI19mb3BzID0geyBcDQorCS5yZWFkID0gbXdsX2RlYnVnZnNfIyNuYW1lIyNf cmVhZCwgXA0KKwkub3BlbiA9IHNpbXBsZV9vcGVuLCBcDQorfQ0KKw0KKyNkZWZpbmUgTVdMV0lG SV9ERUJVR0ZTX0ZJTEVfV1JJVEVfT1BTKG5hbWUpIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyBtd2xfZGVidWdmc18jI25hbWUjI19mb3BzID0geyBcDQorCS53cml0ZSA9 IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3dyaXRlLCBcDQorCS5vcGVuID0gc2ltcGxlX29wZW4sIFwN Cit9DQorDQorc3RhdGljIGludCBwcmludF9tYWNfYWRkcihjaGFyICpwLCB1OCAqbWFjX2FkZHIp DQorew0KKwlpbnQgaTsNCisJY2hhciAqc3RyID0gcDsNCisNCisJc3RyICs9IHNwcmludGYoc3Ry LCAibWFjIGFkZHJlc3M6ICUwMngiLCBtYWNfYWRkclswXSk7DQorCWZvciAoaSA9IDE7IGkgPCBF VEhfQUxFTjsgaSsrKQ0KKwkJc3RyICs9IHNwcmludGYoc3RyLCAiOiUwMngiLCBtYWNfYWRkcltp XSk7DQorCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorDQorCXJldHVybiAoc3RyIC0gcCk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHVtcF9kYXRhKGNoYXIgKnAsIHU4ICpkYXRhLCBpbnQgbGVu LCBjaGFyICp0aXRsZSkNCit7DQorCWNoYXIgKnN0ciA9IHA7DQorCWludCBjdXJfYnl0ZSA9IDA7 DQorCWludCBpOw0KKw0KKwlzdHIgKz0gc3ByaW50ZihzdHIsICIlc1xuIiwgdGl0bGUpOw0KKwlm b3IgKGN1cl9ieXRlID0gMDsgY3VyX2J5dGUgPCBsZW47IGN1cl9ieXRlICs9IDgpIHsNCisJCWlm ICgoY3VyX2J5dGUgKyA4KSA8IGxlbikgew0KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspDQor CQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIjB4JTAyeCAiLA0KKwkJCQkJICAgICAgICooZGF0YSAr IGN1cl9ieXRlICsgaSkpOw0KKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorCQl9IGVs c2Ugew0KKwkJCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gY3VyX2J5dGUpOyBpKyspDQorCQkJCXN0 ciArPSBzcHJpbnRmKHN0ciwgIjB4JTAyeCAiLA0KKwkJCQkJICAgICAgICooZGF0YSArIGN1cl9i eXRlICsgaSkpOw0KKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQorCQkJYnJlYWs7DQor CQl9DQorCX0NCisNCisJcmV0dXJuIChzdHIgLSBwKTsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg bXdsX2RlYnVnZnNfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1 ZiwNCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCit7DQorCXN0cnVjdCBt d2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7DQor CXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsNCisJY2hh ciAqcCA9IChjaGFyICopcGFnZTsNCisJc3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJl dHVybiAtRU5PTUVNOw0KKw0KKwlwICs9IHNwcmludGYocCwgIlxuIik7DQorCXAgKz0gc3ByaW50 ZihwLCAiZHJpdmVyIG5hbWU6ICVzXG4iLCBNV0xfRFJWX05BTUUpOw0KKwlwICs9IHNwcmludGYo cCwgImNoaXAgdHlwZTogJXNcbiIsDQorCQkgICAgIChwcml2LT5jaGlwX3R5cGUgPT0gTVdMODg2 NCkgPyAiODhXODg2NCIgOiAiODhXODg5NyIpOw0KKwlwICs9IHNwcmludGYocCwgImh3IHZlcnNp b246ICVYXG4iLCBwcml2LT5od19kYXRhLmh3X3ZlcnNpb24pOw0KKwlwICs9IHNwcmludGYocCwg ImRyaXZlciB2ZXJzaW9uOiAlc1xuIiwgTVdMX0RSVl9WRVJTSU9OKTsNCisJcCArPSBzcHJpbnRm KHAsICJmaXJtd2FyZSB2ZXJzaW9uOiAweCUwOHhcbiIsDQorCQkgICAgIHByaXYtPmh3X2RhdGEu ZndfcmVsZWFzZV9udW0pOw0KKwlwICs9IHByaW50X21hY19hZGRyKHAsIHByaXYtPmh3X2RhdGEu bWFjX2FkZHIpOw0KKwlwICs9IHNwcmludGYocCwgIjJnOiAlc1xuIiwgcHJpdi0+ZGlzYWJsZV8y ZyA/ICJkaXNhYmxlIiA6ICJlbmFibGUiKTsNCisJcCArPSBzcHJpbnRmKHAsICI1ZzogJXNcbiIs IHByaXYtPmRpc2FibGVfNWcgPyAiZGlzYWJsZSIgOiAiZW5hYmxlIik7DQorCXAgKz0gc3ByaW50 ZihwLCAiYW50ZW5uYTogJWQgJWRcbiIsDQorCQkgICAgIChwcml2LT5hbnRlbm5hX3R4ID09IEFO VEVOTkFfVFhfNF9BVVRPKSA/IDQgOiAyLA0KKwkJICAgICAocHJpdi0+YW50ZW5uYV9yeCA9PSBB TlRFTk5BX1RYXzRfQVVUTykgPyA0IDogMik7DQorCXAgKz0gc3ByaW50ZihwLCAiaXJxIG51bWJl cjogJWRcbiIsIHByaXYtPmlycSk7DQorCXAgKz0gc3ByaW50ZihwLCAiaW9iYXNlMDogJXBcbiIs IHByaXYtPmlvYmFzZTApOw0KKwlwICs9IHNwcmludGYocCwgImlvYmFzZTE6ICVwXG4iLCBwcml2 LT5pb2Jhc2UxKTsNCisJcCArPSBzcHJpbnRmKHAsICJ0eCBsaW1pdDogJWRcbiIsIHByaXYtPnR4 cV9saW1pdCk7DQorCXAgKz0gc3ByaW50ZihwLCAicnggbGltaXQ6ICVkXG4iLCBwcml2LT5yZWN2 X2xpbWl0KTsNCisJcCArPSBzcHJpbnRmKHAsICJhcCBtYWNpZCBzdXBwb3J0OiAlMDh4XG4iLA0K KwkJICAgICBwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkKTsNCisJcCArPSBzcHJpbnRmKHAsICJz dGEgbWFjaWQgc3VwcG9ydDogJTA4eFxuIiwNCisJCSAgICAgcHJpdi0+c3RhX21hY2lkc19zdXBw b3J0ZWQpOw0KKwlwICs9IHNwcmludGYocCwgIm1hY2lkIHVzZWQ6ICUwOHhcbiIsIHByaXYtPm1h Y2lkc191c2VkKTsNCisJcCArPSBzcHJpbnRmKHAsICJtZmcgbW9kZTogJXNcbiIsIHByaXYtPm1m Z19tb2RlID8gInRydWUiIDogImZhbHNlIik7DQorCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsNCisN CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFy ICopcGFnZSwNCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpcCAtIHBhZ2UpOw0KKwlmcmVlX3Bh Z2UocGFnZSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IG13bF9k ZWJ1Z2ZzX3ZpZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwNCisJ CQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2 ICpwcml2ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWdu ZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpwID0g KGNoYXIgKilwYWdlOw0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZjsNCisJY2hhciBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyAxXTsN CisJc3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlw ICs9IHNwcmludGYocCwgIlxuIik7DQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dmlmX2xvY2spOw0K KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG13bF92aWYsICZwcml2LT52aWZfbGlzdCwgbGlzdCkgew0K KwkJdmlmID0gY29udGFpbmVyX29mKChjaGFyICopbXdsX3ZpZiwgc3RydWN0IGllZWU4MDIxMV92 aWYsDQorCQkJCSAgIGRydl9wcml2WzBdKTsNCisJCXAgKz0gc3ByaW50ZihwLCAibWFjaWQ6ICVk XG4iLCBtd2xfdmlmLT5tYWNpZCk7DQorCQlzd2l0Y2ggKHZpZi0+dHlwZSkgew0KKwkJY2FzZSBO TDgwMjExX0lGVFlQRV9BUDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IGFwXG4iKTsNCisJ CQltZW1jcHkoc3NpZCwgdmlmLT5ic3NfY29uZi5zc2lkLA0KKwkJCSAgICAgICB2aWYtPmJzc19j b25mLnNzaWRfbGVuKTsNCisJCQlzc2lkW3ZpZi0+YnNzX2NvbmYuc3NpZF9sZW5dID0gMDsNCisJ CQlwICs9IHNwcmludGYocCwgInNzaWQ6ICVzXG4iLCBzc2lkKTsNCisJCQlwICs9IHByaW50X21h Y19hZGRyKHAsIG13bF92aWYtPmJzc2lkKTsNCisJCQlicmVhazsNCisJCWNhc2UgTkw4MDIxMV9J RlRZUEVfTUVTSF9QT0lOVDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IG1lc2hcbiIpOw0K KwkJCXAgKz0gcHJpbnRfbWFjX2FkZHIocCwgbXdsX3ZpZi0+YnNzaWQpOw0KKwkJCWJyZWFrOw0K KwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOg0KKwkJCXAgKz0gc3ByaW50ZihwLCAidHlw ZTogc3RhXG4iKTsNCisJCQlwICs9IHByaW50X21hY19hZGRyKHAsIG13bF92aWYtPnN0YV9tYWMp Ow0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlwICs9IHNwcmludGYocCwgInR5cGU6IHVu a25vd25cbiIpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJcCArPSBzcHJpbnRmKHAsICJod19jcnlw dG9fZW5hYmxlZDogJXNcbiIsDQorCQkJICAgICBtd2xfdmlmLT5pc19od19jcnlwdG9fZW5hYmxl ZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOw0KKwkJcCArPSBzcHJpbnRmKHAsICJrZXkgaWR4OiAlZFxu IiwgbXdsX3ZpZi0+a2V5aWR4KTsNCisJCXAgKz0gc3ByaW50ZihwLCAiSVY6ICUwOHglMDR4XG4i LCBtd2xfdmlmLT5pdjMyLCBtd2xfdmlmLT5pdjE2KTsNCisJCXAgKz0gZHVtcF9kYXRhKHAsIG13 bF92aWYtPmJlYWNvbl9pbmZvLmllX3dtbV9wdHIsDQorCQkJICAgICAgIG13bF92aWYtPmJlYWNv bl9pbmZvLmllX3dtbV9sZW4sICJXTU06Iik7DQorCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlm LT5iZWFjb25faW5mby5pZV9yc25fcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5m by5pZV9yc25fbGVuLCAiUlNOOiIpOw0KKwkJcCArPSBkdW1wX2RhdGEocCwgbXdsX3ZpZi0+YmVh Y29uX2luZm8uaWVfcnNuNDhfcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5p ZV9yc240OF9sZW4sICJSU040ODoiKTsNCisJCXAgKz0gZHVtcF9kYXRhKHAsIG13bF92aWYtPmJl YWNvbl9pbmZvLmllX2h0X3B0ciwNCisJCQkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVf aHRfbGVuLCAiSFQ6Iik7DQorCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlmLT5iZWFjb25faW5m by5pZV92aHRfcHRyLA0KKwkJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5pZV92aHRfbGVu LCAiVkhUOiIpOw0KKwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOw0KKwl9DQorCXNwaW5fdW5sb2Nr X2JoKCZwcml2LT52aWZfbG9jayk7DQorDQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVy KHVidWYsIGNvdW50LCBwcG9zLCAoY2hhciAqKXBhZ2UsDQorCQkJCSAgICAgICh1bnNpZ25lZCBs b25nKXAgLSBwYWdlKTsNCisJZnJlZV9wYWdlKHBhZ2UpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCitzdGF0aWMgc3NpemVfdCBtd2xfZGVidWdmc19zdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmls ZSwgY2hhciBfX3VzZXIgKnVidWYsDQorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBv cykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbXdsX3ByaXYgKilmaWxl LT5wcml2YXRlX2RhdGE7DQorCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShH RlBfS0VSTkVMKTsNCisJY2hhciAqcCA9IChjaGFyICopcGFnZTsNCisJc3RydWN0IG13bF9zdGEg KnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwlzc2l6ZV90IHJldDsN CisNCisJaWYgKCFwKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXAgKz0gc3ByaW50ZihwLCAi XG4iKTsNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorCWxpc3RfZm9yX2VhY2hf ZW50cnkoc3RhX2luZm8sICZwcml2LT5zdGFfbGlzdCwgbGlzdCkgew0KKwkJc3RhID0gY29udGFp bmVyX29mKChjaGFyICopc3RhX2luZm8sIHN0cnVjdCBpZWVlODAyMTFfc3RhLA0KKwkJCQkgICBk cnZfcHJpdlswXSk7DQorCQlwICs9IHByaW50X21hY19hZGRyKHAsIHN0YS0+YWRkcik7DQorCQlw ICs9IHNwcmludGYocCwgImFpZDogJXVcbiIsIHN0YS0+YWlkKTsNCisJCXAgKz0gc3ByaW50Zihw LCAiYW1wZHU6ICVzXG4iLA0KKwkJCSAgICAgc3RhX2luZm8tPmlzX2FtcGR1X2FsbG93ZWQgPyAi dHJ1ZSIgOiAiZmFsc2UiKTsNCisJCXAgKz0gc3ByaW50ZihwLCAiYW1zZHU6ICVzXG4iLA0KKwkJ CSAgICAgc3RhX2luZm8tPmlzX2Ftc2R1X2FsbG93ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsNCisJ CWlmIChzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCkgew0KKwkJCXAgKz0gc3ByaW50ZihwLCAi YW1zZHUgY2FwOiAweCUwMnhcbiIsDQorCQkJCSAgICAgc3RhX2luZm8tPmFtc2R1X2N0cmwuY2Fw KTsNCisJCX0NCisJCXAgKz0gc3ByaW50ZihwLCAiSVY6ICUwOHglMDR4XG4iLA0KKwkJCSAgICAg c3RhX2luZm8tPml2MzIsIHN0YV9pbmZvLT5pdjE2KTsNCisJCXAgKz0gc3ByaW50ZihwLCAiXG4i KTsNCisJfQ0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RhX2xvY2spOw0KKw0KKwlyZXQgPSBz aW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgKGNoYXIgKilwYWdlLA0K KwkJCQkgICAgICAodW5zaWduZWQgbG9uZylwIC0gcGFnZSk7DQorCWZyZWVfcGFnZShwYWdlKTsN CisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgbXdsX2RlYnVnZnNfYW1w ZHVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsDQorCQkJCSAgICAg IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2 ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9u ZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpwID0gKGNoYXIg KilwYWdlOw0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtOw0KKwlpbnQgaTsNCisJ c3NpemVfdCByZXQ7DQorDQorCWlmICghcCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlwICs9 IHNwcmludGYocCwgIlxuIik7DQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0K Kwlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9BTVBEVV9RVUVVRVM7IGkrKykgew0KKwkJc3Ry ZWFtID0gJnByaXYtPmFtcGR1W2ldOw0KKwkJcCArPSBzcHJpbnRmKHAsICJzdHJlYW06ICVkXG4i LCBpKTsNCisJCXAgKz0gc3ByaW50ZihwLCAiaWR4OiAldVxuIiwgc3RyZWFtLT5pZHgpOw0KKwkJ cCArPSBzcHJpbnRmKHAsICJzdGF0ZTogJXVcbiIsIHN0cmVhbS0+c3RhdGUpOw0KKwkJaWYgKHN0 cmVhbS0+c3RhKSB7DQorCQkJcCArPSBwcmludF9tYWNfYWRkcihwLCBzdHJlYW0tPnN0YS0+YWRk cik7DQorCQkJcCArPSBzcHJpbnRmKHAsICJ0aWQ6ICV1XG4iLCBzdHJlYW0tPnRpZCk7DQorCQl9 DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJcCArPSBzcHJp bnRmKHAsICJcbiIpOw0KKw0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBj b3VudCwgcHBvcywgKGNoYXIgKilwYWdlLA0KKwkJCQkgICAgICAodW5zaWduZWQgbG9uZylwIC0g cGFnZSk7DQorCWZyZWVfcGFnZShwYWdlKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3Rh dGljIGludCBtd2xfZGVidWdmc19yZWdfYWNjZXNzKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgYm9v bCB3cml0ZSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7DQorCXU4 IHNldDsNCisJdTMyICphZGRyX3ZhbDsNCisJaW50IHJldCA9IDA7DQorDQorCXNldCA9IHdyaXRl ID8gV0xfU0VUIDogV0xfR0VUOw0KKw0KKwlzd2l0Y2ggKHByaXYtPnJlZ190eXBlKSB7DQorCWNh c2UgTVdMX0FDQ0VTU19BRERSMDoNCisJCWlmIChzZXQgPT0gV0xfR0VUKQ0KKwkJCXByaXYtPnJl Z192YWx1ZSA9DQorCQkJCXJlYWRsKHByaXYtPmlvYmFzZTAgKyBwcml2LT5yZWdfb2Zmc2V0KTsN CisJCWVsc2UNCisJCQl3cml0ZWwocHJpdi0+cmVnX3ZhbHVlLA0KKwkJCSAgICAgICBwcml2LT5p b2Jhc2UwICsgcHJpdi0+cmVnX29mZnNldCk7DQorCQlicmVhazsNCisJY2FzZSBNV0xfQUNDRVNT X0FERFIxOg0KKwkJaWYgKHNldCA9PSBXTF9HRVQpDQorCQkJcHJpdi0+cmVnX3ZhbHVlID0NCisJ CQkJcmVhZGwocHJpdi0+aW9iYXNlMSArIHByaXYtPnJlZ19vZmZzZXQpOw0KKwkJZWxzZQ0KKwkJ CXdyaXRlbChwcml2LT5yZWdfdmFsdWUsDQorCQkJICAgICAgIHByaXYtPmlvYmFzZTEgKyBwcml2 LT5yZWdfb2Zmc2V0KTsNCisJCWJyZWFrOw0KKwljYXNlIE1XTF9BQ0NFU1NfQUREUjoNCisJCWFk ZHJfdmFsID0ga21hbGxvYyg2NCAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsNCisJCWlmIChh ZGRyX3ZhbCkgew0KKwkJCW1lbXNldChhZGRyX3ZhbCwgMCwgNjQgKiBzaXplb2YodTMyKSk7DQor CQkJYWRkcl92YWxbMF0gPSBwcml2LT5yZWdfdmFsdWU7DQorCQkJcmV0ID0gbXdsX2Z3Y21kX2dl dF9hZGRyX3ZhbHVlKGh3LCBwcml2LT5yZWdfb2Zmc2V0LA0KKwkJCQkJCSAgICAgICA0LCBhZGRy X3ZhbCwgc2V0KTsNCisJCQlpZiAoKCFyZXQpICYmIChzZXQgPT0gV0xfR0VUKSkNCisJCQkJcHJp di0+cmVnX3ZhbHVlID0gYWRkcl92YWxbMF07DQorCQkJa2ZyZWUoYWRkcl92YWwpOw0KKwkJfSBl bHNlIHsNCisJCQlyZXQgPSAtRU5PTUVNOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlyZXQgPSAtRUlOVkFMOw0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIHNzaXplX3QgbXdsX2RlYnVnZnNfcmVncmR3cl9yZWFkKHN0cnVjdCBmaWxlICpm aWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwNCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9z KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUt PnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdG UF9LRVJORUwpOw0KKwljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7DQorCWludCBwb3MgPSAwLCBy ZXQgPSAwOw0KKw0KKwlpZiAoIWJ1ZikNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlpZiAoIXBy aXYtPnJlZ190eXBlKSB7DQorCQkvKiBObyBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovDQorCQlw b3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwIik7DQorCQlnb3RvIG5vbmU7DQorCX0N CisNCisJLyogU2V0IGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4gKi8NCisJaWYgKHByaXYtPnJlZ192 YWx1ZSAhPSBVSU5UX01BWCkgew0KKwkJcmV0ID0gbXdsX2RlYnVnZnNfcmVnX2FjY2Vzcyhwcml2 LCB0cnVlKTsNCisJCWdvdG8gZG9uZTsNCisJfQ0KKwkvKiBHZXQgY29tbWFuZCBoYXMgYmVlbiBn aXZlbiAqLw0KKwlyZXQgPSBtd2xfZGVidWdmc19yZWdfYWNjZXNzKHByaXYsIGZhbHNlKTsNCisN Citkb25lOg0KKwlpZiAoIXJldCkNCisJCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwg IiV1IDB4JTA4eCAweCUwOHhcbiIsDQorCQkJCXByaXYtPnJlZ190eXBlLCBwcml2LT5yZWdfb2Zm c2V0LA0KKwkJCQlwcml2LT5yZWdfdmFsdWUpOw0KKwllbHNlDQorCQlwb3MgKz0gc25wcmludGYo YnVmLCBQQUdFX1NJWkUsICJlcnJvcjogJWQoJXUgMHglMDh4IDB4JTA4eClcbiIsDQorCQkJCXJl dCwgcHJpdi0+cmVnX3R5cGUsIHByaXYtPnJlZ19vZmZzZXQsDQorCQkJCXByaXYtPnJlZ192YWx1 ZSk7DQorDQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9z LCBidWYsIHBvcyk7DQorDQorbm9uZToNCisNCisJZnJlZV9wYWdlKGFkZHIpOw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBtd2xfZGVidWdmc19yZWdyZHdyX3dyaXRlKHN0 cnVjdCBmaWxlICpmaWxlLA0KKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLA0KKwkJCQkJ IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2 ID0gKHN0cnVjdCBtd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCisJdW5zaWduZWQgbG9u ZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KKwljaGFyICpidWYgPSAoY2hh ciAqKWFkZHI7DQorCXNpemVfdCBidWZfc2l6ZSA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0Vf U0laRSAtIDEpOw0KKwlpbnQgcmV0Ow0KKwl1MzIgcmVnX3R5cGUgPSAwLCByZWdfb2Zmc2V0ID0g MCwgcmVnX3ZhbHVlID0gVUlOVF9NQVg7DQorDQorCWlmICghYnVmKQ0KKwkJcmV0dXJuIC1FTk9N RU07DQorDQorCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGJ1Zl9zaXplKSkgew0KKwkJ cmV0ID0gLUVGQVVMVDsNCisJCWdvdG8gZG9uZTsNCisJfQ0KKw0KKwlyZXQgPSBzc2NhbmYoYnVm LCAiJXUgJXggJXgiLCAmcmVnX3R5cGUsICZyZWdfb2Zmc2V0LCAmcmVnX3ZhbHVlKTsNCisNCisJ aWYgKCFyZWdfdHlwZSkgew0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gZG9uZTsNCisJfSBl bHNlIHsNCisJCXByaXYtPnJlZ190eXBlID0gcmVnX3R5cGU7DQorCQlwcml2LT5yZWdfb2Zmc2V0 ID0gcmVnX29mZnNldDsNCisJCXByaXYtPnJlZ192YWx1ZSA9IHJlZ192YWx1ZTsNCisJCXJldCA9 IGNvdW50Ow0KKwl9DQorZG9uZToNCisNCisJZnJlZV9wYWdlKGFkZHIpOw0KKwlyZXR1cm4gcmV0 Ow0KK30NCisNCitNV0xXSUZJX0RFQlVHRlNfRklMRV9SRUFEX09QUyhpbmZvKTsNCitNV0xXSUZJ X0RFQlVHRlNfRklMRV9SRUFEX09QUyh2aWYpOw0KK01XTFdJRklfREVCVUdGU19GSUxFX1JFQURf T1BTKHN0YSk7DQorTVdMV0lGSV9ERUJVR0ZTX0ZJTEVfUkVBRF9PUFMoYW1wZHUpOw0KK01XTFdJ RklfREVCVUdGU19GSUxFX09QUyhyZWdyZHdyKTsNCisNCit2b2lkIG13bF9kZWJ1Z2ZzX2luaXQo c3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo dy0+cHJpdjsNCisNCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3BoeSkNCisJCXByaXYtPmRlYnVnZnNf cGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKCJtd2x3aWZpIiwNCisJCQkJCQkgICAgICAgaHctPndp cGh5LT5kZWJ1Z2ZzZGlyKTsNCisNCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3BoeSkNCisJCXJldHVy bjsNCisNCisJTVdMV0lGSV9ERUJVR0ZTX0FERF9GSUxFKGluZm8pOw0KKwlNV0xXSUZJX0RFQlVH RlNfQUREX0ZJTEUodmlmKTsNCisJTVdMV0lGSV9ERUJVR0ZTX0FERF9GSUxFKHN0YSk7DQorCU1X TFdJRklfREVCVUdGU19BRERfRklMRShhbXBkdSk7DQorCU1XTFdJRklfREVCVUdGU19BRERfRklM RShyZWdyZHdyKTsNCit9DQorDQordm9pZCBtd2xfZGVidWdmc19yZW1vdmUoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisN CisJZGVidWdmc19yZW1vdmUocHJpdi0+ZGVidWdmc19waHkpOw0KKwlwcml2LT5kZWJ1Z2ZzX3Bo eSA9IE5VTEw7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwv bXdsd2lmaS9kZWJ1Z2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv ZGVidWdmcy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZGZjMmEzYw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp L2RlYnVnZnMuaA0KQEAgLTAsMCArMSwyNCBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2 LTIwMTUsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJl IGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25h bA0KKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkg dXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRh bmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkg b2Ygd2hpY2gNCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1J UywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UNCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRl cyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIu DQorICovDQorDQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBkZWJ1ZyBmcyBy ZWxhdGVkIGZ1bmN0aW9ucy4gKi8NCisNCisjaWZuZGVmIF9kZWJ1Z2ZzX2hfDQorI2RlZmluZSBf ZGVidWdmc19oXw0KKw0KK3ZvaWQgbXdsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodyk7DQordm9pZCBtd2xfZGVidWdmc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcp Ow0KKw0KKyNlbmRpZiAvKiBfZGVidWdmc19oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h cnZlbGwvbXdsd2lmaS9kZXYuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LjM3MGQzYzANCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9kZXYuaA0KQEAgLTAsMCArMSw0NzcgQEANCisvKg0KKyAqIENvcHlyaWdodCAo QykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBz b2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVy bmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZ b3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICog YWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwg YSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVU RUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2Ug cHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNj bGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZGV2 aWNlIHJlbGF0ZWQgaW5mb3JtYXRpb24uICovDQorDQorI2lmbmRlZiBfZGV2X2hfDQorI2RlZmlu ZSBfZGV2X2hfDQorDQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCisjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9maXJtd2FyZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9iaXRvcHMuaD4NCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+DQorDQorI2RlZmluZSBNV0xf RFJWX05BTUUgICAgIEtCVUlMRF9NT0ROQU1FDQorI2RlZmluZSBNV0xfRFJWX1ZFUlNJT04JICIx MC4zLjAuMTQiDQorDQorLyogTWFwIHRvIDB4ODAwMDAwMDAgKEJ1cyBjb250cm9sKSBvbiBCQVIw ICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0gyQV9JTlRFUlJVUFRfRVZFTlRTICAgICAgMHgwMDAw MEMxOCAvKiAoRnJvbSBob3N0IHRvIEFSTSkgKi8NCisjZGVmaW5lIE1BQ1JFR19SRUdfSDJBX0lO VEVSUlVQVF9DQVVTRSAgICAgICAweDAwMDAwQzFDIC8qIChGcm9tIGhvc3QgdG8gQVJNKSAqLw0K KyNkZWZpbmUgTUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX01BU0sgICAgICAgIDB4MDAwMDBDMjAg LyogKEZyb20gaG9zdCB0byBBUk0pICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0gyQV9JTlRFUlJV UFRfQ0xFQVJfU0VMICAgMHgwMDAwMEMyNCAvKiAoRnJvbSBob3N0IHRvIEFSTSkgKi8NCisjZGVm aW5lIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyAweDAwMDAwQzI4IC8qIChG cm9tIGhvc3QgdG8gQVJNKSAqLw0KKw0KKyNkZWZpbmUgTUFDUkVHX1JFR19BMkhfSU5URVJSVVBU X0VWRU5UUyAgICAgIDB4MDAwMDBDMkMgLyogKEZyb20gQVJNIHRvIGhvc3QpICovDQorI2RlZmlu ZSBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UgICAgICAgMHgwMDAwMEMzMCAvKiAoRnJv bSBBUk0gdG8gaG9zdCkgKi8NCisjZGVmaW5lIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNL ICAgICAgICAweDAwMDAwQzM0IC8qIChGcm9tIEFSTSB0byBob3N0KSAqLw0KKyNkZWZpbmUgTUFD UkVHX1JFR19BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCAgIDB4MDAwMDBDMzggLyogKEZyb20gQVJN IHRvIGhvc3QpICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01B U0sgMHgwMDAwMEMzQyAvKiAoRnJvbSBBUk0gdG8gaG9zdCkgKi8NCisNCisvKiBNYXAgdG8gMHg4 MDAwMDAwMCBvbiBCQVIxICovDQorI2RlZmluZSBNQUNSRUdfUkVHX0dFTl9QVFIgICAgICAgICAg ICAgICAgICAweDAwMDAwQzEwDQorI2RlZmluZSBNQUNSRUdfUkVHX0lOVF9DT0RFICAgICAgICAg ICAgICAgICAweDAwMDAwQzE0DQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIE1BQ1JFR19SRUdf QTJIX0lOVEVSUlVQVF9DQVVTRSAoQTJIUklDKSAqLw0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19C SVRfVFhfRE9ORSAgICAgICAgICAgQklUKDApDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9S WF9SRFkgICAgICAgICAgICBCSVQoMSkNCisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX09QQ19E T05FICAgICAgICAgIEJJVCgyKQ0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfTUFDX0VWRU5U ICAgICAgICAgQklUKDMpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9SWF9QUk9CTEVNICAg ICAgICBCSVQoNCkNCisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX1JBRElPX09GRiAgICAgICAg IEJJVCg1KQ0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfUkFESU9fT04gICAgICAgICAgQklU KDYpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9SQURBUl9ERVRFQ1QgICAgICBCSVQoNykN CisjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX0lDVl9FUlJPUiAgICAgICAgIEJJVCg4KQ0KKyNk ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfV0VBS0lWX0VSUk9SICAgICAgQklUKDkpDQorI2RlZmlu ZSBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFkgICAgICAgICBCSVQoMTApDQorI2RlZmluZSBN QUNSRUdfQTJIUklDX0JJVF9RVUVfRlVMTCAgICAgICAgICBCSVQoMTEpDQorI2RlZmluZSBNQUNS RUdfQTJIUklDX0JJVF9DSEFOX1NXSVRDSCAgICAgICBCSVQoMTIpDQorI2RlZmluZSBNQUNSRUdf QTJIUklDX0JJVF9UWF9XQVRDSERPRyAgICAgICBCSVQoMTMpDQorI2RlZmluZSBNQUNSRUdfQTJI UklDX0JBX1dBVENIRE9HICAgICAgICAgICBCSVQoMTQpDQorLyogMTUgdGFrZW4gYnkgSVNSX1RY QUNLICovDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0JJVF9TU1VfRE9ORSAgICAgICAgICBCSVQo MTYpDQorI2RlZmluZSBNQUNSRUdfQTJIUklDX0NPTlNFQ19UWEZBSUwgICAgICAgICBCSVQoMTcp DQorDQorI2RlZmluZSBJU1JfU1JDX0JJVFMgICAgICAgIChNQUNSRUdfQTJIUklDX0JJVF9SWF9S RFkgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9UWF9ET05FIHwgXA0KKwkJCSAgICAg TUFDUkVHX0EySFJJQ19CSVRfT1BDX0RPTkUgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJ VF9NQUNfRVZFTlQgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9XRUFLSVZfRVJST1Ig fCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklDX0JJVF9JQ1ZfRVJST1IgfCBcDQorCQkJICAgICBN QUNSRUdfQTJIUklDX0JJVF9TU1VfRE9ORSB8IFwNCisJCQkgICAgIE1BQ1JFR19BMkhSSUNfQklU X1JBREFSX0RFVEVDVCB8IFwNCisJCQkgICAgIE1BQ1JFR19BMkhSSUNfQklUX0NIQU5fU1dJVENI IHwgXA0KKwkJCSAgICAgTUFDUkVHX0EySFJJQ19CSVRfVFhfV0FUQ0hET0cgfCBcDQorCQkJICAg ICBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFkgfCBcDQorCQkJICAgICBNQUNSRUdfQTJIUklD X0JBX1dBVENIRE9HIHwgXA0KKwkJCSAgICAgTUFDUkVHX0EySFJJQ19DT05TRUNfVFhGQUlMKQ0K Kw0KKyNkZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfTUFTSyAgICAgIElTUl9TUkNfQklUUw0KKw0K Ky8qIEJpdCBkZWZpbml0aW9uIGZvciBNQUNSRUdfUkVHX0gyQV9JTlRFUlJVUFRfQ0FVU0UgKEgy QVJJQykgKi8NCisjZGVmaW5lIE1BQ1JFR19IMkFSSUNfQklUX1BQQV9SRUFEWSAgICAgICAgIEJJ VCgwKQ0KKyNkZWZpbmUgTUFDUkVHX0gyQVJJQ19CSVRfRE9PUl9CRUxMICAgICAgICAgQklUKDEp DQorI2RlZmluZSBNQUNSRUdfSDJBUklDX0JJVF9QUyAgICAgICAgICAgICAgICBCSVQoMikNCisj ZGVmaW5lIE1BQ1JFR19IMkFSSUNfQklUX1BTUE9MTCAgICAgICAgICAgIEJJVCgzKQ0KKyNkZWZp bmUgSVNSX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDE1KQ0KKyNkZWZpbmUg SVNSX1JFU0VUX0FQMzMgICAgICAgICAgICAgICAgICAgICAgQklUKDI2KQ0KKw0KKy8qIERhdGEg ZGVzY3JpcHRvciByZWxhdGVkIGNvbnN0YW50cyAqLw0KKyNkZWZpbmUgRUFHTEVfUlhEX0NUUkxf RFJJVkVSX09XTiAgICAgICAgICAgMHgwMA0KKyNkZWZpbmUgRUFHTEVfUlhEX0NUUkxfRE1BX09X TiAgICAgICAgICAgICAgMHg4MA0KKw0KKyNkZWZpbmUgRUFHTEVfUlhEX1NUQVRVU19PSyAgICAg ICAgICAgICAgICAgMHgwMQ0KKw0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19JRExFICAgICAg ICAgICAgICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19PSyAgICAgICAg ICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgRUFHTEVfVFhEX1NUQVRVU19GV19PV05FRCAg ICAgICAgICAgMHg4MDAwMDAwMA0KKw0KKy8qIEFudGVubmEgY29udHJvbCAqLw0KKyNkZWZpbmUg QU5URU5OQV9UWF80X0FVVE8gICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQU5URU5OQV9U WF8yICAgICAgICAgICAgICAgICAgICAgICAgMw0KKyNkZWZpbmUgQU5URU5OQV9SWF80X0FVVE8g ICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQU5URU5OQV9SWF8yICAgICAgICAgICAgICAg ICAgICAgICAgMg0KKw0KKy8qIEJhbmQgcmVsYXRlZCBjb25zdGFudHMgKi8NCisjZGVmaW5lIEJB TkRfMjRfQ0hBTk5FTF9OVU0gICAgICAgICAgICAgICAgIDE0DQorI2RlZmluZSBCQU5EXzI0X1JB VEVfTlVNICAgICAgICAgICAgICAgICAgICAxMw0KKyNkZWZpbmUgQkFORF81MF9DSEFOTkVMX05V TSAgICAgICAgICAgICAgICAgMjQNCisjZGVmaW5lIEJBTkRfNTBfUkFURV9OVU0gICAgICAgICAg ICAgICAgICAgIDgNCisNCisvKiB2aWYgYW5kIHN0YXRpb24gKi8NCisjZGVmaW5lIE5VTV9XRVBf S0VZUyAgICAgICAgICAgICAgICAgICAgICAgIDQNCisjZGVmaW5lIE1XTF9NQVhfVElEICAgICAg ICAgICAgICAgICAgICAgICAgIDgNCisjZGVmaW5lIE1XTF9BTVNEVV9TSVpFXzRLICAgICAgICAg ICAgICAgICAgIDANCisjZGVmaW5lIE1XTF9BTVNEVV9TSVpFXzhLICAgICAgICAgICAgICAgICAg IDENCisNCisvKiBwb3dlciBpbml0ICovDQorI2RlZmluZSBNV0xfUE9XRVJfSU5JVF8xICAgICAg ICAgICAgICAgICAgICAxDQorI2RlZmluZSBNV0xfUE9XRVJfSU5JVF8yICAgICAgICAgICAgICAg ICAgICAyDQorDQorZW51bSB7DQorCU1XTDg4NjQgPSAwLA0KKwlNV0w4ODk3LA0KKwlNV0xVTktO T1dOLA0KK307DQorDQorZW51bSB7DQorCUFQX01PREVfMTFBQyA9IDB4MTAsICAgICAgICAgLyog Z2VuZXJpYyAxMWFjIGluZGljYXRpb24gbW9kZSAqLw0KKwlBUF9NT0RFXzJfNEdIWl8xMUFDX01J WEVEID0gMHgxNywNCit9Ow0KKw0KK2VudW0gew0KKwlBTVBEVV9OT19TVFJFQU0sDQorCUFNUERV X1NUUkVBTV9ORVcsDQorCUFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUywNCisJQU1QRFVfU1RSRUFN X0FDVElWRSwNCit9Ow0KKw0KK3N0cnVjdCBtd2xfY2hpcF9pbmZvIHsNCisJY29uc3QgY2hhciAq cGFydF9uYW1lOw0KKwljb25zdCBjaGFyICpmd19pbWFnZTsNCisJaW50IGFudGVubmFfdHg7DQor CWludCBhbnRlbm5hX3J4Ow0KK307DQorDQorc3RydWN0IG13bF90eF9wd3JfdGJsIHsNCisJdTgg Y2hhbm5lbDsNCisJdTggc2V0Y2FwOw0KKwl1MTYgdHhhbnRlbm5hMjsNCisJdTE2IHR4X3Bvd2Vy W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOw0KKwlib29sIGNkZDsNCit9Ow0KKw0KK3N0 cnVjdCBtd2xfaHdfZGF0YSB7DQorCXUzMiBmd19yZWxlYXNlX251bTsgICAgICAgICAgLyogTWFq TmJyOk1pbk5icjpTdWJNaW46UGF0Y2hMZXZlbCAqLw0KKwl1OCBod192ZXJzaW9uOyAgICAgICAg ICAgICAgIC8qIHBsYWluIG51bWJlciBpbmRpY2F0aW5nIHZlcnNpb24gKi8NCisJdTggaG9zdF9p bnRlcmZhY2U7ICAgICAgICAgICAvKiBwbGFpbiBudW1iZXIgb2YgaW50ZXJmYWNlICAgICAgICov DQorCXUxNiBtYXhfbnVtX3R4X2Rlc2M7ICAgICAgICAgLyogbWF4IG51bWJlciBvZiBUWCBkZXNj cmlwdG9ycyAgICAqLw0KKwl1MTYgbWF4X251bV9tY19hZGRyOyAgICAgICAgIC8qIG1heCBudW1i ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAgKi8NCisJdTE2IG51bV9hbnRlbm5hczsgICAgICAgICAg ICAvKiBudW1iZXIgYW50ZW5uYXMgdXNlZCAgICAgICAgICAgICovDQorCXUxNiByZWdpb25fY29k ZTsgICAgICAgICAgICAgLyogcmVnaW9uIChlZy4gMHgxMCBmb3IgVVNBIEZDQykgICAqLw0KKwl1 bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsgLyogd2VsbCBrbm93biAtPiBBQTpCQjpD QzpERDpFRTpGRiAqLw0KK307DQorDQorI2RlZmluZSBNV0xfVFhfUkFURV9GT1JNQVRfTUFTSyAg ICAgICAweDAwMDAwMDAzDQorI2RlZmluZSBNV0xfVFhfUkFURV9CQU5EV0lEVEhfTUFTSyAgICAw eDAwMDAwMDMwDQorI2RlZmluZSBNV0xfVFhfUkFURV9CQU5EV0lEVEhfU0hJRlQgICA0DQorI2Rl ZmluZSBNV0xfVFhfUkFURV9TSE9SVEdJX01BU0sgICAgICAweDAwMDAwMDQwDQorI2RlZmluZSBN V0xfVFhfUkFURV9TSE9SVEdJX1NISUZUICAgICA2DQorI2RlZmluZSBNV0xfVFhfUkFURV9SQVRF SURNQ1NfTUFTSyAgICAweDAwMDA3RjAwDQorI2RlZmluZSBNV0xfVFhfUkFURV9SQVRFSURNQ1Nf U0hJRlQgICA4DQorDQorc3RydWN0IG13bF90eF9kZXNjIHsNCisJdTggZGF0YV9yYXRlOw0KKwl1 OCB0eF9wcmlvcml0eTsNCisJX19sZTE2IHFvc19jdHJsOw0KKwlfX2xlMzIgcGt0X3B0cjsNCisJ X19sZTE2IHBrdF9sZW47DQorCXU4IGRlc3RfYWRkcltFVEhfQUxFTl07DQorCV9fbGUzMiBwcGh5 c19uZXh0Ow0KKwlfX2xlMzIgc2FwX3BrdF9pbmZvOw0KKwlfX2xlMzIgcmF0ZV9pbmZvOw0KKwl1 OCB0eXBlOw0KKwl1OCB4bWl0X2NvbnRyb2w7ICAgICAvKiBiaXQgMDogdXNlIHJhdGVpbmZvLCBi aXQgMTogZGlzYWJsZSBhbXBkdSAqLw0KKwlfX2xlMTYgcmVzZXJ2ZWQ7DQorCV9fbGUzMiB0Y3Bh Y2tfc247DQorCV9fbGUzMiB0Y3BhY2tfc3JjX2RzdDsNCisJX19sZTMyIHJlc2VydmVkMTsNCisJ X19sZTMyIHJlc2VydmVkMjsNCisJdTggcmVzZXJ2ZWQzWzJdOw0KKwl1OCBwYWNrZXRfaW5mbzsN CisJdTggcGFja2V0X2lkOw0KKwlfX2xlMTYgcGFja2V0X2xlbl9hbmRfcmV0cnk7DQorCV9fbGUx NiBwYWNrZXRfcmF0ZV9pbmZvOw0KKwlfX2xlMzIgcmVzZXJ2ZWQ0Ow0KKwlfX2xlMzIgc3RhdHVz Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IG13bF90eF9obmRsIHsNCisJc3RydWN0IHNrX2J1 ZmYgKnBza19idWZmOw0KKwlzdHJ1Y3QgbXdsX3R4X2Rlc2MgKnBkZXNjOw0KKwlzdHJ1Y3QgbXds X3R4X2huZGwgKnBuZXh0Ow0KK307DQorDQorI2RlZmluZSBNV0xfUlhfUkFURV9GT1JNQVRfTUFT SyAgICAgICAweDAwMDcNCisjZGVmaW5lIE1XTF9SWF9SQVRFX05TU19NQVNLICAgICAgICAgIDB4 MDAxOA0KKyNkZWZpbmUgTVdMX1JYX1JBVEVfTlNTX1NISUZUICAgICAgICAgMw0KKyNkZWZpbmUg TVdMX1JYX1JBVEVfQldfTUFTSyAgICAgICAgICAgMHgwMDYwDQorI2RlZmluZSBNV0xfUlhfUkFU RV9CV19TSElGVCAgICAgICAgICA1DQorI2RlZmluZSBNV0xfUlhfUkFURV9HSV9NQVNLICAgICAg ICAgICAweDAwODANCisjZGVmaW5lIE1XTF9SWF9SQVRFX0dJX1NISUZUICAgICAgICAgIDcNCisj ZGVmaW5lIE1XTF9SWF9SQVRFX1JUX01BU0sgICAgICAgICAgIDB4RkYwMA0KKyNkZWZpbmUgTVdM X1JYX1JBVEVfUlRfU0hJRlQgICAgICAgICAgOA0KKw0KK3N0cnVjdCBtd2xfcnhfZGVzYyB7DQor CV9fbGUxNiBwa3RfbGVuOyAgICAgICAgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIHJlY2VpdmVk IGRhdGEgICAgICAqLw0KKwlfX2xlMTYgcmF0ZTsgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUg cmF0ZSBpbmZvcm1hdGlvbiAgICAgICAgICAgKi8NCisJX19sZTMyIHBwaHlzX2J1ZmZfZGF0YTsg ICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHBheWxvYWQgZGF0YSAgICovDQorCV9fbGUzMiBw cGh5c19uZXh0OyAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBuZXh0IFJYIGRlc2Mg ICAqLw0KKwlfX2xlMTYgcW9zX2N0cmw7ICAgICAgICAgICAgIC8qIHJlY2VpdmVkIFFvc0N0cmwg ZmllbGQgdmFyaWFibGUgICAgKi8NCisJX19sZTE2IGh0X3NpZzI7ICAgICAgICAgICAgICAvKiBs aWtlIG5hbWUgc3RhdGVzICAgICAgICAgICAgICAgICAgICovDQorCV9fbGUzMiBod19yc3NpX2lu Zm87DQorCV9fbGUzMiBod19ub2lzZV9mbG9vcl9pbmZvOw0KKwl1OCBub2lzZV9mbG9vcjsNCisJ dTggcmVzZXJ2ZWRbM107DQorCXU4IHJzc2k7ICAgICAgICAgICAgICAgICAgICAgLyogcmVjZWl2 ZWQgc2lnbmFsIHN0cmVuZ3QgaW5kaWNhdGlvbiAqLw0KKwl1OCBzdGF0dXM7ICAgICAgICAgICAg ICAgICAgIC8qIHN0YXR1cyBmaWVsZCBjb250YWluaW5nIFVTRUQgYml0ICAgKi8NCisJdTggY2hh bm5lbDsgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHRoaXMgcGt0IHdhcyByZWNlaXZlZCBv biAgICovDQorCXU4IHJ4X2NvbnRyb2w7ICAgICAgICAgICAgICAgLyogdGhlIGNvbnRyb2wgZWxl bWVudCBvZiB0aGUgZGVzYyAgICAqLw0KKwlfX2xlMzIgcmVzZXJ2ZWQxWzNdOw0KK30gX19wYWNr ZWQ7DQorDQorc3RydWN0IG13bF9yeF9obmRsIHsNCisJc3RydWN0IHNrX2J1ZmYgKnBza19idWZm OyAgICAvKiBhc3NvY2lhdGVkIHNrX2J1ZmYgZm9yIExpbnV4ICAgICAgICovDQorCXN0cnVjdCBt d2xfcnhfZGVzYyAqcGRlc2M7DQorCXN0cnVjdCBtd2xfcnhfaG5kbCAqcG5leHQ7DQorfTsNCisN CitzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSB7DQorCWRtYV9hZGRyX3QgcHBoeXNfdHhfcmluZzsgICAg ICAgICAgLyogcHRyIHRvIGZpcnN0IFRYIGRlc2MgKHBoeXMuKSAgICAqLw0KKwlzdHJ1Y3QgbXds X3R4X2Rlc2MgKnB0eF9yaW5nOyAgICAgIC8qIHB0ciB0byBmaXJzdCBUWCBkZXNjICh2aXJ0Likg ICAgKi8NCisJc3RydWN0IG13bF90eF9obmRsICp0eF9obmRsOw0KKwlzdHJ1Y3QgbXdsX3R4X2hu ZGwgKnBuZXh0X3R4X2huZGw7IC8qIG5leHQgVFggaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgKi8N CisJc3RydWN0IG13bF90eF9obmRsICpwc3RhbGVfdHhfaG5kbDsvKiB0aGUgc3RhbGVkIFRYIGhh bmRsZSAgICAgICAgICAgICovDQorCWRtYV9hZGRyX3QgcHBoeXNfcnhfcmluZzsgICAgICAgICAg LyogcHRyIHRvIGZpcnN0IFJYIGRlc2MgKHBoeXMuKSAgICAqLw0KKwlzdHJ1Y3QgbXdsX3J4X2Rl c2MgKnByeF9yaW5nOyAgICAgIC8qIHB0ciB0byBmaXJzdCBSWCBkZXNjICh2aXJ0LikgICAgKi8N CisJc3RydWN0IG13bF9yeF9obmRsICpyeF9obmRsOw0KKwlzdHJ1Y3QgbXdsX3J4X2huZGwgKnBu ZXh0X3J4X2huZGw7IC8qIG5leHQgUlggaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgKi8NCisJdTMy IHdjYl9iYXNlOyAgICAgICAgICAgICAgICAgICAgICAvKiBGVyBiYXNlIG9mZnNldCBmb3IgcmVn aXN0ZXJzICAgICovDQorCXUzMiByeF9kZXNjX3dyaXRlOyAgICAgICAgICAgICAgICAgLyogRlcg ZGVzY3JpcHRvciB3cml0ZSBwb3NpdGlvbiAgICAqLw0KKwl1MzIgcnhfZGVzY19yZWFkOyAgICAg ICAgICAgICAgICAgIC8qIEZXIGRlc2NyaXB0b3IgcmVhZCBwb3NpdGlvbiAgICAgKi8NCisJdTMy IHJ4X2J1Zl9zaXplOyAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIFJYIGJ1ZmZl cnMgICAgICAgICovDQorfTsNCisNCitzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSB7DQorCXN0cnVj dCBpZWVlODAyMTFfc3RhICpzdGE7DQorCXU4IHRpZDsNCisJdTggc3RhdGU7DQorCXU4IGlkeDsN Cit9Ow0KKw0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisjZGVmaW5lIE1BQ19SRUdfQUREUl9Q Q0kob2Zmc2V0KSAgICAgICgocHJpdi0+aW9iYXNlMSArIDB4QTAwMCkgKyBvZmZzZXQpDQorDQor I2RlZmluZSBNV0xfQUNDRVNTX01BQyAgICAgICAgICAgICAgICAxDQorI2RlZmluZSBNV0xfQUND RVNTX1JGICAgICAgICAgICAgICAgICAyDQorI2RlZmluZSBNV0xfQUNDRVNTX0JCUCAgICAgICAg ICAgICAgICAzDQorI2RlZmluZSBNV0xfQUNDRVNTX0NBVSAgICAgICAgICAgICAgICA0DQorI2Rl ZmluZSBNV0xfQUNDRVNTX0FERFIwICAgICAgICAgICAgICA1DQorI2RlZmluZSBNV0xfQUNDRVNT X0FERFIxICAgICAgICAgICAgICA2DQorI2RlZmluZSBNV0xfQUNDRVNTX0FERFIgICAgICAgICAg ICAgICA3DQorI2VuZGlmDQorDQorc3RydWN0IG13bF9wcml2IHsNCisJc3RydWN0IGllZWU4MDIx MV9odyAqaHc7DQorCXN0cnVjdCBmaXJtd2FyZSAqZndfdWNvZGU7DQorCWludCBjaGlwX3R5cGU7 DQorDQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHRfbm9kZTsNCisJc3RydWN0IGRldmljZV9ub2Rl ICpwd3Jfbm9kZTsNCisJYm9vbCBkaXNhYmxlXzJnOw0KKwlib29sIGRpc2FibGVfNWc7DQorCWlu dCBhbnRlbm5hX3R4Ow0KKwlpbnQgYW50ZW5uYV9yeDsNCisNCisJc3RydWN0IG13bF90eF9wd3Jf dGJsIHR4X3B3cl90YmxbU1lTQURQVF9NQVhfTlVNX0NIQU5ORUxTXTsNCisJYm9vbCBjZGQ7DQor CXUxNiB0eGFudGVubmEyOw0KKwl1OCBwb3dpbml0ZWQ7DQorCXUxNiBtYXhfdHhfcG93W1NZU0FE UFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOyAvKiBtYXggdHggcG93ZXIgKGRCbSkgKi8NCisJdTE2 IHRhcmdldF9wb3dlcnNbU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RBTF07IC8qIHRhcmdldCBw b3dlcnMgICAqLw0KKwl1OCBjYWxfdGJsWzIwMF07DQorDQorCXN0cnVjdCBwY2lfZGV2ICpwZGV2 Ow0KKwl2b2lkIF9faW9tZW0gKmlvYmFzZTA7IC8qIE1FTSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIg MCAgKi8NCisJdm9pZCBfX2lvbWVtICppb2Jhc2UxOyAvKiBNRU0gQmFzZSBBZGRyZXNzIFJlZ2lz dGVyIDEgICovDQorCXUzMiBuZXh0X2Jhcl9udW07DQorDQorCXNwaW5sb2NrX3QgZndjbWRfbG9j azsgICAgICAgLyogZm9yIGZpcm13YXJlIGNvbW1hbmQgICAgICAgICAqLw0KKwl1bnNpZ25lZCBz aG9ydCAqcGNtZF9idWY7ICAgIC8qIHBvaW50ZXIgdG8gQ21kQnVmICh2aXJ0dWFsKSAgKi8NCisJ ZG1hX2FkZHJfdCBwcGh5c19jbWRfYnVmOyAgICAvKiBwb2ludGVyIHRvIENtZEJ1ZiAocGh5c2lj YWwpICovDQorCWJvb2wgaW5fc2VuZF9jbWQ7DQorDQorCWludCBpcnE7DQorCXN0cnVjdCBtd2xf aHdfZGF0YSBod19kYXRhOyAgLyogQWRhcHRlciBIVyBzcGVjaWZpYyBpbmZvICAgICAqLw0KKw0K KwkvKiB2YXJpb3VzIGRlc2NyaXB0b3IgZGF0YSAqLw0KKwlzcGlubG9ja190IHR4X2Rlc2NfbG9j azsgICAgIC8qIGZvciB0eCBkZXNjcmlwdG9yIGRhdGEgICAgICAgKi8NCisJc3BpbmxvY2tfdCBy eF9kZXNjX2xvY2s7ICAgICAvKiBmb3IgcnggZGVzY3JpcHRvciBkYXRhICAgICAgICovDQorCXN0 cnVjdCBtd2xfZGVzY19kYXRhIGRlc2NfZGF0YVtTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEFdOw0K KwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cVtTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEFdOw0KKwlz dHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlbGF5X3E7DQorCS8qIG51bWJlciBvZiBkZXNjcmlwdG9ycyBv d25lZCBieSBmdyBhdCBhbnkgb25lIHRpbWUgKi8NCisJaW50IGZ3X2Rlc2NfY250W1NZU0FEUFRf TlVNX09GX0RFU0NfREFUQV07DQorDQorCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF90YXNrOw0K KwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFzazsNCisJc3RydWN0IHRhc2tsZXRfc3RydWN0 IHFlX3Rhc2s7DQorCWludCB0eHFfbGltaXQ7DQorCWJvb2wgaXNfdHhfc2NoZWR1bGU7DQorCWlu dCByZWN2X2xpbWl0Ow0KKwlib29sIGlzX3J4X3NjaGVkdWxlOw0KKwlib29sIGlzX3FlX3NjaGVk dWxlOw0KKwlzOCBub2lzZTsgICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50bHkgcmVw b3J0ZWQgbm9pc2UgaW4gZEJtICovDQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQg YmFuZF8yNDsNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzI0W0JBTkRfMjRf Q0hBTk5FTF9OVU1dOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfMjRbQkFORF8yNF9S QVRFX05VTV07DQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF81MDsNCisJ c3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzUwW0JBTkRfNTBfQ0hBTk5FTF9OVU1d Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfNTBbQkFORF81MF9SQVRFX05VTV07DQor DQorCXUzMiBhcF9tYWNpZHNfc3VwcG9ydGVkOw0KKwl1MzIgc3RhX21hY2lkc19zdXBwb3J0ZWQ7 DQorCXUzMiBtYWNpZHNfdXNlZDsNCisJc3BpbmxvY2tfdCB2aWZfbG9jazsgICAgICAgICAvKiBm b3IgcHJpdmF0ZSBpbnRlcmZhY2UgaW5mbyAgICovDQorCXN0cnVjdCBsaXN0X2hlYWQgdmlmX2xp c3Q7ICAgLyogTGlzdCBvZiBpbnRlcmZhY2VzLiAgICAgICAgICAqLw0KKwl1MzIgcnVubmluZ19i c3NlczsgICAgICAgICAgIC8qIGJpdG1hcCBvZiBydW5uaW5nIEJTU2VzICAgICAgKi8NCisNCisJ c3BpbmxvY2tfdCBzdGFfbG9jazsgICAgICAgICAvKiBmb3IgcHJpdmF0ZSBzdGEgaW5mbyAgICAg ICAgICovDQorCXN0cnVjdCBsaXN0X2hlYWQgc3RhX2xpc3Q7ICAgLyogTGlzdCBvZiBzdGF0aW9u cyAgICAgICAgICAgICAqLw0KKw0KKwlib29sIHJhZGlvX29uOw0KKwlib29sIHJhZGlvX3Nob3J0 X3ByZWFtYmxlOw0KKwlib29sIHdtbV9lbmFibGVkOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1 ZXVlX3BhcmFtcyB3bW1fcGFyYW1zW1NZU0FEUFRfVFhfV01NX1FVRVVFU107DQorDQorCS8qIEFt cGR1IHN0cmVhbSBpbmZvcm1hdGlvbiAqLw0KKwl1OCBudW1fYW1wZHVfcXVldWVzOw0KKwlzcGlu bG9ja190IHN0cmVhbV9sb2NrOyAgICAgIC8qIGZvciBhbXBkdSBzdHJlYW0gICAgICAgICAgICAg Ki8NCisJc3RydWN0IG13bF9hbXBkdV9zdHJlYW0gYW1wZHVbU1lTQURQVF9UWF9BTVBEVV9RVUVV RVNdOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfYmFfaGFuZGxlOw0KKw0KKwlib29s IG1mZ19tb2RlOw0KKw0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisJc3RydWN0IGRlbnRyeSAq ZGVidWdmc19waHk7DQorCXUzMiByZWdfdHlwZTsNCisJdTMyIHJlZ19vZmZzZXQ7DQorCXUzMiBy ZWdfdmFsdWU7DQorI2VuZGlmDQorfTsNCisNCitzdHJ1Y3QgYmVhY29uX2luZm8gew0KKwlib29s IHZhbGlkOw0KKwl1MTYgY2FwX2luZm87DQorCXU4IGJfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFU QV9SQVRFU19HXTsNCisJdTggb3BfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFUQV9SQVRFU19HXTsN CisJdTggaWVfbGlzdF9odFsxNDhdOw0KKwl1OCBpZV9saXN0X3ZodFsyNF07DQorCXU4ICppZV93 bW1fcHRyOw0KKwl1OCAqaWVfcnNuX3B0cjsNCisJdTggKmllX3JzbjQ4X3B0cjsNCisJdTggKmll X2h0X3B0cjsNCisJdTggKmllX3ZodF9wdHI7DQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNI DQorCXU4ICppZV9tZXNoaWRfcHRyOw0KKwl1OCAqaWVfbWVzaGNmZ19wdHI7DQorCXU4ICppZV9t ZXNoY2hzd19wdHI7DQorI2VuZGlmDQorCXU4IGllX3dtbV9sZW47DQorCXU4IGllX3Jzbl9sZW47 DQorCXU4IGllX3JzbjQ4X2xlbjsNCisJdTggaWVfaHRfbGVuOw0KKwl1OCBpZV92aHRfbGVuOw0K KyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSA0KKwl1OCBpZV9tZXNoaWRfbGVuOw0KKwl1OCBp ZV9tZXNoY2ZnX2xlbjsNCisJdTggaWVfbWVzaGNoc3dfbGVuOw0KKyNlbmRpZg0KK307DQorDQor c3RydWN0IG13bF92aWYgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCWludCBtYWNpZDsg ICAgICAgLyogRmlybXdhcmUgbWFjaWQgZm9yIHRoaXMgdmlmLiAgKi8NCisJdTE2IHNlcW5vOyAg ICAgICAvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlci4gICov DQorCXN0cnVjdCB7ICAgICAgICAgLyogU2F2ZWQgV0VQIGtleXMgKi8NCisJCXU4IGVuYWJsZWQ7 DQorCQl1OCBrZXlbc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYpICsgV0xBTl9LRVlf TEVOX1dFUDEwNF07DQorCX0gd2VwX2tleV9jb25mW05VTV9XRVBfS0VZU107DQorCXU4IGJzc2lk W0VUSF9BTEVOXTsgICAgICAgICAgLyogQlNTSUQgKi8NCisJdTggc3RhX21hY1tFVEhfQUxFTl07 ICAgICAgICAvKiBTdGF0aW9uIG1hYyBhZGRyZXNzICovDQorCS8qIEEgZmxhZyB0byBpbmRpY2F0 ZSBpcyBIVyBjcnlwdG8gaXMgZW5hYmxlZCBmb3IgdGhpcyBic3NpZCAqLw0KKwlib29sIGlzX2h3 X2NyeXB0b19lbmFibGVkOw0KKwkvKiBJbmRpY2F0ZSBpZiB0aGlzIGlzIHN0YXRpb24gbW9kZSAq Lw0KKwlzdHJ1Y3QgYmVhY29uX2luZm8gYmVhY29uX2luZm87DQorCXUxNiBpdjE2Ow0KKwl1MzIg aXYzMjsNCisJczgga2V5aWR4Ow0KK307DQorDQorc3RydWN0IG13bF90eF9pbmZvIHsNCisJdW5z aWduZWQgbG9uZyBzdGFydF90aW1lOw0KKwl1MzIgcGt0czsNCit9Ow0KKw0KK3N0cnVjdCBtd2xf YW1zZHVfZnJhZyB7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorCXU4ICpjdXJfcG9zOw0KKwl1 bnNpZ25lZCBsb25nIGppZmZpZXM7DQorCXU4IHBhZDsNCisJdTggbnVtOw0KK307DQorDQorc3Ry dWN0IG13bF9hbXNkdV9jdHJsIHsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnIGZyYWdbU1lTQURQ VF9UWF9XTU1fUVVFVUVTXTsNCisJdTggY2FwOw0KK307DQorDQorc3RydWN0IG13bF9zdGEgew0K KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCWJvb2wgaXNfbWVzaF9ub2RlOw0KKwlib29sIGlz X2FtcGR1X2FsbG93ZWQ7DQorCXN0cnVjdCBtd2xfdHhfaW5mbyB0eF9zdGF0c1tNV0xfTUFYX1RJ RF07DQorCWJvb2wgaXNfYW1zZHVfYWxsb3dlZDsNCisJc3BpbmxvY2tfdCBhbXNkdV9sb2NrOyAg ICAgIC8qIGZvciBhbXNkdSBhZ2dyZWdhdGlvbiAgICAgICAqLw0KKwlzdHJ1Y3QgbXdsX2Ftc2R1 X2N0cmwgYW1zZHVfY3RybDsNCisJdTE2IGl2MTY7DQorCXUzMiBpdjMyOw0KK307DQorDQorLyog RE1BIGhlYWRlciB1c2VkIGJ5IGZpcm13YXJlIGFuZCBoYXJkd2FyZS4gKi8NCitzdHJ1Y3QgbXds X2RtYV9kYXRhIHsNCisJX19sZTE2IGZ3bGVuOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciB3aDsN CisJY2hhciBkYXRhWzBdOw0KK30gX19wYWNrZWQ7DQorDQorLyogVHJhbnNtaXNzaW9uIGluZm9y bWF0aW9uIHRvIHRyYW5zbWl0IGEgc29ja2V0IGJ1ZmZlci4gKi8NCitzdHJ1Y3QgbXdsX3R4X2N0 cmwgew0KKwl2b2lkICp2aWY7DQorCXZvaWQgKnN0YTsNCisJdm9pZCAqa19jb25mOw0KKwl2b2lk ICphbXNkdV9wa3RzOw0KKwl1OCB0eF9wcmlvcml0eTsNCisJdTggdHlwZTsNCisJdTE2IHFvc19j dHJsOw0KKwl1OCB4bWl0X2NvbnRyb2w7DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt d2xfdmlmICptd2xfZGV2X2dldF92aWYoY29uc3Qgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikN Cit7DQorCXJldHVybiAoc3RydWN0IG13bF92aWYgKikmdmlmLT5kcnZfcHJpdjsNCit9DQorDQor c3RhdGljIGlubGluZSBzdHJ1Y3QgbXdsX3N0YSAqbXdsX2Rldl9nZXRfc3RhKGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlyZXR1cm4gKHN0cnVjdCBtd2xfc3RhICopJnN0 YS0+ZHJ2X3ByaXY7DQorfQ0KKw0KKy8qIERlZmluZWQgaW4gbWFjODAyMTEuYy4gKi8NCitleHRl cm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsX21hYzgwMjExX29wczsNCisNCisjZW5k aWYgLyogX2Rldl9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9md2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp L2Z3Y21kLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi45M2MwYTAzDQot LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv ZndjbWQuYw0KQEAgLTAsMCArMSwyNDIxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt MjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMgc29mdHdhcmUg ZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFs DQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1 c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAqIGFjY29yZGFu Y2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBv ZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlT LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVz IGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4N CisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZpcm13YXJl IGhvc3QgY29tbWFuZCByZWxhdGVkDQorICogZnVuY3Rpb25zLg0KKyAqLw0KKw0KKyNpbmNsdWRl IDxsaW51eC9ldGhlcmRldmljZS5oPg0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1 ZGUgImRldi5oIg0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJob3N0Y21kLmgiDQor DQorI2RlZmluZSBNQVhfV0FJVF9GV19DT01QTEVURV9JVEVSQVRJT05TICAgICAgICAgMjAwMA0K KyNkZWZpbmUgTUFYX1dBSVRfR0VUX0hXX1NQRUNTX0lURVJBVE9OUyAgICAgICAgIDMNCisNCitz dHJ1Y3QgY21kX2hlYWRlciB7DQorCV9fbGUxNiBjb21tYW5kOw0KKwlfX2xlMTYgbGVuOw0KK30g X19wYWNrZWQ7DQorDQorc3RhdGljIGJvb2wgbXdsX2Z3Y21kX2Noa19hZGFwdGVyKHN0cnVjdCBt d2xfcHJpdiAqcHJpdikNCit7DQorCXUzMiByZWd2YWw7DQorDQorCXJlZ3ZhbCA9IHJlYWRsKHBy aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisNCisJaWYgKHJlZ3ZhbCA9PSAw eGZmZmZmZmZmKSB7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiYWRhcHRlciBkb2Vz IG5vdCBleGlzdFxuIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJcmV0dXJuIHRydWU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2NtZF9zZW5kX2NtZChzdHJ1Y3QgbXdsX3ByaXYg KnByaXYpDQorew0KKwlpZiAocHJpdi0+bWZnX21vZGUpIHsNCisJCXN0cnVjdCBjbWRfaGVhZGVy ICpjbWRfaGRyID0NCisJCQkoc3RydWN0IGNtZF9oZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMl07 DQorCQl1MTYgbGVuID0gbGUxNl90b19jcHUoY21kX2hkci0+bGVuKTsNCisNCisJCXdyaXRlbChw cml2LT5wcGh5c19jbWRfYnVmLCBwcml2LT5pb2Jhc2UxICsgMHhjZDApOw0KKwkJd3JpdGVsKDB4 MDAsIHByaXYtPmlvYmFzZTEgKyAweGNkNCk7DQorCQl3cml0ZWwoMHgwMCwgcHJpdi0+aW9iYXNl MSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KKwkJd3JpdGVsKGxlbiArIDQsIHByaXYtPmlvYmFz ZTEgKyAweGM0MCk7DQorCX0NCisJd3JpdGVsKHByaXYtPnBwaHlzX2NtZF9idWYsIHByaXYtPmlv YmFzZTEgKyBNQUNSRUdfUkVHX0dFTl9QVFIpOw0KKwl3cml0ZWwoTUFDUkVHX0gyQVJJQ19CSVRf RE9PUl9CRUxMLA0KKwkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSDJBX0lOVEVS UlVQVF9FVkVOVFMpOw0KK30NCisNCitzdGF0aWMgY2hhciAqbXdsX2Z3Y21kX2dldF9jbWRfc3Ry aW5nKHVuc2lnbmVkIHNob3J0IGNtZCkNCit7DQorCWludCBtYXhfZW50cmllcyA9IDA7DQorCWlu dCBjdXJyX2NtZCA9IDA7DQorDQorCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KKwkJdTE2IGNtZDsN CisJCWNoYXIgKmNtZF9zdHJpbmc7DQorCX0gY21kc1tdID0gew0KKwkJeyBIT1NUQ01EX0NNRF9H RVRfSFdfU1BFQywgIkdldEh3U3BlY2lmaWNhdGlvbnMiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NF VF9IV19TUEVDLCAiU2V0SHdTZXBjaWZpY2F0aW9ucyIgfSwNCisJCXsgSE9TVENNRF9DTURfODAy XzExX0dFVF9TVEFULCAiODAyMTFHZXRTdGF0IiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJfMTFf UkFESU9fQ09OVFJPTCwgIjgwMjExUmFkaW9Db250cm9sIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9N RU1fQUREUl9BQ0NFU1MsICJNRU1BZGRyQWNjZXNzIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJf MTFfVFhfUE9XRVIsICI4MDIxMVR4UG93ZXIiIH0sDQorCQl7IEhPU1RDTURfQ01EXzgwMl8xMV9S Rl9BTlRFTk5BLCAiODAyMTFSZkFudGVubmEiIH0sDQorCQl7IEhPU1RDTURfQ01EX0JST0FEQ0FT VF9TU0lEX0VOQUJMRSwgImJyb2FkY2FzdF9zc2lkX2VuYWJsZSIgfSwNCisJCXsgSE9TVENNRF9D TURfU0VUX1JGX0NIQU5ORUwsICJTZXRSZkNoYW5uZWwiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NF VF9BSUQsICJTZXRBaWQiIH0sDQorCQl7IEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFLCAiU2V0 SW5mcmFNb2RlIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF84MDJfMTFfUlRTX1RIU0QsICI4MDIxMVJ0 c1RocmVzaG9sZCIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX0VEQ0FfUEFSQU1TLCAiU2V0RURD QVBhcmFtcyIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX1dNTV9NT0RFLCAiU2V0V01NTW9kZSIg fSwNCisJCXsgSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwsICJIdEd1YXJkSW50ZXJ2YWwi IH0sDQorCQl7IEhPU1RDTURfQ01EX1NFVF9GSVhFRF9SQVRFLCAiU2V0Rml4ZWRSYXRlIiB9LA0K KwkJeyBIT1NUQ01EX0NNRF9TRVRfSUVTLCAiU2V0SW5mb3JtYXRpb25FbGVtZW50cyIgfSwNCisJ CXsgSE9TVENNRF9DTURfU0VUX0xJTktBREFQVF9DU19NT0RFLCAiTGlua0FkYXB0Q3NNb2RlIiB9 LA0KKwkJeyBIT1NUQ01EX0NNRF9TRVRfTUFDX0FERFIsICJTZXRNYWNBZGRyIiB9LA0KKwkJeyBI T1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFLCAiU2V0UmF0ZUFkYXB0YXRpb25Nb2RlIiB9 LA0KKwkJeyBIT1NUQ01EX0NNRF9HRVRfV0FUQ0hET0dfQklUTUFQLCAiR2V0V2F0Y2hkb2dCaXRN YXAiIH0sDQorCQl7IEhPU1RDTURfQ01EX0RFTF9NQUNfQUREUiwgIkRlbE1hY0FkZHIiIH0sDQor CQl7IEhPU1RDTURfQ01EX0JTU19TVEFSVCwgIkJzc1N0YXJ0IiB9LA0KKwkJeyBIT1NUQ01EX0NN RF9BUF9CRUFDT04sICJTZXRBcEJlYWNvbiIgfSwNCisJCXsgSE9TVENNRF9DTURfU0VUX05FV19T VE4sICJTZXROZXdTdGF0aW9uIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFLCAiU2V0 QXBNb2RlIiB9LA0KKwkJeyBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTiwgIlVwZGF0ZUVu Y3J5cHRpb24iIH0sDQorCQl7IEhPU1RDTURfQ01EX0JBU1RSRUFNLCAiQkFTdHJlYW0iIH0sDQor CQl7IEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwsICJTZXRPcHRpbWl6YXRpb25M ZXZlbCJ9LA0KKwkJeyBIT1NUQ01EX0NNRF9EV0RTX0VOQUJMRSwgIkR3ZHNFbmFibGUiIH0sDQor CQl7IEhPU1RDTURfQ01EX0ZXX0ZMVVNIX1RJTUVSLCAiRndGbHVzaFRpbWVyIiB9LA0KKwkJeyBI T1NUQ01EX0NNRF9TRVRfQ0RELCAiU2V0Q0REIiB9LA0KKwl9Ow0KKw0KKwltYXhfZW50cmllcyA9 IEFSUkFZX1NJWkUoY21kcyk7DQorDQorCWZvciAoY3Vycl9jbWQgPSAwOyBjdXJyX2NtZCA8IG1h eF9lbnRyaWVzOyBjdXJyX2NtZCsrKQ0KKwkJaWYgKChjbWQgJiAweDdmZmYpID09IGNtZHNbY3Vy cl9jbWRdLmNtZCkNCisJCQlyZXR1cm4gY21kc1tjdXJyX2NtZF0uY21kX3N0cmluZzsNCisNCisJ cmV0dXJuICJ1bmtub3duIjsNCit9DQorDQorc3RhdGljIGludCBtd2xfZndjbWRfd2FpdF9jb21w bGV0ZShzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIHNob3J0IGNtZCkNCit7DQorCXVu c2lnbmVkIGludCBjdXJyX2l0ZXJhdGlvbiA9IE1BWF9XQUlUX0ZXX0NPTVBMRVRFX0lURVJBVElP TlM7DQorCXVuc2lnbmVkIHNob3J0IGludF9jb2RlID0gMDsNCisNCisJZG8gew0KKwkJaWYgKHBy aXYtPm1mZ19tb2RlKQ0KKwkJCWludF9jb2RlID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopJnBy aXYtPnBjbWRfYnVmWzJdKSk7DQorCQllbHNlDQorCQkJaW50X2NvZGUgPSBsZTE2X3RvX2NwdSgq KChfX2xlMTYgKikmcHJpdi0+cGNtZF9idWZbMF0pKTsNCisJCW1kZWxheSgxKTsNCisJfSB3aGls ZSAoKGludF9jb2RlICE9IGNtZCkgJiYgKC0tY3Vycl9pdGVyYXRpb24pKTsNCisNCisJaWYgKGN1 cnJfaXRlcmF0aW9uID09IDApIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJjbWQg MHglMDR4PSVzIHRpbWVkIG91dFxuIiwNCisJCQkgIGNtZCwgbXdsX2Z3Y21kX2dldF9jbWRfc3Ry aW5nKGNtZCkpOw0KKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgInJldHVybiBjb2RlOiAw eCUwNHhcbiIsIGludF9jb2RlKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCW1kZWxheSgz KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX2Z3Y21kX2V4ZWNfY21k KHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgc2hvcnQgY21kKQ0KK3sNCisJYm9vbCBi dXN5ID0gZmFsc2U7DQorDQorCWlmICghbXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYpKSB7DQor CQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiYWRhcHRlciBkb2VzIG5vdCBleGlzdFxuIik7 DQorCQlwcml2LT5pbl9zZW5kX2NtZCA9IGZhbHNlOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisN CisJaWYgKCFwcml2LT5pbl9zZW5kX2NtZCkgew0KKwkJcHJpdi0+aW5fc2VuZF9jbWQgPSB0cnVl Ow0KKwkJbXdsX2Z3Y21kX3NlbmRfY21kKHByaXYpOw0KKwkJaWYgKG13bF9md2NtZF93YWl0X2Nv bXBsZXRlKHByaXYsIDB4ODAwMCB8IGNtZCkpIHsNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndp cGh5LCAidGltZW91dDogMHglMDR4XG4iLCBjbWQpOw0KKwkJCXByaXYtPmluX3NlbmRfY21kID0g ZmFsc2U7DQorCQkJcmV0dXJuIC1FSU87DQorCQl9DQorCX0gZWxzZSB7DQorCQl3aXBoeV93YXJu KHByaXYtPmh3LT53aXBoeSwNCisJCQkgICAicHJldmlvdXMgY29tbWFuZCBpcyBzdGlsbCBydW5u aW5nXG4iKTsNCisJCWJ1c3kgPSB0cnVlOw0KKwl9DQorDQorCWlmICghYnVzeSkNCisJCXByaXYt PmluX3NlbmRfY21kID0gZmFsc2U7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IG13bF9md2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsDQor CQkJCQkgIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQ0KK3sNCisJc3RydWN0IGhvc3RjbWRfY21k XzgwMl8xMV9yYWRpb19jb250cm9sICpwY21kOw0KKw0KKwlpZiAoZW5hYmxlID09IHByaXYtPnJh ZGlvX29uICYmICFmb3JjZSkNCisJCXJldHVybiAwOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0 Y21kX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJ c3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAs IHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RD TURfQ01EXzgwMl8xMV9SQURJT19DT05UUk9MKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVf dG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoV0xf U0VUKTsNCisJcGNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3Nob3J0X3By ZWFtYmxlID8NCisJCVdMX0FVVE9fUFJFQU1CTEUgOiBXTF9MT05HX1BSRUFNQkxFKTsNCisJcGNt ZC0+cmFkaW9fb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyBXTF9FTkFCTEUgOiBXTF9ESVNBQkxF KTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFf UkFESU9fQ09OVFJPTCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN CisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJ CXJldHVybiAtRUlPOw0KKwl9DQorDQorCXByaXYtPnJhZGlvX29uID0gZW5hYmxlOw0KKw0KKwlz cGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IG13bF9md2NtZF9nZXRfdHhfcG93ZXJzKHN0cnVjdCBtd2xfcHJpdiAqcHJp diwgdTE2ICpwb3dsaXN0LCB1MTYgY2gsDQorCQkJCSAgIHUxNiBiYW5kLCB1MTYgd2lkdGgsIHUx NiBzdWJfY2gpDQorew0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICpwY21k Ow0KKwlpbnQgaTsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bv d2VyICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfODAyXzExX1RYX1BPV0VSKTsN CisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNt ZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfR0VOX0dFVF9MSVNUKTsNCisJcGNt ZC0+Y2ggPSBjcHVfdG9fbGUxNihjaCk7DQorCXBjbWQtPmJ3ID0gY3B1X3RvX2xlMTYod2lkdGgp Ow0KKwlwY21kLT5iYW5kID0gY3B1X3RvX2xlMTYoYmFuZCk7DQorCXBjbWQtPnN1Yl9jaCA9IGNw dV90b19sZTE2KHN1Yl9jaCk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9T VENNRF9DTURfODAyXzExX1RYX1BPV0VSKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3 Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRp b25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FE UFRfVFhfUE9XRVJfTEVWRUxfVE9UQUw7IGkrKykNCisJCXBvd2xpc3RbaV0gPSBsZTE2X3RvX2Nw dShwY21kLT5wb3dlcl9sZXZlbF9saXN0W2ldKTsNCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYt PmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtd2xfZndj bWRfc2V0X3R4X3Bvd2VycyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHUxNiB0eHBvd1tdLA0KKwkJ CQkgICB1OCBhY3Rpb24sIHUxNiBjaCwgdTE2IGJhbmQsDQorCQkJCSAgIHUxNiB3aWR0aCwgdTE2 IHN1Yl9jaCkNCit7DQorCXN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIgKnBjbWQ7 DQorCWludCBpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93 ZXIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRf bG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+ Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJfMTFfVFhfUE9XRVIpOw0K KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k LT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOw0KKwlwY21kLT5jaCA9IGNwdV90b19sZTE2 KGNoKTsNCisJcGNtZC0+YncgPSBjcHVfdG9fbGUxNih3aWR0aCk7DQorCXBjbWQtPmJhbmQgPSBj cHVfdG9fbGUxNihiYW5kKTsNCisJcGNtZC0+c3ViX2NoID0gY3B1X3RvX2xlMTYoc3ViX2NoKTsN CisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUw7IGkrKykN CisJCXBjbWQtPnBvd2VyX2xldmVsX2xpc3RbaV0gPSBjcHVfdG9fbGUxNih0eHBvd1tpXSk7DQor DQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfODAyXzExX1RYX1BP V0VSKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlf ZXJyKHByaXYtPmh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1F SU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHU4IG13bF9md2NtZF9nZXRfODBtX3ByaV9jaG5sX29m ZnNldCh1OCBjaGFubmVsKQ0KK3sNCisJdTggYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFO XzA7DQorDQorCXN3aXRjaCAoY2hhbm5lbCkgew0KKwljYXNlIDM2Og0KKwkJYWN0X3ByaW1hcnkg PSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQorCQlicmVhazsNCisJY2FzZSA0MDoNCisJCWFjdF9wcmlt YXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNhc2UgNDQ6DQorCQlhY3Rf cHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCisJCWJyZWFrOw0KKwljYXNlIDQ4Og0KKwkJ YWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJY2FzZSA1MjoN CisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7DQorCWNhc2Ug NTY6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMTsNCisJCWJyZWFrOw0KKwlj YXNlIDYwOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQorCQlicmVhazsN CisJY2FzZSA2NDoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KKwkJYnJl YWs7DQorCWNhc2UgMTAwOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQor CQlicmVhazsNCisJY2FzZSAxMDQ6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5f MTsNCisJCWJyZWFrOw0KKwljYXNlIDEwODoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllf Q0hBTl8yOw0KKwkJYnJlYWs7DQorCWNhc2UgMTEyOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJ TUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJY2FzZSAxMTY6DQorCQlhY3RfcHJpbWFyeSA9IEFD VF9QUklNQVJZX0NIQU5fMDsNCisJCWJyZWFrOw0KKwljYXNlIDEyMDoNCisJCWFjdF9wcmltYXJ5 ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNhc2UgMTI0Og0KKwkJYWN0X3By aW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQorCQlicmVhazsNCisJY2FzZSAxMjg6DQorCQlh Y3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMzsNCisJCWJyZWFrOw0KKwljYXNlIDEzMjoN CisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7DQorCWNhc2Ug MTM2Og0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzE7DQorCQlicmVhazsNCisJ Y2FzZSAxNDA6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCisJCWJyZWFr Ow0KKwljYXNlIDE0NDoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KKwkJ YnJlYWs7DQorCWNhc2UgMTQ5Og0KKwkJYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7 DQorCQlicmVhazsNCisJY2FzZSAxNTM6DQorCQlhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NI QU5fMTsNCisJCWJyZWFrOw0KKwljYXNlIDE1NzoNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1B UllfQ0hBTl8yOw0KKwkJYnJlYWs7DQorCWNhc2UgMTYxOg0KKwkJYWN0X3ByaW1hcnkgPSBBQ1Rf UFJJTUFSWV9DSEFOXzM7DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gYWN0X3ByaW1hcnk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2NtZF9wYXJzZV9iZWFjb24oc3RydWN0IG13bF9w cml2ICpwcml2LA0KKwkJCQkgICBzdHJ1Y3QgbXdsX3ZpZiAqdmlmLCB1OCAqYmVhY29uLCBpbnQg bGVuKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210Ow0KKwlzdHJ1Y3QgYmVhY29u X2luZm8gKmJlYWNvbl9pbmZvOw0KKwlpbnQgYmFzZWxlbjsNCisJdTggKnBvczsNCisJc2l6ZV90 IGxlZnQ7DQorCWJvb2wgZWxlbV9wYXJzZV9mYWlsZWQ7DQorDQorCW1nbXQgPSAoc3RydWN0IGll ZWU4MDIxMV9tZ210ICopYmVhY29uOw0KKw0KKwliYXNlbGVuID0gKHU4ICopbWdtdC0+dS5iZWFj b24udmFyaWFibGUgLSAodTggKiltZ210Ow0KKwlpZiAoYmFzZWxlbiA+IGxlbikNCisJCXJldHVy bjsNCisNCisJYmVhY29uX2luZm8gPSAmdmlmLT5iZWFjb25faW5mbzsNCisJbWVtc2V0KGJlYWNv bl9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlYWNvbl9pbmZvKSk7DQorCWJlYWNvbl9pbmZvLT52 YWxpZCA9IGZhbHNlOw0KKwliZWFjb25faW5mby0+aWVfaHRfcHRyID0gJmJlYWNvbl9pbmZvLT5p ZV9saXN0X2h0WzBdOw0KKwliZWFjb25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+ aWVfbGlzdF92aHRbMF07DQorDQorCWJlYWNvbl9pbmZvLT5jYXBfaW5mbyA9IGxlMTZfdG9fY3B1 KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOw0KKw0KKwlwb3MgPSAodTggKiltZ210LT51LmJl YWNvbi52YXJpYWJsZTsNCisJbGVmdCA9IGxlbiAtIGJhc2VsZW47DQorDQorCWVsZW1fcGFyc2Vf ZmFpbGVkID0gZmFsc2U7DQorDQorCXdoaWxlIChsZWZ0ID49IDIpIHsNCisJCXU4IGlkLCBlbGVu Ow0KKw0KKwkJaWQgPSAqcG9zKys7DQorCQllbGVuID0gKnBvcysrOw0KKwkJbGVmdCAtPSAyOw0K Kw0KKwkJaWYgKGVsZW4gPiBsZWZ0KSB7DQorCQkJZWxlbV9wYXJzZV9mYWlsZWQgPSB0cnVlOw0K KwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJc3dpdGNoIChpZCkgew0KKwkJY2FzZSBXTEFOX0VJRF9T VVBQX1JBVEVTOg0KKwkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoNCisJCQl7DQorCQkJ aW50IGlkeCwgYmksIG9pOw0KKwkJCXU4IHJhdGU7DQorDQorCQkJZm9yIChiaSA9IDA7IGJpIDwg U1lTQURQVF9NQVhfREFUQV9SQVRFU19HOw0KKwkJCSAgICAgYmkrKykgew0KKwkJCQlpZiAoYmVh Y29uX2luZm8tPmJfcmF0ZV9zZXRbYmldID09IDApDQorCQkJCQlicmVhazsNCisJCQl9DQorDQor CQkJZm9yIChvaSA9IDA7IG9pIDwgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HOw0KKwkJCSAgICAg b2krKykgew0KKwkJCQlpZiAoYmVhY29uX2luZm8tPm9wX3JhdGVfc2V0W29pXSA9PSAwKQ0KKwkJ CQkJYnJlYWs7DQorCQkJfQ0KKw0KKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgZWxlbjsgaWR4Kysp IHsNCisJCQkJcmF0ZSA9IHBvc1tpZHhdOw0KKwkJCQlpZiAoKHJhdGUgJiAweDgwKSAhPSAwKSB7 DQorCQkJCQlpZiAoYmkgPCBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpDQorCQkJCQkJYmVhY29u X2luZm8tPmJfcmF0ZV9zZXRbYmkrK10NCisJCQkJCQkJPSByYXRlICYgMHg3ZjsNCisJCQkJCWVs c2Ugew0KKwkJCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQkJCQlicmVhazsNCisJ CQkJCX0NCisJCQkJfQ0KKwkJCQlpZiAob2kgPCBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpDQor CQkJCQliZWFjb25faW5mby0+b3BfcmF0ZV9zZXRbb2krK10gPQ0KKwkJCQkJCXJhdGUgJiAweDdm Ow0KKwkJCQllbHNlIHsNCisJCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQkJCWJy ZWFrOw0KKwkJCQl9DQorCQkJfQ0KKwkJCX0NCisJCQlicmVhazsNCisJCWNhc2UgV0xBTl9FSURf UlNOOg0KKwkJCWJlYWNvbl9pbmZvLT5pZV9yc240OF9sZW4gPSAoZWxlbiArIDIpOw0KKwkJCWJl YWNvbl9pbmZvLT5pZV9yc240OF9wdHIgPSAocG9zIC0gMik7DQorCQkJYnJlYWs7DQorCQljYXNl IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6DQorCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoN CisJCWNhc2UgV0xBTl9FSURfT1ZFUkxBUF9CU1NfU0NBTl9QQVJBTToNCisJCWNhc2UgV0xBTl9F SURfRVhUX0NBUEFCSUxJVFk6DQorCQkJYmVhY29uX2luZm8tPmllX2h0X2xlbiArPSAoZWxlbiAr IDIpOw0KKwkJCWlmIChiZWFjb25faW5mby0+aWVfaHRfbGVuID4NCisJCQkgICAgc2l6ZW9mKGJl YWNvbl9pbmZvLT5pZV9saXN0X2h0KSkgew0KKwkJCQllbGVtX3BhcnNlX2ZhaWxlZCA9IHRydWU7 DQorCQkJfSBlbHNlIHsNCisJCQkJKmJlYWNvbl9pbmZvLT5pZV9odF9wdHIrKyA9IGlkOw0KKwkJ CQkqYmVhY29uX2luZm8tPmllX2h0X3B0cisrID0gZWxlbjsNCisJCQkJbWVtY3B5KGJlYWNvbl9p bmZvLT5pZV9odF9wdHIsIHBvcywgZWxlbik7DQorCQkJCWJlYWNvbl9pbmZvLT5pZV9odF9wdHIg Kz0gZWxlbjsNCisJCQl9DQorCQkJYnJlYWs7DQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNI DQorCQljYXNlIFdMQU5fRUlEX01FU0hfQ09ORklHOg0KKwkJCWJlYWNvbl9pbmZvLT5pZV9tZXNo Y2ZnX2xlbiA9IChlbGVuICsgMik7DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjZmdfcHRyID0g KHBvcyAtIDIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOg0KKwkJCWJl YWNvbl9pbmZvLT5pZV9tZXNoaWRfbGVuID0gKGVsZW4gKyAyKTsNCisJCQliZWFjb25faW5mby0+ aWVfbWVzaGlkX3B0ciA9IChwb3MgLSAyKTsNCisJCQlicmVhazsNCisJCWNhc2UgV0xBTl9FSURf Q0hBTl9TV0lUQ0hfUEFSQU06DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjaHN3X2xlbiA9IChl bGVuICsgMik7DQorCQkJYmVhY29uX2luZm8tPmllX21lc2hjaHN3X3B0ciA9IChwb3MgLSAyKTsN CisJCQlicmVhazsNCisjZW5kaWYNCisJCWNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6DQor CQljYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046DQorCQljYXNlIFdMQU5fRUlEX09QTU9ERV9O T1RJRjoNCisJCQliZWFjb25faW5mby0+aWVfdmh0X2xlbiArPSAoZWxlbiArIDIpOw0KKwkJCWlm IChiZWFjb25faW5mby0+aWVfdmh0X2xlbiA+DQorCQkJICAgIHNpemVvZihiZWFjb25faW5mby0+ aWVfbGlzdF92aHQpKSB7DQorCQkJCWVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1ZTsNCisJCQl9IGVs c2Ugew0KKwkJCQkqYmVhY29uX2luZm8tPmllX3ZodF9wdHIrKyA9IGlkOw0KKwkJCQkqYmVhY29u X2luZm8tPmllX3ZodF9wdHIrKyA9IGVsZW47DQorCQkJCW1lbWNweShiZWFjb25faW5mby0+aWVf dmh0X3B0ciwgcG9zLCBlbGVuKTsNCisJCQkJYmVhY29uX2luZm8tPmllX3ZodF9wdHIgKz0gZWxl bjsNCisJCQl9DQorCQkJYnJlYWs7DQorCQljYXNlIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzoN CisJCQlpZiAoKHBvc1swXSA9PSAweDAwKSAmJiAocG9zWzFdID09IDB4NTApICYmDQorCQkJICAg IChwb3NbMl0gPT0gMHhmMikpIHsNCisJCQkJaWYgKHBvc1szXSA9PSAweDAxKSB7DQorCQkJCQli ZWFjb25faW5mby0+aWVfcnNuX2xlbiA9IChlbGVuICsgMik7DQorCQkJCQliZWFjb25faW5mby0+ aWVfcnNuX3B0ciA9IChwb3MgLSAyKTsNCisJCQkJfQ0KKw0KKwkJCQlpZiAocG9zWzNdID09IDB4 MDIpIHsNCisJCQkJCWJlYWNvbl9pbmZvLT5pZV93bW1fbGVuID0gKGVsZW4gKyAyKTsNCisJCQkJ CWJlYWNvbl9pbmZvLT5pZV93bW1fcHRyID0gKHBvcyAtIDIpOw0KKwkJCQl9DQorCQkJfQ0KKwkJ CWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlicmVhazsNCisJCX0NCisNCisJCWxlZnQgLT0gZWxl bjsNCisJCXBvcyArPSBlbGVuOw0KKwl9DQorDQorCWlmICghZWxlbV9wYXJzZV9mYWlsZWQpIHsN CisJCWJlYWNvbl9pbmZvLT5pZV9odF9wdHIgPSAmYmVhY29uX2luZm8tPmllX2xpc3RfaHRbMF07 DQorCQliZWFjb25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+aWVfbGlzdF92aHRb MF07DQorCQliZWFjb25faW5mby0+dmFsaWQgPSB0cnVlOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBp bnQgbXdsX2Z3Y21kX3NldF9pZXMoc3RydWN0IG13bF9wcml2ICpwcml2LCBzdHJ1Y3QgbXdsX3Zp ZiAqbXdsX3ZpZikNCit7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaWVzICpwY21kOw0KKwlz dHJ1Y3QgYmVhY29uX2luZm8gKmJlYWNvbiA9ICZtd2xfdmlmLT5iZWFjb25faW5mbzsNCisJdTE2 IGllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5ID0gMDsNCisNCisJaWYgKCFiZWFjb24tPnZhbGlkKQ0K KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChiZWFjb24tPmllX2h0X2xlbiA+IHNpemVvZihw Y21kLT5pZV9saXN0X2h0KSkNCisJCWdvdG8gZWludmFsOw0KKw0KKwlpZiAoYmVhY29uLT5pZV92 aHRfbGVuID4gc2l6ZW9mKHBjbWQtPmllX2xpc3Rfdmh0KSkNCisJCWdvdG8gZWludmFsOw0KKw0K KwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaWVzICopJnByaXYtPnBjbWRfYnVmWzBd Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNt ZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xl MTYoSE9TVENNRF9DTURfU0VUX0lFUyk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xl MTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIubWFjaWQgPSBtd2xfdmlmLT5tYWNp ZDsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfR0VOX1NFVCk7 DQorDQorCW1lbWNweShwY21kLT5pZV9saXN0X2h0LCBiZWFjb24tPmllX2h0X3B0ciwgYmVhY29u LT5pZV9odF9sZW4pOw0KKwlwY21kLT5pZV9saXN0X2xlbl9odCA9IGNwdV90b19sZTE2KGJlYWNv bi0+aWVfaHRfbGVuKTsNCisNCisJbWVtY3B5KHBjbWQtPmllX2xpc3Rfdmh0LCBiZWFjb24tPmll X3ZodF9wdHIsIGJlYWNvbi0+aWVfdmh0X2xlbik7DQorCXBjbWQtPmllX2xpc3RfbGVuX3ZodCA9 IGNwdV90b19sZTE2KGJlYWNvbi0+aWVfdmh0X2xlbik7DQorDQorI2lmZGVmIENPTkZJR19NQUM4 MDIxMV9NRVNIDQorCW1lbWNweShwY21kLT5pZV9saXN0X3Byb3ByaWV0YXJ5LCBiZWFjb24tPmll X21lc2hpZF9wdHIsDQorCSAgICAgICBiZWFjb24tPmllX21lc2hpZF9sZW4pOw0KKwlpZV9saXN0 X2xlbl9wcm9wcmlldGFyeSA9IGJlYWNvbi0+aWVfbWVzaGlkX2xlbjsNCisJbWVtY3B5KHBjbWQt PmllX2xpc3RfcHJvcHJpZXRhcnkgKyBpZV9saXN0X2xlbl9wcm9wcmlldGFyeSwNCisJICAgICAg IGJlYWNvbi0+aWVfbWVzaGNmZ19wdHIsIGJlYWNvbi0+aWVfbWVzaGNmZ19sZW4pOw0KKwlpZV9s aXN0X2xlbl9wcm9wcmlldGFyeSArPSBiZWFjb24tPmllX21lc2hjZmdfbGVuOw0KKwltZW1jcHko cGNtZC0+aWVfbGlzdF9wcm9wcmlldGFyeSArIGllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5LA0KKwkg ICAgICAgYmVhY29uLT5pZV9tZXNoY2hzd19wdHIsIGJlYWNvbi0+aWVfbWVzaGNoc3dfbGVuKTsN CisJaWVfbGlzdF9sZW5fcHJvcHJpZXRhcnkgKz0gYmVhY29uLT5pZV9tZXNoY2hzd19sZW47DQor I2VuZGlmDQorDQorCWlmIChwcml2LT5jaGlwX3R5cGUgPT0gTVdMODg5Nykgew0KKwkJbWVtY3B5 KHBjbWQtPmllX2xpc3RfcHJvcHJpZXRhcnkgKyBpZV9saXN0X2xlbl9wcm9wcmlldGFyeSwNCisJ CSAgICAgICBiZWFjb24tPmllX3dtbV9wdHIsIGJlYWNvbi0+aWVfd21tX2xlbik7DQorCQlpZV9s aXN0X2xlbl9wcm9wcmlldGFyeSArPSBtd2xfdmlmLT5iZWFjb25faW5mby5pZV93bW1fbGVuOw0K Kwl9DQorDQorCXBjbWQtPmllX2xpc3RfbGVuX3Byb3ByaWV0YXJ5ID0gY3B1X3RvX2xlMTYoaWVf bGlzdF9sZW5fcHJvcHJpZXRhcnkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYs IEhPU1RDTURfQ01EX1NFVF9JRVMpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRf bG9jayk7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KKw0KK2VpbnZhbDoNCisNCisJd2lwaHlfZXJyKHBy aXYtPmh3LT53aXBoeSwgImxlbmd0aCBvZiBJRSBpcyB0b28gbG9uZ1xuIik7DQorDQorCXJldHVy biAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9md2NtZF9zZXRfYXBfYmVhY29uKHN0 cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJICAgc3RydWN0IG13bF92aWYgKm13bF92aWYsDQor CQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQ0KK3sNCisJc3RydWN0 IGhvc3RjbWRfY21kX2FwX2JlYWNvbiAqcGNtZDsNCisJc3RydWN0IGRzX3BhcmFtcyAqcGh5X2Rz X3BhcmFtX3NldDsNCisNCisJaWYgKCFtd2xfdmlmLT5iZWFjb25faW5mby52YWxpZCkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwkvKiB3bW0gc3RydWN0dXJlIG9mIHN0YXJ0IGNvbW1hbmQgaXMg ZGVmaW5lZCBsZXNzIG9uZSBieXRlLA0KKwkgKiBkdWUgdG8gZm9sbG93aW5nIGZpZWxkIGNvdW50 cnkgaXMgbm90IHVzZWQsIGFkZCBieXRlIG9uZQ0KKwkgKiB0byBieXBhc3MgdGhlIGNoZWNrLg0K KwkgKi8NCisJaWYgKG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3dtbV9sZW4gPg0KKwkgICAgKHNp emVvZihwY21kLT5zdGFydF9jbWQud21tX3BhcmFtKSArIDEpKQ0KKwkJZ290byBpZWxlbmVycjsN CisNCisJaWYgKG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3Jzbl9sZW4gPiBzaXplb2YocGNtZC0+ c3RhcnRfY21kLnJzbl9pZSkpDQorCQlnb3RvIGllbGVuZXJyOw0KKw0KKwlpZiAobXdsX3ZpZi0+ YmVhY29uX2luZm8uaWVfcnNuNDhfbGVuID4NCisJICAgIHNpemVvZihwY21kLT5zdGFydF9jbWQu cnNuNDhfaWUpKQ0KKwkJZ290byBpZWxlbmVycjsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt ZF9jbWRfYXBfYmVhY29uICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgo JnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21k KSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQVBfQkVB Q09OKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN CisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlldGhlcl9hZGRy X2NvcHkocGNtZC0+c3RhcnRfY21kLnN0YV9tYWNfYWRkciwgbXdsX3ZpZi0+YnNzaWQpOw0KKwlt ZW1jcHkocGNtZC0+c3RhcnRfY21kLnNzaWQsIGJzc19jb25mLT5zc2lkLCBic3NfY29uZi0+c3Np ZF9sZW4pOw0KKwlwY21kLT5zdGFydF9jbWQuYnNzX3R5cGUgPSAxOw0KKwlwY21kLT5zdGFydF9j bWQuYmNuX3BlcmlvZCAgPSBjcHVfdG9fbGUxNihic3NfY29uZi0+YmVhY29uX2ludCk7DQorCXBj bWQtPnN0YXJ0X2NtZC5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsgLyogOGJp dCAqLw0KKw0KKwlwaHlfZHNfcGFyYW1fc2V0ID0gJnBjbWQtPnN0YXJ0X2NtZC5waHlfcGFyYW1f c2V0LmRzX3BhcmFtX3NldDsNCisJcGh5X2RzX3BhcmFtX3NldC0+ZWxlbV9pZCA9IFdMQU5fRUlE X0RTX1BBUkFNUzsNCisJcGh5X2RzX3BhcmFtX3NldC0+bGVuID0gc2l6ZW9mKHBoeV9kc19wYXJh bV9zZXQtPmN1cnJlbnRfY2hubCk7DQorCXBoeV9kc19wYXJhbV9zZXQtPmN1cnJlbnRfY2hubCA9 IGJzc19jb25mLT5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlOw0KKw0KKwlwY21kLT5zdGFydF9jbWQu cHJvYmVfZGVsYXkgPSBjcHVfdG9fbGUxNigxMCk7DQorCXBjbWQtPnN0YXJ0X2NtZC5jYXBfaW5m byA9IGNwdV90b19sZTE2KG13bF92aWYtPmJlYWNvbl9pbmZvLmNhcF9pbmZvKTsNCisNCisJbWVt Y3B5KCZwY21kLT5zdGFydF9jbWQud21tX3BhcmFtLCBtd2xfdmlmLT5iZWFjb25faW5mby5pZV93 bW1fcHRyLA0KKwkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVfd21tX2xlbik7DQorDQor CW1lbWNweSgmcGNtZC0+c3RhcnRfY21kLnJzbl9pZSwgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVf cnNuX3B0ciwNCisJICAgICAgIG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3Jzbl9sZW4pOw0KKw0K KwltZW1jcHkoJnBjbWQtPnN0YXJ0X2NtZC5yc240OF9pZSwgbXdsX3ZpZi0+YmVhY29uX2luZm8u aWVfcnNuNDhfcHRyLA0KKwkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8uaWVfcnNuNDhfbGVu KTsNCisNCisJbWVtY3B5KHBjbWQtPnN0YXJ0X2NtZC5iX3JhdGVfc2V0LCBtd2xfdmlmLT5iZWFj b25faW5mby5iX3JhdGVfc2V0LA0KKwkgICAgICAgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HKTsN CisNCisJbWVtY3B5KHBjbWQtPnN0YXJ0X2NtZC5vcF9yYXRlX3NldCwgbXdsX3ZpZi0+YmVhY29u X2luZm8ub3BfcmF0ZV9zZXQsDQorCSAgICAgICBTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0cpOw0K Kw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0FQX0JFQUNPTikp IHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihw cml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0K Kwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJu IDA7DQorDQoraWVsZW5lcnI6DQorDQorCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJsZW5n dGggb2YgSUUgaXMgdG9vIGxvbmdcbiIpOw0KKw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQor c3RhdGljIGludCBtd2xfZndjbWRfZW5jcnlwdGlvbl9zZXRfY21kX2luZm8oc3RydWN0IGhvc3Rj bWRfY21kX3NldF9rZXkgKmNtZCwNCisJCQkJCSAgICAgdTggKmFkZHIsDQorCQkJCQkgICAgIHN0 cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkNCit7DQorCWNtZC0+Y21kX2hkci5jbWQgPSBj cHVfdG9fbGUxNihIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTik7DQorCWNtZC0+Y21kX2hk ci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOw0KKwljbWQtPmtleV9wYXJhbS5sZW5n dGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkgLQ0KKwkJb2Zmc2V0b2Yoc3RydWN0IGhvc3Rj bWRfY21kX3NldF9rZXksIGtleV9wYXJhbSkpOw0KKwljbWQtPmtleV9wYXJhbS5rZXlfaW5kZXgg PSBjcHVfdG9fbGUzMihrZXktPmtleWlkeCk7DQorCWNtZC0+a2V5X3BhcmFtLmtleV9sZW4gPSBj cHVfdG9fbGUxNihrZXktPmtleWxlbik7DQorCWV0aGVyX2FkZHJfY29weShjbWQtPmtleV9wYXJh bS5tYWNfYWRkciwgYWRkcik7DQorDQorCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsNCisJY2FzZSBX TEFOX0NJUEhFUl9TVUlURV9XRVA0MDoNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6 DQorCQljbWQtPmtleV9wYXJhbS5rZXlfdHlwZV9pZCA9IGNwdV90b19sZTE2KEtFWV9UWVBFX0lE X1dFUCk7DQorCQlpZiAoa2V5LT5rZXlpZHggPT0gMCkNCisJCQljbWQtPmtleV9wYXJhbS5rZXlf aW5mbyA9DQorCQkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfV0VQX1RYS0VZKTsNCisJCWJy ZWFrOw0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6DQorCQljbWQtPmtleV9wYXJhbS5r ZXlfdHlwZV9pZCA9IGNwdV90b19sZTE2KEtFWV9UWVBFX0lEX1RLSVApOw0KKwkJY21kLT5rZXlf cGFyYW0ua2V5X2luZm8gPQ0KKwkJCShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BB SVJXSVNFKSA/DQorCQkJY3B1X3RvX2xlMzIoRU5DUl9LRVlfRkxBR19QQUlSV0lTRSkgOg0KKwkJ CWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfVFhHUk9VUEtFWSk7DQorCQljbWQtPmtleV9wYXJh bS5rZXlfaW5mbyB8PQ0KKwkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfTUlDS0VZX1ZBTElE IHwNCisJCQkJICAgICAgRU5DUl9LRVlfRkxBR19UU0NfVkFMSUQpOw0KKwkJYnJlYWs7DQorCWNh c2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoNCisJCWNtZC0+a2V5X3BhcmFtLmtleV90eXBlX2lk ID0gY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfQUVTKTsNCisJCWNtZC0+a2V5X3BhcmFtLmtleV9p bmZvID0NCisJCQkoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgPw0K KwkJCWNwdV90b19sZTMyKEVOQ1JfS0VZX0ZMQUdfUEFJUldJU0UpIDoNCisJCQljcHVfdG9fbGUz MihFTkNSX0tFWV9GTEFHX1RYR1JPVVBLRVkpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQly ZXR1cm4gLUVOT1RTVVBQOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIG13bF9m d2NtZF9yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJp diAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwlpZiAobXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYp KQ0KKwkJd3JpdGVsKElTUl9SRVNFVCwNCisJCSAgICAgICBwcml2LT5pb2Jhc2UxICsgTUFDUkVH X1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7DQorfQ0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9l bmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYgPSBody0+cHJpdjsNCisNCisJaWYgKG13bF9md2NtZF9jaGtfYWRhcHRlcihwcml2KSkgew0K KwkJd3JpdGVsKDB4MDAsDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJI X0lOVEVSUlVQVF9NQVNLKTsNCisJCXdyaXRlbCgoTUFDUkVHX0EySFJJQ19CSVRfTUFTSyksDQor CQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsN CisJfQ0KK30NCisNCit2b2lkIG13bF9md2NtZF9pbnRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwlp ZiAobXdsX2Z3Y21kX2Noa19hZGFwdGVyKHByaXYpKQ0KKwkJd3JpdGVsKDB4MDAsDQorCQkgICAg ICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsNCit9DQor DQoraW50IG13bF9md2NtZF9nZXRfaHdfc3BlY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQor ew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3RjbWRf Y21kX2dldF9od19zcGVjICpwY21kOw0KKwlpbnQgcmV0cnk7DQorCWludCBpOw0KKw0KKwlpZiAo cHJpdi0+bWZnX21vZGUpDQorCQlyZXR1cm4gMDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt ZF9jbWRfZ2V0X2h3X3NwZWMgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgInBjbWQg PSAlcFxuIiwgcGNtZCk7DQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ ZXRoX2Jyb2FkY2FzdF9hZGRyKHBjbWQtPnBlcm1hbmVudF9hZGRyKTsNCisJcGNtZC0+Y21kX2hk ci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9HRVRfSFdfU1BFQyk7DQorCXBjbWQtPmNt ZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmZ3X2F3YWtl X2Nvb2tpZSA9IGNwdV90b19sZTMyKHByaXYtPnBwaHlzX2NtZF9idWYgKyAyMDQ4KTsNCisNCisJ cmV0cnkgPSAwOw0KKwl3aGlsZSAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01E X0dFVF9IV19TUEVDKSkgew0KKwkJaWYgKHJldHJ5KysgPiBNQVhfV0FJVF9HRVRfSFdfU1BFQ1Nf SVRFUkFUT05TKSB7DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNhbid0IGdldCBodyBzcGVj c1xuIik7DQorCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJCXJldHVy biAtRUlPOw0KKwkJfQ0KKw0KKwkJbWRlbGF5KDEwMDApOw0KKwkJd2lwaHlfZGVidWcoaHctPndp cGh5LA0KKwkJCSAgICAicmVwZWF0IGNvbW1hbmQgPSAlcFxuIiwgcGNtZCk7DQorCX0NCisNCisJ ZXRoZXJfYWRkcl9jb3B5KCZwcml2LT5od19kYXRhLm1hY19hZGRyWzBdLCBwY21kLT5wZXJtYW5l bnRfYWRkcik7DQorCXByaXYtPmRlc2NfZGF0YVswXS53Y2JfYmFzZSA9DQorCQlsZTMyX3RvX2Nw dShwY21kLT53Y2JfYmFzZTApICYgMHgwMDAwZmZmZjsNCisJZm9yIChpID0gMTsgaSA8IFNZU0FE UFRfVE9UQUxfVFhfUVVFVUVTOyBpKyspDQorCQlwcml2LT5kZXNjX2RhdGFbaV0ud2NiX2Jhc2Ug PQ0KKwkJCWxlMzJfdG9fY3B1KHBjbWQtPndjYl9iYXNlW2kgLSAxXSkgJiAweDAwMDBmZmZmOw0K Kwlwcml2LT5kZXNjX2RhdGFbMF0ucnhfZGVzY19yZWFkID0NCisJCWxlMzJfdG9fY3B1KHBjbWQt PnJ4cGRfcmRfcHRyKSAmIDB4MDAwMGZmZmY7DQorCXByaXYtPmRlc2NfZGF0YVswXS5yeF9kZXNj X3dyaXRlID0NCisJCWxlMzJfdG9fY3B1KHBjbWQtPnJ4cGRfd3JfcHRyKSAmIDB4MDAwMGZmZmY7 DQorCXByaXYtPmh3X2RhdGEucmVnaW9uX2NvZGUgPSBsZTE2X3RvX2NwdShwY21kLT5yZWdpb25f Y29kZSkgJiAweDAwZmY7DQorCXByaXYtPmh3X2RhdGEuZndfcmVsZWFzZV9udW0gPSBsZTMyX3Rv X2NwdShwY21kLT5md19yZWxlYXNlX251bSk7DQorCXByaXYtPmh3X2RhdGEubWF4X251bV90eF9k ZXNjID0gbGUxNl90b19jcHUocGNtZC0+bnVtX3djYik7DQorCXByaXYtPmh3X2RhdGEubWF4X251 bV9tY19hZGRyID0gbGUxNl90b19jcHUocGNtZC0+bnVtX21jYXN0X2FkZHIpOw0KKwlwcml2LT5o d19kYXRhLm51bV9hbnRlbm5hcyA9IGxlMTZfdG9fY3B1KHBjbWQtPm51bV9hbnRlbm5hKTsNCisJ cHJpdi0+aHdfZGF0YS5od192ZXJzaW9uID0gcGNtZC0+dmVyc2lvbjsNCisJcHJpdi0+aHdfZGF0 YS5ob3N0X2ludGVyZmFjZSA9IHBjbWQtPmhvc3RfaWY7DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf c2V0X2h3X3NwZWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9w cml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaHdfc3BlYyAq cGNtZDsNCisJaW50IGk7DQorDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCXJldHVybiAwOw0K Kw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaHdfc3BlYyAqKSZwcml2LT5wY21k X2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVt c2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNw dV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9IV19TUEVDKTsNCisJcGNtZC0+Y21kX2hkci5sZW4g PSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+d2NiX2Jhc2VbMF0gPSBjcHVf dG9fbGUzMihwcml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfdHhfcmluZyk7DQorCWZvciAoaSA9IDE7 IGkgPCBTWVNBRFBUX1RPVEFMX1RYX1FVRVVFUzsgaSsrKQ0KKwkJcGNtZC0+d2NiX2Jhc2VbaV0g PQ0KKwkJCWNwdV90b19sZTMyKHByaXYtPmRlc2NfZGF0YVtpXS5wcGh5c190eF9yaW5nKTsNCisJ cGNtZC0+dHhfd2NiX251bV9wZXJfcXVldWUgPSBjcHVfdG9fbGUzMihTWVNBRFBUX01BWF9OVU1f VFhfREVTQyk7DQorCXBjbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihTWVNBRFBUX05V TV9PRl9ERVNDX0RBVEEpOw0KKwlwY21kLT50b3RhbF9yeF93Y2IgPSBjcHVfdG9fbGUzMihTWVNB RFBUX01BWF9OVU1fUlhfREVTQyk7DQorCXBjbWQtPnJ4cGRfd3JfcHRyID0gY3B1X3RvX2xlMzIo cHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3J4X3JpbmcpOw0KKwlwY21kLT5mZWF0dXJlcyA9IDA7 DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX0hXX1NQ RUMpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2dldF9zdGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LA0KKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykNCit7 DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9j bWRfODAyXzExX2dldF9zdGF0ICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2Nt ZF84MDJfMTFfZ2V0X3N0YXQgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBj bWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJf MTFfR0VUX1NUQVQpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigq cGNtZCkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EXzgw Ml8xMV9HRVRfU1RBVCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN CisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVy biAtRUlPOw0KKwl9DQorDQorCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCA9DQorCQlsZTMy X3RvX2NwdShwY21kLT5hY2tfZmFpbHVyZXMpOw0KKwlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291 bnQgPQ0KKwkJbGUzMl90b19jcHUocGNtZC0+cnRzX2ZhaWx1cmVzKTsNCisJc3RhdHMtPmRvdDEx RkNTRXJyb3JDb3VudCA9DQorCQlsZTMyX3RvX2NwdShwY21kLT5yeF9mY3NfZXJyb3JzKTsNCisJ c3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0NCisJCWxlMzJfdG9fY3B1KHBjbWQtPnJ0c19z dWNjZXNzZXMpOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodykNCit7DQorCXJldHVybiBtd2xfZndjbWRfODAyXzExX3JhZGlvX2NvbnRy b2woaHctPnByaXYsIHRydWUsIGZhbHNlKTsNCit9DQorDQoraW50IG13bF9md2NtZF9yYWRpb19k aXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJcmV0dXJuIG13bF9md2NtZF84 MDJfMTFfcmFkaW9fY29udHJvbChody0+cHJpdiwgZmFsc2UsIGZhbHNlKTsNCit9DQorDQoraW50 IG13bF9md2NtZF9zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJv b2wgc2hvcnRfcHJlYW1ibGUpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJp djsNCisJaW50IHJjOw0KKw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQlyZXR1cm4gMDsNCisN CisJcHJpdi0+cmFkaW9fc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZTsNCisJcmMgPSBt d2xfZndjbWRfODAyXzExX3JhZGlvX2NvbnRyb2wocHJpdiwgdHJ1ZSwgdHJ1ZSk7DQorDQorCXJl dHVybiByYzsNCit9DQorDQoraW50IG13bF9md2NtZF9nZXRfYWRkcl92YWx1ZShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgdTMyIGFkZHIsIHUzMiBsZW4sDQorCQkJICAgICB1MzIgKnZhbCwgdTE2 IHNldCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qg aG9zdGNtZF9jbWRfbWVtX2FkZHJfYWNjZXNzICpwY21kOw0KKwlpbnQgaTsNCisNCisJcGNtZCA9 IChzdHJ1Y3QgaG9zdGNtZF9jbWRfbWVtX2FkZHJfYWNjZXNzICopJnByaXYtPnBjbWRfYnVmWzBd Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNt ZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xl MTYoSE9TVENNRF9DTURfTUVNX0FERFJfQUNDRVNTKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWRkcmVzcyA9IGNwdV90b19sZTMy KGFkZHIpOw0KKwlwY21kLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOw0KKwlwY21kLT52YWx1 ZVswXSA9IGNwdV90b19sZTMyKCp2YWwpOw0KKwlwY21kLT5yZXNlcnZlZCA9IGNwdV90b19sZTE2 KHNldCk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfTUVN X0FERFJfQUNDRVNTKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K KwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJu IC1FSU87DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KKwkJdmFsW2ldID0g bGUzMl90b19jcHUocGNtZC0+dmFsdWVbaV0pOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX21heF90 eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjEx X2NvbmYgKmNvbmYsIHU4IGZyYWN0aW9uKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVs ICpjaGFubmVsID0gY29uZi0+Y2hhbmRlZi5jaGFuOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYg PSBody0+cHJpdjsNCisJaW50IHJlZHVjZV92YWwgPSAwOw0KKwl1MTYgYmFuZCA9IDAsIHdpZHRo ID0gMCwgc3ViX2NoID0gMDsNCisJdTE2IG1heHR4cG93W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxf VE9UQUxdOw0KKwlpbnQgaSwgdG1wOw0KKwlpbnQgcmM7DQorDQorCXN3aXRjaCAoZnJhY3Rpb24p IHsNCisJY2FzZSAwOg0KKwkJcmVkdWNlX3ZhbCA9IDA7ICAgIC8qIE1heCAqLw0KKwkJYnJlYWs7 DQorCWNhc2UgMToNCisJCXJlZHVjZV92YWwgPSAyOyAgICAvKiA3NSUgLTEuMjVkYiAqLw0KKwkJ YnJlYWs7DQorCWNhc2UgMjoNCisJCXJlZHVjZV92YWwgPSAzOyAgICAvKiA1MCUgLTNkYiAqLw0K KwkJYnJlYWs7DQorCWNhc2UgMzoNCisJCXJlZHVjZV92YWwgPSA2OyAgICAvKiAyNSUgLTZkYiAq Lw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQkvKiBsYXJnZXIgdGhhbiBjYXNlIDMsICBwQ21k LT5NYXhQb3dlckxldmVsIGlzIG1pbiAqLw0KKwkJcmVkdWNlX3ZhbCA9IDB4ZmY7DQorCQlicmVh azsNCisJfQ0KKw0KKwlpZiAoY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQ0K KwkJYmFuZCA9IEZSRVFfQkFORF8yRE9UNEdIWjsNCisJZWxzZSBpZiAoY2hhbm5lbC0+YmFuZCA9 PSBJRUVFODAyMTFfQkFORF81R0haKQ0KKwkJYmFuZCA9IEZSRVFfQkFORF81R0haOw0KKw0KKwlz d2l0Y2ggKGNvbmYtPmNoYW5kZWYud2lkdGgpIHsNCisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhf MjBfTk9IVDoNCisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfMjA6DQorCQl3aWR0aCA9IENIXzIw X01IWl9XSURUSDsNCisJCXN1Yl9jaCA9IE5PX0VYVF9DSEFOTkVMOw0KKwkJYnJlYWs7DQorCWNh c2UgTkw4MDIxMV9DSEFOX1dJRFRIXzQwOg0KKwkJd2lkdGggPSBDSF80MF9NSFpfV0lEVEg7DQor CQlpZiAoY29uZi0+Y2hhbmRlZi5jZW50ZXJfZnJlcTEgPiBjaGFubmVsLT5jZW50ZXJfZnJlcSkN CisJCQlzdWJfY2ggPSBFWFRfQ0hfQUJPVkVfQ1RSTF9DSDsNCisJCWVsc2UNCisJCQlzdWJfY2gg PSBFWFRfQ0hfQkVMT1dfQ1RSTF9DSDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfQ0hBTl9X SURUSF84MDoNCisJCXdpZHRoID0gQ0hfODBfTUhaX1dJRFRIOw0KKwkJaWYgKGNvbmYtPmNoYW5k ZWYuY2VudGVyX2ZyZXExID4gY2hhbm5lbC0+Y2VudGVyX2ZyZXEpDQorCQkJc3ViX2NoID0gRVhU X0NIX0FCT1ZFX0NUUkxfQ0g7DQorCQllbHNlDQorCQkJc3ViX2NoID0gRVhUX0NIX0JFTE9XX0NU UkxfQ0g7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQor DQorCWlmICgocHJpdi0+cG93aW5pdGVkICYgTVdMX1BPV0VSX0lOSVRfMikgPT0gMCkgew0KKwkJ bXdsX2Z3Y21kX2dldF90eF9wb3dlcnMocHJpdiwgcHJpdi0+bWF4X3R4X3BvdywNCisJCQkJCWNo YW5uZWwtPmh3X3ZhbHVlLCBiYW5kLCB3aWR0aCwgc3ViX2NoKTsNCisJCXByaXYtPnBvd2luaXRl ZCB8PSBNV0xfUE9XRVJfSU5JVF8yOw0KKwl9DQorDQorCWlmICgocHJpdi0+cG93aW5pdGVkICYg TVdMX1BPV0VSX0lOSVRfMSkgPT0gMCkgew0KKwkJbXdsX2Z3Y21kX2dldF90eF9wb3dlcnMocHJp diwgcHJpdi0+dGFyZ2V0X3Bvd2VycywNCisJCQkJCWNoYW5uZWwtPmh3X3ZhbHVlLCBiYW5kLCB3 aWR0aCwgc3ViX2NoKTsNCisJCXByaXYtPnBvd2luaXRlZCB8PSBNV0xfUE9XRVJfSU5JVF8xOw0K Kwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFMOyBp KyspIHsNCisJCWlmIChwcml2LT50YXJnZXRfcG93ZXJzW2ldID4gcHJpdi0+bWF4X3R4X3Bvd1tp XSkNCisJCQl0bXAgPSBwcml2LT5tYXhfdHhfcG93W2ldOw0KKwkJZWxzZQ0KKwkJCXRtcCA9IHBy aXYtPnRhcmdldF9wb3dlcnNbaV07DQorCQltYXh0eHBvd1tpXSA9ICgodG1wIC0gcmVkdWNlX3Zh bCkgPiAwKSA/ICh0bXAgLSByZWR1Y2VfdmFsKSA6IDA7DQorCX0NCisNCisJcmMgPSBtd2xfZndj bWRfc2V0X3R4X3Bvd2Vycyhwcml2LCBtYXh0eHBvdywgSE9TVENNRF9BQ1RfR0VOX1NFVCwNCisJ CQkJICAgICBjaGFubmVsLT5od192YWx1ZSwgYmFuZCwgd2lkdGgsIHN1Yl9jaCk7DQorDQorCXJl dHVybiByYzsNCit9DQorDQoraW50IG13bF9md2NtZF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsIHU4IGZyYWN0 aW9uKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY29uZi0+Y2hh bmRlZi5jaGFuOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50IHJl ZHVjZV92YWwgPSAwOw0KKwl1MTYgYmFuZCA9IDAsIHdpZHRoID0gMCwgc3ViX2NoID0gMDsNCisJ dTE2IHR4cG93W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOw0KKwlpbnQgaW5kZXgsIGZv dW5kID0gMDsNCisJaW50IGksIHRtcDsNCisJaW50IHJjOw0KKw0KKwlzd2l0Y2ggKGZyYWN0aW9u KSB7DQorCWNhc2UgMDoNCisJCXJlZHVjZV92YWwgPSAwOyAgICAvKiBNYXggKi8NCisJCWJyZWFr Ow0KKwljYXNlIDE6DQorCQlyZWR1Y2VfdmFsID0gMjsgICAgLyogNzUlIC0xLjI1ZGIgKi8NCisJ CWJyZWFrOw0KKwljYXNlIDI6DQorCQlyZWR1Y2VfdmFsID0gMzsgICAgLyogNTAlIC0zZGIgKi8N CisJCWJyZWFrOw0KKwljYXNlIDM6DQorCQlyZWR1Y2VfdmFsID0gNjsgICAgLyogMjUlIC02ZGIg Ki8NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJLyogbGFyZ2VyIHRoYW4gY2FzZSAzLCAgcENt ZC0+TWF4UG93ZXJMZXZlbCBpcyBtaW4gKi8NCisJCXJlZHVjZV92YWwgPSAweGZmOw0KKwkJYnJl YWs7DQorCX0NCisNCisJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikN CisJCWJhbmQgPSBGUkVRX0JBTkRfMkRPVDRHSFo7DQorCWVsc2UgaWYgKGNoYW5uZWwtPmJhbmQg PT0gSUVFRTgwMjExX0JBTkRfNUdIWikNCisJCWJhbmQgPSBGUkVRX0JBTkRfNUdIWjsNCisNCisJ c3dpdGNoIChjb25mLT5jaGFuZGVmLndpZHRoKSB7DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRI XzIwX05PSFQ6DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwOg0KKwkJd2lkdGggPSBDSF8y MF9NSFpfV0lEVEg7DQorCQlzdWJfY2ggPSBOT19FWFRfQ0hBTk5FTDsNCisJCWJyZWFrOw0KKwlj YXNlIE5MODAyMTFfQ0hBTl9XSURUSF80MDoNCisJCXdpZHRoID0gQ0hfNDBfTUhaX1dJRFRIOw0K KwkJaWYgKGNvbmYtPmNoYW5kZWYuY2VudGVyX2ZyZXExID4gY2hhbm5lbC0+Y2VudGVyX2ZyZXEp DQorCQkJc3ViX2NoID0gRVhUX0NIX0FCT1ZFX0NUUkxfQ0g7DQorCQllbHNlDQorCQkJc3ViX2No ID0gRVhUX0NIX0JFTE9XX0NUUkxfQ0g7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0NIQU5f V0lEVEhfODA6DQorCQl3aWR0aCA9IENIXzgwX01IWl9XSURUSDsNCisJCWlmIChjb25mLT5jaGFu ZGVmLmNlbnRlcl9mcmVxMSA+IGNoYW5uZWwtPmNlbnRlcl9mcmVxKQ0KKwkJCXN1Yl9jaCA9IEVY VF9DSF9BQk9WRV9DVFJMX0NIOw0KKwkJZWxzZQ0KKwkJCXN1Yl9jaCA9IEVYVF9DSF9CRUxPV19D VFJMX0NIOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0K Kw0KKwkvKiBzZWFyY2ggdHggcG93ZXIgdGFibGUgaWYgZXhpc3QgKi8NCisJZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgU1lTQURQVF9NQVhfTlVNX0NIQU5ORUxTOyBpbmRleCsrKSB7DQorCQlzdHJ1 Y3QgbXdsX3R4X3B3cl90YmwgKnR4X3B3cjsNCisNCisJCXR4X3B3ciA9ICZwcml2LT50eF9wd3Jf dGJsW2luZGV4XTsNCisNCisJCS8qIGRvIG5vdGhpbmcgaWYgdGFibGUgaXMgbm90IGxvYWRlZCAq Lw0KKwkJaWYgKHR4X3B3ci0+Y2hhbm5lbCA9PSAwKQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYgKHR4 X3B3ci0+Y2hhbm5lbCA9PSBjaGFubmVsLT5od192YWx1ZSkgew0KKwkJCXByaXYtPmNkZCA9IHR4 X3B3ci0+Y2RkOw0KKwkJCXByaXYtPnR4YW50ZW5uYTIgPSB0eF9wd3ItPnR4YW50ZW5uYTI7DQor DQorCQkJaWYgKHR4X3B3ci0+c2V0Y2FwKQ0KKwkJCQlwcml2LT5wb3dpbml0ZWQgPSBNV0xfUE9X RVJfSU5JVF8xOw0KKwkJCWVsc2UNCisJCQkJcHJpdi0+cG93aW5pdGVkID0gTVdMX1BPV0VSX0lO SVRfMjsNCisNCisJCQlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RB TDsgaSsrKSB7DQorCQkJCWlmICh0eF9wd3ItPnNldGNhcCkNCisJCQkJCXByaXYtPm1heF90eF9w b3dbaV0gPQ0KKwkJCQkJCXR4X3B3ci0+dHhfcG93ZXJbaV07DQorCQkJCWVsc2UNCisJCQkJCXBy aXYtPnRhcmdldF9wb3dlcnNbaV0gPQ0KKwkJCQkJCXR4X3B3ci0+dHhfcG93ZXJbaV07DQorCQkJ fQ0KKw0KKwkJCWZvdW5kID0gMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwlpZiAoKHBy aXYtPnBvd2luaXRlZCAmIE1XTF9QT1dFUl9JTklUXzIpID09IDApIHsNCisJCW13bF9md2NtZF9n ZXRfdHhfcG93ZXJzKHByaXYsIHByaXYtPm1heF90eF9wb3csDQorCQkJCQljaGFubmVsLT5od192 YWx1ZSwgYmFuZCwgd2lkdGgsIHN1Yl9jaCk7DQorDQorCQlwcml2LT5wb3dpbml0ZWQgfD0gTVdM X1BPV0VSX0lOSVRfMjsNCisJfQ0KKw0KKwlpZiAoKHByaXYtPnBvd2luaXRlZCAmIE1XTF9QT1dF Ul9JTklUXzEpID09IDApIHsNCisJCW13bF9md2NtZF9nZXRfdHhfcG93ZXJzKHByaXYsIHByaXYt PnRhcmdldF9wb3dlcnMsDQorCQkJCQljaGFubmVsLT5od192YWx1ZSwgYmFuZCwgd2lkdGgsIHN1 Yl9jaCk7DQorDQorCQlwcml2LT5wb3dpbml0ZWQgfD0gTVdMX1BPV0VSX0lOSVRfMTsNCisJfQ0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9QT1dFUl9MRVZFTF9UT1RBTDsgaSsrKSB7 DQorCQlpZiAoZm91bmQpIHsNCisJCQlpZiAoKHByaXYtPnR4X3B3cl90YmxbaW5kZXhdLnNldGNh cCkgJiYNCisJCQkgICAgKHByaXYtPnR4X3B3cl90YmxbaW5kZXhdLnR4X3Bvd2VyW2ldID4NCisJ CQkgICAgcHJpdi0+bWF4X3R4X3Bvd1tpXSkpDQorCQkJCXRtcCA9IHByaXYtPm1heF90eF9wb3db aV07DQorCQkJZWxzZQ0KKwkJCQl0bXAgPSBwcml2LT50eF9wd3JfdGJsW2luZGV4XS50eF9wb3dl cltpXTsNCisJCX0gZWxzZSB7DQorCQkJaWYgKHByaXYtPnRhcmdldF9wb3dlcnNbaV0gPiBwcml2 LT5tYXhfdHhfcG93W2ldKQ0KKwkJCQl0bXAgPSBwcml2LT5tYXhfdHhfcG93W2ldOw0KKwkJCWVs c2UNCisJCQkJdG1wID0gcHJpdi0+dGFyZ2V0X3Bvd2Vyc1tpXTsNCisJCX0NCisNCisJCXR4cG93 W2ldID0gKCh0bXAgLSByZWR1Y2VfdmFsKSA+IDApID8gKHRtcCAtIHJlZHVjZV92YWwpIDogMDsN CisJfQ0KKw0KKwlyYyA9IG13bF9md2NtZF9zZXRfdHhfcG93ZXJzKHByaXYsIHR4cG93LCBIT1NU Q01EX0FDVF9HRU5fU0VUX0xJU1QsDQorCQkJCSAgICAgY2hhbm5lbC0+aHdfdmFsdWUsIGJhbmQs IHdpZHRoLCBzdWJfY2gpOw0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf cmZfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRpciwgaW50IGFudGVubmEp DQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3Rj bWRfY21kXzgwMl8xMV9yZl9hbnRlbm5hICpwY21kOw0KKw0KKwlpZiAocHJpdi0+bWZnX21vZGUp DQorCQlyZXR1cm4gMDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3Jm X2FudGVubmEgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ cGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84MDJfMTFfUkZfQU5U RU5OQSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7 DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGRpcik7DQorDQorCWlmIChkaXIgPT0g V0xfQU5URU5OQVRZUEVfUlgpIHsNCisJCXU4IHJ4X2FudGVubmEgPSA0OyAvKiBpZiBhdXRvLCBz ZXQgNCByeCBhbnRlbm5hcyBpbiBTQzIgKi8NCisNCisJCWlmIChhbnRlbm5hICE9IDApDQorCQkJ cGNtZC0+YW50ZW5uYV9tb2RlID0gY3B1X3RvX2xlMTYoYW50ZW5uYSk7DQorCQllbHNlDQorCQkJ cGNtZC0+YW50ZW5uYV9tb2RlID0gY3B1X3RvX2xlMTYocnhfYW50ZW5uYSk7DQorCX0gZWxzZSB7 DQorCQl1OCB0eF9hbnRlbm5hID0gMHhmOyAvKiBpZiBhdXRvLCBzZXQgNCB0eCBhbnRlbm5hcyBp biBTQzIgKi8NCisNCisJCWlmIChhbnRlbm5hICE9IDApDQorCQkJcGNtZC0+YW50ZW5uYV9tb2Rl ID0gY3B1X3RvX2xlMTYoYW50ZW5uYSk7DQorCQllbHNlDQorCQkJcGNtZC0+YW50ZW5uYV9tb2Rl ID0gY3B1X3RvX2xlMTYodHhfYW50ZW5uYSk7DQorCX0NCisNCisJaWYgKG13bF9md2NtZF9leGVj X2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFfUkZfQU5URU5OQSkpIHsNCisJCXNwaW5fdW5s b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWls ZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2Nr X2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xf ZndjbWRfYnJvYWRjYXN0X3NzaWRfZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJ CQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7 DQorCXN0cnVjdCBob3N0Y21kX2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUgKnBjbWQ7DQorDQor CW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9z dGNtZF9jbWRfYnJvYWRjYXN0X3NzaWRfZW5hYmxlICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0K KwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgw MCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9T VENNRF9DTURfQlJPQURDQVNUX1NTSURfRU5BQkxFKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92 aWYtPm1hY2lkOw0KKwlwY21kLT5lbmFibGUgPSBjcHVfdG9fbGUzMihlbmFibGUpOw0KKw0KKwlp ZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VO QUJMRSkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5 X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0K Kwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X3JmX2NoYW5uZWwoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpDQorew0KKwlz dHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjb25mLT5jaGFuZGVmLmNoYW47DQor CXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRf c2V0X3JmX2NoYW5uZWwgKnBjbWQ7DQorCXUzMiBjaG5sX2ZsYWdzLCBmcmVxX2JhbmQsIGNobmxf d2lkdGgsIGFjdF9wcmltYXJ5Ow0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRf cmZfY2hhbm5lbCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2 LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0K KwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9SRl9DSEFO TkVMKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN CisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoV0xfU0VUKTsNCisJcGNtZC0+Y3Vycl9jaG5s ID0gY2hhbm5lbC0+aHdfdmFsdWU7DQorDQorCWlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIx MV9CQU5EXzJHSFopIHsNCisJCWZyZXFfYmFuZCA9IEZSRVFfQkFORF8yRE9UNEdIWjsNCisJfSBl bHNlIGlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsNCisJCWZyZXFf YmFuZCA9IEZSRVFfQkFORF81R0haOw0KKwl9IGVsc2Ugew0KKwkJc3Bpbl91bmxvY2tfYmgoJnBy aXYtPmZ3Y21kX2xvY2spOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJc3dpdGNoIChj b25mLT5jaGFuZGVmLndpZHRoKSB7DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQ6 DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwOg0KKwkJY2hubF93aWR0aCA9IENIXzIwX01I Wl9XSURUSDsNCisJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJYnJlYWs7 DQorCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzQwOg0KKwkJY2hubF93aWR0aCA9IENIXzQwX01I Wl9XSURUSDsNCisJCWlmIChjb25mLT5jaGFuZGVmLmNlbnRlcl9mcmVxMSA+IGNoYW5uZWwtPmNl bnRlcl9mcmVxKQ0KKwkJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KKwkJZWxz ZQ0KKwkJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KKwkJYnJlYWs7DQorCWNh c2UgTkw4MDIxMV9DSEFOX1dJRFRIXzgwOg0KKwkJY2hubF93aWR0aCA9IENIXzgwX01IWl9XSURU SDsNCisJCWFjdF9wcmltYXJ5ID0NCisJCQltd2xfZndjbWRfZ2V0XzgwbV9wcmlfY2hubF9vZmZz ZXQocGNtZC0+Y3Vycl9jaG5sKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJc3Bpbl91bmxv Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJ Y2hubF9mbGFncyA9IChmcmVxX2JhbmQgJiBGUkVRX0JBTkRfTUFTSykgfA0KKwkJKChjaG5sX3dp ZHRoIDw8IENITkxfV0lEVEhfU0hJRlQpICYgQ0hOTF9XSURUSF9NQVNLKSB8DQorCQkoKGFjdF9w cmltYXJ5IDw8IEFDVF9QUklNQVJZX1NISUZUKSAmIEFDVF9QUklNQVJZX01BU0spOw0KKw0KKwlw Y21kLT5jaG5sX2ZsYWdzID0gY3B1X3RvX2xlMzIoY2hubF9mbGFncyk7DQorDQorCWlmIChtd2xf ZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX1JGX0NIQU5ORUwpKSB7DQorCQlz cGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5 LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGlu X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitp bnQgbXdsX2Z3Y21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqYnNzaWQsIHUxNiBhaWQpDQorew0KKwlzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7 DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYWlkICpwY21kOw0KKw0KKwltd2xfdmlmID0gbXds X2Rldl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9h aWQgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRf bG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+ Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfQUlEKTsNCisJcGNtZC0+ Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hk ci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKwlwY21kLT5haWQgPSBjcHVfdG9fbGUxNihhaWQp Ow0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIGJzc2lkKTsNCisNCisJaWYgKG13 bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfQUlEKSkgew0KKwkJc3Bpbl91 bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZh aWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxv Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13 bF9md2NtZF9zZXRfaW5mcmFfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAg IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYg PSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21k X2NtZF9zZXRfaW5mcmFfbW9kZSAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13bF9kZXZfZ2V0X3Zp Zih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaW5mcmFfbW9kZSAq KSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2Nr KTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRf aGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFKTsNCisJcGNt ZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21k X2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21k KHByaXYsIEhPU1RDTURfQ01EX1NFVF9JTkZSQV9NT0RFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgo JnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVj dXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnBy aXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9z ZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHRocmVzaG9sZCkN Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNt ZF9jbWRfODAyXzExX3J0c190aHNkICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21k X2NtZF84MDJfMTFfcnRzX3Roc2QgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9j a19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2Yo KnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF84 MDJfMTFfUlRTX1RIU0QpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVv ZigqcGNtZCkpOw0KKwlwY21kLT5hY3Rpb24gID0gY3B1X3RvX2xlMTYoV0xfU0VUKTsNCisJcGNt ZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYodGhyZXNob2xkKTsNCisNCisJaWYgKG13bF9md2Nt ZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF84MDJfMTFfUlRTX1RIU0QpKSB7DQorCQlzcGlu X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAi ZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3Vu bG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQg bXdsX2Z3Y21kX3NldF9lZGNhX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaW5k ZXgsDQorCQkJICAgICAgdTE2IGN3X21pbiwgdTE2IGN3X21heCwgdTggYWlmcywgdTE2IHR4b3Ap DQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3Rj bWRfY21kX3NldF9lZGNhX3BhcmFtcyAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt ZF9jbWRfc2V0X2VkY2FfcGFyYW1zICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xv Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9m KCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURf U0VUX0VEQ0FfUEFSQU1TKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXpl b2YoKnBjbWQpKTsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsNCisJ cGNtZC0+dHhvcCA9IGNwdV90b19sZTE2KHR4b3ApOw0KKwlwY21kLT5jd19tYXggPSBjcHVfdG9f bGUzMihpbG9nMihjd19tYXggKyAxKSk7DQorCXBjbWQtPmN3X21pbiA9IGNwdV90b19sZTMyKGls b2cyKGN3X21pbiArIDEpKTsNCisJcGNtZC0+YWlmc24gPSBhaWZzOw0KKwlwY21kLT50eHFfbnVt ID0gaW5kZXg7DQorDQorCS8qIFRoZSBhcnJheSBpbmRleCBkZWZpbmVkIGluIHFvcy5oIGhhcyBh IHJldmVyc2VkIGJrIGFuZCBiZS4NCisJICogVGhlIEhXIHF1ZXVlIHdhcyBub3QgdXNlZCB0aGlz IHdheTsgdGhlIHFvcyBjb2RlIG5lZWRzIHRvDQorCSAqIGJlIGNoYW5nZWQgb3IgY2hlY2tlZA0K KwkgKi8NCisJaWYgKGluZGV4ID09IDApDQorCQlwY21kLT50eHFfbnVtID0gMTsNCisJZWxzZSBp ZiAoaW5kZXggPT0gMSkNCisJCXBjbWQtPnR4cV9udW0gPSAwOw0KKw0KKwlpZiAobXdsX2Z3Y21k X2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9FRENBX1BBUkFNUykpIHsNCisJCXNwaW5f dW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJm YWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5s b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBt d2xfZndjbWRfc2V0X3dtbV9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJs ZSkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9z dGNtZF9jbWRfc2V0X3dtbV9tb2RlICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21k X2NtZF9zZXRfd21tX21vZGUgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19i aCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBj bWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRf V01NX01PREUpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNt ZCkpOw0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyBXTF9FTkFCTEUgOiBX TF9ESVNBQkxFKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NN RF9TRVRfV01NX01PREUpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7 DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1 cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2h0X2d1YXJkX2ludGVydmFsKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgZ2lfdHlwZSkNCit7DQorCXN0cnVjdCBtd2xfcHJp diAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfaHRfZ3VhcmRfaW50ZXJ2 YWwgKnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2h0X2d1YXJkX2ludGVy dmFsICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwp Ow0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlw Y21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihXTF9TRVQpOw0KKwlwY21kLT5naV90eXBlID0gY3B1 X3RvX2xlMzIoZ2lfdHlwZSk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9T VENNRF9DTURfSFRfR1VBUkRfSU5URVJWQUwpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3VzZV9maXhl ZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgbWNhc3QsIGludCBtZ210KQ0KK3sN CisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2Nt ZF9zZXRfZml4ZWRfcmF0ZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRf c2V0X2ZpeGVkX3JhdGUgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgm cHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQp KTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfRklY RURfUkFURSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21k KSk7DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKEhPU1RDTURfQUNUX05PVF9VU0Vf RklYRURfUkFURSk7DQorCXBjbWQtPm11bHRpY2FzdF9yYXRlID0gbWNhc3Q7DQorCXBjbWQtPm1h bmFnZW1lbnRfcmF0ZSA9IG1nbXQ7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwg SE9TVENNRF9DTURfU0VUX0ZJWEVEX1JBVEUpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxu Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+Zndj bWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3NldF9saW5r YWRhcHRfY3NfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGNzX21vZGUpDQorew0K KwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IGhvc3RjbWRfY21k X3NldF9saW5rYWRhcHRfY3NfbW9kZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt ZF9jbWRfc2V0X2xpbmthZGFwdF9jc19tb2RlICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlz cGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwg c2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENN RF9DTURfU0VUX0xJTktBREFQVF9DU19NT0RFKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVf dG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+YWN0aW9uICA9IGNwdV90b19sZTE2KEhP U1RDTURfQUNUX0dFTl9TRVQpOw0KKwlwY21kLT5jc19tb2RlID0gY3B1X3RvX2xlMTYoY3NfbW9k ZSk7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX0xJ TktBREFQVF9DU19NT0RFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2sp Ow0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0 dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2Rl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgbW9kZSkNCit7DQorCXN0cnVjdCBtd2xfcHJp diAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3JhdGVfYWRhcHRf bW9kZSAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3JhdGVfYWRh cHRfbW9kZSAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5m d2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlw Y21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9SQVRFX0FEQVBU X01PREUpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkp Ow0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihXTF9TRVQpOw0KKwlwY21kLT5yYXRlX2Fk YXB0X21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2Nt ZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFKSkgew0KKwkJc3Bpbl91bmxv Y2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxl ZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tf YmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9m d2NtZF9zZXRfbWFjX2FkZHJfY2xpZW50KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkg IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICptYWNfYWRkcikNCit7DQorCXN0cnVjdCBt d2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJ c3RydWN0IGhvc3RjbWRfY21kX3NldF9tYWNfYWRkciAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13 bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRf bWFjX2FkZHIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorDQorCW1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJ cGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfTUFDX0FERFIp Ow0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlw Y21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPm1hY190eXBlID0g Y3B1X3RvX2xlMTYoV0xfTUFDX1RZUEVfU0VDT05EQVJZX0NMSUVOVCk7DQorCWV0aGVyX2FkZHJf Y29weShwY21kLT5tYWNfYWRkciwgbWFjX2FkZHIpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNf Y21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9NQUNfQUREUikpIHsNCisJCXNwaW5fdW5sb2NrX2Jo KCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhl Y3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf Z2V0X3dhdGNoZG9nX2JpdG1hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmJpdG1hcCkN Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNt ZF9jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcCAqcGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9z dGNtZF9jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJ c3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAs IHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RD TURfQ01EX0dFVF9XQVRDSERPR19CSVRNQVApOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90 b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYs IEhPU1RDTURfQ01EX0dFVF9XQVRDSERPR19CSVRNQVApKSB7DQorCQlzcGluX3VubG9ja19iaCgm cHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1 dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwkqYml0bWFwID0gcGNtZC0+d2F0 Y2hkb2dfYml0bWFwOw0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3JlbW92ZV9tYWNfYWRkcihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LCB1OCAqbWFjX2FkZHIpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsN CisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbWFj X2FkZHIgKnBjbWQ7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJ cGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X21hY19hZGRyICopJnByaXYtPnBjbWRfYnVm WzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQo cGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3Rv X2xlMTYoSE9TVENNRF9DTURfREVMX01BQ19BRERSKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92 aWYtPm1hY2lkOw0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG1hY19hZGRyKTsN CisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9ERUxfTUFDX0FE RFIpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGVuYWJsZSkNCit7DQorCXN0 cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3Zp ZjsNCisJc3RydWN0IGhvc3RjbWRfY21kX2Jzc19zdGFydCAqcGNtZDsNCisNCisJbXdsX3ZpZiA9 IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlpZiAoZW5hYmxlICYmIChwcml2LT5ydW5uaW5n X2Jzc2VzICYgKDEgPDwgbXdsX3ZpZi0+bWFjaWQpKSkNCisJCXJldHVybiAwOw0KKw0KKwlpZiAo IWVuYWJsZSAmJiAhKHByaXYtPnJ1bm5pbmdfYnNzZXMgJiAoMSA8PCBtd2xfdmlmLT5tYWNpZCkp KQ0KKwkJcmV0dXJuIDA7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Jzc19zdGFy dCAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9s b2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j bWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX0JTU19TVEFSVCk7DQorCXBjbWQt PmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9o ZHIubWFjaWQgPSBtd2xfdmlmLT5tYWNpZDsNCisNCisJaWYgKGVuYWJsZSkgew0KKwkJcGNtZC0+ ZW5hYmxlID0gY3B1X3RvX2xlMzIoV0xfRU5BQkxFKTsNCisJfSBlbHNlIHsNCisJCWlmIChtd2xf dmlmLT5tYWNpZCA9PSAwKQ0KKwkJCXBjbWQtPmVuYWJsZSA9IGNwdV90b19sZTMyKFdMX0RJU0FC TEUpOw0KKwkJZWxzZQ0KKwkJCXBjbWQtPmVuYWJsZSA9IGNwdV90b19sZTMyKFdMX0RJU0FCTEVf Vk1BQyk7DQorCX0NCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NN RF9CU1NfU1RBUlQpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQor CQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4g LUVJTzsNCisJfQ0KKw0KKwlpZiAoZW5hYmxlKQ0KKwkJcHJpdi0+cnVubmluZ19ic3NlcyB8PSAo MSA8PCBtd2xfdmlmLT5tYWNpZCk7DQorCWVsc2UNCisJCXByaXYtPnJ1bm5pbmdfYnNzZXMgJj0g figxIDw8IG13bF92aWYtPm1hY2lkKTsNCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfYmVhY29u KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LCB1OCAqYmVhY29uLCBpbnQgbGVuKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct PnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rl dl9nZXRfdmlmKHZpZik7DQorDQorCW13bF9md2NtZF9wYXJzZV9iZWFjb24ocHJpdiwgbXdsX3Zp ZiwgYmVhY29uLCBsZW4pOw0KKw0KKwlpZiAobXdsX2Z3Y21kX3NldF9pZXMocHJpdiwgbXdsX3Zp ZikpDQorCQlnb3RvIGVycjsNCisNCisJaWYgKG13bF9md2NtZF9zZXRfYXBfYmVhY29uKHByaXYs IG13bF92aWYsICZ2aWYtPmJzc19jb25mKSkNCisJCWdvdG8gZXJyOw0KKw0KKwltd2xfdmlmLT5i ZWFjb25faW5mby52YWxpZCA9IGZhbHNlOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnI6DQorDQor CW13bF92aWYtPmJlYWNvbl9pbmZvLnZhbGlkID0gZmFsc2U7DQorDQorCXJldHVybiAtRUlPOw0K K30NCisNCitpbnQgbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgIHN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo dy0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2Nt ZF9zZXRfbmV3X3N0biAqcGNtZDsNCisJdTMyIHJhdGVzOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rl dl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9uZXdf c3RuICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfU0VUX05FV19TVE4pOw0KKwlw Y21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j bWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXBjbWQtPmFjdGlvbiA9IGNwdV90 b19sZTE2KEhPU1RDTURfQUNUX1NUQV9BQ1RJT05fQUREKTsNCisJaWYgKHZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQlwY21kLT5haWQgPSAwOw0KKwkJcGNtZC0+c3Ru X2lkID0gMDsNCisJfSBlbHNlIHsNCisJCXBjbWQtPmFpZCA9IGNwdV90b19sZTE2KHN0YS0+YWlk KTsNCisJCXBjbWQtPnN0bl9pZCA9IGNwdV90b19sZTE2KHN0YS0+YWlkKTsNCisJfQ0KKwlldGhl cl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIHN0YS0+YWRkcik7DQorDQorCWlmIChody0+Y29u Zi5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikNCisJCXJhdGVzID0g c3RhLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOw0KKwllbHNlDQorCQlyYXRlcyA9 IHN0YS0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF81R0haXSA8PCA1Ow0KKwlwY21kLT5wZWVy X2luZm8ubGVnYWN5X3JhdGVfYml0bWFwID0gY3B1X3RvX2xlMzIocmF0ZXMpOw0KKw0KKwlpZiAo c3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7DQorCQlwY21kLT5wZWVyX2luZm8uaHRfcmF0ZXNb MF0gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1swXTsNCisJCXBjbWQtPnBlZXJfaW5mby5odF9y YXRlc1sxXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdOw0KKwkJcGNtZC0+cGVlcl9pbmZv Lmh0X3JhdGVzWzJdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl07DQorCQlwY21kLT5wZWVy X2luZm8uaHRfcmF0ZXNbM10gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1szXTsNCisJCXBjbWQt PnBlZXJfaW5mby5odF9jYXBfaW5mbyA9IGNwdV90b19sZTE2KHN0YS0+aHRfY2FwLmNhcCk7DQor CQlwY21kLT5wZWVyX2luZm8ubWFjX2h0X3BhcmFtX2luZm8gPQ0KKwkJCShzdGEtPmh0X2NhcC5h bXBkdV9mYWN0b3IgJiAzKSB8DQorCQkJKChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ICYgNykg PDwgMik7DQorCX0NCisNCisJaWYgKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSB7DQorCQlw Y21kLT5wZWVyX2luZm8udmh0X21heF9yeF9tY3MgPQ0KKwkJCWNwdV90b19sZTMyKCooKHUzMiAq KQ0KKwkJCSZzdGEtPnZodF9jYXAudmh0X21jcy5yeF9tY3NfbWFwKSk7DQorCQlwY21kLT5wZWVy X2luZm8udmh0X2NhcCA9IGNwdV90b19sZTMyKHN0YS0+dmh0X2NhcC5jYXApOw0KKwkJcGNtZC0+ cGVlcl9pbmZvLnZodF9yeF9jaGFubmVsX3dpZHRoID0gc3RhLT5iYW5kd2lkdGg7DQorCX0NCisN CisJcGNtZC0+aXNfcW9zX3N0YSA9IHN0YS0+d21lOw0KKwlwY21kLT5xb3NfaW5mbyA9ICgoc3Rh LT51YXBzZF9xdWV1ZXMgPDwgNCkgfCAoc3RhLT5tYXhfc3AgPDwgMSkpOw0KKw0KKwlpZiAobXds X2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKSkgew0KKwkJc3Bp bl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg ImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJaWYgKHZp Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQlldGhlcl9hZGRyX2NvcHko cGNtZC0+bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0KKw0KKwkJaWYgKG13bF9md2NtZF9l eGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTikpIHsNCisJCQlzcGluX3VubG9j a19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxl ZCBleGVjdXRpb25cbiIpOw0KKwkJCXJldHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXNwaW5f dW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2lu dCBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkX3NlbGYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs DQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3By aXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVj dCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0biAqcGNtZDsNCisNCisJbXdsX3ZpZiA9IG13bF9kZXZf Z2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0 biAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9s b2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5j bWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKTsNCisJcGNt ZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21k X2hkci5tYWNpZCA9IG13bF92aWYtPm1hY2lkOw0KKw0KKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9f bGUxNihIT1NUQ01EX0FDVF9TVEFfQUNUSU9OX0FERCk7DQorCWV0aGVyX2FkZHJfY29weShwY21k LT5tYWNfYWRkciwgdmlmLT5hZGRyKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2 LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m d2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4i KTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2Nt ZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X25ld19z dG5fZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsIHU4ICphZGRyKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct PnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRf c2V0X25ld19zdG4gKnBjbWQ7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsN CisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19zdG4gKikmcHJpdi0+cGNt ZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCW1l bXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5jbWQgPSBj cHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTik7DQorCXBjbWQtPmNtZF9oZHIubGVu ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIubWFjaWQgPSBt d2xfdmlmLT5tYWNpZDsNCisNCisJcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9B Q1RfU1RBX0FDVElPTl9SRU1PVkUpOw0KKwlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIs IGFkZHIpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NF VF9ORVdfU1ROKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJ d2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1F SU87DQorCX0NCisNCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7 DQorCQlldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0K Kw0KKwkJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfTkVXX1NU TikpIHsNCisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQkJd2lwaHlf ZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJCXJldHVybiAtRUlPOw0K KwkJfQ0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X2FwbW9kZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgdTggYXBtb2RlKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct PnByaXY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYXBtb2RlICpwY21kOw0KKw0KKwlwY21k ID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfYXBtb2RlICopJnByaXYtPnBjbWRfYnVmWzBdOw0K Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwg MHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYo SE9TVENNRF9DTURfU0VUX0FQTU9ERSk7DQorCXBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xl MTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmFwbW9kZSA9IGFwbW9kZTsNCisNCisJaWYgKG13 bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFKSkgew0KKwkJc3Bp bl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg ImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91 bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50 IG13bF9md2NtZF91cGRhdGVfZW5jcnlwdGlvbl9lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsDQorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkgICAgICAg dTggKmFkZHIsIHU4IGVuY3JfdHlwZSkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3 LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGhvc3RjbWRfY21k X3VwZGF0ZV9lbmNyeXB0aW9uICpwY21kOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRfdmlm KHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3VwZGF0ZV9lbmNyeXB0aW9u ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xv Y2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNt ZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfVVBEQVRFX0VOQ1JZUFRJT04pOw0K KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k LT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXBjbWQtPmFjdGlvbl90eXBl ID0gY3B1X3RvX2xlMzIoRU5DUl9BQ1RJT05fRU5BQkxFX0hXX0VOQ1IpOw0KKwlldGhlcl9hZGRy X2NvcHkocGNtZC0+bWFjX2FkZHIsIGFkZHIpOw0KKwlwY21kLT5hY3Rpb25fZGF0YVswXSA9IGVu Y3JfdHlwZTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9V UERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2Nr KTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJl dHVybiAtRUlPOw0KKwl9DQorDQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTikgew0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobXdsX3ZpZi0+YnNzaWQsIGFkZHIpKQ0K KwkJCWV0aGVyX2FkZHJfY29weShwY21kLT5tYWNfYWRkciwgbXdsX3ZpZi0+c3RhX21hYyk7DQor CQllbHNlDQorCQkJZXRoZXJfYWRkcl9jb3B5KHBjbWQtPm1hY19hZGRyLCBtd2xfdmlmLT5ic3Np ZCk7DQorDQorCQlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1VQREFU RV9FTkNSWVBUSU9OKSkgew0KKwkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsN CisJCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQkJcmV0 dXJuIC1FSU87DQorCQl9DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv Y2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3Nl dF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLCB1OCAqYWRkciwNCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkN Cit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3Zp ZiAqbXdsX3ZpZjsNCisJc3RydWN0IGhvc3RjbWRfY21kX3NldF9rZXkgKnBjbWQ7DQorCWludCBy YzsNCisJaW50IGtleW1sZW47DQorCXUzMiBhY3Rpb247DQorCXU4IGlkeDsNCisNCisJbXdsX3Zp ZiA9IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0Y21kX2Nt ZF9zZXRfa2V5ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYt PmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQor CXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfVVBEQVRFX0VOQ1JZ UFRJT04pOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkp Ow0KKwlwY21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorDQorCXJjID0gbXds X2Z3Y21kX2VuY3J5cHRpb25fc2V0X2NtZF9pbmZvKHBjbWQsIGFkZHIsIGtleSk7DQorCWlmIChy Yykgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJy KGh3LT53aXBoeSwgImVuY3J5cHRpb24gbm90IHN1cHBvcnRcbiIpOw0KKwkJcmV0dXJuIHJjOw0K Kwl9DQorDQorCWlkeCA9IGtleS0+a2V5aWR4Ow0KKw0KKwlpZiAoa2V5LT5mbGFncyAmIElFRUU4 MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkNCisJCWFjdGlvbiA9IEVOQ1JfQUNUSU9OX1RZUEVfU0VU X0tFWTsNCisJZWxzZQ0KKwkJYWN0aW9uID0gRU5DUl9BQ1RJT05fVFlQRV9TRVRfR1JPVVBfS0VZ Ow0KKw0KKwlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVf V0VQNDA6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0Og0KKwkJaWYgKCFtd2xfdmlm LT53ZXBfa2V5X2NvbmZbaWR4XS5lbmFibGVkKSB7DQorCQkJbWVtY3B5KG13bF92aWYtPndlcF9r ZXlfY29uZltpZHhdLmtleSwga2V5LA0KKwkJCSAgICAgICBzaXplb2YoKmtleSkgKyBrZXktPmtl eWxlbik7DQorCQkJbXdsX3ZpZi0+d2VwX2tleV9jb25mW2lkeF0uZW5hYmxlZCA9IDE7DQorCQl9 DQorDQorCQlrZXltbGVuID0ga2V5LT5rZXlsZW47DQorCQlhY3Rpb24gPSBFTkNSX0FDVElPTl9U WVBFX1NFVF9LRVk7DQorCQlicmVhazsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOg0K KwkJa2V5bWxlbiA9IE1BWF9FTkNSX0tFWV9MRU5HVEggKyAyICogTUlDX0tFWV9MRU5HVEg7DQor CQlicmVhazsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOg0KKwkJa2V5bWxlbiA9IGtl eS0+a2V5bGVuOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlzcGluX3VubG9ja19iaCgmcHJp di0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZW5jcnlwdGlvbiBub3Qg c3VwcG9ydFxuIik7DQorCQlyZXR1cm4gLUVOT1RTVVBQOw0KKwl9DQorDQorCW1lbWNweSgodm9p ZCAqKSZwY21kLT5rZXlfcGFyYW0ua2V5LCBrZXktPmtleSwga2V5bWxlbik7DQorCXBjbWQtPmFj dGlvbl90eXBlID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVj X2NtZChwcml2LCBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5s b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWls ZWQgZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCWlmICh2aWYtPnR5 cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgew0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwo bXdsX3ZpZi0+YnNzaWQsIGFkZHIpKQ0KKwkJCWV0aGVyX2FkZHJfY29weShwY21kLT5rZXlfcGFy YW0ubWFjX2FkZHIsDQorCQkJCQltd2xfdmlmLT5zdGFfbWFjKTsNCisJCWVsc2UNCisJCQlldGhl cl9hZGRyX2NvcHkocGNtZC0+a2V5X3BhcmFtLm1hY19hZGRyLA0KKwkJCQkJbXdsX3ZpZi0+YnNz aWQpOw0KKw0KKwkJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9VUERB VEVfRU5DUllQVElPTikpIHsNCisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7 DQorCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJCXJl dHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9s b2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfZW5jcnlwdGlvbl9y ZW1vdmVfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkgICAgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwgdTggKmFkZHIsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9j b25mICprZXkpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3Ry dWN0IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfa2V5ICpwY21k Ow0KKwlpbnQgcmM7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCisNCisJ cGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2tleSAqKSZwcml2LT5wY21kX2J1ZlswXTsN CisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQs IDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2 KEhPU1RDTURfQ01EX1VQREFURV9FTkNSWVBUSU9OKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBj cHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsNCisJcGNtZC0+Y21kX2hkci5tYWNpZCA9IG13bF92 aWYtPm1hY2lkOw0KKw0KKwlyYyA9IG13bF9md2NtZF9lbmNyeXB0aW9uX3NldF9jbWRfaW5mbyhw Y21kLCBhZGRyLCBrZXkpOw0KKwlpZiAocmMpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m d2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJlbmNyeXB0aW9uIG5vdCBzdXBw b3J0XG4iKTsNCisJCXJldHVybiByYzsNCisJfQ0KKw0KKwlwY21kLT5hY3Rpb25fdHlwZSA9IGNw dV90b19sZTMyKEVOQ1JfQUNUSU9OX1RZUEVfUkVNT1ZFX0tFWSk7DQorDQorCWlmIChrZXktPmNp cGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fA0KKwkgICAga2V5LT5jaXBoZXIgPT0g V0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQ0KKwkJbXdsX3ZpZi0+d2VwX2tleV9jb25mW2tleS0+ a2V5aWR4XS5lbmFibGVkID0gMDsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBI T1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTikpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2 LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhlY3V0aW9u XG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5m d2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfY2hlY2tf YmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAgc3RydWN0IG13bF9hbXBkdV9z dHJlYW0gKnN0cmVhbSwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sN CisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBtd2xfdmlmICpt d2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJlYW0gKnBjbWQ7DQorCXUzMiBiYV9m bGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRf dmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Jhc3RyZWFtICopJnBy aXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K Kw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIu Y21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQkFTVFJFQU0pOw0KKwlwY21kLT5jbWRfaGRy LmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLm1hY2lk ID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPmNtZF9oZHIucmVzdWx0ID0gY3B1X3RvX2xlMTYo MHhmZmZmKTsNCisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBjcHVfdG9fbGUzMihCQV9DSEVDS19T VFJFQU0pOw0KKwlldGhlcl9hZGRyX2NvcHkoJnBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5w ZWVyX21hY19hZGRyWzBdLA0KKwkJCXN0cmVhbS0+c3RhLT5hZGRyKTsNCisJcGNtZC0+YmFfaW5m by5jcmVhdGVfcGFyYW1zLnRpZCA9IHN0cmVhbS0+dGlkOw0KKwliYV90eXBlID0gQkFTVFJFQU1f RkxBR19JTU1FRElBVEVfVFlQRTsNCisJYmFfZGlyZWN0aW9uID0gQkFTVFJFQU1fRkxBR19ESVJF Q1RJT05fVVBTVFJFQU07DQorCWJhX2ZsYWdzID0gKGJhX3R5cGUgJiBCQV9UWVBFX01BU0spIHwN CisJCSgoYmFfZGlyZWN0aW9uIDw8IEJBX0RJUkVDVElPTl9TSElGVCkgJiBCQV9ESVJFQ1RJT05f TUFTSyk7DQorCXBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5mbGFncyA9IGNwdV90b19sZTMy KGJhX2ZsYWdzKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnF1ZXVlX2lkID0gc3Ry ZWFtLT5pZHg7DQorDQorCWlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURf QkFTVFJFQU0pKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3 aXBoeV9lcnIoaHctPndpcGh5LCAiY2hlY2sgYmEgZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQly ZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlpZiAocGNtZC0+Y21kX2hkci5yZXN1bHQgIT0gMCkgew0K KwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53 aXBoeSwgImNoZWNrIGJhIHJlc3VsdCBlcnJvciAlZFxuIiwNCisJCQkgIGxlMTZfdG9fY3B1KHBj bWQtPmNtZF9oZHIucmVzdWx0KSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlzcGlu X3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitp bnQgbXdsX2Z3Y21kX2NyZWF0ZV9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1 Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtLA0KKwkJCXU4IGJ1Zl9zaXplLCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7 DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJl YW0gKnBjbWQ7DQorCXUzMiBiYV9mbGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwlt d2xfdmlmID0gbXdsX2Rldl9nZXRfdmlmKHZpZik7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3Rj bWRfY21kX2Jhc3RyZWFtICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgo JnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21k KSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfQkFTVFJF QU0pOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0K KwlwY21kLT5jbWRfaGRyLm1hY2lkID0gbXdsX3ZpZi0+bWFjaWQ7DQorCXBjbWQtPmNtZF9oZHIu cmVzdWx0ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsNCisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBj cHVfdG9fbGUzMihCQV9DUkVBVEVfU1RSRUFNKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFy YW1zLmJhcl90aHJzID0gY3B1X3RvX2xlMzIoYnVmX3NpemUpOw0KKwlwY21kLT5iYV9pbmZvLmNy ZWF0ZV9wYXJhbXMud2luZG93X3NpemUgPSBjcHVfdG9fbGUzMihidWZfc2l6ZSk7DQorCWV0aGVy X2FkZHJfY29weSgmcGNtZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnBlZXJfbWFjX2FkZHJbMF0s DQorCQkJc3RyZWFtLT5zdGEtPmFkZHIpOw0KKwlwY21kLT5iYV9pbmZvLmNyZWF0ZV9wYXJhbXMu dGlkID0gc3RyZWFtLT50aWQ7DQorCWJhX3R5cGUgPSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9U WVBFOw0KKwliYV9kaXJlY3Rpb24gPSBCQVNUUkVBTV9GTEFHX0RJUkVDVElPTl9VUFNUUkVBTTsN CisJYmFfZmxhZ3MgPSAoYmFfdHlwZSAmIEJBX1RZUEVfTUFTSykgfA0KKwkJKChiYV9kaXJlY3Rp b24gPDwgQkFfRElSRUNUSU9OX1NISUZUKSAmIEJBX0RJUkVDVElPTl9NQVNLKTsNCisJcGNtZC0+ YmFfaW5mby5jcmVhdGVfcGFyYW1zLmZsYWdzID0gY3B1X3RvX2xlMzIoYmFfZmxhZ3MpOw0KKwlw Y21kLT5iYV9pbmZvLmNyZWF0ZV9wYXJhbXMucXVldWVfaWQgPSBzdHJlYW0tPmlkeDsNCisJcGNt ZC0+YmFfaW5mby5jcmVhdGVfcGFyYW1zLnBhcmFtX2luZm8gPQ0KKwkJKHN0cmVhbS0+c3RhLT5o dF9jYXAuYW1wZHVfZmFjdG9yICYNCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1Ip IHwNCisJCSgoc3RyZWFtLT5zdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8IDIpICYNCisJCSBJ RUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZKTsNCisJcGNtZC0+YmFfaW5mby5jcmVhdGVf cGFyYW1zLnJlc2V0X3NlcV9ubyA9IDE7DQorCXBjbWQtPmJhX2luZm8uY3JlYXRlX3BhcmFtcy5j dXJyZW50X3NlcSA9IGNwdV90b19sZTE2KDApOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21k KHByaXYsIEhPU1RDTURfQ01EX0JBU1RSRUFNKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYt PmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImNyZWF0ZSBiYSBmYWlsZWQg ZXhlY3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCWlmIChwY21kLT5jbWRf aGRyLnJlc3VsdCAhPSAwKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7 DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiY3JlYXRlIGJhIHJlc3VsdCBlcnJvciAlZFxuIiwN CisJCQkgIGxlMTZfdG9fY3B1KHBjbWQtPmNtZF9oZHIucmVzdWx0KSk7DQorCQlyZXR1cm4gLUVJ TlZBTDsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitpbnQgbXdsX2Z3Y21kX2Rlc3Ryb3lfYmEoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsDQorCQkJIHU4IGlkeCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9 IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfYmFzdHJlYW0gKnBjbWQ7DQorCXUzMiBi YV9mbGFncywgYmFfdHlwZSwgYmFfZGlyZWN0aW9uOw0KKw0KKwlwY21kID0gKHN0cnVjdCBob3N0 Y21kX2NtZF9iYXN0cmVhbSAqKSZwcml2LT5wY21kX2J1ZlswXTsNCisNCisJc3Bpbl9sb2NrX2Jo KCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNt ZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX0JBU1RS RUFNKTsNCisJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsN CisNCisJcGNtZC0+YWN0aW9uX3R5cGUgPSBjcHVfdG9fbGUzMihCQV9ERVNUUk9ZX1NUUkVBTSk7 DQorCWJhX3R5cGUgPSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFOw0KKwliYV9kaXJlY3Rp b24gPSBCQVNUUkVBTV9GTEFHX0RJUkVDVElPTl9VUFNUUkVBTTsNCisJYmFfZmxhZ3MgPSAoYmFf dHlwZSAmIEJBX1RZUEVfTUFTSykgfA0KKwkJKChiYV9kaXJlY3Rpb24gPDwgQkFfRElSRUNUSU9O X1NISUZUKSAmIEJBX0RJUkVDVElPTl9NQVNLKTsNCisJcGNtZC0+YmFfaW5mby5kZXN0cm95X3Bh cmFtcy5mbGFncyA9IGNwdV90b19sZTMyKGJhX2ZsYWdzKTsNCisJcGNtZC0+YmFfaW5mby5kZXN0 cm95X3BhcmFtcy5md19iYV9jb250ZXh0LmNvbnRleHQgPSBjcHVfdG9fbGUzMihpZHgpOw0KKw0K KwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0JBU1RSRUFNKSkgew0K KwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53 aXBoeSwgImRlc3Ryb3kgYmEgZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsN CisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVy biAwOw0KK30NCisNCisvKiBjYWxsZXIgbXVzdCBob2xkIHByaXYtPnN0cmVhbV9sb2NrIHdoZW4g Y2FsbGluZyB0aGUgc3RyZWFtIGZ1bmN0aW9ucyAqLw0KK3N0cnVjdCBtd2xfYW1wZHVfc3RyZWFt ICptd2xfZndjbWRfYWRkX3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJCSAg ICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJCQkgICAgICB1OCB0aWQpDQorew0K KwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJc3RydWN0IG13bF9hbXBkdV9z dHJlYW0gKnN0cmVhbTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX1RY X0FNUERVX1FVRVVFUzsgaSsrKSB7DQorCQlzdHJlYW0gPSAmcHJpdi0+YW1wZHVbaV07DQorDQor CQlpZiAoc3RyZWFtLT5zdGF0ZSA9PSBBTVBEVV9OT19TVFJFQU0pIHsNCisJCQlzdHJlYW0tPnN0 YSA9IHN0YTsNCisJCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX05FVzsNCisJCQlzdHJl YW0tPnRpZCA9IHRpZDsNCisJCQlzdHJlYW0tPmlkeCA9IGk7DQorCQkJcmV0dXJuIHN0cmVhbTsN CisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQordm9pZCBtd2xfZndjbWRfZGVs X3N0YV9zdHJlYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnBy aXY7DQorCXN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW07DQorCWludCBpOw0KKw0KKwlm b3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9BTVBEVV9RVUVVRVM7IGkrKykgew0KKwkJc3RyZWFt ID0gJnByaXYtPmFtcGR1W2ldOw0KKw0KKwkJaWYgKHN0cmVhbS0+c3RhID09IHN0YSkgew0KKwkJ CW13bF9md2NtZF9kZXN0cm95X2JhKGh3LCBzdHJlYW0tPmlkeCk7DQorCQkJbXdsX2Z3Y21kX3Jl bW92ZV9zdHJlYW0oaHcsIHN0cmVhbSk7DQorCQl9DQorCX0NCit9DQorDQoraW50IG13bF9md2Nt ZF9zdGFydF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgc3RydWN0IG13 bF9hbXBkdV9zdHJlYW0gKnN0cmVhbSkNCit7DQorCS8qIGlmIHRoZSBzdHJlYW0gaGFzIGFscmVh ZHkgYmVlbiBzdGFydGVkLCBkb24ndCBzdGFydCBpdCBhZ2FpbiAqLw0KKwlpZiAoc3RyZWFtLT5z dGF0ZSAhPSBBTVBEVV9TVFJFQU1fTkVXKQ0KKwkJcmV0dXJuIDA7DQorDQorCXJldHVybiBpZWVl ODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJlYW0tPnN0YSwgc3RyZWFtLT50aWQsIDApOw0K K30NCisNCit2b2lkIG13bF9md2NtZF9yZW1vdmVfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCSAgICAgc3RydWN0IG13bF9hbXBkdV9zdHJlYW0gKnN0cmVhbSkNCit7DQorCW1l bXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7DQorfQ0KKw0KK3N0cnVjdCBtd2xfYW1w ZHVfc3RyZWFtICptd2xfZndjbWRfbG9va3VwX3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywNCisJCQkJCQkgdTggKmFkZHIsIHU4IHRpZCkNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJp diA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtOw0KKwlpbnQg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTOyBpKyspIHsN CisJCXN0cmVhbSA9ICZwcml2LT5hbXBkdVtpXTsNCisNCisJCWlmIChzdHJlYW0tPnN0YXRlID09 IEFNUERVX05PX1NUUkVBTSkNCisJCQljb250aW51ZTsNCisNCisJCWlmIChldGhlcl9hZGRyX2Vx dWFsKHN0cmVhbS0+c3RhLT5hZGRyLCBhZGRyKSAmJg0KKwkJICAgIHN0cmVhbS0+dGlkID09IHRp ZCkNCisJCQlyZXR1cm4gc3RyZWFtOw0KKwl9DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCiti b29sIG13bF9md2NtZF9hbXBkdV9hbGxvd2VkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4 IHRpZCkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9p bmZvICp0eF9zdGF0czsNCisNCisJaWYgKFdBUk5fT04odGlkID49IFNZU0FEUFRfTUFYX1RJRCkp DQorCQlyZXR1cm4gZmFsc2U7DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7 DQorDQorCXR4X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOw0KKw0KKwlyZXR1cm4g KHN0YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkICYmDQorCQl0eF9zdGF0cy0+cGt0cyA+IFNZU0FE UFRfQU1QRFVfUEFDS0VUX1RIUkVTSE9MRCk7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRfc2V0X29w dGltaXphdGlvbl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb3B0X2xldmVsKQ0K K3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQorCXN0cnVjdCBob3N0Y21k X2NtZF9zZXRfb3B0aW1pemF0aW9uX2xldmVsICpwY21kOw0KKw0KKwlwY21kID0gKHN0cnVjdCBo b3N0Y21kX2NtZF9zZXRfb3B0aW1pemF0aW9uX2xldmVsICopJnByaXYtPnBjbWRfYnVmWzBdOw0K Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwg MHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYo SE9TVENNRF9DTURfU0VUX09QVElNSVpBVElPTl9MRVZFTCk7DQorCXBjbWQtPmNtZF9oZHIubGVu ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPm9wdF9sZXZlbCA9IG9wdF9s ZXZlbDsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRf T1BUSU1JWkFUSU9OX0xFVkVMKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv Y2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0KKwkJ cmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2sp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfZHdkc19zdGFtb2Rl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVjdCBtd2xf cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfZHdkc19lbmFibGUg KnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2R3ZHNfZW5hYmxlICopJnBy aXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0K Kw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQtPmNtZF9oZHIu Y21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfRFdEU19FTkFCTEUpOw0KKwlwY21kLT5jbWRf aGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5lbmFibGUgPSBj cHVfdG9fbGUzMihlbmFibGUpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhP U1RDTURfQ01EX0RXRFNfRU5BQkxFKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCBleGVjdXRpb25cbiIpOw0K KwkJcmV0dXJuIC1FSU87DQorCX0NCisNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xv Y2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG13bF9md2NtZF9zZXRfZndfZmx1c2hf dGltZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkNCit7DQorCXN0cnVjdCBt d2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfZndfZmx1c2hf dGltZXIgKnBjbWQ7DQorDQorCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX2Z3X2ZsdXNoX3Rp bWVyICopJnByaXYtPnBjbWRfYnVmWzBdOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPmZ3Y21k X2xvY2spOw0KKw0KKwltZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21kKSk7DQorCXBjbWQt PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfRldfRkxVU0hfVElNRVIpOw0K KwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21k LT52YWx1ZSA9IGNwdV90b19sZTMyKHZhbHVlKTsNCisNCisJaWYgKG13bF9md2NtZF9leGVjX2Nt ZChwcml2LCBIT1NUQ01EX0NNRF9GV19GTFVTSF9USU1FUikpIHsNCisJCXNwaW5fdW5sb2NrX2Jo KCZwcml2LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgZXhl Y3V0aW9uXG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2JoKCZw cml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtd2xfZndjbWRf c2V0X2NkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAq cHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2NkZCAqcGNtZDsNCisN CisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2NkZCAqKSZwcml2LT5wY21kX2J1Zlsw XTsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJbWVtc2V0KHBj bWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19s ZTE2KEhPU1RDTURfQ01EX1NFVF9DREQpOw0KKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19s ZTE2KHNpemVvZigqcGNtZCkpOw0KKwlwY21kLT5lbmFibGUgPSBjcHVfdG9fbGUzMihwcml2LT5j ZGQpOw0KKw0KKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9D REQpKSB7DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorCQl3aXBoeV9l cnIoaHctPndpcGh5LCAiZmFpbGVkIGV4ZWN1dGlvblxuIik7DQorCQlyZXR1cm4gLUVJTzsNCisJ fQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitpbnQgbXdsX2Z3Y21kX3NlbmRfbWZnX2NtZChzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYsIGNoYXIgKm1mZ2NtZCkNCit7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciAqcGNtZDsNCisJ c3RydWN0IGNtZF9oZWFkZXIgKmNtZF9oZCA9IChzdHJ1Y3QgY21kX2hlYWRlciAqKShtZmdjbWQg KyA0KTsNCisJdTE2IGxlbjsNCisJdTE2IGNtZDsNCisNCisJcGNtZCA9IChzdHJ1Y3QgaG9zdGNt ZF9oZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMF07DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+ ZndjbWRfbG9jayk7DQorDQorCWxlbiA9IGxlMTZfdG9fY3B1KGNtZF9oZC0+bGVuKTsNCisJbWVt c2V0KHBjbWQsIDB4MDAsIGxlbiArIDQpOw0KKwltZW1jcHkoKGNoYXIgKilwY21kLCBtZmdjbWQs IGxlbiArIDQpOw0KKwljbWQgPSBsZTE2X3RvX2NwdShjbWRfaGQtPmNvbW1hbmQpOw0KKwlpZiAo bXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIGNtZCkpIHsNCisJCXNwaW5fdW5sb2NrX2JoKCZwcml2 LT5md2NtZF9sb2NrKTsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJmYWlsZWQgZXhl Y3V0aW9uIik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKwljbWRfaGQgPSAoc3RydWN0IGNtZF9o ZWFkZXIgKikmcHJpdi0+cGNtZF9idWZbMl07DQorCWxlbiA9IGxlMTZfdG9fY3B1KGNtZF9oZC0+ bGVuKTsNCisJbWVtY3B5KG1mZ2NtZCwgKGNoYXIgKikmcHJpdi0+cGNtZF9idWZbMl0sIGxlbik7 DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2Nt ZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3Y21kLmgNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi43MjZiMTY5DQotLS0gL2Rldi9udWxsDQor KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndjbWQuaA0KQEAgLTAs MCArMSwxOTggQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2ZWxsIElu dGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUi KSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQuIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBK dW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRl IGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQorICogaXMg YXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j Lg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICogQVJFIEVY UFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRh aWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0KKy8qIERl c2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZmlybXdhcmUgaG9zdCBjb21tYW5kIHJlbGF0 ZWQNCisgKiBmdW5jdGlvbnMuDQorICovDQorDQorI2lmbmRlZiBfZndjbWRfaF8NCisjZGVmaW5l IF9md2NtZF9oXw0KKw0KKy8qICBEZWZpbmUgT3BNb2RlIGZvciBTb2Z0QVAvU3RhdGlvbiBtb2Rl DQorICoNCisgKiAgVGhlIGZvbGxvd2luZyBtb2RlIHNpZ25hdHVyZSBoYXMgdG8gYmUgd3JpdHRl biB0byBQQ0kgc2NyYXRjaCByZWdpc3RlciMwDQorICogIHJpZ2h0IGFmdGVyIHN1Y2Nlc3NmdWxs eSBkb3dubG9hZGluZyB0aGUgbGFzdCBibG9jayBvZiBmaXJtd2FyZSBhbmQNCisgKiAgYmVmb3Jl IHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlYWR5IHNpZ25hdHVyZQ0KKyAqLw0KKw0KKyNkZWZpbmUg SE9TVENNRF9TVEFfTU9ERSAgICAgICAgICAgICAgICAweDVBDQorI2RlZmluZSBIT1NUQ01EX1NP RlRBUF9NT0RFICAgICAgICAgICAgIDB4QTUNCisNCisjZGVmaW5lIEhPU1RDTURfU1RBX0ZXUkRZ X1NJR05BVFVSRSAgICAgMHhGMEYxRjJGNA0KKyNkZWZpbmUgSE9TVENNRF9TT0ZUQVBfRldSRFlf U0lHTkFUVVJFICAweEYxRjJGNEE1DQorDQorI2RlZmluZSBHVUFSRF9JTlRFUlZBTF9TVEFOREFS RCAgICAgICAgIDENCisjZGVmaW5lIEdVQVJEX0lOVEVSVkFMX1NIT1JUICAgICAgICAgICAgMg0K KyNkZWZpbmUgR1VBUkRfSU5URVJWQUxfQVVUTyAgICAgICAgICAgICAzDQorDQorI2RlZmluZQlM SU5LX0NTX1NUQVRFX0NPTlNFUlYgICAgICAgICAgIDANCisjZGVmaW5lCUxJTktfQ1NfU1RBVEVf QUdHUiAgICAgICAgICAgICAgMQ0KKyNkZWZpbmUJTElOS19DU19TVEFURV9BVVRPICAgICAgICAg ICAgICAyDQorI2RlZmluZQlMSU5LX0NTX1NUQVRFX0FVVE9fRElTQUJMRUQgICAgIDMNCisNCitl bnVtIHsNCisJV0xfQU5URU5OQVRZUEVfUlggPSAxLA0KKwlXTF9BTlRFTk5BVFlQRV9UWCA9IDIs DQorfTsNCisNCitlbnVtIGVuY3JfdHlwZSB7DQorCUVOQ1JfVFlQRV9XRVAgPSAwLA0KKwlFTkNS X1RZUEVfRElTQUJMRSA9IDEsDQorCUVOQ1JfVFlQRV9US0lQID0gNCwNCisJRU5DUl9UWVBFX0FF UyA9IDYsDQorCUVOQ1JfVFlQRV9NSVggPSA3LA0KK307DQorDQordm9pZCBtd2xfZndjbWRfcmVz ZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9lbmFi bGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK3ZvaWQgbXdsX2Z3Y21kX2ludF9kaXNh YmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX2dldF9od19z cGVjcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQorDQoraW50IG13bF9md2NtZF9zZXRfaHdf c3BlY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KK2ludCBtd2xfZndjbWRfZ2V0X3N0 YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9s b3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsNCisNCitpbnQgbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQorDQoraW50IG13bF9md2NtZF9yYWRpb19kaXNhYmxl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9yYWRpb19w cmVhbWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJIGJvb2wgc2hvcnRfcHJlYW1i bGUpOw0KKw0KK2ludCBtd2xfZndjbWRfZ2V0X2FkZHJfdmFsdWUoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHUzMiBhZGRyLCB1MzIgbGVuLA0KKwkJCSAgICAgdTMyICp2YWwsIHUxNiBzZXQpOw0K Kw0KK2ludCBtd2xfZndjbWRfbWF4X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K KwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwgdTggZnJhY3Rpb24pOw0KKw0KK2lu dCBtd2xfZndjbWRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgICAg c3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLCB1OCBmcmFjdGlvbik7DQorDQoraW50IG13bF9m d2NtZF9yZl9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZGlyLCBpbnQgYW50 ZW5uYSk7DQorDQoraW50IG13bF9md2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29s IGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZik7DQorDQor aW50IG13bF9md2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJICAgICAg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKmJzc2lkLCB1MTYgYWlkKTsNCisNCitpbnQg bXdsX2Z3Y21kX3NldF9pbmZyYV9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAg ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7DQorDQoraW50IG13bF9md2NtZF9zZXRfcnRz X3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJaW50IHRocmVzaG9sZCk7 DQorDQoraW50IG13bF9md2NtZF9zZXRfZWRjYV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHU4IGluZGV4LA0KKwkJCSAgICAgIHUxNiBjd19taW4sIHUxNiBjd19tYXgsIHU4IGFpZnMs IHUxNiB0eG9wKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF93bW1fbW9kZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgYm9vbCBlbmFibGUpOw0KKw0KK2ludCBtd2xfZndjbWRfaHRfZ3VhcmRfaW50 ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBnaV90eXBlKTsNCisNCitpbnQgbXds X2Z3Y21kX3VzZV9maXhlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAg aW50IG1jYXN0LCBpbnQgbWdtdCk7DQorDQoraW50IG13bF9md2NtZF9zZXRfbGlua2FkYXB0X2Nz X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgICB1MTYgY3NfbW9kZSk7DQor DQoraW50IG13bF9md2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCQkgIHUxNiBtb2RlKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9tYWNfYWRkcl9j bGllbnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwgdTggKm1hY19hZGRyKTsNCisNCitpbnQgbXdsX2Z3Y21kX2dldF93YXRjaGRvZ19i aXRtYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgdTggKmJpdG1hcCk7DQorDQor aW50IG13bF9md2NtZF9yZW1vdmVfbWFjX2FkZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQor CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKm1hY19hZGRyKTsNCisNCitp bnQgbXdsX2Z3Y21kX2Jzc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9z ZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmLCB1OCAqYmVhY29uLCBpbnQgbGVuKTsNCisNCitpbnQgbXdsX2Z3Y21kX3NldF9u ZXdfc3RuX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgICBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0K Kw0KK2ludCBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkX3NlbGYoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOw0KKw0KK2ludCBtd2xf ZndjbWRfc2V0X25ld19zdG5fZGVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAg IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICphZGRyKTsNCisNCitpbnQgbXdsX2Z3Y21k X3NldF9hcG1vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFwbW9kZSk7DQorDQoraW50 IG13bF9md2NtZF91cGRhdGVfZW5jcnlwdGlvbl9lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsDQorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkgICAgICAg dTggKmFkZHIsIHU4IGVuY3JfdHlwZSk7DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3Nl dF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLCB1OCAqYWRkciwNCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7 DQorDQoraW50IG13bF9md2NtZF9lbmNyeXB0aW9uX3JlbW92ZV9rZXkoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqYWRkciwN CisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7DQorDQoraW50IG13bF9m d2NtZF9jaGVja19iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAgICAgICBzdHJ1Y3Qg bXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtLA0KKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpOw0KKw0KK2ludCBtd2xfZndjbWRfY3JlYXRlX2JhKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCXN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW0sDQorCQkJdTggYnVmX3Np emUsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOw0KKw0KK2ludCBtd2xfZndjbWRfZGVzdHJv eV9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgdTggaWR4KTsNCisNCitzdHJ1Y3Qg bXdsX2FtcGR1X3N0cmVhbSAqbXdsX2Z3Y21kX2FkZF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsDQorCQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCQkJICAg ICAgdTggdGlkKTsNCisNCit2b2lkIG13bF9md2NtZF9kZWxfc3RhX3N0cmVhbXMoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0K Kw0KK2ludCBtd2xfZndjbWRfc3RhcnRfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K KwkJCSAgIHN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtICpzdHJlYW0pOw0KKw0KK3ZvaWQgbXdsX2Z3 Y21kX3JlbW92ZV9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1 Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtKTsNCisNCitzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVh bSAqbXdsX2Z3Y21kX2xvb2t1cF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJ CQkJIHU4ICphZGRyLCB1OCB0aWQpOw0KKw0KK2Jvb2wgbXdsX2Z3Y21kX2FtcGR1X2FsbG93ZWQo c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTsNCisNCitpbnQgbXdsX2Z3Y21kX3Nl dF9vcHRpbWl6YXRpb25fbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wdF9sZXZl bCk7DQorDQoraW50IG13bF9md2NtZF9zZXRfZHdkc19zdGFtb2RlKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBib29sIGVuYWJsZSk7DQorDQoraW50IG13bF9md2NtZF9zZXRfZndfZmx1c2hfdGlt ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7DQorDQoraW50IG13bF9md2Nt ZF9zZXRfY2RkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCisNCitpbnQgbXdsX2Z3Y21kX3Nl bmRfbWZnX2NtZChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIGNoYXIgKm1mZ2NtZCk7DQorDQorI2Vu ZGlmIC8qIF9md2NtZF9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h cnZlbGwvbXdsd2lmaS9md2RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp ZmkvZndkbC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZWM0NGFhNA0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp L2Z3ZGwuYw0KQEAgLTAsMCArMSwxOTkgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y MDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBm aWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwN CisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVz ZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5j ZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9m IHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMg YWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0K KyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgZmlybXdhcmUg ZG93bmxvYWQgcmVsYXRlZA0KKyAqIGZ1bmN0aW9ucy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGlu dXgvaW8uaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisj aW5jbHVkZSAiZndjbWQuaCINCisjaWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorI2luY2x1ZGUg Im1mZy5oIg0KKyNlbmRpZg0KKyNpbmNsdWRlICJmd2RsLmgiDQorDQorI2RlZmluZSBGV19ET1dO TE9BRF9CTE9DS19TSVpFICAgICAgICAgIDI1Ng0KKyNkZWZpbmUgRldfQ0hFQ0tfTVNFQ1MgICAg ICAgICAgICAgICAgICAzDQorDQorI2RlZmluZSBGV19NQVhfTlVNX0NIRUNLUyAgICAgICAgICAg ICAgIDB4ZmZmZg0KKw0KK3N0YXRpYyB2b2lkIG13bF9md2RsX3RyaWdfcGNpY21kKHN0cnVjdCBt d2xfcHJpdiAqcHJpdikNCit7DQorCXdyaXRlbChwcml2LT5wcGh5c19jbWRfYnVmLCBwcml2LT5p b2Jhc2UxICsgTUFDUkVHX1JFR19HRU5fUFRSKTsNCisNCisJd3JpdGVsKDB4MDAsIHByaXYtPmlv YmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisNCisJd3JpdGVsKE1BQ1JFR19IMkFSSUNf QklUX0RPT1JfQkVMTCwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0gyQV9J TlRFUlJVUFRfRVZFTlRTKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX2Z3ZGxfdHJpZ19wY2lj bWRfYm9vdGNvZGUoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJd3JpdGVsKHByaXYtPnBw aHlzX2NtZF9idWYsIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0dFTl9QVFIpOw0KKw0KKwl3 cml0ZWwoMHgwMCwgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KKw0KKwl3 cml0ZWwoTUFDUkVHX0gyQVJJQ19CSVRfRE9PUl9CRUxMLA0KKwkgICAgICAgcHJpdi0+aW9iYXNl MSArIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOw0KK30NCisNCitpbnQgbXdsX2Z3 ZGxfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpm dzsNCisJdTMyIGN1cnJfaXRlcmF0aW9uID0gMDsNCisJdTMyIHNpemVfZndfZG93bmxvYWRlZCA9 IDA7DQorCXUzMiBpbnRfY29kZSA9IDA7DQorCXUzMiBsZW4gPSAwOw0KKyNpZmRlZiBDT05GSUdf U1VQUE9SVF9NRkcNCisJdTMyIGZ3cmVhZHlzaWduYXR1cmUgPSBwcml2LT5tZmdfbW9kZSA/DQor CQlNRkdfRldfUkVBRFlfU0lHTkFUVVJFIDogSE9TVENNRF9TT0ZUQVBfRldSRFlfU0lHTkFUVVJF Ow0KKyNlbHNlDQorCXUzMiBmd3JlYWR5c2lnbmF0dXJlID0gSE9TVENNRF9TT0ZUQVBfRldSRFlf U0lHTkFUVVJFOw0KKyNlbmRpZg0KKw0KKwlmdyA9IHByaXYtPmZ3X3Vjb2RlOw0KKw0KKwltd2xf ZndjbWRfcmVzZXQoaHcpOw0KKw0KKwkvKiBGVyBiZWZvcmUganVtcGluZyB0byBib290IHJvbSwg aXQgd2lsbCBlbmFibGUgUENJZSB0cmFuc2FjdGlvbiByZXRyeSwNCisJICogd2FpdCBmb3IgYm9v dCBjb2RlIHRvIHN0b3AgaXQuDQorCSAqLw0KKwltZGVsYXkoRldfQ0hFQ0tfTVNFQ1MpOw0KKw0K Kwl3cml0ZWwoTUFDUkVHX0EySFJJQ19CSVRfTUFTSywNCisJICAgICAgIHByaXYtPmlvYmFzZTEg KyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsNCisJd3JpdGVsKDB4MDAsIHBy aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UpOw0KKwl3cml0ZWwo MHgwMCwgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9NQVNLKTsNCisJ d3JpdGVsKE1BQ1JFR19BMkhSSUNfQklUX01BU0ssDQorCSAgICAgICBwcml2LT5pb2Jhc2UxICsg TUFDUkVHX1JFR19BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsNCisNCisJLyogdGhpcyByb3V0 aW5lIGludGVyYWN0cyB3aXRoIFNDMiBib290cm9tIHRvIGRvd25sb2FkIGZpcm13YXJlIGJpbmFy eQ0KKwkgKiB0byB0aGUgZGV2aWNlLiBBZnRlciBETUEnZCB0byBTQzIsIHRoZSBmaXJtd2FyZSBj b3VsZCBiZSBkZWZsYXRlZCB0bw0KKwkgKiByZXNpZGUgb24gaXRzIHJlc3BlY3RpdmUgYmxvY2tz IHN1Y2ggYXMgSVRDTSwgRFRDTSwgU1FSQU0sDQorCSAqIChvciBldmVuIEREUiwgQUZURVIgRERS IGlzIGluaXQnZCBiZWZvcmUgZncgZG93bmxvYWQNCisJICovDQorCXdpcGh5X2luZm8oaHctPndp cGh5LCAiZncgZG93bmxvYWQgc3RhcnQgODhcbiIpOw0KKw0KKwkvKiBEaXNhYmxlIFBGVSBiZWZv cmUgRldETCAqLw0KKwl3cml0ZWwoMHgxMDAsIHByaXYtPmlvYmFzZTEgKyAweEUwRTQpOw0KKw0K KwkvKiBtYWtlIHN1cmUgU0NSQVRDSDIgQzQwIGlzIGNsZWFyLCBpbiBjYXNlIHdlIGFyZSB0b28g cXVpY2sgKi8NCisJd2hpbGUgKHJlYWRsKHByaXYtPmlvYmFzZTEgKyAweGM0MCkgPT0gMCkNCisJ CTsNCisNCisJd2hpbGUgKHNpemVfZndfZG93bmxvYWRlZCA8IGZ3LT5zaXplKSB7DQorCQlsZW4g PSByZWFkbChwcml2LT5pb2Jhc2UxICsgMHhjNDApOw0KKw0KKwkJaWYgKCFsZW4pDQorCQkJYnJl YWs7DQorDQorCQkvKiB0aGlzIGNvcGllcyB0aGUgbmV4dCBjaHVuayBvZiBmdyBiaW5hcnkgdG8g YmUgZGVsaXZlcmVkICovDQorCQltZW1jcHkoKGNoYXIgKikmcHJpdi0+cGNtZF9idWZbMF0sDQor CQkgICAgICAgKGZ3LT5kYXRhICsgc2l6ZV9md19kb3dubG9hZGVkKSwgbGVuKTsNCisNCisJCS8q IHRoaXMgZnVuY3Rpb24gd3JpdGVzIHBkYXRhIHRvIGMxMCwgdGhlbiB3cml0ZSAyIHRvIGMxOCAq Lw0KKwkJbXdsX2Z3ZGxfdHJpZ19wY2ljbWRfYm9vdGNvZGUocHJpdik7DQorDQorCQkvKiB0aGlz IGlzIGFyYml0cmFyeSBwZXIgeW91ciBwbGF0Zm9ybTsgd2UgdXNlIDB4ZmZmZiAqLw0KKwkJY3Vy cl9pdGVyYXRpb24gPSBGV19NQVhfTlVNX0NIRUNLUzsNCisNCisJCS8qIE5PVEU6IHRoZSBmb2xs b3dpbmcgYmFjayB0byBiYWNrIGNoZWNrcyBvbiBDMUMgaXMgdGltZQ0KKwkJICogc2Vuc2l0aXZl LCBoZW5jZSBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIGRlcGVuZGVudCBvbiBob3N0DQorCQkgKiBw cm9jZXNzb3IuIFRpbWUgZm9yIFNDMiB0byBnbyBmcm9tIHRoZSB3cml0ZSBvZiBldmVudCAyIHRv DQorCQkgKiBDMUMgPT0gMiBpcyB+MTMwMCBuU2VjLiBIZW5jZSB0aGUgY2hlY2tpbmdzIG9uIGhv c3QgaGFzIHRvDQorCQkgKiBjb25zaWRlciBob3cgZWZmaWNpZW50IHlvdXIgY29kZSBjYW4gYmUg dG8gbWVldCB0aGlzIHRpbWluZywNCisJCSAqIG9yIHlvdSBjYW4gYWx0ZXJuYXRpdmVseSB0d2Vh ayB0aGlzIHJvdXRpbmVzIHRvIGZpdCB5b3VyDQorCQkgKiBwbGF0Zm9ybQ0KKwkJICovDQorCQlk byB7DQorCQkJaW50X2NvZGUgPSByZWFkbChwcml2LT5pb2Jhc2UxICsgMHhjMWMpOw0KKwkJCWlm IChpbnRfY29kZSAhPSAwKQ0KKwkJCQlicmVhazsNCisJCQljdXJyX2l0ZXJhdGlvbi0tOw0KKwkJ fSB3aGlsZSAoY3Vycl9pdGVyYXRpb24pOw0KKw0KKwkJZG8gew0KKwkJCWludF9jb2RlID0gcmVh ZGwocHJpdi0+aW9iYXNlMSArIDB4YzFjKTsNCisJCQlpZiAoKGludF9jb2RlICYgTUFDUkVHX0gy QVJJQ19CSVRfRE9PUl9CRUxMKSAhPQ0KKwkJCSAgICBNQUNSRUdfSDJBUklDX0JJVF9ET09SX0JF TEwpDQorCQkJCWJyZWFrOw0KKwkJCWN1cnJfaXRlcmF0aW9uLS07DQorCQl9IHdoaWxlIChjdXJy X2l0ZXJhdGlvbik7DQorDQorCQlpZiAoY3Vycl9pdGVyYXRpb24gPT0gMCkgew0KKwkJCS8qIFRo aXMgbGltaXRlZCBsb29wIGNoZWNrIGFsbG93cyB5b3UgdG8gZXhpdCBncmFjZWZ1bGx5DQorCQkJ ICogd2l0aG91dCBsb2NraW5nIHVwIHlvdXIgZW50aXJlIHN5c3RlbSBqdXN0IGJlY2F1c2UgZncN CisJCQkgKiBkb3dubG9hZCBmYWlsZWQNCisJCQkgKi8NCisJCQl3aXBoeV9lcnIoaHctPndpcGh5 LA0KKwkJCQkgICJFeGhhdXN0ZWQgY3Vycl9pdGVyYXRpb24gZm9yIGZ3IGRvd25sb2FkXG4iKTsN CisJCQlnb3RvIGVycl9kb3dubG9hZDsNCisJCX0NCisNCisJCXNpemVfZndfZG93bmxvYWRlZCAr PSBsZW47DQorCX0NCisNCisJd2lwaHlfaW5mbyhody0+d2lwaHksDQorCQkgICAiRndTaXplID0g JWQgZG93bmxvYWRlZCBTaXplID0gJWQgY3Vycl9pdGVyYXRpb24gJWRcbiIsDQorCQkgICAoaW50 KWZ3LT5zaXplLCBzaXplX2Z3X2Rvd25sb2FkZWQsIGN1cnJfaXRlcmF0aW9uKTsNCisNCisJLyog Tm93IGZpcndhcmUgaXMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHksIHNvIHRoaXMgcGFydCBpcyB0 byBjaGVjaw0KKwkgKiB3aGV0aGVyIGZ3IGNhbiBwcm9wZXJseSBleGVjdXRlIHRvIGFuIGV4dGVu dCB0aGF0IHdyaXRlIGJhY2sNCisJICogc2lnbmF0dXJlIHRvIGluZGljYXRlIGl0cyByZWFkaW5l c3MgdG8gdGhlIGhvc3QuIE5PVEU6IGlmIHlvdXINCisJICogZG93bmxvYWRlZCBmdyBjcmFzaGVz LCB0aGlzIHNpZ25hdHVyZSBjaGVja2luZyB3aWxsIGZhaWwuIFRoaXMNCisJICogcGFydCBpcyBz aW1pbGFyIGFzIFNDMQ0KKwkgKi8NCisJKigodTMyICopJnByaXYtPnBjbWRfYnVmWzFdKSA9IDA7 DQorCW13bF9md2RsX3RyaWdfcGNpY21kKHByaXYpOw0KKwljdXJyX2l0ZXJhdGlvbiA9IEZXX01B WF9OVU1fQ0hFQ0tTOw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQl3cml0ZWwoZndyZWFkeXNp Z25hdHVyZSwgcHJpdi0+aW9iYXNlMSArIDB4Y2YwKTsNCisJZG8gew0KKwkJY3Vycl9pdGVyYXRp b24tLTsNCisJCWlmICghcHJpdi0+bWZnX21vZGUpIHsNCisJCQl3cml0ZWwoSE9TVENNRF9TT0ZU QVBfTU9ERSwNCisJCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfR0VOX1BUUik7 DQorCQkJbWRlbGF5KEZXX0NIRUNLX01TRUNTKTsNCisJCQlpbnRfY29kZSA9IHJlYWRsKHByaXYt PmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCisJCX0gZWxzZSB7DQorCQkJbWRlbGF5 KEZXX0NIRUNLX01TRUNTKTsNCisJCQlpbnRfY29kZSA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKyAw eGM0NCk7DQorCQl9DQorCQlpZiAoIShjdXJyX2l0ZXJhdGlvbiAlIDB4ZmYpKQ0KKwkJCXdpcGh5 X2Vycihody0+d2lwaHksICIleDsiLCBpbnRfY29kZSk7DQorCX0gd2hpbGUgKChjdXJyX2l0ZXJh dGlvbikgJiYNCisJCSAoaW50X2NvZGUgIT0gZndyZWFkeXNpZ25hdHVyZSkpOw0KKw0KKwlpZiAo Y3Vycl9pdGVyYXRpb24gPT0gMCkgew0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwNCisJCQkgICJF eGhhdXN0ZWQgY3Vycl9pdGVyYXRpb24gZm9yIGZ3IHNpZ25hdHVyZVxuIik7DQorCQlnb3RvIGVy cl9kb3dubG9hZDsNCisJfQ0KKw0KKwl3aXBoeV9pbmZvKGh3LT53aXBoeSwgImNvbXBsZXRlXG4i KTsNCisJd3JpdGVsKDB4MDAsIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsN CisNCisJcmV0dXJuIDA7DQorDQorZXJyX2Rvd25sb2FkOg0KKw0KKwltd2xfZndjbWRfcmVzZXQo aHcpOw0KKw0KKwlyZXR1cm4gLUVJTzsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ly ZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9md2RsLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5i MTE3MTQyDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxs L213bHdpZmkvZndkbC5oDQpAQCAtMCwwICsxLDI1IEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMp IDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMgc29m dHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5h dGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91 IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAqIGFj Y29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEg Y29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVE IEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHBy b3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlzY2xh aW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZpbmVzIGZpcm13 YXJlIGRvd25sb2FkIHJlbGF0ZWQNCisgKiBmdW5jdGlvbnMuDQorICovDQorDQorI2lmbmRlZiBf ZndkbF9oXw0KKyNkZWZpbmUgX2Z3ZGxfaF8NCisNCitpbnQgbXdsX2Z3ZGxfZG93bmxvYWRfZmly bXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KKw0KKyNlbmRpZiAvKiBfZndkbF9oXyAq Lw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9ob3N0 Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaG9zdGNtZC5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMWZkNGJkZg0KLS0tIC9kZXYvbnVs bA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2hvc3RjbWQuaA0K QEAgLTAsMCArMSw3ODYgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2 ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUg IkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQu IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv biAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0 cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQor ICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICog QVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25h bCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0K Ky8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZmlybXdhcmUgaG9zdCBjb21tYW5k IHJlbGF0ZWQNCisgKiBzdHJ1Y3R1cmUuDQorICovDQorDQorI2lmbmRlZiBfaG9zdGNtZF9oXw0K KyNkZWZpbmUgX2hvc3RjbWRfaF8NCisNCisvKiAxNiBiaXQgaG9zdCBjb21tYW5kIGNvZGUgKi8N CisjZGVmaW5lIEhPU1RDTURfQ01EX0dFVF9IV19TUEVDICAgICAgICAgICAgICAgICAweDAwMDMN CisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9IV19TUEVDICAgICAgICAgICAgICAgICAweDAwMDQN CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9HRVRfU1RBVCAgICAgICAgICAgICAweDAwMTQN CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9SQURJT19DT05UUk9MICAgICAgICAweDAwMWMN CisjZGVmaW5lIEhPU1RDTURfQ01EX01FTV9BRERSX0FDQ0VTUyAgICAgICAgICAgICAweDAwMWQN CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9UWF9QT1dFUiAgICAgICAgICAgICAweDAwMWYN CisjZGVmaW5lIEhPU1RDTURfQ01EXzgwMl8xMV9SRl9BTlRFTk5BICAgICAgICAgICAweDAwMjAN CisjZGVmaW5lIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VOQUJMRSAgICAgICAweDAwNTAg LyogcGVyLXZpZiAqLw0KKyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX1JGX0NIQU5ORUwgICAgICAg ICAgICAgIDB4MDEwYQ0KKyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX0FJRCAgICAgICAgICAgICAg ICAgICAgIDB4MDEwZCAvKiBwZXItdmlmICovDQorI2RlZmluZSBIT1NUQ01EX0NNRF9TRVRfSU5G UkFfTU9ERSAgICAgICAgICAgICAgMHgwMTBlIC8qIHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RD TURfQ01EXzgwMl8xMV9SVFNfVEhTRCAgICAgICAgICAgICAweDAxMTMNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9FRENBX1BBUkFNUyAgICAgICAgICAgICAweDAxMTUNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9XTU1fTU9ERSAgICAgICAgICAgICAgICAweDAxMjMNCisjZGVmaW5lIEhPU1RD TURfQ01EX0hUX0dVQVJEX0lOVEVSVkFMICAgICAgICAgICAweDAxMjQNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9GSVhFRF9SQVRFICAgICAgICAgICAgICAweDAxMjYNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9JRVMgICAgICAgICAgICAgICAgICAgICAweDAxMjcNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9MSU5LQURBUFRfQ1NfTU9ERSAgICAgICAweDAxMjkNCisjZGVmaW5lIEhPU1RD TURfQ01EX1NFVF9NQUNfQUREUiAgICAgICAgICAgICAgICAweDAyMDIgLyogcGVyLXZpZiAqLw0K KyNkZWZpbmUgSE9TVENNRF9DTURfU0VUX1JBVEVfQURBUFRfTU9ERSAgICAgICAgIDB4MDIwMw0K KyNkZWZpbmUgSE9TVENNRF9DTURfR0VUX1dBVENIRE9HX0JJVE1BUCAgICAgICAgIDB4MDIwNQ0K KyNkZWZpbmUgSE9TVENNRF9DTURfREVMX01BQ19BRERSICAgICAgICAgICAgICAgIDB4MDIwNiAv KiBwZXItdmlmICovDQorI2RlZmluZSBIT1NUQ01EX0NNRF9CU1NfU1RBUlQgICAgICAgICAgICAg ICAgICAgMHgxMTAwIC8qIHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RDTURfQ01EX0FQX0JFQUNP TiAgICAgICAgICAgICAgICAgICAweDExMDEgLyogcGVyLXZpZiAqLw0KKyNkZWZpbmUgSE9TVENN RF9DTURfU0VUX05FV19TVE4gICAgICAgICAgICAgICAgIDB4MTExMSAvKiBwZXItdmlmICovDQor I2RlZmluZSBIT1NUQ01EX0NNRF9TRVRfQVBNT0RFICAgICAgICAgICAgICAgICAgMHgxMTE0DQor I2RlZmluZSBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElPTiAgICAgICAgICAgMHgxMTIyIC8q IHBlci12aWYgKi8NCisjZGVmaW5lIEhPU1RDTURfQ01EX0JBU1RSRUFNICAgICAgICAgICAgICAg ICAgICAweDExMjUNCisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwg ICAgICAweDExMzMNCisjZGVmaW5lIEhPU1RDTURfQ01EX0RXRFNfRU5BQkxFICAgICAgICAgICAg ICAgICAweDExNDQNCisjZGVmaW5lIEhPU1RDTURfQ01EX0ZXX0ZMVVNIX1RJTUVSICAgICAgICAg ICAgICAweDExNDgNCisjZGVmaW5lIEhPU1RDTURfQ01EX1NFVF9DREQgICAgICAgICAgICAgICAg ICAgICAweDExNTANCisNCisvKiBEZWZpbmUgZ2VuZXJhbCByZXN1bHQgY29kZSBmb3IgZWFjaCBj b21tYW5kICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9PSyAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDAwDQorLyogR2VuZXJhbCBlcnJvciAqLw0KKyNkZWZpbmUgSE9TVENNRF9SRVNVTFRf RVJST1IgICAgICAgICAgICAgICAgICAgIDB4MDAwMQ0KKy8qIENvbW1hbmQgaXMgbm90IHZhbGlk ICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9OT1RfU1VQUE9SVCAgICAgICAgICAgICAgMHgw MDAyDQorLyogQ29tbWFuZCBpcyBwZW5kaW5nICh3aWxsIGJlIHByb2Nlc3NlZCkgKi8NCisjZGVm aW5lIEhPU1RDTURfUkVTVUxUX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDMNCisvKiBT eXN0ZW0gaXMgYnVzeSAoY29tbWFuZCBpZ25vcmVkKSAqLw0KKyNkZWZpbmUgSE9TVENNRF9SRVNV TFRfQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNA0KKy8qIERhdGEgYnVmZmVyIGlzIG5v dCBiaWcgZW5vdWdoICovDQorI2RlZmluZSBIT1NUQ01EX1JFU1VMVF9QQVJUSUFMX0RBVEEgICAg ICAgICAgICAgMHgwMDA1DQorDQorLyogRGVmaW5lIGNoYW5uZWwgcmVsYXRlZCBjb25zdGFudHMg Ki8NCisjZGVmaW5lIEZSRVFfQkFORF8yRE9UNEdIWiAgICAgICAgICAgICAgICAgICAgICAweDEN CisjZGVmaW5lIEZSRVFfQkFORF80RE9UOUdIWiAgICAgICAgICAgICAgICAgICAgICAweDINCisj ZGVmaW5lIEZSRVFfQkFORF81R0haICAgICAgICAgICAgICAgICAgICAgICAgICAweDQNCisjZGVm aW5lIEZSRVFfQkFORF81RE9UMkdIWiAgICAgICAgICAgICAgICAgICAgICAweDgNCisjZGVmaW5l IENIX0FVVE9fV0lEVEgJICAgICAgICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgQ0hfMTBf TUhaX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQ0KKyNkZWZpbmUgQ0hfMjBfTUha X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mg0KKyNkZWZpbmUgQ0hfNDBfTUhaX1dJ RFRIICAgICAgICAgICAgICAgICAgICAgICAgIDB4NA0KKyNkZWZpbmUgQ0hfODBfTUhaX1dJRFRI ICAgICAgICAgICAgICAgICAgICAgICAgIDB4NQ0KKyNkZWZpbmUgRVhUX0NIX0FCT1ZFX0NUUkxf Q0ggICAgICAgICAgICAgICAgICAgIDB4MQ0KKyNkZWZpbmUgRVhUX0NIX0FVVE8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4Mg0KKyNkZWZpbmUgRVhUX0NIX0JFTE9XX0NUUkxfQ0ggICAg ICAgICAgICAgICAgICAgIDB4Mw0KKyNkZWZpbmUgTk9fRVhUX0NIQU5ORUwgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MA0KKw0KKyNkZWZpbmUgQUNUX1BSSU1BUllfQ0hBTl8wICAgICAgICAg ICAgICAgICAgICAgIDANCisjZGVmaW5lIEFDVF9QUklNQVJZX0NIQU5fMSAgICAgICAgICAgICAg ICAgICAgICAxDQorI2RlZmluZSBBQ1RfUFJJTUFSWV9DSEFOXzIgICAgICAgICAgICAgICAgICAg ICAgMg0KKyNkZWZpbmUgQUNUX1BSSU1BUllfQ0hBTl8zICAgICAgICAgICAgICAgICAgICAgIDMN CisNCisvKiBEZWZpbmUgcmF0ZSByZWxhdGVkIGNvbnN0YW50cyAqLw0KKyNkZWZpbmUgSE9TVENN RF9BQ1RfTk9UX1VTRV9GSVhFRF9SQVRFICAgICAgICAgIDB4MDAwMg0KKw0KKy8qIERlZmluZSBz dGF0aW9uIHJlbGF0ZWQgY29uc3RhbnRzICovDQorI2RlZmluZSBIT1NUQ01EX0FDVF9TVEFfQUNU SU9OX0FERCAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfU1RBX0FDVElPTl9S RU1PVkUgICAgICAgICAgIDINCisNCisvKiBEZWZpbmUga2V5IHJlbGF0ZWQgY29uc3RhbnRzICov DQorI2RlZmluZSBNQVhfRU5DUl9LRVlfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMTYNCisj ZGVmaW5lIE1JQ19LRVlfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICA4DQorDQorI2Rl ZmluZSBLRVlfVFlQRV9JRF9XRVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMA0KKyNkZWZp bmUgS0VZX1RZUEVfSURfVEtJUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDENCisjZGVmaW5l IEtFWV9UWVBFX0lEX0FFUwkgICAgICAgICAgICAgICAgICAgICAgICAweDAyDQorDQorI2RlZmlu ZSBFTkNSX0tFWV9GTEFHX1RYR1JPVVBLRVkgICAgICAgICAgICAgICAgMHgwMDAwMDAwNA0KKyNk ZWZpbmUgRU5DUl9LRVlfRkxBR19QQUlSV0lTRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgN CisjZGVmaW5lIEVOQ1JfS0VZX0ZMQUdfVFNDX1ZBTElEICAgICAgICAgICAgICAgICAweDAwMDAw MDQwDQorI2RlZmluZSBFTkNSX0tFWV9GTEFHX1dFUF9UWEtFWSAgICAgICAgICAgICAgICAgMHgw MTAwMDAwMA0KKyNkZWZpbmUgRU5DUl9LRVlfRkxBR19NSUNLRVlfVkFMSUQgICAgICAgICAgICAg IDB4MDIwMDAwMDANCisNCisvKiBEZWZpbmUgYmxvY2sgYWNrIHJlbGF0ZWQgY29uc3RhbnRzICov DQorI2RlZmluZSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFICAgICAgICAgICAgMQ0KKyNk ZWZpbmUgQkFTVFJFQU1fRkxBR19ESVJFQ1RJT05fVVBTVFJFQU0gICAgICAgIDANCisNCisvKiBE ZWZpbmUgZ2VuZXJhbCBwdXJwb3NlIGFjdGlvbiAqLw0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO X1NFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQ0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO X1NFVF9MSVNUICAgICAgICAgICAgICAgIDB4MDAwMg0KKyNkZWZpbmUgSE9TVENNRF9BQ1RfR0VO X0dFVF9MSVNUICAgICAgICAgICAgICAgIDB4MDAwMw0KKw0KKy8qIE1pc2MgKi8NCisjZGVmaW5l IE1BWF9FTkNSX0tFWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAxNg0KKyNkZWZpbmUgTUlD X0tFWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgIDgNCisNCitlbnVtIHsNCisJV0xf RElTQUJMRSA9IDAsDQorCVdMX0VOQUJMRSA9IDEsDQorCVdMX0RJU0FCTEVfVk1BQyA9IDB4ODAs DQorfTsNCisNCitlbnVtIHsNCisJV0xfR0VUID0gMCwNCisJV0xfU0VUID0gMSwNCisJV0xfUkVT RVQgPSAyLA0KK307DQorDQorZW51bSB7DQorCVdMX0xPTkdfUFJFQU1CTEUgPSAxLA0KKwlXTF9T SE9SVF9QUkVBTUJMRSA9IDMsDQorCVdMX0FVVE9fUFJFQU1CTEUgPSA1LA0KK307DQorDQorZW51 bSBlbmNyX2FjdGlvbl90eXBlIHsNCisJLyogcmVxdWVzdCB0byBlbmFibGUvZGlzYWJsZSBIVyBl bmNyeXB0aW9uICovDQorCUVOQ1JfQUNUSU9OX0VOQUJMRV9IV19FTkNSLA0KKwkvKiByZXF1ZXN0 IHRvIHNldCBlbmNyeXB0aW9uIGtleSAqLw0KKwlFTkNSX0FDVElPTl9UWVBFX1NFVF9LRVksDQor CS8qIHJlcXVlc3QgdG8gcmVtb3ZlIG9uZSBvciBtb3JlIGtleXMgKi8NCisJRU5DUl9BQ1RJT05f VFlQRV9SRU1PVkVfS0VZLA0KKwlFTkNSX0FDVElPTl9UWVBFX1NFVF9HUk9VUF9LRVksDQorfTsN CisNCitlbnVtIGJhX2FjdGlvbl90eXBlIHsNCisJQkFfQ1JFQVRFX1NUUkVBTSwNCisJQkFfVVBE QVRFX1NUUkVBTSwNCisJQkFfREVTVFJPWV9TVFJFQU0sDQorCUJBX0ZMVVNIX1NUUkVBTSwNCisJ QkFfQ0hFQ0tfU1RSRUFNLA0KK307DQorDQorZW51bSBtYWNfdHlwZSB7DQorCVdMX01BQ19UWVBF X1BSSU1BUllfQ0xJRU5ULA0KKwlXTF9NQUNfVFlQRV9TRUNPTkRBUllfQ0xJRU5ULA0KKwlXTF9N QUNfVFlQRV9QUklNQVJZX0FQLA0KKwlXTF9NQUNfVFlQRV9TRUNPTkRBUllfQVAsDQorfTsNCisN CisvKiBHZW5lcmFsIGhvc3QgY29tbWFuZCBoZWFkZXIgKi8NCitzdHJ1Y3QgaG9zdGNtZF9oZWFk ZXIgew0KKwlfX2xlMTYgY21kOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBzZXFfbnVtOw0KKwl1OCBt YWNpZDsNCisJX19sZTE2IHJlc3VsdDsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01E X0dFVF9IV19TUEVDICovDQorc3RydWN0IGhvc3RjbWRfY21kX2dldF9od19zcGVjIHsNCisJc3Ry dWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCXU4IHZlcnNpb247ICAgICAgICAgICAgICAg ICAgLyogdmVyc2lvbiBvZiB0aGUgSFcgICAgICAgICAgICAgICAgICAgICovDQorCXU4IGhvc3Rf aWY7ICAgICAgICAgICAgICAgICAgLyogaG9zdCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAg ICAgICovDQorCV9fbGUxNiBudW1fd2NiOyAgICAgICAgICAgICAgLyogTWF4LiBudW1iZXIgb2Yg V0NCIEZXIGNhbiBoYW5kbGUgICAgICovDQorCV9fbGUxNiBudW1fbWNhc3RfYWRkcjsgICAgICAg LyogTWF4TmJyIG9mIE1DIGFkZHJlc3NlcyBGVyBjYW4gaGFuZGxlICovDQorCXU4IHBlcm1hbmVu dF9hZGRyW0VUSF9BTEVOXTsgLyogTUFDIGFkZHJlc3MgcHJvZ3JhbW1lZCBpbiBIVyAgICAgICAg ICovDQorCV9fbGUxNiByZWdpb25fY29kZTsNCisJX19sZTE2IG51bV9hbnRlbm5hOyAgICAgICAg ICAvKiBOdW1iZXIgb2YgYW50ZW5uYSB1c2VkICAgICAgKi8NCisJX19sZTMyIGZ3X3JlbGVhc2Vf bnVtOyAgICAgICAvKiA0IGJ5dGUgb2YgRlcgcmVsZWFzZSBudW1iZXIgKi8NCisJX19sZTMyIHdj Yl9iYXNlMDsNCisJX19sZTMyIHJ4cGRfd3JfcHRyOw0KKwlfX2xlMzIgcnhwZF9yZF9wdHI7DQor CV9fbGUzMiBmd19hd2FrZV9jb29raWU7DQorCV9fbGUzMiB3Y2JfYmFzZVtTWVNBRFBUX1RPVEFM X1RYX1FVRVVFUyAtIDFdOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfU0VUX0hX X1NQRUMgKi8NCitzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X2h3X3NwZWMgew0KKwlzdHJ1Y3QgaG9z dGNtZF9oZWFkZXIgY21kX2hkcjsNCisJLyogSFcgcmV2aXNpb24gKi8NCisJdTggdmVyc2lvbjsN CisJLyogSG9zdCBpbnRlcmZhY2UgKi8NCisJdTggaG9zdF9pZjsNCisJLyogTWF4LiBudW1iZXIg b2YgTXVsdGljYXN0IGFkZHJlc3MgRlcgY2FuIGhhbmRsZSAqLw0KKwlfX2xlMTYgbnVtX21jYXN0 X2FkZHI7DQorCS8qIE1BQyBhZGRyZXNzICovDQorCXU4IHBlcm1hbmVudF9hZGRyW0VUSF9BTEVO XTsNCisJLyogUmVnaW9uIENvZGUgKi8NCisJX19sZTE2IHJlZ2lvbl9jb2RlOw0KKwkvKiA0IGJ5 dGUgb2YgRlcgcmVsZWFzZSBudW1iZXIsIGV4YW1wbGUgMHgxMjM0PTEuMi4zLjQgKi8NCisJX19s ZTMyIGZ3X3JlbGVhc2VfbnVtOw0KKwkvKiBGaXJtd2FyZSBhd2FrZSBjb29raWUgLSB1c2VkIHRv IGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UNCisJICogaXMgbm90IGluIHNsZWVwIG1vZGUNCisJICov DQorCV9fbGUzMiBmd19hd2FrZV9jb29raWU7DQorCS8qIERldmljZSBjYXBhYmlsaXRpZXMgKHNl ZSBhYm92ZSkgKi8NCisJX19sZTMyIGRldmljZV9jYXBzOw0KKwkvKiBSeCBzaGFyZWQgbWVtb3J5 IHF1ZXVlICovDQorCV9fbGUzMiByeHBkX3dyX3B0cjsNCisJLyogQWN0dWFsIG51bWJlciBvZiBU WCBxdWV1ZXMgaW4gV2NiQmFzZSBhcnJheSAqLw0KKwlfX2xlMzIgbnVtX3R4X3F1ZXVlczsNCisJ LyogVFggV0NCIFJpbmdzICovDQorCV9fbGUzMiB3Y2JfYmFzZVtTWVNBRFBUX05VTV9PRl9ERVND X0RBVEFdOw0KKwkvKiBNYXggQU1TRFUgc2l6ZSAoMDAgLSBBTVNEVSBEaXNhYmxlZCwNCisJICog MDEgLSA0SywgMTAgLSA4SywgMTEgLSBub3QgZGVmaW5lZCkNCisJICovDQorCV9fbGUzMiBmZWF0 dXJlczsNCisJX19sZTMyIHR4X3djYl9udW1fcGVyX3F1ZXVlOw0KKwlfX2xlMzIgdG90YWxfcnhf d2NiOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfODAyXzExX0dFVF9TVEFUICov DQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9nZXRfc3RhdCB7DQorCXN0cnVjdCBob3N0Y21k X2hlYWRlciBjbWRfaGRyOw0KKwlfX2xlMzIgdHhfcmV0cnlfc3VjY2Vzc2VzOw0KKwlfX2xlMzIg dHhfbXVsdGlwbGVfcmV0cnlfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgdHhfZmFpbHVyZXM7DQorCV9f bGUzMiBydHNfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgcnRzX2ZhaWx1cmVzOw0KKwlfX2xlMzIgYWNr X2ZhaWx1cmVzOw0KKwlfX2xlMzIgcnhfZHVwbGljYXRlX2ZyYW1lczsNCisJX19sZTMyIHJ4X2Zj c19lcnJvcnM7DQorCV9fbGUzMiB0eF93YXRjaGRvZ190aW1lb3V0czsNCisJX19sZTMyIHJ4X292 ZXJmbG93czsNCisJX19sZTMyIHJ4X2ZyYWdfZXJyb3JzOw0KKwlfX2xlMzIgcnhfbWVtX2Vycm9y czsNCisJX19sZTMyIHBvaW50ZXJfZXJyb3JzOw0KKwlfX2xlMzIgdHhfdW5kZXJmbG93czsNCisJ X19sZTMyIHR4X2RvbmU7DQorCV9fbGUzMiB0eF9kb25lX2J1Zl90cnlfcHV0Ow0KKwlfX2xlMzIg dHhfZG9uZV9idWZfcHV0Ow0KKwkvKiBQdXQgc2l6ZSBvZiByZXF1ZXN0ZWQgYnVmZmVyIGluIGhl cmUgKi8NCisJX19sZTMyIHdhaXRfZm9yX3R4X2J1ZjsNCisJX19sZTMyIHR4X2F0dGVtcHRzOw0K KwlfX2xlMzIgdHhfc3VjY2Vzc2VzOw0KKwlfX2xlMzIgdHhfZnJhZ21lbnRzOw0KKwlfX2xlMzIg dHhfbXVsdGljYXN0czsNCisJX19sZTMyIHJ4X25vbl9jdGxfcGt0czsNCisJX19sZTMyIHJ4X211 bHRpY2FzdHM7DQorCV9fbGUzMiByeF91bmRlY3J5cHRhYmxlX2ZyYW1lczsNCisJX19sZTMyIHJ4 X2ljdl9lcnJvcnM7DQorCV9fbGUzMiByeF9leGNsdWRlZF9mcmFtZXM7DQorCV9fbGUzMiByeF93 ZWFrX2l2X2NvdW50Ow0KKwlfX2xlMzIgcnhfdW5pY2FzdHM7DQorCV9fbGUzMiByeF9ieXRlczsN CisJX19sZTMyIHJ4X2Vycm9yczsNCisJX19sZTMyIHJ4X3J0c19jb3VudDsNCisJX19sZTMyIHR4 X2N0c19jb3VudDsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EXzgwMl8xMV9SQURJ T19DT05UUk9MICovDQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsN CisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCS8q IEBiaXQwOiAxLzAsb24vb2ZmLCBAYml0MTogMS8wLCBsb25nL3Nob3J0IEBiaXQyOiAxLzAsYXV0 by9maXggKi8NCisJX19sZTE2IGNvbnRyb2w7DQorCV9fbGUxNiByYWRpb19vbjsNCit9IF9fcGFj a2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX01FTV9BRERSX0FDQ0VTUyAqLw0KK3N0cnVjdCBob3N0 Y21kX2NtZF9tZW1fYWRkcl9hY2Nlc3Mgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hk cjsNCisJX19sZTMyIGFkZHJlc3M7DQorCV9fbGUxNiBsZW5ndGg7DQorCV9fbGUxNiByZXNlcnZl ZDsNCisJX19sZTMyIHZhbHVlWzY0XTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01E XzgwMl8xMV9UWF9QT1dFUiAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIg ew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTE2IGFjdGlvbjsNCisJ X19sZTE2IGJhbmQ7DQorCV9fbGUxNiBjaDsNCisJX19sZTE2IGJ3Ow0KKwlfX2xlMTYgc3ViX2No Ow0KKwlfX2xlMTYgcG93ZXJfbGV2ZWxfbGlzdFtTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFM XTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EXzgwMl8xMV9SRl9BTlRFTk5BICov DQorc3RydWN0IGhvc3RjbWRfY21kXzgwMl8xMV9yZl9hbnRlbm5hIHsNCisJc3RydWN0IGhvc3Rj bWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCV9fbGUxNiBhbnRlbm5hX21v ZGU7ICAgICAvKiBOdW1iZXIgb2YgYW50ZW5uYXMgb3IgMHhmZmZmKGRpdmVyc2l0eSkgKi8NCit9 IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX0JST0FEQ0FTVF9TU0lEX0VOQUJMRSAqLw0K K3N0cnVjdCBob3N0Y21kX2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUgew0KKwlzdHJ1Y3QgaG9z dGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsNCit9IF9fcGFja2VkOw0KKw0K Ky8qIEhPU1RDTURfQ01EX1NFVF9SRl9DSEFOTkVMICovDQorI2RlZmluZSBGUkVRX0JBTkRfTUFT SyAgICAgMHgwMDAwMDAzZg0KKyNkZWZpbmUgQ0hOTF9XSURUSF9NQVNLICAgIDB4MDAwMDA3YzAN CisjZGVmaW5lIENITkxfV0lEVEhfU0hJRlQgICA2DQorI2RlZmluZSBBQ1RfUFJJTUFSWV9NQVNL ICAgMHgwMDAwMzgwMA0KKyNkZWZpbmUgQUNUX1BSSU1BUllfU0hJRlQgIDExDQorDQorc3RydWN0 IGhvc3RjbWRfY21kX3NldF9yZl9jaGFubmVsIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNt ZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247DQorCXU4IGN1cnJfY2hubDsNCisJX19sZTMyIGNobmxf ZmxhZ3M7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfQUlEICovDQorc3Ry dWN0IGhvc3RjbWRfY21kX3NldF9haWQgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hk cjsNCisJX19sZTE2IGFpZDsNCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOyAgICAgICAvKiBBUCdz IE1hYyBBZGRyZXNzKEJTU0lEKSAqLw0KKwlfX2xlMzIgZ3Byb3RlY3Q7DQorCXU4IGFwX3JhdGVz W1NZU0FEUFRfTUFYX0RBVEFfUkFURVNfR107DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01E X0NNRF9TRVRfSU5GUkFfTU9ERSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfaW5mcmFfbW9k ZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KK30gX19wYWNrZWQ7DQorDQor LyogSE9TVENNRF9DTURfODAyXzExX1JUU19USFNEICovDQorc3RydWN0IGhvc3RjbWRfY21kXzgw Ml8xMV9ydHNfdGhzZCB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xl MTYgYWN0aW9uOw0KKwlfX2xlMTYJdGhyZXNob2xkOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9T VENNRF9DTURfU0VUX0VEQ0FfUEFSQU1TICovDQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9lZGNh X3BhcmFtcyB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiAwID0gZ2V0 IGFsbCwgMHgxID1zZXQgQ1dNaW4vTWF4LCAgMHgyID0gc2V0IFRYT1AgLCAweDQgPXNldCBBSUZT TiAqLw0KKwlfX2xlMTYgYWN0aW9uOw0KKwlfX2xlMTYgdHhvcDsgICAgICAgICAgICAgICAgIC8q IGluIHVuaXQgb2YgMzIgdXMgKi8NCisJX19sZTMyIGN3X21heDsgICAgICAgICAgICAgICAvKiAw fjE1ICovDQorCV9fbGUzMiBjd19taW47ICAgICAgICAgICAgICAgLyogMH4xNSAqLw0KKwl1OCBh aWZzbjsNCisJdTggdHhxX251bTsgICAgICAgICAgICAgICAgICAvKiBUeCBRdWV1ZSBudW1iZXIu ICovDQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfV01NX01PREUgKi8NCitz dHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X3dtbV9tb2RlIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVy IGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247ICAgICAgICAgICAgICAgLyogMC0+dW5zZXQsIDEt PnNldCAqLw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9DTURfSFRfR1VBUkRfSU5URVJW QUwgKi8NCitzdHJ1Y3QgaG9zdGNtZF9jbWRfaHRfZ3VhcmRfaW50ZXJ2YWwgew0KKwlzdHJ1Y3Qg aG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGFjdGlvbjsNCisJX19sZTMyIGdpX3R5 cGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfRklYRURfUkFURSAqLw0K K3N0cnVjdCBmaXhfcmF0ZV9mbGFnIHsgICAgICAgICAgIC8qIGxvd2VyIHJhdGUgYWZ0ZXIgdGhl IHJldHJ5IGNvdW50ICovDQorCS8qIDA6IGxlZ2FjeSwgMTogSFQgKi8NCisJX19sZTMyIGZpeF9y YXRlX3R5cGU7DQorCS8qIDA6IHJldHJ5IGNvdW50IGlzIG5vdCB2YWxpZCwgMTogdXNlIHJldHJ5 IGNvdW50IHNwZWNpZmllZCAqLw0KKwlfX2xlMzIgcmV0cnlfY291bnRfdmFsaWQ7DQorfSBfX3Bh Y2tlZDsNCisNCitzdHJ1Y3QgZml4X3JhdGVfZW50cnkgew0KKwlzdHJ1Y3QgZml4X3JhdGVfZmxh ZyBmaXhfcmF0ZV90eXBlX2ZsYWdzOw0KKwkvKiBkZXBlbmRpbmcgb24gdGhlIGZsYWdzIGFib3Zl LCB0aGlzIGNhbiBiZSBlaXRoZXIgYSBsZWdhY3kNCisJICogcmF0ZShub3QgaW5kZXgpIG9yIGFu IE1DUyBjb2RlLg0KKwkgKi8NCisJX19sZTMyIGZpeGVkX3JhdGU7DQorCV9fbGUzMiByZXRyeV9j b3VudDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfZml4ZWRfcmF0 ZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiBIT1NUQ01EX0FDVF9O T1RfVVNFX0ZJWEVEX1JBVEUgMHgwMDAyICovDQorCV9fbGUzMiBhY3Rpb247DQorCS8qIHVzZSBm aXhlZCByYXRlIHNwZWNpZmllZCBidXQgZmlybXdhcmUgY2FuIGRyb3AgdG8gKi8NCisJX19sZTMy IGFsbG93X3JhdGVfZHJvcDsNCisJX19sZTMyIGVudHJ5X2NvdW50Ow0KKwlzdHJ1Y3QgZml4X3Jh dGVfZW50cnkgZml4ZWRfcmF0ZV90YWJsZVs0XTsNCisJdTggbXVsdGljYXN0X3JhdGU7DQorCXU4 IG11bHRpX3JhdGVfdHhfdHlwZTsNCisJdTggbWFuYWdlbWVudF9yYXRlOw0KK30gX19wYWNrZWQ7 DQorDQorLyogSE9TVENNRF9DTURfU0VUX0lFUyAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRf aWVzIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCV9fbGUxNiBhY3Rpb247 ICAgICAgICAgICAgICAgLyogMC0+dW5zZXQsIDEtPnNldCAqLw0KKwlfX2xlMTYgaWVfbGlzdF9s ZW5faHQ7DQorCV9fbGUxNiBpZV9saXN0X2xlbl92aHQ7DQorCV9fbGUxNiBpZV9saXN0X2xlbl9w cm9wcmlldGFyeTsNCisJLypCdWZmZXIgc2l6ZSBzYW1lIGFzIEdlbmVyaWNfQmVhY29uKi8NCisJ dTggaWVfbGlzdF9odFsxNDhdOw0KKwl1OCBpZV9saXN0X3ZodFsyNF07DQorCXU4IGllX2xpc3Rf cHJvcHJpZXRhcnlbMTEyXTsNCit9IF9fcGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX1NFVF9M SU5LQURBUFRfQ1NfTU9ERSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9zZXRfbGlua2FkYXB0X2Nz X21vZGUgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTE2IGFjdGlv bjsNCisJX19sZTE2IGNzX21vZGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9T RVRfTUFDX0FERFIsIEhPU1RDTURfQ01EX0RFTF9NQUNfQUREUiAqLw0KK3N0cnVjdCBob3N0Y21k X2NtZF9zZXRfbWFjX2FkZHIgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJ X19sZTE2IG1hY190eXBlOw0KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07DQorfSBfX3BhY2tlZDsN CisNCisvKiBIT1NUQ01EX0NNRF9TRVRfUkFURV9BREFQVF9NT0RFICovDQorc3RydWN0IGhvc3Rj bWRfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21k X2hkcjsNCisJX19sZTE2IGFjdGlvbjsNCisJX19sZTE2IHJhdGVfYWRhcHRfbW9kZTsgICAgICAv KiAwOkluZG9vciwgMTpPdXRkb29yICovDQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NN RF9HRVRfV0FUQ0hET0dfQklUTUFQICovDQorc3RydWN0IGhvc3RjbWRfY21kX2dldF93YXRjaGRv Z19iaXRtYXAgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJdTggd2F0Y2hk b2dfYml0bWFwOyAgICAgICAgICAvKiBmb3IgU1cvQkEgKi8NCit9IF9fcGFja2VkOw0KKw0KKy8q IEhPU1RDTURfQ01EX0JTU19TVEFSVCAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9ic3Nfc3RhcnQg ew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsgICAg ICAgICAgICAgICAgICAvKiBGQUxTRTogRGlzYWJsZSBvciBUUlVFOiBFbmFibGUgKi8NCit9IF9f cGFja2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX0FQX0JFQUNPTiAqLw0KK3N0cnVjdCBjZl9wYXJh bXMgew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IGNmcF9jbnQ7DQorCXU4IGNmcF9w ZXJpb2Q7DQorCV9fbGUxNiBjZnBfbWF4X2R1cmF0aW9uOw0KKwlfX2xlMTYgY2ZwX2R1cmF0aW9u X3JlbWFpbmluZzsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBpYnNzX3BhcmFtcyB7DQorCXU4 IGVsZW1faWQ7DQorCXU4IGxlbjsNCisJX19sZTE2CWF0aW1fd2luZG93Ow0KK30gX19wYWNrZWQ7 DQorDQordW5pb24gc3NfcGFyYW1zIHsNCisJc3RydWN0IGNmX3BhcmFtcyBjZl9wYXJhbV9zZXQ7 DQorCXN0cnVjdCBpYnNzX3BhcmFtcyBpYnNzX3BhcmFtX3NldDsNCit9IF9fcGFja2VkOw0KKw0K K3N0cnVjdCBmaF9wYXJhbXMgew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCV9fbGUxNiBk d2VsbF90aW1lOw0KKwl1OCBob3Bfc2V0Ow0KKwl1OCBob3BfcGF0dGVybjsNCisJdTggaG9wX2lu ZGV4Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGRzX3BhcmFtcyB7DQorCXU4IGVsZW1faWQ7 DQorCXU4IGxlbjsNCisJdTggY3VycmVudF9jaG5sOw0KK30gX19wYWNrZWQ7DQorDQordW5pb24g cGh5X3BhcmFtcyB7DQorCXN0cnVjdCBmaF9wYXJhbXMgZmhfcGFyYW1fc2V0Ow0KKwlzdHJ1Y3Qg ZHNfcGFyYW1zIGRzX3BhcmFtX3NldDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCByc25faWUg ew0KKwl1OCBlbGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IG91aV90eXBlWzRdOyAgICAgICAgICAg ICAgLyogMDA6NTA6ZjI6MDEgKi8NCisJdTggdmVyWzJdOw0KKwl1OCBncnBfa2V5X2NpcGhlcls0 XTsNCisJdTggcHdzX2tleV9jbnRbMl07DQorCXU4IHB3c19rZXlfY2lwaGVyX2xpc3RbNF07DQor CXU4IGF1dGhfa2V5X2NudFsyXTsNCisJdTggYXV0aF9rZXlfbGlzdFs0XTsNCit9IF9fcGFja2Vk Ow0KKw0KK3N0cnVjdCByc240OF9pZSB7DQorCXU4IGVsZW1faWQ7DQorCXU4IGxlbjsNCisJdTgg dmVyWzJdOw0KKwl1OCBncnBfa2V5X2NpcGhlcls0XTsNCisJdTggcHdzX2tleV9jbnRbMl07DQor CXU4IHB3c19rZXlfY2lwaGVyX2xpc3RbNF07DQorCXU4IGF1dGhfa2V5X2NudFsyXTsNCisJdTgg YXV0aF9rZXlfbGlzdFs0XTsNCisJdTggcnNuX2NhcFsyXTsNCisJdTggcG1rX2lkX2NudFsyXTsN CisJdTggcG1rX2lkX2xpc3RbMTZdOyAgICAgICAgICAvKiBTaG91bGQgbW9kaWZ5IHRvIDE2ICog UyAqLw0KKwl1OCByZXNlcnZlZFs4XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBhY19wYXJh bV9yY2Qgew0KKwl1OCBhY2lfYWlmc247DQorCXU4IGVjd19taW5fbWF4Ow0KKwlfX2xlMTYgdHhv cF9saW07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgd21tX3BhcmFtX2VsZW0gew0KKwl1OCBl bGVtX2lkOw0KKwl1OCBsZW47DQorCXU4IG91aVszXTsNCisJdTggdHlwZTsNCisJdTggc3ViX3R5 cGU7DQorCXU4IHZlcnNpb247DQorCXU4IHJzdmQ7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNf YmU7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNfYms7DQorCXN0cnVjdCBhY19wYXJhbV9yY2Qg YWNfdmk7DQorCXN0cnVjdCBhY19wYXJhbV9yY2QgYWNfdm87DQorfSBfX3BhY2tlZDsNCisNCitz dHJ1Y3QgY2hhbm5lbF9pbmZvIHsNCisJdTggZmlyc3RfY2hhbm5lbF9udW07DQorCXU4IG51bV9j aGFubmVsczsNCisJdTggbWF4X3R4X3B3cl9sZXZlbDsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVj dCBjb3VudHJ5IHsNCisJdTggZWxlbV9pZDsNCisJdTggbGVuOw0KKwl1OCBjb3VudHJ5X3N0clsz XTsNCisJc3RydWN0IGNoYW5uZWxfaW5mbyBjaGFubmVsX2luZm9bNDBdOw0KK30gX19wYWNrZWQ7 DQorDQorc3RydWN0IHN0YXJ0X2NtZCB7DQorCXU4IHN0YV9tYWNfYWRkcltFVEhfQUxFTl07DQor CXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07DQorCXU4IGJzc190eXBlOw0KKwlfX2xl MTYgYmNuX3BlcmlvZDsNCisJdTggZHRpbV9wZXJpb2Q7DQorCXVuaW9uIHNzX3BhcmFtcyBzc19w YXJhbV9zZXQ7DQorCXVuaW9uIHBoeV9wYXJhbXMgcGh5X3BhcmFtX3NldDsNCisJX19sZTE2IHBy b2JlX2RlbGF5Ow0KKwlfX2xlMTYgY2FwX2luZm87DQorCXU4IGJfcmF0ZV9zZXRbU1lTQURQVF9N QVhfREFUQV9SQVRFU19HXTsNCisJdTggb3BfcmF0ZV9zZXRbU1lTQURQVF9NQVhfREFUQV9SQVRF U19HXTsNCisJc3RydWN0IHJzbl9pZSByc25faWU7DQorCXN0cnVjdCByc240OF9pZSByc240OF9p ZTsNCisJc3RydWN0IHdtbV9wYXJhbV9lbGVtIHdtbV9wYXJhbTsNCisJc3RydWN0IGNvdW50cnkg Y291bnRyeTsNCisJX19sZTMyIGFwX3JmX3R5cGU7ICAgICAgICAgICAvKiAwLT5CLCAxLT5HLCAy LT5NaXhlZCwgMy0+QSwgNC0+MTFKICovDQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgaG9zdGNt ZF9jbWRfYXBfYmVhY29uIHsNCisJc3RydWN0IGhvc3RjbWRfaGVhZGVyIGNtZF9oZHI7DQorCXN0 cnVjdCBzdGFydF9jbWQgc3RhcnRfY21kOw0KK30gX19wYWNrZWQ7DQorDQorLyogSE9TVENNRF9D TURfU0VUX05FV19TVE4gKi8NCitzdHJ1Y3QgYWRkX2h0X2luZm8gew0KKwl1OCBjb250cm9sX2No bmw7DQorCXU4IGFkZF9jaG5sOw0KKwlfX2xlMTYgb3BfbW9kZTsNCisJX19sZTE2IHN0YmM7DQor fSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgcGVlcl9pbmZvIHsNCisJX19sZTMyIGxlZ2FjeV9yYXRl X2JpdG1hcDsNCisJdTggaHRfcmF0ZXNbNF07DQorCV9fbGUxNiBjYXBfaW5mbzsNCisJX19sZTE2 IGh0X2NhcF9pbmZvOw0KKwl1OCBtYWNfaHRfcGFyYW1faW5mbzsNCisJdTggbXJ2bF9zdGE7DQor CXN0cnVjdCBhZGRfaHRfaW5mbyBhZGRfaHRfaW5mbzsNCisJX19sZTMyIHR4X2JmX2NhcGFiaWxp dGllczsgICAvKiBFWEJGX1NVUFBPUlQgKi8NCisJX19sZTMyIHZodF9tYXhfcnhfbWNzOw0KKwlf X2xlMzIgdmh0X2NhcDsNCisJLyogMDoyME1oeiwgMTo0ME1oeiwgMjo4ME1oeiwgMzoxNjAgb3Ig ODArODBNaHogKi8NCisJdTggdmh0X3J4X2NoYW5uZWxfd2lkdGg7DQorfSBfX3BhY2tlZDsNCisN CitzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19zdG4gew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFk ZXIgY21kX2hkcjsNCisJX19sZTE2IGFpZDsNCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOw0KKwlf X2xlMTYgc3RuX2lkOw0KKwlfX2xlMTYgYWN0aW9uOw0KKwlfX2xlMTYgcmVzZXJ2ZWQ7DQorCXN0 cnVjdCBwZWVyX2luZm8gcGVlcl9pbmZvOw0KKwkvKiBVQVBTRF9TVVBQT1JUICovDQorCXU4IHFv c19pbmZvOw0KKwl1OCBpc19xb3Nfc3RhOw0KKwlfX2xlMzIgZndfc3RhX3B0cjsNCit9IF9fcGFj a2VkOw0KKw0KKy8qIEhPU1RDTURfQ01EX1NFVF9BUE1PREUgKi8NCitzdHJ1Y3QgaG9zdGNtZF9j bWRfc2V0X2FwbW9kZSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwl1OCBh cG1vZGU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9VUERBVEVfRU5DUllQVElP TiAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF91cGRhdGVfZW5jcnlwdGlvbiB7DQorCXN0cnVjdCBo b3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkvKiBBY3Rpb24gdHlwZSAtIHNlZSBlbmNyX2FjdGlv bl90eXBlICovDQorCV9fbGUzMiBhY3Rpb25fdHlwZTsgICAgICAgICAgLyogZW5jcl9hY3Rpb25f dHlwZSAqLw0KKwkvKiBzaXplIG9mIHRoZSBkYXRhIGJ1ZmZlciBhdHRhY2hlZC4gKi8NCisJX19s ZTMyIGRhdGFfbGVuZ3RoOw0KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07DQorCXU4IGFjdGlvbl9k YXRhWzFdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHdlcF90eXBlX2tleSB7DQorCS8qIFdF UCBrZXkgbWF0ZXJpYWwgKG1heCAxMjhiaXQpICovDQorCXU4IGtleV9tYXRlcmlhbFtNQVhfRU5D Ul9LRVlfTEVOR1RIXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBlbmNyX3RraXBfc2VxY250 IHsNCisJX19sZTE2IGxvdzsNCisJX19sZTMyIGhpZ2g7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1 Y3QgdGtpcF90eXBlX2tleSB7DQorCS8qIFRLSVAgS2V5IG1hdGVyaWFsLiBLZXkgdHlwZSAoZ3Jv dXAgb3IgcGFpcndpc2Uga2V5KSBpcw0KKwkgKiBkZXRlcm1pbmVkIGJ5IGZsYWdzDQorCSAqLw0K KwkvKiBpbiBLRVlfUEFSQU1fU0VUIHN0cnVjdHVyZS4gKi8NCisJdTgga2V5X21hdGVyaWFsW01B WF9FTkNSX0tFWV9MRU5HVEhdOw0KKwkvKiBNSUMga2V5cyAqLw0KKwl1OCB0a2lwX3R4X21pY19r ZXlbTUlDX0tFWV9MRU5HVEhdOw0KKwl1OCB0a2lwX3J4X21pY19rZXlbTUlDX0tFWV9MRU5HVEhd Ow0KKwlzdHJ1Y3QgZW5jcl90a2lwX3NlcWNudAl0a2lwX3JzYzsNCisJc3RydWN0IGVuY3JfdGtp cF9zZXFjbnQJdGtpcF90c2M7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYWVzX3R5cGVfa2V5 IHsNCisJLyogQUVTIEtleSBtYXRlcmlhbCAqLw0KKwl1OCBrZXlfbWF0ZXJpYWxbTUFYX0VOQ1Jf S0VZX0xFTkdUSF07DQorfSBfX3BhY2tlZDsNCisNCit1bmlvbiBtd2xfa2V5X3R5cGUgew0KKwlz dHJ1Y3Qgd2VwX3R5cGVfa2V5ICB3ZXBfa2V5Ow0KKwlzdHJ1Y3QgdGtpcF90eXBlX2tleSB0a2lw X2tleTsNCisJc3RydWN0IGFlc190eXBlX2tleSAgYWVzX2tleTsNCit9IF9fcGFja2VkOw0KKw0K K3N0cnVjdCBrZXlfcGFyYW1fc2V0IHsNCisJLyogVG90YWwgbGVuZ3RoIG9mIHRoaXMgc3RydWN0 dXJlIChLZXkgaXMgdmFyaWFibGUgc2l6ZSBhcnJheSkgKi8NCisJX19sZTE2IGxlbmd0aDsNCisJ LyogS2V5IHR5cGUgLSBXRVAsIFRLSVAgb3IgQUVTLUNDTVAuICovDQorCS8qIFNlZSBkZWZpbml0 aW9ucyBhYm92ZSAqLw0KKwlfX2xlMTYga2V5X3R5cGVfaWQ7DQorCS8qIGtleSBmbGFncyAoRU5D Ul9LRVlfRkxBR19YWFhfICovDQorCV9fbGUzMiBrZXlfaW5mbzsNCisJLyogRm9yIFdFUCBvbmx5 IC0gYWN0dWFsIGtleSBpbmRleCAqLw0KKwlfX2xlMzIga2V5X2luZGV4Ow0KKwkvKiBTaXplIG9m IHRoZSBrZXkgKi8NCisJX19sZTE2IGtleV9sZW47DQorCS8qIEtleSBtYXRlcmlhbCAodmFyaWFi bGUgc2l6ZSBhcnJheSkgKi8NCisJdW5pb24gbXdsX2tleV90eXBlIGtleTsNCisJdTggbWFjX2Fk ZHJbRVRIX0FMRU5dOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9r ZXkgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIgY21kX2hkcjsNCisJLyogQWN0aW9uIHR5cGUg LSBzZWUgZW5jcl9hY3Rpb25fdHlwZSAqLw0KKwlfX2xlMzIgYWN0aW9uX3R5cGU7ICAgICAgICAg IC8qIGVuY3JfYWN0aW9uX3R5cGUgKi8NCisJLyogc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgYXR0 YWNoZWQuICovDQorCV9fbGUzMiBkYXRhX2xlbmd0aDsNCisJLyogZGF0YSBidWZmZXIgLSBtYXBz IHRvIG9uZSBLRVlfUEFSQU1fU0VUIHN0cnVjdHVyZSAqLw0KKwlzdHJ1Y3Qga2V5X3BhcmFtX3Nl dCBrZXlfcGFyYW07DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9CQVNUUkVBTSAq Lw0KKyNkZWZpbmUgQkFfVFlQRV9NQVNLICAgICAgIDB4MDAwMDAwMDENCisjZGVmaW5lIEJBX0RJ UkVDVElPTl9NQVNLICAweDAwMDAwMDA2DQorI2RlZmluZSBCQV9ESVJFQ1RJT05fU0hJRlQgMQ0K Kw0KK3N0cnVjdCBiYV9jb250ZXh0IHsNCisJX19sZTMyIGNvbnRleHQ7DQorfSBfX3BhY2tlZDsN CisNCisvKiBwYXJhbWV0ZXJzIGZvciBibG9jayBhY2sgY3JlYXRpb24gKi8NCitzdHJ1Y3QgY3Jl YXRlX2JhX3BhcmFtcyB7DQorCS8qIEJBIENyZWF0aW9uIGZsYWdzIC0gc2VlIGFib3ZlICovDQor CV9fbGUzMiBmbGFnczsNCisJLyogaWRsZSB0aHJlc2hvbGQgKi8NCisJX19sZTMyIGlkbGVfdGhy czsNCisJLyogYmxvY2sgYWNrIHRyYW5zbWl0IHRocmVzaG9sZCAoYWZ0ZXIgaG93IG1hbnkgcGt0 cyBzaG91bGQgd2UNCisJICogc2VuZCBCQVI/KQ0KKwkgKi8NCisJX19sZTMyIGJhcl90aHJzOw0K KwkvKiByZWNlaXZlciB3aW5kb3cgc2l6ZSAqLw0KKwlfX2xlMzIgd2luZG93X3NpemU7DQorCS8q IE1BQyBBZGRyZXNzIG9mIHRoZSBCQSBwYXJ0bmVyICovDQorCXU4IHBlZXJfbWFjX2FkZHJbRVRI X0FMRU5dOw0KKwkvKiBEaWFsb2cgVG9rZW4gKi8NCisJdTggZGlhbG9nX3Rva2VuOw0KKwkvKiBU SUQgZm9yIHRoZSB0cmFmZmljIHN0cmVhbSBpbiB0aGlzIEJBICovDQorCXU4IHRpZDsNCisJLyog c2hhcmVkIG1lbW9yeSBxdWV1ZSBJRCAobm90IHN1cmUgaWYgdGhpcyBpcyByZXF1aXJlZCkgKi8N CisJdTggcXVldWVfaWQ7DQorCXU4IHBhcmFtX2luZm87DQorCS8qIHJldHVybmVkIGJ5IGZpcm13 YXJlIC0gZmlybXdhcmUgY29udGV4dCBwb2ludGVyLiAqLw0KKwkvKiB0aGlzIGNvbnRleHQgcG9p bnRlciB3aWxsIGJlIHBhc3NlZCB0byBmaXJtd2FyZSBmb3IgYWxsDQorCSAqIGZ1dHVyZSBjb21t YW5kcy4NCisJICovDQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7DQorCXU4IHJl c2V0X3NlcV9ubzsgICAgICAgICAgICAgLyoqIDAgb3IgMSoqLw0KKwlfX2xlMTYgY3VycmVudF9z ZXE7DQorCS8qIFRoaXMgaXMgZm9yIHZpcnR1YWwgc3RhdGlvbiBpbiBTdGEgcHJveHkgbW9kZSBm b3IgVjZGVyAqLw0KKwl1OCBzdGFfc3JjX21hY19hZGRyW0VUSF9BTEVOXTsNCit9IF9fcGFja2Vk Ow0KKw0KKy8qIG5ldyB0cmFuc21pdCBzZXF1ZW5jZSBudW1iZXIgaW5mb3JtYXRpb24gKi8NCitz dHJ1Y3QgYmFfdXBkYXRlX3NlcV9udW0gew0KKwkvKiBCQSBmbGFncyAtIHNlZSBhYm92ZSAqLw0K KwlfX2xlMzIgZmxhZ3M7DQorCS8qIHJldHVybmVkIGJ5IGZpcm13YXJlIGluIHRoZSBjcmVhdGUg YmEgc3RyZWFtIHJlc3BvbnNlICovDQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7 DQorCS8qIG5ldyBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgYmxvY2sgYWNrIHN0cmVhbSAqLw0K KwlfX2xlMTYgYmFfc2VxX251bTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBiYV9zdHJlYW1f Y29udGV4dCB7DQorCS8qIEJBIFN0cmVhbSBmbGFncyAqLw0KKwlfX2xlMzIgZmxhZ3M7DQorCS8q IHJldHVybmVkIGJ5IGZpcm13YXJlIGluIHRoZSBjcmVhdGUgYmEgc3RyZWFtIHJlc3BvbnNlICov DQorCXN0cnVjdCBiYV9jb250ZXh0IGZ3X2JhX2NvbnRleHQ7DQorfSBfX3BhY2tlZDsNCisNCit1 bmlvbiBiYV9pbmZvIHsNCisJLyogaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gY3JlYXRlIEJBIFN0 cmVhbS4uLiAqLw0KKwlzdHJ1Y3QgY3JlYXRlX2JhX3BhcmFtcwljcmVhdGVfcGFyYW1zOw0KKwkv KiB1cGRhdGUgc3RhcnRpbmcvbmV3IHNlcXVlbmNlIG51bWJlciBldGMuICovDQorCXN0cnVjdCBi YV91cGRhdGVfc2VxX251bSB1cGR0X3NlcV9udW07DQorCS8qIGRlc3Ryb3kgYW4gZXhpc3Rpbmcg c3RyZWFtLi4uICovDQorCXN0cnVjdCBiYV9zdHJlYW1fY29udGV4dCBkZXN0cm95X3BhcmFtczsN CisJLyogZGVzdHJveSBhbiBleGlzdGluZyBzdHJlYW0uLi4gKi8NCisJc3RydWN0IGJhX3N0cmVh bV9jb250ZXh0IGZsdXNoX3BhcmFtczsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBob3N0Y21k X2NtZF9iYXN0cmVhbSB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xl MzIgYWN0aW9uX3R5cGU7DQorCXVuaW9uIGJhX2luZm8gYmFfaW5mbzsNCit9IF9fcGFja2VkOw0K Kw0KKy8qIEhPU1RDTURfQ01EX1NFVF9PUFRJTUlaQVRJT05fTEVWRUwgKi8NCitzdHJ1Y3QgaG9z dGNtZF9jbWRfc2V0X29wdGltaXphdGlvbl9sZXZlbCB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRl ciBjbWRfaGRyOw0KKwl1OCBvcHRfbGV2ZWw7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01E X0NNRF9EV0RTX0VOQUJMRSAqLw0KK3N0cnVjdCBob3N0Y21kX2NtZF9kd2RzX2VuYWJsZSB7DQor CXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwlfX2xlMzIgZW5hYmxlOyAgICAgICAg ICAgICAgIC8qIDAgLS0gRGlzYWJsZS4gb3IgMSAtLSBFbmFibGUuICovDQorfSBfX3BhY2tlZDsN CisNCisvKiBIT1NUQ01EX0NNRF9GV19GTFVTSF9USU1FUiAqLw0KK3N0cnVjdCBob3N0Y21kX2Nt ZF9md19mbHVzaF90aW1lciB7DQorCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KKwkv KiAwIC0tIERpc2FibGUuID4gMCAtLSBob2xkcyB0aW1lIHZhbHVlIGluIHVzZWNzLiAqLw0KKwlf X2xlMzIgdmFsdWU7DQorfSBfX3BhY2tlZDsNCisNCisvKiBIT1NUQ01EX0NNRF9TRVRfQ0REICov DQorc3RydWN0IGhvc3RjbWRfY21kX3NldF9jZGQgew0KKwlzdHJ1Y3QgaG9zdGNtZF9oZWFkZXIg Y21kX2hkcjsNCisJX19sZTMyIGVuYWJsZTsNCit9IF9fcGFja2VkOw0KKw0KKyNlbmRpZiAvKiBf aG9zdGNtZF9oXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwv bXdsd2lmaS9pc3IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3Iu Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjIwYjYwODgNCi0tLSAvZGV2 L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9pc3IuYw0K QEAgLTAsMCArMSwxNTAgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2 ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUg IkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQu IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv biAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0 cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQor ICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICog QVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25h bCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0K Ky8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgaW50ZXJydXB0IHJlbGF0ZWQg ZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1ZGUgImRldi5o Ig0KKyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJpc3IuaCINCisNCisjZGVmaW5lIElO VkFMSURfV0FUQ0hET0cgMHhBQQ0KKw0KK2lycXJldHVybl90IG13bF9pc3IoaW50IGlycSwgdm9p ZCAqZGV2X2lkKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7DQorCXN0 cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwl2b2lkIF9faW9tZW0gKmludF9zdGF0 dXNfbWFzazsNCisJdW5zaWduZWQgaW50IGludF9zdGF0dXMsIGNscl9zdGF0dXM7DQorCXUzMiBz dGF0dXM7DQorDQorCWludF9zdGF0dXNfbWFzayA9IHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVH X0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0s7DQorDQorCWludF9zdGF0dXMgPSByZWFkbChwcml2 LT5pb2Jhc2UxICsgTUFDUkVHX1JFR19BMkhfSU5URVJSVVBUX0NBVVNFKTsNCisNCisJaWYgKGlu dF9zdGF0dXMgPT0gMHgwMDAwMDAwMCkNCisJCXJldHVybiBJUlFfTk9ORTsNCisNCisJaWYgKGlu dF9zdGF0dXMgPT0gMHhmZmZmZmZmZikgew0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJjYXJk IHVucGx1Z2dlZD9cbiIpOw0KKwl9IGVsc2Ugew0KKwkJY2xyX3N0YXR1cyA9IGludF9zdGF0dXM7 DQorDQorCQlpZiAoaW50X3N0YXR1cyAmIE1BQ1JFR19BMkhSSUNfQklUX1RYX0RPTkUpIHsNCisJ CQlpbnRfc3RhdHVzICY9IH5NQUNSRUdfQTJIUklDX0JJVF9UWF9ET05FOw0KKw0KKwkJCWlmICgh cHJpdi0+aXNfdHhfc2NoZWR1bGUpIHsNCisJCQkJc3RhdHVzID0gcmVhZGwoaW50X3N0YXR1c19t YXNrKTsNCisJCQkJd3JpdGVsKChzdGF0dXMgJiB+TUFDUkVHX0EySFJJQ19CSVRfVFhfRE9ORSks DQorCQkJCSAgICAgICBpbnRfc3RhdHVzX21hc2spOw0KKwkJCQl0YXNrbGV0X3NjaGVkdWxlKCZw cml2LT50eF90YXNrKTsNCisJCQkJcHJpdi0+aXNfdHhfc2NoZWR1bGUgPSB0cnVlOw0KKwkJCX0N CisJCX0NCisNCisJCWlmIChpbnRfc3RhdHVzICYgTUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZKSB7 DQorCQkJaW50X3N0YXR1cyAmPSB+TUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZOw0KKw0KKwkJCWlm ICghcHJpdi0+aXNfcnhfc2NoZWR1bGUpIHsNCisJCQkJc3RhdHVzID0gcmVhZGwoaW50X3N0YXR1 c19tYXNrKTsNCisJCQkJd3JpdGVsKChzdGF0dXMgJiB+TUFDUkVHX0EySFJJQ19CSVRfUlhfUkRZ KSwNCisJCQkJICAgICAgIGludF9zdGF0dXNfbWFzayk7DQorCQkJCXRhc2tsZXRfc2NoZWR1bGUo JnByaXYtPnJ4X3Rhc2spOw0KKwkJCQlwcml2LT5pc19yeF9zY2hlZHVsZSA9IHRydWU7DQorCQkJ fQ0KKwkJfQ0KKw0KKwkJaWYgKGludF9zdGF0dXMgJiBNQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1Q VFkpIHsNCisJCQlpbnRfc3RhdHVzICY9IH5NQUNSRUdfQTJIUklDX0JJVF9RVUVfRU1QVFk7DQor DQorCQkJaWYgKCFwcml2LT5pc19xZV9zY2hlZHVsZSkgew0KKwkJCQlzdGF0dXMgPSByZWFkbChp bnRfc3RhdHVzX21hc2spOw0KKwkJCQl3cml0ZWwoKHN0YXR1cyAmIH5NQUNSRUdfQTJIUklDX0JJ VF9RVUVfRU1QVFkpLA0KKwkJCQkgICAgICAgaW50X3N0YXR1c19tYXNrKTsNCisJCQkJdGFza2xl dF9zY2hlZHVsZSgmcHJpdi0+cWVfdGFzayk7DQorCQkJCXByaXYtPmlzX3FlX3NjaGVkdWxlID0g dHJ1ZTsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoaW50X3N0YXR1cyAmIE1BQ1JFR19BMkhSSUNf QkFfV0FUQ0hET0cpIHsNCisJCQlzdGF0dXMgPSByZWFkbChpbnRfc3RhdHVzX21hc2spOw0KKwkJ CXdyaXRlbCgoc3RhdHVzICYgfk1BQ1JFR19BMkhSSUNfQkFfV0FUQ0hET0cpLA0KKwkJCSAgICAg ICBpbnRfc3RhdHVzX21hc2spOw0KKwkJCWludF9zdGF0dXMgJj0gfk1BQ1JFR19BMkhSSUNfQkFf V0FUQ0hET0c7DQorCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZwcml2LT53YXRjaGRvZ19i YV9oYW5kbGUpOw0KKwkJfQ0KKw0KKwkJd3JpdGVsKH5jbHJfc3RhdHVzLA0KKwkJICAgICAgIHBy aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfQ0FVU0UpOw0KKwl9DQorDQor CXJldHVybiBJUlFfSEFORExFRDsNCit9DQorDQordm9pZCBtd2xfd2F0Y2hkb2dfYmFfZXZlbnRz KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCWludCByYzsNCisJdTggYml0bWFwID0g MCwgc3RyZWFtX2luZGV4Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtczsNCisJ c3RydWN0IG13bF9wcml2ICpwcml2ID0NCisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXds X3ByaXYsIHdhdGNoZG9nX2JhX2hhbmRsZSk7DQorCXUzMiBzdGF0dXM7DQorDQorCXJjID0gbXds X2Z3Y21kX2dldF93YXRjaGRvZ19iaXRtYXAocHJpdi0+aHcsICZiaXRtYXApOw0KKw0KKwlpZiAo cmMpDQorCQlnb3RvIGRvbmU7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2sp Ow0KKw0KKwkvKiB0aGUgYml0bWFwIGlzIHRoZSBodyBxdWV1ZSBudW1iZXIuICBNYXAgaXQgdG8g dGhlIGFtcGR1IHF1ZXVlLiAqLw0KKwlpZiAoYml0bWFwICE9IElOVkFMSURfV0FUQ0hET0cpIHsN CisJCWlmIChiaXRtYXAgPT0gU1lTQURQVF9UWF9BTVBEVV9RVUVVRVMpDQorCQkJc3RyZWFtX2lu ZGV4ID0gMDsNCisJCWVsc2UgaWYgKGJpdG1hcCA+IFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTKQ0K KwkJCXN0cmVhbV9pbmRleCA9IGJpdG1hcCAtIFNZU0FEUFRfVFhfQU1QRFVfUVVFVUVTOw0KKwkJ ZWxzZQ0KKwkJCXN0cmVhbV9pbmRleCA9IGJpdG1hcCArIDM7IC8qKiBxdWV1ZSAwIGlzIHN0cmVh bSAzKi8NCisNCisJCWlmIChiaXRtYXAgIT0gMHhGRikgew0KKwkJCS8qIENoZWNrIGlmIHRoZSBz dHJlYW0gaXMgaW4gdXNlIGJlZm9yZSBkaXNhYmxpbmcgaXQgKi8NCisJCQlzdHJlYW1zID0gJnBy aXYtPmFtcGR1W3N0cmVhbV9pbmRleF07DQorDQorCQkJaWYgKHN0cmVhbXMtPnN0YXRlID09IEFN UERVX1NUUkVBTV9BQ1RJVkUpDQorCQkJCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3Ry ZWFtcy0+c3RhLA0KKwkJCQkJCQkgICAgIHN0cmVhbXMtPnRpZCk7DQorCQl9IGVsc2Ugew0KKwkJ CWZvciAoc3RyZWFtX2luZGV4ID0gMDsNCisJCQkgICAgIHN0cmVhbV9pbmRleCA8IFNZU0FEUFRf VFhfQU1QRFVfUVVFVUVTOw0KKwkJCSAgICAgc3RyZWFtX2luZGV4KyspIHsNCisJCQkJc3RyZWFt cyA9ICZwcml2LT5hbXBkdVtzdHJlYW1faW5kZXhdOw0KKw0KKwkJCQlpZiAoc3RyZWFtcy0+c3Rh dGUgIT0gQU1QRFVfU1RSRUFNX0FDVElWRSkNCisJCQkJCWNvbnRpbnVlOw0KKw0KKwkJCQlpZWVl ODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cmVhbXMtPnN0YSwNCisJCQkJCQkJICAgICBzdHJl YW1zLT50aWQpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+ c3RyZWFtX2xvY2spOw0KKw0KK2RvbmU6DQorDQorCXN0YXR1cyA9IHJlYWRsKHByaXYtPmlvYmFz ZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KKwl3cml0ZWwoc3Rh dHVzIHwgTUFDUkVHX0EySFJJQ19CQV9XQVRDSERPRywNCisJICAgICAgIHByaXYtPmlvYmFzZTEg KyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KK30NCmRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmggYi9kcml2ZXJzL25l dC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi4yNTk4MTE1DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvaXNyLmgNCkBAIC0wLDAgKzEsMjYgQEANCisvKg0KKyAq IENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAq DQorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBN YXJ2ZWxsIEludGVybmF0aW9uYWwNCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJM aWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBG aWxlIGluDQorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUg SVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBU SEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAg VGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3 YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAqLw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxl IGRlZmluZXMgaW50ZXJydXB0IHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpZm5kZWYgX2lz cl9oXw0KKyNkZWZpbmUgX2lzcl9oXw0KKw0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4N CisNCitpcnFyZXR1cm5fdCBtd2xfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7DQordm9pZCBt d2xfd2F0Y2hkb2dfYmFfZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQorDQorI2Vu ZGlmIC8qIF9pc3JfaF8gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2 ZWxsL213bHdpZmkvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS9tYWM4MDIxMS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZmY5 MzM1Nw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9t d2x3aWZpL21hYzgwMjExLmMNCkBAIC0wLDAgKzEsNjk5IEBADQorLyoNCisgKiBDb3B5cmlnaHQg KEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMg c29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRl cm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAg WW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAq IGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2Us IGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJV VEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNl IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlz Y2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRz IG1hYzgwMjExIHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhl cmRldmljZS5oPg0KKw0KKyNpbmNsdWRlICJzeXNhZHB0LmgiDQorI2luY2x1ZGUgImRldi5oIg0K KyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJ0eC5oIg0KKw0KKyNkZWZpbmUgTVdMX0RS Vl9OQU1FICAgICAgICBLQlVJTERfTU9ETkFNRQ0KKw0KKyNkZWZpbmUgTUFYX0FNUERVX0FUVEVN UFRTICA1DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2xfcmF0ZXNf MjRbXSA9IHsNCisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LA0KKwl7IC5iaXRy YXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sDQorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVl ID0gMTEsIH0sDQorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDIyLCB9LA0KKwl7IC5i aXRyYXRlID0gMjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwNCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdf dmFsdWUgPSAxMiwgfSwNCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwNCisJ eyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sDQorCXsgLmJpdHJhdGUgPSAxODAs IC5od192YWx1ZSA9IDM2LCB9LA0KKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA0OCwg fSwNCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sDQorCXsgLmJpdHJhdGUg PSA0ODAsIC5od192YWx1ZSA9IDk2LCB9LA0KKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUg PSAxMDgsIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13 bF9yYXRlc181MFtdID0gew0KKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDEyLCB9LA0K Kwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LA0KKwl7IC5iaXRyYXRlID0gMTIw LCAuaHdfdmFsdWUgPSAyNCwgfSwNCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYs IH0sDQorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LA0KKwl7IC5iaXRyYXRl ID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwNCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVl ID0gOTYsIH0sDQorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDEwOCwgfSwNCit9Ow0K Kw0KK3N0YXRpYyB2b2lkIG13bF9tYWM4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywN CisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLA0KKwkJCSAgICBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnBy aXY7DQorDQorCWlmICghcHJpdi0+cmFkaW9fb24pIHsNCisJCXdpcGh5X3dhcm4oaHctPndpcGh5 LA0KKwkJCSAgICJkcm9wcGVkIFRYIGZyYW1lIHNpbmNlIHJhZGlvIGlzIGRpc2FibGVkXG4iKTsN CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQorCQlyZXR1cm47DQorCX0NCisNCisJbXdsX3R4 X3htaXQoaHcsIGNvbnRyb2wsIHNrYik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjEx X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpw cml2ID0gaHctPnByaXY7DQorCWludCByYzsNCisNCisJLyogRW5hYmxlIFRYIHJlY2xhaW0gYW5k IFJYIHRhc2tsZXRzLiAqLw0KKwl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRh c2tsZXRfZW5hYmxlKCZwcml2LT5yeF90YXNrKTsNCisJdGFza2xldF9lbmFibGUoJnByaXYtPnFl X3Rhc2spOw0KKw0KKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwltd2xfZndjbWRfaW50X2Vu YWJsZShodyk7DQorDQorCXJjID0gbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShodyk7DQorCWlmIChy YykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xfZndjbWRfc2V0X3JhdGVfYWRhcHRf bW9kZShodywgMCk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xf ZndjbWRfc2V0X3dtbV9tb2RlKGh3LCB0cnVlKTsNCisJaWYgKHJjKQ0KKwkJZ290byBmd2NtZF9m YWlsOw0KKwlyYyA9IG13bF9md2NtZF9odF9ndWFyZF9pbnRlcnZhbChodywgR1VBUkRfSU5URVJW QUxfQVVUTyk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRfZmFpbDsNCisJcmMgPSBtd2xfZndj bWRfc2V0X2R3ZHNfc3RhbW9kZShodywgdHJ1ZSk7DQorCWlmIChyYykNCisJCWdvdG8gZndjbWRf ZmFpbDsNCisJcmMgPSBtd2xfZndjbWRfc2V0X2Z3X2ZsdXNoX3RpbWVyKGh3LCBTWVNBRFBUX0FN U0RVX0ZMVVNIX1RJTUUpOw0KKwlpZiAocmMpDQorCQlnb3RvIGZ3Y21kX2ZhaWw7DQorCXJjID0g bXdsX2Z3Y21kX3NldF9vcHRpbWl6YXRpb25fbGV2ZWwoaHcsIDEpOw0KKwlpZiAocmMpDQorCQln b3RvIGZ3Y21kX2ZhaWw7DQorDQorCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7DQorCXJldHVy biAwOw0KKw0KK2Z3Y21kX2ZhaWw6DQorCW13bF9md2NtZF9pbnRfZGlzYWJsZShodyk7DQorCXRh c2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+ cnhfdGFzayk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cWVfdGFzayk7DQorDQorCXJldHVy biByYzsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX21hYzgwMjExX3N0b3Aoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisN CisJbXdsX2Z3Y21kX3JhZGlvX2Rpc2FibGUoaHcpOw0KKw0KKwlpZWVlODAyMTFfc3RvcF9xdWV1 ZXMoaHcpOw0KKw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCisJbXdsX2Z3Y21kX2ludF9k aXNhYmxlKGh3KTsNCisNCisJLyogRGlzYWJsZSBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4g Ki8NCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF90YXNrKTsNCisJdGFza2xldF9kaXNhYmxl KCZwcml2LT5yeF90YXNrKTsNCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT5xZV90YXNrKTsNCisN CisJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovDQorCW13bF90eF9kb25lKCh1bnNp Z25lZCBsb25nKWh3KTsNCit9DQorDQorc3RhdGljIGludCBtd2xfbWFjODAyMTFfYWRkX2ludGVy ZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlz dHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJdTMyIG1hY2lkc19zdXBwb3J0ZWQ7DQorCWludCBt YWNpZDsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9B UDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwkJbWFjaWRzX3N1cHBvcnRl ZCA9IHByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQ7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjEx X0lGVFlQRV9TVEFUSU9OOg0KKwkJbWFjaWRzX3N1cHBvcnRlZCA9IHByaXYtPnN0YV9tYWNpZHNf c3VwcG9ydGVkOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJ fQ0KKw0KKwltYWNpZCA9IGZmcyhtYWNpZHNfc3VwcG9ydGVkICYgfnByaXYtPm1hY2lkc191c2Vk KTsNCisNCisJaWYgKCFtYWNpZCkgew0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJubyBtYWNp ZCBjYW4gYmUgYWxsb2NhdGVkXG4iKTsNCisJCXJldHVybiAtRUJVU1k7DQorCX0NCisJbWFjaWQt LTsNCisNCisJLyogU2V0dXAgZHJpdmVyIHByaXZhdGUgYXJlYS4gKi8NCisJbXdsX3ZpZiA9IG13 bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKwltZW1zZXQobXdsX3ZpZiwgMCwgc2l6ZW9mKCptd2xfdmlm KSk7DQorCW13bF92aWYtPm1hY2lkID0gbWFjaWQ7DQorCW13bF92aWYtPnNlcW5vID0gMDsNCisJ bXdsX3ZpZi0+aXNfaHdfY3J5cHRvX2VuYWJsZWQgPSBmYWxzZTsNCisJbXdsX3ZpZi0+YmVhY29u X2luZm8udmFsaWQgPSBmYWxzZTsNCisJbXdsX3ZpZi0+aXYxNiA9IDE7DQorCW13bF92aWYtPml2 MzIgPSAwOw0KKwltd2xfdmlmLT5rZXlpZHggPSAwOw0KKw0KKwlzd2l0Y2ggKHZpZi0+dHlwZSkg ew0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJZXRoZXJfYWRkcl9jb3B5KG13bF92aWYt PmJzc2lkLCB2aWYtPmFkZHIpOw0KKwkJbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2FkZF9zZWxmKGh3 LCB2aWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJ CWV0aGVyX2FkZHJfY29weShtd2xfdmlmLT5ic3NpZCwgdmlmLT5hZGRyKTsNCisJCW13bF9md2Nt ZF9zZXRfbmV3X3N0bl9hZGRfc2VsZihodywgdmlmKTsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAy MTFfSUZUWVBFX1NUQVRJT046DQorCQlldGhlcl9hZGRyX2NvcHkobXdsX3ZpZi0+c3RhX21hYywg dmlmLT5hZGRyKTsNCisJCW13bF9md2NtZF9ic3Nfc3RhcnQoaHcsIHZpZiwgdHJ1ZSk7DQorCQlt d2xfZndjbWRfc2V0X2luZnJhX21vZGUoaHcsIHZpZik7DQorCQltd2xfZndjbWRfc2V0X21hY19h ZGRyX2NsaWVudChodywgdmlmLCB2aWYtPmFkZHIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlwcml2LT5tYWNpZHNfdXNlZCB8PSAxIDw8IG13 bF92aWYtPm1hY2lkOw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCisJbGlzdF9h ZGRfdGFpbCgmbXdsX3ZpZi0+bGlzdCwgJnByaXYtPnZpZl9saXN0KTsNCisJc3Bpbl91bmxvY2tf YmgoJnByaXYtPnZpZl9sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IG13bF9tYWM4MDIxMV9yZW1vdmVfdmlmKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJICAg IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3Zp ZiA9IG13bF9kZXZfZ2V0X3ZpZih2aWYpOw0KKw0KKwlpZiAoIXByaXYtPm1hY2lkc191c2VkKQ0K KwkJcmV0dXJuOw0KKw0KKwltd2xfdHhfZGVsX3BrdHNfdmlhX3ZpZihwcml2LT5odywgdmlmKTsN CisNCisJcHJpdi0+bWFjaWRzX3VzZWQgJj0gfigxIDw8IG13bF92aWYtPm1hY2lkKTsNCisJc3Bp bl9sb2NrX2JoKCZwcml2LT52aWZfbG9jayk7DQorCWxpc3RfZGVsKCZtd2xfdmlmLT5saXN0KTsN CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQg bXdsX21hYzgwMjExX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQor CQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYg KnByaXYgPSBody0+cHJpdjsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgw MjExX0lGVFlQRV9BUDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwkJbXds X2Z3Y21kX3NldF9uZXdfc3RuX2RlbChodywgdmlmLCB2aWYtPmFkZHIpOw0KKwkJYnJlYWs7DQor CWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJCW13bF9md2NtZF9yZW1vdmVfbWFjX2Fk ZHIoaHcsIHZpZiwgdmlmLT5hZGRyKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7 DQorCX0NCisNCisJbXdsX21hYzgwMjExX3JlbW92ZV92aWYocHJpdiwgdmlmKTsNCit9DQorDQor c3RhdGljIGludCBtd2xfbWFjODAyMTFfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K KwkJCSAgICAgICB1MzIgY2hhbmdlZCkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29u ZiA9ICZody0+Y29uZjsNCisJaW50IHJjOw0KKw0KKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJj aGFuZ2U6IDB4JXhcbiIsIGNoYW5nZWQpOw0KKw0KKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAy MTFfQ09ORl9JRExFKQ0KKwkJcmMgPSBtd2xfZndjbWRfcmFkaW9fZGlzYWJsZShodyk7DQorCWVs c2UNCisJCXJjID0gbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZShodyk7DQorDQorCWlmIChyYykNCisJ CWdvdG8gb3V0Ow0KKw0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFO TkVMKSB7DQorCQlpbnQgcmF0ZSA9IDA7DQorDQorCQlpZiAoY29uZi0+Y2hhbmRlZi5jaGFuLT5i YW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsNCisJCQltd2xfZndjbWRfc2V0X2FwbW9kZSho dywgQVBfTU9ERV8yXzRHSFpfMTFBQ19NSVhFRCk7DQorCQkJbXdsX2Z3Y21kX3NldF9saW5rYWRh cHRfY3NfbW9kZShodywNCisJCQkJCQkJTElOS19DU19TVEFURV9DT05TRVJWKTsNCisJCQlyYXRl ID0gbXdsX3JhdGVzXzI0WzBdLmh3X3ZhbHVlOw0KKwkJfSBlbHNlIGlmIChjb25mLT5jaGFuZGVm LmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgew0KKwkJCW13bF9md2NtZF9zZXRf YXBtb2RlKGh3LCBBUF9NT0RFXzExQUMpOw0KKwkJCW13bF9md2NtZF9zZXRfbGlua2FkYXB0X2Nz X21vZGUoaHcsDQorCQkJCQkJCUxJTktfQ1NfU1RBVEVfQVVUTyk7DQorCQkJcmF0ZSA9IG13bF9y YXRlc181MFswXS5od192YWx1ZTsNCisJCX0NCisNCisJCXJjID0gbXdsX2Z3Y21kX3NldF9yZl9j aGFubmVsKGh3LCBjb25mKTsNCisJCWlmIChyYykNCisJCQlnb3RvIG91dDsNCisJCXJjID0gbXds X2Z3Y21kX3VzZV9maXhlZF9yYXRlKGh3LCByYXRlLCByYXRlKTsNCisJCWlmIChyYykNCisJCQln b3RvIG91dDsNCisJCXJjID0gbXdsX2Z3Y21kX21heF90eF9wb3dlcihodywgY29uZiwgMCk7DQor CQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorCQlyYyA9IG13bF9md2NtZF90eF9wb3dlcihodywg Y29uZiwgMCk7DQorCQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorCQlyYyA9IG13bF9md2NtZF9z ZXRfY2RkKGh3KTsNCisJfQ0KKw0KK291dDoNCisNCisJcmV0dXJuIHJjOw0KK30NCisNCitzdGF0 aWMgdm9pZCBtd2xfbWFjODAyMTFfYnNzX2luZm9fY2hhbmdlZF9zdGEoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkJ ICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywNCisJCQkJCSAgICAgIHUzMiBj aGFuZ2VkKQ0KK3sNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpDQor CQltd2xfZndjbWRfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LA0KKwkJCQkJICAgICB2aWYtPmJzc19j b25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7DQorDQorCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VE X0FTU09DKSAmJiB2aWYtPmJzc19jb25mLmFzc29jKQ0KKwkJbXdsX2Z3Y21kX3NldF9haWQoaHcs IHZpZiwgKHU4ICopdmlmLT5ic3NfY29uZi5ic3NpZCwNCisJCQkJICB2aWYtPmJzc19jb25mLmFp ZCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkX2Fw KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLA0KKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJ CQkJICAgICB1MzIgY2hhbmdlZCkNCit7DQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQ X1BSRUFNQkxFKQ0KKwkJbXdsX2Z3Y21kX3NldF9yYWRpb19wcmVhbWJsZShodywNCisJCQkJCSAg ICAgdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOw0KKw0KKwlpZiAoY2hhbmdlZCAm IEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7DQorCQlpbnQgaWR4Ow0KKwkJaW50IHJhdGU7DQor DQorCQkvKiBVc2UgbG93ZXN0IHN1cHBvcnRlZCBiYXNpYyByYXRlIGZvciBtdWx0aWNhc3RzDQor CQkgKiBhbmQgbWFuYWdlbWVudCBmcmFtZXMgKHN1Y2ggYXMgcHJvYmUgcmVzcG9uc2VzIC0tDQor CQkgKiBiZWFjb25zIHdpbGwgYWx3YXlzIGdvIG91dCBhdCAxIE1iL3MpLg0KKwkJICovDQorCQlp ZHggPSBmZnModmlmLT5ic3NfY29uZi5iYXNpY19yYXRlcyk7DQorCQlpZiAoaWR4KQ0KKwkJCWlk eC0tOw0KKw0KKwkJaWYgKGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBJRUVFODAyMTFf QkFORF8yR0haKQ0KKwkJCXJhdGUgPSBtd2xfcmF0ZXNfMjRbaWR4XS5od192YWx1ZTsNCisJCWVs c2UNCisJCQlyYXRlID0gbXdsX3JhdGVzXzUwW2lkeF0uaHdfdmFsdWU7DQorDQorCQltd2xfZndj bWRfdXNlX2ZpeGVkX3JhdGUoaHcsIHJhdGUsIHJhdGUpOw0KKwl9DQorDQorCWlmIChjaGFuZ2Vk ICYgKEJTU19DSEFOR0VEX0JFQUNPTl9JTlQgfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7DQorCQlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwkJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcs IHZpZik7DQorDQorCQlpZiAoc2tiKSB7DQorCQkJbXdsX2Z3Y21kX3NldF9iZWFjb24oaHcsIHZp Ziwgc2tiLT5kYXRhLCBza2ItPmxlbik7DQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJ CX0NCisNCisJCWlmICgoaW5mby0+c3NpZFswXSAhPSAnXDAnKSAmJg0KKwkJICAgIChpbmZvLT5z c2lkX2xlbiAhPSAwKSAmJg0KKwkJICAgICghaW5mby0+aGlkZGVuX3NzaWQpKQ0KKwkJCW13bF9m d2NtZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUoaHcsIHZpZiwgdHJ1ZSk7DQorCQllbHNlDQorCQkJ bXdsX2Z3Y21kX2Jyb2FkY2FzdF9zc2lkX2VuYWJsZShodywgdmlmLCBmYWxzZSk7DQorCX0NCisN CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkNCisJCW13bF9md2Nt ZF9ic3Nfc3RhcnQoaHcsIHZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIG13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkJICBzdHJ1Y3Qg aWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJCQkJICB1MzIgY2hhbmdlZCkNCit7DQorCXN3 aXRjaCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQorCWNhc2UgTkw4 MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJCW13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2Vk X2FwKGh3LCB2aWYsIGluZm8sIGNoYW5nZWQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9J RlRZUEVfU1RBVElPTjoNCisJCW13bF9tYWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkX3N0YShodywg dmlmLCBpbmZvLCBjaGFuZ2VkKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQor CX0NCit9DQorDQorc3RhdGljIHZvaWQgbXdsX21hYzgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdz LA0KKwkJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLA0KKwkJCQkJICB1NjQgbXVsdGlj YXN0KQ0KK3sNCisJLyogQVAgZmlybXdhcmUgZG9lc24ndCBhbGxvdyBmaW5lLWdyYWluZWQgY29u dHJvbCBvdmVyDQorCSAqIHRoZSByZWNlaXZlIGZpbHRlci4NCisJICovDQorCSp0b3RhbF9mbGFn cyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsNCit9DQorDQorc3Rh dGljIGludCBtd2xfbWFjODAyMTFfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJ CQkJZW51bSBzZXRfa2V5X2NtZCBjbWRfcGFyYW0sDQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJCXN0cnVjdCBpZWVl ODAyMTFfa2V5X2NvbmYgKmtleSkNCit7DQorCXN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KKwlp bnQgcmMgPSAwOw0KKwl1OCBlbmNyX3R5cGU7DQorCXU4ICphZGRyOw0KKw0KKwltd2xfdmlmID0g bXdsX2Rldl9nZXRfdmlmKHZpZik7DQorDQorCWlmICghc3RhKSB7DQorCQlhZGRyID0gdmlmLT5h ZGRyOw0KKwl9IGVsc2Ugew0KKwkJYWRkciA9IHN0YS0+YWRkcjsNCisJCWlmICh2aWYtPnR5cGUg PT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCQlldGhlcl9hZGRyX2NvcHkobXdsX3ZpZi0+ YnNzaWQsIGFkZHIpOw0KKwl9DQorDQorCWlmIChjbWRfcGFyYW0gPT0gU0VUX0tFWSkgew0KKwkJ cmMgPSBtd2xfZndjbWRfZW5jcnlwdGlvbl9zZXRfa2V5KGh3LCB2aWYsIGFkZHIsIGtleSk7DQor DQorCQlpZiAocmMpDQorCQkJZ290byBvdXQ7DQorDQorCQlpZiAoKGtleS0+Y2lwaGVyID09IFdM QU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fA0KKwkJICAgIChrZXktPmNpcGhlciA9PSBXTEFOX0NJ UEhFUl9TVUlURV9XRVAxMDQpKSB7DQorCQkJZW5jcl90eXBlID0gRU5DUl9UWVBFX1dFUDsNCisJ CX0gZWxzZSBpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgew0KKwkJ CWVuY3JfdHlwZSA9IEVOQ1JfVFlQRV9BRVM7DQorCQkJaWYgKChrZXktPmZsYWdzICYgSUVFRTgw MjExX0tFWV9GTEFHX1BBSVJXSVNFKSA9PSAwKSB7DQorCQkJCWlmICh2aWYtPnR5cGUgIT0gTkw4 MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCQkJCW13bF92aWYtPmtleWlkeCA9IGtleS0+a2V5aWR4 Ow0KKwkJCX0NCisJCX0gZWxzZSBpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVf VEtJUCkgew0KKwkJCWVuY3JfdHlwZSA9IEVOQ1JfVFlQRV9US0lQOw0KKwkJfSBlbHNlIHsNCisJ CQllbmNyX3R5cGUgPSBFTkNSX1RZUEVfRElTQUJMRTsNCisJCX0NCisNCisJCXJjID0gbXdsX2Z3 Y21kX3VwZGF0ZV9lbmNyeXB0aW9uX2VuYWJsZShodywgdmlmLCBhZGRyLA0KKwkJCQkJCQllbmNy X3R5cGUpOw0KKwkJaWYgKHJjKQ0KKwkJCWdvdG8gb3V0Ow0KKw0KKwkJbXdsX3ZpZi0+aXNfaHdf Y3J5cHRvX2VuYWJsZWQgPSB0cnVlOw0KKwl9IGVsc2Ugew0KKwkJcmMgPSBtd2xfZndjbWRfZW5j cnlwdGlvbl9yZW1vdmVfa2V5KGh3LCB2aWYsIGFkZHIsIGtleSk7DQorCQlpZiAocmMpDQorCQkJ Z290byBvdXQ7DQorCX0NCisNCitvdXQ6DQorDQorCXJldHVybiByYzsNCit9DQorDQorc3RhdGlj IGludCBtd2xfbWFjODAyMTFfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsDQorCQkJCQkgIHUzMiB2YWx1ZSkNCit7DQorCXJldHVybiBtd2xfZndjbWRfc2V0X3J0c190 aHJlc2hvbGQoaHcsIHZhbHVlKTsNCit9DQorDQorc3RhdGljIGludCBtd2xfbWFjODAyMTFfc3Rh X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwNCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtd2xf cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3Ry dWN0IG13bF9zdGEgKnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7 DQorCWludCByYzsNCisJaW50IGk7DQorDQorCW13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlm KTsNCisJc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJbWVtc2V0KHN0YV9p bmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7DQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9J RlRZUEVfTUVTSF9QT0lOVCkNCisJCXN0YV9pbmZvLT5pc19tZXNoX25vZGUgPSB0cnVlOw0KKwlp ZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7DQorCQlzdGFfaW5mby0+aXNfYW1wZHVfYWxs b3dlZCA9IHRydWU7DQorCQlzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCA9IGZhbHNlOw0KKwkJ aWYgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKQ0KKwkJCXN0 YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9IE1XTF9BTVNEVV9TSVpFXzhLOw0KKwkJZWxzZQ0KKwkJ CXN0YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9IE1XTF9BTVNEVV9TSVpFXzRLOw0KKwl9DQorCXN0 YV9pbmZvLT5pdjE2ID0gMTsNCisJc3RhX2luZm8tPml2MzIgPSAwOw0KKwlzcGluX2xvY2tfaW5p dCgmc3RhX2luZm8tPmFtc2R1X2xvY2spOw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2Nr KTsNCisJbGlzdF9hZGRfdGFpbCgmc3RhX2luZm8tPmxpc3QsICZwcml2LT5zdGFfbGlzdCk7DQor CXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorDQorCWlmICh2aWYtPnR5cGUgPT0g Tkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCisJCW13bF9md2NtZF9zZXRfbmV3X3N0bl9kZWwoaHcs IHZpZiwgc3RhLT5hZGRyKTsNCisNCisJcmMgPSBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkKGh3 LCB2aWYsIHN0YSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBOVU1fV0VQX0tFWVM7IGkrKykgew0K KwkJa2V5ID0gKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKiltd2xfdmlmLT53ZXBfa2V5X2Nv bmZbaV0ua2V5Ow0KKw0KKwkJaWYgKG13bF92aWYtPndlcF9rZXlfY29uZltpXS5lbmFibGVkKQ0K KwkJCW13bF9tYWM4MDIxMV9zZXRfa2V5KGh3LCBTRVRfS0VZLCB2aWYsIHN0YSwga2V5KTsNCisJ fQ0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX3N0YV9y ZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsDQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50IHJjOw0KKwlzdHJ1Y3QgbXdsX3N0 YSAqc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJbXdsX3R4X2RlbF9zdGFf YW1zZHVfcGt0cyhzdGEpOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsN CisJbXdsX2Z3Y21kX2RlbF9zdGFfc3RyZWFtcyhodywgc3RhKTsNCisJc3Bpbl91bmxvY2tfYmgo JnByaXYtPnN0cmVhbV9sb2NrKTsNCisNCisJbXdsX3R4X2RlbF9wa3RzX3ZpYV9zdGEoaHcsIHN0 YSk7DQorDQorCXJjID0gbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2RlbChodywgdmlmLCBzdGEtPmFk ZHIpOw0KKw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisJbGlzdF9kZWwoJnN0 YV9pbmZvLT5saXN0KTsNCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisNCisJ cmV0dXJuIHJjOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9tYWM4MDIxMV9jb25mX3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJ CQl1MTYgcXVldWUsDQorCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1z ICpwYXJhbXMpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJaW50 IHJjID0gMDsNCisNCisJaWYgKFdBUk5fT04ocXVldWUgPiBTWVNBRFBUX1RYX1dNTV9RVUVVRVMg LSAxKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwltZW1jcHkoJnByaXYtPndtbV9wYXJhbXNb cXVldWVdLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7DQorDQorCWlmICghcHJpdi0+d21tX2Vu YWJsZWQpIHsNCisJCXJjID0gbXdsX2Z3Y21kX3NldF93bW1fbW9kZShodywgdHJ1ZSk7DQorCQlw cml2LT53bW1fZW5hYmxlZCA9IHRydWU7DQorCX0NCisNCisJaWYgKCFyYykgew0KKwkJaW50IHEg PSBTWVNBRFBUX1RYX1dNTV9RVUVVRVMgLSAxIC0gcXVldWU7DQorDQorCQlyYyA9IG13bF9md2Nt ZF9zZXRfZWRjYV9wYXJhbXMoaHcsIHEsDQorCQkJCQkgICAgICAgcGFyYW1zLT5jd19taW4sIHBh cmFtcy0+Y3dfbWF4LA0KKwkJCQkJICAgICAgIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKTsN CisJfQ0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2dl dF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjEx X2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpDQorew0KKwlyZXR1cm4gbXdsX2Z3Y21kX2dldF9zdGF0 KGh3LCBzdGF0cyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2dldF9zdXJ2ZXko c3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgIGludCBpZHgsDQorCQkJCSAgIHN0cnVj dCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct PnByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsNCisNCisJ aWYgKGlkeCAhPSAwKQ0KKwkJcmV0dXJuIC1FTk9FTlQ7DQorDQorCXN1cnZleS0+Y2hhbm5lbCA9 IGNvbmYtPmNoYW5kZWYuY2hhbjsNCisJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lT RV9EQk07DQorCXN1cnZleS0+bm9pc2UgPSBwcml2LT5ub2lzZTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCQkg ICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwNCisJCQkJICAgICBz dHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCQkgICAgIHUxNiB0aWQsIHUxNiAqc3NuLCB1 OCBidWZfc2l6ZSwgYm9vbCBhbXNkdSkNCit7DQorCWludCByYyA9IDA7DQorCXN0cnVjdCBtd2xf cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFt Ow0KKwl1OCAqYWRkciA9IHN0YS0+YWRkciwgaWR4Ow0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu Zm87DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7DQorDQorCXNwaW5fbG9j a19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKw0KKwlzdHJlYW0gPSBtd2xfZndjbWRfbG9va3Vw X3N0cmVhbShodywgYWRkciwgdGlkKTsNCisNCisJc3dpdGNoIChhY3Rpb24pIHsNCisJY2FzZSBJ RUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6DQorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6 DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6DQorCQlpZiAoIXN0 YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkKSB7DQorCQkJd2lwaHlfd2Fybihody0+d2lwaHksICJh bXBkdSBub3QgYWxsb3dlZFxuIik7DQorCQkJcmMgPSAtRVBFUk07DQorCQkJYnJlYWs7DQorCQl9 DQorDQorCQlpZiAoIXN0cmVhbSkgew0KKwkJCXN0cmVhbSA9IG13bF9md2NtZF9hZGRfc3RyZWFt KGh3LCBzdGEsIHRpZCk7DQorCQkJaWYgKCFzdHJlYW0pIHsNCisJCQkJd2lwaHlfd2Fybihody0+ d2lwaHksICJubyBzdHJlYW0gZm91bmRcbiIpOw0KKwkJCQlyYyA9IC1FUEVSTTsNCisJCQkJYnJl YWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2Nr KTsNCisJCXJjID0gbXdsX2Z3Y21kX2NoZWNrX2JhKGh3LCBzdHJlYW0sIHZpZik7DQorCQlzcGlu X2xvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJCWlmIChyYykgew0KKwkJCW13bF9md2Nt ZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJCXdpcGh5X2Vycihody0+d2lwaHksDQor CQkJCSAgImFtcGR1IHN0YXJ0IGVycm9yIGNvZGU6ICVkXG4iLCByYyk7DQorCQkJcmMgPSAtRVBF Uk07DQorCQkJYnJlYWs7DQorCQl9DQorCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX0lO X1BST0dSRVNTOw0KKwkJKnNzbiA9IDA7DQorCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJx c2FmZSh2aWYsIGFkZHIsIHRpZCk7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVf VFhfU1RPUF9DT05UOg0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOg0KKwlj YXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIX0NPTlQ6DQorCQlpZiAoc3RyZWFtKSB7 DQorCQkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX0FDVElWRSkgew0KKwkJCQlt d2xfdHhfZGVsX2FtcGR1X3BrdHMoaHcsIHN0YSwgdGlkKTsNCisJCQkJaWR4ID0gc3RyZWFtLT5p ZHg7DQorCQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdHJlYW1fbG9jayk7DQorCQkJCW13bF9m d2NtZF9kZXN0cm95X2JhKGh3LCBpZHgpOw0KKwkJCQlzcGluX2xvY2tfYmgoJnByaXYtPnN0cmVh bV9sb2NrKTsNCisJCQl9DQorDQorCQkJbXdsX2Z3Y21kX3JlbW92ZV9zdHJlYW0oaHcsIHN0cmVh bSk7DQorCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIGFkZHIsIHRpZCk7 DQorCQl9IGVsc2Ugew0KKwkJCXJjID0gLUVQRVJNOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2Ug SUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOg0KKwkJaWYgKHN0cmVhbSkgew0KKwkJCWlm IChXQVJOX09OKHN0cmVhbS0+c3RhdGUgIT0NCisJCQkJICAgIEFNUERVX1NUUkVBTV9JTl9QUk9H UkVTUykpIHsNCisJCQkJcmMgPSAtRVBFUk07DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCQlzcGlu X3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwkJCXJjID0gbXdsX2Z3Y21kX2NyZWF0 ZV9iYShodywgc3RyZWFtLCBidWZfc2l6ZSwgdmlmKTsNCisJCQlzcGluX2xvY2tfYmgoJnByaXYt PnN0cmVhbV9sb2NrKTsNCisNCisJCQlpZiAoIXJjKSB7DQorCQkJCXN0cmVhbS0+c3RhdGUgPSBB TVBEVV9TVFJFQU1fQUNUSVZFOw0KKwkJCX0gZWxzZSB7DQorCQkJCWlkeCA9IHN0cmVhbS0+aWR4 Ow0KKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwkJCQltd2xfZndj bWRfZGVzdHJveV9iYShodywgaWR4KTsNCisJCQkJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdHJlYW1f bG9jayk7DQorCQkJCW13bF9md2NtZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJCQl3 aXBoeV9lcnIoaHctPndpcGh5LA0KKwkJCQkJICAiYW1wZHUgb3BlcmF0aW9uIGVycm9yIGNvZGU6 ICVkXG4iLA0KKwkJCQkJICByYyk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlyYyA9IC1FUEVS TTsNCisJCX0NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmMgPSAtRU5PVFNVUFA7DQorCQli cmVhazsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKw0K KwlyZXR1cm4gcmM7DQorfQ0KKw0KK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bF9tYWM4 MDIxMV9vcHMgPSB7DQorCS50eCAgICAgICAgICAgICAgICAgPSBtd2xfbWFjODAyMTFfdHgsDQor CS5zdGFydCAgICAgICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RhcnQsDQorCS5zdG9wICAgICAg ICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RvcCwNCisJLmFkZF9pbnRlcmZhY2UgICAgICA9IG13 bF9tYWM4MDIxMV9hZGRfaW50ZXJmYWNlLA0KKwkucmVtb3ZlX2ludGVyZmFjZSAgID0gbXdsX21h YzgwMjExX3JlbW92ZV9pbnRlcmZhY2UsDQorCS5jb25maWcgICAgICAgICAgICAgPSBtd2xfbWFj ODAyMTFfY29uZmlnLA0KKwkuYnNzX2luZm9fY2hhbmdlZCAgID0gbXdsX21hYzgwMjExX2Jzc19p bmZvX2NoYW5nZWQsDQorCS5jb25maWd1cmVfZmlsdGVyICAgPSBtd2xfbWFjODAyMTFfY29uZmln dXJlX2ZpbHRlciwNCisJLnNldF9rZXkgICAgICAgICAgICA9IG13bF9tYWM4MDIxMV9zZXRfa2V5 LA0KKwkuc2V0X3J0c190aHJlc2hvbGQgID0gbXdsX21hYzgwMjExX3NldF9ydHNfdGhyZXNob2xk LA0KKwkuc3RhX2FkZCAgICAgICAgICAgID0gbXdsX21hYzgwMjExX3N0YV9hZGQsDQorCS5zdGFf cmVtb3ZlICAgICAgICAgPSBtd2xfbWFjODAyMTFfc3RhX3JlbW92ZSwNCisJLmNvbmZfdHggICAg ICAgICAgICA9IG13bF9tYWM4MDIxMV9jb25mX3R4LA0KKwkuZ2V0X3N0YXRzICAgICAgICAgID0g bXdsX21hYzgwMjExX2dldF9zdGF0cywNCisJLmdldF9zdXJ2ZXkgICAgICAgICA9IG13bF9tYWM4 MDIxMV9nZXRfc3VydmV5LA0KKwkuYW1wZHVfYWN0aW9uICAgICAgID0gbXdsX21hYzgwMjExX2Ft cGR1X2FjdGlvbiwNCit9Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv bWFpbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZGM3NTlkMw0KLS0t IC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21h aW4uYw0KQEAgLTAsMCArMSw3MzkgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1 LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KKyAqDQorICogVGhpcyBzb2Z0d2FyZSBmaWxl ICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwNCisg KiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug VmVyc2lvbiAyLCBKdW5lIDE5OTENCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwg cmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluDQorICogYWNjb3JkYW5jZSB3 aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdo aWNoDQorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLg0KKyAqDQorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF DQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRk aXRpb25hbCBkZXRhaWxzIGFib3V0DQorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KKyAq Lw0KKw0KKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGltcGxlbWVudHMgbWFpbiBmdW5jdGlv bnMgb2YgdGhpcyBtb2R1bGUuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNp ZmRlZiBDT05GSUdfT0YNCisjaW5jbHVkZSA8bGludXgvb2YuaD4NCisjZW5kaWYNCisNCisjaW5j bHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5jbHVkZSAiZndkbC5oIg0K KyNpbmNsdWRlICJmd2NtZC5oIg0KKyNpbmNsdWRlICJ0eC5oIg0KKyNpbmNsdWRlICJyeC5oIg0K KyNpbmNsdWRlICJpc3IuaCINCisjaWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorI2luY2x1ZGUg Im1mZy5oIg0KKyNlbmRpZg0KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCisjaW5jbHVkZSAiZGVi dWdmcy5oIg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTVdMX0RFU0MgICAgICAgICAiTWFydmVsbCA4 MDIuMTFhYyBXaXJlbGVzcyBOZXR3b3JrIERyaXZlciINCisjZGVmaW5lIE1XTF9ERVZfTkFNRSAg ICAgIk1hcnZlbGwgODAyLjExYWMgQWRhcHRlciINCisNCisjZGVmaW5lIEZJTEVfUEFUSF9MRU4g ICAgNjQNCisjZGVmaW5lIENNRF9CVUZfU0laRSAgICAgMHg0MDAwDQorDQorc3RhdGljIHN0cnVj dCBwY2lfZGV2aWNlX2lkIG13bF9wY2lfaWRfdGJsW10gPSB7DQorCXsgUENJX1ZERVZJQ0UoTUFS VkVMTCwgMHgyYTU1KSwgLmRyaXZlcl9kYXRhID0gTVdMODg2NCwgfSwNCisJeyBQQ0lfVkRFVklD RShNQVJWRUxMLCAweDJiMzgpLCAuZHJpdmVyX2RhdGEgPSBNV0w4ODk3LCB9LA0KKwl7IH0sDQor fTsNCisNCitzdGF0aWMgc3RydWN0IG13bF9jaGlwX2luZm8gbXdsX2NoaXBfdGJsW10gPSB7DQor CVtNV0w4ODY0XSA9IHsNCisJCS5wYXJ0X25hbWUJPSAiODhXODg2NCIsDQorCQkuZndfaW1hZ2UJ PSAibXdsd2lmaS84OFc4ODY0LmJpbiIsDQorCQkuYW50ZW5uYV90eAk9IEFOVEVOTkFfVFhfNF9B VVRPLA0KKwkJLmFudGVubmFfcngJPSBBTlRFTk5BX1JYXzRfQVVUTywNCisJfSwNCisJW01XTDg4 OTddID0gew0KKwkJLnBhcnRfbmFtZQk9ICI4OFc4ODk3IiwNCisJCS5md19pbWFnZQk9ICJtd2x3 aWZpLzg4Vzg4OTcuYmluIiwNCisJCS5hbnRlbm5hX3R4CT0gQU5URU5OQV9UWF8yLA0KKwkJLmFu dGVubmFfcngJPSBBTlRFTk5BX1JYXzIsDQorCX0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9jaGFubmVsIG13bF9jaGFubmVsc18yNFtdID0gew0KKwl7IC5iYW5kID0g SUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwg fSwNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0MTcs IC5od192YWx1ZSA9IDIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2Vu dGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjEx X0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwNCisJeyAu YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1 ZSA9IDUsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEg PSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdI WiwgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwNCisJeyAuYmFuZCA9IElF RUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0s DQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDUyLCAu aHdfdmFsdWUgPSA5LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRl cl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFf QkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwNCisJeyAu YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1 ZSA9IDEyLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVx ID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsX3JhdGVzXzI0W10gPSB7DQorCXsg LmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwNCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdf dmFsdWUgPSA0LCB9LA0KKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LA0KKwl7 IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwNCisJeyAuYml0cmF0ZSA9IDIyMCwg Lmh3X3ZhbHVlID0gNDQsIH0sDQorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0s DQorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sDQorCXsgLmJpdHJhdGUgPSAx MjAsIC5od192YWx1ZSA9IDI0LCB9LA0KKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAz NiwgfSwNCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sDQorCXsgLmJpdHJh dGUgPSAzNjAsIC5od192YWx1ZSA9IDcyLCB9LA0KKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFs dWUgPSA5NiwgfSwNCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LA0KK307 DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2xfY2hhbm5lbHNf NTBbXSA9IHsNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9 IDUxODAsIC5od192YWx1ZSA9IDM2LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdI WiwgLmNlbnRlcl9mcmVxID0gNTIwMCwgLmh3X3ZhbHVlID0gNDAsIH0sDQorCXsgLmJhbmQgPSBJ RUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSA0NCwg fSwNCisJeyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUyNDAs IC5od192YWx1ZSA9IDQ4LCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgLmNl bnRlcl9mcmVxID0gNTI2MCwgLmh3X3ZhbHVlID0gNTIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAy MTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjgwLCAuaHdfdmFsdWUgPSA1NiwgfSwNCisJ eyAuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUzMDAsIC5od192 YWx1ZSA9IDYwLCB9LA0KKwl7IC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9m cmVxID0gNTMyMCwgLmh3X3ZhbHVlID0gNjQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFO RF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTAwLCAuaHdfdmFsdWUgPSAxMDAsIH0sDQorCXsgLmJh bmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTIwLCAuaHdfdmFsdWUg PSAxMDQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEg PSA1NTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81 R0haLCAuY2VudGVyX2ZyZXEgPSA1NTYwLCAuaHdfdmFsdWUgPSAxMTIsIH0sDQorCXsgLmJhbmQg PSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTgwLCAuaHdfdmFsdWUgPSAx MTYsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1 NjAwLCAuaHdfdmFsdWUgPSAxMjAsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0ha LCAuY2VudGVyX2ZyZXEgPSA1NjIwLCAuaHdfdmFsdWUgPSAxMjQsIH0sDQorCXsgLmJhbmQgPSBJ RUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjQwLCAuaHdfdmFsdWUgPSAxMjgs IH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjYw LCAuaHdfdmFsdWUgPSAxMzIsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAu Y2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYsIH0sDQorCXsgLmJhbmQgPSBJRUVF ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzAwLCAuaHdfdmFsdWUgPSAxNDAsIH0s DQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzIwLCAu aHdfdmFsdWUgPSAxNDQsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2Vu dGVyX2ZyZXEgPSA1NzQ1LCAuaHdfdmFsdWUgPSAxNDksIH0sDQorCXsgLmJhbmQgPSBJRUVFODAy MTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsIH0sDQor CXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1Nzg1LCAuaHdf dmFsdWUgPSAxNTcsIH0sDQorCXsgLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCAuY2VudGVy X2ZyZXEgPSA1ODA1LCAuaHdfdmFsdWUgPSAxNjEsIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qg c3RydWN0IGllZWU4MDIxMV9yYXRlIG13bF9yYXRlc181MFtdID0gew0KKwl7IC5iaXRyYXRlID0g NjAsIC5od192YWx1ZSA9IDEyLCB9LA0KKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4 LCB9LA0KKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwNCisJeyAuYml0cmF0 ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sDQorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1 ZSA9IDQ4LCB9LA0KKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwNCisJeyAu Yml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gOTYsIH0sDQorCXsgLmJpdHJhdGUgPSA1NDAsIC5o d192YWx1ZSA9IDEwOCwgfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X2lmYWNlX2xpbWl0IGFwX2lmX2xpbWl0c1tdID0gew0KKwl7IC5tYXggPSBTWVNBRFBUX05VTV9P Rl9BUCwJLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LA0KKyNpZmRlZiBDT05GSUdf TUFDODAyMTFfTUVTSA0KKwl7IC5tYXggPSAxLAkudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVf TUVTSF9QT0lOVCkgfSwNCisjZW5kaWYNCisJeyAubWF4ID0gMSwJLnR5cGVzID0gQklUKE5MODAy MTFfSUZUWVBFX1NUQVRJT04pIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4 MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBhcF9pZl9jb21iID0gew0KKwkubGltaXRzID0gYXBfaWZf bGltaXRzLA0KKwkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGFwX2lmX2xpbWl0cyksDQorCS5tYXhf aW50ZXJmYWNlcyA9IFNZU0FEUFRfTlVNX09GX0FQLA0KKwkubnVtX2RpZmZlcmVudF9jaGFubmVs cyA9IDEsDQorfTsNCisNCitzdGF0aWMgaW50IG13bF9hbGxvY19wY2lfcmVzb3VyY2Uoc3RydWN0 IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwcml2LT5wZGV2 Ow0KKwl2b2lkIF9faW9tZW0gKmFkZHI7DQorDQorCXByaXYtPm5leHRfYmFyX251bSA9IDE7CS8q IDMyLWJpdCAqLw0KKwlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgMHgwNCkNCisJ CXByaXYtPm5leHRfYmFyX251bSA9IDI7CS8qIDY0LWJpdCAqLw0KKw0KKwlhZGRyID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsICZwZGV2LT5yZXNvdXJjZVswXSk7DQorCWlmIChJ U19FUlIoYWRkcikpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJICAiJXM6 IGNhbm5vdCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uIDBcbiIsDQorCQkJICBNV0xfRFJWX05B TUUpOw0KKwkJZ290byBlcnI7DQorCX0NCisJcHJpdi0+aW9iYXNlMCA9IGFkZHI7DQorCXdpcGh5 X2RlYnVnKHByaXYtPmh3LT53aXBoeSwgInByaXYtPmlvYmFzZTAgPSAlcFxuIiwgcHJpdi0+aW9i YXNlMCk7DQorDQorCWFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwNCisJ CQkJICAgICAmcGRldi0+cmVzb3VyY2VbcHJpdi0+bmV4dF9iYXJfbnVtXSk7DQorCWlmIChJU19F UlIoYWRkcikpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJICAiJXM6IGNh bm5vdCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uIDFcbiIsDQorCQkJICBNV0xfRFJWX05BTUUp Ow0KKwkJZ290byBlcnI7DQorCX0NCisJcHJpdi0+aW9iYXNlMSA9IGFkZHI7DQorCXdpcGh5X2Rl YnVnKHByaXYtPmh3LT53aXBoeSwgInByaXYtPmlvYmFzZTEgPSAlcFxuIiwgcHJpdi0+aW9iYXNl MSk7DQorDQorCXByaXYtPnBjbWRfYnVmID0NCisJCSh1bnNpZ25lZCBzaG9ydCAqKWRtYW1fYWxs b2NfY29oZXJlbnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJCQkgICAgICBDTURfQlVGX1NJWkUs DQorCQkJCQkJICAgICAgJnByaXYtPnBwaHlzX2NtZF9idWYsDQorCQkJCQkJICAgICAgR0ZQX0tF Uk5FTCk7DQorCWlmICghcHJpdi0+cGNtZF9idWYpIHsNCisJCXdpcGh5X2Vycihwcml2LT5ody0+ d2lwaHksDQorCQkJICAiJXM6IGNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIGNvbW1hbmQgYnVmZmVy XG4iLA0KKwkJCSAgTVdMX0RSVl9OQU1FKTsNCisJCWdvdG8gZXJyOw0KKwl9DQorCXdpcGh5X2Rl YnVnKHByaXYtPmh3LT53aXBoeSwNCisJCSAgICAicHJpdi0+cGNtZF9idWYgPSAlcCAgcHJpdi0+ cHBoeXNfY21kX2J1ZiA9ICVwXG4iLA0KKwkJICAgIHByaXYtPnBjbWRfYnVmLA0KKwkJICAgICh2 b2lkICopcHJpdi0+cHBoeXNfY21kX2J1Zik7DQorCW1lbXNldChwcml2LT5wY21kX2J1ZiwgMHgw MCwgQ01EX0JVRl9TSVpFKTsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyOg0KKwl3aXBoeV9lcnIo cHJpdi0+aHctPndpcGh5LCAicGNpIGFsbG9jIGZhaWxcbiIpOw0KKw0KKwlyZXR1cm4gLUVJTzsN Cit9DQorDQorc3RhdGljIGludCBtd2xfaW5pdF9maXJtd2FyZShzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYsIGNvbnN0IGNoYXIgKmZ3X25hbWUpDQorew0KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCisJ aW50IHJjID0gMDsNCisNCisJcGRldiA9IHByaXYtPnBkZXY7DQorDQorI2lmZGVmIENPTkZJR19T VVBQT1JUX01GRw0KKwlpZiAocHJpdi0+bWZnX21vZGUpDQorCQlyYyA9IG13bF9tZmdfcmVxdWVz dF9maXJtd2FyZShwcml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmMgPSByZXF1ZXN0X2Zpcm13 YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopJnByaXYtPmZ3X3Vjb2RlLA0KKwkJCQkgICAg ICBmd19uYW1lLCAmcHJpdi0+cGRldi0+ZGV2KTsNCisNCisJaWYgKHJjKSB7DQorCQlpZiAocHJp di0+bWZnX21vZGUpDQorCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImNhbm5vdCBmaW5k IGZpcm13YXJlXG4iKTsNCisJCWVsc2UNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LA0K KwkJCQkgICIlczogY2Fubm90IGZpbmQgZmlybXdhcmUgaW1hZ2UgPCVzPlxuIiwNCisJCQkJICBN V0xfRFJWX05BTUUsIGZ3X25hbWUpOw0KKwkJZ290byBlcnJfbG9hZF9mdzsNCisJfQ0KKw0KKwly YyA9IG13bF9md2RsX2Rvd25sb2FkX2Zpcm13YXJlKHByaXYtPmh3KTsNCisJaWYgKHJjKSB7DQor CQlpZiAocHJpdi0+bWZnX21vZGUpDQorCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwgImRv d25sb2FkIGZpcm13YXJlIGZhaWxcbiIpOw0KKwkJZWxzZQ0KKwkJCXdpcGh5X2Vycihwcml2LT5o dy0+d2lwaHksDQorCQkJCSAgIiVzOiBjYW5ub3QgZG93bmxvYWQgZmlybXdhcmUgaW1hZ2UgPCVz PlxuIiwNCisJCQkJICBNV0xfRFJWX05BTUUsIGZ3X25hbWUpOw0KKwkJZ290byBlcnJfZG93bmxv YWRfZnc7DQorCX0NCisNCisJcmV0dXJuIHJjOw0KKw0KK2Vycl9kb3dubG9hZF9mdzoNCisNCisj aWZkZWYgQ09ORklHX1NVUFBPUlRfTUZHDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCW13bF9t ZmdfcmVsZWFzZV9maXJtd2FyZShwcml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmVsZWFzZV9m aXJtd2FyZShwcml2LT5md191Y29kZSk7DQorDQorZXJyX2xvYWRfZnc6DQorDQorCXdpcGh5X2Vy cihwcml2LT5ody0+d2lwaHksICJmaXJtd2FyZSBpbml0IGZhaWxcbiIpOw0KKw0KKwlyZXR1cm4g cmM7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9wcm9jZXNzX29mX2R0cyhzdHJ1Y3QgbXdsX3By aXYgKnByaXYpDQorew0KKyNpZmRlZiBDT05GSUdfT0YNCisJc3RydWN0IHByb3BlcnR5ICpwcm9w Ow0KKwl1MzIgcHJvcF92YWx1ZTsNCisNCisJcHJpdi0+ZHRfbm9kZSA9DQorCQlvZl9maW5kX25v ZGVfYnlfbmFtZShwY2lfYnVzX3RvX09GX25vZGUocHJpdi0+cGRldi0+YnVzKSwNCisJCQkJICAg ICAibXdsd2lmaSIpOw0KKwlpZiAoIXByaXYtPmR0X25vZGUpDQorCQlyZXR1cm47DQorDQorCS8q IGxvb2sgZm9yIGFsbCBtYXRjaGluZyBwcm9wZXJ0eSBuYW1lcyAqLw0KKwlmb3JfZWFjaF9wcm9w ZXJ0eV9vZl9ub2RlKHByaXYtPmR0X25vZGUsIHByb3ApIHsNCisJCWlmIChzdHJjbXAocHJvcC0+ bmFtZSwgIm1hcnZlbGwsMmdoeiIpID09IDApDQorCQkJcHJpdi0+ZGlzYWJsZV8yZyA9IHRydWU7 DQorCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICJtYXJ2ZWxsLDVnaHoiKSA9PSAwKQ0KKwkJCXBy aXYtPmRpc2FibGVfNWcgPSB0cnVlOw0KKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAibWFydmVs bCxjaGFpbm1hc2siKSA9PSAwKSB7DQorCQkJcHJvcF92YWx1ZSA9IGJlMzJfdG9fY3B1KCooKF9f YmUzMiAqKXByb3AtPnZhbHVlKSk7DQorCQkJaWYgKHByb3BfdmFsdWUgPT0gMikNCisJCQkJcHJp di0+YW50ZW5uYV90eCA9IEFOVEVOTkFfVFhfMjsNCisNCisJCQlwcm9wX3ZhbHVlID0gYmUzMl90 b19jcHUoKigoX19iZTMyICopDQorCQkJCQkJIChwcm9wLT52YWx1ZSArIDQpKSk7DQorCQkJaWYg KHByb3BfdmFsdWUgPT0gMikNCisJCQkJcHJpdi0+YW50ZW5uYV9yeCA9IEFOVEVOTkFfUlhfMjsN CisJCX0NCisJfQ0KKw0KKwlwcml2LT5wd3Jfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHBy aXYtPmR0X25vZGUsDQorCQkJCQkgICAgICAibWFydmVsbCxwb3dlcnRhYmxlIik7DQorI2VuZGlm DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9zZXRfaHRfY2FwcyhzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYsDQorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQpDQorew0K KwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisNCisJaHcgPSBwcml2LT5odzsNCisNCisJYmFu ZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9IDE7DQorDQorCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVF RTgwMjExX0hUX0NBUF9MRFBDX0NPRElORzsNCisJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAy MTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsNCisJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAy MTFfSFRfQ0FQX1NNX1BTOw0KKwliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBf U0dJXzIwOw0KKwliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOw0K Kw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7DQorCWJhbmQtPmh0 X2NhcC5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsNCisJYmFuZC0+ aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzQ7DQorDQor CWJhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7DQorCWJhbmQtPmh0X2NhcC5tY3Mu cnhfbWFza1sxXSA9IDB4ZmY7DQorCWlmIChwcml2LT5hbnRlbm5hX3J4ID09IEFOVEVOTkFfUlhf NF9BVVRPKQ0KKwkJYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzJdID0gMHhmZjsNCisJYmFuZC0+ aHRfY2FwLm1jcy5yeF9tYXNrWzRdID0gMHgwMTsNCisNCisJYmFuZC0+aHRfY2FwLm1jcy50eF9w YXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IG13bF9zZXRfdmh0X2NhcHMoc3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCSAgICAgc3RydWN0 IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZCkNCit7DQorCWJhbmQtPnZodF9jYXAudmh0 X3N1cHBvcnRlZCA9IDE7DQorDQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRf Q0FQX01BWF9NUERVX0xFTkdUSF83OTkxOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAy MTFfVkhUX0NBUF9SWExEUEM7DQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRf Q0FQX1NIT1JUX0dJXzgwOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfVkhUX0NB UF9SWFNUQkNfMTsNCisJYmFuZC0+dmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX1ZIVF9DQVBfU1Vf QkVBTUZPUk1FUl9DQVBBQkxFOw0KKwliYW5kLT52aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfVkhU X0NBUF9TVV9CRUFNRk9STUVFX0NBUEFCTEU7DQorCWJhbmQtPnZodF9jYXAuY2FwIHw9IElFRUU4 MDIxMV9WSFRfQ0FQX01BWF9BX01QRFVfTEVOR1RIX0VYUE9ORU5UX01BU0s7DQorCWJhbmQtPnZo dF9jYXAuY2FwIHw9IElFRUU4MDIxMV9WSFRfQ0FQX1JYX0FOVEVOTkFfUEFUVEVSTjsNCisJYmFu ZC0+dmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX1ZIVF9DQVBfVFhfQU5URU5OQV9QQVRURVJOOw0K Kw0KKwlpZiAocHJpdi0+YW50ZW5uYV9yeCA9PSBBTlRFTk5BX1JYXzIpDQorCQliYW5kLT52aHRf Y2FwLnZodF9tY3MucnhfbWNzX21hcCA9IGNwdV90b19sZTE2KDB4ZmZmYSk7DQorCWVsc2UNCisJ CWJhbmQtPnZodF9jYXAudmh0X21jcy5yeF9tY3NfbWFwID0gY3B1X3RvX2xlMTYoMHhmZmVhKTsN CisNCisJaWYgKHByaXYtPmFudGVubmFfdHggPT0gQU5URU5OQV9UWF8yKQ0KKwkJYmFuZC0+dmh0 X2NhcC52aHRfbWNzLnR4X21jc19tYXAgPSBjcHVfdG9fbGUxNigweGZmZmEpOw0KKwllbHNlDQor CQliYW5kLT52aHRfY2FwLnZodF9tY3MudHhfbWNzX21hcCA9IGNwdV90b19sZTE2KDB4ZmZlYSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9zZXRfY2FwcyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYp DQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisNCisJaHcgPSBwcml2LT5odzsNCisN CisJLyogc2V0IHVwIGJhbmQgaW5mb3JtYXRpb24gZm9yIDIuNEcgKi8NCisJaWYgKCFwcml2LT5k aXNhYmxlXzJnKSB7DQorCQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzXzI0KSAh PQ0KKwkJCSAgICAgc2l6ZW9mKG13bF9jaGFubmVsc18yNCkpOw0KKwkJbWVtY3B5KHByaXYtPmNo YW5uZWxzXzI0LCBtd2xfY2hhbm5lbHNfMjQsDQorCQkgICAgICAgc2l6ZW9mKG13bF9jaGFubmVs c18yNCkpOw0KKw0KKwkJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlc18yNCkgIT0gc2l6 ZW9mKG13bF9yYXRlc18yNCkpOw0KKwkJbWVtY3B5KHByaXYtPnJhdGVzXzI0LCBtd2xfcmF0ZXNf MjQsIHNpemVvZihtd2xfcmF0ZXNfMjQpKTsNCisNCisJCXByaXYtPmJhbmRfMjQuYmFuZCA9IElF RUU4MDIxMV9CQU5EXzJHSFo7DQorCQlwcml2LT5iYW5kXzI0LmNoYW5uZWxzID0gcHJpdi0+Y2hh bm5lbHNfMjQ7DQorCQlwcml2LT5iYW5kXzI0Lm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13bF9j aGFubmVsc18yNCk7DQorCQlwcml2LT5iYW5kXzI0LmJpdHJhdGVzID0gcHJpdi0+cmF0ZXNfMjQ7 DQorCQlwcml2LT5iYW5kXzI0Lm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bF9yYXRlc18yNCk7 DQorDQorCQltd2xfc2V0X2h0X2NhcHMocHJpdiwgJnByaXYtPmJhbmRfMjQpOw0KKwkJbXdsX3Nl dF92aHRfY2Fwcyhwcml2LCAmcHJpdi0+YmFuZF8yNCk7DQorDQorCQlody0+d2lwaHktPmJhbmRz W0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmRfMjQ7DQorCX0NCisNCisJLyogc2V0 IHVwIGJhbmQgaW5mb3JtYXRpb24gZm9yIDVHICovDQorCWlmICghcHJpdi0+ZGlzYWJsZV81Zykg ew0KKwkJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVsc181MCkgIT0NCisJCQkgICAg IHNpemVvZihtd2xfY2hhbm5lbHNfNTApKTsNCisJCW1lbWNweShwcml2LT5jaGFubmVsc181MCwg bXdsX2NoYW5uZWxzXzUwLA0KKwkJICAgICAgIHNpemVvZihtd2xfY2hhbm5lbHNfNTApKTsNCisN CisJCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXNfNTApICE9IHNpemVvZihtd2xfcmF0 ZXNfNTApKTsNCisJCW1lbWNweShwcml2LT5yYXRlc181MCwgbXdsX3JhdGVzXzUwLCBzaXplb2Yo bXdsX3JhdGVzXzUwKSk7DQorDQorCQlwcml2LT5iYW5kXzUwLmJhbmQgPSBJRUVFODAyMTFfQkFO RF81R0haOw0KKwkJcHJpdi0+YmFuZF81MC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzXzUwOw0K KwkJcHJpdi0+YmFuZF81MC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2xfY2hhbm5lbHNfNTAp Ow0KKwkJcHJpdi0+YmFuZF81MC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzXzUwOw0KKwkJcHJpdi0+ YmFuZF81MC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShtd2xfcmF0ZXNfNTApOw0KKw0KKwkJbXds X3NldF9odF9jYXBzKHByaXYsICZwcml2LT5iYW5kXzUwKTsNCisJCW13bF9zZXRfdmh0X2NhcHMo cHJpdiwgJnByaXYtPmJhbmRfNTApOw0KKw0KKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFf QkFORF81R0haXSA9ICZwcml2LT5iYW5kXzUwOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXds X3dsX2luaXQoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9o dyAqaHc7DQorCWludCByYzsNCisJaW50IGk7DQorDQorCWh3ID0gcHJpdi0+aHc7DQorDQorCWh3 LT5leHRyYV90eF9oZWFkcm9vbSA9IFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09NOw0KKwlody0+ cXVldWVzID0gU1lTQURQVF9UWF9XTU1fUVVFVUVTOw0KKw0KKwkvKiBTZXQgcnNzaSB2YWx1ZXMg dG8gZEJtICovDQorCWllZWU4MDIxMV9od19zZXQoaHcsIFNJR05BTF9EQk0pOw0KKwlpZWVlODAy MTFfaHdfc2V0KGh3LCBIQVNfUkFURV9DT05UUk9MKTsNCisNCisJLyogQXNrIG1hYzgwMjExIG5v dCB0byB0cmlnZ2VyIFBTIG1vZGUNCisJICogYmFzZWQgb24gUE0gYml0IG9mIGluY29taW5nIGZy YW1lcy4NCisJICovDQorCWllZWU4MDIxMV9od19zZXQoaHcsIEFQX0xJTktfUFMpOw0KKw0KKwlo dy0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsX3ZpZik7DQorCWh3LT5zdGFfZGF0 YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2xfc3RhKTsNCisNCisJcHJpdi0+YXBfbWFjaWRzX3N1 cHBvcnRlZCA9IDB4MDAwMGZmZmY7DQorCXByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkID0gMHgw MDAxMDAwMDsNCisJcHJpdi0+bWFjaWRzX3VzZWQgPSAwOw0KKwlJTklUX0xJU1RfSEVBRCgmcHJp di0+dmlmX2xpc3QpOw0KKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+c3RhX2xpc3QpOw0KKw0KKwkv KiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSwgcHJlYW1ibGUgYW5kIHdtbSAqLw0KKwlwcml2LT5y YWRpb19vbiA9IGZhbHNlOw0KKwlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IGZhbHNlOw0K Kwlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOw0KKw0KKwlwcml2LT5wb3dpbml0ZWQgPSAwOw0K Kw0KKwkvKiBIYW5kbGUgd2F0Y2hkb2cgYmEgZXZlbnRzICovDQorCUlOSVRfV09SSygmcHJpdi0+ d2F0Y2hkb2dfYmFfaGFuZGxlLCBtd2xfd2F0Y2hkb2dfYmFfZXZlbnRzKTsNCisNCisJdGFza2xl dF9pbml0KCZwcml2LT50eF90YXNrLCAodm9pZCAqKW13bF90eF9kb25lLCAodW5zaWduZWQgbG9u Zylodyk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfdGFzayk7DQorCXRhc2tsZXRfaW5p dCgmcHJpdi0+cnhfdGFzaywgKHZvaWQgKiltd2xfcnhfcmVjdiwgKHVuc2lnbmVkIGxvbmcpaHcp Ow0KKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnJ4X3Rhc2spOw0KKwl0YXNrbGV0X2luaXQoJnBy aXYtPnFlX3Rhc2ssDQorCQkgICAgICh2b2lkICopbXdsX3R4X2ZsdXNoX2Ftc2R1LCAodW5zaWdu ZWQgbG9uZylodyk7DQorCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cWVfdGFzayk7DQorCXByaXYt PnR4cV9saW1pdCA9IFNZU0FEUFRfVFhfUVVFVUVfTElNSVQ7DQorCXByaXYtPmlzX3R4X3NjaGVk dWxlID0gZmFsc2U7DQorCXByaXYtPnJlY3ZfbGltaXQgPSBTWVNBRFBUX1JFQ0VJVkVfTElNSVQ7 DQorCXByaXYtPmlzX3J4X3NjaGVkdWxlID0gZmFsc2U7DQorCXByaXYtPmlzX3FlX3NjaGVkdWxl ID0gZmFsc2U7DQorDQorCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9kZXNjX2xvY2spOw0KKwlz cGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfZGVzY19sb2NrKTsNCisJc3Bpbl9sb2NrX2luaXQoJnBy aXYtPmZ3Y21kX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dmlmX2xvY2spOw0KKwlz cGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ c3RyZWFtX2xvY2spOw0KKw0KKwlyYyA9IG13bF90eF9pbml0KGh3KTsNCisJaWYgKHJjKSB7DQor CQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZhaWwgdG8gaW5pdGlhbGl6ZSBUWFxuIiwNCisJ CQkgIE1XTF9EUlZfTkFNRSk7DQorCQlnb3RvIGVycl9td2xfdHhfaW5pdDsNCisJfQ0KKw0KKwly YyA9IG13bF9yeF9pbml0KGh3KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5 LCAiJXM6IGZhaWwgdG8gaW5pdGlhbGl6ZSBSWFxuIiwNCisJCQkgIE1XTF9EUlZfTkFNRSk7DQor CQlnb3RvIGVycl9td2xfcnhfaW5pdDsNCisJfQ0KKw0KKwlyYyA9IG13bF9md2NtZF9nZXRfaHdf c3BlY3MoaHcpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICIlczogZmFp bCB0byBnZXQgSFcgc3BlY2lmaWNhdGlvbnNcbiIsDQorCQkJICBNV0xfRFJWX05BTUUpOw0KKwkJ Z290byBlcnJfZ2V0X2h3X3NwZWNzOw0KKwl9DQorDQorCVNFVF9JRUVFODAyMTFfUEVSTV9BRERS KGh3LCBwcml2LT5od19kYXRhLm1hY19hZGRyKTsNCisNCisJd3JpdGVsKHByaXYtPmRlc2NfZGF0 YVswXS5wcGh5c190eF9yaW5nLA0KKwkgICAgICAgcHJpdi0+aW9iYXNlMCArIHByaXYtPmRlc2Nf ZGF0YVswXS53Y2JfYmFzZSk7DQorCWZvciAoaSA9IDE7IGkgPCBTWVNBRFBUX1RPVEFMX1RYX1FV RVVFUzsgaSsrKQ0KKwkJd3JpdGVsKHByaXYtPmRlc2NfZGF0YVtpXS5wcGh5c190eF9yaW5nLA0K KwkJICAgICAgIHByaXYtPmlvYmFzZTAgKyBwcml2LT5kZXNjX2RhdGFbaV0ud2NiX2Jhc2UpOw0K Kwl3cml0ZWwocHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3J4X3JpbmcsDQorCSAgICAgICBwcml2 LT5pb2Jhc2UwICsgcHJpdi0+ZGVzY19kYXRhWzBdLnJ4X2Rlc2NfcmVhZCk7DQorCXdyaXRlbChw cml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfcnhfcmluZywNCisJICAgICAgIHByaXYtPmlvYmFzZTAg KyBwcml2LT5kZXNjX2RhdGFbMF0ucnhfZGVzY193cml0ZSk7DQorDQorCXJjID0gbXdsX2Z3Y21k X3NldF9od19zcGVjcyhodyk7DQorCWlmIChyYykgew0KKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwg IiVzOiBmYWlsIHRvIHNldCBIVyBzcGVjaWZpY2F0aW9uc1xuIiwNCisJCQkgIE1XTF9EUlZfTkFN RSk7DQorCQlnb3RvIGVycl9zZXRfaHdfc3BlY3M7DQorCX0NCisNCisJd2lwaHlfaW5mbyhody0+ d2lwaHksDQorCQkgICAiZmlybXdhcmUgdmVyc2lvbjogMHgleFxuIiwgcHJpdi0+aHdfZGF0YS5m d19yZWxlYXNlX251bSk7DQorDQorCW13bF9md2NtZF9yYWRpb19kaXNhYmxlKGh3KTsNCisNCisJ bXdsX2Z3Y21kX3JmX2FudGVubmEoaHcsIFdMX0FOVEVOTkFUWVBFX1RYLCBwcml2LT5hbnRlbm5h X3R4KTsNCisNCisJbXdsX2Z3Y21kX3JmX2FudGVubmEoaHcsIFdMX0FOVEVOTkFUWVBFX1JYLCBw cml2LT5hbnRlbm5hX3J4KTsNCisNCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSAwOw0K Kwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOw0K KyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSA0KKwlody0+d2lwaHktPmludGVyZmFjZV9tb2Rl cyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7DQorI2VuZGlmDQorCWh3LT53aXBo eS0+aW50ZXJmYWNlX21vZGVzIHw9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsNCisJaHct PndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSAmYXBfaWZfY29tYjsNCisJaHctPndpcGh5LT5u X2lmYWNlX2NvbWJpbmF0aW9ucyA9IDE7DQorDQorCW13bF9zZXRfY2Fwcyhwcml2KTsNCisNCisJ cmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5X2Vy cihody0+d2lwaHksICIlczogZmFpbCB0byByZWdpc3RlciBkZXZpY2VcbiIsDQorCQkJICBNV0xf RFJWX05BTUUpOw0KKwkJZ290byBlcnJfcmVnaXN0ZXJfaHc7DQorCX0NCisNCisJcmMgPSByZXF1 ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bF9pc3IsDQorCQkJIElSUUZfU0hBUkVELCBNV0xf RFJWX05BTUUsIGh3KTsNCisJaWYgKHJjKSB7DQorCQlwcml2LT5pcnEgPSAtMTsNCisJCXdpcGh5 X2Vycihody0+d2lwaHksICJmYWlsIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsNCisJCWdv dG8gZXJyX3JlZ2lzdGVyX2lycTsNCisJfQ0KKwlwcml2LT5pcnEgPSBwcml2LT5wZGV2LT5pcnE7 DQorDQorCXJldHVybiByYzsNCisNCitlcnJfcmVnaXN0ZXJfaXJxOg0KK2Vycl9yZWdpc3Rlcl9o dzoNCitlcnJfc2V0X2h3X3NwZWNzOg0KK2Vycl9nZXRfaHdfc3BlY3M6DQorDQorCW13bF9yeF9k ZWluaXQoaHcpOw0KKw0KK2Vycl9td2xfcnhfaW5pdDoNCisNCisJbXdsX3R4X2RlaW5pdChodyk7 DQorDQorZXJyX213bF90eF9pbml0Og0KKw0KKwl3aXBoeV9lcnIoaHctPndpcGh5LCAiaW5pdCBm YWlsXG4iKTsNCisNCisJcmV0dXJuIHJjOw0KK30NCisNCitzdGF0aWMgdm9pZCBtd2xfd2xfZGVp bml0KHN0cnVjdCBtd2xfcHJpdiAqcHJpdikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 Ow0KKw0KKwlodyA9IHByaXYtPmh3Ow0KKw0KKwlpZiAocHJpdi0+aXJxICE9IC0xKSB7DQorCQlm cmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsNCisJCXByaXYtPmlycSA9IC0xOw0KKwl9DQor DQorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsNCisJbXdsX3J4X2RlaW5pdChodyk7DQor CW13bF90eF9kZWluaXQoaHcpOw0KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnFlX3Rhc2spOw0KKwl0 YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2spOw0KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rh c2spOw0KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53YXRjaGRvZ19iYV9oYW5kbGUpOw0KKwlt d2xfZndjbWRfcmVzZXQoaHcpOw0KK30NCisNCitzdGF0aWMgaW50IG13bF9wcm9iZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3Rh dGljIGJvb2wgcHJpbnRlZF92ZXJzaW9uOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsNCisJ c3RydWN0IG13bF9wcml2ICpwcml2Ow0KKwljb25zdCBjaGFyICpmd19uYW1lOw0KKwlpbnQgcmMg PSAwOw0KKw0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhID49IE1XTFVOS05PV04pDQorCQlyZXR1cm4g LUVOT0RFVjsNCisNCisJaWYgKCFwcmludGVkX3ZlcnNpb24pIHsNCisJCXByX2luZm8oIjw8JXMg dmVyc2lvbiAlcz4+IiwNCisJCQlNV0xfREVTQywgTVdMX0RSVl9WRVJTSU9OKTsNCisJCXByaW50 ZWRfdmVyc2lvbiA9IHRydWU7DQorCX0NCisNCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2 KTsNCisJaWYgKHJjKSB7DQorCQlwcl9lcnIoIiVzOiBjYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2 aWNlIiwNCisJCSAgICAgICBNV0xfRFJWX05BTUUpOw0KKwkJcmV0dXJuIHJjOw0KKwl9DQorDQor CXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsNCisJaWYgKHJj KSB7DQorCQlwcl9lcnIoIiVzOiAzMi1iaXQgUENJIERNQSBub3Qgc3VwcG9ydGVkIiwNCisJCSAg ICAgICBNV0xfRFJWX05BTUUpOw0KKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOw0KKwl9 DQorDQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KKw0KKwlodyA9IGllZWU4MDIxMV9hbGxvY19o dyhzaXplb2YoKnByaXYpLCAmbXdsX21hYzgwMjExX29wcyk7DQorCWlmICghaHcpIHsNCisJCXBy X2VycigiJXM6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWQiLA0KKwkJICAgICAgIE1XTF9EUlZfTkFN RSk7DQorCQlyYyA9IC1FTk9NRU07DQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7DQor CX0NCisNCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOw0KKwlwY2lfc2V0X2Ry dmRhdGEocGRldiwgaHcpOw0KKw0KKwlwcml2ID0gaHctPnByaXY7DQorCXByaXYtPmh3ID0gaHc7 DQorCXByaXYtPnBkZXYgPSBwZGV2Ow0KKwlwcml2LT5jaGlwX3R5cGUgPSBpZC0+ZHJpdmVyX2Rh dGE7DQorCXByaXYtPmRpc2FibGVfMmcgPSBmYWxzZTsNCisJcHJpdi0+ZGlzYWJsZV81ZyA9IGZh bHNlOw0KKwlwcml2LT5hbnRlbm5hX3R4ID0gbXdsX2NoaXBfdGJsW3ByaXYtPmNoaXBfdHlwZV0u YW50ZW5uYV90eDsNCisJcHJpdi0+YW50ZW5uYV9yeCA9IG13bF9jaGlwX3RibFtwcml2LT5jaGlw X3R5cGVdLmFudGVubmFfcng7DQorDQorCXJjID0gbXdsX2FsbG9jX3BjaV9yZXNvdXJjZShwcml2 KTsNCisJaWYgKHJjKQ0KKwkJZ290byBlcnJfYWxsb2NfcGNpX3Jlc291cmNlOw0KKw0KKwlmd19u YW1lID0gbXdsX2NoaXBfdGJsW3ByaXYtPmNoaXBfdHlwZV0uZndfaW1hZ2U7DQorDQorI2lmZGVm IENPTkZJR19TVVBQT1JUX01GRw0KKwlpZiAobWZnX21vZGUpDQorCQltd2xfbWZnX2hhbmRsZXJf aW5pdChwcml2KTsNCisjZW5kaWYNCisNCisJcmMgPSBtd2xfaW5pdF9maXJtd2FyZShwcml2LCBm d19uYW1lKTsNCisNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZh aWwgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZVxuIiwNCisJCQkgIE1XTF9EUlZfTkFNRSk7DQorCQln b3RvIGVycl9pbml0X2Zpcm13YXJlOw0KKwl9DQorDQorCS8qIGZpcm13YXJlIGlzIGxvYWRlZCB0 byBIL1csIGl0IGNhbiBiZSByZWxlYXNlZCBub3cgKi8NCisjaWZkZWYgQ09ORklHX1NVUFBPUlRf TUZHDQorCWlmIChwcml2LT5tZmdfbW9kZSkNCisJCW13bF9tZmdfcmVsZWFzZV9maXJtd2FyZShw cml2KTsNCisJZWxzZQ0KKyNlbmRpZg0KKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5md191Y29k ZSk7DQorDQorCW13bF9wcm9jZXNzX29mX2R0cyhwcml2KTsNCisNCisJcmMgPSBtd2xfd2xfaW5p dChwcml2KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IGZhaWwg dG8gaW5pdGlhbGl6ZSB3aXJlbGVzcyBsYW5cbiIsDQorCQkJICBNV0xfRFJWX05BTUUpOw0KKwkJ Z290byBlcnJfd2xfaW5pdDsNCisJfQ0KKw0KKwl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwN CisJCSAgICIyRzogJXNcbiIsIHByaXYtPmRpc2FibGVfMmcgPyAiZGlzYWJsZSIgOiAiZW5hYmxl Iik7DQorCXdpcGh5X2luZm8ocHJpdi0+aHctPndpcGh5LA0KKwkJICAgIjVHOiAlc1xuIiwgcHJp di0+ZGlzYWJsZV81ZyA/ICJkaXNhYmxlIiA6ICJlbmFibGUiKTsNCisNCisJaWYgKHByaXYtPmFu dGVubmFfdHggPT0gQU5URU5OQV9UWF80X0FVVE8pDQorCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53 aXBoeSwgIlRYOiA0IGFudGVubmFzXG4iKTsNCisJZWxzZSBpZiAocHJpdi0+YW50ZW5uYV90eCA9 PSBBTlRFTk5BX1RYXzIpDQorCQl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgIlRYOiAyIGFu dGVubmFzXG4iKTsNCisJZWxzZQ0KKwkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJUWDog dW5rbm93blxuIik7DQorCWlmIChwcml2LT5hbnRlbm5hX3J4ID09IEFOVEVOTkFfUlhfNF9BVVRP KQ0KKwkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJSWDogNCBhbnRlbm5hc1xuIik7DQor CWVsc2UgaWYgKHByaXYtPmFudGVubmFfcnggPT0gQU5URU5OQV9SWF8yKQ0KKwkJd2lwaHlfaW5m byhwcml2LT5ody0+d2lwaHksICJSWDogMiBhbnRlbm5hc1xuIik7DQorCWVsc2UNCisJCXdpcGh5 X2luZm8ocHJpdi0+aHctPndpcGh5LCAiUlg6IHVua25vd25cbiIpOw0KKw0KKyNpZmRlZiBDT05G SUdfREVCVUdfRlMNCisJbXdsX2RlYnVnZnNfaW5pdChodyk7DQorI2VuZGlmDQorDQorCXJldHVy biByYzsNCisNCitlcnJfd2xfaW5pdDoNCitlcnJfaW5pdF9maXJtd2FyZToNCisNCisJbXdsX2Z3 Y21kX3Jlc2V0KGh3KTsNCisNCitlcnJfYWxsb2NfcGNpX3Jlc291cmNlOg0KKw0KKwlwY2lfc2V0 X2RydmRhdGEocGRldiwgTlVMTCk7DQorCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsNCisNCitlcnJf cGNpX2Rpc2FibGVfZGV2aWNlOg0KKw0KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQorDQor CXJldHVybiByYzsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX3JlbW92ZShzdHJ1Y3QgcGNpX2Rl diAqcGRldikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRh KHBkZXYpOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXY7DQorDQorCWlmICghaHcpDQorCQlyZXR1 cm47DQorDQorCXByaXYgPSBody0+cHJpdjsNCisNCisJbXdsX3dsX2RlaW5pdChwcml2KTsNCisJ cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOw0KKwlpZWVlODAyMTFfZnJlZV9odyhodyk7DQor CXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsNCisNCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQor CW13bF9kZWJ1Z2ZzX3JlbW92ZShodyk7DQorI2VuZGlmDQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qg cGNpX2RyaXZlciBtd2xfcGNpX2RyaXZlciA9IHsNCisJLm5hbWUgICAgID0gTVdMX0RSVl9OQU1F LA0KKwkuaWRfdGFibGUgPSBtd2xfcGNpX2lkX3RibCwNCisJLnByb2JlICAgID0gbXdsX3Byb2Jl LA0KKwkucmVtb3ZlICAgPSBtd2xfcmVtb3ZlDQorfTsNCisNCittb2R1bGVfcGNpX2RyaXZlciht d2xfcGNpX2RyaXZlcik7DQorDQorTU9EVUxFX0RFU0NSSVBUSU9OKE1XTF9ERVNDKTsNCitNT0RV TEVfVkVSU0lPTihNV0xfRFJWX1ZFUlNJT04pOw0KK01PRFVMRV9BVVRIT1IoIk1hcnZlbGwgU2Vt aWNvbmR1Y3RvciwgSW5jLiIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCitNT0RVTEVf U1VQUE9SVEVEX0RFVklDRShNV0xfREVWX05BTUUpOw0KK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNp LCBtd2xfcGNpX2lkX3RibCk7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFy dmVsbC9td2x3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv cnguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjQzMDgxMDcNCi0tLSAv ZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9yeC5j DQpAQCAtMCwwICsxLDYyNCBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1h cnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRo ZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAqIEx0 ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz aW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRp c3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdpdGgg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gN CisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisg KiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlv bmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICovDQor DQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgaW1wbGVtZW50cyByZWNlaXZlIHJlbGF0ZWQg ZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNs dWRlIDxsaW51eC9za2J1ZmYuaD4NCisNCisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRl ICJkZXYuaCINCisjaW5jbHVkZSAicnguaCINCisNCisjZGVmaW5lIE1BWF9OVU1fUlhfUklOR19C WVRFUyAgKFNZU0FEUFRfTUFYX05VTV9SWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13 bF9yeF9kZXNjKSkNCisNCisjZGVmaW5lIE1BWF9OVU1fUlhfSE5ETF9CWVRFUyAgKFNZU0FEUFRf TUFYX05VTV9SWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13bF9yeF9obmRsKSkNCisN CisjZGVmaW5lIERFQ1JZUFRfRVJSX01BU0sgICAgICAgIDB4ODANCisjZGVmaW5lIEdFTkVSQUxf REVDUllQVF9FUlIgICAgIDB4RkYNCisjZGVmaW5lIFRLSVBfREVDUllQVF9NSUNfRVJSICAgIDB4 MDINCisjZGVmaW5lIFdFUF9ERUNSWVBUX0lDVl9FUlIgICAgIDB4MDQNCisjZGVmaW5lIFRLSVBf REVDUllQVF9JQ1ZfRVJSICAgIDB4MDgNCisNCisjZGVmaW5lIFc4MzZYX1JTU0lfT0ZGU0VUICAg ICAgIDgNCisNCisvKiBSZWNlaXZlIHJhdGUgaW5mb3JtYXRpb24gY29uc3RhbnRzICovDQorI2Rl ZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExQSAgICAgICAwDQorI2RlZmluZSBSWF9SQVRFX0lO Rk9fRk9STUFUXzExQiAgICAgICAxDQorI2RlZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExTiAg ICAgICAyDQorI2RlZmluZSBSWF9SQVRFX0lORk9fRk9STUFUXzExQUMgICAgICA0DQorDQorI2Rl ZmluZSBSWF9SQVRFX0lORk9fSFQyMCAgICAgICAgICAgICAwDQorI2RlZmluZSBSWF9SQVRFX0lO Rk9fSFQ0MCAgICAgICAgICAgICAxDQorI2RlZmluZSBSWF9SQVRFX0lORk9fSFQ4MCAgICAgICAg ICAgICAyDQorDQorI2RlZmluZSBSWF9SQVRFX0lORk9fTE9OR19JTlRFUlZBTCAgICAwDQorI2Rl ZmluZSBSWF9SQVRFX0lORk9fU0hPUlRfSU5URVJWQUwgICAxDQorDQorc3RhdGljIGludCBtd2xf cnhfcmluZ19hbGxvYyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlzdHJ1Y3QgbXdsX2Rl c2NfZGF0YSAqZGVzYzsNCisNCisJZGVzYyA9ICZwcml2LT5kZXNjX2RhdGFbMF07DQorDQorCWRl c2MtPnByeF9yaW5nID0gKHN0cnVjdCBtd2xfcnhfZGVzYyAqKQ0KKwkJZG1hX2FsbG9jX2NvaGVy ZW50KCZwcml2LT5wZGV2LT5kZXYsDQorCQkJCSAgIE1BWF9OVU1fUlhfUklOR19CWVRFUywNCisJ CQkJICAgJmRlc2MtPnBwaHlzX3J4X3JpbmcsDQorCQkJCSAgIEdGUF9LRVJORUwpOw0KKw0KKwlp ZiAoIWRlc2MtPnByeF9yaW5nKSB7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAiY2Fu bm90IGFsbG9jIG1lbVxuIik7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKw0KKwltZW1zZXQo ZGVzYy0+cHJ4X3JpbmcsIDB4MDAsIE1BWF9OVU1fUlhfUklOR19CWVRFUyk7DQorDQorCWRlc2Mt PnJ4X2huZGwgPSBrbWFsbG9jKE1BWF9OVU1fUlhfSE5ETF9CWVRFUywgR0ZQX0tFUk5FTCk7DQor DQorCWlmICghZGVzYy0+cnhfaG5kbCkgew0KKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBk ZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1JYX1JJTkdfQllURVMsDQorCQkJCSAgZGVzYy0+cHJ4 X3JpbmcsDQorCQkJCSAgZGVzYy0+cHBoeXNfcnhfcmluZyk7DQorCQlyZXR1cm4gLUVOT01FTTsN CisJfQ0KKw0KKwltZW1zZXQoZGVzYy0+cnhfaG5kbCwgMHgwMCwgTUFYX05VTV9SWF9ITkRMX0JZ VEVTKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX3J4X3JpbmdfaW5p dChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSAqZGVz YzsNCisJaW50IGk7DQorCXN0cnVjdCBtd2xfcnhfaG5kbCAqcnhfaG5kbDsNCisJZG1hX2FkZHJf dCBkbWE7DQorCXUzMiB2YWw7DQorDQorCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0K KwlpZiAoZGVzYy0+cHJ4X3JpbmcpIHsNCisJCWRlc2MtPnJ4X2J1Zl9zaXplID0gU1lTQURQVF9N QVhfQUdHUl9TSVpFOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfTUFYX05VTV9SWF9E RVNDOyBpKyspIHsNCisJCQlyeF9obmRsID0gJmRlc2MtPnJ4X2huZGxbaV07DQorCQkJcnhfaG5k bC0+cHNrX2J1ZmYgPQ0KKwkJCQlkZXZfYWxsb2Nfc2tiKGRlc2MtPnJ4X2J1Zl9zaXplKTsNCisN CisJCQlpZiAoIXJ4X2huZGwtPnBza19idWZmKSB7DQorCQkJCXdpcGh5X2Vycihwcml2LT5ody0+ d2lwaHksDQorCQkJCQkgICJyeGRlc2MgJWk6IG5vIHNrYnVmZiBhdmFpbGFibGVcbiIsDQorCQkJ CQkgIGkpOw0KKwkJCQlyZXR1cm4gLUVOT01FTTsNCisJCQl9DQorDQorCQkJc2tiX3Jlc2VydmUo cnhfaG5kbC0+cHNrX2J1ZmYsDQorCQkJCSAgICBTWVNBRFBUX01JTl9CWVRFU19IRUFEUk9PTSk7 DQorCQkJZGVzYy0+cHJ4X3JpbmdbaV0ucnhfY29udHJvbCA9DQorCQkJCUVBR0xFX1JYRF9DVFJM X0RSSVZFUl9PV047DQorCQkJZGVzYy0+cHJ4X3JpbmdbaV0uc3RhdHVzID0gRUFHTEVfUlhEX1NU QVRVU19PSzsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5xb3NfY3RybCA9IDB4MDAwMDsNCisJCQlk ZXNjLT5wcnhfcmluZ1tpXS5jaGFubmVsID0gMHgwMDsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5y c3NpID0gMHgwMDsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5wa3RfbGVuID0NCisJCQkJY3B1X3Rv X2xlMTYoU1lTQURQVF9NQVhfQUdHUl9TSVpFKTsNCisJCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShw cml2LT5wZGV2LA0KKwkJCQkJICAgICByeF9obmRsLT5wc2tfYnVmZi0+ZGF0YSwNCisJCQkJCSAg ICAgZGVzYy0+cnhfYnVmX3NpemUsDQorCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7DQor CQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWEpKSB7DQorCQkJCXdp cGh5X2Vycihwcml2LT5ody0+d2lwaHksDQorCQkJCQkgICJmYWlsZWQgdG8gbWFwIHBjaSBtZW1v cnkhXG4iKTsNCisJCQkJcmV0dXJuIC1FTk9NRU07DQorCQkJfQ0KKwkJCWRlc2MtPnByeF9yaW5n W2ldLnBwaHlzX2J1ZmZfZGF0YSA9IGNwdV90b19sZTMyKGRtYSk7DQorCQkJdmFsID0gKHUzMilk ZXNjLT5wcGh5c19yeF9yaW5nICsNCisJCQkgICAgICAoKGkgKyAxKSAqIHNpemVvZihzdHJ1Y3Qg bXdsX3J4X2Rlc2MpKTsNCisJCQlkZXNjLT5wcnhfcmluZ1tpXS5wcGh5c19uZXh0ID0gY3B1X3Rv X2xlMzIodmFsKTsNCisJCQlyeF9obmRsLT5wZGVzYyA9ICZkZXNjLT5wcnhfcmluZ1tpXTsNCisJ CQlpZiAoaSA8IChTWVNBRFBUX01BWF9OVU1fUlhfREVTQyAtIDEpKQ0KKwkJCQlyeF9obmRsLT5w bmV4dCA9ICZkZXNjLT5yeF9obmRsW2kgKyAxXTsNCisJCX0NCisJCWRlc2MtPnByeF9yaW5nW1NZ U0FEUFRfTUFYX05VTV9SWF9ERVNDIC0gMV0ucHBoeXNfbmV4dCA9DQorCQkJY3B1X3RvX2xlMzIo KHUzMilkZXNjLT5wcGh5c19yeF9yaW5nKTsNCisJCWRlc2MtPnJ4X2huZGxbU1lTQURQVF9NQVhf TlVNX1JYX0RFU0MgLSAxXS5wbmV4dCA9DQorCQkJJmRlc2MtPnJ4X2huZGxbMF07DQorCQlkZXNj LT5wbmV4dF9yeF9obmRsID0gJmRlc2MtPnJ4X2huZGxbMF07DQorDQorCQlyZXR1cm4gMDsNCisJ fQ0KKw0KKwl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAibm8gdmFsaWQgUlggbWVtXG4iKTsN CisNCisJcmV0dXJuIC1FTk9NRU07DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG13bF9yeF9yaW5nX2Ns ZWFudXAoc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJc3RydWN0IG13bF9kZXNjX2RhdGEg KmRlc2M7DQorCWludCBpOw0KKwlzdHJ1Y3QgbXdsX3J4X2huZGwgKnJ4X2huZGw7DQorDQorCWRl c2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0KKwlpZiAoZGVzYy0+cHJ4X3JpbmcpIHsNCisJ CWZvciAoaSA9IDA7IGkgPCBTWVNBRFBUX01BWF9OVU1fUlhfREVTQzsgaSsrKSB7DQorCQkJcnhf aG5kbCA9ICZkZXNjLT5yeF9obmRsW2ldOw0KKwkJCWlmICghcnhfaG5kbC0+cHNrX2J1ZmYpDQor CQkJCWNvbnRpbnVlOw0KKw0KKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwNCisJCQkJ CSBsZTMyX3RvX2NwdQ0KKwkJCQkJIChyeF9obmRsLT5wZGVzYy0+cHBoeXNfYnVmZl9kYXRhKSwN CisJCQkJCSBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOw0K Kw0KKwkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2huZGwtPnBza19idWZmKTsNCisNCisJCQl3aXBo eV9pbmZvKHByaXYtPmh3LT53aXBoeSwNCisJCQkJICAgInVubWFwcGVkK2ZyZWUnZCAlaSAweCVw IDB4JXggJWlcbiIsDQorCQkJCSAgIGksIHJ4X2huZGwtPnBza19idWZmLT5kYXRhLA0KKwkJCQkg ICBsZTMyX3RvX2NwdShyeF9obmRsLT5wZGVzYy0+cHBoeXNfYnVmZl9kYXRhKSwNCisJCQkJICAg ZGVzYy0+cnhfYnVmX3NpemUpOw0KKw0KKwkJCXJ4X2huZGwtPnBza19idWZmID0gTlVMTDsNCisJ CX0NCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtd2xfcnhfcmluZ19mcmVlKHN0cnVjdCBtd2xf cHJpdiAqcHJpdikNCit7DQorCXN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNjOw0KKw0KKwlkZXNj ID0gJnByaXYtPmRlc2NfZGF0YVswXTsNCisNCisJaWYgKGRlc2MtPnByeF9yaW5nKSB7DQorCQlt d2xfcnhfcmluZ19jbGVhbnVwKHByaXYpOw0KKw0KKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYt PnBkZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1JYX1JJTkdfQllURVMsDQorCQkJCSAgZGVzYy0+ cHJ4X3JpbmcsDQorCQkJCSAgZGVzYy0+cHBoeXNfcnhfcmluZyk7DQorDQorCQlkZXNjLT5wcnhf cmluZyA9IE5VTEw7DQorCX0NCisNCisJa2ZyZWUoZGVzYy0+cnhfaG5kbCk7DQorDQorCWRlc2Mt PnBuZXh0X3J4X2huZGwgPSBOVUxMOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3J4 X3ByZXBhcmVfc3RhdHVzKHN0cnVjdCBtd2xfcnhfZGVzYyAqcGRlc2MsDQorCQkJCQkgc3RydWN0 IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykNCit7DQorCXUxNiByYXRlLCBmb3JtYXQsIG5z cywgYncsIGdpLCBydDsNCisNCisJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKCpzdGF0dXMpKTsN CisNCisJc3RhdHVzLT5zaWduYWwgPSAtKHBkZXNjLT5yc3NpICsgVzgzNlhfUlNTSV9PRkZTRVQp Ow0KKw0KKwlyYXRlID0gbGUxNl90b19jcHUocGRlc2MtPnJhdGUpOw0KKwlmb3JtYXQgPSByYXRl ICYgTVdMX1JYX1JBVEVfRk9STUFUX01BU0s7DQorCW5zcyA9IChyYXRlICYgTVdMX1JYX1JBVEVf TlNTX01BU0spID4+IE1XTF9SWF9SQVRFX05TU19TSElGVDsNCisJYncgPSAocmF0ZSAmIE1XTF9S WF9SQVRFX0JXX01BU0spID4+IE1XTF9SWF9SQVRFX0JXX1NISUZUOw0KKwlnaSA9IChyYXRlICYg TVdMX1JYX1JBVEVfR0lfTUFTSykgPj4gTVdMX1JYX1JBVEVfR0lfU0hJRlQ7DQorCXJ0ID0gKHJh dGUgJiBNV0xfUlhfUkFURV9SVF9NQVNLKSA+PiBNV0xfUlhfUkFURV9SVF9TSElGVDsNCisNCisJ c3dpdGNoIChmb3JtYXQpIHsNCisJY2FzZSBSWF9SQVRFX0lORk9fRk9STUFUXzExTjoNCisJCXN0 YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOw0KKwkJaWYgKGJ3ID09IFJYX1JBVEVfSU5GT19IVDQw KQ0KKwkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOw0KKwkJaWYgKGdpID09IFJYX1JB VEVfSU5GT19TSE9SVF9JTlRFUlZBTCkNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9S VF9HSTsNCisJCWJyZWFrOw0KKwljYXNlIFJYX1JBVEVfSU5GT19GT1JNQVRfMTFBQzoNCisJCXN0 YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1ZIVDsNCisJCWlmIChidyA9PSBSWF9SQVRFX0lORk9fSFQ0 MCkNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR180ME1IWjsNCisJCWlmIChidyA9PSBSWF9S QVRFX0lORk9fSFQ4MCkNCisJCQlzdGF0dXMtPnZodF9mbGFnIHw9IFJYX1ZIVF9GTEFHXzgwTUha Ow0KKwkJaWYgKGdpID09IFJYX1JBVEVfSU5GT19TSE9SVF9JTlRFUlZBTCkNCisJCQlzdGF0dXMt PmZsYWcgfD0gUlhfRkxBR19TSE9SVF9HSTsNCisJCXN0YXR1cy0+dmh0X25zcyA9IChuc3MgKyAx KTsNCisJCWJyZWFrOw0KKwl9DQorDQorCXN0YXR1cy0+cmF0ZV9pZHggPSBydDsNCisNCisJaWYg KHBkZXNjLT5jaGFubmVsID4gQkFORF8yNF9DSEFOTkVMX05VTSkgew0KKwkJc3RhdHVzLT5iYW5k ID0gSUVFRTgwMjExX0JBTkRfNUdIWjsNCisJCWlmICgoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFH X0hUKSkgJiYNCisJCSAgICAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1ZIVCkpKSB7DQorCQkJ c3RhdHVzLT5yYXRlX2lkeCAtPSA1Ow0KKwkJCWlmIChzdGF0dXMtPnJhdGVfaWR4ID49IEJBTkRf NTBfUkFURV9OVU0pDQorCQkJCXN0YXR1cy0+cmF0ZV9pZHggPSBCQU5EXzUwX1JBVEVfTlVNIC0g MTsNCisJCX0NCisJfSBlbHNlIHsNCisJCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJH SFo7DQorCQlpZiAoKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkpICYmDQorCQkgICAgKCEo c3RhdHVzLT5mbGFnICYgUlhfRkxBR19WSFQpKSkgew0KKwkJCWlmIChzdGF0dXMtPnJhdGVfaWR4 ID49IEJBTkRfMjRfUkFURV9OVU0pDQorCQkJCXN0YXR1cy0+cmF0ZV9pZHggPSBCQU5EXzI0X1JB VEVfTlVNIC0gMTsNCisJCX0NCisJfQ0KKw0KKwlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hh bm5lbF90b19mcmVxdWVuY3kocGRlc2MtPmNoYW5uZWwsDQorCQkJCQkJICAgICAgc3RhdHVzLT5i YW5kKTsNCisNCisJLyogY2hlY2sgaWYgc3RhdHVzIGhhcyBhIHNwZWNpZmljIGVycm9yIGJpdCAo Yml0IDcpIHNldCBvciBpbmRpY2F0ZXMNCisJICogYSBnZW5lcmFsIGRlY3J5cHQgZXJyb3INCisJ ICovDQorCWlmICgocGRlc2MtPnN0YXR1cyA9PSBHRU5FUkFMX0RFQ1JZUFRfRVJSKSB8fA0KKwkg ICAgKHBkZXNjLT5zdGF0dXMgJiBERUNSWVBUX0VSUl9NQVNLKSkgew0KKwkJLyogY2hlY2sgaWYg c3RhdHVzIGlzIG5vdCBlcXVhbCB0byAweEZGDQorCQkgKiB0aGUgMHhGRiBjaGVjayBpcyBmb3Ig YmFja3dhcmQgY29tcGF0aWJpbGl0eQ0KKwkJICovDQorCQlpZiAocGRlc2MtPnN0YXR1cyAhPSBH RU5FUkFMX0RFQ1JZUFRfRVJSKSB7DQorCQkJaWYgKCgocGRlc2MtPnN0YXR1cyAmICh+REVDUllQ VF9FUlJfTUFTSykpICYNCisJCQkgICAgVEtJUF9ERUNSWVBUX01JQ19FUlIpICYmICEoKHBkZXNj LT5zdGF0dXMgJg0KKwkJCSAgICAoV0VQX0RFQ1JZUFRfSUNWX0VSUiB8IFRLSVBfREVDUllQVF9J Q1ZfRVJSKSkpKSB7DQorCQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7DQor CQkJfQ0KKwkJfQ0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfcnhfZW5hYmxl X3N0YV9hbXNkdShzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsDQorCQkJCQkgICB1OCAqc3RhX2FkZHIp DQorew0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2luZm87DQorCXN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGE7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+c3RhX2xvY2spOw0KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHN0YV9pbmZvLCAmcHJpdi0+c3RhX2xpc3QsIGxpc3QpIHsNCisJCXN0YSA9IGNv bnRhaW5lcl9vZigoY2hhciAqKXN0YV9pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSwNCisJCQkJ ICAgZHJ2X3ByaXZbMF0pOw0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoc3RhLT5hZGRyLCBzdGFf YWRkcikpIHsNCisJCQlzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCA9IHRydWU7DQorCQkJYnJl YWs7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCit9DQor DQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3J4X2ZpbmRfdmlmX2JzcyhzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYsDQorCQkJCQkJICB1OCAqYnNzaWQpDQorew0KKwlzdHJ1Y3QgbXds X3ZpZiAqbXdsX3ZpZjsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT52aWZfbG9jayk7DQorCWxp c3RfZm9yX2VhY2hfZW50cnkobXdsX3ZpZiwgJnByaXYtPnZpZl9saXN0LCBsaXN0KSB7DQorCQlp ZiAoZXRoZXJfYWRkcl9lcXVhbChic3NpZCwgbXdsX3ZpZi0+YnNzaWQpKSB7DQorCQkJc3Bpbl91 bmxvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCisJCQlyZXR1cm4gbXdsX3ZpZjsNCisJCX0NCisJ fQ0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dmlmX2xvY2spOw0KKw0KKwlyZXR1cm4gTlVMTDsN Cit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG13bF9yeF9yZW1vdmVfZG1hX2hlYWRlcihzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBfX2xlMTYgcW9zKQ0KK3sNCisJc3RydWN0IG13bF9kbWFfZGF0YSAq dHI7DQorCWludCBoZHJsZW47DQorDQorCXRyID0gKHN0cnVjdCBtd2xfZG1hX2RhdGEgKilza2It PmRhdGE7DQorCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4odHItPndoLmZyYW1lX2NvbnRyb2wp Ow0KKw0KKwlpZiAoaGRybGVuICE9IHNpemVvZih0ci0+d2gpKSB7DQorCQlpZiAoaWVlZTgwMjEx X2lzX2RhdGFfcW9zKHRyLT53aC5mcmFtZV9jb250cm9sKSkgew0KKwkJCW1lbW1vdmUodHItPmRh dGEgLSBoZHJsZW4sICZ0ci0+d2gsIGhkcmxlbiAtIDIpOw0KKwkJCSooKF9fbGUxNiAqKSh0ci0+ ZGF0YSAtIDIpKSA9IHFvczsNCisJCX0gZWxzZSB7DQorCQkJbWVtbW92ZSh0ci0+ZGF0YSAtIGhk cmxlbiwgJnRyLT53aCwgaGRybGVuKTsNCisJCX0NCisJfQ0KKw0KKwlpZiAoaGRybGVuICE9IHNp emVvZigqdHIpKQ0KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnRyKSAtIGhkcmxlbik7DQorfQ0K Kw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtd2xfcnhfcHJvY2Vzc19tZXNoX2Ftc2R1KHN0cnVjdCBt d2xfcHJpdiAqcHJpdiwNCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJCQkJCSAg ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykNCit7DQorCXN0cnVjdCBpZWVl ODAyMTFfaGRyICp3aDsNCisJc3RydWN0IG13bF9zdGEgKnN0YV9pbmZvOw0KKwlzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhOw0KKwl1OCAqcWM7DQorCWludCB3aF9sZW47DQorCWludCBsZW47DQor CXU4IHBhZDsNCisJdTggKmRhdGE7DQorCXUxNiBmcmFtZV9sZW47DQorCXN0cnVjdCBza19idWZm ICpuZXdza2I7DQorDQorCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOw0K Kw0KKwlzcGluX2xvY2tfYmgoJnByaXYtPnN0YV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRy eShzdGFfaW5mbywgJnByaXYtPnN0YV9saXN0LCBsaXN0KSB7DQorCQlzdGEgPSBjb250YWluZXJf b2YoKGNoYXIgKilzdGFfaW5mbywgc3RydWN0IGllZWU4MDIxMV9zdGEsDQorCQkJCSAgIGRydl9w cml2WzBdKTsNCisJCWlmIChldGhlcl9hZGRyX2VxdWFsKHN0YS0+YWRkciwgd2gtPmFkZHIyKSkg ew0KKwkJCWlmICghc3RhX2luZm8tPmlzX21lc2hfbm9kZSkgew0KKwkJCQlzcGluX3VubG9ja19i aCgmcHJpdi0+c3RhX2xvY2spOw0KKwkJCQlyZXR1cm4gZmFsc2U7DQorCQkJfQ0KKwkJfQ0KKwl9 DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zdGFfbG9jayk7DQorDQorCXFjID0gaWVlZTgwMjEx X2dldF9xb3NfY3RsKHdoKTsNCisJKnFjICY9IH5JRUVFODAyMTFfUU9TX0NUTF9BX01TRFVfUFJF U0VOVDsNCisNCisJd2hfbGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7 DQorCWxlbiA9IHdoX2xlbjsNCisJZGF0YSA9IHNrYi0+ZGF0YTsNCisNCisJd2hpbGUgKGxlbiA8 IHNrYi0+bGVuKSB7DQorCQlmcmFtZV9sZW4gPSAqKHU4ICopKGRhdGEgKyBsZW4gKyBFVEhfSExF TiAtIDEpIHwNCisJCQkoKih1OCAqKShkYXRhICsgbGVuICsgRVRIX0hMRU4gLSAyKSA8PCA4KTsN CisNCisJCWlmICgobGVuICsgRVRIX0hMRU4gKyBmcmFtZV9sZW4pID4gc2tiLT5sZW4pDQorCQkJ YnJlYWs7DQorDQorCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKHdoX2xlbiArIGZyYW1lX2xlbik7 DQorCQlpZiAoIW5ld3NrYikNCisJCQlicmVhazsNCisNCisJCWV0aGVyX2FkZHJfY29weSh3aC0+ YWRkcjMsIGRhdGEgKyBsZW4pOw0KKwkJZXRoZXJfYWRkcl9jb3B5KHdoLT5hZGRyNCwgZGF0YSAr IGxlbiArIEVUSF9BTEVOKTsNCisJCW1lbWNweShuZXdza2ItPmRhdGEsIHdoLCB3aF9sZW4pOw0K KwkJbWVtY3B5KG5ld3NrYi0+ZGF0YSArIHdoX2xlbiwgZGF0YSArIGxlbiArIEVUSF9ITEVOLCBm cmFtZV9sZW4pOw0KKwkJc2tiX3B1dChuZXdza2IsIHdoX2xlbiArIGZyYW1lX2xlbik7DQorDQor CQlwYWQgPSAoKEVUSF9ITEVOICsgZnJhbWVfbGVuKSAlIDQpID8NCisJCQkoNCAtIChFVEhfSExF TiArIGZyYW1lX2xlbikgJSA0KSA6IDA7DQorCQlsZW4gKz0gKEVUSF9ITEVOICsgZnJhbWVfbGVu ICsgcGFkKTsNCisJCWlmIChsZW4gPCBza2ItPmxlbikNCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhf RkxBR19BTVNEVV9NT1JFOw0KKwkJZWxzZQ0KKwkJCXN0YXR1cy0+ZmxhZyAmPSB+UlhfRkxBR19B TVNEVV9NT1JFOw0KKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihuZXdza2IpLCBzdGF0dXMs IHNpemVvZigqc3RhdHVzKSk7DQorCQlpZWVlODAyMTFfcngocHJpdi0+aHcsIG5ld3NrYik7DQor CX0NCisNCisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisNCisJcmV0dXJuIHRydWU7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbXdsX3J4X3JlZmlsbChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIHN0cnVj dCBtd2xfcnhfaG5kbCAqcnhfaG5kbCkNCit7DQorCXN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNj Ow0KKwlkbWFfYWRkcl90IGRtYTsNCisNCisJZGVzYyA9ICZwcml2LT5kZXNjX2RhdGFbMF07DQor DQorCXJ4X2huZGwtPnBza19idWZmID0gZGV2X2FsbG9jX3NrYihkZXNjLT5yeF9idWZfc2l6ZSk7 DQorDQorCWlmICghcnhfaG5kbC0+cHNrX2J1ZmYpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJ c2tiX3Jlc2VydmUocnhfaG5kbC0+cHNrX2J1ZmYsIFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09N KTsNCisNCisJcnhfaG5kbC0+cGRlc2MtPnN0YXR1cyA9IEVBR0xFX1JYRF9TVEFUVVNfT0s7DQor CXJ4X2huZGwtPnBkZXNjLT5xb3NfY3RybCA9IDB4MDAwMDsNCisJcnhfaG5kbC0+cGRlc2MtPmNo YW5uZWwgPSAweDAwOw0KKwlyeF9obmRsLT5wZGVzYy0+cnNzaSA9IDB4MDA7DQorCXJ4X2huZGwt PnBkZXNjLT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoZGVzYy0+cnhfYnVmX3NpemUpOw0KKw0KKwlk bWEgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LA0KKwkJCSAgICAgcnhfaG5kbC0+cHNrX2J1 ZmYtPmRhdGEsDQorCQkJICAgICBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkgICAgIFBDSV9ETUFf RlJPTURFVklDRSk7DQorCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1h KSkgew0KKwkJZGV2X2tmcmVlX3NrYl9hbnkocnhfaG5kbC0+cHNrX2J1ZmYpOw0KKwkJd2lwaHlf ZXJyKHByaXYtPmh3LT53aXBoeSwNCisJCQkgICJmYWlsZWQgdG8gbWFwIHBjaSBtZW1vcnkhXG4i KTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCXJ4X2huZGwtPnBkZXNjLT5wcGh5c19i dWZmX2RhdGEgPSBjcHVfdG9fbGUzMihkbWEpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50 IG13bF9yeF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9w cml2ICpwcml2ID0gaHctPnByaXY7DQorCWludCByYzsNCisNCisJcmMgPSBtd2xfcnhfcmluZ19h bGxvYyhwcml2KTsNCisJaWYgKHJjKSB7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiYWxsb2Nh dGluZyBSWCByaW5nIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gcmM7DQorCX0NCisNCisJcmMgPSBt d2xfcnhfcmluZ19pbml0KHByaXYpOw0KKwlpZiAocmMpIHsNCisJCW13bF9yeF9yaW5nX2ZyZWUo cHJpdik7DQorCQl3aXBoeV9lcnIoaHctPndpcGh5LA0KKwkJCSAgImluaXRpYWxpemluZyBSWCBy aW5nIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gcmM7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3ZvaWQgbXdsX3J4X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0 cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKw0KKwltd2xfcnhfcmluZ19jbGVhbnVw KHByaXYpOw0KKwltd2xfcnhfcmluZ19mcmVlKHByaXYpOw0KK30NCisNCit2b2lkIG13bF9yeF9y ZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0g KHN0cnVjdCBpZWVlODAyMTFfaHcgKilkYXRhOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBo dy0+cHJpdjsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCXN0cnVjdCBtd2xfcnhf aG5kbCAqY3Vycl9obmRsOw0KKwlpbnQgd29ya19kb25lID0gMDsNCisJc3RydWN0IHNrX2J1ZmYg KnByeF9za2IgPSBOVUxMOw0KKwlpbnQgcGt0X2xlbjsNCisJc3RydWN0IGllZWU4MDIxMV9yeF9z dGF0dXMgc3RhdHVzOw0KKwlzdHJ1Y3QgbXdsX3ZpZiAqbXdsX3ZpZiA9IE5VTEw7DQorCXN0cnVj dCBpZWVlODAyMTFfaGRyICp3aDsNCisJdTMyIHN0YXR1c19tYXNrOw0KKw0KKwlzcGluX2xvY2so JnByaXYtPnJ4X2Rlc2NfbG9jayk7DQorCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKwlj dXJyX2huZGwgPSBkZXNjLT5wbmV4dF9yeF9obmRsOw0KKw0KKwlpZiAoIWN1cnJfaG5kbCkgew0K KwkJc3RhdHVzX21hc2sgPSByZWFkbChwcml2LT5pb2Jhc2UxICsNCisJCQkJICAgIE1BQ1JFR19S RUdfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorCQl3cml0ZWwoc3RhdHVzX21hc2sgfCBN QUNSRUdfQTJIUklDX0JJVF9SWF9SRFksDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JF R19SRUdfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorDQorCQlwcml2LT5pc19yeF9zY2hl ZHVsZSA9IGZhbHNlOw0KKwkJd2lwaHlfd2Fybihody0+d2lwaHksICJidXN5IG9yIG5vIHJlY2Vp dmluZyBwYWNrZXRzXG4iKTsNCisJCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9kZXNjX2xvY2spOw0K KwkJcmV0dXJuOw0KKwl9DQorDQorCXdoaWxlICgoY3Vycl9obmRsLT5wZGVzYy0+cnhfY29udHJv bCA9PSBFQUdMRV9SWERfQ1RSTF9ETUFfT1dOKSAmJg0KKwkgICAgICAgKHdvcmtfZG9uZSA8IHBy aXYtPnJlY3ZfbGltaXQpKSB7DQorCQlwcnhfc2tiID0gY3Vycl9obmRsLT5wc2tfYnVmZjsNCisJ CWlmICghcHJ4X3NrYikNCisJCQlnb3RvIG91dDsNCisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+ cGRldiwNCisJCQkJIGxlMzJfdG9fY3B1KGN1cnJfaG5kbC0+cGRlc2MtPnBwaHlzX2J1ZmZfZGF0 YSksDQorCQkJCSBkZXNjLT5yeF9idWZfc2l6ZSwNCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7 DQorCQlwa3RfbGVuID0gbGUxNl90b19jcHUoY3Vycl9obmRsLT5wZGVzYy0+cGt0X2xlbik7DQor DQorCQlpZiAoc2tiX3RhaWxyb29tKHByeF9za2IpIDwgcGt0X2xlbikgew0KKwkJCWRldl9rZnJl ZV9za2JfYW55KHByeF9za2IpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKw0KKwkJaWYgKGN1cnJf aG5kbC0+cGRlc2MtPmNoYW5uZWwgIT0NCisJCSAgICBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmh3 X3ZhbHVlKSB7DQorCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJ4X3NrYik7DQorCQkJZ290byBvdXQ7 DQorCQl9DQorDQorCQltd2xfcnhfcHJlcGFyZV9zdGF0dXMoY3Vycl9obmRsLT5wZGVzYywgJnN0 YXR1cyk7DQorDQorCQlwcml2LT5ub2lzZSA9IC1jdXJyX2huZGwtPnBkZXNjLT5ub2lzZV9mbG9v cjsNCisNCisJCXdoID0gJigoc3RydWN0IG13bF9kbWFfZGF0YSAqKXByeF9za2ItPmRhdGEpLT53 aDsNCisNCisJCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZCh3aC0+ZnJhbWVfY29udHJvbCkp IHsNCisJCQkvKiBDaGVjayBpZiBodyBjcnlwdG8gaGFzIGJlZW4gZW5hYmxlZCBmb3INCisJCQkg KiB0aGlzIGJzcy4gSWYgeWVzLCBzZXQgdGhlIHN0YXR1cyBmbGFncw0KKwkJCSAqIGFjY29yZGlu Z2x5DQorCQkJICovDQorCQkJaWYgKGllZWU4MDIxMV9oYXNfdG9kcyh3aC0+ZnJhbWVfY29udHJv bCkpDQorCQkJCW13bF92aWYgPSBtd2xfcnhfZmluZF92aWZfYnNzKHByaXYsIHdoLT5hZGRyMSk7 DQorCQkJZWxzZQ0KKwkJCQltd2xfdmlmID0gbXdsX3J4X2ZpbmRfdmlmX2Jzcyhwcml2LCB3aC0+ YWRkcjIpOw0KKw0KKwkJCWlmIChtd2xfdmlmICYmIG13bF92aWYtPmlzX2h3X2NyeXB0b19lbmFi bGVkKSB7DQorCQkJCS8qIFdoZW4gTU1JQyBFUlJPUiBpcyBlbmNvdW50ZXJlZA0KKwkJCQkgKiBi eSB0aGUgZmlybXdhcmUsIHBheWxvYWQgaXMNCisJCQkJICogZHJvcHBlZCBhbmQgb25seSAzMiBi eXRlcyBvZg0KKwkJCQkgKiBtd2x3aWZpIEZpcm13YXJlIGhlYWRlciBpcyBzZW50DQorCQkJCSAq IHRvIHRoZSBob3N0Lg0KKwkJCQkgKg0KKwkJCQkgKiBXZSBuZWVkIHRvIGFkZCBmb3VyIGJ5dGVz IG9mDQorCQkJCSAqIGtleSBpbmZvcm1hdGlvbi4gIEluIGl0DQorCQkJCSAqIE1BQzgwMjExIGV4 cGVjdHMga2V5aWR4IHNldCB0bw0KKwkJCQkgKiAwIGZvciB0cmlnZ2VyaW5nIENvdW50ZXINCisJ CQkJICogTWVhc3VyZSBvZiBNTUlDIGZhaWx1cmUuDQorCQkJCSAqLw0KKwkJCQlpZiAoc3RhdHVz LmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsNCisJCQkJCXN0cnVjdCBtd2xfZG1hX2RhdGEg KnRyOw0KKw0KKwkJCQkJdHIgPSAoc3RydWN0IG13bF9kbWFfZGF0YSAqKQ0KKwkJCQkJICAgICBw cnhfc2tiLT5kYXRhOw0KKwkJCQkJbWVtc2V0KCh2b2lkICopJnRyLT5kYXRhLCAwLCA0KTsNCisJ CQkJCXBrdF9sZW4gKz0gNDsNCisJCQkJfQ0KKw0KKwkJCQlpZiAoIWllZWU4MDIxMV9pc19hdXRo KHdoLT5mcmFtZV9jb250cm9sKSkNCisJCQkJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RS SVBQRUQgfA0KKwkJCQkJCSAgICAgICBSWF9GTEFHX0RFQ1JZUFRFRCB8DQorCQkJCQkJICAgICAg IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsNCisJCQl9DQorCQl9DQorDQorCQlza2JfcHV0KHByeF9z a2IsIHBrdF9sZW4pOw0KKwkJbXdsX3J4X3JlbW92ZV9kbWFfaGVhZGVyKHByeF9za2IsIGN1cnJf aG5kbC0+cGRlc2MtPnFvc19jdHJsKTsNCisNCisJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRy ICopcHJ4X3NrYi0+ZGF0YTsNCisNCisJCWlmIChpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVf Y29udHJvbCkpIHsNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7DQorCQkJX19sZTE2 IGNhcGFiOw0KKw0KKwkJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopcHJ4X3NrYi0+ ZGF0YTsNCisNCisJCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJhbWVf Y29udHJvbCkgJiYNCisJCQkJICAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PQ0KKwkJCQkg ICAgIFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KKwkJCQkgICAgIG1nbXQtPnUuYWN0aW9uLnUuYWRk YmFfcmVzcC5hY3Rpb25fY29kZSA9PQ0KKwkJCQkgICAgIFdMQU5fQUNUSU9OX0FEREJBX1JFU1Ap KSB7DQorCQkJCWNhcGFiID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiOw0KKwkJ CQlpZiAobGUxNl90b19jcHUoY2FwYWIpICYgMSkNCisJCQkJCW13bF9yeF9lbmFibGVfc3RhX2Ft c2R1KHByaXYsIG1nbXQtPnNhKTsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoaWVlZTgwMjExX2lz X2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSAmJg0KKwkJICAgIGllZWU4MDIxMV9oYXNfYTQo d2gtPmZyYW1lX2NvbnRyb2wpKSB7DQorCQkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3Rs KHdoKTsNCisNCisJCQlpZiAoKnFjICYgSUVFRTgwMjExX1FPU19DVExfQV9NU0RVX1BSRVNFTlQp DQorCQkJCWlmIChtd2xfcnhfcHJvY2Vzc19tZXNoX2Ftc2R1KHByaXYsIHByeF9za2IsDQorCQkJ CQkJCSAgICAgICZzdGF0dXMpKQ0KKwkJCQkJZ290byBvdXQ7DQorCQl9DQorDQorCQltZW1jcHko SUVFRTgwMjExX1NLQl9SWENCKHByeF9za2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7DQor CQlpZWVlODAyMTFfcngoaHcsIHByeF9za2IpOw0KK291dDoNCisJCW13bF9yeF9yZWZpbGwocHJp diwgY3Vycl9obmRsKTsNCisJCWN1cnJfaG5kbC0+cGRlc2MtPnJ4X2NvbnRyb2wgPSBFQUdMRV9S WERfQ1RSTF9EUklWRVJfT1dOOw0KKwkJY3Vycl9obmRsLT5wZGVzYy0+cW9zX2N0cmwgPSAwOw0K KwkJY3Vycl9obmRsID0gY3Vycl9obmRsLT5wbmV4dDsNCisJCXdvcmtfZG9uZSsrOw0KKwl9DQor DQorCWRlc2MtPnBuZXh0X3J4X2huZGwgPSBjdXJyX2huZGw7DQorDQorCXN0YXR1c19tYXNrID0g cmVhZGwocHJpdi0+aW9iYXNlMSArDQorCQkJICAgIE1BQ1JFR19SRUdfQTJIX0lOVEVSUlVQVF9T VEFUVVNfTUFTSyk7DQorCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19BMkhSSUNfQklUX1JY X1JEWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRf U1RBVFVTX01BU0spOw0KKw0KKwlwcml2LT5pc19yeF9zY2hlZHVsZSA9IGZhbHNlOw0KKw0KKwlz cGluX3VubG9jaygmcHJpdi0+cnhfZGVzY19sb2NrKTsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVz cy9tYXJ2ZWxsL213bHdpZmkvcnguaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAuLmQzMmM1NTgNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h cnZlbGwvbXdsd2lmaS9yeC5oDQpAQCAtMCwwICsxLDI1IEBADQorLyoNCisgKiBDb3B5cmlnaHQg KEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisgKg0KKyAqIFRoaXMg c29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRl cm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRoZSAiTGljZW5zZSIpLiAg WW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbg0KKyAq IGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2Us IGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBGSUxFIElTIERJU1RSSUJV VEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFDQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNl IHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRoaXMgd2FycmFudHkgZGlz Y2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZpbmVzIHJl Y2VpdmUgcmVsYXRlZCBmdW5jdGlvbnMuICovDQorDQorI2lmbmRlZiBfcnhfaF8NCisjZGVmaW5l IF9yeF9oXw0KKw0KK2ludCBtd2xfcnhfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQor dm9pZCBtd2xfcnhfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCit2b2lkIG13bF9y eF9yZWN2KHVuc2lnbmVkIGxvbmcgZGF0YSk7DQorDQorI2VuZGlmIC8qIF9yeF9oXyAqLw0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9zeXNhZHB0Lmgg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvc3lzYWRwdC5oDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOGExNzA2YQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3N5c2FkcHQuaA0KQEAgLTAs MCArMSw3MyBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1hcnZlbGwgSW50 ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIp IGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAqIEx0ZC4gdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1 bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUg YW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gNCisgKiBpcyBh dmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu DQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgKiBBUkUgRVhQ UkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFp bHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICovDQorDQorLyogRGVz Y3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBzeXN0ZW0gYWRhcHRhdGlvbiByZWxhdGVkIGlu Zm9ybWF0aW9uLiAqLw0KKw0KKyNpZm5kZWYgX213bF9zeXNhZHB0X2hfDQorI2RlZmluZSBfbXds X3N5c2FkcHRfaF8NCisNCisjZGVmaW5lIFNZU0FEUFRfTUFYX05VTV9DSEFOTkVMUyAgICAgICA2 NA0KKw0KKyNkZWZpbmUgU1lTQURQVF9NQVhfREFUQV9SQVRFU19HICAgICAgIDE0DQorDQorI2Rl ZmluZSBTWVNBRFBUX1RYX1BPV0VSX0xFVkVMX1RPVEFMICAgMTYNCisNCisjZGVmaW5lIFNZU0FE UFRfVFhfV01NX1FVRVVFUyAgICAgICAgICA0DQorDQorI2RlZmluZSBTWVNBRFBUX1RYX0FNUERV X1FVRVVFUyAgICAgICAgNA0KKw0KKyNkZWZpbmUgU1lTQURQVF9OVU1fT0ZfQVAgICAgICAgICAg ICAgIDE2DQorDQorI2RlZmluZSBTWVNBRFBUX1RPVEFMX1RYX1FVRVVFUyAgICAgICAgKFNZU0FE UFRfVFhfV01NX1FVRVVFUyArIFwNCisJCQkJCVNZU0FEUFRfTlVNX09GX0FQKQ0KKw0KKyNkZWZp bmUgU1lTQURQVF9UT1RBTF9IV19RVUVVRVMgICAgICAgIChTWVNBRFBUX1RYX1dNTV9RVUVVRVMg KyBcDQorCQkJCQlTWVNBRFBUX1RYX0FNUERVX1FVRVVFUykNCisNCisjZGVmaW5lIFNZU0FEUFRf TlVNX09GX0RFU0NfREFUQSAgICAgICAoNCArIFNZU0FEUFRfTlVNX09GX0FQKQ0KKw0KKyNkZWZp bmUgU1lTQURQVF9NQVhfTlVNX1RYX0RFU0MgICAgICAgIDI1Ng0KKw0KKyNkZWZpbmUgU1lTQURQ VF9UWF9RVUVVRV9MSU1JVCAgICAgICAgICgzICogU1lTQURQVF9NQVhfTlVNX1RYX0RFU0MpDQor DQorI2RlZmluZSBTWVNBRFBUX1RYX1dBS0VfUV9USFJFU0hPTEQgICAgKDIgKiBTWVNBRFBUX01B WF9OVU1fVFhfREVTQykNCisNCisjZGVmaW5lIFNZU0FEUFRfREVMQVlfRlJFRV9RX0xJTUlUICAg ICBTWVNBRFBUX01BWF9OVU1fVFhfREVTQw0KKw0KKyNkZWZpbmUgU1lTQURQVF9NQVhfTlVNX1JY X0RFU0MgICAgICAgIDI1Ng0KKw0KKyNkZWZpbmUgU1lTQURQVF9SRUNFSVZFX0xJTUlUICAgICAg ICAgIDY0DQorDQorI2RlZmluZSBTWVNBRFBUX01BWF9BR0dSX1NJWkUgICAgICAgICAgODE5Mg0K Kw0KKyNkZWZpbmUgU1lTQURQVF9NSU5fQllURVNfSEVBRFJPT00gICAgIDY0DQorDQorI2RlZmlu ZSBTWVNBRFBUX0FNUERVX1BBQ0tFVF9USFJFU0hPTEQgNjQNCisNCisjZGVmaW5lIFNZU0FEUFRf QU1TRFVfRldfTUFYX1NJWkUgICAgICAzMzAwDQorDQorI2RlZmluZSBTWVNBRFBUX0FNU0RVXzRL X01BWF9TSVpFICAgICAgU1lTQURQVF9BTVNEVV9GV19NQVhfU0laRQ0KKw0KKyNkZWZpbmUgU1lT QURQVF9BTVNEVV84S19NQVhfU0laRSAgICAgIFNZU0FEUFRfQU1TRFVfRldfTUFYX1NJWkUNCisN CisjZGVmaW5lIFNZU0FEUFRfQU1TRFVfQUxMT1dfU0laRSAgICAgICAxNjAwDQorDQorI2RlZmlu ZSBTWVNBRFBUX0FNU0RVX0ZMVVNIX1RJTUUgICAgICAgNTAwDQorDQorI2RlZmluZSBTWVNBRFBU X0FNU0RVX1BBQ0tFVF9USFJFU0hPTEQgMTANCisNCisjZGVmaW5lIFNZU0FEUFRfTUFYX1RJRCAg ICAgICAgICAgICAgICA4DQorDQorI2VuZGlmIC8qIF9td2xfc3lzYWRwdF9oXyAqLw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS90eC5jIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3R4LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi42OGE5OTRkDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25l dC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvdHguYw0KQEAgLTAsMCArMSwxMjUxIEBADQorLyoN CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4N CisgKg0KKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQg YnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsDQorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorICogKHRo ZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRo aXMgRmlsZSBpbg0KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaA0KKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0 aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqIFRIRSBG SUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBB TkQgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1F RC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dA0KKyAqIHRo aXMgd2FycmFudHkgZGlzY2xhaW1lci4NCisgKi8NCisNCisvKiBEZXNjcmlwdGlvbjogIFRoaXMg ZmlsZSBpbXBsZW1lbnRzIHRyYW5zbWl0IHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KKw0KKyNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCisN CisjaW5jbHVkZSAic3lzYWRwdC5oIg0KKyNpbmNsdWRlICJkZXYuaCINCisjaW5jbHVkZSAiZndj bWQuaCINCisjaW5jbHVkZSAidHguaCINCisNCisjZGVmaW5lIE1BWF9OVU1fVFhfUklOR19CWVRF UyAgKFNZU0FEUFRfTUFYX05VTV9UWF9ERVNDICogXA0KKwkJCQlzaXplb2Yoc3RydWN0IG13bF90 eF9kZXNjKSkNCisNCisjZGVmaW5lIE1BWF9OVU1fVFhfSE5ETF9CWVRFUyAgIChTWVNBRFBUX01B WF9OVU1fVFhfREVTQyAqIFwNCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2xfdHhfaG5kbCkpDQorDQor I2RlZmluZSBFQUdMRV9UWERfWE1JVENUUkxfVVNFX01DX1JBVEUgICAgIDB4OCAgICAgLyogVXNl IG11bHRpY2FzdCBkYXRhIHJhdGUgKi8NCisNCisjZGVmaW5lIE1XTF9RT1NfQUNLX1BPTElDWV9N QVNLCSAgICAgICAgICAgMHgwMDYwDQorI2RlZmluZSBNV0xfUU9TX0FDS19QT0xJQ1lfTk9STUFM ICAgICAgICAgIDB4MDAwMA0KKyNkZWZpbmUgTVdMX1FPU19BQ0tfUE9MSUNZX0JMT0NLQUNLICAg ICAgICAweDAwNjANCisNCisjZGVmaW5lIEVYVF9JViAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgyMA0KKyNkZWZpbmUgSU5DUkVBU0VfSVYoaXYxNiwgaXYzMikgXA0KK3sgXA0KKwkoaXYx NikrKzsgXA0KKwlpZiAoKGl2MTYpID09IDApIFwNCisJCShpdjMyKSsrOyBcDQorfQ0KKw0KKy8q IFRyYW5zbWl0IHJhdGUgaW5mb3JtYXRpb24gY29uc3RhbnRzICovDQorI2RlZmluZSBUWF9SQVRF X0ZPUk1BVF9MRUdBQ1kgICAgICAgICAwDQorI2RlZmluZSBUWF9SQVRFX0ZPUk1BVF8xMU4gICAg ICAgICAgICAxDQorI2RlZmluZSBUWF9SQVRFX0ZPUk1BVF8xMUFDICAgICAgICAgICAyDQorDQor I2RlZmluZSBUWF9SQVRFX0JBTkRXSURUSF8yMCAgICAgICAgICAwDQorI2RlZmluZSBUWF9SQVRF X0JBTkRXSURUSF80MCAgICAgICAgICAxDQorI2RlZmluZSBUWF9SQVRFX0JBTkRXSURUSF84MCAg ICAgICAgICAyDQorDQorI2RlZmluZSBUWF9SQVRFX0lORk9fU1REX0dJICAgICAgICAgICAwDQor I2RlZmluZSBUWF9SQVRFX0lORk9fU0hPUlRfR0kgICAgICAgICAxDQorDQorZW51bSB7DQorCUlF RUVfVFlQRV9NQU5BR0VNRU5UID0gMCwNCisJSUVFRV9UWVBFX0NPTlRST0wsDQorCUlFRUVfVFlQ RV9EQVRBDQorfTsNCisNCitzdHJ1Y3QgY2NtcF9oZHIgew0KKwlfX2xlMTYgaXYxNjsNCisJdTgg cnN2ZDsNCisJdTgga2V5X2lkOw0KKwlfX2xlMzIgaXYzMjsNCit9IF9fcGFja2VkOw0KKw0KK3N0 YXRpYyBpbnQgbXdsX3R4X3JpbmdfYWxsb2Moc3RydWN0IG13bF9wcml2ICpwcml2KQ0KK3sNCisJ c3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCWludCBudW07DQorCXU4ICptZW07DQorDQor CWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhWzBdOw0KKw0KKwltZW0gPSBkbWFfYWxsb2NfY29oZXJl bnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJIE1BWF9OVU1fVFhfUklOR19CWVRFUyAqDQorCQkJ CSBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEsDQorCQkJCSAmZGVzYy0+cHBoeXNfdHhfcmluZywN CisJCQkJIEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIW1lbSkgew0KKwkJd2lwaHlfZXJyKHByaXYt Pmh3LT53aXBoeSwgImNhbm5vdCBhbGxvYyBtZW1cbiIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQor CX0NCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7IG51 bSsrKSB7DQorCQlkZXNjID0gJnByaXYtPmRlc2NfZGF0YVtudW1dOw0KKw0KKwkJZGVzYy0+cHR4 X3JpbmcgPSAoc3RydWN0IG13bF90eF9kZXNjICopDQorCQkJKG1lbSArIG51bSAqIE1BWF9OVU1f VFhfUklOR19CWVRFUyk7DQorDQorCQlkZXNjLT5wcGh5c190eF9yaW5nID0gKGRtYV9hZGRyX3Qp DQorCQkJKCh1MzIpcHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3R4X3JpbmcgKw0KKwkJCW51bSAq IE1BWF9OVU1fVFhfUklOR19CWVRFUyk7DQorDQorCQltZW1zZXQoZGVzYy0+cHR4X3JpbmcsIDB4 MDAsDQorCQkgICAgICAgTUFYX05VTV9UWF9SSU5HX0JZVEVTKTsNCisJfQ0KKw0KKwltZW0gPSBr bWFsbG9jKE1BWF9OVU1fVFhfSE5ETF9CWVRFUyAqIFNZU0FEUFRfTlVNX09GX0RFU0NfREFUQSwN CisJCSAgICAgIEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIW1lbSkgew0KKwkJd2lwaHlfZXJyKHBy aXYtPmh3LT53aXBoeSwgImNhbm5vdCBhbGxvYyBtZW1cbiIpOw0KKwkJZG1hX2ZyZWVfY29oZXJl bnQoJnByaXYtPnBkZXYtPmRldiwNCisJCQkJICBNQVhfTlVNX1RYX1JJTkdfQllURVMgKg0KKwkJ CQkgIFNZU0FEUFRfTlVNX09GX0RFU0NfREFUQSwNCisJCQkJICBwcml2LT5kZXNjX2RhdGFbMF0u cHR4X3JpbmcsDQorCQkJCSAgcHJpdi0+ZGVzY19kYXRhWzBdLnBwaHlzX3R4X3JpbmcpOw0KKwkJ cmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05V TV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQorCQlkZXNjID0gJnByaXYtPmRlc2NfZGF0YVtudW1d Ow0KKw0KKwkJZGVzYy0+dHhfaG5kbCA9IChzdHJ1Y3QgbXdsX3R4X2huZGwgKikNCisJCQkobWVt ICsgbnVtICogTUFYX05VTV9UWF9ITkRMX0JZVEVTKTsNCisNCisJCW1lbXNldChkZXNjLT50eF9o bmRsLCAweDAwLA0KKwkJICAgICAgIE1BWF9OVU1fVFhfSE5ETF9CWVRFUyk7DQorCX0NCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXdsX3R4X3JpbmdfaW5pdChzdHJ1Y3QgbXds X3ByaXYgKnByaXYpDQorew0KKwlpbnQgbnVtLCBpOw0KKwlzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSAq ZGVzYzsNCisNCisJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7 IG51bSsrKSB7DQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eHFbbnVtXSk7DQorCQlw cml2LT5md19kZXNjX2NudFtudW1dID0gMDsNCisNCisJCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRh W251bV07DQorDQorCQlpZiAoZGVzYy0+cHR4X3JpbmcpIHsNCisJCQlmb3IgKGkgPSAwOyBpIDwg U1lTQURQVF9NQVhfTlVNX1RYX0RFU0M7IGkrKykgew0KKwkJCQlkZXNjLT5wdHhfcmluZ1tpXS5z dGF0dXMgPQ0KKwkJCQkJY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRVU19JRExFKTsNCisJCQkJ ZGVzYy0+cHR4X3JpbmdbaV0ucHBoeXNfbmV4dCA9DQorCQkJCQljcHVfdG9fbGUzMigodTMyKWRl c2MtPnBwaHlzX3R4X3JpbmcgKw0KKwkJCQkJKChpICsgMSkgKiBzaXplb2Yoc3RydWN0IG13bF90 eF9kZXNjKSkpOw0KKwkJCQlkZXNjLT50eF9obmRsW2ldLnBkZXNjID0NCisJCQkJCSZkZXNjLT5w dHhfcmluZ1tpXTsNCisJCQkJaWYgKGkgPCBTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAtIDEpDQor CQkJCQlkZXNjLT50eF9obmRsW2ldLnBuZXh0ID0NCisJCQkJCQkmZGVzYy0+dHhfaG5kbFtpICsg MV07DQorCQkJfQ0KKwkJCWRlc2MtPnB0eF9yaW5nW1NZU0FEUFRfTUFYX05VTV9UWF9ERVNDIC0g MV0ucHBoeXNfbmV4dCA9DQorCQkJCWNwdV90b19sZTMyKCh1MzIpZGVzYy0+cHBoeXNfdHhfcmlu Zyk7DQorCQkJZGVzYy0+dHhfaG5kbFtTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAtIDFdLnBuZXh0 ID0NCisJCQkJJmRlc2MtPnR4X2huZGxbMF07DQorDQorCQkJZGVzYy0+cHN0YWxlX3R4X2huZGwg PSAmZGVzYy0+dHhfaG5kbFswXTsNCisJCQlkZXNjLT5wbmV4dF90eF9obmRsICA9ICZkZXNjLT50 eF9obmRsWzBdOw0KKwkJfSBlbHNlIHsNCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LCAi bm8gdmFsaWQgVFggbWVtXG4iKTsNCisJCQlyZXR1cm4gLUVOT01FTTsNCisJCX0NCisJfQ0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbXdsX3R4X3JpbmdfY2xlYW51cChzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYpDQorew0KKwlpbnQgY2xlYW5lZF90eF9kZXNjID0gMDsNCisJaW50 IG51bSwgaTsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorDQorCWZvciAobnVtID0g MDsgbnVtIDwgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBOyBudW0rKykgew0KKwkJc2tiX3F1ZXVl X3B1cmdlKCZwcml2LT50eHFbbnVtXSk7DQorCQlwcml2LT5md19kZXNjX2NudFtudW1dID0gMDsN CisNCisJCWRlc2MgPSAmcHJpdi0+ZGVzY19kYXRhW251bV07DQorDQorCQlpZiAoZGVzYy0+cHR4 X3JpbmcpIHsNCisJCQlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9NQVhfTlVNX1RYX0RFU0M7IGkr Kykgew0KKwkJCQlpZiAoIWRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYpDQorCQkJCQljb250aW51 ZTsNCisNCisJCQkJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksDQorCQkJCQkgICAidW5tYXBw ZWQgYW5kIGZyZWUnZCAlaSAweCVwIDB4JXhcbiIsDQorCQkJCQkgICBpLA0KKwkJCQkJICAgZGVz Yy0+dHhfaG5kbFtpXS5wc2tfYnVmZi0+ZGF0YSwNCisJCQkJCSAgIGxlMzJfdG9fY3B1KA0KKwkJ CQkJICAgZGVzYy0+cHR4X3JpbmdbaV0ucGt0X3B0cikpOw0KKwkJCQlwY2lfdW5tYXBfc2luZ2xl KHByaXYtPnBkZXYsDQorCQkJCQkJIGxlMzJfdG9fY3B1KA0KKwkJCQkJCSBkZXNjLT5wdHhfcmlu Z1tpXS5wa3RfcHRyKSwNCisJCQkJCQkgZGVzYy0+dHhfaG5kbFtpXS5wc2tfYnVmZi0+bGVuLA0K KwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsNCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoZGVzYy0+ dHhfaG5kbFtpXS5wc2tfYnVmZik7DQorCQkJCWRlc2MtPnB0eF9yaW5nW2ldLnN0YXR1cyA9DQor CQkJCQljcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0lETEUpOw0KKwkJCQlkZXNjLT5wdHhf cmluZ1tpXS5wa3RfcHRyID0gMDsNCisJCQkJZGVzYy0+cHR4X3JpbmdbaV0ucGt0X2xlbiA9IDA7 DQorCQkJCWRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYgPSBOVUxMOw0KKwkJCQljbGVhbmVkX3R4 X2Rlc2MrKzsNCisJCQl9DQorCQl9DQorCX0NCisNCisJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lw aHksICJjbGVhbmVkICVpIFRYIGRlc2NyXG4iLCBjbGVhbmVkX3R4X2Rlc2MpOw0KK30NCisNCitz dGF0aWMgdm9pZCBtd2xfdHhfcmluZ19mcmVlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdikNCit7DQor CWludCBudW07DQorDQorCWlmIChwcml2LT5kZXNjX2RhdGFbMF0ucHR4X3JpbmcpIHsNCisJCWRt YV9mcmVlX2NvaGVyZW50KCZwcml2LT5wZGV2LT5kZXYsDQorCQkJCSAgTUFYX05VTV9UWF9SSU5H X0JZVEVTICoNCisJCQkJICBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEsDQorCQkJCSAgcHJpdi0+ ZGVzY19kYXRhWzBdLnB0eF9yaW5nLA0KKwkJCQkgIHByaXYtPmRlc2NfZGF0YVswXS5wcGh5c190 eF9yaW5nKTsNCisJfQ0KKw0KKwlmb3IgKG51bSA9IDA7IG51bSA8IFNZU0FEUFRfTlVNX09GX0RF U0NfREFUQTsgbnVtKyspIHsNCisJCWlmIChwcml2LT5kZXNjX2RhdGFbbnVtXS5wdHhfcmluZykN CisJCQlwcml2LT5kZXNjX2RhdGFbbnVtXS5wdHhfcmluZyA9IE5VTEw7DQorCQlwcml2LT5kZXNj X2RhdGFbbnVtXS5wc3RhbGVfdHhfaG5kbCA9IE5VTEw7DQorCQlwcml2LT5kZXNjX2RhdGFbbnVt XS5wbmV4dF90eF9obmRsID0gTlVMTDsNCisJfQ0KKw0KKwlrZnJlZShwcml2LT5kZXNjX2RhdGFb MF0udHhfaG5kbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfYWRkX2RtYV9o ZWFkZXIoc3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCQkJIHN0cnVjdCBza19idWZmICpza2Is DQorCQkJCQkgaW50IGhlYWRfcGFkLA0KKwkJCQkJIGludCB0YWlsX3BhZCkNCit7DQorCXN0cnVj dCBpZWVlODAyMTFfaGRyICp3aDsNCisJaW50IGhkcmxlbjsNCisJaW50IHJlcWRfaGRybGVuOw0K KwlzdHJ1Y3QgbXdsX2RtYV9kYXRhICp0cjsNCisNCisJLyogQWRkIGEgZmlybXdhcmUgRE1BIGhl YWRlcjsgdGhlIGZpcm13YXJlIHJlcXVpcmVzIHRoYXQgd2UNCisJICogcHJlc2VudCBhIDItYnl0 ZSBwYXlsb2FkIGxlbmd0aCBmb2xsb3dlZCBieSBhIDQtYWRkcmVzcw0KKwkgKiBoZWFkZXIgKHdp dGhvdXQgUW9TIGZpZWxkKSwgZm9sbG93ZWQgKG9wdGlvbmFsbHkpIGJ5IGFueQ0KKwkgKiBXRVAv RXh0SVYgaGVhZGVyIChidXQgb25seSBmaWxsZWQgaW4gZm9yIENDTVApLg0KKwkgKi8NCisJd2gg PSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7DQorDQorCWhkcmxlbiA9IGllZWU4 MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOw0KKw0KKwlyZXFkX2hkcmxlbiA9IHNpemVv ZigqdHIpICsgaGVhZF9wYWQ7DQorDQorCWlmIChoZHJsZW4gIT0gcmVxZF9oZHJsZW4pDQorCQlz a2JfcHVzaChza2IsIHJlcWRfaGRybGVuIC0gaGRybGVuKTsNCisNCisJaWYgKGllZWU4MDIxMV9p c19kYXRhX3Fvcyh3aC0+ZnJhbWVfY29udHJvbCkpDQorCQloZHJsZW4gLT0gSUVFRTgwMjExX1FP U19DVExfTEVOOw0KKw0KKwl0ciA9IChzdHJ1Y3QgbXdsX2RtYV9kYXRhICopc2tiLT5kYXRhOw0K Kw0KKwlpZiAod2ggIT0gJnRyLT53aCkNCisJCW1lbW1vdmUoJnRyLT53aCwgd2gsIGhkcmxlbik7 DQorDQorCWlmIChoZHJsZW4gIT0gc2l6ZW9mKHRyLT53aCkpDQorCQltZW1zZXQoKCh2b2lkICop JnRyLT53aCkgKyBoZHJsZW4sIDAsIHNpemVvZih0ci0+d2gpIC0gaGRybGVuKTsNCisNCisJLyog RmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjEx DQorCSAqIHBheWxvYWQiLiAgVGhhdCBpcywgZXZlcnl0aGluZyBleGNlcHQgZm9yIHRoZSA4MDIu MTEgaGVhZGVyLg0KKwkgKiBUaGlzIGluY2x1ZGVzIGFsbCBjcnlwdG8gbWF0ZXJpYWwgaW5jbHVk aW5nIHRoZSBNSUMuDQorCSAqLw0KKwl0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAt IHNpemVvZigqdHIpICsgdGFpbF9wYWQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXds X3R4X2VuY2Fwc3VsYXRlX2ZyYW1lKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCisJCQkJCSAgICBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYg KmtfY29uZiwNCisJCQkJCSAgICBib29sICpjY21wKQ0KK3sNCisJaW50IGhlYWRfcGFkID0gMDsN CisJaW50IGRhdGFfcGFkID0gMDsNCisNCisJLyogTWFrZSBzdXJlIHRoZSBwYWNrZXQgaGVhZGVy IGlzIGluIHRoZSBETUEgaGVhZGVyIGZvcm1hdCAoNC1hZGRyZXNzDQorCSAqIHdpdGhvdXQgUW9T KSwgYW5kIGFkZCBoZWFkICYgdGFpbCBwYWRkaW5nIHdoZW4gSFcgY3J5cHRvIGlzIGVuYWJsZWQu DQorCSAqDQorCSAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyB0cmFpbGVyIHBhZGRpbmcgcmVxdWly ZW1lbnRzOg0KKwkgKiAtIFdFUDogNCB0cmFpbGVyIGJ5dGVzIChJQ1YpDQorCSAqIC0gVEtJUDog MTIgdHJhaWxlciBieXRlcyAoOCBNSUMgKyA0IElDVikNCisJICogLSBDQ01QOiA4IHRyYWlsZXIg Ynl0ZXMgKE1JQykNCisJICovDQorDQorCWlmIChrX2NvbmYpIHsNCisJCWhlYWRfcGFkID0ga19j b25mLT5pdl9sZW47DQorDQorCQlzd2l0Y2ggKGtfY29uZi0+Y2lwaGVyKSB7DQorCQljYXNlIFdM QU5fQ0lQSEVSX1NVSVRFX1dFUDQwOg0KKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6 DQorCQkJZGF0YV9wYWQgPSA0Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlU RV9US0lQOg0KKwkJCWRhdGFfcGFkID0gMTI7DQorCQkJYnJlYWs7DQorCQljYXNlIFdMQU5fQ0lQ SEVSX1NVSVRFX0NDTVA6DQorCQkJZGF0YV9wYWQgPSA4Ow0KKwkJCSpjY21wID0gdHJ1ZTsNCisJ CQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwltd2xfdHhfYWRkX2RtYV9oZWFkZXIocHJpdiwgc2ti LCBoZWFkX3BhZCwgZGF0YV9wYWQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4 X2luc2VydF9jY21wX2hkcih1OCAqcGNjbXBfaGRyLA0KKwkJCQkJICB1OCBrZXlfaWQsIHUxNiBp djE2LCB1MzIgaXYzMikNCit7DQorCXN0cnVjdCBjY21wX2hkciAqY2NtcF9oID0gKHN0cnVjdCBj Y21wX2hkciAqKXBjY21wX2hkcjsNCisNCisJY2NtcF9oLT5pdjE2ID0gY3B1X3RvX2xlMTYoaXYx Nik7DQorCWNjbXBfaC0+cnN2ZCA9IDA7DQorCWNjbXBfaC0+a2V5X2lkID0gRVhUX0lWIHwgKGtl eV9pZCA8PCA2KTsNCisJY2NtcF9oLT5pdjMyID0gY3B1X3RvX2xlMzIoaXYzMik7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUgaW50IG13bF90eF90aWRfcXVldWVfbWFwcGluZyh1OCB0aWQpDQorew0K Kwlzd2l0Y2ggKHRpZCkgew0KKwljYXNlIDA6DQorCWNhc2UgMzoNCisJCXJldHVybiBJRUVFODAy MTFfQUNfQkU7DQorCWNhc2UgMToNCisJY2FzZSAyOg0KKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19C SzsNCisJY2FzZSA0Og0KKwljYXNlIDU6DQorCQlyZXR1cm4gSUVFRTgwMjExX0FDX1ZJOw0KKwlj YXNlIDY6DQorCWNhc2UgNzoNCisJCXJldHVybiBJRUVFODAyMTFfQUNfVk87DQorCWRlZmF1bHQ6 DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg dm9pZCBtd2xfdHhfY291bnRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHRp ZCkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9pbmZv ICp0eF9zdGF0czsNCisNCisJaWYgKFdBUk5fT04odGlkID49IFNZU0FEUFRfTUFYX1RJRCkpDQor CQlyZXR1cm47DQorDQorCXN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7DQorDQorCXR4 X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOw0KKw0KKwlpZiAodHhfc3RhdHMtPnN0 YXJ0X3RpbWUgPT0gMCkNCisJCXR4X3N0YXRzLT5zdGFydF90aW1lID0gamlmZmllczsNCisNCisJ LyogcmVzZXQgdGhlIHBhY2tldCBjb3VudCBhZnRlciBlYWNoIHNlY29uZCBlbGFwc2VzLiAgSWYg dGhlIG51bWJlciBvZg0KKwkgKiBwYWNrZXRzIGV2ZXIgZXhjZWVkcyB0aGUgYW1wZHVfbWluX3Ry YWZmaWMgdGhyZXNob2xkLCB3ZSB3aWxsIGFsbG93DQorCSAqIGFuIGFtcGR1IHN0cmVhbSB0byBi ZSBzdGFydGVkLg0KKwkgKi8NCisJaWYgKGppZmZpZXMgLSB0eF9zdGF0cy0+c3RhcnRfdGltZSA+ IEhaKSB7DQorCQl0eF9zdGF0cy0+cGt0cyA9IDA7DQorCQl0eF9zdGF0cy0+c3RhcnRfdGltZSA9 IDA7DQorCX0gZWxzZSB7DQorCQl0eF9zdGF0cy0+cGt0cysrOw0KKwl9DQorfQ0KKw0KK3N0YXRp YyBpbmxpbmUgYm9vbCBtd2xfdHhfYXZhaWxhYmxlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgaW50 IGRlc2NfbnVtKQ0KK3sNCisJc3RydWN0IG13bF90eF9obmRsICp0eF9obmRsOw0KKw0KKwl0eF9o bmRsID0gcHJpdi0+ZGVzY19kYXRhW2Rlc2NfbnVtXS5wbmV4dF90eF9obmRsOw0KKw0KKwlpZiAo IXR4X2huZGwtPnBkZXNjKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlpZiAodHhfaG5kbC0+cGRl c2MtPnN0YXR1cyAhPSBFQUdMRV9UWERfU1RBVFVTX0lETEUpIHsNCisJCS8qIEludGVycnVwdCBG L1cgYW55d2F5ICovDQorCQlpZiAodHhfaG5kbC0+cGRlc2MtPnN0YXR1cyAmDQorCQkgICAgY3B1 X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRVU19GV19PV05FRCkpDQorCQkJd3JpdGVsKE1BQ1JFR19I MkFSSUNfQklUX1BQQV9SRUFEWSwNCisJCQkgICAgICAgcHJpdi0+aW9iYXNlMSArDQorCQkJICAg ICAgIE1BQ1JFR19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOw0KKwkJcmV0dXJuIGZhbHNlOw0K Kwl9DQorDQorCXJldHVybiB0cnVlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4 X3NrYihzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIGludCBkZXNjX251bSwNCisJCQkgICAgICBzdHJ1 Y3Qgc2tfYnVmZiAqdHhfc2tiKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9p bmZvOw0KKwlzdHJ1Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBtd2xfdHhfaG5k bCAqdHhfaG5kbDsNCisJc3RydWN0IG13bF90eF9kZXNjICp0eF9kZXNjOw0KKwlzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOw0KKwlzdHJ1Y3Qg bXdsX3ZpZiAqbXdsX3ZpZjsNCisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa19jb25mOw0K Kwlib29sIGNjbXAgPSBmYWxzZTsNCisJc3RydWN0IG13bF9kbWFfZGF0YSAqZG1hX2RhdGE7DQor CXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJZG1hX2FkZHJfdCBkbWE7DQorDQorCWlmIChX QVJOX09OKCF0eF9za2IpKQ0KKwkJcmV0dXJuOw0KKw0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NL Ql9DQih0eF9za2IpOw0KKwl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZv LT5zdGF0dXM7DQorCXN0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKXR4X2N0cmwtPnN0YTsN CisJdmlmID0gKHN0cnVjdCBpZWVlODAyMTFfdmlmICopdHhfY3RybC0+dmlmOw0KKwltd2xfdmlm ID0gbXdsX2Rldl9nZXRfdmlmKHZpZik7DQorCWtfY29uZiA9IChzdHJ1Y3QgaWVlZTgwMjExX2tl eV9jb25mICopdHhfY3RybC0+a19jb25mOw0KKw0KKwltd2xfdHhfZW5jYXBzdWxhdGVfZnJhbWUo cHJpdiwgdHhfc2tiLCBrX2NvbmYsICZjY21wKTsNCisNCisJZG1hX2RhdGEgPSAoc3RydWN0IG13 bF9kbWFfZGF0YSAqKXR4X3NrYi0+ZGF0YTsNCisJd2ggPSAmZG1hX2RhdGEtPndoOw0KKw0KKwlp ZiAoaWVlZTgwMjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7DQorCQlpZiAoaXNfbXVs dGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKSkgew0KKwkJCWlmIChjY21wKSB7DQorCQkJCW13 bF90eF9pbnNlcnRfY2NtcF9oZHIoZG1hX2RhdGEtPmRhdGEsDQorCQkJCQkJICAgICAgIG13bF92 aWYtPmtleWlkeCwNCisJCQkJCQkgICAgICAgbXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkgICAgICAg bXdsX3ZpZi0+aXYzMik7DQorCQkJCUlOQ1JFQVNFX0lWKG13bF92aWYtPml2MTYsIG13bF92aWYt Pml2MzIpOw0KKwkJCX0NCisJCX0gZWxzZSB7DQorCQkJaWYgKGNjbXApIHsNCisJCQkJaWYgKHZp Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQorCQkJCQltd2xfdHhfaW5zZXJ0 X2NjbXBfaGRyKGRtYV9kYXRhLT5kYXRhLA0KKwkJCQkJCQkgICAgICAgbXdsX3ZpZi0+a2V5aWR4 LA0KKwkJCQkJCQkgICAgICAgbXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkJICAgICAgIG13bF92aWYt Pml2MzIpOw0KKwkJCQkJSU5DUkVBU0VfSVYobXdsX3ZpZi0+aXYxNiwNCisJCQkJCQkgICAgbXds X3ZpZi0+aXYzMik7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu Zm87DQorDQorCQkJCQlzdGFfaW5mbyA9IG13bF9kZXZfZ2V0X3N0YShzdGEpOw0KKw0KKwkJCQkJ bXdsX3R4X2luc2VydF9jY21wX2hkcihkbWFfZGF0YS0+ZGF0YSwNCisJCQkJCQkJICAgICAgIDAs DQorCQkJCQkJCSAgICAgICBzdGFfaW5mby0+aXYxNiwNCisJCQkJCQkJICAgICAgIHN0YV9pbmZv LT5pdjMyKTsNCisJCQkJCUlOQ1JFQVNFX0lWKHN0YV9pbmZvLT5pdjE2LA0KKwkJCQkJCSAgICBz dGFfaW5mby0+aXYzMik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJdHhfaG5kbCA9 IHByaXYtPmRlc2NfZGF0YVtkZXNjX251bV0ucG5leHRfdHhfaG5kbDsNCisJdHhfaG5kbC0+cHNr X2J1ZmYgPSB0eF9za2I7DQorCXR4X2Rlc2MgPSB0eF9obmRsLT5wZGVzYzsNCisJdHhfZGVzYy0+ dHhfcHJpb3JpdHkgPSB0eF9jdHJsLT50eF9wcmlvcml0eTsNCisJdHhfZGVzYy0+cW9zX2N0cmwg PSBjcHVfdG9fbGUxNih0eF9jdHJsLT5xb3NfY3RybCk7DQorCXR4X2Rlc2MtPnBrdF9sZW4gPSBj cHVfdG9fbGUxNih0eF9za2ItPmxlbik7DQorCXR4X2Rlc2MtPnBhY2tldF9pbmZvID0gMDsNCisJ dHhfZGVzYy0+ZGF0YV9yYXRlID0gMDsNCisJdHhfZGVzYy0+dHlwZSA9IHR4X2N0cmwtPnR5cGU7 DQorCXR4X2Rlc2MtPnhtaXRfY29udHJvbCA9IHR4X2N0cmwtPnhtaXRfY29udHJvbDsNCisJdHhf ZGVzYy0+c2FwX3BrdF9pbmZvID0gMDsNCisJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRl diwgdHhfc2tiLT5kYXRhLA0KKwkJCSAgICAgdHhfc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0Up Ow0KKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsNCisJCWRl dl9rZnJlZV9za2JfYW55KHR4X3NrYik7DQorCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LA0K KwkJCSAgImZhaWxlZCB0byBtYXAgcGNpIG1lbW9yeSFcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQor CXR4X2Rlc2MtPnBrdF9wdHIgPSBjcHVfdG9fbGUzMihkbWEpOw0KKwl0eF9kZXNjLT5zdGF0dXMg PSBjcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0ZXX09XTkVEKTsNCisJLyogbWFrZSBzdXJl IGFsbCB0aGUgbWVtb3J5IHRyYW5zYWN0aW9ucyBkb25lIGJ5IGNwdSB3ZXJlIGNvbXBsZXRlZCAq Lw0KKwl3bWIoKTsJLypEYXRhIE1lbW9yeSBCYXJyaWVyKi8NCisJd3JpdGVsKE1BQ1JFR19IMkFS SUNfQklUX1BQQV9SRUFEWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0gy QV9JTlRFUlJVUFRfRVZFTlRTKTsNCisJcHJpdi0+ZGVzY19kYXRhW2Rlc2NfbnVtXS5wbmV4dF90 eF9obmRsID0gdHhfaG5kbC0+cG5leHQ7DQorCXByaXYtPmZ3X2Rlc2NfY250W2Rlc2NfbnVtXSsr Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2xfdHhfZG9fYW1zZHUo c3RydWN0IG13bF9wcml2ICpwcml2LA0KKwkJCQkJICAgICAgaW50IGRlc2NfbnVtLA0KKwkJCQkJ ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwNCisJCQkJCSAgICAgIHN0cnVjdCBpZWVlODAy MTFfdHhfaW5mbyAqdHhfaW5mbykNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7DQor CXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCisJc3RydWN0IG13bF90eF9jdHJsICp0eF9jdHJs ID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQorCXN0cnVjdCBpZWVl ODAyMTFfdHhfaW5mbyAqYW1zZHVfaW5mbzsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHVf cGt0czsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnICphbXNkdTsNCisJaW50IGFtc2R1X2FsbG93 X3NpemU7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJaW50IHdoX2xlbjsNCisJdTE2 IGxlbjsNCisJdTggKmRhdGE7DQorDQorCXN0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKXR4 X2N0cmwtPnN0YTsNCisJc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisNCisJaWYg KCFzdGFfaW5mby0+aXNfYW1zZHVfYWxsb3dlZCkNCisJCXJldHVybiB0eF9za2I7DQorDQorCXdo ID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfc2tiLT5kYXRhOw0KKwlpZiAoc3RhX2luZm8t PmlzX21lc2hfbm9kZSAmJiBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjMpKQ0KKwkJ cmV0dXJuIHR4X3NrYjsNCisNCisJaWYgKHN0YV9pbmZvLT5hbXNkdV9jdHJsLmNhcCA9PSBNV0xf QU1TRFVfU0laRV80SykNCisJCWFtc2R1X2FsbG93X3NpemUgPSBTWVNBRFBUX0FNU0RVXzRLX01B WF9TSVpFOw0KKwllbHNlIGlmIChzdGFfaW5mby0+YW1zZHVfY3RybC5jYXAgPT0gTVdMX0FNU0RV X1NJWkVfOEspDQorCQlhbXNkdV9hbGxvd19zaXplID0gU1lTQURQVF9BTVNEVV84S19NQVhfU0la RTsNCisJZWxzZQ0KKwkJcmV0dXJuIHR4X3NrYjsNCisNCisJc3Bpbl9sb2NrX2JoKCZzdGFfaW5m by0+YW1zZHVfbG9jayk7DQorCWFtc2R1ID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbZGVz Y19udW1dOw0KKw0KKwlpZiAodHhfc2tiLT5sZW4gPiBTWVNBRFBUX0FNU0RVX0FMTE9XX1NJWkUp IHsNCisJCWlmIChhbXNkdS0+bnVtKSB7DQorCQkJbXdsX3R4X3NrYihwcml2LCBkZXNjX251bSwg YW1zZHUtPnNrYik7DQorCQkJYW1zZHUtPm51bSA9IDA7DQorCQkJYW1zZHUtPmN1cl9wb3MgPSBO VUxMOw0KKw0KKwkJCWlmICghbXdsX3R4X2F2YWlsYWJsZShwcml2LCBkZXNjX251bSkpIHsNCisJ CQkJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnR4cVtkZXNjX251bV0sIHR4X3NrYik7DQorCQkJCXNw aW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQkJCXJldHVybiBOVUxMOw0K KwkJCX0NCisJCX0NCisJCXNwaW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQor CQlyZXR1cm4gdHhfc2tiOw0KKwl9DQorDQorCS8qIHBvdGVudGlhbCBhbXNkdSBzaXplLCBzaG91 bGQgYWRkIGFtc2R1IGhlYWRlciAxNCBieXRlcyArDQorCSAqIG1heGltdW0gcGFkZGluZyAzLg0K KwkgKi8NCisJd2hfbGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7DQor CWxlbiA9IHR4X3NrYi0+bGVuIC0gd2hfbGVuICsgMTc7DQorDQorCWlmIChhbXNkdS0+bnVtKSB7 DQorCQlpZiAoKGFtc2R1LT5za2ItPmxlbiArIGxlbikgPiBhbXNkdV9hbGxvd19zaXplKSB7DQor CQkJbXdsX3R4X3NrYihwcml2LCBkZXNjX251bSwgYW1zZHUtPnNrYik7DQorCQkJYW1zZHUtPm51 bSA9IDA7DQorCQkJYW1zZHUtPmN1cl9wb3MgPSBOVUxMOw0KKwkJfQ0KKwl9DQorDQorCWFtc2R1 LT5qaWZmaWVzID0gamlmZmllczsNCisJbGVuID0gdHhfc2tiLT5sZW4gLSB3aF9sZW47DQorDQor CWlmIChhbXNkdS0+bnVtID09IDApIHsNCisJCXN0cnVjdCBza19idWZmICpuZXdza2I7DQorDQor CQlhbXNkdV9wa3RzID0gKHN0cnVjdCBza19idWZmX2hlYWQgKikNCisJCQlrbWFsbG9jKHNpemVv ZigqYW1zZHVfcGt0cyksIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFhbXNkdV9wa3RzKSB7DQorCQkJ c3Bpbl91bmxvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCQlyZXR1cm4gdHhfc2ti Ow0KKwkJfQ0KKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihhbXNkdV9hbGxvd19zaXplICsNCisJ CQkJICAgICAgIFNZU0FEUFRfTUlOX0JZVEVTX0hFQURST09NKTsNCisJCWlmICghbmV3c2tiKSB7 DQorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCQlrZnJlZShh bXNkdV9wa3RzKTsNCisJCQlyZXR1cm4gdHhfc2tiOw0KKwkJfQ0KKw0KKwkJZGF0YSA9IG5ld3Nr Yi0+ZGF0YTsNCisJCW1lbWNweShkYXRhLCB0eF9za2ItPmRhdGEsIHdoX2xlbik7DQorCQlpZiAo c3RhX2luZm8tPmlzX21lc2hfbm9kZSkgew0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRhICsgd2hf bGVuLCB3aC0+YWRkcjMpOw0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRhICsgd2hfbGVuICsgRVRI X0FMRU4sIHdoLT5hZGRyNCk7DQorCQl9IGVsc2Ugew0KKwkJCWV0aGVyX2FkZHJfY29weShkYXRh ICsgd2hfbGVuLA0KKwkJCQkJaWVlZTgwMjExX2dldF9EQSh3aCkpOw0KKwkJCWV0aGVyX2FkZHJf Y29weShkYXRhICsgd2hfbGVuICsgRVRIX0FMRU4sDQorCQkJCQlpZWVlODAyMTFfZ2V0X1NBKHdo KSk7DQorCQl9DQorCQkqKHU4ICopKGRhdGEgKyB3aF9sZW4gKyBFVEhfSExFTiAtIDEpID0gbGVu ICYgMHhmZjsNCisJCSoodTggKikoZGF0YSArIHdoX2xlbiArIEVUSF9ITEVOIC0gMikgPSAobGVu ID4+IDgpICYgMHhmZjsNCisJCW1lbWNweShkYXRhICsgd2hfbGVuICsgRVRIX0hMRU4sIHR4X3Nr Yi0+ZGF0YSArIHdoX2xlbiwgbGVuKTsNCisNCisJCXNrYl9wdXQobmV3c2tiLCB0eF9za2ItPmxl biArIEVUSF9ITEVOKTsNCisJCXR4X2N0cmwtPnFvc19jdHJsIHw9IElFRUU4MDIxMV9RT1NfQ1RM X0FfTVNEVV9QUkVTRU5UOw0KKwkJYW1zZHVfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IobmV3c2ti KTsNCisJCW1lbWNweShhbXNkdV9pbmZvLCB0eF9pbmZvLCBzaXplb2YoKnR4X2luZm8pKTsNCisJ CXNrYl9xdWV1ZV9oZWFkX2luaXQoYW1zZHVfcGt0cyk7DQorCQkoKHN0cnVjdCBtd2xfdHhfY3Ry bCAqKSZhbXNkdV9pbmZvLT5zdGF0dXMpLT5hbXNkdV9wa3RzID0NCisJCQkodm9pZCAqKWFtc2R1 X3BrdHM7DQorCQlhbXNkdS0+c2tiID0gbmV3c2tiOw0KKwl9IGVsc2Ugew0KKwkJYW1zZHUtPmN1 cl9wb3MgKz0gYW1zZHUtPnBhZDsNCisJCWRhdGEgPSBhbXNkdS0+Y3VyX3BvczsNCisNCisJCWlm IChzdGFfaW5mby0+aXNfbWVzaF9ub2RlKSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIHdo LT5hZGRyMyk7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEgKyBFVEhfQUxFTiwgd2gtPmFkZHI0 KTsNCisJCX0gZWxzZSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIGllZWU4MDIxMV9nZXRf REEod2gpKTsNCisJCQlldGhlcl9hZGRyX2NvcHkoZGF0YSArIEVUSF9BTEVOLCBpZWVlODAyMTFf Z2V0X1NBKHdoKSk7DQorCQl9DQorCQkqKHU4ICopKGRhdGEgKyBFVEhfSExFTiAtIDEpID0gbGVu ICYgMHhmZjsNCisJCSoodTggKikoZGF0YSArIEVUSF9ITEVOIC0gMikgPSAobGVuID4+IDgpICYg MHhmZjsNCisJCW1lbWNweShkYXRhICsgRVRIX0hMRU4sIHR4X3NrYi0+ZGF0YSArIHdoX2xlbiwg bGVuKTsNCisNCisJCXNrYl9wdXQoYW1zZHUtPnNrYiwgbGVuICsgRVRIX0hMRU4gKyBhbXNkdS0+ cGFkKTsNCisJCWFtc2R1X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGFtc2R1LT5za2IpOw0KKwkJ YW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJKChzdHJ1Y3QgbXdsX3R4 X2N0cmwgKikmYW1zZHVfaW5mby0+c3RhdHVzKS0+YW1zZHVfcGt0czsNCisJfQ0KKw0KKwlhbXNk dS0+bnVtKys7DQorCWFtc2R1LT5wYWQgPSAoKGxlbiArIEVUSF9ITEVOKSAlIDQpID8gKDQgLSAo bGVuICsgRVRIX0hMRU4pICUgNCkgOiAwOw0KKwlhbXNkdS0+Y3VyX3BvcyA9IGFtc2R1LT5za2It PmRhdGEgKyBhbXNkdS0+c2tiLT5sZW47DQorCXNrYl9xdWV1ZV90YWlsKGFtc2R1X3BrdHMsIHR4 X3NrYik7DQorDQorCWlmIChhbXNkdS0+bnVtID4gU1lTQURQVF9BTVNEVV9QQUNLRVRfVEhSRVNI T0xEKSB7DQorCQlhbXNkdS0+bnVtID0gMDsNCisJCWFtc2R1LT5jdXJfcG9zID0gTlVMTDsNCisJ CXNwaW5fdW5sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQlyZXR1cm4gYW1zZHUt PnNrYjsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19iaCgmc3RhX2luZm8tPmFtc2R1X2xvY2spOw0K KwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG13bF90eF9za2JzKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHct PnByaXY7DQorCWludCBudW0gPSBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7DQorCXN0cnVjdCBza19i dWZmICp0eF9za2I7DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfZGVzY19sb2NrKTsNCisJ d2hpbGUgKG51bS0tKSB7DQorCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhxW251bV0p ID4gMCkgew0KKwkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJCQlzdHJ1 Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorDQorCQkJaWYgKCFtd2xfdHhfYXZhaWxhYmxlKHBy aXYsIG51bSkpDQorCQkJCWJyZWFrOw0KKw0KKwkJCXR4X3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2 LT50eHFbbnVtXSk7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhfc2tiKTsNCisJ CQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQorDQor CQkJaWYgKCh0eF9za2ItPnByb3RvY29sICE9IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpICYmDQor CQkJICAgICh0eF9jdHJsLT50eF9wcmlvcml0eSA+PSBTWVNBRFBUX1RYX1dNTV9RVUVVRVMpKSB7 DQorCQkJCXR4X3NrYiA9IG13bF90eF9kb19hbXNkdShwcml2LCBudW0sDQorCQkJCQkJCSB0eF9z a2IsIHR4X2luZm8pOw0KKwkJCX0NCisNCisJCQlpZiAodHhfc2tiKQ0KKwkJCQltd2xfdHhfc2ti KHByaXYsIG51bSwgdHhfc2tiKTsNCisJCX0NCisNCisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2 LT50eHFbbnVtXSkgPA0KKwkJICAgIFNZU0FEUFRfVFhfV0FLRV9RX1RIUkVTSE9MRCkgew0KKwkJ CWludCBxdWV1ZTsNCisNCisJCQlxdWV1ZSA9IFNZU0FEUFRfVFhfV01NX1FVRVVFUyAtIG51bSAt IDE7DQorCQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGh3LCBxdWV1ZSkpDQorCQkJCWll ZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBxdWV1ZSk7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tf YmgoJnByaXYtPnR4X2Rlc2NfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xf dHhfcHJlcGFyZV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmF0ZSwNCisJCQkJ ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbykNCit7DQorCXUzMiBmb3JtYXQs IGJhbmR3aWR0aCwgc2hvcnRfZ2ksIHJhdGVfaWQ7DQorDQorCWllZWU4MDIxMV90eF9pbmZvX2Ns ZWFyX3N0YXR1cyhpbmZvKTsNCisNCisJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOw0K KwlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAwOw0KKwlpbmZvLT5zdGF0dXMucmF0ZXNb MF0uZmxhZ3MgPSAwOw0KKw0KKwlpZiAocmF0ZSkgew0KKwkJLyogUHJlcGFyZSByYXRlIGluZm9y bWF0aW9uICovDQorCQlmb3JtYXQgPSByYXRlICYgTVdMX1RYX1JBVEVfRk9STUFUX01BU0s7DQor CQliYW5kd2lkdGggPQ0KKwkJCShyYXRlICYgTVdMX1RYX1JBVEVfQkFORFdJRFRIX01BU0spID4+ DQorCQkJTVdMX1RYX1JBVEVfQkFORFdJRFRIX1NISUZUOw0KKwkJc2hvcnRfZ2kgPSAocmF0ZSAm IE1XTF9UWF9SQVRFX1NIT1JUR0lfTUFTSykgPj4NCisJCQlNV0xfVFhfUkFURV9TSE9SVEdJX1NI SUZUOw0KKwkJcmF0ZV9pZCA9IChyYXRlICYgTVdMX1RYX1JBVEVfUkFURUlETUNTX01BU0spID4+ DQorCQkJTVdMX1RYX1JBVEVfUkFURUlETUNTX1NISUZUOw0KKw0KKwkJaW5mby0+c3RhdHVzLnJh dGVzWzBdLmlkeCA9IHJhdGVfaWQ7DQorCQlpZiAoZm9ybWF0ID09IFRYX1JBVEVfRk9STUFUX0xF R0FDWSkgew0KKwkJCWlmIChody0+Y29uZi5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlID4NCisJCQkg ICAgQkFORF8yNF9DSEFOTkVMX05VTSkgew0KKwkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4 IC09IDU7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKGZvcm1hdCA9PSBUWF9SQVRFX0ZPUk1BVF8xMU4p DQorCQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9S Q19NQ1M7DQorCQlpZiAoZm9ybWF0ID09IFRYX1JBVEVfRk9STUFUXzExQUMpDQorCQkJaW5mby0+ c3RhdHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9SQ19WSFRfTUNTOw0K KwkJaWYgKGJhbmR3aWR0aCA9PSBUWF9SQVRFX0JBTkRXSURUSF80MCkNCisJCQlpbmZvLT5zdGF0 dXMucmF0ZXNbMF0uZmxhZ3MgfD0NCisJCQkJSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsN CisJCWlmIChiYW5kd2lkdGggPT0gVFhfUkFURV9CQU5EV0lEVEhfODApDQorCQkJaW5mby0+c3Rh dHVzLnJhdGVzWzBdLmZsYWdzIHw9DQorCQkJCUlFRUU4MDIxMV9UWF9SQ184MF9NSFpfV0lEVEg7 DQorCQlpZiAoc2hvcnRfZ2kgPT0gVFhfUkFURV9JTkZPX1NIT1JUX0dJKQ0KKwkJCWluZm8tPnN0 YXR1cy5yYXRlc1swXS5mbGFncyB8PQ0KKwkJCQlJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7DQor CQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAxOw0KKwkJaW5mby0+c3RhdHVzLnJhdGVz WzFdLmlkeCA9IC0xOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfYWNr X2Ftc2R1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByYXRlLA0KKwkJCQkJIHN0 cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHMpDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAqYW1z ZHVfcGt0Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87DQorDQorCXdoaWxlIChz a2JfcXVldWVfbGVuKGFtc2R1X3BrdHMpID4gMCkgew0KKwkJYW1zZHVfcGt0ID0gc2tiX2RlcXVl dWUoYW1zZHVfcGt0cyk7DQorCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihhbXNkdV9wa3QpOw0K KwkJbXdsX3R4X3ByZXBhcmVfaW5mbyhodywgcmF0ZSwgaW5mbyk7DQorCQlpbmZvLT5mbGFncyAm PSB+SUVFRTgwMjExX1RYX0NUTF9BTVBEVTsNCisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9U WF9TVEFUX0FDSzsNCisJCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIGFtc2R1X3BrdCk7DQorCX0N CisNCisJa2ZyZWUoYW1zZHVfcGt0cyk7DQorfQ0KKw0KK2ludCBtd2xfdHhfaW5pdChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2 Ow0KKwlpbnQgcmM7DQorDQorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPmRlbGF5X3EpOw0K Kw0KKwlyYyA9IG13bF90eF9yaW5nX2FsbG9jKHByaXYpOw0KKwlpZiAocmMpIHsNCisJCXdpcGh5 X2Vycihody0+d2lwaHksICJhbGxvY2F0aW5nIFRYIHJpbmcgZmFpbGVkXG4iKTsNCisJCXJldHVy biByYzsNCisJfQ0KKw0KKwlyYyA9IG13bF90eF9yaW5nX2luaXQocHJpdik7DQorCWlmIChyYykg ew0KKwkJbXdsX3R4X3JpbmdfZnJlZShwcml2KTsNCisJCXdpcGh5X2Vycihody0+d2lwaHksICJp bml0aWFsaXppbmcgVFggcmluZyBmYWlsZWRcbiIpOw0KKwkJcmV0dXJuIHJjOw0KKwl9DQorDQor CXJldHVybiAwOw0KK30NCisNCit2b2lkIG13bF90eF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisNCisJc2ti X3F1ZXVlX3B1cmdlKCZwcml2LT5kZWxheV9xKTsNCisNCisJbXdsX3R4X3JpbmdfY2xlYW51cChw cml2KTsNCisJbXdsX3R4X3JpbmdfZnJlZShwcml2KTsNCit9DQorDQordm9pZCBtd2xfdHhfeG1p dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRy b2wgKmNvbnRyb2wsDQorCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtd2xf cHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlpbnQgaW5kZXg7DQorCXN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGE7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJc3RydWN0 IG13bF92aWYgKm13bF92aWY7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCisJdTggeG1p dGNvbnRyb2w7DQorCXUxNiBxb3M7DQorCWludCB0eHByaW9yaXR5Ow0KKwl1OCB0aWQgPSAwOw0K KwlzdHJ1Y3QgbXdsX2FtcGR1X3N0cmVhbSAqc3RyZWFtID0gTlVMTDsNCisJYm9vbCBzdGFydF9i YV9zZXNzaW9uID0gZmFsc2U7DQorCWJvb2wgbWdtdGZyYW1lID0gZmFsc2U7DQorCXN0cnVjdCBp ZWVlODAyMTFfbWdtdCAqbWdtdDsNCisJYm9vbCBlYXBvbF9mcmFtZSA9IGZhbHNlOw0KKwlzdHJ1 Y3QgbXdsX3R4X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtf Y29uZiA9IE5VTEw7DQorDQorCWluZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7DQor CXN0YSA9IGNvbnRyb2wtPnN0YTsNCisNCisJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilz a2ItPmRhdGE7DQorDQorCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gtPmZyYW1lX2NvbnRy b2wpKQ0KKwkJcW9zID0gKigodTE2ICopaWVlZTgwMjExX2dldF9xb3NfY3RsKHdoKSk7DQorCWVs c2UNCisJCXFvcyA9IDA7DQorDQorCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVU SF9QX1BBRSkpIHsNCisJCWluZGV4ID0gSUVFRTgwMjExX0FDX1ZPOw0KKwkJZWFwb2xfZnJhbWUg PSB0cnVlOw0KKwl9DQorDQorCWlmIChpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVfY29udHJv bCkpIHsNCisJCW1nbXRmcmFtZSA9IHRydWU7DQorCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFf bWdtdCAqKXNrYi0+ZGF0YTsNCisJfQ0KKw0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihz a2IpOw0KKwltd2xfdmlmID0gbXdsX2Rldl9nZXRfdmlmKHR4X2luZm8tPmNvbnRyb2wudmlmKTsN CisNCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7 DQorCQl3aC0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7DQor CQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYobXdsX3ZpZi0+c2Vxbm8pOw0KKwkJbXdsX3Zp Zi0+c2Vxbm8gKz0gMHgxMDsNCisJfQ0KKw0KKwkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJp dCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gKi8NCisJeG1pdGNvbnRyb2wgPSAwOw0KKw0K KwlpZiAobWdtdGZyYW1lIHx8IGllZWU4MDIxMV9pc19jdGwod2gtPmZyYW1lX2NvbnRyb2wpKSB7 DQorCQlxb3MgPSAwOw0KKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKHdoLT5mcmFtZV9j b250cm9sKSkgew0KKwkJcW9zICY9IH5NV0xfUU9TX0FDS19QT0xJQ1lfTUFTSzsNCisNCisJCWlm ICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsNCisJCQl4bWl0Y29u dHJvbCAmPSAweGZiOw0KKwkJCXFvcyB8PSBNV0xfUU9TX0FDS19QT0xJQ1lfQkxPQ0tBQ0s7DQor CQl9IGVsc2Ugew0KKwkJCXhtaXRjb250cm9sIHw9IDB4NDsNCisJCQlxb3MgfD0gTVdMX1FPU19B Q0tfUE9MSUNZX05PUk1BTDsNCisJCX0NCisNCisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRk cih3aC0+YWRkcjEpKQ0KKwkJCXhtaXRjb250cm9sIHw9IEVBR0xFX1RYRF9YTUlUQ1RSTF9VU0Vf TUNfUkFURTsNCisNCisJCWtfY29uZiA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5Ow0KKwl9DQor DQorCS8qIFF1ZXVlIEFEREJBIHJlcXVlc3QgaW4gdGhlIHJlc3BlY3RpdmUgZGF0YSBxdWV1ZS4g IFdoaWxlIHNldHRpbmcgdXANCisJICogdGhlIGFtcGR1IHN0cmVhbSwgbWFjODAyMTEgcXVldWVz IGZ1cnRoZXIgcGFja2V0cyBmb3IgdGhhdA0KKwkgKiBwYXJ0aWN1bGFyIHJhL3RpZCBwYWlyLiAg SG93ZXZlciwgcGFja2V0cyBwaWxlZCB1cCBpbiB0aGUgaGFyZHdhcmUNCisJICogZm9yIHRoYXQg cmEvdGlkIHBhaXIgd2lsbCBzdGlsbCBnbyBvdXQuIEFEREJBIHJlcXVlc3QgYW5kIHRoZQ0KKwkg KiByZWxhdGVkIGRhdGEgcGFja2V0cyBnb2luZyBvdXQgZnJvbSBkaWZmZXJlbnQgcXVldWVzIGFz eW5jaHJvbm91c2x5DQorCSAqIHdpbGwgY2F1c2UgYSBzaGlmdCBpbiB0aGUgcmVjZWl2ZXIgd2lu ZG93IHdoaWNoIG1pZ2h0IHJlc3VsdCBpbg0KKwkgKiBhbXBkdSBwYWNrZXRzIGdldHRpbmcgZHJv cHBlZCBhdCB0aGUgcmVjZWl2ZXIgYWZ0ZXIgdGhlIHN0cmVhbSBoYXMNCisJICogYmVlbiBzZXR1 cC4NCisJICovDQorCWlmIChtZ210ZnJhbWUpIHsNCisJCXUxNiBjYXBhYjsNCisNCisJCWlmICh1 bmxpa2VseShpZWVlODAyMTFfaXNfYWN0aW9uKHdoLT5mcmFtZV9jb250cm9sKSAmJg0KKwkJCSAg ICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9CQUNLICYmDQorCQkJ ICAgICBtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSA9PQ0KKwkJCSAgICAg V0xBTl9BQ1RJT05fQUREQkFfUkVRKSkgew0KKwkJCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+ dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOw0KKwkJCXRpZCA9IChjYXBhYiAmIElFRUU4MDIx MV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsNCisJCQlpbmRleCA9IG13bF90eF90aWRfcXVl dWVfbWFwcGluZyh0aWQpOw0KKwkJCWNhcGFiIHw9IDE7DQorCQkJbWdtdC0+dS5hY3Rpb24udS5h ZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7DQorCQl9DQorDQorCQlpZiAodW5s aWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYNCisJCQkgICAg IG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KKwkJCSAg ICAgbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID09DQorCQkJICAgICBX TEFOX0FDVElPTl9BRERCQV9SRVNQKSkgew0KKwkJCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+ dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsNCisJCQljYXBhYiB8PSAxOw0KKwkJCW1nbXQt PnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsNCisJCX0N CisJfQ0KKw0KKwlpbmRleCA9IFNZU0FEUFRfVFhfV01NX1FVRVVFUyAtIGluZGV4IC0gMTsNCisJ dHhwcmlvcml0eSA9IGluZGV4Ow0KKw0KKwlpZiAoc3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBv cnRlZCAmJiAhZWFwb2xfZnJhbWUgJiYNCisJICAgIGllZWU4MDIxMV9pc19kYXRhX3Fvcyh3aC0+ ZnJhbWVfY29udHJvbCkpIHsNCisJCXRpZCA9IHFvcyAmIDB4ZjsNCisJCW13bF90eF9jb3VudF9w YWNrZXQoc3RhLCB0aWQpOw0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT5zdHJlYW1fbG9jayk7 DQorCQlzdHJlYW0gPSBtd2xfZndjbWRfbG9va3VwX3N0cmVhbShodywgc3RhLT5hZGRyLCB0aWQp Ow0KKw0KKwkJaWYgKHN0cmVhbSkgew0KKwkJCWlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NU UkVBTV9BQ1RJVkUpIHsNCisJCQkJaWYgKFdBUk5fT04oIShxb3MgJg0KKwkJCQkJICAgIE1XTF9R T1NfQUNLX1BPTElDWV9CTE9DS0FDSykpKSB7DQorCQkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+ c3RyZWFtX2xvY2spOw0KKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJCQkJCXJldHVy bjsNCisJCQkJfQ0KKw0KKwkJCQl0eHByaW9yaXR5ID0NCisJCQkJCShTWVNBRFBUX1RYX1dNTV9R VUVVRVMgKyBzdHJlYW0tPmlkeCkgJQ0KKwkJCQkJU1lTQURQVF9UT1RBTF9IV19RVUVVRVM7DQor CQkJfSBlbHNlIGlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9ORVcpIHsNCisJCQkJ LyogV2UgZ2V0IGhlcmUgaWYgdGhlIGRyaXZlciBzZW5kcyB1cyBwYWNrZXRzDQorCQkJCSAqIGFm dGVyIHdlJ3ZlIGluaXRpYXRlZCBhIHN0cmVhbSwgYnV0IGJlZm9yZQ0KKwkJCQkgKiBvdXIgYW1w ZHVfYWN0aW9uIHJvdXRpbmUgaGFzIGJlZW4gY2FsbGVkDQorCQkJCSAqIHdpdGggSUVFRTgwMjEx X0FNUERVX1RYX1NUQVJUIHRvIGdldCB0aGUgU1NODQorCQkJCSAqIGZvciB0aGUgQUREQkEgcmVx dWVzdC4gIFNvIHRoaXMgcGFja2V0IGNhbg0KKwkJCQkgKiBnbyBvdXQgd2l0aCBubyByaXNrIG9m IHNlcXVlbmNlIG51bWJlcg0KKwkJCQkgKiBtaXNtYXRjaC4gIE5vIHNwZWNpYWwgaGFuZGxpbmcg aXMgcmVxdWlyZWQuDQorCQkJCSAqLw0KKwkJCX0gZWxzZSB7DQorCQkJCS8qIERyb3AgcGFja2V0 cyB0aGF0IHdvdWxkIGdvIG91dCBhZnRlciB0aGUNCisJCQkJICogQUREQkEgcmVxdWVzdCB3YXMg c2VudCBidXQgYmVmb3JlIHRoZSBBRERCQQ0KKwkJCQkgKiByZXNwb25zZSBpcyByZWNlaXZlZC4g IElmIHdlIGRvbid0IGRvIHRoaXMsDQorCQkJCSAqIHRoZSByZWNpcGllbnQgd291bGQgcHJvYmFi bHkgcmVjZWl2ZSBpdA0KKwkJCQkgKiBhZnRlciB0aGUgQUREQkEgcmVxdWVzdCB3aXRoIFNTTiAw LiAgVGhpcw0KKwkJCQkgKiB3aWxsIGNhdXNlIHRoZSByZWNpcGllbnQncyBCQSByZWNlaXZlIHdp bmRvdw0KKwkJCQkgKiB0byBzaGlmdCwgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN1YnNlcXVlbnQN CisJCQkJICogcGFja2V0cyBpbiB0aGUgQkEgc3RyZWFtIHRvIGJlIGRpc2NhcmRlZC4NCisJCQkJ ICogbWFjODAyMTEgcXVldWVzIG91ciBwYWNrZXRzIGZvciB1cyBpbiB0aGlzDQorCQkJCSAqIGNh c2UsIHNvIHRoaXMgaXMgcmVhbGx5IGp1c3QgYSBzYWZldHkgY2hlY2suDQorCQkJCSAqLw0KKwkJ CQl3aXBoeV93YXJuKGh3LT53aXBoeSwNCisJCQkJCSAgICJjYW4ndCBzZW5kIHBhY2tldCBkdXJp bmcgQUREQkFcbiIpOw0KKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0K KwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KKwkJCQlyZXR1cm47DQorCQkJfQ0KKwkJfSBl bHNlIHsNCisJCQlpZiAobXdsX2Z3Y21kX2FtcGR1X2FsbG93ZWQoc3RhLCB0aWQpKSB7DQorCQkJ CXN0cmVhbSA9IG13bF9md2NtZF9hZGRfc3RyZWFtKGh3LCBzdGEsIHRpZCk7DQorDQorCQkJCWlm IChzdHJlYW0pDQorCQkJCQlzdGFydF9iYV9zZXNzaW9uID0gdHJ1ZTsNCisJCQl9DQorCQl9DQor DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KKwl9IGVsc2Ugew0KKwkJ cW9zICY9IH5NV0xfUU9TX0FDS19QT0xJQ1lfTUFTSzsNCisJCXFvcyB8PSBNV0xfUU9TX0FDS19Q T0xJQ1lfTk9STUFMOw0KKwl9DQorDQorCXR4X2N0cmwgPSAoc3RydWN0IG13bF90eF9jdHJsICop JnR4X2luZm8tPnN0YXR1czsNCisJdHhfY3RybC0+dmlmID0gKHZvaWQgKil0eF9pbmZvLT5jb250 cm9sLnZpZjsNCisJdHhfY3RybC0+c3RhID0gKHZvaWQgKilzdGE7DQorCXR4X2N0cmwtPmtfY29u ZiA9ICh2b2lkICopa19jb25mOw0KKwl0eF9jdHJsLT5hbXNkdV9wa3RzID0gTlVMTDsNCisJdHhf Y3RybC0+dHhfcHJpb3JpdHkgPSB0eHByaW9yaXR5Ow0KKwl0eF9jdHJsLT50eXBlID0gKG1nbXRm cmFtZSA/IElFRUVfVFlQRV9NQU5BR0VNRU5UIDogSUVFRV9UWVBFX0RBVEEpOw0KKwl0eF9jdHJs LT5xb3NfY3RybCA9IHFvczsNCisJdHhfY3RybC0+eG1pdF9jb250cm9sID0geG1pdGNvbnRyb2w7 DQorDQorCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eHFbaW5kZXhdKSA+IHByaXYtPnR4cV9s aW1pdCkNCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBTWVNBRFBUX1RYX1dNTV9RVUVVRVMg LSBpbmRleCAtIDEpOw0KKw0KKwlza2JfcXVldWVfdGFpbCgmcHJpdi0+dHhxW2luZGV4XSwgc2ti KTsNCisNCisJbXdsX3R4X3NrYnMoaHcpOw0KKw0KKwkvKiBJbml0aWF0ZSB0aGUgYW1wZHUgc2Vz c2lvbiBoZXJlICovDQorCWlmIChzdGFydF9iYV9zZXNzaW9uKSB7DQorCQlzcGluX2xvY2tfYmgo JnByaXYtPnN0cmVhbV9sb2NrKTsNCisJCWlmIChtd2xfZndjbWRfc3RhcnRfc3RyZWFtKGh3LCBz dHJlYW0pKQ0KKwkJCW13bF9md2NtZF9yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOw0KKwkJc3Bp bl91bmxvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCisJfQ0KK30NCisNCit2b2lkIG13bF90 eF9kZWxfcGt0c192aWFfdmlmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3 LT5wcml2Ow0KKwlpbnQgbnVtOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOw0KKwlzdHJ1 Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87DQorCXN0cnVjdCBtd2xfdHhfY3RybCAqdHhf Y3RybDsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHVfcGt0czsNCisNCisJZm9yIChudW0g PSAxOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQorCQlzcGluX2xv Y2tfYmgoJnByaXYtPnR4cVtudW1dLmxvY2spOw0KKwkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcHJp di0+dHhxW251bV0sIHNrYiwgdG1wKSB7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Io c2tiKTsNCisJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0 dXM7DQorCQkJaWYgKHR4X2N0cmwtPnZpZiA9PSB2aWYpIHsNCisJCQkJYW1zZHVfcGt0cyA9IChz dHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJCQl0eF9jdHJsLT5hbXNkdV9wa3RzOw0KKwkJCQlp ZiAoYW1zZHVfcGt0cykgew0KKwkJCQkJc2tiX3F1ZXVlX3B1cmdlKGFtc2R1X3BrdHMpOw0KKwkJ CQkJa2ZyZWUoYW1zZHVfcGt0cyk7DQorCQkJCX0NCisJCQkJX19za2JfdW5saW5rKHNrYiwgJnBy aXYtPnR4cVtudW1dKTsNCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCisJCQl9DQorCQl9 DQorCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhxW251bV0ubG9jayk7DQorCX0NCit9DQorDQor dm9pZCBtd2xfdHhfZGVsX3BrdHNfdmlhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJ CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXdsX3ByaXYg KnByaXYgPSBody0+cHJpdjsNCisJaW50IG51bTsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRt cDsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOw0KKwlzdHJ1Y3QgbXdsX3R4 X2N0cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHM7DQorDQor CWZvciAobnVtID0gMTsgbnVtIDwgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBOyBudW0rKykgew0K KwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eHFbbnVtXS5sb2NrKTsNCisJCXNrYl9xdWV1ZV93YWxr X3NhZmUoJnByaXYtPnR4cVtudW1dLCBza2IsIHRtcCkgew0KKwkJCXR4X2luZm8gPSBJRUVFODAy MTFfU0tCX0NCKHNrYik7DQorCQkJdHhfY3RybCA9IChzdHJ1Y3QgbXdsX3R4X2N0cmwgKikmdHhf aW5mby0+c3RhdHVzOw0KKwkJCWlmICh0eF9jdHJsLT5zdGEgPT0gc3RhKSB7DQorCQkJCWFtc2R1 X3BrdHMgPSAoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0 czsNCisJCQkJaWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJCXNrYl9xdWV1ZV9wdXJnZShhbXNkdV9w a3RzKTsNCisJCQkJCWtmcmVlKGFtc2R1X3BrdHMpOw0KKwkJCQl9DQorCQkJCV9fc2tiX3VubGlu ayhza2IsICZwcml2LT50eHFbbnVtXSk7DQorCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQor CQkJfQ0KKwkJfQ0KKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4cVtudW1dLmxvY2spOw0KKwl9 DQorfQ0KKw0KK3ZvaWQgbXdsX3R4X2RlbF9hbXBkdV9wa3RzKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHRpZCkNCit7DQorCXN0 cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2lu Zm8gPSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCisJaW50IGRlc2NfbnVtID0gU1lTQURQVF9UWF9X TU1fUVVFVUVTIC0gdGlkIC0gMTsNCisJc3RydWN0IG13bF9hbXNkdV9mcmFnICphbXNkdV9mcmFn Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKnR4X2luZm87DQorCXN0cnVjdCBtd2xfdHhfY3RybCAqdHhfY3RybDsNCisJc3RydWN0IHNr X2J1ZmZfaGVhZCAqYW1zZHVfcGt0czsNCisNCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eHFbZGVz Y19udW1dLmxvY2spOw0KKwlza2JfcXVldWVfd2Fsa19zYWZlKCZwcml2LT50eHFbZGVzY19udW1d LCBza2IsIHRtcCkgew0KKwkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJCXR4 X2N0cmwgPSAoc3RydWN0IG13bF90eF9jdHJsICopJnR4X2luZm8tPnN0YXR1czsNCisJCWlmICh0 eF9jdHJsLT5zdGEgPT0gc3RhKSB7DQorCQkJYW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9o ZWFkICopDQorCQkJCXR4X2N0cmwtPmFtc2R1X3BrdHM7DQorCQkJaWYgKGFtc2R1X3BrdHMpIHsN CisJCQkJc2tiX3F1ZXVlX3B1cmdlKGFtc2R1X3BrdHMpOw0KKwkJCQlrZnJlZShhbXNkdV9wa3Rz KTsNCisJCQl9DQorCQkJX19za2JfdW5saW5rKHNrYiwgJnByaXYtPnR4cVtkZXNjX251bV0pOw0K KwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgo JnByaXYtPnR4cVtkZXNjX251bV0ubG9jayk7DQorDQorCXNwaW5fbG9ja19iaCgmc3RhX2luZm8t PmFtc2R1X2xvY2spOw0KKwlhbXNkdV9mcmFnID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdb ZGVzY19udW1dOw0KKwlpZiAoYW1zZHVfZnJhZy0+bnVtKSB7DQorCQlhbXNkdV9mcmFnLT5udW0g PSAwOw0KKwkJYW1zZHVfZnJhZy0+Y3VyX3BvcyA9IE5VTEw7DQorCQlpZiAoYW1zZHVfZnJhZy0+ c2tiKSB7DQorCQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoYW1zZHVfZnJhZy0+c2tiKTsN CisJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhfY3RybCAqKSZ0eF9pbmZvLT5zdGF0dXM7DQor CQkJYW1zZHVfcGt0cyA9IChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICopDQorCQkJCXR4X2N0cmwtPmFt c2R1X3BrdHM7DQorCQkJaWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJc2tiX3F1ZXVlX3B1cmdlKGFt c2R1X3BrdHMpOw0KKwkJCQlrZnJlZShhbXNkdV9wa3RzKTsNCisJCQl9DQorCQkJZGV2X2tmcmVl X3NrYl9hbnkoYW1zZHVfZnJhZy0+c2tiKTsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19iaCgm c3RhX2luZm8tPmFtc2R1X2xvY2spOw0KK30NCisNCit2b2lkIG13bF90eF9kb25lKHVuc2lnbmVk IGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVl ODAyMTFfaHcgKilkYXRhOw0KKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCisJ aW50IG51bTsNCisJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQorCXN0cnVjdCBtd2xfdHhf aG5kbCAqdHhfaG5kbDsNCisJc3RydWN0IG13bF90eF9kZXNjICp0eF9kZXNjOw0KKwlzdHJ1Y3Qg c2tfYnVmZiAqZG9uZV9za2I7DQorCXUzMiByYXRlOw0KKwlzdHJ1Y3QgbXdsX2RtYV9kYXRhICp0 cjsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOw0KKwlzdHJ1Y3QgbXdsX3R4X2N0 cmwgKnR4X2N0cmw7DQorCXN0cnVjdCBza19idWZmX2hlYWQgKmFtc2R1X3BrdHM7DQorCWludCBo ZHJsZW47DQorDQorCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfZGVzY19sb2NrKTsNCisJZm9yIChu dW0gPSAwOyBudW0gPCBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7IG51bSsrKSB7DQorCQlkZXNjID0g JnByaXYtPmRlc2NfZGF0YVtudW1dOw0KKwkJdHhfaG5kbCA9IGRlc2MtPnBzdGFsZV90eF9obmRs Ow0KKwkJdHhfZGVzYyA9IHR4X2huZGwtPnBkZXNjOw0KKw0KKwkJd2hpbGUgKHR4X2huZGwgJiYN CisJCSAgICAgICAodHhfZGVzYy0+c3RhdHVzICYgY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRV U19PSykpICYmDQorCQkgICAgICAgKCEodHhfZGVzYy0+c3RhdHVzICYNCisJCSAgICAgICBjcHVf dG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0ZXX09XTkVEKSkpKSB7DQorCQkJcGNpX3VubWFwX3Np bmdsZShwcml2LT5wZGV2LA0KKwkJCQkJIGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9wdHIpLA0K KwkJCQkJIGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnBrdF9sZW4pLA0KKwkJCQkJIFBDSV9ETUFfVE9E RVZJQ0UpOw0KKwkJCWRvbmVfc2tiID0gdHhfaG5kbC0+cHNrX2J1ZmY7DQorCQkJcmF0ZSA9IGxl MzJfdG9fY3B1KHR4X2Rlc2MtPnJhdGVfaW5mbyk7DQorCQkJdHhfZGVzYy0+cGt0X2xlbiA9IDA7 DQorCQkJdHhfZGVzYy0+c3RhdHVzID0NCisJCQkJY3B1X3RvX2xlMzIoRUFHTEVfVFhEX1NUQVRV U19JRExFKTsNCisJCQl0eF9obmRsLT5wc2tfYnVmZiA9IE5VTEw7DQorCQkJd21iKCk7IC8qIG1l bW9yeSBiYXJyaWVyICovDQorDQorCQkJc2tiX2dldChkb25lX3NrYik7DQorCQkJc2tiX3F1ZXVl X3RhaWwoJnByaXYtPmRlbGF5X3EsIGRvbmVfc2tiKTsNCisJCQlpZiAoc2tiX3F1ZXVlX2xlbigm cHJpdi0+ZGVsYXlfcSkgPg0KKwkJCSAgICBTWVNBRFBUX0RFTEFZX0ZSRUVfUV9MSU1JVCkNCisJ CQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX2RlcXVldWUoJnByaXYtPmRlbGF5X3EpKTsNCisNCisJ CQl0ciA9IChzdHJ1Y3QgbXdsX2RtYV9kYXRhICopZG9uZV9za2ItPmRhdGE7DQorCQkJaW5mbyA9 IElFRUU4MDIxMV9TS0JfQ0IoZG9uZV9za2IpOw0KKw0KKwkJCWlmIChpZWVlODAyMTFfaXNfZGF0 YSh0ci0+d2guZnJhbWVfY29udHJvbCkgfHwNCisJCQkgICAgaWVlZTgwMjExX2lzX2RhdGFfcW9z KHRyLT53aC5mcmFtZV9jb250cm9sKSkgew0KKwkJCQl0eF9jdHJsID0gKHN0cnVjdCBtd2xfdHhf Y3RybCAqKSZpbmZvLT5zdGF0dXM7DQorCQkJCWFtc2R1X3BrdHMgPSAoc3RydWN0IHNrX2J1ZmZf aGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0czsNCisJCQkJaWYgKGFtc2R1X3BrdHMp IHsNCisJCQkJCW13bF90eF9hY2tfYW1zZHVfcGt0cyhodywgcmF0ZSwNCisJCQkJCQkJICAgICAg YW1zZHVfcGt0cyk7DQorCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShkb25lX3NrYik7DQorCQkJCQlk b25lX3NrYiA9IE5VTEw7DQorCQkJCX0gZWxzZSB7DQorCQkJCQltd2xfdHhfcHJlcGFyZV9pbmZv KGh3LCByYXRlLCBpbmZvKTsNCisJCQkJfQ0KKwkJCX0gZWxzZSB7DQorCQkJCW13bF90eF9wcmVw YXJlX2luZm8oaHcsIDAsIGluZm8pOw0KKwkJCX0NCisNCisJCQlpZiAoZG9uZV9za2IpIHsNCisJ CQkJLyogUmVtb3ZlIEgvVyBkbWEgaGVhZGVyICovDQorCQkJCWhkcmxlbiA9IGllZWU4MDIxMV9o ZHJsZW4odHItPndoLmZyYW1lX2NvbnRyb2wpOw0KKwkJCQltZW1tb3ZlKHRyLT5kYXRhIC0gaGRy bGVuLCAmdHItPndoLCBoZHJsZW4pOw0KKwkJCQlza2JfcHVsbChkb25lX3NrYiwgc2l6ZW9mKCp0 cikgLSBoZHJsZW4pOw0KKwkJCQlpbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9BTVBE VTsNCisJCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOw0KKwkJCQlpZWVl ODAyMTFfdHhfc3RhdHVzKGh3LCBkb25lX3NrYik7DQorCQkJfQ0KKw0KKwkJCXR4X2huZGwgPSB0 eF9obmRsLT5wbmV4dDsNCisJCQl0eF9kZXNjID0gdHhfaG5kbC0+cGRlc2M7DQorCQkJcHJpdi0+ ZndfZGVzY19jbnRbbnVtXS0tOw0KKwkJfQ0KKw0KKwkJZGVzYy0+cHN0YWxlX3R4X2huZGwgPSB0 eF9obmRsOw0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9kZXNjX2xvY2spOw0KKw0K KwlpZiAocHJpdi0+aXJxICE9IC0xKSB7DQorCQl1MzIgc3RhdHVzX21hc2s7DQorDQorCQlzdGF0 dXNfbWFzayA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKw0KKwkJCQkgICAgTUFDUkVHX1JFR19BMkhf SU5URVJSVVBUX1NUQVRVU19NQVNLKTsNCisJCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19B MkhSSUNfQklUX1RYX0RPTkUsDQorCQkgICAgICAgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdf QTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorDQorCQltd2xfdHhfc2ticyhodyk7DQorCX0N CisNCisJcHJpdi0+aXNfdHhfc2NoZWR1bGUgPSBmYWxzZTsNCit9DQorDQordm9pZCBtd2xfdHhf Zmx1c2hfYW1zZHUodW5zaWduZWQgbG9uZyBkYXRhKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9o dyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKWRhdGE7DQorCXN0cnVjdCBtd2xfcHJpdiAq cHJpdiA9IGh3LT5wcml2Ow0KKwl1MzIgc3RhdHVzX21hc2s7DQorCXN0cnVjdCBtd2xfc3RhICpz dGFfaW5mbzsNCisJaW50IGk7DQorCXN0cnVjdCBtd2xfYW1zZHVfZnJhZyAqYW1zZHVfZnJhZzsN CisNCisJc3Bpbl9sb2NrKCZwcml2LT5zdGFfbG9jayk7DQorCWxpc3RfZm9yX2VhY2hfZW50cnko c3RhX2luZm8sICZwcml2LT5zdGFfbGlzdCwgbGlzdCkgew0KKwkJc3Bpbl9sb2NrKCZwcml2LT50 eF9kZXNjX2xvY2spOw0KKwkJc3Bpbl9sb2NrKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQorCQlm b3IgKGkgPSAwOyBpIDwgU1lTQURQVF9UWF9XTU1fUVVFVUVTOyBpKyspIHsNCisJCQlhbXNkdV9m cmFnID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbaV07DQorCQkJaWYgKGFtc2R1X2ZyYWct Pm51bSkgew0KKwkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLA0KKwkJCQkJICAgICAgIChhbXNk dV9mcmFnLT5qaWZmaWVzICsgMSkpKSB7DQorCQkJCQlpZiAobXdsX3R4X2F2YWlsYWJsZShwcml2 LCBpKSkgew0KKwkJCQkJCW13bF90eF9za2IocHJpdiwgaSwNCisJCQkJCQkJICAgYW1zZHVfZnJh Zy0+c2tiKTsNCisJCQkJCQlhbXNkdV9mcmFnLT5udW0gPSAwOw0KKwkJCQkJCWFtc2R1X2ZyYWct PmN1cl9wb3MgPSBOVUxMOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJc3Bpbl91 bmxvY2soJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9k ZXNjX2xvY2spOw0KKwl9DQorCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7DQorDQorCXN0 YXR1c19tYXNrID0gcmVhZGwocHJpdi0+aW9iYXNlMSArDQorCQkJICAgIE1BQ1JFR19SRUdfQTJI X0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7DQorCXdyaXRlbChzdGF0dXNfbWFzayB8IE1BQ1JFR19B MkhSSUNfQklUX1FVRV9FTVBUWSwNCisJICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVH X0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOw0KKw0KKwlwcml2LT5pc19xZV9zY2hlZHVsZSA9 IGZhbHNlOw0KK30NCisNCit2b2lkIG13bF90eF9kZWxfc3RhX2Ftc2R1X3BrdHMoc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbyA9IG13bF9k ZXZfZ2V0X3N0YShzdGEpOw0KKwlpbnQgbnVtOw0KKwlzdHJ1Y3QgbXdsX2Ftc2R1X2ZyYWcgKmFt c2R1X2ZyYWc7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJc3RydWN0 IG13bF90eF9jdHJsICp0eF9jdHJsOw0KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphbXNkdV9wa3Rz Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCisJZm9yIChudW0g PSAwOyBudW0gPCBTWVNBRFBUX1RYX1dNTV9RVUVVRVM7IG51bSsrKSB7DQorCQlhbXNkdV9mcmFn ID0gJnN0YV9pbmZvLT5hbXNkdV9jdHJsLmZyYWdbbnVtXTsNCisJCWlmIChhbXNkdV9mcmFnLT5u dW0pIHsNCisJCQlhbXNkdV9mcmFnLT5udW0gPSAwOw0KKwkJCWFtc2R1X2ZyYWctPmN1cl9wb3Mg PSBOVUxMOw0KKwkJCWlmIChhbXNkdV9mcmFnLT5za2IpIHsNCisJCQkJdHhfaW5mbyA9IElFRUU4 MDIxMV9TS0JfQ0IoYW1zZHVfZnJhZy0+c2tiKTsNCisJCQkJdHhfY3RybCA9IChzdHJ1Y3QgbXds X3R4X2N0cmwgKikNCisJCQkJCSZ0eF9pbmZvLT5zdGF0dXM7DQorCQkJCWFtc2R1X3BrdHMgPSAo c3RydWN0IHNrX2J1ZmZfaGVhZCAqKQ0KKwkJCQkJdHhfY3RybC0+YW1zZHVfcGt0czsNCisJCQkJ aWYgKGFtc2R1X3BrdHMpIHsNCisJCQkJCXNrYl9xdWV1ZV9wdXJnZShhbXNkdV9wa3RzKTsNCisJ CQkJCWtmcmVlKGFtc2R1X3BrdHMpOw0KKwkJCQl9DQorCQkJCWRldl9rZnJlZV9za2JfYW55KGFt c2R1X2ZyYWctPnNrYik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZzdGFf aW5mby0+YW1zZHVfbG9jayk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21hcnZlbGwvbXdsd2lmaS90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3 aWZpL3R4LmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5lZjFjN2M1DQot LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkv dHguaA0KQEAgLTAsMCArMSwzNiBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUs IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQorICoNCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUg KHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbA0KKyAq IEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW ZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCBy ZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4NCisgKiBhY2NvcmRhbmNlIHdp dGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hp Y2gNCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuDQorICoNCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UN CisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRp dGlvbmFsIGRldGFpbHMgYWJvdXQNCisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuDQorICov DQorDQorLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyB0cmFuc21pdCByZWxhdGVk IGZ1bmN0aW9ucy4gKi8NCisNCisjaWZuZGVmIF90eF9oXw0KKyNkZWZpbmUgX3R4X2hfDQorDQor aW50IG13bF90eF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCit2b2lkIG13bF90eF9k ZWluaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0KK3ZvaWQgbXdsX3R4X3htaXQoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsDQorCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250 cm9sLA0KKwkJIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgbXdsX3R4X2RlbF9wa3RzX3Zp YV92aWYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmKTsNCit2b2lkIG13bF90eF9kZWxfcGt0c192aWFfc3RhKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LA0KKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7DQordm9pZCBt d2xfdHhfZGVsX2FtcGR1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTsNCit2b2lkIG13bF90eF9kb25lKHVuc2ln bmVkIGxvbmcgZGF0YSk7DQordm9pZCBtd2xfdHhfZmx1c2hfYW1zZHUodW5zaWduZWQgbG9uZyBk YXRhKTsNCit2b2lkIG13bF90eF9kZWxfc3RhX2Ftc2R1X3BrdHMoc3RydWN0IGllZWU4MDIxMV9z dGEgKnN0YSk7DQorDQorI2VuZGlmIC8qIF90eF9oXyAqLw0KLS0gDQoxLjkuMQ0KDQo=