/dev/poll patch for 2.4

Mathieu Dube (mathieu_dube@videotron.ca)
Thu, 8 Mar 2001 10:22:55 -0500


--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

Hi,
Somebody asked me for that patch it might need some tweaking, adding
#include <linux/poll.h> somewhere

-- 
Mathieu Dube	
Mondo-Live			
www.flipr.com

--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd Content-Type: text/plain; name="devpoll.2.4.0.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="devpoll.2.4.0.diff"

ZGlmZiAtdXJQIGxpbnV4LTIuNC4wL2RyaXZlcnMvY2hhci9Db25maWcuaW4gbGludXgtMi40LjAt ZGV2cG9sbC9kcml2ZXJzL2NoYXIvQ29uZmlnLmluDQotLS0gbGludXgtMi40LjAvZHJpdmVycy9j aGFyL0NvbmZpZy5pbglGcmkgRGVjIDI5IDE0OjA3OjIxIDIwMDANCisrKyBsaW51eC0yLjQuMC1k ZXZwb2xsL2RyaXZlcnMvY2hhci9Db25maWcuaW4JTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpA QCAtMTU2LDYgKzE1Niw3IEBADQogDQogZGVwX3RyaXN0YXRlICdJbnRlbCBpOHgwIFJhbmRvbSBO dW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQnIENPTkZJR19JTlRFTF9STkcgJENPTkZJR19QQ0kNCiB0 cmlzdGF0ZSAnL2Rldi9udnJhbSBzdXBwb3J0JyBDT05GSUdfTlZSQU0NCit0cmlzdGF0ZSAnL2Rl di9wb2xsIHN1cHBvcnQnIENPTkZJR19ERVZQT0xMDQogdHJpc3RhdGUgJ0VuaGFuY2VkIFJlYWwg VGltZSBDbG9jayBTdXBwb3J0JyBDT05GSUdfUlRDDQogaWYgWyAiJENPTkZJR19JQTY0IiA9ICJ5 IiBdOyB0aGVuDQogICAgYm9vbCAnRUZJIFJlYWwgVGltZSBDbG9jayBTZXJ2aWNlcycgQ09ORklH X0VGSV9SVEMNCmRpZmYgLXVyUCBsaW51eC0yLjQuMC9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgbGlu dXgtMi40LjAtZGV2cG9sbC9kcml2ZXJzL2NoYXIvTWFrZWZpbGUNCi0tLSBsaW51eC0yLjQuMC9k cml2ZXJzL2NoYXIvTWFrZWZpbGUJVGh1IEphbiAgNCAxMzowMDo1NSAyMDAxDQorKysgbGludXgt Mi40LjAtZGV2cG9sbC9kcml2ZXJzL2NoYXIvTWFrZWZpbGUJTW9uIEphbiAyOSAxNjoyNDo0MiAy MDAxDQpAQCAtMTgxLDYgKzE4MSw3IEBADQogb2JqLSQoQ09ORklHXzYwWFhfV0RUKSArPSBzYmM2 MHh4d2R0Lm8NCiBvYmotJChDT05GSUdfV0RUKSArPSB3ZHQubw0KIG9iai0kKENPTkZJR19XRFRQ Q0kpICs9IHdkdF9wY2kubw0KK29iai0kKENPTkZJR19ERVZQT0xMKSArPSBkZXZwb2xsLm8NCiBv YmotJChDT05GSUdfMjEyODVfV0FUQ0hET0cpICs9IHdkdDI4NS5vDQogb2JqLSQoQ09ORklHXzk3 N19XQVRDSERPRykgKz0gd2R0OTc3Lm8NCiBvYmotJChDT05GSUdfSTgxMF9UQ08pICs9IGk4MTAt dGNvLm8NCmRpZmYgLXVyUCBsaW51eC0yLjQuMC9kcml2ZXJzL2NoYXIvZGV2cG9sbC5jIGxpbnV4 LTIuNC4wLWRldnBvbGwvZHJpdmVycy9jaGFyL2RldnBvbGwuYw0KLS0tIGxpbnV4LTIuNC4wL2Ry aXZlcnMvY2hhci9kZXZwb2xsLmMJV2VkIERlYyAzMSAxNjowMDowMCAxOTY5DQorKysgbGludXgt Mi40LjAtZGV2cG9sbC9kcml2ZXJzL2NoYXIvZGV2cG9sbC5jCVR1ZSBKYW4gMzAgMDU6NDA6MTkg MjAwMQ0KQEAgLTAsMCArMSw3NTQgQEANCisvKg0KKyAqIC9kZXYvcG9sbA0KKyAqIGJ5IE5pZWxz IFByb3ZvcyA8cHJvdm9zQGNpdGkudW1pY2guZWR1Pg0KKyAqDQorICogcHJvdmlkZXMgcG9sbCgp IHN1cHBvcnQgdmlhIC9kZXYvcG9sbCBhcyBpbiBTb2xhcmlzLg0KKyAqDQorICogTGludXggMi4z LzIuNCBwb3J0IGJ5IE1pY2hhbCBPc3Ryb3dza2kNCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgv ZmlsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4NCisjaW5jbHVkZSA8bGludXgvZXJy bm8uaD4NCisjaW5jbHVkZSA8bGludXgvbW0uaD4NCisjaW5jbHVkZSA8bGludXgvbWFsbG9jLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4NCisjaW5jbHVkZSA8bGludXgvcG9sbC5oPg0K KyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC93cmFwcGVy Lmg+DQorDQorI2luY2x1ZGUgPGxpbnV4L2RldnBvbGwuaD4NCisNCisjaW5jbHVkZSA8YXNtL3Vh Y2Nlc3MuaD4NCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPg0KKyNpbmNsdWRlIDxhc20vaW8uaD4N CisNCisvKiNkZWZpbmUgREVCVUcgMSAqLw0KKyNpZmRlZiBERUJVRw0KKyNkZWZpbmUgRFBSSU5U Syh4KQlwcmludGsgeA0KKyNkZWZpbmUgRE5QUklOVEsobix4KQlpZiAobiA8PSBERUJVRykgcHJp bnRrIHgNCisjZWxzZQ0KKyNkZWZpbmUgRFBSSU5USyh4KQ0KKyNkZWZpbmUgRE5QUklOVEsobix4 KQ0KKyNlbmRpZg0KKw0KKy8qIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgKi8NCisNCisjZGVm aW5lIERFRkFVTFRfUE9MTE1BU0sgKFBPTExJTiB8IFBPTExPVVQgfCBQT0xMUkROT1JNIHwgUE9M TFdSTk9STSkNCisNCisvKiBEbyBkeW5hbWljIGhhc2hpbmcgKi8NCisNCisjZGVmaW5lIElOSVRJ QUxfQlVDS0VUX0JJVFMgNg0KKyNkZWZpbmUgTUFYX0JVQ0tFVF9CSVRTIDE2DQorI2RlZmluZSBS RVNJWkVfTEVOR1RICTINCisNCisNCitzdGF0aWMgdm9pZCBmcmVlX3BnX3ZlYyhzdHJ1Y3QgZGV2 cG9sbCAqZHApOw0KKw0KKw0KKy8qIEluaXRhbGl6ZSB0aGUgaGFzaCB0YWJsZSAqLw0KKw0KK2lu dA0KK2RwX2luaXQoc3RydWN0IGRldnBvbGwgKmRwKQ0KK3sNCisJaW50IGk7DQorCWludCBudW1f YnVja2V0czsNCisJRE5QUklOVEsoMywoS0VSTl9JTkZPICIvZGV2L3BvbGw6IGRwX2luaXRcbiIp KTsNCisNCisJZHAtPmRwX2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOw0KKwlkcC0+ZHBfZW50cmll cyA9IDA7DQorCWRwLT5kcF9tYXggPSAwOw0KKwlkcC0+ZHBfYXZnID0gZHAtPmRwX2NvdW50ID0g MDsNCisJZHAtPmRwX2NhY2hlZCA9IGRwLT5kcF9jYWxscyA9IDA7DQorCWRwLT5kcF9idWNrZXRf Yml0cyA9IElOSVRJQUxfQlVDS0VUX0JJVFM7DQorCWRwLT5kcF9idWNrZXRfbWFzayA9ICgxIDw8 IElOSVRJQUxfQlVDS0VUX0JJVFMpIC0gMTsNCisNCisJbnVtX2J1Y2tldHMgPSAoZHAtPmRwX2J1 Y2tldF9tYXNrICsgMSk7DQorCWRwLT5kcF90YWIgPSBrbWFsbG9jKG51bV9idWNrZXRzICogc2l6 ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLA0KKwkJCSAgICAgR0ZQX0tFUk5FTCk7DQorDQorCWlmICgh ZHAtPmRwX3RhYikNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgbnVt X2J1Y2tldHMgOyBpKyspIHsNCisJCUlOSVRfTElTVF9IRUFEKCZkcC0+ZHBfdGFiW2ldKTsNCisJ fQ0KKw0KKwlyZXR1cm4gKDApOw0KK30NCisNCitpbnQNCitkcF9yZXNpemUoc3RydWN0IGRldnBv bGwgKmRwKQ0KK3sNCisJdV9pbnQxNl90IG5ld19tYXNrLCBvbGRfbWFzazsNCisJaW50IGk7DQor CXN0cnVjdCBsaXN0X2hlYWQgKm5ld190YWIsICpvbGRfdGFiOw0KKwlzdHJ1Y3QgZHBfZmQgKmRw ZmQ7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCWludCBudW1fYnVja2V0czsNCisNCisJb2xk X21hc2sgPSBkcC0+ZHBfYnVja2V0X21hc2s7DQorCW5ld19tYXNrID0gKG9sZF9tYXNrICsgMSkg KiAyIC0gMTsNCisJbnVtX2J1Y2tldHMgPSBuZXdfbWFzayArIDE7DQorDQorCURQUklOVEsoKEtF Uk5fSU5GTyAiL2Rldi9wb2xsOiByZXNpemUgJWQgLT4gJWRcbiIsDQorCQkgb2xkX21hc2ssIG5l d19tYXNrKSk7DQorDQorCW5ld190YWIgPSBrbWFsbG9jKCBudW1fYnVja2V0cyAqIHNpemVvZihz dHJ1Y3QgbGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghbmV3X3RhYikNCisJCXJldHVy biAtRU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykgew0KKwkJ SU5JVF9MSVNUX0hFQUQoJm5ld190YWJbaV0pOw0KKwl9DQorDQorCW9sZF90YWIgPSBkcC0+ZHBf dGFiOw0KKw0KKwkvKiBSZWhhc2ggYWxsIGVudHJpZXMgKi8NCisJd3JpdGVfbG9ja19pcnFzYXZl KCZkcC0+ZHBfbG9jaywgZmxhZ3MpOw0KKwlmb3IgKGkgPSAwOyBpIDw9IG9sZF9tYXNrOyBpKysp IHsNCisJCXdoaWxlKCFsaXN0X2VtcHR5KCZvbGRfdGFiW2ldKSl7DQorCQkJZHBmZCA9IGxpc3Rf ZW50cnkob2xkX3RhYltpXS5uZXh0LHN0cnVjdCBkcF9mZCxuZXh0KTsNCisJCQlsaXN0X2RlbCgm ZHBmZC0+bmV4dCk7DQorCQkJSU5JVF9MSVNUX0hFQUQoJmRwZmQtPm5leHQpOw0KKwkJCWxpc3Rf YWRkKCZkcGZkLT5uZXh0LCZuZXdfdGFiW2RwZmQtPnBmZC5mZCAmIG5ld19tYXNrXSk7DQorCQl9 DQorCX0NCisNCisJZHAtPmRwX3RhYiA9IG5ld190YWI7DQorCWRwLT5kcF9idWNrZXRfYml0cysr Ow0KKwlkcC0+ZHBfYnVja2V0X21hc2sgPSBuZXdfbWFzazsNCisJd3JpdGVfdW5sb2NrX2lycXJl c3RvcmUoJmRwLT5kcF9sb2NrLCBmbGFncyk7DQorDQorCWtmcmVlIChvbGRfdGFiKTsNCisNCisJ cmV0dXJuICgwKTsNCit9DQorDQoraW50DQorZHBfaW5zZXJ0KHN0cnVjdCBkZXZwb2xsICpkcCwg c3RydWN0IHBvbGxmZCAqcGZkKQ0KK3sNCisJc3RydWN0IGRwX2ZkICpkcGZkOw0KKwl1X2ludDE2 X3QgYnVja2V0ID0gcGZkLT5mZCAmIGRwLT5kcF9idWNrZXRfbWFzazsNCisJdW5zaWduZWQgbG9u ZyBmbGFnczsNCisJc3RydWN0IGZpbGUgKmZpbGU7DQorDQorCWRwZmQgPSBrbWFsbG9jKHNpemVv ZihzdHJ1Y3QgZHBfZmQpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkcGZkKQ0KKwkJcmV0dXJuIC1F Tk9NRU07DQorDQorCWRwZmQtPmZsYWdzID0gMDsNCisJc2V0X2JpdChEUEhfRElSVFksICZkcGZk LT5mbGFncyk7DQorCWRwZmQtPnBmZCA9ICpwZmQ7DQorCWRwZmQtPnBmZC5yZXZlbnRzID0gMDsN CisJSU5JVF9MSVNUX0hFQUQoJmRwZmQtPm5leHQpOw0KKw0KKwl3cml0ZV9sb2NrX2lycXNhdmUo JmRwLT5kcF9sb2NrLCBmbGFncyk7DQorDQorCWxpc3RfYWRkKCZkcGZkLT5uZXh0LCZkcC0+ZHBf dGFiW2J1Y2tldF0pOw0KKw0KKwlmaWxlID0gZmNoZWNrKHBmZC0+ZmQpOw0KKwlpZiAoZmlsZSAh PSBOVUxMKSB7DQorCQl3cml0ZV9sb2NrKCYoZmlsZSktPmZfZHBsb2NrKTsNCisJCXBvbGxfYmFj a21hcChwZmQtPmZkLCBkcGZkLCAmKGZpbGUpLT5mX2JhY2ttYXApOw0KKwkJd3JpdGVfdW5sb2Nr KCYoZmlsZSktPmZfZHBsb2NrKTsNCisJCXNldF9iaXQoRFBIX0JBQ0tNQVAsICYoZHBmZCktPmZs YWdzKTsNCisJfQ0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZHAtPmRwX2xvY2ssIGZsYWdz KTsNCisNCisJZHAtPmRwX2VudHJpZXMrKzsNCisJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byByZXNp emUgdGhlIGhhc2ggdGFibGUgKi8NCisJaWYgKChkcC0+ZHBfZW50cmllcyA+PiBkcC0+ZHBfYnVj a2V0X2JpdHMpID4gUkVTSVpFX0xFTkdUSCAmJg0KKwkgICAgZHAtPmRwX2J1Y2tldF9iaXRzIDwg TUFYX0JVQ0tFVF9CSVRTKQ0KKwkJZHBfcmVzaXplKGRwKTsNCisNCisJcmV0dXJuICgwKTsNCit9 DQorDQorc3RydWN0IGRwX2ZkICoNCitkcF9maW5kKHN0cnVjdCBkZXZwb2xsICpkcCwgaW50IGZk KQ0KK3sNCisJc3RydWN0IGRwX2ZkICpkcGZkPU5VTEw7DQorCXN0cnVjdCBsaXN0X2hlYWQgKmxo Ow0KKwl1X2ludDE2X3QgYnVja2V0ID0gZmQgJiBkcC0+ZHBfYnVja2V0X21hc2s7DQorDQorCXJl YWRfbG9jaygmZHAtPmRwX2xvY2spOw0KKwlsaXN0X2Zvcl9lYWNoKGxoLCZkcC0+ZHBfdGFiW2J1 Y2tldF0pew0KKwkJZHBmZCA9IGxpc3RfZW50cnkobGgsc3RydWN0IGRwX2ZkLG5leHQpOw0KKwkJ aWYoZHBmZC0+cGZkLmZkID09IGZkICkgYnJlYWs7DQorCQlkcGZkID0gTlVMTDsNCisJfQ0KKw0K Kw0KKwlyZWFkX3VubG9jaygmZHAtPmRwX2xvY2spOw0KKwlETlBSSU5USygyLCAoS0VSTl9JTkZP ICJkcF9maW5kOiAlZCAtPiAlcFxuIiwgZmQsIGRwZmQpKTsNCisNCisJcmV0dXJuIGRwZmQ7DQor fQ0KKw0KK3ZvaWQNCitkcF9kZWxldGUoc3RydWN0IGRldnBvbGwgKmRwLCBzdHJ1Y3QgZHBfZmQg KmRwZmQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlpbnQgZmQ7DQorCXN0cnVjdCBm aWxlICpmaWxwOw0KKw0KKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRwLT5kcF9sb2NrLCBmbGFncyk7 DQorCWxpc3RfZGVsKCZkcGZkLT5uZXh0KTsNCisNCisJSU5JVF9MSVNUX0hFQUQoJmRwZmQtPm5l eHQpOw0KKw0KKwkvKiBSZW1vdmUgYmFja21hcHMgaWYgbmVjZXNzYXJ5ICovDQorCWlmIChjdXJy ZW50LT5maWxlcykgew0KKwkJZmQgPSBkcGZkLT5wZmQuZmQ7DQorCQlmaWxwID0gZmNoZWNrKGZk KTsNCisNCisJCWlmICh0ZXN0X2JpdChEUEhfQkFDS01BUCwgJmRwZmQtPmZsYWdzKSAmJg0KKwkJ ICAgIGZpbHAgJiYgZmlscC0+Zl9iYWNrbWFwKXsNCisJCQl3cml0ZV9sb2NrKCZmaWxwLT5mX2Rw bG9jayk7DQorCQkJcG9sbF9yZW1vdmVfYmFja21hcCgmZmlscC0+Zl9iYWNrbWFwLCBmZCwNCisJ CQkJCSAgICBjdXJyZW50LT5maWxlcyk7DQorCQkJd3JpdGVfdW5sb2NrKCZmaWxwLT5mX2RwbG9j ayk7DQorCQl9DQorCX0NCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRwLT5kcF9sb2NrLCBm bGFncyk7DQorDQorCWtmcmVlIChkcGZkKTsNCisNCisJZHAtPmRwX2VudHJpZXMtLTsNCit9DQor DQordm9pZA0KK2RwX2ZyZWUoc3RydWN0IGRldnBvbGwgKmRwKQ0KK3sNCisJaW50IGk7DQorCXN0 cnVjdCBkcF9mZCAqZHBmZCA9IE5VTEw7DQorDQorCWxvY2tfa2VybmVsKCk7DQorCWZvciAoaSA9 IDA7IGkgPD0gZHAtPmRwX2J1Y2tldF9tYXNrOyBpKyspIHsNCisJCXdoaWxlKCFsaXN0X2VtcHR5 KCZkcC0+ZHBfdGFiW2ldKSl7DQorCQkJZHBmZCA9IGxpc3RfZW50cnkoZHAtPmRwX3RhYltpXS5u ZXh0LHN0cnVjdCBkcF9mZCxuZXh0KTsNCisJCQlkcF9kZWxldGUoZHAsIGRwZmQpOw0KKwkJfQ0K Kwl9DQorCXVubG9ja19rZXJuZWwoKTsNCisNCisJa2ZyZWUgKGRwLT5kcF90YWIpOw0KK30NCisN CisNCisvKg0KKyAqIHBvbGwgdGhlIGZkcyB0aGF0IHdlIGtlZXAgaW4gb3VyIHN0YXRlLCByZXR1 cm4gYWZ0ZXIgd2UgcmVhY2hlZA0KKyAqIG1heCBjaGFuZ2VkIGZkcyBvciBhcmUgZG9uZS4NCisg KiBYWFggLSBJIGRvIG5vdCBsaWtlIGhvdyB0aGUgd2FpdCB0YWJsZSBzdHVmZiBpcyBkb25lLg0K KyAqLw0KKw0KK2ludA0KK2RwX3BvbGwoc3RydWN0IGRldnBvbGwgKmRwLCBpbnQgbWF4LCBwb2xs X3RhYmxlICp3YWl0LA0KKwlsb25nIHRpbWVvdXQsIHN0cnVjdCBwb2xsZmQgKnJmZHMsIGludCB1 c2VtbWFwKQ0KK3sNCisJaW50IGNvdW50ID0gMDsNCisJbG9ja19rZXJuZWwoKTsNCisJcmVhZF9s b2NrKCZkcC0+ZHBfbG9jayk7DQorCWZvciAoOzspIHsNCisJCXVuc2lnbmVkIGludCBqPTA7DQor CQlzdHJ1Y3QgZHBfZmQgKmRwZmQgPSBOVUxMOw0KKwkJc3RydWN0IHBvbGxmZCAqZmRwbnQsIHBm ZDsNCisJCXN0cnVjdCBmaWxlICpmaWxlOw0KKwkJDQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNL X0lOVEVSUlVQVElCTEUpOw0KKwkJZm9yIChqID0gMDsgKGogPD0gZHAtPmRwX2J1Y2tldF9tYXNr KSAmJiBjb3VudCA8IG1heDsgaisrKSB7DQorCQkJc3RydWN0IGxpc3RfaGVhZCAqbGg7DQorCQkJ bGlzdF9mb3JfZWFjaChsaCwgJmRwLT5kcF90YWJbal0pew0KKw0KKwkJCQlpbnQgZmQ7DQorCQkJ CXVuc2lnbmVkIGludCBtYXNrID0gMDsNCisJCQkJdW5zaWduZWQgaW50IHJtID0wOw0KKwkJCQlk cGZkID0gbGlzdF9lbnRyeShsaCxzdHJ1Y3QgZHBfZmQsbmV4dCk7DQorDQorCQkJCWlmKGNvdW50 Pj1tYXgpew0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisNCisJCQkJZmRwbnQgPSAmZHBmZC0+cGZk Ow0KKwkJCQlmZCA9IGZkcG50LT5mZDsNCisNCisJCQkJLyogcG9sbF93YWl0IGluY3JlbWVudHMg Zl9jb3VudCBpZiBuZWVkZWQgKi8NCisJCQkJZmlsZSA9IGZjaGVjayhmZCk7DQorCQkJCWlmIChm aWxlID09IE5VTEwpIHsNCisJCQkJCS8qIEdvdCB0byBtb3ZlIGJhY2t3YXJkIGZpcnN0Ow0KKwkJ CQkJICogZHBfZGVsZXRlIHdpbGwgcmVtb3ZlIGxoIGZyb20NCisJCQkJCSAqIHRoZSBsaXN0IG90 aGVyd2lzZQ0KKwkJCQkJICovDQorCQkJCQlsaCA9IGxoLT5wcmV2Ow0KKwkJCQkJZHBfZGVsZXRl KGRwLCBkcGZkKTsNCisJCQkJCWRwZmQgPSBOVUxMOw0KKwkJCQkJY29udGludWU7DQorCQkJCX0N CisNCisJCQkJbWFzayA9IGZkcG50LT5yZXZlbnRzOw0KKwkJCQlpZiAodGVzdF9hbmRfY2xlYXJf Yml0KERQSF9ESVJUWSwNCisJCQkJCQkgICAgICAgJmRwZmQtPmZsYWdzKSB8fA0KKwkJCQkgICAg d2FpdCAhPSBOVUxMIHx8DQorCQkJCSAgICAobWFzayAmIGZkcG50LT5ldmVudHMpKSAgew0KKw0K KwkJCQkJbWFzayA9IERFRkFVTFRfUE9MTE1BU0s7DQorCQkJCQlpZiAoZmlsZS0+Zl9vcCAmJiBm aWxlLT5mX29wLT5wb2xsKQ0KKwkJCQkJCW1hc2sgPSBmaWxlLT5mX29wLT5wb2xsKGZpbGUsIHdh aXQpOw0KKwkJCQkJLyogaWYgUE9MTEhJTlQgbm90IHN1cHBvcnRlZCBieSBmaWxlDQorCQkJCQkg KiB0aGVuIHNldCBiaXQgdG8gZGlydHkgLS0tDQorCQkJCQkgKiBtdXN0IHBvbGwgdGhpcyBmaWxl IGV2ZXJ5IHRpbWUsDQorCQkJCQkgKiBvdGhlcndpc2UgYml0IHdpbGwgYmUgc2V0IGJ5DQorCQkJ CQkgKiBjYWxscyB0byBkcF9hZGRfaGludA0KKwkJCQkJICovDQorCQkJCQlpZiAoIShtYXNrICYg UE9MTEhJTlQpKQ0KKwkJCQkJCXNldF9iaXQoRFBIX0RJUlRZLCAmZHBmZC0+ZmxhZ3MpOw0KKwkJ CQkJZmRwbnQtPnJldmVudHMgPSBtYXNrOw0KKwkJCQl9ZWxzZQ0KKwkJCQkJZHAtPmRwX2NhY2hl ZCsrOw0KKw0KKw0KKwkJCQlkcC0+ZHBfY2FsbHMrKzsNCisNCisJCQkJbWFzayAmPSBmZHBudC0+ ZXZlbnRzIHwgUE9MTEVSUiB8IFBPTExIVVA7DQorCQkJCWlmIChtYXNrKSB7DQorCQkJCQl3YWl0 ID0gTlVMTDsNCisJCQkJCWNvdW50Kys7DQorDQorCQkJCQlpZiAodXNlbW1hcCkgew0KKwkJCQkJ CSpyZmRzID0gKmZkcG50Ow0KKwkJCQkJCXJmZHMtPnJldmVudHMgPSBtYXNrOw0KKwkJCQkJfSBl bHNlIHsNCisJCQkJCQlwZmQgPSAqZmRwbnQ7DQorCQkJCQkJcGZkLnJldmVudHMgPSBtYXNrOw0K KwkJCQkJCV9fY29weV90b191c2VyKHJmZHMsICZwZmQsDQorCQkJCQkJCSAgICAgICBzaXplb2Yo c3RydWN0IHBvbGxmZCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJcmZkcysrOw0KKwkJCQl9DQorCQkJ fQ0KKwkJfQ0KKw0KKwkJd2FpdCA9IE5VTEw7DQorCQlpZiAoY291bnQgfHwgIXRpbWVvdXQgfHwg c2lnbmFsX3BlbmRpbmcoY3VycmVudCkpDQorCQkJYnJlYWs7DQorCQlyZWFkX3VubG9jaygmZHAt PmRwX2xvY2spOw0KKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7DQorCQly ZWFkX2xvY2soJmRwLT5kcF9sb2NrKTsNCisJfQ0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JV Tk5JTkcpOw0KKwlyZWFkX3VubG9jaygmZHAtPmRwX2xvY2spOw0KKwl1bmxvY2tfa2VybmVsKCk7 DQorDQorCWlmKCAhY291bnQgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKQ0KKwkJcmV0dXJu IC1FSU5UUjsNCisNCisJcmV0dXJuIGNvdW50Ow0KK30NCisNCisvKg0KKyAqIGNsb3NlIGEgL2Rl di9wb2xsDQorICovDQorDQorc3RhdGljIGludA0KK2Nsb3NlX2RldnBvbGwoc3RydWN0IGlub2Rl ICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkNCit7DQorCXN0cnVjdCBkZXZwb2xsICpkcCA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCisNCisJRE5QUklOVEsoMSwgKEtFUk5fSU5GTyAiY2xvc2Ug L2Rldi9wb2xsLCBtYXg6ICVkLCBhdmc6ICVkKCVkLyVkKSAlZC8lZFxuIiwNCisJCSAgICAgZHAt PmRwX21heCwgZHAtPmRwX2F2Zy9kcC0+ZHBfY291bnQsDQorCQkgICAgIGRwLT5kcF9hdmcsIGRw LT5kcF9jb3VudCwNCisJCSAgICAgZHAtPmRwX2NhY2hlZCwgZHAtPmRwX2NhbGxzKSk7DQorDQor CS8qIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSAqLw0KKwlpZiAoZHAtPmRwX21lbXZlYykNCisJCWZy ZWVfcGdfdmVjKGRwKTsNCisNCisJLyogRnJlZSB0aGUgaGFzaCB0YWJsZSAqLw0KKwlkcF9mcmVl KGRwKTsNCisNCisJa2ZyZWUoZHApOw0KKw0KKwlNT0RfREVDX1VTRV9DT1VOVDsNCisJcmV0dXJu IDA7DQorfQ0KKw0KKy8qDQorICogb3BlbiBhIC9kZXYvcG9sbA0KKyAqLw0KKw0KK3N0YXRpYyBp bnQNCitvcGVuX2RldnBvbGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmls ZSkNCit7DQorCXN0cnVjdCBkZXZwb2xsICpkcDsNCisJaW50IHI7DQorDQorCS8qIGFsbG9jYXRl ZCBzdGF0ZSAqLw0KKwlkcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZwb2xsKSwgR0ZQX0tF Uk5FTCk7DQorCWlmIChkcCA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW1lbXNl dCggZHAsIDAsIHNpemVvZihzdHJ1Y3QgZGV2cG9sbCkpOw0KKwlpZiAoKHIgPSBkcF9pbml0KGRw KSkpIHsNCisJCWtmcmVlIChkcCk7DQorCQlyZXR1cm4gcjsNCisJfQ0KKw0KKwlmaWxlLT5wcml2 YXRlX2RhdGEgPSBkcDsNCisNCisJTU9EX0lOQ19VU0VfQ09VTlQ7DQorDQorCUROUFJJTlRLKDMs IChLRVJOX0lORk8gIm9wZW4gL2Rldi9wb2xsXG4iKSk7DQorDQorCXJldHVybiAwOw0KK30NCisN CisvKg0KKyAqIHdyaXRlIHRvIC9kZXYvcG9sbDoNCisgKiBhIHVzZXIgd3JpdGVzIHN0cnVjdCBw b2xsZmRzIGFuZCB3ZSBhZGQgdGhlbSB0byBvdXIgbGlzdCwgb3IgcmVtb3ZlDQorICogdGhlbSBp ZiAoZXZlbnRzICYgUE9MTFJFTU9WRSkgaXMgdHJ1ZQ0KKyAqLw0KKw0KK3N0YXRpYyBpbnQNCit3 cml0ZV9kZXZwb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVf dCBjb3VudCwNCisJICAgICAgbG9mZl90ICpwcG9zKQ0KK3sNCisJaW50IHIscmNvdW50Ow0KKwlz dHJ1Y3QgZGV2cG9sbCAqZHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7DQorCXN0cnVjdCBwb2xsZmQg cGZkOw0KKwlzdHJ1Y3QgZHBfZmQgKmRwZmQ7DQorI2lmZGVmIERFQlVHDQorCWludCBhZGQgPSAw LCBkZWxldGUgPSAwLCBjaGFuZ2UgPSAwOw0KKyNlbmRpZg0KKw0KKwlETlBSSU5USygzLCAoS0VS Tl9JTkZPICJ3cml0ZSAvZGV2L3BvbGwgJWlcbiIsY291bnQpKTsNCisNCisJaWYgKGNvdW50ICUg c2l6ZW9mKHN0cnVjdCBwb2xsZmQpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICgociA9 IHZlcmlmeV9hcmVhKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkpDQorCQlyZXR1cm4gcjsN CisNCisJcmNvdW50ID0gY291bnQ7DQorDQorCWxvY2tfa2VybmVsKCk7DQorDQorCXdoaWxlIChj b3VudCA+IDApIHsNCisJCV9fY29weV9mcm9tX3VzZXIoJnBmZCwgYnVmZmVyLCBzaXplb2YocGZk KSk7IC8qIG5vIGNoZWNrICovDQorDQorCQlkcGZkID0gZHBfZmluZChkcCwgcGZkLmZkKTsNCisN CisJCWlmIChwZmQuZmQgPj0gY3VycmVudC0+ZmlsZXMtPm1heF9mZHMgfHwNCisJCSAgICBjdXJy ZW50LT5maWxlcy0+ZmRbcGZkLmZkXSA9PSBOVUxMKSB7DQorCQkJLyogQmUgdG9sZXJhbnQsIG1h eWJlIHRoZSBjbG9zZSBoYXBwZW5lZCBhbHJlYWR5ICovDQorCQkJcGZkLmV2ZW50cyA9IFBPTExS RU1PVkU7DQorCQl9DQorCQkvKiBTZWUgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGZpbGUgZGVz Y3JpcHRvci4gIElmIGl0DQorCQkgKiBhbHJlYWR5IGV4aXN0cyBPUiB0aGUgZXZlbnQgZmllbGRz LCBvdGhlcndpc2UgaW5zZXJ0DQorCQkgKi8NCisJCWlmIChwZmQuZXZlbnRzICYgUE9MTFJFTU9W RSkgew0KKwkJCWlmIChkcGZkKQ0KKwkJCQlkcF9kZWxldGUoZHAsIGRwZmQpOw0KKyNpZmRlZiBE RUJVRw0KKwkJCWRlbGV0ZSsrOw0KKyNlbmRpZg0KKwkJfSBlbHNlIGlmIChkcGZkKSB7DQorCQkg IC8qIFhYWCBkcGZkLT5wZmQuZXZlbnRzIHw9IHBmZC5ldmVudHM7ICovDQorCQkJZHBmZC0+cGZk LmV2ZW50cyA9IHBmZC5ldmVudHM7DQorI2lmZGVmIERFQlVHDQorCQkJY2hhbmdlKys7DQorI2Vu ZGlmDQorCQl9IGVsc2Ugew0KKwkJCWRwX2luc2VydChkcCwgJnBmZCk7DQorI2lmZGVmIERFQlVH DQorCQkJYWRkKys7DQorI2VuZGlmDQorCQl9DQorDQorCQlidWZmZXIgKz0gc2l6ZW9mKHBmZCk7 DQorCQljb3VudCAtPSBzaXplb2YocGZkKTsNCisJfQ0KKw0KKwl1bmxvY2tfa2VybmVsKCk7DQor DQorCWlmIChkcC0+ZHBfbWF4IDwgZHAtPmRwX2VudHJpZXMpIHsNCisJCWRwLT5kcF9tYXggPSBk cC0+ZHBfZW50cmllczsNCisJCUROUFJJTlRLKDIsIChLRVJOX0lORk8gIi9kZXYvcG9sbDogbmV3 IG1heCAlZFxuIiwgZHAtPmRwX21heCkpOw0KKwl9DQorDQorCUROUFJJTlRLKDMsIChLRVJOX0lO Rk8gIndyaXRlIC9kZXYvcG9sbDogJWQgZW50cmllcyAoJWQvJWQvJWQpXG4iLA0KKwkJIGRwLT5k cF9lbnRyaWVzLCBhZGQsIGRlbGV0ZSwgY2hhbmdlKSk7DQorDQorCXJldHVybiAocmNvdW50KTsN Cit9DQorDQorc3RhdGljIGludA0KK2lvY3RsX2RldnBvbGwoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0IGZpbGUgKmZpbGUsDQorCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxv bmcgYXJnKQ0KK3sNCisJc3RydWN0IGRldnBvbGwgKmRwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0K Kwl1bnNpZ25lZCBtYXBzaXplPTA7DQorCXVuc2lnbmVkIG51bV9wYWdlcz0wOw0KKwlpbnQgaT0w Ow0KKwlzd2l0Y2ggKGNtZCkgew0KKwljYXNlIERQX0FMTE9DOg0KKwkJaWYgKGFyZyA+IGN1cnJl bnQtPnJsaW1bUkxJTUlUX05PRklMRV0ucmxpbV9jdXIpDQorCQkJcmV0dXJuIC1FSU5WQUw7DQor CQlpZiAoZHAtPmRwX21tYXApDQorCQkJcmV0dXJuIC1FUEVSTTsNCisNCisJCW1hcHNpemUgPSBE UF9NTUFQX1NJWkUoYXJnKTsNCisNCisJCW51bV9wYWdlcyA9ICggUEFHRV9BTElHTihtYXBzaXpl KSA+PiBQQUdFX1NISUZUKTsNCisNCisJCWRwLT5kcF9tZW12ZWMgPSBrbWFsbG9jKCBudW1fcGFn ZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZyopLA0KKwkJCQkgR0ZQX0tFUk5FTCk7DQorCQkNCisJ CWlmKCBkcC0+ZHBfbWVtdmVjID09IE5VTEwgKQ0KKwkJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkJ bWVtc2V0KGRwLT5kcF9tZW12ZWMsIDAsIG51bV9wYWdlcyAqIHNpemVvZih1bnNpZ25lZCBsb25n KikpOw0KKw0KKwkJZm9yKCBpID0gMCA7IGkgPCBudW1fcGFnZXMgOyArK2kpew0KKwkJCXVuc2ln bmVkIGxvbmcgbWFwLCBtYXBlbmQ7DQorCQkJZHAtPmRwX21lbXZlY1tpXSA9ICh1X2NoYXIqKV9f Z2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwwKTsNCisJCQlpZighZHAtPmRwX21lbXZlY1tpXSl7 DQorCQkJCWZyZWVfcGdfdmVjKGRwKTsNCisJCQkJcmV0dXJuIC1FTk9NRU07DQorCQkJfQ0KKw0K KwkJCW1hcGVuZCA9IHZpcnRfdG9fcGFnZShkcC0+ZHBfbWVtdmVjW2ldICsgUEFHRV9TSVpFIC0g MSk7DQorCQkJZm9yIChtYXAgPSB2aXJ0X3RvX3BhZ2UoZHAtPmRwX21lbXZlY1tpXSk7DQorCQkJ ICAgICBtYXAgPD0gbWFwZW5kOw0KKwkJCSAgICAgbWFwKyspDQorCQkJCXNldF9iaXQoUEdfcmVz ZXJ2ZWQsICZtZW1fbWFwW21hcF0uZmxhZ3MpOw0KKw0KKwkJCSsrZHAtPmRwX251bXZlYzsNCisJ CX0NCisNCisJCWRwLT5kcF9uZmRzID0gYXJnOw0KKw0KKwkJRFBSSU5USygoS0VSTl9JTkZPICJh bGxvY2F0ZWQgJWQgcG9sbGZkc1xuIiwgZHAtPmRwX25mZHMpKTsNCisNCisJCXJldHVybiAwOw0K KwljYXNlIERQX0ZSRUU6DQorCQlpZiggYXRvbWljX3JlYWQoJmRwLT5kcF9tbWFwcGVkKSApDQor CQkJcmV0dXJuIC1FQlVTWTsNCisNCisJCWlmKGRwLT5kcF9tZW12ZWNbaV0pew0KKwkJCWZyZWVf cGdfdmVjKCBkcCApOw0KKwkJfQ0KKw0KKw0KKwkJRFBSSU5USygoS0VSTl9JTkZPICJmcmVlZCAl ZCBwb2xsZmRzXG4iLCBkcC0+ZHBfbmZkcykpOw0KKwkJZHAtPmRwX25mZHMgPSAwOw0KKw0KKwkJ cmV0dXJuIDA7DQorCWNhc2UgRFBfSVNQT0xMRUQ6IHsNCisJCXN0cnVjdCBwb2xsZmQgcGZkOw0K KwkJc3RydWN0IGRwX2ZkICpkcGZkOw0KKw0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwZmQsICh2 b2lkICopYXJnLCBzaXplb2YocGZkKSkpDQorCQkJcmV0dXJuIC1FRkFVTFQ7DQorCQlkcGZkID0g ZHBfZmluZChkcCwgcGZkLmZkKTsNCisJCWlmIChkcGZkID09IE5VTEwpDQorCQkJcmV0dXJuICgw KTsNCisNCisJCS8qIFdlIHBvbGwgdGhpcyBmZCwgcmV0dXJuIHRoZSBldmVucyB3ZSBwb2xsIG9u ICovDQorCQlwZmQuZXZlbnRzID0gZHBmZC0+cGZkLmV2ZW50czsNCisJCXBmZC5yZXZlbnRzID0g MDsNCisNCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZwZmQsIHNpemVvZihwZmQp KSkNCisJCQlyZXR1cm4gLUVGQVVMVDsNCisJCXJldHVybiAoMSk7DQorCX0NCisJY2FzZSBEUF9Q T0xMOiB7DQorCQlzdHJ1Y3QgZHZwb2xsIGRvcG9sbDsNCisJCWludCBuZmRzLCB1c2VtbWFwID0g MDsNCisJCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJCXBvbGxfdGFibGUgd2FpdDsNCisJCXN0 cnVjdCBwb2xsZmQgKnJwZmRzID0gTlVMTDsNCisNCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZG9w b2xsLCAodm9pZCAqKWFyZywgc2l6ZW9mKGRvcG9sbCkpKQ0KKwkJCXJldHVybiAtRUZBVUxUOw0K Kw0KKwkJLyogV2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgdGhpcyB2YWx1ZSwgaXRzIHVzZXIgc3Bh Y2UgKi8NCisJCW5mZHMgPSBkb3BvbGwuZHBfbmZkczsNCisJCWlmIChuZmRzIDw9IDApDQorCQkJ cmV0dXJuIC1FSU5WQUw7DQorDQorCQlpZiAoZG9wb2xsLmRwX2ZkcyA9PSBOVUxMKSB7DQorCQkJ aWYgKGRwLT5kcF9tbWFwID09IE5VTEwgKQ0KKwkJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQlycGZk cyA9IChzdHJ1Y3QgcG9sbGZkKilkcC0+ZHBfbW1hcDsNCisJCQl1c2VtbWFwID0gMTsNCisJCX0g ZWxzZSB7DQorCQkJcnBmZHMgPSBkb3BvbGwuZHBfZmRzOw0KKwkJCWlmICh2ZXJpZnlfYXJlYShW RVJJRllfV1JJVEUsIHJwZmRzLA0KKwkJCQkJbmZkcyAqIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSkp DQorCQkJCXJldHVybiAtRUZBVUxUOw0KKwkJCXVzZW1tYXAgPSAwOw0KKwkJfQ0KKw0KKwkJdGlt ZW91dCA9IGRvcG9sbC5kcF90aW1lb3V0Ow0KKwkJaWYgKHRpbWVvdXQpIHsNCisJCQkvKiBDYXJl ZnVsIGFib3V0IG92ZXJmbG93IGluIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzICovDQorCQkJaWYg KCh1bnNpZ25lZCBsb25nKXRpbWVvdXQgPCBNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKQ0KKwkJ CQl0aW1lb3V0ID0gKHRpbWVvdXQqSForOTk5KS8xMDAwKzE7DQorCQkJZWxzZSAvKiBOZWdhdGl2 ZSBvciBvdmVyZmxvdyAqLw0KKwkJCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7DQor CQl9DQorDQorCQkvKiBJbml0YWxpemUgd2FpdCB0YWJsZSAqLw0KKwkJcG9sbF9pbml0d2FpdCgm d2FpdCk7DQorDQorDQorDQorCQluZmRzID0gZHBfcG9sbChkcCwgbmZkcywgJndhaXQsIHRpbWVv dXQsIHJwZmRzLCB1c2VtbWFwKTsNCisNCisJCUROUFJJTlRLKDIsIChLRVJOX0lORk8gInBvbGwg dGltZSAlbGQgLT4gJWRcbiIsIHRpbWVvdXQsIG5mZHMpKTsNCisNCisNCisJCXBvbGxfZnJlZXdh aXQoJndhaXQpOw0KKw0KKwkJZHAtPmRwX2F2ZyArPSBkcC0+ZHBfZW50cmllczsNCisJCWRwLT5k cF9jb3VudCsrOw0KKw0KKwkJcmV0dXJuIG5mZHM7DQorCX0NCisJZGVmYXVsdDoNCisJCURQUklO VEsoKEtFUk5fSU5GTyAiaW9jdGwoJXgpIC9kZXYvcG9sbFxuIiwgY21kKSk7DQorCQlicmVhazsN CisJfQ0KKw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorDQorc3RhdGljIHZvaWQgZnJlZV9w Z192ZWMoc3RydWN0IGRldnBvbGwgKmRwKQ0KK3sNCisJaW50IGk7DQorDQorCWZvciAoaT0wOyBp PCBkcC0+ZHBfbnVtdmVjOyBpKyspIHsNCisJCWlmIChkcC0+ZHBfbWVtdmVjW2ldKSB7DQorCQkJ dW5zaWduZWQgbG9uZyBtYXAsIG1hcGVuZDsNCisNCisJCQltYXBlbmQgPSB2aXJ0X3RvX3BhZ2Uo ZHAtPmRwX21lbXZlY1tpXSArIFBBR0VfU0laRSAtIDEpOw0KKwkJCWZvciAobWFwID0gdmlydF90 b19wYWdlKGRwLT5kcF9tZW12ZWNbaV0pOw0KKwkJCSAgICAgbWFwIDw9IG1hcGVuZDsgDQorCQkJ ICAgICBtYXArKykNCisJCQkJY2xlYXJfYml0KFBHX3Jlc2VydmVkLCAmbWVtX21hcFttYXBdLmZs YWdzKTsNCisJCQlmcmVlX3BhZ2VzKCAodW5zaWduZWQpZHAtPmRwX21lbXZlY1tpXSwgMCk7DQor CQl9DQorCX0NCisJa2ZyZWUoZHAtPmRwX21lbXZlYyk7DQorCWRwLT5kcF9udW12ZWMgPSAwIDsN Cit9DQorDQorDQorc3RhdGljIHZvaWQgZGV2cG9sbF9tbV9vcGVuKCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKiB2bWEpew0KKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsNCisJc3Ry dWN0IGRldnBvbGwgKmRwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KKwlpZihkcCkNCisJCWF0b21p Y19pbmMoJmRwLT5kcF9tbWFwcGVkKTsNCit9DQorDQorc3RhdGljIHZvaWQgZGV2cG9sbF9tbV9j bG9zZSggc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKXsNCisJc3RydWN0IGZpbGUgKmZpbGUg PSB2bWEtPnZtX2ZpbGU7DQorCXN0cnVjdCBkZXZwb2xsICpkcCA9IGZpbGUtPnByaXZhdGVfZGF0 YTsNCisJaWYoZHApDQorCQlhdG9taWNfZGVjKCZkcC0+ZHBfbW1hcHBlZCk7DQorfQ0KKw0KK3N0 YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZGV2cG9sbF9tbWFwX29wcyA9IHsNCisJ b3BlbjoJZGV2cG9sbF9tbV9vcGVuLA0KKwljbG9zZToJZGV2cG9sbF9tbV9jbG9zZSwNCit9Ow0K Kw0KKy8qDQorICogbW1hcCBzaGFyZWQgbWVtb3J5LiAgdGhlIGZpcnN0IGhhbGYgaXMgYW4gYXJy YXkgIG9mIHN0cnVjdCBwb2xsZmQsDQorICogZm9sbG93ZWQgYnkgYW4gYXJyYXkgb2YgaW50cyB0 byBpbmRpY2F0ZSB3aGljaCBmaWxlIGRlc2NyaXB0b3JzDQorICogY2hhbmdlZCBzdGF0dXMuDQor ICovDQorDQorc3RhdGljIGludA0KK21tYXBfZGV2cG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpDQorew0KKwlzdHJ1Y3QgZGV2cG9sbCAqZHAgPSBmaWxl LT5wcml2YXRlX2RhdGE7DQorCXVuc2lnbmVkIGxvbmcgc3RhcnQ7IC8qIEV2aWwgdHlwZSB0byBy ZW1hcF9wYWdlX3JhbmdlICovDQorCWludCAgaT0wOw0KKwlpbnQgbnVtX3BhZ2VzID0gMDsNCisJ c2l6ZV90IHNpemUsIG1hcHNpemU7DQorDQorCURQUklOVEsoKEtFUk5fSU5GTyAibW1hcCAvZGV2 L3BvbGw6ICVseCAlbHhcbiIsDQorCQkgdm1hLT52bV9zdGFydCwgdm1hLT52bV9wZ29mZjw8UEFH RV9TSElGVCkpOw0KKw0KKwlpZiAoICh2bWEtPnZtX3Bnb2ZmPDxQQUdFX1NISUZUKSAhPSAwKQ0K KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCS8qIENhbGN1bGF0ZSBob3cgbXVjaCBtZW1vcnkgd2Ug Y2FuIG1hcCAqLw0KKwlzaXplID0gUEFHRV9BTElHTihEUF9NTUFQX1NJWkUoZHAtPmRwX25mZHMp KTsNCisJbWFwc2l6ZSA9IFBBR0VfQUxJR04odm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsN CisJbnVtX3BhZ2VzID0gbWFwc2l6ZSA+PiBQQUdFX1NISUZUOw0KKw0KKwkvKiBDaGVjayBpZiB0 aGUgcmVxdWVzdGVkIHNpemUgaXMgd2l0aGluIG91ciBzaXplICovDQorCWlmIChtYXBzaXplID4g ZHAtPmRwX251bXZlYzw8UEFHRV9TSElGVCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKw0KKwlz dGFydCA9IHZtYS0+dm1fc3RhcnQ7DQorCWF0b21pY19zZXQoJmRwLT5kcF9tbWFwcGVkLDEpOw0K Kwlmb3IoIGkgPSAwIDsgaSA8IG51bV9wYWdlcyA7ICsraSl7DQorCQlpZiggcmVtYXBfcGFnZV9y YW5nZShzdGFydCwgX19wYShkcC0+ZHBfbWVtdmVjW2ldKSwNCisJCQkJICAgICBQQUdFX1NJWkUs DQorCQkJCSAgICAgdm1hLT52bV9wYWdlX3Byb3QpICkNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJ CXN0YXJ0ICs9IFBBR0VfU0laRTsNCisJfQ0KKwlkcC0+ZHBfbW1hcCA9ICh1X2NoYXIqKXZtYS0+ dm1fc3RhcnQ7DQorCXZtYS0+dm1fb3BzID0gJmRldnBvbGxfbW1hcF9vcHM7DQorDQorCURQUklO VEsoKEtFUk5fSU5GTyAibW1hcCAvZGV2L3BvbGw6ICVseCAleFxuIiwgcGFnZSwgbWFwc2l6ZSkp Ow0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorDQorc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZw b2xsX2ZvcHMgPSB7DQorCXdyaXRlOndyaXRlX2RldnBvbGwsDQorCWlvY3RsOiBpb2N0bF9kZXZw b2xsLA0KKwltbWFwOiBtbWFwX2RldnBvbGwsDQorCW9wZW46IG9wZW5fZGV2cG9sbCwNCisJcmVs ZWFzZTpjbG9zZV9kZXZwb2xsDQorfTsNCisNCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZGV2 cG9sbCA9IHsNCisJREVWUE9MTF9NSU5PUiwgImRldnBvbGwiLCAmZGV2cG9sbF9mb3BzDQorfTsN CisNCitpbnQgX19pbml0IGRldnBvbGxfaW5pdCh2b2lkKQ0KK3sNCisgIHByaW50ayhLRVJOX0lO Rk8gIi9kZXYvcG9sbCBkcml2ZXIgaW5zdGFsbGVkLlxuIik7DQorICBtaXNjX3JlZ2lzdGVyKCZk ZXZwb2xsKTsNCisNCisNCisgIHJldHVybiAwOw0KK30NCisNCittb2R1bGVfaW5pdChkZXZwb2xs X2luaXQpOw0KKyNpZmRlZiBNT0RVTEUNCisNCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpDQor ew0KKwltaXNjX2RlcmVnaXN0ZXIoJmRldnBvbGwpOw0KK30NCisjZW5kaWYNCisNCmRpZmYgLXVy UCBsaW51eC0yLjQuMC9mcy9maWxlX3RhYmxlLmMgbGludXgtMi40LjAtZGV2cG9sbC9mcy9maWxl X3RhYmxlLmMNCi0tLSBsaW51eC0yLjQuMC9mcy9maWxlX3RhYmxlLmMJVHVlIERlYyAgNSAxMDoy NzozMSAyMDAwDQorKysgbGludXgtMi40LjAtZGV2cG9sbC9mcy9maWxlX3RhYmxlLmMJTW9uIEph biAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtMTEsNiArMTEsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9p bml0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KICNpbmNsdWRlIDxsaW51eC9zbXBf bG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KIA0KIC8qIHN5c2N0bCB0dW5h Ymxlcy4uLiAqLw0KIHN0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCBmaWxlc19zdGF0ID0gezAsIDAs IE5SX0ZJTEV9Ow0KQEAgLTQ1LDYgKzQ2LDcgQEANCiAJCWYtPmZfdmVyc2lvbiA9ICsrZXZlbnQ7 DQogCQlmLT5mX3VpZCA9IGN1cnJlbnQtPmZzdWlkOw0KIAkJZi0+Zl9naWQgPSBjdXJyZW50LT5m c2dpZDsNCisJCXJ3bG9ja19pbml0KCZmLT5mX2RwbG9jayk7DQogCQlsaXN0X2FkZCgmZi0+Zl9s aXN0LCAmYW5vbl9saXN0KTsNCiAJCWZpbGVfbGlzdF91bmxvY2soKTsNCiAJCXJldHVybiBmOw0K ZGlmZiAtdXJQIGxpbnV4LTIuNC4wL2ZzL29wZW4uYyBsaW51eC0yLjQuMC1kZXZwb2xsL2ZzL29w ZW4uYw0KLS0tIGxpbnV4LTIuNC4wL2ZzL29wZW4uYwlUaHUgT2N0IDI2IDA4OjExOjIxIDIwMDAN CisrKyBsaW51eC0yLjQuMC1kZXZwb2xsL2ZzL29wZW4uYwlNb24gSmFuIDI5IDE2OjI0OjQyIDIw MDENCkBAIC0xMyw2ICsxMyw4IEBADQogI2luY2x1ZGUgPGxpbnV4L2Rub3RpZnkuaD4NCiAjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+DQogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVk ZSA8bGludXgvcG9sbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZwb2xsLmg+DQogDQogI2luY2x1 ZGUgPGFzbS91YWNjZXNzLmg+DQogDQpAQCAtODAyLDYgKzgwNCwxNCBAQA0KIAkJdW5sb2NrX2tl cm5lbCgpOw0KIAl9DQogCWZjbnRsX2Rpcm5vdGlmeSgwLCBmaWxwLCAwKTsNCisJDQorCWlmIChm aWxwLT5mX2JhY2ttYXApIHsNCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCQl3cml0ZV9sb2Nr X2lycXNhdmUoJmZpbHAtPmZfZHBsb2NrLCBmbGFncyk7DQorCQlwb2xsX2NsZWFuX2JhY2ttYXAo JmZpbHAtPmZfYmFja21hcCk7DQorCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZmlscC0+Zl9k cGxvY2ssIGZsYWdzKTsNCisJfQ0KKw0KIAlsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgaWQpOw0K IAlmcHV0KGZpbHApOw0KIAlyZXR1cm4gcmV0dmFsOw0KQEAgLTgyNyw2ICs4MzcsMTQgQEANCiAJ RkRfQ0xSKGZkLCBmaWxlcy0+Y2xvc2Vfb25fZXhlYyk7DQogCV9fcHV0X3VudXNlZF9mZChmaWxl cywgZmQpOw0KIAl3cml0ZV91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOw0KKw0KKwlpZiAoZmls cC0+Zl9iYWNrbWFwKSB7DQorCQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwkJd3JpdGVfbG9ja19p cnFzYXZlKCZmaWxwLT5mX2RwbG9jaywgZmxhZ3MpOw0KKwkJcG9sbF9yZW1vdmVfYmFja21hcCgm ZmlscC0+Zl9iYWNrbWFwLCBmZCwgZmlsZXMpOw0KKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUo JmZpbHAtPmZfZHBsb2NrLCBmbGFncyk7DQorCX0NCisNCiAJcmV0dXJuIGZpbHBfY2xvc2UoZmls cCwgZmlsZXMpOw0KIA0KIG91dF91bmxvY2s6DQpkaWZmIC11clAgbGludXgtMi40LjAvaW5jbHVk ZS9hc20taTM4Ni9kZXZwb2xsLmggbGludXgtMi40LjAtZGV2cG9sbC9pbmNsdWRlL2FzbS1pMzg2 L2RldnBvbGwuaA0KLS0tIGxpbnV4LTIuNC4wL2luY2x1ZGUvYXNtLWkzODYvZGV2cG9sbC5oCVdl ZCBEZWMgMzEgMTY6MDA6MDAgMTk2OQ0KKysrIGxpbnV4LTIuNC4wLWRldnBvbGwvaW5jbHVkZS9h c20taTM4Ni9kZXZwb2xsLmgJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtMCwwICsxLDg2 IEBADQorLyoNCisgKg0KKyAqIC9kZXYvcG9sbA0KKyAqIGJ5IE5pZWxzIFByb3ZvcyA8cHJvdm9z QGNpdGkudW1pY2guZWR1Pg0KKyAqDQorICogTGludXggMi4zLzIuNCBwb3J0IGJ5IE1pY2hhbCBP c3Ryb3dza2kNCisgKi8NCisNCisjaWZuZGVmIF9MSU5VWF9ERVZQT0xMX0gNCisjZGVmaW5lIF9M SU5VWF9ERVZQT0xMX0gNCisNCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPg0KKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+DQorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4NCisNCisjZGVmaW5lIERQSF9E SVJUWQkwCS8qIGVudHJ5IGlzIGRpcnR5IC0gYml0ICovDQorI2RlZmluZSBEUEhfQkFDS01BUAkx CS8qIGZpbGUgaGFzIGFuIGZkIGJhY2sgbWFwIC0gYml0Ki8NCisjaWZkZWYgX19LRVJORUxfXw0K K3N0cnVjdCBkcF9mZCB7DQorCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsNCisJc3RydWN0IHBvbGxm ZCBwZmQ7DQorCWludCBmbGFnczsJCS8qIGZvciBoaW50aW5nICovDQorfTsNCisNCisNCitzdHJ1 Y3QgZGV2cG9sbCB7DQorCXN0cnVjdCBsaXN0X2hlYWQgKmRwX3RhYjsNCisJaW50IGRwX2VudHJp ZXM7CQkvKiBFbnRyaWVzIGluIGhhc2ggdGFibGUgKi8NCisJaW50IGRwX21heDsJCS8qIHN0YXRp c3RpY3MgKi8NCisJaW50IGRwX2F2ZzsJCS8qIG1vcmUgKi8NCisJaW50IGRwX2NvdW50Ow0KKwlp bnQgZHBfY2FjaGVkOw0KKwlpbnQgZHBfY2FsbHM7DQorCWludCBkcF9idWNrZXRfYml0czsNCisJ aW50IGRwX2J1Y2tldF9tYXNrOw0KKwlpbnQgZHBfbmZkczsJCS8qIE51bWJlciBvZiBwb2xsIGZk cyAqLw0KKwl1X2NoYXIqICBkcF9tbWFwOwkvKiB2YWRkciBvZiBtYXBwZWQgcmVnaW9uICovDQor CWF0b21pY190IGRwX21tYXBwZWQ7CQkvKiBBcmUgd2UgbW1hcHBlZCAqLw0KKwlyd2xvY2tfdCBk cF9sb2NrOw0KKwl1X2NoYXIqKiBkcF9tZW12ZWM7CS8qIFBvaW50ZXIgdG8gcGFnZXMgYWxsb2Nh dGVkIGZvciBtbWFwICovDQorCWludCBkcF9udW12ZWM7CQkvKiBTaXplIG9mIGFib3ZlIGFycmF5 ICovDQorfTsNCisjZW5kaWYNCisvKiBNYXRjaCBzb2xhcmlzICovDQorDQorc3RydWN0IGR2cG9s bCB7DQorCXN0cnVjdCBwb2xsZmQgKiBkcF9mZHM7CS8qIExlYXZlIHRoaXMgWkVSTyBmb3IgbW1h cCAqLw0KKwlpbnQgZHBfbmZkczsNCisJaW50IGRwX3RpbWVvdXQ7DQorfTsNCisNCisNCisjZGVm aW5lIERFVlBPTExfTUlOT1IgICAgICAgMTI1ICAgLyogTWlub3IgZGV2aWNlICMgZm9yIC9kZXYv cG9sbCAqLw0KKw0KKw0KKyNkZWZpbmUgRFBfTU1BUF9TSVpFKHgpCSgoeCkgKiBzaXplb2Yoc3Ry dWN0IHBvbGxmZCkpDQorDQorI2RlZmluZSBEUF9BTExPQwlfSU9SKCdQJywgMSwgaW50KQ0KKyNk ZWZpbmUgRFBfUE9MTAkJX0lPV1IoJ1AnLCAyLCBzdHJ1Y3QgZHZwb2xsKQ0KKyNkZWZpbmUgRFBf RlJFRQkJX0lPKCdQJywgMykNCisjZGVmaW5lIERQX0lTUE9MTEVECV9JT1dSKCdQJywgNCwgc3Ry dWN0IHBvbGxmZCkNCisNCisjaWZkZWYgX19LRVJORUxfXw0KK2V4dGVybiByd2xvY2tfdCBkZXZw b2xsX2xvY2s7DQorLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLw0KKw0KK2V4dGVybiBpbmxpbmUg dm9pZA0KK2RwX2FkZF9oaW50KHN0cnVjdCBwb2xsX2JhY2ttYXAgKiogbWFwLCByd2xvY2tfdCAq bG9jaykNCit7DQorCXN0cnVjdCBwb2xsX2JhY2ttYXAgKmVudHJ5Ow0KKwlzdHJ1Y3QgZHBfZmQg KmRwZmQ7DQorCWlmICghbWFwKQ0KKwkJcmV0dXJuOw0KKw0KKwlyZWFkX2xvY2sobG9jayk7DQor CWVudHJ5ID0gKm1hcDsNCisJd2hpbGUgKGVudHJ5KSB7DQorCQlkcGZkID0gZW50cnktPmFyZzsN CisJCXNldF9iaXQoRFBIX0RJUlRZLCAmZHBmZC0+ZmxhZ3MpOwkvKiBhdG9taWMgKi8NCisJCWVu dHJ5ID0gZW50cnktPm5leHQ7DQorCX0NCisJcmVhZF91bmxvY2sobG9jayk7DQorfQ0KKyNlbmRp ZiAvKiBfX0tFUk5FTF9fICovDQorDQorI2VuZGlmDQpkaWZmIC11clAgbGludXgtMi40LjAvaW5j bHVkZS9hc20taTM4Ni9wb2xsLmggbGludXgtMi40LjAtZGV2cG9sbC9pbmNsdWRlL2FzbS1pMzg2 L3BvbGwuaA0KLS0tIGxpbnV4LTIuNC4wL2luY2x1ZGUvYXNtLWkzODYvcG9sbC5oCVRodSBKYW4g MjMgMTE6MDE6MjggMTk5Nw0KKysrIGxpbnV4LTIuNC4wLWRldnBvbGwvaW5jbHVkZS9hc20taTM4 Ni9wb2xsLmgJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtMTUsNiArMTUsOCBAQA0KICNk ZWZpbmUgUE9MTFdSTk9STQkweDAxMDANCiAjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwDQogI2Rl ZmluZSBQT0xMTVNHCQkweDA0MDANCisjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwDQorI2RlZmlu ZSBQT0xMSElOVAkweDIwMDANCiANCiBzdHJ1Y3QgcG9sbGZkIHsNCiAJaW50IGZkOw0KZGlmZiAt dXJQIGxpbnV4LTIuNC4wL2luY2x1ZGUvbGludXgvZGNhY2hlLmggbGludXgtMi40LjAtZGV2cG9s bC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oDQotLS0gbGludXgtMi40LjAvaW5jbHVkZS9saW51eC9k Y2FjaGUuaAlUaHUgSmFuICA0IDE0OjUwOjQ2IDIwMDENCisrKyBsaW51eC0yLjQuMC1kZXZwb2xs L2luY2x1ZGUvbGludXgvZGNhY2hlLmgJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtNiw2 ICs2LDggQEANCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPg0KICNpbmNsdWRlIDxsaW51eC9tb3Vu dC5oPg0KIA0KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+DQorDQogLyoNCiAgKiBsaW51eC9pbmNs dWRlL2xpbnV4L2RjYWNoZS5oDQogICoNCmRpZmYgLXVyUCBsaW51eC0yLjQuMC9pbmNsdWRlL2xp bnV4L2RldnBvbGwuaCBsaW51eC0yLjQuMC1kZXZwb2xsL2luY2x1ZGUvbGludXgvZGV2cG9sbC5o DQotLS0gbGludXgtMi40LjAvaW5jbHVkZS9saW51eC9kZXZwb2xsLmgJV2VkIERlYyAzMSAxNjow MDowMCAxOTY5DQorKysgbGludXgtMi40LjAtZGV2cG9sbC9pbmNsdWRlL2xpbnV4L2RldnBvbGwu aAlNb24gSmFuIDI5IDE2OjI0OjQyIDIwMDENCkBAIC0wLDAgKzEsODYgQEANCisvKg0KKyAqDQor ICogL2Rldi9wb2xsDQorICogYnkgTmllbHMgUHJvdm9zIDxwcm92b3NAY2l0aS51bWljaC5lZHU+ DQorICoNCisgKiBMaW51eCAyLjMvMi40IHBvcnQgYnkgTWljaGFsIE9zdHJvd3NraQ0KKyAqLw0K Kw0KKyNpZm5kZWYgX0xJTlVYX0RFVlBPTExfSA0KKyNkZWZpbmUgX0xJTlVYX0RFVlBPTExfSA0K Kw0KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisj aW5jbHVkZSA8YXNtL2F0b21pYy5oPg0KKw0KKyNkZWZpbmUgRFBIX0RJUlRZCTAJLyogZW50cnkg aXMgZGlydHkgLSBiaXQgKi8NCisjZGVmaW5lIERQSF9CQUNLTUFQCTEJLyogZmlsZSBoYXMgYW4g ZmQgYmFjayBtYXAgLSBiaXQqLw0KKyNpZmRlZiBfX0tFUk5FTF9fDQorc3RydWN0IGRwX2ZkIHsN CisJc3RydWN0IGxpc3RfaGVhZCBuZXh0Ow0KKwlzdHJ1Y3QgcG9sbGZkIHBmZDsNCisJaW50IGZs YWdzOwkJLyogZm9yIGhpbnRpbmcgKi8NCit9Ow0KKw0KKw0KK3N0cnVjdCBkZXZwb2xsIHsNCisJ c3RydWN0IGxpc3RfaGVhZCAqZHBfdGFiOw0KKwlpbnQgZHBfZW50cmllczsJCS8qIEVudHJpZXMg aW4gaGFzaCB0YWJsZSAqLw0KKwlpbnQgZHBfbWF4OwkJLyogc3RhdGlzdGljcyAqLw0KKwlpbnQg ZHBfYXZnOwkJLyogbW9yZSAqLw0KKwlpbnQgZHBfY291bnQ7DQorCWludCBkcF9jYWNoZWQ7DQor CWludCBkcF9jYWxsczsNCisJaW50IGRwX2J1Y2tldF9iaXRzOw0KKwlpbnQgZHBfYnVja2V0X21h c2s7DQorCWludCBkcF9uZmRzOwkJLyogTnVtYmVyIG9mIHBvbGwgZmRzICovDQorCXVfY2hhciog IGRwX21tYXA7CS8qIHZhZGRyIG9mIG1hcHBlZCByZWdpb24gKi8NCisJYXRvbWljX3QgZHBfbW1h cHBlZDsJCS8qIEFyZSB3ZSBtbWFwcGVkICovDQorCXJ3bG9ja190IGRwX2xvY2s7DQorCXVfY2hh cioqIGRwX21lbXZlYzsJLyogUG9pbnRlciB0byBwYWdlcyBhbGxvY2F0ZWQgZm9yIG1tYXAgKi8N CisJaW50IGRwX251bXZlYzsJCS8qIFNpemUgb2YgYWJvdmUgYXJyYXkgKi8NCit9Ow0KKyNlbmRp Zg0KKy8qIE1hdGNoIHNvbGFyaXMgKi8NCisNCitzdHJ1Y3QgZHZwb2xsIHsNCisJc3RydWN0IHBv bGxmZCAqIGRwX2ZkczsJLyogTGVhdmUgdGhpcyBaRVJPIGZvciBtbWFwICovDQorCWludCBkcF9u ZmRzOw0KKwlpbnQgZHBfdGltZW91dDsNCit9Ow0KKw0KKw0KKyNkZWZpbmUgREVWUE9MTF9NSU5P UiAgICAgICAxMjUgICAvKiBNaW5vciBkZXZpY2UgIyBmb3IgL2Rldi9wb2xsICovDQorDQorDQor I2RlZmluZSBEUF9NTUFQX1NJWkUoeCkJKCh4KSAqIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSkNCisN CisjZGVmaW5lIERQX0FMTE9DCV9JT1IoJ1AnLCAxLCBpbnQpDQorI2RlZmluZSBEUF9QT0xMCQlf SU9XUignUCcsIDIsIHN0cnVjdCBkdnBvbGwpDQorI2RlZmluZSBEUF9GUkVFCQlfSU8oJ1AnLCAz KQ0KKyNkZWZpbmUgRFBfSVNQT0xMRUQJX0lPV1IoJ1AnLCA0LCBzdHJ1Y3QgcG9sbGZkKQ0KKw0K KyNpZmRlZiBfX0tFUk5FTF9fDQorZXh0ZXJuIHJ3bG9ja190IGRldnBvbGxfbG9jazsNCisvKiBG dW5jdGlvbiBQcm90b3R5cGVzICovDQorDQorZXh0ZXJuIGlubGluZSB2b2lkDQorZHBfYWRkX2hp bnQoc3RydWN0IHBvbGxfYmFja21hcCAqKiBtYXAsIHJ3bG9ja190ICpsb2NrKQ0KK3sNCisJc3Ry dWN0IHBvbGxfYmFja21hcCAqZW50cnk7DQorCXN0cnVjdCBkcF9mZCAqZHBmZDsNCisJaWYgKCFt YXApDQorCQlyZXR1cm47DQorDQorCXJlYWRfbG9jayhsb2NrKTsNCisJZW50cnkgPSAqbWFwOw0K Kwl3aGlsZSAoZW50cnkpIHsNCisJCWRwZmQgPSBlbnRyeS0+YXJnOw0KKwkJc2V0X2JpdChEUEhf RElSVFksICZkcGZkLT5mbGFncyk7CS8qIGF0b21pYyAqLw0KKwkJZW50cnkgPSBlbnRyeS0+bmV4 dDsNCisJfQ0KKwlyZWFkX3VubG9jayhsb2NrKTsNCit9DQorI2VuZGlmIC8qIF9fS0VSTkVMX18g Ki8NCisNCisjZW5kaWYNCmRpZmYgLXVyUCBsaW51eC0yLjQuMC9pbmNsdWRlL2xpbnV4L2ZzLmgg bGludXgtMi40LjAtZGV2cG9sbC9pbmNsdWRlL2xpbnV4L2ZzLmgNCi0tLSBsaW51eC0yLjQuMC9p bmNsdWRlL2xpbnV4L2ZzLmgJVGh1IEphbiAgNCAxNDo1MDo0NyAyMDAxDQorKysgbGludXgtMi40 LjAtZGV2cG9sbC9pbmNsdWRlL2xpbnV4L2ZzLmgJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpA QCAtNTExLDYgKzUxMSwxMSBAQA0KIA0KIAl1bnNpZ25lZCBsb25nCQlmX3ZlcnNpb247DQogDQor DQorCS8qIHVzZWQgYnkgL2Rldi9wb2xsIGhpbnRpbmcgKi8NCisJc3RydWN0IHBvbGxfYmFja21h cAkqZl9iYWNrbWFwOw0KKwlyd2xvY2tfdAkJZl9kcGxvY2s7DQorDQogCS8qIG5lZWRlZCBmb3Ig dHR5IGRyaXZlciwgYW5kIG1heWJlIG90aGVycyAqLw0KIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsN CiB9Ow0KZGlmZiAtdXJQIGxpbnV4LTIuNC4wL2luY2x1ZGUvbGludXgvcG9sbC5oIGxpbnV4LTIu NC4wLWRldnBvbGwvaW5jbHVkZS9saW51eC9wb2xsLmgNCi0tLSBsaW51eC0yLjQuMC9pbmNsdWRl L2xpbnV4L3BvbGwuaAlUaHUgSmFuICA0IDE0OjUxOjEwIDIwMDENCisrKyBsaW51eC0yLjQuMC1k ZXZwb2xsL2luY2x1ZGUvbGludXgvcG9sbC5oCU1vbiBKYW4gMjkgMTg6MzE6MTIgMjAwMQ0KQEAg LTgsMTAgKzgsMTggQEANCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPg0KICNpbmNsdWRlIDxsaW51 eC9zdHJpbmcuaD4NCiAjaW5jbHVkZSA8bGludXgvbW0uaD4NCisjaW5jbHVkZSA8bGludXgvbWFs bG9jLmg+DQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogDQogc3RydWN0IHBvbGxfdGFibGVf cGFnZTsNCiANCitzdHJ1Y3QgcG9sbF9iYWNrbWFwIHsNCisJc3RydWN0IHBvbGxfYmFja21hcCAq bmV4dDsNCisJdm9pZCAqYXJnOwkJCS8qIHBvaW50ZXIgdG8gZGV2cG9sbCAqLw0KKwlzdHJ1Y3Qg ZmlsZXNfc3RydWN0ICpmaWxlczsJLyogZmlsZXMgd2hpY2ggaGFzIHRoaXMgZmlsZSBhcyAqLw0K KwlpbnQgZmQ7CQkJCS8qIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgZmQgKi8NCit9Ow0KKw0KIHR5 cGVkZWYgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0IHsNCiAJaW50IGVycm9yOw0KIAlzdHJ1Y3Qg cG9sbF90YWJsZV9wYWdlICogdGFibGU7DQpAQCAtODMsNyArOTEsODkgQEANCiAJbWVtc2V0KGZk c2V0LCAwLCBGRFNfQllURVMobnIpKTsNCiB9DQogDQorZXh0ZXJuIGlubGluZSB2b2lkDQorcG9s bF9iYWNrbWFwKGludCBmZCwgdm9pZCAqYXJnLCBzdHJ1Y3QgcG9sbF9iYWNrbWFwICoqIGVudHJ5 KQ0KK3sNCisJc3RydWN0IHBvbGxfYmFja21hcCAqdG1wOw0KKw0KKwlpZiAoIWVudHJ5KQ0KKwkJ cmV0dXJuOw0KKw0KKwkvKg0KKwkgKiBTZWUgaWYgd2UgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgYmFj a21hcCBhbHJlYWR5LCBpbiBnZW5lcmFsDQorCSAqIHdlIGV4cGVjdCB0aGlzIGxpbmtlZCBsaXN0 IHRvIGJlIHZlcnkgc2hvcnQuDQorCSAqLw0KKwl0bXAgPSAqZW50cnk7DQorCXdoaWxlICh0bXAg IT0gTlVMTCkgew0KKwkJaWYgKHRtcC0+ZmlsZXMgPT0gY3VycmVudC0+ZmlsZXMgJiYgdG1wLT5m ZCA9PSBmZCAmJg0KKwkJICAgIGFyZz09dG1wLT5hcmcpDQorCQkJcmV0dXJuOw0KKwkJdG1wID0g dG1wLT5uZXh0Ow0KKwl9DQorDQorCXRtcCA9IChzdHJ1Y3QgcG9sbF9iYWNrbWFwICopIGttYWxs b2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOw0KKwlpZiAodG1wID09IE5VTEwpDQorCQly ZXR1cm47DQorDQorCXRtcC0+YXJnID0gYXJnOw0KKwl0bXAtPmZpbGVzID0gY3VycmVudC0+Zmls ZXM7DQorCXRtcC0+ZmQgPSBmZDsNCisJdG1wLT5uZXh0ID0gKmVudHJ5Ow0KKw0KKwkqZW50cnkg PSB0bXA7DQorfQ0KKw0KK2V4dGVybiBpbmxpbmUgdm9pZCBwb2xsX3JlbW92ZV9iYWNrbWFwKHN0 cnVjdCBwb2xsX2JhY2ttYXAgKiptYXAsIGludCBmZCwNCisJCQkJICAgICAgIHN0cnVjdCBmaWxl c19zdHJ1Y3QgKmZpbGVzKQ0KK3sNCisJc3RydWN0IHBvbGxfYmFja21hcCAqdG1wID0gKm1hcCwg Km9sZCA9IE5VTEw7DQorCQ0KKwl3aGlsZSAodG1wICE9IE5VTEwpIHsNCisJCWlmICh0bXAtPmZp bGVzID09IGZpbGVzICYmIHRtcC0+ZmQgPT0gZmQpew0KKwkJCXN0cnVjdCBwb2xsX2JhY2ttYXAg Km5leHQgPSB0bXAtPm5leHQ7DQorCQkJaWYoIG9sZD09TlVMTCApDQorCQkJCSptYXAgPSBuZXh0 Ow0KKwkJCWVsc2UNCisJCQkJb2xkLT5uZXh0ID0gbmV4dDsNCisJCQlrZnJlZSh0bXApOw0KKwkJ CXRtcCA9IG5leHQ7DQorCQl9ZWxzZXsNCisJCQlvbGQgPSB0bXA7DQorCQkJdG1wID0gdG1wLT5u ZXh0Ow0KKwkJfQ0KKwl9DQorCQ0KKwlpZiAoIXRtcCkNCisJCXJldHVybjsNCisNCisJaWYgKG9s ZCA9PSBOVUxMKQ0KKwkJKm1hcCA9IHRtcC0+bmV4dDsNCisJZWxzZQ0KKwkJb2xkLT5uZXh0ID0g dG1wLT5uZXh0Ow0KKw0KKwlrZnJlZSAodG1wKTsNCit9DQorDQorZXh0ZXJuIGlubGluZSB2b2lk IHBvbGxfY2xlYW5fYmFja21hcChzdHJ1Y3QgcG9sbF9iYWNrbWFwICoqbWFwKQ0KK3sNCisJc3Ry dWN0IHBvbGxfYmFja21hcCAqdG1wID0gKm1hcCwgKm9sZDsNCisNCisJcHJpbnRrKCJwb2xsX2Ns ZWFuX2JhY2ttYXA6IG1hcCAlcFxuIiwgbWFwKTsNCisJcHJpbnRrKCJwb2xsX2NsZWFuX2JhY2tt YXA6ICptYXAgJXBcbiIsICptYXApOw0KKw0KKwl3aGlsZSAodG1wKSB7DQorCSAgcHJpbnRrKCJw b2xsX2NsZWFuX2JhY2ttYXA6IHRtcCAlcFxuIiwgdG1wKTsNCisJCW9sZCA9IHRtcDsNCisJCXRt cCA9IHRtcC0+bmV4dDsNCisJCWtmcmVlIChvbGQpOw0KKwl9DQorDQorCSptYXAgPSBOVUxMOw0K K30NCisNCiBleHRlcm4gaW50IGRvX3NlbGVjdChpbnQgbiwgZmRfc2V0X2JpdHMgKmZkcywgbG9u ZyAqdGltZW91dCk7DQorDQorZXh0ZXJuIHZvaWQgcG9sbF9mcmVld2FpdChwb2xsX3RhYmxlICpw KTsNCiANCiAjZW5kaWYgLyogS0VSTkVMICovDQogDQpkaWZmIC11clAgbGludXgtMi40LjAvaW5j bHVkZS9uZXQvc29jay5oIGxpbnV4LTIuNC4wLWRldnBvbGwvaW5jbHVkZS9uZXQvc29jay5oDQot LS0gbGludXgtMi40LjAvaW5jbHVkZS9uZXQvc29jay5oCVRodSBKYW4gIDQgMTQ6NTE6MjEgMjAw MQ0KKysrIGxpbnV4LTIuNC4wLWRldnBvbGwvaW5jbHVkZS9uZXQvc29jay5oCU1vbiBKYW4gMjkg MTg6MzE6MTIgMjAwMQ0KQEAgLTY1NSw2ICs2NTUsMTAgQEANCiAJLyogSWRlbnRkIGFuZCByZXBv cnRpbmcgSU8gc2lnbmFscyAqLw0KIAlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0Ow0KIA0KKwkvKiBG b3IgUG9sbCBoaW50aW5nICovDQorCXZvaWQgCQkJKmJhY2ttYXA7DQorCXZvaWQJCQkqZHBsb2Nr Ow0KKw0KIAkvKiBSUEMgbGF5ZXIgcHJpdmF0ZSBkYXRhICovDQogCXZvaWQJCQkqdXNlcl9kYXRh Ow0KICAgDQpkaWZmIC11clAgbGludXgtMi40LjAvbGliL2RlY19hbmRfbG9jay5jIGxpbnV4LTIu NC4wLWRldnBvbGwvbGliL2RlY19hbmRfbG9jay5jDQotLS0gbGludXgtMi40LjAvbGliL2RlY19h bmRfbG9jay5jCUZyaSBKdWwgIDcgMTY6MjI6NDggMjAwMA0KKysrIGxpbnV4LTIuNC4wLWRldnBv bGwvbGliL2RlY19hbmRfbG9jay5jCU1vbiBKYW4gMjkgMTY6MjQ6NDIgMjAwMQ0KQEAgLTEsNSAr MSw2IEBADQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQogI2luY2x1ZGUgPGFzbS9hdG9t aWMuaD4NCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPg0KIA0KIC8qDQogICogVGhpcyBpcyBhbiBh cmNoaXRlY3R1cmUtbmV1dHJhbCwgYnV0IHNsb3csDQpkaWZmIC11clAgbGludXgtMi40LjAvbmV0 L2F0bS9jb21tb24uYyBsaW51eC0yLjQuMC1kZXZwb2xsL25ldC9hdG0vY29tbW9uLmMNCi0tLSBs aW51eC0yLjQuMC9uZXQvYXRtL2NvbW1vbi5jCU1vbiBKYW4gIDEgMDk6NTQ6MDcgMjAwMQ0KKysr IGxpbnV4LTIuNC4wLWRldnBvbGwvbmV0L2F0bS9jb21tb24uYwlNb24gSmFuIDI5IDE2OjI0OjQy IDIwMDENCkBAIC00ODEsNyArNDgxLDEwIEBADQogDQogCXZjYyA9IEFUTV9TRChzb2NrKTsNCiAJ cG9sbF93YWl0KGZpbGUsJnZjYy0+c2xlZXAsd2FpdCk7DQotCW1hc2sgPSAwOw0KKwlzay0+YmFj a21hcCA9ICZmaWxlLT5mX2JhY2ttYXA7DQorCXNrLT5kcGxvY2sgID0gJmZpbGUtPmZfZHBsb2Nr Ow0KKwltYXNrID0gUE9MTEhJTlQ7DQorDQogCWlmIChza2JfcGVlaygmdmNjLT5yZWN2cSkgfHwg c2tiX3BlZWsoJnZjYy0+bGlzdGVucSkpDQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07 DQogCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpIHx8DQpkaWZmIC11 clAgbGludXgtMi40LjAvbmV0L2NvcmUvc29jay5jIGxpbnV4LTIuNC4wLWRldnBvbGwvbmV0L2Nv cmUvc29jay5jDQotLS0gbGludXgtMi40LjAvbmV0L2NvcmUvc29jay5jCUZyaSBEZWMgMjkgMTQ6 MDc6MjQgMjAwMA0KKysrIGxpbnV4LTIuNC4wLWRldnBvbGwvbmV0L2NvcmUvc29jay5jCU1vbiBK YW4gMjkgMTY6MjQ6NDIgMjAwMQ0KQEAgLTExMjgsNiArMTEyOCw4IEBADQogCXNrLT5zdGF0ZSAJ PSAJVENQX0NMT1NFOw0KIAlzay0+emFwcGVkCT0JMTsNCiAJc2stPnNvY2tldAk9CXNvY2s7DQor CXNrLT5iYWNrbWFwCT0JTlVMTDsNCisJc2stPmRwbG9jawk9CU5VTEw7DQogDQogCWlmKHNvY2sp DQogCXsNCmRpZmYgLXVyUCBsaW51eC0yLjQuMC9uZXQvaXB2NC9hZl9pbmV0LmMgbGludXgtMi40 LjAtZGV2cG9sbC9uZXQvaXB2NC9hZl9pbmV0LmMNCi0tLSBsaW51eC0yLjQuMC9uZXQvaXB2NC9h Zl9pbmV0LmMJRnJpIERlYyAyOSAxNDowNzoyNCAyMDAwDQorKysgbGludXgtMi40LjAtZGV2cG9s bC9uZXQvaXB2NC9hZl9pbmV0LmMJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtNDQyLDYg KzQ0Miw3IEBADQogCQlpZiAoc2stPmxpbmdlciAmJiAhKGN1cnJlbnQtPmZsYWdzICYgUEZfRVhJ VElORykpDQogCQkJdGltZW91dCA9IHNrLT5saW5nZXJ0aW1lOw0KIAkJc29jay0+c2sgPSBOVUxM Ow0KKwkJc2stPmJhY2ttYXAgPSBOVUxMOw0KIAkJc2stPnByb3QtPmNsb3NlKHNrLCB0aW1lb3V0 KTsNCiAJfQ0KIAlyZXR1cm4oMCk7DQpkaWZmIC11clAgbGludXgtMi40LjAvbmV0L2lwdjQvdGNw LmMgbGludXgtMi40LjAtZGV2cG9sbC9uZXQvaXB2NC90Y3AuYw0KLS0tIGxpbnV4LTIuNC4wL25l dC9pcHY0L3RjcC5jCVR1ZSBOb3YgMjggMjE6NTM6NDUgMjAwMA0KKysrIGxpbnV4LTIuNC4wLWRl dnBvbGwvbmV0L2lwdjQvdGNwLmMJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtNDE4LDYg KzQxOCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQogI2luY2x1ZGUgPGxpbnV4L2Zj bnRsLmg+DQogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4NCisjaW5jbHVkZSA8bGludXgvZGV2cG9s bC5oPg0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2Nr Lmg+DQogDQpAQCAtNTQ4LDE1ICs1NDksMTcgQEANCiAJc3RydWN0IHRjcF9vcHQgKnRwID0gJihz ay0+dHBfcGluZm8uYWZfdGNwKTsNCiANCiAJcG9sbF93YWl0KGZpbGUsIHNrLT5zbGVlcCwgd2Fp dCk7DQorCXNrLT5iYWNrbWFwID0gJmZpbGUtPmZfYmFja21hcDsNCisJc2stPmRwbG9jayAgPSAm ZmlsZS0+Zl9kcGxvY2s7DQogCWlmIChzay0+c3RhdGUgPT0gVENQX0xJU1RFTikNCi0JCXJldHVy biB0Y3BfbGlzdGVuX3BvbGwoc2ssIHdhaXQpOw0KKwkJcmV0dXJuIHRjcF9saXN0ZW5fcG9sbChz aywgd2FpdCkgfCBQT0xMSElOVDsNCiANCiAJLyogU29ja2V0IGlzIG5vdCBsb2NrZWQuIFdlIGFy ZSBwcm90ZWN0ZWQgZnJvbSBhc3luYyBldmVudHMNCiAJICAgYnkgcG9sbCBsb2dpYyBhbmQgY29y cmVjdCBoYW5kbGluZyBvZiBzdGF0ZSBjaGFuZ2VzDQogCSAgIG1hZGUgYnkgYW5vdGhlciB0aHJl YWRzIGlzIGltcG9zc2libGUgaW4gYW55IGNhc2UuDQogCSAqLw0KIA0KLQltYXNrID0gMDsNCisJ bWFzayA9IFBPTExISU5UOw0KIAlpZiAoc2stPmVycikNCiAJCW1hc2sgPSBQT0xMRVJSOw0KIA0K QEAgLTYyMiw3ICs2MjUsNyBAQA0KIAkJaWYgKHRwLT51cmdfZGF0YSAmIFRDUF9VUkdfVkFMSUQp DQogCQkJbWFzayB8PSBQT0xMUFJJOw0KIAl9DQotCXJldHVybiBtYXNrOw0KKwlyZXR1cm4gbWFz ayB8IFBPTExISU5UOw0KIH0NCiANCiAvKg0KZGlmZiAtdXJQIGxpbnV4LTIuNC4wL25ldC9pcHY0 L3RjcF9pbnB1dC5jIGxpbnV4LTIuNC4wLWRldnBvbGwvbmV0L2lwdjQvdGNwX2lucHV0LmMNCi0t LSBsaW51eC0yLjQuMC9uZXQvaXB2NC90Y3BfaW5wdXQuYwlGcmkgRGVjIDI5IDE0OjA3OjI0IDIw MDANCisrKyBsaW51eC0yLjQuMC1kZXZwb2xsL25ldC9pcHY0L3RjcF9pbnB1dC5jCU1vbiBKYW4g MjkgMTg6MzY6MTIgMjAwMQ0KQEAgLTY4LDYgKzY4LDcgQEANCiAjaW5jbHVkZSA8bmV0L3RjcC5o Pg0KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4NCiAjaW5jbHVkZSA8bGludXgvaXBzZWMu aD4NCisjaW5jbHVkZSA8bGludXgvZGV2cG9sbC5oPg0KIA0KIA0KIC8qIFRoZXNlIGFyZSBvbiBi eSBkZWZhdWx0IHNvIHRoZSBjb2RlIHBhdGhzIGdldCB0ZXN0ZWQuDQpAQCAtMjkxMiw4ICsyOTEz LDEwIEBADQogDQogCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOw0KIA0K LQkJaWYgKHNrLT5zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5zbGVlcCkpDQorCQlpZiAo c2stPnNsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNsZWVwKSkgew0KKwkJCWRwX2FkZF9o aW50KHNrLT5iYWNrbWFwLCBzay0+ZHBsb2NrKTsNCiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUo c2stPnNsZWVwKTsNCisJCX0NCiANCiAJCWlmIChzb2NrLT5mYXN5bmNfbGlzdCAmJiAhKHNrLT5z aHV0ZG93biZTRU5EX1NIVVRET1dOKSkNCiAJCQlzb2NrX3dha2VfYXN5bmMoc29jaywgMiwgUE9M TF9PVVQpOw0KZGlmZiAtdXJQIGxpbnV4LTIuNC4wL25ldC9pcHgvYWZfc3B4LmMgbGludXgtMi40 LjAtZGV2cG9sbC9uZXQvaXB4L2FmX3NweC5jDQotLS0gbGludXgtMi40LjAvbmV0L2lweC9hZl9z cHguYwlTdW4gQXVnICA2IDIyOjIwOjA5IDIwMDANCisrKyBsaW51eC0yLjQuMC1kZXZwb2xsL25l dC9pcHgvYWZfc3B4LmMJTW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtNjYsNyArNjYsMTAg QEANCiAJdW5zaWduZWQgaW50IG1hc2s7DQogDQogCXBvbGxfd2FpdChmaWxlLCBzay0+c2xlZXAs IHdhaXQpOw0KLQltYXNrID0gMDsNCisJc2stPmJhY2ttYXAgPSAmZmlsZS0+Zl9iYWNrbWFwOw0K KyAgICAgICAgc2stPmRwbG9jayAgPSAmZmlsZS0+Zl9kcGxvY2s7DQorDQorCW1hc2sgPSBQT0xM SElOVDsNCiANCiAJLyogZXhjZXB0aW9uYWwgZXZlbnRzPyAqLw0KIAlpZiAoc2stPmVyciB8fCAh c2tiX3F1ZXVlX2VtcHR5KCZzay0+ZXJyb3JfcXVldWUpKQ0KZGlmZiAtdXJQIGxpbnV4LTIuNC4w L25ldC9pcmRhL2FmX2lyZGEuYyBsaW51eC0yLjQuMC1kZXZwb2xsL25ldC9pcmRhL2FmX2lyZGEu Yw0KLS0tIGxpbnV4LTIuNC4wL25ldC9pcmRhL2FmX2lyZGEuYwlTYXQgTm92IDExIDE4OjExOjIz IDIwMDANCisrKyBsaW51eC0yLjQuMC1kZXZwb2xsL25ldC9pcmRhL2FmX2lyZGEuYwlNb24gSmFu IDI5IDE2OjI0OjQyIDIwMDENCkBAIC0xNjM3LDcgKzE2MzcsOSBAQA0KIAlJUkRBX0RFQlVHKDQs IF9fRlVOQ1RJT05fXyAiKClcbiIpOw0KIA0KIAlwb2xsX3dhaXQoZmlsZSwgc2stPnNsZWVwLCB3 YWl0KTsNCi0JbWFzayA9IDA7DQorCXNrLT5iYWNrbWFwID0gJmZpbGUtPmZfYmFja21hcDsNCisJ c2stPmRwbG9jayAgPSAmZmlsZS0+Zl9kcGxvY2s7DQorCW1hc2sgPSBQT0xMSElOVDsNCiANCiAJ LyogZXhjZXB0aW9uYWwgZXZlbnRzPyAqLw0KIAlpZiAoc2stPmVycikNCmRpZmYgLXVyUCBsaW51 eC0yLjQuMC9uZXQvdW5peC9hZl91bml4LmMgbGludXgtMi40LjAtZGV2cG9sbC9uZXQvdW5peC9h Zl91bml4LmMNCi0tLSBsaW51eC0yLjQuMC9uZXQvdW5peC9hZl91bml4LmMJU2F0IE5vdiAxMSAx OTowMjo0MSAyMDAwDQorKysgbGludXgtMi40LjAtZGV2cG9sbC9uZXQvdW5peC9hZl91bml4LmMJ TW9uIEphbiAyOSAxNjoyNDo0MiAyMDAxDQpAQCAtMTA3LDYgKzEwNyw3IEBADQogI2luY2x1ZGUg PG5ldC9zY20uaD4NCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KICNpbmNsdWRlIDxsaW51eC9w b2xsLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RldnBvbGwuaD4NCiAjaW5jbHVkZSA8bGludXgvc21w X2xvY2suaD4NCiANCiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+DQpAQCAtMzAwLDggKzMwMSwx MCBAQA0KIHsNCiAJcmVhZF9sb2NrKCZzay0+Y2FsbGJhY2tfbG9jayk7DQogCWlmICh1bml4X3dy aXRhYmxlKHNrKSkgew0KLQkJaWYgKHNrLT5zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5z bGVlcCkpDQorCQlpZiAoc2stPnNsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNsZWVwKSkg ew0KKwkJCWRwX2FkZF9oaW50KHNrLT5iYWNrbWFwLCBzay0+ZHBsb2NrKTsNCiAJCQl3YWtlX3Vw X2ludGVycnVwdGlibGUoc2stPnNsZWVwKTsNCisJCX0NCiAJCXNrX3dha2VfYXN5bmMoc2ssIDIs IFBPTExfT1VUKTsNCiAJfQ0KIAlyZWFkX3VubG9jaygmc2stPmNhbGxiYWNrX2xvY2spOw0KQEAg LTE3MDgsNyArMTcxMSwxMCBAQA0KIAl1bnNpZ25lZCBpbnQgbWFzazsNCiANCiAJcG9sbF93YWl0 KGZpbGUsIHNrLT5zbGVlcCwgd2FpdCk7DQotCW1hc2sgPSAwOw0KKwkNCisJc2stPmJhY2ttYXAg PSAmZmlsZS0+Zl9iYWNrbWFwOw0KKwlzay0+ZHBsb2NrID0gJmZpbGUtPmZfZHBsb2NrOw0KKwlt YXNrID0gUE9MTEhJTlQ7DQogDQogCS8qIGV4Y2VwdGlvbmFsIGV2ZW50cz8gKi8NCiAJaWYgKHNr LT5lcnIpDQo=

--Boundary-=_XrJmOWFrxsjyBldbEFSArCBynEcd-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/