From owner-freebsd-net@FreeBSD.ORG Sat Sep 11 03:05:26 2010 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E6E41065673 for ; Sat, 11 Sep 2010 03:05:26 +0000 (UTC) (envelope-from if@xip.at) Received: from chile.gbit.at (ns1.xip.at [193.239.188.99]) by mx1.freebsd.org (Postfix) with ESMTP id 63E8D8FC1B for ; Sat, 11 Sep 2010 03:05:24 +0000 (UTC) Received: (qmail 4069 invoked from network); 11 Sep 2010 05:05:21 +0200 Received: from unknown (HELO filebunker.xip.at) (86.59.10.180) by chile.gbit.at with (DHE-RSA-AES256-SHA encrypted) SMTP; 11 Sep 2010 05:05:21 +0200 Date: Sat, 11 Sep 2010 05:05:20 +0200 (CEST) From: Ingo Flaschberger To: "Li, Qing" In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="168430090-52481847-1284174321=:5369" Cc: Qing Li , net@freebsd.org Subject: RE: funny ECMP X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Sep 2010 03:05:26 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --168430090-52481847-1284174321=:5369 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Dear Li, attached latest version of ecmp patch. Kind regards, Ingo Flaschberger --168430090-52481847-1284174321=:5369 Content-Type: TEXT/plain; name=mpath_patch_if_v3.txt Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=mpath_patch_if_v3.txt ZGlmZiAtciAtdSAvdXNyX2RpZmYvc3JjL3N5cy9jb250cmliL2lwZmlsdGVy L25ldGluZXQvaXBfcG9vbC5jIC91c3Ivc3JjL3N5cy9jb250cmliL2lwZmls dGVyL25ldGluZXQvaXBfcG9vbC5jDQotLS0gL3Vzcl9kaWZmL3NyYy9zeXMv Y29udHJpYi9pcGZpbHRlci9uZXRpbmV0L2lwX3Bvb2wuYwkyMDA3LTEwLTE4 IDIxOjQyOjM4LjAwMDAwMDAwMCArMDAwMA0KKysrIC91c3Ivc3JjL3N5cy9j b250cmliL2lwZmlsdGVyL25ldGluZXQvaXBfcG9vbC5jCTIwMTAtMDktMDYg MTE6MjI6MzkuMDAwMDAwMDAwICswMDAwDQpAQCAtNjIwLDcgKzYyMCw3IEBA DQogDQogCVJBRElYX05PREVfSEVBRF9MT0NLKGlwby0+aXBvX2hlYWQpOw0K IAlpcG8tPmlwb19oZWFkLT5ybmhfZGVsYWRkcigmaXBlLT5pcG5fYWRkciwg JmlwZS0+aXBuX21hc2ssDQotCQkJCSAgIGlwby0+aXBvX2hlYWQpOw0KKwkJ CQkgICBpcG8tPmlwb19oZWFkLCBOVUxMKTsNCiAJUkFESVhfTk9ERV9IRUFE X1VOTE9DSyhpcG8tPmlwb19oZWFkKTsNCiANCiAJaXBfcG9vbF9ub2RlX2Rl cmVmKGlwZSk7DQpAQCAtNzUxLDcgKzc1MSw3IEBADQogCVJBRElYX05PREVf SEVBRF9MT0NLKGlwby0+aXBvX2hlYWQpOw0KIAl3aGlsZSAoKG4gPSBpcG8t Pmlwb19saXN0KSAhPSBOVUxMKSB7DQogCQlpcG8tPmlwb19oZWFkLT5ybmhf ZGVsYWRkcigmbi0+aXBuX2FkZHIsICZuLT5pcG5fbWFzaywNCi0JCQkJCSAg IGlwby0+aXBvX2hlYWQpOw0KKwkJCQkJICAgaXBvLT5pcG9faGVhZCwgTlVM TCk7DQogDQogCQkqbi0+aXBuX3BuZXh0ID0gbi0+aXBuX25leHQ7DQogCQlp ZiAobi0+aXBuX25leHQpDQpAQCAtOTYzLDcgKzk2Myw3IEBADQogCXN0cnVj dCByYWRpeF9ub2RlX2hlYWQgKnJuaCA9IHA7DQogCXN0cnVjdCByYWRpeF9u b2RlICpkOw0KIA0KLQlkID0gcm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXks IE5VTEwsIHJuaCk7DQorCWQgPSBybmgtPnJuaF9kZWxhZGRyKG4tPnJuX2tl eSwgTlVMTCwgcm5oLCBOVUxMKTsNCiAJaWYgKGQgIT0gTlVMTCkgew0KIAkJ RnJlZVMoZCwgbWF4X2tleWxlbiArIDIgKiBzaXplb2YgKCpkKSk7DQogCX0N CmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9zeXMvY29udHJpYi9wZi9uZXQv cGYuYyAvdXNyL3NyYy9zeXMvY29udHJpYi9wZi9uZXQvcGYuYw0KLS0tIC91 c3JfZGlmZi9zcmMvc3lzL2NvbnRyaWIvcGYvbmV0L3BmLmMJMjAxMC0wMS0y MyAwMDozMjoxOS4wMDAwMDAwMDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMv Y29udHJpYi9wZi9uZXQvcGYuYwkyMDEwLTA5LTA2IDExOjIyOjM5LjAwMDAw MDAwMCArMDAwMA0KQEAgLTk5LDkgKzk5LDcgQEANCiAjaW5jbHVkZSA8bmV0 L2lmX3R5cGVzLmg+DQogI2luY2x1ZGUgPG5ldC9icGYuaD4NCiAjaW5jbHVk ZSA8bmV0L3JvdXRlLmg+DQotI2lmbmRlZiBfX0ZyZWVCU0RfXw0KICNpbmNs dWRlIDxuZXQvcmFkaXhfbXBhdGguaD4NCi0jZW5kaWYNCiANCiAjaW5jbHVk ZSA8bmV0aW5ldC9pbi5oPg0KICNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5o Pg0KQEAgLTYxNjYsOSArNjE2NCw5IEBADQogCQkJaWYgKGtpZi0+cGZpa19p ZnAgPT0gaWZwKQ0KIAkJCQlyZXQgPSAxOw0KICNpZmRlZiBfX0ZyZWVCU0Rf XyAvKiBNVUxUSVBBVEhfUk9VVElORyAqLw0KLQkJCXJuID0gTlVMTDsNCisJ CQlybiA9IHJuX21wYXRoX25leHQocm4pOyAvKiBYWFggd2FzIGJlZm9yZTog cm4gPSBOVUxMOyAqLw0KICNlbHNlDQotCQkJcm4gPSBybl9tcGF0aF9uZXh0 KHJuKTsNCisJCQlybiA9IHJuX21wYXRoX25leHQocm4sIDApOw0KICNlbmRp Zg0KIAkJfSB3aGlsZSAoY2hlY2tfbXBhdGggPT0gMSAmJiBybiAhPSBOVUxM ICYmIHJldCA9PSAwKTsNCiAJfSBlbHNlDQpkaWZmIC1yIC11IC91c3JfZGlm Zi9zcmMvc3lzL2NvbnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMgL3Vzci9zcmMv c3lzL2NvbnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMNCi0tLSAvdXNyX2RpZmYv c3JjL3N5cy9jb250cmliL3BmL25ldC9wZl90YWJsZS5jCTIwMDktMDgtMDMg MDg6MTM6MDYuMDAwMDAwMDAwICswMDAwDQorKysgL3Vzci9zcmMvc3lzL2Nv bnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMJMjAxMC0wOS0wNiAxMToyMjozOS4w MDAwMDAwMDAgKzAwMDANCkBAIC0xMTE0LDE3ICsxMTE0LDkgQEANCiAjZW5k aWYNCiAJaWYgKEtFTlRSWV9ORVRXT1JLKGtlKSkgew0KIAkJcGZyX3ByZXBh cmVfbmV0d29yaygmbWFzaywga2UtPnBmcmtlX2FmLCBrZS0+cGZya2VfbmV0 KTsNCi0jaWZkZWYgX19GcmVlQlNEX18NCi0JCXJuID0gcm5fZGVsZXRlKCZr ZS0+cGZya2Vfc2EsICZtYXNrLCBoZWFkKTsNCi0jZWxzZQ0KIAkJcm4gPSBy bl9kZWxldGUoJmtlLT5wZnJrZV9zYSwgJm1hc2ssIGhlYWQsIE5VTEwpOw0K LSNlbmRpZg0KIAl9IGVsc2UNCi0jaWZkZWYgX19GcmVlQlNEX18NCi0JCXJu ID0gcm5fZGVsZXRlKCZrZS0+cGZya2Vfc2EsIE5VTEwsIGhlYWQpOw0KLSNl bHNlDQogCQlybiA9IHJuX2RlbGV0ZSgma2UtPnBmcmtlX3NhLCBOVUxMLCBo ZWFkLCBOVUxMKTsNCi0jZW5kaWYNCiAJc3BseChzKTsNCiANCiAJaWYgKHJu ID09IE5VTEwpIHsNCmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9zeXMvbmV0 L3JhZGl4LmMgL3Vzci9zcmMvc3lzL25ldC9yYWRpeC5jDQotLS0gL3Vzcl9k aWZmL3NyYy9zeXMvbmV0L3JhZGl4LmMJMjAxMC0wNC0wMiAwNTowMjo1MC4w MDAwMDAwMDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMvbmV0L3JhZGl4LmMJ MjAxMC0wOS0xMSAwMTozOTo0MC4wMDAwMDAwMDAgKzAwMDANCkBAIC02MTQs NyArNjE0LDcgQEANCiAJc3RydWN0IHJhZGl4X25vZGUgdHJlZW5vZGVzWzJd Ow0KIHsNCiAJY2FkZHJfdCB2ID0gKGNhZGRyX3Qpdl9hcmcsIG5ldG1hc2sg PSAoY2FkZHJfdCluX2FyZzsNCi0JcmVnaXN0ZXIgc3RydWN0IHJhZGl4X25v ZGUgKnQsICp4ID0gMCwgKnR0Ow0KKwlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhf bm9kZSAqdCwgKnggPSAwLCAqeHggPSAwLCAqdHQ7DQogCXN0cnVjdCByYWRp eF9ub2RlICpzYXZlZF90dCwgKnRvcCA9IGhlYWQtPnJuaF90cmVldG9wOw0K IAlzaG9ydCBiID0gMCwgYl9sZWFmID0gMDsNCiAJaW50IGtleWR1cGxpY2F0 ZWQ7DQpAQCAtNzIzLDEyICs3MjMsMTkgQEANCiAJCXggPSB0LT5ybl9yaWdo dDsNCiAJLyogUHJvbW90ZSBnZW5lcmFsIHJvdXRlcyBmcm9tIGJlbG93ICov DQogCWlmICh4LT5ybl9iaXQgPCAwKSB7DQotCSAgICBmb3IgKG1wID0gJnQt PnJuX21rbGlzdDsgeDsgeCA9IHgtPnJuX2R1cGVka2V5KQ0KKwkgICAgZm9y IChtcCA9ICZ0LT5ybl9ta2xpc3Q7IHg7IHh4ID0geCwgeCA9IHgtPnJuX2R1 cGVka2V5KSB7DQorCQlpZiAoeHggJiYgeHgtPnJuX21rbGlzdCAmJiB4eC0+ cm5fbWFzayA9PSB4LT5ybl9tYXNrICYmDQorCQkJCXgtPnJuX21rbGlzdCA9 PSAwKSB7DQorCQkJLyogbXVsdGlwYXRoIHJvdXRlLCBidW1wIHJlZmNvdW50 IG9uIGZpcnN0IG1rbGlzdCAqLw0KKwkJCXgtPnJuX21rbGlzdCA9IHh4LT5y bl9ta2xpc3Q7DQorCQkJeC0+cm5fbWtsaXN0LT5ybV9yZWZzKys7DQorCQl9 DQogCQlpZiAoeC0+cm5fbWFzayAmJiAoeC0+cm5fYml0ID49IGJfbGVhZikg JiYgeC0+cm5fbWtsaXN0ID09IDApIHsNCiAJCQkqbXAgPSBtID0gcm5fbmV3 X3JhZGl4X21hc2soeCwgMCk7DQogCQkJaWYgKG0pDQogCQkJCW1wID0gJm0t PnJtX21rbGlzdDsNCiAJCX0NCisJICAgIH0NCiAJfSBlbHNlIGlmICh4LT5y bl9ta2xpc3QpIHsNCiAJCS8qDQogCQkgKiBTa2lwIG92ZXIgbWFza3Mgd2hv c2UgaW5kZXggaXMgPiB0aGF0IG9mIG5ldyBub2RlDQpAQCAtNzYwLDExICs3 NjcsMzAgQEANCiAJCQlicmVhazsNCiAJCWlmIChtLT5ybV9mbGFncyAmIFJO Rl9OT1JNQUwpIHsNCiAJCQltbWFzayA9IG0tPnJtX2xlYWYtPnJuX21hc2s7 DQotCQkJaWYgKHR0LT5ybl9mbGFncyAmIFJORl9OT1JNQUwpIHsNCi0jaWYg IWRlZmluZWQoUkFESVhfTVBBVEgpDQotCQkJICAgIGxvZyhMT0dfRVJSLA0K LQkJCSAgICAgICAgIk5vbi11bmlxdWUgbm9ybWFsIHJvdXRlLCBtYXNrIG5v dCBlbnRlcmVkXG4iKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo a2V5ZHVwbGljYXRlZCkgew0KKwkJCQlpZiAobS0+cm1fbGVhZi0+cm5fcGFy ZW50ID09IHR0KQ0KKwkJCQkJLyogbmV3IHJvdXRlIGlzIGJldHR0ZXIgKi8N CisJCQkJCW0tPnJtX2xlYWYgPSB0dDsNCisjaWZkZWYgRElBR05PU1RJQw0K KwkJCQllbHNlIHsNCisJCQkJCWZvciAodCA9IG0tPnJtX2xlYWY7IHQ7DQor CQkJCQkJdCA9IHQtPnJuX2R1cGVka2V5KSB7DQorCQkJCQkJCWJyZWFrOw0K KwkJCQkJfQ0KKwkJCQkJaWYgKHQgPT0gTlVMTCkgew0KKwkJCQkJCWxvZyhM T0dfRVJSLCAiTm9uLXVuaXF1ZSAiDQorCQkJCQkJCSJub3JtYWwgcm91dGUg b24gZHVwZWRrZXksICINCisJCQkJCQkJIm1hc2sgbm90IGVudGVyZWRcbiIp Ow0KKwkJCQkJCXJldHVybiB0dDsNCisJCQkJCX0NCisJCQkJfQ0KICNlbmRp Zg0KKwkJCQltLT5ybV9yZWZzKys7DQorCQkJCXR0LT5ybl9ta2xpc3QgPSBt Ow0KKwkJCQlyZXR1cm4gdHQ7DQorCQkJIH0gZWxzZSBpZiAodHQtPnJuX2Zs YWdzICYgUk5GX05PUk1BTCkgew0KKwkJCQlsb2coTE9HX0VSUiwgIk5vbi11 bmlxdWUgbm9ybWFsIHJvdXRlLCINCisJCQkJCSIgbWFzayBub3QgZW50ZXJl ZFxuIik7DQogCQkJCXJldHVybiB0dDsNCiAJCQl9DQogCQl9IGVsc2UNCkBA IC03ODMsOSArODA5LDEwIEBADQogfQ0KIA0KIHN0cnVjdCByYWRpeF9ub2Rl ICoNCi1ybl9kZWxldGUodl9hcmcsIG5ldG1hc2tfYXJnLCBoZWFkKQ0KK3Ju X2RlbGV0ZSh2X2FyZywgbmV0bWFza19hcmcsIGhlYWQsIHJuKQ0KIAl2b2lk ICp2X2FyZywgKm5ldG1hc2tfYXJnOw0KIAlzdHJ1Y3QgcmFkaXhfbm9kZV9o ZWFkICpoZWFkOw0KKwlzdHJ1Y3QgcmFkaXhfbm9kZSAqcm47DQogew0KIAly ZWdpc3RlciBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwgKnAsICp4LCAqdHQ7DQog CXN0cnVjdCByYWRpeF9tYXNrICptLCAqc2F2ZWRfbSwgKiptcDsNCkBAIC04 MTUsMTMgKzg0MiwzOCBAQA0KIAkJCWlmICgodHQgPSB0dC0+cm5fZHVwZWRr ZXkpID09IDApDQogCQkJCXJldHVybiAoMCk7DQogCX0NCisjaWZkZWYgUkFE SVhfTVBBVEgNCisJaWYgKHJuKSB7DQorCQl3aGlsZSAodHQgIT0gcm4pDQor CQkJaWYgKCh0dCA9IHR0LT5ybl9kdXBlZGtleSkgPT0gMCkNCisJCQkJcmV0 dXJuICgwKTsNCisJfQ0KKyNlbmRpZg0KKwkNCiAJaWYgKHR0LT5ybl9tYXNr ID09IDAgfHwgKHNhdmVkX20gPSBtID0gdHQtPnJuX21rbGlzdCkgPT0gMCkN CiAJCWdvdG8gb24xOw0KIAlpZiAodHQtPnJuX2ZsYWdzICYgUk5GX05PUk1B TCkgew0KLQkJaWYgKG0tPnJtX2xlYWYgIT0gdHQgfHwgbS0+cm1fcmVmcyA+ IDApIHsNCisJCWlmIChtLT5ybV9sZWFmICE9IHR0ICYmIG0tPnJtX3JlZnMg PT0gMCkgew0KIAkJCWxvZyhMT0dfRVJSLCAicm5fZGVsZXRlOiBpbmNvbnNp c3RlbnQgYW5ub3RhdGlvblxuIik7DQogCQkJcmV0dXJuIDA7ICAvKiBkYW5n bGluZyByZWYgY291bGQgY2F1c2UgZGlzYXN0ZXIgKi8NCiAJCX0NCisJCWlm IChtLT5ybV9sZWFmICE9IHR0KSB7DQorCQkJaWYgKC0tbS0+cm1fcmVmcyA+ PSAwKQ0KKwkJCQlnb3RvIG9uMTsNCisgICAgICAgICAgICAgICAgfQ0KKwkJ LyogdHQgaXMgY3VycmVudGx5IHRoZSBoZWFkIG9mIHRoZSBwb3NzaWJsZSBt dWx0aXBhdGggY2hhaW4gKi8NCisJCWlmIChtLT5ybV9yZWZzID4gMCkgew0K KwkJCWlmICh0dC0+cm5fZHVwZWRrZXkgPT0gTlVMTCB8fA0KKwkJCSAgICB0 dC0+cm5fZHVwZWRrZXktPnJuX21rbGlzdCAhPSBtKSB7DQorCQkJCWxvZyhM T0dfRVJSLCAicm5fZGVsZXRlOiBpbmNvbnNpc3RlbnQgIg0KKwkJCQkgICAg ImR1cGVka2V5IGxpc3RcbiIpOw0KKwkJCQlyZXR1cm4gKDApOw0KKwkJCX0N CisJCQltLT5ybV9sZWFmID0gdHQtPnJuX2R1cGVka2V5Ow0KKwkJCS0tbS0+ cm1fcmVmczsNCisJCQlnb3RvIG9uMTsNCisJCX0NCisJCS8qIGVsc2UgdHQg aXMgbGFzdCBhbmQgb25seSByb3V0ZSAqLw0KIAl9IGVsc2Ugew0KIAkJaWYg KG0tPnJtX21hc2sgIT0gdHQtPnJuX21hc2spIHsNCiAJCQlsb2coTE9HX0VS UiwgInJuX2RlbGV0ZTogaW5jb25zaXN0ZW50IGFubm90YXRpb25cbiIpOw0K QEAgLTg2OSwyMSArOTIxLDE3IEBADQogCQkgKi8NCiAJCWlmICh0dCA9PSBz YXZlZF90dCkgew0KIAkJCS8qIHJlbW92ZSBmcm9tIGhlYWQgb2YgY2hhaW4g Ki8NCi0JCQl4ID0gZHVwZWRrZXk7IHgtPnJuX3BhcmVudCA9IHQ7DQorCQkJ eCA9IGR1cGVka2V5OyANCisJCQl4LT5ybl9wYXJlbnQgPSB0Ow0KIAkJCWlm ICh0LT5ybl9sZWZ0ID09IHR0KQ0KIAkJCQl0LT5ybl9sZWZ0ID0geDsNCiAJ CQllbHNlDQogCQkJCXQtPnJuX3JpZ2h0ID0geDsNCiAJCX0gZWxzZSB7DQot CQkJLyogZmluZCBub2RlIGluIGZyb250IG9mIHR0IG9uIHRoZSBjaGFpbiAq Lw0KLQkJCWZvciAoeCA9IHAgPSBzYXZlZF90dDsgcCAmJiBwLT5ybl9kdXBl ZGtleSAhPSB0dDspDQotCQkJCXAgPSBwLT5ybl9kdXBlZGtleTsNCi0JCQlp ZiAocCkgew0KLQkJCQlwLT5ybl9kdXBlZGtleSA9IHR0LT5ybl9kdXBlZGtl eTsNCi0JCQkJaWYgKHR0LT5ybl9kdXBlZGtleSkJCS8qIHBhcmVudCAqLw0K LQkJCQkJdHQtPnJuX2R1cGVka2V5LT5ybl9wYXJlbnQgPSBwOw0KLQkJCQkJ CQkJLyogcGFyZW50ICovDQotCQkJfSBlbHNlIGxvZyhMT0dfRVJSLCAicm5f ZGVsZXRlOiBjb3VsZG4ndCBmaW5kIHVzXG4iKTsNCisJCQl4ID0gc2F2ZWRf dHQ7DQorCQkJdC0+cm5fZHVwZWRrZXkgPSB0dC0+cm5fZHVwZWRrZXk7DQor CQkJaWYgKHR0LT5ybl9kdXBlZGtleSkNCisJCQkJdHQtPnJuX2R1cGVka2V5 LT5ybl9wYXJlbnQgPSB0Ow0KIAkJfQ0KIAkJdCA9IHR0ICsgMTsNCiAJCWlm ICAodC0+cm5fZmxhZ3MgJiBSTkZfQUNUSVZFKSB7DQpAQCAtOTMxLDE0ICs5 NzksMjEgQEANCiAJCQkJaWYgKG0gPT0geC0+cm5fbWtsaXN0KSB7DQogCQkJ CQlzdHJ1Y3QgcmFkaXhfbWFzayAqbW0gPSBtLT5ybV9ta2xpc3Q7DQogCQkJ CQl4LT5ybl9ta2xpc3QgPSAwOw0KLQkJCQkJaWYgKC0tKG0tPnJtX3JlZnMp IDwgMCkNCisJCQkJCWlmICgtLShtLT5ybV9yZWZzKSA8IDApIHsNCiAJCQkJ CQlNS0ZyZWUobSk7DQorCQkJCQl9IGVsc2UgaWYgKG0tPnJtX2ZsYWdzICYg Uk5GX05PUk1BTCkgew0KKwkJCQkJCS8qDQorCQkJCQkJICogZG9uJ3QgcHJv Z3Jlc3MgYmVjYXVzZSB0aGlzDQorCQkJCQkJICogYSBtdWx0aXBhdGggcm91 dGUuIE5leHQNCisJCQkJCQkgKiByb3V0ZSB3aWxsIHVzZSB0aGUgc2FtZSBt Lg0KKwkJCQkJCSAqLw0KKwkJCQkJCW1tID0gbTsNCisJCQkJCX0NCiAJCQkJ CW0gPSBtbTsNCiAJCQkJfQ0KIAkJCWlmIChtKQ0KIAkJCQlsb2coTE9HX0VS UiwNCi0JCQkJICAgICJybl9kZWxldGU6IE9ycGhhbmVkIE1hc2sgJXAgYXQg JXBcbiIsDQotCQkJCSAgICBtLCB4KTsNCisJCQkJICAgICJybl9kZWxldGU6 IE9ycGhhbmVkIE1hc2sgJXAgYXQgJXBcbiIsIG0sIHgpOw0KIAkJfQ0KIAl9 DQogCS8qDQpAQCAtOTkwLDExICsxMDQ1LDggQEANCiAJICogcm5fc2VhcmNo X20gaXMgc29ydC1vZi1vcGVuLWNvZGVkIGhlcmUuIFdlIGNhbm5vdCB1c2Ug dGhlDQogCSAqIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRy YWNrIG9mIHRoZSBsYXN0IG5vZGUgc2Vlbi4NCiAJICovDQotCS8qIHByaW50 ZigiYWJvdXQgdG8gc2VhcmNoXG4iKTsgKi8NCiAJZm9yIChybiA9IGgtPnJu aF90cmVldG9wOyBybi0+cm5fYml0ID49IDA7ICkgew0KIAkJbGFzdCA9IHJu Ow0KLQkJLyogcHJpbnRmKCJybl9iaXQgJWQsIHJuX2JtYXNrICV4LCB4bVty bl9vZmZzZXRdICV4XG4iLA0KLQkJICAgICAgIHJuLT5ybl9iaXQsIHJuLT5y bl9ibWFzaywgeG1bcm4tPnJuX29mZnNldF0pOyAqLw0KIAkJaWYgKCEocm4t PnJuX2JtYXNrICYgeG1bcm4tPnJuX29mZnNldF0pKSB7DQogCQkJYnJlYWs7 DQogCQl9DQpAQCAtMTAwNCw3ICsxMDU2LDYgQEANCiAJCQlybiA9IHJuLT5y bl9sZWZ0Ow0KIAkJfQ0KIAl9DQotCS8qIHByaW50ZigiZG9uZSBzZWFyY2hp bmdcbiIpOyAqLw0KIA0KIAkvKg0KIAkgKiBUd28gY2FzZXM6IGVpdGhlciB3 ZSBzdGVwcGVkIG9mZiB0aGUgZW5kIG9mIG91ciBtYXNrLA0KQEAgLTEwMTUs OCArMTA2Niw2IEBADQogCXJuID0gbGFzdDsNCiAJbGFzdGIgPSBybi0+cm5f Yml0Ow0KIA0KLQkvKiBwcmludGYoInJuICVwLCBsYXN0YiAlZFxuIiwgcm4s IGxhc3RiKTsqLw0KLQ0KIAkvKg0KIAkgKiBUaGlzIGdldHMgY29tcGxpY2F0 ZWQgYmVjYXVzZSB3ZSBtYXkgZGVsZXRlIHRoZSBub2RlDQogCSAqIHdoaWxl IGFwcGx5aW5nIHRoZSBmdW5jdGlvbiBmIHRvIGl0LCBzbyB3ZSBuZWVkIHRv IGNhbGN1bGF0ZQ0KQEAgLTEwMjYsNyArMTA3NSw2IEBADQogCQlybiA9IHJu LT5ybl9sZWZ0Ow0KIA0KIAl3aGlsZSAoIXN0b3BwaW5nKSB7DQotCQkvKiBw cmludGYoIm5vZGUgJXAgKCVkKVxuIiwgcm4sIHJuLT5ybl9iaXQpOyAqLw0K IAkJYmFzZSA9IHJuOw0KIAkJLyogSWYgYXQgcmlnaHQgY2hpbGQgZ28gYmFj ayB1cCwgb3RoZXJ3aXNlLCBnbyByaWdodCAqLw0KIAkJd2hpbGUgKHJuLT5y bl9wYXJlbnQtPnJuX3JpZ2h0ID09IHJuDQpAQCAtMTAzNiw3ICsxMDg0LDYg QEANCiAJCQkvKiBpZiB3ZW50IHVwIGJleW9uZCBsYXN0LCBzdG9wICovDQog CQkJaWYgKHJuLT5ybl9iaXQgPD0gbGFzdGIpIHsNCiAJCQkJc3RvcHBpbmcg PSAxOw0KLQkJCQkvKiBwcmludGYoInVwIHRvbyBmYXJcbiIpOyAqLw0KIAkJ CQkvKg0KIAkJCQkgKiBYWFggd2Ugc2hvdWxkIGp1bXAgdG8gdGhlICdQcm9j ZXNzIGxlYXZlcycNCiAJCQkJICogcGFydCwgYmVjYXVzZSB0aGUgdmFsdWVz IG9mICdybicgYW5kICduZXh0Jw0KQEAgLTEwNjIsNyArMTEwOSw2IEBADQog CQkvKiBQcm9jZXNzIGxlYXZlcyAqLw0KIAkJd2hpbGUgKChybiA9IGJhc2Up ICE9IDApIHsNCiAJCQliYXNlID0gcm4tPnJuX2R1cGVka2V5Ow0KLQkJCS8q IHByaW50ZigibGVhZiAlcFxuIiwgcm4pOyAqLw0KIAkJCWlmICghKHJuLT5y bl9mbGFncyAmIFJORl9ST09UKQ0KIAkJCSAgICAmJiAoZXJyb3IgPSAoKmYp KHJuLCB3KSkpDQogCQkJCXJldHVybiAoZXJyb3IpOw0KQEAgLTEwNzAsNyAr MTExNiw2IEBADQogCQlybiA9IG5leHQ7DQogDQogCQlpZiAocm4tPnJuX2Zs YWdzICYgUk5GX1JPT1QpIHsNCi0JCQkvKiBwcmludGYoInJvb3QsIHN0b3Bw aW5nIik7ICovDQogCQkJc3RvcHBpbmcgPSAxOw0KIAkJfQ0KIA0KZGlmZiAt ciAtdSAvdXNyX2RpZmYvc3JjL3N5cy9uZXQvcmFkaXguaCAvdXNyL3NyYy9z eXMvbmV0L3JhZGl4LmgNCi0tLSAvdXNyX2RpZmYvc3JjL3N5cy9uZXQvcmFk aXguaAkyMDEwLTAzLTIzIDA5OjU4OjU5LjAwMDAwMDAwMCArMDAwMA0KKysr IC91c3Ivc3JjL3N5cy9uZXQvcmFkaXguaAkyMDEwLTA5LTA2IDExOjIyOjM5 LjAwMDAwMDAwMCArMDAwMA0KQEAgLTExNCw3ICsxMTQsNyBAQA0KIAkJKHZv aWQgKnYsIHZvaWQgKm1hc2ssDQogCQkgICAgIHN0cnVjdCByYWRpeF9ub2Rl X2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9ub2RlIG5vZGVzW10pOw0KIAlz dHJ1Y3QJcmFkaXhfbm9kZSAqKCpybmhfZGVsYWRkcikJLyogcmVtb3ZlIGJh c2VkIG9uIHNvY2thZGRyICovDQotCQkodm9pZCAqdiwgdm9pZCAqbWFzaywg c3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCk7DQorCQkodm9pZCAqdiwg dm9pZCAqbWFzaywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCwgc3Ry dWN0IHJhZGl4X25vZGUgKnJuKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigq cm5oX2RlbHBrdCkJLyogcmVtb3ZlIGJhc2VkIG9uIHBhY2tldCBoZHIgKi8N CiAJCSh2b2lkICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9o ZWFkICpoZWFkKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX21hdGNo YWRkcikJLyogbG9jYXRlIGJhc2VkIG9uIHNvY2thZGRyICovDQpAQCAtMTY4 LDcgKzE2OCw3IEBADQogCSAqcm5fYWRkbWFzayh2b2lkICosIGludCwgaW50 KSwNCiAJICpybl9hZGRyb3V0ZSAodm9pZCAqLCB2b2lkICosIHN0cnVjdCBy YWRpeF9ub2RlX2hlYWQgKiwNCiAJCQlzdHJ1Y3QgcmFkaXhfbm9kZSBbMl0p LA0KLQkgKnJuX2RlbGV0ZSh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJhZGl4 X25vZGVfaGVhZCAqKSwNCisJICpybl9kZWxldGUodm9pZCAqLCB2b2lkICos IHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKiwgc3RydWN0IHJhZGl4X25vZGUg KiksDQogCSAqcm5fbG9va3VwICh2b2lkICp2X2FyZywgdm9pZCAqbV9hcmcs DQogCQkgICAgICAgIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQpLA0K IAkgKnJuX21hdGNoKHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAq KTsNCmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9zeXMvbmV0L3JhZGl4X21w YXRoLmMgL3Vzci9zcmMvc3lzL25ldC9yYWRpeF9tcGF0aC5jDQotLS0gL3Vz cl9kaWZmL3NyYy9zeXMvbmV0L3JhZGl4X21wYXRoLmMJMjAxMC0wNC0wMiAw NTowMjo1MC4wMDAwMDAwMDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMvbmV0 L3JhZGl4X21wYXRoLmMJMjAxMC0wOS0wNiAxMToyMjozOS4wMDAwMDAwMDAg KzAwMDANCkBAIC0xMjUsMzMgKzEyNSw2IEBADQogCXJldHVybiAoc3RydWN0 IHJ0ZW50cnkgKilybjsNCiB9DQogDQotLyogDQotICogZ28gdGhyb3VnaCB0 aGUgY2hhaW4gYW5kIHVubGluayAicnQiIGZyb20gdGhlIGxpc3QNCi0gKiB0 aGUgY2FsbGVyIHdpbGwgZnJlZSAicnQiDQotICovDQotaW50DQotcnRfbXBh dGhfZGVsZHVwKHN0cnVjdCBydGVudHJ5ICpoZWFkcnQsIHN0cnVjdCBydGVu dHJ5ICpydCkNCi17DQotICAgICAgICBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwg KnR0Ow0KLQ0KLSAgICAgICAgaWYgKCFoZWFkcnQgfHwgIXJ0KQ0KLSAgICAg ICAgICAgIHJldHVybiAoMCk7DQotICAgICAgICB0ID0gKHN0cnVjdCByYWRp eF9ub2RlICopaGVhZHJ0Ow0KLSAgICAgICAgdHQgPSBybl9tcGF0aF9uZXh0 KHQpOw0KLSAgICAgICAgd2hpbGUgKHR0KSB7DQotICAgICAgICAgICAgaWYg KHR0ID09IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0KSB7DQotICAgICAgICAg ICAgICAgIHQtPnJuX2R1cGVka2V5ID0gdHQtPnJuX2R1cGVka2V5Ow0KLSAg ICAgICAgICAgICAgICB0dC0+cm5fZHVwZWRrZXkgPSBOVUxMOw0KLSAgICAJ ICAgICAgICB0dC0+cm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotCSAgICAg ICAgdHRbMV0ucm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotICAgICAgICAg ICAgICAgIHJldHVybiAoMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAg ICAgIHQgPSB0dDsNCi0gICAgICAgICAgICB0dCA9IHJuX21wYXRoX25leHQo KHN0cnVjdCByYWRpeF9ub2RlICopdCk7DQotICAgICAgICB9DQotICAgICAg ICByZXR1cm4gKDApOw0KLX0NCi0NCiAvKg0KICAqIGNoZWNrIGlmIHdlIGhh dmUgdGhlIHNhbWUga2V5L21hc2svZ2F0ZXdheSBvbiB0aGUgdGFibGUgYWxy ZWFkeS4NCiAgKi8NCkBAIC0yNjIsOSArMjM1LDEwIEBADQogcnRhbGxvY19t cGF0aF9maWIoc3RydWN0IHJvdXRlICpybywgdWludDMyX3QgaGFzaCwgdV9p bnQgZmlibnVtKQ0KIHsNCiAJc3RydWN0IHJhZGl4X25vZGUgKnJuMCwgKnJu Ow0KLQl1X2ludDMyX3QgbjsNCisJdV9pbnQzMl90IG4gPSAwOw0KIAlzdHJ1 Y3QgcnRlbnRyeSAqcnQ7DQogCWludDY0X3Qgd2VpZ2h0Ow0KKwlpbnQ2NF90 IGxvd2VzdF93ZWlnaHQ7DQogDQogCS8qDQogCSAqIFhYWCB3ZSBkb24ndCBh dHRlbXB0IHRvIGxvb2t1cCBjYWNoZWQgcm91dGUgYWdhaW47IHdoYXQgc2hv dWxkDQpAQCAtMjcyLDcgKzI0Niw3IEBADQogCSAqLw0KIAlpZiAocm8tPnJv X3J0ICYmIHJvLT5yb19ydC0+cnRfaWZwICYmIChyby0+cm9fcnQtPnJ0X2Zs YWdzICYgUlRGX1VQKQ0KIAkgICAgJiYgUlRfTElOS19JU19VUChyby0+cm9f cnQtPnJ0X2lmcCkpDQotCQlyZXR1cm47CQkJCSANCisJCXJldHVybjsNCiAJ cm8tPnJvX3J0ID0gcnRhbGxvYzFfZmliKCZyby0+cm9fZHN0LCAxLCAwLCBm aWJudW0pOw0KIA0KIAkvKiBpZiB0aGUgcm91dGUgZG9lcyBub3QgZXhpc3Qg b3IgaXQgaXMgbm90IG11bHRpcGF0aCwgZG9uJ3QgY2FyZSAqLw0KQEAgLTI4 NSwyMCArMjU5LDM0IEBADQogDQogCS8qIGJleW9uZCBoZXJlLCB3ZSB1c2Ug cm4gYXMgdGhlIG1hc3RlciBjb3B5ICovDQogCXJuMCA9IHJuID0gKHN0cnVj dCByYWRpeF9ub2RlICopcm8tPnJvX3J0Ow0KLQluID0gcm5fbXBhdGhfY291 bnQocm4wKTsNCi0NCisJDQorCS8qIGZpbmQgbG93ZXN0IHdlaWdodCByb3V0 ZSAqLw0KKwlmb3IgKCBydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuLCB3ZWln aHQgPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7IHJuICE9IE5VTEw7IHJuID0g cm5fbXBhdGhfbmV4dCggcm4pKSB7DQorCQkvKiBYWFggY2hlY2sgaWYgcm91 dGUgaXMgdXA/ICovDQorCQlydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuOw0K KwkJaWYocnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSB7IA0KKwkJCWlmICh3ZWln aHQgPiBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCisJCQkJd2VpZ2h0ID0g cnQtPnJ0X3JteC5ybXhfd2VpZ2h0Ow0KKwkJCQluID0gMTsNCisJCQl9IGVs c2UgaWYgKHdlaWdodCA9PSBydC0+cnRfcm14LnJteF93ZWlnaHQpDQorCQkJ CW4rKzsNCisJCX0NCisJfQ0KKwlsb3dlc3Rfd2VpZ2h0ID0gd2VpZ2h0Ow0K KwkNCisJLyogc2VsZWN0IG5vdyBvbmUgb2YgdGhlIGxvd2VzdCB3ZWlnaHQg cm91dGVzICovDQogCS8qIGd3IHNlbGVjdGlvbiBieSBNb2R1bG8tTiBIYXNo IChSRkMyOTkxKSBYWFggbmVlZCBpbXByb3ZlbWVudD8gKi8NCiAJaGFzaCAr PSBoYXNoaml0dGVyOw0KIAloYXNoICU9IG47DQotCWZvciAod2VpZ2h0ID0g YWJzKChpbnQzMl90KWhhc2gpLCBydCA9IHJvLT5yb19ydDsNCi0JICAgICB3 ZWlnaHQgPj0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0ICYmIHJuOyANCi0JICAg ICB3ZWlnaHQgLT0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0KSB7DQotCQkNCi0J CS8qIHN0YXkgd2l0aGluIHRoZSBtdWx0aXBhdGggcm91dGVzICovDQotCQlp ZiAocm4tPnJuX2R1cGVka2V5ICYmIHJuLT5ybl9tYXNrICE9IHJuLT5ybl9k dXBlZGtleS0+cm5fbWFzaykNCi0JCQlicmVhazsNCi0JCXJuID0gcm4tPnJu X2R1cGVka2V5Ow0KKwlmb3IgKCBybiA9IHJuMCwgbiA9IDA7IHJuICE9IE5V TEw7IHJuID0gcm5fbXBhdGhfbmV4dCggcm4pKSB7DQogCQlydCA9IChzdHJ1 Y3QgcnRlbnRyeSAqKXJuOw0KKwkJaWYocnQtPnJ0X2ZsYWdzICYgUlRGX1VQ KSB7IA0KKwkJCWlmICggcnQtPnJ0X3JteC5ybXhfd2VpZ2h0ID09IGxvd2Vz dF93ZWlnaHQpIHsNCisJCQkJaWYgKG4gPT0gaGFzaCkNCisJCQkJCWJyZWFr Ow0KKwkJCQluKys7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCS8qIFhYWCB0cnkg ZmlsbGluZyBydF9nd3JvdXRlIGFuZCBhdm9pZCB1bnJlYWNoYWJsZSBndyAg Ki8NCiANCmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9zeXMvbmV0L3JvdXRl LmMgL3Vzci9zcmMvc3lzL25ldC9yb3V0ZS5jDQotLS0gL3Vzcl9kaWZmL3Ny Yy9zeXMvbmV0L3JvdXRlLmMJMjAxMC0wNi0xOCAwMzozMTozMy4wMDAwMDAw MDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMvbmV0L3JvdXRlLmMJMjAxMC0w OS0wNiAxMToyMjozOS4wMDAwMDAwMDAgKzAwMDANCkBAIC04NzUsNyArODc1 LDcgQEANCiAJICogUmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHRyZWU7IGl0 IHNob3VsZCBiZSB0aGVyZSwNCiAJICogYnV0IHdoZW4gY2FsbGVycyBpbnZv a2UgdXMgYmxpbmRseSBpdCBtYXkgbm90IChzaWdoKS4NCiAJICovDQotCXJu ID0gcm5oLT5ybmhfZGVsYWRkcihydF9rZXkocnQpLCBydF9tYXNrKHJ0KSwg cm5oKTsNCisJcm4gPSBybmgtPnJuaF9kZWxhZGRyKHJ0X2tleShydCksIHJ0 X21hc2socnQpLCBybmgsIE5VTEwpOw0KIAlpZiAocm4gPT0gTlVMTCkgew0K IAkJZXJyb3IgPSBFU1JDSDsNCiAJCWdvdG8gYmFkOw0KQEAgLTkxMywxMTIg KzkxMyw2IEBADQogCXJldHVybiAoZXJyb3IpOw0KIH0NCiANCi0jaWZkZWYg UkFESVhfTVBBVEgNCi1zdGF0aWMgaW50DQotcm5fbXBhdGhfdXBkYXRlKGlu dCByZXEsIHN0cnVjdCBydF9hZGRyaW5mbyAqaW5mbywNCi0gICAgc3RydWN0 IHJhZGl4X25vZGVfaGVhZCAqcm5oLCBzdHJ1Y3QgcnRlbnRyeSAqKnJldF9u cnQpDQotew0KLQkvKg0KLQkgKiBpZiB3ZSBnb3QgbXVsdGlwYXRoIHJvdXRl cywgd2UgcmVxdWlyZSB1c2VycyB0byBzcGVjaWZ5DQotCSAqIGEgbWF0Y2hp bmcgUlRBWF9HQVRFV0FZLg0KLQkgKi8NCi0Jc3RydWN0IHJ0ZW50cnkgKnJ0 LCAqcnRvID0gTlVMTDsNCi0JcmVnaXN0ZXIgc3RydWN0IHJhZGl4X25vZGUg KnJuOw0KLQlpbnQgZXJyb3IgPSAwOw0KLQ0KLQlybiA9IHJuaC0+cm5oX21h dGNoYWRkcihkc3QsIHJuaCk7DQotCWlmIChybiA9PSBOVUxMKQ0KLQkJcmV0 dXJuIChFU1JDSCk7DQotCXJ0byA9IHJ0ID0gUk5UT1JUKHJuKTsNCi0JcnQg PSBydF9tcGF0aF9tYXRjaGdhdGUocnQsIGdhdGV3YXkpOw0KLQlpZiAocnQg PT0gTlVMTCkNCi0JCXJldHVybiAoRVNSQ0gpOw0KLQkvKg0KLQkgKiB0aGlz IGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgY2hhaW4NCi0JICovDQotCWlm IChydG8gPT0gcnQpIHsNCi0JCXJuID0gcm5fbXBhdGhfbmV4dCgoc3RydWN0 IHJhZGl4X25vZGUgKilydCk7DQotCQkvKg0KLQkJICogdGhlcmUgaXMgYW5v dGhlciBlbnRyeSwgbm93IGl0J3MgYWN0aXZlDQotCQkgKi8NCi0JCWlmIChy bikgew0KLQkJCXJ0byA9IFJOVE9SVChybik7DQotCQkJUlRfTE9DSyhydG8p Ow0KLQkJCXJ0by0+cnRfZmxhZ3MgfD0gUlRGX1VQOw0KLQkJCVJUX1VOTE9D SyhydG8pOw0KLQkJfSBlbHNlIGlmIChydC0+cnRfZmxhZ3MgJiBSVEZfR0FU RVdBWSkgew0KLQkJCS8qDQotCQkJICogRm9yIGdhdGV3YXkgcm91dGVzLCB3 ZSBuZWVkIHRvIA0KLQkJCSAqIG1ha2Ugc3VyZSB0aGF0IHdlIHdlIGFyZSBk ZWxldGluZw0KLQkJCSAqIHRoZSBjb3JyZWN0IGdhdGV3YXkuIA0KLQkJCSAq IHJ0X21wYXRoX21hdGNoZ2F0ZSgpIGRvZXMgbm90IA0KLQkJCSAqIGNoZWNr IHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgb25seQ0KLQkJCSAqIG9uZSByb3V0 ZSBpbiB0aGUgY2hhaW4uICANCi0JCQkgKi8NCi0JCQlpZiAoZ2F0ZXdheSAm Jg0KLQkJCSAgICAocnQtPnJ0X2dhdGV3YXktPnNhX2xlbiAhPSBnYXRld2F5 LT5zYV9sZW4gfHwNCi0JCQkJbWVtY21wKHJ0LT5ydF9nYXRld2F5LCBnYXRl d2F5LCBnYXRld2F5LT5zYV9sZW4pKSkNCi0JCQkJZXJyb3IgPSBFU1JDSDsN Ci0JCQllbHNlIHsNCi0JCQkJLyoNCi0JCQkJICogcmVtb3ZlIGZyb20gdHJl ZSBiZWZvcmUgcmV0dXJuaW5nIGl0DQotCQkJCSAqIHRvIHRoZSBjYWxsZXIN Ci0JCQkJICovDQotCQkJCXJuID0gcm5oLT5ybmhfZGVsYWRkcihkc3QsIG5l dG1hc2ssIHJuaCk7DQotCQkJCUtBU1NFUlQocnQgPT0gUk5UT1JUKHJuKSwg KCJyYWRpeCBub2RlIGRpc2FwcGVhcmVkIikpOw0KLQkJCQlnb3RvIGd3ZGVs ZXRlOw0KLQkJCX0NCi0JCQkNCi0JCX0NCi0JCS8qDQotCQkgKiB1c2UgdGhl IG5vcm1hbCBkZWxldGUgY29kZSB0byByZW1vdmUNCi0JCSAqIHRoZSBmaXJz dCBlbnRyeQ0KLQkJICovDQotCQlpZiAocmVxICE9IFJUTV9ERUxFVEUpIA0K LQkJCWdvdG8gbm9uZGVsZXRlOw0KLQ0KLQkJZXJyb3IgPSBFTk9FTlQ7DQot CQlnb3RvIGRvbmU7DQotCX0NCi0JCQ0KLQkvKg0KLQkgKiBpZiB0aGUgZW50 cnkgaXMgMm5kIGFuZCBvbiB1cA0KLQkgKi8NCi0JaWYgKChyZXEgPT0gUlRN X0RFTEVURSkgJiYgIXJ0X21wYXRoX2RlbGR1cChydG8sIHJ0KSkNCi0JCXBh bmljICgicnRyZXF1ZXN0MTogcnRfbXBhdGhfZGVsZHVwIik7DQotZ3dkZWxl dGU6DQotCVJUX0xPQ0socnQpOw0KLQlSVF9BRERSRUYocnQpOw0KLQlpZiAo cmVxID09IFJUTV9ERUxFVEUpIHsNCi0JCXJ0LT5ydF9mbGFncyAmPSB+UlRG X1VQOw0KLQkJLyoNCi0JCSAqIE9uZSBtb3JlIHJ0ZW50cnkgZmxvYXRpbmcg YXJvdW5kIHRoYXQgaXMgbm90DQotCQkgKiBsaW5rZWQgdG8gdGhlIHJvdXRp bmcgdGFibGUuIHJ0dHJhc2ggd2lsbCBiZSBkZWNyZW1lbnRlZA0KLQkJICog d2hlbiBSVEZSRUUocnQpIGlzIGV2ZW50dWFsbHkgY2FsbGVkLg0KLQkJICov DQotCQlWX3J0dHJhc2grKzsNCi0JfQ0KLQkNCi1ub25kZWxldGU6DQotCWlm IChyZXEgIT0gUlRNX0RFTEVURSkNCi0JCXBhbmljKCJ1bnJlY29nbml6ZWQg cmVxdWVzdCAlZCIsIHJlcSk7DQotCQ0KLQ0KLQkvKg0KLQkgKiBJZiB0aGUg Y2FsbGVyIHdhbnRzIGl0LCB0aGVuIGl0IGNhbiBoYXZlIGl0LA0KLQkgKiBi dXQgaXQncyB1cCB0byBpdCB0byBmcmVlIHRoZSBydGVudHJ5IGFzIHdlIHdv bid0IGJlDQotCSAqIGRvaW5nIGl0Lg0KLQkgKi8NCi0JaWYgKHJldF9ucnQp IHsNCi0JCSpyZXRfbnJ0ID0gcnQ7DQotCQlSVF9VTkxPQ0socnQpOw0KLQl9 IGVsc2UNCi0JCVJURlJFRV9MT0NLRUQocnQpOw0KLWRvbmU6DQotCXJldHVy biAoZXJyb3IpOw0KLX0NCi0jZW5kaWYNCi0NCiBpbnQNCiBydHJlcXVlc3Qx X2ZpYihpbnQgcmVxLCBzdHJ1Y3QgcnRfYWRkcmluZm8gKmluZm8sIHN0cnVj dCBydGVudHJ5ICoqcmV0X25ydCwNCiAJCQkJdV9pbnQgZmlibnVtKQ0KQEAg LTEwNTgsMjggKzk1MiwzMCBAQA0KIA0KIAlzd2l0Y2ggKHJlcSkgew0KIAlj YXNlIFJUTV9ERUxFVEU6DQorCSAgICAgICAgaWYgKChybiA9IHJuaC0+cm5o X2xvb2t1cChkc3QsIG5ldG1hc2ssIHJuaCkpID09IE5VTEwpDQorCSAgICAg ICAgICAgICAgICBzZW5kZXJyKEVTUkNIKTsNCisJCXJ0ID0gUk5UT1JUKHJu KTsNCiAjaWZkZWYgUkFESVhfTVBBVEgNCi0JCWlmIChybl9tcGF0aF9jYXBh YmxlKHJuaCkpIHsNCi0JCQllcnJvciA9IHJuX21wYXRoX3VwZGF0ZShyZXEs IGluZm8sIHJuaCwgcmV0X25ydCk7DQotCQkJLyoNCi0JCQkgKiAiYmFkIiBo b2xkcyB0cnVlIGZvciB0aGUgc3VjY2VzcyBjYXNlDQotCQkJICogYXMgd2Vs bA0KLQkJCSAqLw0KLQkJCWlmIChlcnJvciAhPSBFTk9FTlQpDQotCQkJCWdv dG8gYmFkOw0KLQkJCWVycm9yID0gMDsNCi0JCX0NCisgICAgICAgICAgICAg ICAgLyoNCisgICAgICAgICAgICAgICAgICogaWYgd2UgZ290IG11bHRpcGF0 aCByb3V0ZXMsIHdlIHJlcXVpcmUgdXNlcnMgdG8gc3BlY2lmeQ0KKyAgICAg ICAgICAgICAgICAgKiBhIG1hdGNoaW5nIFJUQVhfR0FURVdBWS4NCisgICAg ICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgIGlmIChybl9tcGF0 aF9jYXBhYmxlKHJuaCkpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBy dCA9IHJ0X21wYXRoX21hdGNoZ2F0ZSggcnQsIGdhdGV3YXkpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgIHJuID0gKHN0cnVjdCByYWRpeF9ub2RlICop cnQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFydCkNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcnIoRVNSQ0gpOw0K KyAgICAgICAgICAgICAgICB9DQogI2VuZGlmDQogCQkvKg0KIAkJICogUmVt b3ZlIHRoZSBpdGVtIGZyb20gdGhlIHRyZWUgYW5kIHJldHVybiBpdC4NCiAJ CSAqIENvbXBsYWluIGlmIGl0IGlzIG5vdCB0aGVyZSBhbmQgZG8gbm8gbW9y ZSBwcm9jZXNzaW5nLg0KIAkJICovDQotCQlybiA9IHJuaC0+cm5oX2RlbGFk ZHIoZHN0LCBuZXRtYXNrLCBybmgpOw0KKwkJcm4gPSBybmgtPnJuaF9kZWxh ZGRyKGRzdCwgbmV0bWFzaywgcm5oLCBybik7DQogCQlpZiAocm4gPT0gTlVM TCkNCiAJCQlzZW5kZXJyKEVTUkNIKTsNCiAJCWlmIChybi0+cm5fZmxhZ3Mg JiAoUk5GX0FDVElWRSB8IFJORl9ST09UKSkNCiAJCQlwYW5pYyAoInJ0cmVx dWVzdCBkZWxldGUiKTsNCi0JCXJ0ID0gUk5UT1JUKHJuKTsNCiAJCVJUX0xP Q0socnQpOw0KIAkJUlRfQUREUkVGKHJ0KTsNCiAJCXJ0LT5ydF9mbGFncyAm PSB+UlRGX1VQOw0KQEAgLTE0NzQsMTAgKzEzNzAsOSBAQA0KIAkJCSAgICBS TlRPUlQocm4pLT5ydF9pZmEgIT0gaWZhIHx8DQogCQkJICAgICFzYV9lcXVh bCgoc3RydWN0IHNvY2thZGRyICopcm4tPnJuX2tleSwgZHN0KSk7DQogCQkJ UkFESVhfTk9ERV9IRUFEX1VOTE9DSyhybmgpOw0KLQkJCWlmIChlcnJvcikg ew0KKwkJCWlmIChlcnJvcikNCiAJCQkJLyogdGhpcyBpcyBvbmx5IGFuIGVy cm9yIGlmIGJhZCBvbiBBTEwgdGFibGVzICovDQogCQkJCWNvbnRpbnVlOw0K LQkJCX0NCiAJCX0NCiAJCS8qDQogCQkgKiBEbyB0aGUgYWN0dWFsIHJlcXVl c3QNCmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9zeXMvbmV0aW5ldC9pbi5j IC91c3Ivc3JjL3N5cy9uZXRpbmV0L2luLmMNCi0tLSAvdXNyX2RpZmYvc3Jj L3N5cy9uZXRpbmV0L2luLmMJMjAxMC0wOS0wNyAxMzoxMDo0Ni4wMDAwMDAw MDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbi5jCTIwMTAt MDktMTEgMDI6MjA6NTguMDAwMDAwMDAwICswMDAwDQpAQCAtMTM3NCwxMiAr MTM3NCw0NSBAQA0KIGluX2xsdGFibGVfcnRjaGVjayhzdHJ1Y3QgaWZuZXQg KmlmcCwgdV9pbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbDNh ZGRyKQ0KIHsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KKyNpZmRlZiBSQURJ WF9NUEFUSA0KKwlpbnQ2NF90IHdlaWdodDsNCisJc3RydWN0IHJ0ZW50cnkg KnJ0MDsNCisJaW50MzJfdCBmb3VuZCA9IDA7DQorI2VuZGlmDQogDQogCUtB U1NFUlQobDNhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCwNCiAJICAgICgi c2luX2ZhbWlseSAlZCIsIGwzYWRkci0+c2FfZmFtaWx5KSk7DQogDQogCS8q IFhYWCBydGFsbG9jMSBzaG91bGQgdGFrZSBhIGNvbnN0IHBhcmFtICovDQog CXJ0ID0gcnRhbGxvYzEoX19ERUNPTlNUKHN0cnVjdCBzb2NrYWRkciAqLCBs M2FkZHIpLCAwLCAwKTsNCisNCisjaWZkZWYgUkFESVhfTVBBVEgNCisJcnQw ID0gcnQ7DQorICAgICAgICBpZiAoKHJ0ICE9IE5VTEwpICYmICggcm5fbXBh dGhfbmV4dCgoc3RydWN0IHJhZGl4X25vZGUgKilydCkgIT0gTlVMTCkpIHsN CisJCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciwgbWF0Y2hpbmcgcm91 dGVzICovDQorCQkvKiBmaW5kIGxvd2VzdCB3ZWlnaHQgcm91dGUgKi8NCisJ CWZvciAoIHdlaWdodCA9IHJ0LT5ydF9ybXgucm14X3dlaWdodDsgcnQgIT0g TlVMTDsgcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybl9tcGF0aF9uZXh0KCAo c3RydWN0IHJhZGl4X25vZGUgKilydCkpIHsNCisJCQlpZihydC0+cnRfZmxh Z3MgJiBSVEZfVVApIHsNCisJCQkJaWYgKHdlaWdodCA+IHJ0LT5ydF9ybXgu cm14X3dlaWdodCkNCisJCQkJCXdlaWdodCA9IHJ0LT5ydF9ybXgucm14X3dl aWdodDsNCisJCQl9DQorCQl9DQorDQorCQkvKiBmaW5kIG5vdyBvbmUgbm9u IGdhdGV3YXkgcm91dGUgd2l0aCBsb3dlc3Qgd2VpZ2h0ICovDQorCQlmb3Ig KCBydCA9IHJ0MDsgcnQgIT0gTlVMTDsgcnQgPSAoc3RydWN0IHJ0ZW50cnkg Kilybl9tcGF0aF9uZXh0KCAoc3RydWN0IHJhZGl4X25vZGUgKilydCkpIHsN CisJCQlpZihydC0+cnRfZmxhZ3MgJiBSVEZfVVApIHsNCisJCQkJaWYgKCh3 ZWlnaHQgPT0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0KSAmJiAhKHJ0LT5ydF9m bGFncyAmIFJURl9HQVRFV0FZKSkgew0KKwkJCQkJZm91bmQgPSAxOw0KKwkJ CQkJYnJlYWs7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQlpZiAoZm91bmQg PT0gMCkNCisJCQlydCA9IE5VTEw7DQorCX0NCisJDQorI2VuZGlmCQ0KKw0K IAlpZiAocnQgPT0gTlVMTCB8fCAoIShmbGFncyAmIExMRV9QVUIpICYmDQog CQkJICAgKChydC0+cnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkgfHwgDQogCQkJ ICAgIChydC0+cnRfaWZwICE9IGlmcCkpKSkgew0KQEAgLTEzODcsMTEgKzE0 MjAsMjEgQEANCiAJCWxvZyhMT0dfSU5GTywgIklQdjQgYWRkcmVzczogXCIl c1wiIGlzIG5vdCBvbiB0aGUgbmV0d29ya1xuIiwNCiAJCSAgICBpbmV0X250 b2EoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilsM2FkZHIpLT5zaW5f YWRkcikpOw0KICNlbmRpZg0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwkJaWYg KHJ0MCAhPSBOVUxMKQ0KKwkJCVJURlJFRV9MT0NLRUQocnQwKTsNCisjZWxz ZQ0KIAkJaWYgKHJ0ICE9IE5VTEwpDQogCQkJUlRGUkVFX0xPQ0tFRChydCk7 DQorI2VuZGlmDQogCQlyZXR1cm4gKEVJTlZBTCk7DQogCX0NCisjaWZkZWYg UkFESVhfTVBBVEgNCisJUlRGUkVFX0xPQ0tFRChydDApOw0KKyNlbHNlDQog CVJURlJFRV9MT0NLRUQocnQpOw0KKyNlbmRpZg0KKw0KIAlyZXR1cm4gMDsN CiB9DQogDQpAQCAtMTQyNCw3ICsxNDY3LDcgQEANCiAJaWYgKGxsZSA9PSBO VUxMKSB7DQogI2lmZGVmIERJQUdOT1NUSUMNCiAJCWlmIChmbGFncyAmIExM RV9ERUxFVEUpDQotCQkJbG9nKExPR19JTkZPLCAiaW50ZXJmYWNlIGFkZHJl c3MgaXMgbWlzc2luZyBmcm9tIGNhY2hlID0gJXAgIGluIGRlbGV0ZVxuIiwg bGxlKTsJDQorCQkJbG9nKExPR19JTkZPLCAiaW50ZXJmYWNlIGFkZHJlc3Mg aXMgbWlzc2luZyBmcm9tIGNhY2hlID0gJXAgIGluIGRlbGV0ZVxuIiwgbGxl KTsNCiAjZW5kaWYNCiAJCWlmICghKGZsYWdzICYgTExFX0NSRUFURSkpDQog CQkJcmV0dXJuIChOVUxMKTsNCmRpZmYgLXIgLXUgL3Vzcl9kaWZmL3NyYy9z eXMvbmV0aW5ldC9pcGZ3L2lwX2Z3X3RhYmxlLmMgL3Vzci9zcmMvc3lzL25l dGluZXQvaXBmdy9pcF9md190YWJsZS5jDQotLS0gL3Vzcl9kaWZmL3NyYy9z eXMvbmV0aW5ldC9pcGZ3L2lwX2Z3X3RhYmxlLmMJMjAxMC0wMy0yMyAwOTo1 ODo1OS4wMDAwMDAwMDAgKzAwMDANCisrKyAvdXNyL3NyYy9zeXMvbmV0aW5l dC9pcGZ3L2lwX2Z3X3RhYmxlLmMJMjAxMC0wOS0wNiAxMToyMjozOS4wMDAw MDAwMDAgKzAwMDANCkBAIC0xMzcsNyArMTM3LDcgQEANCiAJbWFzay5zaW5f YWRkci5zX2FkZHIgPSBodG9ubChtbGVuID8gfigoMSA8PCAoMzIgLSBtbGVu KSkgLSAxKSA6IDApOw0KIAlzYS5zaW5fYWRkci5zX2FkZHIgPSBhZGRyICYg bWFzay5zaW5fYWRkci5zX2FkZHI7DQogCUlQRldfV0xPQ0soY2gpOw0KLQll bnQgPSAoc3RydWN0IHRhYmxlX2VudHJ5ICopcm5oLT5ybmhfZGVsYWRkcigm c2EsICZtYXNrLCBybmgpOw0KKwllbnQgPSAoc3RydWN0IHRhYmxlX2VudHJ5 ICopcm5oLT5ybmhfZGVsYWRkcigmc2EsICZtYXNrLCBybmgsIE5VTEwpOw0K IAlpZiAoZW50ID09IE5VTEwpIHsNCiAJCUlQRldfV1VOTE9DSyhjaCk7DQog CQlyZXR1cm4gKEVTUkNIKTsNCkBAIC0xNTQsNyArMTU0LDcgQEANCiAJc3Ry dWN0IHRhYmxlX2VudHJ5ICplbnQ7DQogDQogCWVudCA9IChzdHJ1Y3QgdGFi bGVfZW50cnkgKikNCi0JICAgIHJuaC0+cm5oX2RlbGFkZHIocm4tPnJuX2tl eSwgcm4tPnJuX21hc2ssIHJuaCk7DQorCSAgICBybmgtPnJuaF9kZWxhZGRy KHJuLT5ybl9rZXksIHJuLT5ybl9tYXNrLCBybmgsIE5VTEwpOw0KIAlpZiAo ZW50ICE9IE5VTEwpDQogCQlmcmVlKGVudCwgTV9JUEZXX1RCTCk7DQogCXJl dHVybiAoMCk7DQpkaWZmIC1yIC11IC91c3JfZGlmZi9zcmMvc3lzL25ldGlu ZXQvcmF3X2lwLmMgL3Vzci9zcmMvc3lzL25ldGluZXQvcmF3X2lwLmMNCi0t LSAvdXNyX2RpZmYvc3JjL3N5cy9uZXRpbmV0L3Jhd19pcC5jCTIwMTAtMDgt MjcgMTg6NTA6MTIuMDAwMDAwMDAwICswMDAwDQorKysgL3Vzci9zcmMvc3lz L25ldGluZXQvcmF3X2lwLmMJMjAxMC0wOS0xMSAwMjozNzoyNi4wMDAwMDAw MDAgKzAwMDANCkBAIC03NTUsNiArNzU1LDggQEANCiAJCWlmIChlcnIgPT0g MCkNCiAJCQlpYS0+aWFfZmxhZ3MgfD0gSUZBX1JPVVRFOw0KIAkJZXJyID0g aWZhX2FkZF9sb29wYmFja19yb3V0ZSgoc3RydWN0IGlmYWRkciAqKWlhLCBz YSk7DQorCQlpZiAoZXJyID09IDApDQorCQkgICAgICAgIGlhLT5pYV9mbGFn cyB8PSBJRkFfUlRTRUxGOw0KIAkJaWZhX2ZyZWUoJmlhLT5pYV9pZmEpOw0K IAkJYnJlYWs7DQogCX0NCg== --168430090-52481847-1284174321=:5369--