From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45678) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL9rw-0001ns-QN for Qemu-devel@nongnu.org; Wed, 05 Mar 2014 06:20:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WL9rp-00088Q-PM for Qemu-devel@nongnu.org; Wed, 05 Mar 2014 06:20:12 -0500 Received: from alln-iport-7.cisco.com ([173.37.142.94]:37036) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL9rp-00085F-73 for Qemu-devel@nongnu.org; Wed, 05 Mar 2014 06:20:05 -0500 Received: from xhc-rcd-x05.cisco.com (xhc-rcd-x05.cisco.com [173.37.183.79]) by rcdn-core2-2.cisco.com (8.14.5/8.14.5) with ESMTP id s25BK3aW001426 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL) for ; Wed, 5 Mar 2014 11:20:03 GMT From: "Anton Ivanov (antivano)" Date: Wed, 5 Mar 2014 11:20:02 +0000 Message-ID: <53170860.2040100@cisco.com> Content-Language: en-US Content-Type: multipart/mixed; boundary="_002_531708602040100ciscocom_" MIME-Version: 1.0 Subject: [Qemu-devel] Contribution - L2TPv3 - resubmit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Qemu-devel@nongnu.org" --_002_531708602040100ciscocom_ Content-Type: text/plain; charset="iso-8859-1" Content-ID: <1C4C77FBD2F9A84ABDF5ED24A7B22DBC@emea.cisco.com> Content-Transfer-Encoding: quoted-printable Hi all, This is a functional driver which will interoperate versus most L2TPv3=20 implementations. It cannot be split into smaller patches - this is an=20 entire transport. It will get one small incremental update at a later date. Some broken=20 l2tpv3 implementations require a counter field but do not process it=20 correctly so for them you need a special workaround - keep the counter=20 field always at zero (this unfortunately includes at least some versions=20 of the l2tpv3 stack in the linux kernel). I believe I have addressed most comments so far. If I have missed=20 something I apologize. The only one I cannot address is the possible=20 mis-aligned access faults for header checks on platforms that may=20 penalize it. I do not know the right qemu way of doing that. Best Regards, A. --_002_531708602040100ciscocom_ Content-Type: text/x-patch; name="l2tpv3.diff" Content-Description: l2tpv3.diff Content-Disposition: attachment; filename="l2tpv3.diff"; size=19628; creation-date="Wed, 05 Mar 2014 11:20:02 GMT"; modification-date="Wed, 05 Mar 2014 11:20:02 GMT" Content-ID: Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZS5vYmpzIGIvbmV0L01ha2VmaWxlLm9ianMNCmluZGV4 IDQ4NTRhMTQuLjE2MDIxNGUgMTAwNjQ0DQotLS0gYS9uZXQvTWFrZWZpbGUub2Jqcw0KKysrIGIv bmV0L01ha2VmaWxlLm9ianMNCkBAIC0yLDYgKzIsNyBAQCBjb21tb24tb2JqLXkgPSBuZXQubyBx dWV1ZS5vIGNoZWNrc3VtLm8gdXRpbC5vIGh1Yi5vDQogY29tbW9uLW9iai15ICs9IHNvY2tldC5v DQogY29tbW9uLW9iai15ICs9IGR1bXAubw0KIGNvbW1vbi1vYmoteSArPSBldGgubw0KK2NvbW1v bi1vYmotJChDT05GSUdfTElOVVgpICs9IGwydHB2My5vDQogY29tbW9uLW9iai0kKENPTkZJR19Q T1NJWCkgKz0gdGFwLm8NCiBjb21tb24tb2JqLSQoQ09ORklHX0xJTlVYKSArPSB0YXAtbGludXgu bw0KIGNvbW1vbi1vYmotJChDT05GSUdfV0lOMzIpICs9IHRhcC13aW4zMi5vDQpkaWZmIC0tZ2l0 IGEvbmV0L2NsaWVudHMuaCBiL25ldC9jbGllbnRzLmgNCmluZGV4IDc3OTMyOTQuLmJiZjE3N2Mg MTAwNjQ0DQotLS0gYS9uZXQvY2xpZW50cy5oDQorKysgYi9uZXQvY2xpZW50cy5oDQpAQCAtNDcs NiArNDcsOCBAQCBpbnQgbmV0X2luaXRfdGFwKGNvbnN0IE5ldENsaWVudE9wdGlvbnMgKm9wdHMs IGNvbnN0IGNoYXIgKm5hbWUsDQogaW50IG5ldF9pbml0X2JyaWRnZShjb25zdCBOZXRDbGllbnRP cHRpb25zICpvcHRzLCBjb25zdCBjaGFyICpuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgTmV0 Q2xpZW50U3RhdGUgKnBlZXIpOw0KIA0KK2ludCBuZXRfaW5pdF9sMnRwdjMoY29uc3QgTmV0Q2xp ZW50T3B0aW9ucyAqb3B0cywgY29uc3QgY2hhciAqbmFtZSwNCisgICAgICAgICAgICAgICAgICAg IE5ldENsaWVudFN0YXRlICpwZWVyKTsNCiAjaWZkZWYgQ09ORklHX1ZERQ0KIGludCBuZXRfaW5p dF92ZGUoY29uc3QgTmV0Q2xpZW50T3B0aW9ucyAqb3B0cywgY29uc3QgY2hhciAqbmFtZSwNCiAg ICAgICAgICAgICAgICAgIE5ldENsaWVudFN0YXRlICpwZWVyKTsNCmRpZmYgLS1naXQgYS9uZXQv bDJ0cHYzLmMgYi9uZXQvbDJ0cHYzLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwLi4zMzQ4YjVkDQotLS0gL2Rldi9udWxsDQorKysgYi9uZXQvbDJ0cHYzLmMNCkBAIC0wLDAg KzEsNTU0IEBADQorLyoNCisgKiBRRU1VIFN5c3RlbSBFbXVsYXRvcg0KKyAqDQorICogQ29weXJp Z2h0IChjKSAyMDAzLTIwMDggRmFicmljZSBCZWxsYXJkDQorICogQ29weXJpZ2h0IChjKSAyMDEy LTIwMTQgQ2lzY28gU3lzdGVtcw0KKyAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0KKyAqIG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLCB0byBkZWFsDQorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KKyAqIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5k L29yIHNlbGwNCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKyAqDQorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4NCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4NCisgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g Tk8gRVZFTlQgU0hBTEwNCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sDQorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTg0KKyAqIFRIRSBTT0ZUV0FSRS4NCisgKi8NCisN CisjaW5jbHVkZSA8bGludXgvaXAuaD4NCisjaW5jbHVkZSA8bmV0ZGIuaD4NCisjaW5jbHVkZSAi Y29uZmlnLWhvc3QuaCINCisjaW5jbHVkZSAibmV0L25ldC5oIg0KKyNpbmNsdWRlICJjbGllbnRz LmgiDQorI2luY2x1ZGUgIm1vbml0b3IvbW9uaXRvci5oIg0KKyNpbmNsdWRlICJxZW11LWNvbW1v bi5oIg0KKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIg0KKyNpbmNsdWRlICJxZW11L29w dGlvbi5oIg0KKyNpbmNsdWRlICJxZW11L3NvY2tldHMuaCINCisjaW5jbHVkZSAicWVtdS9pb3Yu aCINCisjaW5jbHVkZSAicWVtdS9tYWluLWxvb3AuaCINCisNCisNCisvKiBUaGUgYnVmZmVyIHNp emUgbmVlZHMgdG8gYmUgaW52ZXN0aWdhdGVkIGZvciBvcHRpbXVtIG51bWJlcnMgYW5kDQorICog b3B0aW11bSBtZWFucyBvZiBwYWdpbmcgaW4gb24gZGlmZmVyZW50IHN5c3RlbXMuIFRoaXMgc2l6 ZSBpcw0KKyAqIGNob3NlbiB0byBiZSBzdWZmaWNpZW50IHRvIGFjY29tbW9kYXRlIG9uZSBwYWNr ZXQgd2l0aCBzb21lIGhlYWRlcnMNCisgKi8NCisNCisjZGVmaW5lIEJVRkZFUl9BTElHTiBzeXNj b25mKF9TQ19QQUdFU0laRSkNCisjZGVmaW5lIEJVRkZFUl9TSVpFIDIwNDgNCisjZGVmaW5lIElP VlNJWkUgMg0KKyNkZWZpbmUgTUFYX0wyVFBWM19NU0dDTlQgMzIgDQorI2RlZmluZSBNQVhfTDJU UFYzX0lPVkNOVCAoTUFYX0wyVFBWM19NU0dDTlQgKiBJT1ZTSVpFKQ0KKw0KKyNpZm5kZWYgSVBQ Uk9UT19MMlRQDQorI2RlZmluZSBJUFBST1RPX0wyVFAgMHg3Mw0KKyNlbmRpZg0KKw0KK3R5cGVk ZWYgc3RydWN0IE5ldEwyVFBWM1N0YXRlIHsNCisgICAgTmV0Q2xpZW50U3RhdGUgbmM7DQorICAg IGludCBmZDsNCisgICAgaW50IHN0YXRlOyANCisgICAgdW5zaWduZWQgaW50IGluZGV4Ow0KKyAg ICB1bnNpZ25lZCBpbnQgcGFja2V0X2xlbjsNCisNCisgICAgLyogDQorICAgICAqCXRoZXNlIGFy ZSB1c2VkIGZvciB4bWl0IC0gdGhhdCBoYXBwZW5zIHBhY2tldCBhIHRpbWUNCisgICAgICoJYW5k IGZvciBmaXJzdCBzaWduIG9mIGxpZmUgcGFja2V0IChlYXNpZXIgdG8gcGFyc2UgdGhhdCBvbmNl KQ0KKyAgICAgKi8gDQorDQorICAgIHVpbnQ4X3QgKmhlYWRlcl9idWY7DQorICAgIHN0cnVjdCBp b3ZlYyAqdmVjOw0KKw0KKyAgICAvKiANCisgICAgICogdGhlc2UgYXJlIHVzZWQgZm9yIHJlY2Vp dmUgLSB0cnkgdG8gImVhdCIgdXAgdG8gMzIgcGFja2V0cyBhdCBhIHRpbWUNCisgICAgICovDQor DQorICAgIHN0cnVjdCBtbXNnaGRyICptc2d2ZWM7DQorDQorICAgIC8qDQorICAgICAqIHBlZXIg YWRkcmVzcw0KKyAgICAgKi8NCisNCisgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmRncmFt X2RzdDsgDQorICAgIHVpbnQzMl90IGRzdF9zaXplOw0KKw0KKyAgICAvKg0KKyAgICAgKiBMMlRQ djMgcGFyYW1ldGVycw0KKyAgICAgKi8NCisNCisgICAgdWludDY0X3QgcnhfY29va2llOw0KKyAg ICB1aW50NjRfdCB0eF9jb29raWU7DQorICAgIHVpbnQzMl90IHJ4X3Nlc3Npb247DQorICAgIHVp bnQzMl90IHR4X3Nlc3Npb247DQorICAgIHVpbnQzMl90IGhlYWRlcl9zaXplOw0KKyAgICB1aW50 MzJfdCBjb3VudGVyOw0KKw0KKyAgICAvKg0KKyAgICAgKiBQcmVjb21wdXRlZCBvZmZzZXRzDQor ICAgICAqLw0KKw0KKyAgICB1aW50MzJfdCBvZmZzZXQ7ICAgDQorICAgIHVpbnQzMl90IGNvb2tp ZV9vZmZzZXQ7DQorICAgIHVpbnQzMl90IGNvdW50ZXJfb2Zmc2V0Ow0KKyAgICB1aW50MzJfdCBz ZXNzaW9uX29mZnNldDsNCisNCisgICAgLyogRmxhZ3MgKi8NCisNCisgICAgYm9vbCBpcHY2Ow0K KyAgICBib29sIHVkcDsNCisgICAgYm9vbCBoYXNfY291bnRlcjsNCisgICAgYm9vbCBjb29raWU7 DQorICAgIGJvb2wgY29va2llX2lzXzY0Ow0KKw0KK30gTmV0TDJUUFYzU3RhdGU7DQorDQordHlw ZWRlZiBzdHJ1Y3QgTmV0TDJUUFYzTGlzdGVuU3RhdGUgew0KKyAgICBOZXRDbGllbnRTdGF0ZSBu YzsNCisgICAgY2hhciAqbW9kZWw7DQorICAgIGNoYXIgKm5hbWU7DQorICAgIGludCBmZDsNCit9 IE5ldEwyVFBWM0xpc3RlblN0YXRlOw0KKw0KK3N0YXRpYyBpbnQgbDJ0cHYzX2Zvcm1faGVhZGVy KE5ldEwyVFBWM1N0YXRlICpzKSANCit7DQorICAgIHVpbnQzMl90ICpoZWFkZXI7DQorICAgIHVp bnQzMl90ICpzZXNzaW9uOw0KKyAgICB1aW50NjRfdCAqY29va2llNjQ7DQorICAgIHVpbnQzMl90 ICpjb29raWUzMjsNCisgICAgdWludDMyX3QgKmNvdW50ZXI7DQorDQorICAgIGlmIChzLT51ZHAp IHsNCisJaGVhZGVyID0gKHVpbnQzMl90ICopIHMtPmhlYWRlcl9idWY7DQorCXN0bF9iZV9wKGhl YWRlciwgMHgzMDAwMCk7DQorICAgIH0NCisgICAgc2Vzc2lvbiA9ICh1aW50MzJfdCAqKSAocy0+ aGVhZGVyX2J1ZiArIHMtPnNlc3Npb25fb2Zmc2V0KTsNCisgICAgc3RsX2JlX3Aoc2Vzc2lvbiwg cy0+dHhfc2Vzc2lvbik7DQorDQorICAgIGlmIChzLT5jb29raWUpIHsNCisJaWYgKHMtPmNvb2tp ZV9pc182NCkgew0KKwkgICAgY29va2llNjQgPSAodWludDY0X3QgKikocy0+aGVhZGVyX2J1ZiAr IHMtPmNvb2tpZV9vZmZzZXQpOw0KKwkgICAgc3RxX2JlX3AoY29va2llNjQsIHMtPnR4X2Nvb2tp ZSk7DQorCX0gZWxzZSB7DQorCSAgICBjb29raWUzMiA9ICh1aW50MzJfdCAqKSAocy0+aGVhZGVy X2J1ZiArIHMtPmNvb2tpZV9vZmZzZXQpOw0KKwkgICAgc3RsX2JlX3AoY29va2llMzIsIHMtPnR4 X2Nvb2tpZSk7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAocy0+aGFzX2NvdW50ZXIpIHsNCisJ Y291bnRlciA9ICh1aW50MzJfdCAqKShzLT5oZWFkZXJfYnVmICsgcy0+Y291bnRlcl9vZmZzZXQp Ow0KKwlzdGxfYmVfcChjb3VudGVyLCArK3MtPmNvdW50ZXIpOw0KKyAgICB9DQorICAgIHJldHVy biAwOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBuZXRfbDJ0cHYzX3JlY2VpdmVfZGdyYW1faW92 KE5ldENsaWVudFN0YXRlICpuYywgDQorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwg DQorCQkJCSAgICBpbnQgaW92Y250KQ0KK3sNCisgICAgTmV0TDJUUFYzU3RhdGUgKnMgPSBET19V UENBU1QoTmV0TDJUUFYzU3RhdGUsIG5jLCBuYyk7DQorDQorICAgIHN0cnVjdCBtc2doZHIgbWVz c2FnZTsNCisgICAgaW50IHJldDsNCisNCisgICAgaWYgKGlvdmNudCA+IE1BWF9MMlRQVjNfSU9W Q05UIC0gMSkgew0KKwllcnJvcl9yZXBvcnQoImlvdmVjIHRvbyBsb25nICVkID4gJWQsIGNoYW5n ZSBsMnRwdjMuaFxuIiwgaW92Y250LCBNQVhfTDJUUFYzX0lPVkNOVCk7DQorCXJldHVybiAtMTsN CisgICAgfQ0KKyAgICBsMnRwdjNfZm9ybV9oZWFkZXIocyk7DQorICAgIG1lbWNweShzLT52ZWMg KyAxLCBpb3YsIGlvdmNudCAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpKTsNCisgICAgcy0+dmVjLT5p b3ZfYmFzZSA9IHMtPmhlYWRlcl9idWY7DQorICAgIHMtPnZlYy0+aW92X2xlbiA9IHMtPm9mZnNl dDsNCisgICAgbWVzc2FnZS5tc2dfbmFtZSA9IHMtPmRncmFtX2RzdDsNCisgICAgbWVzc2FnZS5t c2dfbmFtZWxlbiA9IHMtPmRzdF9zaXplOw0KKyAgICBtZXNzYWdlLm1zZ19pb3YgPSAoc3RydWN0 IGlvdmVjICopIHMtPnZlYzsNCisgICAgbWVzc2FnZS5tc2dfaW92bGVuID0gaW92Y250ICsgMTsg DQorICAgIG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBOVUxMOw0KKyAgICBtZXNzYWdlLm1zZ19jb250 cm9sbGVuID0gMDsNCisgICAgbWVzc2FnZS5tc2dfZmxhZ3MgPSAwOw0KKyAgICBkbyB7DQorCXJl dCA9IHNlbmRtc2cocy0+ZmQsICZtZXNzYWdlLCAwKTsNCisgICAgfSB3aGlsZSAoKHJldCA9PSAt MSkgJiYgKGVycm5vID09IEVJTlRSKSk7DQorICAgIGlmIChyZXQgPiAwKSB7DQorCXJldCAtPSBz LT5vZmZzZXQ7IA0KKyAgICB9IGVsc2UgaWYgKHJldCA9PSAwKSB7DQorCXJldCA9IGlvdl9zaXpl KGlvdiwgaW92Y250KTsNCisgICAgfSANCisgICAgcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGlj IHNzaXplX3QgbmV0X2wydHB2M19yZWNlaXZlX2RncmFtKE5ldENsaWVudFN0YXRlICpuYywgDQor CQkJCQljb25zdCB1aW50OF90ICpidWYsIA0KKwkJCQkJc2l6ZV90IHNpemUpDQorew0KKyAgICBO ZXRMMlRQVjNTdGF0ZSAqcyA9IERPX1VQQ0FTVChOZXRMMlRQVjNTdGF0ZSwgbmMsIG5jKTsNCisN CisgICAgc3RydWN0IGlvdmVjICogdmVjOw0KKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7DQor ICAgIHNzaXplX3QgcmV0ID0gMDsNCisNCisgICAgbDJ0cHYzX2Zvcm1faGVhZGVyKHMpOw0KKyAg ICB2ZWMgPSBzLT52ZWM7DQorICAgIHZlYy0+aW92X2Jhc2UgPSBzLT5oZWFkZXJfYnVmOw0KKyAg ICB2ZWMtPmlvdl9sZW4gPSBzLT5vZmZzZXQ7DQorICAgIHZlYysrOw0KKyAgICB2ZWMtPmlvdl9i YXNlID0gKHZvaWQgKikgYnVmOw0KKyAgICB2ZWMtPmlvdl9sZW4gPSBzaXplOw0KKyAgICBtZXNz YWdlLm1zZ19uYW1lID0gcy0+ZGdyYW1fZHN0Ow0KKyAgICBtZXNzYWdlLm1zZ19uYW1lbGVuID0g cy0+ZHN0X3NpemU7DQorICAgIG1lc3NhZ2UubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikgcy0+ dmVjOw0KKyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAyOw0KKyAgICBtZXNzYWdlLm1zZ19jb250 cm9sID0gTlVMTDsNCisgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IDA7DQorICAgIG1lc3Nh Z2UubXNnX2ZsYWdzID0gMDsNCisgICAgZG8gew0KKwlyZXQgPSBzZW5kbXNnKHMtPmZkLCAmbWVz c2FnZSwgMCk7DQorICAgIH0gd2hpbGUgKChyZXQgPT0gLTEpICYmIChlcnJubyA9PSBFSU5UUikp Ow0KKyAgICBpZiAocmV0ID4gMCkgew0KKwlyZXQgLT0gcy0+b2Zmc2V0OyANCisgICAgfSBlbHNl IGlmIChyZXQgPT0gMCkgew0KKwlyZXQgPSBzaXplOw0KKyAgICB9IA0KKyAgICByZXR1cm4gcmV0 Ow0KK30NCisNCitzdGF0aWMgaW50IGwydHB2M192ZXJpZnlfaGVhZGVyKE5ldEwyVFBWM1N0YXRl ICpzLCANCisJCQkJICAgIHVpbnQ4X3QgKmJ1ZikgDQorew0KKw0KKyAgICB1aW50NjRfdCAqY29v a2llNjQ7DQorICAgIHVpbnQzMl90ICpjb29raWUzMjsNCisgICAgdWludDMyX3QgKnNlc3Npb247 DQorDQorICAgIGlmICgoIXMtPnVkcCkgJiYgKCFzLT5pcHY2KSl7DQorCWJ1ZiArPSBzaXplb2Yo c3RydWN0IGlwaGRyKSAvKiBmaXggZm9yIGlwdjQgcmF3ICovOw0KKyAgICB9IA0KKyAgICBpZiAo cy0+Y29va2llKSB7DQorCWlmIChzLT5jb29raWVfaXNfNjQpIHsNCisJICAgIC8qIDY0IGJpdCBj b29raWUgKi8NCisJICAgIGNvb2tpZTY0ID0gKHVpbnQ2NF90ICopKGJ1ZiArIHMtPmNvb2tpZV9v ZmZzZXQpOw0KKwkgICAgaWYgKGxkcV9iZV9wKGNvb2tpZTY0KSAhPSBzLT5yeF9jb29raWUpIHsN CisJCWVycm9yX3JlcG9ydCgidW5rbm93biBjb29raWUgaWRcbiIpOw0KKwkJcmV0dXJuIC0xOyAN CisJICAgIH0NCisJfSBlbHNlIHsNCisJICAgIGNvb2tpZTMyID0gKHVpbnQzMl90ICopKGJ1ZiAr IHMtPmNvb2tpZV9vZmZzZXQpOw0KKwkgICAgaWYgKGxkbF9iZV9wKGNvb2tpZTMyKSAhPSAqICh1 aW50MzJfdCAqKSAmcy0+cnhfY29va2llKSB7DQorCQllcnJvcl9yZXBvcnQoInVua25vd24gY29v a2llIGlkXG4iKTsNCisJCXJldHVybiAtMSA7IA0KKwkgICAgfQ0KKwl9DQorICAgIH0NCisgICAg c2Vzc2lvbiA9ICh1aW50MzJfdCAqKSAoYnVmICsgcy0+c2Vzc2lvbl9vZmZzZXQpOw0KKyAgICBp ZiAobGRsX2JlX3Aoc2Vzc2lvbikgIT0gcy0+cnhfc2Vzc2lvbikgew0KKwllcnJvcl9yZXBvcnQo InNlc3Npb24gbWlzbWF0Y2hcbiIpOw0KKwlyZXR1cm4gLTE7DQorICAgIH0JDQorICAgIHJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBuZXRfbDJ0cHYzX3NlbmQodm9pZCAqb3BhcXVlKQ0K K3sNCisgICAgTmV0TDJUUFYzU3RhdGUgKnMgPSBvcGFxdWU7DQorDQorICAgIGludCBpLCBjb3Vu dCwgb2Zmc2V0Ow0KKyAgICBzdHJ1Y3QgbW1zZ2hkciAqIG1zZ3ZlYzsNCisgICAgc3RydWN0IGlv dmVjICogdmVjOw0KKw0KKyAgICBtc2d2ZWMgPSBzLT5tc2d2ZWM7DQorICAgIG9mZnNldCA9IHMt Pm9mZnNldDsNCisgICAgaWYgKCghcy0+dWRwKSAmJiAoIXMtPmlwdjYpKXsNCisJb2Zmc2V0ICs9 ICAgc2l6ZW9mKHN0cnVjdCBpcGhkcik7DQorICAgIH0gIA0KKyAgICBjb3VudCA9IHJlY3ZtbXNn KHMtPmZkLCBtc2d2ZWMsIE1BWF9MMlRQVjNfTVNHQ05ULCBNU0dfRE9OVFdBSVQsIE5VTEwpOw0K KyAgICBmb3IgKGk9MDtpPGNvdW50O2krKykgew0KKwlpZiAobXNndmVjLT5tc2dfbGVuID4gMCkg ew0KKwkgICAgdmVjID0gbXNndmVjLT5tc2dfaGRyLm1zZ19pb3Y7DQorCSAgICBpZiAoDQorCQko bXNndmVjLT5tc2dfbGVuID4gb2Zmc2V0KSAmJiANCisJCShsMnRwdjNfdmVyaWZ5X2hlYWRlcihz LCB2ZWMtPmlvdl9iYXNlKSA9PSAwKQ0KKwkJKSB7DQorCQl2ZWMrKzsNCisJCXFlbXVfc2VuZF9w YWNrZXQoJnMtPm5jLCB2ZWMtPmlvdl9iYXNlLCBtc2d2ZWMtPm1zZ19sZW4gLSBvZmZzZXQpOw0K KwkgICAgfSBlbHNlIHsNCisJCWVycm9yX3JlcG9ydCgibDJ0cHYzIGhlYWRlciB2ZXJpZmljYXRp b24gZmFpbGVkXG4iKTsNCisJCXZlYysrOyANCisJICAgIH0NCisJfSANCisJbXNndmVjKys7DQor ICAgIH0NCit9DQorDQorc3RhdGljIHZvaWQgZGVzdHJveV92ZWN0b3Ioc3RydWN0IG1tc2doZHIg KiBtc2d2ZWMsIGludCBjb3VudCwgaW50IGlvdmNvdW50KSANCit7DQorICAgIGludCBpLCBqOw0K KyAgICBzdHJ1Y3QgaW92ZWMgKiBpb3Y7DQorICAgIHN0cnVjdCBtbXNnaGRyICogY2xlYW51cCA9 IG1zZ3ZlYzsNCisgICAgaWYgKGNsZWFudXApIHsNCisJZm9yIChpPTA7aTxjb3VudDtpKyspIHsN CisJICAgIGlmIChjbGVhbnVwLT5tc2dfaGRyLm1zZ19pb3YpIHsNCisJCWlvdiA9IGNsZWFudXAt Pm1zZ19oZHIubXNnX2lvdjsNCisJCWZvciAoaj0wO2o8aW92Y291bnQ7aisrKSB7DQorCQkgICAg aWYgKGlvdi0+aW92X2Jhc2UpIHsNCisJCQlnX2ZyZWUoaW92LT5pb3ZfYmFzZSk7DQorCQkgICAg fQ0KKwkJICAgIGlvdisrOw0KKwkJfQ0KKwkJZ19mcmVlKGNsZWFudXAtPm1zZ19oZHIubXNnX2lv dik7DQorCSAgICB9DQorCSAgICBjbGVhbnVwKys7DQorCX0NCisJZ19mcmVlKG1zZ3ZlYyk7DQor ICAgIH0NCit9DQorDQorc3RhdGljIHN0cnVjdCBtbXNnaGRyICogYnVpbGRfbDJ0cHYzX3ZlY3Rv cihOZXRMMlRQVjNTdGF0ZSAqcywgaW50IGNvdW50KSANCit7DQorICAgIGludCBpOw0KKyAgICBz dHJ1Y3QgaW92ZWMgKiBpb3Y7DQorICAgIHN0cnVjdCBtbXNnaGRyICogbXNndmVjLCAqcmVzdWx0 Ow0KKw0KKyAgICBtc2d2ZWMgPSBnX21hbGxvYyhzaXplb2Yoc3RydWN0IG1tc2doZHIpICogY291 bnQpOw0KKyAgICByZXN1bHQgPSBtc2d2ZWM7DQorICAgIGZvciAoaT0wO2kgPCBjb3VudCA7aSsr KSB7DQorCW1zZ3ZlYy0+bXNnX2hkci5tc2dfbmFtZSA9IE5VTEw7DQorCW1zZ3ZlYy0+bXNnX2hk ci5tc2dfbmFtZWxlbiA9IDA7DQorCWlvdiA9ICBnX21hbGxvYyhzaXplb2Yoc3RydWN0IGlvdmVj KSAqIElPVlNJWkUpOw0KKwltc2d2ZWMtPm1zZ19oZHIubXNnX2lvdiA9IGlvdjsNCisJaWYgKCgh cy0+dWRwKSAmJiAoIXMtPmlwdjYpKXsNCisJICAgIC8qIGZpeCBmb3IgaXB2NCByYXcgKi87DQor CSAgICBpb3YtPmlvdl9iYXNlID0gZ19tYWxsb2Mocy0+b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBp cGhkcikpOyANCisJICAgIGlvdi0+aW92X2xlbiA9IHMtPm9mZnNldCArIHNpemVvZiAoc3RydWN0 IGlwaGRyKTsNCisJfSBlbHNlIHsNCisJICAgIGlvdi0+aW92X2Jhc2UgPSBnX21hbGxvYyhzLT5v ZmZzZXQpOw0KKwkgICAgaW92LT5pb3ZfbGVuID0gcy0+b2Zmc2V0Ow0KKwl9DQorCWlvdisrIDsN CisJaW92LT5pb3ZfYmFzZSA9IHFlbXVfbWVtYWxpZ24oQlVGRkVSX0FMSUdOLEJVRkZFUl9TSVpF KTsNCisJaW92LT5pb3ZfbGVuID0gQlVGRkVSX1NJWkU7DQorCW1zZ3ZlYy0+bXNnX2hkci5tc2df aW92bGVuID0gMjsNCisJbXNndmVjLT5tc2dfaGRyLm1zZ19jb250cm9sID0gTlVMTDsNCisJbXNn dmVjLT5tc2dfaGRyLm1zZ19jb250cm9sbGVuID0gMDsNCisJbXNndmVjLT5tc2dfaGRyLm1zZ19m bGFncyA9IDA7DQorCW1zZ3ZlYysrOw0KKyAgICB9DQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIG5ldF9sMnRwdjNfY2xlYW51cChOZXRDbGllbnRTdGF0ZSAqbmMpIA0K K3sNCisgICAgTmV0TDJUUFYzU3RhdGUgKnMgPSBET19VUENBU1QoTmV0TDJUUFYzU3RhdGUsIG5j LCBuYyk7DQorICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIocy0+ZmQsIE5VTEwsIE5VTEwsIE5VTEwp Ow0KKyAgICBjbG9zZShzLT5mZCk7DQorICAgIGRlc3Ryb3lfdmVjdG9yKHMtPm1zZ3ZlYywgTUFY X0wyVFBWM19NU0dDTlQsIElPVlNJWkUpOw0KKyAgICBnX2ZyZWUocy0+aGVhZGVyX2J1Zik7DQor ICAgIGdfZnJlZShzLT5kZ3JhbV9kc3QpOw0KK30NCisNCitzdGF0aWMgTmV0Q2xpZW50SW5mbyBu ZXRfbDJ0cHYzX2luZm8gPSB7DQorICAgIC50eXBlID0gTkVUX0NMSUVOVF9PUFRJT05TX0tJTkRf TDJUUFYzLA0KKyAgICAuc2l6ZSA9IHNpemVvZihOZXRMMlRQVjNTdGF0ZSksDQorICAgIC5yZWNl aXZlID0gbmV0X2wydHB2M19yZWNlaXZlX2RncmFtLA0KKyAgICAucmVjZWl2ZV9pb3YgPSBuZXRf bDJ0cHYzX3JlY2VpdmVfZGdyYW1faW92LA0KKyAgICAuY2xlYW51cCA9IG5ldF9sMnRwdjNfY2xl YW51cCwNCit9Ow0KKw0KK2ludCBuZXRfaW5pdF9sMnRwdjMoY29uc3QgTmV0Q2xpZW50T3B0aW9u cyAqb3B0cywNCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsDQorICAgICAg ICAgICAgICAgICAgICBOZXRDbGllbnRTdGF0ZSAqcGVlcikgDQorew0KKw0KKw0KKyAgICBjb25z dCBOZXRkZXZMMlRQdjNPcHRpb25zICogbDJ0cHYzOw0KKyAgICBOZXRMMlRQVjNTdGF0ZSAqczsN CisgICAgTmV0Q2xpZW50U3RhdGUgKm5jOw0KKyAgICBpbnQgZmQsIGdhaXJldDsNCisgICAgc3Ry dWN0IGFkZHJpbmZvIGhpbnRzOw0KKyAgICBzdHJ1Y3QgYWRkcmluZm8gKiByZXN1bHQgPSBOVUxM Ow0KKyAgICBjaGFyICogc3JjcG9ydCwgKiBkc3Rwb3J0Ow0KKw0KKyAgICBuYyA9IHFlbXVfbmV3 X25ldF9jbGllbnQoJm5ldF9sMnRwdjNfaW5mbywgcGVlciwgImwydHB2MyIsIG5hbWUpOw0KKw0K KyAgICBzID0gRE9fVVBDQVNUKE5ldEwyVFBWM1N0YXRlLCBuYywgbmMpOw0KKw0KKyAgICBhc3Nl cnQob3B0cy0+a2luZCA9PSBORVRfQ0xJRU5UX09QVElPTlNfS0lORF9MMlRQVjMpOw0KKyAgICBs MnRwdjMgPSBvcHRzLT5sMnRwdjM7DQorDQorICAgIGlmIChsMnRwdjMtPmhhc19pcHY2ICYmIGwy dHB2My0+aXB2Nikgew0KKwlzLT5pcHY2ID0gbDJ0cHYzLT5pcHY2Ow0KKyAgICB9IGVsc2Ugew0K KwlzLT5pcHY2ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKGwydHB2My0+aGFzX3J4Y29v a2llIHx8IGwydHB2My0+aGFzX3R4Y29va2llKSB7DQorCWlmIChsMnRwdjMtPmhhc19yeGNvb2tp ZSAmJiBsMnRwdjMtPmhhc190eGNvb2tpZSkgew0KKwkgICAgcy0+Y29va2llID0gdHJ1ZTsNCisJ fSBlbHNlIHsNCisJICAgIHJldHVybiAtMTsNCisJfQ0KKyAgICB9IGVsc2Ugew0KKwlzLT5jb29r aWUgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobDJ0cHYzLT5oYXNfY29va2llNjQgfHwg bDJ0cHYzLT5jb29raWU2NCkgew0KKwlzLT5jb29raWVfaXNfNjQgID0gdHJ1ZTsNCisgICAgfSBl bHNlIHsNCisJcy0+Y29va2llX2lzXzY0ICA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmIChs MnRwdjMtPmhhc191ZHAgJiYgbDJ0cHYzLT51ZHApIHsNCisJcy0+dWRwID0gdHJ1ZTsNCisJaWYg KCEobDJ0cHYzLT5oYXNfc3JjcG9ydCAmJiBsMnRwdjMtPmhhc19kc3Rwb3J0KSkgew0KKwkgICAg ZXJyb3JfcmVwb3J0KCJsMnRwdjNfb3BlbiA6IG5lZWQgYm90aCBzcmMgYW5kIGRzdCBwb3J0IGZv ciB1ZHBcbiIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9IGVsc2Ugew0KKwkgICAgc3JjcG9ydCA9 IGwydHB2My0+c3JjcG9ydDsNCisJICAgIGRzdHBvcnQgPSBsMnRwdjMtPmRzdHBvcnQ7DQorCX0N CisgICAgfSBlbHNlIHsNCisJcy0+dWRwID0gZmFsc2U7DQorCXNyY3BvcnQgPSBOVUxMOw0KKwlk c3Rwb3J0ID0gTlVMTDsNCisgICAgfQ0KKw0KKw0KKyAgICBzLT5vZmZzZXQgPSA0Ow0KKyAgICBz LT5zZXNzaW9uX29mZnNldCA9IDA7DQorICAgIHMtPmNvb2tpZV9vZmZzZXQgPSA0Ow0KKyAgICBz LT5jb3VudGVyX29mZnNldCA9IDQ7DQorDQorICAgIHMtPnR4X3Nlc3Npb24gPSBsMnRwdjMtPnR4 c2Vzc2lvbjsNCisgICAgaWYgKGwydHB2My0+aGFzX3J4c2Vzc2lvbikgew0KKwlzLT5yeF9zZXNz aW9uID0gbDJ0cHYzLT5yeHNlc3Npb247DQorICAgIH0gZWxzZSB7DQorCXMtPnJ4X3Nlc3Npb24g PSBzLT50eF9zZXNzaW9uOw0KKyAgICB9DQorDQorICAgIGlmIChzLT5jb29raWUpIHsNCisJcy0+ cnhfY29va2llID0gbDJ0cHYzLT5yeGNvb2tpZTsNCisJcy0+dHhfY29va2llID0gbDJ0cHYzLT50 eGNvb2tpZTsNCisJaWYgKHMtPmNvb2tpZV9pc182NCA9PSB0cnVlKSB7DQorCSAgICAvKiA2NCBi aXQgY29va2llICovDQorCSAgICBzLT5vZmZzZXQgKz0gODsNCisJICAgIHMtPmNvdW50ZXJfb2Zm c2V0ICs9IDg7DQorCX0gZWxzZSB7DQorCSAgICAvKiAzMiBiaXQgY29va2llICovDQorCSAgICBz LT5vZmZzZXQgKz0gNDsNCisJICAgIHMtPmNvdW50ZXJfb2Zmc2V0ICs9NDsNCisJfQ0KKyAgICB9 DQorDQorICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOw0KKyAgICANCisgICAg aWYgKHMtPmlwdjYpIHsNCisJaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7DQorICAgIH0gZWxz ZSB7DQorCWhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ7DQorICAgIH0NCisgICAgaWYgKHMtPnVk cCkgew0KKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07DQorCWhpbnRzLmFpX3Byb3Rv Y29sID0gMDsNCisJcy0+b2Zmc2V0ICs9IDQ7DQorCXMtPmNvdW50ZXJfb2Zmc2V0ICs9IDQ7DQor CXMtPnNlc3Npb25fb2Zmc2V0ICs9IDQ7DQorCXMtPmNvb2tpZV9vZmZzZXQgKz0gNDsNCisgICAg fSBlbHNlIHsNCisJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1JBVzsNCisJaGludHMuYWlfcHJv dG9jb2wgPSBJUFBST1RPX0wyVFA7DQorICAgIH0NCisgICAgDQorICAgIGdhaXJldD0gZ2V0YWRk cmluZm8obDJ0cHYzLT5zcmMsIHNyY3BvcnQsICZoaW50cywgJnJlc3VsdCk7DQorDQorICAgIGlm ICgoZ2FpcmV0ICE9MCkgfHwgKHJlc3VsdCA9PSBOVUxMKSkgew0KKwllcnJvcl9yZXBvcnQoImwy dHB2M19vcGVuIDogY291bGQgbm90IHJlc29sdmUgc3JjLCBlcnJubyA9ICVzXG4iLCBnYWlfc3Ry ZXJyb3IoZ2FpcmV0KSk7DQorCXJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKGZkID0g c29ja2V0KHJlc3VsdC0+YWlfZmFtaWx5LCByZXN1bHQtPmFpX3NvY2t0eXBlLCByZXN1bHQtPmFp X3Byb3RvY29sKSkgPT0gLTEpIHsNCisJZmQgPSAtZXJybm87DQorCWVycm9yX3JlcG9ydCgibDJ0 cHYzX29wZW4gOiBzb2NrZXQgY3JlYXRpb24gZmFpbGVkLCBlcnJubyA9ICVkXG4iLCAtZmQpOw0K KwlmcmVlYWRkcmluZm8ocmVzdWx0KTsNCisJcmV0dXJuIGZkOw0KKyAgICB9IA0KKyAgICBpZiAo YmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSByZXN1bHQtPmFpX2FkZHIsIHJlc3VsdC0+YWlf YWRkcmxlbikpIHsNCisJZXJyb3JfcmVwb3J0KCJsMnRwdjNfb3BlbiA6ICBjb3VsZCBub3QgYmlu ZCBzb2NrZXQgZXJyPSVpXG4iLCBlcnJubyk7DQorCWNsb3NlKGZkKTsNCisJcmV0dXJuIC0xOw0K KyAgICB9DQorDQorICAgIGZyZWVhZGRyaW5mbyhyZXN1bHQpOw0KKw0KKyAgICBtZW1zZXQoJmhp bnRzLCAwLCBzaXplb2YoaGludHMpKTsNCisgICAgDQorICAgIGlmIChzLT5pcHY2KSB7DQorCWhp bnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2Ow0KKyAgICB9IGVsc2Ugew0KKwloaW50cy5haV9mYW1p bHkgPSBBRl9JTkVUOw0KKyAgICB9DQorICAgIGlmIChzLT51ZHApIHsNCisJaGludHMuYWlfc29j a3R5cGUgPSBTT0NLX0RHUkFNOw0KKwloaW50cy5haV9wcm90b2NvbCA9IDA7DQorICAgIH0gZWxz ZSB7DQorCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19SQVc7DQorCWhpbnRzLmFpX3Byb3RvY29s ID0gSVBQUk9UT19MMlRQOw0KKyAgICB9DQorDQorICAgIGdhaXJldD0gZ2V0YWRkcmluZm8obDJ0 cHYzLT5kc3QsIGRzdHBvcnQsICZoaW50cywgJnJlc3VsdCk7DQorICAgIGlmICgoZ2FpcmV0ICE9 MCkgfHwgKHJlc3VsdCA9PSBOVUxMKSkgew0KKwllcnJvcl9yZXBvcnQoImwydHB2M19vcGVuIDog Y291bGQgbm90IHJlc29sdmUgZHN0LCBlcnJvciA9ICVzXG4iLCBnYWlfc3RyZXJyb3IoZ2FpcmV0 KSk7DQorCXJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBzLT5kZ3JhbV9kc3QgPSBnX21hbGxv YyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsNCisgICAgbWVtc2V0KHMtPmRncmFt X2RzdCwgJ1wwJyAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOw0KKyAgICBtZW1j cHkocy0+ZGdyYW1fZHN0LCByZXN1bHQtPmFpX2FkZHIsIHJlc3VsdC0+YWlfYWRkcmxlbik7DQor ICAgIHMtPmRzdF9zaXplID0gcmVzdWx0LT5haV9hZGRybGVuOw0KKw0KKyAgICBmcmVlYWRkcmlu Zm8ocmVzdWx0KTsNCisNCisgICAgaWYgKGwydHB2My0+aGFzX2NvdW50ZXIgJiYgbDJ0cHYzLT5j b3VudGVyKSB7DQorCXMtPmhhc19jb3VudGVyID0gdHJ1ZTsNCisJcy0+b2Zmc2V0ICs9IDQ7DQor ICAgIH0gZWxzZSB7DQorCXMtPmhhc19jb3VudGVyID0gZmFsc2U7DQorICAgIH0NCisNCisgICAg aWYgKGwydHB2My0+aGFzX29mZnNldCkgew0KKwkvKiBleHRyYSBvZmZzZXQgKi8NCisJcy0+b2Zm c2V0ICs9IGwydHB2My0+b2Zmc2V0Ow0KKyAgICB9DQorDQorICAgIHMtPm1zZ3ZlYyA9IGJ1aWxk X2wydHB2M192ZWN0b3IocywgTUFYX0wyVFBWM19NU0dDTlQpOw0KKyAgICBzLT52ZWMgPSBnX21h bGxvYyhzaXplb2Yoc3RydWN0IGlvdmVjKSAqIE1BWF9MMlRQVjNfSU9WQ05UKTsgICAgDQorICAg IGlmICgoIXMtPnVkcCkgJiYgKCFzLT5pcHY2KSl7DQorCXMtPmhlYWRlcl9idWYgPSBnX21hbGxv YyhzLT5vZmZzZXQgKyBzaXplb2YgKHN0cnVjdCBpcGhkcikpOyAgICANCisgICAgfSBlbHNlIHsN CisJcy0+aGVhZGVyX2J1ZiA9IGdfbWFsbG9jKHMtPm9mZnNldCk7ICAgIA0KKyAgICB9DQorDQor ICAgIHFlbXVfc2V0X25vbmJsb2NrKGZkKTsNCisNCisgICAgaWYgKGZkIDwgMCkNCisJcmV0dXJu IC0xOw0KKw0KKyAgICBzLT5mZCA9IGZkOw0KKyAgICBzLT5jb3VudGVyID0gMDsNCisNCisgICAg cWVtdV9zZXRfZmRfaGFuZGxlcihzLT5mZCwgbmV0X2wydHB2M19zZW5kLCBOVUxMLCBzKTsNCisN CisgICAgaWYgKCFzKSB7DQorCWVycm9yX3JlcG9ydCgibDJ0cHYzX29wZW4gOiBmYWlsZWQgdG8g c2V0IGZkIGhhbmRsZXJcbiIpOw0KKwlyZXR1cm4gLTE7DQorICAgIH0NCisgICAgc25wcmludGYo cy0+bmMuaW5mb19zdHIsIHNpemVvZihzLT5uYy5pbmZvX3N0ciksDQorICAgICAgICAgICAgICJs MnRwdjM6IGNvbm5lY3RlZCIpOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQpkaWZmIC0tZ2l0IGEv bmV0L25ldC5jIGIvbmV0L25ldC5jDQppbmRleCAwYTg4ZTY4Li5lZjQwYmZlIDEwMDY0NA0KLS0t IGEvbmV0L25ldC5jDQorKysgYi9uZXQvbmV0LmMNCkBAIC0xMzIsNiArMTMyLDQzIEBAIGludCBw YXJzZV9ob3N0X3BvcnQoc3RydWN0IHNvY2thZGRyX2luICpzYWRkciwgY29uc3QgY2hhciAqc3Ry KQ0KICAgICByZXR1cm4gMDsNCiB9DQogDQoraW50IHBhcnNlX2hvc3RfcG9ydDYoc3RydWN0IHNv Y2thZGRyX2luNiAqc2FkZHIsIGNvbnN0IGNoYXIgKnN0cikNCit7DQorICAgIGNoYXIgYnVmWzUx Ml07DQorICAgIGNoYXIgKnAsICppcCwgKnBvcnQ7DQorDQorICAgIHN0cm5jcHkoKGNoYXIgKikg JmJ1Ziwgc3RyLCA1MTEpOw0KKyAgICBpcCA9IChjaGFyICopICZidWY7DQorICAgIHBvcnQgPSBO VUxMOw0KKyAgICBpbnQgcG9ydGludDsNCisNCisNCisgICAgZm9yIChwID0gKGNoYXIgKikgJmJ1 ZjsgKHAgPCAoY2hhciAqKSAmYnVmICsgc3RybGVuKHN0cikpIHx8IChwIDwgKGNoYXIgKikgJmJ1 ZiArIDUxMik7IHArKyl7DQorICAgICAgaWYgKCpwID09ICdbJykgew0KKwkgaXAgPSBwICsgMTsN CisgICAgICB9DQorICAgICAgaWYgKCpwID09ICddJykgew0KKwkgKnAgPSAnXDAnOw0KKyAgICAg ICAgaWYgKCoocCArIDEpID09ICc6Jykgew0KKwkgICAgcG9ydCA9IHAgKyAyOw0KKwl9DQorCWJy ZWFrOw0KKyAgICAgIH0NCisgICAgfSANCisNCisgICAgc2FkZHItPnNpbjZfZmFtaWx5ID0gQUZf SU5FVDY7DQorICAgIGlmICghaW5ldF9wdG9uKEFGX0lORVQ2LCBpcCwgJnNhZGRyLT5zaW42X2Fk ZHIpKSB7DQorICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9IA0KKyAgICBpZiAocG9ydCkgew0K KyAgICAgIHNzY2FuZihwb3J0LCAiJWkiLCAmcG9ydGludCk7DQorICAgICAgc2FkZHItPnNpbjZf cG9ydCA9IGh0b25zKHBvcnRpbnQpOw0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCisN CisNCiB2b2lkIHFlbXVfZm9ybWF0X25pY19pbmZvX3N0cihOZXRDbGllbnRTdGF0ZSAqbmMsIHVp bnQ4X3QgbWFjYWRkcls2XSkNCiB7DQogICAgIHNucHJpbnRmKG5jLT5pbmZvX3N0ciwgc2l6ZW9m KG5jLT5pbmZvX3N0ciksDQpAQCAtNzMxLDYgKzc2OCw5IEBAIHN0YXRpYyBpbnQgKCogY29uc3Qg bmV0X2NsaWVudF9pbml0X2Z1bltORVRfQ0xJRU5UX09QVElPTlNfS0lORF9NQVhdKSgNCiAgICAg ICAgIFtORVRfQ0xJRU5UX09QVElPTlNfS0lORF9CUklER0VdICAgID0gbmV0X2luaXRfYnJpZGdl LA0KICNlbmRpZg0KICAgICAgICAgW05FVF9DTElFTlRfT1BUSU9OU19LSU5EX0hVQlBPUlRdICAg PSBuZXRfaW5pdF9odWJwb3J0LA0KKyNpZmRlZiBDT05GSUdfTElOVVgNCisgICAgICAgIFtORVRf Q0xJRU5UX09QVElPTlNfS0lORF9MMlRQVjNdICAgID0gbmV0X2luaXRfbDJ0cHYzLA0KKyNlbmRp Zg0KIH07DQogDQogDQpkaWZmIC0tZ2l0IGEvcWFwaS1zY2hlbWEuanNvbiBiL3FhcGktc2NoZW1h Lmpzb24NCmluZGV4IDgzZmE0ODUuLjdkOWY2OWYgMTAwNjQ0DQotLS0gYS9xYXBpLXNjaGVtYS5q c29uDQorKysgYi9xYXBpLXNjaGVtYS5qc29uDQpAQCAtMjk0MCw2ICsyOTQwLDU3IEBADQogICAg ICcqbG9jYWxhZGRyJzogJ3N0cicsDQogICAgICcqdWRwJzogICAgICAgJ3N0cicgfSB9DQogDQor IyBATmV0ZGV2TDJUUHYzT3B0aW9ucw0KKyMNCisjIENvbm5lY3QgdGhlIFZMQU4gdG8gRXRoZXJu ZXQgb3ZlciBMMlRQdjMgU3RhdGljIHR1bm5lbA0KKyMNCisjIEBzcmMgOnNvdXJjZSBhZGRyZXNz DQorIw0KKyMgQGRzdCA6ZGVzdGluYXRpb24gYWRkcmVzcw0KKyMNCisjIEBzcmNwb3J0IDojb3B0 aW9uYWwgc291cmNlIHBvcnQgLSBtYW5kYXRvcnkgZm9yIHVkcCwgb3B0aW9uYWwgZm9yIGlwDQor Iw0KKyMgQGRzdHBvcnQgOiNvcHRpb25hbCBkZXN0aW5hdGlvbiBwb3J0IC0gbWFuZGF0b3J5IGZv ciB1ZHAsIG9wdGlvbmFsIGZvciBpcA0KKyMNCisjIEBpcHY2IDojb3B0aW9uYWwgLSBmb3JjZSB0 aGUgdXNlIG9mIGlwdjYgDQorIw0KKyMgQHVkcCA6I29wdGlvbmFsIC0gdXNlIHRoZSB1ZHAgdmVy c2lvbiBvZiBsMnRwdjMgZW5jYXBzdWxhdGlvbg0KKyMNCisjIEBjb29raWU2NDojb3B0aW9uYWwg LSB1c2UgNjQgYml0IGNvb29raWVzDQorIw0KKyMgQGNvdW50ZXIgOiNvcHRpb25hbCBoYXZlIHNl cXVlbmNlIGNvdW50ZXINCisjIA0KKyMgQHR4Y29va2llIDojb3B0aW9uYWwgMzIgb3IgNjQgYml0 IHRyYW5zbWl0IGNvb2tpZSANCisjIA0KKyMgQHJ4Y29va2llIDojb3B0aW9uYWwgMzIgb3IgNjQg Yml0IHJlY2VpdmUgY29va2llIA0KKyMgDQorIyBAdHhzZXNzaW9uIDogMzIgYml0IHRyYW5zbWl0 IHNlc3Npb24NCisjIA0KKyMgQHJ4c2Vzc2lvbiA6IDMyIGJpdCByZWNlaXZlIHNlc3Npb24gLSBp ZiBub3Qgc3BlY2lmaWVkIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0cmFuc21pdA0KKyMgDQor IyBAb3B0aW9uYWwgOiBhZGRpdGlvbmFsIG9mZnNldCAtIGFsbG93cyB0aGUgaW5zZXJ0aW9uIG9m IGFkZGl0aW9uYWwgYXBwbGljYXRpb24tc3BlY2lmaWMgZGF0YSBiZWZvcmUgdGhlIHBhY2tldCBw YXlsb2FkDQorIyANCisjDQorIyBTaW5jZSAxLjINCisjIw0KKyMjDQoreyAndHlwZSc6ICdOZXRk ZXZMMlRQdjNPcHRpb25zJywNCisgICdkYXRhJzogew0KKyAgICAnc3JjJzoJICAnc3RyJywgDQor ICAgICdkc3QnOgkgICdzdHInLCANCisgICAgJypzcmNwb3J0JzoJICAnc3RyJywgDQorICAgICcq ZHN0cG9ydCc6CSAgJ3N0cicsIA0KKyAgICAnKmlwdjYnOgkgICdib29sJywgDQorICAgICcqdWRw JzoJICAnYm9vbCcsIA0KKyAgICAnKmNvb2tpZTY0JzogICdib29sJywgDQorICAgICcqY291bnRl cic6ICAgJ2Jvb2wnLCANCisgICAgJyp0eGNvb2tpZSc6ICAndWludDY0JywNCisgICAgJypyeGNv b2tpZSc6ICAndWludDY0JywNCisgICAgJ3R4c2Vzc2lvbic6ICd1aW50MzInLA0KKyAgICAnKnJ4 c2Vzc2lvbic6ICd1aW50MzInLA0KKyAgICAnKm9mZnNldCc6ICAndWludDMyJyB9IH0NCisNCisj Iw0KICMjDQogIyBATmV0ZGV2VmRlT3B0aW9ucw0KICMNCkBAIC0zMDE0LDEzICszMDY1LDE2IEBA DQogIyBBIGRpc2NyaW1pbmF0ZWQgcmVjb3JkIG9mIG5ldHdvcmsgZGV2aWNlIHRyYWl0cy4NCiAj DQogIyBTaW5jZSAxLjINCi0jIw0KKyMNCisjIEFkZGVkIGluIDIuMCAtIGwydHB2MyANCisjDQog eyAndW5pb24nOiAnTmV0Q2xpZW50T3B0aW9ucycsDQogICAnZGF0YSc6IHsNCiAgICAgJ25vbmUn OiAgICAgJ05ldGRldk5vbmVPcHRpb25zJywNCiAgICAgJ25pYyc6ICAgICAgJ05ldExlZ2FjeU5p Y09wdGlvbnMnLA0KICAgICAndXNlcic6ICAgICAnTmV0ZGV2VXNlck9wdGlvbnMnLA0KICAgICAn dGFwJzogICAgICAnTmV0ZGV2VGFwT3B0aW9ucycsDQorICAgICdsMnRwdjMnOiAgICdOZXRkZXZM MlRQdjNPcHRpb25zJywNCiAgICAgJ3NvY2tldCc6ICAgJ05ldGRldlNvY2tldE9wdGlvbnMnLA0K ICAgICAndmRlJzogICAgICAnTmV0ZGV2VmRlT3B0aW9ucycsDQogICAgICdkdW1wJzogICAgICdO ZXRkZXZEdW1wT3B0aW9ucycsDQo= --_002_531708602040100ciscocom_--