Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1meMjT-0000ke-Go for pgsql-hackers@arkaria.postgresql.org; Sat, 23 Oct 2021 19:31:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1meMjR-0002JB-Nd for pgsql-hackers@arkaria.postgresql.org; Sat, 23 Oct 2021 19:31:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1meMjQ-0002Iv-GO for pgsql-hackers@lists.postgresql.org; Sat, 23 Oct 2021 19:31:05 +0000 Received: from smtp03.optiver.com ([195.246.114.70]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1meMjH-0006Dr-TC for pgsql-hackers@lists.postgresql.org; Sat, 23 Oct 2021 19:31:03 +0000 Received: from pps.filterd (smtp03.optiver.com [127.0.0.1]) by smtp03.optiver.com (8.16.0.42/8.16.0.42) with SMTP id 19NJUo2R016877; Sat, 23 Oct 2021 21:30:50 +0200 Received: from opammb0562.comp.optiver.com (opammb0562.comp.optiver.com [10.131.160.2]) by smtp03.optiver.com with ESMTP id 3bv807g5sd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sat, 23 Oct 2021 21:30:49 +0200 Received: from opammb0562.comp.optiver.com (10.131.160.2) by opammb0562.comp.optiver.com (10.131.160.2) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Sat, 23 Oct 2021 21:30:47 +0200 Received: from opammb0562.comp.optiver.com ([fe80::1df2:7693:5a5e:81fd]) by opammb0562.comp.optiver.com ([fe80::1df2:7693:5a5e:81fd%17]) with mapi id 15.00.1497.023; Sat, 23 Oct 2021 21:30:47 +0200 From: Floris Van Nee To: Peter Geoghegan , Tom Lane , "Jesper Pedersen" , Dmitry Dolgov <9erthalion6@gmail.com>, Andy Fan CC: PostgreSQL Hackers Thread-Topic: MDAM techniques and Index Skip Scan patch [External] Thread-Index: AQHXxurUGKphn/J7bke3TjKa9c4Y+Kvgj7eQ Date: Sat, 23 Oct 2021 19:30:47 +0000 Message-ID: <2f26e1e475364ab7b23f466e4a4f4392@opammb0562.comp.optiver.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.131.160.182] x-tm-as-product-ver: SMEX-14.0.0.3031-8.6.1018-26486.002 x-tm-as-result: No-10--4.614300-5.000000 x-tmase-matchedrid: CxmI61mtwh/uo96mfIBuogrcxrzwsv5u3dCmvEa6IiGoLZarzrrPmYy+ AfTlDGN1v1S43Bqf9ByBzSSqd+URSb9z4PlYm1Bm8eSmTJSmEv3BnL3AaGm9oyvxuiwroM+jgju zl/ha280Y18/X7knTG44gxatTSxYEAzi2CCgOmoCXmVAzMqYX0r1eNx77bVNJHW7srwepo1wCGn Hd1O8XX/u0JjibnX7j+5kiu8Uo11C2gszFm0olxRn0wrEetTLhjIW07F8rFN/yY5FJckXFdpbXm oug+1t+Kx+OtoDsQwtOZnsoI7H1H4kPfb2PiIjMFFE4cEcLppMSUsfu0Jv3SnpZSoZdTeNwI/xR B9VwK6hr/EE+lB9Tqq8zB1oIhyIu16W8ka/qeCPXuien/kx7uRMDsAIXSN0DSSQTals7kYhjkne tO2ztTq5HKVNUwdzGxmS88dLMQtbVOCOaut3ToRfqkKQlk1I5ZZ5HkRNGNgMtferJ/d7Ab+7eHa I1Tpnqu03IzLobucj/ayXBse+QBriCQPGuGOlT/uSHhzMcIJoiC3XPiJxBKy99T+uJIleRbz3+b Tna4HozH/4gke7RGe2gjDDLSRkZRijRGUnjrVr4AIbmhYnu0kedTDSsp4ePm5BJdUjD+FWBCu+M T3AQo8pBU8RP1ZuuH72oiAsyMSz2btf7mKeaTnzmmMD/HXF+Oxd2XHUJjCuLeLYcBsV39xoXKhh h9Dq1kOedCohH7Y8mjT75DCgAvwo28QW8mescsFkCLeeufNs/u6JWmeYsWIBhPxJXPuLHhr8gy3 6Ox6Zr/DYfLvH268Ce/dUbI7bgyE/8+I8+t0erm7DrUlmNkIlfAW57f8Kpt7DW3B48kkHKayT/B QTiGvAxRSAc0OENRqpZoU2fpFL8VUcrLJpqsb9fMGi8Zu373SZLY3iYRB+xIWGBo8rVKtr9rfaO Iraagu5rYdkAVOQIOQnmaJ3woPf6H/LY+ObeoHwqPP7f5F3t6WMnagG5GDngbw0B+h9aOpReaTI 5lowa9gFhrHQ+hIB0d4igUmjX x-tm-as-user-approved-sender: Yes x-tm-as-user-blocked-sender: No x-tmase-result: 10--4.614300-5.000000 x-tmase-version: SMEX-14.0.0.3031-8.6.1018-26486.002 x-tm-snts-smtp: 05513EC19B4657F3487146C22282E31EFF2B79BB83123E12A8FBC65CDA115FF02000:8 Content-Type: multipart/mixed; boundary="_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_" MIME-Version: 1.0 Subject: RE: MDAM techniques and Index Skip Scan patch X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.790 definitions=2021-10-23_03:2021-10-22,2021-10-23 signatures=0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 R3JlYXQgdG8gc2VlIHNvbWUgaW50ZXJlc3QgaW4gdGhlIHNraXAgc2NhbiBwYXRjaCBzZXJpZXMg YWdhaW4hDQoNCj4gTGlrZSBtYW55IGRpZmZpY3VsdCBwYXRjaGVzLCB0aGUgc2tpcCBzY2FuIHBh dGNoIGlzIG5vdCBzbyBtdWNoIHRyb3VibGVkIGJ5DQo+IHByb2JsZW1zIHdpdGggdGhlIGltcGxl bWVudGF0aW9uIGFzIGl0IGlzIHRyb3VibGVkIGJ5DQo+ICphbWJpZ3VpdHkqIGFib3V0IHRoZSBk ZXNpZ24uIFBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGhvdyBza2lwIHNjYW4gbWVzaGVzDQo+IHdp dGggZXhpc3RpbmcgZGVzaWducywgYXMgd2VsbCBhcyBmdXR1cmUgZGVzaWducyAtLSBwYXJ0aWN1 bGFybHkgZGVzaWducyBmb3INCj4gb3RoZXIgTURBTSB0ZWNobmlxdWVzLiBJJ3ZlIHN0YXJ0ZWQg dGhpcyB0aHJlYWQgdG8gaGF2ZSBhIGJpZyBwaWN0dXJlDQo+IGNvbnZlcnNhdGlvbiBhYm91dCBo b3cgdG8gdGhpbmsgYWJvdXQgdGhlc2UgdGhpbmdzLiBNYW55IG90aGVyIE1EQU0NCj4gdGVjaG5p cXVlcyBhbHNvIHNlZW0gaGlnaGx5IGFwcGVhbGluZy4NCg0KSSB0aGluayBpdCBpcyBnb29kIHRv IGhhdmUgdGhpcyBkaXNjdXNzaW9uLiBJbiBteSBvcGluaW9uLCBQb3N0Z3JlcyBjb3VsZCBtYWtl IHJlYWxseSBnb29kIHVzZSBvZiBzb21lIG9mIHRoZSBkZXNjcmliZWQgTURBTSB0ZWNobmlxdWVz Lg0KDQo+IE11Y2ggb2YgdGhlIE1EQU0gc3R1ZmYgaXMgZm9yIGRhdGEgd2FyZWhvdXNpbmcgdXNl LWNhc2VzLCB3aGlsZSBza2lwDQo+IHNjYW4vbG9vc2UgaW5kZXggc2NhbiBpcyBzZWVuIGFzIG1v cmUgb2YgYW4gT0xUUCB0aGluZy4gQnV0IHRoZXkgYXJlIHN0aWxsDQo+IHJlbGF0ZWQsIGNsZWFy bHkuDQoNCkZXSVcgSSB0aGluayBza2lwIHNjYW4gaXMgdmVyeSBtdWNoIGRhdGEgd2FyZWhvdXNp bmcgdXNlLWNhc2UgcmVsYXRlZCAtIGhlbmNlIHdoeSB0aGUgVGltZXNjYWxlRGIgcGVvcGxlIGlu IHlvdXIgWzJdIHJlZmVyZW5jZSBpbXBsZW1lbnRlZCBhIHNpbXBsZSBmb3JtIG9mIGl0IGFscmVh ZHkgZm9yIHRoZWlyIGV4dGVuc2lvbi4gU2tpcCBzY2FuIGlzIGEgcmVhbGx5IHVzZWZ1bCBmZWF0 dXJlIGZvciBsYXJnZSBkYXRhIHNldHMuIEhvd2V2ZXIsIEkgYWdyZWUgaXQgaXMgb25seSBvbmUg cGFydCBvZiB0aGUgYmlnZ2VyIE1EQU0gcGljdHVyZS4NCg0KPiANCj4gTXkgZ2VuZXJhbCBjb25j ZXJuIGlzIHRoYXQgdGhlIHNraXAgc2NhbiBwYXRjaCBtYXkgY3VycmVudGx5IGJlIHN0cnVjdHVy ZWQgaW4NCj4gYSB3YXkgdGhhdCBwYWludHMgdXMgaW50byBhIGNvcm5lciwgTURBTS13aXNlLg0K PiANCg0KT25lIG9mIHRoZSBjb25jZXJucyBJIHJhaXNlZCBiZWZvcmUgd2FzIHRoYXQgdGhlIHBh dGNoIG1heSBiZSB0aGlua2luZyB0b28gc2ltcGxpc3RpY2FsbHkgb24gc29tZSB0aGluZ3MsIHRo YXQgd291bGQgbWFrZSBpdCBkaWZmaWN1bHQgdG8gYWRvcHQgbW9yZSBjb21wbGV4IG9wdGltaXph dGlvbnMgaW4gdGhlIGZ1dHVyZS4gT25lIGNvbmNyZXRlIGV4YW1wbGUgY2FuIGJlIGlsbHVzdHJh dGVkIGJ5IGEgZGlmZmVyZW50IHF1ZXJ5IG9uIHRoZSBzYWxlcyB0YWJsZSBvZiB0aGUgcGFwZXIn cyBleGFtcGxlOg0KDQpTRUxFQ1QgRElTVElOQ1QgZGVwdCwgZGF0ZSBXSEVSRSBpdGVtX2NsYXNz ID0gMTAwDQoNClRoaXMgc2hvdWxkIHNraXAgd2l0aCBwcmVmaXggb2YgKGRlcHQsIGRhdGUpLiBT dXBwb3NlIHdlJ3JlIGF0IChkZXB0LCBkYXRlKSA9ICgxLCAyMDIxLTAxLTAxKSBhbmQgaXQncyBz a2lwcGluZyB0byB0aGUgbmV4dCBwcmVmaXgsIHRoZSBwYXRjaCBqdXN0IGltcGxlbWVudHMgd2hh dCB0aGUgTURBTSBwYXBlciBkZXNjcmliZXMgYXMgdGhlICdwcm9iaW5nJyBzdGVwLiBJdCBmaW5k cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHByZWZpeC4gVGhpcyBjb3VsZCBiZSBmb3IgZXhh bXBsZSAoZGVwdCwgZGF0ZSwgaXRlbV9jbGFzcykgPSAoMSwgMjAyMS0wMS0wMiwgMSkuIEZyb20g dGhlcmUgb253YXJkcywgaXQgd291bGQganVzdCBzY2FuIHRoZSBpbmRleCB1bnRpbCBpdCBmaW5k cyBpdGVtX2NsYXNzPTEwMC4gV2hhdCBpdCBzaG91bGQgZG8gaG93ZXZlciwgaXMgdG8gZmlyc3Qg J3Byb2JlJyBmb3IgdGhlIG5leHQgcHJlZml4IHZhbHVlIGFuZCB0aGVuIHNraXAgZGlyZWN0bHkg dG8gKDEsIDIwMjEtMDEtMDIsIDEwMCkgKHNraXBwaW5nIGl0ZW1fY2xhc3MgMS05OSBhbHRvZ2V0 aGVyKS4gVGhlIHByb2JsZW0gaWYgaXQgZG9lc24ndCBzdXBwb3J0IHRoaXMgaXMgdGhhdCBza2lw IHNjYW4gY291bGQgaGF2ZSBhIHF1aXRlIHVucHJlZGljdGFibGUgcGVyZm9ybWFuY2UsIGJlY2F1 c2Ugc29tZXRpbWVzIGl0J2xsIGVuZCB1cCBnb2luZyB0aHJvdWdoIG1vc3Qgb2YgdGhlIGluZGV4 IHdoZXJlIGl0IHNob3VsZCBiZSBza2lwcGluZy4NCg0KQSB3aGlsZSBhZ28sIEkgc3BlbnQgcXVp dGUgc29tZSB0aW1lIHRyeWluZyB0byBjb21lIHVwIHdpdGggYW4gaW1wbGVtZW50YXRpb24gdGhh dCB3b3VsZCB3b3JrIGluIHRoaXMgbW9yZSBnZW5lcmFsIGNhc2UuIFRoZSBuaWNlIHRoaW5nIGlz IHRoYXQgd2l0aCBzdWNoIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLCB5b3UgZ2V0IGFs bW9zdCBhbGwgdGhlIGZlYXR1cmVzIGZyb20gdGhlIE1EQU0gcGFwZXIgYWxtb3N0IGZvciBmcmVl LiBJIGZvY3VzZWQgb24gdGhlIGV4ZWN1dG9yIGNvZGUsIG5vdCBvbiB0aGUgcGxhbm5lciBjb2Rl IC0gdGhlIHBsYW5uZXIgY29kZSBpcyBmb3IgdGhlIERJU1RJTkNUIHNraXAgcGFydCB2ZXJ5IHNp bWlsYXIgdG8gdGhlIG9yaWdpbmFsIHBhdGNoIGFuZCBJIGhhY2tlZCBpbiBhIHdheSB0byBtYWtl IGl0IGNob29zZSBhICdza2lwIHNjYW4nIGFsc28gZm9yIG5vbi1ESVNUSU5DVCBxdWVyaWVzIGZv ciB0ZXN0aW5nIHB1cnBvc2VzLiBGb3IgdGhpcyBkaXNjdXNzaW9uIGFib3V0IE1EQU0sIHRoZSBw bGFubmVyIHBhcnQgaXMgbGVzcyByZWxldmFudCB0aG91Z2guIFRoZXJlJ3Mgc3RpbGwgYSBsb3Qg b2YgZGlzY3Vzc2lvbiBhbmQgd29yayBvbiB0aGUgcGxhbm5lci1zaWRlIHRvbywgYnV0IEkgdGhp bmsgdGhhdCBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGZyb20gZWFjaCBvdGhlci4NCg0KVGhl IG1vcmUgZ2VuZXJpYyBwYXRjaCBJIG9yaWdpbmFsbHkgcG9zdGVkIGluIFsxXSwgdG9nZXRoZXIg d2l0aCBzb21lIHRlY2huaWNhbCBjb25zaWRlcmF0aW9ucy4gVGhhdCB3YXMgcXVpdGUgYSB3aGls ZSBhZ28gc28gaXQgb2J2aW91c2x5IGRvZXNuJ3QgYXBwbHkgYW55bW9yZSBvbiBtYXN0ZXIuIFRo ZXJlZm9yZSwgSSd2ZSBhdHRhY2hlZCBhIHJlYmFzZWQgdmVyc2lvbi4gVW5mb3J0dW5hdGVseSwg aXQncyBzdGlsbCBiYXNlZCBvbiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSBVbmlxdWVLZXlzIHBh dGNoIC0gYnV0IHNpbmNlIHRoYXQgcGF0Y2ggaXMgYWxsIHBsYW5uZXIgbWFjaGluZXJ5IGFzIHdl bGwsIGl0IGRvZXNuJ3QgbWF0dGVyIHNvIG11Y2ggZm9yIHRoZSBkaXNjdXNzaW9uIGFib3V0IHRo ZSBleGVjdXRvciBjb2RlIGVpdGhlci4NCg0KSSBiZWxpZXZlIGlmIHdlIHdhbnQgc29tZXRoaW5n IHRoYXQgZml0cyBiZXR0ZXIgd2l0aCBmdXR1cmUgTURBTSB1c2UgY2FzZXMsIHdlIHNob3VsZCB0 YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGV4ZWN1dG9yIGNvZGUgb2YgdGhpcyBwYXRjaCB0byBk cml2ZSB0aGlzIGRpc2N1c3Npb24uIFRoZSBsb2dpYyBpcyBkZWZpbml0ZWx5IG1vcmUgY29tcGxl eCB0aGFuIHRoZSBvcmlnaW5hbCBwYXRjaCwgaG93ZXZlciBJIGJlbGlldmUgaXQgaXMgYWxzbyBt b3JlIGZsZXhpYmxlIGFuZCBmdXR1cmUtcHJvb2YuDQoNCj4gDQo+IEFub3RoZXIgbW9yZSBjb25j cmV0ZSBjb25jZXJuIGFib3V0IHRoZSBwYXRjaCBzZXJpZXMgY29tZXMgZnJvbSB0aGUNCj4gYmFj a3dhcmRzIHNjYW4gc3R1ZmYuIFRoaXMgaXMgYWRkZWQgYnkgYSBsYXRlciBwYXRjaCBpbiB0aGUg cGF0Y2ggc2VyaWVzLCAidjM5LQ0KPiAwMDA0LUV4dGVuZC1hbXNraXAtaW1wbGVtZW50YXRpb24t Zm9yLUJ0cmVlLnBhdGNoIi4gSXQgc3RyaWtlcyBtZSBhcyBhIGJhZA0KPiB0aGluZyB0aGF0IHdl IGNhbm5vdCBqdXN0IGRvIGxlYWYtcGFnZS1hdC1hLXRpbWUgcHJvY2Vzc2luZywgd2l0aG91dCB1 c3VhbGx5DQo+IG5lZWRpbmcgdG8gaG9sZCBhIHBpbiBvbiB0aGUgbGVhZiBwYWdlLg0KPiBBZnRl ciBhbGwsIG9yZGluYXJ5IGJhY2t3YXJkcyBzY2FucyBtYW5hZ2UgdG8gYXZvaWQgdGhhdCB0b2Rh eSwgYWxiZWl0IGJ5DQo+IHVzaW5nIHRyaWNrZXJ5IGluc2lkZSBfYnRfd2Fsa19sZWZ0KCkuIE1E QU0tc3R5bGUgIk1haW50ZW5hbmNlIG9mIEluZGV4DQo+IE9yZGVyIiAoYXMgZGVzY3JpYmVkIG9u IHBhZ2UgOCkgc2VlbXMgbGlrZSBhIGdvb2QgZ29hbCBmb3IgdXMgaGVyZS4gSSBkb24ndA0KPiBs aWtlIHRoZSBpZGVhIG9mIGRvaW5nIGFkLWhvYyBkdXBsaWNhdGUgVElEIGVsaW1pbmF0aW9uIGlu c2lkZSBuYnRyZWUsIGFjcm9zcw0KPiBjYWxscyBtYWRlIGZyb20gdGhlIGV4ZWN1dG9yICh3aGV0 aGVyIGl0J3MgZHVyaW5nIGJhY2t3YXJkcyBza2lwIHNjYW5zLCBvciBhdA0KPiBhbnkgb3RoZXIg dGltZSkuIE5vdCBiZWNhdXNlIGl0IHNlZW1zIHRvIGdvIGFnYWluc3QgdGhlIGFwcHJvYWNoIHRh a2VuIGJ5DQo+IHRoZSBNREFNIHBhcGVyICh0aG91Z2ggaXQgZG9lcyk7IGp1c3QgYmVjYXVzZSBp dCBzZWVtcyBrbHVkZ3kuIChJIHRoaW5rIHRoYXQNCj4gVG9tIGZlbHQgdGhlIHNhbWUgd2F5IGFi b3V0IHRoZSBUSUQgZGVkdXBsaWNhdGlvbiBzdHVmZiBpbiBoaXMgb3duIHBhdGNoDQo+IGJhY2sg aW4gMjAxOCwNCj4gdG9vLikNCg0KSXQncyBnb29kIHRvIG1lbnRpb24gdGhhdCB0aGUgcGF0Y2gg SSBhdHRhY2hlZCBkb2VzIHByb3BlciAnbGVhZi1wYWdlLWF0LWEtdGltZScgcHJvY2Vzc2luZywg c28gaXQgYXZvaWRzIHRoZSBwcm9ibGVtIHlvdSBkZXNjcmliZSB3aXRoIHYzOS4gSXQgaXMgaW1w bGVtZW50ZWQgaW5zdGVhZCBpbiB0aGUgc2FtZSB3YXkgYXMgYSAicmVndWxhciIgaW5kZXggc2Nh biAtIHdlIHByb2Nlc3MgdGhlIGZ1bGwgbGVhZiBwYWdlIGFuZCBzdG9yZSB0aGUgbWF0Y2hlZCB0 dXBsZXMgaW4gdGhlIGxvY2FsIHN0YXRlLiBJZiBhIERJU1RJTkNUIHNjYW4gd2FudHMgdG8gZG8g YSBza2lwLCB3ZSBjaGVjayBvdXIgbG9jYWwgc3RhdGUgZmlyc3QgaWYgdGhhdCBza2lwcGluZyB3 b3VsZCBiZSBwb3NzaWJsZSB3aXRoIHRoZSBtYXRjaGVkIHR1cGxlcyBmcm9tIHRoZSBjdXJyZW50 IHBhZ2UuIFRoZW4gd2UgYXZvaWQgZG91YmxlIHdvcmsgYW5kIGFsc28gdGhlIG5lZWQgdG8gbG9v ayBhdCB0aGUgc2FtZSBwYWdlIGFnYWluLg0KDQo+IE9wZW4gcXVlc3Rpb246IFdoYXQgZG9lcyBh bGwgb2YgdGhpcyBNREFNIGJ1c2luZXNzIG1lYW4gZm9yDQo+IFNjYWxhckFycmF5T3BFeHByLCBp ZiBhbnl0aGluZz8NCj4gDQoNClRoaXMgaXMgYSByZWFsbHkgaW50ZXJlc3RpbmcgY29tYmluYXRp b24gYWN0dWFsbHkuIEkgdGhpbmssIGlkZWFsbHksIHlvdSdkIHByb2JhYmx5IGdldCByaWQgb2Yg aXQgYW5kIHByb3ZpZGUgZnVsbCBzdXBwb3J0IGZvciB0aGF0IHdpdGggdGhlICdza2lwJyBiYXNl ZCBhcHByb2FjaCAoZXNzZW50aWFsbHkgdGhlIFNjYWxhckFycmF5T3BFeHByIHNlZW1zIHRvIGRv IHNvbWUgZm9ybSBvZiBza2lwcGluZyBhbHJlYWR5IC0gaXQgdHJhbnNmb3JtcyB4IElOICgxLDIs MykgaW50byAzIHNlcGFyYXRlIGluZGV4IHNjYW5zIGZvciB4KS4NCkhvd2V2ZXIsIGV2ZW4gd2l0 aG91dCBkb2luZyBhbnkgd29yayBvbiBpdCwgaXQgYWN0dWFsbHkgaW50ZXJhY3RzIG5pY2VseSB3 aXRoIHRoZSBza2lwIGJhc2VkIGFwcHJvYWNoLg0KDQpBcyBhbiBleGFtcGxlLCBoZXJlJ3Mgc29t ZSBxdWVyaWVzIGJhc2VkIG9uIHRoZSAnc2FsZXMnIHRhYmxlIG9mIHRoZSBwYXBlciB3aXRoIHNv bWUgZGF0YSBpbiBpdCAoMThNIHJvd3MgdG90YWwsIHNlZSBzYWxlc19xdWVyeS5zcWwgYXR0YWNo bWVudCBmb3IgdGhlIGZ1bGwgZXhhbXBsZSk6DQoNCi0tIHRlcm1pbm9sb2d5IGZyb20gcGFwZXI6 ICJpbnRlcnZlbmluZyByYW5nZSBwcmVkaWNhdGUiDQpzZWxlY3QgZGF0ZSwgc3VtKHRvdGFsX3Nh bGVzKQ0KZnJvbSBzYWxlcw0Kd2hlcmUgZGVwdCBiZXR3ZWVuIDIgYW5kIDMgYW5kIGRhdGUgYmV0 d2VlbiAnMjAyMS0wMS0wNScgYW5kICcyMDIxLTAxLTEwJyBhbmQgaXRlbV9jbGFzcz0yMCBhbmQg c3RvcmU9MjUwDQpncm91cCBieSBkZXB0LCBkYXRlDQo7DQpQYXRjaDogRXhlY3V0aW9uIFRpbWU6 IDAuMzY4IG1zDQpNYXN0ZXI6IEV4ZWN1dGlvbiBUaW1lOiA0MTYuNzkyIG1zDQoNCi0tIHRlcm1p bm9sb2d5IGZyb20gcGFwZXI6ICJtaXNzaW5nIGtleSBwcmVkaWNhdGUiDQpzZWxlY3QgZGF0ZSwg c3VtKHRvdGFsX3NhbGVzKQ0KZnJvbSBzYWxlcw0Kd2hlcmUgZGF0ZSBiZXR3ZWVuICcyMDIxLTAx LTA1JyBhbmQgJzIwMjEtMDEtMTAnIGFuZCBpdGVtX2NsYXNzPTIwIGFuZCBzdG9yZT0yNTANCmdy b3VwIGJ5IGRlcHQsIGRhdGUNCjsNClBhdGNoOiBFeGVjdXRpb24gVGltZTogMC42NjcgbXMNCk1h c3RlcjogRXhlY3V0aW9uIFRpbWU6IDY1NC42ODQgbXMNCg0KLS0gdGVybWlub2xvZ3kgZnJvbSBw YXBlcjogIklOIGxpc3RzIiANCi0tIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgcXVlcnkgZnJvbSB5 b3VyIGV4YW1wbGUgd2l0aCBhbiBJTiBsaXN0DQotLSBpbiB0aGUgY3VycmVudCBwYXRjaCwgdGhp cyBxdWVyeSBpcyBkb25lIHdpdGggYSBza2lwIHNjYW4gd2l0aCBza2lwIHByZWZpeCAoZGVwdCwg ZGF0ZSkgYW5kIHRoZW4gdGhlIFNjYWxhck9wQXJyYXkgZm9yIGl0ZW1fY2xhc3M9KDIwLDMwLDUw KQ0Kc2VsZWN0IGRhdGUsIHN1bSh0b3RhbF9zYWxlcykNCmZyb20gc2FsZXMNCndoZXJlIGRhdGUg YmV0d2VlbiAnMjAyMS0wMS0wNScgYW5kICcyMDIxLTAxLTEwJyBhbmQgaXRlbV9jbGFzcyBpbiAo MjAsIDMwLCA1MCkgYW5kIHN0b3JlPTI1MA0KZ3JvdXAgYnkgZGVwdCwgZGF0ZQ0KOw0KUGF0Y2g6 IEV4ZWN1dGlvbiBUaW1lOiAxLjc2NyBtcw0KTWFzdGVyOiBFeGVjdXRpb24gVGltZTogNjI5Ljc5 MiBtcw0KDQpUaGUgb3RoZXIgbWVudGlvbmVkIE1EQU0gb3B0aW1pemF0aW9ucyBpbiB0aGUgcGFw ZXIgKE5PVCA9LCBnZW5lcmFsIE9SKSBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCBkb24ndCBzZWVt IHRvIGJlIGNvbmZsaWN0aW5nIGF0IGFsbCB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u IC0gdGhleSBzZWVtIHRvIGJlIGp1c3QgYSBtYXR0ZXIgb2YgdHJhbnNmb3JtaW5nIHRoZSBleHBy ZXNzaW9ucyBpbnRvIHRoZSByaWdodCBmb3JtLg0KDQpGcm9tIHRoZSBwYXRjaCBzZXJpZXMgYWJv dmUsIHY5LTAwMDEvdjktMDAwMiBpcyB0aGUgVW5pcXVlS2V5cyBwYXRjaCBzZXJpZXMsIHdoaWNo IGZvY3VzZXMgb24gdGhlIHBsYW5uZXIuIHYyLTAwMDEgaXMgRG1pdHJ5J3MgcGF0Y2ggdGhhdCBl eHRlbmRzIGl0IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIFVuaXF1ZUtleXMgZm9yIHRoZSBz a2lwIHNjYW4uIEJvdGggb2YgdGhlc2UgYXJlIHVuZm9ydHVuYXRlbHkgc3RpbGwgb2xkZXIgcGF0 Y2hlcywgYnV0IGJlY2F1c2UgdGhleSBhcmUgcGxhbm5lciBtYWNoaW5lcnkgdGhleSBhcmUgbGVz cyByZWxldmFudCB0byB0aGUgZGlzY3Vzc2lvbiBhYm91dCB0aGUgZXhlY3V0b3IgaGVyZS4NClBh dGNoIHYyLTAwMDIgY29udGFpbnMgbW9zdCBvZiBteSB3b3JrIGFuZCBpbnRyb2R1Y2VzIGFsbCB0 aGUgZXhlY3V0b3IgbG9naWMgZm9yIHRoZSBza2lwIHNjYW4gYW5kIGhvb2tzIHVwIHRoZSBwbGFu bmVyIGZvciBESVNUSU5DVCBxdWVyaWVzIHRvIHVzZSB0aGUgc2tpcCBzY2FuLg0KUGF0Y2ggdjIt MDAwMyBpcyBhIHBsYW5uZXIgaGFjayB0aGF0IG1ha2VzIHRoZSBwbGFubmVyIHBpY2sgYSBza2lw IHNjYW4gb24gdmlydHVhbGx5IGV2ZXJ5IHBvc3NpYmlsaXR5LiBUaGlzIGFsc28gZW5hYmxlcyB0 aGUgc2tpcCBzY2FuIG9uIHRoZSBxdWVyaWVzIGFib3ZlIHRoYXQgZG9uJ3QgaGF2ZSBhIERJU1RJ TkNUIGJ1dCB3aGVyZSBpdCBjb3VsZCBiZSB1c2VmdWwuDQoNCg0KLUZsb3Jpcw0KDQpbMV0gaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9jNWM1Yzk3NDcxNGE0N2YxYjIyNmM4 NTc2OTllODY4MEBvcGFtbWIwNTYxLmNvbXAub3B0aXZlci5jb20NCg0KDQoNCg== --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="sales_query.sql" Content-Description: sales_query.sql Content-Disposition: attachment; filename="sales_query.sql"; size=1052; creation-date="Sat, 23 Oct 2021 19:15:04 GMT"; modification-date="Sat, 23 Oct 2021 19:15:04 GMT" Content-Transfer-Encoding: base64 Y3JlYXRlIHRhYmxlIHNhbGVzIChkZXB0IGludCwgZGF0ZSBkYXRlLCBpdGVtX2NsYXNzIGludCwg c3RvcmUgaW50LCBpdGVtIGludCwgdG90YWxfc2FsZXMgaW50KTsKY3JlYXRlIGluZGV4IG9uIHNh bGVzIChkZXB0LCBkYXRlLCBpdGVtX2NsYXNzLCBzdG9yZSk7CgppbnNlcnQgaW50byBzYWxlcwog ICAgc2VsZWN0IGRlcHQsICcyMDIxLTAxLTAxJzo6ZGF0ZSArIGRhdGVfZGlmZiwgaXRlbV9jbGFz cywgc3RvcmUsIGl0ZW0sIDEgYXMgdG90YWxfc2FsZXMKICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDUpIGRlcHQsCiAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMzApIGRhdGVfZGlmZiwKICAgIGdl bmVyYXRlX3NlcmllcygxLCAxMDApIGl0ZW1fY2xhc3MsCiAgICBnZW5lcmF0ZV9zZXJpZXMoMSwg NjAwKSBzdG9yZSwKICAgIGdlbmVyYXRlX3NlcmllcygxLCAyKSBpdGVtCjsKCmFuYWx5emUgc2Fs ZXM7CgpzZXQgcmFuZG9tX3BhZ2VfY29zdCA9IDE7CnNldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyID0gMDsKCmV4cGxhaW4oYW5hbHl6ZSkKc2VsZWN0IGRhdGUsIHN1bSh0b3RhbF9z YWxlcykKZnJvbSBzYWxlcwp3aGVyZSBkZXB0IGJldHdlZW4gMiBhbmQgMyBhbmQgZGF0ZSBiZXR3 ZWVuICcyMDIxLTAxLTA1JyBhbmQgJzIwMjEtMDEtMTAnIGFuZCBpdGVtX2NsYXNzPTIwIGFuZCBz dG9yZT0yNTAKZ3JvdXAgYnkgZGVwdCwgZGF0ZQo7CgpleHBsYWluKGFuYWx5emUpCnNlbGVjdCBk YXRlLCBzdW0odG90YWxfc2FsZXMpCmZyb20gc2FsZXMKd2hlcmUgZGF0ZSBiZXR3ZWVuICcyMDIx LTAxLTA1JyBhbmQgJzIwMjEtMDEtMTAnIGFuZCBpdGVtX2NsYXNzPTIwIGFuZCBzdG9yZT0yNTAK Z3JvdXAgYnkgZGVwdCwgZGF0ZQo7CgpleHBsYWluKGFuYWx5emUpCnNlbGVjdCBkYXRlLCBzdW0o dG90YWxfc2FsZXMpCmZyb20gc2FsZXMKd2hlcmUgZGF0ZSBiZXR3ZWVuICcyMDIxLTAxLTA1JyBh bmQgJzIwMjEtMDEtMTAnIGFuZCBpdGVtX2NsYXNzIGluICgyMCwgMzAsIDUwKSBhbmQgc3RvcmU9 MjUwCmdyb3VwIGJ5IGRlcHQsIGRhdGUKOwo= --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch" Content-Description: v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch Content-Disposition: attachment; filename="v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch"; size=4935; creation-date="Sat, 23 Oct 2021 13:03:59 GMT"; modification-date="Sat, 23 Oct 2021 13:03:58 GMT" Content-Transfer-Encoding: base64 RnJvbSA0YjBlNDk0NjEyMTk5NDgzZTYxMDczZmRhMWYzMmI3ZWVhMTc0YjQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFN1biwgMyBNYXkgMjAyMCAyMjozNzo0NiArMDgw MApTdWJqZWN0OiBbUEFUQ0ggMS81XSBJbnRyb2R1Y2UgUmVsT3B0SW5mby0+bm90bnVsbGF0dHJz IGF0dHJpYnV0ZQoKVGhlIG5vdG51bGxhdHRycyBpcyBjYWxjdWxhdGVkIGZyb20gY2F0YWxvZyBh bmQgcnVuLXRpbWUgcXVlcnkuIFRoYXQKaW5mb21hdGlvbiBpcyB0cmFuc2xhdGVkIHRvIGNoaWxk IHJlbGF0aW9uIGFzIHdlbGwgZm9yIHBhcnRpdGlvbmVkCnRhYmxlLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIHwgMTAgKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICB8IDEwICsrKysrKysrKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgMiArKwogNCBmaWxlcyBj aGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKaW5kZXggMjk2ZGQ3NWMxYi4uYWNjYTM3NTVhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jCkBAIC05OTksNiArOTk5LDcgQEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsK IAkJTGlzdENlbGwgICAqcGFyZW50dmFyczsKIAkJTGlzdENlbGwgICAqY2hpbGR2YXJzOworCQlp bnQgaSA9IC0xOwogCiAJCS8qIGFwcGVuZF9yZWxfbGlzdCBjb250YWlucyBhbGwgYXBwZW5kIHJl bHM7IGlnbm9yZSBvdGhlcnMgKi8KIAkJaWYgKGFwcGluZm8tPnBhcmVudF9yZWxpZCAhPSBwYXJl bnRSVGluZGV4KQpAQCAtMTA1NSw2ICsxMDU2LDM2IEBAIHNldF9hcHBlbmRfcmVsX3NpemUoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICAgKE5vZGUgKikgcmVs LT5yZWx0YXJnZXQtPmV4cHJzLAogCQkJCQkJCQkgICAxLCAmYXBwaW5mbyk7CiAKKwkJLyogQ29w eSBub3RudWxsYXR0cnMuICovCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWwtPm5v dG51bGxhdHRycywgaSkpID4gMCkKKwkJeworCQkJQXR0ck51bWJlciBhdHRubyA9IGkgKyBGaXJz dExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJQXR0ck51bWJlciBjaGlsZF9hdHRu bzsKKwkJCWlmIChhdHRubyA9PSAwKQorCQkJeworCQkJCS8qIFdob2xlIHJvdyBpcyBub3QgbnVs bCwgc28gbXVzdCBiZSBzYW1lIGZvciBjaGlsZCAqLworCQkJCWNoaWxkcmVsLT5ub3RudWxsYXR0 cnMgPSBibXNfYWRkX21lbWJlcihjaGlsZHJlbC0+bm90bnVsbGF0dHJzLAorCQkJCQkJCQkJCQkJ CQlhdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJCWJyZWFr OworCQkJfQorCQkJaWYgKGF0dG5vIDwgMCApCisJCQkJLyogbm8gbmVlZCB0byB0cmFuc2xhdGUg c3lzdGVtIGNvbHVtbiAqLworCQkJCWNoaWxkX2F0dG5vID0gYXR0bm87CisJCQllbHNlCisJCQl7 CisJCQkJTm9kZSAqIG5vZGUgPSBsaXN0X250aChhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMsIGF0 dG5vIC0gMSk7CisJCQkJaWYgKCFJc0Eobm9kZSwgVmFyKSkKKwkJCQkJLyogVGhpcyBtYXkgaGFw cGVucyBhdCBVTklPTiBjYXNlLCBsaWtlIChTRUxFQ1QgYSBGUk9NIHQxIFVOSU9OIFNFTEVDVCBh ICsgMworCQkJCQkgKiBGUk9NIHQyKSB0IGFuZCB3ZSBrbm93IHQuYSBpcyBub3QgbnVsbAorCQkJ CQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJY2hpbGRfYXR0bm8gPSBjYXN0Tm9kZShWYXIsIG5v ZGUpLT52YXJhdHRubzsKKwkJCX0KKworCQkJY2hpbGRyZWwtPm5vdG51bGxhdHRycyA9IGJtc19h ZGRfbWVtYmVyKGNoaWxkcmVsLT5ub3RudWxsYXR0cnMsCisJCQkJCQkJCQkJCQkJY2hpbGRfYXR0 bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJfQorCiAJCS8qCiAJ CSAqIFdlIGhhdmUgdG8gbWFrZSBjaGlsZCBlbnRyaWVzIGluIHRoZSBFcXVpdmFsZW5jZUNsYXNz IGRhdGEKIAkJICogc3RydWN0dXJlcyBhcyB3ZWxsLiAgVGhpcyBpcyBuZWVkZWQgZWl0aGVyIGlm IHRoZSBwYXJlbnQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRz cGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXggZTI1 ZGM5YTdjYS4uMDljNzRlMmE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFu LmMKQEAgLTgzMSw2ICs4MzEsMTYgQEAgZGVjb25zdHJ1Y3RfcmVjdXJzZShQbGFubmVySW5mbyAq cm9vdCwgTm9kZSAqanRub2RlLCBib29sIGJlbG93X291dGVyX2pvaW4sCiAJCXsKIAkJCU5vZGUJ ICAgKnF1YWwgPSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKKwkJCS8qIFNldCB0aGUgbm90IG51bGwg aW5mbyBub3cgKi8KKwkJCUxpc3RDZWxsCSpsYzsKKwkJCUxpc3QJCSpub25fbnVsbGFibGVfdmFy cyA9IGZpbmRfbm9ubnVsbGFibGVfdmFycyhxdWFsKTsKKwkJCWZvcmVhY2gobGMsIG5vbl9udWxs YWJsZV92YXJzKQorCQkJeworCQkJCVZhciAqdmFyID0gbGZpcnN0X25vZGUoVmFyLCBsYyk7CisJ CQkJUmVsT3B0SW5mbyAqcmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVt2YXItPnZhcm5vXTsK KwkJCQlyZWwtPm5vdG51bGxhdHRycyA9IGJtc19hZGRfbWVtYmVyKHJlbC0+bm90bnVsbGF0dHJz LAorCQkJCQkJCQkJCQkJICAgdmFyLT52YXJhdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXIpOworCQkJfQogCQkJZGlzdHJpYnV0ZV9xdWFsX3RvX3JlbHMocm9vdCwgcXVh bCwKIAkJCQkJCQkJCWJlbG93X291dGVyX2pvaW4sIEpPSU5fSU5ORVIsCiAJCQkJCQkJCQlyb290 LT5xdWFsX3NlY3VyaXR5X2xldmVsLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmlu ZGV4IGM1MTk0ZmRiYmYuLmE1MGY4OTdmZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFu Y2F0LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCVJlbGF0aW9uCXJl bGF0aW9uOwogCWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3MgPSBOSUw7CisJ aW50CQkJaTsKIAogCS8qCiAJICogV2UgbmVlZCBub3QgbG9jayB0aGUgcmVsYXRpb24gc2luY2Ug aXQgd2FzIGFscmVhZHkgbG9ja2VkLCBlaXRoZXIgYnkKQEAgLTQ3MSw2ICs0NzIsMTUgQEAgZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBi b29sIGluaHBhcmVudCwKIAlpZiAoaW5ocGFyZW50ICYmIHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKIAkJc2V0X3JlbGF0aW9uX3BhcnRpdGlv bl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCisJQXNzZXJ0KHJlbC0+bm90bnVsbGF0dHJz ID09IE5VTEwpOworCWZvcihpID0gMDsgaSA8IHJlbGF0aW9uLT5yZF9hdHQtPm5hdHRzOyBpKysp CisJeworCQlGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgYXR0ciA9IHJlbGF0aW9uLT5yZF9hdHQtPmF0 dHJzW2ldOworCQlpZiAoYXR0ci5hdHRub3RudWxsKQorCQkJcmVsLT5ub3RudWxsYXR0cnMgPSBi bXNfYWRkX21lbWJlcihyZWwtPm5vdG51bGxhdHRycywKKwkJCQkJCQkJCQkJICAgYXR0ci5hdHRu dW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwl9CisKIAl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDJh NTNhNmUzNDQuLmM2MjQ2MTE3ODQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC03MjcsNiArNzI3 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWludAkJCXJlbF9wYXJhbGxlbF93b3Jr ZXJzOwkvKiB3YW50ZWQgbnVtYmVyIG9mIHBhcmFsbGVsIHdvcmtlcnMgKi8KIAl1aW50MzIJCWFt ZmxhZ3M7CQkvKiBCaXRtYXNrIG9mIG9wdGlvbmFsIGZlYXR1cmVzIHN1cHBvcnRlZCBieQogCQkJ CQkJCQkgKiB0aGUgdGFibGUgQU0gKi8KKwkvKiBOb3QgbnVsbCBhdHRycywgc3RhcnQgZnJvbSAt Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciAqLworCUJpdG1hcHNldAkJKm5vdG51 bGxhdHRyczsKIAogCS8qIEluZm9ybWF0aW9uIGFib3V0IGZvcmVpZ24gdGFibGVzIGFuZCBmb3Jl aWduIGpvaW5zICovCiAJT2lkCQkJc2VydmVyaWQ7CQkvKiBpZGVudGlmaWVzIHNlcnZlciBmb3Ig dGhlIHRhYmxlIG9yIGpvaW4gKi8KLS0gCjIuMjkuMgoK --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch" Content-Description: v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch Content-Disposition: attachment; filename="v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch"; size=60795; creation-date="Sat, 23 Oct 2021 13:03:59 GMT"; modification-date="Sat, 23 Oct 2021 13:03:58 GMT" Content-Transfer-Encoding: base64 RnJvbSAwOGFlZTk4NjVmNDhjYzhiYjhjNDI5YWY3ZjAwNThhOGZjNDk5MWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IE1vbiwgMTEgTWF5IDIwMjAgMTU6NTA6NTIgKzA4 MDAKU3ViamVjdDogW1BBVENIIDIvNV0gSW50cm9kdWNlIFVuaXF1ZUtleSBhdHRyaWJ1dGVzIG9u IFJlbE9wdEluZm8gc3RydWN0LgoKVW5pcXVlS2V5IGlzIGEgc2V0IG9mIGV4cHJzIG9uIFJlbE9w dEluZm8gd2hpY2ggcmVwcmVzZW50cyB0aGUgZXhwcnMKd2lsbCBiZSB1bmlxdWUgb24gdGhlIGdp dmVuIFJlbE9wdEluZm8uIFlvdSBjYW4gc2VlIFJFQURNRS51bmlxdWVrZXkKZm9yIG1vcmUgaW5m b3JtYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAg ICB8ICAgMTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jICAgICAgICAgICAgICAgICAgICB8 ICAgMzEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAg MTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgICAgICB8ICAgMTEg Kwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgMTAgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgICAgICAgICB8ICAgIDMgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkgfCAgMTMxICsrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICB8ICAgMTAgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgICAgIHwgMTEzNCArKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgIHwgICAxNSArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAgICB8ICAgIDIgKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jICAgICB8ICAgNDQgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jICAgICAgICB8ICAgMTggKy0KIHNyYy9pbmNs dWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRl L25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgfCAgIDI5ICstCiBzcmMvaW5jbHVkZS9ub2Rl cy9wZ19saXN0LmggICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvYXBwZW5kaW5mby5oICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmggICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCAgICAgICAgICAgICAgIHwgICA0MyArCiAyMyBmaWxlcyBjaGFuZ2VkLCAxNTA2IGluc2Vy dGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmlu ZGV4IDcwZTllNTRkM2UuLjY1MmJhN2Y4ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC0yMzIw LDYgKzIzMjAsMTYgQEAgX2NvcHlQYXRoS2V5KGNvbnN0IFBhdGhLZXkgKmZyb20pCiAJcmV0dXJu IG5ld25vZGU7CiB9CiAKK3N0YXRpYyBVbmlxdWVLZXkgKgorX2NvcHlVbmlxdWVLZXkoY29uc3Qg VW5pcXVlS2V5ICpmcm9tKQoreworCVVuaXF1ZUtleQkqbmV3bm9kZSA9IG1ha2VOb2RlKFVuaXF1 ZUtleSk7CisKKwlDT1BZX05PREVfRklFTEQoZXhwcnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG11 bHRpX251bGx2YWxzKTsKKworCXJldHVybiBuZXdub2RlOworfQogLyoKICAqIF9jb3B5UmVzdHJp Y3RJbmZvCiAgKi8KQEAgLTUzMTMsNiArNTMyMyw5IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZv aWQgKmZyb20pCiAJCWNhc2UgVF9QYXRoS2V5OgogCQkJcmV0dmFsID0gX2NvcHlQYXRoS2V5KGZy b20pOwogCQkJYnJlYWs7CisJCWNhc2UgVF9VbmlxdWVLZXk6CisJCQlyZXR2YWwgPSBfY29weVVu aXF1ZUtleShmcm9tKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfUmVzdHJpY3RJbmZvOgogCQkJcmV0 dmFsID0gX2NvcHlSZXN0cmljdEluZm8oZnJvbSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL2xpc3QuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYwppbmRleCA5 NGZiMjM2ZGFmLi5mYTg0MDUxMWFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9saXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jCkBAIC03MDIsNiArNzAyLDM3IEBAIGxp c3RfbWVtYmVyX29pZChjb25zdCBMaXN0ICpsaXN0LCBPaWQgZGF0dW0pCiAJcmV0dXJuIGZhbHNl OwogfQogCisvKgorICogcmV0dXJuIHRydWUgaWZmIGV2ZXJ5IGVudHJ5IGluICJtZW1iZXJzIiBs aXN0IGlzIGFsc28gcHJlc2VudAorICogaW4gdGhlICJ0YXJnZXQiIGxpc3QuCisgKi8KK2Jvb2wK K2xpc3RfaXNfc3Vic2V0KGNvbnN0IExpc3QgKm1lbWJlcnMsIGNvbnN0IExpc3QgKnRhcmdldCkK K3sKKwljb25zdCBMaXN0Q2VsbAkqbGMxLCAqbGMyOworCisJQXNzZXJ0KElzUG9pbnRlckxpc3Qo bWVtYmVycykpOworCUFzc2VydChJc1BvaW50ZXJMaXN0KHRhcmdldCkpOworCWNoZWNrX2xpc3Rf aW52YXJpYW50cyhtZW1iZXJzKTsKKwljaGVja19saXN0X2ludmFyaWFudHModGFyZ2V0KTsKKwor CWZvcmVhY2gobGMxLCBtZW1iZXJzKQorCXsKKwkJYm9vbCBmb3VuZCA9IGZhbHNlOworCQlmb3Jl YWNoKGxjMiwgdGFyZ2V0KQorCQl7CisJCQlpZiAoZXF1YWwobGZpcnN0KGxjMSksIGxmaXJzdChs YzIpKSkKKwkJCXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ aWYgKCFmb3VuZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIC8q CiAgKiBEZWxldGUgdGhlIG4ndGggY2VsbCAoY291bnRpbmcgZnJvbSAwKSBpbiBsaXN0LgogICoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggN2QxYTAxZDFlZC4uZGE0OTEzM2I4MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKQEAgLTgxNSwzICs4MTUsMTYgQEAgbWFrZVZhY3V1bVJlbGF0aW9uKFJhbmdl VmFyICpyZWxhdGlvbiwgT2lkIG9pZCwgTGlzdCAqdmFfY29scykKIAl2LT52YV9jb2xzID0gdmFf Y29sczsKIAlyZXR1cm4gdjsKIH0KKworCisvKgorICogbWFrZVVuaXF1ZUtleQorICovCitVbmlx dWVLZXkqCittYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251bGx2YWxzKQor eworCVVuaXF1ZUtleSAqIHVrZXkgPSBtYWtlTm9kZShVbmlxdWVLZXkpOworCXVrZXktPmV4cHJz ID0gZXhwcnM7CisJdWtleS0+bXVsdGlfbnVsbHZhbHMgPSBtdWx0aV9udWxsdmFsczsKKwlyZXR1 cm4gdWtleTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IDJlNWVkNzdlMTguLjVhMjVhNTBlZGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMjUxMSw2ICsyNTExLDE0IEBAIF9vdXRQYXRoS2V5KFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQYXRoS2V5ICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQocGtf bnVsbHNfZmlyc3QpOwogfQogCitzdGF0aWMgdm9pZAorX291dFVuaXF1ZUtleShTdHJpbmdJbmZv IHN0ciwgY29uc3QgVW5pcXVlS2V5ICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiVU5JUVVF S0VZIik7CisJV1JJVEVfTk9ERV9GSUVMRChleHBycyk7CisJV1JJVEVfQk9PTF9GSUVMRChtdWx0 aV9udWxsdmFscyk7Cit9CisKIHN0YXRpYyB2b2lkCiBfb3V0UGF0aFRhcmdldChTdHJpbmdJbmZv IHN0ciwgY29uc3QgUGF0aFRhcmdldCAqbm9kZSkKIHsKQEAgLTQyOTMsNiArNDMwMSw5IEBAIG91 dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QYXRoS2V5 OgogCQkJCV9vdXRQYXRoS2V5KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgVF9Vbmlx dWVLZXk6CisJCQkJX291dFVuaXF1ZUtleShzdHIsIG9iaik7CisJCQkJYnJlYWs7CiAJCQljYXNl IFRfUGF0aFRhcmdldDoKIAkJCQlfb3V0UGF0aFRhcmdldChzdHIsIG9iaik7CiAJCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IGFiZjA4YjdhMmYuLjU0ZDk3YWMzZDAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L3JlYWRmdW5jcy5jCkBAIC00OTQsNiArNDk0LDE0IEBAIF9yZWFkU2V0T3BlcmF0aW9uU3RtdCh2 b2lkKQogCVJFQURfRE9ORSgpOwogfQogCitzdGF0aWMgVW5pcXVlS2V5ICoKK19yZWFkVW5pcXVl S2V5KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoVW5pcXVlS2V5KTsKKwlSRUFEX05PREVfRklFTEQo ZXhwcnMpOworCVJFQURfQk9PTF9GSUVMRChtdWx0aV9udWxsdmFscyk7CisJUkVBRF9ET05FKCk7 Cit9CiAKIC8qCiAgKglTdHVmZiBmcm9tIHByaW1ub2Rlcy5oLgpAQCAtMjc0NSw2ICsyNzUzLDgg QEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkQ29tbW9uVGFi bGVFeHByKCk7CiAJZWxzZSBpZiAoTUFUQ0goIlNFVE9QRVJBVElPTlNUTVQiLCAxNikpCiAJCXJl dHVybl92YWx1ZSA9IF9yZWFkU2V0T3BlcmF0aW9uU3RtdCgpOworCWVsc2UgaWYgKE1BVENIKCJV TklRVUVLRVkiLCA5KSkKKwkJcmV0dXJuX3ZhbHVlID0gX3JlYWRVbmlxdWVLZXkoKTsKIAllbHNl IGlmIChNQVRDSCgiQUxJQVMiLCA1KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRBbGlhcygpOwog CWVsc2UgaWYgKE1BVENIKCJSQU5HRVZBUiIsIDgpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9NYWtl ZmlsZQppbmRleCAxZTE5OWZmNjZmLi43Yjk4MjBjMjVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQCBPQkpTID0gXAogCWpvaW5wYXRoLm8gXAogCWpv aW5yZWxzLm8gXAogCXBhdGhrZXlzLm8gXAotCXRpZHBhdGgubworCXRpZHBhdGgubyBcCisJdW5p cXVla2V5cy5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9SRUFETUUudW5pcXVla2V5Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVlYWM3NjE5OTUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9SRUFETUUudW5pcXVla2V5CkBAIC0wLDAgKzEs MTMxIEBACisxLiBXaGF0IGlzIFVuaXF1ZUtleT8KK1dlIGNhbiB0aGluayBVbmlxdWVLZXkgaXMg YSBzZXQgb2YgZXhwcnMgZm9yIGEgUmVsT3B0SW5mbywgd2hpY2ggd2UgYXJlIGluc3VyZQordGhh dCBkb2Vzbid0IHlpZWxkcyBzYW1lIHJlc3VsdCBhbW9uZyBhbGwgdGhlIHJvd3MuIFRoZSBzaW1w bGVzdCBVbmlxdWVLZXkKK2Zvcm1hdCBpcyBwcmltYXJ5IGtleS4KKworSG93ZXZlciB3ZSBkZWZp bmUgdGhlIFVucWl1ZUtleSBhcyBiZWxvdy4KKwordHlwZWRlZiBzdHJ1Y3QgVW5pcXVlS2V5Cit7 CisgICAgICAgIE5vZGVUYWcJdHlwZTsKKyAgICAgICAgTGlzdAkqZXhwcnM7CisgICAgICAgIGJv b2wJbXVsdGlfbnVsbHZhbHM7Cit9IFVuaXF1ZUtleTsKKworZXhwcnMgaXMgYSBsaXN0IG9mIGV4 cHJzIHdoaWNoIGlzIHVuaXF1ZSBvbiBjdXJyZW50IFJlbE9wdEluZm8uIGV4cHJzID0gTklMCitp cyBhIHNwZWNpYWwgY2FzZSBvZiBVbmlxdWVLZXksIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG9ubHkg b25lIHJvdyBpbiB0aGF0CityZWxhdGlvbi5pdCBoYXMgYSBzdHJvbmdlciBzZW1hbnRpYyB0aGFu IG90aGVycy4gbGlrZSBTRUxFQ1QgdWsgRlJPTSB0OyB1ayBpcworbm9ybWFsIHVuaXF1ZSBrZXkg YW5kIG1heSBoYXZlIGRpZmZlcmVudCB2YWx1ZXMuIFNFTEVDVCBjb2x4IEZST00gdCBXSEVSRSB1 ayA9Citjb25zdC4gIGNvbHggaXMgdW5pcXVlIEFORCB3ZSBoYXZlIG9ubHkgMSB2YWx1ZS4gVGhp cyBmaWVsZCBjYW4gdXNlZCBmb3IKK2lubmVycmVsX2lzX3VuaXF1ZS4gdGhpcyBsb2dpYyBpcyBo YW5kbGVkIHNwZWNpYWxseSBpbiBhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3cKK2Z1bmN0aW9uLgor CittdWx0aV9udWxsdmFsczogdHJ1ZSBtZWFucyBtdWx0aSBudWxsIHZhbHVlcyBtYXkgZXhpc3Qg aW4gdGhlc2UgZXhwcnMsIHNvIHRoZQordW5pcXVlbmVzcyBpcyBub3QgZ3VhcmFudGVlZCBpbiB0 aGlzIGNhc2UuIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5IGZvcgorcmVtb3ZlX3VzZWxlc3Nfam9p biAmIHJlZHVjZV91bmlxdWVfc2VtaWpvaW5zIHdoZXJlIHdlIGRvbid0IG1pbmQgdGhlc2UKK2R1 cGxpY2F0ZWQgTlVMTCB2YWx1ZXMuIEl0IGlzIHNldCB0byB0cnVlIGZvciAyIGNhc2VzLiBPbmUg aXMgYSB1bmlxdWUga2V5Citmcm9tIGEgdW5pcXVlIGluZGV4IGJ1dCB0aGUgcmVsYXRlZCBjb2x1 bW4gaXMgbnVsbGFibGUuIFRoZSBvdGhlciBvbmUgaXMgZm9yCitvdXRlciBqb2luLiBzZWUgcG9w dWxhdGVfam9pbnJlbF91bmlxdWVrZXlzIGZvciBkZXRhaWwuCisKKworVGhlIFVuaXF1ZUtleSBj YW4gYmUgdXNlZCBhdCB0aGUgZm9sbG93aW5nIGNhc2VzIGF0IGxlYXN0OgorMS4gcmVtb3ZlX3Vz ZWxlc3Nfam9pbnMuCisyLiByZWR1Y2Vfc2VtaWFudGlfam9pbnMKKzMuIHJlbW92ZSBkaXN0aW5j dCBub2RlIGlmIGRpc3RpbmN0IGNsYXVzZSBpcyB1bmlxdWUuCis0LiByZW1vdmUgYWdnbm9kZSBp ZiBncm91cCBieSBjbGF1c2UgaXMgdW5pcXVlLgorNS4gSW5kZXggU2tpcCBTY2FuIChXSVApCis2 LiBBZ2dyZWdhdGlvbiBQdXNoIERvd24gd2l0aG91dCAyIHBoYXNlIGFnZ3JlZ2F0aW9uIGlmIHRo ZSBqb2luIGNhbid0CisgICBkdXBsaWNhdGVkIHRoZSBhZ2dyZWdhdGVkIHJvd3MuICh3b3JrIGlu IHByb2dyZXNzIGZlYXR1cmUpCisKKzIuIEhvdyBpcyBpdCBtYWludGFpbmVkPworCitXZSBoYXZl IGEgc2V0IG9mIHBvcHVsYXRlX3h4eF91bnFpdWVrZXlzIGZ1bmN0aW9ucyB0byBtYWludGFpbiB0 aGUgdW5pcXVla2V5IG9uCit2YXJpb3VzIGNhc2VzLiB4eHggaW5jbHVkZXMgYmFzZXJlbCwgam9p bnJlbCwgcGFydGl0aW9uZWRyZWwsIGRpc3RpbmN0cmVsLAorZ3JvdXBlZHJlbCwgdW5pb25yZWwu IGFuZCB3ZSBhbHNvIG5lZWQgdG8gY29udmVydCB0aGUgdW5pcXVla2V5IGZyb20gc3VicXVlcnkK K3RvIG91dGVyIHJlbGF0aW9uLCB3aGljaCBpcyB3aGF0IGNvbnZlcnRfc3VicXVlcnlfdW5pcXVl a2V5cyBkb2VzLgorCisxLiBUaGUgZmlyc3QgcGFydCBpcyBhYm91dCBiYXNlcmVsLiBXZSBoYW5k bGVkIDMgY2FzZXMuIHN1cHBvc2Ugd2UgaGF2ZSBVbmlxdWUKK0luZGV4IG9uIChhLCBiKS4KKwor MS4gU0VMRUNUIGEsIGIgRlJPTSB0LiAgVW5pcXVlS2V5IChhLCBiKQorMi4gU0VMRUNUIGEgRlJP TSB0IFdIRVJFIGIgPSAxOyAgVW5pcXVlS2V5IChhKQorMy4gU0VMRUNUIC4uIEZST00gdCBXSEVS RSBhID0gMSBBTkQgYiA9IDE7ICBVbmlxdWVLZXkgKE5JTCkuICBvbmVyb3cgY2FzZSwgZXZlcnkK KyAgIGNvbHVtbiBpcyBVbmlxdWUuCisKKzIuIFRoZSBuZXh0IHBhcnQgaXMgam9pbnJlbCwgdGhp cyBwYXJ0IGlzIG1vc3QgZXJyb3ItcHJvbmUsIHdlIHNpbXBsaWZpZWQgdGhlIHJ1bGVzCitsaWtl IGJlbG93OgorMS4gSWYgdGhlIHJlbGF0aW9uJ3MgVW5pcXVlS2V5IGNhbid0IGJlIGR1cGxpY2F0 ZWQgYWZ0ZXIgam9pbiwgIHRoZW4gaXMgd2lsbCBiZQorICAgc3RpbGwgdmFsaWQgZm9yIHRoZSBq b2luIHJlbC4gVGhlIGZ1bmN0aW9uIHdlIHVzZWQgaGVyZSBpcworICAgaW5uZXJyZWxfa2VlcHNf dW5pcXVlLiBUaGUgYmFzaWMgaWRlYSBpcyBpbm5lcnJlbC5hbnlfY29sID0gb3V0ZXIudWsuCisK KzIuIElmIHRoZSBVbnFpdWVLZXkgY2FuJ3Qga2VlcCB2YWxpZCB2aWEgdGhlIHJ1bGUgMSwgdGhl IGNvbWJpbmF0aW9uIG9mIHRoZQorICAgVW5pcXVlS2V5IGZyb20gYm90aCBzaWRlcyBhcmUgdmFs aWQgZm9yIHN1cmUuICBXZSBjYW4gcHJvdmUgdGhpcyBhczogaWYgdGhlCisgICB1bmlxdWUgZXhw cnMgZnJvbSByZWwxIGlzIGR1cGxpY2F0ZWQgYnkgcmVsMiwgdGhlIGR1cGxpY2F0ZWQgcm93cyBt dXN0CisgICBjb250YWlucyBkaWZmZXJlbnQgdW5pcXVlIGV4cHJzIGZyb20gcmVsMi4KKworTW9y ZSBjb25zaWRlcmF0aW9ucyBhYm91dCBvbmVyb3c6CisxLiBJZiByZWxhdGlvbiB3aXRoIG9uZSBy b3cgYW5kIGl0IGNhbid0IGJlIGR1cGxpY2F0ZWQsIGl0IGlzIHN0aWxsIHBvc3NpYmxlCisgICBj b250YWlucyBtdWxpdF9udWxsdmFzIGFmdGVyIG91dGVyIGpvaW4uCisyLiBJZiB0aGUgZWl0aGVy IFVuaXF1ZUtleSBjYW4gYmUgZHVwbGljYXRlZCBhZnRlciBqb2luLCB0aGUgY2FuIGdldCBvbmUg cm93CisgICBvbmx5IHdoZW4gYm90aCBzaWRlIGlzIG9uZSByb3cgQU5EIHRoZXJlIGlzIG5vIG91 dGVyIGpvaW4uCiszLiBXaGVuZXZlciB0aGUgb25lcm93IFVuaXF1ZUtleSBpcyBub3QgYSB2YWxp ZCBhbnkgbW9yZSwgd2UgbmVlZCB0byBjb252ZXJ0IG9uZQorICAgcm93IFVuaXF1ZUtleSB0byBu b3JtYWwgdW5pcXVlIGtleSBzaW5jZSB3ZSBkb24ndCBzdG9yZSBleHBycyBmb3Igb25lLXJvdwor ICAgcmVsYXRpb24uIGdldF9leHByc19mcm9tX3VuaXF1ZWtleXMgd2lsbCBiZSB1c2VkIGhlcmUu CisKKworTW9yZSBjb25zaWRlcmF0aW9ucyBhYm91dCBtdWx0aV9udWxsdmFscyBhZnRlciBqb2lu OgorMS4gSWYgdGhlIG9yaWdpbmFsIFVucWl1ZUtleSBoYXMgbXVsdGlfbnVsbHZhbHMsIHRoZSBm aW5hbCBVbmlxdWVLZXkgd2lsbCBoYXZlCisgICBtdWxpdF9udWxsdmFscyBpbiBhbnkgY2FzZS4K KzIuIElmIGEgdW5pcXVlIGtleSBkb2Vzbid0IGFsbG93IG11bGl0X251bGx2YWxzLCBhZnRlciBz b21lIG91dGVyIGpvaW4sIGl0CisgICBhbGxvd3Mgc29tZSBvdXRlciBqb2luLgorCisKKzMuIFdo ZW4gd2UgY29tZXMgdG8gc3VicXVlcnksIHdlIG5lZWQgdG8gY29udmVydF9zdWJxdWVyeV91bnFp dWVrZXlzIGp1c3QgbGlrZQorY29udmVydF9zdWJxdWVyeV9wYXRoa2V5cy4gIE9ubHkgdGhlIFVu aXF1ZUtleSBpbnNpZGVzIHN1YnF1ZXJ5IGlzIHJlZmVyZW5jZWQgYXMKK2EgVmFyIGluIG91dGVy IHJlbGF0aW9uIHdpbGwgYmUgcmV1c2VkLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG91 dGVycmVsLlZhcgorYW5kIHN1YnF1ZXJ5LmV4cHJzIGlzIGJ1aWx0IHdpdGggb3V0ZXJlbC0+c3Vi cm9vdC0+cHJvY2Vzc2VkX3RsaXN0LgorCisKKzQuIEFzIGZvciB0aGUgU1JGIGZ1bmN0aW9ucywg aXQgd2lsbCBicmVhayB0aGUgdW5pcXVlbmVzcyBvZiB1bmlxdWVrZXksIEhvd2V2ZXIgaXQKK2lz IGhhbmRsZWQgaW4gYWRqdXN0X3BhdGhzX2Zvcl9zcmZzLCB3aGljaCBoYXBwZW5zIGFmdGVyIHRo ZSBxdWVyeV9wbGFubmVyLiBzbword2Ugd2lsbCBtYWludGFpbiB0aGUgVW5pcXVlS2V5IHVudGls IHRoZXJlIGFuZCByZXNldCBpdCB0byBOSUwgYXQgdGhhdAorcGxhY2VzLiBUaGlzIGNhbid0IGhl bHAgb24gZGlzdGluY3QvZ3JvdXAgYnkgZWxpbWluYXRpb24gY2FzZXMgYnV0IHByb2JhYmx5IGhl bHAKK2luIHNvbWUgb3RoZXIgY2FzZXMsIGxpa2UgcmVkdWNlX3VucWl1ZV9zZW1pam9pbnMvcmVt b3ZlX3VzZWxlc3Nfam9pbnMgYW5kIGl0IGlzCitzZW1hbnRpYyBjb3JyZWN0bHkuCisKKworNS4g QXMgZm9yIGluaGVyaXQgdGFibGUsIHdlIGZpcnN0IG1haW4gdGhlIFVucWl1ZUtleSBvbiBjaGls ZHJlbCBhcyB3ZWxsLiBCdXQgZm9yCitwYXJ0aXRpb25lZCB0YWJsZSB3ZSBuZWVkIHRvIG1haW50 YWluIDIgZGlmZmVyZW50IGtpbmRzIG9mCitVbnFpdWVLZXkuIDEpLiBVbmlxdWVLZXkgb24gdGhl IHBhcmVudCByZWxhdGlvbiAyKS4gVW5pcXVlS2V5IG9uIGNoaWxkCityZWxhdGlvbiBmb3IgcGFy dGl0aW9uIHdpc2UgcXVlcnkuCisKK0V4YW1wbGU6CitDUkVBVEUgVEFCTEUgcCAoYSBpbnQgbm90 IG51bGwsIGIgaW50IG5vdCBudWxsKSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitDUkVBVEUgVEFC TEUgcDAgcGFydGl0aW9uIG9mIHAgZm9yIHZhbHVlcyBpbiAoMSk7CitDUkVBVEUgVEFCTEUgcDEg cGFydGl0aW9uIG9mIHAgZm9yIHZhbHVlcyBpbiAoMik7CisKK2NyZWF0ZSB1bmlxdWUgaW5kZXgg cDBfYiBvbiBwMChiKTsKK2NyZWF0ZSB1bmlxdWUgaW5kZXggcDFfYiBvbiBwMShiKTsKKworTm93 IGIgaXMgb25seSB1bmlxdWUgb24gcGFydGl0aW9uIGxldmVsLCBzbyB0aGUgZGlzdGluY3QgY2Fu J3QgYmUgcmVtb3ZlZCBvbgordGhlIGZvbGxvd2luZyBjYXNlcy4gU0VMRUNUIERJU1RJTkNUIGIg RlJPTSBwOworCitBbm90aGVyIGV4YW1wbGUgaXMgU0VMRUNUIERJU1RJTkNUIGEsIGIgRlJPTSBw IFdIRVJFIGEgPSAxOyBTaW5jZSBvbmx5IG9uZQorcGFydGl0aW9uIGlzIGNob3NlbiwgdGhlIFVu aXF1ZUtleSBvbiBjaGlsZCByZWxhdGlvbiBpcyBzYW1lIGFzIHRoZSBVbmlxdWVLZXkgb24KK3Bh cmVudCByZWxhdGlvbi4KKworQW5vdGhlciB1c2FnZSBvZiBVbmlxdWVLZXkgb24gcGFydGl0aW9u IGxldmVsIGlzIGl0IGJlIGhlbHBmdWwgZm9yCitwYXJ0aXRpb24td2lzZSBqb2luLgorCitBcyBm b3IgdGhlIFVuaXF1ZUtleSBvbiBwYXJlbnQgdGFibGUgbGV2ZWwsIGl0IGNvbWVzIHdpdGggMiBk aWZmZXJlbnQgd2F5cywKKzEpLiB0aGUgVW5pcXVlS2V5IGlzIGFsc28gZGVyaXZlZCBpbiBVbmlx dWVLZXkgaW5kZXgsIGJ1dCB0aGUgaW5kZXggbXVzdCBiZSBzYW1lCitpbiBhbGwgdGhlIHJlbGF0 ZWQgY2hpbGRyZW4gcmVsYXRpb25zIGFuZCB0aGUgdW5pcXVlIGluZGV4IG11c3QgY29udGFpbnMK K1BhcnRpdGlvbiBLZXkgaW4gaXQuIEV4YW1wbGU6CisKK0NSRUFURSBVTklRVUUgSU5ERVggcF9h YiBPTiBwKGEsIGIpOyAgLS0gd2hlcmUgYSBpcyB0aGUgcGFydGl0aW9uIGtleS4KKworLS0gUXVl cnkKK1NFTEVDVCBhLCBiIEZST00gcDsgdGhlIChhLCBiKSBpcyBhIFVuaXF1ZUtleSBvZiBwLgor CisyKS4gSWYgdGhlIHBhcmVudCByZWxhdGlvbiBoYXMgb25seSBvbmUgY2hpbGRyZWwsIHRoZSBV bmlxdWVLZXkgb24gY2hpbGRyZWwgaXMKKyB0aGUgVW5pcXVlS2V5IG9uIHBhcmVudCBhcyB3ZWxs LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggYWNjYTM3NTVhOC4uNGRm YzVkMjliYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC01ODAsNiAr NTgwLDEyIEBAIHNldF9wbGFpbl9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLCBSYW5nZVRibEVudHJ5ICpydGUpCiAJICovCiAJY2hlY2tfaW5kZXhfcHJlZGljYXRl cyhyb290LCByZWwpOwogCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSd2ZSBtYXJrZWQgd2hpY2ggcGFy dGlhbCBpbmRleGVzIGFyZSBzdWl0YWJsZSwgd2UgY2FuIG5vdworCSAqIGJ1aWxkIHRoZSByZWxh dGlvbidzIHVuaXF1ZSBrZXlzLgorCSAqLworCXBvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5cyhy b290LCByZWwsIHJlbC0+aW5kZXhsaXN0KTsKKwogCS8qIE1hcmsgcmVsIHdpdGggZXN0aW1hdGVk IG91dHB1dCByb3dzLCB3aWR0aCwgZXRjICovCiAJc2V0X2Jhc2VyZWxfc2l6ZV9lc3RpbWF0ZXMo cm9vdCwgcmVsKTsKIH0KQEAgLTEyOTgsNiArMTMwNCw4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkvKiBBZGQgcGF0aHMg dG8gdGhlIGFwcGVuZCByZWxhdGlvbi4gKi8KIAlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290 LCByZWwsIGxpdmVfY2hpbGRyZWxzKTsKKwlpZiAoSVNfUEFSVElUSU9ORURfUkVMKHJlbCkpCisJ CXBvcHVsYXRlX3BhcnRpdGlvbmVkcmVsX3VuaXF1ZWtleXMocm9vdCwgcmVsLCBsaXZlX2NoaWxk cmVscyk7CiB9CiAKIApAQCAtMjMwNiw2ICsyMzE0LDggQEAgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJICBwYXRoa2V5 cywgcmVxdWlyZWRfb3V0ZXIpKTsKIAl9CiAKKwljb252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMo cm9vdCwgcmVsLCBzdWJfZmluYWxfcmVsKTsKKwogCS8qIElmIG91dGVyIHJlbCBhbGxvd3MgcGFy YWxsZWxpc20sIGRvIHNhbWUgZm9yIHBhcnRpYWwgcGF0aHMuICovCiAJaWYgKHJlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291dGVyKSkKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCA2NDA3ZWRlMTJhLi4xZjRhZTJkNjlhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTc3LDEzICs3Nyw2IEBAIHN0 YXRpYyB2b2lkIGNvbnNpZGVyX3BhcmFsbGVsX21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwK IHN0YXRpYyB2b2lkIGhhc2hfaW5uZXJfYW5kX291dGVyKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdElu Zm8gKmlubmVycmVsLAogCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsIEpvaW5QYXRoRXh0cmFE YXRhICpleHRyYSk7Ci1zdGF0aWMgTGlzdCAqc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5u ZXJJbmZvICpyb290LAotCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAotCQkJCQkJCQkJ ICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKLQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWws Ci0JCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKLQkJCQkJCQkJCSAgSm9pblR5cGUgam9p bnR5cGUsCi0JCQkJCQkJCQkgIGJvb2wgKm1lcmdlam9pbl9hbGxvd2VkKTsKIHN0YXRpYyB2b2lk IGdlbmVyYXRlX21lcmdlam9pbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBS ZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVycmVsLApAQCAt MjE3Myw3ICsyMTY2LDcgQEAgaGFzaF9pbm5lcl9hbmRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAgKiBpZiBpdCBpcyBtZXJnZWpvaW5hYmxlIGFuZCBpbnZvbHZlcyB2YXJzIGZyb20gdGhlIHR3 byBzdWItcmVsYXRpb25zCiAgKiBjdXJyZW50bHkgb2YgaW50ZXJlc3QuCiAgKi8KLXN0YXRpYyBM aXN0ICoKK0xpc3QgKgogc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAxNmNjOTI2OWVmLi4x YTQ0NGExZTdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVs cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTkyNCw2 ICs5MjQsOCBAQCBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsCiAKIAkvKiBBcHBseSBwYXJ0aXRpb253aXNlIGpvaW4gdGVjaG5p cXVlLCBpZiBwb3NzaWJsZS4gKi8KIAl0cnlfcGFydGl0aW9ud2lzZV9qb2luKHJvb3QsIHJlbDEs IHJlbDIsIGpvaW5yZWwsIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCXBvcHVsYXRlX2pvaW5y ZWxfdW5pcXVla2V5cyhyb290LCBqb2lucmVsLCByZWwxLCByZWwyLCByZXN0cmljdGxpc3QsIHNq aW5mby0+am9pbnR5cGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5j CmluZGV4IDIxNmRkMjYzODUuLjhiMjY3ZGUwNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL3BhdGhrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv cGF0aGtleXMuYwpAQCAtMzMsNyArMzMsNiBAQCBzdGF0aWMgYm9vbCBwYXRoa2V5X2lzX3JlZHVu ZGFudChQYXRoS2V5ICpuZXdfcGF0aGtleSwgTGlzdCAqcGF0aGtleXMpOwogc3RhdGljIGJvb2wg bWF0Y2hlc19ib29sZWFuX3BhcnRpdGlvbl9jbGF1c2UoUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKnBhcnRyZWwsCiAJCQkJCQkJCQkJCSBpbnQgcGFydGtleWNv bCk7Ci1zdGF0aWMgVmFyICpmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKFJlbE9wdEluZm8gKnJl bCwgVGFyZ2V0RW50cnkgKnRsZSk7CiBzdGF0aWMgYm9vbCByaWdodF9tZXJnZV9kaXJlY3Rpb24o UGxhbm5lckluZm8gKnJvb3QsIFBhdGhLZXkgKnBhdGhrZXkpOwogCiAKQEAgLTEwMzUsNyArMTAz NCw3IEBAIGNvbnZlcnRfc3VicXVlcnlfcGF0aGtleXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKICAqIFdlIG5lZWQgdGhpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1 cm4gcGF0aGtleXMgZGVzY3JpYmluZyB2YWx1ZXMKICAqIHRoYXQgYXJlIHVuYXZhaWxhYmxlIGFi b3ZlIHRoZSBsZXZlbCBvZiB0aGUgc3VicXVlcnkgc2Nhbi4KICAqLwotc3RhdGljIFZhciAqCitW YXIgKgogZmluZF92YXJfZm9yX3N1YnF1ZXJ5X3RsZShSZWxPcHRJbmZvICpyZWwsIFRhcmdldEVu dHJ5ICp0bGUpCiB7CiAJTGlzdENlbGwgICAqbGM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91 bmlxdWVrZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2E0MGM0 MDg1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1 ZWtleXMuYwpAQCAtMCwwICsxLDExMzQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHVu aXF1ZWtleXMuYworICoJICBVdGlsaXRpZXMgZm9yIG1hdGNoaW5nIGFuZCBidWlsZGluZyB1bmlx dWUga2V5cworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvYXBwZW5kaW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5p cC5oIgorCisKKy8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIGhlbHAgcG9wdWxhdGVfam9p bnJlbF91bmlxdWVrZXlzLgorICoKKyAqIGFkZGVkX3RvX2pvaW5yZWwgaXMgdHJ1ZSBpZiBhIHVu aXF1ZWtleSAoZnJvbSBvdXRlcnJlbCBvciBpbm5lcnJlbCkKKyAqIGhhcyBiZWVuIGFkZGVkIHRv IGpvaW5yZWwuCisgKiB1c2VmdWwgaXMgdHJ1ZSBpZiB0aGUgZXhwcnMgb2YgdGhlIHVuaXF1ZWtl eSBzdGlsbCBhcHBlYXJzIGluIGpvaW5yZWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IFVuaXF1ZUtl eUNvbnRleHREYXRhCit7CisJVW5pcXVlS2V5CSp1bmlxdWVrZXk7CisJYm9vbAlhZGRlZF90b19q b2lucmVsOworCWJvb2wJdXNlZnVsOworfSAqVW5pcXVlS2V5Q29udGV4dDsKKworc3RhdGljIExp c3QgKmluaXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChSZWxPcHRJbmZvICppbnB1 dHJlbCk7CitzdGF0aWMgYm9vbCBpbm5lcnJlbF9rZWVwc191bmlxdWUoUGxhbm5lckluZm8gKnJv b3QsCisJCQkJCQkJCSAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSAgUmVsT3B0SW5m byAqaW5uZXJyZWwsCisJCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkgIGJv b2wgcmV2ZXJzZSk7CisKK3N0YXRpYyBMaXN0ICpnZXRfZXhwcnNfZnJvbV91bmlxdWVpbmRleChJ bmRleE9wdEluZm8gKnVuaXF1ZV9pbmRleCwKKwkJCQkJCQkJCQlMaXN0ICpjb25zdF9leHBycywK KwkJCQkJCQkJCQlMaXN0ICpjb25zdF9leHByX29wZmFtaWxpZXMsCisJCQkJCQkJCQkJQml0bWFw c2V0ICp1c2VkX3ZhcmF0dHJzLAorCQkJCQkJCQkJCWJvb2wgKnVzZWZ1bCwKKwkJCQkJCQkJCQli b29sICptdWx0aV9udWxsdmFscyk7CitzdGF0aWMgTGlzdCAqZ2V0X2V4cHJzX2Zyb21fdW5pcXVl a2V5KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAor CQkJCQkJCQkJICBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkJCQkJICBVbmlxdWVLZXkgKnVrZXkp Oworc3RhdGljIHZvaWQgYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KFJlbE9wdEluZm8gKnJlbCk7 CitzdGF0aWMgYm9vbCBhZGRfY29tYmluZWRfdW5pcXVla2V5KFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVyX3JlbCwKKwkJCQkJCQkJICAg VW5pcXVlS2V5ICpvdXRlcl91a2V5LAorCQkJCQkJCQkgICBVbmlxdWVLZXkgKmlubmVyX3VrZXks CisJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlKTsKKworLyogVXNlZCBmb3IgdW5pcXVlIGlu ZGV4ZXMgY2hlY2tpbmcgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCitzdGF0aWMgYm9vbCBpbmRl eF9jb25zdGFpbnNfcGFydGtleShSZWxPcHRJbmZvICpwYXJ0cmVsLCAgSW5kZXhPcHRJbmZvICpp bmQpOworc3RhdGljIEluZGV4T3B0SW5mbyAqc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVu dChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAorCQkJCQkJCQkJCQkJCSBJbmRleE9wdEluZm8gKmZyb20pOworc3RhdGljIGJvb2wgc2ltcGxl X2luZGV4aW5mb19lcXVhbChJbmRleE9wdEluZm8gKmluZDEsIEluZGV4T3B0SW5mbyAqaW5kMik7 CitzdGF0aWMgdm9pZCBhZGp1c3RfcGFydGl0aW9uX3VuaXF1ZV9pbmRleGxpc3QoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJCQkJ CQkgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAorCQkJCQkJCQkJCQkgIExpc3QgKipnbG9iYWxfdW5p cXVlX2luZGV4KTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBncm91cGVkIHJlbGF0aW9uIGFu ZCBkaXN0aW5jdCByZWxhdGlvbi4gKi8KK3N0YXRpYyB2b2lkIGFkZF91bmlxdWVrZXlfZnJvbV9z b3J0Z3JvdXBzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVs LAorCQkJCQkJCQkJCSAgTGlzdCAqc29ydGdyb3Vwcyk7CisKKy8qCisgKiBwb3B1bGF0ZV9iYXNl cmVsX3VuaXF1ZWtleXMKKyAqCQlQb3B1bGF0ZSAnYmFzZXJlbCcgdW5pcXVla2V5cyBsaXN0IGJ5 IGxvb2tpbmcgYXQgdGhlIHJlbCdzIHVuaXF1ZSBpbmRleAorICogYW5kIGJhc2VyZXN0cmljdGlu Zm8KKyAqLwordm9pZAorcG9wdWxhdGVfYmFzZXJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCVJlbE9wdEluZm8gKmJhc2VyZWwsCisJCQkJCQkJTGlzdCAqaW5kZXhsaXN0 KQoreworCUxpc3RDZWxsICpsYzsKKwlMaXN0CSptYXRjaGVkX3VuaXFfaW5kZXhlcyA9IE5JTDsK KworCS8qIEF0dHJzIGFwcGVhcnMgaW4gcmVsLT5yZWx0YXJnZXQtPmV4cHJzLiAqLworCUJpdG1h cHNldCAqdXNlZF9hdHRycyA9IE5VTEw7CisKKwlMaXN0CSpjb25zdF9leHBycyA9IE5JTDsKKwlM aXN0CSpleHByX29wZmFtaWxpZXMgPSBOSUw7CisKKwlBc3NlcnQoYmFzZXJlbC0+cnRla2luZCA9 PSBSVEVfUkVMQVRJT04pOworCisJZm9yZWFjaChsYywgaW5kZXhsaXN0KQorCXsKKwkJSW5kZXhP cHRJbmZvICppbmQgPSAoSW5kZXhPcHRJbmZvICopIGxmaXJzdChsYyk7CisJCWlmICghaW5kLT51 bmlxdWUgfHwgIWluZC0+aW1tZWRpYXRlIHx8CisJCQkoaW5kLT5pbmRwcmVkICE9IE5JTCAmJiAh aW5kLT5wcmVkT0spKQorCQkJY29udGludWU7CisJCW1hdGNoZWRfdW5pcV9pbmRleGVzID0gbGFw cGVuZChtYXRjaGVkX3VuaXFfaW5kZXhlcywgaW5kKTsKKwl9CisKKwlpZiAobWF0Y2hlZF91bmlx X2luZGV4ZXMgID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgd2hpY2ggYXR0cnMgaXMg dXNlZCBpbiBiYXNlcmVsLT5yZWx0YXJnZXQgKi8KKwlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKWJh c2VyZWwtPnJlbHRhcmdldC0+ZXhwcnMsIGJhc2VyZWwtPnJlbGlkLCAmdXNlZF9hdHRycyk7CisK KwkvKiBDaGVjayB3aGljaCBhdHRybm8gaXMgdXNlZCBhdCBhIG1lcmdlYWJsZSBjb25zdCBmaWx0 ZXIgKi8KKwlmb3JlYWNoKGxjLCBiYXNlcmVsLT5iYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJUmVz dHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAo cmluZm8tPm1lcmdlb3BmYW1pbGllcyA9PSBOSUwpCisJCQljb250aW51ZTsKKworCQlpZiAoYm1z X2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykpCisJCXsKKwkJCWNvbnN0X2V4cHJzID0gbGFw cGVuZChjb25zdF9leHBycywgZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSkpOworCQl9CisJCWVs c2UgaWYgKGJtc19pc19lbXB0eShyaW5mby0+cmlnaHRfcmVsaWRzKSkKKwkJeworCQkJY29uc3Rf ZXhwcnMgPSBsYXBwZW5kKGNvbnN0X2V4cHJzLCBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2UpKTsK KwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKworCQlleHByX29wZmFtaWxpZXMgPSBsYXBwZW5k KGV4cHJfb3BmYW1pbGllcywgcmluZm8tPm1lcmdlb3BmYW1pbGllcyk7CisJfQorCisJZm9yZWFj aChsYywgbWF0Y2hlZF91bmlxX2luZGV4ZXMpCisJeworCQlib29sCW11bHRpX251bGx2YWxzLCB1 c2VmdWw7CisJCUxpc3QJKmV4cHJzID0gZ2V0X2V4cHJzX2Zyb21fdW5pcXVlaW5kZXgobGZpcnN0 X25vZGUoSW5kZXhPcHRJbmZvLCBsYyksCisJCQkJCQkJCQkJCQkJY29uc3RfZXhwcnMsCisJCQkJ CQkJCQkJCQkJZXhwcl9vcGZhbWlsaWVzLAorCQkJCQkJCQkJCQkJCXVzZWRfYXR0cnMsCisJCQkJ CQkJCQkJCQkJJnVzZWZ1bCwKKwkJCQkJCQkJCQkJCQkmbXVsdGlfbnVsbHZhbHMpOworCQlpZiAo dXNlZnVsKQorCQl7CisJCQlpZiAoZXhwcnMgPT0gTklMKQorCQkJeworCQkJCS8qIEFsbCB0aGUg Y29sdW1ucyBpbiBVbmlxdWUgSW5kZXggbWF0Y2hlZCB3aXRoIGEgcmVzdHJpY3RpbmZvICovCisJ CQkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGJhc2VyZWwpOworCQkJCXJldHVybjsKKwkJCX0K KwkJCWJhc2VyZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGJhc2VyZWwtPnVuaXF1ZWtleXMsCisJ CQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KGV4cHJzLCBtdWx0aV9udWxsdmFscykpOworCQl9CisJ fQorfQorCisKKy8qCisgKiBwb3B1bGF0ZV9wYXJ0aXRpb25lZHJlbF91bmlxdWVrZXlzCisgKiBU aGUgVW5pcXVlS2V5IG9uIHBhcnRpdGlvbnJlbCBjb21lcyBmcm9tIDIgY2FzZXM6CisgKiAxKS4g T25seSBvbmUgcGFydGl0aW9uIGlzIGludm9sdmVkIGluIHRoaXMgcXVlcnksIHRoZSB1bmlxdWUg a2V5IGNhbiBiZQorICogY29waWVkIHRvIHBhcmVudCByZWwgZnJvbSBjaGlsZHJlbC4KKyAqIDIp LiBUaGVyZSBhcmUgc29tZSB1bmlxdWUgaW5kZXggd2hpY2ggaW5jbHVkZXMgcGFydGl0aW9uIGtl eSBhbmQgZXhpc3RzCisgKiBpbiBhbGwgdGhlIHJlbGF0ZWQgcGFydGl0aW9ucy4KKyAqIFdlIG5l dmVyIG1pbmQgcnVsZSAyIGlmIHdlIGhpdCBydWxlIDEuCisgKi8KKwordm9pZAorcG9wdWxhdGVf cGFydGl0aW9uZWRyZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAg UmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkgICBMaXN0ICpjaGlsZHJlbHMpCit7CisJTGlzdENl bGwJKmxjOworCUxpc3QJKmdsb2JhbF91bmlxX2luZGV4bGlzdCA9IE5JTDsKKwlSZWxPcHRJbmZv ICpjaGlsZHJlbDsKKwlib29sIGlzX2ZpcnN0ID0gdHJ1ZTsKKworCUFzc2VydChJU19QQVJUSVRJ T05FRF9SRUwocmVsKSk7CisKKwlpZiAoY2hpbGRyZWxzID09IE5JTCkKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24gdXNlZCBpbiB0aGlzIHF1ZXJ5 LCB0aGUgVW5pcXVlS2V5IGluIGNoaWxkcmVsIGlzCisJICogc3RpbGwgdmFsaWQgaW4gcGFyZW50 IGxldmVsLCBidXQgd2UgbmVlZCBjb252ZXJ0IHRoZSBmb3JtYXQgZnJvbSBjaGlsZCBleHByIHRv CisJICogcGFyZW50IGV4cHIuCisJICovCisJaWYgKGxpc3RfbGVuZ3RoKGNoaWxkcmVscykgPT0g MSkKKwl7CisJCS8qIENoZWNrIGZvciBSdWxlIDEgKi8KKwkJUmVsT3B0SW5mbyAqY2hpbGRyZWwg PSBsaW5pdGlhbF9ub2RlKFJlbE9wdEluZm8sIGNoaWxkcmVscyk7CisJCUxpc3RDZWxsCSpsYzsK KwkJQXNzZXJ0KGNoaWxkcmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVM KTsKKwkJaWYgKHJlbGF0aW9uX2lzX29uZXJvdyhjaGlsZHJlbCkpCisJCXsKKwkJCWFkZF91bmlx dWVrZXlfZm9yX29uZXJvdyhyZWwpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yZWFjaChsYywg Y2hpbGRyZWwtPnVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9u b2RlKFVuaXF1ZUtleSwgbGMpOworCQkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IGZpbmRfYXBw aW5mb19ieV9jaGlsZChyb290LCBjaGlsZHJlbC0+cmVsaWQpOworCQkJTGlzdCAqcGFyZW50X2V4 cHJzID0gTklMOworCQkJYm9vbCBjYW5fcmV1c2UgPSB0cnVlOworCQkJTGlzdENlbGwJKmxjMjsK KwkJCWZvcmVhY2gobGMyLCB1a2V5LT5leHBycykKKwkJCXsKKwkJCQlWYXIgKnZhciA9IChWYXIg KilsZmlyc3QobGMyKTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBleHByIGNvbWVzIGZyb20gYSBl eHByZXNzaW9uLCBpdCBpcyBoYXJkIHRvIGJ1aWxkIHRoZSBleHByZXNzaW9uCisJCQkJICogaW4g cGFyZW50IHNvIGlnbm9yZSB0aGF0IGNhc2UgZm9yIG5vdy4KKwkJCQkgKi8KKwkJCQlpZighSXNB KHZhciwgVmFyKSkKKwkJCQl7CisJCQkJCWNhbl9yZXVzZSA9IGZhbHNlOworCQkJCQlicmVhazsK KwkJCQl9CisJCQkJLyogQ29udmVydCBpdCB0byBwYXJlbnQgdmFyICovCisJCQkJcGFyZW50X2V4 cHJzID0gbGFwcGVuZChwYXJlbnRfZXhwcnMsIGZpbmRfcGFyZW50X3ZhcihhcHBpbmZvLCB2YXIp KTsKKwkJCX0KKwkJCWlmIChjYW5fcmV1c2UpCisJCQkJcmVsLT51bmlxdWVrZXlzID0gbGFwcGVu ZChyZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KHBhcmVudF9leHBy cywKKwkJCQkJCQkJCQkJCQkJdWtleS0+bXVsdGlfbnVsbHZhbHMpKTsKKwkJfQorCX0KKwllbHNl CisJeworCQkvKiBDaGVjayBmb3IgcnVsZSAyICovCisJCWNoaWxkcmVsID0gbGluaXRpYWxfbm9k ZShSZWxPcHRJbmZvLCBjaGlsZHJlbHMpOworCQlmb3JlYWNoKGxjLCBjaGlsZHJlbC0+aW5kZXhs aXN0KQorCQl7CisJCQlJbmRleE9wdEluZm8gKmluZCA9IGxmaXJzdChsYyk7CisJCQlJbmRleE9w dEluZm8gKm1vZGlmaWVkX2luZGV4OworCQkJaWYgKCFpbmQtPnVuaXF1ZSB8fCAhaW5kLT5pbW1l ZGlhdGUgfHwKKwkJCQkoaW5kLT5pbmRwcmVkICE9IE5JTCAmJiAhaW5kLT5wcmVkT0spKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKgorCQkJICogRHVyaW5nIHNpbXBsZV9jb3B5X2luZGV4aW5mb190 b19wYXJlbnQsIHdlIG5lZWQgdG8gY29udmVydCB2YXIgZnJvbQorCQkJICogY2hpbGQgdmFyIHRv IHBhcmVudCB2YXIsIGluZGV4IG9uIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsZXggdG8gaGFuZGxl LgorCQkJICogc28gaWdub3JlIGl0IGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChpbmQtPmluZGV4 cHJzICE9IE5JTCkKKwkJCQljb250aW51ZTsKKworCQkJbW9kaWZpZWRfaW5kZXggPSBzaW1wbGVf Y29weV9pbmRleGluZm9fdG9fcGFyZW50KHJvb3QsIHJlbCwgaW5kKTsKKwkJCS8qCisJCQkgKiBJ ZiB0aGUgdW5pcXVlIGluZGV4IGRvZXNuJ3QgY29udGFpbiBwYXJ0a2V5LCB0aGVuIGl0IGlzIHVu aXF1ZQorCQkJICogb24gdGhpcyBwYXJ0aXRpb24gb25seSwgc28gaXQgaXMgdXNlbGVzcyBmb3Ig dXMuCisJCQkgKi8KKwkJCWlmICghaW5kZXhfY29uc3RhaW5zX3BhcnRrZXkocmVsLCBtb2RpZmll ZF9pbmRleCkpCisJCQkJY29udGludWU7CisKKwkJCWdsb2JhbF91bmlxX2luZGV4bGlzdCA9IGxh cHBlbmQoZ2xvYmFsX3VuaXFfaW5kZXhsaXN0LCAgbW9kaWZpZWRfaW5kZXgpOworCQl9CisKKwkJ aWYgKGdsb2JhbF91bmlxX2luZGV4bGlzdCAhPSBOSUwpCisJCXsKKwkJCWZvcmVhY2gobGMsIGNo aWxkcmVscykKKwkJCXsKKwkJCQlSZWxPcHRJbmZvICpjaGlsZCA9IGxmaXJzdChsYyk7CisJCQkJ aWYgKGlzX2ZpcnN0KQorCQkJCXsKKwkJCQkJaXNfZmlyc3QgPSBmYWxzZTsKKwkJCQkJY29udGlu dWU7CisJCQkJfQorCQkJCWFkanVzdF9wYXJ0aXRpb25fdW5pcXVlX2luZGV4bGlzdChyb290LCBy ZWwsIGNoaWxkLCAmZ2xvYmFsX3VuaXFfaW5kZXhsaXN0KTsKKwkJCX0KKwkJCS8qIE5vdyB3ZSBo YXZlIGEgbGlzdCBvZiB1bmlxdWUgaW5kZXggd2hpY2ggYXJlIGV4YWN0bHkgc2FtZSBvbiBhbGwg Y2hpbGRyZWxzLAorCQkJICogU2V0IHRoZSBVbmlxdWVLZXkganVzdCBsaWtlIGl0IGlzIG5vbi1w YXJ0aXRpb24gdGFibGUKKwkJCSAqLworCQkJcG9wdWxhdGVfYmFzZXJlbF91bmlxdWVrZXlzKHJv b3QsIHJlbCwgZ2xvYmFsX3VuaXFfaW5kZXhsaXN0KTsKKwkJfQorCX0KK30KKworCisvKgorICog cG9wdWxhdGVfZGlzdGluY3RyZWxfdW5pcXVla2V5cworICovCit2b2lkCitwb3B1bGF0ZV9kaXN0 aW5jdHJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQlSZWxPcHRJbmZv ICppbnB1dHJlbCwKKwkJCQkJCQkJUmVsT3B0SW5mbyAqZGlzdGluY3RyZWwpCit7CisJLyogVGhl IHVuaXF1ZSBrZXkgYmVmb3JlIHRoZSBkaXN0aW5jdCBpcyBzdGlsbCB2YWxpZC4gKi8KKwlkaXN0 aW5jdHJlbC0+dW5pcXVla2V5cyA9IGxpc3RfY29weShpbnB1dHJlbC0+dW5pcXVla2V5cyk7CisJ YWRkX3VuaXF1ZWtleV9mcm9tX3NvcnRncm91cHMocm9vdCwgZGlzdGluY3RyZWwsIHJvb3QtPnBh cnNlLT5kaXN0aW5jdENsYXVzZSk7Cit9CisKKy8qCisgKiBwb3B1bGF0ZV9ncm91cHJlbF91bmlx dWVrZXlzCisgKi8KK3ZvaWQKK3BvcHVsYXRlX2dyb3VwcmVsX3VuaXF1ZWtleXMoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJIFJlbE9wdEluZm8gKmdyb3VwcmVsLAorCQkJCQkJCSBSZWxPcHRJ bmZvICppbnB1dHJlbCkKKworeworCVF1ZXJ5ICpwYXJzZSA9IHJvb3QtPnBhcnNlOworCWJvb2wg aW5wdXRfdWtleV9hZGRlZCA9IGZhbHNlOworCUxpc3RDZWxsICpsYzsKKworCWlmIChyZWxhdGlv bl9pc19vbmVyb3coaW5wdXRyZWwpKQorCXsKKwkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGdy b3VwcmVsKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2UtPmdyb3VwaW5nU2V0cykKKwkJcmV0 dXJuOworCisJLyogQSBOb3JtYWwgZ3JvdXAgYnkgd2l0aG91dCBncm91cGluZyBzZXQuICovCisJ aWYgKHBhcnNlLT5ncm91cENsYXVzZSkKKwl7CisJCS8qCisJCSAqIEN1cnJlbnQgZXZlbiB0aGUg Z3JvdXBieSBjbGF1c2UgaXMgVW5pcXVlIGFscmVhZHksIGJ1dCBpZiBxdWVyeSBoYXMgYWdncmVm CisJCSAqIFdlIGhhdmUgdG8gY3JlYXRlIGdyb3VwcmVsIHN0aWxsLiBUbyBrZWVwIHRoZSBVbnFp dWVLZXkgc2hvcnQsIHdlIHdpbGwgY2hlY2sKKwkJICogdGhlIFVuaXF1ZUtleSBvZiBpbnB1dF9y ZWwgc3RpbGwgdmFsaWQsIGlmIHNvIHdlIHJldXNlIGl0LgorCQkgKi8KKwkJZm9yZWFjaChsYywg aW5wdXRyZWwtPnVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9u b2RlKFVuaXF1ZUtleSwgbGMpOworCQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJzLCBn cm91cHJlbC0+cmVsdGFyZ2V0LT5leHBycykpCisJCQl7CisJCQkJZ3JvdXByZWwtPnVuaXF1ZWtl eXMgPSBsYXBwZW5kKGdyb3VwcmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkgICB1a2V5KTsK KwkJCQlpbnB1dF91a2V5X2FkZGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZiAoIWlucHV0X3Vr ZXlfYWRkZWQpCisJCQkvKgorCQkJICogZ3JvdXAgYnkgY2xhdXNlIG11c3QgYmUgYSBzdXBlci1z ZXQgb2YgZ3JvdXByZWwtPnJlbHRhcmdldC0+ZXhwcnMgZXhjZXB0IHRoZQorCQkJICogYWdncmVn YXRpb24gZXhwciwgc28gaWYgc3VjaCBleHBycyBpcyB1bmlxdWUgYWxyZWFkeSwgbm8gYm90aGVy IHRvIGdlbmVyYXRlCisJCQkgKiBuZXcgdW5pcXVla2V5IGZvciBncm91cCBieSBleHBycy4KKwkJ CSAqLworCQkJYWRkX3VuaXF1ZWtleV9mcm9tX3NvcnRncm91cHMocm9vdCwKKwkJCQkJCQkJCQkg IGdyb3VwcmVsLAorCQkJCQkJCQkJCSAgcm9vdC0+cGFyc2UtPmdyb3VwQ2xhdXNlKTsKKwl9CisJ ZWxzZQorCQkvKiBJdCBoYXMgYWdncmVnYXRpb24gYnV0IHdpdGhvdXQgYSBncm91cCBieSwgc28g b25seSBvbmUgcm93IHJldHVybmVkICovCisJCWFkZF91bmlxdWVrZXlfZm9yX29uZXJvdyhncm91 cHJlbCk7Cit9CisKKy8qCisgKiBzaW1wbGVfY29weV91bmlxdWVrZXlzCisgKiBVc2luZyBhIGZ1 bmN0aW9uIGZvciB0aGUgb25lLWxpbmUgY29kZSBtYWtlcyB1cyBlYXN5IHRvIGNoZWNrIHdoZXJl IHdlIHNpbXBseQorICogY29waWVkIHRoZSB1bmlxdWVrZXkuCisgKi8KK3ZvaWQKK3NpbXBsZV9j b3B5X3VuaXF1ZWtleXMoUmVsT3B0SW5mbyAqb2xkcmVsLAorCQkJCQkgICBSZWxPcHRJbmZvICpu ZXdyZWwpCit7CisJbmV3cmVsLT51bmlxdWVrZXlzID0gb2xkcmVsLT51bmlxdWVrZXlzOworfQor CisvKgorICogIHBvcHVsYXRlX3VuaW9ucmVsX3VuaXF1ZWtleXMKKyAqLwordm9pZAorcG9wdWxh dGVfdW5pb25yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgIFJlbE9w dEluZm8gKnVuaW9ucmVsKQoreworCUxpc3RDZWxsCSpsYzsKKwlMaXN0CSpleHBycyA9IE5JTDsK KworCUFzc2VydCh1bmlvbnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpOworCisJZm9yZWFjaChsYywg dW5pb25yZWwtPnJlbHRhcmdldC0+ZXhwcnMpCisJeworCQlleHBycyA9IGxhcHBlbmQoZXhwcnMs IGxmaXJzdChsYykpOworCX0KKworCWlmIChleHBycyA9PSBOSUwpCisJCS8qIFNRTDogc2VsZWN0 IHVuaW9uIHNlbGVjdDsgaXMgdmFsaWQsIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGhlcmUuICovCisJ CWFkZF91bmlxdWVrZXlfZm9yX29uZXJvdyh1bmlvbnJlbCk7CisJZWxzZQorCQl1bmlvbnJlbC0+ dW5pcXVla2V5cyA9IGxhcHBlbmQodW5pb25yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkgICBt YWtlVW5pcXVlS2V5KGV4cHJzLGZhbHNlKSk7CisKK30KKworLyoKKyAqIHBvcHVsYXRlX2pvaW5y ZWxfdW5pcXVla2V5cworICoKKyAqIHBvcHVsYXRlIHVuaXF1ZWtleXMgZm9yIGpvaW5yZWwuIFdl IHdpbGwgY2hlY2sgZWFjaCByZWxhdGlvbiB0byBzZWUgaWYgaXRzCisgKiBVbmlxdWVLZXkgaXMg c3RpbGwgdmFsaWQgdmlhIGlubmVycmVsX2tlZXBzX3VuaXF1ZSwgaWYgc28sIHdlIGFkZCBpdCB0 bworICogam9pbnJlbC4gIFRoZSBtdWx0aV9udWxsdmFscyBmaWVsZCB3aWxsIGJlIGNoYW5nZWQg dG8gdHJ1ZSBmb3Igc29tZSBvdXRlcgorICogam9pbiBjYXNlcyBhbmQgb25lLXJvdyBVbmlxdWVL ZXkgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIG5vcm1hbCBVbmlxdWVLZXkKKyAqIGZvciB0aGUg c2FtZSBjYXNlIGFzIHdlbGwuCisgKiBGb3IgdGhlIHVuaXF1ZWtleSBpbiBlaXRoZXIgYmFzZXJl bCB3aGljaCBjYW4ndCBiZSB1bmlxdWUgYWZ0ZXIgam9pbiwgd2Ugc3RpbGwKKyAqIGNoZWNrIHRv IHNlZSBpZiBjb21iaW5hdGlvbiBvZiBVbmlxdWVLZXlzIGZyb20gYm90aCBzaWRlIGlzIHN0aWxs IHVzZWZ1bCBmb3IgdXMuCisgKiBpZiB5ZXMsIHdlIGFkZCBpdCB0byBqb2lucmVsIGFzIHdlbGwu CisgKi8KK3ZvaWQKK3BvcHVsYXRlX2pvaW5yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQlSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVs T3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJTGlzdCAqcmVzdHJpY3RsaXN0LCBKb2luVHlwZSBq b2ludHlwZSkKK3sKKwlMaXN0Q2VsbCAqbGMsICpsYzI7CisJTGlzdAkqY2xhdXNlX2xpc3QgPSBO SUw7CisJTGlzdAkqb3V0ZXJyZWxfdWtleV9jdHg7CisJTGlzdAkqaW5uZXJyZWxfdWtleV9jdHg7 CisJYm9vbAlpbm5lcl9vbmVyb3csIG91dGVyX29uZXJvdzsKKwlib29sCW1lcmdlam9pbl9hbGxv d2VkOworCisJLyogQ2FyZSBhYm91dCB0aGUgb3V0ZXJyZWwgcmVsYXRpb24gb25seSBmb3IgU0VN SS9BTlRJIGpvaW4gKi8KKwlpZiAoam9pbnR5cGUgPT0gSk9JTl9TRU1JIHx8IGpvaW50eXBlID09 IEpPSU5fQU5USSkKKwl7CisJCWZvcmVhY2gobGMsIG91dGVycmVsLT51bmlxdWVrZXlzKQorCQl7 CisJCQlVbmlxdWVLZXkJKnVuaXF1ZWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOwor CQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVuaXF1ZWtleS0+ZXhwcnMsIGpvaW5yZWwtPnJlbHRhcmdl dC0+ZXhwcnMpKQorCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVu aXF1ZWtleXMsIHVuaXF1ZWtleSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCUFzc2VydChqb2lu dHlwZSA9PSBKT0lOX0xFRlQgfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMIHx8IGpvaW50eXBlID09 IEpPSU5fSU5ORVIpOworCisJLyogRmFzdCBwYXRoICovCisJaWYgKGlubmVycmVsLT51bmlxdWVr ZXlzID09IE5JTCB8fCBvdXRlcnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpCisJCXJldHVybjsKKwor CWlubmVyX29uZXJvdyA9IHJlbGF0aW9uX2lzX29uZXJvdyhpbm5lcnJlbCk7CisJb3V0ZXJfb25l cm93ID0gcmVsYXRpb25faXNfb25lcm93KG91dGVycmVsKTsKKworCW91dGVycmVsX3VrZXlfY3R4 ID0gaW5pdGlsaWx6ZV91bmlxdWVjb250ZXh0X2Zvcl9qb2lucmVsKG91dGVycmVsKTsKKwlpbm5l cnJlbF91a2V5X2N0eCA9IGluaXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChpbm5l cnJlbCk7CisKKwljbGF1c2VfbGlzdCA9IHNlbGVjdF9tZXJnZWpvaW5fY2xhdXNlcyhyb290LCBq b2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCQkJICAgcmVzdHJpY3RsaXN0LCBq b2ludHlwZSwKKwkJCQkJCQkJCQkgICAmbWVyZ2Vqb2luX2FsbG93ZWQpOworCisJaWYgKGlubmVy cmVsX2tlZXBzX3VuaXF1ZShyb290LCBpbm5lcnJlbCwgb3V0ZXJyZWwsIGNsYXVzZV9saXN0LCB0 cnVlIC8qIHJldmVyc2UgKi8pKQorCXsKKwkJYm9vbCBvdXRlcl9pbXBhY3QgPSBqb2ludHlwZSA9 PSBKT0lOX0ZVTEw7CisJCWZvcmVhY2gobGMsIG91dGVycmVsX3VrZXlfY3R4KQorCQl7CisJCQlV bmlxdWVLZXlDb250ZXh0IGN0eCA9IChVbmlxdWVLZXlDb250ZXh0KWxmaXJzdChsYyk7CisKKwkJ CWlmICghbGlzdF9pc19zdWJzZXQoY3R4LT51bmlxdWVrZXktPmV4cHJzLCBqb2lucmVsLT5yZWx0 YXJnZXQtPmV4cHJzKSkKKwkJCXsKKwkJCQljdHgtPnVzZWZ1bCA9IGZhbHNlOworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQkvKiBPdXRlciByZWxhdGlvbiBoYXMgb25lIHJvdywgYW5kIHRoZSB1 bmlxdWUga2V5IGlzIG5vdCBkdXBsaWNhdGVkIGFmdGVyIGpvaW4sCisJCQkgKiB0aGUgam9pbnJl bCB3aWxsIHN0aWxsIGhhcyBvbmUgcm93IHVubGVzcyB0aGUgam9pbnR5cGUgPT0gSk9JTl9GVUxM LgorCQkJICovCisJCQlpZiAob3V0ZXJfb25lcm93ICYmICFvdXRlcl9pbXBhY3QpCisJCQl7CisJ CQkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGpvaW5yZWwpOworCQkJCXJldHVybjsKKwkJCX0K KwkJCWVsc2UgaWYgKG91dGVyX29uZXJvdykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoZSBvbmVy b3cgb3V0ZXJyZWwgYmVjb21lcyBtdWx0aSByb3dzIGFuZCBtdWx0aV9udWxsdmFscworCQkJCSAq IHdpbGwgYmUgY2hhbmdlZCB0byB0cnVlLiBXZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBleHBycyBj b3JyZWN0bHkgc2luY2UgaXQKKwkJCQkgKiBjYW4ndCBiZSBOSUwgYW55IG1vcmUuCisJCQkJICov CisJCQkJTGlzdENlbGwgKmxjMjsKKwkJCQlmb3JlYWNoKGxjMiwgZ2V0X2V4cHJzX2Zyb21fdW5p cXVla2V5KHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBOVUxMKSkKKwkJCQl7CisJCQkJCWpvaW5y ZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJ CQkgIG1ha2VVbmlxdWVLZXkobGZpcnN0KGxjMiksIHRydWUpKTsKKwkJCQl9CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJaWYgKCFjdHgtPnVuaXF1ZWtleS0+bXVsdGlfbnVsbHZhbHMgJiYgb3V0 ZXJfaW1wYWN0KQorCQkJCQkvKiBDaGFuZ2UgbXVsdGlfbnVsbHZhbHMgdG8gdHJ1ZSBkdWUgdG8g dGhlIGZ1bGwgam9pbi4gKi8KKwkJCQkJam9pbnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoam9p bnJlbC0+dW5pcXVla2V5cywKKwkJCQkJCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShjdHgtPnVuaXF1 ZWtleS0+ZXhwcnMsIHRydWUpKTsKKwkJCQllbHNlCisJCQkJCS8qIEp1c3QgcmV1c2UgaXQgKi8K KwkJCQkJam9pbnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoam9pbnJlbC0+dW5pcXVla2V5cywK KwkJCQkJCQkJCQkJCSAgY3R4LT51bmlxdWVrZXkpOworCQkJfQorCQkJY3R4LT5hZGRlZF90b19q b2lucmVsID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChpbm5lcnJlbF9rZWVwc191bmlxdWUocm9v dCwgb3V0ZXJyZWwsIGlubmVycmVsLCBjbGF1c2VfbGlzdCwgZmFsc2UpKQorCXsKKwkJYm9vbCBv dXRlcl9pbXBhY3QgPSBqb2ludHlwZSA9PSBKT0lOX0ZVTEwgfHwgam9pbnR5cGUgPT0gSk9JTl9M RUZUOzsKKworCQlmb3JlYWNoKGxjLCBpbm5lcnJlbF91a2V5X2N0eCkKKwkJeworCQkJVW5pcXVl S2V5Q29udGV4dCBjdHggPSAoVW5pcXVlS2V5Q29udGV4dClsZmlyc3QobGMpOworCisJCQlpZiAo IWxpc3RfaXNfc3Vic2V0KGN0eC0+dW5pcXVla2V5LT5leHBycywgam9pbnJlbC0+cmVsdGFyZ2V0 LT5leHBycykpCisJCQl7CisJCQkJY3R4LT51c2VmdWwgPSBmYWxzZTsKKwkJCQljb250aW51ZTsK KwkJCX0KKworCQkJaWYgKGlubmVyX29uZXJvdyAmJiAgIW91dGVyX2ltcGFjdCkKKwkJCXsKKwkJ CQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coam9pbnJlbCk7CisJCQkJcmV0dXJuOworCQkJfQor CQkJZWxzZSBpZiAoaW5uZXJfb25lcm93KQorCQkJeworCQkJCUxpc3RDZWxsICpsYzI7CisJCQkJ Zm9yZWFjaChsYzIsIGdldF9leHByc19mcm9tX3VuaXF1ZWtleShyb290LCBqb2lucmVsLCBpbm5l cnJlbCwgTlVMTCkpCisJCQkJeworCQkJCQlqb2lucmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChq b2lucmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KGxmaXJzdChs YzIpLCB0cnVlKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICghY3R4LT51 bmlxdWVrZXktPm11bHRpX251bGx2YWxzICYmIG91dGVyX2ltcGFjdCkKKwkJCQkJLyogTmVlZCB0 byBjaGFuZ2UgbXVsdGlfbnVsbHZhbHMgdG8gdHJ1ZSBkdWUgdG8gdGhlIG91dGVyIGpvaW4uICov CisJCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMs CisJCQkJCQkJCQkJCQkgIG1ha2VVbmlxdWVLZXkoY3R4LT51bmlxdWVrZXktPmV4cHJzLAorCQkJ CQkJCQkJCQkJCQkJCXRydWUpKTsKKwkJCQllbHNlCisJCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMg PSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJCQkgIGN0eC0+dW5pcXVl a2V5KTsKKworCQkJfQorCQkJY3R4LT5hZGRlZF90b19qb2lucmVsID0gdHJ1ZTsKKwkJfQorCX0K KworCS8qCisJICogVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBVbmlxdWVLZXkgZnJvbSBib3RoIHNp ZGVzIGlzIHVuaXF1ZSBhcyB3ZWxsIHJlZ2FyZGxlc3MKKwkgKiBvZiBqb2luIHR5cGUsIGJ1dCBu byBib3RoZXIgdG8gYWRkIGl0IGlmIGl0cyBzdWJzZXQgaGFzIGJlZW4gYWRkZWQgdG8gam9pbnJl bAorCSAqIGFscmVhZHkgb3IgaXQgaXMgbm90IHVzZWZ1bCBmb3IgdGhlIGpvaW5yZWwuCisJICov CisJZm9yZWFjaChsYywgb3V0ZXJyZWxfdWtleV9jdHgpCisJeworCQlVbmlxdWVLZXlDb250ZXh0 IGN0eDEgPSAoVW5pcXVlS2V5Q29udGV4dCkgbGZpcnN0KGxjKTsKKwkJaWYgKGN0eDEtPmFkZGVk X3RvX2pvaW5yZWwgfHwgIWN0eDEtPnVzZWZ1bCkKKwkJCWNvbnRpbnVlOworCQlmb3JlYWNoKGxj MiwgaW5uZXJyZWxfdWtleV9jdHgpCisJCXsKKwkJCVVuaXF1ZUtleUNvbnRleHQgY3R4MiA9IChV bmlxdWVLZXlDb250ZXh0KSBsZmlyc3QobGMyKTsKKwkJCWlmIChjdHgyLT5hZGRlZF90b19qb2lu cmVsIHx8ICFjdHgyLT51c2VmdWwpCisJCQkJY29udGludWU7CisJCQlpZiAoYWRkX2NvbWJpbmVk X3VuaXF1ZWtleShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCQkg ICBjdHgxLT51bmlxdWVrZXksIGN0eDItPnVuaXF1ZWtleSwKKwkJCQkJCQkJCSAgIGpvaW50eXBl KSkKKwkJCQkvKiBJZiB3ZSBzZXQgYSBvbmVyb3cgVW5pcXVlS2V5IHRvIGpvaW5yZWwsIHdlIGRv bid0IG5lZWQgb3RoZXIuICovCisJCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKKy8qCisgKiBj b252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMKKyAqCisgKiBDb3ZlcnQgdGhlIFVuaXF1ZUtleSBp biBzdWJxdWVyeSB0byBvdXRlciByZWxhdGlvbi4KKyAqLwordm9pZCBjb252ZXJ0X3N1YnF1ZXJ5 X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpjdXJy ZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpzdWJfZmluYWxfcmVsKQoreworCUxpc3RDZWxsCSps YzsKKworCWlmIChzdWJfZmluYWxfcmVsLT51bmlxdWVrZXlzID09IE5JTCkKKwkJcmV0dXJuOwor CisJaWYgKHJlbGF0aW9uX2lzX29uZXJvdyhzdWJfZmluYWxfcmVsKSkKKwl7CisJCWFkZF91bmlx dWVrZXlfZm9yX29uZXJvdyhjdXJyZWwpOworCQlyZXR1cm47CisJfQorCisJQXNzZXJ0KGN1cnJl bC0+c3Vicm9vdCAhPSBOVUxMKTsKKworCWZvcmVhY2gobGMsIHN1Yl9maW5hbF9yZWwtPnVuaXF1 ZWtleXMpCisJeworCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmlyc3Rfbm9kZShVbmlxdWVLZXksIGxj KTsKKwkJTGlzdENlbGwJKmxjOworCQlMaXN0CSpleHBycyA9IE5JTDsKKwkJYm9vbAl1a2V5X3Vz ZWZ1bCA9IHRydWU7CisKKwkJLyogT25lIHJvdyBjYXNlIGlzIGhhbmRsZWQgYWJvdmUgKi8KKwkJ QXNzZXJ0KHVrZXktPmV4cHJzICE9IE5JTCk7CisJCWZvcmVhY2gobGMsIHVrZXktPmV4cHJzKQor CQl7CisJCQlWYXIgKnZhcjsKKwkJCVRhcmdldEVudHJ5ICp0bGUgPSB0bGlzdF9tZW1iZXIobGZp cnN0KGxjKSwKKwkJCQkJCQkJCQkJY3VycmVsLT5zdWJyb290LT5wcm9jZXNzZWRfdGxpc3QpOwor CQkJaWYgKHRsZSA9PSBOVUxMKQorCQkJeworCQkJCXVrZXlfdXNlZnVsID0gZmFsc2U7CisJCQkJ YnJlYWs7CisJCQl9CisJCQl2YXIgPSBmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKGN1cnJlbCwg dGxlKTsKKwkJCWlmICh2YXIgPT0gTlVMTCkKKwkJCXsKKwkJCQl1a2V5X3VzZWZ1bCA9IGZhbHNl OworCQkJCWJyZWFrOworCQkJfQorCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB2YXIpOworCQl9 CisKKwkJaWYgKHVrZXlfdXNlZnVsKQorCQkJY3VycmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChj dXJyZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJIG1ha2VVbmlxdWVLZXkoZXhwcnMsCisJCQkJ CQkJCQkJCQkJICAgdWtleS0+bXVsdGlfbnVsbHZhbHMpKTsKKworCX0KK30KKworLyoKKyAqIGlu bmVycmVsX2tlZXBzX3VuaXF1ZQorICoKKyAqIENoZWNrIGlmIFVuaXF1ZSBrZXkgb2YgdGhlIGlu bmVycmVsIGlzIHZhbGlkIGFmdGVyIGpvaW4uIGlubmVycmVsJ3MgVW5pcXVlS2V5CisgKiB3aWxs IGJlIHN0aWxsIHZhbGlkIGlmIGlubmVycmVsJ3MgYW55LWNvbHVtbiBtZXJnZW9wIG91dHJlcmVs J3MgdW5pcXVla2V5CisgKiBleGlzdHMgaW4gY2xhdXNlX2xpc3QuCisgKgorICogTm90ZTogdGhl IGNsYXVzZV9saXN0IG11c3QgYmUgYSBsaXN0IG9mIG1lcmdlYWJsZSByZXN0cmljdGluZm8gYWxy ZWFkeS4KKyAqLworc3RhdGljIGJvb2wKK2lubmVycmVsX2tlZXBzX3VuaXF1ZShQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJICBSZWxPcHRJbmZv ICppbm5lcnJlbCwKKwkJCQkJICBMaXN0ICpjbGF1c2VfbGlzdCwKKwkJCQkJICBib29sIHJldmVy c2UpCit7CisJTGlzdENlbGwJKmxjLCAqbGMyLCAqbGMzOworCisJaWYgKG91dGVycmVsLT51bmlx dWVrZXlzID09IE5JTCB8fCBpbm5lcnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpCisJCXJldHVybiBm YWxzZTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIG91dGVycmVsJ3MgdW5pcXVla2V5IGluIG1l cmdlYWJsZSBjbGF1c2UuICovCisJZm9yZWFjaChsYywgb3V0ZXJyZWwtPnVuaXF1ZWtleXMpCisJ eworCQlMaXN0CSpvdXRlcl91cV9leHBycyA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpLT5l eHByczsKKwkJYm9vbCBjbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMgPSB0cnVlOworCQlmb3Jl YWNoKGxjMiwgb3V0ZXJfdXFfZXhwcnMpCisJCXsKKwkJCU5vZGUgKm91dGVyX3VxX2V4cHIgPSBs Zmlyc3QobGMyKTsKKwkJCWJvb2wgZmluZF91cV9leHByX2luX2NsYXVzZWxpc3QgPSBmYWxzZTsK KwkJCWZvcmVhY2gobGMzLCBjbGF1c2VfbGlzdCkKKwkJCXsKKwkJCQlSZXN0cmljdEluZm8gKnJp bmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYzMpOworCQkJCU5vZGUgKm91dGVyX2V4 cHI7CisJCQkJaWYgKHJldmVyc2UpCisJCQkJCW91dGVyX2V4cHIgPSByaW5mby0+b3V0ZXJfaXNf bGVmdCA/IGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2UpIDogZ2V0X2xlZnRvcChyaW5mby0+Y2xh dXNlKTsKKwkJCQllbHNlCisJCQkJCW91dGVyX2V4cHIgPSByaW5mby0+b3V0ZXJfaXNfbGVmdCA/ IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSkgOiBnZXRfcmlnaHRvcChyaW5mby0+Y2xhdXNlKTsK KwkJCQlpZiAoZXF1YWwob3V0ZXJfZXhwciwgb3V0ZXJfdXFfZXhwcikpCisJCQkJeworCQkJCQlm aW5kX3VxX2V4cHJfaW5fY2xhdXNlbGlzdCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKwkJCWlmICghZmluZF91cV9leHByX2luX2NsYXVzZWxpc3QpCisJCQl7CisJCQkJLyogTm8g bmVlZCB0byBjaGVjayB0aGUgbmV4dCBleHBycyBpbiB0aGUgY3VycmVudCB1bmlxdWVrZXkgKi8K KwkJCQljbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCisJCWlmIChjbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qCisgKiByZWxhdGlvbl9pc19vbmVy b3cKKyAqIENoZWNrIGlmIGl0IGlzIGEgb25lLXJvdyByZWxhdGlvbiBieSBjaGVja2luZyBVbmlx dWVLZXkuCisgKi8KK2Jvb2wKK3JlbGF0aW9uX2lzX29uZXJvdyhSZWxPcHRJbmZvICpyZWwpCit7 CisJVW5pcXVlS2V5ICp1a2V5OworCWlmIChyZWwtPnVuaXF1ZWtleXMgPT0gTklMKQorCQlyZXR1 cm4gZmFsc2U7CisJdWtleSA9IGxpbml0aWFsX25vZGUoVW5pcXVlS2V5LCByZWwtPnVuaXF1ZWtl eXMpOworCXJldHVybiB1a2V5LT5leHBycyA9PSBOSUwgJiYgbGlzdF9sZW5ndGgocmVsLT51bmlx dWVrZXlzKSA9PSAxOworfQorCisvKgorICogcmVsYXRpb25faGFzX3VuaXF1ZWtleXNfZm9yCisg KgkJUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgcHJvb2ZzIHRoYXQgJ3JlbCcgY2Fubm90IHJldHVy biBtdWx0aXBsZSByb3dzIHdpdGgKKyAqCQl0aGUgc2FtZSB2YWx1ZXMgaW4gZWFjaCBvZiAnZXhw cnMnLiAgT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wKK3JlbGF0aW9uX2hhc191 bmlxdWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJ CUxpc3QgKmV4cHJzLCBib29sIGFsbG93X211bHRpbnVsbHMpCit7CisJTGlzdENlbGwgKmxjOwor CisJLyoKKwkgKiBGb3IgVW5pcXVlS2V5LT5vbmVyb3cgY2FzZSwgdGhlIHVuaXF1ZWtleS0+ZXhw cnMgaXMgZW1wdHkgYXMgd2VsbAorCSAqIHNvIHdlIGNhbid0IHJlbHkgb24gbGlzdF9pc19zdWJz ZXQgdG8gaGFuZGxlIHRoaXMgc3BlY2lhbCBjYXNlcworCSAqLworCWlmIChleHBycyA9PSBOSUwp CisJCXJldHVybiBmYWxzZTsKKworCWZvcmVhY2gobGMsIHJlbC0+dW5pcXVla2V5cykKKwl7CisJ CVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOworCQlpZiAodWtl eS0+bXVsdGlfbnVsbHZhbHMgJiYgIWFsbG93X211bHRpbnVsbHMpCisJCQljb250aW51ZTsKKwkJ aWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJzLCBleHBycykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qCisgKiBnZXRfZXhwcnNfZnJvbV91bmlxdWVp bmRleAorICoKKyAqIFJldHVybiBhIGxpc3Qgb2YgZXhwcnMgd2hpY2ggaXMgdW5pcXVlLiBzZXQg dXNlZnVsIHRvIGZhbHNlIGlmIHRoaXMKKyAqIHVuaXF1ZSBpbmRleCBpcyBub3QgdXNlZnVsIGZv ciB1cy4KKyAqLworc3RhdGljIExpc3QgKgorZ2V0X2V4cHJzX2Zyb21fdW5pcXVlaW5kZXgoSW5k ZXhPcHRJbmZvICp1bmlxdWVfaW5kZXgsCisJCQkJCQkgICBMaXN0ICpjb25zdF9leHBycywKKwkJ CQkJCSAgIExpc3QgKmNvbnN0X2V4cHJfb3BmYW1pbGllcywKKwkJCQkJCSAgIEJpdG1hcHNldCAq dXNlZF92YXJhdHRycywKKwkJCQkJCSAgIGJvb2wgKnVzZWZ1bCwKKwkJCQkJCSAgIGJvb2wgKm11 bHRpX251bGx2YWxzKQoreworCUxpc3QJKmV4cHJzID0gTklMOworCUxpc3RDZWxsCSppbmRleHBy X2l0ZW07CisJaW50CWMgPSAwOworCisJKnVzZWZ1bCA9IHRydWU7CisJKm11bHRpX251bGx2YWxz ID0gZmFsc2U7CisKKwlpbmRleHByX2l0ZW0gPSBsaXN0X2hlYWQodW5pcXVlX2luZGV4LT5pbmRl eHBycyk7CisJZm9yKGMgPSAwOyBjIDwgdW5pcXVlX2luZGV4LT5uY29sdW1uczsgYysrKQorCXsK KwkJaW50IGF0dHIgPSB1bmlxdWVfaW5kZXgtPmluZGV4a2V5c1tjXTsKKwkJRXhwciAqZXhwcjsK KwkJYm9vbAltYXRjaGVkX2NvbnN0ID0gZmFsc2U7CisJCUxpc3RDZWxsCSpsYzEsICpsYzI7CisK KwkJaWYoYXR0ciA+IDApCisJCXsKKwkJCWV4cHIgPSBsaXN0X250aF9ub2RlKFRhcmdldEVudHJ5 LCB1bmlxdWVfaW5kZXgtPmluZGV4dGxpc3QsIGMpLT5leHByOworCQl9CisJCWVsc2UgaWYgKGF0 dHIgPT0gMCkKKwkJeworCQkJLyogRXhwcmVzc2lvbiBpbmRleCAqLworCQkJZXhwciA9IGxmaXJz dChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQodW5pcXVlX2luZGV4LT5p bmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJfQorCQllbHNlIC8qIGF0dHIgPCAwICovCisJCXsK KwkJCS8qIEluZGV4IG9uIHN5c3RlbSBjb2x1bW4gaXMgbm90IHN1cHBvcnRlZCAqLworCQkJQXNz ZXJ0KGZhbHNlKTsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGluZGV4X2NvbCA9IENvbnN0IGNh c2Ugd2l0aCByZWdhcmRpbmcgdG8gb3BmYW1pbHkgY2hlY2tpbmcKKwkJICogSWYgd2UgY2FuIHJl bW92ZSB0aGUgaW5kZXhfY29sIGZyb20gdGhlIGZpbmFsIFVuaXF1ZUtleS0+ZXhwcnMuCisJCSAq LworCQlmb3Jib3RoKGxjMSwgY29uc3RfZXhwcnMsIGxjMiwgY29uc3RfZXhwcl9vcGZhbWlsaWVz KQorCQl7CisJCQlpZiAobGlzdF9tZW1iZXJfb2lkKChMaXN0ICopbGZpcnN0KGxjMiksIHVuaXF1 ZV9pbmRleC0+b3BmYW1pbHlbY10pCisJCQkJJiYgbWF0Y2hfaW5kZXhfdG9fb3BlcmFuZCgoTm9k ZSAqKSBsZmlyc3QobGMxKSwgYywgdW5pcXVlX2luZGV4KSkKKwkJCXsKKwkJCQltYXRjaGVkX2Nv bnN0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChtYXRjaGVkX2NvbnN0 KQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgaWYgdGhlIGluZGV4ZWQgZXhwciBpcyB1c2Vk IGluIHJlbCAqLworCQlpZiAoYXR0ciA+IDApCisJCXsKKwkJCS8qCisJCQkgKiBOb3JtYWwgSW5k ZXhlZCBjb2x1bW4sIGlmIHRoZSBjb2wgaXMgbm90IHVzZWQsIHRoZW4gdGhlIGluZGV4IGlzIHVz ZWxlc3MKKwkJCSAqIGZvciB1bmlxdWVrZXkuCisJCQkgKi8KKwkJCWF0dHIgLT0gRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQkJaWYgKCFibXNfaXNfbWVtYmVyKGF0dHIs IHVzZWRfdmFyYXR0cnMpKQorCQkJeworCQkJCSp1c2VmdWwgPSBmYWxzZTsKKwkJCQlicmVhazsK KwkJCX0KKwkJfQorCQllbHNlIGlmICghbGlzdF9tZW1iZXIodW5pcXVlX2luZGV4LT5yZWwtPnJl bHRhcmdldC0+ZXhwcnMsIGV4cHIpKQorCQl7CisJCQkvKiBFeHByZXNzaW9uIGluZGV4IGJ1dCB0 aGUgZXhwcmVzc2lvbiBpcyBub3QgdXNlZCBpbiByZWwgKi8KKwkJCSp1c2VmdWwgPSBmYWxzZTsK KwkJCWJyZWFrOworCQl9CisKKwkJLyogY2hlY2sgbm90IG51bGwgcHJvcGVydHkuICovCisJCWlm IChhdHRyID09IDApCisJCXsKKwkJCS8qIFdlIG5ldmVyIGtub3cgaWYgYSBleHByZXNzaW9uIHlp ZWxkcyBudWxsIG9yIG5vdCAqLworCQkJKm11bHRpX251bGx2YWxzID0gdHJ1ZTsKKwkJfQorCQll bHNlIGlmICghYm1zX2lzX21lbWJlcihhdHRyLCB1bmlxdWVfaW5kZXgtPnJlbC0+bm90bnVsbGF0 dHJzKQorCQkJCSAmJiAhYm1zX2lzX21lbWJlcigwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJp YnV0ZU51bWJlciwKKwkJCQkJCQkJICAgdW5pcXVlX2luZGV4LT5yZWwtPm5vdG51bGxhdHRycykp CisJCXsKKwkJCSptdWx0aV9udWxsdmFscyA9IHRydWU7CisJCX0KKworCQlleHBycyA9IGxhcHBl bmQoZXhwcnMsIGV4cHIpOworCX0KKwlyZXR1cm4gZXhwcnM7Cit9CisKKworLyoKKyAqIGFkZF91 bmlxdWVrZXlfZm9yX29uZXJvdworICogSWYgd2UgYXJlIHN1cmUgdGhhdCB0aGUgcmVsYXRpb24g b25seSByZXR1cm5zIG9uZSByb3csIHRoZW4gYWxsIHRoZSBjb2x1bW5zCisgKiBhcmUgdW5pcXVl LiBIb3dldmVyIHdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIFVuaXF1ZUtleSBmb3IgZXZlcnkgY29s dW1uLCB3ZQorICoganVzdCBzZXQgZXhwcnMgPSBOSUwgYW5kIG92ZXJ3cml0ZXMgYWxsIHRoZSBv dGhlciBVbmlxdWVLZXkgb24gdGhpcyBSZWxPcHRJbmZvCisgKiBzaW5jZSB0aGlzIG9uZSBoYXMg c3Ryb25nZXN0IHNlbWFudGljcy4KKyAqLwordm9pZAorYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93 KFJlbE9wdEluZm8gKnJlbCkKK3sKKwkvKgorCSAqIFdlIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMg VW5pcXVlS2V5IG9uIHB1cnBvc2Ugc2luY2UgdGhpcyBvbmUgaGFzIHRoZQorCSAqIHN0cm9uZ2Vz dCBzZW1hbnRpYy4KKwkgKi8KKwlyZWwtPnVuaXF1ZWtleXMgPSBsaXN0X21ha2UxKG1ha2VVbmlx dWVLZXkoTklMLCBmYWxzZSkpOworfQorCisKKy8qCisgKiBpbml0aWxpbHplX3VuaXF1ZWNvbnRl eHRfZm9yX2pvaW5yZWwKKyAqIFJldHVybiBhIExpc3Qgb2YgVW5pcXVlS2V5Q29udGV4dCBmb3Ig YW4gaW5wdXRyZWwKKyAqLworc3RhdGljIExpc3QgKgoraW5pdGlsaWx6ZV91bmlxdWVjb250ZXh0 X2Zvcl9qb2lucmVsKFJlbE9wdEluZm8gKmlucHV0cmVsKQoreworCUxpc3QJKnJlcyA9IE5JTDsK KwlMaXN0Q2VsbCAqbGM7CisJZm9yZWFjaChsYywgIGlucHV0cmVsLT51bmlxdWVrZXlzKQorCXsK KwkJVW5pcXVlS2V5Q29udGV4dCBjb250ZXh0OworCQljb250ZXh0ID0gcGFsbG9jKHNpemVvZihz dHJ1Y3QgVW5pcXVlS2V5Q29udGV4dERhdGEpKTsKKwkJY29udGV4dC0+dW5pcXVla2V5ID0gbGZp cnN0X25vZGUoVW5pcXVlS2V5LCBsYyk7CisJCWNvbnRleHQtPmFkZGVkX3RvX2pvaW5yZWwgPSBm YWxzZTsKKwkJY29udGV4dC0+dXNlZnVsID0gdHJ1ZTsKKwkJcmVzID0gbGFwcGVuZChyZXMsIGNv bnRleHQpOworCX0KKwlyZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBnZXRfZXhwcnNfZnJvbV91 bmlxdWVrZXkKKyAqCVVuaWZ5IHRoZSB3YXkgb2YgZ2V0IExpc3Qgb2YgZXhwcnMgZnJvbSBhIG9u ZS1yb3cgVW5pcXVlS2V5IG9yCisgKiBub3JtYWwgVW5pcXVlS2V5LiBmb3IgdGhlIG9uZXJvdyBj YXNlLCBldmVyeSBleHByIGluIHJlbDEgaXMgYSB2YWxpZAorICogVW5pcXVlS2V5LiBSZXR1cm4g YSBMaXN0IG9mIGV4cHJzLgorICoKKyAqIHJlbDE6IFRoZSByZWxhdGlvbiB3aGljaCB5b3Ugd2Fu dCB0byBnZXQgdGhlIGV4cHJzLgorICogdWtleTogVGhlIFVuaXF1ZUtleSB5b3Ugd2FudCB0byBn ZXQgdGhlIGV4cHJzLgorICovCitzdGF0aWMgTGlzdCAqCitnZXRfZXhwcnNfZnJvbV91bmlxdWVr ZXkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsIFJlbE9wdEluZm8gKnJl bDEsIFVuaXF1ZUtleSAqdWtleSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisJYm9vbCBvbmVyb3cgPSBy ZWwxICE9IE5VTEwgJiYgcmVsYXRpb25faXNfb25lcm93KHJlbDEpOworCisJTGlzdAkqcmVzID0g TklMOworCUFzc2VydChvbmVyb3cgfHwgdWtleSk7CisJaWYgKG9uZXJvdykKKwl7CisJCS8qIE9u bHkgY2FyZXMgYWJvdXQgdGhlIGV4cHJzIHN0aWxsIGV4aXN0IGluIGpvaW5yZWwgKi8KKwkJZm9y ZWFjaChsYywgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwkJeworCQkJQml0bWFwc2V0ICpy ZWxpZHMgPSBwdWxsX3Zhcm5vcyhyb290LCBsZmlyc3QobGMpKTsKKwkJCWlmIChibXNfaXNfc3Vi c2V0KHJlbGlkcywgcmVsMS0+cmVsaWRzKSkKKwkJCXsKKwkJCQlyZXMgPSBsYXBwZW5kKHJlcywg bGlzdF9tYWtlMShsZmlyc3QobGMpKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcmVz ID0gbGlzdF9tYWtlMSh1a2V5LT5leHBycyk7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qCisg KiBQYXJ0aXRpb25lZCB0YWJsZSBVbmlxdWUgS2V5cy4KKyAqIFRoZSBwYXJ0aXRpb24gdGFibGUg dW5pcXVlIGtleSBpcyBtYWludGFpbmVkIGFzOgorICogMS4gVGhlIGluZGV4IG11c3QgYmUgdW5p cXVlIGFzIHVzdWFsLgorICogMi4gVGhlIGluZGV4IG11c3QgY29udGFpbnMgcGFydGl0aW9uIGtl eS4KKyAqIDMuIFRoZSBpbmRleCBtdXN0IGV4aXN0IG9uIGFsbCB0aGUgY2hpbGQgcmVsLiBzZWUg c2ltcGxlX2luZGV4aW5mb19lcXVhbCBmb3IKKyAqICAgIGhvdyB3ZSBjb21wYXJlIGl0LgorICov CisKKy8qCisgKiBpbmRleF9jb25zdGFpbnNfcGFydGtleQorICogcmV0dXJuIHRydWUgaWYgdGhl IGluZGV4IGNvbnRhaW5zIHRoZSBwYXJ0aXRvbiBrZXkuCisgKi8KK3N0YXRpYyBib29sCitpbmRl eF9jb25zdGFpbnNfcGFydGtleShSZWxPcHRJbmZvICpwYXJ0cmVsLCAgSW5kZXhPcHRJbmZvICpp bmQpCit7CisJTGlzdENlbGwJKmxjOworCWludAlpOworCUFzc2VydChJU19QQVJUSVRJT05FRF9S RUwocGFydHJlbCkpOworCUFzc2VydChwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFydG5hdHRzID4g MCk7CisKKwlmb3IoaSA9IDA7IGkgPCBwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFydG5hdHRzOyBp KyspCisJeworCQlOb2RlICpwYXJ0X2V4cHIgPSBsaW5pdGlhbChwYXJ0cmVsLT5wYXJ0ZXhwcnNb aV0pOworCQlib29sIGZvdW5kX2luX2luZGV4ID0gZmFsc2U7CisJCWZvcmVhY2gobGMsIGluZC0+ aW5kZXh0bGlzdCkKKwkJeworCQkJRXhwciAqaW5kZXhfZXhwciA9IGxmaXJzdF9ub2RlKFRhcmdl dEVudHJ5LCBsYyktPmV4cHI7CisJCQlpZiAoZXF1YWwoaW5kZXhfZXhwciwgcGFydF9leHByKSkK KwkJCXsKKwkJCQlmb3VuZF9pbl9pbmRleCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K KwkJaWYgKCFmb3VuZF9pbl9pbmRleCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBzaW1wbGVfaW5kZXhpbmZvX2VxdWFsCisgKgorICogVXNlZCB0byBj aGVjayBpZiB0aGUgMiBpbmRleCBpcyBzYW1lIGFzIGVhY2ggb3RoZXIuIFRoZSBpbmRleCBoZXJl CisgKiBpcyBDT1BJRUQgZnJvbSBjaGlsZHJlbCBhbmQgZGlkIHNvbWUgdGlueSBjaGFuZ2VzKHNl ZQorICogc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCkKKyAqLworc3RhdGljIGJvb2wK K3NpbXBsZV9pbmRleGluZm9fZXF1YWwoSW5kZXhPcHRJbmZvICppbmQxLCBJbmRleE9wdEluZm8g KmluZDIpCit7CisJU2l6ZSBvaWRfY21wX2xlbiA9IHNpemVvZihPaWQpICogaW5kMS0+bmNvbHVt bnM7CisKKwlyZXR1cm4gaW5kMS0+bmNvbHVtbnMgPT0gaW5kMi0+bmNvbHVtbnMgJiYKKwkJaW5k MS0+dW5pcXVlID09IGluZDItPnVuaXF1ZSAmJgorCQltZW1jbXAoaW5kMS0+aW5kZXhrZXlzLCBp bmQyLT5pbmRleGtleXMsIHNpemVvZihpbnQpICogaW5kMS0+bmNvbHVtbnMpID09IDAgJiYKKwkJ bWVtY21wKGluZDEtPm9wZmFtaWx5LCBpbmQyLT5vcGZhbWlseSwgb2lkX2NtcF9sZW4pID09IDAg JiYKKwkJbWVtY21wKGluZDEtPm9wY2ludHlwZSwgaW5kMi0+b3BjaW50eXBlLCBvaWRfY21wX2xl bikgPT0gMCAmJgorCQltZW1jbXAoaW5kMS0+c29ydG9wZmFtaWx5LCBpbmQyLT5zb3J0b3BmYW1p bHksIG9pZF9jbXBfbGVuKSA9PSAwICYmCisJCWVxdWFsKGdldF90bGlzdF9leHBycyhpbmQxLT5p bmRleHRsaXN0LCB0cnVlKSwKKwkJCSAgZ2V0X3RsaXN0X2V4cHJzKGluZDItPmluZGV4dGxpc3Qs IHRydWUpKTsKK30KKworCisvKgorICogVGhlIGJlbG93IG1hY3JvcyBhcmUgdXNlZCBmb3Igc2lt cGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCB3aGljaCBpcyBzbworICogY3VzdG9taXplZCB0 aGF0IEkgZG9uJ3Qgd2FudCB0byBwdXQgaXQgdG8gY29weWZ1bmNzLmMuIFNvIGNvcHkgaXQgaGVy ZS4KKyAqLworI2RlZmluZSBDT1BZX1BPSU5URVJfRklFTEQoZmxkbmFtZSwgc3opIFwKKwlkbyB7 IFwKKwkJU2l6ZQlfc2l6ZSA9IChzeik7IFwKKwkJbmV3bm9kZS0+ZmxkbmFtZSA9IHBhbGxvYyhf c2l6ZSk7IFwKKwkJbWVtY3B5KG5ld25vZGUtPmZsZG5hbWUsIGZyb20tPmZsZG5hbWUsIF9zaXpl KTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9OT0RFX0ZJRUxEKGZsZG5hbWUpIFwK KwkobmV3bm9kZS0+ZmxkbmFtZSA9IGNvcHlPYmplY3RJbXBsKGZyb20tPmZsZG5hbWUpKQorCisj ZGVmaW5lIENPUFlfU0NBTEFSX0ZJRUxEKGZsZG5hbWUpIFwKKwkobmV3bm9kZS0+ZmxkbmFtZSA9 IGZyb20tPmZsZG5hbWUpCisKKworLyoKKyAqIHNpbXBsZV9jb3B5X2luZGV4aW5mb190b19wYXJl bnQgKGZyb20gcGFydGl0aW9uKQorICogQ29weSB0aGUgSW5kZXhJbmZvIGZyb20gY2hpbGQgcmVs YXRpb24gdG8gcGFyZW50IHJlbGF0aW9uIHdpdGggc29tZSBtb2RpZmljYXRpb24sCisgKiB3aGlj aCBpcyB1c2VkIHRvIHRlc3Q6CisgKiAxLiBJZiB0aGUgc2FtZSBpbmRleCBleGlzdHMgaW4gYWxs IHRoZSBjaGlsZHJlbHMuCisgKiAyLiBJZiB0aGUgcGFyZW50cmVsLT5yZWx0YXJnZXQvYmFzaWNy ZXN0cmljdCBpbmZvIG1hdGNoZXMgdGhpcyBpbmRleC4KKyAqLworc3RhdGljIEluZGV4T3B0SW5m byAqCitzaW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJCQkJCQkJCUluZGV4T3B0SW5mbyAqZnJv bSkKK3sKKwlJbmRleE9wdEluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShJbmRleE9wdEluZm8pOwor CUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBmaW5kX2FwcGluZm9fYnlfY2hpbGQocm9vdCwgZnJv bS0+cmVsLT5yZWxpZCk7CisJTGlzdENlbGwJKmxjOworCWludAlpZHggPSAwOworCisJQ09QWV9T Q0FMQVJfRklFTEQobmNvbHVtbnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5rZXljb2x1bW5zKTsK KwlDT1BZX1NDQUxBUl9GSUVMRCh1bmlxdWUpOworCUNPUFlfU0NBTEFSX0ZJRUxEKGltbWVkaWF0 ZSk7CisJLyogV2UganVzdCBuZWVkIHRvIGtub3cgaWYgaXQgaXMgTklMIG9yIG5vdCAqLworCUNP UFlfU0NBTEFSX0ZJRUxEKGluZHByZWQpOworCUNPUFlfU0NBTEFSX0ZJRUxEKHByZWRPSyk7CisJ Q09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4a2V5cywgZnJvbS0+bmNvbHVtbnMgKiBzaXplb2YoaW50 KSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4Y29sbGF0aW9ucywgZnJvbS0+bmNvbHVtbnMg KiBzaXplb2YoT2lkKSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKG9wZmFtaWx5LCBmcm9tLT5uY29s dW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQob3BjaW50eXBlLCBmcm9t LT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQoc29ydG9wZmFt aWx5LCBmcm9tLT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX05PREVfRklFTEQoaW5k ZXh0bGlzdCk7CisKKwkvKiBDb252ZXJ0IGluZGV4IGV4cHJzIG9uIGNoaWxkIGV4cHIgdG8gZXhw ciBvbiBwYXJlbnQgKi8KKwlmb3JlYWNoKGxjLCBuZXdub2RlLT5pbmRleHRsaXN0KQorCXsKKwkJ VGFyZ2V0RW50cnkgKnRsZSA9IGxmaXJzdF9ub2RlKFRhcmdldEVudHJ5LCBsYyk7CisJCS8qIElu ZGV4IG9uIGV4cHJlc3Npb24gaXMgaWdub3JlZCAqLworCQlBc3NlcnQoSXNBKHRsZS0+ZXhwciwg VmFyKSk7CisJCXRsZS0+ZXhwciA9IChFeHByICopIGZpbmRfcGFyZW50X3ZhcihhcHBpbmZvLCAo VmFyICopIHRsZS0+ZXhwcik7CisJCW5ld25vZGUtPmluZGV4a2V5c1tpZHhdID0gY2FzdE5vZGUo VmFyLCB0bGUtPmV4cHIpLT52YXJhdHRubzsKKwkJaWR4Kys7CisJfQorCW5ld25vZGUtPnJlbCA9 IHBhcmVudHJlbDsKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworLyoKKyAqIGFkanVzdF9wYXJ0aXRp b25fdW5pcXVlX2luZGV4bGlzdAorICoKKyAqIGdsb2JhbF91bmlxdWVfaW5kZXhlczogQXQgdGhl IGJlZ2lubmluZywgaXQgY29udGFpbnMgdGhlIGNvcHkgJiBtb2RpZmllZAorICogdW5pcXVlIGlu ZGV4IGZyb20gdGhlIGZpcnN0IHBhcnRpdGlvbi4gQW5kIHRoZW4gY2hlY2sgaWYgZWFjaCBpbmRl eCBpbiBpdCBzdGlsbAorICogZXhpc3RzIGluIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9ucy4gSWYg bm8sIHJlbW92ZSBpdC4gYXQgbGFzdCwgaXQgaGFzIGFuCisgKiBpbmRleCBsaXN0IHdoaWNoIGV4 aXN0cyBpbiBhbGwgdGhlIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCithZGp1c3RfcGFy dGl0aW9uX3VuaXF1ZV9pbmRleGxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgUmVs T3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAorCQkJ CQkJCQkgIExpc3QgKipnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCit7CisJTGlzdENlbGwJKmxjLCAq bGMyOworCWZvcmVhY2gobGMsICpnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCisJeworCQlJbmRleE9w dEluZm8JKmdfaW5kID0gbGZpcnN0X25vZGUoSW5kZXhPcHRJbmZvLCBsYyk7CisJCWJvb2wgZm91 bmRfaW5fY2hpbGQgPSBmYWxzZTsKKworCQlmb3JlYWNoKGxjMiwgY2hpbGRyZWwtPmluZGV4bGlz dCkKKwkJeworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kID0gbGZpcnN0X25vZGUoSW5kZXhPcHRJ bmZvLCBsYzIpOworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kX2NvcHk7CisJCQlpZiAoIXBfaW5k LT51bmlxdWUgfHwgIXBfaW5kLT5pbW1lZGlhdGUgfHwKKwkJCQkocF9pbmQtPmluZHByZWQgIT0g TklMICYmICFwX2luZC0+cHJlZE9LKSkKKwkJCQljb250aW51ZTsKKwkJCXBfaW5kX2NvcHkgPSBz aW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KHJvb3QsIHBhcmVudHJlbCwgcF9pbmQpOwor CQkJaWYgKHNpbXBsZV9pbmRleGluZm9fZXF1YWwocF9pbmRfY29weSwgZ19pbmQpKQorCQkJewor CQkJCWZvdW5kX2luX2NoaWxkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAo IWZvdW5kX2luX2NoaWxkKQorCQkJLyogVGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QgaW4gY2hpbGRy ZWwsIHJlbW92ZSBpdCBmcm9tIGdsb2JhbF91bmlxdWVfaW5kZXhlcyAqLworCQkJKmdsb2JhbF91 bmlxdWVfaW5kZXhlcyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoKmdsb2JhbF91bmlxdWVfaW5k ZXhlcywgbGMpOworCX0KK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBncm91cHJlcy9kaXN0 aW5jdHJlbCAqLworc3RhdGljIHZvaWQKK2FkZF91bmlxdWVrZXlfZnJvbV9zb3J0Z3JvdXBzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKnNvcnRncm91cHMpCit7CisJ UXVlcnkgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJTGlzdAkqZXhwcnM7CisKKwkvKgorCSAqIFhY WDogSWYgdGhlcmUgYXJlIHNvbWUgdmFycyB3aGljaCBpcyBub3QgaW4gY3VycmVudCBsZXZlbHN1 cCwgdGhlIHNlbWFudGljIGlzCisJICogaW1wcmVjaXNlLCBzaG91bGQgd2UgYXZvaWQgaXQgb3Ig bm90PyBsZXZlbHN1cCA9IDEgaXMganVzdCBhIGRlbW8sIG1heWJlIHdlIG5lZWQgdG8KKwkgKiBj aGVjayBldmVyeSBsZXZlbCBvdGhlciB0aGFuIDAsIGlmIHNvLCBsb29rcyB3ZSBoYXZlIHRvIHdy aXRlIGFub3RoZXIKKwkgKiBwdWxsX3Zhcl93YWxrZXIuCisJICovCisJTGlzdAkqdXBwZXJfdmFy cyA9IHB1bGxfdmFyc19vZl9sZXZlbCgoTm9kZSopc29ydGdyb3VwcywgMSk7CisKKwlpZiAodXBw ZXJfdmFycyAhPSBOSUwpCisJCXJldHVybjsKKworCWV4cHJzID0gZ2V0X3NvcnRncm91cGxpc3Rf ZXhwcnMoc29ydGdyb3VwcywgcGFyc2UtPnRhcmdldExpc3QpOworCXJlbC0+dW5pcXVla2V5cyA9 IGxhcHBlbmQocmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShleHBycywK KwkJCQkJCQkJCQkJZmFsc2UgLyogc29ydGdyb3VwY2xhdXNlIGNhbid0IGJlIG11bHRpX251bGx2 YWxzICovKSk7Cit9CisKKworLyoKKyAqIGFkZF9jb21iaW5lZF91bmlxdWVrZXkKKyAqIFRoZSBj b21iaW5hdGlvbiBvZiBib3RoIFVuaXF1ZUtleXMgaXMgYSB2YWxpZCBVbmlxdWVLZXkgZm9yIGpv aW5yZWwgbm8gbWF0dGVyCisgKiB0aGUgam9pbnR5cGUuCisgKi8KK2Jvb2wKK2FkZF9jb21iaW5l ZF91bmlxdWVrZXkoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5y ZWwsCisJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJICAgUmVsT3B0SW5mbyAq aW5uZXJfcmVsLAorCQkJCQkgICBVbmlxdWVLZXkgKm91dGVyX3VrZXksCisJCQkJCSAgIFVuaXF1 ZUtleSAqaW5uZXJfdWtleSwKKwkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUpCit7CisKKwlMaXN0 Q2VsbAkqbGMxLCAqbGMyOworCisJLyogRWl0aGVyIHNpZGUgaGFzIG11bHRpX251bGx2YWxzIG9y IHdlIGhhdmUgb3V0ZXIgam9pbiwKKwkgKiB0aGUgY29tYmluZWQgVW5pcXVlS2V5IGhhcyBtdWx0 aV9udWxsdmFscyAqLworCWJvb2wgbXVsdGlfbnVsbHZhbHMgPSBvdXRlcl91a2V5LT5tdWx0aV9u dWxsdmFscyB8fAorCQlpbm5lcl91a2V5LT5tdWx0aV9udWxsdmFscyB8fCBJU19PVVRFUl9KT0lO KGpvaW50eXBlKTsKKworCS8qIFRoZSBvbmx5IGNhc2Ugd2UgY2FuIGdldCBvbmVyb3cgam9pbnJl bCBhZnRlciBqb2luICovCisJaWYgIChyZWxhdGlvbl9pc19vbmVyb3cob3V0ZXJfcmVsKQorCQkg JiYgcmVsYXRpb25faXNfb25lcm93KGlubmVyX3JlbCkKKwkJICYmIGpvaW50eXBlID09IEpPSU5f SU5ORVIpCisJeworCQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coam9pbnJlbCk7CisJCXJldHVy biB0cnVlOworCX0KKworCWZvcmVhY2gobGMxLCBnZXRfZXhwcnNfZnJvbV91bmlxdWVrZXkocm9v dCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBvdXRlcl91a2V5KSkKKwl7CisJCWZvcmVhY2gobGMyLCBn ZXRfZXhwcnNfZnJvbV91bmlxdWVrZXkocm9vdCwgam9pbnJlbCwgaW5uZXJfcmVsLCBpbm5lcl91 a2V5KSkKKwkJeworCQkJTGlzdCAqZXhwcnMgPSBsaXN0X2NvbmNhdF9jb3B5KGxmaXJzdF9ub2Rl KExpc3QsIGxjMSksIGxmaXJzdF9ub2RlKExpc3QsIGxjMikpOworCQkJam9pbnJlbC0+dW5pcXVl a2V5cyA9IGxhcHBlbmQoam9pbnJlbC0+dW5pcXVla2V5cywKKwkJCQkJCQkJCQkgIG1ha2VVbmlx dWVLZXkoZXhwcnMsCisJCQkJCQkJCQkJCQkJCW11bHRpX251bGx2YWxzKSk7CisJCX0KKwl9CisJ cmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGJk MDFlYzA1MjYuLjNjYWRkMjJlM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK QEAgLTE4Nyw4ICsxODcsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfb25lX3dpbmRvd19wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgICBQYXRoVGFyZ2V0ICpvdXRwdXRfdGFyZ2V0LAog CQkJCQkJCQkgICBXaW5kb3dGdW5jTGlzdHMgKndmbGlzdHMsCiAJCQkJCQkJCSAgIExpc3QgKmFj dGl2ZVdpbmRvd3MpOwotc3RhdGljIFJlbE9wdEluZm8gKmNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKLQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5wdXRfcmVsKTsKK3N0 YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfZGlzdGluY3RfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCk7CiBzdGF0aWMgdm9pZCBjcmVhdGVfcGFydGlhbF9kaXN0 aW5jdF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmlu cHV0X3JlbCwKIAkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmZpbmFsX2Rpc3RpbmN0X3JlbCk7CkBA IC0xODY2LDYgKzE4NjUsOCBAQCBncm91cGluZ19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgdHVwbGVfZnJhY3Rpb24pCiAJCWFkZF9wYXRoKGZpbmFsX3JlbCwgcGF0aCk7CiAJfQog CisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhjdXJyZW50X3JlbCwgZmluYWxfcmVsKTsKKwogCS8q CiAJICogR2VuZXJhdGUgcGFydGlhbCBwYXRocyBmb3IgZmluYWxfcmVsLCB0b28sIGlmIG91dGVy IHF1ZXJ5IGxldmVscyBtaWdodAogCSAqIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlbS4KQEAg LTMzODAsNiArMzM4MSw4IEBAIGNyZWF0ZV9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9v dCwKIAl9CiAKIAlzZXRfY2hlYXBlc3QoZ3JvdXBlZF9yZWwpOworCisJcG9wdWxhdGVfZ3JvdXBy ZWxfdW5pcXVla2V5cyhyb290LCBncm91cGVkX3JlbCwgaW5wdXRfcmVsKTsKIAlyZXR1cm4gZ3Jv dXBlZF9yZWw7CiB9CiAKQEAgLTQxMDIsNyArNDEwNSw3IEBAIGNyZWF0ZV93aW5kb3dfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKiBOb3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgocykgKi8K IAlzZXRfY2hlYXBlc3Qod2luZG93X3JlbCk7Ci0KKwlzaW1wbGVfY29weV91bmlxdWVrZXlzKGlu cHV0X3JlbCwgd2luZG93X3JlbCk7CiAJcmV0dXJuIHdpbmRvd19yZWw7CiB9CiAKQEAgLTQyOTEs NiArNDI5NCw3IEBAIGNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5wdXRfcmVsKQogCiAJLyogTm93IGNob29zZSB0aGUgYmVzdCBwYXRoKHMpICov CiAJc2V0X2NoZWFwZXN0KGRpc3RpbmN0X3JlbCk7CisJcG9wdWxhdGVfZGlzdGluY3RyZWxfdW5p cXVla2V5cyhyb290LCBpbnB1dF9yZWwsIGRpc3RpbmN0X3JlbCk7CiAKIAlyZXR1cm4gZGlzdGlu Y3RfcmVsOwogfQpAQCAtNDgyMyw2ICs0ODI3LDggQEAgY3JlYXRlX29yZGVyZWRfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsCiAJICovCiAJQXNzZXJ0KG9yZGVyZWRfcmVsLT5wYXRobGlzdCAhPSBO SUwpOwogCisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhpbnB1dF9yZWwsIG9yZGVyZWRfcmVsKTsK KwogCXJldHVybiBvcmRlcmVkX3JlbDsKIH0KIApAQCAtNTcwMCw2ICs1NzA2LDkgQEAgYWRqdXN0 X3BhdGhzX2Zvcl9zcmZzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJaWYg KGxpc3RfbGVuZ3RoKHRhcmdldHMpID09IDEpCiAJCXJldHVybjsKIAorCS8qIFVuaXF1ZUtleSBp cyBub3QgdmFsaWQgYWZ0ZXIgaGFuZGxpbmcgdGhlIFNSRi4gKi8KKwlyZWwtPnVuaXF1ZWtleXMg PSBOSUw7CisKIAkvKgogCSAqIFN0YWNrIFNSRi1ldmFsdWF0aW9uIG5vZGVzIGF0b3AgZWFjaCBw YXRoIGZvciB0aGUgcmVsLgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j CmluZGV4IGU5MjU2YTJkNGQuLmY2ZTgzNmQ4ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jCkBAIC02OTAsNiArNjkwLDggQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCS8qIFVuZG8gZWZmZWN0cyBv ZiBwb3NzaWJseSBmb3JjaW5nIHR1cGxlX2ZyYWN0aW9uIHRvIDAgKi8KIAlyb290LT50dXBsZV9m cmFjdGlvbiA9IHNhdmVfZnJhY3Rpb247CiAKKwkvKiBBZGQgdGhlIFVuaXF1ZUtleXMgKi8KKwlw b3B1bGF0ZV91bmlvbnJlbF91bmlxdWVrZXlzKHJvb3QsIHJlc3VsdF9yZWwpOwogCXJldHVybiBy ZXN1bHRfcmVsOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9h cHBlbmRpbmZvLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5k ZXggYWY0NmY1ODFhYy4uMmJmNGZmZDYxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Fw cGVuZGluZm8uYwpAQCAtMTAwMCwzICsxMDAwLDQ3IEBAIGRpc3RyaWJ1dGVfcm93X2lkZW50aXR5 X3ZhcnMoUGxhbm5lckluZm8gKnJvb3QpCiAJCX0KIAl9CiB9CisKKy8qCisgKiBmaW5kX2FwcGlu Zm9fYnlfY2hpbGQKKyAqCisgKi8KK0FwcGVuZFJlbEluZm8gKgorZmluZF9hcHBpbmZvX2J5X2No aWxkKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBjaGlsZF9pbmRleCkKK3sKKwlMaXN0Q2VsbAkq bGM7CisJZm9yZWFjaChsYywgcm9vdC0+YXBwZW5kX3JlbF9saXN0KQorCXsKKwkJQXBwZW5kUmVs SW5mbyAqYXBwaW5mbyA9IGxmaXJzdF9ub2RlKEFwcGVuZFJlbEluZm8sIGxjKTsKKwkJaWYgKGFw cGluZm8tPmNoaWxkX3JlbGlkID09IGNoaWxkX2luZGV4KQorCQkJcmV0dXJuIGFwcGluZm87CisJ fQorCWVsb2coRVJST1IsICJwYXJlbnQgcmVsYXRpb24gY2FudCBiZSBmb3VuZCIpOworCXJldHVy biBOVUxMOworfQorCisvKgorICogZmluZF9wYXJlbnRfdmFyCisgKgorICovCitWYXIgKgorZmlu ZF9wYXJlbnRfdmFyKEFwcGVuZFJlbEluZm8gKmFwcGluZm8sIFZhciAqY2hpbGRfdmFyKQorewor CUxpc3RDZWxsCSpsYzsKKwlWYXIJKnJlcyA9IE5VTEw7CisJSW5kZXggYXR0bm8gPSAxOworCWZv cmVhY2gobGMsIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycykKKwl7CisJCU5vZGUgKmNoaWxkX25v ZGUgPSBsZmlyc3QobGMpOworCQlpZiAoZXF1YWwoY2hpbGRfbm9kZSwgY2hpbGRfdmFyKSkKKwkJ eworCQkJcmVzID0gY29weU9iamVjdChjaGlsZF92YXIpOworCQkJcmVzLT52YXJhdHRubyA9IGF0 dG5vOworCQkJcmVzLT52YXJubyA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJfQorCQlhdHRu bysrOworCX0KKwlpZiAocmVzID09IE5VTEwpCisJCWVsb2coRVJST1IsICJwYXJlbnQgdmFyIGNh bid0IGJlIGZvdW5kLiIpOworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9p bmhlcml0LmMKaW5kZXggYzc1ODE3MmVmYS4uMGNmM2YzZTg2NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2luaGVyaXQuYwpAQCAtNzk3LDYgKzc5Nyw3IEBAIGFwcGx5X2NoaWxkX2Jhc2VxdWFs cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQl7CiAJCQlOb2Rl CSAgICpvbmVjcSA9IChOb2RlICopIGxmaXJzdChsYzIpOwogCQkJYm9vbAkJcHNldWRvY29uc3Rh bnQ7CisJCQlSZXN0cmljdEluZm8JKmNoaWxkX3JpbmZvOwogCiAJCQkvKiBjaGVjayBmb3IgcHNl dWRvY29uc3RhbnQgKG5vIFZhcnMgb3Igdm9sYXRpbGUgZnVuY3Rpb25zKSAqLwogCQkJcHNldWRv Y29uc3RhbnQgPQpAQCAtODA4LDE0ICs4MDksMTUgQEAgYXBwbHlfY2hpbGRfYmFzZXF1YWxzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJcm9vdC0+aGFzUHNl dWRvQ29uc3RhbnRRdWFscyA9IHRydWU7CiAJCQl9CiAJCQkvKiByZWNvbnN0aXR1dGUgUmVzdHJp Y3RJbmZvIHdpdGggYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqLwotCQkJY2hpbGRxdWFscyA9IGxh cHBlbmQoY2hpbGRxdWFscywKLQkJCQkJCQkJIG1ha2VfcmVzdHJpY3RpbmZvKHJvb3QsCi0JCQkJ CQkJCQkJCQkgICAoRXhwciAqKSBvbmVjcSwKLQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNo ZWRfZG93biwKLQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5vdXRlcmpvaW5fZGVsYXllZCwKLQkJCQkJ CQkJCQkJCSAgIHBzZXVkb2NvbnN0YW50LAotCQkJCQkJCQkJCQkJICAgcmluZm8tPnNlY3VyaXR5 X2xldmVsLAotCQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCkpOworCQkJY2hpbGRfcmlu Zm8gPSAgbWFrZV9yZXN0cmljdGluZm8ocm9vdCwKKwkJCQkJCQkJCQkJIChFeHByICopIG9uZWNx LAorCQkJCQkJCQkJCQkgcmluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCQkJCQkJCQkgcmluZm8t Pm91dGVyam9pbl9kZWxheWVkLAorCQkJCQkJCQkJCQkgcHNldWRvY29uc3RhbnQsCisJCQkJCQkJ CQkJCSByaW5mby0+c2VjdXJpdHlfbGV2ZWwsCisJCQkJCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxM KTsKKwkJCWNoaWxkX3JpbmZvLT5tZXJnZW9wZmFtaWxpZXMgPSByaW5mby0+bWVyZ2VvcGZhbWls aWVzOworCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywgY2hpbGRfcmluZm8pOwog CQkJLyogdHJhY2sgbWluaW11bSBzZWN1cml0eSBsZXZlbCBhbW9uZyBjaGlsZCBxdWFscyAqLwog CQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgcmluZm8tPnNlY3VyaXR5 X2xldmVsKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCBlZWE4N2Y4NDdkLi5kMmVlYmQz MjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1 ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCiAKIGV4dGVybiBBX0V4cHIgKm1ha2VBX0V4cHIoQV9F eHByX0tpbmQga2luZCwgTGlzdCAqbmFtZSwKQEAgLTEwNiw0ICsxMDcsNiBAQCBleHRlcm4gR3Jv dXBpbmdTZXQgKm1ha2VHcm91cGluZ1NldChHcm91cGluZ1NldEtpbmQga2luZCwgTGlzdCAqY29u dGVudCwgaW50IGxvYwogCiBleHRlcm4gVmFjdXVtUmVsYXRpb24gKm1ha2VWYWN1dW1SZWxhdGlv bihSYW5nZVZhciAqcmVsYXRpb24sIE9pZCBvaWQsIExpc3QgKnZhX2NvbHMpOwogCitleHRlcm4g VW5pcXVlS2V5KiBtYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251bGx2YWxz KTsKKwogI2VuZGlmCQkJCQkJCS8qIE1BS0VGVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGUwMDU3 ZGFhMDYuLjU5MGM5MDdkNzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjY3LDYgKzI2Nyw3IEBAIHR5cGVk ZWYgZW51bSBOb2RlVGFnCiAJVF9FcXVpdmFsZW5jZU1lbWJlciwKIAlUX1BhdGhLZXksCiAJVF9Q YXRoVGFyZ2V0LAorCVRfVW5pcXVlS2V5LAogCVRfUmVzdHJpY3RJbmZvLAogCVRfSW5kZXhDbGF1 c2UsCiAJVF9QbGFjZUhvbGRlclZhciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzYyNDYxMTc4 NC4uMGM3NThkMTBjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTc0OCw2ICs3NDgsNyBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUXVhbENvc3QJYmFzZXJlc3RyaWN0Y29zdDsJLyog Y29zdCBvZiBldmFsdWF0aW5nIHRoZSBhYm92ZSAqLwogCUluZGV4CQliYXNlcmVzdHJpY3RfbWlu X3NlY3VyaXR5OwkvKiBtaW4gc2VjdXJpdHlfbGV2ZWwgZm91bmQgaW4KIAkJCQkJCQkJCQkJICog YmFzZXJlc3RyaWN0aW5mbyAqLworCUxpc3QJICAgKnVuaXF1ZWtleXM7CQkvKiBMaXN0IG9mIFVu aXF1ZUtleSAqLwogCUxpc3QJICAgKmpvaW5pbmZvOwkJLyogUmVzdHJpY3RJbmZvIHN0cnVjdHVy ZXMgZm9yIGpvaW4gY2xhdXNlcwogCQkJCQkJCQkgKiBpbnZvbHZpbmcgdGhpcyByZWwgKi8KIAli b29sCQloYXNfZWNsYXNzX2pvaW5zOwkvKiBUIG1lYW5zIGpvaW5pbmZvIGlzIGluY29tcGxldGUg Ki8KQEAgLTEwODMsNiArMTA4NCwyOCBAQCB0eXBlZGVmIGVudW0gVm9sYXRpbGVGdW5jdGlvblN0 YXR1cwogCVZPTEFUSUxJVFlfTk9WT0xBVElMRQogfSBWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzOwog CisvKgorICogVW5pcXVlS2V5CisgKgorICogUmVwcmVzZW50cyB0aGUgdW5pcXVlIHByb3BlcnRp ZXMgaGVsZCBieSBhIFJlbE9wdEluZm8uCisgKgorICogZXhwcnMgaXMgYSBsaXN0IG9mIGV4cHJz IHdoaWNoIGlzIHVuaXF1ZSBvbiBjdXJyZW50IFJlbE9wdEluZm8uIGV4cHJzID0gTklMCisgKiBp cyBhIHNwZWNpYWwgY2FzZSBvZiBVbmlxdWVLZXksIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG9ubHkg MSByb3cgaW4gdGhhdAorICogcmVsYXRpb24uCisgKiBtdWx0aV9udWxsdmFsczogdHJ1ZSBtZWFu cyBtdWx0aSBudWxsIHZhbHVlcyBtYXkgZXhpc3QgaW4gdGhlc2UgZXhwcnMsIHNvIHRoZQorICog dW5pcXVlbmVzcyBpcyBub3QgZ3VhcmFudGVlZCBpbiB0aGlzIGNhc2UuIFRoaXMgZmllbGQgaXMg bmVjZXNzYXJ5IGZvcgorICogcmVtb3ZlX3VzZWxlc3Nfam9pbiAmIHJlZHVjZV91bmlxdWVfc2Vt aWpvaW5zIHdoZXJlIHdlIGRvbid0IG1pbmQgdGhlc2UKKyAqIGR1cGxpY2F0ZWQgTlVMTCB2YWx1 ZXMuIEl0IGlzIHNldCB0byB0cnVlIGZvciAyIGNhc2VzLiBPbmUgaXMgYSB1bmlxdWUga2V5Cisg KiBmcm9tIGEgdW5pcXVlIGluZGV4IGJ1dCB0aGUgcmVsYXRlZCBjb2x1bW4gaXMgbnVsbGFibGUu IFRoZSBvdGhlciBvbmUgaXMgZm9yCisgKiBvdXRlciBqb2luLiBzZWUgcG9wdWxhdGVfam9pbnJl bF91bmlxdWVrZXlzIGZvciBkZXRhaWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IFVuaXF1ZUtleQor eworCU5vZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqZXhwcnM7CisJYm9vbAkJbXVsdGlfbnVsbHZh bHM7Cit9IFVuaXF1ZUtleTsKKwogLyoKICAqIFBhdGhUYXJnZXQKICAqCkBAIC0yNTc4LDcgKzI2 MDEsNyBAQCB0eXBlZGVmIGVudW0KICAqCiAgKiBmbGFncyBpbmRpY2F0aW5nIHdoYXQga2luZHMg b2YgZ3JvdXBpbmcgYXJlIHBvc3NpYmxlLgogICogcGFydGlhbF9jb3N0c19zZXQgaXMgdHJ1ZSBp ZiB0aGUgYWdnX3BhcnRpYWxfY29zdHMgYW5kIGFnZ19maW5hbF9jb3N0cwotICogCQloYXZlIGJl ZW4gaW5pdGlhbGl6ZWQuCisgKgkJaGF2ZSBiZWVuIGluaXRpYWxpemVkLgogICogYWdnX3BhcnRp YWxfY29zdHMgZ2l2ZXMgcGFydGlhbCBhZ2dyZWdhdGlvbiBjb3N0cy4KICAqIGFnZ19maW5hbF9j b3N0cyBnaXZlcyBmaW5hbGl6YXRpb24gY29zdHMuCiAgKiB0YXJnZXRfcGFyYWxsZWxfc2FmZSBp cyB0cnVlIGlmIHRhcmdldCBpcyBwYXJhbGxlbCBzYWZlLgpAQCAtMjYwOCw4ICsyNjMxLDggQEAg dHlwZWRlZiBzdHJ1Y3QKICAqIGxpbWl0X3R1cGxlcyBpcyBhbiBlc3RpbWF0ZWQgYm91bmQgb24g dGhlIG51bWJlciBvZiBvdXRwdXQgdHVwbGVzLAogICoJCW9yIC0xIGlmIG5vIExJTUlUIG9yIGNv dWxkbid0IGVzdGltYXRlLgogICogY291bnRfZXN0IGFuZCBvZmZzZXRfZXN0IGFyZSB0aGUgZXN0 aW1hdGVkIHZhbHVlcyBvZiB0aGUgTElNSVQgYW5kIE9GRlNFVAotICogCQlleHByZXNzaW9ucyBj b21wdXRlZCBieSBwcmVwcm9jZXNzX2xpbWl0KCkgKHNlZSBjb21tZW50cyBmb3IKLSAqIAkJcHJl cHJvY2Vzc19saW1pdCgpIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAqCQlleHByZXNzaW9ucyBj b21wdXRlZCBieSBwcmVwcm9jZXNzX2xpbWl0KCkgKHNlZSBjb21tZW50cyBmb3IKKyAqCQlwcmVw cm9jZXNzX2xpbWl0KCkgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICovCiB0eXBlZGVmIHN0cnVj dAogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGdfbGlzdC5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGdfbGlzdC5oCmluZGV4IDMwZjk4YzQ1OTUuLmNjNDY2ZWNlYWYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w Z19saXN0LmgKQEAgLTU1OCw2ICs1NTgsNyBAQCBleHRlcm4gYm9vbCBsaXN0X21lbWJlcl9wdHIo Y29uc3QgTGlzdCAqbGlzdCwgY29uc3Qgdm9pZCAqZGF0dW0pOwogZXh0ZXJuIGJvb2wgbGlzdF9t ZW1iZXJfaW50KGNvbnN0IExpc3QgKmxpc3QsIGludCBkYXR1bSk7CiBleHRlcm4gYm9vbCBsaXN0 X21lbWJlcl9vaWQoY29uc3QgTGlzdCAqbGlzdCwgT2lkIGRhdHVtKTsKIAorZXh0ZXJuIGJvb2wg bGlzdF9pc19zdWJzZXQoY29uc3QgTGlzdCAqbWVtYmVycywgY29uc3QgTGlzdCAqdGFyZ2V0KTsK IGV4dGVybiBwZ19ub2Rpc2NhcmQgTGlzdCAqbGlzdF9kZWxldGUoTGlzdCAqbGlzdCwgdm9pZCAq ZGF0dW0pOwogZXh0ZXJuIHBnX25vZGlzY2FyZCBMaXN0ICpsaXN0X2RlbGV0ZV9wdHIoTGlzdCAq bGlzdCwgdm9pZCAqZGF0dW0pOwogZXh0ZXJuIHBnX25vZGlzY2FyZCBMaXN0ICpsaXN0X2RlbGV0 ZV9pbnQoTGlzdCAqbGlzdCwgaW50IGRhdHVtKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29w dGltaXplci9hcHBlbmRpbmZvLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kaW5mby5o CmluZGV4IDM5ZDA0ZDljYzAuLjJhYmMyNmU1MDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29w dGltaXplci9hcHBlbmRpbmZvLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGlu Zm8uaApAQCAtNDcsNCArNDcsNyBAQCBleHRlcm4gdm9pZCBhZGRfcm93X2lkZW50aXR5X2NvbHVt bnMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aW5kZXgsCiAJCQkJCQkJCQkgUmVsYXRpb24g dGFyZ2V0X3JlbGF0aW9uKTsKIGV4dGVybiB2b2lkIGRpc3RyaWJ1dGVfcm93X2lkZW50aXR5X3Zh cnMoUGxhbm5lckluZm8gKnJvb3QpOwogCitleHRlcm4gQXBwZW5kUmVsSW5mbyAqZmluZF9hcHBp bmZvX2J5X2NoaWxkKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBjaGlsZF9pbmRleCk7CitleHRl cm4gVmFyICpmaW5kX3BhcmVudF92YXIoQXBwZW5kUmVsSW5mbyAqYXBwaW5mbywgVmFyICpjaGls ZF92YXIpOworCiAjZW5kaWYJCQkJCQkJLyogQVBQRU5ESU5GT19IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmgKaW5kZXggNDFiNDliMjY2Mi4uODFjNzExMTlmNiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9vcHRpbWl6ZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBPUFRJTUlaRVJfSAogCiAj aW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgogCiAvKiBUZXN0IGlmIGFuIGV4cHJlc3Npb24gbm9kZSByZXByZXNlbnRzIGEgU1JGIGNhbGwu ICBCZXdhcmUgbXVsdGlwbGUgZXZhbCEgKi8KICNkZWZpbmUgSVNfU1JGX0NBTEwobm9kZSkgXApA QCAtMTcxLDYgKzE3Miw3IEBAIGV4dGVybiBUYXJnZXRFbnRyeSAqZ2V0X3NvcnRncm91cHJlZl90 bGUoSW5kZXggc29ydHJlZiwKIAkJCQkJCQkJCQkgTGlzdCAqdGFyZ2V0TGlzdCk7CiBleHRlcm4g VGFyZ2V0RW50cnkgKmdldF9zb3J0Z3JvdXBjbGF1c2VfdGxlKFNvcnRHcm91cENsYXVzZSAqc2dD bGF1c2UsCiAJCQkJCQkJCQkJCUxpc3QgKnRhcmdldExpc3QpOworZXh0ZXJuIFZhciAqZmluZF92 YXJfZm9yX3N1YnF1ZXJ5X3RsZShSZWxPcHRJbmZvICpyZWwsIFRhcmdldEVudHJ5ICp0bGUpOwog ZXh0ZXJuIE5vZGUgKmdldF9zb3J0Z3JvdXBjbGF1c2VfZXhwcihTb3J0R3JvdXBDbGF1c2UgKnNn Q2xhdXNlLAogCQkJCQkJCQkJICBMaXN0ICp0YXJnZXRMaXN0KTsKIGV4dGVybiBMaXN0ICpnZXRf c29ydGdyb3VwbGlzdF9leHBycyhMaXN0ICpzZ0NsYXVzZXMsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmlu ZGV4IGYxZDExMTA2M2MuLjc1NGRmY2Q1NDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yNTQs NSArMjU0LDQ4IEBAIGV4dGVybiBQYXRoS2V5ICptYWtlX2Nhbm9uaWNhbF9wYXRoa2V5KFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCQkJICAgaW50IHN0cmF0ZWd5LCBib29sIG51bGxzX2ZpcnN0 KTsKIGV4dGVybiB2b2lkIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQlMaXN0ICpsaXZlX2NoaWxkcmVscyk7CitleHRl cm4gTGlzdCAqc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJICBSZWxPcHRJbmZvICpvdXRl cnJlbCwKKwkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCQkgIExpc3Qg KnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCQkg IGJvb2wgKm1lcmdlam9pbl9hbGxvd2VkKTsKKworLyoKKyAqIHVuaXF1ZWtleXMuYworICoJICBV dGlsaXRpZXMgZm9yIG1hdGNoaW5nIGFuZCBidWlsZGluZyB1bmlxdWUga2V5cworICovCitleHRl cm4gdm9pZCBwb3B1bGF0ZV9iYXNlcmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCQkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkJCQkJCQlMaXN0KiB1bmlxdWVfaW5k ZXhfbGlzdCk7CitleHRlcm4gdm9pZCBwb3B1bGF0ZV9wYXJ0aXRpb25lZHJlbF91bmlxdWVrZXlz KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJ CQkJCQkJTGlzdCAqY2hpbGRyZWxzKTsKK2V4dGVybiB2b2lkIHBvcHVsYXRlX2Rpc3RpbmN0cmVs X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCVJlbE9wdEluZm8gKmlu cHV0cmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpkaXN0aW5jdHJlbCk7CitleHRlcm4gdm9p ZCBwb3B1bGF0ZV9ncm91cHJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJ CQkJCSBSZWxPcHRJbmZvICpncm91cHJlbCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5wdXRy ZWwpOworZXh0ZXJuIHZvaWQgcG9wdWxhdGVfdW5pb25yZWxfdW5pcXVla2V5cyhQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnVuaW9ucmVsKTsKK2V4dGVybiB2b2lk IHNpbXBsZV9jb3B5X3VuaXF1ZWtleXMoUmVsT3B0SW5mbyAqb2xkcmVsLAorCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpuZXdyZWwpOworZXh0ZXJuIHZvaWQgY29udmVydF9zdWJxdWVyeV91bmlxdWVr ZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKmN1cnJlbCwKKwkJ CQkJCQkJCQlSZWxPcHRJbmZvICpzdWJfZmluYWxfcmVsKTsKK2V4dGVybiB2b2lkIHBvcHVsYXRl X2pvaW5yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJ bmZvICpqb2lucmVsLAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDEsCisJCQkJCQkJCQkJUmVs T3B0SW5mbyAqcmVsMiwKKwkJCQkJCQkJCQlMaXN0ICpyZXN0cmljdGxpc3QsCisJCQkJCQkJCQkJ Sm9pblR5cGUgam9pbnR5cGUpOworCitleHRlcm4gYm9vbCByZWxhdGlvbl9oYXNfdW5pcXVla2V5 c19mb3IoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAorCQkJ CQkJCQkJCUxpc3QgKmV4cHJzLAorCQkJCQkJCQkJCWJvb2wgYWxsb3dfbXVsdGludWxscyk7Citl eHRlcm4gYm9vbCByZWxhdGlvbl9pc19vbmVyb3coUmVsT3B0SW5mbyAqcmVsKTsKIAogI2VuZGlm CQkJCQkJCS8qIFBBVEhTX0ggKi8KLS0gCjIuMjkuMgoK --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="v2-0001-Extend-UniqueKeys.patch" Content-Description: v2-0001-Extend-UniqueKeys.patch Content-Disposition: attachment; filename="v2-0001-Extend-UniqueKeys.patch"; size=13363; creation-date="Sat, 23 Oct 2021 13:03:59 GMT"; modification-date="Sat, 23 Oct 2021 13:03:58 GMT" Content-Transfer-Encoding: base64 RnJvbSBjNTAyMzMxNWVhYWY5ZTFiNGUzMzhjZTQ4OGM5MmYyZTg1ZjU2NTQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6MzM6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIIDMv NV0gRXh0ZW5kIFVuaXF1ZUtleXMKClByZXBhcmVzIGluZGV4IHNraXAgc2NhbiBpbXBsZW1lbnRh dGlvbiB1c2luZyBVbmlxdWVLZXlzLiBBbGxvd3MgdG8Kc3BlY2lmeSB3aGF0IGFyZSB0aGUgInJl cXVlc3RlZCIga2V5cyB0aGF0IHNob3VsZCBiZSB1bmlxdWUsIGFuZCBhZGQKdGhlbSB0byBuZWNl c3NhcnkgUGF0aHMgdG8gbWFrZSB0aGVtIHVzZWZ1bCBsYXRlci4KClByb3Bvc2VkIGJ5IERhdmlk IFJvd2xleSwgY29udGFpbnMgZmV3IGJpdHMgb3V0IG9mIHByZXZpb3VzIHZlcnNpb24gZnJvbQpK ZXNwZXIgUGVkZXJzZW4uCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMu YyAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL3VuaXF1ZWtleXMuYyB8IDYzICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8IDM2ICsrKysrKysrKysrKystCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAzMiArKysrKysrKystLS0tCiBz cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgNSArKwogc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmggICAgICAgICAgIHwgIDggKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxOTQgaW5z ZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvcGF0aGtleXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhr ZXlzLmMKaW5kZXggOGIyNjdkZTA2Zi4uYWQ0ZmUxOTg3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9wYXRoa2V5cy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAKIAorc3RhdGljIGJvb2wgcGF0aGtleV9pc191bmlxdWUoUGF0aEtleSAqbmV3X3Bh dGhrZXksIExpc3QgKnBhdGhrZXlzKTsKIHN0YXRpYyBib29sIHBhdGhrZXlfaXNfcmVkdW5kYW50 KFBhdGhLZXkgKm5ld19wYXRoa2V5LCBMaXN0ICpwYXRoa2V5cyk7CiBzdGF0aWMgYm9vbCBtYXRj aGVzX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShSZXN0cmljdEluZm8gKnJpbmZvLAogCQkJCQkJ CQkJCQkgUmVsT3B0SW5mbyAqcGFydHJlbCwKQEAgLTk1LDYgKzk2LDI5IEBAIG1ha2VfY2Fub25p Y2FsX3BhdGhrZXkoUGxhbm5lckluZm8gKnJvb3QsCiAJcmV0dXJuIHBrOwogfQogCisvKgorICog cGF0aGtleV9pc191bmlxdWUKKyAqCSAgIENoZWNrcyBpZiB0aGUgbmV3IHBhdGhrZXkncyBlcXVp dmFsZW5jZSBjbGFzcyBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mCisgKiAgICAgYW55IGV4aXN0aW5n IG1lbWJlciBvZiB0aGUgcGF0aGtleSBsaXN0LgorICovCitzdGF0aWMgYm9vbAorcGF0aGtleV9p c191bmlxdWUoUGF0aEtleSAqbmV3X3BhdGhrZXksIExpc3QgKnBhdGhrZXlzKQoreworCUVxdWl2 YWxlbmNlQ2xhc3MgKm5ld19lYyA9IG5ld19wYXRoa2V5LT5wa19lY2xhc3M7CisJTGlzdENlbGwg ICAqbGM7CisKKwkvKiBJZiBzYW1lIEVDIGFscmVhZHkgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCwg dGhlbiBub3QgdW5pcXVlICovCisJZm9yZWFjaChsYywgcGF0aGtleXMpCisJeworCQlQYXRoS2V5 ICAgICpvbGRfcGF0aGtleSA9IChQYXRoS2V5ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKG5ld19l YyA9PSBvbGRfcGF0aGtleS0+cGtfZWNsYXNzKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJl dHVybiB0cnVlOworfQorCiAvKgogICogcGF0aGtleV9pc19yZWR1bmRhbnQKICAqCSAgIElzIGEg cGF0aGtleSByZWR1bmRhbnQgd2l0aCBvbmUgYWxyZWFkeSBpbiB0aGUgZ2l2ZW4gbGlzdD8KQEAg LTExNTEsNiArMTE3NSw0MSBAQCBtYWtlX3BhdGhrZXlzX2Zvcl9zb3J0Y2xhdXNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAlyZXR1cm4gcGF0aGtleXM7CiB9CiAKKy8qCisgKiBtYWtlX3BhdGhrZXlz X2Zvcl91bmlxdWVrZXljbGF1c2VzCisgKgkJR2VuZXJhdGUgYSBwYXRoa2V5cyBsaXN0IHRvIGJl IHVzZWQgZm9yIHVuaXF1ZWtleSBjbGF1c2VzCisgKi8KK0xpc3QgKgorbWFrZV9wYXRoa2V5c19m b3JfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgTGlzdCAqc29ydGNsYXVz ZXMsCisJCQkJCQkJIExpc3QgKnRsaXN0KQoreworCUxpc3QJICAgKnBhdGhrZXlzID0gTklMOwor CUxpc3RDZWxsICAgKmw7CisKKwlmb3JlYWNoKGwsIHNvcnRjbGF1c2VzKQorCXsKKwkJU29ydEdy b3VwQ2xhdXNlICpzb3J0Y2wgPSAoU29ydEdyb3VwQ2xhdXNlICopIGxmaXJzdChsKTsKKwkJRXhw cgkgICAqc29ydGtleTsKKwkJUGF0aEtleSAgICAqcGF0aGtleTsKKworCQlzb3J0a2V5ID0gKEV4 cHIgKikgZ2V0X3NvcnRncm91cGNsYXVzZV9leHByKHNvcnRjbCwgdGxpc3QpOworCQlBc3NlcnQo T2lkSXNWYWxpZChzb3J0Y2wtPnNvcnRvcCkpOworCQlwYXRoa2V5ID0gbWFrZV9wYXRoa2V5X2Zy b21fc29ydG9wKHJvb3QsCisJCQkJCQkJCQkJICAgc29ydGtleSwKKwkJCQkJCQkJCQkgICByb290 LT5udWxsYWJsZV9iYXNlcmVscywKKwkJCQkJCQkJCQkgICBzb3J0Y2wtPnNvcnRvcCwKKwkJCQkJ CQkJCQkgICBzb3J0Y2wtPm51bGxzX2ZpcnN0LAorCQkJCQkJCQkJCSAgIHNvcnRjbC0+dGxlU29y dEdyb3VwUmVmLAorCQkJCQkJCQkJCSAgIHRydWUpOworCisJCWlmIChwYXRoa2V5X2lzX3VuaXF1 ZShwYXRoa2V5LCBwYXRoa2V5cykpCisJCQlwYXRoa2V5cyA9IGxhcHBlbmQocGF0aGtleXMsIHBh dGhrZXkpOworCX0KKworCXJldHVybiBwYXRoa2V5czsKK30KKwogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAqCQlQQVRIS0VZUyBBTkQgTUVSR0VDTEFVU0VTCiAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMuYwppbmRleCBjYTQwYzQwODU4Li5h YjRiMWQxOTM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVr ZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5cy5jCkBAIC0x MTMyLDMgKzExMzIsNjYgQEAgYWRkX2NvbWJpbmVkX3VuaXF1ZWtleShQbGFubmVySW5mbyAqcm9v dCwKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQorCitMaXN0KgorYnVpbGRfdW5pcXVla2V5cyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqc29ydGNsYXVzZXMpCit7CisJTGlzdCAqcmVzdWx0ID0gTklM OworCUxpc3QgKnNvcnRrZXlzOworCUxpc3RDZWxsICpsOworCUxpc3QgKmV4cHJzID0gTklMOwor CisJc29ydGtleXMgPSBtYWtlX3BhdGhrZXlzX2Zvcl91bmlxdWVrZXlzKHJvb3QsCisJCQkJCQkJ CQkJCXNvcnRjbGF1c2VzLAorCQkJCQkJCQkJCQlyb290LT5wcm9jZXNzZWRfdGxpc3QpOworCisJ LyogQ3JlYXRlIGEgdW5pcXVla2V5IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KKwlmb3JlYWNo KGwsIHNvcnRrZXlzKQorCXsKKwkJUGF0aEtleSAgICAqcGF0aGtleSA9IChQYXRoS2V5ICopIGxm aXJzdChsKTsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSBwYXRoa2V5LT5wa19lY2xhc3M7CisJ CUVxdWl2YWxlbmNlTWVtYmVyICptZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIqKSBsZmlyc3QobGlz dF9oZWFkKGVjLT5lY19tZW1iZXJzKSk7CisJCWlmIChFQ19NVVNUX0JFX1JFRFVOREFOVChlYykp CisJCQljb250aW51ZTsKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBtZW0tPmVtX2V4cHIpOwor CX0KKworCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBtYWtlVW5pcXVlS2V5KGV4cHJzLCBmYWxz ZSkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbAorcXVlcnlfaGFzX3VuaXF1ZWtleXNf Zm9yKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRodW5pcXVla2V5cywKKwkJCQkJCSBib29s IGFsbG93X211bHRpbnVsbHMpCit7CisJTGlzdENlbGwgKmxjOworCUxpc3RDZWxsICpsYzI7CisK KwkvKiByb290LT5xdWVyeV91bmlxdWVrZXlzIGFyZSB0aGUgcmVxdWVzdGVkIERJU1RJTkNUIGNs YXVzZXMgb24gcXVlcnkgbGV2ZWwKKwkgKiBwYXRodW5pcXVla2V5cyBhcmUgdGhlIHVuaXF1ZSBr ZXlzIG9uIGN1cnJlbnQgcGF0aC4KKwkgKiBBbGwgcmVxdWVzdGVkIHF1ZXJ5X3VuaXF1ZWtleXMg bXVzdCBiZSBzYXRpc2ZpZWQgYnkgdGhlIHBhdGh1bmlxdWVrZXlzCisJICovCisJZm9yZWFjaChs Yywgcm9vdC0+cXVlcnlfdW5pcXVla2V5cykKKwl7CisJCVVuaXF1ZUtleSAqcXVlcnlfdWtleSA9 IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOworCQlib29sIHNhdGlzZmllZCA9IGZhbHNlOwor CQlmb3JlYWNoKGxjMiwgcGF0aHVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9 IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMyKTsKKwkJCWlmICh1a2V5LT5tdWx0aV9udWxsdmFs cyAmJiAhYWxsb3dfbXVsdGludWxscykKKwkJCQljb250aW51ZTsKKwkJCWlmIChsaXN0X2xlbmd0 aCh1a2V5LT5leHBycykgPT0gMCAmJgorCQkJCWxpc3RfbGVuZ3RoKHF1ZXJ5X3VrZXktPmV4cHJz KSAhPSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJz LCBxdWVyeV91a2V5LT5leHBycykpCisJCQl7CisJCQkJc2F0aXNmaWVkID0gdHJ1ZTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIXNhdGlzZmllZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXgg M2NhZGQyMmUzZS4uZWEyNDA4YzEzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwpAQCAtMzA4MiwxMiArMzA4MiwxOCBAQCBzdGFuZGFyZF9xcF9jYWxsYmFjayhQbGFubmVySW5m byAqcm9vdCwgdm9pZCAqZXh0cmEpCiAJICovCiAJaWYgKHFwX2V4dHJhLT5ncm91cENsYXVzZSAm JgogCQlncm91cGluZ19pc19zb3J0YWJsZShxcF9leHRyYS0+Z3JvdXBDbGF1c2UpKQorCXsKIAkJ cm9vdC0+Z3JvdXBfcGF0aGtleXMgPQogCQkJbWFrZV9wYXRoa2V5c19mb3Jfc29ydGNsYXVzZXMo cm9vdCwKIAkJCQkJCQkJCQkgIHFwX2V4dHJhLT5ncm91cENsYXVzZSwKIAkJCQkJCQkJCQkgIHRs aXN0KTsKKwkJcm9vdC0+cXVlcnlfdW5pcXVla2V5cyA9IGJ1aWxkX3VuaXF1ZWtleXMocm9vdCwg cGFyc2UtPmRpc3RpbmN0Q2xhdXNlKTsKKwl9CiAJZWxzZQorCXsKIAkJcm9vdC0+Z3JvdXBfcGF0 aGtleXMgPSBOSUw7CisJCXJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgPSBOSUw7CisJfQogCiAJLyog V2UgY29uc2lkZXIgb25seSB0aGUgZmlyc3QgKGJvdHRvbSkgd2luZG93IGluIHBhdGhrZXlzIGxv Z2ljICovCiAJaWYgKGFjdGl2ZVdpbmRvd3MgIT0gTklMKQpAQCAtNDQ5NywxMyArNDUwMywxOSBA QCBjcmVhdGVfZmluYWxfZGlzdGluY3RfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKmlucHV0X3JlbCwKIAkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOwog CiAJCQlpZiAocGF0aGtleXNfY29udGFpbmVkX2luKG5lZWRlZF9wYXRoa2V5cywgcGF0aC0+cGF0 aGtleXMpKQotCQkJewogCQkJCWFkZF9wYXRoKGRpc3RpbmN0X3JlbCwgKFBhdGggKikKIAkJCQkJ CSBjcmVhdGVfdXBwZXJfdW5pcXVlX3BhdGgocm9vdCwgZGlzdGluY3RfcmVsLAogCQkJCQkJCQkJ CQkJICBwYXRoLAogCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChyb290LT5kaXN0aW5jdF9wYXRo a2V5cyksCiAJCQkJCQkJCQkJCQkgIG51bURpc3RpbmN0Um93cykpOwotCQkJfQorCQl9CisKKwkJ Zm9yZWFjaChsYywgaW5wdXRfcmVsLT51bmlxdWVfcGF0aGxpc3QpCisJCXsKKwkJCVBhdGgJICAg KnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCisJCQlpZiAocXVlcnlfaGFzX3VuaXF1ZWtl eXNfZm9yKHJvb3QsIG5lZWRlZF9wYXRoa2V5cywgZmFsc2UpKQorCQkJCWFkZF9wYXRoKGRpc3Rp bmN0X3JlbCwgcGF0aCk7CiAJCX0KIAogCQkvKiBGb3IgZXhwbGljaXQtc29ydCBjYXNlLCBhbHdh eXMgdXNlIHRoZSBtb3JlIHJpZ29yb3VzIGNsYXVzZSAqLwpAQCAtNzExOCw2ICs3MTMwLDI2IEBA IGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJfQog CX0KIAorCWZvcmVhY2gobGMsIHJlbC0+dW5pcXVlX3BhdGhsaXN0KQorCXsKKwkJUGF0aAkgICAq c3VicGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisKKwkJLyogU2hvdWxkbid0IGhhdmUgYW55 IHBhcmFtZXRlcml6ZWQgcGF0aHMgYW55bW9yZSAqLworCQlBc3NlcnQoc3VicGF0aC0+cGFyYW1f aW5mbyA9PSBOVUxMKTsKKworCQlpZiAodGxpc3Rfc2FtZV9leHBycykKKwkJCXN1YnBhdGgtPnBh dGh0YXJnZXQtPnNvcnRncm91cHJlZnMgPQorCQkJCXNjYW5qb2luX3RhcmdldC0+c29ydGdyb3Vw cmVmczsKKwkJZWxzZQorCQl7CisJCQlQYXRoCSAgICpuZXdwYXRoOworCisJCQluZXdwYXRoID0g KFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LCByZWwsIHN1YnBhdGgsCisJCQkJ CQkJCQkJCQkJICBzY2Fuam9pbl90YXJnZXQpOworCQkJbGZpcnN0KGxjKSA9IG5ld3BhdGg7CisJ CX0KKwl9CisKIAkvKgogCSAqIE5vdywgaWYgZmluYWwgc2Nhbi9qb2luIHRhcmdldCBjb250YWlu cyBTUkZzLCBpbnNlcnQgUHJvamVjdFNldFBhdGgocykKIAkgKiBhdG9wIGVhY2ggZXhpc3Rpbmcg cGF0aC4gIChOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGxvb2sgYXQgdGhlCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCBlNTNkMzgxZTE5Li43NGUxMDBlNWE5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTQxNiwxMCArNDE2LDEw IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogICogJ3BhcmVudF9yZWwn IGlzIHRoZSByZWxhdGlvbiBlbnRyeSB0byB3aGljaCB0aGUgcGF0aCBjb3JyZXNwb25kcy4KICAq ICduZXdfcGF0aCcgaXMgYSBwb3RlbnRpYWwgcGF0aCBmb3IgcGFyZW50X3JlbC4KICAqCi0gKiBS ZXR1cm5zIG5vdGhpbmcsIGJ1dCBtb2RpZmllcyBwYXJlbnRfcmVsLT5wYXRobGlzdC4KKyAqIFJl dHVybnMgbW9kaWZpZWQgcGF0aGxpc3QuCiAgKi8KLXZvaWQKLWFkZF9wYXRoKFJlbE9wdEluZm8g KnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRoKQorc3RhdGljIExpc3QgKgorYWRkX3BhdGhfdG8o UmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgTGlzdCAqcGF0aGxpc3QsIFBhdGggKm5ld19wYXRoKQog ewogCWJvb2wJCWFjY2VwdF9uZXcgPSB0cnVlOwkvKiB1bmxlc3Mgd2UgZmluZCBhIHN1cGVyaW9y IG9sZCBwYXRoICovCiAJaW50CQkJaW5zZXJ0X2F0ID0gMDsJLyogd2hlcmUgdG8gaW5zZXJ0IG5l dyBpdGVtICovCkBAIC00NDAsNyArNDQwLDcgQEAgYWRkX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50 X3JlbCwgUGF0aCAqbmV3X3BhdGgpCiAJICogZm9yIG1vcmUgdGhhbiBvbmUgb2xkIHBhdGggdG8g YmUgdG9zc2VkIG91dCBiZWNhdXNlIG5ld19wYXRoIGRvbWluYXRlcwogCSAqIGl0LgogCSAqLwot CWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhdGhsaXN0KQorCWZvcmVhY2gocDEsIHBhdGhsaXN0 KQogCXsKIAkJUGF0aAkgICAqb2xkX3BhdGggPSAoUGF0aCAqKSBsZmlyc3QocDEpOwogCQlib29s CQlyZW1vdmVfb2xkID0gZmFsc2U7IC8qIHVubGVzcyBuZXcgcHJvdmVzIHN1cGVyaW9yICovCkBA IC01ODQsOCArNTg0LDcgQEAgYWRkX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAq bmV3X3BhdGgpCiAJCSAqLwogCQlpZiAocmVtb3ZlX29sZCkKIAkJewotCQkJcGFyZW50X3JlbC0+ cGF0aGxpc3QgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KHBhcmVudF9yZWwtPnBhdGhsaXN0LAot CQkJCQkJCQkJCQkJCQkgIHAxKTsKKwkJCXBhdGhsaXN0ID0gZm9yZWFjaF9kZWxldGVfY3VycmVu dChwYXRobGlzdCwgcDEpOwogCiAJCQkvKgogCQkJICogRGVsZXRlIHRoZSBkYXRhIHBvaW50ZWQt dG8gYnkgdGhlIGRlbGV0ZWQgY2VsbCwgaWYgcG9zc2libGUKQEAgLTYxMiw4ICs2MTEsNyBAQCBh ZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkKIAlpZiAoYWNj ZXB0X25ldykKIAl7CiAJCS8qIEFjY2VwdCB0aGUgbmV3IHBhdGg6IGluc2VydCBpdCBhdCBwcm9w ZXIgcGxhY2UgaW4gcGF0aGxpc3QgKi8KLQkJcGFyZW50X3JlbC0+cGF0aGxpc3QgPQotCQkJbGlz dF9pbnNlcnRfbnRoKHBhcmVudF9yZWwtPnBhdGhsaXN0LCBpbnNlcnRfYXQsIG5ld19wYXRoKTsK KwkJcGF0aGxpc3QgPSBsaXN0X2luc2VydF9udGgocGF0aGxpc3QsIGluc2VydF9hdCwgbmV3X3Bh dGgpOwogCX0KIAllbHNlCiAJewpAQCAtNjIxLDYgKzYxOSwyMyBAQCBhZGRfcGF0aChSZWxPcHRJ bmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkKIAkJaWYgKCFJc0EobmV3X3BhdGgsIElu ZGV4UGF0aCkpCiAJCQlwZnJlZShuZXdfcGF0aCk7CiAJfQorCisJcmV0dXJuIHBhdGhsaXN0Owor fQorCit2b2lkCithZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0 aCkKK3sKKwlwYXJlbnRfcmVsLT5wYXRobGlzdCA9IGFkZF9wYXRoX3RvKHBhcmVudF9yZWwsCisJ CQkJCQkJCQkgICBwYXJlbnRfcmVsLT5wYXRobGlzdCwgbmV3X3BhdGgpOworfQorCit2b2lkCith ZGRfdW5pcXVlX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpCit7 CisJcGFyZW50X3JlbC0+dW5pcXVlX3BhdGhsaXN0ID0gYWRkX3BhdGhfdG8ocGFyZW50X3JlbCwK KwkJCQkJCQkJCQkJICBwYXJlbnRfcmVsLT51bmlxdWVfcGF0aGxpc3QsCisJCQkJCQkJCQkJCSAg bmV3X3BhdGgpOwogfQogCiAvKgpAQCAtMjY2MSw2ICsyNjc2LDcgQEAgY3JlYXRlX3Byb2plY3Rp b25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRoa2V5cyA9IHN1 YnBhdGgtPnBhdGhrZXlzOwogCiAJcGF0aG5vZGUtPnN1YnBhdGggPSBzdWJwYXRoOworCXBhdGhu b2RlLT5wYXRoLnVuaXF1ZWtleXMgPSBzdWJwYXRoLT51bmlxdWVrZXlzOwogCiAJLyoKIAkgKiBX ZSBtaWdodCBub3QgbmVlZCBhIHNlcGFyYXRlIFJlc3VsdCBub2RlLiAgSWYgdGhlIGlucHV0IHBs YW4gbm9kZSB0eXBlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDBjNzU4ZDEwYzUuLjNhZTZiOTE1 NzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yOTMsNiArMjkzLDcgQEAgc3RydWN0IFBsYW5u ZXJJbmZvCiAKIAlMaXN0CSAgICpxdWVyeV9wYXRoa2V5czsgLyogZGVzaXJlZCBwYXRoa2V5cyBm b3IgcXVlcnlfcGxhbm5lcigpICovCiAKKwlMaXN0CSAgICpxdWVyeV91bmlxdWVrZXlzOyAvKiB1 bmlxdWUga2V5cyByZXF1aXJlZCBmb3IgdGhlIHF1ZXJ5ICovCiAJTGlzdAkgICAqZ3JvdXBfcGF0 aGtleXM7IC8qIGdyb3VwQ2xhdXNlIHBhdGhrZXlzLCBpZiBhbnkgKi8KIAlMaXN0CSAgICp3aW5k b3dfcGF0aGtleXM7CS8qIHBhdGhrZXlzIG9mIGJvdHRvbSB3aW5kb3csIGlmIGFueSAqLwogCUxp c3QJICAgKmRpc3RpbmN0X3BhdGhrZXlzOwkvKiBkaXN0aW5jdENsYXVzZSBwYXRoa2V5cywgaWYg YW55ICovCkBAIC02OTUsNiArNjk2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUxp c3QJICAgKnBhdGhsaXN0OwkJLyogUGF0aCBzdHJ1Y3R1cmVzICovCiAJTGlzdAkgICAqcHBpbGlz dDsJCS8qIFBhcmFtUGF0aEluZm9zIHVzZWQgaW4gcGF0aGxpc3QgKi8KIAlMaXN0CSAgICpwYXJ0 aWFsX3BhdGhsaXN0OwkvKiBwYXJ0aWFsIFBhdGhzICovCisJTGlzdCAgICAgICAqdW5pcXVlX3Bh dGhsaXN0OyAgICAvKiB1bmlxdWUgUGF0aHMgKi8KIAlzdHJ1Y3QgUGF0aCAqY2hlYXBlc3Rfc3Rh cnR1cF9wYXRoOwogCXN0cnVjdCBQYXRoICpjaGVhcGVzdF90b3RhbF9wYXRoOwogCXN0cnVjdCBQ YXRoICpjaGVhcGVzdF91bmlxdWVfcGF0aDsKQEAgLTg4Niw2ICs4ODgsNyBAQCBzdHJ1Y3QgSW5k ZXhPcHRJbmZvCiAJYm9vbAkJYW1zZWFyY2hudWxsczsJLyogY2FuIEFNIHNlYXJjaCBmb3IgTlVM TC9OT1QgTlVMTCBlbnRyaWVzPyAqLwogCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CS8qIGRvZXMgQU0g aGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsgLyog ZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWNhbnNraXA7 CQkvKiBjYW4gQU0gc2tpcCBkdXBsaWNhdGUgdmFsdWVzPyAqLwogCWJvb2wJCWFtY2FucGFyYWxs ZWw7CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwogCWJvb2wJCWFtY2FubWFy a3BvczsJLyogZG9lcyBBTSBzdXBwb3J0IG1hcmsvcmVzdG9yZT8gKi8KIAkvKiBSYXRoZXIgdGhh biBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRo aXMgKi8KQEAgLTEyMjAsNiArMTIyMyw4IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgKIAogCUxpc3QJ ICAgKnBhdGhrZXlzOwkJLyogc29ydCBvcmRlcmluZyBvZiBwYXRoJ3Mgb3V0cHV0ICovCiAJLyog cGF0aGtleXMgaXMgYSBMaXN0IG9mIFBhdGhLZXkgbm9kZXM7IHNlZSBhYm92ZSAqLworCisJTGlz dAkgICAqdW5pcXVla2V5czsJLyogdGhlIHVuaXF1ZSBrZXlzLCBvciBOSUwgaWYgbm9uZSAqLwog fSBQYXRoOwogCiAvKiBNYWNybyBmb3IgZXh0cmFjdGluZyBhIHBhdGgncyBwYXJhbWV0ZXJpemF0 aW9uIHJlbGlkczsgYmV3YXJlIGRvdWJsZSBldmFsICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CmluZGV4IGY3MDRkMzk5ODAuLmZhY2IyZGZlNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29w dGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiBpbnQJY29tcGFyZV9mcmFjdGlvbmFsX3BhdGhfY29z dHMoUGF0aCAqcGF0aDEsIFBhdGggKnBhdGgyLAogCQkJCQkJCQkJCSAgZG91YmxlIGZyYWN0aW9u KTsKIGV4dGVybiB2b2lkIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKTsKIGV4 dGVybiB2b2lkIGFkZF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRo KTsKK2V4dGVybiB2b2lkIGFkZF91bmlxdWVfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQ YXRoICpuZXdfcGF0aCk7CiBleHRlcm4gYm9vbCBhZGRfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZv ICpwYXJlbnRfcmVsLAogCQkJCQkJCSAgQ29zdCBzdGFydHVwX2Nvc3QsIENvc3QgdG90YWxfY29z dCwKIAkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aHMuaAppbmRleCA3NTRkZmNkNTQ5Li5lNzFlNjUyNjRhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aHMuaApAQCAtMjI5LDYgKzIyOSw5IEBAIGV4dGVybiBMaXN0ICpidWlsZF9qb2luX3BhdGhr ZXlzKFBsYW5uZXJJbmZvICpyb290LAogZXh0ZXJuIExpc3QgKm1ha2VfcGF0aGtleXNfZm9yX3Nv cnRjbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnNvcnRjbGF1 c2VzLAogCQkJCQkJCQkJCSAgIExpc3QgKnRsaXN0KTsKK2V4dGVybiBMaXN0ICptYWtlX3BhdGhr ZXlzX2Zvcl91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgTGlzdCAq c29ydGNsYXVzZXMsCisJCQkJCQkJCQkJICBMaXN0ICp0bGlzdCk7CiBleHRlcm4gdm9pZCBpbml0 aWFsaXplX21lcmdlY2xhdXNlX2VjbGFzc2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJ CQlSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5mbyk7CiBleHRlcm4gdm9pZCB1cGRhdGVfbWVyZ2Vj bGF1c2VfZWNsYXNzZXMoUGxhbm5lckluZm8gKnJvb3QsCkBAIC0yOTYsNiArMjk5LDExIEBAIGV4 dGVybiBib29sIHJlbGF0aW9uX2hhc191bmlxdWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJTGlzdCAqZXhwcnMsCiAJCQkJ CQkJCQkJYm9vbCBhbGxvd19tdWx0aW51bGxzKTsKK2V4dGVybiBib29sIHF1ZXJ5X2hhc191bmlx dWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBMaXN0ICpleHBycywKKwkJ CQkJCQkJCSBib29sIGFsbG93X211bHRpbnVsbHMpOwogZXh0ZXJuIGJvb2wgcmVsYXRpb25faXNf b25lcm93KFJlbE9wdEluZm8gKnJlbCk7CiAKK2V4dGVybiBMaXN0ICpidWlsZF91bmlxdWVrZXlz KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpzb3J0Y2xhdXNlcyk7CisKICNlbmRpZgkJCQkJCQkv KiBQQVRIU19IICovCi0tIAoyLjI5LjIKCg== --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="v2-0002-Index-skip-scan.patch" Content-Description: v2-0002-Index-skip-scan.patch Content-Disposition: attachment; filename="v2-0002-Index-skip-scan.patch"; size=236460; creation-date="Sat, 23 Oct 2021 13:03:59 GMT"; modification-date="Sat, 23 Oct 2021 13:03:59 GMT" Content-Transfer-Encoding: base64 RnJvbSAzMTIxN2E2ZTQwMTg2MWUyNTYyMDcyMDEzMmFkZGZkZGQyYTJmNWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaXMgdmFuIE5lZSA8ZmxvcmlzLnZhbm5lZUBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMTUgTm92IDIwMTkgMDk6NDY6NTMgLTA1MDAKU3ViamVjdDogW1BBVENI IDQvNV0gSW5kZXggc2tpcCBzY2FuCgpJbXBsZW1lbnRhdGlvbiBvZiBJbmRleCBTa2lwIFNjYW4g KHNlZSBMb29zZSBJbmRleCBTY2FuIGluIHRoZSB3aWtpIFsxXSkKYXMgcGFydCBvZiB0aGUgSW5k ZXhPbmx5U2NhbiwgSW5kZXhTY2FuIGFuZCBCaXRtYXBJbmRleFNjYW4gZm9yIG5idHJlZS4KVGhp cyBwYXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiB0d28gbWFpbiB0eXBlcyBvZiBxdWVyaWVz IHNpZ25pZmljYW50bHk6Ci0gU0VMRUNUIERJU1RJTkNULCBTRUxFQ1QgRElTVElOQ1QgT04KLSBS ZWd1bGFyIFNFTEVDVHMgd2l0aCBXSEVSRS1jbGF1c2VzIG9uIG5vbi1sZWFkaW5nIGluZGV4IGF0 dHJpYnV0ZXMKRm9yIGV4YW1wbGUsIGdpdmVuIGFuIG5idHJlZSBpbmRleCBvbiB0aHJlZSBjb2x1 bW5zIChhLGIsYyksIHRoZSBmb2xsb3dpbmcgcXVlcmllcwptYXkgbm93IGJlIHNpZ25pZmljYW50 bHkgZmFzdGVyOgotIFNFTEVDVCBESVNUSU5DVCBPTiAoYSkgKiBGUk9NIHQxCi0gU0VMRUNUICog RlJPTSB0MSBXSEVSRSBiPTIKLSBTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGIgSU4gKDEwLDQwKQot IFNFTEVDVCBESVNUSU5DVCBPTiAoYSxiKSAqIEZST00gdDEgV0hFUkUgYyBCRVRXRUVOIDEwIEFO RCAxMDAgT1JERVIgQlkgYSxiLGMKCk9yaWdpbmFsIHBhdGNoIGFuZCBkZXNpZ24gd2VyZSBwcm9w b3NlZCBieSBUaG9tYXMgTXVucm8gWzJdLCByZXZpdmVkIGFuZAppbXByb3ZlZCBieSBEbWl0cnkg RG9sZ292IGFuZCBKZXNwZXIgUGVkZXJzZW4uIEZ1cnRoZXIgZW5oYW5jZWQgZnVuY3Rpb25hbGl0 eQphZGRlZCBieSBGbG9yaXMgdmFuIE5lZSByZWdhcmRpbmcgYSBtb3JlIGdlbmVyYWwgYW5kIHBl cmZvcm1hbnQgc2tpcCBpbXBsZW1lbnRhdGlvbi4KClsxXSBodHRwczovL3dpa2kucG9zdGdyZXNx bC5vcmcvd2lraS9Mb29zZV9pbmRleHNjYW4KWzJdIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvZmxhdC9DQURMV21YWGJUU0J4UC1Nekp1UEFZU3NMXzJmMGlQbTVWV1BiQ3ZE YlZ2Zlg5M0ZLa3clNDBtYWlsLmdtYWlsLmNvbQoKQXV0aG9yOiBGbG9yaXMgdmFuIE5lZSwgSmVz cGVyIFBlZGVyc2VuLCBEbWl0cnkgRG9sZ292ClJldmlld2VkLWJ5OiBUaG9tYXMgTXVucm8sIERh dmlkIFJvd2xleSwgS3lvdGFybyBIb3JpZ3VjaGksIFRvbWFzIFZvbmRyYSwgUGV0ZXIgR2VvZ2hl Z2FuCi0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwg ICAgNCArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMyArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAg IDE1ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAx MjEgKy0KIGRvYy9zcmMvc2dtbC9pbmRpY2VzLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICAg MyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgICAz ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgIDMg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAgMyAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAgMTYzICsr CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlICAgICAgICAgICAgfCAgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8ICAgNTggKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8ICA3OTAgKysr Ky0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNraXAuYyAgICAgICAgICAgfCAx NDU1ICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQu YyAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxz LmMgICAgICAgICAgfCAgODUwICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jICAgICAgICAgICAgICAgIHwgICAyOSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nh bi5jICAgICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0 bWFwSW5kZXhzY2FuLmMgICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jICAgICAgfCAgIDY5ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMgICAgICAgICAgfCAgIDcyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3Mu YyAgICAgICAgICAgICAgICAgfCAgICA1ICsKIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMg ICAgICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxw YXRocy5jICAgICAgICAgfCAgIDU0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMgICAgICAgICB8ICAgNjggKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtl eXMuYyAgICAgICAgIHwgICA3MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgICAgICAgfCAgIDM4ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMgICAgICAgICAgfCAgIDE2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jICAgICAgICAgfCAgIDc4ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAg ICAgICAgICAgIHwgICAgOSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMgICAg ICAgICAgICB8ICAgIDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAg ICAgICAgICB8ICAgMTkgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAg ICAgICAgIHwgICAxNiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAg ICAgICAgfCAgMTQzICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAg ICAgICAgfCAgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAgIDcgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAg ICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgICA1ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgICAgNCArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAg fCAgICA0ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2VuY25hbWVzLmMgICAgICAgICAgICAgICB8 ICAgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvd2NoYXIuYyAgICAgICAgICAgICAgICAgIHwg ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQgfCAg NTk5ICsrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAg ICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwgICAg ICB8ICAyNDggKysrCiA1MyBmaWxlcyBjaGFuZ2VkLCA0NjEzIGluc2VydGlvbnMoKyksIDU0NiBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNraXAuYwogY3JlYXRlIG1vZGUgMTIwMDAwIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2VuY25h bWVzLmMKIGNyZWF0ZSBtb2RlIDEyMDAwMCBzcmMvaW50ZXJmYWNlcy9saWJwcS93Y2hhci5jCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggNDJhODMwYzMzYi4uMjg0OWU0YmM3MiAxMDA2NDQK LS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCkBAIC0yNjUyLDcgKzI2NTIsNyBAQCBidF9yb290ZGVzY2VuZChC dHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJQnVmZmVyCQlsYnVmOwog CWJvb2wJCWV4aXN0czsKIAotCWtleSA9IF9idF9ta3NjYW5rZXkoc3RhdGUtPnJlbCwgaXR1cCk7 CisJa2V5ID0gX2J0X21rc2NhbmtleShzdGF0ZS0+cmVsLCBpdHVwLCBOVUxMKTsKIAlBc3NlcnQo a2V5LT5oZWFwa2V5c3BhY2UgJiYga2V5LT5zY2FudGlkICE9IE5VTEwpOwogCiAJLyoKQEAgLTMx MDgsNyArMzEwOCw3IEBAIGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChSZWxhdGlvbiByZWwsIElu ZGV4VHVwbGUgaXR1cCkKIHsKIAlCVFNjYW5JbnNlcnQgc2tleTsKIAotCXNrZXkgPSBfYnRfbWtz Y2Fua2V5KHJlbCwgaXR1cCk7CisJc2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBpdHVwLCBOVUxM KTsKIAlza2V5LT5waXZvdHNlYXJjaCA9IHRydWU7CiAKIAlyZXR1cm4gc2tleTsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5k ZXggNzU0ZGUwMDhkNC4uZDM1ZWRkMWQwOSAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0 aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTEzNCw2ICsxMzQsOSBAQCBi bGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJs YnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGJsdmFjdXVtY2xlYW51 cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9 IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2tpcHNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+ YW1nZXRza2lwdHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBibGNv c3Rlc3RpbWF0ZTsKIAlhbXJvdXRpbmUtPmFtb3B0aW9ucyA9IGJsb3B0aW9uczsKIAlhbXJvdXRp bmUtPmFtcHJvcGVydHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDBiY2M2ZmQzMjIuLjVjMzc3ZmVh MDggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTUwMDcsNiArNTAwNywyMSBAQCBBTlkgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xh c3M9IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNraXBzY2FuIiB4cmVmbGFiZWw9ImVuYWJs ZV9pbmRleHNraXBzY2FuIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNraXBz Y2FuPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgor ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNraXBzY2FuPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFi bGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGluZGV4LXNraXAtc2Nh biBwbGFuCisgICAgICAgIHR5cGVzIChzZWUgPHhyZWYgbGlua2VuZD0iaW5kZXhlcy1pbmRleC1z a2lwLXNjYW5zIi8+KS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgPGxpdGVyYWw+b248L2xpdGVy YWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwiIHhyZWZs YWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9tYXRl cmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IGNmMzU5ZmE5ZmYuLjFjZWQ3MWE0NWYgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAt MTUxLDYgKzE1MSw5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1lbmRz Y2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKICAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9z OyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0 cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1za2lwX2Z1bmN0aW9uIGFtc2tpcDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtYmVnaW5zY2Fu X3NraXBfZnVuY3Rpb24gYW1iZWdpbnNraXBzY2FuOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAg ICBhbWdldHR1cGxlX3dpdGhfc2tpcF9mdW5jdGlvbiBhbWdldHNraXB0dXBsZTsgIC8qIGNhbiBi ZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxs ZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBOVUxMICovCkBAIC03NTEsNiArNzU0 LDEyMiBAQCBhbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICAgc3RydWN0IG1heSBi ZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor Ym9vbAorYW1za2lwIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgIFNjYW5EaXJlY3Rpb24g cHJlZml4RGlyLAorCVNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7Cis8L3Byb2dyYW1saXN0aW5n PgorICBTa2lwIHBhc3QgYWxsIHR1cGxlcyB3aGVyZSB0aGUgZmlyc3QgJ3ByZWZpeCcgY29sdW1u cyBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzCisgIHRoZSBsYXN0IHR1cGxlIHJldHVybmVkIGluIHRo ZSBjdXJyZW50IHNjYW4uIFRoZSBhcmd1bWVudHMgYXJlOgorCisgICA8dmFyaWFibGVsaXN0Pgor ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxwYXJhbWV0ZXI+c2NhbjwvcGFyYW1ldGVy PjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgSW5kZXggc2Nh biBpbmZvcm1hdGlvbgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHBhcmFtZXRlcj5w cmVmaXhEaXI8L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJh PgorICAgICAgIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHByZWZpeCBwYXJ0IG9mIHRoZSB0 dXBsZSBpcyBhZHZhbmNpbmcuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48cGFyYW1l dGVyPnBvc3RmaXhEaXI8L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAg IDxwYXJhPgorICAgICAgICBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBwb3N0Zml4IChldmVy eXRoaW5nIGFmdGVyIHRoZSBwcmVmaXgpIG9mIHRoZSB0dXBsZSBpcyBhZHZhbmNpbmcuCisgICAg ICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICA8L3Zh cmlhYmxlbGlzdD4KKworICA8L3BhcmE+CisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgorSW5k ZXhTY2FuRGVzYworYW1iZWdpbnNjYW5fc2tpcCAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKyAg ICAgICAgICAgICBpbnQgbmtleXMsCisJICAgICBpbnQgbm9yZGVyYnlzLAorCSAgICAgaW50IHBy ZWZpeCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUHJlcGFyZSBmb3IgYW4gaW5kZXggc2Nhbi4g IFRoZSA8bGl0ZXJhbD5ua2V5czwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPm5vcmRlcmJ5czwvbGl0 ZXJhbD4KKyAgIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBxdWFscyBhbmQgb3Jk ZXJpbmcgb3BlcmF0b3JzIHRoYXQgd2lsbCBiZQorICAgdXNlZCBpbiB0aGUgc2NhbjsgdGhlc2Ug bWF5IGJlIHVzZWZ1bCBmb3Igc3BhY2UgYWxsb2NhdGlvbiBwdXJwb3Nlcy4KKyAgIE5vdGUgdGhh dCB0aGUgYWN0dWFsIHZhbHVlcyBvZiB0aGUgc2NhbiBrZXlzIGFyZW4ndCBwcm92aWRlZCB5ZXQu CisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBwYWxsb2MnZCBzdHJ1Y3QuCisgICBGb3IgaW1wbGVt ZW50YXRpb24gcmVhc29ucyB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgPGVtcGhhc2lzPm11 c3Q8L2VtcGhhc2lzPiBjcmVhdGUgdGhpcyBzdHJ1Y3QgYnkgY2FsbGluZworICAgPGZ1bmN0aW9u PlJlbGF0aW9uR2V0SW5kZXhTY2FuKCk8L2Z1bmN0aW9uPi4gIEluIG1vc3QgY2FzZXMKKyAgIDxm dW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcg dGhhdCBjYWxsIGFuZCBwZXJoYXBzCisgICBhY3F1aXJpbmcgbG9ja3M7CisgICB0aGUgaW50ZXJl c3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNj YW48L2Z1bmN0aW9uPi4KKyAgIElmIHRoaXMgaXMgYSBza2lwIHNjYW4sIHByZWZpeCBtdXN0IGlu ZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCB0aGF0IGNhbiBiZQorICAgc2tpcHBlZCBv dmVyLiBQcmVmaXggY2FuIGJlIHNldCB0byAtMSB0byBkaXNhYmxlIHNraXBwaW5nLCB3aGljaCB3 aWxsIHlpZWxkIGFuCisgICBpZGVudGljYWwgc2NhbiB0byBhIHJlZ3VsYXIgY2FsbCB0byA8ZnVu Y3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgPHBy b2dyYW1saXN0aW5nPgorICBib29sZWFuCisgIGFtZ2V0dHVwbGVfc2tpcCAoSW5kZXhTY2FuRGVz YyBzY2FuLAorICAgICAgICAgICAgICBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwKKwkgICAgICBT Y2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOworICA8L3Byb2dyYW1saXN0aW5nPgorICAgICBGZXRj aCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZSBnaXZlbgor ICAgICBkaXJlY3Rpb25zLiBEaXJlY3Rpb25zIGFyZSBzcGVjaWZpZWQgYnkgdGhlIGRpcmVjdGlv biBvZiB0aGUgcHJlZml4IHdlJ3JlIG1vdmluZyBpbiwKKyAgICAgb2Ygd2hpY2ggdGhlIHNpemUg b2YgdGhlIHByZWZpeCBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIDxmdW5jdGlvbj5idGJlZ2lu c2Nhbl9za2lwPC9mdW5jdGlvbj4KKyAgICAgY2FsbC4gVGhpcyBkaXJlY3Rpb24gY2FuIGJlIGRp ZmZlcmVudCBpbiBESVNUSU5DVCBzY2FucyB3aGVuIGZldGNoaW5nIGJhY2t3YXJkcworICAgICBm cm9tIGEgY3Vyc29yLgorICAgICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMKKyAgICAgb2J0 YWluZWQsIGZhbHNlIGlmIG5vIG1hdGNoaW5nIHR1cGxlcyByZW1haW4uICBJbiB0aGUgdHJ1ZSBj YXNlIHRoZSB0dXBsZQorICAgICBUSUQgaXMgc3RvcmVkIGludG8gdGhlIDxsaXRlcmFsPnNjYW48 L2xpdGVyYWw+IHN0cnVjdHVyZS4gIE5vdGUgdGhhdAorICAgICA8cXVvdGU+c3VjY2VzczwvcXVv dGU+IG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMgYW4gZW50cnkgdGhhdCBtYXRj aGVzCisgICAgIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBz dGlsbCBleGlzdHMgaW4gdGhlIGhlYXAgb3IKKyAgICAgd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBz bmFwc2hvdCB0ZXN0LiAgT24gc3VjY2VzcywgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PgorICAgICBtdXN0IGFsc28gc2V0IDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVy YWw+IHRvIHRydWUgb3IgZmFsc2UuCisgICAgIEZhbHNlIG1lYW5zIGl0IGlzIGNlcnRhaW4gdGhh dCB0aGUgaW5kZXggZW50cnkgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLgorICAgICB0cnVlIG1lYW5z IHRoaXMgaXMgbm90IGNlcnRhaW4sIGFuZCB0aGUgY29uZGl0aW9ucyByZXByZXNlbnRlZCBieSB0 aGUKKyAgICAgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkIGFnYWluc3QgdGhlIGhlYXAgdHVw bGUgYWZ0ZXIgZmV0Y2hpbmcgaXQuCisgICAgIFRoaXMgcHJvdmlzaW9uIHN1cHBvcnRzIDxxdW90 ZT5sb3NzeTwvcXVvdGU+IGluZGV4IG9wZXJhdG9ycy4KKyAgICAgTm90ZSB0aGF0IHJlY2hlY2tp bmcgd2lsbCBleHRlbmQgb25seSB0byB0aGUgc2NhbiBjb25kaXRpb25zOyBhIHBhcnRpYWwKKyAg ICAgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGlzIG5ldmVyIHJlY2hlY2tlZCBieSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICAgIGNhbGxlcnMuCisgICAgPC9wYXJhPgorCisg ICAgPHBhcmE+CisgICAgIElmIHRoZSBpbmRleCBzdXBwb3J0cyA8bGluayBsaW5rZW5kPSJpbmRl eGVzLWluZGV4LW9ubHktc2NhbnMiPmluZGV4LW9ubHkKKyAgICAgc2NhbnM8L2xpbms+IChpLmUu LCA8ZnVuY3Rpb24+YW1jYW5yZXR1cm48L2Z1bmN0aW9uPiByZXR1cm5zIHRydWUgZm9yIGl0KSwK KyAgICAgdGhlbiBvbiBzdWNjZXNzIHRoZSBBTSBtdXN0IGFsc28gY2hlY2sgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfd2FudF9pdHVwPC9saXRlcmFsPiwKKyAgICAgYW5kIGlmIHRoYXQgaXMgdHJ1ZSBp dCBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWxseSBpbmRleGVkIGRhdGEgZm9yIHRoZQorICAgICBp bmRleCBlbnRyeS4gIFRoZSBkYXRhIGNhbiBiZSByZXR1cm5lZCBpbiB0aGUgZm9ybSBvZiBhbgor ICAgICA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIHN0b3JlZCBh dCA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiwKKyAgICAgd2l0aCB0dXBsZSBk ZXNjcmlwdG9yIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXBkZXNjPC9saXRlcmFsPjsgb3IgaW4g dGhlIGZvcm0gb2YKKyAgICAgYSA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBv aW50ZXIgc3RvcmVkIGF0IDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiwKKyAg ICAgd2l0aCB0dXBsZSBkZXNjcmlwdG9yIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwZGVzYzwv bGl0ZXJhbD4uICAoVGhlIGxhdHRlcgorICAgICBmb3JtYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBy ZWNvbnN0cnVjdGluZyBkYXRhIHRoYXQgbWlnaHQgcG9zc2libHkgbm90IGZpdAorICAgICBpbnRv IGFuIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+LikgIEluIGVpdGhlciBjYXNl LAorICAgICBtYW5hZ2VtZW50IG9mIHRoZSBkYXRhIHJlZmVyZW5jZWQgYnkgdGhlIHBvaW50ZXIg aXMgdGhlIGFjY2VzcyBtZXRob2QncworICAgICByZXNwb25zaWJpbGl0eS4gIFRoZSBkYXRhIG11 c3QgcmVtYWluIGdvb2QgYXQgbGVhc3QgdW50aWwgdGhlIG5leHQKKyAgICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4sIG9yIDxm dW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPgorICAgICBjYWxsIGZvciB0aGUgc2Nhbi4KKyAg ICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKKyAg ICAgbWV0aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYg aXQgZG9lc24ndCwgdGhlCisgICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgor ICAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KKyAgICA8L3BhcmE+CisKICAgPHBhcmE+ CiAgICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIG9yZGluYXJ5IGluZGV4IHNjYW5zLCBzb21l IHR5cGVzIG9mIGluZGV4CiAgICBtYXkgd2lzaCB0byBzdXBwb3J0IDxmaXJzdHRlcm0+cGFyYWxs ZWwgaW5kZXggc2NhbnM8L2ZpcnN0dGVybT4sIHdoaWNoIGFsbG93CkBAIC03NjYsNyArODg1LDcg QEAgYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgIGZ1bmN0aW9ucyBtYXkgYmUg aW1wbGVtZW50ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FuczoKICAgPC9wYXJhPgog Ci0gIDxwYXJhPgorICAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogU2l6ZQogYW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiAodm9pZCk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kaWNlcy5z Z21sIGIvZG9jL3NyYy9zZ21sL2luZGljZXMuc2dtbAppbmRleCA1NmZiZDQ1MTc4Li4zOGQwYmZh NGQ5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kaWNlcy5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9pbmRpY2VzLnNnbWwKQEAgLTEyOTcsNiArMTI5NywzNCBAQCBTRUxFQ1QgdGFyZ2V0IEZS T00gdGVzdHMgV0hFUkUgc3ViamVjdCA9ICdzb21lLXN1YmplY3QnIEFORCBzdWNjZXNzOwogICAg YW5kIGxhdGVyIHdpbGwgcmVjb2duaXplIHN1Y2ggY2FzZXMgYW5kIGFsbG93IGluZGV4LW9ubHkg c2NhbnMgdG8gYmUKICAgIGdlbmVyYXRlZCwgYnV0IG9sZGVyIHZlcnNpb25zIHdpbGwgbm90Lgog ICA8L3BhcmE+CisKKyAgPHNlY3QyIGlkPSJpbmRleGVzLWluZGV4LXNraXAtc2NhbnMiPgorICAg IDx0aXRsZT5JbmRleCBTa2lwIFNjYW5zPC90aXRsZT4KKworICAgIDxpbmRleHRlcm0gem9uZT0i aW5kZXhlcy1pbmRleC1za2lwLXNjYW5zIj4KKyAgICAgIDxwcmltYXJ5PmluZGV4PC9wcmltYXJ5 PgorICAgICAgPHNlY29uZGFyeT5pbmRleC1za2lwIHNjYW5zPC9zZWNvbmRhcnk+CisgICAgPC9p bmRleHRlcm0+CisgICAgPGluZGV4dGVybSB6b25lPSJpbmRleGVzLWluZGV4LXNraXAtc2NhbnMi PgorICAgICAgPHByaW1hcnk+aW5kZXgtc2tpcCBzY2FuPC9wcmltYXJ5PgorICAgIDwvaW5kZXh0 ZXJtPgorCisgICAgPHBhcmE+CisgICAgIFdoZW4gdGhlIHJvd3MgcmV0cmlldmVkIGZyb20gYW4g aW5kZXggc2NhbiBhcmUgdGhlbiBkZWR1cGxpY2F0ZWQgYnkKKyAgICAgZWxpbWluYXRpbmcgcm93 cyBtYXRjaGluZyBvbiBhIHByZWZpeCBvZiBpbmRleCBrZXlzIChlLmcuIHdoZW4gdXNpbmcKKyAg ICAgPGxpdGVyYWw+U0VMRUNUIERJU1RJTkNUPC9saXRlcmFsPiksIHRoZSBwbGFubmVyIHdpbGwg Y29uc2lkZXIKKyAgICAgc2tpcHBpbmcgZ3JvdXBzIG9mIHJvd3Mgd2l0aCBhIG1hdGNoaW5nIGtl eSBwcmVmaXguIFdoZW4gYSByb3cgd2l0aAorICAgICBhIHBhcnRpY3VsYXIgcHJlZml4IGlzIGZv dW5kLCByZW1haW5pbmcgcm93cyB3aXRoIHRoZSBzYW1lIGtleSBwcmVmaXgKKyAgICAgYXJlIHNr aXBwZWQuICBUaGUgbGFyZ2VyIHRoZSBudW1iZXIgb2Ygcm93cyB3aXRoIHRoZSBzYW1lIGtleSBw cmVmaXgKKyAgICAgcm93cyAoaS5lLiB0aGUgbG93ZXIgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBr ZXkgcHJlZml4ZXMgaW4gdGhlIGluZGV4KSwKKyAgICAgdGhlIG1vcmUgZWZmaWNpZW50IHRoaXMg aXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQWRkaXRpb25hbGx5LCBhIHNraXAg c2NhbiBjYW4gYmUgY29uc2lkZXJlZCBpbiByZWd1bGFyIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJh bD4KKyAgICAgIHF1ZXJpZXMuIFdoZW4gZmlsdGVyaW5nIG9uIGFuIG5vbi1sZWFkaW5nIGF0dHJp YnV0ZSBvZiBhbiBpbmRleCwgdGhlIHBsYW5uZXIKKyAgICAgIG1heSBjaG9vc2UgYSBza2lwIHNj YW4uCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgogIDwvc2VjdDE+CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IGNjYzlmYTA5NTkuLjdlZmNlOTRlZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMKQEAgLTExOCw2ICsxMTgsOSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1idWxrZGVsZXRlID0gYnJpbmJ1bGtkZWxldGU7CiAJYW1yb3V0aW5lLT5hbXZh Y3V1bWNsZWFudXAgPSBicmludmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJu ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2lu c2tpcHNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRza2lwdHVwbGUgPSBOVUxMOwogCWFt cm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBicmluY29zdGVzdGltYXRlOwogCWFtcm91dGluZS0+ YW1vcHRpb25zID0gYnJpbm9wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggNmQyZDcxYmUzMi4uZWQ1ZDUwNDBlZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTY2LDYgKzY2LDkgQEAgZ2luaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gZ2luYnVsa2RlbGV0ZTsK IAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGdpbnZhY3V1bWNsZWFudXA7CiAJYW1yb3V0 aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXNraXAgPSBOVUxMOworCWFt cm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0c2tpcHR1 cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gZ2luY29zdGVzdGltYXRl OwogCWFtcm91dGluZS0+YW1vcHRpb25zID0gZ2lub3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJv cGVydHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDA2ODNmNDJjMjUuLjM3NDhk ZDMwYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTg3LDYgKzg3LDkgQEAgZ2lzdGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGdpc3RidWxr ZGVsZXRlOwogCWFtcm91dGluZS0+YW12YWN1dW1jbGVhbnVwID0gZ2lzdHZhY3V1bWNsZWFudXA7 CiAJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IGdpc3RjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5h bXNraXAgPSBOVUxMOworCWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtZ2V0c2tpcHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRl ID0gZ2lzdGNvc3Rlc3RpbWF0ZTsKIAlhbXJvdXRpbmUtPmFtb3B0aW9ucyA9IGdpc3RvcHRpb25z OwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGdpc3Rwcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwppbmRleCBlYjM4MTA0OTRmLi5lYWY1NDMxYTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CkBAIC04NCw2ICs4NCw5IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0 aW5lLT5hbWJ1bGtkZWxldGUgPSBoYXNoYnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVt Y2xlYW51cCA9IGhhc2h2YWN1dW1jbGVhbnVwOwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBO VUxMOworCWFtcm91dGluZS0+YW1za2lwID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYmVnaW5za2lw c2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldHNraXB0dXBsZSA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IGhhc2hjb3N0ZXN0aW1hdGU7CiAJYW1yb3V0aW5lLT5hbW9w dGlvbnMgPSBoYXNob3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBOVUxMOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNWUyMjQ3OWI3YS4uYmQ1NGUyZmY2NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0xNCw3ICsxNCw5IEBACiAgKgkJaW5kZXhf b3BlbgkJLSBvcGVuIGFuIGluZGV4IHJlbGF0aW9uIGJ5IHJlbGF0aW9uIE9JRAogICoJCWluZGV4 X2Nsb3NlCQktIGNsb3NlIGFuIGluZGV4IHJlbGF0aW9uCiAgKgkJaW5kZXhfYmVnaW5zY2FuIC0g c3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQorICoJCWluZGV4X2JlZ2lu c2Nhbl9za2lwIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZSBhbmQg c2tpcHBpbmcKICAqCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3RhcnQgYSBzY2FuIG9mIGFu IGluZGV4IHdpdGggYW1nZXRiaXRtYXAKKyAqCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwX3NraXAg LSBzdGFydCBhIHNraXAgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5k ZXhfcmVzY2FuCS0gcmVzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2Fu CS0gZW5kIGEgc2NhbgogICoJCWluZGV4X2luc2VydAktIGluc2VydCBhbiBpbmRleCB0dXBsZSBp bnRvIGEgcmVsYXRpb24KQEAgLTI1LDE0ICsyNywxNyBAQAogICoJCWluZGV4X3BhcmFsbGVscmVz Y2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9i ZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KICAqCQlpbmRleF9n ZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRu ZXh0X3RpZF9za2lwCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2tpcCBzY2FuCiAgKgkJaW5k ZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCQlpbmRl eF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRl eF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNraXAgc2NhbgogICoJ CWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhf YnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3Zh Y3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CiAgKgkJaW5k ZXhfY2FuX3JldHVybgktIGRvZXMgaW5kZXggc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zPwogICoJ CWluZGV4X2dldHByb2NpZCAtIGdldCBhIHN1cHBvcnQgcHJvY2VkdXJlIE9JRAogICoJCWluZGV4 X2dldHByb2NpbmZvIC0gZ2V0IGEgc3VwcG9ydCBwcm9jZWR1cmUncyBsb29rdXAgaW5mbworICoJ CWluZGV4X3NraXAJCS0gYWR2YW5jZSBwYXN0IGR1cGxpY2F0ZSBrZXkgdmFsdWVzIGluIGEgc2Nh bgogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbmRleF8gcm91dGlu ZXMgd2hpY2ggdXNlZApAQCAtMjI0LDYgKzIyOSw3OCBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCXJldHVybiBzY2FuOwogfQogCitzdGF0aWMgSW5kZXhTY2FuRGVz YworaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsX3NraXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK KwkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmaXgsIFNuYXBzaG90IHNu YXBzaG90LAorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3Nu YXApCit7CisJSW5kZXhTY2FuRGVzYyBzY2FuOworCisJUkVMQVRJT05fQ0hFQ0tTOworCUNIRUNL X1JFTF9QUk9DRURVUkUoYW1iZWdpbnNraXBzY2FuKTsKKworCWlmICghKGluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXByZWRsb2NrcykpCisJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihpbmRleFJl bGF0aW9uLCBzbmFwc2hvdCk7CisKKwkvKgorCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgY291bnQg dG8gdGhlIHJlbGNhY2hlIGVudHJ5IHRocm91Z2hvdXQgdGhlIHNjYW4uCisJICovCisJUmVsYXRp b25JbmNyZW1lbnRSZWZlcmVuY2VDb3VudChpbmRleFJlbGF0aW9uKTsKKworCS8qCisJICogVGVs bCB0aGUgQU0gdG8gb3BlbiBhIHNjYW4uCisJICovCisJc2NhbiA9IGluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWJlZ2luc2tpcHNjYW4oaW5kZXhSZWxhdGlvbiwgbmtleXMsCisJCQkJCQkJCQkJ CQlub3JkZXJieXMsIHByZWZpeCk7CisJLyogSW5pdGlhbGl6ZSBpbmZvcm1hdGlvbiBmb3IgcGFy YWxsZWwgc2Nhbi4gKi8KKwlzY2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CisJc2Nhbi0+eHNf dGVtcF9zbmFwID0gdGVtcF9zbmFwOworCisJcmV0dXJuIHNjYW47Cit9CisKK0luZGV4U2NhbkRl c2MKK2luZGV4X2JlZ2luc2Nhbl9za2lwKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQlSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCVNuYXBzaG90IHNuYXBzaG90LAorCQkJCWludCBua2V5 cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZpeCkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW47CisK KwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsX3NraXAoaW5kZXhSZWxhdGlvbiwgbmtl eXMsIG5vcmRlcmJ5cywgcHJlZml4LCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOworCisJLyoKKwkg KiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhp bmcgZWxzZSB3YXMgc2V0CisJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCisJICovCisJ c2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCXNjYW4tPnhzX3NuYXBzaG90ID0g c25hcHNob3Q7CisKKwkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJs ZSAqLworCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBS ZWxhdGlvbik7CisKKwlyZXR1cm4gc2NhbjsKK30KKworSW5kZXhTY2FuRGVzYworaW5kZXhfYmVn aW5zY2FuX2JpdG1hcF9za2lwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCSAgIFNuYXBz aG90IHNuYXBzaG90LAorCQkJCQkgICBpbnQgbmtleXMsCisJCQkJCSAgIGludCBwcmVmaXgpCit7 CisJSW5kZXhTY2FuRGVzYyBzY2FuOworCisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bF9za2lwKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBwcmVmaXgsIHNuYXBzaG90LCBOVUxMLCBm YWxzZSk7CisKKwkvKgorCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNj YW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKKwkgKiB1cCBieSBSZWxhdGlvbkdldElu ZGV4U2Nhbi4KKwkgKi8KKwlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCisJcmV0dXJu IHNjYW47Cit9CisKIC8qCiAgKiBpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3RhcnQgYSBzY2Fu IG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKICAqCkBAIC01NTMsNiArNjMwLDQ1IEBAIGlu ZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCitJdGVtUG9pbnRlcgoraW5kZXhf Z2V0bmV4dF90aWRfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4 RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJYm9vbAkJZm91bmQ7CisKKwlTQ0FO X0NIRUNLUzsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHNraXB0dXBsZSk7CisKKwlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCisJLyoKKwkgKiBUaGUgQU0n cyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5kZXggZW50cnkgbWF0Y2hpbmcgdGhl IHNjYW4KKwkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElEIGludG8gc2Nhbi0+eHNfaGVhcHRpZC4g IEl0IHNob3VsZCBhbHNvIHNldAorCSAqIHNjYW4tPnhzX3JlY2hlY2sgYW5kIHBvc3NpYmx5IHNj YW4tPnhzX2l0dXAvc2Nhbi0+eHNfaGl0dXAsIHRob3VnaCB3ZQorCSAqIHBheSBubyBhdHRlbnRp b24gdG8gdGhvc2UgZmllbGRzIGhlcmUuCisJICovCisJZm91bmQgPSBzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1nZXRza2lwdHVwbGUoc2NhbiwgcHJlZml4RGlyLCBwb3N0Zml4RGly KTsKKworCS8qIFJlc2V0IGtpbGwgZmxhZyBpbW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCisJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOworCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBm YWxzZTsKKworCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICov CisJaWYgKCFmb3VuZCkKKwl7CisJCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBw aW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJ CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJCXJldHVy biBOVUxMOworCX0KKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlk KSk7CisKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEp OworCisJLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kLiAqLworCXJldHVy biAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4 X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCkBAIC02NDQs NiArNzYwLDM4IEBAIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqCiAJcmV0dXJuIGZhbHNlOwogfQog Citib29sCitpbmRleF9nZXRuZXh0X3Nsb3Rfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIsIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCWZvciAoOzspCisJeworCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGlu dWUpCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZDsKKworCQkJLyogVGltZSB0byBmZXRjaCB0aGUg bmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KKwkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkX3Nr aXAoc2NhbiwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQli cmVhazsKKworCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0 aWQpKTsKKwkJfQorCisJCS8qCisJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxl IGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQg YW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAqIHRo ZSBpbmRleC4KKwkJICovCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hl YXB0aWQpKTsKKwkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAq CQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4gaW5kZXgg c2NhbgogICoKQEAgLTczOSw2ICs4ODcsMjEgQEAgaW5kZXhfY2FuX3JldHVybihSZWxhdGlvbiBp bmRleFJlbGF0aW9uLCBpbnQgYXR0bm8pCiAJcmV0dXJuIGluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWNhbnJldHVybihpbmRleFJlbGF0aW9uLCBhdHRubyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCQlpbmRleF9za2lwCisgKgorICoJCVNraXAgcGFzdCBhbGwgdHVwbGVzIHdoZXJl IHRoZSBmaXJzdCAncHJlZml4JyBjb2x1bW5zIGhhdmUgdGhlCisgKgkJc2FtZSB2YWx1ZSBhcyB0 aGUgbGFzdCB0dXBsZSByZXR1cm5lZCBpbiB0aGUgY3VycmVudCBzY2FuLgorICogLS0tLS0tLS0t LS0tLS0tLQorICovCitib29sCitpbmRleF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcikKK3sKKwlTQ0FOX0NI RUNLUzsKKworCXJldHVybiBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1za2lwKHNj YW4sIHByZWZpeERpciwgcG9zdGZpeERpcik7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAq CQlpbmRleF9nZXRwcm9jaWQKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQppbmRleCBk Njk4MDhlNzhjLi5kYTk2YWMwMGE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKQEAg LTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAluYnRwYWdlLm8gXAogCW5idHJlZS5vIFwKIAluYnRz ZWFyY2gubyBcCisJbmJ0c2tpcC5vIFwKIAluYnRzb3J0Lm8gXAogCW5idHNwbGl0bG9jLm8gXAog CW5idHV0aWxzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggNzM1 NWUxZGJhMS4uNDgzODE4ZTFlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5j CkBAIC0xMDcsNyArMTA3LDcgQEAgX2J0X2RvaW5zZXJ0KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBs ZSBpdHVwLAogCWJvb2wJCWNoZWNraW5ndW5pcXVlID0gKGNoZWNrVW5pcXVlICE9IFVOSVFVRV9D SEVDS19OTyk7CiAKIAkvKiB3ZSBuZWVkIGFuIGluc2VydGlvbiBzY2FuIGtleSB0byBkbyBvdXIg c2VhcmNoLCBzbyBidWlsZCBvbmUgKi8KLQlpdHVwX2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBp dHVwKTsKKwlpdHVwX2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBpdHVwLCBOVUxMKTsKIAogCWlm IChjaGVja2luZ3VuaXF1ZSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4 IDViYzdjMzYxNmEuLjM2MTQxN2M2ODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CkBAIC0xOTY4LDcgKzE5NjgsNyBAQCBfYnRfcGFnZWRlbChSZWxhdGlvbiByZWwsIEJ1ZmZlciBs ZWFmYnVmLCBCVFZhY1N0YXRlICp2c3RhdGUpCiAJCQkJfQogCiAJCQkJLyogd2UgbmVlZCBhbiBp bnNlcnRpb24gc2NhbiBrZXkgZm9yIHRoZSBzZWFyY2gsIHNvIGJ1aWxkIG9uZSAqLwotCQkJCWl0 dXBfa2V5ID0gX2J0X21rc2NhbmtleShyZWwsIHRhcmdldGtleSk7CisJCQkJaXR1cF9rZXkgPSBf YnRfbWtzY2Fua2V5KHJlbCwgdGFyZ2V0a2V5LCBOVUxMKTsKIAkJCQkvKiBmaW5kIHRoZSBsZWZ0 bW9zdCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGluZyBwaXZvdC9oaWdoIGtleSAqLwogCQkJCWl0dXBf a2V5LT5waXZvdHNlYXJjaCA9IHRydWU7CiAJCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgaXR1 cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVBRCwgTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYwppbmRleCA0MGFkMDk1NmUwLi4wYWZhYTNlMzRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKQEAgLTEyMyw2ICsxMjMsNyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJ0YnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IGJ0dmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJu ID0gYnRjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5hbXNraXAgPSBidHNraXA7CiAJYW1yb3V0aW5l LT5hbWNvc3Rlc3RpbWF0ZSA9IGJ0Y29zdGVzdGltYXRlOwogCWFtcm91dGluZS0+YW1vcHRpb25z ID0gYnRvcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGJ0cHJvcGVydHk7CkBAIC0x MzAsOCArMTMxLDEwIEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW12YWxpZGF0ZSA9IGJ0dmFsaWRhdGU7CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBi dGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwor CWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gYnRiZWdpbnNjYW5fc2tpcDsKIAlhbXJvdXRp bmUtPmFtcmVzY2FuID0gYnRyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gYnRnZXR0 dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0c2tpcHR1cGxlID0gYnRnZXR0dXBsZV9za2lwOwogCWFt cm91dGluZS0+YW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2Nh biA9IGJ0ZW5kc2NhbjsKIAlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IGJ0bWFya3BvczsKQEAgLTIw OCw2ICsyMTEsMTUgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29s ICppc251bGwsCiAgKi8KIGJvb2wKIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKK3sKKwlyZXR1cm4gYnRnZXR0dXBsZV9za2lwKHNjYW4sIGRpciwgZGly KTsKK30KKworLyoKKyAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhl IHNjYW4uCisgKi8KK2Jvb2wKK2J0Z2V0dHVwbGVfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCWJvb2wJCXJlczsK QEAgLTIyNiw3ICsyMzgsNyBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJCWlmIChzby0+bnVtQXJyYXlLZXlzIDwgMCkKIAkJCXJldHVybiBmYWxz ZTsKIAotCQlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBkaXIpOworCQlfYnRfc3RhcnRfYXJy YXlfa2V5cyhzY2FuLCBwcmVmaXhEaXIpOwogCX0KIAogCS8qIFRoaXMgbG9vcCBoYW5kbGVzIGFk dmFuY2luZyB0byB0aGUgbmV4dCBhcnJheSBlbGVtZW50cywgaWYgYW55ICovCkBAIC0yMzgsNyAr MjUwLDcgQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCiAJ CSAqLwogCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJcmVzID0gX2J0 X2ZpcnN0KHNjYW4sIGRpcik7CisJCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgcHJlZml4RGlyLCBw b3N0Zml4RGlyKTsKIAkJZWxzZQogCQl7CiAJCQkvKgpAQCAtMjY1LDE0ICsyNzcsMTQgQEAgYnRn ZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyoKIAkJ CSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KIAkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nh biwgZGlyKTsKKwkJCXJlcyA9IF9idF9uZXh0KHNjYW4sIHByZWZpeERpciwgcG9zdGZpeERpcik7 CiAJCX0KIAogCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVybiBpdCAuLi4gKi8KIAkJaWYg KHJlcykKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBoYXZlIG1vcmUg YXJyYXkga2V5cyB0byBkZWFsIHdpdGggKi8KLQl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYm IF9idF9hZHZhbmNlX2FycmF5X2tleXMoc2NhbiwgZGlyKSk7CisJfSB3aGlsZSAoc28tPm51bUFy cmF5S2V5cyAmJiBfYnRfYWR2YW5jZV9hcnJheV9rZXlzKHNjYW4sIHByZWZpeERpcikpOwogCiAJ cmV0dXJuIHJlczsKIH0KQEAgLTMwMyw3ICszMTUsNyBAQCBidGdldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCWRvCiAJewogCQkvKiBGZXRjaCB0aGUgZmlyc3Qg cGFnZSAmIHR1cGxlICovCi0JCWlmIChfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24pKQorCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBGb3J3YXJk U2NhbkRpcmVjdGlvbikpCiAJCXsKIAkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBz Y2FubmluZyAqLwogCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwpAQCAtMzE5LDcgKzMz MSw3IEBAIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJ CQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCiAJ CQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJ aWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWlmICghX2J0 X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkK IAkJCQkJCWJyZWFrOwogCQkJCX0KIApAQCAtMzQwLDYgKzM1MiwxNiBAQCBidGdldGJpdG1hcChJ bmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogICovCiBJbmRleFNjYW5EZXNjCiBi dGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKK3sKKwly ZXR1cm4gYnRiZWdpbnNjYW5fc2tpcChyZWwsIG5rZXlzLCBub3JkZXJieXMsIC0xKTsKK30KKwor CisvKgorICoJYnRiZWdpbnNjYW4oKSAtLSBzdGFydCBhIHNjYW4gb24gYSBidHJlZSBpbmRleAor ICovCitJbmRleFNjYW5EZXNjCitidGJlZ2luc2Nhbl9za2lwKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzLCBpbnQgc2tpcFByZWZpeCkKIHsKIAlJbmRleFNjYW5EZXNjIHNj YW47CiAJQlRTY2FuT3BhcXVlIHNvOwpAQCAtMzc0LDEwICszOTYsMjAgQEAgYnRiZWdpbnNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJICovCiAJc28tPmN1cnJU dXBsZXMgPSBzby0+bWFya1R1cGxlcyA9IE5VTEw7CiAKKwlzby0+c2tpcERhdGEgPSBOVUxMOwor CiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAKIAlzY2FuLT5v cGFxdWUgPSBzbzsKIAorCWlmIChza2lwUHJlZml4ID4gMCkKKwl7CisJCXNvLT5za2lwRGF0YSA9 IChCVFNraXApIHBhbGxvYzAoc2l6ZW9mKEJUU2tpcERhdGEpKTsKKwkJc28tPnNraXBEYXRhLT5w cmVmaXggPSBza2lwUHJlZml4OworCisJCWVsb2coREVCVUcxLCAic2tpcCBwcmVmaXg6ICVkIiwg c2tpcFByZWZpeCk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ0MCw2ICs0NzIsMTUg QEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAJX2J0X3ByZXByb2Nlc3NfYXJyYXlfa2V5cyhzY2FuKTsKIH0KIAorLyoKKyAqIGJ0 c2tpcCgpIC0tIHNraXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBrZXkgcHJlZml4Cisg Ki8KK2Jvb2wKK2J0c2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4 RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJcmV0dXJuIF9idF9za2lwKHNjYW4s IHByZWZpeERpciwgcG9zdGZpeERpcik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9z ZSBkb3duIGEgc2NhbgogICovCkBAIC00NzMsNiArNTE0LDggQEAgYnRlbmRzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbikKIAlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmN1 cnJUdXBsZXMpOwogCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2Vl IGJ0cmVzY2FuICovCisJaWYgKF9idF9za2lwX2VuYWJsZWQoc28pKQorCQlwZnJlZShzby0+c2tp cERhdGEpOwogCXBmcmVlKHNvKTsKIH0KIApAQCAtNTU2LDYgKzU5OSw5IEBAIGJ0cmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQogCQkJCW1lbWNweShz by0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCiAJCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRU dXBsZU9mZnNldCk7CisJCQlpZiAoc28tPnNraXBEYXRhKQorCQkJCW1lbWNweSgmc28tPnNraXBE YXRhLT5jdXJQb3MsICZzby0+c2tpcERhdGEtPm1hcmtQb3MsCisJCQkJCSAgIHNpemVvZihCVFNr aXBQb3NEYXRhKSk7CiAJCX0KIAkJZWxzZQogCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3Vy clBvcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBkMTE3N2Q4Nzcy Li5mYWZmOWQ4NjUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTE3 LDE5ICsxNywxNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgdm9pZCBfYnRfZHJvcF9s b2NrX2FuZF9tYXliZV9waW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5Qb3Mgc3ApOwotc3Rh dGljIE9mZnNldE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBr ZXksIEJ1ZmZlciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbklu c2VydCBrZXksIFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0 aWMgYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIHN0YXRpYyB2b2lkIF9idF9zYXZlaXRl bShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCiAJCQkJCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1z KEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKQEAgLTM4LDE0ICszNiwxMiBAQCBzdGF0 aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5k ZXgsCiBzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJ CQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKLXN0YXRpYyBi b29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK LXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBkaXIpOwogc3RhdGljIGJvb2wgX2J0X3BhcmFsbGVs X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJCQkJ CSAgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIEJ1ZmZlciBfYnRfd2Fsa19sZWZ0KFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgU25hcHNob3Qgc25hcHNob3QpOwogc3RhdGljIGJvb2wgX2J0 X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGlj IGlubGluZSB2b2lkIF9idF9pbml0aWFsaXplX21vcmVfZGF0YShCVFNjYW5PcGFxdWUgc28sIFNj YW5EaXJlY3Rpb24gZGlyKTsKLQorc3RhdGljIGlubGluZSBib29sIF9idF9jaGVja2tleXNfZXh0 ZW5kZWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMs CisJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBpc1JlZ3VsYXJNb2RlLAorCQkJ CQkJCQkJCSAgYm9vbCAqY29udGludWVzY2FuLCBpbnQgKnByZWZpeHNraXBpbmRleCk7CiAKIC8q CiAgKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQpAQCAtNjEsNyArNTcsNyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgX2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKEJUU2Nhbk9wYXF1ZSBzbywg U2NhbkRpcmVjdGlvbiBkaXIpOwogICogd2lsbCByZW1haW4gaW4gc2hhcmVkIG1lbW9yeSBmb3Ig YXMgbG9uZyBhcyBpdCB0YWtlcyB0byBzY2FuIHRoZSBpbmRleAogICogYnVmZmVyIHBhZ2UuCiAg Ki8KLXN0YXRpYyB2b2lkCit2b2lkCiBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oSW5kZXhT Y2FuRGVzYyBzY2FuLCBCVFNjYW5Qb3Mgc3ApCiB7CiAJX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRl eFJlbGF0aW9uLCBzcC0+YnVmKTsKQEAgLTMzOSw3ICszMzUsNyBAQCBfYnRfbW92ZXJpZ2h0KFJl bGF0aW9uIHJlbCwKICAqIHRoZSBnaXZlbiBwYWdlLiAgX2J0X2JpbnNyY2goKSBoYXMgbm8gbG9j ayBvciByZWZjb3VudCBzaWRlIGVmZmVjdHMKICAqIG9uIHRoZSBidWZmZXIuCiAgKi8KLXN0YXRp YyBPZmZzZXROdW1iZXIKK09mZnNldE51bWJlcgogX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLAog CQkJQlRTY2FuSW5zZXJ0IGtleSwKIAkJCUJ1ZmZlciBidWYpCkBAIC04NDUsMjUgKzg0MSwyMyBA QCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiAgKiBpbiBsb2NhdGluZyB0aGUgc2NhbiBzdGFy dCBwb3NpdGlvbi4KICAqLwogYm9vbAotX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCitfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwogCUJ1ZmZlcgkJYnVmOwogCUJUU3RhY2sJCXN0YWNrOwogCU9mZnNl dE51bWJlciBvZmZudW07Ci0JU3RyYXRlZ3lOdW1iZXIgc3RyYXQ7Ci0JYm9vbAkJbmV4dGtleTsK IAlib29sCQlnb2JhY2s7CiAJQlRTY2FuSW5zZXJ0RGF0YSBpbnNrZXk7CiAJU2NhbktleQkJc3Rh cnRLZXlzW0lOREVYX01BWF9LRVlTXTsKIAlTY2FuS2V5RGF0YSBub3RudWxsa2V5c1tJTkRFWF9N QVhfS0VZU107CiAJaW50CQkJa2V5c0NvdW50ID0gMDsKLQlpbnQJCQlpOwogCWJvb2wJCXN0YXR1 czsKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbDsKIAlCVFNjYW5Qb3NJdGVtICpjdXJySXRl bTsKIAlCbG9ja051bWJlciBibGtubzsKKwlJbmRleFR1cGxlIGl0dXA7CiAKIAlBc3NlcnQoIUJU U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKIApAQCAtOTA0LDE4NCArODk4LDEzIEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQl9CiAJCWVs c2UgaWYgKGJsa25vICE9IEludmFsaWRCbG9ja051bWJlcikKIAkJewotCQkJaWYgKCFfYnRfcGFy YWxsZWxfcmVhZHBhZ2Uoc2NhbiwgYmxrbm8sIGRpcikpCisJCQlpZiAoIV9idF9wYXJhbGxlbF9y ZWFkcGFnZShzY2FuLCBibGtubywgcHJlZml4RGlyKSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQln b3RvIHJlYWRjb21wbGV0ZTsKIAkJfQogCX0KIAotCS8qLS0tLS0tLS0tLQotCSAqIEV4YW1pbmUg dGhlIHNjYW4ga2V5cyB0byBkaXNjb3ZlciB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBzY2Fu LgotCSAqCi0JICogV2Ugd2FudCB0byBpZGVudGlmeSB0aGUga2V5cyB0aGF0IGNhbiBiZSB1c2Vk IGFzIHN0YXJ0aW5nIGJvdW5kYXJpZXM7Ci0JICogdGhlc2UgYXJlID0sID4sIG9yID49IGtleXMg Zm9yIGEgZm9yd2FyZCBzY2FuIG9yID0sIDwsIDw9IGtleXMgZm9yCi0JICogYSBiYWNrd2FyZHMg c2Nhbi4gIFdlIGNhbiB1c2Uga2V5cyBmb3IgbXVsdGlwbGUgYXR0cmlidXRlcyBzbyBsb25nIGFz Ci0JICogdGhlIHByaW9yIGF0dHJpYnV0ZXMgaGFkIG9ubHkgPSwgPj0gKHJlc3AuID0sIDw9KSBr ZXlzLiAgT25jZSB3ZSBhY2NlcHQKLQkgKiBhID4gb3IgPCBib3VuZGFyeSBvciBmaW5kIGFuIGF0 dHJpYnV0ZSB3aXRoIG5vIGJvdW5kYXJ5ICh3aGljaCBjYW4gYmUKLQkgKiB0aG91Z2h0IG9mIGFz IHRoZSBzYW1lIGFzICI+IC1pbmZpbml0eSIpLCB3ZSBjYW4ndCB1c2Uga2V5cyBmb3IgYW55Ci0J ICogYXR0cmlidXRlcyB0byBpdHMgcmlnaHQsIGJlY2F1c2UgaXQgd291bGQgYnJlYWsgb3VyIHNp bXBsaXN0aWMgbm90aW9uCi0JICogb2Ygd2hhdCBpbml0aWFsIHBvc2l0aW9uaW5nIHN0cmF0ZWd5 IHRvIHVzZS4KLQkgKgotCSAqIFdoZW4gdGhlIHNjYW4ga2V5cyBpbmNsdWRlIGNyb3NzLXR5cGUg b3BlcmF0b3JzLCBfYnRfcHJlcHJvY2Vzc19rZXlzCi0JICogbWF5IG5vdCBiZSBhYmxlIHRvIGVs aW1pbmF0ZSByZWR1bmRhbnQga2V5czsgaW4gc3VjaCBjYXNlcyB3ZSB3aWxsCi0JICogYXJiaXRy YXJpbHkgcGljayBhIHVzYWJsZSBvbmUgZm9yIGVhY2ggYXR0cmlidXRlLiAgVGhpcyBpcyBjb3Jy ZWN0Ci0JICogYnV0IHBvc3NpYmx5IG5vdCBvcHRpbWFsIGJlaGF2aW9yLiAgKEZvciBleGFtcGxl LCB3aXRoIGtleXMgbGlrZQotCSAqICJ4ID49IDQgQU5EIHggPj0gNSIgd2Ugd291bGQgZWxlY3Qg dG8gc2NhbiBzdGFydGluZyBhdCB4PTQgd2hlbgotCSAqIHg9NSB3b3VsZCBiZSBtb3JlIGVmZmlj aWVudC4pICBTaW5jZSB0aGUgc2l0dWF0aW9uIG9ubHkgYXJpc2VzIGdpdmVuCi0JICogYSBwb29y bHktd29yZGVkIHF1ZXJ5IHBsdXMgYW4gaW5jb21wbGV0ZSBvcGZhbWlseSwgbGl2ZSB3aXRoIGl0 LgotCSAqCi0JICogV2hlbiBib3RoIGVxdWFsaXR5IGFuZCBpbmVxdWFsaXR5IGtleXMgYXBwZWFy IGZvciBhIHNpbmdsZSBhdHRyaWJ1dGUKLQkgKiAoYWdhaW4sIG9ubHkgcG9zc2libGUgd2hlbiBj cm9zcy10eXBlIG9wZXJhdG9ycyBhcHBlYXIpLCB3ZSAqbXVzdCoKLQkgKiBzZWxlY3Qgb25lIG9m IHRoZSBlcXVhbGl0eSBrZXlzIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQsIGJlY2F1c2UKLQkgKiBf YnRfY2hlY2trZXlzKCkgd2lsbCBzdG9wIHRoZSBzY2FuIGFzIHNvb24gYXMgYW4gZXF1YWxpdHkg cXVhbCBmYWlscy4KLQkgKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBrZXlzIGxpa2UgInggPj0g NCBBTkQgeCA9IDEwIiBhbmQgd2UgZWxlY3QgdG8KLQkgKiBzdGFydCBhdCB4PTQsIHdlIHdpbGwg ZmFpbCBhbmQgc3RvcCBiZWZvcmUgcmVhY2hpbmcgeD0xMC4gIElmIG11bHRpcGxlCi0JICogZXF1 YWxpdHkgcXVhbHMgc3Vydml2ZSBwcmVwcm9jZXNzaW5nLCBob3dldmVyLCBpdCBkb2Vzbid0IG1h dHRlciB3aGljaAotCSAqIG9uZSB3ZSB1c2UgLS0tIGJ5IGRlZmluaXRpb24sIHRoZXkgYXJlIGVp dGhlciByZWR1bmRhbnQgb3IKLQkgKiBjb250cmFkaWN0b3J5LgotCSAqCi0JICogQW55IHJlZ3Vs YXIgKG5vdCBTS19TRUFSQ0hOVUxMKSBrZXkgaW1wbGllcyBhIE5PVCBOVUxMIHF1YWxpZmllci4K LQkgKiBJZiB0aGUgaW5kZXggc3RvcmVzIG51bGxzIGF0IHRoZSBlbmQgb2YgdGhlIGluZGV4IHdl J2xsIGJlIHN0YXJ0aW5nCi0JICogZnJvbSwgYW5kIHdlIGhhdmUgbm8gYm91bmRhcnkga2V5IGZv ciB0aGUgY29sdW1uICh3aGljaCBtZWFucyB0aGUga2V5Ci0JICogd2UgZGVkdWNlZCBOT1QgTlVM TCBmcm9tIGlzIGFuIGluZXF1YWxpdHkga2V5IHRoYXQgY29uc3RyYWlucyB0aGUgb3RoZXIKLQkg KiBlbmQgb2YgdGhlIGluZGV4KSwgdGhlbiB3ZSBjb25zIHVwIGFuIGV4cGxpY2l0IFNLX1NFQVJD SE5PVE5VTEwga2V5IHRvCi0JICogdXNlIGFzIGEgYm91bmRhcnkga2V5LiAgSWYgd2UgZGlkbid0 IGRvIHRoaXMsIHdlIG1pZ2h0IGZpbmQgb3Vyc2VsdmVzCi0JICogdHJhdmVyc2luZyBhIGxvdCBv ZiBudWxsIGVudHJpZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLgotCSAqCi0JICogSW4gdGhp cyBsb29wLCByb3ctY29tcGFyaXNvbiBrZXlzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGtleXMg b24gdGhlaXIKLQkgKiBmaXJzdCAobGVmdG1vc3QpIGNvbHVtbnMuICBXZSdsbCBhZGQgb24gbG93 ZXItb3JkZXIgY29sdW1ucyBvZiB0aGUgcm93Ci0JICogY29tcGFyaXNvbiBiZWxvdywgaWYgcG9z c2libGUuCi0JICoKLQkgKiBUaGUgc2VsZWN0ZWQgc2NhbiBrZXlzIChhdCBtb3N0IG9uZSBwZXIg aW5kZXggY29sdW1uKSBhcmUgcmVtZW1iZXJlZCBieQotCSAqIHN0b3JpbmcgdGhlaXIgYWRkcmVz c2VzIGludG8gdGhlIGxvY2FsIHN0YXJ0S2V5c1tdIGFycmF5LgotCSAqLS0tLS0tLS0tLQotCSAq LwotCXN0cmF0X3RvdGFsID0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOwotCWlmIChzby0+bnVtYmVy T2ZLZXlzID4gMCkKLQl7Ci0JCUF0dHJOdW1iZXIJY3VyYXR0cjsKLQkJU2NhbktleQkJY2hvc2Vu OwotCQlTY2FuS2V5CQlpbXBsaWVzTk47Ci0JCVNjYW5LZXkJCWN1cjsKLQotCQkvKgotCQkgKiBj aG9zZW4gaXMgdGhlIHNvLWZhci1jaG9zZW4ga2V5IGZvciB0aGUgY3VycmVudCBhdHRyaWJ1dGUs IGlmIGFueS4KLQkJICogV2UgZG9uJ3QgY2FzdCB0aGUgZGVjaXNpb24gaW4gc3RvbmUgdW50aWwg d2UgcmVhY2gga2V5cyBmb3IgdGhlCi0JCSAqIG5leHQgYXR0cmlidXRlLgotCQkgKi8KLQkJY3Vy YXR0ciA9IDE7Ci0JCWNob3NlbiA9IE5VTEw7Ci0JCS8qIEFsc28gcmVtZW1iZXIgYW55IHNjYW5r ZXkgdGhhdCBpbXBsaWVzIGEgTk9UIE5VTEwgY29uc3RyYWludCAqLwotCQlpbXBsaWVzTk4gPSBO VUxMOwotCi0JCS8qCi0JCSAqIExvb3AgaXRlcmF0ZXMgZnJvbSAwIHRvIG51bWJlck9mS2V5cyBp bmNsdXNpdmU7IHdlIHVzZSB0aGUgbGFzdAotCQkgKiBwYXNzIHRvIGhhbmRsZSBhZnRlci1sYXN0 LWtleSBwcm9jZXNzaW5nLiAgQWN0dWFsIGV4aXQgZnJvbSB0aGUKLQkJICogbG9vcCBpcyBhdCBv bmUgb2YgdGhlICJicmVhayIgc3RhdGVtZW50cyBiZWxvdy4KLQkJICovCi0JCWZvciAoY3VyID0g c28tPmtleURhdGEsIGkgPSAwOzsgY3VyKyssIGkrKykKLQkJewotCQkJaWYgKGkgPj0gc28tPm51 bWJlck9mS2V5cyB8fCBjdXItPnNrX2F0dG5vICE9IGN1cmF0dHIpCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBEb25lIGxvb2tpbmcgYXQga2V5cyBmb3IgY3VyYXR0ci4gIElmIHdlIGRpZG4ndCBmaW5k IGEKLQkJCQkgKiB1c2FibGUgYm91bmRhcnkga2V5LCBzZWUgaWYgd2UgY2FuIGRlZHVjZSBhIE5P VCBOVUxMIGtleS4KLQkJCQkgKi8KLQkJCQlpZiAoY2hvc2VuID09IE5VTEwgJiYgaW1wbGllc05O ICE9IE5VTEwgJiYKLQkJCQkJKChpbXBsaWVzTk4tPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNfRklS U1QpID8KLQkJCQkJIFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA6Ci0JCQkJCSBTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKSkKLQkJCQl7Ci0JCQkJCS8qIFllcywgc28gYnVpbGQgdGhl IGtleSBpbiBub3RudWxsa2V5c1trZXlzQ291bnRdICovCi0JCQkJCWNob3NlbiA9ICZub3RudWxs a2V5c1trZXlzQ291bnRdOwotCQkJCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKGNob3NlbiwKLQkJ CQkJCQkJCQkgICAoU0tfU0VBUkNITk9UTlVMTCB8IFNLX0lTTlVMTCB8Ci0JCQkJCQkJCQkJCShp bXBsaWVzTk4tPnNrX2ZsYWdzICYKLQkJCQkJCQkJCQkJIChTS19CVF9ERVNDIHwgU0tfQlRfTlVM TFNfRklSU1QpKSksCi0JCQkJCQkJCQkJICAgY3VyYXR0ciwKLQkJCQkJCQkJCQkgICAoKGltcGxp ZXNOTi0+c2tfZmxhZ3MgJiBTS19CVF9OVUxMU19GSVJTVCkgPwotCQkJCQkJCQkJCQlCVEdyZWF0 ZXJTdHJhdGVneU51bWJlciA6Ci0JCQkJCQkJCQkJCUJUTGVzc1N0cmF0ZWd5TnVtYmVyKSwKLQkJ CQkJCQkJCQkgICBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsCi0JCQkJCQkJ CQkJICAgSW52YWxpZE9pZCwKLQkJCQkJCQkJCQkgICAoRGF0dW0pIDApOwotCQkJCX0KLQotCQkJ CS8qCi0JCQkJICogSWYgd2Ugc3RpbGwgZGlkbid0IGZpbmQgYSB1c2FibGUgYm91bmRhcnkga2V5 LCBxdWl0OyBlbHNlCi0JCQkJICogc2F2ZSB0aGUgYm91bmRhcnkga2V5IHBvaW50ZXIgaW4gc3Rh cnRLZXlzLgotCQkJCSAqLwotCQkJCWlmIChjaG9zZW4gPT0gTlVMTCkKLQkJCQkJYnJlYWs7Ci0J CQkJc3RhcnRLZXlzW2tleXNDb3VudCsrXSA9IGNob3NlbjsKLQotCQkJCS8qCi0JCQkJICogQWRq dXN0IHN0cmF0X3RvdGFsLCBhbmQgcXVpdCBpZiB3ZSBoYXZlIHN0b3JlZCBhID4gb3IgPAotCQkJ CSAqIGtleS4KLQkJCQkgKi8KLQkJCQlzdHJhdCA9IGNob3Nlbi0+c2tfc3RyYXRlZ3k7Ci0JCQkJ aWYgKHN0cmF0ICE9IEJURXF1YWxTdHJhdGVneU51bWJlcikKLQkJCQl7Ci0JCQkJCXN0cmF0X3Rv dGFsID0gc3RyYXQ7Ci0JCQkJCWlmIChzdHJhdCA9PSBCVEdyZWF0ZXJTdHJhdGVneU51bWJlciB8 fAotCQkJCQkJc3RyYXQgPT0gQlRMZXNzU3RyYXRlZ3lOdW1iZXIpCi0JCQkJCQlicmVhazsKLQkJ CQl9Ci0KLQkJCQkvKgotCQkJCSAqIERvbmUgaWYgdGhhdCB3YXMgdGhlIGxhc3QgYXR0cmlidXRl LCBvciBpZiBuZXh0IGtleSBpcyBub3QKLQkJCQkgKiBpbiBzZXF1ZW5jZSAoaW1wbHlpbmcgbm8g Ym91bmRhcnkga2V5IGlzIGF2YWlsYWJsZSBmb3IgdGhlCi0JCQkJICogbmV4dCBhdHRyaWJ1dGUp LgotCQkJCSAqLwotCQkJCWlmIChpID49IHNvLT5udW1iZXJPZktleXMgfHwKLQkJCQkJY3VyLT5z a19hdHRubyAhPSBjdXJhdHRyICsgMSkKLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKgotCQkJCSAqIFJl c2V0IGZvciBuZXh0IGF0dHIuCi0JCQkJICovCi0JCQkJY3VyYXR0ciA9IGN1ci0+c2tfYXR0bm87 Ci0JCQkJY2hvc2VuID0gTlVMTDsKLQkJCQlpbXBsaWVzTk4gPSBOVUxMOwotCQkJfQotCi0JCQkv KgotCQkJICogQ2FuIHdlIHVzZSB0aGlzIGtleSBhcyBhIHN0YXJ0aW5nIGJvdW5kYXJ5IGZvciB0 aGlzIGF0dHI/Ci0JCQkgKgotCQkJICogSWYgbm90LCBkb2VzIGl0IGltcGx5IGEgTk9UIE5VTEwg Y29uc3RyYWludD8gIChCZWNhdXNlCi0JCQkgKiBTS19TRUFSQ0hOVUxMIGtleXMgYXJlIGFsd2F5 cyBhc3NpZ25lZCBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCi0JCQkgKiAqYW55KiBpbmVxdWFsaXR5 IGtleSB3b3JrcyBmb3IgdGhhdDsgd2UgbmVlZCBub3QgdGVzdC4pCi0JCQkgKi8KLQkJCXN3aXRj aCAoY3VyLT5za19zdHJhdGVneSkKLQkJCXsKLQkJCQljYXNlIEJUTGVzc1N0cmF0ZWd5TnVtYmVy OgotCQkJCWNhc2UgQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjoKLQkJCQkJaWYgKGNob3NlbiA9 PSBOVUxMKQotCQkJCQl7Ci0JCQkJCQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkK LQkJCQkJCQljaG9zZW4gPSBjdXI7Ci0JCQkJCQllbHNlCi0JCQkJCQkJaW1wbGllc05OID0gY3Vy OwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOgot CQkJCQkvKiBvdmVycmlkZSBhbnkgbm9uLWVxdWFsaXR5IGNob2ljZSAqLwotCQkJCQljaG9zZW4g PSBjdXI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJl cjoKLQkJCQljYXNlIEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyOgotCQkJCQlpZiAoY2hvc2VuID09 IE5VTEwpCi0JCQkJCXsKLQkJCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0J CQkJCQkJY2hvc2VuID0gY3VyOwotCQkJCQkJZWxzZQotCQkJCQkJCWltcGxpZXNOTiA9IGN1cjsK LQkJCQkJfQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlrZXlzQ291bnQgPSBfYnRfY2hv b3NlX3NjYW5fa2V5cyhzby0+a2V5RGF0YSwgc28tPm51bWJlck9mS2V5cywgcHJlZml4RGlyLCBz dGFydEtleXMsIG5vdG51bGxrZXlzLCAmc3RyYXRfdG90YWwsIDApOwogCiAJLyoKIAkgKiBJZiB3 ZSBmb3VuZCBubyB1c2FibGUgYm91bmRhcnkga2V5cywgd2UgaGF2ZSB0byBzdGFydCBmcm9tIG9u ZSBlbmQgb2YKQEAgLTEwOTIsMjYwICs5MTUsMTEyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJYm9vbAkJbWF0Y2g7CiAKLQkJbWF0Y2gg PSBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyKTsKLQotCQlpZiAoIW1hdGNoKQorCQlpZiAoIV9idF9z a2lwX2VuYWJsZWQoc28pKQogCQl7Ci0JCQkvKiBObyBtYXRjaCwgc28gbWFyayAocGFyYWxsZWwp IHNjYW4gZmluaXNoZWQgKi8KLQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQl9CisJCQlt YXRjaCA9IF9idF9lbmRwb2ludChzY2FuLCBwcmVmaXhEaXIpOwogCi0JCXJldHVybiBtYXRjaDsK LQl9CisJCQlpZiAoIW1hdGNoKQorCQkJeworCQkJCS8qIE5vIG1hdGNoLCBzbyBtYXJrIChwYXJh bGxlbCkgc2NhbiBmaW5pc2hlZCAqLworCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJ fQogCi0JLyoKLQkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4g dGhlIGluZGV4LiAgU2V0IHVwIGFuCi0JICogaW5zZXJ0aW9uIHNjYW5rZXkgd2UgY2FuIHVzZSB0 byBzZWFyY2ggZm9yIHRoZSBib3VuZGFyeSBwb2ludCB3ZQotCSAqIGlkZW50aWZpZWQgYWJvdmUu ICBUaGUgaW5zZXJ0aW9uIHNjYW5rZXkgaXMgYnVpbHQgdXNpbmcgdGhlIGtleXMKLQkgKiBpZGVu dGlmaWVkIGJ5IHN0YXJ0S2V5c1tdLiAgKFJlbWFpbmluZyBpbnNlcnRpb24gc2NhbmtleSBmaWVs ZHMgYXJlCi0JICogaW5pdGlhbGl6ZWQgYWZ0ZXIgaW5pdGlhbC1wb3NpdGlvbmluZyBzdHJhdGVn eSBpcyBmaW5hbGl6ZWQuKQotCSAqLwotCUFzc2VydChrZXlzQ291bnQgPD0gSU5ERVhfTUFYX0tF WVMpOwotCWZvciAoaSA9IDA7IGkgPCBrZXlzQ291bnQ7IGkrKykKLQl7Ci0JCVNjYW5LZXkJCWN1 ciA9IHN0YXJ0S2V5c1tpXTsKKwkJCXJldHVybiBtYXRjaDsKKwkJfQorCQllbHNlCisJCXsKKwkJ CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJCQlCdWZmZXIJCWJ1ZjsKKwkJ CVBhZ2UJCXBhZ2U7CisJCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCQkJT2Zmc2V0TnVtYmVyIHN0 YXJ0OworCQkJQlRTa2lwQ29tcGFyZVJlc3VsdCBjbXAgPSB7MH07CiAKLQkJQXNzZXJ0KGN1ci0+ c2tfYXR0bm8gPT0gaSArIDEpOworCQkJX2J0X3NraXBfY3JlYXRlX3NjYW5rZXlzKHJlbCwgc28p OwogCi0JCWlmIChjdXItPnNrX2ZsYWdzICYgU0tfUk9XX0hFQURFUikKLQkJewogCQkJLyoKLQkJ CSAqIFJvdyBjb21wYXJpc29uIGhlYWRlcjogbG9vayB0byB0aGUgZmlyc3Qgcm93IG1lbWJlciBp bnN0ZWFkLgotCQkJICoKLQkJCSAqIFRoZSBtZW1iZXIgc2NhbmtleXMgYXJlIGFscmVhZHkgaW4g aW5zZXJ0aW9uIGZvcm1hdCAoaWUsIHRoZXkKLQkJCSAqIGhhdmUgc2tfZnVuYyA9IDMtd2F5LWNv bXBhcmlzb24gZnVuY3Rpb24pLCBidXQgd2UgaGF2ZSB0byB3YXRjaAotCQkJICogb3V0IGZvciBu dWxscywgd2hpY2ggX2J0X3ByZXByb2Nlc3Nfa2V5cyBkaWRuJ3QgY2hlY2suIEEgbnVsbAotCQkJ ICogaW4gdGhlIGZpcnN0IHJvdyBtZW1iZXIgbWFrZXMgdGhlIGNvbmRpdGlvbiB1bm1hdGNoYWJs ZSwganVzdAotCQkJICogbGlrZSBxdWFsX29rID0gZmFsc2UuCisJCQkgKiBTY2FuIGRvd24gdG8g dGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UgYW5kIHBvc2l0aW9uCisJCQkgKiB0 aGUgc2NhbiBvbiB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGl0ZW0gb24gdGhhdCBwYWdlLgor CQkJICogU3RhcnQgdGhlIHNraXAgc2NhbiBmcm9tIHRoZXJlIHRvIGZpbmQgdGhlIGZpcnN0IG1h dGNoaW5nIGl0ZW0KIAkJCSAqLwotCQkJU2NhbktleQkJc3Via2V5ID0gKFNjYW5LZXkpIERhdHVt R2V0UG9pbnRlcihjdXItPnNrX2FyZ3VtZW50KTsKKwkJCWJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQo cmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChwcmVmaXhEaXIpLCBzY2FuLT54c19zbmFw c2hvdCk7CiAKLQkJCUFzc2VydChzdWJrZXktPnNrX2ZsYWdzICYgU0tfUk9XX01FTUJFUik7Ci0J CQlpZiAoc3Via2V5LT5za19mbGFncyAmIFNLX0lTTlVMTCkKKwkJCWlmICghQnVmZmVySXNWYWxp ZChidWYpKQogCQkJewotCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJCS8qCisJCQkJ ICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVy IHRvIGxvY2sKKwkJCQkgKiBleGlzdHMuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1JlbGF0 aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCW1lbWNweShpbnNrZXkuc2Nh bmtleXMgKyBpLCBzdWJrZXksIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCi0JCQkvKgotCQkJICog SWYgdGhlIHJvdyBjb21wYXJpc29uIGlzIHRoZSBsYXN0IHBvc2l0aW9uaW5nIGtleSB3ZSBhY2Nl cHRlZCwKLQkJCSAqIHRyeSB0byBhZGQgYWRkaXRpb25hbCBrZXlzIGZyb20gdGhlIGxvd2VyLW9y ZGVyIHJvdyBtZW1iZXJzLgotCQkJICogKElmIHdlIGFjY2VwdGVkIGluZGVwZW5kZW50IGNvbmRp dGlvbnMgb24gYWRkaXRpb25hbCBpbmRleAotCQkJICogY29sdW1ucywgd2UgdXNlIHRob3NlIGlu c3RlYWQgLS0tIGRvZXNuJ3Qgc2VlbSB3b3J0aCB0cnlpbmcgdG8KLQkJCSAqIGRldGVybWluZSB3 aGljaCBpcyBtb3JlIHJlc3RyaWN0aXZlLikgIE5vdGUgdGhhdCB0aGlzIGlzIE9LCi0JCQkgKiBl dmVuIGlmIHRoZSByb3cgY29tcGFyaXNvbiBpcyBvZiAiPiIgb3IgIjwiIHR5cGUsIGJlY2F1c2Ug dGhlCi0JCQkgKiBjb25kaXRpb24gYXBwbGllZCB0byBhbGwgYnV0IHRoZSBsYXN0IHJvdyBtZW1i ZXIgaXMgZWZmZWN0aXZlbHkKLQkJCSAqICI+PSIgb3IgIjw9IiwgYW5kIHNvIHRoZSBleHRyYSBr ZXlzIGRvbid0IGJyZWFrIHRoZSBwb3NpdGlvbmluZwotCQkJICogc2NoZW1lLiAgQnV0LCBieSB0 aGUgc2FtZSB0b2tlbiwgaWYgd2UgYXJlbid0IGFibGUgdG8gdXNlIGFsbAotCQkJICogdGhlIHJv dyBtZW1iZXJzLCB0aGVuIHRoZSBwYXJ0IG9mIHRoZSByb3cgY29tcGFyaXNvbiB0aGF0IHdlCi0J CQkgKiBkaWQgdXNlIGhhcyB0byBiZSB0cmVhdGVkIGFzIGp1c3QgYSAiPj0iIG9yICI8PSIgY29u ZGl0aW9uLCBhbmQKLQkJCSAqIHNvIHdlJ2QgYmV0dGVyIGFkanVzdCBzdHJhdF90b3RhbCBhY2Nv cmRpbmdseS4KLQkJCSAqLwotCQkJaWYgKGkgPT0ga2V5c0NvdW50IC0gMSkKKwkJCVByZWRpY2F0 ZUxvY2tQYWdlKHJlbCwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSwgc2Nhbi0+eHNfc25hcHNo b3QpOworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwkJCW9wYXF1ZSA9IChCVFBhZ2VP cGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihwYWdlKTsKKwkJCUFzc2VydChQX0lTTEVBRihv cGFxdWUpKTsKKworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocHJlZml4RGlyKSkKIAkJ CXsKLQkJCQlib29sCQl1c2VkX2FsbF9zdWJrZXlzID0gZmFsc2U7CisJCQkJLyogVGhlcmUgY291 bGQgYmUgZGVhZCBwYWdlcyB0byB0aGUgbGVmdCwgc28gbm90IHRoaXM6ICovCisJCQkJLyogQXNz ZXJ0KFBfTEVGVE1PU1Qob3BhcXVlKSk7ICovCiAKLQkJCQlBc3NlcnQoIShzdWJrZXktPnNrX2Zs YWdzICYgU0tfUk9XX0VORCkpOwotCQkJCWZvciAoOzspCi0JCQkJewotCQkJCQlzdWJrZXkrKzsK LQkJCQkJQXNzZXJ0KHN1YmtleS0+c2tfZmxhZ3MgJiBTS19ST1dfTUVNQkVSKTsKLQkJCQkJaWYg KHN1YmtleS0+c2tfYXR0bm8gIT0ga2V5c0NvdW50ICsgMSkKLQkJCQkJCWJyZWFrOwkvKiBvdXQt b2Ytc2VxdWVuY2UsIGNhbid0IHVzZSBpdCAqLwotCQkJCQlpZiAoc3Via2V5LT5za19zdHJhdGVn eSAhPSBjdXItPnNrX3N0cmF0ZWd5KQotCQkJCQkJYnJlYWs7CS8qIHdyb25nIGRpcmVjdGlvbiwg Y2FuJ3QgdXNlIGl0ICovCi0JCQkJCWlmIChzdWJrZXktPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQot CQkJCQkJYnJlYWs7CS8qIGNhbid0IHVzZSBudWxsIGtleXMgKi8KLQkJCQkJQXNzZXJ0KGtleXND b3VudCA8IElOREVYX01BWF9LRVlTKTsKLQkJCQkJbWVtY3B5KGluc2tleS5zY2Fua2V5cyArIGtl eXNDb3VudCwgc3Via2V5LAotCQkJCQkJICAgc2l6ZW9mKFNjYW5LZXlEYXRhKSk7Ci0JCQkJCWtl eXNDb3VudCsrOwotCQkJCQlpZiAoc3Via2V5LT5za19mbGFncyAmIFNLX1JPV19FTkQpCi0JCQkJ CXsKLQkJCQkJCXVzZWRfYWxsX3N1YmtleXMgPSB0cnVlOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0K LQkJCQl9Ci0JCQkJaWYgKCF1c2VkX2FsbF9zdWJrZXlzKQotCQkJCXsKLQkJCQkJc3dpdGNoIChz dHJhdF90b3RhbCkKLQkJCQkJewotCQkJCQkJY2FzZSBCVExlc3NTdHJhdGVneU51bWJlcjoKLQkJ CQkJCQlzdHJhdF90b3RhbCA9IEJUTGVzc0VxdWFsU3RyYXRlZ3lOdW1iZXI7Ci0JCQkJCQkJYnJl YWs7Ci0JCQkJCQljYXNlIEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyOgotCQkJCQkJCXN0cmF0X3Rv dGFsID0gQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJlcjsKLQkJCQkJCQlicmVhazsKLQkJCQkJ fQotCQkJCX0KLQkJCQlicmVhazsJCQkvKiBkb25lIHdpdGggb3V0ZXIgbG9vcCAqLworCQkJCXN0 YXJ0ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKIAkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJ CS8qCi0JCQkgKiBPcmRpbmFyeSBjb21wYXJpc29uIGtleS4gIFRyYW5zZm9ybSB0aGUgc2VhcmNo LXN0eWxlIHNjYW4ga2V5Ci0JCQkgKiB0byBhbiBpbnNlcnRpb24gc2NhbiBrZXkgYnkgcmVwbGFj aW5nIHRoZSBza19mdW5jIHdpdGggdGhlCi0JCQkgKiBhcHByb3ByaWF0ZSBidHJlZSBjb21wYXJp c29uIGZ1bmN0aW9uLgotCQkJICoKLQkJCSAqIElmIHNjYW5rZXkgb3BlcmF0b3IgaXMgbm90IGEg Y3Jvc3MtdHlwZSBjb21wYXJpc29uLCB3ZSBjYW4gdXNlCi0JCQkgKiB0aGUgY2FjaGVkIGNvbXBh cmlzb24gZnVuY3Rpb247IG90aGVyd2lzZSBnb3R0YSBsb29rIGl0IHVwIGluCi0JCQkgKiB0aGUg Y2F0YWxvZ3MuICAoVGhhdCBjYW4ndCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbiwgc2luY2Ug bm8KLQkJCSAqIGluZGV4c2NhbiBpbml0aWF0ZWQgYnkgc3lzY2FjaGUgbG9va3VwIHdpbGwgdXNl IGNyb3NzLWRhdGEtdHlwZQotCQkJICogb3BlcmF0b3JzLikKLQkJCSAqCi0JCQkgKiBXZSBzdXBw b3J0IHRoZSBjb252ZW50aW9uIHRoYXQgc2tfc3VidHlwZSA9PSBJbnZhbGlkT2lkIG1lYW5zCi0J CQkgKiB0aGUgb3BjbGFzcyBpbnB1dCB0eXBlOyB0aGlzIGlzIGEgaGFjayB0byBzaW1wbGlmeSBs aWZlIGZvcgotCQkJICogU2NhbktleUluaXQoKS4KLQkJCSAqLwotCQkJaWYgKGN1ci0+c2tfc3Vi dHlwZSA9PSByZWwtPnJkX29wY2ludHlwZVtpXSB8fAotCQkJCWN1ci0+c2tfc3VidHlwZSA9PSBJ bnZhbGlkT2lkKQorCQkJZWxzZSBpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQocHJlZml4RGly KSkKIAkJCXsKLQkJCQlGbWdySW5mbyAgICpwcm9jaW5mbzsKLQotCQkJCXByb2NpbmZvID0gaW5k ZXhfZ2V0cHJvY2luZm8ocmVsLCBjdXItPnNrX2F0dG5vLCBCVE9SREVSX1BST0MpOwotCQkJCVNj YW5LZXlFbnRyeUluaXRpYWxpemVXaXRoSW5mbyhpbnNrZXkuc2NhbmtleXMgKyBpLAotCQkJCQkJ CQkJCQkgICBjdXItPnNrX2ZsYWdzLAotCQkJCQkJCQkJCQkgICBjdXItPnNrX2F0dG5vLAotCQkJ CQkJCQkJCQkgICBJbnZhbGlkU3RyYXRlZ3ksCi0JCQkJCQkJCQkJCSAgIGN1ci0+c2tfc3VidHlw ZSwKLQkJCQkJCQkJCQkJICAgY3VyLT5za19jb2xsYXRpb24sCi0JCQkJCQkJCQkJCSAgIHByb2Np bmZvLAotCQkJCQkJCQkJCQkgICBjdXItPnNrX2FyZ3VtZW50KTsKKwkJCQlBc3NlcnQoUF9SSUdI VE1PU1Qob3BhcXVlKSk7CisKKwkJCQlzdGFydCA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFn ZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJUmVnUHJvY2VkdXJlIGNtcF9wcm9jOwotCi0J CQkJY21wX3Byb2MgPSBnZXRfb3BmYW1pbHlfcHJvYyhyZWwtPnJkX29wZmFtaWx5W2ldLAotCQkJ CQkJCQkJCQkgcmVsLT5yZF9vcGNpbnR5cGVbaV0sCi0JCQkJCQkJCQkJCSBjdXItPnNrX3N1YnR5 cGUsCi0JCQkJCQkJCQkJCSBCVE9SREVSX1BST0MpOwotCQkJCWlmICghUmVnUHJvY2VkdXJlSXNW YWxpZChjbXBfcHJvYykpCi0JCQkJCWVsb2coRVJST1IsICJtaXNzaW5nIHN1cHBvcnQgZnVuY3Rp b24gJWQoJXUsJXUpIGZvciBhdHRyaWJ1dGUgJWQgb2YgaW5kZXggXCIlc1wiIiwKLQkJCQkJCSBC VE9SREVSX1BST0MsIHJlbC0+cmRfb3BjaW50eXBlW2ldLCBjdXItPnNrX3N1YnR5cGUsCi0JCQkJ CQkgY3VyLT5za19hdHRubywgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7Ci0JCQkJU2Nh bktleUVudHJ5SW5pdGlhbGl6ZShpbnNrZXkuc2NhbmtleXMgKyBpLAotCQkJCQkJCQkJICAgY3Vy LT5za19mbGFncywKLQkJCQkJCQkJCSAgIGN1ci0+c2tfYXR0bm8sCi0JCQkJCQkJCQkgICBJbnZh bGlkU3RyYXRlZ3ksCi0JCQkJCQkJCQkgICBjdXItPnNrX3N1YnR5cGUsCi0JCQkJCQkJCQkgICBj dXItPnNrX2NvbGxhdGlvbiwKLQkJCQkJCQkJCSAgIGNtcF9wcm9jLAotCQkJCQkJCQkJICAgY3Vy LT5za19hcmd1bWVudCk7CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2NhbiBkaXJlY3Rpb246 ICVkIiwgKGludCkgcHJlZml4RGlyKTsKIAkJCX0KLQkJfQotCX0KIAotCS8qLS0tLS0tLS0tLQot CSAqIEV4YW1pbmUgdGhlIHNlbGVjdGVkIGluaXRpYWwtcG9zaXRpb25pbmcgc3RyYXRlZ3kgdG8g ZGV0ZXJtaW5lIGV4YWN0bHkKLQkgKiB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBzY2FuLCBh bmQgc2V0IGZsYWcgdmFyaWFibGVzIHRvIGNvbnRyb2wgdGhlCi0JICogY29kZSBiZWxvdy4KLQkg KgotCSAqIElmIG5leHRrZXkgPSBmYWxzZSwgX2J0X3NlYXJjaCBhbmQgX2J0X2JpbnNyY2ggd2ls bCBsb2NhdGUgdGhlIGZpcnN0Ci0JICogaXRlbSA+PSBzY2FuIGtleS4gIElmIG5leHRrZXkgPSB0 cnVlLCB0aGV5IHdpbGwgbG9jYXRlIHRoZSBmaXJzdAotCSAqIGl0ZW0gPiBzY2FuIGtleS4KLQkg KgotCSAqIElmIGdvYmFjayA9IHRydWUsIHdlIHdpbGwgdGhlbiBzdGVwIGJhY2sgb25lIGl0ZW0s IHdoaWxlIGlmCi0JICogZ29iYWNrID0gZmFsc2UsIHdlIHdpbGwgc3RhcnQgdGhlIHNjYW4gb24g dGhlIGxvY2F0ZWQgaXRlbS4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLQlzd2l0Y2ggKHN0cmF0X3Rv dGFsKQotCXsKLQkJY2FzZSBCVExlc3NTdHJhdGVneU51bWJlcjoKLQotCQkJLyoKLQkJCSAqIEZp bmQgZmlyc3QgaXRlbSA+PSBzY2Fua2V5LCB0aGVuIGJhY2sgdXAgb25lIHRvIGFycml2ZSBhdCBs YXN0Ci0JCQkgKiBpdGVtIDwgc2NhbmtleS4gIChOb3RlOiB0aGlzIHBvc2l0aW9uaW5nIHN0cmF0 ZWd5IGlzIG9ubHkgdXNlZAotCQkJICogZm9yIGEgYmFja3dhcmQgc2Nhbiwgc28gdGhhdCBpcyBh bHdheXMgdGhlIGNvcnJlY3Qgc3RhcnRpbmcKLQkJCSAqIHBvc2l0aW9uLikKLQkJCSAqLwotCQkJ bmV4dGtleSA9IGZhbHNlOwotCQkJZ29iYWNrID0gdHJ1ZTsKLQkJCWJyZWFrOwotCi0JCWNhc2Ug QlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjoKLQotCQkJLyoKLQkJCSAqIEZpbmQgZmlyc3QgaXRl bSA+IHNjYW5rZXksIHRoZW4gYmFjayB1cCBvbmUgdG8gYXJyaXZlIGF0IGxhc3QKLQkJCSAqIGl0 ZW0gPD0gc2NhbmtleS4gIChOb3RlOiB0aGlzIHBvc2l0aW9uaW5nIHN0cmF0ZWd5IGlzIG9ubHkg dXNlZAotCQkJICogZm9yIGEgYmFja3dhcmQgc2Nhbiwgc28gdGhhdCBpcyBhbHdheXMgdGhlIGNv cnJlY3Qgc3RhcnRpbmcKLQkJCSAqIHBvc2l0aW9uLikKLQkJCSAqLwotCQkJbmV4dGtleSA9IHRy dWU7Ci0JCQlnb2JhY2sgPSB0cnVlOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBCVEVxdWFsU3RyYXRl Z3lOdW1iZXI6Ci0KLQkJCS8qCi0JCQkgKiBJZiBhIGJhY2t3YXJkIHNjYW4gd2FzIHNwZWNpZmll ZCwgbmVlZCB0byBzdGFydCB3aXRoIGxhc3QgZXF1YWwKLQkJCSAqIGl0ZW0gbm90IGZpcnN0IG9u ZS4KKwkJCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZlciB3ZSBoYXZlIHBpbm5lZCAqLworCQkJc28t PmN1cnJQb3MuYnVmID0gYnVmOworCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRC bG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOworCisJCQlpdHVwID0gX2J0X2dldF90dXBsZV9m cm9tX29mZnNldChzbywgc3RhcnQpOworCQkJLyogaW4gc29tZSBjYXNlcywgd2UgY2FuIChvciBo YXZlIHRvKSBza2lwIGZ1cnRoZXIgaW5zaWRlIHRoZSBwcmVmaXguCisJCQkgKiB3ZSBjYW4gZG8g dGhpcyBpZiB3ZSBoYXZlIGV4dHJhIHF1YWxzIGJlY29taW5nIGF2YWlsYWJsZSwgZWcuCisJCQkg KiBXSEVSRSBiPTIgb24gYW4gaW5kZXggb24gKGEsYikuCisJCQkgKiBXZSBtdXN0LCBpZiB0aGlz IGlzIG5vdCByZWd1bGFyIG1vZGUgKHByZWZpeERpciE9cG9zdGZpeERpcikuCisJCQkgKiBCZWNh dXNlIHRoaXMgbWVhbnMgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJlZml4LCB3aGlsZSB3ZSBz aG91bGQgYmUKKwkJCSAqIGF0IHRoZSBiZWdpbm5pbmcuCiAJCQkgKi8KLQkJCWlmIChTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJaWYgKF9idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJf c2tpcChzby0+c2tpcERhdGEsIHBvc3RmaXhEaXIsIDApIHx8CisJCQkJCSFfYnRfc2tpcF9pc19y ZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSkKIAkJCXsKLQkJCQkvKgotCQkJCSAq IFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIDw9IHN0cmF0ZWd5LiAgV2Ugd2lsbCBjaGVjayBhdCB0 aGUKLQkJCQkgKiBlbmQgd2hldGhlciB0aGUgZm91bmQgaXRlbSBpcyBhY3R1YWxseSA9LgotCQkJ CSAqLwotCQkJCW5leHRrZXkgPSB0cnVlOwotCQkJCWdvYmFjayA9IHRydWU7CisJCQkJX2J0X3Nr aXBfZXh0cmFfY29uZGl0aW9ucyhzY2FuLCAmaXR1cCwgJnN0YXJ0LCBwcmVmaXhEaXIsIHBvc3Rm aXhEaXIsICZjbXApOwogCQkJfQotCQkJZWxzZQorCQkJLyogbm93IGZpbmQgdGhlIG5leHQgbWF0 Y2hpbmcgdHVwbGUgKi8KKwkJCW1hdGNoID0gX2J0X3NraXBfZmluZF9uZXh0KHNjYW4sIGl0dXAs IHN0YXJ0LCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOworCQkJaWYgKCFtYXRjaCkKIAkJCXsKLQkJ CQkvKgotCQkJCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlID49IHN0cmF0ZWd5LiAgV2Ugd2ls bCBjaGVjayBhdCB0aGUKLQkJCQkgKiBlbmQgd2hldGhlciB0aGUgZm91bmQgaXRlbSBpcyBhY3R1 YWxseSA9LgotCQkJCSAqLwotCQkJCW5leHRrZXkgPSBmYWxzZTsKLQkJCQlnb2JhY2sgPSBmYWxz ZTsKKwkJCQlpZiAoX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlkKHNvKSkKKwkJCQkJX2J0X2Ryb3Bf bG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CisJCQkJcmV0dXJuIGZhbHNl OwogCQkJfQotCQkJYnJlYWs7CiAKLQkJY2FzZSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVy OgorCQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CiAK LQkJCS8qCi0JCQkgKiBGaW5kIGZpcnN0IGl0ZW0gPj0gc2NhbmtleS4gIChUaGlzIGlzIG9ubHkg dXNlZCBmb3IgZm9yd2FyZAotCQkJICogc2NhbnMuKQotCQkJICovCi0JCQluZXh0a2V5ID0gZmFs c2U7Ci0JCQlnb2JhY2sgPSBmYWxzZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQlRHcmVhdGVyU3Ry YXRlZ3lOdW1iZXI6Ci0KLQkJCS8qCi0JCQkgKiBGaW5kIGZpcnN0IGl0ZW0gPiBzY2Fua2V5LiAg KFRoaXMgaXMgb25seSB1c2VkIGZvciBmb3J3YXJkCi0JCQkgKiBzY2Fucy4pCi0JCQkgKi8KLQkJ CW5leHRrZXkgPSB0cnVlOwotCQkJZ29iYWNrID0gZmFsc2U7Ci0JCQlicmVhazsKKwkJCWN1cnJJ dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCQlzY2Fu LT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7CisJCQlpZiAoc2Nhbi0+eHNfd2FudF9p dHVwKQorCQkJCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsg Y3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKIAotCQlkZWZhdWx0OgotCQkJLyogY2FuJ3QgZ2V0IGhl cmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIHN0cmF0X3RvdGFsOiAlZCIsIChpbnQpIHN0cmF0X3RvdGFsKTsKLQkJCXJldHVybiBmYWxz ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CiAJfQogCi0JLyogSW5pdGlhbGl6ZSByZW1haW5pbmcg aW5zZXJ0aW9uIHNjYW4ga2V5IGZpZWxkcyAqLwotCV9idF9tZXRhdmVyc2lvbihyZWwsICZpbnNr ZXkuaGVhcGtleXNwYWNlLCAmaW5za2V5LmFsbGVxdWFsaW1hZ2UpOwotCWluc2tleS5hbnludWxs a2V5cyA9IGZhbHNlOyAvKiB1bnVzZWQgKi8KLQlpbnNrZXkubmV4dGtleSA9IG5leHRrZXk7Ci0J aW5za2V5LnBpdm90c2VhcmNoID0gZmFsc2U7Ci0JaW5za2V5LnNjYW50aWQgPSBOVUxMOwotCWlu c2tleS5rZXlzeiA9IGtleXNDb3VudDsKKwlpZiAoIV9idF9jcmVhdGVfaW5zZXJ0aW9uX3NjYW5f a2V5KHJlbCwgcHJlZml4RGlyLCBzdGFydEtleXMsIGtleXNDb3VudCwgJmluc2tleSwgJnN0cmF0 X3RvdGFsLCAgJmdvYmFjaykpCisJeworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KIAogCS8qCiAJICogVXNlIHRoZSBtYW51ZmFjdHVyZWQgaW5zZXJ0aW9u IHNjYW4ga2V5IHRvIGRlc2NlbmQgdGhlIHRyZWUgYW5kCkBAIC0xMzc3LDcgKzEwNTIsNyBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJUHJlZGlj YXRlTG9ja1BhZ2UocmVsLCBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpLAogCQkJCQkJICBzY2Fu LT54c19zbmFwc2hvdCk7CiAKLQlfYnRfaW5pdGlhbGl6ZV9tb3JlX2RhdGEoc28sIGRpcik7CisJ X2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKHNvLCBwcmVmaXhEaXIpOwogCiAJLyogcG9zaXRpb24g dG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAqLwogCW9mZm51bSA9IF9idF9iaW5zcmNo KHJlbCwgJmluc2tleSwgYnVmKTsKQEAgLTE0MDcsMjMgKzEwODIsODEgQEAgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJQXNzZXJ0KCFCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSk7CiAJc28tPmN1cnJQb3MuYnVmID0gYnVmOwogCi0JLyoKLQkg KiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4uCi0JICovCi0J aWYgKCFfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0pKQorCWlmIChfYnRfc2tpcF9lbmFi bGVkKHNvKSkKIAl7Ci0JCS8qCi0JCSAqIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0 YSBvbiB0aGlzIHBhZ2UuICBUcnkgdG8gYWR2YW5jZSB0bwotCQkgKiB0aGUgbmV4dCBwYWdlLiAg UmV0dXJuIGZhbHNlIGlmIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgZGF0YSBhdCBhbGwuCisJCVBhZ2Ug cGFnZTsKKwkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwkJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwkJ Ym9vbCBtYXRjaDsKKwkJQlRTa2lwQ29tcGFyZVJlc3VsdCBjbXAgPSB7MH07CisKKwkJLyogZmly c3QgY3JlYXRlIHRoZSBza2lwIHNjYW4ga2V5cyAqLworCQlfYnRfc2tpcF9jcmVhdGVfc2Nhbmtl eXMocmVsLCBzbyk7CisKKwkJLyogcmVtZW1iZXIgd2hpY2ggcGFnZSB3ZSBoYXZlIHBpbm5lZCAq LworCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJy UG9zLmJ1Zik7CisKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJ b3BhcXVlID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOworCQlt aW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCQkvKiBfYmluc3JjaCArIGdvYmFjayBw YXJhbWV0ZXIgY2FuIGxlYXZlIHRoZSBvZmZudW0gYmVmb3JlIHRoZSBmaXJzdCBpdGVtIG9uIHRo ZSBwYWdlCisJCSAqIG9yIGFmdGVyIHRoZSBsYXN0IGl0ZW0gb24gdGhlIHBhZ2UuIGlmIHRoYXQg aXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBlaXRoZXIgc3RlcAorCQkgKiBiYWNrIG9yIGZvcndhcmQg b25lIHBhZ2UKIAkJICovCi0JCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28t PmN1cnJQb3MuYnVmKTsKLQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKKwkJaWYgKG9m Zm51bSA8IG1pbm9mZikKKwkJeworCQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1 Zik7CisJCQlpZiAoIV9idF9zdGVwX2JhY2tfcGFnZShzY2FuLCAmaXR1cCwgJm9mZm51bSkpCisJ CQkJcmV0dXJuIGZhbHNlOworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVm KTsKKwkJfQorCQllbHNlIGlmIChvZmZudW0gPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2Up KQorCQl7CisJCQlCbG9ja051bWJlciBuZXh0ID0gb3BhcXVlLT5idHBvX25leHQ7CisJCQlfYnRf dW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKKwkJCWlmICghX2J0X3N0ZXBfZm9yd2Fy ZF9wYWdlKHNjYW4sIG5leHQsICZpdHVwLCAmb2ZmbnVtKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJ CQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQl9CisKKwkJaXR1cCA9 IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIG9mZm51bSk7CisJCS8qIGNoZWNrIGlmIHdl IGNhbiBza2lwIGV2ZW4gbW9yZSBiZWNhdXNlIHdlIGNhbiB1c2UgbmV3IGNvbmRpdGlvbnMgKi8K KwkJaWYgKF9idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJfc2tpcChzby0+c2tpcERhdGEsIHBvc3Rm aXhEaXIsIGluc2tleS5rZXlzeikgfHwKKwkJCQkhX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHBy ZWZpeERpciwgcG9zdGZpeERpcikpCisJCXsKKwkJCV9idF9za2lwX2V4dHJhX2NvbmRpdGlvbnMo c2NhbiwgJml0dXAsICZvZmZudW0sIHByZWZpeERpciwgcG9zdGZpeERpciwgJmNtcCk7CisJCX0K KwkJLyogbm93IGZpbmQgdGhlIHR1cGxlICovCisJCW1hdGNoID0gX2J0X3NraXBfZmluZF9uZXh0 KHNjYW4sIGl0dXAsIG9mZm51bSwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKwkJaWYgKCFtYXRj aCkKKwkJeworCQkJaWYgKF9idF9za2lwX2lzX2Fsd2F5c192YWxpZChzbykpCisJCQkJX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CiAJCQlyZXR1cm4gZmFs c2U7CisJCX0KKworCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oc2NhbiwgJnNvLT5jdXJy UG9zKTsKIAl9CiAJZWxzZQogCXsKLQkJLyogRHJvcCB0aGUgbG9jaywgYW5kIG1heWJlIHRoZSBw aW4sIG9uIHRoZSBjdXJyZW50IHBhZ2UgKi8KLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KHNjYW4sICZzby0+Y3VyclBvcyk7CisJCS8qCisJCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUg Zmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KKwkJICovCisJCWlmICghX2J0X3JlYWRwYWdlKHNjYW4s IHByZWZpeERpciwgJm9mZm51bSwgdHJ1ZSkpCisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSdzIG5v IGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhpcyBwYWdlLiAgVHJ5IHRvIGFkdmFuY2UgdG8K KwkJCSAqIHRoZSBuZXh0IHBhZ2UuICBSZXR1cm4gZmFsc2UgaWYgdGhlcmUncyBubyBtYXRjaGlu ZyBkYXRhIGF0IGFsbC4KKwkJCSAqLworCQkJX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0 aW9uLCBzby0+Y3VyclBvcy5idWYpOworCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgcHJlZml4 RGlyKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBEcm9wIHRo ZSBsb2NrLCBhbmQgbWF5YmUgdGhlIHBpbiwgb24gdGhlIGN1cnJlbnQgcGFnZSAqLworCQkJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CisJCX0KIAl9CiAK IHJlYWRjb21wbGV0ZToKQEAgLTE0NTEsMjkgKzExODQsMTEzIEBAIHJlYWRjb21wbGV0ZToKICAq CQlzby0+Y3VyclBvcy5idWYgdG8gSW52YWxpZEJ1ZmZlci4KICAqLwogYm9vbAotX2J0X25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK19idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZp eERpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CiAJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0 dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlmIHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICog c3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQorCWlmICghX2J0X3NraXBfZW5hYmxlZChzbykpCiAJewotCQlpZiAo Kytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKKwkJLyoKKwkJ ICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBu byBtb3JlLCB0cnkgdG8KKwkJICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YS4KKwkJ ICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHByZWZpeERpcikpCiAJCXsKLQkJCWlm ICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOworCQkJaWYgKCsr c28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQl7CisJCQkJ aWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgcHJlZml4RGlyKSkKKwkJCQkJcmV0dXJuIGZhbHNlOwor CQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwg c28tPmN1cnJQb3MuZmlyc3RJdGVtKQorCQkJeworCQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4s IHByZWZpeERpcikpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KIAkJfQogCX0KIAllbHNlCiAJ ewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0p CisJCWJvb2wgbWF0Y2g7CisJCUluZGV4VHVwbGUgaXR1cCA9IE5VTEw7CisJCU9mZnNldE51bWJl ciBvZmZudW0gPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOworCisJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKHBvc3RmaXhEaXIpKQogCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIp KQotCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNv LT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJeworCQkJCWlmIChwcmVmaXhEaXIgIT0gc28tPnNraXBE YXRhLT5jdXJQb3MubmV4dERpcmVjdGlvbikKKwkJCQl7CisJCQkJCS8qIHRoaXMgaGFwcGVucyB3 aGVuIGRvaW5nIGEgY3Vyc29yIHNjYW4gYW5kIGNoYW5naW5nCisJCQkJCSAqIGRpcmVjdGlvbiBp biB0aGUgbWVhbnRpbWUuIGVnLiBmaXJzdCBmZXRjaCBmb3J3YXJkcywKKwkJCQkJICogdGhlbiBi YWNrd2FyZHMuCisJCQkJCSAqIHdlICphbHdheXMqIGp1c3QgZ28gdG8gdGhlIG5leHQgcGFnZSBp bnN0ZWFkIG9mIHNraXBwaW5nLAorCQkJCQkgKiBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBzYWZl IG9wdGlvbi4KKwkJCQkJICovCisJCQkJCXNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRBY3Rpb24g PSBTa2lwU3RhdGVOZXh0OworCQkJCQlzby0+c2tpcERhdGEtPmN1clBvcy5uZXh0RGlyZWN0aW9u ID0gcHJlZml4RGlyOworCQkJCX0KKworCQkJCWlmIChzby0+c2tpcERhdGEtPmN1clBvcy5uZXh0 QWN0aW9uID09IFNraXBTdGF0ZU5leHQpCisJCQkJeworCQkJCQkvKiB3ZSBzaG91bGQganVzdCBn byBmb3J3YXJkcyBvbmUgcGFnZSwgbm8gc2tpcHBpbmcgaXMgbmVjZXNzYXJ5ICovCisJCQkJCWlm ICghX2J0X3N0ZXBfZm9yd2FyZF9wYWdlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLCAmaXR1 cCwgJm9mZm51bSkpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWVsc2UgaWYgKHNv LT5za2lwRGF0YS0+Y3VyUG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU3RvcCkKKwkJCQl7CisJ CQkJCS8qIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5kZXgsIG9yIHdlIGNhbm5vdCBm aW5kIGFueSBtb3JlIGtleXMgKi8KKwkJCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3Vy clBvcyk7CisJCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOworCQkJCQlyZXR1 cm4gZmFsc2U7CisJCQkJfQorCisJCQkJLyogbm93IGZpbmQgdGhlIG5leHQgdHVwbGUgKi8KKwkJ CQltYXRjaCA9IF9idF9za2lwX2ZpbmRfbmV4dChzY2FuLCBpdHVwLCBvZmZudW0sIHByZWZpeERp ciwgcG9zdGZpeERpcik7CisJCQkJaWYgKCFtYXRjaCkKKwkJCQl7CisJCQkJCWlmIChfYnRfc2tp cF9pc19hbHdheXNfdmFsaWQoc28pKQorCQkJCQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KHNjYW4sICZzby0+Y3VyclBvcyk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CisJCQl9CisJCX0K KwkJZWxzZQorCQl7CisJCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCisJCQl7CisJCQkJaWYgKHByZWZpeERpciAhPSBzby0+c2tpcERhdGEtPmN1 clBvcy5uZXh0RGlyZWN0aW9uKQorCQkJCXsKKwkJCQkJc28tPnNraXBEYXRhLT5jdXJQb3MubmV4 dEFjdGlvbiA9IFNraXBTdGF0ZU5leHQ7CisJCQkJCXNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRE aXJlY3Rpb24gPSBwcmVmaXhEaXI7CisJCQkJfQorCisJCQkJaWYgKHNvLT5za2lwRGF0YS0+Y3Vy UG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlTmV4dCkKKwkJCQl7CisJCQkJCWlmICghX2J0X3N0 ZXBfYmFja19wYWdlKHNjYW4sICZpdHVwLCAmb2ZmbnVtKSkKKwkJCQkJCXJldHVybiBmYWxzZTsK KwkJCQl9CisJCQkJZWxzZSBpZiAoc28tPnNraXBEYXRhLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBT a2lwU3RhdGVTdG9wKQorCQkJCXsKKwkJCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3Vy clBvcyk7CisJCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOworCQkJCQlyZXR1 cm4gZmFsc2U7CisJCQkJfQorCisJCQkJLyogbm93IGZpbmQgdGhlIG5leHQgdHVwbGUgKi8KKwkJ CQltYXRjaCA9IF9idF9za2lwX2ZpbmRfbmV4dChzY2FuLCBpdHVwLCBvZmZudW0sIHByZWZpeERp ciwgcG9zdGZpeERpcik7CisJCQkJaWYgKCFtYXRjaCkKKwkJCQl7CisJCQkJCWlmIChfYnRfc2tp cF9pc19hbHdheXNfdmFsaWQoc28pKQorCQkJCQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KHNjYW4sICZzby0+Y3VyclBvcyk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CisJCQl9CiAJCX0K IAl9CiAKQEAgLTE1MDUsOCArMTMyMiw4IEBAIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAgKgogICogUmV0dXJucyB0cnVlIGlmIGFueSBtYXRjaGluZyBp dGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFsc2UgaWYgbm9uZS4KICAqLwotc3RhdGljIGJvb2wK LV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz ZXROdW1iZXIgb2ZmbnVtKQorYm9vbAorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciAqb2ZmbnVtLCBib29sIGlzUmVndWxhck1v ZGUpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVBhZ2UJCXBhZ2U7CkBAIC0xNTE2LDYgKzEzMzMsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAlpbnQJ CQlpdGVtSW5kZXg7CiAJYm9vbAkJY29udGludWVzY2FuOwogCWludAkJCWluZG5hdHRzOworCWlu dAkJCXByZWZpeHNraXBpbmRleDsKIAogCS8qCiAJICogV2UgbXVzdCBoYXZlIHRoZSBidWZmZXIg cGlubmVkIGFuZCBsb2NrZWQsIGJ1dCB0aGUgdXN1YWwgbWFjcm8gY2FuJ3QgYmUKQEAgLTE1NzQs MTEgKzEzOTIsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCS8qIGxvYWQgaXRlbXNbXSBpbiBhc2Nl bmRpbmcgb3JkZXIgKi8KIAkJaXRlbUluZGV4ID0gMDsKIAotCQlvZmZudW0gPSBNYXgob2ZmbnVt LCBtaW5vZmYpOworCQkqb2ZmbnVtID0gTWF4KCpvZmZudW0sIG1pbm9mZik7CiAKLQkJd2hpbGUg KG9mZm51bSA8PSBtYXhvZmYpCisJCXdoaWxlICgqb2ZmbnVtIDw9IG1heG9mZikKIAkJewotCQkJ SXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJdGVtSWQJCWlp ZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgKm9mZm51bSk7CiAJCQlJbmRleFR1cGxlCWl0dXA7CiAK IAkJCS8qCkBAIC0xNTg3LDE5ICsxNDA1LDE5IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJICovCiAJ CQlpZiAoc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgJiYgSXRlbUlkSXNEZWFkKGlpZCkpCiAJ CQl7Ci0JCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOworCQkJCSpvZmZudW0g PSBPZmZzZXROdW1iZXJOZXh0KCpvZmZudW0pOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQlp dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CiAKLQkJCWlmIChfYnRf Y2hlY2trZXlzKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsICZjb250aW51ZXNjYW4pKQorCQkJ aWYgKF9idF9jaGVja2tleXNfZXh0ZW5kZWQoc2NhbiwgaXR1cCwgaW5kbmF0dHMsIGRpciwgaXNS ZWd1bGFyTW9kZSwgJmNvbnRpbnVlc2NhbiwgJnByZWZpeHNraXBpbmRleCkpCiAJCQl7CiAJCQkJ LyogdHVwbGUgcGFzc2VzIGFsbCBzY2FuIGtleSBjb25kaXRpb25zICovCiAJCQkJaWYgKCFCVHJl ZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJ CQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9z YXZlaXRlbShzbywgaXRlbUluZGV4LCAqb2ZmbnVtLCBpdHVwKTsKIAkJCQkJaXRlbUluZGV4Kys7 CiAJCQkJfQogCQkJCWVsc2UKQEAgLTE2MTEsMjYgKzE0MjksMzAgQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0p CiAJCQkJCSAqIFRJRAogCQkJCQkgKi8KIAkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3Nl dHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zZXR1cHBv c3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCAqb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVw bGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKIAkJCQkJCQkJCQkJICBpdHVwKTsKIAkJCQkJaXRlbUlu ZGV4Kys7CiAJCQkJCS8qIFJlbWVtYmVyIGFkZGl0aW9uYWwgVElEcyAqLwogCQkJCQlmb3IgKGlu dCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7Ci0J CQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9i dF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgKm9mZm51bSwKIAkJCQkJCQkJCQkJQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAogCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CiAJ CQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJfQogCQkJCX0KIAkJCX0KKworCQkJKm9mZm51bSA9IE9m ZnNldE51bWJlck5leHQoKm9mZm51bSk7CisKIAkJCS8qIFdoZW4gIWNvbnRpbnVlc2NhbiwgdGhl cmUgY2FuJ3QgYmUgYW55IG1vcmUgbWF0Y2hlcywgc28gc3RvcCAqLwogCQkJaWYgKCFjb250aW51 ZXNjYW4pCiAJCQkJYnJlYWs7Ci0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVt KTsKKwkJCWlmICghaXNSZWd1bGFyTW9kZSAmJiBwcmVmaXhza2lwaW5kZXggIT0gLTEpCisJCQkJ YnJlYWs7CiAJCX0KKwkJKm9mZm51bSA9IE9mZnNldE51bWJlclByZXYoKm9mZm51bSk7CiAKIAkJ LyoKIAkJICogV2UgZG9uJ3QgbmVlZCB0byB2aXNpdCBwYWdlIHRvIHRoZSByaWdodCB3aGVuIHRo ZSBoaWdoIGtleQpAQCAtMTY1MCw3ICsxNDcyLDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCQlpbnQJ CQl0cnVuY2F0dDsKIAogCQkJdHJ1bmNhdHQgPSBCVHJlZVR1cGxlR2V0TkF0dHMoaXR1cCwgc2Nh bi0+aW5kZXhSZWxhdGlvbik7Ci0JCQlfYnRfY2hlY2trZXlzKHNjYW4sIGl0dXAsIHRydW5jYXR0 LCBkaXIsICZjb250aW51ZXNjYW4pOworCQkJX2J0X2NoZWNra2V5cyhzY2FuLCBpdHVwLCB0cnVu Y2F0dCwgZGlyLCAmY29udGludWVzY2FuLCBOVUxMKTsKIAkJfQogCiAJCWlmICghY29udGludWVz Y2FuKQpAQCAtMTY2NiwxMSArMTQ4OCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJLyogbG9hZCBp dGVtc1tdIGluIGRlc2NlbmRpbmcgb3JkZXIgKi8KIAkJaXRlbUluZGV4ID0gTWF4VElEc1BlckJU cmVlUGFnZTsKIAotCQlvZmZudW0gPSBNaW4ob2ZmbnVtLCBtYXhvZmYpOworCQkqb2ZmbnVtID0g TWluKCpvZmZudW0sIG1heG9mZik7CiAKLQkJd2hpbGUgKG9mZm51bSA+PSBtaW5vZmYpCisJCXdo aWxlICgqb2ZmbnVtID49IG1pbm9mZikKIAkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRl bUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwg Km9mZm51bSk7CiAJCQlJbmRleFR1cGxlCWl0dXA7CiAJCQlib29sCQl0dXBsZV9hbGl2ZTsKIAkJ CWJvb2wJCXBhc3Nlc19xdWFsczsKQEAgLTE2ODcsMTAgKzE1MDksMTAgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0pCiAJCQkgKi8KIAkJCWlmIChzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyAmJiBJdGVtSWRJ c0RlYWQoaWlkKSkKIAkJCXsKLQkJCQlBc3NlcnQob2ZmbnVtID49IFBfRklSU1REQVRBS0VZKG9w YXF1ZSkpOwotCQkJCWlmIChvZmZudW0gPiBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKQorCQkJCUFz c2VydCgqb2ZmbnVtID49IFBfRklSU1REQVRBS0VZKG9wYXF1ZSkpOworCQkJCWlmICgqb2ZmbnVt ID4gUF9GSVJTVERBVEFLRVkob3BhcXVlKSkKIAkJCQl7Ci0JCQkJCW9mZm51bSA9IE9mZnNldE51 bWJlclByZXYob2ZmbnVtKTsKKwkJCQkJKm9mZm51bSA9IE9mZnNldE51bWJlclByZXYoKm9mZm51 bSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIApAQCAtMTcwMSw4ICsxNTIzLDggQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0pCiAKIAkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlk KTsKIAotCQkJcGFzc2VzX3F1YWxzID0gX2J0X2NoZWNra2V5cyhzY2FuLCBpdHVwLCBpbmRuYXR0 cywgZGlyLAotCQkJCQkJCQkJCSAmY29udGludWVzY2FuKTsKKwkJCXBhc3Nlc19xdWFscyA9IF9i dF9jaGVja2tleXNfZXh0ZW5kZWQoc2NhbiwgaXR1cCwgaW5kbmF0dHMsIGRpciwKKwkJCQkJCQkJ CQkJCSAgaXNSZWd1bGFyTW9kZSwgJmNvbnRpbnVlc2NhbiwgJnByZWZpeHNraXBpbmRleCk7CiAJ CQlpZiAocGFzc2VzX3F1YWxzICYmIHR1cGxlX2FsaXZlKQogCQkJewogCQkJCS8qIHR1cGxlIHBh c3NlcyBhbGwgc2NhbiBrZXkgY29uZGl0aW9ucyAqLwpAQCAtMTcxMCw3ICsxNTMyLDcgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0pCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCAqb2ZmbnVtLCBpdHVwKTsKIAkJCQl9CiAJ CQkJZWxzZQogCQkJCXsKQEAgLTE3MjgsMjggKzE1NTAsMzIgQEAgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJ CQkJCSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKIAkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zZXR1 cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCAqb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVl VHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKIAkJCQkJCQkJCQkJICBpdHVwKTsKIAkJCQkJLyog UmVtZW1iZXIgYWRkaXRpb25hbCBUSURzICovCiAJCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgQlRy ZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0t OwotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJ CQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsICpvZmZudW0sCiAJCQkJCQkJCQkJ CUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKIAkJCQkJCQkJCQkJdHVwbGVPZmZzZXQp OwogCQkJCQl9CiAJCQkJfQogCQkJfQorCisJCQkqb2ZmbnVtID0gT2Zmc2V0TnVtYmVyUHJldigq b2ZmbnVtKTsKKwogCQkJaWYgKCFjb250aW51ZXNjYW4pCiAJCQl7CiAJCQkJLyogdGhlcmUgY2Fu J3QgYmUgYW55IG1vcmUgbWF0Y2hlcywgc28gc3RvcCAqLwogCQkJCXNvLT5jdXJyUG9zLm1vcmVM ZWZ0ID0gZmFsc2U7CiAJCQkJYnJlYWs7CiAJCQl9Ci0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJl clByZXYob2ZmbnVtKTsKKwkJCWlmICghaXNSZWd1bGFyTW9kZSAmJiBwcmVmaXhza2lwaW5kZXgg IT0gLTEpCisJCQkJYnJlYWs7CiAJCX0KKwkJKm9mZm51bSA9IE9mZnNldE51bWJlck5leHQoKm9m Zm51bSk7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKIAkJc28tPmN1cnJQb3MuZmlyc3RJ dGVtID0gaXRlbUluZGV4OwpAQCAtMTg1Nyw3ICsxNjgzLDcgQEAgX2J0X3NhdmVwb3N0aW5naXRl bShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCiAg KiByZWFkIGxvY2ssIG9uIHRoYXQgcGFnZS4gIElmIHdlIGRvIG5vdCBob2xkIHRoZSBwaW4sIHdl IHNldCBzby0+Y3VyclBvcy5idWYKICAqIHRvIEludmFsaWRCdWZmZXIuICBXZSByZXR1cm4gdHJ1 ZSB0byBpbmRpY2F0ZSBzdWNjZXNzLgogICovCi1zdGF0aWMgYm9vbAorYm9vbAogX2J0X3N0ZXBw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwpAQCAtMTg4NSw2ICsxNzExLDkg QEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CWlmIChzby0+bWFya1R1cGxlcykKIAkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1cnJU dXBsZXMsCiAJCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaWYgKHNvLT5z a2lwRGF0YSkKKwkJCW1lbWNweSgmc28tPnNraXBEYXRhLT5tYXJrUG9zLCAmc28tPnNraXBEYXRh LT5jdXJQb3MsCisJCQkJICAgc2l6ZW9mKEJUU2tpcFBvc0RhdGEpKTsKIAkJc28tPm1hcmtQb3Mu aXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7CiAJCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7 CiAJfQpAQCAtMTk2NCw3ICsxNzkzLDcgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBy ZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGRyb3AgYWxsCiAgKiBsb2NrcyBhbmQg cGlucywgc2V0IHNvLT5jdXJyUG9zLmJ1ZiB0byBJbnZhbGlkQnVmZmVyLCBhbmQgcmV0dXJuIGZh bHNlLgogICovCi1zdGF0aWMgYm9vbAorYm9vbAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNj YW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC0xOTcyLDYgKzE4 MDEsNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIg Ymxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyKQogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9w YXF1ZTsKIAlib29sCQlzdGF0dXM7CisJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAogCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAKQEAgLTIwMDIsNyArMTgzMiw4IEBAIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCQkJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBibGtubywgc2Nhbi0+eHNfc25hcHNob3Qp OwogCQkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJ CQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3Ag Ki8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVl KSkpCisJCQkJb2ZmbnVtID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwkJCQlpZiAoX2J0X3Jl YWRwYWdlKHNjYW4sIGRpciwgJm9mZm51bSwgdHJ1ZSkpCiAJCQkJCWJyZWFrOwogCQkJfQogCQkJ ZWxzZSBpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMKQpAQCAtMjEwNCw3ICsxOTM1LDgg QEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25v LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIEJ1ZmZlckdl dEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksIHNjYW4tPnhzX3NuYXBzaG90KTsKIAkJCQkv KiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJCS8qIG5v dGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlp ZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkp CisJCQkJb2ZmbnVtID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKwkJCQlpZiAoX2J0 X3JlYWRwYWdlKHNjYW4sIGRpciwgJm9mZm51bSwgdHJ1ZSkpCiAJCQkJCWJyZWFrOwogCQkJfQog CQkJZWxzZSBpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMKQpAQCAtMjE3Miw3ICsyMDA0 LDcgQEAgX2J0X3BhcmFsbGVsX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1i ZXIgYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gYmUgaGFsZi1kZWFkOyB0aGUgY2Fs bGVyIHNob3VsZCBjaGVjayB0aGF0IGNvbmRpdGlvbiBhbmQgc3RlcCBsZWZ0CiAgKiBhZ2FpbiBp ZiBpdCdzIGltcG9ydGFudC4KICAqLwotc3RhdGljIEJ1ZmZlcgorQnVmZmVyCiBfYnRfd2Fsa19s ZWZ0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgU25hcHNob3Qgc25hcHNob3QpCiB7CiAJUGFn ZQkJcGFnZTsKQEAgLTI0MzYsNyArMjI2OCw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRo ZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRwYWdlKHNjYW4s IGRpciwgc3RhcnQpKQorCWlmICghX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgJnN0YXJ0LCB0cnVl KSkKIAl7CiAJCS8qCiAJCSAqIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0 aGlzIHBhZ2UuICBUcnkgdG8gYWR2YW5jZSB0bwpAQCAtMjQ2NSw3ICsyMjk3LDcgQEAgX2J0X2Vu ZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiBfYnRfaW5p dGlhbGl6ZV9tb3JlX2RhdGEoKSAtLSBpbml0aWFsaXplIG1vcmVMZWZ0L21vcmVSaWdodCBhcHBy b3ByaWF0ZWx5CiAgKiBmb3Igc2NhbiBkaXJlY3Rpb24KICAqLwotc3RhdGljIGlubGluZSB2b2lk CitpbmxpbmUgdm9pZAogX2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKEJUU2Nhbk9wYXF1ZSBzbywg U2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJLyogaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQg YXBwcm9wcmlhdGVseSBmb3Igc2NhbiBkaXJlY3Rpb24gKi8KQEAgLTI0ODIsMyArMjMxNCwyNSBA QCBfYnRfaW5pdGlhbGl6ZV9tb3JlX2RhdGEoQlRTY2FuT3BhcXVlIHNvLCBTY2FuRGlyZWN0aW9u IGRpcikKIAlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCiAJc28tPm1h cmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCiB9CisKKy8qIEZvcndhcmQgdGhlIGNhbGwg dG8gZWl0aGVyIF9idF9jaGVja2tleXMsIHdoaWNoIGlzIGEgc2ltcGxlCisgKiBhbmQgZmFzdGVz dCB3YXkgb2YgY2hlY2tpbmcga2V5cywgb3IgdG8gX2J0X2NoZWNra2V5c19za2lwLAorICogd2hp Y2ggaXMgYSBzbG93ZXIgd2F5IHRvIGNoZWNrIHRoZSBrZXlzLCBidXQgaXQgd2lsbCByZXR1cm4g ZXh0cmEKKyAqIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBzdG9w IHJlYWRpbmcgdGhlIGN1cnJlbnQgcGFnZQorICogYW5kIHNraXAuIFRoZSBleHBlbnNpdmUgY2hl Y2tpbmcgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiAhaXNSZWd1bGFyTW9kZSwgZWcuCisgKiB3aGVu IHByZWZpeERpciE9cG9zdGZpeERpciwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gc2Nhbm5pbmcg ZnJvbSBjdXJzb3JzIGJhY2t3YXJkcworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK19idF9jaGVj a2tleXNfZXh0ZW5kZWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQg dHVwbmF0dHMsCisJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGlzUmVndWxhck1vZGUs CisJCQkJCSAgIGJvb2wgKmNvbnRpbnVlc2NhbiwgaW50ICpwcmVmaXhza2lwaW5kZXgpCit7CisJ aWYgKGlzUmVndWxhck1vZGUpCisJeworCQlyZXR1cm4gX2J0X2NoZWNra2V5cyhzY2FuLCB0dXBs ZSwgdHVwbmF0dHMsIGRpciwgY29udGludWVzY2FuLCBwcmVmaXhza2lwaW5kZXgpOworCX0KKwll bHNlCisJeworCQlyZXR1cm4gX2J0X2NoZWNra2V5c19za2lwKHNjYW4sIHR1cGxlLCB0dXBuYXR0 cywgZGlyLCBjb250aW51ZXNjYW4sIHByZWZpeHNraXBpbmRleCk7CisJfQorfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRza2lwLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNraXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lMmRiYWYyZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRza2lwLmMKQEAgLTAsMCArMSwxNDU1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBuYnRza2lwLmMKKyAqCSAgU2VhcmNoIGNvZGUgcmVsYXRlZCB0byBza2lwIHNjYW4gZm9yIHBv c3RncmVzIGJ0cmVlcy4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2tpcC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5o IgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgor CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3VwZGF0ZV9zY2Fua2V5X3dpdGhfdHVwbGUoQlRTY2Fu SW5zZXJ0IHNjYW5rZXlzLAorCQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleFJlbCwgSW5kZXhUdXBs ZSBpdHVwLCBpbnQgbnVtYXR0cnMpOworc3RhdGljIGlubGluZSBib29sIF9idF9zY2Fua2V5X3dp dGhpbl9wYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1 Zik7CitzdGF0aWMgaW5saW5lIGludDMyIF9idF9jb21wYXJlX3VudGlsKFJlbGF0aW9uIHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwgSW5kZXhUdXBsZSBpdHVwLCBpbnQgcHJlZml4KTsKK3N0YXRpYyBp bmxpbmUgdm9pZAorX2J0X2RldGVybWluZV9uZXh0X2FjdGlvbihJbmRleFNjYW5EZXNjIHNjYW4s IEJUU2tpcENvbXBhcmVSZXN1bHQgKmNtcCwgT2Zmc2V0TnVtYmVyIGZpcnN0T2ZmbnVtLAorCQkJ CQkJICBPZmZzZXROdW1iZXIgbGFzdE9mZm51bSwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyLCBC VFNraXBTdGF0ZSAqbmV4dEFjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQKK19idF9kZXRlcm1p bmVfbmV4dF9hY3Rpb25fYWZ0ZXJfc2tpcChCVFNjYW5PcGFxdWUgc28sIEJUU2tpcENvbXBhcmVS ZXN1bHQgKmNtcCwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsCisJCQkJCQkJCQkgU2NhbkRpcmVj dGlvbiBwb3N0Zml4RGlyLCBpbnQgc2tpcHBlZCwgQlRTa2lwU3RhdGUgKm5leHRBY3Rpb24pOwor c3RhdGljIGlubGluZSB2b2lkCitfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uX2FmdGVyX3NraXBf ZXh0cmEoQlRTY2FuT3BhcXVlIHNvLCBCVFNraXBDb21wYXJlUmVzdWx0ICpjbXAsIEJUU2tpcFN0 YXRlICpuZXh0QWN0aW9uKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfY29weV9zY2Fua2V5KEJU U2Nhbkluc2VydCB0bywgQlRTY2FuSW5zZXJ0IGZyb20sIGludCBudW1hdHRycyk7CitzdGF0aWMg aW5saW5lIEluZGV4VHVwbGUgX2J0X2dldF90dXBsZV9mcm9tX29mZnNldF93aXRoX2NvcHkoQlRT Y2FuT3BhcXVlIHNvLCBPZmZzZXROdW1iZXIgY3VyVHVwbGVPZmZudW0pOworCitzdGF0aWMgdm9p ZCBfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9hZnRlcl9yZWFkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhUdXBsZSBjdXJUdXBsZSwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBwcmVmaXhE aXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CitzdGF0aWMgdm9pZCBfYnRfc2tpcF91cGRh dGVfc2NhbmtleV9mb3JfcHJlZml4X3NraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBSZWxhdGlvbiBp bmRleFJlbCwKKwkJCQkJCQkJCQlpbnQgcHJlZml4LCBJbmRleFR1cGxlIGl0dXAsIFNjYW5EaXJl Y3Rpb24gcHJlZml4RGlyKTsKK3N0YXRpYyBib29sIF9idF90cnlfaW5fcGFnZV9za2lwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIpOworc3RhdGljIHZvaWQgZGVi dWdfcHJpbnQoSW5kZXhUdXBsZSBpdHVwLCBCVFNjYW5JbnNlcnQgc2NhbktleSwgUmVsYXRpb24g cmVsLCBjaGFyICpleHRyYSk7CisKKy8qIHByb2JhYmx5IHRvIGJlIHJlbW92ZWQgYnV0IHVzZWZ1 bCBmb3IgZGVidWdnaW5nIGR1cmluZyBwYXRjaCBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHZv aWQgZGVidWdfcHJpbnQoSW5kZXhUdXBsZSBpdHVwLCBCVFNjYW5JbnNlcnQgc2NhbktleSwgUmVs YXRpb24gcmVsLCBjaGFyICpleHRyYSkKK3sKKwlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNd OworCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCWNoYXIJICAgKmxrZXlfZGVzYyA9 IE5VTEw7CisKKwkvKiBBdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gLS0gZG9uJ3QgaW5zdHJ1bWVu dCBjYXRhbG9nIGluZGV4ZXMgKi8KKwlpZiAoIUlzQ2F0YWxvZ1JlbGF0aW9uKHJlbCkpCisJewor CQlUdXBsZURlc2MJaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCWludAkJCW5h dHRzOworCQlpbnQJCQlpbmRua2V5YXR0cyA9IHJlbC0+cmRfaW5kZXgtPmluZG5rZXlhdHRzOwor CisJCU9pZAkJCXR5cE91dHB1dDsKKwkJYm9vbAkJdmFybGVuYXR5cGU7CisJCWNoYXIJICAgKnZh bDsKKwkJaW50IGk7CisKKwkJY2hhciBidWZbODA5Nl0gPSB7MH07CisJCWludCBpZHggPSAwOwor CisJCWlmIChpdHVwICE9IE5VTEwpCisJCXsKKwkJCW5hdHRzID0gQlRyZWVUdXBsZUdldE5BdHRz KGl0dXAsIHJlbCk7CisJCQlpdHVwZGVzYy0+bmF0dHMgPSBNaW4oaW5kbmtleWF0dHMsIG5hdHRz KTsKKwkJCW1lbXNldCgmaXNudWxsLCAweEZGLCBzaXplb2YoaXNudWxsKSk7CisJCQlpbmRleF9k ZWZvcm1fdHVwbGUoaXR1cCwgaXR1cGRlc2MsIHZhbHVlcywgaXNudWxsKTsKKworCQkJcmVsLT5y ZF9pbmRleC0+aW5kbmtleWF0dHMgPSBuYXR0czsKKworCQkJLyoKKwkJCSAqIFNpbmNlIHRoZSBy ZWdyZXNzaW9uIHRlc3RzIHNob3VsZCBwYXNzIHdoZW4gdGhlIGluc3RydW1lbnRhdGlvbgorCQkJ ICogcGF0Y2ggaXMgYXBwbGllZCwgYmUgcHJlcGFyZWQgZm9yIEJ1aWxkSW5kZXhWYWx1ZURlc2Ny aXB0aW9uKCkgdG8KKwkJCSAqIHJldHVybiBOVUxMIGR1ZSB0byBzZWN1cml0eSBjb25zaWRlcmF0 aW9ucy4KKwkJCSAqLworCQkJbGtleV9kZXNjID0gQnVpbGRJbmRleFZhbHVlRGVzY3JpcHRpb24o cmVsLCB2YWx1ZXMsIGlzbnVsbCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgc2NhbktleS0+ a2V5c3o7IGkrKykKKwkJeworCQkJU2NhbktleSBjdXIgPSAmc2NhbktleS0+c2NhbmtleXNbaV07 CisKKwkJCWlmIChpICE9IDApCisJCQl7CisJCQkJYnVmW2lkeF0gPSAnLCc7CisJCQkJaWR4Kys7 CisJCQl9CisKKwkJCWlmICghKGN1ci0+c2tfZmxhZ3MgJiBTS19JU05VTEwpKQorCQkJeworCQkJ CWlmIChjdXItPnNrX3N1YnR5cGUgIT0gSW52YWxpZE9pZCkKKwkJCQkJZ2V0VHlwZU91dHB1dElu Zm8oY3VyLT5za19zdWJ0eXBlLAorCQkJCQkJCQkJICAmdHlwT3V0cHV0LCAmdmFybGVuYXR5cGUp OworCQkJCWVsc2UKKwkJCQkJZ2V0VHlwZU91dHB1dEluZm8ocmVsLT5yZF9vcGNpbnR5cGVbaV0s CisJCQkJCQkJCQkgICZ0eXBPdXRwdXQsICZ2YXJsZW5hdHlwZSk7CisJCQkJdmFsID0gT2lkT3V0 cHV0RnVuY3Rpb25DYWxsKHR5cE91dHB1dCwgY3VyLT5za19hcmd1bWVudCk7CisJCQkJaWYgKHZh bCkKKwkJCQl7CisJCQkJCXVuc2lnbmVkIGxvbmcgdG9jb3B5ID0gc3Rybmxlbih2YWwsIDE1KTsK KwkJCQkJbWVtY3B5KGJ1ZiArIGlkeCwgdmFsLCB0b2NvcHkpOworCQkJCQlpZHggKz0gdG9jb3B5 OworCQkJCQlwZnJlZSh2YWwpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQltZW1jcHko YnVmICsgaWR4LCAibi9hIiwgMyk7CisJCQkJCWlkeCArPSAzOworCQkJCX0KKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQltZW1jcHkoYnVmICsgaWR4LCAibnVsbCIsIDQpOworCQkJCWlkeCArPSA0 OworCQkJfQorCQl9CisJCWJ1ZltpZHhdID0gMDsKKworCQllbG9nKERFQlVHMSwgIiVzIDogJXMg dHVwbGUoJXMpIHNrKCVzKSIsCisJCQkgZXh0cmEsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bCksIGxrZXlfZGVzYyA/IGxrZXlfZGVzYyA6ICJOL0EiLCBidWYpOworCisJCS8qIENsZWFudXAg Ki8KKwkJaXR1cGRlc2MtPm5hdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mQXR0cmlidXRl cyhyZWwpOworCQlyZWwtPnJkX2luZGV4LT5pbmRua2V5YXR0cyA9IGluZG5rZXlhdHRzOworCQlp ZiAobGtleV9kZXNjKQorCQkJcGZyZWUobGtleV9kZXNjKTsKKwl9Cit9CisKKy8qCisgKiByZXR1 cm5zIHdoZXRoZXIgd2UncmUgYXQgdGhlIGVuZCBvZiBhIHNjYW4uCisgKiB0aGUgc2NhbiBwb3Np dGlvbiBjYW4gYmUgaW52YWxpZCBldmVuIHRob3VnaCB3ZSBzdGlsbAorICogc2hvdWxkIGNvbnRp bnVlIHRoZSBzY2FuLiB0aGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgd2hlbgorICogd2UncmUgc2Nh bm5pbmcgd2l0aCBwcmVmaXhEaXIhPXBvc3RmaXhEaXIuIHdoZW4gbG9va2luZyBhdCB0aGUgZmly c3QKKyAqIHByZWZpeCwgd2UgdHJhdmVyc2UgdGhlIGl0ZW1zIHdpdGhpbiB0aGUgcHJlZml4IGZy b20gbWF4IHRvIG1pbi4KKyAqIGlmIG5vbmUgb2YgdGhlbSBtYXRjaCwgd2UgYWN0dWFsbHkgcnVu IG9mZiB0aGUgc3RhcnQgb2YgdGhlIGluZGV4LAorICogbWVhbmluZyBub25lIG9mIHRoZSB0dXBs ZXMgd2l0aGluIHRoaXMgcHJlZml4IG1hdGNoLiB0aGUgc2NhbiBwb3MgYmVjb21lcworICogaW52 YWxpZCwgaG93ZXZlciwgd2UgZG8gbmVlZCB0byBsb29rIGZ1cnRoZXIgdG8gdGhlIG5leHQgcHJl Zml4LgorICogdGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHN0aWxsIHJldHVybnMgdHJ1ZSBpbiB0 aGlzIHBhcnRpY3VsYXIgY2FzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sCitfYnRfc2tpcF9p c192YWxpZChCVFNjYW5PcGFxdWUgc28sIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGly ZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJcmV0dXJuIEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpIHx8CisJCQkoIV9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIsIHBvc3RmaXhE aXIpICYmCisJCQkgc28tPnNraXBEYXRhLT5jdXJQb3MubmV4dEFjdGlvbiAhPSBTa2lwU3RhdGVT dG9wKTsKK30KKworLyogdHJ5IGZpbmRpbmcgdGhlIG5leHQgdHVwbGUgdG8gc2tpcCB0byB3aXRo aW4gdGhlIGxvY2FsIHR1cGxlIHN0b3JhZ2UuCisgKiBsb2NhbCB0dXBsZSBzdG9yYWdlIGlzIGZp bGxlZCBkdXJpbmcgX2J0X3JlYWRwYWdlIHdpdGggYWxsIG1hdGNoaW5nCisgKiB0dXBsZXMgb24g dGhhdCBwYWdlLiBpZiB3ZSBjYW4gZmluZCB0aGUgbmV4dCBwcmVmaXggaGVyZSBpdCBzYXZlcwor ICogdXMgZG9pbmcgYSBzY2FuIGZyb20gcm9vdC4KKyAqIE5vdGUgdGhhdCB0aGlzIG9wdGltaXph dGlvbiBvbmx5IHdvcmtzIHdpdGggX2J0X3JlZ3VsYXJfbW9kZSA9PSB0cnVlCisgKiBJZiB0aGlz IGlzIG5vdCB0aGUgY2FzZSwgdGhlIGxvY2FsIHR1cGxlIHdvcmtzcGFjZSB3aWxsIGFsd2F5cyBv bmx5CisgKiBjb250YWluIHR1cGxlcyBvZiBvbmUgc3BlY2lmaWMgcHJlZml4IChfYnRfcmVhZHBh Z2Ugd2lsbCBzdG9wIGF0CisgKiB0aGUgZW5kIG9mIGEgcHJlZngpCisgKi8KK3N0YXRpYyBib29s CitfYnRfdHJ5X2luX3BhZ2Vfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g cHJlZml4RGlyKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlCVFNraXAgc2tpcCA9IHNvLT5za2lw RGF0YTsKKwlJbmRleFR1cGxlIGl0dXAgPSBOVUxMOworCWJvb2wgZ29iYWNrOworCWludCBsb3cs IGhpZ2gsIHN0YXJ0aGlnaCwgc3RhcnRsb3c7CisJaW50MzIJCXJlc3VsdCwKKwkJCQljbXB2YWw7 CisJQlRTY2FuSW5zZXJ0IGtleSA9ICZzby0+c2tpcERhdGEtPmN1clBvcy5za2lwU2NhbktleTsK KworCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07 CisJaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVP ZmZzZXQpOworCisJX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX3ByZWZpeF9za2lwKHNjYW4s IHNjYW4tPmluZGV4UmVsYXRpb24sIHNraXAtPnByZWZpeCwgaXR1cCwgcHJlZml4RGlyKTsKKwor CV9idF9zZXRfYnNlYXJjaF9mbGFncyhrZXktPnNjYW5rZXlzW2tleS0+a2V5c3ogLSAxXS5za19z dHJhdGVneSwgcHJlZml4RGlyLCAma2V5LT5uZXh0a2V5LCAmZ29iYWNrKTsKKworCS8qIFJlcXVl c3RpbmcgbmV4dGtleSBzZW1hbnRpY3Mgd2hpbGUgdXNpbmcgc2NhbnRpZCBzZWVtcyBub25zZW5z aWNhbCAqLworCUFzc2VydCgha2V5LT5uZXh0a2V5IHx8IGtleS0+c2NhbnRpZCA9PSBOVUxMKTsK KwkvKiBzY2FudGlkLXNldCBjYWxsZXJzIG11c3QgdXNlIF9idF9iaW5zcmNoX2luc2VydCgpIG9u IGxlYWYgcGFnZXMgKi8KKworCXN0YXJ0bG93ID0gbG93ID0gU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChwcmVmaXhEaXIpID8gc28tPmN1cnJQb3MuaXRlbUluZGV4ICsgMSA6IHNvLT5jdXJyUG9zLmZp cnN0SXRlbTsKKwlzdGFydGhpZ2ggPSBoaWdoID0gU2NhbkRpcmVjdGlvbklzRm9yd2FyZChwcmVm aXhEaXIpID8gc28tPmN1cnJQb3MubGFzdEl0ZW0gOiBzby0+Y3VyclBvcy5pdGVtSW5kZXggLSAx OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8ga2V5cyBvbiB0aGUgcGFnZSwgcmV0dXJuIHRo ZSBmaXJzdCBhdmFpbGFibGUgc2xvdC4gTm90ZQorCSAqIHRoaXMgY292ZXJzIHR3byBjYXNlczog dGhlIHBhZ2UgaXMgcmVhbGx5IGVtcHR5IChubyBrZXlzKSwgb3IgaXQKKwkgKiBjb250YWlucyBv bmx5IGEgaGlnaCBrZXkuICBUaGUgbGF0dGVyIGNhc2UgaXMgcG9zc2libGUgYWZ0ZXIgdmFjdXVt aW5nLgorCSAqIFRoaXMgY2FuIG5ldmVyIGhhcHBlbiBvbiBhbiBpbnRlcm5hbCBwYWdlLCBob3dl dmVyLCBzaW5jZSB0aGV5IGFyZQorCSAqIG5ldmVyIGVtcHR5IChhbiBpbnRlcm5hbCBwYWdlIG11 c3QgaGF2ZSBjaGlsZHJlbikuCisJICovCisJaWYgKHVubGlrZWx5KGhpZ2ggPCBsb3cpKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgZmlyc3Qg a2V5IG9uIHRoZSBwYWdlID49IHNjYW4ga2V5LCBvciBmaXJzdAorCSAqIGtleSA+IHNjYW5rZXkg d2hlbiBuZXh0a2V5IGlzIHRydWUuCisJICoKKwkgKiBGb3IgbmV4dGtleT1mYWxzZSAoY21wdmFs PTEpLCB0aGUgbG9vcCBpbnZhcmlhbnQgaXM6IGFsbCBzbG90cyBiZWZvcmUKKwkgKiAnbG93JyBh cmUgPCBzY2FuIGtleSwgYWxsIHNsb3RzIGF0IG9yIGFmdGVyICdoaWdoJyBhcmUgPj0gc2NhbiBr ZXkuCisJICoKKwkgKiBGb3IgbmV4dGtleT10cnVlIChjbXB2YWw9MCksIHRoZSBsb29wIGludmFy aWFudCBpczogYWxsIHNsb3RzIGJlZm9yZQorCSAqICdsb3cnIGFyZSA8PSBzY2FuIGtleSwgYWxs IHNsb3RzIGF0IG9yIGFmdGVyICdoaWdoJyBhcmUgPiBzY2FuIGtleS4KKwkgKgorCSAqIFdlIGNh biBmYWxsIG91dCB3aGVuIGhpZ2ggPT0gbG93LgorCSAqLworCWhpZ2grKzsJCQkJCQkvKiBlc3Rh Ymxpc2ggdGhlIGxvb3AgaW52YXJpYW50IGZvciBoaWdoICovCisKKwljbXB2YWwgPSBrZXktPm5l eHRrZXkgPyAwIDogMTsJLyogc2VsZWN0IGNvbXBhcmlzb24gdmFsdWUgKi8KKworCXdoaWxlICho aWdoID4gbG93KQorCXsKKwkJaW50IG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgLyAyKTsKKwor CQkvKiBXZSBoYXZlIGxvdyA8PSBtaWQgPCBoaWdoLCBzbyBtaWQgcG9pbnRzIGF0IGEgcmVhbCBz bG90ICovCisKKwkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbbWlkXTsKKwkJaXR1cCA9 IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOwor CQlyZXN1bHQgPSBfYnRfY29tcGFyZV91bnRpbChzY2FuLT5pbmRleFJlbGF0aW9uLCBrZXksIGl0 dXAsIHNraXAtPnByZWZpeCk7CisKKwkJaWYgKHJlc3VsdCA+PSBjbXB2YWwpCisJCQlsb3cgPSBt aWQgKyAxOworCQllbHNlCisJCQloaWdoID0gbWlkOworCX0KKworCWlmIChoaWdoID4gc3RhcnRo aWdoKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZ29iYWNrKQorCXsKKwkJbG93LS07CisJCWlm IChsb3cgPCBzdGFydGxvdykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzby0+Y3VyclBvcy5p dGVtSW5kZXggPSBsb3c7CisKKwlpZiAoREVCVUcxID49IGxvZ19taW5fbWVzc2FnZXMgfHwgREVC VUcxID49IGNsaWVudF9taW5fbWVzc2FnZXMpCisJeworCQljdXJySXRlbSA9ICZzby0+Y3VyclBv cy5pdGVtc1tsb3ddOworCQlpdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1 cnJJdGVtLT50dXBsZU9mZnNldCk7CisJCWRlYnVnX3ByaW50KGl0dXAsICZzby0+c2tpcERhdGEt PmN1clBvcy5za2lwU2NhbktleSwgc2Nhbi0+aW5kZXhSZWxhdGlvbiwgInNraXAtaW4tcGFnZSIp OworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogIF9idF9za2lwKCkgLS0gU2tpcCBp dGVtcyB0aGF0IGhhdmUgdGhlIHNhbWUgcHJlZml4IGFzIHRoZSBtb3N0IHJlY2VudGx5CisgKiAJ CQkJICBmZXRjaGVkIGluZGV4IHR1cGxlLgorICoKKyAqIGluOiBwaW5uZWQsIG5vdCBsb2NrZWQK KyAqIG91dDogcGlubmVkLCBub3QgbG9ja2VkICh1bmxlc3MgZW5kIG9mIHNjYW4sIHRoZW4gdW5w aW5uZWQpCisgKi8KK2Jvb2wKK19idF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcikKK3sKKwlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTY2FuUG9zSXRlbSAqY3Vy ckl0ZW07CisJSW5kZXhUdXBsZSBpdHVwID0gTlVMTDsKKwlPZmZzZXROdW1iZXIgY3VyVHVwbGVP ZmZudW0gPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOworCUJUU2tpcENvbXBhcmVSZXN1bHQgY21wOwor CUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCU9mZnNldE51bWJlciBmaXJzdDsKKworCS8q IGluIHBhZ2Ugc2tpcCBvbmx5IHdvcmtzIHdoZW4gcHJlZml4RGlyID09IHBvc3RmaXhEaXIgKi8K KwlpZiAoIV9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIsIHBvc3RmaXhEaXIpIHx8 ICFfYnRfdHJ5X2luX3BhZ2Vfc2tpcChzY2FuLCBwcmVmaXhEaXIpKQorCXsKKwkJY3Vyckl0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKKwkJaXR1cCA9IChJ bmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOworCisJ CXNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRTa2lwSW5kZXggPSBzby0+c2tpcERhdGEtPnByZWZp eDsKKwkJX2J0X3NraXBfb25jZShzY2FuLCAmaXR1cCwgJmN1clR1cGxlT2ZmbnVtLCB0cnVlLCBw cmVmaXhEaXIsIHBvc3RmaXhEaXIpOworCQlfYnRfc2tpcF91bnRpbF9tYXRjaChzY2FuLCAmaXR1 cCwgJmN1clR1cGxlT2ZmbnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOworCQlpZiAoIV9idF9z a2lwX2lzX2Fsd2F5c192YWxpZChzbykpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZmlyc3QgPSBj dXJUdXBsZU9mZm51bTsKKwkJX2J0X3JlYWRwYWdlKHNjYW4sIHBvc3RmaXhEaXIsICZjdXJUdXBs ZU9mZm51bSwgX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikp OworCQlpZiAoREVCVUcyID49IGxvZ19taW5fbWVzc2FnZXMgfHwgREVCVUcyID49IGNsaWVudF9t aW5fbWVzc2FnZXMpCisJCXsKKwkJCXByaW50X2l0dXAoQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28t PmN1cnJQb3MuYnVmKSwgX2J0X2dldF90dXBsZV9mcm9tX29mZnNldChzbywgZmlyc3QpLCBOVUxM LCBzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJImZpcnN0IGl0ZW0gb24gcGFnZSBjb21wYXJl ZCBhZnRlciBza2lwIik7CisJCQlwcmludF9pdHVwKEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5j dXJyUG9zLmJ1ZiksIF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVt KSwgTlVMTCwgc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCSJsYXN0IGl0ZW0gb24gcGFnZSBj b21wYXJlZCBhZnRlciBza2lwIik7CisJCX0KKwkJX2J0X2NvbXBhcmVfY3VycmVudF9pdGVtKHNj YW4sIF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVtKSwKKwkJCQkJ CQkJIEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMoc2Nhbi0+aW5kZXhSZWxhdGlv biksCisJCQkJCQkJCSBwb3N0Zml4RGlyLCBfYnRfc2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4 RGlyLCBwb3N0Zml4RGlyKSwgJmNtcCk7CisJCV9idF9kZXRlcm1pbmVfbmV4dF9hY3Rpb24oc2Nh biwgJmNtcCwgZmlyc3QsIGN1clR1cGxlT2ZmbnVtLCBwb3N0Zml4RGlyLCAmc2tpcC0+Y3VyUG9z Lm5leHRBY3Rpb24pOworCQlza2lwLT5jdXJQb3MubmV4dERpcmVjdGlvbiA9IHByZWZpeERpcjsK KwkJc2tpcC0+Y3VyUG9zLm5leHRTa2lwSW5kZXggPSBjbXAucHJlZml4U2tpcEluZGV4OworCQlf YnRfc2tpcF91cGRhdGVfc2NhbmtleV9hZnRlcl9yZWFkKHNjYW4sIF9idF9nZXRfdHVwbGVfZnJv bV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVtKSwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKwor CQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oc2NhbiwgJnNvLT5jdXJyUG9zKTsKKwl9CisK KwkvKiBwcmVwYXJlIGZvciB0aGUgY2FsbCB0byBfYnRfbmV4dCwgYmVjYXVzZSBfYnRfbmV4dCBp bmNyZW1lbnRzIHRoaXMgdG8gZ2V0IHRvIHRoZSB0dXBsZSB3ZSB3YW50IHRvIGJlIGF0ICovCisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocG9zdGZpeERpcikpCisJCXNvLT5jdXJyUG9zLml0 ZW1JbmRleC0tOworCWVsc2UKKwkJc28tPmN1cnJQb3MuaXRlbUluZGV4Kys7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworSW5kZXhUdXBsZQorX2J0X2dldF90dXBsZV9mcm9tX29mZnNldChCVFNjYW5P cGFxdWUgc28sIE9mZnNldE51bWJlciBjdXJUdXBsZU9mZm51bSkKK3sKKwlQYWdlIHBhZ2UgPSBC dWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBQYWdlR2V0SXRlbUlkKHBhZ2UsIGN1clR1cGxlT2ZmbnVtKSk7Cit9CisK K3N0YXRpYyBJbmRleFR1cGxlCitfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zmc2V0X3dpdGhfY29weShC VFNjYW5PcGFxdWUgc28sIE9mZnNldE51bWJlciBjdXJUdXBsZU9mZm51bSkKK3sKKwlQYWdlIHBh Z2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJSW5kZXhUdXBsZSBpdHVwID0g KEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgY3VyVHVw bGVPZmZudW0pKTsKKwlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKKwltZW1j cHkoc28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFR1cGxlLCBpdHVwLCBpdHVwc3opOworCisJcmV0 dXJuIChJbmRleFR1cGxlKSBzby0+c2tpcERhdGEtPmN1clBvcy5za2lwVHVwbGU7Cit9CisKK3N0 YXRpYyB2b2lkCitfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QlRTa2lwQ29tcGFyZVJlc3VsdCAqY21wLCBPZmZzZXROdW1iZXIgZmlyc3RPZmZudW0sIE9mZnNl dE51bWJlciBsYXN0T2ZmbnVtLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIsIEJUU2tpcFN0YXRl ICpuZXh0QWN0aW9uKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKKworCWlmIChjbXAtPmZ1bGxLZXlTa2lwKQorCQkqbmV4dEFjdGlvbiA9IFNraXBT dGF0ZVN0b3A7CisJZWxzZSBpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChwb3N0Zml4RGlyKSkK Kwl7CisJCU9mZnNldE51bWJlciBmaXJzdEl0ZW0gPSBmaXJzdE9mZm51bSwgbGFzdEl0ZW0gPSBs YXN0T2ZmbnVtOworCQlpZiAoY21wLT5wcmVmaXhTa2lwKQorCQl7CisJCQkqbmV4dEFjdGlvbiA9 IFNraXBTdGF0ZVNraXA7CisJCX0KKwkJZWxzZQorCQl7CisJCQlJbmRleFR1cGxlIHRvQ21wOwor CQkJaWYgKHNvLT5jdXJyUG9zLmxhc3RJdGVtID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJ CQl0b0NtcCA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXRfd2l0aF9jb3B5KHNvLCBzby0+Y3Vy clBvcy5pdGVtc1tzby0+Y3VyclBvcy5sYXN0SXRlbV0uaW5kZXhPZmZzZXQpOworCQkJZWxzZQor CQkJCXRvQ21wID0gX2J0X2dldF90dXBsZV9mcm9tX29mZnNldF93aXRoX2NvcHkoc28sIGZpcnN0 SXRlbSk7CisJCQlfYnRfdXBkYXRlX3NjYW5rZXlfd2l0aF90dXBsZSgmc28tPnNraXBEYXRhLT5j dXJyZW50VHVwbGVLZXksCisJCQkJCQkJCQkJICBzY2FuLT5pbmRleFJlbGF0aW9uLCB0b0NtcCwg UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOworCQkJ aWYgKF9idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJfc2tpcChzby0+c2tpcERhdGEsIHBvc3RmaXhE aXIsIHNvLT5za2lwRGF0YS0+cHJlZml4KSAmJiAhY21wLT5lcXVhbCAmJgorCQkJCQkoY21wLT5w cmVmaXhDbXBSZXN1bHQgIT0gMCB8fAorCQkJCQkgX2J0X2NvbXBhcmVfdW50aWwoc2Nhbi0+aW5k ZXhSZWxhdGlvbiwgJnNvLT5za2lwRGF0YS0+Y3VycmVudFR1cGxlS2V5LAorCQkJCQkJCQkJICAg X2J0X2dldF90dXBsZV9mcm9tX29mZnNldChzbywgbGFzdEl0ZW0pLCBzby0+c2tpcERhdGEtPnBy ZWZpeCkgIT0gMCkpCisJCQkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTa2lwRXh0cmE7CisJCQll bHNlCisJCQkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVOZXh0OworCQl9CisJfQorCWVsc2UKKwl7 CisJCU9mZnNldE51bWJlciBmaXJzdEl0ZW0gPSBsYXN0T2ZmbnVtLCBsYXN0SXRlbSA9IGZpcnN0 T2ZmbnVtOworCQlpZiAoY21wLT5wcmVmaXhTa2lwKQorCQl7CisJCQkqbmV4dEFjdGlvbiA9IFNr aXBTdGF0ZVNraXA7CisJCX0KKwkJZWxzZQorCQl7CisJCQlJbmRleFR1cGxlIHRvQ21wOworCQkJ aWYgKHNvLT5jdXJyUG9zLmxhc3RJdGVtID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJCQl0 b0NtcCA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXRfd2l0aF9jb3B5KHNvLCBzby0+Y3VyclBv cy5pdGVtc1tzby0+Y3VyclBvcy5maXJzdEl0ZW1dLmluZGV4T2Zmc2V0KTsKKwkJCWVsc2UKKwkJ CQl0b0NtcCA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXRfd2l0aF9jb3B5KHNvLCBsYXN0SXRl bSk7CisJCQlfYnRfdXBkYXRlX3NjYW5rZXlfd2l0aF90dXBsZSgmc28tPnNraXBEYXRhLT5jdXJy ZW50VHVwbGVLZXksCisJCQkJCQkJCQkJICBzY2FuLT5pbmRleFJlbGF0aW9uLCB0b0NtcCwgUmVs YXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOworCQkJaWYg KF9idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJfc2tpcChzby0+c2tpcERhdGEsIHBvc3RmaXhEaXIs IHNvLT5za2lwRGF0YS0+cHJlZml4KSAmJiAhY21wLT5lcXVhbCAmJgorCQkJCQkoY21wLT5wcmVm aXhDbXBSZXN1bHQgIT0gMCB8fAorCQkJCQkgX2J0X2NvbXBhcmVfdW50aWwoc2Nhbi0+aW5kZXhS ZWxhdGlvbiwgJnNvLT5za2lwRGF0YS0+Y3VycmVudFR1cGxlS2V5LAorCQkJCQkJCQkJICAgX2J0 X2dldF90dXBsZV9mcm9tX29mZnNldChzbywgZmlyc3RJdGVtKSwgc28tPnNraXBEYXRhLT5wcmVm aXgpICE9IDApKQorCQkJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlU2tpcEV4dHJhOworCQkJZWxz ZQorCQkJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlTmV4dDsKKwkJfQorCX0KK30KKworc3RhdGlj IGlubGluZSBib29sCitfYnRfc2hvdWxkX3ByZWZpeF9za2lwKEJUU2tpcENvbXBhcmVSZXN1bHQg KmNtcCkKK3sKKwlyZXR1cm4gY21wLT5wcmVmaXhTa2lwIHx8IGNtcC0+cHJlZml4Q21wUmVzdWx0 ICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2J0X2RldGVybWluZV9uZXh0X2FjdGlv bl9hZnRlcl9za2lwKEJUU2Nhbk9wYXF1ZSBzbywgQlRTa2lwQ29tcGFyZVJlc3VsdCAqY21wLCBT Y2FuRGlyZWN0aW9uIHByZWZpeERpciwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIHBvc3RmaXhE aXIsIGludCBza2lwcGVkLCBCVFNraXBTdGF0ZSAqbmV4dEFjdGlvbikKK3sKKwlpZiAoIV9idF9z a2lwX2lzX2Fsd2F5c192YWxpZChzbykgfHwgY21wLT5mdWxsS2V5U2tpcCkKKwkJKm5leHRBY3Rp b24gPSBTa2lwU3RhdGVTdG9wOworCWVsc2UgaWYgKGNtcC0+ZXF1YWwgJiYgX2J0X3NraXBfaXNf cmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikpCisJCSpuZXh0QWN0aW9uID0gU2tp cFN0YXRlTmV4dDsKKwllbHNlIGlmIChfYnRfc2hvdWxkX3ByZWZpeF9za2lwKGNtcCkgJiYgX2J0 X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikgJiYKKwkJCSAoKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQocHJlZml4RGlyKSAmJiBjbXAtPnNrQ21wUmVzdWx0ID09IC0x KSB8fAorCQkJICAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQocHJlZml4RGlyKSAmJiBjbXAtPnNr Q21wUmVzdWx0ID09IDEpKSkKKwkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTa2lwOworCWVsc2Ug aWYgKCFfYnRfc2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSB8fAor CQkJIF9idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJfc2tpcChzby0+c2tpcERhdGEsIHBvc3RmaXhE aXIsIHNraXBwZWQpIHx8CisJCQkgY21wLT5wcmVmaXhDbXBSZXN1bHQgIT0gMCkKKwkJKm5leHRB Y3Rpb24gPSBTa2lwU3RhdGVTa2lwRXh0cmE7CisJZWxzZQorCQkqbmV4dEFjdGlvbiA9IFNraXBT dGF0ZU5leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2J0X2RldGVybWluZV9uZXh0X2Fj dGlvbl9hZnRlcl9za2lwX2V4dHJhKEJUU2Nhbk9wYXF1ZSBzbywgQlRTa2lwQ29tcGFyZVJlc3Vs dCAqY21wLCBCVFNraXBTdGF0ZSAqbmV4dEFjdGlvbikKK3sKKwlpZiAoIV9idF9za2lwX2lzX2Fs d2F5c192YWxpZChzbykgfHwgY21wLT5mdWxsS2V5U2tpcCkKKwkJKm5leHRBY3Rpb24gPSBTa2lw U3RhdGVTdG9wOworCWVsc2UgaWYgKGNtcC0+ZXF1YWwpCisJCSpuZXh0QWN0aW9uID0gU2tpcFN0 YXRlTmV4dDsKKwllbHNlIGlmIChfYnRfc2hvdWxkX3ByZWZpeF9za2lwKGNtcCkpCisJCSpuZXh0 QWN0aW9uID0gU2tpcFN0YXRlU2tpcDsKKwllbHNlCisJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRl TmV4dDsKK30KKworLyoganVzdCBhIGRlYnVnIGZ1bmN0aW9uIHRoYXQgcHJpbnRzIGEgc2Nhbmtl eS4gd2lsbCBiZSByZW1vdmVkIGZvciBmaW5hbCBwYXRjaCAqLworc3RhdGljIGlubGluZSB2b2lk CitfcHJpbnRfc2tleShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbkluc2VydCBzY2FuS2V5KQor eworCU9pZAkJCXR5cE91dHB1dDsKKwlib29sCQl2YXJsZW5hdHlwZTsKKwljaGFyCSAgICp2YWw7 CisJaW50IGk7CisJUmVsYXRpb24gcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKworCWZvciAo aSA9IDA7IGkgPCBzY2FuS2V5LT5rZXlzejsgaSsrKQorCXsKKwkJU2NhbktleSBjdXIgPSAmc2Nh bktleS0+c2NhbmtleXNbaV07CisJCWlmICghSXNDYXRhbG9nUmVsYXRpb24ocmVsKSkKKwkJewor CQkJaWYgKCEoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkpCisJCQl7CisJCQkJaWYgKGN1ci0+ c2tfc3VidHlwZSAhPSBJbnZhbGlkT2lkKQorCQkJCQlnZXRUeXBlT3V0cHV0SW5mbyhjdXItPnNr X3N1YnR5cGUsCisJCQkJCQkJCQkgICZ0eXBPdXRwdXQsICZ2YXJsZW5hdHlwZSk7CisJCQkJZWxz ZQorCQkJCQlnZXRUeXBlT3V0cHV0SW5mbyhyZWwtPnJkX29wY2ludHlwZVtpXSwKKwkJCQkJCQkJ CSAgJnR5cE91dHB1dCwgJnZhcmxlbmF0eXBlKTsKKwkJCQl2YWwgPSBPaWRPdXRwdXRGdW5jdGlv bkNhbGwodHlwT3V0cHV0LCBjdXItPnNrX2FyZ3VtZW50KTsKKwkJCQlpZiAodmFsKQorCQkJCXsK KwkJCQkJZWxvZyhERUJVRzEsICIlcyBzayBhdHRyICVkIHZhbDogJXMgKCVzLCAlcykiLAorCQkJ CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksIGksIHZhbCwKKwkJCQkJCSAoY3VyLT5z a19mbGFncyAmIFNLX0JUX05VTExTX0ZJUlNUKSAhPSAwID8gIk5VTExTIEZJUlNUIiA6ICJOVUxM UyBMQVNUIiwKKwkJCQkJCSAoY3VyLT5za19mbGFncyAmIFNLX0JUX0RFU0MpICE9IDAgPyAiREVT QyIgOiAiQVNDIik7CisJCQkJCXBmcmVlKHZhbCk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJ eworCQkJCWVsb2coREVCVUcxLCAiJXMgc2sgYXR0ciAlZCB2YWw6IE5VTEwgKCVzLCAlcykiLAor CQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgaSwKKwkJCQkJIChjdXItPnNrX2Zs YWdzICYgU0tfQlRfTlVMTFNfRklSU1QpICE9IDAgPyAiTlVMTFMgRklSU1QiIDogIk5VTExTIExB U1QiLAorCQkJCQkgKGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9ERVNDKSAhPSAwID8gIkRFU0MiIDog IkFTQyIpOworCQkJfQorCQl9CisJfQorfQorCitib29sCitfYnRfY2hlY2trZXlzX3NraXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCisJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2NhbiwgaW50ICpwcmVmaXhza2lwaW5k ZXgpCit7CisJQlRTY2FuT3BhcXVlIAlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCVFNraXAgc2tpcCA9IHNvLT5za2lwRGF0YTsKKworCWJvb2wgbWF0Y2ggPSBfYnRfY2hlY2tr ZXlzKHNjYW4sIHR1cGxlLCB0dXBuYXR0cywgZGlyLCBjb250aW51ZXNjYW4sIHByZWZpeHNraXBp bmRleCk7CisJaW50IHByZWZpeENtcFJlc3VsdCA9IF9idF9jb21wYXJlX3VudGlsKHNjYW4tPmlu ZGV4UmVsYXRpb24sICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXksIHR1cGxlLCBza2lwLT5wcmVm aXgpOworCWlmICgqcHJlZml4c2tpcGluZGV4ID09IC0xICYmIHByZWZpeENtcFJlc3VsdCAhPSAw KQorCXsKKwkJKnByZWZpeHNraXBpbmRleCA9IHNraXAtPnByZWZpeDsKKwkJcmV0dXJuIGZhbHNl OworCX0KKwllbHNlCisJeworCQlib29sIG5ld2NvbnQ7CisJCV9idF9jaGVja2tleXNfdGhyZWV3 YXkoc2NhbiwgdHVwbGUsIHR1cG5hdHRzLCBkaXIsICZuZXdjb250LCBwcmVmaXhza2lwaW5kZXgp OworCQlpZiAoKnByZWZpeHNraXBpbmRleCA9PSAtMSAmJiBwcmVmaXhDbXBSZXN1bHQgIT0gMCkK KwkJeworCQkJKnByZWZpeHNraXBpbmRleCA9IHNraXAtPnByZWZpeDsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCX0KKwlyZXR1cm4gbWF0Y2g7Cit9CisKKy8qCisgKiBDb21wYXJlIGEgc2Nhbmtl eSB3aXRoIGEgZ2l2ZW4gdHVwbGUgYnV0IG9ubHkgdGhlIGZpcnN0IHByZWZpeCBjb2x1bW5zCisg KiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgZmlyc3QgJ3ByZWZpeCcgY29sdW1ucyBh cmUgZXF1YWwKKyAqIC0xIGlmIGtleSA8IGl0dXAgZm9yIHRoZSBmaXJzdCBwcmVmaXggY29sdW1u cworICogMSBpZiBrZXkgPiBpdHVwIGZvciB0aGUgZmlyc3QgcHJlZml4IGNvbHVtbnMKKyAqLwor aW50MzIKK19idF9jb21wYXJlX3VudGlsKFJlbGF0aW9uIHJlbCwKKwkJCUJUU2Nhbkluc2VydCBr ZXksCisJCQlJbmRleFR1cGxlIGl0dXAsCisJCQlpbnQgcHJlZml4KQoreworCVR1cGxlRGVzYwlp dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlTY2FuS2V5CQlzY2Fua2V5OworCWlu dAkJCW5jbXBrZXk7CisKKwlBc3NlcnQoa2V5LT5rZXlzeiA8PSBJbmRleFJlbGF0aW9uR2V0TnVt YmVyT2ZLZXlBdHRyaWJ1dGVzKHJlbCkpOworCisJbmNtcGtleSA9IE1pbihwcmVmaXgsIGtleS0+ a2V5c3opOworCXNjYW5rZXkgPSBrZXktPnNjYW5rZXlzOworCWZvciAoaW50IGkgPSAxOyBpIDw9 IG5jbXBrZXk7IGkrKykKKwl7CisJCURhdHVtCQlkYXR1bTsKKwkJYm9vbAkJaXNOdWxsOworCQlp bnQzMgkJcmVzdWx0OworCisJCWRhdHVtID0gaW5kZXhfZ2V0YXR0cihpdHVwLCBzY2Fua2V5LT5z a19hdHRubywgaXR1cGRlc2MsICZpc051bGwpOworCisJCS8qIHNlZSBjb21tZW50cyBhYm91dCBO VUxMcyBoYW5kbGluZyBpbiBidGJ1aWxkICovCisJCWlmIChzY2Fua2V5LT5za19mbGFncyAmIFNL X0lTTlVMTCkJLyoga2V5IGlzIE5VTEwgKi8KKwkJeworCQkJaWYgKGlzTnVsbCkKKwkJCQlyZXN1 bHQgPSAwOwkJLyogTlVMTCAiPSIgTlVMTCAqLworCQkJZWxzZSBpZiAoc2NhbmtleS0+c2tfZmxh Z3MgJiBTS19CVF9OVUxMU19GSVJTVCkKKwkJCQlyZXN1bHQgPSAtMTsJLyogTlVMTCAiPCIgTk9U X05VTEwgKi8KKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSAxOwkJLyogTlVMTCAiPiIgTk9UX05VTEwg Ki8KKwkJfQorCQllbHNlIGlmIChpc051bGwpCQkvKiBrZXkgaXMgTk9UX05VTEwgYW5kIGl0ZW0g aXMgTlVMTCAqLworCQl7CisJCQlpZiAoc2NhbmtleS0+c2tfZmxhZ3MgJiBTS19CVF9OVUxMU19G SVJTVCkKKwkJCQlyZXN1bHQgPSAxOwkJLyogTk9UX05VTEwgIj4iIE5VTEwgKi8KKwkJCWVsc2UK KwkJCQlyZXN1bHQgPSAtMTsJLyogTk9UX05VTEwgIjwiIE5VTEwgKi8KKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qCisJCQkgKiBUaGUgc2tfZnVuYyBuZWVkcyB0byBiZSBwYXNzZWQgdGhlIGluZGV4 IHZhbHVlIGFzIGxlZnQgYXJnIGFuZAorCQkJICogdGhlIHNrX2FyZ3VtZW50IGFzIHJpZ2h0IGFy ZyAodGhleSBtaWdodCBiZSBvZiBkaWZmZXJlbnQKKwkJCSAqIHR5cGVzKS4gIFNpbmNlIGl0IGlz IGNvbnZlbmllbnQgZm9yIGNhbGxlcnMgdG8gdGhpbmsgb2YKKwkJCSAqIF9idF9jb21wYXJlIGFz IGNvbXBhcmluZyB0aGUgc2NhbmtleSB0byB0aGUgaW5kZXggaXRlbSwgd2UgaGF2ZQorCQkJICog dG8gZmxpcCB0aGUgc2lnbiBvZiB0aGUgY29tcGFyaXNvbiByZXN1bHQuICAoVW5sZXNzIGl0J3Mg YSBERVNDCisJCQkgKiBjb2x1bW4sIGluIHdoaWNoIGNhc2Ugd2UgKmRvbid0KiBmbGlwIHRoZSBz aWduLikKKwkJCSAqLworCQkJcmVzdWx0ID0gRGF0dW1HZXRJbnQzMihGdW5jdGlvbkNhbGwyQ29s bCgmc2NhbmtleS0+c2tfZnVuYywKKwkJCQkJCQkJCQkJCQkgc2NhbmtleS0+c2tfY29sbGF0aW9u LAorCQkJCQkJCQkJCQkJCSBkYXR1bSwKKwkJCQkJCQkJCQkJCQkgc2NhbmtleS0+c2tfYXJndW1l bnQpKTsKKworCQkJaWYgKCEoc2NhbmtleS0+c2tfZmxhZ3MgJiBTS19CVF9ERVNDKSkKKwkJCQlJ TlZFUlRfQ09NUEFSRV9SRVNVTFQocmVzdWx0KTsKKwkJfQorCisJCS8qIGlmIHRoZSBrZXlzIGFy ZSB1bmVxdWFsLCByZXR1cm4gdGhlIGRpZmZlcmVuY2UgKi8KKwkJaWYgKHJlc3VsdCAhPSAwKQor CQkJcmV0dXJuIHJlc3VsdDsKKworCQlzY2Fua2V5Kys7CisJfQorCXJldHVybiAwOworfQorCisK Ky8qCisgKiBDcmVhdGUgaW5pdGlhbCBzY2Fua2V5cyBmb3Igc2tpcHBpbmcgYW5kIHN0b3JlcyB0 aGVtIGluIHRoZSBza2lwRGF0YQorICogc3RydWN0dXJlCisgKi8KK3ZvaWQKK19idF9za2lwX2Ny ZWF0ZV9zY2Fua2V5cyhSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK3sKKwlpbnQga2V5 c0NvdW50OworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCVN0cmF0ZWd5TnVtYmVyIHN0 cmF0VG90YWw7CisJU2NhbktleQkJa2V5UG9pbnRlcnNbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wg Z29iYWNrOworCS8qIHdlIG5lZWQgdG8gY3JlYXRlIGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmQg a2V5cyBiZWNhdXNlIHRoZSBzY2FuIGRpcmVjdGlvbgorCSAqIG1heSBjaGFuZ2UgYXQgYW55IG1v bWVudCBpbiBzY2FucyB3aXRoIGEgY3Vyc29yLgorCSAqIHdlIGNvdWxkIHRlY2huaWNhbGx5IGRl bGF5IGNyZWF0aW9uIG9mIHRoZSBzZWNvbmQgdW50aWwgZmlyc3QgdXNlIGFzIGFuIG9wdGltaXph dGlvbgorCSAqIGJ1dCB0aGF0IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisJICovCisJa2V5c0Nv dW50ID0gX2J0X2Nob29zZV9zY2FuX2tleXMoc28tPmtleURhdGEsIHNvLT5udW1iZXJPZktleXMs IEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIGtleVBvaW50ZXJzLCBza2lwLT5md2RO b3ROdWxsS2V5cywgJnN0cmF0VG90YWwsIHNraXAtPnByZWZpeCk7CisJX2J0X2NyZWF0ZV9pbnNl cnRpb25fc2Nhbl9rZXkocmVsLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwga2V5UG9pbnRlcnMsIGtl eXNDb3VudCwKKwkJCQkJCQkJICAmc2tpcC0+ZndkU2NhbktleSwgJnN0cmF0VG90YWwsICZnb2Jh Y2spOworCisJa2V5c0NvdW50ID0gX2J0X2Nob29zZV9zY2FuX2tleXMoc28tPmtleURhdGEsIHNv LT5udW1iZXJPZktleXMsIEJhY2t3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBrZXlQb2lu dGVycywgc2tpcC0+YndkTm90TnVsbEtleXMsICZzdHJhdFRvdGFsLCBza2lwLT5wcmVmaXgpOwor CV9idF9jcmVhdGVfaW5zZXJ0aW9uX3NjYW5fa2V5KHJlbCwgQmFja3dhcmRTY2FuRGlyZWN0aW9u LCBrZXlQb2ludGVycywga2V5c0NvdW50LAorCQkJCQkJCQkgICZza2lwLT5id2RTY2FuS2V5LCAm c3RyYXRUb3RhbCwgJmdvYmFjayk7CisKKwlfYnRfbWV0YXZlcnNpb24ocmVsLCAmc2tpcC0+Y3Vy UG9zLnNraXBTY2FuS2V5LmhlYXBrZXlzcGFjZSwKKwkJCQkJJnNraXAtPmN1clBvcy5za2lwU2Nh bktleS5hbGxlcXVhbGltYWdlKTsKKwlza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuYW55bnVsbGtl eXMgPSBmYWxzZTsgLyogdW51c2VkICovCisJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5Lm5leHRr ZXkgPSBmYWxzZTsKKwlza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkucGl2b3RzZWFyY2ggPSBmYWxz ZTsKKwlza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuc2NhbnRpZCA9IE5VTEw7CisJc2tpcC0+Y3Vy UG9zLnNraXBTY2FuS2V5LmtleXN6ID0gMDsKKworCS8qIHNldHVwIHNjYW5rZXkgZm9yIHRoZSBj dXJyZW50IHR1cGxlIGFzIHdlbGwuIGl0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoYXQKKwkgKiB3ZSB3 aWxsIHVzZSB0aGUgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHR1cGxlIGFscmVhZHksCisJICogYnV0 IHdlIG5lZWQgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHRvIGJlIHNldCB1cCBjb3Jy ZWN0bHkKKwkgKiBmb3Igd2hlbiB3ZSB1c2UgaXQgdG8gY3JlYXRlIHNraXAtPmN1clBvcy5za2lw U2NhbktleSBrZXlzIGxhdGVyCisJICovCisJX2J0X21rc2NhbmtleShyZWwsIE5VTEwsICZza2lw LT5jdXJyZW50VHVwbGVLZXkpOworfQorCisvKgorICogX2J0X3NjYW5rZXlfd2l0aGluX3BhZ2Uo KSAtLSBjaGVjayBpZiB0aGUgcHJvdmlkZWQgc2NhbmtleSBjb3VsZCBiZSBmb3VuZAorICogCQkJ CQkJCQl3aXRoaW4gYSBwYWdlLCBzcGVjaWZpZWQgYnkgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGlj IGlubGluZSBib29sCitfYnRfc2NhbmtleV93aXRoaW5fcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJUU2Nhbkluc2VydCBrZXksCisJCQkJCQlCdWZmZXIgYnVmKQoreworCS8qIEB0b2RvOiBvcHRp bWl6YXRpb24gaXMgc3RpbGwgcG9zc2libGUgaGVyZSB0bworCSAqIG9ubHkgY2hlY2sgZWl0aGVy IHRoZSBsb3cgb3IgdGhlIGhpZ2gsIGRlcGVuZGluZyBvbgorCSAqIHdoaWNoIGRpcmVjdGlvbiAq d2UgY2FtZSBmcm9tKiBBTkQgd2hpY2ggZGlyZWN0aW9uCisJICogKndlIGFyZSBwbGFubmluZyB0 byBzY2FuKgorCSAqLworCU9mZnNldE51bWJlciBsb3csIGhpZ2g7CisJUGFnZSBwYWdlID0gQnVm ZmVyR2V0UGFnZShidWYpOworCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQ YWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CisJaW50CQkJYW5zX2xvLCBhbnNfaGk7CisKKwls b3cgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCWhpZ2ggPSBQYWdlR2V0TWF4T2Zmc2V0TnVt YmVyKHBhZ2UpOworCisJaWYgKHVubGlrZWx5KGhpZ2ggPCBsb3cpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlhbnNfbG8gPSBfYnRfY29tcGFyZShzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkgICBr ZXksIHBhZ2UsIGxvdyk7CisJYW5zX2hpID0gX2J0X2NvbXBhcmUoc2Nhbi0+aW5kZXhSZWxhdGlv biwKKwkJCQkJICAga2V5LCBwYWdlLCBoaWdoKTsKKwlpZiAoa2V5LT5uZXh0a2V5KQorCXsKKwkJ Lyogc2sgPCBsYXN0ICYmIHNrID49IGZpcnN0ICovCisJCXJldHVybiBhbnNfbG8gPj0gMCAmJiBh bnNfaGkgPT0gLTE7CisJfQorCWVsc2UKKwl7CisJCS8qIHNrIDw9IGxhc3QgJiYgc2sgPiBmaXJz dCAqLworCQlyZXR1cm4gYW5zX2xvID09IDEgJiYgYW5zX2hpIDw9IDA7CisJfQorfQorCisvKiBp bjogcGlubmVkIGFuZCBsb2NrZWQsIG91dDogcGlubmVkIGFuZCBsb2NrZWQgKHVubGVzcyBlbmQg b2Ygc2NhbikgKi8KK3N0YXRpYyB2b2lkCitfYnRfc2tpcF9maW5kKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0sCisJ CQkgIEJUU2Nhbkluc2VydCBzY2FuS2V5LCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlCVFNjYW5P cGFxdWUgCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCU9mZnNldE51bWJlciBv ZmZudW07CisJQlRTdGFjayBzdGFjazsKKwlCdWZmZXIgYnVmOworCWJvb2wgZ29iYWNrOworCVBh Z2UJCXBhZ2U7CisJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgbWlub2ZmOwor CVJlbGF0aW9uIHJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJYm9vbCBmcm9tcm9vdCA9IHRy dWU7CisKKwlfYnRfc2V0X2JzZWFyY2hfZmxhZ3Moc2NhbktleS0+c2NhbmtleXNbc2NhbktleS0+ a2V5c3ogLSAxXS5za19zdHJhdGVneSwgZGlyLCAmc2NhbktleS0+bmV4dGtleSwgJmdvYmFjayk7 CisKKwlpZiAoKERFQlVHMiA+PSBsb2dfbWluX21lc3NhZ2VzIHx8IERFQlVHMiA+PSBjbGllbnRf bWluX21lc3NhZ2VzKSAmJiAhSXNDYXRhbG9nUmVsYXRpb24ocmVsKSkKKwl7CisJCWlmICgqY3Vy VHVwbGUgIT0gTlVMTCkKKwkJCXByaW50X2l0dXAoQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1 cnJQb3MuYnVmKSwgKmN1clR1cGxlLCBOVUxMLCByZWwsCisJCQkJCQkiYmVmb3JlIGJ0cmVlIHNl YXJjaCIpOworCisJCWVsb2coREVCVUcxLCAiJXMgc2VhcmNoaW5nIHRyZWUgd2l0aCAlZCBrZXlz LCBuZXh0a2V5PSVkLCBnb2JhY2s9JWQiLAorCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bCksIHNjYW5LZXktPmtleXN6LCBzY2FuS2V5LT5uZXh0a2V5LAorCQkJIGdvYmFjayk7CisKKwkJ X3ByaW50X3NrZXkoc2Nhbiwgc2NhbktleSk7CisJfQorCisJaWYgKCpjdXJUdXBsZU9mZm51bSA9 PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQorCXsKKwkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+ Y3VyclBvcyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChfYnRfc2NhbmtleV93aXRoaW5fcGFnZShz Y2FuLCBzY2FuS2V5LCBzby0+Y3VyclBvcy5idWYpKQorCQl7CisJCQllbG9nKERFQlVHMSwgInNr IGZvdW5kIHdpdGhpbiBjdXJyZW50IHBhZ2UiKTsKKworCQkJb2ZmbnVtID0gX2J0X2JpbnNyY2go c2Nhbi0+aW5kZXhSZWxhdGlvbiwgc2NhbktleSwgc28tPmN1cnJQb3MuYnVmKTsKKwkJCWZyb21y b290ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28t PmN1cnJQb3MuYnVmKTsKKwkJCVJlbGVhc2VCdWZmZXIoc28tPmN1cnJQb3MuYnVmKTsKKwkJCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGhh dmVuJ3QgZm91bmQgc2NhbiBrZXkgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UsIHNvIGxldCdzIHNj YW4gZnJvbQorCSAqIHRoZSByb290LiBVc2UgX2J0X3NlYXJjaCBhbmQgX2J0X2JpbnNyY2ggdG8g Z2V0IHRoZSBidWZmZXIgYW5kIG9mZnNldAorCSAqIG51bWJlcgorCSAqLworCWlmIChmcm9tcm9v dCkKKwl7CisJCXN0YWNrID0gX2J0X3NlYXJjaChzY2FuLT5pbmRleFJlbGF0aW9uLCBzY2FuS2V5 LAorCQkJCQkJICAgJmJ1ZiwgQlRfUkVBRCwgc2Nhbi0+eHNfc25hcHNob3QpOworCQlfYnRfZnJl ZXN0YWNrKHN0YWNrKTsKKwkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCisJCW9mZm51bSA9IF9i dF9iaW5zcmNoKHNjYW4tPmluZGV4UmVsYXRpb24sIHNjYW5LZXksIGJ1Zik7CisKKwkJLyogTG9j ayB0aGUgcGFnZSBmb3IgU0VSSUFMSVpBQkxFIHRyYW5zYWN0aW9ucyAqLworCQlQcmVkaWNhdGVM b2NrUGFnZShzY2FuLT5pbmRleFJlbGF0aW9uLCBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3Vy clBvcy5idWYpLAorCQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCk7CisJfQorCisJcGFnZSA9IEJ1 ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQ YWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CisKKwlpZiAoZ29iYWNrKQorCXsKKwkJb2ZmbnVt ID0gT2Zmc2V0TnVtYmVyUHJldihvZmZudW0pOworCQltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShv cGFxdWUpOworCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQorCQl7CisJCQlfYnRfdW5sb2NrYnVmKHJl bCwgc28tPmN1cnJQb3MuYnVmKTsKKwkJCWlmICghX2J0X3N0ZXBfYmFja19wYWdlKHNjYW4sIGN1 clR1cGxlLCBjdXJUdXBsZU9mZm51bSkpCisJCQkJcmV0dXJuOworCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJCW9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VH ZXRTcGVjaWFsUG9pbnRlcihwYWdlKTsKKwkJCW9mZm51bSA9IFBhZ2VHZXRNYXhPZmZzZXROdW1i ZXIocGFnZSk7CisJCX0KKwl9CisJZWxzZSBpZiAob2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51 bWJlcihwYWdlKSkKKwl7CisJCUJsb2NrTnVtYmVyIG5leHQgPSBvcGFxdWUtPmJ0cG9fbmV4dDsK KwkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7CisJCWlmICghX2J0X3N0ZXBf Zm9yd2FyZF9wYWdlKHNjYW4sIG5leHQsIGN1clR1cGxlLCBjdXJUdXBsZU9mZm51bSkpCisJCQly ZXR1cm47CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCW9wYXF1 ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihwYWdlKTsKKwkJb2ZmbnVt ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwl9CisKKwkvKiBXZSBrbm93IGluIHdoaWNoIGRp cmVjdGlvbiB0byBsb29rICovCisJX2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKHNvLCBkaXIpOwor CisJKmN1clR1cGxlT2ZmbnVtID0gb2ZmbnVtOworCSpjdXJUdXBsZSA9IF9idF9nZXRfdHVwbGVf ZnJvbV9vZmZzZXQoc28sIG9mZm51bSk7CisJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJH ZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOworCisJaWYgKERFQlVHMiA+PSBsb2dfbWlu X21lc3NhZ2VzIHx8IERFQlVHMiA+PSBjbGllbnRfbWluX21lc3NhZ2VzKQorCQlwcmludF9pdHVw KEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksICpjdXJUdXBsZSwgTlVMTCwg cmVsLAorCQkJCQkiYWZ0ZXIgYnRyZWUgc2VhcmNoIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v bAorX2J0X3N0ZXBfb25lX3BhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsCisJCQkJICBPZmZzZXROdW1iZXIgKmN1clR1cGxlT2Zm bnVtKQoreworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJeworCQlCVFNjYW5P cGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJCXJldHVybiBfYnRfc3Rl cF9mb3J3YXJkX3BhZ2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsIGN1clR1cGxlLCBjdXJU dXBsZU9mZm51bSk7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBfYnRfc3RlcF9iYWNrX3BhZ2Uo c2NhbiwgY3VyVHVwbGUsIGN1clR1cGxlT2ZmbnVtKTsKKwl9Cit9CisKKy8qIGluOiBwb3NzaWJs eSBwaW5uZWQsIGJ1dCB1bmxvY2tlZCwgb3V0OiBwaW5uZWQgYW5kIGxvY2tlZCAqLworYm9vbAor X2J0X3N0ZXBfZm9yd2FyZF9wYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgbmV4 dCwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsCisJCQkJCSAgT2Zmc2V0TnVtYmVyICpjdXJUdXBsZU9m Zm51bSkKK3sKKwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CisJUmVsYXRpb24gcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlCbG9ja051bWJlciBibGtu byA9IG5leHQ7CisJUGFnZSBwYWdlOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwlBc3NlcnQo QlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCisJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLworCWlmIChzby0+bnVtS2ls bGVkID4gMCkKKwkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKKworCS8qCisJICogQmVmb3JlIHdlIG1v ZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBh CisJICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgorCSAqLworCWlmIChzby0+bWFya0l0 ZW1JbmRleCA+PSAwKQorCXsKKwkJLyogYnVtcCBwaW4gb24gY3VycmVudCBidWZmZXIgZm9yIGFz c2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KKwkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSkKKwkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBvcy5idWYpOworCQltZW1j cHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCisJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NE YXRhLCBpdGVtc1sxXSkgKworCQkJICAgc28tPmN1cnJQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRT Y2FuUG9zSXRlbSkpOworCQlpZiAoc28tPm1hcmtUdXBsZXMpCisJCQltZW1jcHkoc28tPm1hcmtU dXBsZXMsIHNvLT5jdXJyVHVwbGVzLAorCQkJCSAgIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCk7CisJCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OworCQlpZiAo c28tPnNraXBEYXRhKQorCQkJbWVtY3B5KCZzby0+c2tpcERhdGEtPm1hcmtQb3MsICZzby0+c2tp cERhdGEtPmN1clBvcywKKwkJCQkgICBzaXplb2YoQlRTa2lwUG9zRGF0YSkpOworCQlzby0+bWFy a0l0ZW1JbmRleCA9IC0xOworCX0KKworCS8qIFJlbWVtYmVyIHdlIGxlZnQgYSBwYWdlIHdpdGgg ZGF0YSAqLworCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKKworCS8qIHJlbGVhc2UgdGhl IHByZXZpb3VzIGJ1ZmZlciwgaWYgcGlubmVkICovCisJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChz by0+Y3VyclBvcyk7CisKKwl7CisJCWZvciAoOzspCisJCXsKKwkJCS8qCisJCQkgKiBpZiB3ZSdy ZSBhdCBlbmQgb2Ygc2NhbiwgZ2l2ZSB1cCBhbmQgbWFyayBwYXJhbGxlbCBzY2FuIGFzCisJCQkg KiBkb25lLCBzbyB0aGF0IGFsbCB0aGUgd29ya2VycyBjYW4gZmluaXNoIHRoZWlyIHNjYW4KKwkJ CSAqLworCQkJaWYgKGJsa25vID09IFBfTk9ORSkKKwkJCXsKKwkJCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKKwkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKKwkJCQlyZXR1 cm4gZmFsc2U7CisJCQl9CisKKwkJCS8qIGNoZWNrIGZvciBpbnRlcnJ1cHRzIHdoaWxlIHdlJ3Jl IG5vdCBob2xkaW5nIGFueSBidWZmZXIgbG9jayAqLworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKwkJCS8qIHN0ZXAgcmlnaHQgb25lIHBhZ2UgKi8KKwkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9i dF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlwYWdlID0gQnVmZmVyR2V0UGFnZShz by0+Y3VyclBvcy5idWYpOworCQkJVGVzdEZvck9sZFNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90 LCByZWwsIHBhZ2UpOworCQkJb3BhcXVlID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQ b2ludGVyKHBhZ2UpOworCQkJLyogY2hlY2sgZm9yIGRlbGV0ZWQgcGFnZSAqLworCQkJaWYgKCFQ X0lHTk9SRShvcGFxdWUpKQorCQkJeworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgYmxrbm8s IHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJCQkqY3VyVHVwbGVPZmZudW0gPSBQX0ZJUlNUREFUQUtF WShvcGFxdWUpOworCQkJCSpjdXJUdXBsZSA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28s ICpjdXJUdXBsZU9mZm51bSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJsa25vID0gb3BhcXVl LT5idHBvX25leHQ7CisJCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKKwkJfQor CX0KKworCXJldHVybiB0cnVlOworfQorCisvKiBpbjogcG9zc2libHkgcGlubmVkLCBidXQgdW5s b2NrZWQsIG91dDogcGlubmVkIGFuZCBsb2NrZWQgKi8KK2Jvb2wKK19idF9zdGVwX2JhY2tfcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBPZmZzZXROdW1iZXIg KmN1clR1cGxlT2ZmbnVtKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKworCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisK KwkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCisJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQorCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwor CisJLyoKKwkgKiBCZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRoZSBw YWdlIGRhdGEgaWYgdGhlcmUgd2FzIGEKKwkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMgaXQu CisJICovCisJaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCisJeworCQkvKiBidW1wIHBpbiBv biBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLworCQlpZiAo QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQorCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNv LT5jdXJyUG9zLmJ1Zik7CisJCW1lbWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKKwkJ CSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCisJCQkgICBzby0+Y3VyclBv cy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7CisJCWlmIChzby0+bWFya1R1cGxl cykKKwkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCisJCQkJICAgc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaWYgKHNvLT5za2lwRGF0YSkKKwkJCW1lbWNw eSgmc28tPnNraXBEYXRhLT5tYXJrUG9zLCAmc28tPnNraXBEYXRhLT5jdXJQb3MsCisJCQkJICAg c2l6ZW9mKEJUU2tpcFBvc0RhdGEpKTsKKwkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28tPm1h cmtJdGVtSW5kZXg7CisJCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CisJfQorCisJLyogUmVtZW1i ZXIgd2UgbGVmdCBhIHBhZ2Ugd2l0aCBkYXRhICovCisJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0g dHJ1ZTsKKworCS8qIE5vdCBwYXJhbGxlbCwgc28ganVzdCB1c2Ugb3VyIG93biBub3Rpb24gb2Yg dGhlIGN1cnJlbnQgcGFnZSAqLworCisJeworCQlSZWxhdGlvbglyZWw7CisJCVBhZ2UJCXBhZ2U7 CisJCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwkJcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK KworCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQorCQkJX2J0X2xvY2tidWYo cmVsLCBzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQllbHNlCisJCQlzby0+Y3VyclBvcy5i dWYgPSBfYnRfZ2V0YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOworCisJ CWZvciAoOzspCisJCXsKKwkJCS8qIFN0ZXAgdG8gbmV4dCBwaHlzaWNhbCBwYWdlICovCisJCQlz by0+Y3VyclBvcy5idWYgPSBfYnRfd2Fsa19sZWZ0KHJlbCwgc28tPmN1cnJQb3MuYnVmLAorCQkJ CQkJCQkJCQlzY2FuLT54c19zbmFwc2hvdCk7CisKKwkJCS8qIGlmIHdlJ3JlIHBoeXNpY2FsbHkg YXQgZW5kIG9mIGluZGV4LCByZXR1cm4gZmFpbHVyZSAqLworCQkJaWYgKHNvLT5jdXJyUG9zLmJ1 ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJeworCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1 cnJQb3MpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE9rYXksIHdl IG1hbmFnZWQgdG8gbW92ZSBsZWZ0IHRvIGEgbm9uLWRlbGV0ZWQgcGFnZS4gRG9uZSBpZgorCQkJ ICogaXQncyBub3QgaGFsZi1kZWFkIGFuZCBjb250YWlucyBtYXRjaGluZyB0dXBsZXMuIEVsc2Ug bG9vcCBiYWNrCisJCQkgKiBhbmQgZG8gaXQgYWxsIGFnYWluLgorCQkJICovCisJCQlwYWdlID0g QnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQkJVGVzdEZvck9sZFNuYXBzaG90KHNj YW4tPnhzX3NuYXBzaG90LCByZWwsIHBhZ2UpOworCQkJb3BhcXVlID0gKEJUUGFnZU9wYXF1ZSkg UGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOworCQkJaWYgKCFQX0lHTk9SRShvcGFxdWUpKQor CQkJeworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28t PmN1cnJQb3MuYnVmKSwgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJCSpjdXJUdXBsZU9mZm51bSA9 IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisJCQkJKmN1clR1cGxlID0gX2J0X2dldF90 dXBsZV9mcm9tX29mZnNldChzbywgKmN1clR1cGxlT2ZmbnVtKTsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCisvKiBob2xkcyBsb2NrIGFzIGxvbmcgYXMg Y3VyVHVwbGVPZmZudW0gIT0gSW52YWxpZE9mZnNldE51bWJlciAqLworYm9vbAorX2J0X3NraXBf ZmluZF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBjdXJUdXBsZSwgT2Zmc2V0 TnVtYmVyIGN1clR1cGxlT2ZmbnVtLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBT Y2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCUJUU2tp cENvbXBhcmVSZXN1bHQgY21wOworCisJd2hpbGUgKF9idF9za2lwX2lzX3ZhbGlkKHNvLCBwcmVm aXhEaXIsIHBvc3RmaXhEaXIpKQorCXsKKwkJYm9vbCBmb3VuZDsKKwkJX2J0X3NraXBfdW50aWxf bWF0Y2goc2NhbiwgJmN1clR1cGxlLCAmY3VyVHVwbGVPZmZudW0sIHByZWZpeERpciwgcG9zdGZp eERpcik7CisKKwkJd2hpbGUgKF9idF9za2lwX2lzX2Fsd2F5c192YWxpZChzbykpCisJCXsKKwkJ CU9mZnNldE51bWJlciBmaXJzdCA9IGN1clR1cGxlT2ZmbnVtOworCQkJZm91bmQgPSBfYnRfcmVh ZHBhZ2Uoc2NhbiwgcG9zdGZpeERpciwgJmN1clR1cGxlT2ZmbnVtLAorCQkJCQkJCQkgX2J0X3Nr aXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikpOworCQkJaWYgKERFQlVH MiA+PSBsb2dfbWluX21lc3NhZ2VzIHx8IERFQlVHMiA+PSBjbGllbnRfbWluX21lc3NhZ2VzKQor CQkJeworCQkJCXByaW50X2l0dXAoQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVm KSwKKwkJCQkJCSAgIF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGZpcnN0KSwgTlVMTCwg c2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkiZmlyc3QgaXRlbSBvbiBwYWdlIGNvbXBhcmVk Iik7CisJCQkJcHJpbnRfaXR1cChCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYp LAorCQkJCQkJICAgX2J0X2dldF90dXBsZV9mcm9tX29mZnNldChzbywgY3VyVHVwbGVPZmZudW0p LCBOVUxMLCBzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJCSJsYXN0IGl0ZW0gb24gcGFnZSBj b21wYXJlZCIpOworCQkJfQorCQkJX2J0X2NvbXBhcmVfY3VycmVudF9pdGVtKHNjYW4sIF9idF9n ZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVtKSwKKwkJCQkJCQkJCSBJbmRl eFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24pLAorCQkJ CQkJCQkJIHBvc3RmaXhEaXIsIF9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIsIHBv c3RmaXhEaXIpLCAmY21wKTsKKwkJCV9idF9kZXRlcm1pbmVfbmV4dF9hY3Rpb24oc2NhbiwgJmNt cCwgZmlyc3QsIGN1clR1cGxlT2ZmbnVtLAorCQkJCQkJCQkJICBwb3N0Zml4RGlyLCAmc2tpcC0+ Y3VyUG9zLm5leHRBY3Rpb24pOworCQkJc2tpcC0+Y3VyUG9zLm5leHREaXJlY3Rpb24gPSBwcmVm aXhEaXI7CisJCQlza2lwLT5jdXJQb3MubmV4dFNraXBJbmRleCA9IGNtcC5wcmVmaXhTa2lwSW5k ZXg7CisKKwkJCWlmIChmb3VuZCkKKwkJCXsKKwkJCQlfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9h ZnRlcl9yZWFkKHNjYW4sIF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2Zm bnVtKSwKKwkJCQkJCQkJCQkJCSAgIHByZWZpeERpciwgcG9zdGZpeERpcik7CisJCQkJcmV0dXJu IHRydWU7CisJCQl9CisJCQllbHNlIGlmIChza2lwLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBTa2lw U3RhdGVOZXh0KQorCQkJeworCQkJCWlmIChjdXJUdXBsZU9mZm51bSAhPSBJbnZhbGlkT2Zmc2V0 TnVtYmVyKQorCQkJCQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJy UG9zLmJ1Zik7CisJCQkJaWYgKCFfYnRfc3RlcF9vbmVfcGFnZShzY2FuLCBwb3N0Zml4RGlyLCAm Y3VyVHVwbGUsICZjdXJUdXBsZU9mZm51bSkpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJ CWVsc2UgaWYgKHNraXAtPmN1clBvcy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVNraXAgfHwgc2tp cC0+Y3VyUG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU2tpcEV4dHJhKQorCQkJeworCQkJCWN1 clR1cGxlID0gX2J0X2dldF90dXBsZV9mcm9tX29mZnNldChzbywgY3VyVHVwbGVPZmZudW0pOwor CQkJCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2FmdGVyX3JlYWQoc2NhbiwgY3VyVHVwbGUsIHBy ZWZpeERpciwgcG9zdGZpeERpcik7CisJCQkJX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0 aW9uLCBzby0+Y3VyclBvcy5idWYpOworCQkJCWN1clR1cGxlT2ZmbnVtID0gSW52YWxpZE9mZnNl dE51bWJlcjsKKwkJCQljdXJUdXBsZSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNl IGlmIChza2lwLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3RhdGVTdG9wKQorCQkJeworCQkJ CV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkJ CQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwkJCQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5jdXJyUG9zKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9 CisKK3ZvaWQKK19idF9za2lwX3VudGlsX21hdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhU dXBsZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0sCisJCQkJCSBTY2Fu RGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKQoreworCUJUU2Nh bk9wYXF1ZSAJc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTa2lwIHNraXAg PSBzby0+c2tpcERhdGE7CisJd2hpbGUgKF9idF9za2lwX2lzX3ZhbGlkKHNvLCBwcmVmaXhEaXIs IHBvc3RmaXhEaXIpICYmCisJCSAgIChza2lwLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3Rh dGVTa2lwIHx8IHNraXAtPmN1clBvcy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVNraXBFeHRyYSkp CisJeworCQlfYnRfc2tpcF9vbmNlKHNjYW4sIGN1clR1cGxlLCBjdXJUdXBsZU9mZm51bSwKKwkJ CQkJICBza2lwLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3RhdGVTa2lwLCBwcmVmaXhEaXIs IHBvc3RmaXhEaXIpOworCX0KK30KKwordm9pZAorX2J0X2NvbXBhcmVfY3VycmVudF9pdGVtKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCQkJCSBib29sIGlzUmVndWxhck1vZGUsIEJUU2tpcENvbXBhcmVSZXN1 bHQqIGNtcCkKK3sKKwlCVFNjYW5PcGFxdWUgCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCisJaWYgKF9idF9za2lwX2lzX2Fs d2F5c192YWxpZChzbykpCisJeworCQlib29sIGNvbnRpbnVlc2NhbiA9IHRydWU7CisKKwkJY21w LT5lcXVhbCA9IF9idF9jaGVja2tleXMoc2NhbiwgdHVwbGUsIHR1cG5hdHRzLCBkaXIsICZjb250 aW51ZXNjYW4sICZjbXAtPnByZWZpeFNraXBJbmRleCk7CisJCWNtcC0+ZnVsbEtleVNraXAgPSAh Y29udGludWVzY2FuOworCQkvKiBwcmVmaXggY2FuIGJlIHNtYWxsZXIgdGhhbiBzY2Fua2V5IGR1 ZSB0byBleHRyYSBxdWFscyBiZWluZyBhZGRlZAorCQkgKiB0aGVyZWZvcmUgd2UgbmVlZCB0byBj b21wYXJlIGJvdGguIEB0b2RvIHRoaXMgY2FuIGJlIG9wdGltaXplZCBpbnRvIG9uZSBmdW5jdGlv biBjYWxsICovCisJCWNtcC0+cHJlZml4Q21wUmVzdWx0ID0gX2J0X2NvbXBhcmVfdW50aWwoc2Nh bi0+aW5kZXhSZWxhdGlvbiwgJnNraXAtPmN1clBvcy5za2lwU2NhbktleSwgdHVwbGUsIHNraXAt PnByZWZpeCk7CisJCWNtcC0+c2tDbXBSZXN1bHQgPSBfYnRfY29tcGFyZV91bnRpbChzY2FuLT5p bmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkgJnNraXAtPmN1clBvcy5za2lwU2NhbktleSwgdHVw bGUsIHNraXAtPmN1clBvcy5za2lwU2NhbktleS5rZXlzeik7CisJCWlmIChjbXAtPnByZWZpeFNr aXBJbmRleCA9PSAtMSkKKwkJeworCQkJaWYgKGlzUmVndWxhck1vZGUpCisJCQl7CisJCQkJY21w LT5wcmVmaXhTa2lwID0gZmFsc2U7CisJCQkJY21wLT5wcmVmaXhTa2lwSW5kZXggPSBza2lwLT5w cmVmaXg7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJY21wLT5wcmVmaXhTa2lwID0gU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpID8gY21wLT5wcmVmaXhDbXBSZXN1bHQgPCAwIDogY21wLT5w cmVmaXhDbXBSZXN1bHQgPiAwOworCQkJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0gc2tpcC0+cHJl Zml4OworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaW50IG5ld3NraXAgPSAtMTsKKwkJCV9i dF9jaGVja2tleXNfdGhyZWV3YXkoc2NhbiwgdHVwbGUsIHR1cG5hdHRzLCBkaXIsICZjb250aW51 ZXNjYW4sICZuZXdza2lwKTsKKwkJCWlmIChuZXdza2lwICE9IC0xKQorCQkJeworCQkJCWNtcC0+ cHJlZml4U2tpcCA9IHRydWU7CisJCQkJY21wLT5wcmVmaXhTa2lwSW5kZXggPSBuZXdza2lwOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChpc1JlZ3VsYXJNb2RlKQorCQkJCXsKKwkJCQkJ Y21wLT5wcmVmaXhTa2lwID0gZmFsc2U7CisJCQkJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0gc2tp cC0+cHJlZml4OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQljbXAtPnByZWZpeFNraXAg PSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBjbXAtPnByZWZpeENtcFJlc3VsdCA8IDAg OiBjbXAtPnByZWZpeENtcFJlc3VsdCA+IDA7CisJCQkJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0g c2tpcC0+cHJlZml4OworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChERUJVRzIgPj0gbG9nX21p bl9tZXNzYWdlcyB8fCBERUJVRzIgPj0gY2xpZW50X21pbl9tZXNzYWdlcykKKwkJeworCQkJcHJp bnRfaXR1cChCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpLCB0dXBsZSwgTlVM TCwgc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCSJjb21wYXJlIGl0ZW0iKTsKKwkJCV9wcmlu dF9za2V5KHNjYW4sICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkpOworCQkJZWxvZyhERUJVRzEs ICJyZXN1bHQ6IGVxOiAlZCBma3NraXA6ICVkIHBmeHNraXA6ICVkIHByZWZpeGNtcHJlczogJWQg cHJlZml4c2tpcGlkeDogJWQiLCBjbXAtPmVxdWFsLCBjbXAtPmZ1bGxLZXlTa2lwLAorCQkJCSBf YnRfc2hvdWxkX3ByZWZpeF9za2lwKGNtcCksIGNtcC0+cHJlZml4Q21wUmVzdWx0LCBjbXAtPnBy ZWZpeFNraXBJbmRleCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogd2UgY2Fubm90IHN0b3Ag dGhlIHNjYW4gaWYgIWlzUmVndWxhck1vZGUgLSB0aGVuIHdlIGRvIG5lZWQgdG8gc2tpcCB0byB0 aGUgbmV4dCBwcmVmaXggKi8KKwkJY21wLT5mdWxsS2V5U2tpcCA9IGlzUmVndWxhck1vZGU7CisJ CWNtcC0+ZXF1YWwgPSBmYWxzZTsKKwkJY21wLT5wcmVmaXhDbXBSZXN1bHQgPSAtMjsKKwkJY21w LT5wcmVmaXhTa2lwID0gdHJ1ZTsKKwkJY21wLT5wcmVmaXhTa2lwSW5kZXggPSBza2lwLT5wcmVm aXg7CisJCWNtcC0+c2tDbXBSZXN1bHQgPSAtMjsKKwl9Cit9CisKK3ZvaWQKK19idF9za2lwX29u Y2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlICpjdXJUdXBsZSwgT2Zmc2V0TnVtYmVy ICpjdXJUdXBsZU9mZm51bSwKKwkJCSAgYm9vbCBmb3JjZVNraXAsIFNjYW5EaXJlY3Rpb24gcHJl Zml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJQlRTY2FuT3BhcXVlIAlzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNraXAgc2tpcCA9IHNvLT5za2lwRGF0 YTsKKwlCVFNraXBDb21wYXJlUmVzdWx0IGNtcDsKKwlib29sIGRvc2tpcCA9IGZvcmNlU2tpcDsK KwlpbnQgc2tpcEluZGV4ID0gc2tpcC0+Y3VyUG9zLm5leHRTa2lwSW5kZXg7CisJc2tpcC0+Y3Vy UG9zLm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTa2lwRXh0cmE7CisKKwl3aGlsZSAoZG9za2lwKQor CXsKKwkJaW50IHRvc2tpcCA9IHNraXBJbmRleDsKKwkJaWYgKCpjdXJUdXBsZSAhPSBOVUxMKQor CQl7CisJCQlpZiAoc2tpcC0+cHJlZml4IDw9IHNraXBJbmRleCB8fCAhX2J0X3NraXBfaXNfcmVn dWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikpCisJCQl7CisJCQkJdG9za2lwID0gc2tp cC0+cHJlZml4OworCQkJfQorCisJCQlfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfcHJlZml4 X3NraXAoc2Nhbiwgc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQl0b3NraXAsICpj dXJUdXBsZSwgcHJlZml4RGlyKTsKKwkJfQorCisJCWlmIChERUJVRzEgPj0gbG9nX21pbl9tZXNz YWdlcyB8fCBERUJVRzEgPj0gY2xpZW50X21pbl9tZXNzYWdlcykKKwkJeworCQkJZGVidWdfcHJp bnQoKmN1clR1cGxlLCAmc28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFNjYW5LZXksIHNjYW4tPmlu ZGV4UmVsYXRpb24sICJza2lwIik7CisJCX0KKworCQlfYnRfc2tpcF9maW5kKHNjYW4sIGN1clR1 cGxlLCBjdXJUdXBsZU9mZm51bSwgJnNraXAtPmN1clBvcy5za2lwU2NhbktleSwgcHJlZml4RGly KTsKKworCQlpZiAoX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlkKHNvKSkKKwkJeworCQkJX2J0X3Nr aXBfdXBkYXRlX3NjYW5rZXlfZm9yX2V4dHJhX3NraXAoc2Nhbiwgc2Nhbi0+aW5kZXhSZWxhdGlv biwKKwkJCQkJCQkJCQkJCSAgIHByZWZpeERpciwgcHJlZml4RGlyLCB0cnVlLCAqY3VyVHVwbGUp OworCQkJX2J0X2NvbXBhcmVfY3VycmVudF9pdGVtKHNjYW4sICpjdXJUdXBsZSwKKwkJCQkJCQkJ CSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24p LAorCQkJCQkJCQkJIHByZWZpeERpciwKKwkJCQkJCQkJCSBfYnRfc2tpcF9pc19yZWd1bGFyX21v ZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSwgJmNtcCk7CisJCQlza2lwSW5kZXggPSBjbXAucHJl Zml4U2tpcEluZGV4OworCQkJX2J0X2RldGVybWluZV9uZXh0X2FjdGlvbl9hZnRlcl9za2lwKHNv LCAmY21wLCBwcmVmaXhEaXIsCisJCQkJCQkJCQkJCQkgcG9zdGZpeERpciwgdG9za2lwLCAmc2tp cC0+Y3VyUG9zLm5leHRBY3Rpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJc2tpcC0+Y3VyUG9z Lm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTdG9wOworCQl9CisJCWRvc2tpcCA9IHNraXAtPmN1clBv cy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVNraXA7CisJfQorCWlmIChza2lwLT5jdXJQb3MubmV4 dEFjdGlvbiAhPSBTa2lwU3RhdGVTdG9wICYmIHNraXAtPmN1clBvcy5uZXh0QWN0aW9uICE9IFNr aXBTdGF0ZU5leHQpCisJCV9idF9za2lwX2V4dHJhX2NvbmRpdGlvbnMoc2NhbiwgY3VyVHVwbGUs IGN1clR1cGxlT2ZmbnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIsICZjbXApOworfQorCit2b2lk CitfYnRfc2tpcF9leHRyYV9jb25kaXRpb25zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBs ZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0sCisJCQkJCQkgIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIsIEJUU2tpcENvbXBh cmVSZXN1bHQgKmNtcCkKK3sKKwlCVFNjYW5PcGFxdWUgCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCWJvb2wgcmVndWxhck1v ZGUgPSBfYnRfc2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKwlp ZiAoX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlkKHNvKSkKKwl7CisJCWRvCisJCXsKKwkJCWlmICgq Y3VyVHVwbGUgIT0gTlVMTCkKKwkJCQlfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfZXh0cmFf c2tpcChzY2FuLCBzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCSAgIHBvc3RmaXhE aXIsIHByZWZpeERpciwgZmFsc2UsICpjdXJUdXBsZSk7CisJCQlpZiAoREVCVUcxID49IGxvZ19t aW5fbWVzc2FnZXMgfHwgREVCVUcxID49IGNsaWVudF9taW5fbWVzc2FnZXMpCisJCQl7CisJCQkJ ZGVidWdfcHJpbnQoKmN1clR1cGxlLCAmc28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFNjYW5LZXks IHNjYW4tPmluZGV4UmVsYXRpb24sICJza2lwLWV4dHJhIik7CisJCQl9CisJCQlfYnRfc2tpcF9m aW5kKHNjYW4sIGN1clR1cGxlLCBjdXJUdXBsZU9mZm51bSwgJnNraXAtPmN1clBvcy5za2lwU2Nh bktleSwgcG9zdGZpeERpcik7CisJCQlfYnRfY29tcGFyZV9jdXJyZW50X2l0ZW0oc2NhbiwgKmN1 clR1cGxlLAorCQkJCQkJCQkJIEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMoc2Nh bi0+aW5kZXhSZWxhdGlvbiksCisJCQkJCQkJCQkgcG9zdGZpeERpciwgX2J0X3NraXBfaXNfcmVn dWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpciksIGNtcCk7CisJCX0gd2hpbGUgKHJlZ3Vs YXJNb2RlICYmIGNtcC0+cHJlZml4Q21wUmVzdWx0ICE9IDAgJiYgIWNtcC0+ZXF1YWwgJiYgIWNt cC0+ZnVsbEtleVNraXApOworCQlza2lwLT5jdXJQb3MubmV4dFNraXBJbmRleCA9IGNtcC0+cHJl Zml4U2tpcEluZGV4OworCX0KKwlfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uX2FmdGVyX3NraXBf ZXh0cmEoc28sIGNtcCwgJnNraXAtPmN1clBvcy5uZXh0QWN0aW9uKTsKK30KKworc3RhdGljIHZv aWQKK19idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2FmdGVyX3JlYWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFR1cGxlIGN1clR1cGxlLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIHByZWZpeERp ciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKQoreworCUJUU2Nhbk9wYXF1ZSAJc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTa2lwIHNraXAgPSBzby0+c2tpcERhdGE7CisJ aWYgKHNraXAtPmN1clBvcy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVNraXApCisJeworCQlpbnQg dG9za2lwID0gc2tpcC0+Y3VyUG9zLm5leHRTa2lwSW5kZXg7CisJCWlmIChza2lwLT5wcmVmaXgg PD0gc2tpcC0+Y3VyUG9zLm5leHRTa2lwSW5kZXggfHwKKwkJCQkhX2J0X3NraXBfaXNfcmVndWxh cl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikpCisJCXsKKwkJCXRvc2tpcCA9IHNraXAtPnBy ZWZpeDsKKwkJfQorCisJCWlmIChfYnRfc2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBw b3N0Zml4RGlyKSkKKwkJCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9wcmVmaXhfc2tpcChz Y2FuLCBzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCXRvc2tpcCwgY3VyVHVwbGUs IHByZWZpeERpcik7CisJCWVsc2UKKwkJCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9wcmVm aXhfc2tpcChzY2FuLCBzY2FuLT5pbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCXRvc2tpcCwg TlVMTCwgcHJlZml4RGlyKTsKKwl9CisJZWxzZSBpZiAoc2tpcC0+Y3VyUG9zLm5leHRBY3Rpb24g PT0gU2tpcFN0YXRlU2tpcEV4dHJhKQorCXsKKwkJX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9y X2V4dHJhX3NraXAoc2Nhbiwgc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCQkJICAgcG9z dGZpeERpciwgcHJlZml4RGlyLCBmYWxzZSwgY3VyVHVwbGUpOworCX0KK30KKworc3RhdGljIGlu bGluZSBpbnQKK19idF9jb21wYXJlX29uZShTY2FuS2V5IHNjYW5rZXksIERhdHVtIGRhdHVtMiwg Ym9vbCBpc051bGwyKQoreworCWludDMyCQlyZXN1bHQ7CisJRGF0dW0gZGF0dW0xID0gc2Nhbmtl eS0+c2tfYXJndW1lbnQ7CisJYm9vbCBpc051bGwxID0gc2NhbmtleS0+c2tfZmxhZ3MgJiBTS19J U05VTEw7CisJLyogc2VlIGNvbW1lbnRzIGFib3V0IE5VTExzIGhhbmRsaW5nIGluIGJ0YnVpbGQg Ki8KKwlpZiAoaXNOdWxsMSkJLyoga2V5IGlzIE5VTEwgKi8KKwl7CisJCWlmIChpc051bGwyKQor CQkJcmVzdWx0ID0gMDsJCS8qIE5VTEwgIj0iIE5VTEwgKi8KKwkJZWxzZSBpZiAoc2NhbmtleS0+ c2tfZmxhZ3MgJiBTS19CVF9OVUxMU19GSVJTVCkKKwkJCXJlc3VsdCA9IC0xOwkvKiBOVUxMICI8 IiBOT1RfTlVMTCAqLworCQllbHNlCisJCQlyZXN1bHQgPSAxOwkJLyogTlVMTCAiPiIgTk9UX05V TEwgKi8KKwl9CisJZWxzZSBpZiAoaXNOdWxsMikJCS8qIGtleSBpcyBOT1RfTlVMTCBhbmQgaXRl bSBpcyBOVUxMICovCisJeworCQlpZiAoc2NhbmtleS0+c2tfZmxhZ3MgJiBTS19CVF9OVUxMU19G SVJTVCkKKwkJCXJlc3VsdCA9IDE7CQkvKiBOT1RfTlVMTCAiPiIgTlVMTCAqLworCQllbHNlCisJ CQlyZXN1bHQgPSAtMTsJLyogTk9UX05VTEwgIjwiIE5VTEwgKi8KKwl9CisJZWxzZQorCXsKKwkJ LyoKKwkJICogVGhlIHNrX2Z1bmMgbmVlZHMgdG8gYmUgcGFzc2VkIHRoZSBpbmRleCB2YWx1ZSBh cyBsZWZ0IGFyZyBhbmQKKwkJICogdGhlIHNrX2FyZ3VtZW50IGFzIHJpZ2h0IGFyZyAodGhleSBt aWdodCBiZSBvZiBkaWZmZXJlbnQKKwkJICogdHlwZXMpLiAgU2luY2UgaXQgaXMgY29udmVuaWVu dCBmb3IgY2FsbGVycyB0byB0aGluayBvZgorCQkgKiBfYnRfY29tcGFyZSBhcyBjb21wYXJpbmcg dGhlIHNjYW5rZXkgdG8gdGhlIGluZGV4IGl0ZW0sIHdlIGhhdmUKKwkJICogdG8gZmxpcCB0aGUg c2lnbiBvZiB0aGUgY29tcGFyaXNvbiByZXN1bHQuICAoVW5sZXNzIGl0J3MgYSBERVNDCisJCSAq IGNvbHVtbiwgaW4gd2hpY2ggY2FzZSB3ZSAqZG9uJ3QqIGZsaXAgdGhlIHNpZ24uKQorCQkgKi8K KwkJcmVzdWx0ID0gRGF0dW1HZXRJbnQzMihGdW5jdGlvbkNhbGwyQ29sbCgmc2NhbmtleS0+c2tf ZnVuYywKKwkJCQkJCQkJCQkJCSBzY2Fua2V5LT5za19jb2xsYXRpb24sCisJCQkJCQkJCQkJCQkg ZGF0dW0yLAorCQkJCQkJCQkJCQkJIGRhdHVtMSkpOworCisJCWlmICghKHNjYW5rZXktPnNrX2Zs YWdzICYgU0tfQlRfREVTQykpCisJCQlJTlZFUlRfQ09NUEFSRV9SRVNVTFQocmVzdWx0KTsKKwl9 CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHNldCB1cCBuZXcgdmFsdWVzIGZvciB0aGUg ZXhpc3Rpbmcgc2NhbmtleXMKKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IGluZGV4IHR1cGxlCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX2J0X3VwZGF0ZV9zY2Fua2V5X3dpdGhfdHVwbGUoQlRT Y2FuSW5zZXJ0IGluc2VydEtleSwgUmVsYXRpb24gaW5kZXhSZWwsIEluZGV4VHVwbGUgaXR1cCwg aW50IG51bWF0dHJzKQoreworCVR1cGxlRGVzYwkJaXR1cGRlc2M7CisJaW50CQkJCWk7CisJU2Nh bktleQkJCXNjYW5rZXlzID0gaW5zZXJ0S2V5LT5zY2Fua2V5czsKKworCWluc2VydEtleS0+a2V5 c3ogPSBudW1hdHRyczsKKwlpdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhSZWwpOwor CWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJRGF0dW0gZGF0dW07CisJCWJv b2wgbnVsbDsKKwkJaW50IGZsYWdzOworCisJCWRhdHVtID0gaW5kZXhfZ2V0YXR0cihpdHVwLCBp ICsgMSwgaXR1cGRlc2MsICZudWxsKTsKKwkJZmxhZ3MgPSAobnVsbCA/IFNLX0lTTlVMTCA6IDAp IHwKKwkJCQkoaW5kZXhSZWwtPnJkX2luZG9wdGlvbltpXSA8PCBTS19CVF9JTkRPUFRJT05fU0hJ RlQpOworCQlzY2Fua2V5c1tpXS5za19mbGFncyA9IGZsYWdzOworCQlzY2Fua2V5c1tpXS5za19h cmd1bWVudCA9IGRhdHVtOworCX0KK30KKworLyogY29weSB0aGUgZWxlbWVudHMgaW1wb3J0YW50 IHRvIGEgc2tpcCBmcm9tIG9uZSBpbnNlcnRpb24gc2sgdG8gYW5vdGhlciAqLworc3RhdGljIGlu bGluZSB2b2lkCitfYnRfY29weV9zY2Fua2V5KEJUU2Nhbkluc2VydCB0bywgQlRTY2FuSW5zZXJ0 IGZyb20sIGludCBudW1hdHRycykKK3sKKwltZW1jcHkodG8tPnNjYW5rZXlzLCBmcm9tLT5zY2Fu a2V5cywgc2l6ZW9mKFNjYW5LZXlEYXRhKSAqICh1bnNpZ25lZCBsb25nKW51bWF0dHJzKTsKKwl0 by0+bmV4dGtleSA9IGZyb20tPm5leHRrZXk7CisJdG8tPmtleXN6ID0gbnVtYXR0cnM7Cit9CisK Ky8qCisgKiBVcGRhdGVzIHRoZSBleGlzdGluZyBzY2Fua2V5IGZvciBza2lwcGluZyB0byB0aGUg bmV4dCBwcmVmaXgKKyAqIGFsd2F5c1VzZVByZWZpeCBkZXRlcm1pbmVzIGhvdyBtYW55IGF0dHJz IHRoZSBzY2Fua2V5IHdpbGwgaGF2ZQorICogd2hlbiB0cnVlLCBpdCB3aWxsIGFsd2F5cyBoYXZl IHNraXAtPnByZWZpeCBudW1iZXIgb2YgYXR0cmlidXRlcywKKyAqIG90aGVyd2lzZSwgdGhlIHZh bHVlIGNhbiBiZSBsZXNzLCB3aGljaCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbXBhcmlz b24KKyAqIHJlc3VsdCB3aXRoIHRoZSBjdXJyZW50IHR1cGxlLgorICogZm9yIGV4YW1wbGUsIGEg U0VMRUNUICogRlJPTSB0YmwgV0hFUkUgYjwyLCBpbmRleCAoYSxiLGMpIGFuZCB3aGVuIHNraXBw aW5nIHdpdGggcHJlZml4IHNpemU9MgorICogaWYgd2UgZW5jb3VudGVyIHRoZSB0dXBsZSAoMSwz LDEpIC0gdGhpcyBkb2VzIG5vdCBtYXRjaCB0aGUgcXVhbCBiPDIuIGhvd2V2ZXIsIHdlIGFsc28g a25vdyB0aGF0CisgKiBpdCBpcyBub3QgdXNlZnVsIHRvIHNraXAgdG8gYW55IG5leHQgcXVhbCB3 aXRoIHByZWZpeD0yIChlZy4gKDEsNCkpLCBiZWNhdXNlIHRoYXQgd2lsbCBkZWZpbml0ZWx5IG5v dAorICogbWF0Y2ggZWl0aGVyLiBIb3dldmVyLCB3ZSBkbyB3YW50IHRvIHNraXAgdG8gZWcuICgy LDApLiBUaGVyZWZvcmUsIHdlIHNraXAgb3ZlciBwcmVmaXg9MSBpbiB0aGlzIGNhc2UuCisgKgor ICogdGhlIHByb3ZpZGVkIGl0dXAgbWF5IGJlIG51bGwuIHRoaXMgaGFwcGVucyB3aGVuIHdlIGRv bid0IHdhbnQgdG8gdXNlIHRoZSBjdXJyZW50IHR1cGxlIHRvIHVwZGF0ZQorICogdGhlIHNjYW5r ZXksIGJ1dCBpbnN0ZWFkIHdhbnQgdG8gdXNlIHRoZSBleGlzdGluZyBjdXJQb3Muc2tpcFNjYW5L ZXkgdG8gZmlsbCBjdXJyZW50VHVwbGVLZXkuIHRoaXMgYWNjb3VudHMKKyAqIGZvciBzb21lIGVk Z2UgY2FzZXMuCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3Jf cHJlZml4X3NraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBSZWxhdGlvbiBpbmRleFJlbCwKKwkJCQkJ CQkJCQlpbnQgcHJlZml4LCBJbmRleFR1cGxlIGl0dXAsIFNjYW5EaXJlY3Rpb24gcHJlZml4RGly KQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VFNraXAgc2tpcCA9IHNvLT5za2lwRGF0YTsKKwkvKiB3ZSB1c2Ugc2tpcC0+cHJlZml4IGlzIGFs d2F5c1VzZVByZWZpeCBpcyBzZXQgb3IgaWYgc2tpcC0+cHJlZml4IGlzIHNtYWxsZXIgdGhhbiB3 aGF0ZXZlciB0aGUKKwkgKiBjb21wYXJpc29uIHJlc3VsdCBwcm92aWRlZCwgc3VjaCB0aGF0IHdl IG5ldmVyIHNraXAgbW9yZSB0aGFuIHNraXAtPnByZWZpeAorCSAqLworCWludCBudW1hdHRycyA9 IHByZWZpeDsKKworCWlmIChpdHVwICE9IE5VTEwpCisJeworCQlTaXplCQlpdHVwc3ogPSBJbmRl eFR1cGxlU2l6ZShpdHVwKTsKKwkJbWVtY3B5KHNvLT5za2lwRGF0YS0+Y3VyUG9zLnNraXBUdXBs ZSwgaXR1cCwgaXR1cHN6KTsKKworCQlfYnRfdXBkYXRlX3NjYW5rZXlfd2l0aF90dXBsZSgmc2tp cC0+Y3VycmVudFR1cGxlS2V5LCBpbmRleFJlbCwgKEluZGV4VHVwbGUpc28tPnNraXBEYXRhLT5j dXJQb3Muc2tpcFR1cGxlLCBudW1hdHRycyk7CisJCV9idF9jb3B5X3NjYW5rZXkoJnNraXAtPmN1 clBvcy5za2lwU2NhbktleSwgJnNraXAtPmN1cnJlbnRUdXBsZUtleSwgbnVtYXR0cnMpOworCX0K KwllbHNlCisJeworCQlza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkua2V5c3ogPSBudW1hdHRyczsK KwkJX2J0X2NvcHlfc2NhbmtleSgmc2tpcC0+Y3VycmVudFR1cGxlS2V5LCAmc2tpcC0+Y3VyUG9z LnNraXBTY2FuS2V5LCBudW1hdHRycyk7CisJfQorCS8qIHVwZGF0ZSBzdHJhdGVneSBmb3IgbGFz dCBhdHRyaWJ1dGUgYXMgd2Ugd2lsbCB1c2UgdGhpcyB0byBkZXRlcm1pbmUgdGhlIHJlc3Qgb2Yg dGhlCisJICogcmVzdCBvZiB0aGUgZmxhZ3MgKGdvYmFjaykgd2hlbiBkb2luZyB0aGUgYWN0dWFs IHRyZWUgc2VhcmNoCisJICovCisJc2tpcC0+Y3VycmVudFR1cGxlS2V5LnNjYW5rZXlzW251bWF0 dHJzIC0gMV0uc2tfc3RyYXRlZ3kgPQorCQkJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNjYW5r ZXlzW251bWF0dHJzIC0gMV0uc2tfc3RyYXRlZ3kgPQorCQkJU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChwcmVmaXhEaXIpID8gQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXIgOiBCVExlc3NTdHJhdGVneU51 bWJlcjsKK30KKworLyogdXBkYXRlIHRoZSBzY2Fua2V5IGZvciBza2lwcGluZyB0aGUgJ2V4dHJh JyBjb25kaXRpb25zLCBvcHBvcnR1bml0aWVzCisgKiB0aGF0IGFyaXNlIHdoZW4gd2UgaGF2ZSBq dXN0IHNraXBwZWQgdG8gYSBuZXcgcHJlZml4IGFuZCBjYW4gdHJ5IHRvIHNraXAKKyAqIHdpdGhp biB0aGUgcHJlZml4IHRvIHRoZSByaWdodCB0dXBsZSBieSB1c2luZyBleHRyYSBxdWFscyB3aGVu IGF2YWlsYWJsZQorICoKKyAqIEB0b2RvIGFzIGFuIG9wdGltaXphdGlvbiBpdCBzaG91bGQgYmUg cG9zc2libGUgdG8gb3B0aW1pemUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbgorICogYW5kIHRvIF9i dF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9wcmVmaXhfc2tpcCB0byBzb21lIG1vcmUgc3BlY2lm aWMgZnVuY3Rpb25zIHRoYXQKKyAqIHdpbGwgbmVlZCB0byBkbyBsZXNzIGNvcHlpbmcgb2YgZGF0 YS4KKyAqLwordm9pZAorX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX2V4dHJhX3NraXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBSZWxhdGlvbiBpbmRleFJlbCwgU2NhbkRpcmVjdGlvbiBjdXJEaXIs CisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwgYm9vbCBwcmlvcml0aXplRXF1 YWwsIEluZGV4VHVwbGUgaXR1cCkKK3sKKwlCVFNjYW5PcGFxdWUgCXNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCUJUU2Nhbklu c2VydCB0b0NvcHk7CisJaW50IGksIGxlZnQsIGxhc3ROb25UdXBsZSA9IHNraXAtPnByZWZpeDsK KworCS8qIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IGN1cnJlbnRUdXBsZUtleSBpcyBjb3JyZWN0IGF0 IGFsbCB0aW1lcyAqLworCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9wcmVmaXhfc2tpcChz Y2FuLCBpbmRleFJlbCwgc2tpcC0+cHJlZml4LCBpdHVwLCBwcmVmaXhEaXIpOworCS8qIHRoZW4g ZG8gdGhlIGFjdHVhbCB3b3JrIHRvIHNldHVwIGN1clBvcy5za2lwU2NhbktleSAtIGRpc3Rpbmd1 aXNoIGJldHdlZW4gd29yayB0aGF0IGRlcGVuZHMgb24gb3ZlcmFsbERpcgorCSAqICh0aG9zZSBh dHRyaWJ1dGVzIGJldHdlZW4gYXR0cmlidXRlIG51bWJlciAxIGFuZCAncHJlZml4JyBpbmNsdXNp dmUpCisJICogYW5kIHdvcmsgdGhhdCBkZXBlbmRzIG9uIGN1ckRpcgorCSAqICh0aG9zZSBhdHRy aWJ1dGVzIGJldHdlZW4gYXR0cmlidXRlIG51bWJlciAncHJlZml4JyArIDEgYW5kIGZ3ZFNjYW5L ZXkua2V5c3ogaW5jbHVzaXZlKQorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHBy ZWZpeERpcikpCisJeworCQkvKgorCQkgKiBpZiBvdmVyYWxsRGlyIGlzIEZvcndhcmQsIHdlIG5l ZWQgdG8gY2hvb3NlIGJldHdlZW4gZndkU2NhbktleSBvcgorCQkgKiBjdXJyZW50VHVwbGVLZXku IHdlIG5lZWQgdG8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIG9uZSAtCisJCSAqIGluIG1v c3QgY2FzZXMgdGhpcyBtZWFucyBjaG9vc2luZyBlZy4gYT41IG92ZXIgYT0yIHdoZW4gc2Nhbm5p bmcgZm9yd2FyZCwKKwkJICogdW5sZXNzIHByaW9yaXRpemVFcXVhbCBpcyBzZXQuIHRoaXMgaXMg ZG9uZSBmb3IgY2VydGFpbiBzcGVjaWFsIGNhc2VzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwg c2tpcC0+cHJlZml4OyBpKyspCisJCXsKKwkJCVNjYW5LZXkgc2NhbmtleSA9ICZza2lwLT5md2RT Y2FuS2V5LnNjYW5rZXlzW2ldOworCQkJU2NhbktleSBzY2Fua2V5SXRlbSA9ICZza2lwLT5jdXJy ZW50VHVwbGVLZXkuc2NhbmtleXNbaV07CisJCQlpZiAoc2NhbmtleS0+c2tfYXR0bm8gIT0gMCAm JiAoX2J0X2NvbXBhcmVfb25lKHNjYW5rZXksIHNjYW5rZXlJdGVtLT5za19hcmd1bWVudCwgc2Nh bmtleUl0ZW0tPnNrX2ZsYWdzICYgU0tfSVNOVUxMKSA+IDAKKwkJCQkJCQkJCQkgICB8fCAocHJp b3JpdGl6ZUVxdWFsICYmIHNjYW5rZXktPnNrX3N0cmF0ZWd5ID09IEJURXF1YWxTdHJhdGVneU51 bWJlcikpKQorCQkJeworCQkJCW1lbWNweShza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuc2Nhbmtl eXMgKyBpLCBzY2Fua2V5LCBzaXplb2YoU2NhbktleURhdGEpKTsKKwkJCQlsYXN0Tm9uVHVwbGUg PSBpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChsYXN0Tm9uVHVwbGUgPCBpKQorCQkJ CQlicmVhazsKKwkJCQltZW1jcHkoc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNjYW5rZXlzICsg aSwgc2NhbmtleUl0ZW0sIHNpemVvZihTY2FuS2V5RGF0YSkpOworCQkJfQorCQkJLyogZm9yIG5v dyBjaG9vc2UgZXF1YWwgaGVyZSAtIGl0IGNvdWxkIGFjdHVhbGx5IGJlIGltcHJvdmVkIGEgYml0 IEB0b2RvIGJ5IGNob29zaW5nIHRoZSBzdHJhdGVneQorCQkJICogZnJvbSB0aGUgc2NhbmtleXMs IGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhIGxvdAorCQkJICovCisJCQlza2lwLT5jdXJQb3Muc2tp cFNjYW5LZXkuc2NhbmtleXNbaV0uc2tfc3RyYXRlZ3kgPSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXI7 CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogc2ltaWxhciBmb3IgYmFja3dhcmQgYnV0IGluIG9w cG9zaXRlIGRpcmVjdGlvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2tpcC0+cHJlZml4OyBpKysp CisJCXsKKwkJCVNjYW5LZXkgc2NhbmtleSA9ICZza2lwLT5id2RTY2FuS2V5LnNjYW5rZXlzW2ld OworCQkJU2NhbktleSBzY2Fua2V5SXRlbSA9ICZza2lwLT5jdXJyZW50VHVwbGVLZXkuc2Nhbmtl eXNbaV07CisJCQlpZiAoc2NhbmtleS0+c2tfYXR0bm8gIT0gMCAmJiAoX2J0X2NvbXBhcmVfb25l KHNjYW5rZXksIHNjYW5rZXlJdGVtLT5za19hcmd1bWVudCwgc2NhbmtleUl0ZW0tPnNrX2ZsYWdz ICYgU0tfSVNOVUxMKSA8IDAKKwkJCQkJCQkJCQkgICB8fCAocHJpb3JpdGl6ZUVxdWFsICYmIHNj YW5rZXktPnNrX3N0cmF0ZWd5ID09IEJURXF1YWxTdHJhdGVneU51bWJlcikpKQorCQkJeworCQkJ CW1lbWNweShza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuc2NhbmtleXMgKyBpLCBzY2Fua2V5LCBz aXplb2YoU2NhbktleURhdGEpKTsKKwkJCQlsYXN0Tm9uVHVwbGUgPSBpOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCWlmIChsYXN0Tm9uVHVwbGUgPCBpKQorCQkJCQlicmVhazsKKwkJCQltZW1j cHkoc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNjYW5rZXlzICsgaSwgc2NhbmtleUl0ZW0sIHNp emVvZihTY2FuS2V5RGF0YSkpOworCQkJfQorCQkJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNj YW5rZXlzW2ldLnNrX3N0cmF0ZWd5ID0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOworCQl9CisJfQor CisJLyoKKwkgKiB0aGUgcmVtYWluaW5nIGtleXMgYXJlIHRoZSBxdWFscyBhZnRlciB0aGUgcHJl Zml4CisJICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoY3VyRGlyKSkKKwkJdG9Db3B5 ID0gJnNraXAtPmZ3ZFNjYW5LZXk7CisJZWxzZQorCQl0b0NvcHkgPSAmc2tpcC0+YndkU2Nhbktl eTsKKworCWlmIChsYXN0Tm9uVHVwbGUgPj0gc2tpcC0+cHJlZml4IC0gMSkKKwl7CisJCWxlZnQg PSB0b0NvcHktPmtleXN6IC0gc2tpcC0+cHJlZml4OworCQlpZiAobGVmdCA+IDApCisJCXsKKwkJ CW1lbWNweShza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuc2NhbmtleXMgKyBza2lwLT5wcmVmaXgs IHRvQ29weS0+c2NhbmtleXMgKyBpLCBzaXplb2YoU2NhbktleURhdGEpICogKHVuc2lnbmVkIGxv bmcpbGVmdCk7CisJCX0KKwkJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LmtleXN6ID0gdG9Db3B5 LT5rZXlzejsKKwl9CisJZWxzZQorCXsKKwkJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LmtleXN6 ID0gbGFzdE5vblR1cGxlICsgMTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5j CmluZGV4IDU0YzhlYjEyODkuLjAzMDA1Zjg5YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c29ydC5jCkBAIC01NjAsNyArNTYwLDcgQEAgX2J0X2xlYWZidWlsZChCVFNwb29sICpidHNwb29s LCBCVFNwb29sICpidHNwb29sMikKIAogCXdzdGF0ZS5oZWFwID0gYnRzcG9vbC0+aGVhcDsKIAl3 c3RhdGUuaW5kZXggPSBidHNwb29sLT5pbmRleDsKLQl3c3RhdGUuaW5za2V5ID0gX2J0X21rc2Nh bmtleSh3c3RhdGUuaW5kZXgsIE5VTEwpOworCXdzdGF0ZS5pbnNrZXkgPSBfYnRfbWtzY2Fua2V5 KHdzdGF0ZS5pbmRleCwgTlVMTCwgTlVMTCk7CiAJLyogX2J0X21rc2NhbmtleSgpIHdvbid0IHNl dCBhbGxlcXVhbGltYWdlIHdpdGhvdXQgbWV0YXBhZ2UgKi8KIAl3c3RhdGUuaW5za2V5LT5hbGxl cXVhbGltYWdlID0gX2J0X2FsbGVxdWFsaW1hZ2Uod3N0YXRlLmluZGV4LCB0cnVlKTsKIAl3c3Rh dGUuYnR3c191c2Vfd2FsID0gUmVsYXRpb25OZWVkc1dBTCh3c3RhdGUuaW5kZXgpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IGM3MmI0NTY2ZGUuLjQwZGEwMGY3MmQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTQ5LDEwICs0OSwxMCBAQCBzdGF0 aWMgYm9vbCBfYnRfY29tcGFyZV9zY2Fua2V5X2FyZ3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu S2V5IG9wLAogCQkJCQkJCQkJIFNjYW5LZXkgbGVmdGFyZywgU2NhbktleSByaWdodGFyZywKIAkJ CQkJCQkJCSBib29sICpyZXN1bHQpOwogc3RhdGljIGJvb2wgX2J0X2ZpeF9zY2Fua2V5X3N0cmF0 ZWd5KFNjYW5LZXkgc2tleSwgaW50MTYgKmluZG9wdGlvbik7Ci1zdGF0aWMgdm9pZCBfYnRfbWFy a19zY2Fua2V5X3JlcXVpcmVkKFNjYW5LZXkgc2tleSk7CitzdGF0aWMgdm9pZCBfYnRfbWFya19z Y2Fua2V5X3JlcXVpcmVkKFNjYW5LZXkgc2tleSwgaW50IGZvcndhcmRSZXFGbGFnLCBpbnQgYmFj a3dhcmRSZXFGbGFnKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkg c2tleSwKIAkJCQkJCQkJIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywgVHVwbGVEZXNj IHR1cGRlc2MsCi0JCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2Fu KTsKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4sIGludCAq cHJlZml4c2tpcGluZGV4KTsKIHN0YXRpYyBpbnQJX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVs LCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBC VFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC04Nyw5ICs4Nyw4IEBAIHN0YXRpYyBpbnQJX2J0 X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogICoJCWZpZWxk IHRoZW1zZWx2ZXMuCiAgKi8KIEJUU2Nhbkluc2VydAotX2J0X21rc2NhbmtleShSZWxhdGlvbiBy ZWwsIEluZGV4VHVwbGUgaXR1cCkKK19idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1 cGxlIGl0dXAsIEJUU2Nhbkluc2VydCBrZXkpCiB7Ci0JQlRTY2FuSW5zZXJ0IGtleTsKIAlTY2Fu S2V5CQlza2V5OwogCVR1cGxlRGVzYwlpdHVwZGVzYzsKIAlpbnQJCQlpbmRua2V5YXR0czsKQEAg LTEwOSw4ICsxMDgsMTAgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUg aXR1cCkKIAkgKiBUcnVuY2F0ZWQgYXR0cmlidXRlcyBhbmQgbm9uLWtleSBhdHRyaWJ1dGVzIGFy ZSBvbWl0dGVkIGZyb20gdGhlIGZpbmFsCiAJICogc2NhbiBrZXkuCiAJICovCi0Ja2V5ID0gcGFs bG9jKG9mZnNldG9mKEJUU2Nhbkluc2VydERhdGEsIHNjYW5rZXlzKSArCi0JCQkJIHNpemVvZihT Y2FuS2V5RGF0YSkgKiBpbmRua2V5YXR0cyk7CisJaWYgKGtleSA9PSBOVUxMKQorCQlrZXkgPSBw YWxsb2Mob2Zmc2V0b2YoQlRTY2FuSW5zZXJ0RGF0YSwgc2NhbmtleXMpICsKKwkJCQkJIHNpemVv ZihTY2FuS2V5RGF0YSkgKiBpbmRua2V5YXR0cyk7CisKIAlpZiAoaXR1cCkKIAkJX2J0X21ldGF2 ZXJzaW9uKHJlbCwgJmtleS0+aGVhcGtleXNwYWNlLCAma2V5LT5hbGxlcXVhbGltYWdlKTsKIAll bHNlCkBAIC0xNTUsNyArMTU2LDcgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4 VHVwbGUgaXR1cCkKIAkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZVdpdGhJbmZvKCZza2V5W2ldLAog CQkJCQkJCQkJICAgZmxhZ3MsCiAJCQkJCQkJCQkgICAoQXR0ck51bWJlcikgKGkgKyAxKSwKLQkJ CQkJCQkJCSAgIEludmFsaWRTdHJhdGVneSwKKwkJCQkJCQkJCSAgIEJURXF1YWxTdHJhdGVneU51 bWJlciwKIAkJCQkJCQkJCSAgIEludmFsaWRPaWQsCiAJCQkJCQkJCQkgICByZWwtPnJkX2luZGNv bGxhdGlvbltpXSwKIAkJCQkJCQkJCSAgIHByb2NpbmZvLApAQCAtNzQ1LDcgKzc0Niw3IEBAIF9i dF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWludAkJCW51bWJlck9mS2V5 cyA9IHNjYW4tPm51bWJlck9mS2V5czsKIAlpbnQxNgkgICAqaW5kb3B0aW9uID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kb3B0aW9uOwogCWludAkJCW5ld19udW1iZXJPZktleXM7Ci0JaW50 CQkJbnVtYmVyT2ZFcXVhbENvbHM7CisJaW50CQkJbnVtYmVyT2ZFcXVhbENvbHMsIG51bWJlck9m RXF1YWxDb2xzU2luY2VQcmVmaXg7CiAJU2NhbktleQkJaW5rZXlzOwogCVNjYW5LZXkJCW91dGtl eXM7CiAJU2NhbktleQkJY3VyOwpAQCAtNzU0LDYgKzc1NSw3IEBAIF9idF9wcmVwcm9jZXNzX2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWludAkJCWksCiAJCQkJajsKIAlBdHRyTnVtYmVyCWF0 dG5vOworCWludAkJCXByZWZpeCA9IDA7CiAKIAkvKiBpbml0aWFsaXplIHJlc3VsdCB2YXJpYWJs ZXMgKi8KIAlzby0+cXVhbF9vayA9IHRydWU7CkBAIC03NjIsNiArNzY0LDExIEBAIF9idF9wcmVw cm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChudW1iZXJPZktleXMgPCAxKQog CQlyZXR1cm47CQkJCQkvKiBkb25lIGlmIHF1YWwtbGVzcyBzY2FuICovCiAKKwlpZiAoX2J0X3Nr aXBfZW5hYmxlZChzbykpCisJeworCQlwcmVmaXggPSBzby0+c2tpcERhdGEtPnByZWZpeDsKKwl9 CisKIAkvKgogCSAqIFJlYWQgc28tPmFycmF5S2V5RGF0YSBpZiBhcnJheSBrZXlzIGFyZSBwcmVz ZW50LCBlbHNlIHNjYW4tPmtleURhdGEKIAkgKi8KQEAgLTc4Niw3ICs3OTMsOSBAQCBfYnRfcHJl cHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJc28tPm51bWJlck9mS2V5cyA9IDE7 CiAJCS8qIFdlIGNhbiBtYXJrIHRoZSBxdWFsIGFzIHJlcXVpcmVkIGlmIGl0J3MgZm9yIGZpcnN0 IGluZGV4IGNvbCAqLwogCQlpZiAoY3VyLT5za19hdHRubyA9PSAxKQotCQkJX2J0X21hcmtfc2Nh bmtleV9yZXF1aXJlZChvdXRrZXlzKTsKKwkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0 a2V5cywgU0tfQlRfUkVRRldELCBTS19CVF9SRVFCS1dEKTsKKwkJaWYgKGN1ci0+c2tfYXR0bm8g PD0gcHJlZml4ICsgMSkKKwkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5cywgU0tf QlRfUkVRU0tJUEZXRCwgU0tfQlRfUkVRU0tJUEJLV0QpOwogCQlyZXR1cm47CiAJfQogCkBAIC03 OTUsNiArODA0LDggQEAgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJ ICovCiAJbmV3X251bWJlck9mS2V5cyA9IDA7CiAJbnVtYmVyT2ZFcXVhbENvbHMgPSAwOworCW51 bWJlck9mRXF1YWxDb2xzU2luY2VQcmVmaXggPSAwOworCiAKIAkvKgogCSAqIEluaXRpYWxpemUg Zm9yIHByb2Nlc3Npbmcgb2Yga2V5cyBmb3IgYXR0ciAxLgpAQCAtODMwLDYgKzg0MSw4IEBAIF9i dF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlpZiAoaSA9PSBudW1iZXJP ZktleXMgfHwgY3VyLT5za19hdHRubyAhPSBhdHRubykKIAkJewogCQkJaW50CQkJcHJpb3JOdW1i ZXJPZkVxdWFsQ29scyA9IG51bWJlck9mRXF1YWxDb2xzOworCQkJaW50CQkJcHJpb3JOdW1iZXJP ZkVxdWFsQ29sc1NpbmNlUHJlZml4ID0gbnVtYmVyT2ZFcXVhbENvbHNTaW5jZVByZWZpeDsKKwog CiAJCQkvKiBjaGVjayBpbnB1dCBrZXlzIGFyZSBjb3JyZWN0bHkgb3JkZXJlZCAqLwogCQkJaWYg KGkgPCBudW1iZXJPZktleXMgJiYgY3VyLT5za19hdHRubyA8IGF0dG5vKQpAQCAtODgwLDYgKzg5 Myw4IEBAIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCX0KIAkJ CQkvKiB0cmFjayBudW1iZXIgb2YgYXR0cnMgZm9yIHdoaWNoIHdlIGhhdmUgIj0iIGtleXMgKi8K IAkJCQludW1iZXJPZkVxdWFsQ29scysrOworCQkJCWlmIChhdHRubyA+IHByZWZpeCkKKwkJCQkJ bnVtYmVyT2ZFcXVhbENvbHNTaW5jZVByZWZpeCsrOwogCQkJfQogCiAJCQkvKiB0cnkgdG8ga2Vl cCBvbmx5IG9uZSBvZiA8LCA8PSAqLwpAQCAtOTI5LDcgKzk0NCw5IEBAIF9idF9wcmVwcm9jZXNz X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJCQkJCW1lbWNweShvdXRrZXksIHhmb3JtW2pd LCBzaXplb2YoU2NhbktleURhdGEpKTsKIAkJCQkJaWYgKHByaW9yTnVtYmVyT2ZFcXVhbENvbHMg PT0gYXR0bm8gLSAxKQotCQkJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRrZXkpOwor CQkJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRrZXksIFNLX0JUX1JFUUZXRCwgU0tf QlRfUkVRQktXRCk7CisJCQkJCWlmIChhdHRubyA8PSBwcmVmaXggfHwgcHJpb3JOdW1iZXJPZkVx dWFsQ29sc1NpbmNlUHJlZml4ID09IGF0dG5vIC0gcHJlZml4IC0gMSkKKwkJCQkJCV9idF9tYXJr X3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5LCBTS19CVF9SRVFTS0lQRldELCBTS19CVF9SRVFTS0lQ QktXRCk7CiAJCQkJfQogCQkJfQogCkBAIC05NTQsNyArOTcxLDkgQEAgX2J0X3ByZXByb2Nlc3Nf a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAkJCW1lbWNweShvdXRrZXksIGN1ciwgc2l6ZW9m KFNjYW5LZXlEYXRhKSk7CiAJCQlpZiAobnVtYmVyT2ZFcXVhbENvbHMgPT0gYXR0bm8gLSAxKQot CQkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5KTsKKwkJCQlfYnRfbWFya19zY2Fu a2V5X3JlcXVpcmVkKG91dGtleSwgU0tfQlRfUkVRRldELCBTS19CVF9SRVFCS1dEKTsKKwkJCWlm IChhdHRubyA8PSBwcmVmaXggfHwgbnVtYmVyT2ZFcXVhbENvbHNTaW5jZVByZWZpeCA9PSBhdHRu byAtIHByZWZpeCAtIDEpCisJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRrZXksIFNL X0JUX1JFUVNLSVBGV0QsIFNLX0JUX1JFUVNLSVBCS1dEKTsKIAogCQkJLyoKIAkJCSAqIFdlIGRv bid0IHN1cHBvcnQgUm93Q29tcGFyZSB1c2luZyBlcXVhbGl0eTsgc3VjaCBhIHF1YWwgd291bGQK QEAgLTk5Nyw3ICsxMDE2LDkgQEAgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNj YW4pCiAKIAkJCQltZW1jcHkob3V0a2V5LCBjdXIsIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCQkJ CWlmIChudW1iZXJPZkVxdWFsQ29scyA9PSBhdHRubyAtIDEpCi0JCQkJCV9idF9tYXJrX3NjYW5r ZXlfcmVxdWlyZWQob3V0a2V5KTsKKwkJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRr ZXksIFNLX0JUX1JFUUZXRCwgU0tfQlRfUkVRQktXRCk7CisJCQkJaWYgKGF0dG5vIDw9IHByZWZp eCB8fCBudW1iZXJPZkVxdWFsQ29sc1NpbmNlUHJlZml4ID09IGF0dG5vIC0gcHJlZml4IC0gMSkK KwkJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRrZXksIFNLX0JUX1JFUVNLSVBGV0Qs IFNLX0JUX1JFUVNLSVBCS1dEKTsKIAkJCX0KIAkJfQogCX0KQEAgLTEyOTUsNyArMTMxNiw3IEBA IF9idF9maXhfc2NhbmtleV9zdHJhdGVneShTY2FuS2V5IHNrZXksIGludDE2ICppbmRvcHRpb24p CiAgKiBhbnl3YXkgb24gYSByZXNjYW4uICBTb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24gdGhv dWdoLgogICovCiBzdGF0aWMgdm9pZAotX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChTY2FuS2V5 IHNrZXkpCitfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKFNjYW5LZXkgc2tleSwgaW50IGZvcndh cmRSZXFGbGFnLCBpbnQgYmFja3dhcmRSZXFGbGFnKQogewogCWludAkJCWFkZGZsYWdzOwogCkBA IC0xMzAzLDE0ICsxMzI0LDE0IEBAIF9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQoU2NhbktleSBz a2V5KQogCXsKIAkJY2FzZSBCVExlc3NTdHJhdGVneU51bWJlcjoKIAkJY2FzZSBCVExlc3NFcXVh bFN0cmF0ZWd5TnVtYmVyOgotCQkJYWRkZmxhZ3MgPSBTS19CVF9SRVFGV0Q7CisJCQlhZGRmbGFn cyA9IGZvcndhcmRSZXFGbGFnOwogCQkJYnJlYWs7CiAJCWNhc2UgQlRFcXVhbFN0cmF0ZWd5TnVt YmVyOgotCQkJYWRkZmxhZ3MgPSBTS19CVF9SRVFGV0QgfCBTS19CVF9SRVFCS1dEOworCQkJYWRk ZmxhZ3MgPSBmb3J3YXJkUmVxRmxhZyB8IGJhY2t3YXJkUmVxRmxhZzsKIAkJCWJyZWFrOwogCQlj YXNlIEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI6CiAJCWNhc2UgQlRHcmVhdGVyU3RyYXRl Z3lOdW1iZXI6Ci0JCQlhZGRmbGFncyA9IFNLX0JUX1JFUUJLV0Q7CisJCQlhZGRmbGFncyA9IGJh Y2t3YXJkUmVxRmxhZzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBTdHJhdGVneU51bWJlcjogJWQiLApAQCAtMTM1MywxNyArMTM3NCwyMiBAQCBf YnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKFNjYW5LZXkgc2tleSkKICAqLwogYm9vbAogX2J0X2No ZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0 cywKLQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2NhbikKKwkJCSAgU2Nh bkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2NhbiwgaW50ICpwcmVmaXhTa2lwSW5kZXgp CiB7CiAJVHVwbGVEZXNjCXR1cGRlc2M7CiAJQlRTY2FuT3BhcXVlIHNvOwogCWludAkJCWtleXN6 OwogCWludAkJCWlrZXk7CiAJU2NhbktleQkJa2V5OworCWludCBwZng7CisKKwlpZiAocHJlZml4 U2tpcEluZGV4ID09IE5VTEwpCisJCXByZWZpeFNraXBJbmRleCA9ICZwZng7CiAKIAlBc3NlcnQo QlRyZWVUdXBsZUdldE5BdHRzKHR1cGxlLCBzY2FuLT5pbmRleFJlbGF0aW9uKSA9PSB0dXBuYXR0 cyk7CiAKIAkqY29udGludWVzY2FuID0gdHJ1ZTsJCS8qIGRlZmF1bHQgYXNzdW1wdGlvbiAqLwor CSpwcmVmaXhTa2lwSW5kZXggPSAtMTsKIAogCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHNj YW4tPmluZGV4UmVsYXRpb24pOwogCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwpA QCAtMTM5Miw3ICsxNDE4LDcgQEAgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJaWYgKGtleS0+c2tfZmxhZ3MgJiBTS19S T1dfSEVBREVSKQogCQl7CiAJCQlpZiAoX2J0X2NoZWNrX3Jvd2NvbXBhcmUoa2V5LCB0dXBsZSwg dHVwbmF0dHMsIHR1cGRlc2MsIGRpciwKLQkJCQkJCQkJCSBjb250aW51ZXNjYW4pKQorCQkJCQkJ CQkJIGNvbnRpbnVlc2NhbiwgcHJlZml4U2tpcEluZGV4KSkKIAkJCQljb250aW51ZTsKIAkJCXJl dHVybiBmYWxzZTsKIAkJfQpAQCAtMTQyOSw2ICsxNDU1LDEzIEBAIF9idF9jaGVja2tleXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJCQkJCSBT Y2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQogCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsK IAorCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRU0tJUEZXRCkgJiYKKwkJCQlTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tf YXR0bm8gLSAxOworCQkJZWxzZSBpZiAoKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQQktX RCkgJiYKKwkJCQkJIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCisJCQkJKnByZWZpeFNr aXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOworCiAJCQkvKgogCQkJICogSW4gYW55IGNhc2Us IHRoaXMgaW5kZXh0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBxdWFsLgogCQkJICovCkBAIC0xNDUy LDYgKzE0ODUsMTAgQEAgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVw bGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCQlpZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRf UkVRRldEIHwgU0tfQlRfUkVRQktXRCkpICYmCiAJCQkJCVNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJk KGRpcikpCiAJCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKworCQkJCWlmICgoa2V5LT5za19m bGFncyAmIChTS19CVF9SRVFTS0lQRldEIHwgU0tfQlRfUkVRU0tJUEJLV0QpKSAmJgorCQkJCQlT Y2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJCQkqcHJlZml4U2tpcEluZGV4ID0ga2V5 LT5za19hdHRubyAtIDE7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0xNDY4LDYgKzE1MDUsOSBA QCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50 IHR1cG5hdHRzLAogCQkJCWlmICgoa2V5LT5za19mbGFncyAmIChTS19CVF9SRVFGV0QgfCBTS19C VF9SRVFCS1dEKSkgJiYKIAkJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJCQkq Y29udGludWVzY2FuID0gZmFsc2U7CisJCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgKFNLX0JUX1JF UVNLSVBGV0QgfCBTS19CVF9SRVFTS0lQQktXRCkpICYmCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9u SXNCYWNrd2FyZChkaXIpKQorCQkJCQkJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0 bm8gLSAxOwogCQkJfQogCiAJCQkvKgpAQCAtMTQ5OCw2ICsxNTM4LDEzIEBAIF9idF9jaGVja2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJ CQkJCSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQogCQkJCSpjb250aW51ZXNjYW4gPSBm YWxzZTsKIAorCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRU0tJUEZXRCkgJiYKKwkJ CQlTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCQkJKnByZWZpeFNraXBJbmRleCA9IGtl eS0+c2tfYXR0bm8gLSAxOworCQkJZWxzZSBpZiAoKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFT S0lQQktXRCkgJiYKKwkJCQkJIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCisJCQkJKnBy ZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOworCiAJCQkvKgogCQkJICogSW4gYW55 IGNhc2UsIHRoaXMgaW5kZXh0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBxdWFsLgogCQkJICovCkBA IC0xNTA5LDYgKzE1NTYsMjI4IEBAIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wK K19idF9jaGVja2tleXNfdGhyZWV3YXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1 cGxlLCBpbnQgdHVwbmF0dHMsCisJCQkgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51 ZXNjYW4sIGludCAqcHJlZml4U2tpcEluZGV4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjOworCUJU U2Nhbk9wYXF1ZSBzbzsKKwlpbnQJCQlrZXlzejsKKwlpbnQJCQlpa2V5OworCVNjYW5LZXkJCWtl eTsKKwlpbnQgcGZ4OworCUJUU2Nhbkluc2VydCBrZXlzOworCWJvb2wgb3ZlcmFsbG1hdGNoID0g dHJ1ZTsKKworCWlmIChwcmVmaXhTa2lwSW5kZXggPT0gTlVMTCkKKwkJcHJlZml4U2tpcEluZGV4 ID0gJnBmeDsKKworCUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHModHVwbGUsIHNjYW4tPmluZGV4 UmVsYXRpb24pID09IHR1cG5hdHRzKTsKKworCSpjb250aW51ZXNjYW4gPSB0cnVlOwkJLyogZGVm YXVsdCBhc3N1bXB0aW9uICovCisJKnByZWZpeFNraXBJbmRleCA9IC0xOworCisJdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3Ioc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisJc28gPSAoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJ a2V5cyA9ICZzby0+c2tpcERhdGEtPmJ3ZFNjYW5LZXk7CisJZWxzZQorCQlrZXlzID0gJnNvLT5z a2lwRGF0YS0+ZndkU2NhbktleTsKKworCWtleXN6ID0ga2V5cy0+a2V5c3o7CisKKwlmb3IgKGtl eSA9IGtleXMtPnNjYW5rZXlzLCBpa2V5ID0gMDsgaWtleSA8IGtleXN6OyBrZXkrKywgaWtleSsr KQorCXsKKwkJRGF0dW0JCWRhdHVtOworCQlib29sCQlpc051bGw7CisJCWludAkJY21wcmVzdWx0 OworCisJCWlmIChrZXktPnNrX2F0dG5vID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoa2V5 LT5za19hdHRubyA+IHR1cG5hdHRzKQorCQl7CisJCQkvKgorCQkJICogVGhpcyBhdHRyaWJ1dGUg aXMgdHJ1bmNhdGVkIChtdXN0IGJlIGhpZ2gga2V5KS4gIFRoZSB2YWx1ZSBmb3IKKwkJCSAqIHRo aXMgYXR0cmlidXRlIGluIHRoZSBmaXJzdCBub24tcGl2b3QgdHVwbGUgb24gdGhlIHBhZ2UgdG8g dGhlCisJCQkgKiByaWdodCBjb3VsZCBiZSBhbnkgcG9zc2libGUgdmFsdWUuICBBc3N1bWUgdGhh dCB0cnVuY2F0ZWQKKwkJCSAqIGF0dHJpYnV0ZSBwYXNzZXMgdGhlIHF1YWwuCisJCQkgKi8KKwkJ CUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCQkJY29udGludWU7CisJCX0K KworCQkvKiByb3ctY29tcGFyaXNvbiBrZXlzIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nICovCisJ CUFzc2VydCgoa2V5LT5za19mbGFncyAmIFNLX1JPV19IRUFERVIpID09IDApOworCisJCWRhdHVt ID0gaW5kZXhfZ2V0YXR0cih0dXBsZSwKKwkJCQkJCQkgIGtleS0+c2tfYXR0bm8sCisJCQkJCQkJ ICB0dXBkZXNjLAorCQkJCQkJCSAgJmlzTnVsbCk7CisKKwkJaWYgKGtleS0+c2tfZmxhZ3MgJiBT S19JU05VTEwpCisJCXsKKwkJCS8qIEhhbmRsZSBJUyBOVUxML05PVCBOVUxMIHRlc3RzICovCisJ CQlpZiAoa2V5LT5za19mbGFncyAmIFNLX1NFQVJDSE5VTEwpCisJCQl7CisJCQkJaWYgKGlzTnVs bCkKKwkJCQkJY29udGludWU7CS8qIHR1cGxlIHNhdGlzZmllcyB0aGlzIHF1YWwgKi8KKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQlBc3NlcnQoa2V5LT5za19mbGFncyAmIFNLX1NFQVJDSE5PVE5V TEwpOworCQkJCWlmICghaXNOdWxsKQorCQkJCQljb250aW51ZTsJLyogdHVwbGUgc2F0aXNmaWVz IHRoaXMgcXVhbCAqLworCQkJfQorCisJCQkvKgorCQkJICogVHVwbGUgZmFpbHMgdGhpcyBxdWFs LiAgSWYgaXQncyBhIHJlcXVpcmVkIHF1YWwgZm9yIHRoZSBjdXJyZW50CisJCQkgKiBzY2FuIGRp cmVjdGlvbiwgdGhlbiB3ZSBjYW4gY29uY2x1ZGUgbm8gZnVydGhlciB0dXBsZXMgd2lsbAorCQkJ ICogcGFzcywgZWl0aGVyLgorCQkJICovCisJCQlpZiAoKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9S RVFGV0QpICYmCisJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQkJeworCQkJCSpj b250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQllbHNlIGlm ICgoa2V5LT5za19mbGFncyAmIFNLX0JUX1JFUUJLV0QpICYmCisJCQkJCSBTY2FuRGlyZWN0aW9u SXNCYWNrd2FyZChkaXIpKQorCQkJeworCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCQly ZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCWlmICgoa2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNL SVBGV0QpICYmCisJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQkJeworCQkJCSpw cmVmaXhTa2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJ CQl9CisJCQllbHNlIGlmICgoa2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBCS1dEKSAmJgor CQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCXsKKwkJCQkqcHJlZml4U2tp cEluZGV4ID0ga2V5LT5za19hdHRubyAtIDE7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJ CQlvdmVyYWxsbWF0Y2ggPSBmYWxzZTsKKwkJfQorCisJCWlmIChpc051bGwpCisJCXsKKwkJCWlm IChrZXktPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNfRklSU1QpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBTaW5jZSBOVUxMcyBhcmUgc29ydGVkIGJlZm9yZSBub24tTlVMTHMsIHdlIGtub3cgd2UgaGF2 ZQorCQkJCSAqIHJlYWNoZWQgdGhlIGxvd2VyIGxpbWl0IG9mIHRoZSByYW5nZSBvZiB2YWx1ZXMg Zm9yIHRoaXMKKwkJCQkgKiBpbmRleCBhdHRyLiAgT24gYSBiYWNrd2FyZCBzY2FuLCB3ZSBjYW4g c3RvcCBpZiB0aGlzIHF1YWwKKwkJCQkgKiBpcyBvbmUgb2YgdGhlICJtdXN0IG1hdGNoIiBzdWJz ZXQuICBXZSBjYW4gc3RvcCByZWdhcmRsZXNzCisJCQkJICogb2Ygd2hldGhlciB0aGUgcXVhbCBp cyA+IG9yIDwsIHNvIGxvbmcgYXMgaXQncyByZXF1aXJlZCwKKwkJCQkgKiBiZWNhdXNlIGl0J3Mg bm90IHBvc3NpYmxlIGZvciBhbnkgZnV0dXJlIHR1cGxlcyB0byBwYXNzLiBPbgorCQkJCSAqIGEg Zm9yd2FyZCBzY2FuLCBob3dldmVyLCB3ZSBtdXN0IGtlZXAgZ29pbmcsIGJlY2F1c2Ugd2UgbWF5 CisJCQkJICogaGF2ZSBpbml0aWFsbHkgcG9zaXRpb25lZCB0byB0aGUgc3RhcnQgb2YgdGhlIGlu ZGV4LgorCQkJCSAqLworCQkJCWlmICgoa2V5LT5za19mbGFncyAmIChTS19CVF9SRVFGV0QgfCBT S19CVF9SRVFCS1dEKSkgJiYKKwkJCQkJU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJ CQl7CisJCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJ CX0KKworCQkJCWlmICgoa2V5LT5za19mbGFncyAmIChTS19CVF9SRVFTS0lQRldEIHwgU0tfQlRf UkVRU0tJUEJLV0QpKSAmJgorCQkJCQlTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJ CXsKKwkJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOworCQkJCQlyZXR1 cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogU2lu Y2UgTlVMTHMgYXJlIHNvcnRlZCBhZnRlciBub24tTlVMTHMsIHdlIGtub3cgd2UgaGF2ZQorCQkJ CSAqIHJlYWNoZWQgdGhlIHVwcGVyIGxpbWl0IG9mIHRoZSByYW5nZSBvZiB2YWx1ZXMgZm9yIHRo aXMKKwkJCQkgKiBpbmRleCBhdHRyLiAgT24gYSBmb3J3YXJkIHNjYW4sIHdlIGNhbiBzdG9wIGlm IHRoaXMgcXVhbCBpcworCQkJCSAqIG9uZSBvZiB0aGUgIm11c3QgbWF0Y2giIHN1YnNldC4gIFdl IGNhbiBzdG9wIHJlZ2FyZGxlc3Mgb2YKKwkJCQkgKiB3aGV0aGVyIHRoZSBxdWFsIGlzID4gb3Ig PCwgc28gbG9uZyBhcyBpdCdzIHJlcXVpcmVkLAorCQkJCSAqIGJlY2F1c2UgaXQncyBub3QgcG9z c2libGUgZm9yIGFueSBmdXR1cmUgdHVwbGVzIHRvIHBhc3MuIE9uCisJCQkJICogYSBiYWNrd2Fy ZCBzY2FuLCBob3dldmVyLCB3ZSBtdXN0IGtlZXAgZ29pbmcsIGJlY2F1c2Ugd2UKKwkJCQkgKiBt YXkgaGF2ZSBpbml0aWFsbHkgcG9zaXRpb25lZCB0byB0aGUgZW5kIG9mIHRoZSBpbmRleC4KKwkJ CQkgKi8KKwkJCQlpZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRRldEIHwgU0tfQlRfUkVR QktXRCkpICYmCisJCQkJCVNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJCQl7CisJCQkJ CSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlp ZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRU0tJUEZXRCB8IFNLX0JUX1JFUVNLSVBCS1dE KSkgJiYKKwkJCQkJU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCQl7CisJCQkJCSpw cmVmaXhTa2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsKKwkJCQkJcmV0dXJuIGZhbHNlOwor CQkJCX0KKwkJCX0KKworCQkJb3ZlcmFsbG1hdGNoID0gZmFsc2U7CisJCX0KKworCQkvKiBQZXJm b3JtIHRoZSB0ZXN0IC0tLSB0aHJlZS13YXkgY29tcGFyaXNvbiBub3QgYm9vbCBvcGVyYXRvciAq LworCQljbXByZXN1bHQgPSBEYXR1bUdldEludDMyKEZ1bmN0aW9uQ2FsbDJDb2xsKCZrZXktPnNr X2Z1bmMsCisJCQkJCQkJCQkJCQkJa2V5LT5za19jb2xsYXRpb24sCisJCQkJCQkJCQkJCQkJZGF0 dW0sCisJCQkJCQkJCQkJCQkJa2V5LT5za19hcmd1bWVudCkpOworCQlpZiAoa2V5LT5za19mbGFn cyAmIFNLX0JUX0RFU0MpCisJCQlJTlZFUlRfQ09NUEFSRV9SRVNVTFQoY21wcmVzdWx0KTsKKwor CQlpZiAoY21wcmVzdWx0ICE9IDApCisJCXsKKwkJCS8qCisJCQkgKiBUdXBsZSBmYWlscyB0aGlz IHF1YWwuICBJZiBpdCdzIGEgcmVxdWlyZWQgcXVhbCBmb3IgdGhlIGN1cnJlbnQKKwkJCSAqIHNj YW4gZGlyZWN0aW9uLCB0aGVuIHdlIGNhbiBjb25jbHVkZSBubyBmdXJ0aGVyIHR1cGxlcyB3aWxs CisJCQkgKiBwYXNzLCBlaXRoZXIuCisJCQkgKgorCQkJICogTm90ZTogYmVjYXVzZSB3ZSBzdG9w IHRoZSBzY2FuIGFzIHNvb24gYXMgYW55IHJlcXVpcmVkIGVxdWFsaXR5CisJCQkgKiBxdWFsIGZh aWxzLCBpdCBpcyBjcml0aWNhbCB0aGF0IGVxdWFsaXR5IHF1YWxzIGJlIHVzZWQgZm9yIHRoZQor CQkJICogaW5pdGlhbCBwb3NpdGlvbmluZyBpbiBfYnRfZmlyc3QoKSB3aGVuIHRoZXkgYXJlIGF2 YWlsYWJsZS4gU2VlCisJCQkgKiBjb21tZW50cyBpbiBfYnRfZmlyc3QoKS4KKwkJCSAqLworCQkJ aWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRRldEKSAmJgorCQkJCVNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSAmJiBjbXByZXN1bHQgPiAwKQorCQkJeworCQkJCSpjb250aW51ZXNjYW4g PSBmYWxzZTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQllbHNlIGlmICgoa2V5LT5za19m bGFncyAmIFNLX0JUX1JFUUJLV0QpICYmCisJCQkJCSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChk aXIpICYmIGNtcHJlc3VsdCA8IDApCisJCQl7CisJCQkJKmNvbnRpbnVlc2NhbiA9IGZhbHNlOwor CQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRf UkVRU0tJUEZXRCkgJiYKKwkJCQlTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYgY21wcmVz dWx0ID4gMCkKKwkJCXsKKwkJCQkqcHJlZml4U2tpcEluZGV4ID0ga2V5LT5za19hdHRubyAtIDE7 CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZWxzZSBpZiAoKGtleS0+c2tfZmxhZ3MgJiBT S19CVF9SRVFTS0lQQktXRCkgJiYKKwkJCQkJIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikg JiYgY21wcmVzdWx0IDwgMCkKKwkJCXsKKwkJCQkqcHJlZml4U2tpcEluZGV4ID0ga2V5LT5za19h dHRubyAtIDE7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQkvKgorCQkJICogSW4gYW55 IGNhc2UsIHRoaXMgaW5kZXh0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBxdWFsLgorCQkJICovCisJ CQlvdmVyYWxsbWF0Y2ggPSBmYWxzZTsKKwkJfQorCX0KKworCS8qIElmIHdlIGdldCBoZXJlLCB0 aGUgdHVwbGUgcGFzc2VzIGFsbCBpbmRleCBxdWFscy4gKi8KKwlyZXR1cm4gb3ZlcmFsbG1hdGNo OworfQorCiAvKgogICogVGVzdCB3aGV0aGVyIGFuIGluZGV4dHVwbGUgc2F0aXNmaWVzIGEgcm93 LWNvbXBhcmlzb24gc2NhbiBjb25kaXRpb24uCiAgKgpAQCAtMTUyMCw3ICsxNzg5LDcgQEAgX2J0 X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBu YXR0cywKICAqLwogc3RhdGljIGJvb2wKIF9idF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkgc2tl eSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAotCQkJCQkgVHVwbGVEZXNjIHR1cGRl c2MsIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4pCisJCQkJCSBUdXBsZURl c2MgdHVwZGVzYywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2NhbiwgaW50ICpw cmVmaXhTa2lwSW5kZXgpCiB7CiAJU2NhbktleQkJc3Via2V5ID0gKFNjYW5LZXkpIERhdHVtR2V0 UG9pbnRlcihza2V5LT5za19hcmd1bWVudCk7CiAJaW50MzIJCWNtcHJlc3VsdCA9IDA7CkBAIC0x NTc2LDYgKzE4NDUsMTAgQEAgX2J0X2NoZWNrX3Jvd2NvbXBhcmUoU2NhbktleSBza2V5LCBJbmRl eFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJCQkJaWYgKChzdWJrZXktPnNrX2ZsYWdzICYg KFNLX0JUX1JFUUZXRCB8IFNLX0JUX1JFUUJLV0QpKSAmJgogCQkJCQlTY2FuRGlyZWN0aW9uSXNC YWNrd2FyZChkaXIpKQogCQkJCQkqY29udGludWVzY2FuID0gZmFsc2U7CisKKwkJCQlpZiAoKHN1 YmtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRU0tJUEZXRCB8IFNLX0JUX1JFUUJLV0QpICYmCisJ CQkJCVNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpKQorCQkJCQkqcHJlZml4U2tpcEluZGV4 ID0gc3Via2V5LT5za19hdHRubyAtIDE7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0xNTkyLDYg KzE4NjUsMTAgQEAgX2J0X2NoZWNrX3Jvd2NvbXBhcmUoU2NhbktleSBza2V5LCBJbmRleFR1cGxl IHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJCQkJaWYgKChzdWJrZXktPnNrX2ZsYWdzICYgKFNLX0JU X1JFUUZXRCB8IFNLX0JUX1JFUUJLV0QpKSAmJgogCQkJCQlTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKworCQkJCWlmICgoc3Via2V5LT5z a19mbGFncyAmIChTS19CVF9SRVFTS0lQRldEIHwgU0tfQlRfUkVRQktXRCkgJiYKKwkJCQkJU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKSkKKwkJCQkJKnByZWZpeFNraXBJbmRleCA9IHN1Ymtl eS0+c2tfYXR0bm8gLSAxOwogCQkJfQogCiAJCQkvKgpAQCAtMTYxNiw2ICsxODkzLDEzIEBAIF9i dF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkgc2tleSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1 cG5hdHRzLAogCQkJZWxzZSBpZiAoKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFCS1dEKSAm JgogCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKIAkJCQkqY29udGludWVzY2Fu ID0gZmFsc2U7CisKKwkJCWlmICgoc3Via2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBGV0Qp ICYmCisJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQkJCSpwcmVmaXhTa2lwSW5k ZXggPSBzdWJrZXktPnNrX2F0dG5vIC0gMTsKKwkJCWVsc2UgaWYgKChzdWJrZXktPnNrX2ZsYWdz ICYgU0tfQlRfUkVRU0tJUEJLV0QpICYmCisJCQkJCSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChk aXIpKQorCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBzdWJrZXktPnNrX2F0dG5vIC0gMTsKIAkJCXJl dHVybiBmYWxzZTsKIAkJfQogCkBAIC0xNjc4LDYgKzE5NjIsMTMgQEAgX2J0X2NoZWNrX3Jvd2Nv bXBhcmUoU2NhbktleSBza2V5LCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAJCWVs c2UgaWYgKChzdWJrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRQktXRCkgJiYKIAkJCQkgU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoZGlyKSkKIAkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKworCQlp ZiAoKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQRldEKSAmJgorCQkJU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQorCQkJKnByZWZpeFNraXBJbmRleCA9IHN1YmtleS0+c2tfYXR0 bm8gLSAxOworCQllbHNlIGlmICgoc3Via2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBCS1dE KSAmJgorCQkJCSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJKnByZWZpeFNraXBJ bmRleCA9IHN1YmtleS0+c2tfYXR0bm8gLSAxOwogCX0KIAogCXJldHVybiByZXN1bHQ7CkBAIC0y NzMzLDMgKzMwMjQsNTI0IEBAIF9idF9hbGxlcXVhbGltYWdlKFJlbGF0aW9uIHJlbCwgYm9vbCBk ZWJ1Z21lc3NhZ2UpCiAKIAlyZXR1cm4gYWxsZXF1YWxpbWFnZTsKIH0KKwordm9pZCBfYnRfc2V0 X2JzZWFyY2hfZmxhZ3MoU3RyYXRlZ3lOdW1iZXIgc3RyYXRUb3RhbCwgU2NhbkRpcmVjdGlvbiBk aXIsIGJvb2wqIG5leHRrZXksIGJvb2wqIGdvYmFjaykKK3sKKwkvKi0tLS0tLS0tLS0KKwkgKiBF eGFtaW5lIHRoZSBzZWxlY3RlZCBpbml0aWFsLXBvc2l0aW9uaW5nIHN0cmF0ZWd5IHRvIGRldGVy bWluZSBleGFjdGx5CisJICogd2hlcmUgd2UgbmVlZCB0byBzdGFydCB0aGUgc2NhbiwgYW5kIHNl dCBmbGFnIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZQorCSAqIGNvZGUgYmVsb3cuCisJICoKKwkg KiBJZiBuZXh0a2V5ID0gZmFsc2UsIF9idF9zZWFyY2ggYW5kIF9idF9iaW5zcmNoIHdpbGwgbG9j YXRlIHRoZSBmaXJzdAorCSAqIGl0ZW0gPj0gc2NhbiBrZXkuICBJZiBuZXh0a2V5ID0gdHJ1ZSwg dGhleSB3aWxsIGxvY2F0ZSB0aGUgZmlyc3QKKwkgKiBpdGVtID4gc2NhbiBrZXkuCisJICoKKwkg KiBJZiBnb2JhY2sgPSB0cnVlLCB3ZSB3aWxsIHRoZW4gc3RlcCBiYWNrIG9uZSBpdGVtLCB3aGls ZSBpZgorCSAqIGdvYmFjayA9IGZhbHNlLCB3ZSB3aWxsIHN0YXJ0IHRoZSBzY2FuIG9uIHRoZSBs b2NhdGVkIGl0ZW0uCisJICotLS0tLS0tLS0tCisJICovCisJc3dpdGNoIChzdHJhdFRvdGFsKQor CXsKKwkJY2FzZSBCVExlc3NTdHJhdGVneU51bWJlcjoKKworCQkJLyoKKwkJCSAqIEZpbmQgZmly c3QgaXRlbSA+PSBzY2Fua2V5LCB0aGVuIGJhY2sgdXAgb25lIHRvIGFycml2ZSBhdCBsYXN0CisJ CQkgKiBpdGVtIDwgc2NhbmtleS4gIChOb3RlOiB0aGlzIHBvc2l0aW9uaW5nIHN0cmF0ZWd5IGlz IG9ubHkgdXNlZAorCQkJICogZm9yIGEgYmFja3dhcmQgc2Nhbiwgc28gdGhhdCBpcyBhbHdheXMg dGhlIGNvcnJlY3Qgc3RhcnRpbmcKKwkJCSAqIHBvc2l0aW9uLikKKwkJCSAqLworCQkJKm5leHRr ZXkgPSBmYWxzZTsKKwkJCSpnb2JhY2sgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBCVExl c3NFcXVhbFN0cmF0ZWd5TnVtYmVyOgorCisJCQkvKgorCQkJICogRmluZCBmaXJzdCBpdGVtID4g c2NhbmtleSwgdGhlbiBiYWNrIHVwIG9uZSB0byBhcnJpdmUgYXQgbGFzdAorCQkJICogaXRlbSA8 PSBzY2Fua2V5LiAgKE5vdGU6IHRoaXMgcG9zaXRpb25pbmcgc3RyYXRlZ3kgaXMgb25seSB1c2Vk CisJCQkgKiBmb3IgYSBiYWNrd2FyZCBzY2FuLCBzbyB0aGF0IGlzIGFsd2F5cyB0aGUgY29ycmVj dCBzdGFydGluZworCQkJICogcG9zaXRpb24uKQorCQkJICovCisJCQkqbmV4dGtleSA9IHRydWU7 CisJCQkqZ29iYWNrID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyOgorCisJCQkvKgorCQkJICogSWYgYSBiYWNrd2FyZCBzY2FuIHdhcyBzcGVjaWZpZWQs IG5lZWQgdG8gc3RhcnQgd2l0aCBsYXN0IGVxdWFsCisJCQkgKiBpdGVtIG5vdCBmaXJzdCBvbmUu CisJCQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJeworCQkJ CS8qCisJCQkJICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgPD0gc3RyYXRlZ3kuICBXZSB3aWxs IGNoZWNrIGF0IHRoZQorCQkJCSAqIGVuZCB3aGV0aGVyIHRoZSBmb3VuZCBpdGVtIGlzIGFjdHVh bGx5ID0uCisJCQkJICovCisJCQkJKm5leHRrZXkgPSB0cnVlOworCQkJCSpnb2JhY2sgPSB0cnVl OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogVGhpcyBpcyB0aGUgc2FtZSBh cyB0aGUgPj0gc3RyYXRlZ3kuICBXZSB3aWxsIGNoZWNrIGF0IHRoZQorCQkJCSAqIGVuZCB3aGV0 aGVyIHRoZSBmb3VuZCBpdGVtIGlzIGFjdHVhbGx5ID0uCisJCQkJICovCisJCQkJKm5leHRrZXkg PSBmYWxzZTsKKwkJCQkqZ29iYWNrID0gZmFsc2U7CisJCQl9CisJCQlicmVhazsKKworCQljYXNl IEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI6CisKKwkJCS8qCisJCQkgKiBGaW5kIGZpcnN0 IGl0ZW0gPj0gc2NhbmtleS4gIChUaGlzIGlzIG9ubHkgdXNlZCBmb3IgZm9yd2FyZAorCQkJICog c2NhbnMuKQorCQkJICovCisJCQkqbmV4dGtleSA9IGZhbHNlOworCQkJKmdvYmFjayA9IGZhbHNl OworCQkJYnJlYWs7CisKKwkJY2FzZSBCVEdyZWF0ZXJTdHJhdGVneU51bWJlcjoKKworCQkJLyoK KwkJCSAqIEZpbmQgZmlyc3QgaXRlbSA+IHNjYW5rZXkuICAoVGhpcyBpcyBvbmx5IHVzZWQgZm9y IGZvcndhcmQKKwkJCSAqIHNjYW5zLikKKwkJCSAqLworCQkJKm5leHRrZXkgPSB0cnVlOworCQkJ KmdvYmFjayA9IGZhbHNlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGNhbid0IGdl dCBoZXJlLCBidXQga2VlcCBjb21waWxlciBxdWlldCAqLworCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBzdHJhdF90b3RhbDogJWQiLCAoaW50KSBzdHJhdFRvdGFsKTsKKwl9Cit9CisKK2Jv b2wgX2J0X2NyZWF0ZV9pbnNlcnRpb25fc2Nhbl9rZXkoUmVsYXRpb24JcmVsLCBTY2FuRGlyZWN0 aW9uIGRpciwgU2NhbktleSogc3RhcnRLZXlzLCBpbnQga2V5c0NvdW50LCBCVFNjYW5JbnNlcnQg aW5za2V5LCBTdHJhdGVneU51bWJlciogc3RyYXRUb3RhbCwgIGJvb2wqIGdvYmFjaykKK3sKKwlp bnQgaTsKKwlib29sIG5leHRrZXk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gc3RhcnQgdGhlIHNj YW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KKwkgKiBpbnNlcnRpb24g c2NhbmtleSB3ZSBjYW4gdXNlIHRvIHNlYXJjaCBmb3IgdGhlIGJvdW5kYXJ5IHBvaW50IHdlCisJ ICogaWRlbnRpZmllZCBhYm92ZS4gIFRoZSBpbnNlcnRpb24gc2NhbmtleSBpcyBidWlsdCB1c2lu ZyB0aGUga2V5cworCSAqIGlkZW50aWZpZWQgYnkgc3RhcnRLZXlzW10uICAoUmVtYWluaW5nIGlu c2VydGlvbiBzY2Fua2V5IGZpZWxkcyBhcmUKKwkgKiBpbml0aWFsaXplZCBhZnRlciBpbml0aWFs LXBvc2l0aW9uaW5nIHN0cmF0ZWd5IGlzIGZpbmFsaXplZC4pCisJICovCisJQXNzZXJ0KGtleXND b3VudCA8PSBJTkRFWF9NQVhfS0VZUyk7CisJZm9yIChpID0gMDsgaSA8IGtleXNDb3VudDsgaSsr KQorCXsKKwkJU2NhbktleQkJY3VyID0gc3RhcnRLZXlzW2ldOworCisJCWlmIChjdXIgPT0gTlVM TCkKKwkJeworCQkJaW5za2V5LT5zY2Fua2V5c1tpXS5za19hdHRubyA9IDA7CisJCQljb250aW51 ZTsKKwkJfQorCisJCUFzc2VydChjdXItPnNrX2F0dG5vID09IGkgKyAxKTsKKworCQlpZiAoY3Vy LT5za19mbGFncyAmIFNLX1JPV19IRUFERVIpCisJCXsKKwkJCS8qCisJCQkgKiBSb3cgY29tcGFy aXNvbiBoZWFkZXI6IGxvb2sgdG8gdGhlIGZpcnN0IHJvdyBtZW1iZXIgaW5zdGVhZC4KKwkJCSAq CisJCQkgKiBUaGUgbWVtYmVyIHNjYW5rZXlzIGFyZSBhbHJlYWR5IGluIGluc2VydGlvbiBmb3Jt YXQgKGllLCB0aGV5CisJCQkgKiBoYXZlIHNrX2Z1bmMgPSAzLXdheS1jb21wYXJpc29uIGZ1bmN0 aW9uKSwgYnV0IHdlIGhhdmUgdG8gd2F0Y2gKKwkJCSAqIG91dCBmb3IgbnVsbHMsIHdoaWNoIF9i dF9wcmVwcm9jZXNzX2tleXMgZGlkbid0IGNoZWNrLiBBIG51bGwKKwkJCSAqIGluIHRoZSBmaXJz dCByb3cgbWVtYmVyIG1ha2VzIHRoZSBjb25kaXRpb24gdW5tYXRjaGFibGUsIGp1c3QKKwkJCSAq IGxpa2UgcXVhbF9vayA9IGZhbHNlLgorCQkJICovCisJCQlTY2FuS2V5CQlzdWJrZXkgPSAoU2Nh bktleSkgRGF0dW1HZXRQb2ludGVyKGN1ci0+c2tfYXJndW1lbnQpOworCisJCQlBc3NlcnQoc3Vi a2V5LT5za19mbGFncyAmIFNLX1JPV19NRU1CRVIpOworCQkJaWYgKHN1YmtleS0+c2tfZmxhZ3Mg JiBTS19JU05VTEwpCisJCQl7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJbWVtY3B5KGlu c2tleS0+c2NhbmtleXMgKyBpLCBzdWJrZXksIHNpemVvZihTY2FuS2V5RGF0YSkpOworCisJCQkv KgorCQkJICogSWYgdGhlIHJvdyBjb21wYXJpc29uIGlzIHRoZSBsYXN0IHBvc2l0aW9uaW5nIGtl eSB3ZSBhY2NlcHRlZCwKKwkJCSAqIHRyeSB0byBhZGQgYWRkaXRpb25hbCBrZXlzIGZyb20gdGhl IGxvd2VyLW9yZGVyIHJvdyBtZW1iZXJzLgorCQkJICogKElmIHdlIGFjY2VwdGVkIGluZGVwZW5k ZW50IGNvbmRpdGlvbnMgb24gYWRkaXRpb25hbCBpbmRleAorCQkJICogY29sdW1ucywgd2UgdXNl IHRob3NlIGluc3RlYWQgLS0tIGRvZXNuJ3Qgc2VlbSB3b3J0aCB0cnlpbmcgdG8KKwkJCSAqIGRl dGVybWluZSB3aGljaCBpcyBtb3JlIHJlc3RyaWN0aXZlLikgIE5vdGUgdGhhdCB0aGlzIGlzIE9L CisJCQkgKiBldmVuIGlmIHRoZSByb3cgY29tcGFyaXNvbiBpcyBvZiAiPiIgb3IgIjwiIHR5cGUs IGJlY2F1c2UgdGhlCisJCQkgKiBjb25kaXRpb24gYXBwbGllZCB0byBhbGwgYnV0IHRoZSBsYXN0 IHJvdyBtZW1iZXIgaXMgZWZmZWN0aXZlbHkKKwkJCSAqICI+PSIgb3IgIjw9IiwgYW5kIHNvIHRo ZSBleHRyYSBrZXlzIGRvbid0IGJyZWFrIHRoZSBwb3NpdGlvbmluZworCQkJICogc2NoZW1lLiAg QnV0LCBieSB0aGUgc2FtZSB0b2tlbiwgaWYgd2UgYXJlbid0IGFibGUgdG8gdXNlIGFsbAorCQkJ ICogdGhlIHJvdyBtZW1iZXJzLCB0aGVuIHRoZSBwYXJ0IG9mIHRoZSByb3cgY29tcGFyaXNvbiB0 aGF0IHdlCisJCQkgKiBkaWQgdXNlIGhhcyB0byBiZSB0cmVhdGVkIGFzIGp1c3QgYSAiPj0iIG9y ICI8PSIgY29uZGl0aW9uLCBhbmQKKwkJCSAqIHNvIHdlJ2QgYmV0dGVyIGFkanVzdCBzdHJhdF90 b3RhbCBhY2NvcmRpbmdseS4KKwkJCSAqLworCQkJaWYgKGkgPT0ga2V5c0NvdW50IC0gMSkKKwkJ CXsKKwkJCQlib29sCQl1c2VkX2FsbF9zdWJrZXlzID0gZmFsc2U7CisKKwkJCQlBc3NlcnQoIShz dWJrZXktPnNrX2ZsYWdzICYgU0tfUk9XX0VORCkpOworCQkJCWZvciAoOzspCisJCQkJeworCQkJ CQlzdWJrZXkrKzsKKwkJCQkJQXNzZXJ0KHN1YmtleS0+c2tfZmxhZ3MgJiBTS19ST1dfTUVNQkVS KTsKKwkJCQkJaWYgKHN1YmtleS0+c2tfYXR0bm8gIT0ga2V5c0NvdW50ICsgMSkKKwkJCQkJCWJy ZWFrOwkvKiBvdXQtb2Ytc2VxdWVuY2UsIGNhbid0IHVzZSBpdCAqLworCQkJCQlpZiAoc3Via2V5 LT5za19zdHJhdGVneSAhPSBjdXItPnNrX3N0cmF0ZWd5KQorCQkJCQkJYnJlYWs7CS8qIHdyb25n IGRpcmVjdGlvbiwgY2FuJ3QgdXNlIGl0ICovCisJCQkJCWlmIChzdWJrZXktPnNrX2ZsYWdzICYg U0tfSVNOVUxMKQorCQkJCQkJYnJlYWs7CS8qIGNhbid0IHVzZSBudWxsIGtleXMgKi8KKwkJCQkJ QXNzZXJ0KGtleXNDb3VudCA8IElOREVYX01BWF9LRVlTKTsKKwkJCQkJbWVtY3B5KGluc2tleS0+ c2NhbmtleXMgKyBrZXlzQ291bnQsIHN1YmtleSwKKwkJCQkJCSAgIHNpemVvZihTY2FuS2V5RGF0 YSkpOworCQkJCQlrZXlzQ291bnQrKzsKKwkJCQkJaWYgKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19S T1dfRU5EKQorCQkJCQl7CisJCQkJCQl1c2VkX2FsbF9zdWJrZXlzID0gdHJ1ZTsKKwkJCQkJCWJy ZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghdXNlZF9hbGxfc3Via2V5cykKKwkJCQl7CisJ CQkJCXN3aXRjaCAoKnN0cmF0VG90YWwpCisJCQkJCXsKKwkJCQkJCWNhc2UgQlRMZXNzU3RyYXRl Z3lOdW1iZXI6CisJCQkJCQkJKnN0cmF0VG90YWwgPSBCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVy OworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBCVEdyZWF0ZXJTdHJhdGVneU51bWJlcjoKKwkJ CQkJCQkqc3RyYXRUb3RhbCA9IEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI7CisJCQkJCQkJ YnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CQkJLyogZG9uZSB3aXRoIG91dGVyIGxv b3AgKi8KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBPcmRpbmFyeSBjb21w YXJpc29uIGtleS4gIFRyYW5zZm9ybSB0aGUgc2VhcmNoLXN0eWxlIHNjYW4ga2V5CisJCQkgKiB0 byBhbiBpbnNlcnRpb24gc2NhbiBrZXkgYnkgcmVwbGFjaW5nIHRoZSBza19mdW5jIHdpdGggdGhl CisJCQkgKiBhcHByb3ByaWF0ZSBidHJlZSBjb21wYXJpc29uIGZ1bmN0aW9uLgorCQkJICoKKwkJ CSAqIElmIHNjYW5rZXkgb3BlcmF0b3IgaXMgbm90IGEgY3Jvc3MtdHlwZSBjb21wYXJpc29uLCB3 ZSBjYW4gdXNlCisJCQkgKiB0aGUgY2FjaGVkIGNvbXBhcmlzb24gZnVuY3Rpb247IG90aGVyd2lz ZSBnb3R0YSBsb29rIGl0IHVwIGluCisJCQkgKiB0aGUgY2F0YWxvZ3MuICAoVGhhdCBjYW4ndCBs ZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbiwgc2luY2Ugbm8KKwkJCSAqIGluZGV4c2NhbiBpbml0 aWF0ZWQgYnkgc3lzY2FjaGUgbG9va3VwIHdpbGwgdXNlIGNyb3NzLWRhdGEtdHlwZQorCQkJICog b3BlcmF0b3JzLikKKwkJCSAqCisJCQkgKiBXZSBzdXBwb3J0IHRoZSBjb252ZW50aW9uIHRoYXQg c2tfc3VidHlwZSA9PSBJbnZhbGlkT2lkIG1lYW5zCisJCQkgKiB0aGUgb3BjbGFzcyBpbnB1dCB0 eXBlOyB0aGlzIGlzIGEgaGFjayB0byBzaW1wbGlmeSBsaWZlIGZvcgorCQkJICogU2NhbktleUlu aXQoKS4KKwkJCSAqLworCQkJaWYgKGN1ci0+c2tfc3VidHlwZSA9PSByZWwtPnJkX29wY2ludHlw ZVtpXSB8fAorCQkJCWN1ci0+c2tfc3VidHlwZSA9PSBJbnZhbGlkT2lkKQorCQkJeworCQkJCUZt Z3JJbmZvICAgKnByb2NpbmZvOworCisJCQkJcHJvY2luZm8gPSBpbmRleF9nZXRwcm9jaW5mbyhy ZWwsIGN1ci0+c2tfYXR0bm8sIEJUT1JERVJfUFJPQyk7CisJCQkJU2NhbktleUVudHJ5SW5pdGlh bGl6ZVdpdGhJbmZvKGluc2tleS0+c2NhbmtleXMgKyBpLAorCQkJCQkJCQkJCQkgICBjdXItPnNr X2ZsYWdzLAorCQkJCQkJCQkJCQkgICBjdXItPnNrX2F0dG5vLAorCQkJCQkJCQkJCQkgICBjdXIt PnNrX3N0cmF0ZWd5LAorCQkJCQkJCQkJCQkgICBjdXItPnNrX3N1YnR5cGUsCisJCQkJCQkJCQkJ CSAgIGN1ci0+c2tfY29sbGF0aW9uLAorCQkJCQkJCQkJCQkgICBwcm9jaW5mbywKKwkJCQkJCQkJ CQkJICAgY3VyLT5za19hcmd1bWVudCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUmVnUHJv Y2VkdXJlIGNtcF9wcm9jOworCisJCQkJY21wX3Byb2MgPSBnZXRfb3BmYW1pbHlfcHJvYyhyZWwt PnJkX29wZmFtaWx5W2ldLAorCQkJCQkJCQkJCQkgcmVsLT5yZF9vcGNpbnR5cGVbaV0sCisJCQkJ CQkJCQkJCSBjdXItPnNrX3N1YnR5cGUsCisJCQkJCQkJCQkJCSBCVE9SREVSX1BST0MpOworCQkJ CWlmICghUmVnUHJvY2VkdXJlSXNWYWxpZChjbXBfcHJvYykpCisJCQkJCWVsb2coRVJST1IsICJt aXNzaW5nIHN1cHBvcnQgZnVuY3Rpb24gJWQoJXUsJXUpIGZvciBhdHRyaWJ1dGUgJWQgb2YgaW5k ZXggXCIlc1wiIiwKKwkJCQkJCSBCVE9SREVSX1BST0MsIHJlbC0+cmRfb3BjaW50eXBlW2ldLCBj dXItPnNrX3N1YnR5cGUsCisJCQkJCQkgY3VyLT5za19hdHRubywgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSk7CisJCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZShpbnNrZXktPnNjYW5rZXlz ICsgaSwKKwkJCQkJCQkJCSAgIGN1ci0+c2tfZmxhZ3MsCisJCQkJCQkJCQkgICBjdXItPnNrX2F0 dG5vLAorCQkJCQkJCQkJICAgY3VyLT5za19zdHJhdGVneSwKKwkJCQkJCQkJCSAgIGN1ci0+c2tf c3VidHlwZSwKKwkJCQkJCQkJCSAgIGN1ci0+c2tfY29sbGF0aW9uLAorCQkJCQkJCQkJICAgY21w X3Byb2MsCisJCQkJCQkJCQkgICBjdXItPnNrX2FyZ3VtZW50KTsKKwkJCX0KKwkJfQorCX0KKwor CV9idF9zZXRfYnNlYXJjaF9mbGFncygqc3RyYXRUb3RhbCwgZGlyLCAmbmV4dGtleSwgZ29iYWNr KTsKKworCS8qIEluaXRpYWxpemUgcmVtYWluaW5nIGluc2VydGlvbiBzY2FuIGtleSBmaWVsZHMg Ki8KKwlfYnRfbWV0YXZlcnNpb24ocmVsLCAmaW5za2V5LT5oZWFwa2V5c3BhY2UsICZpbnNrZXkt PmFsbGVxdWFsaW1hZ2UpOworCWluc2tleS0+YW55bnVsbGtleXMgPSBmYWxzZTsgLyogdW51c2Vk ICovCisJaW5za2V5LT5uZXh0a2V5ID0gbmV4dGtleTsKKwlpbnNrZXktPnBpdm90c2VhcmNoID0g ZmFsc2U7CisJaW5za2V5LT5zY2FudGlkID0gTlVMTDsKKwlpbnNrZXktPmtleXN6ID0ga2V5c0Nv dW50OworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qLS0tLS0tLS0tLQorICogRXhhbWluZSB0aGUg c2NhbiBrZXlzIHRvIGRpc2NvdmVyIHdoZXJlIHdlIG5lZWQgdG8gc3RhcnQgdGhlIHNjYW4uCisg KgorICogV2Ugd2FudCB0byBpZGVudGlmeSB0aGUga2V5cyB0aGF0IGNhbiBiZSB1c2VkIGFzIHN0 YXJ0aW5nIGJvdW5kYXJpZXM7CisgKiB0aGVzZSBhcmUgPSwgPiwgb3IgPj0ga2V5cyBmb3IgYSBm b3J3YXJkIHNjYW4gb3IgPSwgPCwgPD0ga2V5cyBmb3IKKyAqIGEgYmFja3dhcmRzIHNjYW4uICBX ZSBjYW4gdXNlIGtleXMgZm9yIG11bHRpcGxlIGF0dHJpYnV0ZXMgc28gbG9uZyBhcworICogdGhl IHByaW9yIGF0dHJpYnV0ZXMgaGFkIG9ubHkgPSwgPj0gKHJlc3AuID0sIDw9KSBrZXlzLiAgT25j ZSB3ZSBhY2NlcHQKKyAqIGEgPiBvciA8IGJvdW5kYXJ5IG9yIGZpbmQgYW4gYXR0cmlidXRlIHdp dGggbm8gYm91bmRhcnkgKHdoaWNoIGNhbiBiZQorICogdGhvdWdodCBvZiBhcyB0aGUgc2FtZSBh cyAiPiAtaW5maW5pdHkiKSwgd2UgY2FuJ3QgdXNlIGtleXMgZm9yIGFueQorICogYXR0cmlidXRl cyB0byBpdHMgcmlnaHQsIGJlY2F1c2UgaXQgd291bGQgYnJlYWsgb3VyIHNpbXBsaXN0aWMgbm90 aW9uCisgKiBvZiB3aGF0IGluaXRpYWwgcG9zaXRpb25pbmcgc3RyYXRlZ3kgdG8gdXNlLgorICoK KyAqIFdoZW4gdGhlIHNjYW4ga2V5cyBpbmNsdWRlIGNyb3NzLXR5cGUgb3BlcmF0b3JzLCBfYnRf cHJlcHJvY2Vzc19rZXlzCisgKiBtYXkgbm90IGJlIGFibGUgdG8gZWxpbWluYXRlIHJlZHVuZGFu dCBrZXlzOyBpbiBzdWNoIGNhc2VzIHdlIHdpbGwKKyAqIGFyYml0cmFyaWx5IHBpY2sgYSB1c2Fi bGUgb25lIGZvciBlYWNoIGF0dHJpYnV0ZS4gIFRoaXMgaXMgY29ycmVjdAorICogYnV0IHBvc3Np Ymx5IG5vdCBvcHRpbWFsIGJlaGF2aW9yLiAgKEZvciBleGFtcGxlLCB3aXRoIGtleXMgbGlrZQor ICogInggPj0gNCBBTkQgeCA+PSA1IiB3ZSB3b3VsZCBlbGVjdCB0byBzY2FuIHN0YXJ0aW5nIGF0 IHg9NCB3aGVuCisgKiB4PTUgd291bGQgYmUgbW9yZSBlZmZpY2llbnQuKSAgU2luY2UgdGhlIHNp dHVhdGlvbiBvbmx5IGFyaXNlcyBnaXZlbgorICogYSBwb29ybHktd29yZGVkIHF1ZXJ5IHBsdXMg YW4gaW5jb21wbGV0ZSBvcGZhbWlseSwgbGl2ZSB3aXRoIGl0LgorICoKKyAqIFdoZW4gYm90aCBl cXVhbGl0eSBhbmQgaW5lcXVhbGl0eSBrZXlzIGFwcGVhciBmb3IgYSBzaW5nbGUgYXR0cmlidXRl CisgKiAoYWdhaW4sIG9ubHkgcG9zc2libGUgd2hlbiBjcm9zcy10eXBlIG9wZXJhdG9ycyBhcHBl YXIpLCB3ZSAqbXVzdCoKKyAqIHNlbGVjdCBvbmUgb2YgdGhlIGVxdWFsaXR5IGtleXMgZm9yIHRo ZSBzdGFydGluZyBwb2ludCwgYmVjYXVzZQorICogX2J0X2NoZWNra2V5cygpIHdpbGwgc3RvcCB0 aGUgc2NhbiBhcyBzb29uIGFzIGFuIGVxdWFsaXR5IHF1YWwgZmFpbHMuCisgKiBGb3IgZXhhbXBs ZSwgaWYgd2UgaGF2ZSBrZXlzIGxpa2UgInggPj0gNCBBTkQgeCA9IDEwIiBhbmQgd2UgZWxlY3Qg dG8KKyAqIHN0YXJ0IGF0IHg9NCwgd2Ugd2lsbCBmYWlsIGFuZCBzdG9wIGJlZm9yZSByZWFjaGlu ZyB4PTEwLiAgSWYgbXVsdGlwbGUKKyAqIGVxdWFsaXR5IHF1YWxzIHN1cnZpdmUgcHJlcHJvY2Vz c2luZywgaG93ZXZlciwgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2gKKyAqIG9uZSB3ZSB1c2UgLS0t IGJ5IGRlZmluaXRpb24sIHRoZXkgYXJlIGVpdGhlciByZWR1bmRhbnQgb3IKKyAqIGNvbnRyYWRp Y3RvcnkuCisgKgorICogQW55IHJlZ3VsYXIgKG5vdCBTS19TRUFSQ0hOVUxMKSBrZXkgaW1wbGll cyBhIE5PVCBOVUxMIHF1YWxpZmllci4KKyAqIElmIHRoZSBpbmRleCBzdG9yZXMgbnVsbHMgYXQg dGhlIGVuZCBvZiB0aGUgaW5kZXggd2UnbGwgYmUgc3RhcnRpbmcKKyAqIGZyb20sIGFuZCB3ZSBo YXZlIG5vIGJvdW5kYXJ5IGtleSBmb3IgdGhlIGNvbHVtbiAod2hpY2ggbWVhbnMgdGhlIGtleQor ICogd2UgZGVkdWNlZCBOT1QgTlVMTCBmcm9tIGlzIGFuIGluZXF1YWxpdHkga2V5IHRoYXQgY29u c3RyYWlucyB0aGUgb3RoZXIKKyAqIGVuZCBvZiB0aGUgaW5kZXgpLCB0aGVuIHdlIGNvbnMgdXAg YW4gZXhwbGljaXQgU0tfU0VBUkNITk9UTlVMTCBrZXkgdG8KKyAqIHVzZSBhcyBhIGJvdW5kYXJ5 IGtleS4gIElmIHdlIGRpZG4ndCBkbyB0aGlzLCB3ZSBtaWdodCBmaW5kIG91cnNlbHZlcworICog dHJhdmVyc2luZyBhIGxvdCBvZiBudWxsIGVudHJpZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2Fu LgorICoKKyAqIEluIHRoaXMgbG9vcCwgcm93LWNvbXBhcmlzb24ga2V5cyBhcmUgdHJlYXRlZCB0 aGUgc2FtZSBhcyBrZXlzIG9uIHRoZWlyCisgKiBmaXJzdCAobGVmdG1vc3QpIGNvbHVtbnMuICBX ZSdsbCBhZGQgb24gbG93ZXItb3JkZXIgY29sdW1ucyBvZiB0aGUgcm93CisgKiBjb21wYXJpc29u IGJlbG93LCBpZiBwb3NzaWJsZS4KKyAqCisgKiBUaGUgc2VsZWN0ZWQgc2NhbiBrZXlzIChhdCBt b3N0IG9uZSBwZXIgaW5kZXggY29sdW1uKSBhcmUgcmVtZW1iZXJlZCBieQorICogc3RvcmluZyB0 aGVpciBhZGRyZXNzZXMgaW50byB0aGUgbG9jYWwgc3RhcnRLZXlzW10gYXJyYXkuCisgKi0tLS0t LS0tLS0KKyAqLworaW50IF9idF9jaG9vc2Vfc2Nhbl9rZXlzKFNjYW5LZXkgc2NhbktleXMsIGlu dCBudW1iZXJPZktleXMsIFNjYW5EaXJlY3Rpb24gZGlyLCBTY2FuS2V5KiBzdGFydEtleXMsIFNj YW5LZXlEYXRhKiBub3RudWxsa2V5cywgU3RyYXRlZ3lOdW1iZXIqIHN0cmF0VG90YWwsIGludCBw cmVmaXgpCit7CisJU3RyYXRlZ3lOdW1iZXIgc3RyYXQ7CisJaW50CQkJa2V5c0NvdW50ID0gMDsK KwlpbnQJCQlpOworCisJKnN0cmF0VG90YWwgPSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXI7CisJaWYg KG51bWJlck9mS2V5cyA+IDAgfHwgcHJlZml4ID4gMCkKKwl7CisJCUF0dHJOdW1iZXIJY3VyYXR0 cjsKKwkJU2NhbktleQkJY2hvc2VuOworCQlTY2FuS2V5CQlpbXBsaWVzTk47CisJCVNjYW5LZXkJ CWN1cjsKKworCQkvKgorCQkgKiBjaG9zZW4gaXMgdGhlIHNvLWZhci1jaG9zZW4ga2V5IGZvciB0 aGUgY3VycmVudCBhdHRyaWJ1dGUsIGlmIGFueS4KKwkJICogV2UgZG9uJ3QgY2FzdCB0aGUgZGVj aXNpb24gaW4gc3RvbmUgdW50aWwgd2UgcmVhY2gga2V5cyBmb3IgdGhlCisJCSAqIG5leHQgYXR0 cmlidXRlLgorCQkgKi8KKwkJY3VyYXR0ciA9IDE7CisJCWNob3NlbiA9IE5VTEw7CisJCS8qIEFs c28gcmVtZW1iZXIgYW55IHNjYW5rZXkgdGhhdCBpbXBsaWVzIGEgTk9UIE5VTEwgY29uc3RyYWlu dCAqLworCQlpbXBsaWVzTk4gPSBOVUxMOworCisJCS8qCisJCSAqIExvb3AgaXRlcmF0ZXMgZnJv bSAwIHRvIG51bWJlck9mS2V5cyBpbmNsdXNpdmU7IHdlIHVzZSB0aGUgbGFzdAorCQkgKiBwYXNz IHRvIGhhbmRsZSBhZnRlci1sYXN0LWtleSBwcm9jZXNzaW5nLiAgQWN0dWFsIGV4aXQgZnJvbSB0 aGUKKwkJICogbG9vcCBpcyBhdCBvbmUgb2YgdGhlICJicmVhayIgc3RhdGVtZW50cyBiZWxvdy4K KwkJICovCisJCWZvciAoY3VyID0gc2NhbktleXMsIGkgPSAwOzsgY3VyKyssIGkrKykKKwkJewor CQkJaWYgKGkgPj0gbnVtYmVyT2ZLZXlzIHx8IGN1ci0+c2tfYXR0bm8gIT0gY3VyYXR0cikKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIERvbmUgbG9va2luZyBhdCBrZXlzIGZvciBjdXJhdHRyLiAgSWYg d2UgZGlkbid0IGZpbmQgYQorCQkJCSAqIHVzYWJsZSBib3VuZGFyeSBrZXksIHNlZSBpZiB3ZSBj YW4gZGVkdWNlIGEgTk9UIE5VTEwga2V5LgorCQkJCSAqLworCQkJCWlmIChjaG9zZW4gPT0gTlVM TCAmJiBpbXBsaWVzTk4gIT0gTlVMTCAmJgorCQkJCQkoKGltcGxpZXNOTi0+c2tfZmxhZ3MgJiBT S19CVF9OVUxMU19GSVJTVCkgPworCQkJCQkgU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpIDoK KwkJCQkJIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpKQorCQkJCXsKKwkJCQkJLyogWWVz LCBzbyBidWlsZCB0aGUga2V5IGluIG5vdG51bGxrZXlzW2tleXNDb3VudF0gKi8KKwkJCQkJY2hv c2VuID0gJm5vdG51bGxrZXlzW2tleXNDb3VudF07CisJCQkJCVNjYW5LZXlFbnRyeUluaXRpYWxp emUoY2hvc2VuLAorCQkJCQkJCQkJCSAgIChTS19TRUFSQ0hOT1ROVUxMIHwgU0tfSVNOVUxMIHwK KwkJCQkJCQkJCQkJKGltcGxpZXNOTi0+c2tfZmxhZ3MgJgorCQkJCQkJCQkJCQkgKFNLX0JUX0RF U0MgfCBTS19CVF9OVUxMU19GSVJTVCkpKSwKKwkJCQkJCQkJCQkgICBjdXJhdHRyLAorCQkJCQkJ CQkJCSAgICgoaW1wbGllc05OLT5za19mbGFncyAmIFNLX0JUX05VTExTX0ZJUlNUKSA/CisJCQkJ CQkJCQkJCUJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyIDoKKwkJCQkJCQkJCQkJQlRMZXNzU3RyYXRl Z3lOdW1iZXIpLAorCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkJCQkJICAgSW52YWxp ZE9pZCwKKwkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCSAgIChEYXR1bSkgMCk7 CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBzdGlsbCBkaWRuJ3QgZmluZCBhIHVzYWJs ZSBib3VuZGFyeSBrZXksIHF1aXQ7IGVsc2UKKwkJCQkgKiBzYXZlIHRoZSBib3VuZGFyeSBrZXkg cG9pbnRlciBpbiBzdGFydEtleXMuCisJCQkJICovCisJCQkJaWYgKGNob3NlbiA9PSBOVUxMICYm IGN1cmF0dHIgPiBwcmVmaXgpCisJCQkJCWJyZWFrOworCQkJCXN0YXJ0S2V5c1trZXlzQ291bnQr K10gPSBjaG9zZW47CisKKwkJCQkvKgorCQkJCSAqIEFkanVzdCBzdHJhdF90b3RhbCwgYW5kIHF1 aXQgaWYgd2UgaGF2ZSBzdG9yZWQgYSA+IG9yIDwKKwkJCQkgKiBrZXkuCisJCQkJICovCisJCQkJ aWYgKGNob3NlbiAhPSBOVUxMICYmIGN1cmF0dHIgPiBwcmVmaXgpCisJCQkJeworCQkJCQlzdHJh dCA9IGNob3Nlbi0+c2tfc3RyYXRlZ3k7CisJCQkJCWlmIChzdHJhdCAhPSBCVEVxdWFsU3RyYXRl Z3lOdW1iZXIpCisJCQkJCXsKKwkJCQkJCSpzdHJhdFRvdGFsID0gc3RyYXQ7CisJCQkJCQlpZiAo c3RyYXQgPT0gQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXIgfHwKKwkJCQkJCQlzdHJhdCA9PSBCVExl c3NTdHJhdGVneU51bWJlcikKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8q CisJCQkJICogRG9uZSBpZiB0aGF0IHdhcyB0aGUgbGFzdCBhdHRyaWJ1dGUsIG9yIGlmIG5leHQg a2V5IGlzIG5vdAorCQkJCSAqIGluIHNlcXVlbmNlIChpbXBseWluZyBubyBib3VuZGFyeSBrZXkg aXMgYXZhaWxhYmxlIGZvciB0aGUKKwkJCQkgKiBuZXh0IGF0dHJpYnV0ZSkuCisJCQkJICovCisJ CQkJaWYgKGkgPj0gbnVtYmVyT2ZLZXlzKQorCQkJCXsKKwkJCQkJY3VyYXR0cisrOworCQkJCQl3 aGlsZShjdXJhdHRyIDw9IHByZWZpeCkKKwkJCQkJeworCQkJCQkJc3RhcnRLZXlzW2tleXNDb3Vu dCsrXSA9IE5VTEw7CisJCQkJCQljdXJhdHRyKys7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWVsc2UgaWYgKGN1ci0+c2tfYXR0bm8gIT0gY3VyYXR0ciArIDEpCisJCQkJeworCQkJ CQljdXJhdHRyKys7CisJCQkJCXdoaWxlKGN1cmF0dHIgPCBjdXItPnNrX2F0dG5vICYmIGN1cmF0 dHIgPD0gcHJlZml4KQorCQkJCQl7CisJCQkJCQlzdGFydEtleXNba2V5c0NvdW50KytdID0gTlVM TDsKKwkJCQkJCWN1cmF0dHIrKzsKKwkJCQkJfQorCQkJCQlpZiAoY3VyYXR0ciA+IHByZWZpeCAm JiBjdXJhdHRyICE9IGN1ci0+c2tfYXR0bm8pCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxz ZQorCQkJCXsKKwkJCQkJY3VyYXR0cisrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogUmVzZXQg Zm9yIG5leHQgYXR0ci4KKwkJCQkgKi8KKwkJCQljaG9zZW4gPSBOVUxMOworCQkJCWltcGxpZXNO TiA9IE5VTEw7CisJCQl9CisKKwkJCS8qCisJCQkgKiBDYW4gd2UgdXNlIHRoaXMga2V5IGFzIGEg c3RhcnRpbmcgYm91bmRhcnkgZm9yIHRoaXMgYXR0cj8KKwkJCSAqCisJCQkgKiBJZiBub3QsIGRv ZXMgaXQgaW1wbHkgYSBOT1QgTlVMTCBjb25zdHJhaW50PyAgKEJlY2F1c2UKKwkJCSAqIFNLX1NF QVJDSE5VTEwga2V5cyBhcmUgYWx3YXlzIGFzc2lnbmVkIEJURXF1YWxTdHJhdGVneU51bWJlciwK KwkJCSAqICphbnkqIGluZXF1YWxpdHkga2V5IHdvcmtzIGZvciB0aGF0OyB3ZSBuZWVkIG5vdCB0 ZXN0LikKKwkJCSAqLworCQkJc3dpdGNoIChjdXItPnNrX3N0cmF0ZWd5KQorCQkJeworCQkJCWNh c2UgQlRMZXNzU3RyYXRlZ3lOdW1iZXI6CisJCQkJY2FzZSBCVExlc3NFcXVhbFN0cmF0ZWd5TnVt YmVyOgorCQkJCQlpZiAoY2hvc2VuID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCWlmIChTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJCQkJCWNob3NlbiA9IGN1cjsKKwkJCQkJCWVsc2UK KwkJCQkJCQlpbXBsaWVzTk4gPSBjdXI7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBC VEVxdWFsU3RyYXRlZ3lOdW1iZXI6CisJCQkJCS8qIG92ZXJyaWRlIGFueSBub24tZXF1YWxpdHkg Y2hvaWNlICovCisJCQkJCWNob3NlbiA9IGN1cjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBCVEdy ZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVyOgorCQkJCWNhc2UgQlRHcmVhdGVyU3RyYXRlZ3lOdW1i ZXI6CisJCQkJCWlmIChjaG9zZW4gPT0gTlVMTCkKKwkJCQkJeworCQkJCQkJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJCQkJCQljaG9zZW4gPSBjdXI7CisJCQkJCQllbHNlCisJ CQkJCQkJaW1wbGllc05OID0gY3VyOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJ fQorCXJldHVybiBrZXlzQ291bnQ7Cit9CisKK3ZvaWQgcHJpbnRfaXR1cChCbG9ja051bWJlciBi bGssIEluZGV4VHVwbGUgbGVmdCwgSW5kZXhUdXBsZSByaWdodCwgUmVsYXRpb24gcmVsLCBjaGFy ICpleHRyYSkKK3sKKwlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOworCURhdHVtCQl2YWx1 ZXNbSU5ERVhfTUFYX0tFWVNdOworCWNoYXIJICAgKmxrZXlfZGVzYyA9IE5VTEw7CisJY2hhcgkg ICAqcmtleV9kZXNjOworCisJLyogQXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIC0tIGRvbid0IGlu c3RydW1lbnQgY2F0YWxvZyBpbmRleGVzICovCisJaWYgKCFJc0NhdGFsb2dSZWxhdGlvbihyZWwp KQorCXsKKwkJVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQlp bnQJCQluYXR0czsKKwkJaW50CQkJaW5kbmtleWF0dHMgPSByZWwtPnJkX2luZGV4LT5pbmRua2V5 YXR0czsKKworCQluYXR0cyA9IEJUcmVlVHVwbGVHZXROQXR0cyhsZWZ0LCByZWwpOworCQlpdHVw ZGVzYy0+bmF0dHMgPSBNaW4oaW5kbmtleWF0dHMsIG5hdHRzKTsKKwkJbWVtc2V0KCZpc251bGws IDB4RkYsIHNpemVvZihpc251bGwpKTsKKwkJaW5kZXhfZGVmb3JtX3R1cGxlKGxlZnQsIGl0dXBk ZXNjLCB2YWx1ZXMsIGlzbnVsbCk7CisJCXJlbC0+cmRfaW5kZXgtPmluZG5rZXlhdHRzID0gbmF0 dHM7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgc2hvdWxkIHBhc3Mg d2hlbiB0aGUgaW5zdHJ1bWVudGF0aW9uCisJCSAqIHBhdGNoIGlzIGFwcGxpZWQsIGJlIHByZXBh cmVkIGZvciBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbigpIHRvCisJCSAqIHJldHVybiBOVUxM IGR1ZSB0byBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4KKwkJICovCisJCWxrZXlfZGVzYyA9IEJ1 aWxkSW5kZXhWYWx1ZURlc2NyaXB0aW9uKHJlbCwgdmFsdWVzLCBpc251bGwpOworCQlpZiAobGtl eV9kZXNjICYmIHJpZ2h0KQorCQl7CisJCQkvKgorCQkJICogUmV2b2x0aW5nIGhhY2s6IG1vZGlm eSB0dXBsZSBkZXNjcmlwdG9yIHRvIGhhdmUgbnVtYmVyIG9mIGtleQorCQkJICogY29sdW1ucyBh Y3R1YWxseSBwcmVzZW50IGluIGNhbGxlcidzIHBpdm90IHR1cGxlcworCQkJICovCisJCQluYXR0 cyA9IEJUcmVlVHVwbGVHZXROQXR0cyhyaWdodCwgcmVsKTsKKwkJCWl0dXBkZXNjLT5uYXR0cyA9 IE1pbihpbmRua2V5YXR0cywgbmF0dHMpOworCQkJbWVtc2V0KCZpc251bGwsIDB4RkYsIHNpemVv Zihpc251bGwpKTsKKwkJCWluZGV4X2RlZm9ybV90dXBsZShyaWdodCwgaXR1cGRlc2MsIHZhbHVl cywgaXNudWxsKTsKKwkJCXJlbC0+cmRfaW5kZXgtPmluZG5rZXlhdHRzID0gbmF0dHM7CisJCQly a2V5X2Rlc2MgPSBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbihyZWwsIHZhbHVlcywgaXNudWxs KTsKKwkJCWVsb2coREVCVUcxLCAiJXMgYmxrICV1IHNrID4gJXMsIHNrIDw9ICVzICVzIiwKKwkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgYmxrLCBsa2V5X2Rlc2MsIHJrZXlfZGVz YywKKwkJCQkgZXh0cmEpOworCQkJcGZyZWUocmtleV9kZXNjKTsKKwkJfQorCQllbHNlCisJCQll bG9nKERFQlVHMSwgIiVzIGJsayAldSBzayBjaGVjayAlcyAlcyIsCisJCQkJIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCksIGJsaywgbGtleV9kZXNjLCBleHRyYSk7CisKKwkJLyogQ2xlYW51 cCAqLworCQlpdHVwZGVzYy0+bmF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1 dGVzKHJlbCk7CisJCXJlbC0+cmRfaW5kZXgtPmluZG5rZXlhdHRzID0gaW5kbmtleWF0dHM7CisJ CWlmIChsa2V5X2Rlc2MpCisJCQlwZnJlZShsa2V5X2Rlc2MpOworCX0KK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCAwM2E5Y2QzNmU2Li5mZGU0M2Y4MTMxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC03MSw2ICs3MSw5IEBAIHNwZ2hhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IHNwZ2J1bGtkZWxl dGU7CiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBzcGd2YWN1dW1jbGVhbnVwOwogCWFt cm91dGluZS0+YW1jYW5yZXR1cm4gPSBzcGdjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5hbXNraXAg PSBOVUxMOworCWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtZ2V0c2tpcHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gc3Bn Y29zdGVzdGltYXRlOwogCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Bnb3B0aW9uczsKIAlhbXJv dXRpbmUtPmFtcHJvcGVydHkgPSBzcGdwcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRl eCAxMDY0NGRmYWM0Li5lZjhlODlkMjU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xNTIs NiArMTUyLDcgQEAgc3RhdGljIHZvaWQgRXhwbGFpblhNTFRhZyhjb25zdCBjaGFyICp0YWduYW1l LCBpbnQgZmxhZ3MsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgRXhwbGFpbkluZGVu dFRleHQoRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBFeHBsYWluSlNPTkxpbmVFbmRp bmcoRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBFeHBsYWluWUFNTExpbmVTdGFydGlu ZyhFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIEV4cGxhaW5JbmRleFNraXBTY2FuS2V5 cyhpbnQgc2tpcFByZWZpeFNpemUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgZXNj YXBlX3lhbWwoU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0cik7CiAKIApAQCAtMTExNCw2 ICsxMTE1LDIyIEBAIEV4cGxhaW5QcmVTY2FuTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgQml0 bWFwc2V0ICoqcmVsc191c2VkKQogCXJldHVybiBwbGFuc3RhdGVfdHJlZV93YWxrZXIocGxhbnN0 YXRlLCBFeHBsYWluUHJlU2Nhbk5vZGUsIHJlbHNfdXNlZCk7CiB9CiAKKy8qCisgKiBFeHBsYWlu SW5kZXhTa2lwU2NhbktleXMgLQorICoJICBBcHBlbmQgaW5mb3JtYXRpb24gYWJvdXQgaW5kZXgg c2tpcCBzY2FuIHRvIGVzLT5zdHIuCisgKgorICogQ2FuIGJlIHVzZWQgdG8gcHJpbnQgdGhlIHNr aXAgcHJlZml4IHNpemUuCisgKi8KK3N0YXRpYyB2b2lkCitFeHBsYWluSW5kZXhTa2lwU2Nhbktl eXMoaW50IHNraXBQcmVmaXhTaXplLCBFeHBsYWluU3RhdGUgKmVzKQoreworCWlmIChza2lwUHJl Zml4U2l6ZSA+IDApCisJeworCQlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhU KQorCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiRGlzdGluY3QgUHJlZml4IiwgTlVMTCwgc2tp cFByZWZpeFNpemUsIGVzKTsKKwl9Cit9CisKIC8qCiAgKiBFeHBsYWluTm9kZSAtCiAgKgkgIEFw cGVuZHMgYSBkZXNjcmlwdGlvbiBvZiBhIHBsYW4gdHJlZSB0byBlcy0+c3RyCkBAIC0xNDYxLDYg KzE0NzgsOSBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCQkJewogCQkJCUluZGV4U2NhbiAgKmluZGV4c2NhbiA9IChJbmRleFNjYW4gKikgcGxh bjsKIAorCQkJCWlmIChpbmRleHNjYW4tPmluZGV4ZGlzdGluY3QpCisJCQkJCUV4cGxhaW5JbmRl eFNraXBTY2FuS2V5cyhpbmRleHNjYW4tPmluZGV4c2tpcHByZWZpeHNpemUsIGVzKTsKKwogCQkJ CUV4cGxhaW5JbmRleFNjYW5EZXRhaWxzKGluZGV4c2Nhbi0+aW5kZXhpZCwKIAkJCQkJCQkJCQlp bmRleHNjYW4tPmluZGV4b3JkZXJkaXIsCiAJCQkJCQkJCQkJZXMpOwpAQCAtMTQ3MSw2ICsxNDkx LDkgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuICppbmRleG9ubHlzY2FuID0gKEluZGV4T25seVNjYW4g KikgcGxhbjsKIAorCQkJCWlmIChpbmRleG9ubHlzY2FuLT5pbmRleGRpc3RpbmN0KQorCQkJCQlF eHBsYWluSW5kZXhTa2lwU2NhbktleXMoaW5kZXhvbmx5c2Nhbi0+aW5kZXhza2lwcHJlZml4c2l6 ZSwgZXMpOworCiAJCQkJRXhwbGFpbkluZGV4U2NhbkRldGFpbHMoaW5kZXhvbmx5c2Nhbi0+aW5k ZXhpZCwKIAkJCQkJCQkJCQlpbmRleG9ubHlzY2FuLT5pbmRleG9yZGVyZGlyLAogCQkJCQkJCQkJ CWVzKTsKQEAgLTE3MzEsNiArMTc1NCw4IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2Fz ZSBUX0luZGV4U2NhbjoKKwkJCWlmICgoKEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhza2lwcHJl Zml4c2l6ZSA+IDApCisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU2tpcCBzY2FuIiwgKChJbmRl eFNjYW4gKikgcGxhbiktPmluZGV4ZGlzdGluY3QgPyAiRGlzdGluY3Qgb25seSIgOiAiQWxsIiwg ZXMpOwogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9y aWcsCiAJCQkJCQkgICAiSW5kZXggQ29uZCIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CiAJ CQlpZiAoKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9yaWcpCkBAIC0xNzQ0LDYgKzE3 NjksOCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3Jz LAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRl eE9ubHlTY2FuOgorCQkJaWYgKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhza2lwcHJl Zml4c2l6ZSA+IDApCisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU2tpcCBzY2FuIiwgKChJbmRl eE9ubHlTY2FuICopIHBsYW4pLT5pbmRleGRpc3RpbmN0ID8gIkRpc3RpbmN0IG9ubHkiIDogIkFs bCIsIGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5k ZXhxdWFsLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMp OwogCQkJaWYgKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsKQpAQCAtMTc2MCw2 ICsxNzg3LDggQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2Vz dG9ycywKIAkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7 CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKKwkJCWlmICgoKEJpdG1hcElu ZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhza2lwcHJlZml4c2l6ZSA+IDApCisJCQkJRXhwbGFpblBy b3BlcnR5VGV4dCgiU2tpcCBzY2FuIiwgIkFsbCIsIGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKCgo Qml0bWFwSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4 IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NjYW4uYwppbmRleCA5ZjFkOGI2ZDFlLi4zYzFhNzlhODA5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNTY2FuLmMKQEAgLTEzMyw2ICsxMzMsMTQgQEAgRXhlY1NjYW5GZXRjaChTY2FuU3RhdGUgKm5v ZGUsCiAJcmV0dXJuICgqYWNjZXNzTXRkKSAobm9kZSk7CiB9CiAKK1R1cGxlVGFibGVTbG90ICoK K0V4ZWNTY2FuKFNjYW5TdGF0ZSAqbm9kZSwKKwkJIEV4ZWNTY2FuQWNjZXNzTXRkIGFjY2Vzc010 ZCwJLyogZnVuY3Rpb24gcmV0dXJuaW5nIGEgdHVwbGUgKi8KKwkJIEV4ZWNTY2FuUmVjaGVja010 ZCByZWNoZWNrTXRkKQoreworCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkKG5vZGUsIGFjY2Vzc010 ZCwgcmVjaGVja010ZCwgTlVMTCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjU2NhbgogICoK QEAgLTE1NSw5ICsxNjMsMTAgQEAgRXhlY1NjYW5GZXRjaChTY2FuU3RhdGUgKm5vZGUsCiAgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKi8KIFR1cGxlVGFibGVTbG90ICoKLUV4ZWNTY2FuKFNjYW5TdGF0ZSAqbm9kZSwK K0V4ZWNTY2FuRXh0ZW5kZWQoU2NhblN0YXRlICpub2RlLAogCQkgRXhlY1NjYW5BY2Nlc3NNdGQg YWNjZXNzTXRkLAkvKiBmdW5jdGlvbiByZXR1cm5pbmcgYSB0dXBsZSAqLwotCQkgRXhlY1NjYW5S ZWNoZWNrTXRkIHJlY2hlY2tNdGQpCisJCSBFeGVjU2NhblJlY2hlY2tNdGQgcmVjaGVja010ZCwK KwkJIEV4ZWNTY2FuU2tpcE10ZCBza2lwTXRkKQogewogCUV4cHJDb250ZXh0ICplY29udGV4dDsK IAlFeHByU3RhdGUgICpxdWFsOwpAQCAtMTcwLDYgKzE3OSwyMCBAQCBFeGVjU2NhbihTY2FuU3Rh dGUgKm5vZGUsCiAJcHJvakluZm8gPSBub2RlLT5wcy5wc19Qcm9qSW5mbzsKIAllY29udGV4dCA9 IG5vZGUtPnBzLnBzX0V4cHJDb250ZXh0OwogCisJaWYgKHNraXBNdGQgIT0gTlVMTCAmJiBub2Rl LT5zc19GaXJzdFR1cGxlRW1pdHRlZCkKKwl7CisJCWJvb2wgY29udCA9IHNraXBNdGQobm9kZSk7 CisJCWlmICghY29udCkKKwkJeworCQkJbm9kZS0+c3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSBmYWxz ZTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5zc19TY2FuVHVwbGVTbG90KTsKKwkJ fQorCX0KKwllbHNlCisJeworCQlub2RlLT5zc19GaXJzdFR1cGxlRW1pdHRlZCA9IHRydWU7CisJ fQorCiAJLyogaW50ZXJydXB0IGNoZWNrcyBhcmUgaW4gRXhlY1NjYW5GZXRjaCAqLwogCiAJLyoK QEAgLTE3OCw4ICsyMDEsMTMgQEAgRXhlY1NjYW4oU2NhblN0YXRlICpub2RlLAogCSAqLwogCWlm ICghcXVhbCAmJiAhcHJvakluZm8pCiAJeworCQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwogCQlS ZXNldEV4cHJDb250ZXh0KGVjb250ZXh0KTsKLQkJcmV0dXJuIEV4ZWNTY2FuRmV0Y2gobm9kZSwg YWNjZXNzTXRkLCByZWNoZWNrTXRkKTsKKwkJc2xvdCA9IEV4ZWNTY2FuRmV0Y2gobm9kZSwgYWNj ZXNzTXRkLCByZWNoZWNrTXRkKTsKKwkJaWYgKFR1cElzTnVsbChzbG90KSkKKwkJCW5vZGUtPnNz X0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJCXJldHVybiBzbG90OwogCX0KIAogCS8qCkBA IC0yMDYsNiArMjM0LDcgQEAgRXhlY1NjYW4oU2NhblN0YXRlICpub2RlLAogCQkgKi8KIAkJaWYg KFR1cElzTnVsbChzbG90KSkKIAkJeworCQkJbm9kZS0+c3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSBm YWxzZTsKIAkJCWlmIChwcm9qSW5mbykKIAkJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUocHJvaklu Zm8tPnBpX3N0YXRlLnJlc3VsdHNsb3QpOwogCQkJZWxzZQpAQCAtMzA2LDYgKzMzNSw4IEBAIEV4 ZWNTY2FuUmVTY2FuKFNjYW5TdGF0ZSAqbm9kZSkKIAkgKi8KIAlFeGVjQ2xlYXJUdXBsZShub2Rl LT5zc19TY2FuVHVwbGVTbG90KTsKIAorCW5vZGUtPnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFs c2U7CisKIAkvKiBSZXNjYW4gRXZhbFBsYW5RdWFsIHR1cGxlIGlmIHdlJ3JlIGluc2lkZSBhbiBF dmFsUGxhblF1YWwgcmVjaGVjayAqLwogCWlmIChlc3RhdGUtPmVzX2VwcV9hY3RpdmUgIT0gTlVM TCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhz Y2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXgg NDhjMjAzNjI5Ny4uMmIwNTk3MGVjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBJbmRleHNjYW4uYwpAQCAtMjIsMTMgKzIyLDE0IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2RlYnVnLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9k ZUJpdG1hcEluZGV4c2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjQml0bWFwSW5kZXhT Y2FuCiAgKgpAQCAtMjIzLDYgKzIyNCw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1h cEluZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0 ZS0+c3MucHMucGxhbiA9IChQbGFuICopIG5vZGU7CiAJaW5kZXhzdGF0ZS0+c3MucHMuc3RhdGUg PSBlc3RhdGU7CiAJaW5kZXhzdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY0JpdG1hcElu ZGV4U2NhbjsKKwlpbmRleHN0YXRlLT5zcy5zc19GaXJzdFR1cGxlRW1pdHRlZCA9IGZhbHNlOwog CiAJLyogbm9ybWFsbHkgd2UgZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IGJpdG1hcCB0aWxsIHJ1bnRp bWUgKi8KIAlpbmRleHN0YXRlLT5iaXNzX3Jlc3VsdCA9IE5VTEw7CkBAIC0zMDgsMTAgKzMxMCwy MCBAQCBFeGVjSW5pdEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCS8qCiAJICogSW5pdGlhbGl6ZSBzY2FuIGRlc2NyaXB0 b3IuCiAJICovCi0JaW5kZXhzdGF0ZS0+Ymlzc19TY2FuRGVzYyA9Ci0JCWluZGV4X2JlZ2luc2Nh bl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlzc19SZWxhdGlvbkRlc2MsCi0JCQkJCQkJICAgZXN0YXRl LT5lc19zbmFwc2hvdCwKLQkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK KwlpZiAobm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZSA+IDApCisJeworCQlpbmRleHN0YXRlLT5i aXNzX1NjYW5EZXNjID0KKwkJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXBfc2tpcChpbmRleHN0YXRl LT5iaXNzX1JlbGF0aW9uRGVzYywKKwkJCQllc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCWluZGV4 c3RhdGUtPmJpc3NfTnVtU2NhbktleXMsCisJCQkJTWluKEluZGV4UmVsYXRpb25HZXROdW1iZXJP ZktleUF0dHJpYnV0ZXMoaW5kZXhzdGF0ZS0+Ymlzc19SZWxhdGlvbkRlc2MpLAorCQkJCQlub2Rl LT5pbmRleHNraXBwcmVmaXhzaXplKSk7CisJfQorCWVsc2UKKwkJaW5kZXhzdGF0ZS0+Ymlzc19T Y2FuRGVzYyA9CisJCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwKGluZGV4c3RhdGUtPmJpc3NfUmVs YXRpb25EZXNjLAorCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkgICBp bmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUg a2V5cyB0byBjYWxjdWxhdGUsIGdvIGFoZWFkIGFuZCBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IDA3NTRlMjhhOWEu LjdiMTNlYzhhODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpA QCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2l0ZW1wdHIuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogCkBAIC00OSw2ICs1MCwzNyBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KkluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lkIFN0 b3JlSW5kZXhUdXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSW5kZXhUdXBsZSBpdHVwLAogCQkJ CQkJCVR1cGxlRGVzYyBpdHVwZGVzYyk7CiAKK3N0YXRpYyBib29sCitJbmRleE9ubHlTa2lwKElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCUluZGV4T25seVNj YW4gKmluZGV4b25seXNjYW4gPSAoSW5kZXhPbmx5U2NhbiAqKSBub2RlLT5zcy5wcy5wbGFuOwor CisJaWYgKCFub2RlLT5pb3NzX0Rpc3RpbmN0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICog ZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKKwkgKi8K Kwllc3RhdGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsKKwlkaXJlY3Rpb24gPSBlc3RhdGUtPmVzX2Rp cmVjdGlvbjsKKwkvKiBmbGlwIGRpcmVjdGlvbiBpZiB0aGlzIGlzIGFuIG92ZXJhbGwgYmFja3dh cmQgc2NhbiAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChpbmRleG9ubHlzY2FuLT5p bmRleG9yZGVyZGlyKSkKKwl7CisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlv bikpCisJCQlkaXJlY3Rpb24gPSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247CisJCWVsc2UgaWYgKFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24gPSBGb3J3YXJk U2NhbkRpcmVjdGlvbjsKKwl9CisJc2NhbmRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOworCisJ aWYgKCFpbmRleF9za2lwKHNjYW5kZXNjLCBkaXJlY3Rpb24sIGluZGV4b25seXNjYW4tPmluZGV4 b3JkZXJkaXIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICoJCUluZGV4T25seU5leHQKQEAgLTY1LDYgKzk3LDggQEAgSW5kZXhPbmx5TmV4dChJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKIAlJdGVtUG9pbnRlciB0aWQ7CisJSXRlbVBvaW50ZXJEYXRhIHN0 YXJ0VGlkOworCUluZGV4T25seVNjYW4gKmluZGV4b25seXNjYW4gPSAoSW5kZXhPbmx5U2NhbiAq KSBub2RlLT5zcy5wcy5wbGFuOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1h dGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtNzIsNyArMTA2LDcgQEAgSW5kZXhPbmx5TmV4 dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7 CiAJZGlyZWN0aW9uID0gZXN0YXRlLT5lc19kaXJlY3Rpb247CiAJLyogZmxpcCBkaXJlY3Rpb24g aWYgdGhpcyBpcyBhbiBvdmVyYWxsIGJhY2t3YXJkIHNjYW4gKi8KLQlpZiAoU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoKChJbmRleE9ubHlTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9y ZGVyZGlyKSkKKwlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoaW5kZXhvbmx5c2Nhbi0+aW5k ZXhvcmRlcmRpcikpCiAJewogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24p KQogCQkJZGlyZWN0aW9uID0gQmFja3dhcmRTY2FuRGlyZWN0aW9uOwpAQCAtOTAsMTEgKzEyNCwx OSBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFs bHkgZXhlY3V0aW5nIGFuIGluZGV4IG9ubHkgc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlCiAJ CSAqIHBhcmFsbGVsLgogCQkgKi8KLQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+ c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVz YywKLQkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkJICAgbm9kZS0+aW9z c19OdW1TY2FuS2V5cywKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJ CWlmIChub2RlLT5pb3NzX1NraXBQcmVmaXhTaXplID4gMCkKKwkJCXNjYW5kZXNjID0gaW5kZXhf YmVnaW5zY2FuX3NraXAobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkJICAg bm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90 LAorCQkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKKwkJCQkJCQkJCSAgIG5vZGUt Pmlvc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCQkgICBNaW4oSW5kZXhSZWxhdGlvbkdldE51 bWJlck9mS2V5QXR0cmlidXRlcyhub2RlLT5pb3NzX1JlbGF0aW9uRGVzYyksIG5vZGUtPmlvc3Nf U2tpcFByZWZpeFNpemUpKTsKKwkJZWxzZQorCQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4o bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxh dGlvbkRlc2MsCisJCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkJICAg bm9kZS0+aW9zc19OdW1TY2FuS2V5cywKKwkJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJC eUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtMTE0LDEx ICsxNTYsMTYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJ CQkgbm9kZS0+aW9zc19PcmRlckJ5S2V5cywKIAkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlL ZXlzKTsKIAl9CisJZWxzZQorCXsKKwkJSXRlbVBvaW50ZXJDb3B5KCZzY2FuZGVzYy0+eHNfaGVh cHRpZCwgJnN0YXJ0VGlkKTsKKwl9CiAKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdo YXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBp bmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAo KHRpZCA9IG5vZGUtPmlvc3NfU2tpcFByZWZpeFNpemUgPiAwID8gaW5kZXhfZ2V0bmV4dF90aWRf c2tpcChzY2FuZGVzYywgZGlyZWN0aW9uLCBub2RlLT5pb3NzX0Rpc3RpbmN0ID8gaW5kZXhvbmx5 c2Nhbi0+aW5kZXhvcmRlcmRpciA6IGRpcmVjdGlvbikgOgorCQkJaW5kZXhfZ2V0bmV4dF90aWQo c2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwpCiAJewogCQlib29sCQl0dXBsZV9mcm9tX2hl YXAgPSBmYWxzZTsKIApAQCAtMzE0LDkgKzM2MSwxMCBAQCBFeGVjSW5kZXhPbmx5U2NhbihQbGFu U3RhdGUgKnBzdGF0ZSkKIAlpZiAobm9kZS0+aW9zc19OdW1SdW50aW1lS2V5cyAhPSAwICYmICFu b2RlLT5pb3NzX1J1bnRpbWVLZXlzUmVhZHkpCiAJCUV4ZWNSZVNjYW4oKFBsYW5TdGF0ZSAqKSBu b2RlKTsKIAotCXJldHVybiBFeGVjU2Nhbigmbm9kZS0+c3MsCisJcmV0dXJuIEV4ZWNTY2FuRXh0 ZW5kZWQoJm5vZGUtPnNzLAogCQkJCQkoRXhlY1NjYW5BY2Nlc3NNdGQpIEluZGV4T25seU5leHQs Ci0JCQkJCShFeGVjU2NhblJlY2hlY2tNdGQpIEluZGV4T25seVJlY2hlY2spOworCQkJCQkoRXhl Y1NjYW5SZWNoZWNrTXRkKSBJbmRleE9ubHlSZWNoZWNrLAorCQkJCQlub2RlLT5pb3NzX0Rpc3Rp bmN0ID8gKEV4ZWNTY2FuU2tpcE10ZCkgSW5kZXhPbmx5U2tpcCA6IE5VTEwpOwogfQogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkBAIC01MDQsNiArNTUyLDkgQEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4T25s eVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPnNz LnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOwogCWluZGV4c3RhdGUtPnNzLnBzLnN0YXRlID0gZXN0 YXRlOwogCWluZGV4c3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNJbmRleE9ubHlTY2Fu OworCWluZGV4c3RhdGUtPnNzLnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJaW5kZXhz dGF0ZS0+aW9zc19Ta2lwUHJlZml4U2l6ZSA9IG5vZGUtPmluZGV4c2tpcHByZWZpeHNpemU7CisJ aW5kZXhzdGF0ZS0+aW9zc19EaXN0aW5jdCA9IG5vZGUtPmluZGV4ZGlzdGluY3Q7CiAKIAkvKgog CSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eHNjYW4uYwppbmRleCAyZmZmYjFiNDM3Li5jNmI2ZTdhNmZiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4c2Nhbi5jCkBAIC02OSw2ICs2OSwzNyBAQCBzdGF0aWMgdm9pZCByZW9yZGVycXVl dWVfcHVzaChJbmRleFNjYW5TdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJ CQkJICBEYXR1bSAqb3JkZXJieXZhbHMsIGJvb2wgKm9yZGVyYnludWxscyk7CiBzdGF0aWMgSGVh cFR1cGxlIHJlb3JkZXJxdWV1ZV9wb3AoSW5kZXhTY2FuU3RhdGUgKm5vZGUpOwogCitzdGF0aWMg Ym9vbAorSW5kZXhTa2lwKEluZGV4U2NhblN0YXRlICpub2RlKQoreworCUVTdGF0ZQkgICAqZXN0 YXRlOworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7 CisJSW5kZXhTY2FuICppbmRleHNjYW4gPSAoSW5kZXhTY2FuICopIG5vZGUtPnNzLnBzLnBsYW47 CisKKwlpZiAoIW5vZGUtPmlzc19EaXN0aW5jdCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAq IGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCisJICov CisJZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CisJZGlyZWN0aW9uID0gZXN0YXRlLT5lc19k aXJlY3Rpb247CisJLyogZmxpcCBkaXJlY3Rpb24gaWYgdGhpcyBpcyBhbiBvdmVyYWxsIGJhY2t3 YXJkIHNjYW4gKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoaW5kZXhzY2FuLT5pbmRl eG9yZGVyZGlyKSkKKwl7CisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikp CisJCQlkaXJlY3Rpb24gPSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247CisJCWVsc2UgaWYgKFNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24gPSBGb3J3YXJkU2Nh bkRpcmVjdGlvbjsKKwl9CisJc2NhbmRlc2MgPSBub2RlLT5pc3NfU2NhbkRlc2M7CisKKwlpZiAo IWluZGV4X3NraXAoc2NhbmRlc2MsIGRpcmVjdGlvbiwgaW5kZXhzY2FuLT5pbmRleG9yZGVyZGly KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq CQlJbmRleE5leHQKQEAgLTg1LDYgKzExNiw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNj OwogCVR1cGxlVGFibGVTbG90ICpzbG90OworCUluZGV4U2NhbiAqaW5kZXhzY2FuID0gKEluZGV4 U2NhbiAqKSBub2RlLT5zcy5wcy5wbGFuOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBp bmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTIsNyArMTI0LDcgQEAgSW5kZXhO ZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCWVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwog CWRpcmVjdGlvbiA9IGVzdGF0ZS0+ZXNfZGlyZWN0aW9uOwogCS8qIGZsaXAgZGlyZWN0aW9uIGlm IHRoaXMgaXMgYW4gb3ZlcmFsbCBiYWNrd2FyZCBzY2FuICovCi0JaWYgKFNjYW5EaXJlY3Rpb25J c0JhY2t3YXJkKCgoSW5kZXhTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGly KSkKKwlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoaW5kZXhzY2FuLT5pbmRleG9yZGVyZGly KSkKIAl7CiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCiAJCQlkaXJl Y3Rpb24gPSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247CkBAIC0xMDksMTQgKzE0MSwyNSBAQCBJbmRl eE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGlu ZGV4IHNjYW4gaXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZQogCQkgKiBzZXJpYWxseSBleGVj dXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkg Ki8KLQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgICBlc3Rh dGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCi0JCQkJ CQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CisJCWlmIChub2RlLT5pc3NfU2tpcFBy ZWZpeFNpemUgPiAwKQorCQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW5fc2tpcChub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCisJCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNj LAorCQkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKKwkJCQkJCQkJCSAgIG5vZGUtPmlz c19OdW1TY2FuS2V5cywKKwkJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJ CQkJCQkJCSAgIE1pbihJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKG5vZGUt Pmlzc19SZWxhdGlvbkRlc2MpLCBub2RlLT5pc3NfU2tpcFByZWZpeFNpemUpKTsKKwkJZWxzZQor CQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAorCQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCSAgIGVzdGF0 ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCisJCQkJ CQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMpOwogCiAJCW5vZGUtPmlzc19TY2FuRGVz YyA9IHNjYW5kZXNjOwogCisJCS8qIEluZGV4IHNraXAgc2NhbiBhc3N1bWVzIHhzX3dhbnRfaXR1 cCwgc28gc2V0IGl0IHRvIHRydWUgaWYgd2Ugc2tpcCBvdmVyIGRpc3RpbmN0ICovCisJCW5vZGUt Pmlzc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gaW5kZXhzY2FuLT5pbmRleGRpc3RpbmN0Owor CiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJl IHJlYWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFzcyB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4 IEFNLgpAQCAtMTMwLDcgKzE3Myw5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5l eHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGly ZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAobm9kZS0+aXNzX1NraXBQcmVmaXhTaXplID4gMCA/CisJ CSAgIGluZGV4X2dldG5leHRfc2xvdF9za2lwKHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlz c19EaXN0aW5jdCA/IGluZGV4c2Nhbi0+aW5kZXhvcmRlcmRpciA6IGRpcmVjdGlvbiwgc2xvdCkg OgorCQkgICBpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJ ewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC01MzAsMTMgKzU3NSwxNSBAQCBFeGVj SW5kZXhTY2FuKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQlFeGVjUmVTY2FuKChQbGFuU3RhdGUgKikg bm9kZSk7CiAKIAlpZiAobm9kZS0+aXNzX051bU9yZGVyQnlLZXlzID4gMCkKLQkJcmV0dXJuIEV4 ZWNTY2FuKCZub2RlLT5zcywKKwkJcmV0dXJuIEV4ZWNTY2FuRXh0ZW5kZWQoJm5vZGUtPnNzLAog CQkJCQkJKEV4ZWNTY2FuQWNjZXNzTXRkKSBJbmRleE5leHRXaXRoUmVvcmRlciwKLQkJCQkJCShF eGVjU2NhblJlY2hlY2tNdGQpIEluZGV4UmVjaGVjayk7CisJCQkJCQkoRXhlY1NjYW5SZWNoZWNr TXRkKSBJbmRleFJlY2hlY2ssCisJCQkJCQlub2RlLT5pc3NfRGlzdGluY3QgPyAoRXhlY1NjYW5T a2lwTXRkKSBJbmRleFNraXAgOiBOVUxMKTsKIAllbHNlCi0JCXJldHVybiBFeGVjU2Nhbigmbm9k ZS0+c3MsCisJCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkKCZub2RlLT5zcywKIAkJCQkJCShFeGVj U2NhbkFjY2Vzc010ZCkgSW5kZXhOZXh0LAotCQkJCQkJKEV4ZWNTY2FuUmVjaGVja010ZCkgSW5k ZXhSZWNoZWNrKTsKKwkJCQkJCShFeGVjU2NhblJlY2hlY2tNdGQpIEluZGV4UmVjaGVjaywKKwkJ CQkJCW5vZGUtPmlzc19EaXN0aW5jdCA/IChFeGVjU2NhblNraXBNdGQpIEluZGV4U2tpcCA6IE5V TEwpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MTAsNiArOTU3LDkgQEAgRXhlY0luaXRJbmRleFNj YW4oSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0 YXRlLT5zcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsKIAlpbmRleHN0YXRlLT5zcy5wcy5zdGF0 ZSA9IGVzdGF0ZTsKIAlpbmRleHN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjSW5kZXhT Y2FuOworCWluZGV4c3RhdGUtPnNzLnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJaW5k ZXhzdGF0ZS0+aXNzX1NraXBQcmVmaXhTaXplID0gbm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZTsK KwlpbmRleHN0YXRlLT5pc3NfRGlzdGluY3QgPSBub2RlLT5pbmRleGRpc3RpbmN0OwogCiAJLyoK IAkgKiBNaXNjZWxsYW5lb3VzIGluaXRpYWxpemF0aW9uCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4 IDY1MmJhN2Y4ZWUuLjI2OGU3OTllODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2Nv cHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC00OTcsNiAr NDk3LDggQEAgX2NvcHlJbmRleFNjYW4oY29uc3QgSW5kZXhTY2FuICpmcm9tKQogCUNPUFlfTk9E RV9GSUVMRChpbmRleG9yZGVyYnlvcmlnKTsKIAlDT1BZX05PREVfRklFTEQoaW5kZXhvcmRlcmJ5 b3BzKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChpbmRleG9yZGVyZGlyKTsKKwlDT1BZX1NDQUxBUl9G SUVMRChpbmRleHNraXBwcmVmaXhzaXplKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleGRpc3Rp bmN0KTsKIAogCXJldHVybiBuZXdub2RlOwogfQpAQCAtNTIyLDYgKzUyNCw4IEBAIF9jb3B5SW5k ZXhPbmx5U2Nhbihjb25zdCBJbmRleE9ubHlTY2FuICpmcm9tKQogCUNPUFlfTk9ERV9GSUVMRChp bmRleG9yZGVyYnkpOwogCUNPUFlfTk9ERV9GSUVMRChpbmRleHRsaXN0KTsKIAlDT1BZX1NDQUxB Ul9GSUVMRChpbmRleG9yZGVyZGlyKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleHNraXBwcmVm aXhzaXplKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleGRpc3RpbmN0KTsKIAogCXJldHVybiBu ZXdub2RlOwogfQpAQCAtNTQ2LDYgKzU1MCw3IEBAIF9jb3B5Qml0bWFwSW5kZXhTY2FuKGNvbnN0 IEJpdG1hcEluZGV4U2NhbiAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChpc3NoYXJlZCk7CiAJ Q09QWV9OT0RFX0ZJRUxEKGluZGV4cXVhbCk7CiAJQ09QWV9OT0RFX0ZJRUxEKGluZGV4cXVhbG9y aWcpOworCUNPUFlfU0NBTEFSX0ZJRUxEKGluZGV4c2tpcHByZWZpeHNpemUpOwogCiAJcmV0dXJu IG5ld25vZGU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIv c3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA1YTI1YTUwZWRjLi5iZTZiMzU5YWEz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNr ZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTU2OSw2ICs1NjksOCBAQCBfb3V0SW5kZXhTY2FuKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBJbmRleFNjYW4gKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChp bmRleG9yZGVyYnlvcmlnKTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4b3JkZXJieW9wcyk7CiAJ V1JJVEVfRU5VTV9GSUVMRChpbmRleG9yZGVyZGlyLCBTY2FuRGlyZWN0aW9uKTsKKwlXUklURV9J TlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CisJV1JJVEVfSU5UX0ZJRUxEKGluZGV4ZGlz dGluY3QpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTgzLDYgKzU4NSw5IEBAIF9vdXRJbmRleE9u bHlTY2FuKFN0cmluZ0luZm8gc3RyLCBjb25zdCBJbmRleE9ubHlTY2FuICpub2RlKQogCVdSSVRF X05PREVfRklFTEQoaW5kZXhvcmRlcmJ5KTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4dGxpc3Qp OwogCVdSSVRFX0VOVU1fRklFTEQoaW5kZXhvcmRlcmRpciwgU2NhbkRpcmVjdGlvbik7CisJV1JJ VEVfSU5UX0ZJRUxEKGluZGV4c2tpcHByZWZpeHNpemUpOworCVdSSVRFX0lOVF9GSUVMRChpbmRl eGRpc3RpbmN0KTsKKwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTk2LDYgKzYwMSw3IEBAIF9vdXRC aXRtYXBJbmRleFNjYW4oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJpdG1hcEluZGV4U2NhbiAqbm9k ZSkKIAlXUklURV9CT09MX0ZJRUxEKGlzc2hhcmVkKTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4 cXVhbCk7CiAJV1JJVEVfTk9ERV9GSUVMRChpbmRleHF1YWxvcmlnKTsKKwlXUklURV9JTlRfRklF TEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5j cy5jCmluZGV4IDU0ZDk3YWMzZDAuLmI5NWYyMTc0NzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBA IC0xODc4LDYgKzE4NzgsOCBAQCBfcmVhZEluZGV4U2Nhbih2b2lkKQogCVJFQURfTk9ERV9GSUVM RChpbmRleG9yZGVyYnlvcmlnKTsKIAlSRUFEX05PREVfRklFTEQoaW5kZXhvcmRlcmJ5b3BzKTsK IAlSRUFEX0VOVU1fRklFTEQoaW5kZXhvcmRlcmRpciwgU2NhbkRpcmVjdGlvbik7CisJUkVBRF9J TlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhkaXN0 aW5jdCk7CiAKIAlSRUFEX0RPTkUoKTsKIH0KQEAgLTE4OTcsNiArMTg5OSw4IEBAIF9yZWFkSW5k ZXhPbmx5U2Nhbih2b2lkKQogCVJFQURfTk9ERV9GSUVMRChpbmRleG9yZGVyYnkpOwogCVJFQURf Tk9ERV9GSUVMRChpbmRleHRsaXN0KTsKIAlSRUFEX0VOVU1fRklFTEQoaW5kZXhvcmRlcmRpciwg U2NhbkRpcmVjdGlvbik7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CisJ UkVBRF9JTlRfRklFTEQoaW5kZXhkaXN0aW5jdCk7CiAKIAlSRUFEX0RPTkUoKTsKIH0KQEAgLTE5 MTUsNiArMTkxOSw3IEBAIF9yZWFkQml0bWFwSW5kZXhTY2FuKHZvaWQpCiAJUkVBRF9CT09MX0ZJ RUxEKGlzc2hhcmVkKTsKIAlSRUFEX05PREVfRklFTEQoaW5kZXhxdWFsKTsKIAlSRUFEX05PREVf RklFTEQoaW5kZXhxdWFsb3JpZyk7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6 ZSk7CiAKIAlSRUFEX0RPTkUoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j CmluZGV4IDRkZmM1ZDI5YmMuLjljYWM0N2E5Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYwpAQCAtMTc1NSw3ICsxNzU1LDkgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlMaXN0CSAgICpwYXRo a2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhz ID0gTklMOwogCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkgICAqdW5p cV90b3RhbF9zdWJwYXRocyA9IE5JTDsKIAkJYm9vbAkJc3RhcnR1cF9uZXFfdG90YWwgPSBmYWxz ZTsKKwkJYm9vbAkJdW5pcV9uZXFfdG90YWwgPSBmYWxzZTsKIAkJTGlzdENlbGwgICAqbGNyOwog CQlib29sCQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CiAJCWJvb2wJCW1hdGNoX3BhcnRpdGlvbl9v cmRlcl9kZXNjOwpAQCAtMTc4NCw3ICsxNzg2LDggQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQl7CiAJCQlSZWxPcHRJ bmZvICpjaGlsZHJlbCA9IChSZWxPcHRJbmZvICopIGxmaXJzdChsY3IpOwogCQkJUGF0aAkgICAq Y2hlYXBlc3Rfc3RhcnR1cCwKLQkJCQkJICAgKmNoZWFwZXN0X3RvdGFsOworCQkJCQkgICAqY2hl YXBlc3RfdG90YWwsCisJCQkJCQkqY2hlYXBlc3RfdW5pcV90b3RhbCA9IE5VTEw7CiAKIAkJCS8q IExvY2F0ZSB0aGUgcmlnaHQgcGF0aHMsIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4gKi8KIAkJCWNo ZWFwZXN0X3N0YXJ0dXAgPQpAQCAtMTgwMCw2ICsxODAzLDE5IEBAIGdlbmVyYXRlX29yZGVyZWRh cHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJ CQkJICAgVE9UQUxfQ09TVCwKIAkJCQkJCQkJCQkJICAgZmFsc2UpOwogCisJCQljaGVhcGVzdF91 bmlxX3RvdGFsID0KKwkJCQlnZXRfY2hlYXBlc3RfcGF0aF9mb3JfcGF0aGtleXMoY2hpbGRyZWwt PnVuaXF1ZV9wYXRobGlzdCwKKwkJCQkJCQkJCQkJICAgcGF0aGtleXMsCisJCQkJCQkJCQkJCSAg IE5VTEwsCisJCQkJCQkJCQkJCSAgIFRPVEFMX0NPU1QsCisJCQkJCQkJCQkJCSAgIGZhbHNlKTsK KworCQkJaWYgKGNoZWFwZXN0X3VuaXFfdG90YWwgIT0gTlVMTCAmJiAhdW5pcV9uZXFfdG90YWwp CisJCQl7CisJCQkJdW5pcV9uZXFfdG90YWwgPSB0cnVlOworCQkJCXVuaXFfdG90YWxfc3VicGF0 aHMgPSBsaXN0X2NvcHkodG90YWxfc3VicGF0aHMpOworCQkJfQorCiAJCQkvKgogCQkJICogSWYg d2UgY2FuJ3QgZmluZCBhbnkgcGF0aHMgd2l0aCB0aGUgcmlnaHQgb3JkZXIganVzdCB1c2UgdGhl CiAJCQkgKiBjaGVhcGVzdC10b3RhbCBwYXRoOyB3ZSdsbCBoYXZlIHRvIHNvcnQgaXQgbGF0ZXIu CkBAIC0xODEyLDYgKzE4MjgsOSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFs LT5wYXJhbV9pbmZvID09IE5VTEwpOwogCQkJfQogCisJCQlpZiAoY2hlYXBlc3RfdW5pcV90b3Rh bCA9PSBOVUxMKQorCQkJCWNoZWFwZXN0X3VuaXFfdG90YWwgPSBjaGVhcGVzdF90b3RhbDsKKwog CQkJLyoKIAkJCSAqIE5vdGljZSB3aGV0aGVyIHdlIGFjdHVhbGx5IGhhdmUgZGlmZmVyZW50IHBh dGhzIGZvciB0aGUKIAkJCSAqICJjaGVhcGVzdCIgYW5kICJ0b3RhbCIgY2FzZXM7IGZyZXF1ZW50 bHkgdGhlcmUgd2lsbCBiZSBubyBwb2ludApAQCAtMTgzOCw2ICsxODU3LDEyIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAogCQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFw ZXN0X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRo cywgY2hlYXBlc3RfdG90YWwpOworCisJCQkJaWYgKHVuaXFfbmVxX3RvdGFsKQorCQkJCXsKKwkJ CQkJY2hlYXBlc3RfdW5pcV90b3RhbCA9IGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hl YXBlc3RfdW5pcV90b3RhbCk7CisJCQkJCXVuaXFfdG90YWxfc3VicGF0aHMgPSBsYXBwZW5kKHVu aXFfdG90YWxfc3VicGF0aHMsIGNoZWFwZXN0X3VuaXFfdG90YWwpOworCQkJCX0KIAkJCX0KIAkJ CWVsc2UgaWYgKG1hdGNoX3BhcnRpdGlvbl9vcmRlcl9kZXNjKQogCQkJewpAQCAtMTg1MSw2ICsx ODc2LDEyIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKIAogCQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsY29ucyhjaGVhcGVz dF9zdGFydHVwLCBzdGFydHVwX3N1YnBhdGhzKTsKIAkJCQl0b3RhbF9zdWJwYXRocyA9IGxjb25z KGNoZWFwZXN0X3RvdGFsLCB0b3RhbF9zdWJwYXRocyk7CisKKwkJCQlpZiAodW5pcV9uZXFfdG90 YWwpCisJCQkJeworCQkJCQljaGVhcGVzdF91bmlxX3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBl bmRfc3VicGF0aChjaGVhcGVzdF91bmlxX3RvdGFsKTsKKwkJCQkJdW5pcV90b3RhbF9zdWJwYXRo cyA9IGxjb25zKGNoZWFwZXN0X3VuaXFfdG90YWwsIHVuaXFfdG90YWxfc3VicGF0aHMpOworCQkJ CX0KIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE4NjIsNiArMTg5MywxMSBAQCBnZW5lcmF0ZV9v cmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CiAJCQkJYWNjdW11bGF0ZV9hcHBl bmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwKIAkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywg TlVMTCk7CisJCQkJaWYgKHVuaXFfbmVxX3RvdGFsKQorCQkJCXsKKwkJCQkJYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChjaGVhcGVzdF91bmlxX3RvdGFsLAorCQkJCQkJCQkJCQkgICZ1bmlxX3Rv dGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTg4OCw2ICsxOTI0 LDE2IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCQkJICAwLAogCQkJCQkJCQkJCQkJCQkgIGZhbHNl LAogCQkJCQkJCQkJCQkJCQkgIC0xKSk7CisJCQlpZiAodW5pcV9uZXFfdG90YWwpCisJCQkJYWRk X3VuaXF1ZV9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCisJCQkJ CQkJCQkJCQkJCSAgcmVsLAorCQkJCQkJCQkJCQkJCQkgIHVuaXFfdG90YWxfc3VicGF0aHMsCisJ CQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAorCQkJCQkJCQkJ CQkJCQkgIE5VTEwsCisJCQkJCQkJCQkJCQkJCSAgMCwKKwkJCQkJCQkJCQkJCQkJICBmYWxzZSwK KwkJCQkJCQkJCQkJCQkJICAtMSkpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTkwMyw2ICsxOTQ5 LDEyIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCQkJCQl0b3RhbF9zdWJwYXRocywKIAkJCQkJCQkJ CQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJCQlOVUxMKSk7CisJCQlpZiAodW5pcV9u ZXFfdG90YWwpCisJCQkJYWRkX3VuaXF1ZV9wYXRoKHJlbCwgKFBhdGggKikgIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCQkJ CQkJCQkJdW5pcV90b3RhbF9zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAor CQkJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMKaW5kZXggMWU0ZDQwNGYwMi4uZmY3NWMwMjAwMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xMzMsNiArMTMzLDcgQEAgaW50CQkJbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRy dWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9u bHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNraXBzY2FuID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jCmluZGV4IDBlNGUwMGVhZjAuLmJhMmRkMzBhMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYwpAQCAtNzg0LDYgKzc4NCwxNiBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0g KEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwogCisJCS8qCisJCSAqIFRvIHByZXZlbnQgdW5pcXVl IHBhdGhzIGZyb20gaW5kZXggc2tpcCBzY2FucyBiZWluZyBwb3RlbnRpYWxseSB1c2VkCisJCSAq IHdoZW4gbm90IG5lZWRlZCBzY2FuIGtlZXAgdGhlbSBpbiBhIHNlcGFyYXRlIHBhdGhsaXN0Lgor CQkqLworCQlpZiAoaXBhdGgtPmluZGV4ZGlzdGluY3QpCisJCXsKKwkJCWFkZF91bmlxdWVfcGF0 aChyZWwsIChQYXRoICopIGlwYXRoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGluZGV4 LT5hbWhhc2dldHR1cGxlKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAKQEAg LTg3Miw2ICs4ODIsNyBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCWJvb2wJCXBhdGhrZXlzX3Bvc3NpYmx5X3VzZWZ1bDsKIAlib29sCQlp bmRleF9pc19vcmRlcmVkOwogCWJvb2wJCWluZGV4X29ubHlfc2NhbjsKKwlib29sCQljYW5fc2tp cDsKIAlpbnQJCQlpbmRleGNvbDsKIAogCS8qCkBAIC0xMDIxLDYgKzEwMzIsOSBAQCBidWlsZF9p bmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWluZGV4X29u bHlfc2NhbiA9IChzY2FudHlwZSAhPSBTVF9CSVRNQVBTQ0FOICYmCiAJCQkJCSAgIGNoZWNrX2lu ZGV4X29ubHkocmVsLCBpbmRleCkpOwogCisJLyogQ2hlY2sgaWYgYW4gaW5kZXggc2tpcCBzY2Fu IGlzIHBvc3NpYmxlLiAqLworCWNhbl9za2lwID0gZW5hYmxlX2luZGV4c2tpcHNjYW4gJiBpbmRl eC0+YW1jYW5za2lwOworCiAJLyoKIAkgKiA0LiBHZW5lcmF0ZSBhbiBpbmRleHNjYW4gcGF0aCBp ZiB0aGVyZSBhcmUgcmVsZXZhbnQgcmVzdHJpY3Rpb24gY2xhdXNlcwogCSAqIGluIHRoZSBjdXJy ZW50IGNsYXVzZXMsIE9SIHRoZSBpbmRleCBvcmRlcmluZyBpcyBwb3RlbnRpYWxseSB1c2VmdWwg Zm9yCkBAIC0xMDQ0LDYgKzEwNTgsMzMgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBmYWxzZSk7CiAJCXJlc3VsdCA9IGxh cHBlbmQocmVzdWx0LCBpcGF0aCk7CiAKKwkJLyogQ29uc2lkZXIgaW5kZXggc2tpcCBzY2FuIGFz IHdlbGwgKi8KKwkJaWYgKHJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgIT0gTlVMTCAmJiBjYW5fc2tp cCkKKwkJeworCQkJaW50IG51bXVzZWZ1bGtleXMgPSBsaXN0X2xlbmd0aCh1c2VmdWxfcGF0aGtl eXMpOworCQkJaW50IG51bXNvcnRrZXlzID0gbGlzdF9sZW5ndGgocm9vdC0+cXVlcnlfcGF0aGtl eXMpOworCisJCQlpZiAobnVtdXNlZnVsa2V5cyA9PSBudW1zb3J0a2V5cykKKwkJCXsKKwkJCQlp bnQgcHJlZml4OworCQkJCWlmIChsaXN0X2xlbmd0aChyb290LT5kaXN0aW5jdF9wYXRoa2V5cykg PiAwKQorCQkJCQlwcmVmaXggPSBmaW5kX2luZGV4X3ByZWZpeF9mb3JfcGF0aGtleShyb290LAor CQkJCQkJCQkJCQkJCQkgICBpbmRleCwKKwkJCQkJCQkJCQkJCQkJICAgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sCisJCQkJCQkJCQkJCQkJCSAgIGxsYXN0X25vZGUoUGF0aEtleSwKKwkJCQkJCQkJCQkJ CQkJICAgcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMpKTsKKwkJCQllbHNlCisJCQkJCS8qIGFsbCBh cmUgZGlzdGluY3Qga2V5cyBhcmUgY29uc3RhbnQgYW5kIG9wdGltaXplZCBhd2F5LgorCQkJCQkg KiBza2lwcGluZyB3aXRoIDEgaXMgc3VmZmljaWVudCBhcyBhbGwgYXJlIGNvbnN0YW50IGFueXdh eQorCQkJCQkgKi8KKwkJCQkJcHJlZml4ID0gMTsKKworCQkJCXJlc3VsdCA9IGxhcHBlbmQocmVz dWx0LAorCQkJCQkJCQkgY3JlYXRlX3NraXBzY2FuX3VuaXF1ZV9wYXRoKHJvb3QsIGluZGV4LAor CQkJCQkJCQkJCQkJCQkJIChQYXRoICopIGlwYXRoLCBwcmVmaXgpKTsKKwkJCX0KKwkJfQorCiAJ CS8qCiAJCSAqIElmIGFwcHJvcHJpYXRlLCBjb25zaWRlciBwYXJhbGxlbCBpbmRleCBzY2FuLiAg V2UgZG9uJ3QgYWxsb3cKIAkJICogcGFyYWxsZWwgaW5kZXggc2NhbiBmb3IgYml0bWFwIGluZGV4 IHNjYW5zLgpAQCAtMTA5OSw2ICsxMTQwLDMzIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgIGZhbHNlKTsKIAkJCXJlc3Vs dCA9IGxhcHBlbmQocmVzdWx0LCBpcGF0aCk7CiAKKwkJCS8qIENvbnNpZGVyIGluZGV4IHNraXAg c2NhbiBhcyB3ZWxsICovCisJCQlpZiAocm9vdC0+cXVlcnlfdW5pcXVla2V5cyAhPSBOVUxMICYm IGNhbl9za2lwKQorCQkJeworCQkJCWludCBudW11c2VmdWxrZXlzID0gbGlzdF9sZW5ndGgodXNl ZnVsX3BhdGhrZXlzKTsKKwkJCQlpbnQgbnVtc29ydGtleXMgPSBsaXN0X2xlbmd0aChyb290LT5x dWVyeV9wYXRoa2V5cyk7CisKKwkJCQlpZiAobnVtdXNlZnVsa2V5cyA9PSBudW1zb3J0a2V5cykK KwkJCQl7CisJCQkJCWludCBwcmVmaXg7CisJCQkJCWlmIChsaXN0X2xlbmd0aChyb290LT5kaXN0 aW5jdF9wYXRoa2V5cykgPiAwKQorCQkJCQkJcHJlZml4ID0gZmluZF9pbmRleF9wcmVmaXhfZm9y X3BhdGhrZXkocm9vdCwKKwkJCQkJCQkJCQkJCQkJCSAgIGluZGV4LAorCQkJCQkJCQkJCQkJCQkJ ICAgQmFja3dhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkJICAgbGxhc3Rfbm9kZShQ YXRoS2V5LAorCQkJCQkJCQkJCQkJCQkJICAgcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMpKTsKKwkJ CQkJZWxzZQorCQkJCQkJLyogYWxsIGFyZSBkaXN0aW5jdCBrZXlzIGFyZSBjb25zdGFudCBhbmQg b3B0aW1pemVkIGF3YXkuCisJCQkJCQkgKiBza2lwcGluZyB3aXRoIDEgaXMgc3VmZmljaWVudCBh cyBhbGwgYXJlIGNvbnN0YW50IGFueXdheQorCQkJCQkJICovCisJCQkJCQlwcmVmaXggPSAxOwor CisJCQkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LAorCQkJCQkJCQkJIGNyZWF0ZV9za2lwc2Nh bl91bmlxdWVfcGF0aChyb290LCBpbmRleCwKKwkJCQkJCQkJCQkJCQkJCQkgKFBhdGggKikgaXBh dGgsIHByZWZpeCkpOworCQkJCX0KKwkJCX0KKwogCQkJLyogSWYgYXBwcm9wcmlhdGUsIGNvbnNp ZGVyIHBhcmFsbGVsIGluZGV4IHNjYW4gKi8KIAkJCWlmIChpbmRleC0+YW1jYW5wYXJhbGxlbCAm JgogCQkJCXJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgb3V0ZXJfcmVsaWRzID09IE5VTEwgJiYK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCmluZGV4IGFkNGZlMTk4NzIuLjUxOWJi YmI3ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYwpAQCAtNTIyLDYgKzUy Miw3OCBAQCBnZXRfY2hlYXBlc3RfcGFyYWxsZWxfc2FmZV90b3RhbF9pbm5lcihMaXN0ICpwYXRo cykKICAqCQlORVcgUEFUSEtFWSBGT1JNQVRJT04KICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisv KgorICogRmluZCB0aGUgcHJlZml4IHNpemUgZm9yIGEgc3BlY2lmaWMgcGF0aCBrZXkgaW4gYW4g aW5kZXguCisgKiBGb3IgZXhhbXBsZSwgYW4gaW5kZXggd2l0aCAoYSxiLGMpIGZpbmRpbmcgcGF0 aCBrZXkgYiB3aWxsCisgKiByZXR1cm4gcHJlZml4IDIuCisgKiBSZXR1cm5zIDAgd2hlbiBub3Qg Zm91bmQuCisgKi8KK2ludAorZmluZF9pbmRleF9wcmVmaXhfZm9yX3BhdGhrZXkoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCSBJbmRleE9wdEluZm8gKmluZGV4LAorCQkJCQkgU2NhbkRpcmVjdGlv biBzY2FuZGlyLAorCQkJCQkgUGF0aEtleSAqcGF0aGtleSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KwlpbnQJCQlpOworCisJaSA9IDA7CisJZm9yZWFjaChsYywgaW5kZXgtPmluZGV4dGxpc3QpCisJ eworCQlUYXJnZXRFbnRyeSAqaW5kZXh0bGUgPSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKTsK KwkJRXhwcgkgICAqaW5kZXhrZXk7CisJCWJvb2wJCXJldmVyc2Vfc29ydDsKKwkJYm9vbAkJbnVs bHNfZmlyc3Q7CisJCVBhdGhLZXkgICAgKmNwYXRoa2V5OworCisJCS8qCisJCSAqIElOQ0xVREUg Y29sdW1ucyBhcmUgc3RvcmVkIGluIGluZGV4IHVub3JkZXJlZCwgc28gdGhleSBkb24ndAorCQkg KiBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2Nhbi4KKwkJICovCisJCWlmIChpID49IGluZGV4LT5u a2V5Y29sdW1ucykKKwkJCWJyZWFrOworCisJCS8qIFdlIGFzc3VtZSB3ZSBkb24ndCBuZWVkIHRv IG1ha2UgYSBjb3B5IG9mIHRoZSB0bGlzdCBpdGVtICovCisJCWluZGV4a2V5ID0gaW5kZXh0bGUt PmV4cHI7CisKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKHNjYW5kaXIpKQorCQl7CisJ CQlyZXZlcnNlX3NvcnQgPSAhaW5kZXgtPnJldmVyc2Vfc29ydFtpXTsKKwkJCW51bGxzX2ZpcnN0 ID0gIWluZGV4LT5udWxsc19maXJzdFtpXTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldmVyc2Vf c29ydCA9IGluZGV4LT5yZXZlcnNlX3NvcnRbaV07CisJCQludWxsc19maXJzdCA9IGluZGV4LT5u dWxsc19maXJzdFtpXTsKKwkJfQorCisJCS8qCisJCSAqIE9LLCB0cnkgdG8gbWFrZSBhIGNhbm9u aWNhbCBwYXRoa2V5IGZvciB0aGlzIHNvcnQga2V5LiAgTm90ZSB3ZSdyZQorCQkgKiB1bmRlcm5l YXRoIGFueSBvdXRlciBqb2lucywgc28gbnVsbGFibGVfcmVsaWRzIHNob3VsZCBiZSBOVUxMLgor CQkgKi8KKwkJY3BhdGhrZXkgPSBtYWtlX3BhdGhrZXlfZnJvbV9zb3J0aW5mbyhyb290LAorCQkJ CQkJCQkJCQkgIGluZGV4a2V5LAorCQkJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkJCSAgaW5k ZXgtPnNvcnRvcGZhbWlseVtpXSwKKwkJCQkJCQkJCQkJICBpbmRleC0+b3BjaW50eXBlW2ldLAor CQkJCQkJCQkJCQkgIGluZGV4LT5pbmRleGNvbGxhdGlvbnNbaV0sCisJCQkJCQkJCQkJCSAgcmV2 ZXJzZV9zb3J0LAorCQkJCQkJCQkJCQkgIG51bGxzX2ZpcnN0LAorCQkJCQkJCQkJCQkgIDAsCisJ CQkJCQkJCQkJCSAgaW5kZXgtPnJlbC0+cmVsaWRzLAorCQkJCQkJCQkJCQkgIGZhbHNlKTsKKwor CQlpZiAoY3BhdGhrZXkgPT0gcGF0aGtleSkKKwkJeworCQkJcmV0dXJuIGkgKyAxOworCQl9CisK KwkJaSsrOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogYnVpbGRfaW5kZXhfcGF0aGtl eXMKICAqCSAgQnVpbGQgYSBwYXRoa2V5cyBsaXN0IHRoYXQgZGVzY3JpYmVzIHRoZSBvcmRlcmlu ZyBpbmR1Y2VkIGJ5IGFuIGluZGV4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKaW5kZXggM2RjMDE3NmE1MS4uNjczZTEyMjcxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTg1LDE1ICsxODUsMjAgQEAgc3RhdGljIEluZGV4U2NhbiAq bWFrZV9pbmRleHNjYW4oTGlzdCAqcXB0bGlzdCwgTGlzdCAqcXBxdWFsLCBJbmRleCBzY2FucmVs aWQsCiAJCQkJCQkJCSBPaWQgaW5kZXhpZCwgTGlzdCAqaW5kZXhxdWFsLCBMaXN0ICppbmRleHF1 YWxvcmlnLAogCQkJCQkJCQkgTGlzdCAqaW5kZXhvcmRlcmJ5LCBMaXN0ICppbmRleG9yZGVyYnlv cmlnLAogCQkJCQkJCQkgTGlzdCAqaW5kZXhvcmRlcmJ5b3BzLAotCQkJCQkJCQkgU2NhbkRpcmVj dGlvbiBpbmRleHNjYW5kaXIpOworCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIs CisJCQkJCQkJCSBpbnQgc2tpcHByZWZpeCwKKwkJCQkJCQkJIGJvb2wgZGlzdGluY3QpOwogc3Rh dGljIEluZGV4T25seVNjYW4gKm1ha2VfaW5kZXhvbmx5c2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0 ICpxcHF1YWwsCiAJCQkJCQkJCQkJIEluZGV4IHNjYW5yZWxpZCwgT2lkIGluZGV4aWQsCiAJCQkJ CQkJCQkJIExpc3QgKmluZGV4cXVhbCwgTGlzdCAqaW5kZXhvcmRlcmJ5LAogCQkJCQkJCQkJCSBM aXN0ICppbmRleHRsaXN0LAotCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcik7 CisJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCSBpbnQg c2tpcHByZWZpeCwKKwkJCQkJCQkJCQkgYm9vbCBkaXN0aW5jdCk7CiBzdGF0aWMgQml0bWFwSW5k ZXhTY2FuICptYWtlX2JpdG1hcF9pbmRleHNjYW4oSW5kZXggc2NhbnJlbGlkLCBPaWQgaW5kZXhp ZCwKIAkJCQkJCQkJCQkJICBMaXN0ICppbmRleHF1YWwsCi0JCQkJCQkJCQkJCSAgTGlzdCAqaW5k ZXhxdWFsb3JpZyk7CisJCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhxdWFsb3JpZywKKwkJCQkJCQkJ CQkJICBpbnQgc2tpcFByZWZpeFNpemUpOwogc3RhdGljIEJpdG1hcEhlYXBTY2FuICptYWtlX2Jp dG1hcF9oZWFwc2NhbihMaXN0ICpxcHRsaXN0LAogCQkJCQkJCQkJCQlMaXN0ICpxcHF1YWwsCiAJ CQkJCQkJCQkJCVBsYW4gKmxlZnR0cmVlLApAQCAtMzA2Niw3ICszMDcxLDkgQEAgY3JlYXRlX2lu ZGV4c2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJZml4ZWRfaW5kZXhx dWFscywKIAkJCQkJCQkJCQkJCWZpeGVkX2luZGV4b3JkZXJieXMsCiAJCQkJCQkJCQkJCQliZXN0 X3BhdGgtPmluZGV4aW5mby0+aW5kZXh0bGlzdCwKLQkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5k ZXhzY2FuZGlyKTsKKwkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyLAorCQkJCQkJ CQkJCQkJYmVzdF9wYXRoLT5pbmRleHNraXBwcmVmaXgsCisJCQkJCQkJCQkJCQliZXN0X3BhdGgt PmluZGV4ZGlzdGluY3QpOwogCWVsc2UKIAkJc2Nhbl9wbGFuID0gKFNjYW4gKikgbWFrZV9pbmRl eHNjYW4odGxpc3QsCiAJCQkJCQkJCQkJCXFwcXVhbCwKQEAgLTMwNzcsNyArMzA4NCw5IEBAIGNy ZWF0ZV9pbmRleHNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJZml4ZWRf aW5kZXhvcmRlcmJ5cywKIAkJCQkJCQkJCQkJaW5kZXhvcmRlcmJ5cywKIAkJCQkJCQkJCQkJaW5k ZXhvcmRlcmJ5b3BzLAotCQkJCQkJCQkJCQliZXN0X3BhdGgtPmluZGV4c2NhbmRpcik7CisJCQkJ CQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCQliZXN0X3BhdGgtPmlu ZGV4c2tpcHByZWZpeCwKKwkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleGRpc3RpbmN0KTsKIAog CWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnNjYW5fcGxhbi0+cGxhbiwgJmJlc3RfcGF0aC0+cGF0 aCk7CiAKQEAgLTMzNjcsNyArMzM3Niw4IEBAIGNyZWF0ZV9iaXRtYXBfc3VicGxhbihQbGFubmVy SW5mbyAqcm9vdCwgUGF0aCAqYml0bWFwcXVhbCwKIAkJcGxhbiA9IChQbGFuICopIG1ha2VfYml0 bWFwX2luZGV4c2Nhbihpc2Nhbi0+c2Nhbi5zY2FucmVsaWQsCiAJCQkJCQkJCQkJCSAgaXNjYW4t PmluZGV4aWQsCiAJCQkJCQkJCQkJCSAgaXNjYW4tPmluZGV4cXVhbCwKLQkJCQkJCQkJCQkJICBp c2Nhbi0+aW5kZXhxdWFsb3JpZyk7CisJCQkJCQkJCQkJCSAgaXNjYW4tPmluZGV4cXVhbG9yaWcs CisJCQkJCQkJCQkJCSAgaXNjYW4tPmluZGV4c2tpcHByZWZpeHNpemUpOwogCQkvKiBhbmQgc2V0 IGl0cyBjb3N0L3dpZHRoIGZpZWxkcyBhcHByb3ByaWF0ZWx5ICovCiAJCXBsYW4tPnN0YXJ0dXBf Y29zdCA9IDAuMDsKIAkJcGxhbi0+dG90YWxfY29zdCA9IGlwYXRoLT5pbmRleHRvdGFsY29zdDsK QEAgLTU0MTAsNyArNTQyMCw5IEBAIG1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsCiAJCQkg ICBMaXN0ICppbmRleG9yZGVyYnksCiAJCQkgICBMaXN0ICppbmRleG9yZGVyYnlvcmlnLAogCQkJ ICAgTGlzdCAqaW5kZXhvcmRlcmJ5b3BzLAotCQkJICAgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5k aXIpCisJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpciwKKwkJCSAgIGludCBza2lwUHJl Zml4U2l6ZSwKKwkJCSAgIGJvb2wgZGlzdGluY3QpCiB7CiAJSW5kZXhTY2FuICAqbm9kZSA9IG1h a2VOb2RlKEluZGV4U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5zY2FuLnBsYW47CkBA IC01NDI3LDYgKzU0MzksOCBAQCBtYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LAogCW5vZGUt PmluZGV4b3JkZXJieW9yaWcgPSBpbmRleG9yZGVyYnlvcmlnOwogCW5vZGUtPmluZGV4b3JkZXJi eW9wcyA9IGluZGV4b3JkZXJieW9wczsKIAlub2RlLT5pbmRleG9yZGVyZGlyID0gaW5kZXhzY2Fu ZGlyOworCW5vZGUtPmluZGV4c2tpcHByZWZpeHNpemUgPSBza2lwUHJlZml4U2l6ZTsKKwlub2Rl LT5pbmRleGRpc3RpbmN0ID0gZGlzdGluY3Q7CiAKIAlyZXR1cm4gbm9kZTsKIH0KQEAgLTU0Mzks NyArNTQ1Myw5IEBAIG1ha2VfaW5kZXhvbmx5c2NhbihMaXN0ICpxcHRsaXN0LAogCQkJCSAgIExp c3QgKmluZGV4cXVhbCwKIAkJCQkgICBMaXN0ICppbmRleG9yZGVyYnksCiAJCQkJICAgTGlzdCAq aW5kZXh0bGlzdCwKLQkJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpcikKKwkJCQkgICBT Y2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpciwKKwkJCQkgICBpbnQgc2tpcFByZWZpeFNpemUsCisJ CQkJICAgYm9vbCBkaXN0aW5jdCkKIHsKIAlJbmRleE9ubHlTY2FuICpub2RlID0gbWFrZU5vZGUo SW5kZXhPbmx5U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5zY2FuLnBsYW47CkBAIC01 NDU0LDYgKzU0NzAsOCBAQCBtYWtlX2luZGV4b25seXNjYW4oTGlzdCAqcXB0bGlzdCwKIAlub2Rl LT5pbmRleG9yZGVyYnkgPSBpbmRleG9yZGVyYnk7CiAJbm9kZS0+aW5kZXh0bGlzdCA9IGluZGV4 dGxpc3Q7CiAJbm9kZS0+aW5kZXhvcmRlcmRpciA9IGluZGV4c2NhbmRpcjsKKwlub2RlLT5pbmRl eHNraXBwcmVmaXhzaXplID0gc2tpcFByZWZpeFNpemU7CisJbm9kZS0+aW5kZXhkaXN0aW5jdCA9 IGRpc3RpbmN0OwogCiAJcmV0dXJuIG5vZGU7CiB9CkBAIC01NDYyLDcgKzU0ODAsOCBAQCBzdGF0 aWMgQml0bWFwSW5kZXhTY2FuICoKIG1ha2VfYml0bWFwX2luZGV4c2NhbihJbmRleCBzY2FucmVs aWQsCiAJCQkJCSAgT2lkIGluZGV4aWQsCiAJCQkJCSAgTGlzdCAqaW5kZXhxdWFsLAotCQkJCQkg IExpc3QgKmluZGV4cXVhbG9yaWcpCisJCQkJCSAgTGlzdCAqaW5kZXhxdWFsb3JpZywKKwkJCQkJ ICBpbnQgc2tpcFByZWZpeFNpemUpCiB7CiAJQml0bWFwSW5kZXhTY2FuICpub2RlID0gbWFrZU5v ZGUoQml0bWFwSW5kZXhTY2FuKTsKIAlQbGFuCSAgICpwbGFuID0gJm5vZGUtPnNjYW4ucGxhbjsK QEAgLTU0NzUsNiArNTQ5NCw3IEBAIG1ha2VfYml0bWFwX2luZGV4c2NhbihJbmRleCBzY2FucmVs aWQsCiAJbm9kZS0+aW5kZXhpZCA9IGluZGV4aWQ7CiAJbm9kZS0+aW5kZXhxdWFsID0gaW5kZXhx dWFsOwogCW5vZGUtPmluZGV4cXVhbG9yaWcgPSBpbmRleHF1YWxvcmlnOworCW5vZGUtPmluZGV4 c2tpcHByZWZpeHNpemUgPSBza2lwUHJlZml4U2l6ZTsKIAogCXJldHVybiBub2RlOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGVhMjQwOGMxM2YuLjkxYjFjYTI2MzQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTMxMDksMTIgKzMxMDksMTgg QEAgc3RhbmRhcmRfcXBfY2FsbGJhY2soUGxhbm5lckluZm8gKnJvb3QsIHZvaWQgKmV4dHJhKQog CiAJaWYgKHBhcnNlLT5kaXN0aW5jdENsYXVzZSAmJgogCQlncm91cGluZ19pc19zb3J0YWJsZShw YXJzZS0+ZGlzdGluY3RDbGF1c2UpKQorCXsKIAkJcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMgPQog CQkJbWFrZV9wYXRoa2V5c19mb3Jfc29ydGNsYXVzZXMocm9vdCwKIAkJCQkJCQkJCQkgIHBhcnNl LT5kaXN0aW5jdENsYXVzZSwKIAkJCQkJCQkJCQkgIHRsaXN0KTsKKwkJcm9vdC0+cXVlcnlfdW5p cXVla2V5cyA9IGJ1aWxkX3VuaXF1ZWtleXMocm9vdCwgcGFyc2UtPmRpc3RpbmN0Q2xhdXNlKTsK Kwl9CiAJZWxzZQorCXsKIAkJcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMgPSBOSUw7CisJCXJvb3Qt PnF1ZXJ5X3VuaXF1ZWtleXMgPSBOSUw7CisJfQogCiAJcm9vdC0+c29ydF9wYXRoa2V5cyA9CiAJ CW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsCkBAIC00NDQxLDcgKzQ0NDcsNyBA QCBjcmVhdGVfZmluYWxfZGlzdGluY3RfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKmlucHV0X3JlbCwKIAkJCQkJCQlSZWxPcHRJbmZvICpkaXN0aW5jdF9yZWwpCiB7CiAJUXVl cnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7Ci0JUGF0aAkgICAqY2hlYXBlc3RfaW5wdXRfcGF0 aCA9IGlucHV0X3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwlQYXRoCSAgICpjaGVhcGVzdF9p bnB1dF9wYXRoID0gaW5wdXRfcmVsLT5jaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aDsKIAlk b3VibGUJCW51bURpc3RpbmN0Um93czsKIAlib29sCQlhbGxvd19oYXNoOwogCVBhdGgJICAgKnBh dGg7CkBAIC00NTE0LDggKzQ1MjAsMTQgQEAgY3JlYXRlX2ZpbmFsX2Rpc3RpbmN0X3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCXsKIAkJCVBhdGgJICAg KnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOwogCi0JCQlpZiAocXVlcnlfaGFzX3VuaXF1ZWtl eXNfZm9yKHJvb3QsIG5lZWRlZF9wYXRoa2V5cywgZmFsc2UpKQorCQkJaWYgKHF1ZXJ5X2hhc191 bmlxdWVrZXlzX2Zvcihyb290LCBwYXRoLT51bmlxdWVrZXlzLCBmYWxzZSkpCiAJCQkJYWRkX3Bh dGgoZGlzdGluY3RfcmVsLCBwYXRoKTsKKwkJCWVsc2UgaWYgKHBhdGhrZXlzX2NvbnRhaW5lZF9p bihuZWVkZWRfcGF0aGtleXMsIHBhdGgtPnBhdGhrZXlzKSkKKwkJCQlhZGRfcGF0aChkaXN0aW5j dF9yZWwsIChQYXRoICopCisJCQkJCQkgY3JlYXRlX3VwcGVyX3VuaXF1ZV9wYXRoKHJvb3QsIGRp c3RpbmN0X3JlbCwKKwkJCQkJCQkJCQkJCSAgcGF0aCwKKwkJCQkJCQkJCQkJCSAgbGlzdF9sZW5n dGgocm9vdC0+ZGlzdGluY3RfcGF0aGtleXMpLAorCQkJCQkJCQkJCQkJICBudW1EaXN0aW5jdFJv d3MpKTsKIAkJfQogCiAJCS8qIEZvciBleHBsaWNpdC1zb3J0IGNhc2UsIGFsd2F5cyB1c2UgdGhl IG1vcmUgcmlnb3JvdXMgY2xhdXNlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YwppbmRleCA3NGUxMDBlNWE5Li4xNjYzM2ZkNjcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMKQEAgLTI0NSw2ICsyNDUsNyBAQCBzZXRfY2hlYXBlc3QoUmVsT3B0SW5mbyAq cGFyZW50X3JlbCkKIHsKIAlQYXRoCSAgICpjaGVhcGVzdF9zdGFydHVwX3BhdGg7CiAJUGF0aAkg ICAqY2hlYXBlc3RfdG90YWxfcGF0aDsKKwlQYXRoCSAgICpjaGVhcGVzdF9kaXN0aW5jdF91bmlx dWVfcGF0aDsKIAlQYXRoCSAgICpiZXN0X3BhcmFtX3BhdGg7CiAJTGlzdAkgICAqcGFyYW1ldGVy aXplZF9wYXRoczsKIAlMaXN0Q2VsbCAgICpwOwpAQCAtMjU2LDYgKzI1Nyw3IEBAIHNldF9jaGVh cGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCiAJY2hlYXBlc3Rfc3RhcnR1cF9wYXRoID0g Y2hlYXBlc3RfdG90YWxfcGF0aCA9IGJlc3RfcGFyYW1fcGF0aCA9IE5VTEw7CiAJcGFyYW1ldGVy aXplZF9wYXRocyA9IE5JTDsKKwljaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9IE5VTEw7 CiAKIAlmb3JlYWNoKHAsIHBhcmVudF9yZWwtPnBhdGhsaXN0KQogCXsKQEAgLTM1NCw2ICszNTYs MzYgQEAgc2V0X2NoZWFwZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwpCiAJCWNoZWFwZXN0X3Rv dGFsX3BhdGggPSBiZXN0X3BhcmFtX3BhdGg7CiAJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCk7CiAKKwljaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9IGNoZWFwZXN0X3Rv dGFsX3BhdGg7CisKKwlmb3JlYWNoKHAsIHBhcmVudF9yZWwtPnVuaXF1ZV9wYXRobGlzdCkKKwl7 CisJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QocCk7CisJCWludAkJCWNtcDsKKwor CQkvKiBVbnBhcmFtZXRlcml6ZWQgcGF0aCwgc28gY29uc2lkZXIgaXQgZm9yIGNoZWFwZXN0IHNs b3RzICovCisJCWlmIChjaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9PSBOVUxMKQorCQl7 CisJCQljaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9IHBhdGg7CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qCisJCSAqIElmIHdlIGZpbmQgdHdvIHBhdGhzIG9mIGlkZW50aWNhbCBjb3N0 cywgdHJ5IHRvIGtlZXAgdGhlCisJCSAqIGJldHRlci1zb3J0ZWQgb25lLiAgVGhlIHBhdGhzIG1p Z2h0IGhhdmUgdW5yZWxhdGVkIHNvcnQKKwkJICogb3JkZXJpbmdzLCBpbiB3aGljaCBjYXNlIHdl IGNhbiBvbmx5IGd1ZXNzIHdoaWNoIG1pZ2h0IGJlCisJCSAqIGJldHRlciB0byBrZWVwLCBidXQg aWYgb25lIGlzIHN1cGVyaW9yIHRoZW4gd2UgZGVmaW5pdGVseQorCQkgKiBzaG91bGQga2VlcCB0 aGF0IG9uZS4KKwkJICovCisJCWNtcCA9IGNvbXBhcmVfcGF0aF9jb3N0cyhjaGVhcGVzdF9kaXN0 aW5jdF91bmlxdWVfcGF0aCwgcGF0aCwgVE9UQUxfQ09TVCk7CisJCWlmIChjbXAgPiAwIHx8CisJ CQkoY21wID09IDAgJiYKKwkJCSBjb21wYXJlX3BhdGhrZXlzKGNoZWFwZXN0X2Rpc3RpbmN0X3Vu aXF1ZV9wYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkgIHBhdGgtPnBhdGhrZXlzKSA9PSBQQVRIS0VZ U19CRVRURVIyKSkKKwkJCWNoZWFwZXN0X2Rpc3RpbmN0X3VuaXF1ZV9wYXRoID0gcGF0aDsKKwl9 CisKKwlwYXJlbnRfcmVsLT5jaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9IGNoZWFwZXN0 X2Rpc3RpbmN0X3VuaXF1ZV9wYXRoOwogCXBhcmVudF9yZWwtPmNoZWFwZXN0X3N0YXJ0dXBfcGF0 aCA9IGNoZWFwZXN0X3N0YXJ0dXBfcGF0aDsKIAlwYXJlbnRfcmVsLT5jaGVhcGVzdF90b3RhbF9w YXRoID0gY2hlYXBlc3RfdG90YWxfcGF0aDsKIAlwYXJlbnRfcmVsLT5jaGVhcGVzdF91bmlxdWVf cGF0aCA9IE5VTEw7CS8qIGNvbXB1dGVkIG9ubHkgaWYgbmVlZGVkICovCkBAIC0xMjkzLDYgKzEz MjUsMTAgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2Rl LT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCXBhdGhub2Rl LT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPSBwYXJhbGxlbF93b3JrZXJzOwogCXBhdGhub2RlLT5w YXRoLnBhdGhrZXlzID0gcGF0aGtleXM7CisJaWYgKGxpc3RfbGVuZ3RoKHN1YnBhdGhzKSA9PSAx KQorCXsKKwkJcGF0aG5vZGUtPnBhdGgudW5pcXVla2V5cyA9ICgoUGF0aCopbGluaXRpYWwoc3Vi cGF0aHMpKS0+dW5pcXVla2V5czsKKwl9CiAKIAkvKgogCSAqIEZvciBwYXJhbGxlbCBhcHBlbmQs IG5vbi1wYXJ0aWFsIHBhdGhzIGFyZSBzb3J0ZWQgYnkgZGVzY2VuZGluZyB0b3RhbApAQCAtMTQz Nyw2ICsxNDczLDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID0gMDsKIAlwYXRobm9kZS0+cGF0 aC5wYXRoa2V5cyA9IHBhdGhrZXlzOwogCXBhdGhub2RlLT5zdWJwYXRocyA9IHN1YnBhdGhzOwor CWlmIChsaXN0X2xlbmd0aChzdWJwYXRocykgPT0gMSkKKwl7CisJCXBhdGhub2RlLT5wYXRoLnVu aXF1ZWtleXMgPSAoKFBhdGgqKWxpbml0aWFsKHN1YnBhdGhzKSktPnVuaXF1ZWtleXM7CisJfQog CiAJLyoKIAkgKiBBcHBseSBxdWVyeS13aWRlIExJTUlUIGlmIGtub3duIGFuZCBwYXRoIGlzIGZv ciBzb2xlIGJhc2UgcmVsYXRpb24uCkBAIC0zMDk0LDYgKzMxMzQsNDQgQEAgY3JlYXRlX3VwcGVy X3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXJldHVybiBwYXRobm9kZTsKIH0KIAor LyoKKyAqIGNyZWF0ZV9za2lwc2Nhbl91bmlxdWVfcGF0aAorICoJICBDcmVhdGVzIGEgcGF0aG5v ZGUgdGhlIHNhbWUgYXMgYW4gZXhpc3RpbmcgSW5kZXhQYXRoIGV4Y2VwdCBiYXNlZCBvbgorICoJ ICBza2lwcGluZyBkdXBsaWNhdGUgdmFsdWVzLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBjaGVh cGVyIHRoYW4gdXNpbmcKKyAqCSAgY3JlYXRlX3VwcGVyX3VuaXF1ZV9wYXRoLgorICoKKyAqIFRo ZSBpbnB1dCBwYXRoIG11c3QgYmUgYW4gSW5kZXhQYXRoIGZvciBhbiBpbmRleCB0aGF0IHN1cHBv cnRzIGFtc2tpcC4KKyAqLworSW5kZXhQYXRoICoKK2NyZWF0ZV9za2lwc2Nhbl91bmlxdWVfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhPcHRJbmZvICppbmRleCwKKwkJCQkJCQlQYXRoICpi YXNlcGF0aCwgaW50IHByZWZpeCkKK3sKKwlJbmRleFBhdGggCSpwYXRobm9kZSA9IG1ha2VOb2Rl KEluZGV4UGF0aCk7CisJaW50IAkJbnVtRGlzdGluY3RSb3dzOworCVVuaXF1ZUtleSAqdWtleTsK KworCUFzc2VydChJc0EoYmFzZXBhdGgsIEluZGV4UGF0aCkpOworCisJLyogV2UgZG9uJ3Qgd2Fu dCB0byBtb2RpZnkgYmFzZXBhdGgsIHNvIG1ha2UgYSBjb3B5LiAqLworCW1lbWNweShwYXRobm9k ZSwgYmFzZXBhdGgsIHNpemVvZihJbmRleFBhdGgpKTsKKworCXVrZXkgPSBsaW5pdGlhbF9ub2Rl KFVuaXF1ZUtleSwgcm9vdC0+cXVlcnlfdW5pcXVla2V5cyk7CisKKwlBc3NlcnQocHJlZml4ID4g MCk7CisJcGF0aG5vZGUtPmluZGV4c2tpcHByZWZpeCA9IHByZWZpeDsKKwlwYXRobm9kZS0+aW5k ZXhkaXN0aW5jdCA9IHRydWU7CisJcGF0aG5vZGUtPnBhdGgudW5pcXVla2V5cyA9IHJvb3QtPnF1 ZXJ5X3VuaXF1ZWtleXM7CisKKwludW1EaXN0aW5jdFJvd3MgPSBlc3RpbWF0ZV9udW1fZ3JvdXBz KHJvb3QsIHVrZXktPmV4cHJzLAorCQkJCQkJCQkJCSAgcGF0aG5vZGUtPnBhdGgucm93cywKKwkJ CQkJCQkJCQkgIE5VTEwsIE5VTEwpOworCisJcGF0aG5vZGUtPnBhdGgudG90YWxfY29zdCA9IHBh dGhub2RlLT5wYXRoLnN0YXJ0dXBfY29zdCAqIG51bURpc3RpbmN0Um93czsKKwlwYXRobm9kZS0+ cGF0aC5yb3dzID0gbnVtRGlzdGluY3RSb3dzOworCisJcmV0dXJuIHBhdGhub2RlOworfQorCiAv KgogICogY3JlYXRlX2FnZ19wYXRoCiAgKgkgIENyZWF0ZXMgYSBwYXRobm9kZSB0aGF0IHJlcHJl c2VudHMgcGVyZm9ybWluZyBhZ2dyZWdhdGlvbi9ncm91cGluZwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCmluZGV4IGE1MGY4OTdmZmEuLmU2NzAyNmFjM2QgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTI3Miw2ICsyNzIsOSBAQCBnZXRfcmVsYXRpb25faW5m byhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50 LAogCQkJaW5mby0+YW1vcHRpb25hbGtleSA9IGFtcm91dGluZS0+YW1vcHRpb25hbGtleTsKIAkJ CWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXk7CiAJCQlpbmZv LT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOworCQkJaW5mby0+YW1j YW5za2lwID0gKGFtcm91dGluZS0+YW1za2lwICE9IE5VTEwgJiYKKwkJCQkJYW1yb3V0aW5lLT5h bWdldHNraXB0dXBsZSAhPSBOVUxMICYmCisJCQkJCWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2Fu ICE9IE5VTEwpOwogCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+YW1jYW5wYXJh bGxlbDsKIAkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9 IE5VTEwpOwogCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFw ICE9IE5VTEwgJiYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IGQyY2U0YTg0NTAuLmQzOTNkYmUyYWEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtMTAwMCw2ICsxMDAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qg Y29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQl0cnVlLAogCQlOVUxMLCBOVUxM LCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX2luZGV4c2tpcHNjYW4iLCBQR0NfVVNFUlNFVCwg UVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5l cidzIHVzZSBvZiBpbmRleC1za2lwLXNjYW4gcGxhbnMuIiksCisJCQlOVUxMCisJCX0sCisJCSZl bmFibGVfaW5kZXhza2lwc2NhbiwKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJ ewogCQl7ImVuYWJsZV9iaXRtYXBzY2FuIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRI T0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgYml0bWFw LXNjYW4gcGxhbnMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUKaW5kZXggM2ZlOWE1M2NiMy4uZGY0OGVlOTVjNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzY3LDYgKzM2Nyw3IEBACiAj ZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2Vu YWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhza2lwc2NhbiA9IG9uCiAjZW5h YmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9p biA9IG9uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYwppbmRleCA5ZTkzOTA4YzY1Li5lYjE3 Y2JiYzliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKQEAgLTEwMDksNyArMTAwOSw3 IEBAIHR1cGxlc29ydF9iZWdpbl9jbHVzdGVyKFR1cGxlRGVzYyB0dXBEZXNjLAogCiAJc3RhdGUt PnR1cERlc2MgPSB0dXBEZXNjOwkvKiBhc3N1bWUgd2UgbmVlZCBub3QgY29weSB0dXBEZXNjICov CiAKLQlpbmRleFNjYW5LZXkgPSBfYnRfbWtzY2Fua2V5KGluZGV4UmVsLCBOVUxMKTsKKwlpbmRl eFNjYW5LZXkgPSBfYnRfbWtzY2Fua2V5KGluZGV4UmVsLCBOVUxMLCBOVUxMKTsKIAogCWlmIChz dGF0ZS0+aW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOVUxMKQogCXsKQEAgLTExMDQsNyAr MTEwNCw3IEBAIHR1cGxlc29ydF9iZWdpbl9pbmRleF9idHJlZShSZWxhdGlvbiBoZWFwUmVsLAog CXN0YXRlLT5pbmRleFJlbCA9IGluZGV4UmVsOwogCXN0YXRlLT5lbmZvcmNlVW5pcXVlID0gZW5m b3JjZVVuaXF1ZTsKIAotCWluZGV4U2NhbktleSA9IF9idF9ta3NjYW5rZXkoaW5kZXhSZWwsIE5V TEwpOworCWluZGV4U2NhbktleSA9IF9idF9ta3NjYW5rZXkoaW5kZXhSZWwsIE5VTEwsIE5VTEwp OwogCiAJLyogUHJlcGFyZSBTb3J0U3VwcG9ydCBkYXRhIGZvciBlYWNoIGNvbHVtbiAqLwogCXN0 YXRlLT5zb3J0S2V5cyA9IChTb3J0U3VwcG9ydCkgcGFsbG9jMChzdGF0ZS0+bktleXMgKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv YW1hcGkuaAppbmRleCBkMzU3ZWJiNTU5Li41ZjQzNjQ3NmVmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAt MTYyLDYgKzE2MiwxMiBAQCB0eXBlZGVmIEluZGV4U2NhbkRlc2MgKCphbWJlZ2luc2Nhbl9mdW5j dGlvbikgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJCSAgIGludCBua2V5cywK IAkJCQkJCQkJCQkJICAgaW50IG5vcmRlcmJ5cyk7CiAKKy8qIHByZXBhcmUgZm9yIGluZGV4IHNj YW4gd2l0aCBza2lwICovCit0eXBlZGVmIEluZGV4U2NhbkRlc2MgKCphbWJlZ2luc2Nhbl9za2lw X2Z1bmN0aW9uKSAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCQkJICAgaW50IG5r ZXlzLAorCQkJCQkJCQkJCQkgICBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkgICBpbnQgcHJl Zml4KTsKKwogLyogKHJlKXN0YXJ0IGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAoKmFtcmVz Y2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkgICBTY2FuS2V5IGtl eXMsCkBAIC0xNzMsNiArMTc5LDE2IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBsZV9mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bik7CiAKKy8qIG5leHQgdmFsaWQgdHVwbGUgKi8KK3R5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVf d2l0aF9za2lwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBT Y2FuRGlyZWN0aW9uIHByZWZpeERpciwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBwb3N0 Zml4RGlyKTsKKworLyogc2tpcCBwYXN0IGR1cGxpY2F0ZXMgKi8KK3R5cGVkZWYgYm9vbCAoKmFt c2tpcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gcHJlZml4RGlyLAorCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKTsKKwogLyog ZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0p OwpAQCAtMjY5LDEyICsyODUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlh bXZhbGlkYXRlX2Z1bmN0aW9uIGFtdmFsaWRhdGU7CiAJYW1hZGp1c3RtZW1iZXJzX2Z1bmN0aW9u IGFtYWRqdXN0bWVtYmVyczsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWJlZ2luc2Nhbl9mdW5jdGlv biBhbWJlZ2luc2NhbjsKKwlhbWJlZ2luc2Nhbl9za2lwX2Z1bmN0aW9uIGFtYmVnaW5za2lwc2Nh bjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFt Z2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXR0dXBsZV93aXRoX3NraXBfZnVuY3Rp b24gYW1nZXRza2lwdHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rp b24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFt ZW5kc2NhbjsKIAlhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAq LwogCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgLyogY2FuIGJlIE5VTEwgKi8KKwlh bXNraXBfZnVuY3Rpb24gYW1za2lwOwkJCQkvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJm YWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3Rp bWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4g YmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA0ODBhNDc2MmY1Li4zOGY1MWI0NjkwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaApAQCAtMTUyLDkgKzE1MiwxNyBAQCBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRl eF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2lu c2Nhbl9za2lwKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCSBSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAorCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJIGludCBu a2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZpeCk7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBp bmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJ CVNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJCQlpbnQgbmtleXMpOworZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcF9za2lwKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCisJCQkJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJCQlpbnQgbmtleXMs CisJCQkJCQkJCQkJCWludCBwcmVmaXgpOwogZXh0ZXJuIHZvaWQgaW5kZXhfcmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCSBTY2FuS2V5IGtleXMsIGludCBua2V5cywKIAkJCQkJCSBT Y2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKQEAgLTE3MCwxMCArMTc4LDE2IEBAIGV4 dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFw cmVsLAogCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4g SXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiBJdGVtUG9pbnRlciBpbmRleF9n ZXRuZXh0X3RpZF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0 aW9uIHByZWZpeERpciwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOwogc3Ry dWN0IFR1cGxlVGFibGVTbG90OwogZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNj YW5EZXNjIHNjYW4sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBp bmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCQkJCQkgICBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIGJv b2wgaW5kZXhfZ2V0bmV4dF9zbG90X3NraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIHByZWZpeERpciwKKwkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gcG9zdGZpeERpciwKKwkJCQkJ CQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4g SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8g KmluZm8sCkBAIC0xODMsNiArMTk3LDggQEAgZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq aW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogZXh0ZXJuIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqaW5kZXhfdmFjdXVtX2NsZWFudXAoSW5kZXhWYWN1dW1JbmZvICppbmZv LAogCQkJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppc3RhdCk7CiBleHRlcm4g Ym9vbCBpbmRleF9jYW5fcmV0dXJuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBhdHRubyk7 CitleHRlcm4gYm9vbCBpbmRleF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBwcmVmaXhEaXIsCisJCQkJCSAgIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CiBleHRlcm4g UmVnUHJvY2VkdXJlIGluZGV4X2dldHByb2NpZChSZWxhdGlvbiBpcmVsLCBBdHRyTnVtYmVyIGF0 dG51bSwKIAkJCQkJCQkJCXVpbnQxNiBwcm9jbnVtKTsKIGV4dGVybiBGbWdySW5mbyAqaW5kZXhf Z2V0cHJvY2luZm8oUmVsYXRpb24gaXJlbCwgQXR0ck51bWJlciBhdHRudW0sCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKaW5kZXggMzBhMjE2ZTRjMC4uZGUxOWJiYzg3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtMTAy Nyw2ICsxMDI3LDU0IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJRGF0dW0JICAg KmVsZW1fdmFsdWVzOwkvKiBhcnJheSBvZiBudW1fZWxlbXMgRGF0dW1zICovCiB9IEJUQXJyYXlL ZXlJbmZvOwogCit0eXBlZGVmIHN0cnVjdCBCVFNraXBDb21wYXJlUmVzdWx0Cit7CisJYm9vbAkJ ZXF1YWw7CisJaW50CQkJcHJlZml4Q21wUmVzdWx0LCBza0NtcFJlc3VsdDsKKwlib29sCQlwcmVm aXhTa2lwLCBmdWxsS2V5U2tpcDsKKwlpbnQJCQlwcmVmaXhTa2lwSW5kZXg7Cit9IEJUU2tpcENv bXBhcmVSZXN1bHQ7CisKK3R5cGVkZWYgZW51bSBCVFNraXBTdGF0ZQoreworCVNraXBTdGF0ZVN0 b3AsCisJU2tpcFN0YXRlU2tpcCwKKwlTa2lwU3RhdGVTa2lwRXh0cmEsCisJU2tpcFN0YXRlTmV4 dAorfSBCVFNraXBTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgQlRTa2lwUG9zRGF0YQoreworCUJU U2tpcFN0YXRlIG5leHRBY3Rpb247CisJU2NhbkRpcmVjdGlvbiBuZXh0RGlyZWN0aW9uOworCWlu dCBuZXh0U2tpcEluZGV4OworCUJUU2Nhbkluc2VydERhdGEgc2tpcFNjYW5LZXk7CisJY2hhciBz a2lwVHVwbGVbQkxDS1NaXTsgLyogdHVwbGUgZGF0YSB3aGVyZSBza2lwU2NhbktleSBEYXR1bSdz IHBvaW50IHRvICovCit9IEJUU2tpcFBvc0RhdGE7CisKK3R5cGVkZWYgc3RydWN0IEJUU2tpcERh dGEKK3sKKwkvKiB1c2VkIHRvIGNvbnRyb2wgc2tpcHBpbmcKKwkgKiBjdXJQb3Muc2tpcFNjYW5L ZXkgaXMgYSBjb21iaW5hdGlvbiBvZiBjdXJyZW50VHVwbGVLZXkgYW5kIGZ3ZFNjYW5LZXkvYndk U2NhbktleS4KKwkgKiBjdXJyZW50VHVwbGVLZXkgY29udGFpbnMgdGhlIHNjYW4ga2V5cyBmb3Ig dGhlIGN1cnJlbnQgdHVwbGUKKwkgKiBmd2RTY2FuS2V5IGNvbnRhaW5zIHRoZSBzY2FuIGtleXMg Zm9yIHF1YWxzIHRoYXQgd291bGQgYmUgY2hvc2VuIGZvciBhIGZvcndhcmQgc2NhbgorCSAqIGJ3 ZFNjYW5LZXkgY29udGFpbnMgdGhlIHNjYW4ga2V5cyBmb3IgcXVhbHMgdGhhdCB3b3VsZCBiZSBj aG9zZW4gZm9yIGEgYmFja3dhcmQgc2NhbgorCSAqIHdlIG5lZWQgYm90aCBmd2QgYW5kIGJ3ZCwg YmVjYXVzZSB0aGUgc2NhbiBrZXlzIGRpZmZlciBmb3IgZ29pbmcgZndkIGFuZCBid2QKKwkgKiBp ZiBhIHF1YWwgd291bGQgYmUgYT4yIGFuZCBhPDUsIGZ3ZCB3b3VsZCBoYXZlIGE+Miwgd2hpbGUg YndkIHdvdWxkIGhhdmUgYTw1CisJICovCisJQlRTY2FuSW5zZXJ0RGF0YQljdXJyZW50VHVwbGVL ZXk7CisJQlRTY2FuSW5zZXJ0RGF0YQlmd2RTY2FuS2V5OworCVNjYW5LZXlEYXRhCQkJZndkTm90 TnVsbEtleXNbSU5ERVhfTUFYX0tFWVNdOworCUJUU2Nhbkluc2VydERhdGEJYndkU2NhbktleTsK KwlTY2FuS2V5RGF0YQkJCWJ3ZE5vdE51bGxLZXlzW0lOREVYX01BWF9LRVlTXTsKKwkvKiBsZW5n dGggb2YgcHJlZml4IHRvIHNraXAgKi8KKwlpbnQJCQkJCXByZWZpeDsKKworCUJUU2tpcFBvc0Rh dGEgY3VyUG9zLCBtYXJrUG9zOworfSBCVFNraXBEYXRhOworCit0eXBlZGVmIEJUU2tpcERhdGEg KkJUU2tpcDsKKwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRoZXNl IGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjQsNiAr MTExMiw5IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAkgKi8KIAlpbnQJCQlt YXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwogCisJLyog V29yayBzcGFjZSBmb3IgX2J0X3NraXAgKi8KKwlCVFNraXAJc2tpcERhdGE7CS8qIHVzZWQgdG8g Y29udHJvbCBza2lwcGluZyAqLworCiAJLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3Ig ZWZmaWNpZW5jeSAqLwogCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRp b24gZGF0YSAqLwogCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwg aWYgYW55ICovCkBAIC0xMDc4LDYgKzExMjksOCBAQCB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEg KkJUU2Nhbk9wYXF1ZTsKICAqLwogI2RlZmluZSBTS19CVF9SRVFGV0QJMHgwMDAxMDAwMAkvKiBy ZXF1aXJlZCB0byBjb250aW51ZSBmb3J3YXJkIHNjYW4gKi8KICNkZWZpbmUgU0tfQlRfUkVRQktX RAkweDAwMDIwMDAwCS8qIHJlcXVpcmVkIHRvIGNvbnRpbnVlIGJhY2t3YXJkIHNjYW4gKi8KKyNk ZWZpbmUgU0tfQlRfUkVRU0tJUEZXRAkweDAwMDQwMDAwCS8qIHJlcXVpcmVkIHRvIGNvbnRpbnVl IGZvcndhcmQgc2NhbiB3aXRoaW4gY3VycmVudCBwcmVmaXggKi8KKyNkZWZpbmUgU0tfQlRfUkVR U0tJUEJLV0QJMHgwMDA4MDAwMAkvKiByZXF1aXJlZCB0byBjb250aW51ZSBiYWNrd2FyZCBzY2Fu IHdpdGhpbiBjdXJyZW50IHByZWZpeCAqLwogI2RlZmluZSBTS19CVF9JTkRPUFRJT05fU0hJRlQg IDI0CS8qIG11c3QgY2xlYXIgdGhlIGFib3ZlIGJpdHMgKi8KICNkZWZpbmUgU0tfQlRfREVTQwkJ CShJTkRPUFRJT05fREVTQyA8PCBTS19CVF9JTkRPUFRJT05fU0hJRlQpCiAjZGVmaW5lIFNLX0JU X05VTExTX0ZJUlNUCShJTkRPUFRJT05fTlVMTFNfRklSU1QgPDwgU0tfQlRfSU5ET1BUSU9OX1NI SUZUKQpAQCAtMTEyNCw5ICsxMTc3LDEyIEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9u IHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgYm9vbCBpbmRleFVuY2hh bmdlZCwKIAkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CiBleHRlcm4gSW5kZXhT Y2FuRGVzYyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cyk7CitleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJlZ2luc2Nhbl9za2lwKFJlbGF0aW9uIHJlbCwg aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBpbnQgc2tpcFByZWZpeCk7CiBleHRlcm4gU2l6ZSBi dGVzdGltYXRlcGFyYWxsZWxzY2FuKHZvaWQpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxz Y2FuKHZvaWQgKnRhcmdldCk7CiBleHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZV9za2lwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24g cG9zdGZpeERpcik7CitleHRlcm4gYm9vbCBidHNraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKTsKIGV4dGVybiBp bnQ2NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4 dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBp bnQgbnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CkBA IC0xMjI3LDE1ICsxMjgzLDgxIEBAIGV4dGVybiBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlv biByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBidWYsCiAJCQkJCQkJYm9vbCBmb3J1cGRh dGUsIEJUU3RhY2sgc3RhY2ssIGludCBhY2Nlc3MsIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVy biBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRT dGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVs LCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwotZXh0 ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CitleHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKTsKK2V4dGVybiBib29s IF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNj YW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQo UmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0LAogCQkJCQkJCSAgIFNu YXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiBCdWZmZXIgX2J0X3dhbGtfbGVmdChSZWxhdGlvbiBy ZWwsIEJ1ZmZlciBidWYsIFNuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiBPZmZzZXROdW1iZXIg X2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsK K2V4dGVybiB2b2lkIF9idF9pbml0aWFsaXplX21vcmVfZGF0YShCVFNjYW5PcGFxdWUgc28sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJIE9mZnNldE51bWJlciAqb2ZmbnVtLCBi b29sIGlzUmVndWxhck1vZGUpOworZXh0ZXJuIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRuZXh0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2FuRGlyZWN0aW9uIGRp cik7CitleHRlcm4gdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBCVFNjYW5Qb3Mgc3ApOworCisvKgorKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMg aW4gbmJ0c2tpcC5jCisqLworc3RhdGljIGlubGluZSBib29sCitfYnRfc2tpcF9lbmFibGVkKEJU U2Nhbk9wYXF1ZSBzbykKK3sKKwlyZXR1cm4gc28tPnNraXBEYXRhICE9IE5VTEw7Cit9CisKK3N0 YXRpYyBpbmxpbmUgYm9vbAorX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKFNjYW5EaXJlY3Rpb24g cHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJcmV0dXJuIHByZWZpeERp ciA9PSBwb3N0Zml4RGlyOworfQorCisvKiByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHdlIGNhbiB1 c2UgZXh0cmEgcXVhbHMgaW4gdGhlIHNjYW5rZXkgYWZ0ZXIgc2tpcHBpbmcgdG8gYSBwcmVmaXgg Ki8KK3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0X2hhc19leHRyYV9xdWFsc19hZnRlcl9za2lwKEJU U2tpcCBza2lwLCBTY2FuRGlyZWN0aW9uIGRpciwgaW50IHByZWZpeCkKK3sKKwlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQorCXsKKwkJcmV0dXJuIHNraXAtPmZ3ZFNjYW5LZXkua2V5 c3ogPiBwcmVmaXg7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBza2lwLT5id2RTY2FuS2V5Lmtl eXN6ID4gcHJlZml4OworCX0KK30KKworLyogYWxpYXMgb2YgQlRTY2FuUG9zSXNWYWxpZCAqLwor c3RhdGljIGlubGluZSBib29sCitfYnRfc2tpcF9pc19hbHdheXNfdmFsaWQoQlRTY2FuT3BhcXVl IHNvKQoreworCXJldHVybiBCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKTsKK30KKworZXh0 ZXJuIGJvb2wgX2J0X3NraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIHByZWZp eERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKTsKK2V4dGVybiB2b2lkIF9idF9za2lwX2Ny ZWF0ZV9zY2Fua2V5cyhSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbyk7CitleHRlcm4gdm9p ZCBfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfZXh0cmFfc2tpcChJbmRleFNjYW5EZXNjIHNj YW4sIFJlbGF0aW9uIGluZGV4UmVsLAorCQkJCQlTY2FuRGlyZWN0aW9uIGN1ckRpciwgU2NhbkRp cmVjdGlvbiBwcmVmaXhEaXIsIGJvb2wgcHJpb3JpdGl6ZUVxdWFsLCBJbmRleFR1cGxlIGl0dXAp OworZXh0ZXJuIHZvaWQgX2J0X3NraXBfb25jZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVw bGUgKmN1clR1cGxlLCBPZmZzZXROdW1iZXIgKmN1clR1cGxlT2ZmbnVtLAorCQkJCQkJICBib29s IGZvcmNlU2tpcCwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZp eERpcik7CitleHRlcm4gdm9pZCBfYnRfc2tpcF9leHRyYV9jb25kaXRpb25zKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZu dW0sCisJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBv c3RmaXhEaXIsIEJUU2tpcENvbXBhcmVSZXN1bHQgKmNtcCk7CitleHRlcm4gYm9vbCBfYnRfc2tp cF9maW5kX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIGN1clR1cGxlLCBPZmZz ZXROdW1iZXIgY3VyVHVwbGVPZmZudW0sCisJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBwcmVmaXhE aXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CitleHRlcm4gdm9pZCBfYnRfc2tpcF91bnRp bF9tYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBPZmZzZXRO dW1iZXIgKmN1clR1cGxlT2ZmbnVtLAorCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIs IFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CitleHRlcm4gYm9vbCBfYnRfaGFzX3Jlc3VsdHMo QlRTY2FuT3BhcXVlIHNvKTsKK2V4dGVybiB2b2lkIF9idF9jb21wYXJlX2N1cnJlbnRfaXRlbShJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKKwkJCQkJ CQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBpc1JlZ3VsYXJNb2RlLCBCVFNraXBDb21wYXJl UmVzdWx0KiBjbXApOworZXh0ZXJuIGJvb2wgX2J0X3N0ZXBfYmFja19wYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZu dW0pOworZXh0ZXJuIGJvb2wgX2J0X3N0ZXBfZm9yd2FyZF9wYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmxvY2tOdW1iZXIgbmV4dCwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsCisJCQkJCQkJCSAgT2Zm c2V0TnVtYmVyICpjdXJUdXBsZU9mZm51bSk7CitleHRlcm4gYm9vbCBfYnRfY2hlY2trZXlzX3Nr aXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCisJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2NhbiwgaW50ICpwcmVm aXhza2lwaW5kZXgpOworZXh0ZXJuIEluZGV4VHVwbGUKK19idF9nZXRfdHVwbGVfZnJvbV9vZmZz ZXQoQlRTY2FuT3BhcXVlIHNvLCBPZmZzZXROdW1iZXIgY3VyVHVwbGVPZmZudW0pOwogCiAvKgog ICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHV0aWxzLmMKICAqLwotZXh0ZXJuIEJU U2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKTsK IGV4dGVybiB2b2lkIF9idF9mcmVlc3RhY2soQlRTdGFjayBzdGFjayk7CiBleHRlcm4gdm9pZCBf YnRfcHJlcHJvY2Vzc19hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9p ZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKQEAgLTEyNDQsNyArMTM2Niw3IEBAIGV4dGVybiB2b2lkIF9idF9tYXJrX2FycmF5X2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIF9idF9yZXN0b3JlX2FycmF5X2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMo SW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBib29sIF9idF9jaGVja2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLAotCQkJCQkJICBpbnQgdHVwbmF0dHMsIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4pOworCQkJCQkJICBpbnQgdHVwbmF0dHMs IFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4sIGludCAqaW5kZXhTa2lwUHJl Zml4KTsKIGV4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4 dGVybiBCVEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4g QlRDeWNsZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKQEAgLTEyNjYsNiArMTM4 OCwxOSBAQCBleHRlcm4gYm9vbCBfYnRfY2hlY2tfbmF0dHMoUmVsYXRpb24gcmVsLCBib29sIGhl YXBrZXlzcGFjZSwgUGFnZSBwYWdlLAogZXh0ZXJuIHZvaWQgX2J0X2NoZWNrX3RoaXJkX3BhZ2Uo UmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwLAogCQkJCQkJCQkgYm9vbCBuZWVkaGVhcHRpZHNw YWNlLCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgbmV3dHVwKTsKIGV4dGVybiBib29sIF9idF9hbGxl cXVhbGltYWdlKFJlbGF0aW9uIHJlbCwgYm9vbCBkZWJ1Z21lc3NhZ2UpOworZXh0ZXJuIGJvb2wg X2J0X2NoZWNra2V5c190aHJlZXdheShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVw bGUsIGludCB0dXBuYXR0cywKKwkJCQlTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVz Y2FuLCBpbnQgKnByZWZpeFNraXBJbmRleCk7CitleHRlcm4gYm9vbCBfYnRfY3JlYXRlX2luc2Vy dGlvbl9zY2FuX2tleShSZWxhdGlvbglyZWwsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCVNjYW5L ZXkqIHN0YXJ0S2V5cywgaW50IGtleXNDb3VudCwKKwkJCQlCVFNjYW5JbnNlcnQgaW5za2V5LCBT dHJhdGVneU51bWJlciogc3RyYXRUb3RhbCwKKwkJCQlib29sKiBnb2JhY2spOworZXh0ZXJuIHZv aWQgX2J0X3NldF9ic2VhcmNoX2ZsYWdzKFN0cmF0ZWd5TnVtYmVyIHN0cmF0VG90YWwsIFNjYW5E aXJlY3Rpb24gZGlyLAorCQlib29sKiBuZXh0a2V5LCBib29sKiBnb2JhY2spOworZXh0ZXJuIGlu dCBfYnRfY2hvb3NlX3NjYW5fa2V5cyhTY2FuS2V5IHNjYW5LZXlzLCBpbnQgbnVtYmVyT2ZLZXlz LCBTY2FuRGlyZWN0aW9uIGRpciwKK1NjYW5LZXkqIHN0YXJ0S2V5cywgU2NhbktleURhdGEqIG5v dG51bGxrZXlzLAorICBTdHJhdGVneU51bWJlciogc3RyYXRUb3RhbCwgaW50IHByZWZpeCk7Citl eHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxl IGl0dXAsIEJUU2Nhbkluc2VydCBrZXkpOworZXh0ZXJuIHZvaWQgcHJpbnRfaXR1cChCbG9ja051 bWJlciBibGssIEluZGV4VHVwbGUgbGVmdCwgSW5kZXhUdXBsZSByaWdodCwgUmVsYXRpb24gcmVs LCBjaGFyICpleHRyYSk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0 dmFsaWRhdGUuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggY2Q1N2E3MDRhZC4uMTgzM2Zh OTQ2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC00NTUsOSArNDU1LDEzIEBAIGV4dGVy biBEYXR1bSBFeGVjTWFrZUZ1bmN0aW9uUmVzdWx0U2V0KFNldEV4cHJTdGF0ZSAqZmNhY2hlLAog ICovCiB0eXBlZGVmIFR1cGxlVGFibGVTbG90ICooKkV4ZWNTY2FuQWNjZXNzTXRkKSAoU2NhblN0 YXRlICpub2RlKTsKIHR5cGVkZWYgYm9vbCAoKkV4ZWNTY2FuUmVjaGVja010ZCkgKFNjYW5TdGF0 ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwordHlwZWRlZiBib29sICgqRXhlY1NjYW5T a2lwTXRkKSAoU2NhblN0YXRlICpub2RlKTsKIAogZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpFeGVj U2NhbihTY2FuU3RhdGUgKm5vZGUsIEV4ZWNTY2FuQWNjZXNzTXRkIGFjY2Vzc010ZCwKIAkJCQkJ CQkJRXhlY1NjYW5SZWNoZWNrTXRkIHJlY2hlY2tNdGQpOworZXh0ZXJuIFR1cGxlVGFibGVTbG90 ICpFeGVjU2NhbkV4dGVuZGVkKFNjYW5TdGF0ZSAqbm9kZSwgRXhlY1NjYW5BY2Nlc3NNdGQgYWNj ZXNzTXRkLAorCQkJCQkJCQlFeGVjU2NhblJlY2hlY2tNdGQgcmVjaGVja010ZCwKKwkJCQkJCQkJ RXhlY1NjYW5Ta2lwTXRkIHNraXBNdGQpOwogZXh0ZXJuIHZvaWQgRXhlY0Fzc2lnblNjYW5Qcm9q ZWN0aW9uSW5mbyhTY2FuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY0Fzc2lnblNjYW5Q cm9qZWN0aW9uSW5mb1dpdGhWYXJubyhTY2FuU3RhdGUgKm5vZGUsIGludCB2YXJubyk7CiBleHRl cm4gdm9pZCBFeGVjU2NhblJlU2NhbihTY2FuU3RhdGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCAyZThjYmVlNjlmLi40YTdjNzUwZDE4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTM3OSw2ICsxMzc5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2NhblN0YXRlCiAJUmVsYXRpb24Jc3Nf Y3VycmVudFJlbGF0aW9uOwogCXN0cnVjdCBUYWJsZVNjYW5EZXNjRGF0YSAqc3NfY3VycmVudFNj YW5EZXNjOwogCVR1cGxlVGFibGVTbG90ICpzc19TY2FuVHVwbGVTbG90OworCWJvb2wgc3NfRmly c3RUdXBsZUVtaXR0ZWQ7CiB9IFNjYW5TdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAt MTQ3NSw2ICsxNDc2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29u dGV4dCAqaXNzX1J1bnRpbWVDb250ZXh0OwogCVJlbGF0aW9uCWlzc19SZWxhdGlvbkRlc2M7CiAJ c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppc3NfU2NhbkRlc2M7CisJaW50CQkJaXNzX1NraXBQ cmVmaXhTaXplOworCWJvb2wJCWlzc19EaXN0aW5jdDsKIAogCS8qIFRoZXNlIGFyZSBuZWVkZWQg Zm9yIHJlLWNoZWNraW5nIE9SREVSIEJZIGV4cHIgb3JkZXJpbmcgKi8KIAlwYWlyaW5naGVhcCAq aXNzX1Jlb3JkZXJRdWV1ZTsKQEAgLTE1MDQsNiArMTUwNyw4IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhblN0YXRlCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBm ZXRjaGVkIGZyb20gdGhlIHRhYmxlCiAgKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9y IHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCisgKgkJU2tpcFByZWZpeFNpemUJ ICAgbnVtYmVyIG9mIGtleXMgZm9yIHNraXAtYmFzZWQgRElTVElOQ1QKKyAqCQlGaXJzdFR1cGxl RW1pdHRlZCAgaGFzIHRoZSBmaXJzdCB0dXBsZSBiZWVuIGVtaXR0ZWQKICAqIC0tLS0tLS0tLS0t LS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xNTIyLDYg KzE1MjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEgKmlvc3NfU2NhbkRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFi bGVTbG90OwogCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKKwlpbnQJCQlpb3NzX1NraXBQcmVmaXhT aXplOworCWJvb2wJCWlvc3NfRGlzdGluY3Q7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIH0gSW5k ZXhPbmx5U2NhblN0YXRlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDNhZTZiOTE1NzYuLjg3 MDQyMjIzYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC02OTksNiArNjk5LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUxpc3QgICAgICAgKnVuaXF1ZV9wYXRobGlzdDsgICAgLyog dW5pcXVlIFBhdGhzICovCiAJc3RydWN0IFBhdGggKmNoZWFwZXN0X3N0YXJ0dXBfcGF0aDsKIAlz dHJ1Y3QgUGF0aCAqY2hlYXBlc3RfdG90YWxfcGF0aDsKKwlzdHJ1Y3QgUGF0aCAqY2hlYXBlc3Rf ZGlzdGluY3RfdW5pcXVlX3BhdGg7CiAJc3RydWN0IFBhdGggKmNoZWFwZXN0X3VuaXF1ZV9wYXRo OwogCUxpc3QJICAgKmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHM7CiAKQEAgLTEyNjcsNiAr MTI2OCw5IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgKICAqIHdlIG5lZWQgbm90IHJlY29tcHV0ZSB0 aGVtIHdoZW4gY29uc2lkZXJpbmcgdXNpbmcgdGhlIHNhbWUgaW5kZXggaW4gYQogICogYml0bWFw IGluZGV4L2hlYXAgc2NhbiAoc2VlIEJpdG1hcEhlYXBQYXRoKS4gIFRoZSBjb3N0cyBvZiB0aGUg SW5kZXhQYXRoCiAgKiBpdHNlbGYgcmVwcmVzZW50IHRoZSBjb3N0cyBvZiBhbiBJbmRleFNjYW4g b3IgSW5kZXhPbmx5U2NhbiBwbGFuIHR5cGUuCisgKgorICogJ2luZGV4c2tpcHByZWZpeCcgcmVw cmVzZW50cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gY29uc2lkZXIgZm9yIHNraXAKKyAqIHNj YW5zLgogICotLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4UGF0aApAQCAtMTI3 OSw2ICsxMjgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhQYXRoCiAJU2NhbkRpcmVjdGlvbiBp bmRleHNjYW5kaXI7CiAJQ29zdAkJaW5kZXh0b3RhbGNvc3Q7CiAJU2VsZWN0aXZpdHkgaW5kZXhz ZWxlY3Rpdml0eTsKKwlpbnQJCQlpbmRleHNraXBwcmVmaXg7CisJYm9vbAkJaW5kZXhkaXN0aW5j dDsKIH0gSW5kZXhQYXRoOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAwMWEyNDZkNTBl Li43OWI3MGI5NDE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtNDExLDYgKzQxMSw4IEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4U2NhbgogCUxpc3QJICAgKmluZGV4b3JkZXJieW9yaWc7CS8qIHRo ZSBzYW1lIGluIG9yaWdpbmFsIGZvcm0gKi8KIAlMaXN0CSAgICppbmRleG9yZGVyYnlvcHM7CS8q IE9JRHMgb2Ygc29ydCBvcHMgZm9yIE9SREVSIEJZIGV4cHJzICovCiAJU2NhbkRpcmVjdGlvbiBp bmRleG9yZGVyZGlyOwkvKiBmb3J3YXJkIG9yIGJhY2t3YXJkIG9yIGRvbid0IGNhcmUgKi8KKwlp bnQJCQlpbmRleHNraXBwcmVmaXhzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgcHJlZml4IGZvciBz a2lwIHNjYW5zICovCisJYm9vbAkJaW5kZXhkaXN0aW5jdDsgLyogd2hldGhlciBvbmx5IGRpc3Rp bmN0IGtleXMgYXJlIHJlcXVlc3RlZCAqLwogfSBJbmRleFNjYW47CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KQEAgLTQzOCw2ICs0NDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuCiAJ TGlzdAkgICAqaW5kZXhvcmRlcmJ5OwkvKiBsaXN0IG9mIGluZGV4IE9SREVSIEJZIGV4cHJzICov CiAJTGlzdAkgICAqaW5kZXh0bGlzdDsJCS8qIFRhcmdldEVudHJ5IGxpc3QgZGVzY3JpYmluZyBp bmRleCdzIGNvbHMgKi8KIAlTY2FuRGlyZWN0aW9uIGluZGV4b3JkZXJkaXI7CS8qIGZvcndhcmQg b3IgYmFja3dhcmQgb3IgZG9uJ3QgY2FyZSAqLworCWludAkJCWluZGV4c2tpcHByZWZpeHNpemU7 CS8qIHRoZSBzaXplIG9mIHRoZSBwcmVmaXggZm9yIHNraXAgc2NhbnMgKi8KKwlib29sCQlpbmRl eGRpc3RpbmN0OyAvKiB3aGV0aGVyIG9ubHkgZGlzdGluY3Qga2V5cyBhcmUgcmVxdWVzdGVkICov CiB9IEluZGV4T25seVNjYW47CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2NCw2ICs0Njgs NyBAQCB0eXBlZGVmIHN0cnVjdCBCaXRtYXBJbmRleFNjYW4KIAlib29sCQlpc3NoYXJlZDsJCS8q IENyZWF0ZSBzaGFyZWQgYml0bWFwIGlmIHNldCAqLwogCUxpc3QJICAgKmluZGV4cXVhbDsJCS8q IGxpc3Qgb2YgaW5kZXggcXVhbHMgKE9wRXhwcnMpICovCiAJTGlzdAkgICAqaW5kZXhxdWFsb3Jp ZzsJLyogdGhlIHNhbWUgaW4gb3JpZ2luYWwgZm9ybSAqLworCWludAkJCWluZGV4c2tpcHByZWZp eHNpemU7CS8qIHRoZSBzaXplIG9mIHRoZSBwcmVmaXggZm9yIHNraXAgc2NhbnMgKi8KIH0gQml0 bWFwSW5kZXhTY2FuOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRl eCAyMTEzYmM4MmRlLi41NjFhYjAyM2UyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUwLDYgKzUw LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0 aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5k ZXhza2lwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfc29ydDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9w YXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggZmFjYjJk ZmU3NC4uMDM0M2IyZTFmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTIxNyw2ICsy MTcsMTAgQEAgZXh0ZXJuIFVwcGVyVW5pcXVlUGF0aCAqY3JlYXRlX3VwcGVyX3VuaXF1ZV9wYXRo KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIFBhdGggKnN1YnBhdGgsCiAJCQkJCQkJ CQkJCQkgaW50IG51bUNvbHMsCiAJCQkJCQkJCQkJCQkgZG91YmxlIG51bUdyb3Vwcyk7CitleHRl cm4gSW5kZXhQYXRoICpjcmVhdGVfc2tpcHNjYW5fdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCisJCQkJCQkJCQkJCSAgSW5kZXhPcHRJbmZvICppbmRleCwKKwkJCQkJCQkJCQkJICBQYXRo ICpzdWJwYXRoLAorCQkJCQkJCQkJCQkgIGludCBwcmVmaXgpOwogZXh0ZXJuIEFnZ1BhdGggKmNy ZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQlQYXRoICpzdWJwYXRoLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBlNzFlNjUy NjRhLi4zMmYwNTI3MDE5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMu aAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjEyLDYgKzIxMiwxMCBA QCBleHRlcm4gUGF0aCAqZ2V0X2NoZWFwZXN0X2ZyYWN0aW9uYWxfcGF0aF9mb3JfcGF0aGtleXMo TGlzdCAqcGF0aHMsCiAJCQkJCQkJCQkJCQkJICAgUmVsaWRzIHJlcXVpcmVkX291dGVyLAogCQkJ CQkJCQkJCQkJCSAgIGRvdWJsZSBmcmFjdGlvbik7CiBleHRlcm4gUGF0aCAqZ2V0X2NoZWFwZXN0 X3BhcmFsbGVsX3NhZmVfdG90YWxfaW5uZXIoTGlzdCAqcGF0aHMpOworZXh0ZXJuIGludCBmaW5k X2luZGV4X3ByZWZpeF9mb3JfcGF0aGtleShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJIEluZGV4 T3B0SW5mbyAqaW5kZXgsCisJCQkJCSBTY2FuRGlyZWN0aW9uIHNjYW5kaXIsCisJCQkJCSBQYXRo S2V5ICpwYXRoa2V5KTsKIGV4dGVybiBMaXN0ICpidWlsZF9pbmRleF9wYXRoa2V5cyhQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXhPcHRJbmZvICppbmRleCwKIAkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IHNjYW5kaXIpOwogZXh0ZXJuIExpc3QgKmJ1aWxkX3BhcnRpdGlvbl9wYXRoa2V5cyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFydHJlbCwKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2VuY25hbWVzLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9lbmNuYW1lcy5jCm5l dyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAuLmNhNzg2MThiNTUKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9lbmNuYW1lcy5jCkBAIC0wLDAgKzEgQEAK Ky4uLy4uLy4uL3NyYy9iYWNrZW5kL3V0aWxzL21iL2VuY25hbWVzLmMKXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS93Y2hhci5jIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvd2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAw MDAwMDAwMDAwLi5hMjc1MDhmNzJhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvd2NoYXIuYwpAQCAtMCwwICsxIEBACisuLi8uLi8uLi9zcmMvYmFja2VuZC91dGlscy9t Yi93Y2hhci5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CmluZGV4IDU4MTIyYzZmODguLmVjOThkYmY2 M2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQK QEAgLTM3NSwzICszNzUsNjAyIEBAIFNFTEVDVCBudWxsIElTIE5PVCBESVNUSU5DVCBGUk9NIG51 bGwgYXMgInllcyI7CiAgdAogKDEgcm93KQogCistLSBpbmRleCBvbmx5IHNraXAgc2NhbgorQ1JF QVRFIFRBQkxFIGRpc3RpbmN0X2EgKGEgaW50LCBiIGludCwgYyBpbnQpOworSU5TRVJUIElOVE8g ZGlzdGluY3RfYSAoCisgICAgU0VMRUNUIGZpdmUsIHRlbnRob3VzLCAxMCBGUk9NCisgICAgZ2Vu ZXJhdGVfc2VyaWVzKDEsIDUpIGZpdmUsCisgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSB0 ZW50aG91cworKTsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9hIChhLCBiKTsKK0FOQUxZWkUg ZGlzdGluY3RfYTsKK1NFTEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYTsKKyBhIAorLS0t CisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3MpCisKK1NFTEVDVCBESVNUSU5DVCBhIEZST00g ZGlzdGluY3RfYSBXSEVSRSBhID0gMTsKKyBhIAorLS0tCisgMQorKDEgcm93KQorCitTRUxFQ1Qg RElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDOworIGEgCistLS0KKyA1 CisgNAorIDMKKyAyCisgMQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hOworICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIGRp c3RpbmN0X2FfYV9iX2lkeCBvbiBkaXN0aW5jdF9hCisgICBTa2lwIHNjYW46IERpc3RpbmN0IG9u bHkKKygyIHJvd3MpCisKKy0tIHRlc3QgaW5kZXggc2tpcCBzY2FuIHdpdGggYSBjb25kaXRpb24g b24gYSBub24gdW5pcXVlIGZpZWxkCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBk aXN0aW5jdF9hIFdIRVJFIGIgPSAyOworIGEgfCBiIAorLS0tKy0tLQorIDEgfCAyCisgMiB8IDIK KyAzIHwgMgorIDQgfCAyCisgNSB8IDIKKyg1IHJvd3MpCisKKy0tIHRlc3QgaW5kZXggc2tpcCBz Y2FuIGJhY2t3YXJkcworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3Rf YSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQorIDUg fCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAxMDAwMAorIDEgfCAxMDAwMAor KDUgcm93cykKKworLS0gY2hlY2sgY29sdW1zIG9yZGVyCitDUkVBVEUgSU5ERVggZGlzdGluY3Rf YV9iX2Egb24gZGlzdGluY3RfYSAoYiwgYSk7CitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3Rp bmN0X2EgV0hFUkUgYiA9IDI7CisgYSAKKy0tLQorIDEKKyAyCisgMworIDQKKyA1CisoNSByb3dz KQorCitTRUxFQ1QgRElTVElOQ1Qgb24gKGEsIGIpIGEsIGIgRlJPTSBkaXN0aW5jdF9hIFdIRVJF IGIgPSAyOworIGEgfCBiIAorLS0tKy0tLQorIDEgfCAyCisgMiB8IDIKKyAzIHwgMgorIDQgfCAy CisgNSB8IDIKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5D VCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKyAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZGlzdGlu Y3RfYV9iX2Egb24gZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiBEaXN0aW5jdCBvbmx5CisgICBJ bmRleCBDb25kOiAoYiA9IDIpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgRElTVElOQ1Qgb24gKGEsIGIpIGEsIGIgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOwor ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBkaXN0aW5jdF9hX2JfYSBvbiBkaXN0aW5jdF9hCisgICBTa2lwIHNj YW46IERpc3RpbmN0IG9ubHkKKyAgIEluZGV4IENvbmQ6IChiID0gMikKKygzIHJvd3MpCisKK0RS T1AgSU5ERVggZGlzdGluY3RfYV9iX2E7CistLSB0ZXN0IG9wcG9zaXRlIHNjYW4vaW5kZXggZGly ZWN0aW9ucyBpbnNpZGUgYSBjdXJzb3IKKy0tIGZvcndhcmQvYmFja3dhcmQKK0JFR0lOOworREVD TEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYiBGUk9N IGRpc3RpbmN0X2EgT1JERVIgQlkgYSwgYjsKK0ZFVENIIEZST00gYzsKKyBhIHwgYiAKKy0tLSst LS0KKyAxIHwgMQorKDEgcm93KQorCitGRVRDSCBCQUNLV0FSRCBGUk9NIGM7CisgYSB8IGIgCist LS0rLS0tCisoMCByb3dzKQorCitGRVRDSCA2IEZST00gYzsKKyBhIHwgYiAKKy0tLSstLS0KKyAx IHwgMQorIDIgfCAxCisgMyB8IDEKKyA0IHwgMQorIDUgfCAxCisoNSByb3dzKQorCitGRVRDSCBC QUNLV0FSRCA2IEZST00gYzsKKyBhIHwgYiAKKy0tLSstLS0KKyA1IHwgMQorIDQgfCAxCisgMyB8 IDEKKyAyIHwgMQorIDEgfCAxCisoNSByb3dzKQorCitGRVRDSCA2IEZST00gYzsKKyBhIHwgYiAK Ky0tLSstLS0KKyAxIHwgMQorIDIgfCAxCisgMyB8IDEKKyA0IHwgMQorIDUgfCAxCisoNSByb3dz KQorCitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKyBhIHwgYiAKKy0tLSstLS0KKyA1IHwgMQor IDQgfCAxCisgMyB8IDEKKyAyIHwgMQorIDEgfCAxCisoNSByb3dzKQorCitFTkQ7CistLSBiYWNr d2FyZC9mb3J3YXJkCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNU IERJU1RJTkNUIE9OIChhKSBhLGIgRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGEgREVTQywgYiBE RVNDOworRkVUQ0ggRlJPTSBjOworIGEgfCAgIGIgICAKKy0tLSstLS0tLS0tCisgNSB8IDEwMDAw CisoMSByb3cpCisKK0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKyBhIHwgYiAKKy0tLSstLS0KKygw IHJvd3MpCisKK0ZFVENIIDYgRlJPTSBjOworIGEgfCAgIGIgICAKKy0tLSstLS0tLS0tCisgNSB8 IDEwMDAwCisgNCB8IDEwMDAwCisgMyB8IDEwMDAwCisgMiB8IDEwMDAwCisgMSB8IDEwMDAwCiso NSByb3dzKQorCitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKyBhIHwgICBiICAgCistLS0rLS0t LS0tLQorIDEgfCAxMDAwMAorIDIgfCAxMDAwMAorIDMgfCAxMDAwMAorIDQgfCAxMDAwMAorIDUg fCAxMDAwMAorKDUgcm93cykKKworRkVUQ0ggNiBGUk9NIGM7CisgYSB8ICAgYiAgIAorLS0tKy0t LS0tLS0KKyA1IHwgMTAwMDAKKyA0IHwgMTAwMDAKKyAzIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAx IHwgMTAwMDAKKyg1IHJvd3MpCisKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworIGEgfCAgIGIg ICAKKy0tLSstLS0tLS0tCisgMSB8IDEwMDAwCisgMiB8IDEwMDAwCisgMyB8IDEwMDAwCisgNCB8 IDEwMDAwCisgNSB8IDEwMDAwCisoNSByb3dzKQorCitFTkQ7CistLSB0ZXN0IG1pc3NpbmcgdmFs dWVzIGFuZCBza2lwcGluZyBmcm9tIHRoZSBlbmQKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9hYmMo YSBpbnQsIGIgaW50LCBjIGludCk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYWJjKGEsIGIs IGMpOworSU5TRVJUIElOVE8gZGlzdGluY3RfYWJjCisJVkFMVUVTICgxLCAxLCAxKSwKKwkJICAg KDEsIDEsIDIpLAorCQkgICAoMSwgMiwgMiksCisJCSAgICgxLCAyLCAzKSwKKwkJICAgKDIsIDIs IDEpLAorCQkgICAoMiwgMiwgMyksCisJCSAgICgzLCAxLCAxKSwKKwkJICAgKDMsIDEsIDIpLAor CQkgICAoMywgMiwgMiksCisJCSAgICgzLCAyLCAzKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDI7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZGlzdGluY3RfYWJjX2FfYl9j X2lkeCBvbiBkaXN0aW5jdF9hYmMKKyAgIFNraXAgc2NhbjogRGlzdGluY3Qgb25seQorICAgSW5k ZXggQ29uZDogKGMgPSAyKQorKDMgcm93cykKKworQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENV UlNPUiBGT1IKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMg V0hFUkUgYyA9IDI7CitGRVRDSCBBTEwgRlJPTSBjOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0t CisgMSB8IDEgfCAyCisgMyB8IDEgfCAyCisoMiByb3dzKQorCitGRVRDSCBCQUNLV0FSRCBBTEwg RlJPTSBjOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMyB8IDEgfCAyCisgMSB8IDEgfCAy CisoMiByb3dzKQorCitFTkQ7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1Qg T04gKGEpIGEsYixjIEZST00gZGlzdGluY3RfYWJjIFdIRVJFIGMgPSAyCitPUkRFUiBCWSBhIERF U0MsIGIgREVTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiBCYWNrd2FyZCB1c2luZyBkaXN0aW5jdF9hYmNfYV9iX2NfaWR4IG9uIGRpc3RpbmN0X2Fi YworICAgU2tpcCBzY2FuOiBEaXN0aW5jdCBvbmx5CisgICBJbmRleCBDb25kOiAoYyA9IDIpCiso MyByb3dzKQorCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIERJ U1RJTkNUIE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMgorT1JERVIg QlkgYSBERVNDLCBiIERFU0M7CitGRVRDSCBBTEwgRlJPTSBjOworIGEgfCBiIHwgYyAKKy0tLSst LS0rLS0tCisgMyB8IDIgfCAyCisgMSB8IDIgfCAyCisoMiByb3dzKQorCitGRVRDSCBCQUNLV0FS RCBBTEwgRlJPTSBjOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMSB8IDIgfCAyCisgMyB8 IDIgfCAyCisoMiByb3dzKQorCitFTkQ7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2FiYzsKKy0tIGlu ZGV4IHNraXAgc2NhbgorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiLCBjCitGUk9NIGRpc3Rp bmN0X2EgT1JERVIgQlkgYTsKKyBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0tCisgMSB8IDEgfCAx MAorIDIgfCAxIHwgMTAKKyAzIHwgMSB8IDEwCisgNCB8IDEgfCAxMAorIDUgfCAxIHwgMTAKKyg1 IHJvd3MpCisKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwgYworRlJPTSBkaXN0aW5jdF9h IFdIRVJFIGEgPSAxIE9SREVSIEJZIGE7CisgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tLQorIDEg fCAxIHwgMTAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYTsKKyAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBk aXN0aW5jdF9hX2FfYl9pZHggb24gZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiBEaXN0aW5jdCBv bmx5CisoMiByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgT04g KGEpIGEsIGIsIGMKK0ZST00gZGlzdGluY3RfYSBXSEVSRSBhID0gMSBPUkRFUiBCWSBhOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIGRpc3RpbmN0X2FfYV9iX2lkeCBvbiBkaXN0aW5jdF9hCisgICBTa2lwIHNjYW46IERp c3RpbmN0IG9ubHkKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKygzIHJvd3MpCisKKy0tIGNoZWNr IGNvbHVtcyBvcmRlcgorU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIg PSAyIEFORCBjID0gMTA7CisgYSAKKy0tLQorIDEKKyAyCisgMworIDQKKyA1CisoNSByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2Eg V0hFUkUgYiA9IDIgQU5EIGMgPSAxMDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBkaXN0aW5jdF9hX2FfYl9pZHggb24g ZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiBEaXN0aW5jdCBvbmx5CisgICBJbmRleCBDb25kOiAo YiA9IDIpCisgICBGaWx0ZXI6IChjID0gMTApCisoNCByb3dzKQorCistLSBjaGVjayBwcm9qZWN0 aW9uIGNhc2UKK1NFTEVDVCBESVNUSU5DVCBhLCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0g MjsKKyBhIHwgYSAKKy0tLSstLS0KKyAxIHwgMQorIDIgfCAyCisgMyB8IDMKKyA0IHwgNAorIDUg fCA1CisoNSByb3dzKQorCitTRUxFQ1QgRElTVElOQ1QgYSwgMSBGUk9NIGRpc3RpbmN0X2EgV0hF UkUgYiA9IDI7CisgYSB8ID9jb2x1bW4/IAorLS0tKy0tLS0tLS0tLS0KKyAxIHwgICAgICAgIDEK KyAyIHwgICAgICAgIDEKKyAzIHwgICAgICAgIDEKKyA0IHwgICAgICAgIDEKKyA1IHwgICAgICAg IDEKKyg1IHJvd3MpCisKKy0tIHRlc3QgY3Vyc29yIGZvcndhcmQvYmFja3dhcmQgbW92ZW1lbnRz CitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUiBTRUxFQ1QgRElTVElOQ1QgYSBG Uk9NIGRpc3RpbmN0X2E7CitGRVRDSCBGUk9NIGM7CisgYSAKKy0tLQorIDEKKygxIHJvdykKKwor RkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworIGEgCistLS0KKygwIHJvd3MpCisKK0ZFVENIIDYgRlJP TSBjOworIGEgCistLS0KKyAxCisgMgorIDMKKyA0CisgNQorKDUgcm93cykKKworRkVUQ0ggQkFD S1dBUkQgNiBGUk9NIGM7CisgYSAKKy0tLQorIDUKKyA0CisgMworIDIKKyAxCisoNSByb3dzKQor CitGRVRDSCA2IEZST00gYzsKKyBhIAorLS0tCisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3Mp CisKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworIGEgCistLS0KKyA1CisgNAorIDMKKyAyCisg MQorKDUgcm93cykKKworRU5EOworRFJPUCBUQUJMRSBkaXN0aW5jdF9hOworLS0gdGVzdCB0dXBs ZXMgdmlzaWJpbGl0eQorQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X3Zpc2liaWxpdHkgKGEgaW50LCBi IGludCk7CitJTlNFUlQgSU5UTyBkaXN0aW5jdF92aXNpYmlsaXR5IChzZWxlY3QgYSwgYiBmcm9t IGdlbmVyYXRlX3NlcmllcygxLDUpIGEsIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgYik7CitD UkVBVEUgSU5ERVggT04gZGlzdGluY3RfdmlzaWJpbGl0eSAoYSwgYik7CitBTkFMWVpFIGRpc3Rp bmN0X3Zpc2liaWxpdHk7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5j dF92aXNpYmlsaXR5IE9SREVSIEJZIGEsIGI7CisgYSB8IGIgCistLS0rLS0tCisgMSB8IDEKKyAy IHwgMQorIDMgfCAxCisgNCB8IDEKKyA1IHwgMQorKDUgcm93cykKKworREVMRVRFIEZST00gZGlz dGluY3RfdmlzaWJpbGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDE7CitTRUxFQ1QgRElTVElOQ1Qg T04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZIGEsIGI7CisgYSB8 IGIgCistLS0rLS0tCisgMSB8IDEKKyAyIHwgMgorIDMgfCAxCisgNCB8IDEKKyA1IHwgMQorKDUg cm93cykKKworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJp bGl0eSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQor IDUgfCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAxMDAwMAorIDEgfCAxMDAw MAorKDUgcm93cykKKworREVMRVRFIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBXSEVSRSBhID0g MiBhbmQgYiA9IDEwMDAwOworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGlu Y3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyBhIHwgICBiICAgCistLS0r LS0tLS0tLQorIDUgfCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAgOTk5OQor IDEgfCAxMDAwMAorKDUgcm93cykKKworRFJPUCBUQUJMRSBkaXN0aW5jdF92aXNpYmlsaXR5Owor LS0gdGVzdCBwYWdlIGJvdW5kYXJpZXMKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ib3VuZGFyaWVz IEFTCisgICAgU0VMRUNUIGEsIGI6OmludDIgYiwgKGIgJSAyKTo6aW50MiBjIEZST00KKyAgICAg ICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGEsCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDM2 NikgYjsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9ib3VuZGFyaWVzIChhLCBiLCBjKTsKK0FO QUxZWkUgZGlzdGluY3RfYm91bmRhcmllczsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBE SVNUSU5DVCBPTiAoYSkgYSwgYiwgYyBmcm9tIGRpc3RpbmN0X2JvdW5kYXJpZXMKK1dIRVJFIGIg Pj0gMSBhbmQgYyA9IDAgT1JERVIgQlkgYSwgYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZGlzdGluY3RfYm91bmRhcmll c19hX2JfY19pZHggb24gZGlzdGluY3RfYm91bmRhcmllcworICAgU2tpcCBzY2FuOiBEaXN0aW5j dCBvbmx5CisgICBJbmRleCBDb25kOiAoKGIgPj0gMSkgQU5EIChjID0gMCkpCisoMyByb3dzKQor CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIsIGMgZnJvbSBkaXN0aW5jdF9ib3VuZGFyaWVz CitXSEVSRSBiID49IDEgYW5kIGMgPSAwIE9SREVSIEJZIGEsIGI7CisgYSB8IGIgfCBjIAorLS0t Ky0tLSstLS0KKyAxIHwgMiB8IDAKKyAyIHwgMiB8IDAKKyAzIHwgMiB8IDAKKyA0IHwgMiB8IDAK KyA1IHwgMiB8IDAKKyg1IHJvd3MpCisKK0RST1AgVEFCTEUgZGlzdGluY3RfYm91bmRhcmllczsK Ky0tIHRlc3QgdHVwbGUga2lsbGluZworLS0gREVTQyBvcmRlcmluZworQ1JFQVRFIFRBQkxFIGRp c3RpbmN0X2tpbGxlZCBBUworICAgIFNFTEVDVCBhLCBiLCBiICUgMiBBUyBjLCAxMCBBUyBkCisg ICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGEsCisgICAgICAgICAgICAgZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMCkgYjsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9raWxsZWQgKGEs IGIsIGMsIGQpOworREVMRVRFIEZST00gZGlzdGluY3Rfa2lsbGVkIHdoZXJlIGEgPSAzOworQkVH SU47CisgICAgREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCisgICAgU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLGIsYyxkCisgICAgRlJPTSBkaXN0aW5jdF9raWxsZWQgT1JERVIgQlkgYSBERVND LCBiIERFU0M7CisgICAgRkVUQ0ggRk9SV0FSRCBBTEwgRlJPTSBjOworIGEgfCAgYiAgIHwgYyB8 IGQgIAorLS0tKy0tLS0tLSstLS0rLS0tLQorIDUgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAg fCAwIHwgMTAKKyAyIHwgMTAwMCB8IDAgfCAxMAorIDEgfCAxMDAwIHwgMCB8IDEwCisoNCByb3dz KQorCisgICAgRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsKKyBhIHwgIGIgICB8IGMgfCBkICAK Ky0tLSstLS0tLS0rLS0tKy0tLS0KKyAxIHwgMTAwMCB8IDAgfCAxMAorIDIgfCAxMDAwIHwgMCB8 IDEwCisgNCB8IDEwMDAgfCAwIHwgMTAKKyA1IHwgMTAwMCB8IDAgfCAxMAorKDQgcm93cykKKwor Q09NTUlUOworRFJPUCBUQUJMRSBkaXN0aW5jdF9raWxsZWQ7CistLSByZWd1bGFyIG9yZGVyaW5n CitDUkVBVEUgVEFCTEUgZGlzdGluY3Rfa2lsbGVkIEFTCisgICAgU0VMRUNUIGEsIGIsIGIgJSAy IEFTIGMsIDEwIEFTIGQKKyAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgYSwKKyAg ICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBiOworQ1JFQVRFIElOREVYIE9OIGRp c3RpbmN0X2tpbGxlZCAoYSwgYiwgYywgZCk7CitERUxFVEUgRlJPTSBkaXN0aW5jdF9raWxsZWQg d2hlcmUgYSA9IDM7CitCRUdJTjsKKyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKKyAg ICBTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQKKyAgICBGUk9NIGRpc3RpbmN0X2tpbGxl ZCBPUkRFUiBCWSBhLCBiOworICAgIEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsKKyBhIHwgYiB8 IGMgfCBkICAKKy0tLSstLS0rLS0tKy0tLS0KKyAxIHwgMSB8IDEgfCAxMAorIDIgfCAxIHwgMSB8 IDEwCisgNCB8IDEgfCAxIHwgMTAKKyA1IHwgMSB8IDEgfCAxMAorKDQgcm93cykKKworICAgIEZF VENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CisgYSB8IGIgfCBjIHwgZCAgCistLS0rLS0tKy0tLSst LS0tCisgNSB8IDEgfCAxIHwgMTAKKyA0IHwgMSB8IDEgfCAxMAorIDIgfCAxIHwgMSB8IDEwCisg MSB8IDEgfCAxIHwgMTAKKyg0IHJvd3MpCisKK0NPTU1JVDsKK0RST1AgVEFCTEUgZGlzdGluY3Rf a2lsbGVkOworLS0gcGFydGlhbCBkZWxldGUKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9raWxsZWQg QVMKKyAgICBTRUxFQ1QgYSwgYiwgYiAlIDIgQVMgYywgMTAgQVMgZAorICAgICAgICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1KSBhLAorICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGI7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3Rfa2lsbGVkIChhLCBiLCBjLCBkKTsKK0RF TEVURSBGUk9NIGRpc3RpbmN0X2tpbGxlZCBXSEVSRSBhID0gMyBBTkQgYiA8PSA5OTk7CitCRUdJ TjsKKyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1Qg T04gKGEpIGEsYixjLGQKKyAgICBGUk9NIGRpc3RpbmN0X2tpbGxlZCBPUkRFUiBCWSBhIERFU0Ms IGIgREVTQzsKKyAgICBGRVRDSCBGT1JXQVJEIEFMTCBGUk9NIGM7CisgYSB8ICBiICAgfCBjIHwg ZCAgCistLS0rLS0tLS0tKy0tLSstLS0tCisgNSB8IDEwMDAgfCAwIHwgMTAKKyA0IHwgMTAwMCB8 IDAgfCAxMAorIDMgfCAxMDAwIHwgMCB8IDEwCisgMiB8IDEwMDAgfCAwIHwgMTAKKyAxIHwgMTAw MCB8IDAgfCAxMAorKDUgcm93cykKKworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7Cisg YSB8ICBiICAgfCBjIHwgZCAgCistLS0rLS0tLS0tKy0tLSstLS0tCisgMSB8IDEwMDAgfCAwIHwg MTAKKyAyIHwgMTAwMCB8IDAgfCAxMAorIDMgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAgfCAw IHwgMTAKKyA1IHwgMTAwMCB8IDAgfCAxMAorKDUgcm93cykKKworQ09NTUlUOworRFJPUCBUQUJM RSBkaXN0aW5jdF9raWxsZWQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0Cmlu ZGV4IDZlNTRmM2UxNWUuLjI4MmNhZTIxYjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0CkBAIC0xMDMsNiArMTAzLDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBw Z19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRh bF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAgICAgIHwgb24K ICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9pbmRleHNraXBz Y2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAgICAgICAgIHwgb24K ICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZXJnZWpvaW4g ICAgICAgICAgICAgICB8IG9uCkBAIC0xMTUsNyArMTE2LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRp bmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9z ZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDIwIHJvd3Mp CisoMjEgcm93cykKIAogLS0gVGVzdCB0aGF0IHRoZSBwZ190aW1lem9uZV9uYW1lcyBhbmQgcGdf dGltZXpvbmVfYWJicmV2cyB2aWV3cyBhcmUKIC0tIG1vcmUtb3ItbGVzcyB3b3JraW5nLiAgV2Ug Y2FuJ3QgdGVzdCB0aGVpciBjb250ZW50cyBpbiBhbnkgZ3JlYXQgZGV0YWlsCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAppbmRleCAxYmZlNTljMjZmLi43MDhhYTJhNzQ2 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKQEAgLTE3NCwzICsx NzQsMjUxIEBAIFNFTEVDVCAxIElTIE5PVCBESVNUSU5DVCBGUk9NIDIgYXMgIm5vIjsKIFNFTEVD VCAyIElTIE5PVCBESVNUSU5DVCBGUk9NIDIgYXMgInllcyI7CiBTRUxFQ1QgMiBJUyBOT1QgRElT VElOQ1QgRlJPTSBudWxsIGFzICJubyI7CiBTRUxFQ1QgbnVsbCBJUyBOT1QgRElTVElOQ1QgRlJP TSBudWxsIGFzICJ5ZXMiOworCistLSBpbmRleCBvbmx5IHNraXAgc2NhbgorQ1JFQVRFIFRBQkxF IGRpc3RpbmN0X2EgKGEgaW50LCBiIGludCwgYyBpbnQpOworSU5TRVJUIElOVE8gZGlzdGluY3Rf YSAoCisgICAgU0VMRUNUIGZpdmUsIHRlbnRob3VzLCAxMCBGUk9NCisgICAgZ2VuZXJhdGVfc2Vy aWVzKDEsIDUpIGZpdmUsCisgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSB0ZW50aG91cwor KTsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9hIChhLCBiKTsKK0FOQUxZWkUgZGlzdGluY3Rf YTsKKworU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hOworU0VMRUNUIERJU1RJTkNU IGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGEgPSAxOworU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBk aXN0aW5jdF9hIE9SREVSIEJZIGEgREVTQzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hOworCistLSB0ZXN0IGluZGV4IHNraXAgc2NhbiB3 aXRoIGEgY29uZGl0aW9uIG9uIGEgbm9uIHVuaXF1ZSBmaWVsZAorU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKworLS0gdGVzdCBpbmRleCBz a2lwIHNjYW4gYmFja3dhcmRzCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0 aW5jdF9hIE9SREVSIEJZIGEgREVTQywgYiBERVNDOworCistLSBjaGVjayBjb2x1bXMgb3JkZXIK K0NSRUFURSBJTkRFWCBkaXN0aW5jdF9hX2JfYSBvbiBkaXN0aW5jdF9hIChiLCBhKTsKKworU0VM RUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOworU0VMRUNUIERJU1RJ TkNUIG9uIChhLCBiKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIg PSAyOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1Qgb24gKGEsIGIpIGEs IGIgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOworCitEUk9QIElOREVYIGRpc3RpbmN0X2Ff Yl9hOworCistLSB0ZXN0IG9wcG9zaXRlIHNjYW4vaW5kZXggZGlyZWN0aW9ucyBpbnNpZGUgYSBj dXJzb3IKKy0tIGZvcndhcmQvYmFja3dhcmQKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJT T1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIg QlkgYSwgYjsKKworRkVUQ0ggRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworCitGRVRD SCA2IEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitGRVRDSCA2IEZST00gYzsK K0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitFTkQ7CisKKy0tIGJhY2t3YXJkL2ZvcndhcmQK K0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04g KGEpIGEsYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisKK0ZFVENI IEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKworRkVUQ0ggNiBGUk9NIGM7CitGRVRD SCBCQUNLV0FSRCA2IEZST00gYzsKKworRkVUQ0ggNiBGUk9NIGM7CitGRVRDSCBCQUNLV0FSRCA2 IEZST00gYzsKKworRU5EOworCistLSB0ZXN0IG1pc3NpbmcgdmFsdWVzIGFuZCBza2lwcGluZyBm cm9tIHRoZSBlbmQKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9hYmMoYSBpbnQsIGIgaW50LCBjIGlu dCk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYWJjKGEsIGIsIGMpOworSU5TRVJUIElOVE8g ZGlzdGluY3RfYWJjCisJVkFMVUVTICgxLCAxLCAxKSwKKwkJICAgKDEsIDEsIDIpLAorCQkgICAo MSwgMiwgMiksCisJCSAgICgxLCAyLCAzKSwKKwkJICAgKDIsIDIsIDEpLAorCQkgICAoMiwgMiwg MyksCisJCSAgICgzLCAxLCAxKSwKKwkJICAgKDMsIDEsIDIpLAorCQkgICAoMywgMiwgMiksCisJ CSAgICgzLCAyLCAzKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMjsKKworQkVHSU47CitERUNM QVJFIGMgU0NST0xMIENVUlNPUiBGT1IKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJP TSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDI7CisKK0ZFVENIIEFMTCBGUk9NIGM7CitGRVRDSCBC QUNLV0FSRCBBTEwgRlJPTSBjOworCitFTkQ7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDIKK09S REVSIEJZIGEgREVTQywgYiBERVNDOworCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09S IEZPUgorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVS RSBjID0gMgorT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisKK0ZFVENIIEFMTCBGUk9NIGM7CitG RVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworCitFTkQ7CisKK0RST1AgVEFCTEUgZGlzdGluY3Rf YWJjOworCistLSBpbmRleCBza2lwIHNjYW4KK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwg YworRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGE7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEs IGIsIGMKK0ZST00gZGlzdGluY3RfYSBXSEVSRSBhID0gMSBPUkRFUiBCWSBhOworCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIsIGMKK0ZST00gZGlzdGlu Y3RfYSBPUkRFUiBCWSBhOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDEgT1JERVIgQlkgYTsKKwor LS0gY2hlY2sgY29sdW1zIG9yZGVyCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2Eg V0hFUkUgYiA9IDIgQU5EIGMgPSAxMDsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJ U1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyIEFORCBjID0gMTA7CisKKy0tIGNo ZWNrIHByb2plY3Rpb24gY2FzZQorU0VMRUNUIERJU1RJTkNUIGEsIGEgRlJPTSBkaXN0aW5jdF9h IFdIRVJFIGIgPSAyOworU0VMRUNUIERJU1RJTkNUIGEsIDEgRlJPTSBkaXN0aW5jdF9hIFdIRVJF IGIgPSAyOworCistLSB0ZXN0IGN1cnNvciBmb3J3YXJkL2JhY2t3YXJkIG1vdmVtZW50cworQkVH SU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBk aXN0aW5jdF9hOworCitGRVRDSCBGUk9NIGM7CitGRVRDSCBCQUNLV0FSRCBGUk9NIGM7CisKK0ZF VENIIDYgRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisKK0ZFVENIIDYgRlJPTSBj OworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisKK0VORDsKKworRFJPUCBUQUJMRSBkaXN0aW5j dF9hOworCistLSB0ZXN0IHR1cGxlcyB2aXNpYmlsaXR5CitDUkVBVEUgVEFCTEUgZGlzdGluY3Rf dmlzaWJpbGl0eSAoYSBpbnQsIGIgaW50KTsKK0lOU0VSVCBJTlRPIGRpc3RpbmN0X3Zpc2liaWxp dHkgKHNlbGVjdCBhLCBiIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgYSwgZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMDAwKSBiKTsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF92aXNpYmlsaXR5IChh LCBiKTsKK0FOQUxZWkUgZGlzdGluY3RfdmlzaWJpbGl0eTsKKworU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhLCBiOworREVMRVRF IEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDE7CitTRUxFQ1Qg RElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZIGEs IGI7CisKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X3Zpc2liaWxp dHkgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CitERUxFVEUgRlJPTSBkaXN0aW5jdF92aXNpYmls aXR5IFdIRVJFIGEgPSAyIGFuZCBiID0gMTAwMDA7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEs IGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZIGEgREVTQywgYiBERVNDOworRFJP UCBUQUJMRSBkaXN0aW5jdF92aXNpYmlsaXR5OworCistLSB0ZXN0IHBhZ2UgYm91bmRhcmllcwor Q1JFQVRFIFRBQkxFIGRpc3RpbmN0X2JvdW5kYXJpZXMgQVMKKyAgICBTRUxFQ1QgYSwgYjo6aW50 MiBiLCAoYiAlIDIpOjppbnQyIGMgRlJPTQorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkg YSwKKyAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMzY2KSBiOworCitDUkVBVEUgSU5ERVggT04g ZGlzdGluY3RfYm91bmRhcmllcyAoYSwgYiwgYyk7CitBTkFMWVpFIGRpc3RpbmN0X2JvdW5kYXJp ZXM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwg YyBmcm9tIGRpc3RpbmN0X2JvdW5kYXJpZXMKK1dIRVJFIGIgPj0gMSBhbmQgYyA9IDAgT1JERVIg QlkgYSwgYjsKKworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiLCBjIGZyb20gZGlzdGluY3Rf Ym91bmRhcmllcworV0hFUkUgYiA+PSAxIGFuZCBjID0gMCBPUkRFUiBCWSBhLCBiOworCitEUk9Q IFRBQkxFIGRpc3RpbmN0X2JvdW5kYXJpZXM7CisKKy0tIHRlc3QgdHVwbGUga2lsbGluZworCist LSBERVNDIG9yZGVyaW5nCitDUkVBVEUgVEFCTEUgZGlzdGluY3Rfa2lsbGVkIEFTCisgICAgU0VM RUNUIGEsIGIsIGIgJSAyIEFTIGMsIDEwIEFTIGQKKyAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgNSkgYSwKKyAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBiOworCitD UkVBVEUgSU5ERVggT04gZGlzdGluY3Rfa2lsbGVkIChhLCBiLCBjLCBkKTsKKworREVMRVRFIEZS T00gZGlzdGluY3Rfa2lsbGVkIHdoZXJlIGEgPSAzOworCitCRUdJTjsKKyAgICBERUNMQVJFIGMg U0NST0xMIENVUlNPUiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQKKyAg ICBGUk9NIGRpc3RpbmN0X2tpbGxlZCBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyAgICBGRVRD SCBGT1JXQVJEIEFMTCBGUk9NIGM7CisgICAgRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsKK0NP TU1JVDsKKworRFJPUCBUQUJMRSBkaXN0aW5jdF9raWxsZWQ7CisKKy0tIHJlZ3VsYXIgb3JkZXJp bmcKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9raWxsZWQgQVMKKyAgICBTRUxFQ1QgYSwgYiwgYiAl IDIgQVMgYywgMTAgQVMgZAorICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBhLAor ICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGI7CisKK0NSRUFURSBJTkRFWCBP TiBkaXN0aW5jdF9raWxsZWQgKGEsIGIsIGMsIGQpOworCitERUxFVEUgRlJPTSBkaXN0aW5jdF9r aWxsZWQgd2hlcmUgYSA9IDM7CisKK0JFR0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09S IEZPUgorICAgIFNFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMsZAorICAgIEZST00gZGlzdGlu Y3Rfa2lsbGVkIE9SREVSIEJZIGEsIGI7CisgICAgRkVUQ0ggRk9SV0FSRCBBTEwgRlJPTSBjOwor ICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CitDT01NSVQ7CisKK0RST1AgVEFCTEUgZGlz dGluY3Rfa2lsbGVkOworCistLSBwYXJ0aWFsIGRlbGV0ZQorQ1JFQVRFIFRBQkxFIGRpc3RpbmN0 X2tpbGxlZCBBUworICAgIFNFTEVDVCBhLCBiLCBiICUgMiBBUyBjLCAxMCBBUyBkCisgICAgICAg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGEsCisgICAgICAgICAgICAgZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMCkgYjsKKworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2tpbGxlZCAoYSwgYiwg YywgZCk7CisKK0RFTEVURSBGUk9NIGRpc3RpbmN0X2tpbGxlZCBXSEVSRSBhID0gMyBBTkQgYiA8 PSA5OTk7CisKK0JFR0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorICAgIFNF TEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMsZAorICAgIEZST00gZGlzdGluY3Rfa2lsbGVkIE9S REVSIEJZIGEgREVTQywgYiBERVNDOworICAgIEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsKKyAg ICBGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworQ09NTUlUOworCitEUk9QIFRBQkxFIGRpc3Rp bmN0X2tpbGxlZDsKLS0gCjIuMjkuMgoK --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_ Content-Type: application/octet-stream; name="v2-0003-Support-skip-scan-for-non-distinct-scans.patch" Content-Description: v2-0003-Support-skip-scan-for-non-distinct-scans.patch Content-Disposition: attachment; filename="v2-0003-Support-skip-scan-for-non-distinct-scans.patch"; size=19299; creation-date="Sat, 23 Oct 2021 13:03:59 GMT"; modification-date="Sat, 23 Oct 2021 13:03:59 GMT" Content-Transfer-Encoding: base64 RnJvbSBlM2JjOTIxYWQ5NGM4MmM2Nzc4ODZjMmJhZWY5YTQ4NzZmNmZhZWVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaXMgdmFuIE5lZSA8ZmxvcmlzLnZhbm5lZUBnbWFpbC5j b20+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjAgMTA6Mjc6NDcgKzAxMDAKU3ViamVjdDogW1BBVENI IDUvNV0gU3VwcG9ydCBza2lwIHNjYW4gZm9yIG5vbi1kaXN0aW5jdCBzY2FucwoKQWRkcyBwbGFu bmVyIHN1cHBvcnQgdG8gY2hvb3NlIGEgc2tpcCBzY2FuIGZvciByZWd1bGFyCm5vbi1kaXN0aW5j dCBxdWVyaWVzIGxpa2U6ClNFTEVDVCAqIEZST00gdDEgV0hFUkUgYj0xICh3aXRoIGluZGV4IG9u IChhLGIpKQotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgfCAxODEg KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgfCAxNTMgKysr KysrKysrKysrKysrKysrKystLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAg ICB8ICAgMyArLQogNSBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGgu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggYmEyZGQzMGEx My4uZDRkM2UxYzdlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0x OTIsNiArMTkyLDE3IEBAIHN0YXRpYyBFeHByICptYXRjaF9jbGF1c2VfdG9fb3JkZXJpbmdfb3Ao SW5kZXhPcHRJbmZvICppbmRleCwKIHN0YXRpYyBib29sIGVjX21lbWJlcl9tYXRjaGVzX2luZGV4 Y29sKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgICBFcXVp dmFsZW5jZUNsYXNzICplYywgRXF1aXZhbGVuY2VNZW1iZXIgKmVtLAogCQkJCQkJCQkJICAgdm9p ZCAqYXJnKTsKK3N0YXRpYyBMaXN0KiBhZGRfcG9zc2libGVfaW5kZXhfc2tpcF9wYXRocyhMaXN0 KiByZXN1bHQsCisJCQkJCQkJCQkJICBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgIElu ZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkJCQkJICBMaXN0ICppbmRleGNsYXVzZXMsCisJCQkJ CQkJCQkJICBMaXN0ICppbmRleG9yZGVyYnlzLAorCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhvcmRl cmJ5Y29scywKKwkJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLAorCQkJCQkJCQkJCSAgU2NhbkRp cmVjdGlvbiBpbmRleHNjYW5kaXIsCisJCQkJCQkJCQkJICBib29sIGluZGV4b25seSwKKwkJCQkJ CQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRlciwKKwkJCQkJCQkJCQkgIGRvdWJsZSBsb29wX2Nv dW50KTsKIAogCiAvKgpAQCAtODIwLDYgKzgzMSwxMzYgQEAgZ2V0X2luZGV4X3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJfQogfQogCisvKgorICogRmluZCBhdmFp bGFibGUgaW5kZXggc2tpcCBwYXRocyBhbmQgYWRkIHRoZW0gdG8gdGhlIHBhdGggbGlzdAorICov CitzdGF0aWMgTGlzdCogYWRkX3Bvc3NpYmxlX2luZGV4X3NraXBfcGF0aHMoTGlzdCogcmVzdWx0 LAorCQkJCQkJCQkJCSAgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICBJbmRleE9wdElu Zm8gKmluZGV4LAorCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhjbGF1c2VzLAorCQkJCQkJCQkJCSAg TGlzdCAqaW5kZXhvcmRlcmJ5cywKKwkJCQkJCQkJCQkgIExpc3QgKmluZGV4b3JkZXJieWNvbHMs CisJCQkJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywKKwkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24g aW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCSAgYm9vbCBpbmRleG9ubHksCisJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCisJCQkJCQkJCQkJICBkb3VibGUgbG9vcF9jb3VudCkKK3sK KwlpbnQJCQlpbmRleGNvbDsKKwlib29sCQllcVF1YWxIZXJlOworCWJvb2wJCWVxUXVhbFByZXY7 CisJYm9vbAkJZXFTb0ZhcjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogV2UgbmVlZCB0 byBmaW5kIHBvc3NpYmxlIHByZWZpeGVzIHRvIHVzZSBmb3IgdGhlIHNraXAgc2NhbgorCSAqIEFu eSB1c2VmdWwgcHJlZml4IGlzIG9uZSBqdXN0IGJlZm9yZSBhbiBpbmRleCBjbGF1c2UsIHVubGVz cworCSAqIGFsbCBjbGF1c2VzIHNvIGZhciBoYXZlIGJlZW4gZXF1YWwuCisJICogRm9yIGV4YW1w bGUsIG9uIGFuIGluZGV4IChhLGIsYyksIHRoZSBxdWFsIGI9MSB3b3VsZAorCSAqIG1lYW4gdGhh dCBhbiBpbnRlcmVzdGluZyBza2lwIHByZWZpeCBjb3VsZCBiZSAxLgorCSAqIEZvciBxdWFsIGE9 MSBBTkQgYj0xLCBpdCBpcyBub3QgaW50ZXJlc3RpbmcgdG8gc2tpcCB3aXRoCisJICogcHJlZml4 IDEsIGJlY2F1c2UgdGhlIHZhbHVlIG9mIGEgaXMgZml4ZWQgYWxyZWFkeS4KKwkgKi8KKwlpbmRl eGNvbCA9IDA7CisJZXFRdWFsSGVyZSA9IGZhbHNlOworCWVxUXVhbFByZXYgPSBmYWxzZTsKKwll cVNvRmFyID0gdHJ1ZTsKKwlmb3JlYWNoKGxjLCBpbmRleGNsYXVzZXMpCisJeworCQlJbmRleENs YXVzZSAqaWNsYXVzZSA9IGxmaXJzdF9ub2RlKEluZGV4Q2xhdXNlLCBsYyk7CisJCUxpc3RDZWxs ICAgKmxjMjsKKworCQlpZiAoaW5kZXhjb2wgIT0gaWNsYXVzZS0+aW5kZXhjb2wpCisJCXsKKwkJ CWlmICghZXFRdWFsSGVyZSB8fCBpbmRleGNvbCAhPSBpY2xhdXNlLT5pbmRleGNvbCAtIDEpCisJ CQkJZXFTb0ZhciA9IGZhbHNlOworCisJCQkvKiBCZWdpbm5pbmcgb2YgYSBuZXcgY29sdW1uJ3Mg cXVhbHMgKi8KKwkJCWlmICghZXFRdWFsUHJldiAmJiAhZXFTb0ZhcikKKwkJCXsKKwkJCQkvKiBX ZSBoYXZlIGEgcXVhbCBvbiBjdXJyZW50IGNvbHVtbiwKKwkJCQkgKiB0aGVyZSBpcyBubyBlcXVh bGl0eSBxdWFsIG9uIHRoZSBwcmV2aW91cyBjb2x1bW4sCisJCQkJICogbm90IGFsbCBvZiB0aGUg cHJldmlvdXMgcXVhbHMgYXJlIGVxdWFsaXR5IHNvIGZhcgorCQkJCSAqIChsYXN0IG9uZSBpcyBz cGVjaWFsIGNhc2UgZm9yIHRoZSBmaXJzdCBjb2x1bW4gaW4gdGhlIGluZGV4KS4KKwkJCQkgKiBP cHRpbWFsIGNvbmRpdGlvbnMgdG8gdHJ5IGFuIGluZGV4IHNraXAgcGF0aC4KKwkJCQkgKi8KKwkJ CQlJbmRleFBhdGggKmlwYXRoID0gY3JlYXRlX2luZGV4X3BhdGgocm9vdCwgaW5kZXgsCisJCQkJ CQkJCQkJICBpbmRleGNsYXVzZXMsCisJCQkJCQkJCQkJICBpbmRleG9yZGVyYnlzLAorCQkJCQkJ CQkJCSAgaW5kZXhvcmRlcmJ5Y29scywKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLAorCQkJCQkJCQkJ CSAgaW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCSAgaW5kZXhvbmx5LAorCQkJCQkJCQkJCSAgcmVx dWlyZWRfb3V0ZXIsCisJCQkJCQkJCQkJICBsb29wX2NvdW50LAorCQkJCQkJCQkJCSAgZmFsc2Us CisJCQkJCQkJCQkJICBpY2xhdXNlLT5pbmRleGNvbCk7CisJCQkJcmVzdWx0ID0gbGFwcGVuZChy ZXN1bHQsIGlwYXRoKTsKKwkJCX0KKworCQkJZXFRdWFsUHJldiA9IGVxUXVhbEhlcmU7CisJCQll cVF1YWxIZXJlID0gZmFsc2U7CisJCQlpbmRleGNvbCsrOworCQkJLyogaWYgdGhlIGNsYXVzZSBp cyBub3QgZm9yIHRoaXMgaW5kZXggY29sLCBpbmNyZW1lbnQgdW50aWwgaXQgaXMgKi8KKwkJCXdo aWxlIChpbmRleGNvbCAhPSBpY2xhdXNlLT5pbmRleGNvbCkKKwkJCXsKKwkJCQllcVF1YWxQcmV2 ID0gZmFsc2U7CisJCQkJZXFTb0ZhciA9IGZhbHNlOworCQkJCWluZGV4Y29sKys7CisJCQl9CisJ CX0KKworCQkvKiBFeGFtaW5lIGVhY2ggaW5kZXhxdWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlu ZGV4IGNsYXVzZSAqLworCQlmb3JlYWNoKGxjMiwgaWNsYXVzZS0+aW5kZXhxdWFscykKKwkJewor CQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMyKTsK KwkJCUV4cHIJICAgKmNsYXVzZSA9IHJpbmZvLT5jbGF1c2U7CisJCQlPaWQJCQljbGF1c2Vfb3Ag PSBJbnZhbGlkT2lkOworCQkJaW50CQkJb3Bfc3RyYXRlZ3k7CisKKwkJCWlmIChJc0EoY2xhdXNl LCBPcEV4cHIpKQorCQkJeworCQkJCU9wRXhwcgkgICAqb3AgPSAoT3BFeHByICopIGNsYXVzZTsK KwkJCQljbGF1c2Vfb3AgPSBvcC0+b3BubzsKKwkJCX0KKwkJCWVsc2UgaWYgKElzQShjbGF1c2Us IFJvd0NvbXBhcmVFeHByKSkKKwkJCXsKKwkJCQlSb3dDb21wYXJlRXhwciAqcmMgPSAoUm93Q29t cGFyZUV4cHIgKikgY2xhdXNlOworCQkJCWNsYXVzZV9vcCA9IGxpbml0aWFsX29pZChyYy0+b3Bu b3MpOworCQkJfQorCQkJZWxzZSBpZiAoSXNBKGNsYXVzZSwgU2NhbGFyQXJyYXlPcEV4cHIpKQor CQkJeworCQkJCVNjYWxhckFycmF5T3BFeHByICpzYW9wID0gKFNjYWxhckFycmF5T3BFeHByICop IGNsYXVzZTsKKwkJCQljbGF1c2Vfb3AgPSBzYW9wLT5vcG5vOworCQkJfQorCQkJZWxzZSBpZiAo SXNBKGNsYXVzZSwgTnVsbFRlc3QpKQorCQkJeworCQkJCU51bGxUZXN0ICAgKm50ID0gKE51bGxU ZXN0ICopIGNsYXVzZTsKKworCQkJCWlmIChudC0+bnVsbHRlc3R0eXBlID09IElTX05VTEwpCisJ CQkJeworCQkJCQkvKiBJUyBOVUxMIGlzIGxpa2UgPSBmb3Igc2VsZWN0aXZpdHkgcHVycG9zZXMg Ki8KKwkJCQkJZXFRdWFsSGVyZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBpbmRleHF1YWwgdHlwZTogJWQiLAorCQkJCQkgKGludCkg bm9kZVRhZyhjbGF1c2UpKTsKKworCQkJLyogY2hlY2sgZm9yIGVxdWFsaXR5IG9wZXJhdG9yICov CisJCQlpZiAoT2lkSXNWYWxpZChjbGF1c2Vfb3ApKQorCQkJeworCQkJCW9wX3N0cmF0ZWd5ID0g Z2V0X29wX29wZmFtaWx5X3N0cmF0ZWd5KGNsYXVzZV9vcCwKKwkJCQkJCQkJCQkJCQkgICBpbmRl eC0+b3BmYW1pbHlbaW5kZXhjb2xdKTsKKwkJCQlBc3NlcnQob3Bfc3RyYXRlZ3kgIT0gMCk7CS8q IG5vdCBhIG1lbWJlciBvZiBvcGZhbWlseT8/ICovCisJCQkJaWYgKG9wX3N0cmF0ZWd5ID09IEJU RXF1YWxTdHJhdGVneU51bWJlcikKKwkJCQkJZXFRdWFsSGVyZSA9IHRydWU7CisJCQl9CisJCX0K Kwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIGJ1aWxkX2luZGV4X3BhdGhzCiAgKgkg IEdpdmVuIGFuIGluZGV4IGFuZCBhIHNldCBvZiBpbmRleCBjbGF1c2VzIGZvciBpdCwgY29uc3Ry dWN0IHplcm8KQEAgLTEwNTUsOSArMTE5NiwyNSBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwK IAkJCQkJCQkJICBvdXRlcl9yZWxpZHMsCiAJCQkJCQkJCSAgbG9vcF9jb3VudCwKLQkJCQkJCQkJ ICBmYWxzZSk7CisJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCSAgMCk7CiAJCXJlc3VsdCA9IGxh cHBlbmQocmVzdWx0LCBpcGF0aCk7CiAKKwkJaWYgKGNhbl9za2lwKQorCQl7CisJCQlyZXN1bHQg PSBhZGRfcG9zc2libGVfaW5kZXhfc2tpcF9wYXRocyhyZXN1bHQsIHJvb3QsIGluZGV4LAorCQkJ CQkJCQkJCQkJICAgaW5kZXhfY2xhdXNlcywKKwkJCQkJCQkJCQkJCSAgIG9yZGVyYnljbGF1c2Vz LAorCQkJCQkJCQkJCQkJICAgb3JkZXJieWNsYXVzZWNvbHMsCisJCQkJCQkJCQkJCQkgICB1c2Vm dWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkgICBpbmRleF9pc19vcmRlcmVkID8KKwkJCQkJCQkJ CQkJCSAgIEZvcndhcmRTY2FuRGlyZWN0aW9uIDoKKwkJCQkJCQkJCQkJCSAgIE5vTW92ZW1lbnRT Y2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICAgaW5kZXhfb25seV9zY2FuLAorCQkJCQkJCQkJ CQkJICAgb3V0ZXJfcmVsaWRzLAorCQkJCQkJCQkJCQkJICAgbG9vcF9jb3VudCk7CisJCX0KKwog CQkvKiBDb25zaWRlciBpbmRleCBza2lwIHNjYW4gYXMgd2VsbCAqLwogCQlpZiAocm9vdC0+cXVl cnlfdW5pcXVla2V5cyAhPSBOVUxMICYmIGNhbl9za2lwKQogCQl7CkBAIC0xMTA0LDcgKzEyNjEs OCBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQkJICBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkgIG91dGVyX3JlbGlkcywK IAkJCQkJCQkJCSAgbG9vcF9jb3VudCwKLQkJCQkJCQkJCSAgdHJ1ZSk7CisJCQkJCQkJCQkgIHRy dWUsCisJCQkJCQkJCQkgIDApOwogCiAJCQkvKgogCQkJICogaWYsIGFmdGVyIGNvc3RpbmcgdGhl IHBhdGgsIHdlIGZpbmQgdGhhdCBpdCdzIG5vdCB3b3J0aCB1c2luZwpAQCAtMTEzNyw5ICsxMjk1 LDIzIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCQkJCSAgb3V0ZXJfcmVsaWRz LAogCQkJCQkJCQkJICBsb29wX2NvdW50LAotCQkJCQkJCQkJICBmYWxzZSk7CisJCQkJCQkJCQkg IGZhbHNlLAorCQkJCQkJCQkJICAwKTsKIAkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpcGF0 aCk7CiAKKwkJCWlmIChjYW5fc2tpcCkKKwkJCXsKKwkJCQlyZXN1bHQgPSBhZGRfcG9zc2libGVf aW5kZXhfc2tpcF9wYXRocyhyZXN1bHQsIHJvb3QsIGluZGV4LAorCQkJCQkJCQkJCQkJCSAgIGlu ZGV4X2NsYXVzZXMsCisJCQkJCQkJCQkJCQkJICAgTklMLAorCQkJCQkJCQkJCQkJCSAgIE5JTCwK KwkJCQkJCQkJCQkJCQkgICB1c2VmdWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJICAgQmFja3dh cmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJ CQkJCQkJCQkgICBvdXRlcl9yZWxpZHMsCisJCQkJCQkJCQkJCQkJICAgbG9vcF9jb3VudCk7CisJ CQl9CisKIAkJCS8qIENvbnNpZGVyIGluZGV4IHNraXAgc2NhbiBhcyB3ZWxsICovCiAJCQlpZiAo cm9vdC0+cXVlcnlfdW5pcXVla2V5cyAhPSBOVUxMICYmIGNhbl9za2lwKQogCQkJewpAQCAtMTE4 MSw3ICsxMzUzLDggQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCQkJCQkgIG91 dGVyX3JlbGlkcywKIAkJCQkJCQkJCQkgIGxvb3BfY291bnQsCi0JCQkJCQkJCQkJICB0cnVlKTsK KwkJCQkJCQkJCQkgIHRydWUsCisJCQkJCQkJCQkJICAwKTsKIAogCQkJCS8qCiAJCQkJICogaWYs IGFmdGVyIGNvc3RpbmcgdGhlIHBhdGgsIHdlIGZpbmQgdGhhdCBpdCdzIG5vdCB3b3J0aApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDkxYjFjYTI2MzQuLmFmZmVlZTM5MGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTYwMTMsNyArNjAxMyw3IEBA IHBsYW5fY2x1c3Rlcl91c2Vfc29ydChPaWQgdGFibGVPaWQsIE9pZCBpbmRleE9pZCkKIAlpbmRl eFNjYW5QYXRoID0gY3JlYXRlX2luZGV4X3BhdGgocm9vdCwgaW5kZXhJbmZvLAogCQkJCQkJCQkJ ICBOSUwsIE5JTCwgTklMLCBOSUwsCiAJCQkJCQkJCQkgIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBm YWxzZSwKLQkJCQkJCQkJCSAgTlVMTCwgMS4wLCBmYWxzZSk7CisJCQkJCQkJCQkgIE5VTEwsIDEu MCwgZmFsc2UsIDApOwogCiAJcmV0dXJuIChzZXFTY2FuQW5kU29ydFBhdGgudG90YWxfY29zdCA8 IGluZGV4U2NhblBhdGgtPnBhdGgudG90YWxfY29zdCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYwppbmRleCAxNjYzM2ZkNjcyLi4yYjFjNjRmYjUxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTEwNTEsNyArMTA1MSw4IEBAIGNyZWF0ZV9pbmRl eF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgYm9vbCBpbmRleG9ubHksCiAJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJICBkb3VibGUgbG9vcF9jb3VudCwKLQkJCQkgIGJv b2wgcGFydGlhbF9wYXRoKQorCQkJCSAgYm9vbCBwYXJ0aWFsX3BhdGgsCisJCQkJICBpbnQgc2tp cF9wcmVmaXgpCiB7CiAJSW5kZXhQYXRoICAqcGF0aG5vZGUgPSBtYWtlTm9kZShJbmRleFBhdGgp OwogCVJlbE9wdEluZm8gKnJlbCA9IGluZGV4LT5yZWw7CkBAIC0xMDcxLDYgKzEwNzIsNyBAQCBj cmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+aW5kZXhvcmRl cmJ5cyA9IGluZGV4b3JkZXJieXM7CiAJcGF0aG5vZGUtPmluZGV4b3JkZXJieWNvbHMgPSBpbmRl eG9yZGVyYnljb2xzOwogCXBhdGhub2RlLT5pbmRleHNjYW5kaXIgPSBpbmRleHNjYW5kaXI7CisJ cGF0aG5vZGUtPmluZGV4c2tpcHByZWZpeCA9IHNraXBfcHJlZml4OwogCiAJY29zdF9pbmRleChw YXRobm9kZSwgcm9vdCwgbG9vcF9jb3VudCwgcGFydGlhbF9wYXRoKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwppbmRleCAxMDg5NWZiMjg3Li40NWY0ZmM4MTRiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMjEwLDcgKzIxMCw5IEBAIHN0YXRpYyBib29sIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJCQkJCQkgTWVtb3J5Q29udGV4 dCBvdXRlcmNvbnRleHQsCiAJCQkJCQkJCQkJIERhdHVtICplbmRwb2ludERhdHVtKTsKIHN0YXRp YyBSZWxPcHRJbmZvICpmaW5kX2pvaW5faW5wdXRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKTsKLQorc3RhdGljIGRvdWJsZSBlc3RpbWF0ZV9udW1fZ3JvdXBzX2ludGVybmFs KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLAorCQkJCQkJCQkJZG91YmxlIGlu cHV0X3Jvd3MsIGRvdWJsZSByZWxfaW5wdXRfcm93cywKKwkJCQkJCQkJCUxpc3QgKipwZ3NldCwg RXN0aW1hdGlvbkluZm8gKmVzdGluZm8pOwogCiAvKgogICoJCWVxc2VsCQkJLSBTZWxlY3Rpdml0 eSBvZiAiPSIgZm9yIGFueSBkYXRhIHR5cGVzLgpAQCAtMzM2Nyw2ICszMzY5LDE5IEBAIGFkZF91 bmlxdWVfZ3JvdXBfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywKIGRvdWJs ZQogZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBy cywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkJCUxpc3QgKipwZ3NldCwgRXN0aW1hdGlvbkluZm8g KmVzdGluZm8pCit7CisJcmV0dXJuIGVzdGltYXRlX251bV9ncm91cHNfaW50ZXJuYWwocm9vdCwg Z3JvdXBFeHBycywgaW5wdXRfcm93cywgLTEsIHBnc2V0LCBlc3RpbmZvKTsKK30KKworLyoKKyAq IFNhbWUgYXMgZXN0aW1hdGVfbnVtX2dyb3VwcywgYnV0IHdpdGggYW4gZXh0cmEgYXJndW1lbnQg dG8gY29udHJvbAorICogdGhlIGVzdGltYXRpb24gdXNlZCBmb3IgdGhlIGlucHV0IHJvd3Mgb2Yg dGhlIHJlbGF0aW9uLiBJZgorICogcmVsX2lucHV0X3Jvd3MgPCAwLCBpdCB1c2VzIHRoZSB0aGUg b3JpZ2luYWwgcGxhbm5lciBlc3RpbWF0aW9uIGZvciB0aGUKKyAqIGluZGl2aWR1YWwgcmVscywg ZWxzZSBpZiB1c2VzIHRoZSBlc3RpbWF0aW9uIGFzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4K KyAqLworc3RhdGljIGRvdWJsZQorZXN0aW1hdGVfbnVtX2dyb3Vwc19pbnRlcm5hbChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsIGRvdWJsZSBy ZWxfaW5wdXRfcm93cywKKwkJCQkJTGlzdCAqKnBnc2V0LCBFc3RpbWF0aW9uSW5mbyAqZXN0aW5m bykKIHsKIAlMaXN0CSAgICp2YXJpbmZvcyA9IE5JTDsKIAlkb3VibGUJCXNyZl9tdWx0aXBsaWVy ID0gMS4wOwpAQCAtMzUzMyw2ICszNTQ4LDEyIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCQlpbnQJ CQlyZWx2YXJjb3VudCA9IDA7CiAJCUxpc3QJICAgKm5ld3ZhcmluZm9zID0gTklMOwogCQlMaXN0 CSAgICpyZWx2YXJpbmZvcyA9IE5JTDsKKwkJZG91YmxlIHRoaXNfcmVsX2lucHV0X3Jvd3M7CisK KwkJaWYgKHJlbF9pbnB1dF9yb3dzIDwgMC4wKQorCQkJdGhpc19yZWxfaW5wdXRfcm93cyA9IHJl bC0+cm93czsKKwkJZWxzZQorCQkJdGhpc19yZWxfaW5wdXRfcm93cyA9IHJlbF9pbnB1dF9yb3dz OwogCiAJCS8qCiAJCSAqIFNwbGl0IHRoZSBsaXN0IG9mIHZhcmluZm9zIGluIHR3byAtIG9uZSBm b3IgdGhlIGN1cnJlbnQgcmVsLCBvbmUKQEAgLTM2MzgsNyArMzY1OSw3IEBAIGVzdGltYXRlX251 bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1 dF9yb3dzLAogCQkJICogZ3VhcmRpbmcgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIHdoZW4gcmVs ZGlzdGluY3QgaXMgemVyby4KIAkJCSAqIEFsc28gc2tpcCB0aGlzIGlmIHdlIGtub3cgdGhhdCB3 ZSBhcmUgcmV0dXJuaW5nIGFsbCByb3dzLgogCQkJICovCi0JCQlpZiAocmVsZGlzdGluY3QgPiAw ICYmIHJlbC0+cm93cyA8IHJlbC0+dHVwbGVzKQorCQkJaWYgKHJlbGRpc3RpbmN0ID4gMCAmJiB0 aGlzX3JlbF9pbnB1dF9yb3dzIDwgcmVsLT50dXBsZXMpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBH aXZlbiBhIHRhYmxlIGNvbnRhaW5pbmcgTiByb3dzIHdpdGggbiBkaXN0aW5jdCB2YWx1ZXMgaW4g YQpAQCAtMzY3NSw3ICszNjk2LDcgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkJICogd29ya3Mg d2VsbCBldmVuIHdoZW4gbiBpcyBzbWFsbC4KIAkJCQkgKi8KIAkJCQlyZWxkaXN0aW5jdCAqPQot CQkJCQkoMSAtIHBvdygocmVsLT50dXBsZXMgLSByZWwtPnJvd3MpIC8gcmVsLT50dXBsZXMsCisJ CQkJCSgxIC0gcG93KChyZWwtPnR1cGxlcyAtIHRoaXNfcmVsX2lucHV0X3Jvd3MpIC8gcmVsLT50 dXBsZXMsCiAJCQkJCQkJIHJlbC0+dHVwbGVzIC8gcmVsZGlzdGluY3QpKTsKIAkJCX0KIAkJCXJl bGRpc3RpbmN0ID0gY2xhbXBfcm93X2VzdChyZWxkaXN0aW5jdCk7CkBAIC02NjIxLDggKzY2NDIs MTAgQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwg ZG91YmxlIGxvb3BfY291bnQsCiAJZG91YmxlCQludW1JbmRleFR1cGxlczsKIAlDb3N0CQlkZXNj ZW50Q29zdDsKIAlMaXN0CSAgICppbmRleEJvdW5kUXVhbHM7CisJTGlzdAkgICAqcHJlZml4Qm91 bmRRdWFsczsKIAlpbnQJCQlpbmRleGNvbDsKIAlib29sCQllcVF1YWxIZXJlOworCWJvb2wJCXN0 aWxsRXE7CiAJYm9vbAkJZm91bmRfc2FvcDsKIAlib29sCQlmb3VuZF9pc19udWxsX29wOwogCWRv dWJsZQkJbnVtX3NhX3NjYW5zOwpAQCAtNjY0Niw5ICs2NjY5LDExIEBAIGJ0Y29zdGVzdGltYXRl KFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAog CSAqIGNvbnNpZGVyZWQgdG8gYWN0IHRoZSBzYW1lIGFzIGl0IG5vcm1hbGx5IGRvZXMuCiAJICov CiAJaW5kZXhCb3VuZFF1YWxzID0gTklMOworCXByZWZpeEJvdW5kUXVhbHMgPSBOSUw7CiAJaW5k ZXhjb2wgPSAwOwogCWVxUXVhbEhlcmUgPSBmYWxzZTsKIAlmb3VuZF9zYW9wID0gZmFsc2U7CisJ c3RpbGxFcSA9IHRydWU7CiAJZm91bmRfaXNfbnVsbF9vcCA9IGZhbHNlOwogCW51bV9zYV9zY2Fu cyA9IDE7CiAJZm9yZWFjaChsYywgcGF0aC0+aW5kZXhjbGF1c2VzKQpAQCAtNjY2MCwxMSArNjY4 NSwxOCBAQCBidGNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRo LCBkb3VibGUgbG9vcF9jb3VudCwKIAkJewogCQkJLyogQmVnaW5uaW5nIG9mIGEgbmV3IGNvbHVt bidzIHF1YWxzICovCiAJCQlpZiAoIWVxUXVhbEhlcmUpCi0JCQkJYnJlYWs7CQkJLyogZG9uZSBp ZiBubyAnPScgcXVhbCBmb3IgaW5kZXhjb2wgKi8KKwkJCXsKKwkJCQlzdGlsbEVxID0gZmFsc2U7 CisJCQkJLyogZG9uZSBpZiBubyAnPScgcXVhbCBmb3IgaW5kZXhjb2wgYW5kIHdlJ3JlIHBhc3Qg dGhlIHNraXAgcHJlZml4ICovCisJCQkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA8PSBpbmRl eGNvbCkKKwkJCQkJYnJlYWs7CisJCQl9CiAJCQllcVF1YWxIZXJlID0gZmFsc2U7CiAJCQlpbmRl eGNvbCsrOworCQkJd2hpbGUgKGluZGV4Y29sICE9IGljbGF1c2UtPmluZGV4Y29sICYmIHBhdGgt PmluZGV4c2tpcHByZWZpeCA+IGluZGV4Y29sKQorCQkJCWluZGV4Y29sKys7CiAJCQlpZiAoaW5k ZXhjb2wgIT0gaWNsYXVzZS0+aW5kZXhjb2wpCi0JCQkJYnJlYWs7CQkJLyogbm8gcXVhbHMgYXQg YWxsIGZvciBpbmRleGNvbCAqLworCQkJCWJyZWFrOyAvKiBubyBxdWFscyBhdCBhbGwgZm9yIGlu ZGV4Y29sICovCiAJCX0KIAogCQkvKiBFeGFtaW5lIGVhY2ggaW5kZXhxdWFsIGFzc29jaWF0ZWQg d2l0aCB0aGlzIGluZGV4IGNsYXVzZSAqLwpAQCAtNjY5Niw3ICs2NzI4LDcgQEAgYnRjb3N0ZXN0 aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291 bnQsCiAJCQkJY2xhdXNlX29wID0gc2FvcC0+b3BubzsKIAkJCQlmb3VuZF9zYW9wID0gdHJ1ZTsK IAkJCQkvKiBjb3VudCBudW1iZXIgb2YgU0Egc2NhbnMgaW5kdWNlZCBieSBpbmRleEJvdW5kUXVh bHMgb25seSAqLwotCQkJCWlmIChhbGVuZ3RoID4gMSkKKwkJCQlpZiAoYWxlbmd0aCA+IDEgJiYg c3RpbGxFcSkKIAkJCQkJbnVtX3NhX3NjYW5zICo9IGFsZW5ndGg7CiAJCQl9CiAJCQllbHNlIGlm IChJc0EoY2xhdXNlLCBOdWxsVGVzdCkpCkBAIC02NzI0LDcgKzY3NTYsMTQgQEAgYnRjb3N0ZXN0 aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291 bnQsCiAJCQkJCWVxUXVhbEhlcmUgPSB0cnVlOwogCQkJfQogCi0JCQlpbmRleEJvdW5kUXVhbHMg PSBsYXBwZW5kKGluZGV4Qm91bmRRdWFscywgcmluZm8pOworCQkJLyogd2Uga2VlcCB0d28gbGlz dHMgaGVyZSwgb25lIHdpdGggYWxsIHF1YWxzIHVwIHVudGlsIHRoZSBwcmVmaXgKKwkJCSAqIGFu ZCBvbmUgd2l0aCBvbmx5IHRoZSBxdWFscyB1bnRpbCB0aGUgZmlyc3QgaW5lcXVhbGl0eS4KKwkJ CSAqIHdlIG5lZWQgdGhlIGxpc3Qgd2l0aCBwcmVmaXhlcyBsYXRlcgorCQkJICovCisJCQlpZiAo c3RpbGxFcSkKKwkJCQlpbmRleEJvdW5kUXVhbHMgPSBsYXBwZW5kKGluZGV4Qm91bmRRdWFscywg cmluZm8pOworCQkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJCQkJcHJlZml4Qm91 bmRRdWFscyA9IGxhcHBlbmQocHJlZml4Qm91bmRRdWFscywgcmluZm8pOwogCQl9CiAJfQogCkBA IC02NzUwLDcgKzY3ODksMTAgQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJCSAqIGluZGV4LWJvdW5kIHF1YWxz IHRvIHByb2R1Y2UgYSBtb3JlIGFjY3VyYXRlIGlkZWEgb2YgdGhlIG51bWJlciBvZgogCQkgKiBy b3dzIGNvdmVyZWQgYnkgdGhlIGJvdW5kIGNvbmRpdGlvbnMuCiAJCSAqLwotCQlzZWxlY3Rpdml0 eVF1YWxzID0gYWRkX3ByZWRpY2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgaW5kZXhCb3VuZFF1 YWxzKTsKKwkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJCQlzZWxlY3Rpdml0eVF1 YWxzID0gYWRkX3ByZWRpY2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgcHJlZml4Qm91bmRRdWFs cyk7CisJCWVsc2UKKwkJCXNlbGVjdGl2aXR5UXVhbHMgPSBhZGRfcHJlZGljYXRlX3RvX2luZGV4 X3F1YWxzKGluZGV4LCBpbmRleEJvdW5kUXVhbHMpOwogCiAJCWJ0cmVlU2VsZWN0aXZpdHkgPSBj bGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIHNlbGVjdGl2aXR5UXVhbHMsCiAJCQkJCQkJCQkJ CQkgIGluZGV4LT5yZWwtPnJlbGlkLApAQCAtNjc2MCw3ICs2ODAyLDcgQEAgYnRjb3N0ZXN0aW1h dGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAKIAkJLyoKIAkJICogQXMgaW4gZ2VuZXJpY2Nvc3Rlc3RpbWF0ZSgpLCB3ZSBoYXZlIHRvIGFk anVzdCBmb3IgYW55Ci0JCSAqIFNjYWxhckFycmF5T3BFeHByIHF1YWxzIGluY2x1ZGVkIGluIGlu ZGV4Qm91bmRRdWFscywgYW5kIHRoZW4gcm91bmQKKwkJICogU2NhbGFyQXJyYXlPcEV4cHIgcXVh bHMgaW5jbHVkZWQgaW4gcHJlZml4Qm91bmRRdWFscywgYW5kIHRoZW4gcm91bmQKIAkJICogdG8g aW50ZWdlci4KIAkJICovCiAJCW51bUluZGV4VHVwbGVzID0gcmludChudW1JbmRleFR1cGxlcyAv IG51bV9zYV9zY2Fucyk7CkBAIC02ODA2LDYgKzY4NDgsOTkgQEAgYnRjb3N0ZXN0aW1hdGUoUGxh bm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJY29z dHMuaW5kZXhTdGFydHVwQ29zdCArPSBkZXNjZW50Q29zdDsKIAljb3N0cy5pbmRleFRvdGFsQ29z dCArPSBjb3N0cy5udW1fc2Ffc2NhbnMgKiBkZXNjZW50Q29zdDsKIAorCS8qCisJICogQWRkIGV4 dHJhIGNvc3RzIGZvciB1c2luZyBhbiBpbmRleCBza2lwIHNjYW4uCisJICogVGhlIGluZGV4IHNr aXAgc2NhbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50bHkgbG93ZXIgY29zdCB1bnRpbCBub3csCisJ ICogZHVlIHRvIHRoZSBkaWZmZXJlbnQgcm93IGVzdGltYXRpb24gdXNlZCAoYWxsIHRoZSBxdWFs cyB1cCB0byBwcmVmaXgsCisJICogcmF0aGVyIHRoYW4gYWxsIHRoZSBxdWFscyB1cCB0byB0aGUg Zmlyc3Qgbm9uLWVxdWFsaXR5IG9wZXJhdG9yKS4KKwkgKiBIb3dldmVyLCB0aGVyZSBhcmUgZXh0 cmEgY29zdHMgaW5jdXJyZWQgZm9yCisJICogYSkgc2V0dGluZyB1cCB0aGUgc2NhbgorCSAqIGIp IGRvaW5nIGFkZGl0aW9uYWwgc2NhbnMgZnJvbSByb290CisJICogYykgc21hbGwgZXh0cmEgY29z dCBwZXIgdHVwbGUgY29tcGFyaXNvbgorCSAqIFdlIGFkZCB0aG9zZSBoZXJlCisJICovCisJaWYg KHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJeworCQlMaXN0ICpleHBybGlzdCA9IE5VTEw7 CisJCWRvdWJsZSBudW1ncm91cHNfZXN0aW1hdGU7CisJCWludCBpID0gMDsKKwkJTGlzdENlbGwg KmluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChwYXRoLT5pbmRleGluZm8tPmluZGV4cHJzKTsKKwkJ TGlzdAkgICAqc2VsZWN0aXZpdHlRdWFsczsKKwkJU2VsZWN0aXZpdHkgYnRyZWVTZWxlY3Rpdml0 eTsKKwkJZG91YmxlIGVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVmaXg7CisKKwkJLyogc29tZSBy YXRoZXIgYXJiaXRyYXJ5IGV4dHJhIGNvc3QgZm9yIHByZXByb2Nlc3Npbmcgc3RydWN0dXJlcyBu ZWVkZWQgZm9yIHNraXAgc2NhbiAqLworCQljb3N0cy5pbmRleFN0YXJ0dXBDb3N0ICs9IDIwMC4w ICogY3B1X29wZXJhdG9yX2Nvc3Q7CisJCWNvc3RzLmluZGV4VG90YWxDb3N0ICs9IDIwMC4wICog Y3B1X29wZXJhdG9yX2Nvc3Q7CisKKwkJLyoKKwkJICogSW4gb3JkZXIgdG8gcmVsaWFibHkgZ2V0 IGEgY29zdCBlc3RpbWF0aW9uIGZvciB0aGUgbnVtYmVyIG9mIHNjYW5zIHdlIGhhdmUgdG8gZG8g ZnJvbSByb290LAorCQkgKiB3ZSBuZWVkIHNvbWUgZXN0aW1hdGlvbiBvbiB0aGUgbnVtYmVyIG9m IGRpc3RpbmN0IHByZWZpeGVzIHRoYXQgZXhpc3QuIFRoZXJlZm9yZSwgd2UgbmVlZAorCQkgKiBh IGRpZmZlcmVudCBzZWxlY3Rpdml0eSBhcHByb3hpbWF0aW9uICh0aGlzIHRpbWUgd2UgZG8gbmVl ZCB0byB1c2UgdGhlIGNsYXVzZXMgdW50aWwgdGhlIGZpcnN0CisJCSAqIG5vbi1lcXVhbGl0eSBv cGVyYXRvcikuIFVzaW5nIHRoYXQsIHdlIGNhbiBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGdyb3Vw cworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBhdGgtPmluZGV4aW5mby0+bmtleWNvbHVtbnMg JiYgaSA8IHBhdGgtPmluZGV4c2tpcHByZWZpeDsgaSsrKQorCQl7CisJCQlFeHByICpleHByID0g TlVMTDsKKwkJCWludCBhdHRyID0gcGF0aC0+aW5kZXhpbmZvLT5pbmRleGtleXNbaV07CisJCQlp ZihhdHRyID4gMCkKKwkJCXsKKwkJCQlUYXJnZXRFbnRyeSAqdGVudHJ5ID0gZ2V0X3RsZV9ieV9y ZXNubyhwYXRoLT5pbmRleGluZm8tPmluZGV4dGxpc3QsIGkgKyAxKTsKKwkJCQlBc3NlcnQodGVu dHJ5ICE9IE5VTEwpOworCQkJCWV4cHIgPSB0ZW50cnktPmV4cHI7CisJCQl9CisJCQllbHNlIGlm IChhdHRyID09IDApCisJCQl7CisJCQkJLyogRXhwcmVzc2lvbiBpbmRleCAqLworCQkJCWV4cHIg PSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChwYXRoLT5p bmRleGluZm8tPmluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCQkJfQorCQkJZWxzZSAvKiBhdHRy IDwgMCAqLworCQkJeworCQkJCS8qIEluZGV4IG9uIHN5c3RlbSBjb2x1bW4gaXMgbm90IHN1cHBv cnRlZCAqLworCQkJCUFzc2VydChmYWxzZSk7CisJCQl9CisKKwkJCWV4cHJsaXN0ID0gbGFwcGVu ZChleHBybGlzdCwgZXhwcik7CisJCX0KKworCQlzZWxlY3Rpdml0eVF1YWxzID0gYWRkX3ByZWRp Y2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgaW5kZXhCb3VuZFF1YWxzKTsKKworCQlidHJlZVNl bGVjdGl2aXR5ID0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShyb290LCBzZWxlY3Rpdml0eVF1YWxz LAorCQkJCQkJCQkJCQkJICBpbmRleC0+cmVsLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSAgSk9JTl9J Tk5FUiwKKwkJCQkJCQkJCQkJCSAgTlVMTCk7CisJCWVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVm aXggPSBidHJlZVNlbGVjdGl2aXR5ICogaW5kZXgtPnJlbC0+dHVwbGVzOworCisJCS8qCisJCSAq IEFzIGluIGdlbmVyaWNjb3N0ZXN0aW1hdGUoKSwgd2UgaGF2ZSB0byBhZGp1c3QgZm9yIGFueQor CQkgKiBTY2FsYXJBcnJheU9wRXhwciBxdWFscyBpbmNsdWRlZCBpbiBwcmVmaXhCb3VuZFF1YWxz LCBhbmQgdGhlbiByb3VuZAorCQkgKiB0byBpbnRlZ2VyLgorCQkgKi8KKwkJZXN0aW1hdGVkSW5k ZXhUdXBsZXNOb1ByZWZpeCA9IHJpbnQoZXN0aW1hdGVkSW5kZXhUdXBsZXNOb1ByZWZpeCAvIG51 bV9zYV9zY2Fucyk7CisKKwkJbnVtZ3JvdXBzX2VzdGltYXRlID0gZXN0aW1hdGVfbnVtX2dyb3Vw c19pbnRlcm5hbCgKKwkJCQkJcm9vdCwgZXhwcmxpc3QsIGVzdGltYXRlZEluZGV4VHVwbGVzTm9Q cmVmaXgsCisJCQkJCWVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVmaXgsIE5VTEwsIE5VTEwpOwor CisJCS8qCisJCSAqIEZvciBlYWNoIGRpc3RpbmN0IHByZWZpeCB2YWx1ZSB3ZSBhZGQgZGVzY2Vu ZGluZyBjb3N0IGFzLgorCQkgKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHN0YXJ0dXAgY29zdCBj YWxjdWxhdGlvbiBmb3IgcmVndWxhciBzY2Fucy4KKwkJICogV2UgY2FuIGRvIGF0IG1vc3QgMiBz Y2FucyBmcm9tIHJvb3QgcGVyIGRpc3RpbmN0IHByZWZpeCwgc28gbXVsdGlwbHkgYnkgMi4KKwkJ ICogQWxzbyBhZGQgc29tZSBDUFUgcHJvY2Vzc2luZyBjb3N0IHBlciBwYWdlIHRoYXQgd2UgbmVl ZCB0byBwcm9jZXNzLCBwbHVzCisJCSAqIHNvbWUgYWRkaXRpb25hbCBvbmUtdGltZSBjb3N0IGZv ciBzY2FubmluZyB0aGUgbGVhZiBwYWdlLiBUaGlzIGlzIGEgbW9yZQorCQkgKiBleHBlbnNpdmUg ZXN0aW1hdGlvbiB0aGFuIHRoZSBwZXItcGFnZSBjcHUgY29zdCBmb3IgdGhlIHJlZ3VsYXIgaW5k ZXggc2Nhbi4KKwkJICogVGhpcyBpcyBpbnRlbnRpb25hbCwgYmVjYXVzZSB0aGUgaW5kZXggc2tp cCBzY2FuIGRvZXMgbW9yZSBwcm9jZXNzaW5nIG9uCisJCSAqIHRoZSBsZWFmIHBhZ2UuCisJCSAq LworCQlpZiAoaW5kZXgtPnR1cGxlcyA+IDApCisJCQlkZXNjZW50Q29zdCA9IGNlaWwobG9nKGlu ZGV4LT50dXBsZXMpIC8gbG9nKDIuMCkpICogY3B1X29wZXJhdG9yX2Nvc3QgKiAyOworCQllbHNl CisJCQlkZXNjZW50Q29zdCA9IDA7CisJCWRlc2NlbnRDb3N0ICs9IChpbmRleC0+dHJlZV9oZWln aHQgKyAxKSAqIDUwLjAgKiBjcHVfb3BlcmF0b3JfY29zdCAqIDIgKyAyMDAgKiBjcHVfb3BlcmF0 b3JfY29zdDsKKwkJY29zdHMuaW5kZXhUb3RhbENvc3QgKz0gY29zdHMubnVtX3NhX3NjYW5zICog ZGVzY2VudENvc3QgKiBudW1ncm91cHNfZXN0aW1hdGU7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBj YW4gZ2V0IGFuIGVzdGltYXRlIG9mIHRoZSBmaXJzdCBjb2x1bW4ncyBvcmRlcmluZyBjb3JyZWxh dGlvbiBDCiAJICogZnJvbSBwZ19zdGF0aXN0aWMsIGVzdGltYXRlIHRoZSBpbmRleCBjb3JyZWxh dGlvbiBhcyBDIGZvciBhCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDAzNDNiMmUxZjYu LmRhNGM5MzMxNjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC00OSw3ICs0OSw4IEBA IGV4dGVybiBJbmRleFBhdGggKmNyZWF0ZV9pbmRleF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJYm9vbCBpbmRleG9ubHksCiAJCQkJCQkJCQlSZWxpZHMgcmVxdWlyZWRfb3V0ZXIs CiAJCQkJCQkJCQlkb3VibGUgbG9vcF9jb3VudCwKLQkJCQkJCQkJCWJvb2wgcGFydGlhbF9wYXRo KTsKKwkJCQkJCQkJCWJvb2wgcGFydGlhbF9wYXRoLAorCQkJCQkJCQkJaW50IHNraXBfcHJlZml4 KTsKIGV4dGVybiBCaXRtYXBIZWFwUGF0aCAqY3JlYXRlX2JpdG1hcF9oZWFwX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJ ICAgUGF0aCAqYml0bWFwcXVhbCwKLS0gCjIuMjkuMgoK --_007_2f26e1e475364ab7b23f466e4a4f4392opammb0562compoptiverco_--