ECC Curves for certificate signing (wolfssl)
"Peter G. via Privoxy-users" <[email protected]> Sun, 26 Jan 2025 18:36:27 +0100 (CET)
| Newsgroups | gmane.comp.web.privoxy.user |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463809792-111540969-1737912087=:9393 Content-Type: text/plain; CHARSET=US-ASCII; format=flowed Content-ID: <[email protected]> Hello Fabian, hello list! First of all many thanks for your continued work on this brilliant program, and congrats on the 4.0.0. release. Based on your comments on wolfssl performance in the Release Notes, as well as on the use of ECC vs RSA in the generated certificates somewhere else, I tried to switch to ECC in the wolfSSL build as well. My very-very-alpha version of the resulting wolfssl.c is attached. Please note that: 1. I am not at all a programmer, much less an experienced one, or one familiar with crypto. All I did is adapt the original wolfssl.c a bit. It might be terribly done, and buggy as hell. But the thing compiles, and does what it's supposed to do. 2. This is possibly using some relatively insecure settings for the certificate generation. In my use-case of privoxy that is acceptable (as it's a single-user, localhost-only setting). For any testers, don't expose it to any real-world users before vetting it first. Still I though I'd share, and would love to hear any comments you might have. To build, either replace wolfssl.c, or edit GNUmakefile.in to use wolfssl_ecc.c as WOLFSSL_SRC. Best Regards, Peter -- "I do not think the way you think I think." -- Kai, last of the Brunnen G ---1463809792-111540969-1737912087=:9393 Content-Type: text/plain; name=wolfssl_ecc.c Content-Transfer-Encoding: BASE64 Content-ID: <[email protected]> Content-Description: Content-Disposition: attachment; filename=wolfssl_ecc.c LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKg0KICoNCiAqIEZpbGUgICAgICAg IDogICRTb3VyY2U6IC9jdnNyb290L2lqYnN3YS9jdXJyZW50L3dvbGZzc2wu Yyx2ICQNCiAqDQogKiBQdXJwb3NlICAgICA6ICBGaWxlIHdpdGggVExTL1NT TCBleHRlbnNpb24uIENvbnRhaW5zIG1ldGhvZHMgZm9yDQogKiAgICAgICAg ICAgICAgICBjcmVhdGluZywgdXNpbmcgYW5kIGNsb3NpbmcgVExTL1NTTCBj b25uZWN0aW9ucw0KICogICAgICAgICAgICAgICAgdXNpbmcgd29sZlNTTC4N CiAqDQogKiBDb3B5cmlnaHQgICA6ICBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy NCBieSBGYWJpYW4gS2VpbCA8ZmtAZmFiaWFua2VpbC5kZT4NCiAqICAgICAg ICAgICAgICAgIENvcHlyaWdodCAoQykgMjAyMCBNYXhpbSBBbnRvbm92IDxt YW50b25vdkBnbWFpbC5jb20+DQogKiAgICAgICAgICAgICAgICBDb3B5cmln aHQgKEMpIDIwMTcgVmFjbGF2IFN2ZWMuIEZJVCBDVlVULg0KICoNCiAqICAg ICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdA0KICogICAgICAgICAgICAgICAgYW5k L29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsDQogKiAgICAgICAgICAgICAgICBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUNCiAqICAgICAgICAgICAgICAg IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yIChhdA0KICogICAgICAgICAgICAgICAgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLg0KICoNCiAqICAgICAgICAgICAgICAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwN CiAqICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlDQogKiAgICAgICAgICAgICAg ICBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBDQogKiAgICAgICAgICAgICAgICBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KICogICAgICAgICAg ICAgICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqICAgICAg ICAgICAgICAgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaG91 bGQgYmUgaW5jbHVkZWQgd2l0aA0KICogICAgICAgICAgICAgICAgdGhpcyBm aWxlLiAgSWYgbm90LCB5b3UgY2FuIHZpZXcgaXQgYXQNCiAqICAgICAgICAg ICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbA0K ICogICAgICAgICAgICAgICAgb3Igd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkNCiAqICAgICAgICAgICAgICAgIFRl bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMw NywgVVNBLg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNp bmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNs dWRlIDxhc3NlcnQuaD4NCiNpbmNsdWRlICJjb25maWcuaCINCg0KI2luY2x1 ZGUgPHdvbGZzc2wvb3B0aW9ucy5oPg0KI2luY2x1ZGUgPHdvbGZzc2wvb3Bl bnNzbC94NTA5djMuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvcGVt Lmg+DQojaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4NCiNpbmNsdWRlIDx3b2xm c3NsL3dvbGZjcnlwdC9jb2RpbmcuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL3dv bGZjcnlwdC9yc2EuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9l Y2MuaD4NCg0KI2luY2x1ZGUgInByb2plY3QuaCINCiNpbmNsdWRlICJtaXNj dXRpbC5oIg0KI2luY2x1ZGUgImVycmxvZy5oIg0KI2luY2x1ZGUgImVuY29k ZS5oIg0KI2luY2x1ZGUgImpjYy5oIg0KI2luY2x1ZGUgImpic29ja2V0cy5o Ig0KI2luY2x1ZGUgInNzbC5oIg0KI2luY2x1ZGUgInNzbF9jb21tb24uaCIN Cg0Kc3RhdGljIGludCBzc2xfY2VydGlmaWNhdGVfaXNfaW52YWxpZChjb25z dCBjaGFyICpjZXJ0X2ZpbGUpOw0Kc3RhdGljIGludCBnZW5lcmF0ZV9ob3N0 X2NlcnRpZmljYXRlKHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCwNCiAgIGNv bnN0IGNoYXIgKmNlcnRpZmljYXRlX3BhdGgsIGNvbnN0IGNoYXIgKmtleV9w YXRoKTsNCnN0YXRpYyB2b2lkIGZyZWVfY2xpZW50X3NzbF9zdHJ1Y3R1cmVz KHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCk7DQpzdGF0aWMgdm9pZCBmcmVl X3NlcnZlcl9zc2xfc3RydWN0dXJlcyhzdHJ1Y3QgY2xpZW50X3N0YXRlICpj c3ApOw0Kc3RhdGljIGludCBzc2xfc3RvcmVfY2VydChzdHJ1Y3QgY2xpZW50 X3N0YXRlICpjc3AsIFg1MDkgKmNydCk7DQpzdGF0aWMgdm9pZCBsb2dfc3Ns X2Vycm9ycyhpbnQgZGVidWdsZXZlbCwgY29uc3QgY2hhciogZm10LCAuLi4p IF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7DQoNCnN0 YXRpYyBpbnQgd29sZnNzbF9pbml0aWFsaXplZCA9IDA7DQoNCi8vaW50IGN1 cnZlSWQgPSBFQ0NfU0VDUDUyMVIxOw0Kc3RhdGljIGludCBjdXJ2ZUlkID0g RUNDX1NFQ1AyMjRSMTsNCi8vaW50IGN1cnZlSWQgPSBXT0xGU1NMX0VDQ19T RUNQMjI0UjE7DQovKg0KICogV2hldGhlciBvciBub3Qgc2hhcmluZyB0aGUg Uk5HIGlzIHRocmVhZC1zYWZlDQogKiBkb2Vzbid0IG1hdHRlciBiZWNhdXNl IHdlIG9ubHkgdXNlIGl0IHdpdGgNCiAqIHRoZSBjZXJ0aWZpY2F0ZV9tdXRl eCBsb2NrZWQuDQogKi8NCnN0YXRpYyBXQ19STkcgd29sZnNzbF9ybmc7DQoN CiNpZm5kZWYgV09MRlNTTF9BTFRfQ0VSVF9DSEFJTlMNCi8qDQogKiBXaXRo b3V0IFdPTEZTU0xfQUxUX0NFUlRfQ0hBSU5TIHdvbGZTU0wgd2lsbCByZWpl Y3QgdmFsaWQNCiAqIGNlcnRpZmljYXRlcyBpZiB0aGUgY2VydGlmaWNhdGUg Y2hhaW4gY29udGFpbnMgQ0EgY2VydGlmaWNhdGVzDQogKiB0aGF0IGFyZSAi b25seSIgc2lnbmVkIGJ5IHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzIGJ1dCBh cmVuJ3QNCiAqIHRydXN0ZWQgQ0FzIHRoZW1zZWx2ZXMuDQogKi8NCiN3YXJu aW5nIHdvbGZTU0wgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBXT0xGU1NM X0FMVF9DRVJUX0NIQUlOUw0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICB3b2xmc3NsX2luaXQN CiAqDQogKiBEZXNjcmlwdGlvbiA6ICBJbml0aWFsaXplcyB3b2xmU1NMIGxp YnJhcnkgb25jZQ0KICoNCiAqIFBhcmFtZXRlcnMgIDogIE4vQQ0KICoNCiAq IFJldHVybnMgICAgIDogIE4vQQ0KICoNCiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovDQpzdGF0aWMgdm9pZCB3b2xmc3NsX2luaXQodm9pZCkNCnsNCiAg IGlmICh3b2xmc3NsX2luaXRpYWxpemVkID09IDApDQogICB7DQogICAgICBw cml2b3h5X211dGV4X2xvY2soJnNzbF9pbml0X211dGV4KTsNCiAgICAgIGlm ICh3b2xmc3NsX2luaXRpYWxpemVkID09IDApDQogICAgICB7DQogICAgICAg ICBpZiAod29sZlNTTF9Jbml0KCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAg ICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9GQVRB TCwgIkZhaWxlZCB0byBpbml0aWFsaXplIHdvbGZTU0wiKTsNCiAgICAgICAg IH0NCiAgICAgICAgIHdjX0luaXRSbmcoJndvbGZzc2xfcm5nKTsNCiAgICAg ICAgIHdvbGZzc2xfaW5pdGlhbGl6ZWQgPSAxOw0KICAgICAgfQ0KICAgICAg cHJpdm94eV9tdXRleF91bmxvY2soJnNzbF9pbml0X211dGV4KTsNCiAgIH0N Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu Y3Rpb24gICAgOiAgaXNfc3NsX3BlbmRpbmcNCiAqDQogKiBEZXNjcmlwdGlv biA6ICBUZXN0cyBpZiB0aGVyZSBhcmUgc29tZSB3YWl0aW5nIGRhdGEgb24g c3NsIGNvbm5lY3Rpb24uDQogKiAgICAgICAgICAgICAgICBPbmx5IGNvbnNp ZGVycyBkYXRhIHRoYXQgaGFzIGFjdHVhbGx5IGJlZW4gcmVjZWl2ZWQNCiAq ICAgICAgICAgICAgICAgIGxvY2FsbHkgYW5kIGlnbm9yZXMgZGF0YSB0aGF0 IGlzIHN0aWxsIG9uIHRoZSBmbHkNCiAqICAgICAgICAgICAgICAgIG9yIGhh cyBub3QgeWV0IGJlZW4gc2VudCBieSB0aGUgcmVtb3RlIGVuZC4NCiAqDQog KiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAxICA6ICBzc2xfYXR0ciA9 IFNTTCBjb250ZXh0IHRvIHRlc3QNCiAqDQogKiBSZXR1cm5zICAgICA6ICAg MCA9PiBObyBkYXRhIGFyZSBwZW5kaW5nDQogKiAgICAgICAgICAgICAgICA+ MCA9PiBQZW5kaW5nIGRhdGEgbGVuZ3RoLiBYWFg6IHJlYWxseT8NCiAqDQog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIHNpemVfdCBpc19z c2xfcGVuZGluZyhzdHJ1Y3Qgc3NsX2F0dHIgKnNzbF9hdHRyKQ0Kew0KICAg cmV0dXJuIChzaXplX3Qpd29sZlNTTF9wZW5kaW5nKHNzbF9hdHRyLT53b2xm c3NsX2F0dHIuc3NsKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQogKg0KICogRnVuY3Rpb24gICAgOiAgc3NsX3NlbmRfZGF0YQ0KICoN CiAqIERlc2NyaXB0aW9uIDogIFNlbmRzIHRoZSBjb250ZW50IG9mIGJ1ZiAo Zm9yIG4gYnl0ZXMpIHRvIGdpdmVuIFNTTA0KICogICAgICAgICAgICAgICAg Y29ubmVjdGlvbiBjb250ZXh0Lg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAq ICAgICAgICAgIDEgIDogIHNzbF9hdHRyID0gU1NMIGNvbnRleHQgdG8gc2Vu ZCBkYXRhIHRvDQogKiAgICAgICAgICAyICA6ICBidWYgPSBQb2ludGVyIHRv IGRhdGEgdG8gYmUgc2VudA0KICogICAgICAgICAgMyAgOiAgbGVuID0gTGVu Z3RoIG9mIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgU1NMIGNvbnRleHQNCiAq DQogKiBSZXR1cm5zICAgICA6ICBMZW5ndGggb2Ygc2VudCBkYXRhIG9yIG5l Z2F0aXZlIHZhbHVlIG9uIGVycm9yLg0KICoNCiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovDQpleHRlcm4gaW50IHNzbF9zZW5kX2RhdGEoc3RydWN0IHNz bF9hdHRyICpzc2xfYXR0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBz aXplX3QgbGVuKQ0Kew0KICAgV09MRlNTTCAqc3NsOw0KICAgaW50IHJldCA9 IDA7DQogICBpbnQgcG9zID0gMDsgLyogUG9zaXRpb24gb2YgdW5zZW50IHBh cnQgaW4gYnVmZmVyICovDQogICBpbnQgZmQgPSAtMTsNCg0KICAgaWYgKGxl biA9PSAwKQ0KICAgew0KICAgICAgcmV0dXJuIDA7DQogICB9DQoNCiAgIHdv bGZTU0xfRVJSX2NsZWFyX2Vycm9yKCk7DQoNCiAgIHNzbCA9IHNzbF9hdHRy LT53b2xmc3NsX2F0dHIuc3NsOw0KICAgZmQgPSB3b2xmU1NMX2dldF9mZChz c2wpOw0KDQogICB3aGlsZSAocG9zIDwgbGVuKQ0KICAgew0KICAgICAgaW50 IHNlbmRfbGVuID0gKGludClsZW4gLSBwb3M7DQoNCiAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfV1JJVElORywgIlRMUyBvbiBzb2NrZXQgJWQ6ICVOIiwN CiAgICAgICAgIGZkLCBzZW5kX2xlbiwgYnVmK3Bvcyk7DQoNCiAgICAgIHJl dCA9IHdvbGZTU0xfd3JpdGUoc3NsLCBidWYrcG9zLCBzZW5kX2xlbik7DQog ICAgICBpZiAocmV0IDw9IDApDQogICAgICB7DQogICAgICAgICBsb2dfc3Ns X2Vycm9ycyhMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAiU2VuZGlu ZyBkYXRhIG9uIHNvY2tldCAlZCBvdmVyIFRMUyBmYWlsZWQiLCBmZCk7DQog ICAgICAgICByZXR1cm4gLTE7DQogICAgICB9DQoNCiAgICAgIC8qIEFkZGlu ZyBjb3VudCBvZiBzZW50IGJ5dGVzIHRvIHBvc2l0aW9uIGluIGJ1ZmZlciAq Lw0KICAgICAgcG9zID0gcG9zICsgcmV0Ow0KICAgfQ0KDQogICByZXR1cm4g KGludClsZW47DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K ICoNCiAqIEZ1bmN0aW9uICAgIDogIHNzbF9yZWN2X2RhdGENCiAqDQogKiBE ZXNjcmlwdGlvbiA6ICBSZWNlaXZlcyBkYXRhIGZyb20gZ2l2ZW4gU1NMIGNv bnRleHQgYW5kIHB1dHMNCiAqICAgICAgICAgICAgICAgIGl0IGludG8gYnVm ZmVyLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDog IHNzbF9hdHRyID0gU1NMIGNvbnRleHQgdG8gcmVjZWl2ZSBkYXRhIGZyb20N CiAqICAgICAgICAgIDIgIDogIGJ1ZiA9IFBvaW50ZXIgdG8gYnVmZmVyIHdo ZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuDQogKiAgICAgICAgICAzICA6ICBt YXhfbGVuZ3RoID0gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZA0K ICoNCiAqIFJldHVybnMgICAgIDogIE51bWJlciBvZiBieXRlcyByZWFkLCAw IGZvciBFT0YsIG9yIC0xDQogKiAgICAgICAgICAgICAgICBvbiBlcnJvci4N CiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIGludCBz c2xfcmVjdl9kYXRhKHN0cnVjdCBzc2xfYXR0ciAqc3NsX2F0dHIsIHVuc2ln bmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW5ndGgpDQp7DQogICBXT0xG U1NMICpzc2w7DQogICBpbnQgcmV0ID0gMDsNCiAgIGludCBmZCA9IC0xOw0K DQogICBtZW1zZXQoYnVmLCAwLCBtYXhfbGVuZ3RoKTsNCiAgIHdvbGZTU0xf RVJSX2NsZWFyX2Vycm9yKCk7DQoNCiAgIC8qDQogICAgKiBSZWNlaXZpbmcg ZGF0YSBmcm9tIFNTTCBjb250ZXh0IGludG8gYnVmZmVyDQogICAgKi8NCiAg IHNzbCA9IHNzbF9hdHRyLT53b2xmc3NsX2F0dHIuc3NsOw0KICAgcmV0ID0g d29sZlNTTF9yZWFkKHNzbCwgYnVmLCAoaW50KW1heF9sZW5ndGgpOw0KICAg ZmQgPSB3b2xmU1NMX2dldF9mZChzc2wpOw0KDQogICBpZiAocmV0IDwgMCkN CiAgIHsNCiAgICAgIGxvZ19zc2xfZXJyb3JzKExPR19MRVZFTF9FUlJPUiwN CiAgICAgICAgICJSZWNlaXZpbmcgZGF0YSBvbiBzb2NrZXQgJWQgb3ZlciBU TFMgZmFpbGVkIiwgZmQpOw0KDQogICAgICByZXR1cm4gLTE7DQogICB9DQoN CiAgIGxvZ19lcnJvcihMT0dfTEVWRUxfUkVDRUlWRUQsICJUTFMgZnJvbSBz b2NrZXQgJWQ6ICVOIiwNCiAgICAgIGZkLCByZXQsIGJ1Zik7DQoNCiAgIHJl dHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K ICoNCiAqIEZ1bmN0aW9uICAgIDogIGdldF9wdWJsaWNfa2V5X3NpemVfc3Ry aW5nDQogKg0KICogRGVzY3JpcHRpb24gOiBUcmFuc2xhdGVzIGEgcHVibGlj IGtleSB0eXBlIHRvIGEgc3RyaW5nLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoN CiAqICAgICAgICAgIDEgIDogIGtleV90eXBlID0gVGhlIHB1YmxpYyBrZXkg dHlwZS4NCiAqDQogKiBSZXR1cm5zICAgICA6ICBTdHJpbmcgY29udGFpbmlu ZyB0aGUgdHJhbnNsYXRlZCBrZXkgc2l6ZS4NCiAqDQogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLw0Kc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wdWJsaWNf a2V5X3NpemVfc3RyaW5nKGludCBrZXlfdHlwZSkNCnsNCiAgIHN3aXRjaCAo a2V5X3R5cGUpDQogICB7DQogICAgICBjYXNlIEVWUF9QS0VZX1JTQToNCiAg ICAgICAgIHJldHVybiAiUlNBIGtleSBzaXplIjsNCiAgICAgIGNhc2UgRVZQ X1BLRVlfRFNBOg0KICAgICAgICAgcmV0dXJuICJEU0Ega2V5IHNpemUiOw0K ICAgICAgY2FzZSBFVlBfUEtFWV9FQzoNCiAgICAgICAgIHJldHVybiAiRUMg a2V5IHNpemUiOw0KICAgICAgZGVmYXVsdDoNCiAgICAgICAgIHJldHVybiAi bm9uLVJTQS9EU0EvRUMga2V5IHNpemUiOw0KICAgfQ0KfQ0KDQoNCi8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBz c2xfc3RvcmVfY2VydA0KICoNCiAqIERlc2NyaXB0aW9uIDogVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBjZXJ0aWZpY2F0ZSBpbiB0 aGUNCiAqICAgICAgICAgICAgICAgc2VydmVyJ3MgY2VydGlmaWNhdGUgdHJ1 c3RlZCBjaGFpbiBhbmQgcHJlcGFyZXMNCiAqICAgICAgICAgICAgICAgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGNlcnRpZmljYXRlLiBUaGUgaW5mb3JtYXRp b24gY2FuDQogKiAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gaW5mb3JtIHRo ZSB1c2VyIGFib3V0IGludmFsaWQgY2VydGlmaWNhdGVzLg0KICoNCiAqIFBh cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQg Y2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKiAg ICAgICAgICAyICA6ICBjZXJ0ID0gY2VydGlmaWNhdGUgZnJvbSB0cnVzdGVk IGNoYWluDQogKg0KICogUmV0dXJucyAgICAgOiAgMCBvbiBzdWNjZXNzIGFu ZCBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcg0KICoNCiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovDQpzdGF0aWMgaW50IHNzbF9zdG9yZV9jZXJ0KHN0cnVj dCBjbGllbnRfc3RhdGUgKmNzcCwgWDUwOSAqY2VydCkNCnsNCiAgIGxvbmcg bGVuOw0KICAgc3RydWN0IGNlcnRzX2NoYWluICpsYXN0ID0gJihjc3AtPnNl cnZlcl9jZXJ0c19jaGFpbik7DQogICBpbnQgcmV0ID0gMDsNCiAgIFdPTEZT U0xfQklPICpiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsNCiAgIFdPTEZT U0xfRVZQX1BLRVkgKnBrZXkgPSBOVUxMOw0KICAgY2hhciAqYmlvX21lbV9k YXRhID0gTlVMTDsNCiAgIGNoYXIgKmVuY29kZWRfdGV4dDsNCiAgIGxvbmcg bDsNCiAgIHVuc2lnbmVkIGNoYXIgc2VyaWFsX251bWJlclszMl07DQogICBp bnQgIHNlcmlhbF9udW1iZXJfc2l6ZSA9IHNpemVvZihzZXJpYWxfbnVtYmVy KTsNCiAgIFdPTEZTU0xfWDUwOV9OQU1FICppc3N1ZXJfbmFtZTsNCiAgIFdP TEZTU0xfWDUwOV9OQU1FICpzdWJqZWN0X25hbWU7DQogICBjaGFyICpzdWJq ZWN0X2FsdGVybmF0aXZlX25hbWU7DQogICBpbnQgbG9jOw0KICAgaW50IHNh bl9wcmVmaXhfcHJpbnRlZCA9IDA7DQoNCiAgIGlmICghYmlvKQ0KICAgew0K ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkJJT19uZXcoKSBm YWlsZWQuIik7DQogICAgICByZXR1cm4gLTE7DQogICB9DQoNCiAgIC8qDQog ICAgKiBTZWFyY2hpbmcgZm9yIGxhc3QgaXRlbSBpbiBjZXJ0aWZpY2F0ZXMg bGlua2VkIGxpc3QNCiAgICAqLw0KICAgd2hpbGUgKGxhc3QtPm5leHQgIT0g TlVMTCkNCiAgIHsNCiAgICAgIGxhc3QgPSBsYXN0LT5uZXh0Ow0KICAgfQ0K DQogICAvKg0KICAgICogUHJlcGFyaW5nIG5leHQgaXRlbSBpbiBsaW5rZWQg bGlzdCBmb3IgbmV4dCBjZXJ0aWZpY2F0ZQ0KICAgICovDQogICBsYXN0LT5u ZXh0ID0gemFsbG9jX29yX2RpZShzaXplb2Yoc3RydWN0IGNlcnRzX2NoYWlu KSk7DQoNCiAgIC8qDQogICAgKiBTYXZpbmcgY2VydGlmaWNhdGUgZmlsZSBp bnRvIGJ1ZmZlcg0KICAgICovDQogICBpZiAod29sZlNTTF9QRU1fd3JpdGVf YmlvX1g1MDkoYmlvLCBjZXJ0KSAhPSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7 DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNTTF9Q RU1fd3JpdGVfYmlvX1g1MDkoKSBmYWlsZWQuIik7DQogICAgICByZXQgPSAt MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgbGVuID0gd29sZlNT TF9CSU9fZ2V0X21lbV9kYXRhKGJpbywgJmJpb19tZW1fZGF0YSk7DQogICBs YXN0LT5maWxlX2J1ZiA9IG1hbGxvYygoc2l6ZV90KWxlbiArIDEpOw0KICAg aWYgKGxhc3QtPmZpbGVfYnVmID09IE5VTEwpDQogICB7DQogICAgICBsb2df ZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIkZhaWxlZCB0byBh bGxvY2F0ZSAlbHUgYnl0ZXMgdG8gc3RvcmUgdGhlIFg1MDkgUEVNIGNlcnRp ZmljYXRlLiIsDQogICAgICAgICBsZW4gKyAxKTsNCiAgICAgIHJldCA9IC0x Ow0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICBzdHJuY3B5KGxhc3Qt PmZpbGVfYnVmLCBiaW9fbWVtX2RhdGEsIChzaXplX3QpbGVuKTsNCiAgIGxh c3QtPmZpbGVfYnVmW2xlbl0gPSAnXDAnOw0KICAgd29sZlNTTF9CSU9fZnJl ZShiaW8pOw0KICAgYmlvID0gd29sZlNTTF9CSU9fbmV3KHdvbGZTU0xfQklP X3NfbWVtKCkpOw0KICAgaWYgKCFiaW8pDQogICB7DQogICAgICBsb2dfZXJy b3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNTTF9CSU9fbmV3KCkgZmFpbGVk LiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9 DQoNCiAgIC8qDQogICAgKiBTYXZpbmcgY2VydGlmaWNhdGUgaW5mb3JtYXRp b24gaW50byBidWZmZXINCiAgICAqLw0KICAgbCA9IHdvbGZTU0xfWDUwOV9n ZXRfdmVyc2lvbihjZXJ0KTsNCiAgIGlmIChsID49IDAgJiYgbCA8PSAyKQ0K ICAgew0KICAgICAgaWYgKHdvbGZTU0xfQklPX3ByaW50ZihiaW8sICJjZXJ0 LiB2ZXJzaW9uICAgICA6ICVsZFxuIiwgbCArIDEpIDw9IDApDQogICAgICB7 DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNT TF9CSU9fcHJpbnRmKCkgZm9yIHZlcnNpb24gZmFpbGVkLiIpOw0KICAgICAg ICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQog ICB9DQogICBlbHNlDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHJp bnRmKGJpbywgImNlcnQuIHZlcnNpb24gICAgIDogVW5rbm93biAoJWxkKVxu IiwgbCkgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0df TEVWRUxfRVJST1IsICJ3b2xmU1NMX0JJT19wcmludGYoKSBmb3IgdmVyc2lv biBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdv dG8gZXhpdDsNCiAgICAgIH0NCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQklP X3B1dHMoYmlvLCAic2VyaWFsIG51bWJlciAgICAgOiAiKSA8PSAwKQ0KICAg ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg ICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIHNlcmlhbCBudW1iZXIgZmFpbGVk LiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9 DQogICBpZiAod29sZlNTTF9YNTA5X2dldF9zZXJpYWxfbnVtYmVyKGNlcnQs IHNlcmlhbF9udW1iZXIsICZzZXJpYWxfbnVtYmVyX3NpemUpDQogICAgICAh PSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H X0xFVkVMX0VSUk9SLCAid29sZlNTTF9YNTA5X2dldF9zZXJpYWxfbnVtYmVy KCkgZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4 aXQ7DQogICB9DQoNCiAgIGlmIChzZXJpYWxfbnVtYmVyX3NpemUgPD0gKGlu dClzaXplb2YoY2hhcikpDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9f cHJpbnRmKGJpbywgIiVsdSAoMHglbHgpXG4iLCBzZXJpYWxfbnVtYmVyWzBd LA0KICAgICAgICAgICAgc2VyaWFsX251bWJlclswXSkgPD0gMCkNCiAgICAg IHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAg ICAgICAgICAid29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIHNlcmlhbCBudW1i ZXIgYXMgc2luZ2xlIGJ5dGUgZmFpbGVkLiIpOw0KICAgICAgICAgcmV0ID0g LTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBl bHNlDQogICB7DQogICAgICBpbnQgaTsNCiAgICAgIGZvciAoaSA9IDA7IGkg PCBzZXJpYWxfbnVtYmVyX3NpemU7IGkrKykNCiAgICAgIHsNCiAgICAgICAg IGlmICh3b2xmU1NMX0JJT19wcmludGYoYmlvLCAiJTAyeCVjIiwgc2VyaWFs X251bWJlcltpXSwNCiAgICAgICAgICAgICAgICgoaSArIDEgPT0gc2VyaWFs X251bWJlcl9zaXplKSA/ICdcbicgOiAnOicpKSA8PSAwKQ0KICAgICAgICAg ew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAg ICAgICAgICAgICAgICJ3b2xmU1NMX0JJT19wcmludGYoKSBmb3Igc2VyaWFs IG51bWJlciBieXRlcyBmYWlsZWQuIik7DQogICAgICAgICAgICByZXQgPSAt MTsNCiAgICAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgICAgIH0NCiAgICAg IH0NCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQklPX3B1dHMoYmlvLCAiaXNz dWVyIG5hbWUgICAgICAgOiAiKSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vy cm9yKExPR19MRVZFTF9FUlJPUiwgIndvbGZTU0xfQklPX3B1dHMoKSBmb3Ig aXNzdWVyIGZhaWxlZC4iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290 byBleGl0Ow0KICAgfQ0KICAgaXNzdWVyX25hbWUgPSB3b2xmU1NMX1g1MDlf Z2V0X2lzc3Vlcl9uYW1lKGNlcnQpOw0KICAgaWYgKHdvbGZTU0xfWDUwOV9O QU1FX2dldF9zeihpc3N1ZXJfbmFtZSkgPD0gMCkNCiAgIHsNCiAgICAgIGlm ICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIm5vbmUiKSA8PSAwKQ0KICAgICAg ew0KICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg ICAgICAgICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIGlzc3VlciBuYW1lIGZh aWxlZC4iKTsNCiAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgZ290byBl eGl0Ow0KICAgICAgfQ0KICAgfQ0KICAgZWxzZSBpZiAod29sZlNTTF9YNTA5 X05BTUVfcHJpbnRfZXgoYmlvLCBpc3N1ZXJfbmFtZSwgMCwgMCkgPCAwKQ0K ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg ICAgICJ3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leCgpIGZvciBpc3N1ZXIg ZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7 DQogICB9DQoNCiAgIGlmICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuc3Vi amVjdCBuYW1lICAgICAgOiAiKSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vy cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX0JJT19w dXRzKCkgZm9yIHN1YmplY3QgbmFtZSBmYWlsZWQuIik7DQogICAgICByZXQg PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIHN1YmplY3RfbmFt ZSA9IHdvbGZTU0xfWDUwOV9nZXRfc3ViamVjdF9uYW1lKGNlcnQpOw0KICAg aWYgKHdvbGZTU0xfWDUwOV9OQU1FX2dldF9zeihzdWJqZWN0X25hbWUpIDw9 IDApDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHV0cyhiaW8sICJu b25lIikgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0df TEVWRUxfRVJST1IsDQogICAgICAgICAgICAid29sZlNTTF9CSU9fcHV0cygp IGZvciBzdWJqZWN0IG5hbWUgZmFpbGVkLiIpOw0KICAgICAgICAgcmV0ID0g LTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBl bHNlIGlmICh3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leChiaW8sIHN1Ympl Y3RfbmFtZSwgMCwgMCkgPCAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExP R19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX1g1MDlfTkFNRV9w cmludF9leCgpIGZvciBzdWJqZWN0IG5hbWUgZmFpbGVkLiIpOw0KICAgICAg cmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIGlmICh3 b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuaXNzdWVkICBvbiAgICAgICAgOiAi KSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP UiwNCiAgICAgICAgICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIGlzc3VlZCBv biBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhp dDsNCiAgIH0NCiAgIGlmICghd29sZlNTTF9BU04xX1RJTUVfcHJpbnQoYmlv LCB3b2xmU1NMX1g1MDlfZ2V0X25vdEJlZm9yZShjZXJ0KSkpDQogICB7DQog ICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIndv bGZTU0xfQVNOMV9USU1FX3ByaW50KCkgZm9yIGlzc3VlZCBvbiBmYWlsZWQu Iik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0N Cg0KICAgaWYgKHdvbGZTU0xfQklPX3B1dHMoYmlvLCAiXG5leHBpcmVzIG9u ICAgICAgICA6ICIpIDw9IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H X0xFVkVMX0VSUk9SLA0KICAgICAgICAgIndvbGZTU0xfQklPX3B1dHMoKSBm b3IgZXhwaXJlcyBvbiBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAg ICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIGlmICghd29sZlNTTF9BU04xX1RJ TUVfcHJpbnQoYmlvLCB3b2xmU1NMX1g1MDlfZ2V0X25vdEFmdGVyKGNlcnQp KSkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQog ICAgICAgICAid29sZlNTTF9BU04xX1RJTUVfcHJpbnQoKSBmb3IgZXhwaXJl cyBvbiBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8g ZXhpdDsNCiAgIH0NCg0KICAgLyogWFhYOiBTaG93IHNpZ25hdHVyZSBhbGdv cml0aG0gKi8NCg0KICAgcGtleSA9IHdvbGZTU0xfWDUwOV9nZXRfcHVia2V5 KGNlcnQpOw0KICAgaWYgKCFwa2V5KQ0KICAgew0KICAgICAgbG9nX2Vycm9y KExPR19MRVZFTF9FUlJPUiwgIndvbGZTU0xfWDUwOV9nZXRfcHVia2V5KCkg ZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7 DQogICB9DQogICByZXQgPSB3b2xmU1NMX0JJT19wcmludGYoYmlvLCAiXG4l LTE4czogJWQgYml0cyIsDQogICAgICBnZXRfcHVibGljX2tleV9zaXplX3N0 cmluZyh3b2xmU1NMX0VWUF9QS0VZX2Jhc2VfaWQocGtleSkpLA0KICAgICAg d29sZlNTTF9FVlBfUEtFWV9iaXRzKHBrZXkpKTsNCiAgIGlmIChyZXQgPD0g MCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQog ICAgICAgICAid29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIGtleSBzaXplIGZh aWxlZC4iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0K ICAgfQ0KDQogICAvKg0KICAgICogWFhYOiBTaG93IGNlcnQgdXNhZ2UsIGV0 Yy4NCiAgICAqLw0KICAgbG9jID0gd29sZlNTTF9YNTA5X2dldF9leHRfYnlf TklEKGNlcnQsIE5JRF9iYXNpY19jb25zdHJhaW50cywgLTEpOw0KICAgaWYg KGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdPTEZTU0xfWDUwOV9FWFRFTlNJ T04gKmV4ID0gd29sZlNTTF9YNTA5X2dldF9leHQoY2VydCwgbG9jKTsNCiAg ICAgIGlmIChCSU9fcHV0cyhiaW8sICJcbmJhc2ljIGNvbnN0cmFpbnRzIDog IikgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVW RUxfRVJST1IsDQogICAgICAgICAgICAiQklPX3ByaW50ZigpIGZvciBiYXNp YyBjb25zdHJhaW50cyBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAtMTsN CiAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgIH0NCiAgICAgIGlmICghd29s ZlNTTF9YNTA5VjNfRVhUX3ByaW50KGJpbywgZXgsIDAsIDApKQ0KICAgICAg ew0KICAgICAgICAgaWYgKCF3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50X2V4 KGJpbywNCiAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJT05f Z2V0X2RhdGEoZXgpLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX1JG QzIyNTMpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExP R19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FTTjFf U1RSSU5HX3ByaW50X2V4KCkgZm9yIGJhc2ljIGNvbnN0cmFpbnRzIGZhaWxl ZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgICAgZ290 byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KDQogICB3aGls ZSAoKHN1YmplY3RfYWx0ZXJuYXRpdmVfbmFtZSA9IHdvbGZTU0xfWDUwOV9n ZXRfbmV4dF9hbHRuYW1lKGNlcnQpKQ0KICAgICAgIT0gTlVMTCkNCiAgIHsN CiAgICAgIGlmIChzYW5fcHJlZml4X3ByaW50ZWQgPT0gMCkNCiAgICAgIHsN CiAgICAgICAgIHJldCA9IHdvbGZTU0xfQklPX3ByaW50ZihiaW8sICJcbnN1 YmplY3QgYWx0IG5hbWUgIDogIik7DQogICAgICAgICBzYW5fcHJlZml4X3By aW50ZWQgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKHJldCA+IDApDQogICAg ICB7DQogICAgICAgICByZXQgPSB3b2xmU1NMX0JJT19wcmludGYoYmlvLCAi JXMgIiwgc3ViamVjdF9hbHRlcm5hdGl2ZV9uYW1lKTsNCiAgICAgIH0NCiAg ICAgIGlmIChyZXQgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAid29sZlNTTF9CSU9f cHJpbnRmKCkgZm9yIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZSBmYWlsZWQu Iik7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdvdG8gZXhpdDsN CiAgICAgIH0NCiAgIH0NCg0KI2lmIDANCiAgIC8qDQogICAgKiBUaGlzIGNv ZGUgY29tcGlsZXMgYnV0IGRvZXMgbm90IHdvcmsgYmVjYXVzZSB3b2xmU1NM DQogICAgKiBzZXRzIE5JRF9uZXRzY2FwZV9jZXJ0X3R5cGUgdG8gTklEX3Vu ZGVmLg0KICAgICovDQogICBsb2MgPSB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9i eV9OSUQoY2VydCwgTklEX25ldHNjYXBlX2NlcnRfdHlwZSwgLTEpOw0KICAg aWYgKGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdPTEZTU0xfWDUwOV9FWFRF TlNJT04gKmV4ID0gd29sZlNTTF9YNTA5X2dldF9leHQoY2VydCwgbG9jKTsN CiAgICAgIGlmICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuY2VydC4gdHlw ZSAgICAgICAgOiAiKSA8PSAwKQ0KICAgICAgew0KICAgICAgICAgbG9nX2Vy cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICJ3b2xmU1NMX0JJ T19wcmludGYoKSBmb3IgY2VydCB0eXBlIGZhaWxlZC4iKTsNCiAgICAgICAg IHJldCA9IC0xOw0KICAgICAgICAgZ290byBleGl0Ow0KICAgICAgfQ0KICAg ICAgaWYgKCF3b2xmU1NMX1g1MDlWM19FWFRfcHJpbnQoYmlvLCBleCwgMCwg MCkpDQogICAgICB7DQogICAgICAgICBpZiAoIXdvbGZTU0xfQVNOMV9TVFJJ TkdfcHJpbnRfZXgoYmlvLA0KICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5 X0VYVEVOU0lPTl9nZXRfZGF0YShleCksDQogICAgICAgICAgICAgICBBU04x X1NUUkZMR1NfUkZDMjI1MykpDQogICAgICAgICB7DQogICAgICAgICAgICBs b2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgICAgICAgIndv bGZTU0xfQVNOMV9TVFJJTkdfcHJpbnRfZXgoKSBmb3IgY2VydCB0eXBlIGZh aWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgICAg Z290byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KI2VuZGlm DQoNCiNpZiAwDQogICAvKg0KICAgICogVGhpcyBjb2RlIGNvbXBpbGVzIGJ1 dCBkb2VzIG5vdCB3b3JrLiB3b2xmU1NMX09CSl9vYmoybmlkKCkNCiAgICAq IHRyaWdnZXJzIGEgJ1g1MDlWM19FWFRfcHJpbnQgbm90IHlldCBpbXBsZW1l bnRlZCBmb3IgZXh0IHR5cGUnIG1lc3NhZ2UuDQogICAgICovDQogICBsb2Mg PSB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9OSUQoY2VydCwgTklEX2tleV91 c2FnZSwgLTEpOw0KICAgaWYgKGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdP TEZTU0xfWDUwOV9FWFRFTlNJT04gKmV4dGVuc2lvbiA9IHdvbGZTU0xfWDUw OV9nZXRfZXh0KGNlcnQsIGxvYyk7DQogICAgICBpZiAoQklPX3B1dHMoYmlv LCAiXG5rZXkgdXNhZ2UgICAgICAgICA6ICIpIDw9IDApDQogICAgICB7DQog ICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg ICAgIndvbGZTU0xfQklPX3ByaW50ZigpIGZvciBrZXkgdXNhZ2UgZmFpbGVk LiIpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7 DQogICAgICB9DQogICAgICBpZiAoIXdvbGZTU0xfWDUwOVYzX0VYVF9wcmlu dChiaW8sIGV4dGVuc2lvbiwgMCwgMCkpDQogICAgICB7DQogICAgICAgICBp ZiAoIXdvbGZTU0xfQVNOMV9TVFJJTkdfcHJpbnRfZXgoYmlvLA0KICAgICAg ICAgICAgICAgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfZGF0YShleHRl bnNpb24pLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX1JGQzIyNTMp KQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZF TF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FTTjFfU1RSSU5H X3ByaW50X2V4KCkgZm9yIGtleSB1c2FnZSBmYWlsZWQuIik7DQogICAgICAg ICAgICByZXQgPSAtMTsNCiAgICAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAg ICAgIH0NCiAgICAgIH0NCiAgIH0NCiNlbmRpZg0KDQojaWYgMA0KICAgLyoN CiAgICAqIFRoaXMgY29tcGlsZXMgYnV0IGRvZXNuJ3Qgd29yay4gd29sZlNT TF9YNTA5X2V4dF9pc1NldF9ieV9OSUQoKQ0KICAgICogY29tcGxhaW5zIGFi b3V0ICJOSUQgbm90IGluIHRhYmxlIi4NCiAgICAqLw0KICAgbG9jID0gd29s ZlNTTF9YNTA5X2dldF9leHRfYnlfTklEKGNlcnQsIE5JRF9leHRfa2V5X3Vz YWdlLCAtMSk7DQogICBpZiAobG9jICE9IC0xKSB7DQogICAgICBXT0xGU1NM X1g1MDlfRVhURU5TSU9OICpleCA9IHdvbGZTU0xfWDUwOV9nZXRfZXh0KGNl cnQsIGxvYyk7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHV0cyhiaW8sICJc bmV4dCBrZXkgdXNhZ2UgICAgIDogIikgPD0gMCkNCiAgICAgIHsNCiAgICAg ICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAi d29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIGV4dCBrZXkgdXNhZ2UgZmFpbGVk LiIpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7 DQogICAgICB9DQogICAgICBpZiAoIXdvbGZTU0xfWDUwOVYzX0VYVF9wcmlu dChiaW8sIGV4LCAwLCAwKSkNCiAgICAgIHsNCiAgICAgICAgIGlmICghd29s ZlNTTF9BU04xX1NUUklOR19wcmludF9leChiaW8sDQogICAgICAgICAgICAg ICB3b2xmU1NMX1g1MDlfRVhURU5TSU9OX2dldF9kYXRhKGV4KSwNCiAgICAg ICAgICAgICAgIEFTTjFfU1RSRkxHU19SRkMyMjUzKSkNCiAgICAgICAgIHsN CiAgICAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAg ICAgICAgICAgICAid29sZlNTTF9BU04xX1NUUklOR19wcmludF9leCgpIGZv ciBleHQga2V5IHVzYWdlIGZhaWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9 IC0xOw0KICAgICAgICAgICAgZ290byBleGl0Ow0KICAgICAgICAgfQ0KICAg ICAgfQ0KICAgfQ0KI2VuZGlmDQoNCiNpZiAwDQogICAvKg0KICAgICogVGhp cyBjb21waWxlcyBidXQgZG9lc24ndCB3b3JrLiB3b2xmU1NMX1g1MDlfZXh0 X2lzU2V0X2J5X05JRCgpDQogICAgKiBjb21wbGFpbnMgYWJvdXQgIk5JRCBu b3QgaW4gdGFibGUiLiBYWFg6IGFnYWluPw0KICAgICovDQogICBsb2MgPSB3 b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9OSUQoY2VydCwgTklEX2NlcnRpZmlj YXRlX3BvbGljaWVzLCAtMSk7DQogICBpZiAobG9jICE9IC0xKQ0KICAgew0K ICAgICAgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiAqZXggPSB3b2xmU1NMX1g1 MDlfZ2V0X2V4dChjZXJ0LCBsb2MpOw0KICAgICAgaWYgKHdvbGZTU0xfQklP X3B1dHMoYmlvLCAiXG5jZXJ0aWZpY2F0ZSBwb2xpY2llcyA6ICIpIDw9IDAp DQogICAgICB7DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9S LA0KICAgICAgICAgICAgIndvbGZTU0xfQklPX3ByaW50ZigpIGZvciBjZXJ0 aWZpY2F0ZSBwb2xpY2llcyBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAt MTsNCiAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgIH0NCiAgICAgIGlmICgh d29sZlNTTF9YNTA5VjNfRVhUX3ByaW50KGJpbywgZXgsIDAsIDApKQ0KICAg ICAgew0KICAgICAgICAgaWYgKCF3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50 X2V4KGJpbywNCiAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJ T05fZ2V0X2RhdGEoZXgpLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdT X1JGQzIyNTMpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9y KExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FT TjFfU1RSSU5HX3ByaW50X2V4KCkgZm9yIGNlcnRpZmljYXRlIHBvbGljaWVz IGZhaWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAg ICAgZ290byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KI2Vu ZGlmDQoNCiAgIC8qIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8NCiAgIHN0YXRp YyBjb25zdCBjaGFyIHplcm8gPSAwOw0KICAgd29sZlNTTF9CSU9fd3JpdGUo YmlvLCAmemVybywgMSk7DQoNCiAgIGxlbiA9IHdvbGZTU0xfQklPX2dldF9t ZW1fZGF0YShiaW8sICZiaW9fbWVtX2RhdGEpOw0KICAgaWYgKGxlbiA8PSAw KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkJJ T19nZXRfbWVtX2RhdGEoKSByZXR1cm5lZCAlbGQgIg0KICAgICAgICAgIndo aWxlIGdhdGhlcmluZyBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbi4iLCBsZW4p Ow0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQog ICBlbmNvZGVkX3RleHQgPSBodG1sX2VuY29kZShiaW9fbWVtX2RhdGEpOw0K ICAgaWYgKGVuY29kZWRfdGV4dCA9PSBOVUxMKQ0KICAgew0KICAgICAgbG9n X2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWlsZWQgdG8g SFRNTC1lbmNvZGUgdGhlIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uLiIpOw0K ICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAg IHN0cmxjcHkobGFzdC0+aW5mb19idWYsIGVuY29kZWRfdGV4dCwgc2l6ZW9m KGxhc3QtPmluZm9fYnVmKSk7DQogICBmcmVleihlbmNvZGVkX3RleHQpOw0K ICAgcmV0ID0gMDsNCg0KZXhpdDoNCiAgIGlmIChiaW8pDQogICB7DQogICAg ICB3b2xmU1NMX0JJT19mcmVlKGJpbyk7DQogICB9DQogICBpZiAocGtleSkN CiAgIHsNCiAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZnJlZShwa2V5KTsNCiAg IH0NCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGhvc3RfdG9faGFzaA0K ICoNCiAqIERlc2NyaXB0aW9uIDogIENyZWF0ZXMgYSBzaGEyNTYgaGFzaCBm cm9tIGhvc3QgbmFtZS4gVGhlIGhvc3QgbmFtZQ0KICogICAgICAgICAgICAg ICAgaXMgdGFrZW4gZnJvbSB0aGUgY3NwIHN0cnVjdHVyZSBhbmQgc3RvcmVk IGludG8gaXQuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAg MSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZlcnMsIGhl YWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6IC0xID0+IEVy cm9yIHdoaWxlIGNyZWF0aW5nIGhhc2gNCiAqICAgICAgICAgICAgICAgIDAg PT4gSGFzaCBjcmVhdGVkIHN1Y2Nlc3NmdWxseQ0KICoNCiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQpzdGF0aWMgaW50IGhvc3RfdG9faGFzaChzdHJ1 Y3QgY2xpZW50X3N0YXRlICpjc3ApDQp7DQogICBpbnQgcmV0Ow0KDQogICBy ZXQgPSB3Y19TaGEyNTZIYXNoKChjb25zdCBieXRlICopY3NwLT5odHRwLT5o b3N0LA0KICAgICAgKHdvcmQzMilzdHJsZW4oY3NwLT5odHRwLT5ob3N0KSwg KGJ5dGUgKiljc3AtPmh0dHAtPmhhc2hfb2ZfaG9zdCk7DQogICBpZiAocmV0 ICE9IDApDQogICB7DQogICAgICAgIHJldHVybiAtMTsNCiAgIH0NCg0KICAg cmV0dXJuIGNyZWF0ZV9oZXhhZGVjaW1hbF9oYXNoX29mX2hvc3QoY3NwKTsN Cg0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBG dW5jdGlvbiAgICA6ICBjcmVhdGVfY2xpZW50X3NzbF9jb25uZWN0aW9uDQog Kg0KICogRGVzY3JpcHRpb24gOiAgQ3JlYXRlcyBhIFRMUy1zZWN1cmVkIGNv bm5lY3Rpb24gd2l0aCB0aGUgY2xpZW50Lg0KICoNCiAqIFBhcmFtZXRlcnMg IDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQgY2xpZW50IHN0 YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKg0KICogUmV0dXJu cyAgICAgOiAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBpZiBjb25u ZWN0aW9uIHdhc24ndCBjcmVhdGVkDQogKiAgICAgICAgICAgICAgICBzdWNj ZXNzZnVsbHkuDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4 dGVybiBpbnQgY3JlYXRlX2NsaWVudF9zc2xfY29ubmVjdGlvbihzdHJ1Y3Qg Y2xpZW50X3N0YXRlICpjc3ApDQp7DQogICBzdHJ1Y3Qgc3NsX2F0dHIgKnNz bF9hdHRyID0gJmNzcC0+c3NsX2NsaWVudF9hdHRyOw0KICAgLyogUGF0aHMg dG8gY2VydGlmaWNhdGVzIGZpbGUgYW5kIGtleSBmaWxlICovDQogICBjaGFy ICprZXlfZmlsZSAgPSBOVUxMOw0KICAgY2hhciAqY2VydF9maWxlID0gTlVM TDsNCiAgIGludCByZXQgPSAwOw0KICAgV09MRlNTTCAqc3NsOw0KDQogICAv KiBTaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVs c2UuICovDQogICB3b2xmc3NsX2luaXQoKTsNCg0KICAgLyoNCiAgICAqIFBy ZXBhcmluZyBoYXNoIG9mIGhvc3QgZm9yIGNyZWF0aW5nIGNlcnRpZmljYXRl cw0KICAgICovDQogICByZXQgPSBob3N0X3RvX2hhc2goY3NwKTsNCiAgIGlm IChyZXQgIT0gMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxf RVJST1IsICJHZW5lcmF0aW5nIGhhc2ggb2YgaG9zdCBmYWlsZWQ6ICVkIiwg cmV0KTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAg fQ0KDQogICAvKg0KICAgICogUHJlcGFyaW5nIHBhdGhzIHRvIGNlcnRpZmlj YXRlcyBmaWxlcyBhbmQga2V5IGZpbGUNCiAgICAqLw0KICAgY2VydF9maWxl ID0gbWFrZV9jZXJ0c19wYXRoKGNzcC0+Y29uZmlnLT5jZXJ0aWZpY2F0ZV9k aXJlY3RvcnksDQogICAgICAoY29uc3QgY2hhciAqKWNzcC0+aHR0cC0+aGFz aF9vZl9ob3N0X2hleCwgQ0VSVF9GSUxFX1RZUEUpOw0KICAga2V5X2ZpbGUg ID0gbWFrZV9jZXJ0c19wYXRoKGNzcC0+Y29uZmlnLT5jZXJ0aWZpY2F0ZV9k aXJlY3RvcnksDQogICAgICAoY29uc3QgY2hhciAqKWNzcC0+aHR0cC0+aGFz aF9vZl9ob3N0X2hleCwgS0VZX0ZJTEVfVFlQRSk7DQoNCiAgIGlmIChjZXJ0 X2ZpbGUgPT0gTlVMTCB8fCBrZXlfZmlsZSA9PSBOVUxMKQ0KICAgew0KICAg ICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIC8q IERvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYSBuZXcgaG9zdCBjZXJ0aWZpY2F0 ZSBhbmQga2V5PyAqLw0KICAgaWYgKCFmaWxlX2V4aXN0cyhjZXJ0X2ZpbGUp IHx8ICFmaWxlX2V4aXN0cyhrZXlfZmlsZSkgfHwNCiAgICAgICBzc2xfY2Vy dGlmaWNhdGVfaXNfaW52YWxpZChjZXJ0X2ZpbGUpKQ0KICAgew0KICAgICAg LyoNCiAgICAgICAqIFllcyB3ZSBkby4gTG9jayBtdXRleCB0byBwcmV2ZW50 IGNlcnRpZmljYXRlIGFuZA0KICAgICAgICoga2V5IGluY29uc2lzdGVuY2ll cy4NCiAgICAgICAqLw0KICAgICAgcHJpdm94eV9tdXRleF9sb2NrKCZjZXJ0 aWZpY2F0ZV9tdXRleCk7DQogICAgICByZXQgPSBnZW5lcmF0ZV9ob3N0X2Nl cnRpZmljYXRlKGNzcCwgY2VydF9maWxlLCBrZXlfZmlsZSk7DQogICAgICBw cml2b3h5X211dGV4X3VubG9jaygmY2VydGlmaWNhdGVfbXV0ZXgpOw0KICAg ICAgaWYgKHJldCA8IDApDQogICAgICB7DQogICAgICAgICAvKg0KICAgICAg ICAgICogTm8gbmVlZCB0byBsb2cgc29tZXRoaW5nLCBnZW5lcmF0ZV9ob3N0 X2NlcnRpZmljYXRlKCkNCiAgICAgICAgICAqIHRvb2sgY2FyZSBvZiBpdC4N CiAgICAgICAgICAqLw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBn b3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBzc2xfYXR0ci0+d29sZnNz bF9hdHRyLmN0eCA9IHdvbGZTU0xfQ1RYX25ldyh3b2xmU1NMdjIzX21ldGhv ZCgpKTsNCiAgIGlmIChzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCA9PSBO VUxMKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwg IlVuYWJsZSB0byBjcmVhdGUgVExTIGNvbnRleHQuIik7DQogICAgICByZXQg PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgLyogU2V0IHRo ZSBrZXkgYW5kIGNlcnQgKi8NCiAgIGlmICh3b2xmU1NMX0NUWF91c2VfY2Vy dGlmaWNhdGVfZmlsZShzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCwNCiAg ICAgICAgIGNlcnRfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkgIT0gV09MRlNT TF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9F UlJPUiwNCiAgICAgICAgICJMb2FkaW5nIGhvc3QgY2VydGlmaWNhdGUgJXMg ZmFpbGVkLiIsIGNlcnRfZmlsZSk7DQogICAgICByZXQgPSAtMTsNCiAgICAg IGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9Q cml2YXRlS2V5X2ZpbGUoc3NsX2F0dHItPndvbGZzc2xfYXR0ci5jdHgsDQog ICAgICAgICBrZXlfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkgIT0gV09MRlNT TF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9F UlJPUiwNCiAgICAgICAgICJMb2FkaW5nIGhvc3QgY2VydGlmaWNhdGUgcHJp dmF0ZSBrZXkgJXMgZmFpbGVkLiIsIGtleV9maWxlKTsNCiAgICAgIHJldCA9 IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICB3b2xmU1NMX0NU WF9zZXRfb3B0aW9ucyhzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCwgV09M RlNTTF9PUF9OT19TU0x2Myk7DQoNCiAgIHNzbCA9IHNzbF9hdHRyLT53b2xm c3NsX2F0dHIuc3NsID0gd29sZlNTTF9uZXcoc3NsX2F0dHItPndvbGZzc2xf YXR0ci5jdHgpOw0KDQogICBpZiAod29sZlNTTF9zZXRfZmQoc3NsLCBjc3At PmNmZCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vy cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX3NldF9m ZCgpIGZhaWxlZCB0byBzZXQgdGhlIGNsaWVudCBzb2NrZXQuIik7DQogICAg ICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYg KGNzcC0+Y29uZmlnLT5jaXBoZXJfbGlzdCAhPSBOVUxMKQ0KICAgew0KICAg ICAgaWYgKCF3b2xmU1NMX3NldF9jaXBoZXJfbGlzdChzc2wsIGNzcC0+Y29u ZmlnLT5jaXBoZXJfbGlzdCkpDQogICAgICB7DQogICAgICAgICBsb2dfZXJy b3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgICAgIlNldHRpbmcgdGhl IGNpcGhlciBsaXN0ICclcycgZm9yIHRoZSBjbGllbnQgY29ubmVjdGlvbiBm YWlsZWQuIiwNCiAgICAgICAgICAgIGNzcC0+Y29uZmlnLT5jaXBoZXJfbGlz dCk7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdvdG8gZXhpdDsN CiAgICAgIH0NCiAgIH0NCg0KICAgLyoNCiAgICAqICBIYW5kc2hha2Ugd2l0 aCBjbGllbnQNCiAgICAqLw0KICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05O RUNULA0KICAgICAgIlBlcmZvcm1pbmcgdGhlIFRMUy9TU0wgaGFuZHNoYWtl IHdpdGggY2xpZW50LiBIYXNoIG9mIGhvc3Q6ICVzIiwNCiAgICAgIGNzcC0+ aHR0cC0+aGFzaF9vZl9ob3N0X2hleCk7DQoNCiAgIHJldCA9IHdvbGZTU0xf YWNjZXB0KHNzbCk7DQogICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykN CiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfQ09OTkVDVCwNCiAg ICAgICAgICJDbGllbnQgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCBvdmVyICVz ICglcykuIiwNCiAgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcnNpb24oc3NsKSwg d29sZlNTTF9nZXRfY2lwaGVyX25hbWUoc3NsKSk7DQogICAgICBjc3AtPnNz bF93aXRoX2NsaWVudF9pc19vcGVuZWQgPSAxOw0KICAgICAgcmV0ID0gMDsN CiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIGNoYXIgYnVmZmVyWzgwXTsN CiAgICAgIGludCBlcnJvciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgcmV0 KTsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAg ICAiVGhlIFRMUyBoYW5kc2hha2Ugd2l0aCB0aGUgY2xpZW50IGZhaWxlZC4g ZXJyb3IgPSAlZCwgJXMiLA0KICAgICAgICAgZXJyb3IsIHdvbGZTU0xfRVJS X2Vycm9yX3N0cmluZygodW5zaWduZWQgbG9uZyllcnJvciwgYnVmZmVyKSk7 DQogICAgICByZXQgPSAtMTsNCiAgIH0NCg0KZXhpdDoNCiAgIC8qDQogICAg KiBGcmVlaW5nIGFsbG9jYXRlZCBwYXRocyB0byBmaWxlcw0KICAgICovDQog ICBmcmVleihjZXJ0X2ZpbGUpOw0KICAgZnJlZXooa2V5X2ZpbGUpOw0KDQog ICAvKiBGcmVlaW5nIHN0cnVjdHVyZXMgaWYgY29ubmVjdGlvbiB3YXNuJ3Qg Y3JlYXRlZCBzdWNjZXNzZnVsbHkgKi8NCiAgIGlmIChyZXQgPCAwKQ0KICAg ew0KICAgICAgZnJlZV9jbGllbnRfc3NsX3N0cnVjdHVyZXMoY3NwKTsNCiAg IH0NCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIHNodXRkb3duX2Nvbm5l Y3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBTaHV0cyBkb3duIGEgVExT IGNvbm5lY3Rpb24gaWYgdGhlIHNvY2tldCBpcyBzdGlsbA0KICogICAgICAg ICAgICAgICAgYWxpdmUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAg ICAgICAgMSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZl cnMsIGhlYWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6ICBO L0ENCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIHZv aWQgc2h1dGRvd25fY29ubmVjdGlvbihXT0xGU1NMICpzc2wsIGNvbnN0IGNo YXIgKnR5cGUpDQp7DQogICBpbnQgc2h1dGRvd25fYXR0ZW1wdHMgPSAwOw0K ICAgaW50IHJldDsNCiAgIGludCBmZDsNCiAgIGVudW0geyBNQVhfU0hVVERP V05fQVRURU1QVFMgPSA1IH07DQoNCiAgIGZkID0gd29sZlNTTF9nZXRfZmQo c3NsKTsNCg0KICAgZG8NCiAgIHsNCiAgICAgIGlmICghc29ja2V0X2lzX3N0 aWxsX2FsaXZlKGZkKSkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihM T0dfTEVWRUxfQ09OTkVDVCwgIk5vdCBzaHV0dGluZyBkb3duICVzIGNvbm5l Y3Rpb24gIg0KICAgICAgICAgICAgIm9uIHNvY2tldCAlZC4gVGhlIHNvY2tl dCBpcyBubyBsb25nZXIgYWxpdmUuIiwgdHlwZSwgZmQpOw0KICAgICAgICAg cmV0dXJuOw0KICAgICAgfQ0KICAgICAgcmV0ID0gd29sZlNTTF9zaHV0ZG93 bihzc2wpOw0KICAgICAgc2h1dGRvd25fYXR0ZW1wdHMrKzsNCiAgICAgIGlm IChXT0xGU1NMX1NVQ0NFU1MgIT0gcmV0KQ0KICAgICAgew0KICAgICAgICAg bG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiRmFpbGVkIHRvIHNodXRk b3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgICAgIm9uIHNvY2tldCAl ZC4gQXR0ZW1wdHMgc28gZmFyOiAlZC4iLCB0eXBlLCBmZCwgc2h1dGRvd25f YXR0ZW1wdHMpOw0KICAgICAgfQ0KICAgfSB3aGlsZSAocmV0ID09IFdPTEZT U0xfU0hVVERPV05fTk9UX0RPTkUgJiYNCiAgICAgIHNodXRkb3duX2F0dGVt cHRzIDwgTUFYX1NIVVRET1dOX0FUVEVNUFRTKTsNCiAgIGlmIChXT0xGU1NM X1NVQ0NFU1MgIT0gcmV0KQ0KICAgew0KICAgICAgY2hhciBidWZmZXJbODBd Ow0KICAgICAgaW50IGVycm9yID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCBy ZXQpOw0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiRmFp bGVkIHRvIHNodXRkb3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgIm9u IHNvY2tldCAlZCBhZnRlciAlZCBhdHRlbXB0cy4gcmV0OiAlZCwgZXJyb3I6 ICVkLCAlcyIsDQogICAgICAgICB0eXBlLCBmZCwgc2h1dGRvd25fYXR0ZW1w dHMsIHJldCwgZXJyb3IsDQogICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9z dHJpbmcoKHVuc2lnbmVkIGxvbmcpZXJyb3IsIGJ1ZmZlcikpOw0KICAgfQ0K ICAgZWxzZSBpZiAoc2h1dGRvd25fYXR0ZW1wdHMgPiAxKQ0KICAgew0KICAg ICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiU3VjY2VlZGVkIHRv IHNodXRkb3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgIm9uIHNvY2tl dCAlZCBhZnRlciAlZCBhdHRlbXB0cy4iLCB0eXBlLCBmZCwgc2h1dGRvd25f YXR0ZW1wdHMpOw0KICAgfQ0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBjbG9zZV9jbGllbnRfc3Ns X2Nvbm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBDbG9zZXMgVExT IGNvbm5lY3Rpb24gd2l0aCBjbGllbnQuIFRoaXMgZnVuY3Rpb24NCiAqICAg ICAgICAgICAgICAgIGNoZWNrcyBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgYWxy ZWFkeSBjcmVhdGVkLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAg ICAgIDEgIDogIGNzcCA9IEN1cnJlbnQgY2xpZW50IHN0YXRlIChidWZmZXJz LCBoZWFkZXJzLCBldGMuLi4pDQogKg0KICogUmV0dXJucyAgICAgOiAgTi9B DQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiB2b2lk IGNsb3NlX2NsaWVudF9zc2xfY29ubmVjdGlvbihzdHJ1Y3QgY2xpZW50X3N0 YXRlICpjc3ApDQp7DQogICBzdHJ1Y3Qgc3NsX2F0dHIgKnNzbF9hdHRyID0g JmNzcC0+c3NsX2NsaWVudF9hdHRyOw0KDQogICBpZiAoY3NwLT5zc2xfd2l0 aF9jbGllbnRfaXNfb3BlbmVkID09IDApDQogICB7DQogICAgICByZXR1cm47 DQogICB9DQoNCiAgIC8qDQogICAgKiBOb3RpZnkgdGhlIHBlZXIgdGhhdCB0 aGUgY29ubmVjdGlvbiBpcyBiZWluZyBjbG9zZWQuDQogICAgKi8NCiAgIHNo dXRkb3duX2Nvbm5lY3Rpb24oc3NsX2F0dHItPndvbGZzc2xfYXR0ci5zc2ws ICJjbGllbnQiKTsNCg0KICAgZnJlZV9jbGllbnRfc3NsX3N0cnVjdHVyZXMo Y3NwKTsNCiAgIGNzcC0+c3NsX3dpdGhfY2xpZW50X2lzX29wZW5lZCA9IDA7 DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICoNCiAqIEZ1 bmN0aW9uICAgIDogIGZyZWVfY2xpZW50X3NzbF9zdHJ1Y3R1cmVzDQogKg0K ICogRGVzY3JpcHRpb24gOiAgRnJlZXMgc3RydWN0dXJlcyB1c2VkIGZvciBT U0wgY29tbXVuaWNhdGlvbiB3aXRoDQogKiAgICAgICAgICAgICAgICBjbGll bnQuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAgMSAgOiAg Y3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZlcnMsIGhlYWRlcnMs IGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6ICBOL0ENCiAqDQogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIHZvaWQgZnJlZV9jbGll bnRfc3NsX3N0cnVjdHVyZXMoc3RydWN0IGNsaWVudF9zdGF0ZSAqY3NwKQ0K ew0KICAgc3RydWN0IHNzbF9hdHRyICpzc2xfYXR0ciA9ICZjc3AtPnNzbF9j bGllbnRfYXR0cjsNCg0KICAgaWYgKHNzbF9hdHRyLT53b2xmc3NsX2F0dHIu c3NsKQ0KICAgew0KICAgICAgd29sZlNTTF9mcmVlKHNzbF9hdHRyLT53b2xm c3NsX2F0dHIuc3NsKTsNCiAgIH0NCiAgIGlmIChzc2xfYXR0ci0+d29sZnNz bF9hdHRyLmN0eCkNCiAgIHsNCiAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoc3Ns X2F0dHItPndvbGZzc2xfYXR0ci5jdHgpOw0KICAgfQ0KfQ0KDQoNCi8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBj bG9zZV9zZXJ2ZXJfc3NsX2Nvbm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlv biA6ICBDbG9zZXMgVExTIGNvbm5lY3Rpb24gd2l0aCBzZXJ2ZXIuIFRoaXMg ZnVuY3Rpb24NCiAqICAgICAgICAgICAgICAgIGNoZWNrcyBpZiB0aGlzIGNv bm5lY3Rpb24gaXMgYWxyZWFkeSBvcGVuZWQuDQogKg0KICogUGFyYW1ldGVy cyAgOg0KICogICAgICAgICAgMSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQg c3RhdGUgKGJ1ZmZlcnMsIGhlYWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1 cm5zICAgICA6ICBOL0ENCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lw0KZXh0ZXJuIHZvaWQgY2xvc2Vfc2VydmVyX3NzbF9jb25uZWN0aW9uKHN0 cnVjdCBjbGllbnRfc3RhdGUgKmNzcCkNCnsNCiAgIHN0cnVjdCBzc2xfYXR0 ciAqc3NsX2F0dHIgPSAmY3NwLT5zc2xfc2VydmVyX2F0dHI7DQoNCiAgIGlm IChjc3AtPnNzbF93aXRoX3NlcnZlcl9pc19vcGVuZWQgPT0gMCkNCiAgIHsN CiAgICAgIHJldHVybjsNCiAgIH0NCg0KICAgLyoNCiAgICogTm90aWZ5IHRo ZSBwZWVyIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgY2xvc2VkLg0K ICAgKi8NCiAgIHNodXRkb3duX2Nvbm5lY3Rpb24oc3NsX2F0dHItPndvbGZz c2xfYXR0ci5zc2wsICJzZXJ2ZXIiKTsNCg0KICAgZnJlZV9zZXJ2ZXJfc3Ns X3N0cnVjdHVyZXMoY3NwKTsNCiAgIGNzcC0+c3NsX3dpdGhfc2VydmVyX2lz X29wZW5lZCA9IDA7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGNyZWF0ZV9zZXJ2ZXJfc3NsX2Nv bm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBDcmVhdGVzIFRMUy1z ZWN1cmVkIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyLg0KICoNCiAqIFBh cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQg Y2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKg0K ICogUmV0dXJucyAgICAgOiAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1 ZSBpZiBjb25uZWN0aW9uIHdhc24ndCBjcmVhdGVkDQogKiAgICAgICAgICAg ICAgICBzdWNjZXNzZnVsbHkuDQogKg0KICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8NCmV4dGVybiBpbnQgY3JlYXRlX3NlcnZlcl9zc2xfY29ubmVjdGlv bihzdHJ1Y3QgY2xpZW50X3N0YXRlICpjc3ApDQp7DQogICB3b2xmc3NsX2Nv bm5lY3Rpb25fYXR0ciAqc3NsX2F0dHJzID0gJmNzcC0+c3NsX3NlcnZlcl9h dHRyLndvbGZzc2xfYXR0cjsNCiAgIGludCByZXQgPSAwOw0KICAgV09MRlNT TCAqc3NsOw0KICAgaW50IGNvbm5lY3RfcmV0ID0gMDsNCg0KICAgY3NwLT5z ZXJ2ZXJfY2VydF92ZXJpZmljYXRpb25fcmVzdWx0ID0gU1NMX0NFUlRfTk9U X1ZFUklGSUVEOw0KICAgY3NwLT5zZXJ2ZXJfY2VydHNfY2hhaW4ubmV4dCA9 IE5VTEw7DQoNCiAgIHNzbF9hdHRycy0+Y3R4ID0gd29sZlNTTF9DVFhfbmV3 KHdvbGZTU0x2MjNfbWV0aG9kKCkpOw0KICAgaWYgKHNzbF9hdHRycy0+Y3R4 ID09IE5VTEwpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VS Uk9SLCAiVExTIGNvbnRleHQgY3JlYXRpb24gZmFpbGVkIik7DQogICAgICBy ZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGNz cC0+ZG9udF92ZXJpZnlfY2VydGlmaWNhdGUpDQogICB7DQogICAgICB3b2xm U1NMX0NUWF9zZXRfdmVyaWZ5KHNzbF9hdHRycy0+Y3R4LCBXT0xGU1NMX1ZF UklGWV9OT05FLCBOVUxMKTsNCiAgIH0NCiAgIGVsc2UgaWYgKHdvbGZTU0xf Q1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfYXR0cnMtPmN0eCwNCiAg ICAgIGNzcC0+Y29uZmlnLT50cnVzdGVkX2Nhc19maWxlLCBOVUxMKSAhPSBX T0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xF VkVMX0VSUk9SLCAiTG9hZGluZyB0cnVzdGVkLWNhcy1maWxlICclcycgZmFp bGVkLiIsDQogICAgICAgICBjc3AtPmNvbmZpZy0+dHJ1c3RlZF9jYXNfZmls ZSk7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0N Cg0KICAgd29sZlNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2F0dHJzLT5jdHgs IFdPTEZTU0xfT1BfTk9fU1NMdjMpOw0KDQogICBzc2wgPSBzc2xfYXR0cnMt PnNzbCA9IHdvbGZTU0xfbmV3KHNzbF9hdHRycy0+Y3R4KTsNCg0KICAgaWYg KHdvbGZTU0xfc2V0X2ZkKHNzbCwgY3NwLT5zZXJ2ZXJfY29ubmVjdGlvbi5z ZmQpICE9IFdPTEZTU0xfU1VDQ0VTUykNCiAgIHsNCiAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAid29sZlNTTF9zZXRfZmQo KSBmYWlsZWQgdG8gc2V0IHRoZSBzZXJ2ZXIgc29ja2V0LiIpOw0KICAgICAg cmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIGlmIChj c3AtPmNvbmZpZy0+Y2lwaGVyX2xpc3QgIT0gTlVMTCkNCiAgIHsNCiAgICAg IGlmICh3b2xmU1NMX3NldF9jaXBoZXJfbGlzdChzc2wsIGNzcC0+Y29uZmln LT5jaXBoZXJfbGlzdCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAgICAgew0K ICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg ICAgICJTZXR0aW5nIHRoZSBjaXBoZXIgbGlzdCAnJXMnIGZvciB0aGUgc2Vy dmVyIGNvbm5lY3Rpb24gZmFpbGVkLiIsDQogICAgICAgICAgICBjc3AtPmNv bmZpZy0+Y2lwaGVyX2xpc3QpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAg ICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQoNCiAgIHJldCA9IHdv bGZTU0xfVXNlU05JKHNzbCwgV09MRlNTTF9TTklfSE9TVF9OQU1FLA0KICAg ICAgY3NwLT5odHRwLT5ob3N0LCAodW5zaWduZWQgc2hvcnQpc3RybGVuKGNz cC0+aHR0cC0+aG9zdCkpOw0KICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NF U1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAi RmFpbGVkIHRvIHNldCB1c2Ugb2YgU05JLiIpOw0KICAgICAgcmV0ID0gLTE7 DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIHJldCA9IHdvbGZTU0xf Y2hlY2tfZG9tYWluX25hbWUoc3NsLCBjc3AtPmh0dHAtPmhvc3QpOw0KICAg aWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBjaGFy IGJ1ZmZlcls4MF07DQogICAgICBpbnQgZXJyb3IgPSB3b2xmU1NMX2dldF9l cnJvcihzc2wsIHJldCk7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0ZB VEFMLA0KICAgICAgICAgIkZhaWxlZCB0byBzZXQgY2hlY2sgZG9tYWluIG5h bWUuIGVycm9yID0gJWQsICVzIiwNCiAgICAgICAgIGVycm9yLCB3b2xmU1NM X0VSUl9lcnJvcl9zdHJpbmcoKHVuc2lnbmVkIGxvbmcpZXJyb3IsIGJ1ZmZl cikpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9 DQoNCiNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9ODQojd2Fybmlu ZyB3b2xmc3NsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggSEFWRV9TRUNVUkVf UkVORUdPVElBVElPTiB3aGlsZSB5b3UgcHJvYmFibHkgd2FudCBIQVZFX1JF TkVHT1RJQVRJT05fSU5ESUNBVElPTg0KICAgaWYod29sZlNTTF9Vc2VTZWN1 cmVSZW5lZ290aWF0aW9uKHNzbCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAg ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg ICJGYWlsZWQgdG8gZW5hYmxlICdTZWN1cmUnIFJlbmVnb3RpYXRpb24uIENv bnRpbnVpbmcgYW55d2F5LiIpOw0KICAgfQ0KI2VuZGlmDQojaWZuZGVmIEhB VkVfUkVORUdPVElBVElPTl9JTkRJQ0FUSU9ODQojd2FybmluZyBMb29rcyBs aWtlIHdvbGZzc2wgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBIQVZFX1JF TkVHT1RJQVRJT05fSU5ESUNBVElPTg0KI2VuZGlmDQoNCiAgIGxvZ19lcnJv cihMT0dfTEVWRUxfQ09OTkVDVCwNCiAgICAgICJQZXJmb3JtaW5nIHRoZSBU TFMvU1NMIGhhbmRzaGFrZSB3aXRoIHRoZSBzZXJ2ZXIiKTsNCg0KICAgLyog d29sZlNTTF9EZWJ1Z2dpbmdfT04oKTsgKi8NCiAgIGNvbm5lY3RfcmV0ID0g d29sZlNTTF9jb25uZWN0KHNzbCk7DQogICAvKiB3b2xmU1NMX0RlYnVnZ2lu Z19PRkYoKTsgKi8NCg0KICAgLyoNCiAgIHdvbGZTU0xfRGVidWdnaW5nX09O KCk7DQogICAqLw0KICAgaWYgKCFjc3AtPmRvbnRfdmVyaWZ5X2NlcnRpZmlj YXRlKQ0KICAgew0KICAgICAgbG9uZyB2ZXJpZnlfcmVzdWx0ID0gd29sZlNT TF9nZXRfZXJyb3Ioc3NsLCBjb25uZWN0X3JldCk7DQoNCiNpZiBMSUJXT0xG U1NMX1ZFUlNJT05fSEVYID4gMHgwNTAwNTAwNA0KICAgICAgaWYgKHZlcmlm eV9yZXN1bHQgPT0gV09MRlNTTF9YNTA5X1ZfT0spDQojZWxzZQ0KICAgICAg aWYgKHZlcmlmeV9yZXN1bHQgPT0gWDUwOV9WX09LKQ0KI2VuZGlmDQogICAg ICB7DQogICAgICAgICByZXQgPSAwOw0KICAgICAgICAgY3NwLT5zZXJ2ZXJf Y2VydF92ZXJpZmljYXRpb25fcmVzdWx0ID0gU1NMX0NFUlRfVkFMSUQ7DQog ICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICBXT0xGX1NU QUNLX09GKFdPTEZTU0xfWDUwOSkgKmNoYWluOw0KDQogICAgICAgICBjc3At PnNlcnZlcl9jZXJ0X3ZlcmlmaWNhdGlvbl9yZXN1bHQgPSB2ZXJpZnlfcmVz dWx0Ow0KICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAg ICAgICAgICAgICJYNTA5IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmb3Ig JXMgZmFpbGVkIHdpdGggZXJyb3IgJWxkOiAlcyIsDQogICAgICAgICAgICBj c3AtPmh0dHAtPmhvc3Rwb3J0LCB2ZXJpZnlfcmVzdWx0LA0KICAgICAgICAg ICAgd29sZlNTTF9YNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyh2ZXJp ZnlfcmVzdWx0KSk7DQoNCiAgICAgICAgIGNoYWluID0gd29sZlNTTF9nZXRf cGVlcl9jZXJ0X2NoYWluKHNzbCk7DQogICAgICAgICBpZiAoY2hhaW4gIT0g TlVMTCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgIGludCBpOw0KICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHdvbGZTU0xfc2tfWDUwOV9udW0oY2hh aW4pOyBpKyspDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICBpZiAo c3NsX3N0b3JlX2NlcnQoY3NwLCB3b2xmU1NMX3NrX1g1MDlfdmFsdWUoY2hh aW4sIGkpKSAhPSAwKQ0KICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAg ICAgICAgICAgICJzc2xfc3RvcmVfY2VydCgpIGZhaWxlZCBmb3IgY2VydCAl ZCIsIGkpOw0KICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAg ICAgICAqIHNzbF9zZW5kX2NlcnRpZmljYXRlX2Vycm9yKCkgd2lsIG5vdCBi ZSBhYmxlIHRvIHNob3cNCiAgICAgICAgICAgICAgICAgICAqIHRoZSBjZXJ0 aWZpY2F0ZSBidXQgdGhlIHVzZXIgd2lsbCBzdGlsIGdldCB0aGUgZXJyb3IN CiAgICAgICAgICAgICAgICAgICAqIGRlc2NyaXB0aW9uLg0KICAgICAgICAg ICAgICAgICAgICovDQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9 DQogICAgICAgICB9DQoNCiAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAg Z290byBleGl0Ow0KICAgICAgfQ0KICAgfQ0KICAgLyoNCiAgIHdvbGZTU0xf RGVidWdnaW5nX09GRigpOw0KICAgKi8NCiAgIGlmIChjb25uZWN0X3JldCA9 PSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H X0xFVkVMX0NPTk5FQ1QsDQogICAgICAgICAiU2VydmVyIHN1Y2Nlc3NmdWxs eSBjb25uZWN0ZWQgb3ZlciAlcyAoJXMpLiIsDQogICAgICAgICB3b2xmU1NM X2dldF92ZXJzaW9uKHNzbCksIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lKHNz bCkpOw0KICAgICAgY3NwLT5zc2xfd2l0aF9zZXJ2ZXJfaXNfb3BlbmVkID0g MTsNCiAgICAgIHJldCA9IDA7DQogICB9DQogICBlbHNlDQogICB7DQogICAg ICBjaGFyIGJ1ZmZlcls4MF07DQogICAgICBpbnQgZXJyb3IgPSB3b2xmU1NM X2dldF9lcnJvcihzc2wsIHJldCk7DQogICAgICBsb2dfZXJyb3IoTE9HX0xF VkVMX0VSUk9SLA0KICAgICAgICAgIlRoZSBUTFMgaGFuZHNoYWtlIHdpdGgg dGhlIHNlcnZlciAlcyBmYWlsZWQuIGVycm9yID0gJWQsICVzIiwNCiAgICAg ICAgIGNzcC0+aHR0cC0+aG9zdHBvcnQsDQogICAgICAgICBlcnJvciwgd29s ZlNTTF9FUlJfZXJyb3Jfc3RyaW5nKCh1bnNpZ25lZCBsb25nKWVycm9yLCBi dWZmZXIpKTsNCiAgICAgIHJldCA9IC0xOw0KICAgfQ0KDQpleGl0Og0KICAg LyogRnJlZWluZyBzdHJ1Y3R1cmVzIGlmIGNvbm5lY3Rpb24gd2Fzbid0IGNy ZWF0ZWQgc3VjY2Vzc2Z1bGx5ICovDQogICBpZiAocmV0IDwgMCkNCiAgIHsN CiAgICAgIGZyZWVfc2VydmVyX3NzbF9zdHJ1Y3R1cmVzKGNzcCk7DQogICB9 DQoNCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGZyZWVfc2VydmVyX3Nz bF9zdHJ1Y3R1cmVzDQogKg0KICogRGVzY3JpcHRpb24gOiAgRnJlZXMgc3Ry dWN0dXJlcyB1c2VkIGZvciBTU0wgY29tbXVuaWNhdGlvbiB3aXRoIHNlcnZl cg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNz cCA9IEN1cnJlbnQgY2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBl dGMuLi4pDQogKg0KICogUmV0dXJucyAgICAgOiAgTi9BDQogKg0KICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyB2b2lkIGZyZWVfc2VydmVy X3NzbF9zdHJ1Y3R1cmVzKHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCkNCnsN CiAgIHN0cnVjdCBzc2xfYXR0ciAqc3NsX2F0dHIgPSAmY3NwLT5zc2xfc2Vy dmVyX2F0dHI7DQoNCiAgIGlmIChzc2xfYXR0ci0+d29sZnNzbF9hdHRyLnNz bCkNCiAgIHsNCiAgICAgIHdvbGZTU0xfZnJlZShzc2xfYXR0ci0+d29sZnNz bF9hdHRyLnNzbCk7DQogICB9DQogICBpZiAoc3NsX2F0dHItPndvbGZzc2xf YXR0ci5jdHgpDQogICB7DQogICAgICB3b2xmU1NMX0NUWF9mcmVlKHNzbF9h dHRyLT53b2xmc3NsX2F0dHIuY3R4KTsNCiAgIH0NCn0NCg0KDQovKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQogKg0KICogRnVuY3Rpb24gICAgOiAgbG9n X3NzbF9lcnJvcnMNCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBMb2cgU1NMIGVy cm9ycw0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDog IGRlYnVnbGV2ZWwgPSBEZWJ1ZyBsZXZlbA0KICogICAgICAgICAgMiAgOiAg ZGVzYyA9IEVycm9yIGRlc2NyaXB0aW9uDQogKg0KICogUmV0dXJucyAgICAg OiAgTi9BDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRp YyB2b2lkIGxvZ19zc2xfZXJyb3JzKGludCBkZWJ1Z2xldmVsLCBjb25zdCBj aGFyKiBmbXQsIC4uLikNCnsNCiAgIHVuc2lnbmVkIGxvbmcgZXJyX2NvZGU7 DQogICBjaGFyIHByZWZpeFtFUlJPUl9CVUZfU0laRV07DQogICB2YV9saXN0 IGFyZ3M7DQogICB2YV9zdGFydChhcmdzLCBmbXQpOw0KICAgdnNucHJpbnRm KHByZWZpeCwgc2l6ZW9mKHByZWZpeCksIGZtdCwgYXJncyk7DQogICBpbnQg cmVwb3J0ZWQgPSAwOw0KDQogICB3aGlsZSAoKGVycl9jb2RlID0gd29sZlNT TF9FUlJfZ2V0X2Vycm9yKCkpKQ0KICAgew0KICAgICAgY2hhciBlcnJfYnVm W0VSUk9SX0JVRl9TSVpFXTsNCiAgICAgIHJlcG9ydGVkID0gMTsNCiAgICAg IHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZ19uKGVycl9jb2RlLCBlcnJfYnVm LCBzaXplb2YoZXJyX2J1ZikpOw0KICAgICAgbG9nX2Vycm9yKGRlYnVnbGV2 ZWwsICIlczogJXMiLCBwcmVmaXgsIGVycl9idWYpOw0KICAgfQ0KICAgdmFf ZW5kKGFyZ3MpOw0KICAgLyoNCiAgICAqIEluIGNhc2UgaWYgY2FsbGVkIGJ5 IG1pc3Rha2UgYW5kIHRoZXJlIHdlcmUNCiAgICAqIG5vIFRMUyBlcnJvcnMg bGV0J3MgcmVwb3J0IGl0IHRvIHRoZSBsb2cuDQogICAgKi8NCiAgIGlmICgh cmVwb3J0ZWQpDQogICB7DQogICAgICBsb2dfZXJyb3IoZGVidWdsZXZlbCwg IiVzOiBubyBUTFMgZXJyb3JzIGRldGVjdGVkIiwgcHJlZml4KTsNCiAgIH0N Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu Y3Rpb24gICAgOiAgc3NsX2Jhc2U2NF9lbmNvZGUNCiAqDQogKiBEZXNjcmlw dGlvbiA6ICBFbmNvZGUgYSBidWZmZXIgaW50byBiYXNlNjQgZm9ybWF0Lg0K ICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGRzdCA9 IERlc3RpbmF0aW9uIGJ1ZmZlcg0KICogICAgICAgICAgMiAgOiAgZGxlbiA9 IERlc3RpbmF0aW9uIGJ1ZmZlciBsZW5ndGgNCiAqICAgICAgICAgIDMgIDog IG9sZW4gPSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbg0KICogICAgICAgICAg NCAgOiAgc3JjID0gU291cmNlIGJ1ZmZlcg0KICogICAgICAgICAgNSAgOiAg c2xlbiA9IEFtb3VudCBvZiBkYXRhIHRvIGJlIGVuY29kZWQNCiAqDQogKiBS ZXR1cm5zICAgICA6ICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ2 aXNlDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBp bnQgc3NsX2Jhc2U2NF9lbmNvZGUodW5zaWduZWQgY2hhciAqZHN0LCBzaXpl X3QgZGxlbiwgc2l6ZV90ICpvbGVuLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzbGVu KQ0Kew0KICAgd29yZDMyIG91dHB1dF9sZW5ndGg7DQogICBpbnQgcmV0Ow0K DQogICAqb2xlbiA9IDQgKiAoKHNsZW4vMykgKyAoKHNsZW4lMykgPyAxIDog MCkpICsgMTsNCiAgIGlmICgqb2xlbiA+IGRsZW4pDQogICB7DQogICAgICBy ZXR1cm4gRU5PQlVGUzsNCiAgIH0NCg0KICAgb3V0cHV0X2xlbmd0aCA9ICh3 b3JkMzIpZGxlbjsNCiAgIHJldCA9IEJhc2U2NF9FbmNvZGVfTm9ObChzcmMs ICh3b3JkMzIpc2xlbiwgZHN0LCAmb3V0cHV0X2xlbmd0aCk7DQogICBpZiAo cmV0ICE9IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VS Uk9SLCAiYmFzZTY0IGVuY29kaW5nIGZhaWxlZCB3aXRoICVkIiwgcmV0KTsN CiAgICAgIHJldHVybiByZXQ7DQogICB9DQogICAqb2xlbiA9IG91dHB1dF9s ZW5ndGg7DQoNCiAgIHJldHVybiAwOw0KDQp9DQoNCg0KLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGNsb3NlX2Zp bGVfc3RyZWFtDQogKg0KICogRGVzY3JpcHRpb24gOiAgQ2xvc2UgZmlsZSBz dHJlYW0sIHJlcG9ydCBlcnJvciBvbiBjbG9zZSBlcnJvcg0KICoNCiAqIFBh cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGYgPSBmaWxlIHN0cmVh bSB0byBjbG9zZQ0KICogICAgICAgICAgMiAgOiAgcGF0aCA9IHBhdGggZm9y IGVycm9yIHJlcG9ydA0KICoNCiAqIFJldHVybnMgICAgIDogIE4vQQ0KICoN CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQpzdGF0aWMgdm9pZCBjbG9z ZV9maWxlX3N0cmVhbShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoKQ0Kew0K ICAgaWYgKGZjbG9zZShmKSAhPSAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9y KExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJFcnJvciBjbG9zaW5nIGZp bGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsNCiAgIH0NCn0N Cg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVuY3Rp b24gICAgOiAgd3JpdGVfY2VydGlmaWNhdGUNCiAqDQogKiBEZXNjcmlwdGlv biA6ICBXcml0ZXMgYSBQRU0tZW5jb2RlZCBjZXJ0aWZpY2F0ZSB0byBhIGZp bGUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAgMSAgOiAg Y2VydGlmaWNhdGVfcGF0aCA9IFBhdGggdG8gdGhlIGZpbGUgdG8gY3JlYXRl DQogKiAgICAgICAgICAyICA6ICBjZXJ0aWZpY2F0ZSA9IFBFTS1lbmNvZGVk IGNlcnRpZmljYXRlIHRvIHdyaXRlLg0KICoNCiAqIFJldHVybnMgICAgIDog IE5VTEwgPT4gRXJyb3IuIE90aGVyd2lzZSBhIGtleTsNCiAqDQogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIGludCB3cml0ZV9jZXJ0aWZp Y2F0ZShjb25zdCBjaGFyICpjZXJ0aWZpY2F0ZV9wYXRoLCBjb25zdCBjaGFy ICpjZXJ0aWZpY2F0ZSkNCnsNCiAgIEZJTEUgKmZwOw0KDQogICBhc3NlcnQo Y2VydGlmaWNhdGVfcGF0aCAhPSBOVUxMKTsNCiAgIGFzc2VydChjZXJ0aWZp Y2F0ZSAhPSBOVUxMKTsNCg0KICAgZnAgPSBmb3BlbihjZXJ0aWZpY2F0ZV9w YXRoLCAid2IiKTsNCiAgIGlmIChOVUxMID09IGZwKQ0KICAgew0KICAgICAg bG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWlsZWQg dG8gb3BlbiAlcyB0byB3cml0ZSB0aGUgY2VydGlmaWNhdGU6ICVFIiwNCiAg ICAgICAgIGNlcnRpZmljYXRlX3BhdGgpOw0KICAgICAgcmV0dXJuIC0xOw0K ICAgfQ0KICAgaWYgKGZwdXRzKGNlcnRpZmljYXRlLCBmcCkgPCAwKQ0KICAg ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZhaWxlZCB0 byB3cml0ZSBjZXJ0aWZpY2F0ZSB0byAlczogJUUiLA0KICAgICAgICAgY2Vy dGlmaWNhdGVfcGF0aCk7DQogICAgICBmY2xvc2UoZnApOw0KICAgICAgcmV0 dXJuIC0xOw0KICAgfQ0KICAgZmNsb3NlKGZwKTsNCg0KICAgcmV0dXJuIDA7 DQoNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICog RnVuY3Rpb24gICAgOiAgZ2VuZXJhdGVfY2VydF9rZXkNCiAqDQogKiBEZXNj cmlwdGlvbiA6IEdlbmVyYXRlcyBhIG5ldyBSU0Ega2V5IGFuZCBzYXZlcyBp dCBpbiBhIGZpbGUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAg ICAgMSAgOiAgY2VydF9rZXlfcGF0aCA9IFBhdGggdG8gdGhlIGtleSB0aGF0 IHNob3VsZCBiZSB3cml0dGVuLg0KICoNCiAqIFJldHVybnMgICAgIDogIC0x ID0+IEVycm9yIHdoaWxlIGdlbmVyYXRpbmcgcHJpdmF0ZSBrZXkNCiAqICAg ICAgICAgICAgICAgICAwID0+IFN1Y2Nlc3MuDQogKg0KICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgZ2VuZXJhdGVfY2VydF9rZXko Y29uc3QgY2hhciAqY2VydF9rZXlfcGF0aCkNCnsNCiAgIGVjY19rZXkga2V5 Ow0KICAgYnl0ZSBjZXJ0X2tleV9kZXJbNDA5Nl07DQogICBpbnQgcmV0Ow0K ICAgYnl0ZSBrZXlfcGVtWzQwOTZdOw0KICAgaW50IGRlcl9rZXlfc2l6ZTsN CiAgIGludCBwZW1fa2V5X3NpemU7DQogICBGSUxFICpmID0gTlVMTDsNCg0K ICAgYXNzZXJ0KGZpbGVfZXhpc3RzKGNlcnRfa2V5X3BhdGgpICE9IDEpOw0K DQogICB3Y19lY2NfaW5pdCgma2V5KTsNCg0KICAgbG9nX2Vycm9yKExPR19M RVZFTF9DT05ORUNULCAiTWFraW5nIGtleSAlcyAuLi4iLCBjZXJ0X2tleV9w YXRoKTsNCiAgIC8vaW50IGVjY19rZXlfc2l6ZSA9IHdjX2VjY19nZXRfY3Vy dmVfc2l6ZV9mcm9tX2lkKGN1cnZlSWQpOw0KICAgLy9yZXQgPSB3Y19lY2Nf bWFrZV9rZXlfZXgoJndvbGZzc2xfcm5nLCBlY2Nfa2V5X3NpemUsICZrZXks IGN1cnZlSWQpOw0KICAgcmV0ID0gd2NfZWNjX21ha2Vfa2V5KCZ3b2xmc3Ns X3JuZywgRUNDX01JTl9LRVlfU1osICZrZXkpOw0KICAgaWYgKHJldCAhPSAw KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIktl eSBnZW5lcmF0aW9uIGZhaWxlZDogJWQiLCByZXQpOw0KICAgICAgcmV0ID0g LTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQogICBsb2dfZXJyb3IoTE9H X0xFVkVMX0NPTk5FQ1QsICJEb25lIG1ha2luZyBrZXkgJXMiLCBjZXJ0X2tl eV9wYXRoKTsNCg0KICAgZGVyX2tleV9zaXplID0gd2NfRWNjS2V5VG9EZXIo JmtleSwgY2VydF9rZXlfZGVyLCBzaXplb2YoY2VydF9rZXlfZGVyKSk7DQog ICB3Y19lY2NfZnJlZSgma2V5KTsNCiAgIGlmIChkZXJfa2V5X3NpemUgPCAw KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIktl eSBjb252ZXJzaW9uIHRvIERFUiBmb3JtYXQgZmFpbGVkIik7DQogICAgICBy ZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIHBlbV9rZXlf c2l6ZSA9IHdjX0RlclRvUGVtKGNlcnRfa2V5X2RlciwgKHdvcmQzMilkZXJf a2V5X3NpemUsDQogICAgICBrZXlfcGVtLCBzaXplb2Yoa2V5X3BlbSksICBF Q0NfUFJJVkFURUtFWV9UWVBFKTsNCg0KICAgaWYgKHBlbV9rZXlfc2l6ZSA8 IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAi S2V5IGNvbnZlcnNpb24gdG8gUEVNIGZvcm1hdCBmYWlsZWQiKTsNCiAgICAg IHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICAvKg0K ICAgICogU2F2aW5nIGtleSBpbnRvIGZpbGUNCiAgICAqLw0KICAgaWYgKChm ID0gZm9wZW4oY2VydF9rZXlfcGF0aCwgIndiIikpID09IE5VTEwpDQogICB7 DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg Ik9wZW5pbmcgZmlsZSAlcyB0byBzYXZlIHByaXZhdGUga2V5IGZhaWxlZDog JUUiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICByZXQgPSAt MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGZ3cml0ZShr ZXlfcGVtLCAxLCAoc2l6ZV90KXBlbV9rZXlfc2l6ZSwgZikgIT0gcGVtX2tl eV9zaXplKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP UiwNCiAgICAgICAgICJXcml0aW5nIHByaXZhdGUga2V5IGludG8gZmlsZSAl cyBmYWlsZWQiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBj bG9zZV9maWxlX3N0cmVhbShmLCBjZXJ0X2tleV9wYXRoKTsNCiAgICAgIHJl dCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICBjbG9zZV9m aWxlX3N0cmVhbShmLCBjZXJ0X2tleV9wYXRoKTsNCg0KZXhpdDoNCg0KICAg cmV0dXJuIHJldDsNCg0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBzc2xfY2VydGlmaWNhdGVfbG9h ZA0KICoNCiAqIERlc2NyaXB0aW9uIDogIExvYWRzIGNlcnRpZmljYXRlIGZy b20gZmlsZS4NCiAqDQogKiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAx ICA6ICBjZXJ0X3BhdGggPSBUaGUgY2VydGlmaWNhdGUgcGF0aCB0byBsb2Fk DQogKg0KICogUmV0dXJucyAgICAgOiAgIE5VTEwgPT4gZXJyb3IgbG9hZGlu ZyBjZXJ0aWZpY2F0ZSwNCiAqICAgICAgICAgICAgICAgICAgIHBvaW50ZXIg dG8gY2VydGlmaWNhdGUgaW5zdGFuY2Ugb3RoZXJ3aXNlDQogKg0KICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBYNTA5ICpzc2xfY2VydGlm aWNhdGVfbG9hZChjb25zdCBjaGFyICpjZXJ0X3BhdGgpDQp7DQogICBYNTA5 ICpjZXJ0ID0gTlVMTDsNCiAgIEZJTEUgKmNlcnRfZiA9IE5VTEw7DQoNCiAg IGlmICghKGNlcnRfZiA9IGZvcGVuKGNlcnRfcGF0aCwgInIiKSkpDQogICB7 DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg IkVycm9yIG9wZW5pbmcgY2VydGlmaWNhdGUgZmlsZSAlczogJXMiLCBjZXJ0 X3BhdGgsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICByZXR1cm4gTlVMTDsN CiAgIH0NCg0KICAgaWYgKCEoY2VydCA9IFBFTV9yZWFkX1g1MDkoY2VydF9m LCBOVUxMLCBOVUxMLCBOVUxMKSkpDQogICB7DQogICAgICBsb2dfc3NsX2Vy cm9ycyhMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRXJyb3IgcmVhZGlu ZyBjZXJ0aWZpY2F0ZSBmaWxlICVzIiwgY2VydF9wYXRoKTsNCiAgIH0NCg0K ICAgY2xvc2VfZmlsZV9zdHJlYW0oY2VydF9mLCBjZXJ0X3BhdGgpOw0KICAg cmV0dXJuIGNlcnQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIHNzbF9jZXJ0aWZpY2F0ZV9pc19p bnZhbGlkDQogKg0KICogRGVzY3JpcHRpb24gOiAgQ2hlY2tzIHdoZXRoZXIg b3Igbm90IGEgY2VydGlmaWNhdGUgaXMgdmFsaWQuDQogKiAgICAgICAgICAg ICAgICBDdXJyZW50bHkgb25seSBjaGVja3MgdGhhdCB0aGUgY2VydGlmaWNh dGUgY2FuIGJlDQogKiAgICAgICAgICAgICAgICBwYXJzZWQgYW5kIHRoYXQg dGhlICJ2YWxpZCB0byIgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlLg0KICoNCiAq IFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNlcnRfZmlsZSA9 IFRoZSBjZXJ0aWZpY2F0ZSB0byBjaGVjaw0KICoNCiAqIFJldHVybnMgICAg IDogICAwID0+IFRoZSBjZXJ0aWZpY2F0ZSBpcyB2YWxpZC4NCiAqICAgICAg ICAgICAgICAgICAxID0+IFRoZSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkDQog Kg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgc3Ns X2NlcnRpZmljYXRlX2lzX2ludmFsaWQoY29uc3QgY2hhciAqY2VydF9maWxl KQ0Kew0KICAgaW50IHJldDsNCg0KICAgWDUwOSAqY2VydCA9IE5VTEw7DQoN CiAgIGlmICghKGNlcnQgPSBzc2xfY2VydGlmaWNhdGVfbG9hZChjZXJ0X2Zp bGUpKSkNCiAgIHsNCiAgICAgIHJldHVybiAxOw0KICAgfQ0KDQogICByZXQg PSB3b2xmU1NMX1g1MDlfY21wX2N1cnJlbnRfdGltZSh3b2xmU1NMX1g1MDlf Z2V0X25vdEFmdGVyKGNlcnQpKTsNCiAgIGlmIChyZXQgPT0gMCkNCiAgIHsN CiAgICAgIGxvZ19zc2xfZXJyb3JzKExPR19MRVZFTF9FUlJPUiwNCiAgICAg ICAgICJFcnJvciBjaGVja2luZyBjZXJ0aWZpY2F0ZSAlcyB2YWxpZGl0eSIs IGNlcnRfZmlsZSk7DQogICAgICByZXQgPSAtMTsNCiAgIH0NCg0KICAgd29s ZlNTTF9YNTA5X2ZyZWUoY2VydCk7DQoNCiAgIHJldHVybiByZXQgPT0gLTEg PyAxIDogMDsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog Kg0KICogRnVuY3Rpb24gICAgOiAgbG9hZF9jZXJ0X2tleQ0KICoNCiAqIERl c2NyaXB0aW9uIDogIExvYWQgYSBQRU0tZW5jb2RlZCBSU0EgZmlsZSBpbnRv IG1lbW9yeS4NCiAqDQogKiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAx ICA6ICBjZXJ0X2tleV9wYXRoID0gUGF0aCB0byB0aGUgZmlsZSB0aGF0IGhv bGRzIHRoZSBrZXkuDQogKiAgICAgICAgICAyICA6ICBwYXNzd29yZCA9IFBh c3N3b3JkIHRvIHVubG9jayB0aGUga2V5LiBOVUxMIGlmIG5vDQogKiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGlzIHJlcXVpcmVkLg0K ICogICAgICAgICAgMyAgOiAgcnNhX2tleSA9IEluaXRpYWxpemVkIFJTQSBr ZXkgc3RvcmFnZS4NCiAqICAgICAgICAgIDMgIDogIGVjX2tleSA9IEluaXRp YWxpemVkIEVDQyBrZXkgc3RvcmFnZS4NCiAqDQogKiBSZXR1cm5zICAgICA6 ICAgMCA9PiBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUga2V5Lg0KICogICAg ICAgICAgICAgICAgIDEgPT4gSXQgd29ya2VkDQogKg0KICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgbG9hZF9jZXJ0X2tleShjb25z dCBjaGFyICpjZXJ0X2tleV9wYXRoLCBjb25zdCBjaGFyICpwYXNzd29yZCwg UnNhS2V5ICpyc2Ffa2V5LCBlY2Nfa2V5ICplY19rZXkpDQp7DQogICBGSUxF ICpmcDsNCiAgIHNpemVfdCBsZW5ndGg7DQogICBsb25nIHJldDsNCiAgIHVu c2lnbmVkIGNoYXIgKmtleV9wZW07DQogICBEZXJCdWZmZXIgKmRlcl9idWZm ZXI7DQogICB3b3JkMzIgZGVyX2luZGV4ID0gMDsNCiAgIERlckJ1ZmZlciBk ZWNyeXB0ZWRfZGVyX2J1ZmZlcjsNCiAgIHVuc2lnbmVkIGNoYXIgZGVyX2Rh dGFbNDA5Nl07DQoNCiAgIGZwID0gZm9wZW4oY2VydF9rZXlfcGF0aCwgInJi Iik7DQogICBpZiAoTlVMTCA9PSBmcCkNCiAgIHsNCiAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfRVJST1IsICJGYWlsZWQgdG8gb3BlbiAlczogJUUiLCBj ZXJ0X2tleV9wYXRoKTsNCiAgICAgIHJldHVybiAwOw0KICAgfQ0KDQogICAv KiBHZXQgZmlsZSBsZW5ndGggKi8NCiAgIGlmIChmc2VlayhmcCwgMCwgU0VF S19FTkQpKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP UiwNCiAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGZzZWVrKClp bmcgdG8gdGhlIGVuZCBvZiAlczogJUUiLA0KICAgICAgICAgY2VydF9rZXlf cGF0aCk7DQogICAgICBmY2xvc2UoZnApOw0KICAgICAgcmV0dXJuIDA7DQog ICB9DQogICByZXQgPSBmdGVsbChmcCk7DQogICBpZiAoLTEgPT0gcmV0KQ0K ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg ICAgICJVbmV4cGVjdGVkIGZ0ZWxsKCkgZXJyb3Igd2hpbGUgbG9hZGluZyAl czogJUUiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBmY2xv c2UoZnApOw0KICAgICAgcmV0dXJuIDA7DQogICB9DQogICBsZW5ndGggPSAo c2l6ZV90KXJldDsNCg0KICAgLyogR28gYmFjayB0byB0aGUgYmVnaW5uaW5n LiAqLw0KICAgaWYgKGZzZWVrKGZwLCAwLCBTRUVLX1NFVCkpDQogICB7DQog ICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIlVu ZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZnNlZWsoKWluZyB0byB0aGUgYmVnaW5u aW5nIG9mICVzOiAlRSIsDQogICAgICAgICBjZXJ0X2tleV9wYXRoKTsNCiAg ICAgIGZjbG9zZShmcCk7DQogICAgICByZXR1cm4gMDsNCiAgIH0NCg0KICAg a2V5X3BlbSA9IG1hbGxvY19vcl9kaWUobGVuZ3RoKTsNCg0KICAgaWYgKDEg IT0gZnJlYWQoa2V5X3BlbSwgbGVuZ3RoLCAxLCBmcCkpDQogICB7DQogICAg ICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIkNvdWxk bid0IGNvbXBsZXRlbHkgcmVhZCBmaWxlICVzLiIsIGNlcnRfa2V5X3BhdGgp Ow0KICAgICAgZmNsb3NlKGZwKTsNCiAgICAgIGZyZWV6KGtleV9wZW0pOw0K ICAgICAgcmV0dXJuIDA7DQogICB9DQoNCiAgIGZjbG9zZShmcCk7DQoNCiAg IGlmIChwYXNzd29yZCA9PSBOVUxMKQ0KICAgew0KICAgICAgcmV0ID0gd2Nf UGVtVG9EZXIoa2V5X3BlbSwgKGxvbmcpbGVuZ3RoLCBQUklWQVRFS0VZX1RZ UEUsDQogICAgICAgICAmZGVyX2J1ZmZlciwgTlVMTCwgTlVMTCwgTlVMTCk7 DQogICB9DQogICBlbHNlDQogICB7DQogICAgICBkZXJfYnVmZmVyID0gJmRl Y3J5cHRlZF9kZXJfYnVmZmVyOw0KICAgICAgZGVyX2J1ZmZlci0+YnVmZmVy ID0gZGVyX2RhdGE7DQogICAgICByZXQgPSB3Y19LZXlQZW1Ub0RlcihrZXlf cGVtLCAoaW50KWxlbmd0aCwgZGVyX2J1ZmZlci0+YnVmZmVyLA0KICAgICAg ICAgc2l6ZW9mKGRlcl9kYXRhKSwgcGFzc3dvcmQpOw0KICAgICAgaWYgKHJl dCA8IDApDQogICAgICB7DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVM X0VSUk9SLA0KICAgICAgICAgICAgIkZhaWxlZCB0byBjb252ZXJ0IFBFTSBr ZXkgJXMgaW50byBERVIgZm9ybWF0LiBFcnJvcjogJWxkIiwNCiAgICAgICAg ICAgIGNlcnRfa2V5X3BhdGgsIHJldCk7DQogICAgICAgICBmcmVleihrZXlf cGVtKTsNCiAgICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZGVy X2J1ZmZlci0+bGVuZ3RoID0gKHdvcmQzMilyZXQ7DQogICB9DQoNCiAgIGZy ZWV6KGtleV9wZW0pOw0KDQogICBpZiAocmV0IDwgMCkNCiAgIHsNCiAgICAg IGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVk IHRvIGNvbnZlcnQgYnVmZmVyIGludG8gREVSIGZvcm1hdCBmb3IgZmlsZSAl cy4gRXJyb3IgPSAlbGQiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCwgcmV0 KTsNCiAgICAgIHJldHVybiAwOw0KICAgfQ0KDQogICBpZiAocnNhX2tleSkg ew0KICAgcmV0ID0gd2NfUnNhUHJpdmF0ZUtleURlY29kZShkZXJfYnVmZmVy LT5idWZmZXIsICZkZXJfaW5kZXgsIHJzYV9rZXksDQogICAgICBkZXJfYnVm ZmVyLT5sZW5ndGgpOw0KICAgfSBlbHNlIHsNCiAgIHJldCA9IHdjX0VjY1By aXZhdGVLZXlEZWNvZGUoZGVyX2J1ZmZlci0+YnVmZmVyLCAmZGVyX2luZGV4 LCBlY19rZXksDQogICAgICBkZXJfYnVmZmVyLT5sZW5ndGgpOw0KICAgfQ0K ICAgaWYgKHBhc3N3b3JkID09IE5VTEwpDQogICB7DQogICAgICBmcmVleihk ZXJfYnVmZmVyKTsNCiAgIH0NCiAgIGlmIChyZXQgPCAwKQ0KICAgew0KICAg ICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWls ZWQgdG8gZGVjb2RlIERFUiBidWZmZXIgaW50byBSU0Ega2V5IHN0cnVjdHVy ZSBmb3IgJXMiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBy ZXR1cm4gMDsNCiAgIH0NCg0KICAgcmV0dXJuIDE7DQp9DQoNCiNpZm5kZWYg V09MRlNTTF9BTFRfTkFNRVMNCiNlcnJvciB3b2xmU1NMIGxhY2tzIFN1Ympl Y3QgQWx0ZXJuYXRpdmUgTmFtZSBzdXBwb3J0IChXT0xGU1NMX0FMVF9OQU1F Uykgd2hpY2ggaXMgbWFuZGF0b3J5DQojZW5kaWYNCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBzZXRfc3ViamVj dF9hbHRlcm5hdGl2ZV9uYW1lDQogKg0KICogRGVzY3JpcHRpb24gOiAgU2V0 cyB0aGUgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lIGV4dGVuc2lvbiB0bw0K ICogICAgICAgICAgICAgICAgYSBjZXJ0IHVzaW5nIHRoZSBhd2Vzb21lICJB UEkiIHByb3ZpZGVkIGJ5IHdvbGZTU0wuDQogKg0KICogUGFyYW1ldGVycyAg Og0KICogICAgICAgICAgMSAgOiAgY2VydCA9IFRoZSBjZXJ0aWZpY2F0ZSB0 byBtb2RpZnkNCiAqICAgICAgICAgIDIgIDogIGhvc3RuYW1lID0gVGhlIGhv c3RuYW1lIHRvIGFkZA0KICoNCiAqIFJldHVybnMgICAgIDogIDwwID0+IEVy cm9yLg0KICogICAgICAgICAgICAgICAgIDAgPT4gSXQgd29ya2VkDQogKg0K ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgc2V0X3N1 YmplY3RfYWx0ZXJuYXRpdmVfbmFtZShzdHJ1Y3QgQ2VydCAqY2VydGlmaWNh dGUsIGNvbnN0IGNoYXIgKmhvc3RuYW1lKQ0Kew0KICAgY29uc3Qgc2l6ZV90 IGhvc3RuYW1lX2xlbmd0aCA9IHN0cmxlbihob3N0bmFtZSk7DQoNCiAgIGlm IChob3N0bmFtZV9sZW5ndGggPj0gMjUzKQ0KICAgew0KICAgICAgLyoNCiAg ICAgICAqIFdlIGFwcGFyZW50bHkgb25seSBoYXZlIGEgYnl0ZSB0byByZXBy ZXNlbnQgdGhlIGxlbmd0aA0KICAgICAgICogb2YgdGhlIHNlcXVlbmNlLg0K ICAgICAgICovDQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0K ICAgICAgICAgIkhvc3RuYW1lICclcycgaXMgdG9vIGxvbmcgdG8gc2V0IFN1 YmplY3QgQWx0ZXJuYXRpdmUgTmFtZSIsDQogICAgICAgICBob3N0bmFtZSk7 DQogICAgICByZXR1cm4gLTE7DQogICB9DQogICBjZXJ0aWZpY2F0ZS0+YWx0 TmFtZXNbMF0gPSAweDMwOyAvKiBTZXF1ZW5jZSAqLw0KICAgY2VydGlmaWNh dGUtPmFsdE5hbWVzWzFdID0gKHVuc2lnbmVkIGNoYXIpaG9zdG5hbWVfbGVu Z3RoICsgMjsNCg0KICAgY2VydGlmaWNhdGUtPmFsdE5hbWVzWzJdID0gMHg4 MjsgLyogRE5TIG5hbWUgKi8NCiAgIGNlcnRpZmljYXRlLT5hbHROYW1lc1sz XSA9ICh1bnNpZ25lZCBjaGFyKWhvc3RuYW1lX2xlbmd0aDsNCiAgIG1lbWNw eSgmY2VydGlmaWNhdGUtPmFsdE5hbWVzWzRdLCBob3N0bmFtZSwgaG9zdG5h bWVfbGVuZ3RoKTsNCg0KICAgY2VydGlmaWNhdGUtPmFsdE5hbWVzU3ogPSAo aW50KWhvc3RuYW1lX2xlbmd0aCArIDQ7DQoNCiAgIHJldHVybiAwOw0KfQ0K DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlv biAgICA6ICBnZW5lcmF0ZV9ob3N0X2NlcnRpZmljYXRlDQogKg0KICogRGVz Y3JpcHRpb24gOiAgQ3JlYXRlcyBjZXJ0aWZpY2F0ZSBmaWxlIGluIHByZXNl dHRlZCBkaXJlY3RvcnkuDQogKiAgICAgICAgICAgICAgICBJZiBjZXJ0aWZp Y2F0ZSBhbHJlYWR5IGV4aXN0cywgbm8gb3RoZXIgY2VydGlmaWNhdGUNCiAq ICAgICAgICAgICAgICAgIHdpbGwgYmUgY3JlYXRlZC4gU3ViamVjdCBvZiBj ZXJ0aWZpY2F0ZSBpcyBuYW1lZA0KICogICAgICAgICAgICAgICAgYnkgY3Nw LT5odHRwLT5ob3N0IGZyb20gcGFyYW1ldGVyLiBUaGlzIGZ1bmN0aW9uIGFs c28NCiAqICAgICAgICAgICAgICAgIHRyaWdnZXJzIGdlbmVyYXRpbmcgb2Yg cHJpdmF0ZSBrZXkgZm9yIG5ldyBjZXJ0aWZpY2F0ZS4NCiAqDQogKiBQYXJh bWV0ZXJzICA6DQogKiAgICAgICAgICAxICA6ICBjc3AgPSBDdXJyZW50IGNs aWVudCBzdGF0ZSAoYnVmZmVycywgaGVhZGVycywgZXRjLi4uKQ0KICogICAg ICAgICAgMiAgOiAgY2VydGlmaWNhdGVfcGF0aCA9IFBhdGggdG8gdGhlIGNl cnRmaWNhdGUgdG8gZ2VuZXJhdGUuDQogKiAgICAgICAgICAzICA6ICBjZXJ0 X2tleV9wYXRoID0gUGF0aCB0byB0aGUga2V5IHRvIGdlbmVyYXRlIGZvciB0 aGUNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRpZmlj YXRlLg0KICoNCiAqIFJldHVybnMgICAgIDogIC0xID0+IEVycm9yIHdoaWxl IGNyZWF0aW5nIGNlcnRpZmljYXRlLg0KICogICAgICAgICAgICAgICAgIDAg PT4gQ2VydGlmaWNhdGUgYWxyZWFkeSBleGlzdHMuDQogKiAgICAgICAgICAg ICAgICAgMSA9PiBDZXJ0aWZpY2F0ZSBjcmVhdGVkDQogKg0KICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgZ2VuZXJhdGVfaG9zdF9j ZXJ0aWZpY2F0ZShzdHJ1Y3QgY2xpZW50X3N0YXRlICpjc3AsDQogICBjb25z dCBjaGFyICpjZXJ0aWZpY2F0ZV9wYXRoLCBjb25zdCBjaGFyICpjZXJ0X2tl eV9wYXRoKQ0Kew0KICAgc3RydWN0IENlcnQgY2VydGlmaWNhdGU7DQogICBS c2FLZXkgY2Ffa2V5Ow0KICAgZWNjX2tleSBjZXJ0X2tleTsNCiAgIGludCBy ZXQ7DQogICBieXRlIGNlcnRpZmljYXRlX2Rlcls0MDk2XTsNCiAgIGludCBk ZXJfY2VydGlmaWNhdGVfbGVuZ3RoOw0KICAgYnl0ZSBjZXJ0aWZpY2F0ZV9w ZW1bNDA5Nl07DQogICBpbnQgcGVtX2NlcnRpZmljYXRlX2xlbmd0aDsNCg0K ICAgaWYgKGZpbGVfZXhpc3RzKGNlcnRpZmljYXRlX3BhdGgpID09IDEpDQog ICB7DQogICAgICAvKiBUaGUgZmlsZSBleGlzdHMsIGJ1dCBpcyBpdCB2YWxp ZD8gKi8NCiAgICAgIGlmIChzc2xfY2VydGlmaWNhdGVfaXNfaW52YWxpZChj ZXJ0aWZpY2F0ZV9wYXRoKSkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfQ09OTkVDVCwNCiAgICAgICAgICAgICJDZXJ0aWZpY2F0 ZSAlcyBpcyBubyBsb25nZXIgdmFsaWQuIFJlbW92aW5nIGl0LiIsDQogICAg ICAgICAgICBjZXJ0aWZpY2F0ZV9wYXRoKTsNCiAgICAgICAgIGlmICh1bmxp bmsoY2VydGlmaWNhdGVfcGF0aCkpDQogICAgICAgICB7DQogICAgICAgICAg ICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAiRmFpbGVkIHRvIHVubGlu ayAlczogJUUiLA0KICAgICAgICAgICAgICAgY2VydGlmaWNhdGVfcGF0aCk7 DQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICB9DQogICAgICAg ICBpZiAodW5saW5rKGNlcnRfa2V5X3BhdGgpKQ0KICAgICAgICAgew0KICAg ICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZhaWxlZCB0 byB1bmxpbmsgJXM6ICVFIiwNCiAgICAgICAgICAgICAgIGNlcnRfa2V5X3Bh dGgpOw0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgfQ0KICAg ICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgcmV0dXJuIDA7 DQogICAgICB9DQogICB9DQogICBlbHNlDQogICB7DQogICAgICBsb2dfZXJy b3IoTE9HX0xFVkVMX0NPTk5FQ1QsICJDcmVhdGluZyBuZXcgY2VydGlmaWNh dGUgJXMiLA0KICAgICAgICAgY2VydGlmaWNhdGVfcGF0aCk7DQogICB9DQog ICBpZiAoZW5mb3JjZV9zYW5lX2NlcnRpZmljYXRlX3N0YXRlKGNlcnRpZmlj YXRlX3BhdGgsIGNlcnRfa2V5X3BhdGgpKQ0KICAgew0KICAgICAgcmV0dXJu IC0xOw0KICAgfQ0KDQogICB3Y19lY2NfaW5pdCgmY2VydF9rZXkpOw0KICAg d2NfSW5pdFJzYUtleSgmY2Ffa2V5LCBOVUxMKTsNCg0KICAgaWYgKGdlbmVy YXRlX2NlcnRfa2V5KGNlcnRfa2V5X3BhdGgpID09IC0xKQ0KICAgew0KICAg ICAgcmV0dXJuIC0xOw0KICAgfQ0KDQogICB3Y19Jbml0Q2VydCgmY2VydGlm aWNhdGUpOw0KDQogICBzdHJuY3B5KGNlcnRpZmljYXRlLnN1YmplY3QuY291 bnRyeSwgQ0VSVF9QQVJBTV9DT1VOVFJZX0NPREUsIENUQ19OQU1FX1NJWkUp Ow0KICAgc3RybmNweShjZXJ0aWZpY2F0ZS5zdWJqZWN0Lm9yZywgIlByaXZv eHkiLCBDVENfTkFNRV9TSVpFKTsNCiAgIHN0cm5jcHkoY2VydGlmaWNhdGUu c3ViamVjdC51bml0LCAiRGV2ZWxvcG1lbnQiLCBDVENfTkFNRV9TSVpFKTsN CiAgIHN0cm5jcHkoY2VydGlmaWNhdGUuc3ViamVjdC5jb21tb25OYW1lLCBj c3AtPmh0dHAtPmhvc3QsIENUQ19OQU1FX1NJWkUpOw0KICAgY2VydGlmaWNh dGUuZGF5c1ZhbGlkID0gOTA7DQogICBjZXJ0aWZpY2F0ZS5zZWxmU2lnbmVk ID0gMDsNCiAgIGNlcnRpZmljYXRlLnNpZ1R5cGUgPSBDVENfU0hBMjU2d1JT QTsNCiAgIC8vY2VydGlmaWNhdGUuc2lnVHlwZSA9IENUQ19TSEF3RUNEU0E7 DQogICBpZiAoIWhvc3RfaXNfaXBfYWRkcmVzcyhjc3AtPmh0dHAtPmhvc3Qp ICYmDQogICAgICAgc2V0X3N1YmplY3RfYWx0ZXJuYXRpdmVfbmFtZSgmY2Vy dGlmaWNhdGUsIGNzcC0+aHR0cC0+aG9zdCkpDQogICB7DQogICAgICByZXQg PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgcmV0ID0gd2Nf U2V0SXNzdWVyKCZjZXJ0aWZpY2F0ZSwgY3NwLT5jb25maWctPmNhX2NlcnRf ZmlsZSk7DQogICBpZiAocmV0IDwgMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJv cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVkIHRvIHNldCBJ c3N1ZXIgZmlsZSAlcyIsIGNzcC0+Y29uZmlnLT5jYV9jZXJ0X2ZpbGUpOw0K ICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAg IGlmIChsb2FkX2NlcnRfa2V5KGNlcnRfa2V5X3BhdGgsIE5VTEwsIE5VTEws ICZjZXJ0X2tleSkgIT0gMSkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0df TEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVkIHRvIGxvYWQgY2VydGlm aWNhdGUga2V5ICVzIiwgY2VydF9rZXlfcGF0aCk7DQogICAgICByZXQgPSAt MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgLyogd29sZlNTTF9E ZWJ1Z2dpbmdfT04oKTsgKi8NCiAgIGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGgg PSB3Y19NYWtlQ2VydCgmY2VydGlmaWNhdGUsIGNlcnRpZmljYXRlX2RlciwN CiAgICAgIHNpemVvZihjZXJ0aWZpY2F0ZV9kZXIpLCBOVUxMLCAmY2VydF9r ZXksICZ3b2xmc3NsX3JuZyk7DQogICAvKiB3b2xmU1NMX0RlYnVnZ2luZ19P RkYoKTsgKi8NCg0KICAgaWYgKGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGggPCAw KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZh aWxlZCB0byBtYWtlIGNlcnRpZmljYXRlIik7DQogICAgICByZXQgPSAtMTsN CiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGxvYWRfY2VydF9r ZXkoY3NwLT5jb25maWctPmNhX2tleV9maWxlLCBjc3AtPmNvbmZpZy0+Y2Ff cGFzc3dvcmQsDQogICAgICAmY2Ffa2V5LCBOVUxMKSAhPSAxKQ0KICAgew0K ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJG YWlsZWQgdG8gbG9hZCBDQSBrZXkgJXMiLCBjc3AtPmNvbmZpZy0+Y2Ffa2V5 X2ZpbGUpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQog ICB9DQoNCiAgIGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGggPSB3Y19TaWduQ2Vy dChjZXJ0aWZpY2F0ZS5ib2R5U3osIGNlcnRpZmljYXRlLnNpZ1R5cGUsDQog ICAgICBjZXJ0aWZpY2F0ZV9kZXIsIHNpemVvZihjZXJ0aWZpY2F0ZV9kZXIp LCAmY2Ffa2V5LCBOVUxMLCAmd29sZnNzbF9ybmcpOw0KICAgd2NfRnJlZVJz YUtleSgmY2Ffa2V5KTsNCiAgIGlmIChkZXJfY2VydGlmaWNhdGVfbGVuZ3Ro IDwgMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1Is ICJGYWlsZWQgdG8gc2lnbiBjZXJ0aWZpY2F0ZSIpOw0KICAgICAgcmV0ID0g LTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIHBlbV9jZXJ0aWZp Y2F0ZV9sZW5ndGggPSB3Y19EZXJUb1BlbShjZXJ0aWZpY2F0ZV9kZXIsDQog ICAgICAod29yZDMyKWRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGgsIGNlcnRpZmlj YXRlX3BlbSwNCiAgICAgIHNpemVvZihjZXJ0aWZpY2F0ZV9wZW0pLCBDRVJU X1RZUEUpOw0KICAgaWYgKHBlbV9jZXJ0aWZpY2F0ZV9sZW5ndGggPCAwKQ0K ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg ICAgICJGYWlsZWQgdG8gY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIERFUiB0 byBQRU0iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0K ICAgfQ0KICAgY2VydGlmaWNhdGVfcGVtW3BlbV9jZXJ0aWZpY2F0ZV9sZW5n dGhdID0gJ1wwJzsNCg0KICAgaWYgKHdyaXRlX2NlcnRpZmljYXRlKGNlcnRp ZmljYXRlX3BhdGgsIChjb25zdCBjaGFyKiljZXJ0aWZpY2F0ZV9wZW0pKQ0K ICAgew0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9 DQoNCiAgIHJldCA9IDE7DQoNCmV4aXQ6DQogICB3Y19lY2NfZnJlZSgmY2Vy dF9rZXkpOw0KICAgd2NfRnJlZVJzYUtleSgmY2Ffa2V5KTsNCg0KICAgcmV0 dXJuIDE7DQoNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog Kg0KICogRnVuY3Rpb24gICAgOiAgc3NsX2NydF92ZXJpZnlfaW5mbw0KICoN CiAqIERlc2NyaXB0aW9uIDogIFJldHVybnMgYW4gaW5mb3JtYXRpb25hbCBz dHJpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbg0KICogICAgICAgICAgICAg ICAgc3RhdHVzIG9mIGEgY2VydGlmaWNhdGUuDQogKg0KICogUGFyYW1ldGVy cyAgOg0KICogICAgICAgICAgMSAgOiAgYnVmID0gQnVmZmVyIHRvIHdyaXRl IHRvDQogKiAgICAgICAgICAyICA6ICBzaXplID0gTWF4aW11bSBzaXplIG9m IGJ1ZmZlcg0KICogICAgICAgICAgMyAgOiAgY3NwID0gY2xpZW50IHN0YXRl DQogKg0KICogUmV0dXJucyAgICAgOiAgTi9BDQogKg0KICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8NCmV4dGVybiB2b2lkIHNzbF9jcnRfdmVyaWZ5X2lu Zm8oY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IGNsaWVudF9zdGF0 ZSAqY3NwKQ0Kew0KICAgc3RybmNweShidWYsIHdvbGZTU0xfWDUwOV92ZXJp ZnlfY2VydF9lcnJvcl9zdHJpbmcoDQogICAgICBjc3AtPnNlcnZlcl9jZXJ0 X3ZlcmlmaWNhdGlvbl9yZXN1bHQpLCBzaXplKTsNCiAgIGJ1ZltzaXplIC0g MV0gPSAwOw0KfQ0KDQoNCiNpZmRlZiBGRUFUVVJFX0dSQUNFRlVMX1RFUk1J TkFUSU9ODQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu Y3Rpb24gICAgOiAgc3NsX3JlbGVhc2UNCiAqDQogKiBEZXNjcmlwdGlvbiA6 ICBSZWxlYXNlIGFsbCBTU0wgcmVzb3VyY2VzDQogKg0KICogUGFyYW1ldGVy cyAgOg0KICoNCiAqIFJldHVybnMgICAgIDogIE4vQQ0KICoNCiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovDQpleHRlcm4gdm9pZCBzc2xfcmVsZWFzZSh2 b2lkKQ0Kew0KICAgaWYgKHdvbGZzc2xfaW5pdGlhbGl6ZWQgPT0gMSkNCiAg IHsNCiAgICAgIHdjX0ZyZWVSbmcoJndvbGZzc2xfcm5nKTsNCiAgICAgIHdv bGZTU0xfQ2xlYW51cCgpOw0KICAgfQ0KfQ0KI2VuZGlmIC8qIGRlZiBGRUFU VVJFX0dSQUNFRlVMX1RFUk1JTkFUSU9OICovDQo= ---1463809792-111540969-1737912087=:9393 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Privoxy-users mailing list [email protected] https://lists.privoxy.org/mailman/listinfo/privoxy-users ---1463809792-111540969-1737912087=:9393--