Date: Wed, 14 Nov 2012 22:29:58 -0600 From: Russell Cattelan <cattelan@thebarn.com> To: freebsd-current@freebsd.org Subject: Re: Anybody willing to test out kload? Message-ID: <50A46FC6.9090404@thebarn.com> In-Reply-To: <50A41395.7080205@thebarn.com> References: <50A41395.7080205@thebarn.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigEF8640DC65B19FFA7A0B0F0B Content-Type: multipart/mixed; boundary="------------010401020106090303040504" This is a multi-part message in MIME format. --------------010401020106090303040504 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable A few people have pointed out I sent out the patch in reverse. :-( I messed up and reversed the tags to git diff. Here is the corrected patch. Along with a few corrections and cleanups. -Russell --------------010401020106090303040504 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="kload.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kload.patch" ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmM2MDk2MzMKZGlmZiAtLWdpdCBhL3N5cy9hbWQ2NC9hbWQ2 NC9rbG9hZC5jIGIvc3lzL2FtZDY0L2FtZDY0L2tsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZWQyMDNhZQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hbWQ2 NC9hbWQ2NC9rbG9hZC5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDExIC0gMjAxMgorICoJUnVzc2VsbCBDYXR0ZWxhbiBEaWdpdGFsIEVsdmVzIEluYwor ICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxMgorICoJSXNpbG9uIFN5c3RlbXMsIExMQy4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRl IDxzeXMva2xvYWQuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz L3N5c3Byb3RvLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDx2bS92 bV9wYXJhbS5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJu Lmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5oPgorCisjZGVmaW5lCUdVRVNUX05VTExfU0VM CQkwCisjZGVmaW5lCUdVRVNUX0NPREVfU0VMCQkxCisjZGVmaW5lCUdVRVNUX0RBVEFfU0VM CQkyCisKK3ZvaWQKK3NldHVwX2ZyZWVic2RfZ2R0KHVpbnQ2NF90ICpnZHRyKQoreworCWdk dHJbR1VFU1RfTlVMTF9TRUxdID0gMHgwMDAwMDAwMDAwMDAwMDAwOworCWdkdHJbR1VFU1Rf Q09ERV9TRUxdID0gMHgwMDIwOTgwMDAwMDAwMDAwOworCWdkdHJbR1VFU1RfREFUQV9TRUxd ID0gMHgwMDAwOTIwMDAwMDAwMDAwOworfQorCitwdF9lbnRyeV90ICoKK2tsb2FkX2J1aWxk X3BhZ2VfdGFibGUodm9pZCkKK3sKKwlwdF9lbnRyeV90ICpQVDQ7CisJcHRfZW50cnlfdCAq UFQzOworCXB0X2VudHJ5X3QgKlBUMjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhOwor CisJdmEgPSAodW5zaWduZWQgbG9uZylrbWVtX2FsbG9jKGtlcm5lbF9tYXAsUEFHRV9TSVpF ICogMyk7CisJUFQ0ID0gKHB0X2VudHJ5X3QgKil2YTsKKwlQVDMgPSAocHRfZW50cnlfdCAq KShQVDQgKyAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSk7CisJUFQyID0g KHB0X2VudHJ5X3QgKikoUFQzICsgKFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25n KSkpOworCisJaWYgKGJvb3R2ZXJib3NlKQorCQlwcmludGYoIiVzIFBUNCAweCVseCAoMHgl bHgpIFBUMyAweCVseCAoMHglbHgpICIKKwkJICAgICJQVDIgMHglbHggKDB4JWx4KVxuIiwK KwkJICAgIF9fZnVuY19fLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpUFQ0LCAodW5zaWduZWQg bG9uZyl2dG9waHlzKFBUNCksCisJCSAgICAodW5zaWduZWQgbG9uZylQVDMsICh1bnNpZ25l ZCBsb25nKXZ0b3BoeXMoUFQzKSwKKwkJICAgICh1bnNpZ25lZCBsb25nKVBUMiwgKHVuc2ln bmVkIGxvbmcpdnRvcGh5cyhQVDIpKTsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBzZWN0 aW9uIGlzIGEgZGlyZWN0IGNvcHkgb2YKKwkgKiBoZWFkL3NyYy9zeXMvYm9vdC9pMzg2L2xp YmkzODYvZWxmNjRfZnJlZWJzZC5jOjkyIGF0IHIyMzY2ODgKKwkgKi8KKworCWJ6ZXJvKFBU NCwgUEFHRV9TSVpFKTsKKwliemVybyhQVDMsIFBBR0VfU0laRSk7CisJYnplcm8oUFQyLCBQ QUdFX1NJWkUpOworCisJLyoKKwkgKiBUaGlzIGlzIGtpbmRhIGJydXRhbCwgYnV0IGV2ZXJ5 IHNpbmdsZSAxR0IgVk0gbWVtb3J5IHNlZ21lbnQgcG9pbnRzCisJICogdG8gdGhlIHNhbWUg Zmlyc3QgMUdCIG9mIHBoeXNpY2FsIG1lbW9yeS4gIEJ1dCBpdCBpcyBtb3JlIHRoYW4KKwkg KiBhZGVxdWF0ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKKwkJLyoK KwkJICogRWFjaCBzbG90IG9mIHRoZSBsZXZlbCA0IHBhZ2VzIHBvaW50cyB0byB0aGUKKwkJ ICogc2FtZSBsZXZlbCAzIHBhZ2UKKwkJICovCisJCVBUNFtpXSA9IChwdF9lbnRyeV90KSh2 dG9waHlzKFBUMykpOworCQlQVDRbaV0gfD0gUEdfViB8IFBHX1JXIHwgUEdfVTsKKworCQkv KgorCQkgKiBFYWNoIHNsb3Qgb2YgdGhlIGxldmVsIDMgcGFnZXMgcG9pbnRzIHRvIHRoZQor CQkgKiBzYW1lIGxldmVsIDIgcGFnZQorCQkgKi8KKwkJUFQzW2ldID0gKHB0X2VudHJ5X3Qp KHZ0b3BoeXMoUFQyKSk7CisJCVBUM1tpXSB8PSBQR19WIHwgUEdfUlcgfCBQR19VOworCisJ CS8qIFRoZSBsZXZlbCAyIHBhZ2Ugc2xvdHMgYXJlIG1hcHBlZCB3aXRoIDJNQiBwYWdlcyBm b3IgMUdCLiAqLworCQlQVDJbaV0gPSBpICogKDIgKiAxMDI0ICogMTAyNCk7CisJCVBUMltp XSB8PSBQR19WIHwgUEdfUlcgfCBQR19QUyB8IFBHX1U7CisJfQorCXJldHVybiAoKHB0X2Vu dHJ5X3QgKil2dG9waHlzKFBUNCkpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FtZDY0L2FtZDY0 L2tsb2FkX2V4ZWMuUyBiL3N5cy9hbWQ2NC9hbWQ2NC9rbG9hZF9leGVjLlMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViZmYzYgotLS0gL2Rldi9udWxsCisrKyBi L3N5cy9hbWQ2NC9hbWQ2NC9rbG9hZF9leGVjLlMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglSdXNzZWxsIENhdHRlbGFuIERpZ2l0 YWwgRWx2ZXMgSW5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglJc2lsb24g U3lzdGVtcywgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisg Ki8KKworI2luY2x1ZGUgImFzc3ltLnMiCisKKyNkZWZpbmUJQ1IwX1BHCTB4ODAwMDAwMDAJ LyogUGFHaW5nIGVuYWJsZSAqLworCisjZGVmaW5lIFg4Nl9DUjBfUEUJMHgwMDAwMDAwMSAv KiBQcm90ZWN0aW9uIEVuYWJsZSAqLworI2RlZmluZSBYODZfQ1IwX01QCTB4MDAwMDAwMDIg LyogTW9uaXRvciBDb3Byb2Nlc3NvciAqLworI2RlZmluZSBYODZfQ1IwX0VNCTB4MDAwMDAw MDQgLyogRW11bGF0aW9uICovCisjZGVmaW5lIFg4Nl9DUjBfVFMJMHgwMDAwMDAwOCAvKiBU YXNrIFN3aXRjaGVkICovCisjZGVmaW5lIFg4Nl9DUjBfRVQJMHgwMDAwMDAxMCAvKiBFeHRl bnNpb24gVHlwZSAqLworI2RlZmluZSBYODZfQ1IwX05FCTB4MDAwMDAwMjAgLyogTnVtZXJp YyBFcnJvciAqLworI2RlZmluZSBYODZfQ1IwX1dQCTB4MDAwMTAwMDAgLyogV3JpdGUgUHJv dGVjdCAqLworI2RlZmluZSBYODZfQ1IwX0FNCTB4MDAwNDAwMDAgLyogQWxpZ25tZW50IE1h c2sgKi8KKyNkZWZpbmUgWDg2X0NSMF9OVwkweDIwMDAwMDAwIC8qIE5vdCBXcml0ZS10aHJv dWdoICovCisjZGVmaW5lIFg4Nl9DUjBfQ0QJMHg0MDAwMDAwMCAvKiBDYWNoZSBEaXNhYmxl ICovCisjZGVmaW5lIFg4Nl9DUjBfUEcJMHg4MDAwMDAwMCAvKiBQYWdpbmcgKi8KKworI2Rl ZmluZSBYODZfQ1I0X1BTRQkweDAwMDAwMDEwIC8qIGVuYWJsZSBwYWdlIHNpemUgZXh0ZW5z aW9ucyAqLworI2RlZmluZSBYODZfQ1I0X1BBRQkweDAwMDAwMDIwIC8qIGVuYWJsZSBwaHlz aWNhbCBhZGRyZXNzIGV4dGVuc2lvbnMgKi8KKworCS5nbG9ibCByZWxvY2F0ZV9rZXJuZWwK K3JlbG9jYXRlX2tlcm5lbDoKKwkvKiBmaXJzdCBpbnN0YWxsIHRoZSBuZXcgcGFnZSB0YWJs ZSAqLworCW1vdnEJMzIoJXJjeCksICVyYXggLyogcGFnZSB0YWJsZSAqLworCW1vdnEJNDAo JXJjeCksICVyOSAgLyogYWRkcmVzcyBvZiBjb250cm9sX3BhZ2Ugd2l0aCBuZXcgUFQgKi8K Kwltb3ZxCSVyYXgsICVjcjMKKworCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRl OgorCSAqICAtIHBhZ2Ugc2l6ZSBleHRlbnNpb25zCisJICogIC0gcGh5c2ljYWwgYWRkcmVz cyBleHRlbnNpb24gZW5hYmxlZAorCSAqLworCW1vdnEJJChYODZfQ1I0X1BTRSB8IFg4Nl9D UjRfUEFFKSwgJXJheAorCW1vdnEJJXJheCwgJWNyNAorCisJLyogdGhlbiBtb3ZlIHRoZSBz dGFjayB0byB0aGUgZW5kIG9mIGNvbnRyb2wgcGFnZSAqLworCWxlYSA0MDk2KCVyOSksICVy c3AKKworCS8qIG5vdyBzYXZlIHN0dWZmIG9udG8gdGhlIG5ldyBzdGFjayAqLworCXB1c2hx CSVyY3gJLyogYXJnIDQgY29udHJvbCBwYWdlICovCisJcHVzaHEJJXJkeAkvKiBhcmcgMyBj b2RlIHBhZ2UgKi8KKwlwdXNocQklcnNpCS8qIGFyZyAyIGtlcm4gYmFzZSAqLworCXB1c2hx CSVyZGkJLyogYXJnIDEgdmFfbGlzdCAqLworCisJLyogemVybyBvdXQgZmxhZ3MsIGFuZCBk aXNhYmxlIGludGVycnVwdHMgKi8KKwlwdXNocSAkMAorCXBvcGZxCisJY2xpCisKKwkvKiBp bnN0YWxsIHNpbXBsZSBnZHQgKi8KKwltb3ZxCTI0KCVyOSksICVyYXgJLyogZ2R0ICovCisJ bGdkdAkoJXJheCkKKwltb3ZxCTU2KCVyOSksICVyYXgKKwlsaWR0CSglcmF4KQkJLyogbnVs bCBpZHQgKi8KKwkvKgorCSAqIG5vdyBtb3ZlIHRvIHRoZSBjb2RlIHBhZ2UKKwkgKiBzaG91 bGQgaGF2ZSBiZWVuIHBhc3NlZCBjb2RlX3BhZ2UgYmFzZWQKKwkgKiBvbiBuZXcgcGFnZSB0 YWJsZQorCSAqLworCW1vdnEgJXJkeCwgJXI4CisJYWRkcQkkKGlkZW50aXR5X21hcHBlZCAt IHJlbG9jYXRlX2tlcm5lbCksICVyOAorCS8qIG9mZnNldCBvZiBjb2RlIHNlZ21lbnQgaW4g bmV3IGdkdCAqLworCXB1c2hxICQweDA4CisJcHVzaHEgJXI4CisJLyoganVtcCB0byB0aGlz IHNwb3QgaW4gdGhlIG5ldyBwYWdlICovCisJbHJldHEKK2lkZW50aXR5X21hcHBlZDoKKwor CW1vdnEgJDB4MTAsJXJheAorCW1vdnEgJXJheCwlZHMKKwltb3ZxICVyYXgsJWVzCisJbW92 cSAlcmF4LCVmcworCW1vdnEgJXJheCwlZ3MKKwltb3ZxICVyYXgsJXNzCisJCisJLyoKKwkg KiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJICogIC0gUGFnaW5nIGVuYWJsZWQKKwkg KiAgLSBBbGlnbm1lbnQgY2hlY2sgZGlzYWJsZWQKKwkgKiAgLSBXcml0ZSBwcm90ZWN0IGRp c2FibGVkCisJICogIC0gTm8gdGFzayBzd2l0Y2gKKwkgKiAgLSBEb24ndCBkbyBGUCBzb2Z0 d2FyZSBlbXVsYXRpb24uCisJICogIC0gUHJvY3RlY3RlZCBtb2RlIGVuYWJsZWQKKwkgKi8K Kwltb3ZxCSVjcjAsICVyYXgKKwlhbmRxCSR+KFg4Nl9DUjBfQU0gfCBYODZfQ1IwX1dQIHwg WDg2X0NSMF9UUyB8IFg4Nl9DUjBfRU0gfCAgWDg2X0NSMF9NUCB8IFg4Nl9DUjBfTkUpLCAl cmF4CisJb3JsCSQoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpLCAlZWF4CisJbW92cQklcmF4 LCAlY3IwCisKKwkvKiBEbyB0aGUgY29waWVzICovCisJY2xkCisJLyogc2F2ZWQgbGlzdCBv ZiBzb3VyY2UgcGFnZXMgKi8KKwltb3ZxIDAoJXJzcCksICVyYngKKwkvKgorCSAqIHRoZSBp bml0aWFsIGRlc3QgcGFnZQorCSogdGhpcyBpcyBLRVJOQkFTRSArIDB4MjAwMDAwCisJKiBr ZXJuZWwgaXMgY29udGlnaW91cyBpbiBtZW1vcnkKKwkqLworCW1vdnEgOCglcnNwKSwgJXJk aQorMDoJLyogdG9wLCByZWFkIGFub3RoZXIgd29yZCBmb3IgdGhlIGluZGlyZWN0aW9uIHBh Z2UgKi8KKwltb3ZxCSglcmJ4KSwgJXJjeAorCisJYWRkcQkkOCwgJXJieAorCXRlc3RxCSQw eDEsICAgJXJjeCAgLyogaXMgaXQgYSBkZXN0aW5hdGlvbiBwYWdlICovCisJanoJMWYKKwlt b3ZxCSVyY3gsCSVyZGkKKwlhbmRxCSQweEZGRkZGRkZGZmZmZmYwMDAsICVyZGkKKwlqbXAg ICAgIDBiCisxOgorCXRlc3RxCSQweDIsCSVyY3ggIC8qIGlzIGl0IGFuIGluZGlyZWN0aW9u IHBhZ2UgKi8KKwlqegkxZgorCW1vdnEJJXJjeCwJJXJieAorCWFuZHEJJDB4RkZGRkZGRkZm ZmZmZjAwMCwgJXJieAorCWptcCAgICAgMGIKKzE6CisJdGVzdHEgICAkMHg0LCAgICVyY3gg LyogaXMgaXQgdGhlIGRvbmUgaW5kaWNhdG9yICovCisJanogICAgICAxZgorCWptcCAgICAg MmYKKzE6CisJdGVzdHEgICAkMHg4LCAgICVyY3ggLyogaXMgaXQgdGhlIHNvdXJjZSBpbmRp Y2F0b3IgKi8KKwlqeiAgICAgIDBiCSAgICAgLyogSWdub3JlIGl0IG90aGVyd2lzZSAqLwor CW1vdnEgICAgJXJjeCwgICAlcnNpIC8qIEZvciBldmVyeSBzb3VyY2UgcGFnZSBkbyBhIGNv cHkgKi8KKwlhbmRxICAgICQweGZmZmZmZmZmZmZmZmYwMDAsICVyc2kKKwltb3ZxICAgICQ1 MTIsICVyY3gKKwlyZXAKKwltb3ZzcQorCWptcCAgICAgMGIKKzI6CisJLyoKKwkgKiBzZXQg YWxsIG9mIHRoZSByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzCisJICogbGVhdmUgJXJzcCBh bG9uZQorCSAqLworCXhvcnEJJXJheCwgJXJheAorCXhvcnEJJXJieCwgJXJieAorCXhvcnEg ICAgJXJjeCwgJXJjeAorCXhvcnEgICAgJXJkeCwgJXJkeAorCXhvcnEgICAgJXJzaSwgJXJz aQorCXhvcnEgICAgJXJkaSwgJXJkaQorCXhvcnEgICAgJXJicCwgJXJicAorCisJcHVzaHEJ MTYoJXI5KQkvKiBwaHlzZnJlZSAqLworCW1vdnEJOCglcjkpLCAlcmF4CS8qIG1vZHVsZXAg Ki8KKwlzYWxxCSQzMiwgJXJheAorCXB1c2hxCSVyYXgKKworCXB1c2hxICQweDgKKwlwdXNo cQk0OCglcjkpCS8qIGVudHJ5ICMga2VybmVsIGVudHJ5IHB0ICovCisJbHJldHEKK3JlbG9j YXRlX2tlcm5lbF9lbmQ6CisJLmdsb2JsIHJlbG9jYXRlX2tlcm5lbF9zaXplCityZWxvY2F0 ZV9rZXJuZWxfc2l6ZToKKwkubG9uZyByZWxvY2F0ZV9rZXJuZWxfZW5kIC0gcmVsb2NhdGVf a2VybmVsCmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRlcC5jIGIvc3lz L2FtZDY0L2FtZDY0L21wX21hY2hkZXAuYwppbmRleCBkMmU0YWFkLi5iMDg1MzI2IDEwMDY0 NAotLS0gYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRlcC5jCisrKyBiL3N5cy9hbWQ2NC9h bWQ2NC9tcF9tYWNoZGVwLmMKQEAgLTc4LDYgKzc4LDkgQEAgX19GQlNESUQoIiRGcmVlQlNE JCIpOwogI2RlZmluZSBCSU9TX1JFU0VUCQkoMHgwZikKICNkZWZpbmUgQklPU19XQVJNCQko MHgwYSkKIAorCisvLyBxdWljayBoYWNrIHRvIGFjY2VzcyB0aGUga2xvYWQgcGFnZSB0YWJs ZSBzbyB3ZSBjYW4gc2V0IHRoZSBBUHMgdG8gYSBrbm93IHBndGJsICovCitleHRlcm4gdW5z aWduZWQgbG9uZyBrbG9hZF9wZ3RibDsKIC8qIGxvY2sgcmVnaW9uIHVzZWQgYnkga2VybmVs IHByb2ZpbGluZyAqLwogaW50CW1jb3VudF9sb2NrOwogCkBAIC0xNDA5LDEwICsxNDEyLDIw IEBAIGNwdXN0b3BfaGFuZGxlcih2b2lkKQogdm9pZAogY3B1c3VzcGVuZF9oYW5kbGVyKHZv aWQpCiB7CisJcmVnaXN0ZXJfdCBjcjMsIHJmOworCXJlZ2lzdGVyX3QgY3IwLCBjcjQ7CiAJ dV9pbnQgY3B1OwogCiAJY3B1ID0gUENQVV9HRVQoY3B1aWQpOwogCisJcHJpbnRmKCIlcyBj YWxsZWQgb24gY3B1JWRcbiIsX19GVU5DVElPTl9fLGNwdSk7CisKKwlyZiA9IGludHJfZGlz YWJsZSgpOworCWNyMyA9IHJjcjMoKTsKKworCWxhcGljX2NsZWFyX2xhcGljKDEgLyogZGlz YWJsZSBsYXBpYyAqLyk7CisgCS8qIHNodXRkb3duIGludGVycnVwdHMgdG8gdGhlIGNwdSBh bmQgdGhlbiBzZXQgdGhlIG1hc2sgYXMgc3RvcHBlZCAqLworCiAJaWYgKHNhdmVjdHgoc3Vz cHBjYnNbY3B1XSkpIHsKIAkJY3R4X2ZwdXNhdmUoc3VzcHBjYnNbY3B1XS0+cGNiX2ZwdXN1 c3BlbmQpOwogCQl3YmludmQoKTsKQEAgLTE0MjIsMjAgKzE0MzUsMzcgQEAgY3B1c3VzcGVu ZF9oYW5kbGVyKHZvaWQpCiAJCWluaXRpYWxpemVjcHUoKTsKIAkJUENQVV9TRVQoc3dpdGNo dGltZSwgMCk7CiAJCVBDUFVfU0VUKHN3aXRjaHRpY2tzLCB0aWNrcyk7Ci0KLQkJLyogSW5k aWNhdGUgdGhhdCB3ZSBhcmUgcmVzdW1lZCAqLwotCQlDUFVfQ0xSX0FUT01JQyhjcHUsICZz dXNwZW5kZWRfY3B1cyk7CiAJfQogCisJLyogbWFrZSBzdXJlIHRoZSBwYWdlIHRhYmxlIGlz IG5vdCB0aGUgc2FtZSBvbmUgdGhhdCBib290IHByb2Nlc3Mgc2V0cyB1cCAqLworCWxvYWRf Y3IzKGtsb2FkX3BndGJsKTsKKworCS8qIERpc2FibGUgUEdFLiAqLworCWNyNCA9IHJjcjQo KTsKKwlsb2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7CisKKwkvKiBEaXNhYmxlIGNhY2hlcyAo Q0QgPSAxLCBOVyA9IDApIGFuZCBwYWdpbmcqLworCWNyMCA9IHJjcjAoKTsKKwlsb2FkX2Ny MCgoY3IwICYgfkNSMF9OVykgfCBDUjBfQ0QgfCBDUjBfUEcpOworCisJLyogRmx1c2hlcyBj YWNoZXMgYW5kIFRMQnMuICovCisJd2JpbnZkKCk7CisJaW52bHRsYigpOworCisJaGFsdCgp OworCiAJLyogV2FpdCBmb3IgcmVzdW1lICovCiAJd2hpbGUgKCFDUFVfSVNTRVQoY3B1LCAm c3RhcnRlZF9jcHVzKSkKIAkJaWEzMl9wYXVzZSgpOwogCiAJQ1BVX0NMUl9BVE9NSUMoY3B1 LCAmc3RhcnRlZF9jcHVzKTsKKwlDUFVfQ0xSX0FUT01JQyhjcHUsICZzdG9wcGVkX2NwdXMp OwogCi0JLyogUmVzdW1lIE1DQSBhbmQgbG9jYWwgQVBJQyAqLworCS8qIFJlc3RvcmUgQ1Iz IGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLworCWxvYWRfY3IzKGNyMyk7CiAJbWNhX3Jlc3Vt ZSgpOwogCWxhcGljX3NldHVwKDApOworCWludHJfcmVzdG9yZShyZik7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zeXMvYW1kNjQvaW5jbHVkZS9hcGljdmFyLmggYi9zeXMvYW1kNjQvaW5j bHVkZS9hcGljdmFyLmgKaW5kZXggYWUyZjViOS4uN2ZkZWQ5NSAxMDA2NDQKLS0tIGEvc3lz L2FtZDY0L2luY2x1ZGUvYXBpY3Zhci5oCisrKyBiL3N5cy9hbWQ2NC9pbmNsdWRlL2FwaWN2 YXIuaApAQCAtMjI3LDYgKzIyNyw3IEBAIGludAlsYXBpY19zZXRfbHZ0X3RyaWdnZXJtb2Rl KHVfaW50IGFwaWNfaWQsIHVfaW50IGx2dCwKIAkgICAgZW51bSBpbnRyX3RyaWdnZXIgdHJp Z2dlcik7CiB2b2lkCWxhcGljX3NldF90cHIodV9pbnQgdmVjdG9yKTsKIHZvaWQJbGFwaWNf c2V0dXAoaW50IGJvb3QpOwordm9pZAlsYXBpY19jbGVhcl9sYXBpYyh1X2ludCk7CiAKICNl bmRpZiAvKiAhTE9DT1JFICovCiAjZW5kaWYgLyogX01BQ0hJTkVfQVBJQ1ZBUl9IXyAqLwpk aWZmIC0tZ2l0IGEvc3lzL2FtZDY0L2luY2x1ZGUvaW50cl9tYWNoZGVwLmggYi9zeXMvYW1k NjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaAppbmRleCA3MDBlMzVmLi5hOGVmMWZjIDEwMDY0 NAotLS0gYS9zeXMvYW1kNjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaAorKysgYi9zeXMvYW1k NjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaApAQCAtMTU4LDYgKzE1OCw3IEBAIHN0cnVjdCBp bnRzcmMgKmludHJfbG9va3VwX3NvdXJjZShpbnQgdmVjdG9yKTsKIGludAlpbnRyX3JlZ2lz dGVyX3BpYyhzdHJ1Y3QgcGljICpwaWMpOwogaW50CWludHJfcmVnaXN0ZXJfc291cmNlKHN0 cnVjdCBpbnRzcmMgKmlzcmMpOwogaW50CWludHJfcmVtb3ZlX2hhbmRsZXIodm9pZCAqY29v a2llKTsKK2ludAlpbnRyX2NsZWFyX2FsbF9oYW5kbGVycyh2b2lkKTsKIHZvaWQJaW50cl9y ZXN1bWUodm9pZCk7CiB2b2lkCWludHJfc3VzcGVuZCh2b2lkKTsKIHZvaWQJaW50cmNudF9h ZGQoY29uc3QgY2hhciAqbmFtZSwgdV9sb25nICoqY291bnRwKTsKZGlmZiAtLWdpdCBhL3N5 cy9ib290L2NvbW1vbi9sb2FkX2VsZi5jIGIvc3lzL2Jvb3QvY29tbW9uL2xvYWRfZWxmLmMK aW5kZXggZTFlNmRlNy4uMzZkZjIyYyAxMDA2NDQKLS0tIGEvc3lzL2Jvb3QvY29tbW9uL2xv YWRfZWxmLmMKKysrIGIvc3lzL2Jvb3QvY29tbW9uL2xvYWRfZWxmLmMKQEAgLTMxNywyNSAr MzE3LDMwIEBAIF9fZWxmTihsb2FkaW1hZ2UpKHN0cnVjdCBwcmVsb2FkZWRfZmlsZSAqZnAs IGVsZl9maWxlX3QgZWYsIHVfaW50NjRfdCBvZmYpCiAJICAgIGNvbnRpbnVlOwogCiAjaWZk ZWYgRUxGX1ZFUkJPU0UKLQlwcmludGYoIlNlZ21lbnQ6IDB4JWx4QDB4JWx4IC0+IDB4JWx4 LTB4JWx4IiwKLQkgICAgKGxvbmcpcGhkcltpXS5wX2ZpbGVzeiwgKGxvbmcpcGhkcltpXS5w X29mZnNldCwKLQkgICAgKGxvbmcpKHBoZHJbaV0ucF92YWRkciArIG9mZiksCi0JICAgIChs b25nKShwaGRyW2ldLnBfdmFkZHIgKyBvZmYgKyBwaGRyW2ldLnBfbWVtc3ogLSAxKSk7CisJ cHJpbnRmKCJTZWdtZW50OiBmaWxlc3ogMHglbGx4IEAgMHglMDE2bGx4IC0+ICB2YWRkcl9y YW5nZSAweCUwMTZsbHggLSAweCUwMTZsbHgiLAorCSAgICAobG9uZyBsb25nKXBoZHJbaV0u cF9maWxlc3osIChsb25nIGxvbmcpcGhkcltpXS5wX29mZnNldCwKKwkgICAgKGxvbmcgbG9u ZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmKSwKKwkgICAgKGxvbmcgbG9uZykocGhkcltpXS5w X3ZhZGRyICsgb2ZmICsgcGhkcltpXS5wX21lbXN6IC0gMSkpOwogI2Vsc2UKIAlpZiAoKHBo ZHJbaV0ucF9mbGFncyAmIFBGX1cpID09IDApIHsKLQkgICAgcHJpbnRmKCJ0ZXh0PTB4JWx4 ICIsIChsb25nKXBoZHJbaV0ucF9maWxlc3opOworCSAgICBwcmludGYoInRleHQ9MHglbGx4 ICIsIChsb25nIGxvbmcpcGhkcltpXS5wX2ZpbGVzeik7CiAJfSBlbHNlIHsKLQkgICAgcHJp bnRmKCJkYXRhPTB4JWx4IiwgKGxvbmcpcGhkcltpXS5wX2ZpbGVzeik7CisJICAgIHByaW50 ZigiZGF0YT0weCVsbHgiLCAobG9uZyBsb25nKXBoZHJbaV0ucF9maWxlc3opOwogCSAgICBp ZiAocGhkcltpXS5wX2ZpbGVzeiA8IHBoZHJbaV0ucF9tZW1zeikKLQkJcHJpbnRmKCIrMHgl bHgiLCAobG9uZykocGhkcltpXS5wX21lbXN6IC1waGRyW2ldLnBfZmlsZXN6KSk7CisJCXBy aW50ZigiKzB4JWxseCIsIChsb25nIGxvbmcpKHBoZHJbaV0ucF9tZW1zeiAtcGhkcltpXS5w X2ZpbGVzeikpOwogCSAgICBwcmludGYoIiAiKTsKIAl9CiAjZW5kaWYKIAlmcGNvcHkgPSAw OwogCWlmIChlZi0+Zmlyc3RsZW4gPiBwaGRyW2ldLnBfb2Zmc2V0KSB7CiAJICAgIGZwY29w eSA9IGVmLT5maXJzdGxlbiAtIHBoZHJbaV0ucF9vZmZzZXQ7Ci0JICAgIGFyY2hzdy5hcmNo X2NvcHlpbihlZi0+Zmlyc3RwYWdlICsgcGhkcltpXS5wX29mZnNldCwKLQkJCSAgICAgICBw aGRyW2ldLnBfdmFkZHIgKyBvZmYsIGZwY29weSk7CisJICAgIHByaW50ZigiXG4lczolZCBm aXJzdHBhZ2UgMHglbHggcF9vZmZzZXQgMHglbHggcF92YWRkciAweCVseCBvZmYgMHglbHhc biIsCisJCSAgIF9fRlVOQ1RJT05fXyxfX0xJTkVfXywKKwkJICAgKHVuc2lnbmVkIGxvbmcp ZWYtPmZpcnN0cGFnZSwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIHBoZHJbaV0ucF9vZmZzZXQs CisJCSAgICh1bnNpZ25lZCBsb25nKXBoZHJbaV0ucF92YWRkciwKKwkJICAgKHVuc2lnbmVk IGxvbmcpb2ZmKTsKKwkgICAgYXJjaHN3LmFyY2hfY29weWluKGVmLT5maXJzdHBhZ2UgKyBw aGRyW2ldLnBfb2Zmc2V0LCBwaGRyW2ldLnBfdmFkZHIgKyBvZmYsIGZwY29weSk7CiAJfQog CWlmIChwaGRyW2ldLnBfZmlsZXN6ID4gZnBjb3B5KSB7CiAJICAgIGlmIChrZXJuX3ByZWFk KGVmLT5mZCwgcGhkcltpXS5wX3ZhZGRyICsgb2ZmICsgZnBjb3B5LApAQCAtMzQ4LDkgKzM1 MywxMSBAQCBfX2VsZk4obG9hZGltYWdlKShzdHJ1Y3QgcHJlbG9hZGVkX2ZpbGUgKmZwLCBl bGZfZmlsZV90IGVmLCB1X2ludDY0X3Qgb2ZmKQogCS8qIGNsZWFyIHNwYWNlIGZyb20gb3Zl cnNpemVkIHNlZ21lbnRzOyBlZzogYnNzICovCiAJaWYgKHBoZHJbaV0ucF9maWxlc3ogPCBw aGRyW2ldLnBfbWVtc3opIHsKICNpZmRlZiBFTEZfVkVSQk9TRQotCSAgICBwcmludGYoIiAo YnNzOiAweCVseC0weCVseCkiLAotCQkobG9uZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmICsg cGhkcltpXS5wX2ZpbGVzeiksCi0JCShsb25nKShwaGRyW2ldLnBfdmFkZHIgKyBvZmYgKyBw aGRyW2ldLnBfbWVtc3ogLSAxKSk7CisJICAgIHByaW50ZigiXG5cdChic3M6IDB4JWx4LTB4 JWx4KSB2YWRkciAweCVseCAgc2l6ZSAweCVseCBjbGVhcmluZ1xuIiwKKwkJICAgKGxvbmcp KHBoZHJbaV0ucF92YWRkciArIG9mZiArIHBoZHJbaV0ucF9maWxlc3opLAorCQkgICAobG9u ZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmICsgcGhkcltpXS5wX21lbXN6IC0gMSksCisJCSAg IChsb25nKShwaGRyW2ldLnBfdmFkZHIgKyBwaGRyW2ldLnBfZmlsZXN6KSwKKwkJICAgKGxv bmcpKHBoZHJbaV0ucF9tZW1zeiAtIHBoZHJbaV0ucF9maWxlc3opICk7CiAjZW5kaWYKIAog CSAgICBrZXJuX2J6ZXJvKHBoZHJbaV0ucF92YWRkciArIG9mZiArIHBoZHJbaV0ucF9maWxl c3osCmRpZmYgLS1naXQgYS9zeXMvYm9vdC91c2VyYm9vdC9maWNsL01ha2VmaWxlIGIvc3lz L2Jvb3QvdXNlcmJvb3QvZmljbC9NYWtlZmlsZQppbmRleCA0MmI5MzA5Li5kNzgxOGI5IDEw MDY0NAotLS0gYS9zeXMvYm9vdC91c2VyYm9vdC9maWNsL01ha2VmaWxlCisrKyBiL3N5cy9i b290L3VzZXJib290L2ZpY2wvTWFrZWZpbGUKQEAgLTYyLDYgKzYyLDEwIEBAIHNvZnRjb3Jl LmM6ICR7U09GVFdPUkRTfSBzb2Z0Y29yZS5hd2sKIAkoY2QgJHsuQ1VSRElSfS8uLi8uLi9m aWNsL3NvZnR3b3JkczsgY2F0ICR7U09GVFdPUkRTfSBcCiAJICAgIHwgYXdrIC1mIHNvZnRj b3JlLmF3ayAtdiBkYXRlc3RhbXA9ImBMQ19BTEw9QyBkYXRlYCIpID4gJHsuVEFSR0VUfQog CitiZWZvcmVkZXBlbmQgJHtPQkpTfTogbm8tbWFjaGluZQorCituby1tYWNoaW5lOgorCXJt IC1mICAgJHsuQ1VSRElSfS8uLi8uLi9maWNsL21hY2hpbmUKICMuaWYgJHtNQUNISU5FX0NQ VUFSQ0h9ID09ICJhbWQ2NCIKICMke1NSQ1M6TSouYzpSOlMvJC8uby9nfTogbWFjaGluZQog IwpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdGVzdC90ZXN0LmMgYi9zeXMvYm9v dC91c2VyYm9vdC90ZXN0L3Rlc3QuYwppbmRleCAzNjI1OGE3Li43NzIwMmMxIDEwMDY0NAot LS0gYS9zeXMvYm9vdC91c2VyYm9vdC90ZXN0L3Rlc3QuYworKysgYi9zeXMvYm9vdC91c2Vy Ym9vdC90ZXN0L3Rlc3QuYwpAQCAtMzc2LDYgKzM3NiwxMiBAQCB0ZXN0X2dldGVudih2b2lk ICphcmcsIGludCBpZHgpCiAJcmV0dXJuICh2YXJzW2lkeF0pOwogfQogCitzdGF0aWMgaW50 Cit0ZXN0X2J1aWxkc21hcCh2b2lkICphcmcsIHZvaWQgKipzbWFwX3ZvaWQsIHNpemVfdCAq b3V0bGVuKSAKK3sKKwlyZXR1cm4gKDApOworfQorCiBzdHJ1Y3QgbG9hZGVyX2NhbGxiYWNr cyBjYiA9IHsKIAkucHV0YyA9IHRlc3RfcHV0YywKIAkuZ2V0YyA9IHRlc3RfZ2V0YywKQEAg LTQwNSw2ICs0MTEsNyBAQCBzdHJ1Y3QgbG9hZGVyX2NhbGxiYWNrcyBjYiA9IHsKICAgICAg ICAgLmdldG1lbSA9IHRlc3RfZ2V0bWVtLAogCiAJLmdldGVudiA9IHRlc3RfZ2V0ZW52LAor CS5idWlsZHNtYXAgPSB0ZXN0X2J1aWxkc21hcCwKIH07CiAKIHZvaWQKQEAgLTQ2NCw1ICs0 NzEsNSBAQCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAl0ZXJtLmNfbGZsYWcgJj0g fihJQ0FOT058RUNITyk7CiAJdGNzZXRhdHRyKDAsIFRDU0FGTFVTSCwgJnRlcm0pOwogCi0J ZnVuYygmY2IsIE5VTEwsIFVTRVJCT09UX1ZFUlNJT05fMywgZGlza19mZCA+PSAwKTsKKwlm dW5jKCZjYiwgTlVMTCwgVVNFUkJPT1RfVkVSU0lPTl80LCBkaXNrX2ZkID49IDApOwogfQpk aWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QuaCBiL3N5cy9ib290L3Vz ZXJib290L3VzZXJib290LmgKaW5kZXggZTM4OTI3ZS4uMGE5ZDJmMSAxMDA2NDQKLS0tIGEv c3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QuaAorKysgYi9zeXMvYm9vdC91c2VyYm9vdC91 c2VyYm9vdC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lCVVTRVJCT09UX1ZFUlNJT05f MSAgICAgIDEKICNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTl8yICAgICAgMgogI2RlZmluZQlV U0VSQk9PVF9WRVJTSU9OXzMgICAgICAzCisjZGVmaW5lCVVTRVJCT09UX1ZFUlNJT05fNCAg ICAgIDQKIAogLyoKICAqIEV4aXQgY29kZXMgZnJvbSB0aGUgbG9hZGVyCkBAIC0xOTUsNCAr MTk2LDExIEBAIHN0cnVjdCBsb2FkZXJfY2FsbGJhY2tzIHsKIAkgKiBlYWNoIGludm9jYXRp b24gd2lsbCBhZGQgMSB0byB0aGUgcHJldmlvdXMgdmFsdWUgb2YgJ251bScuCiAJICovCiAJ Y29uc3QgY2hhciAqCSgqZ2V0ZW52KSh2b2lkICphcmcsIGludCBudW0pOworCisJLyoKKwkg KiBidWlsZCBzeXN0ZW0gc21hcAorCSAqIHRoaXMgaXMgZm9yIGtsb2FkIHRvIGJ1aWxkIHBh c3MgYmFjayBpbiBhIGNvcHkgb2YgdGhlIHJ1bm5pbmcKKwkgKiBzeXN0ZW1zIHNtYXAgcmV0 dXJucworCSAqLworCWludCAoKmJ1aWxkc21hcCkodm9pZCAqYXJnLCB2b2lkICoqc21hcCwg c2l6ZV90ICpsZW4pOwogfTsKZGlmZiAtLWdpdCBhL3N5cy9ib290L3VzZXJib290L3VzZXJi b290L2Jvb3RpbmZvNjQuYyBiL3N5cy9ib290L3VzZXJib290L3VzZXJib290L2Jvb3RpbmZv NjQuYwppbmRleCBmYzdjMTRkLi4yOGM0N2FiIDEwMDY0NAotLS0gYS9zeXMvYm9vdC91c2Vy Ym9vdC91c2VyYm9vdC9ib290aW5mbzY0LmMKKysrIGIvc3lzL2Jvb3QvdXNlcmJvb3QvdXNl cmJvb3QvYm9vdGluZm82NC5jCkBAIC0xODcsMzMgKzE4Nyw0NiBAQCBiaW9zX2FkZHNtYXBk YXRhKHN0cnVjdCBwcmVsb2FkZWRfZmlsZSAqa2ZwKQogewogCXVpbnQ2NF90IGxvd21lbSwg aGlnaG1lbTsKIAlpbnQgc21hcG51bSwgbGVuOwotCXN0cnVjdCBzbWFwIHNtYXBbM10sICpz bTsKKwlzdHJ1Y3Qgc21hcCAqc21hcCA9IE5VTEwsICpzbSA9IE5VTEw7CisJaW50IGVycm9y ID0gMTsKIAotCUNBTExCQUNLKGdldG1lbSwgJmxvd21lbSwgJmhpZ2htZW0pOworCXByaW50 ZigiJXNcbiIsX19GVU5DVElPTl9fKTsKIAotCXNtID0gJnNtYXBbMF07CisJaWYgKGNhbGxi YWNrcy0+YnVpbGRzbWFwKQorCQllcnJvciA9IGNhbGxiYWNrcy0+YnVpbGRzbWFwKE5VTEws ICh2b2lkICoqKSZzbWFwLCAmbGVuKTsKIAotCXNtLT5iYXNlID0gMDsJCQkJLyogYmFzZSBt ZW1vcnkgKi8KLQlzbS0+bGVuZ3RoID0gNjQwICogMTAyNDsKLQlzbS0+dHlwZSA9IFNNQVBf VFlQRV9NRU1PUlk7Ci0Jc20rKzsKKwkvKiBlaXRoZXIgdGhlcmUgaXMgbm8gYnVpbGRzbWFw IGZ1bmN0aW9uIG9yIGl0IGZhaWxlZAorCSAqIHJldmVydCBiYWNrIHRvIHVzaW5nIGdldG1l bSBhbmQgYSBzaW1wbGUgc21hcAorCSAqLwogCi0Jc20tPmJhc2UgPSAweDEwMDAwMDsJCQkv KiBleHRlbmRlZCBtZW1vcnkgKi8KLQlzbS0+bGVuZ3RoID0gbG93bWVtIC0gMHgxMDAwMDA7 Ci0Jc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOwotCXNtKys7CisJaWYgKGVycm9yKSB7 CisJCXNtYXAgPSBzbSA9IG1hbGxvYygzICogc2l6ZW9mKHN0cnVjdCBzbWFwKSk7CisJCUNB TExCQUNLKGdldG1lbSwgJmxvd21lbSwgJmhpZ2htZW0pOwogCi0Jc21hcG51bSA9IDI7CisJ CXNtLT5iYXNlID0gMDsJCQkJLyogYmFzZSBtZW1vcnkgKi8KKwkJc20tPmxlbmd0aCA9IDY0 MCAqIDEwMjQ7CisJCXNtLT50eXBlID0gU01BUF9UWVBFX01FTU9SWTsKKwkJc20rKzsKIAot ICAgICAgICBpZiAoaGlnaG1lbSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc20tPmJhc2Ug PSA0ICogR0I7Ci0gICAgICAgICAgICAgICAgc20tPmxlbmd0aCA9IGhpZ2htZW07Ci0gICAg ICAgICAgICAgICAgc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOwotCQlzbWFwbnVtKys7 Ci0gICAgICAgIH0KKwkJc20tPmJhc2UgPSAweDEwMDAwMDsJCQkvKiBleHRlbmRlZCBtZW1v cnkgKi8KKwkJc20tPmxlbmd0aCA9IGxvd21lbSAtIDB4MTAwMDAwOworCQlzbS0+dHlwZSA9 IFNNQVBfVFlQRV9NRU1PUlk7CisJCXNtKys7CiAKLSAgICAgICAgbGVuID0gc21hcG51bSAq IHNpemVvZiAoc3RydWN0IHNtYXApOwotICAgICAgICBmaWxlX2FkZG1ldGFkYXRhKGtmcCwg TU9ESU5GT01EX1NNQVAsIGxlbiwgJnNtYXBbMF0pOworCQlzbWFwbnVtID0gMjsKKworCQlp ZiAoaGlnaG1lbSAhPSAwKSB7CisJCQlzbS0+YmFzZSA9IDQgKiBHQjsKKwkJCXNtLT5sZW5n dGggPSBoaWdobWVtOworCQkJc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOworCQkJc21h cG51bSsrOworCQl9CisKKwkJbGVuID0gc21hcG51bSAqIHNpemVvZiAoc3RydWN0IHNtYXAp OworCX0KKworCWZpbGVfYWRkbWV0YWRhdGEoa2ZwLCBNT0RJTkZPTURfU01BUCwgbGVuLCBz bWFwKTsKKwlmcmVlKHNtYXApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNl cmJvb3QvdXNlcmJvb3QvY29uZi5jIGIvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvY29u Zi5jCmluZGV4IDBjNTdlYmEuLmQyYzEwNjcgMTAwNjQ0Ci0tLSBhL3N5cy9ib290L3VzZXJi b290L3VzZXJib290L2NvbmYuYworKysgYi9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9j b25mLmMKQEAgLTg2LDggKzg2LDExIEBAIHN0cnVjdCBmaWxlX2Zvcm1hdCAqZmlsZV9mb3Jt YXRzW10gPSB7CiAgKiBkYXRhIHN0cnVjdHVyZXMgZnJvbSBib290c3RyYXAuaCBhcyB3ZWxs LgogICovCiBleHRlcm4gc3RydWN0IGNvbnNvbGUgdXNlcmJvb3RfY29uc29sZTsKK2V4dGVy biBzdHJ1Y3QgY29uc29sZSBjb21jb25zb2xlOworCiAKIHN0cnVjdCBjb25zb2xlICpjb25z b2xlc1tdID0gewogCSZ1c2VyYm9vdF9jb25zb2xlLAorCSZjb21jb25zb2xlLAogCU5VTEwK IH07CmRpZmYgLS1naXQgYS9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9tYWluLmMgYi9z eXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9tYWluLmMKaW5kZXggNDA5MmI5Yi4uMGUyZTBi NyAxMDA2NDQKLS0tIGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvbWFpbi5jCisrKyBi L3N5cy9ib290L3VzZXJib290L3VzZXJib290L21haW4uYwpAQCAtMzYsOCArMzYsOSBAQCBf X0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSAiZGlzay5oIgogI2luY2x1ZGUgImxp YnVzZXJib290LmgiCiAKLSNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTglVU0VSQk9PVF9WRVJT SU9OXzMKKyNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTglVU0VSQk9PVF9WRVJTSU9OXzQKIAor c3RhdGljIGNoYXIgbWFsbG9jX2J1Zls1MTIqMTAyNF07CiBzdHJ1Y3QgbG9hZGVyX2NhbGxi YWNrcyAqY2FsbGJhY2tzOwogdm9pZCAqY2FsbGJhY2tzX2FyZzsKIApAQCAtNjcsMzEgKzY4 LDQ3IEBAIGV4aXQoaW50IHYpCiB9CiAKIHZvaWQKK2xvYWRlcl9pbml0KHZvaWQpCit7CisJ LyoKKwkgKiBJdCBkb2VzIG5vdCBodXJ0IHRvIHJlLWNhbGwgdGhpcyBhcyBpdCBqdXN0IHNl dHMgZ2xvYmFsCisJICogcHRycyB0aGF0IG5ldmVyIGNoYW5nZSAKKwkgKi8KKwlzZXRoZWFw KCh2b2lkICopbWFsbG9jX2J1ZiwgKHZvaWQgKikobWFsbG9jX2J1ZiArIDUxMioxMDI0KSk7 Cit9CisKK2ludAogbG9hZGVyX21haW4oc3RydWN0IGxvYWRlcl9jYWxsYmFja3MgKmNiLCB2 b2lkICphcmcsIGludCB2ZXJzaW9uLCBpbnQgbmRpc2tzKQogewotCXN0YXRpYyBjaGFyIG1h bGxvY1s1MTIqMTAyNF07CiAJY29uc3QgY2hhciAqdmFyOwogCWludCBpOwotCi0gICAgICAg IGlmICh2ZXJzaW9uICE9IFVTRVJCT09UX1ZFUlNJT04pCi0gICAgICAgICAgICAgICAgYWJv cnQoKTsKLQotCWNhbGxiYWNrcyA9IGNiOwotICAgICAgICBjYWxsYmFja3NfYXJnID0gYXJn OwotCXVzZXJib290X2Rpc2tfbWF4dW5pdCA9IG5kaXNrczsKLQorCQogCS8qCiAJICogaW5p dGlhbGlzZSB0aGUgaGVhcCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE9uY2UgdGhpcyBpcyBk b25lLAogCSAqIGFsbG9jKCkgaXMgdXNhYmxlLiBUaGUgc3RhY2sgaXMgYnVyaWVkIGluc2lk ZSB1cywgc28gdGhpcyBpcwogCSAqIHNhZmUuCiAJICovCi0Jc2V0aGVhcCgodm9pZCAqKW1h bGxvYywgKHZvaWQgKikobWFsbG9jICsgNTEyKjEwMjQpKTsKKwlsb2FkZXJfaW5pdCgpOwor ICAKKwlpZiAoY2IgIT0gTlVMTCkgeworCQljYWxsYmFja3MgPSBjYjsKKwkJY2FsbGJhY2tz X2FyZyA9IGFyZzsKKwkJdXNlcmJvb3RfZGlza19tYXh1bml0ID0gbmRpc2tzOworCX0gZWxz ZSB7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CiAKLSAgICAgICAgLyoKKwkvKgogICAgICAg ICAgKiBIb29rIHVwIHRoZSBjb25zb2xlCiAgICAgICAgICAqLwogCWNvbnNfcHJvYmUoKTsK IAorICAgICAgICBpZiAodmVyc2lvbiAhPSBVU0VSQk9PVF9WRVJTSU9OKSB7CisJCXByaW50 ZigiJXM6IHZlcnNpb24gZXhwZWN0ZWQgJWQgZ290ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAg ICAgVVNFUkJPT1RfVkVSU0lPTiwgdmVyc2lvbik7CisJCXJldHVybihFT1BOT1RTVVBQKTsK Kwl9CisKIAkvKgogCSAqIE1hcmNoIHRocm91Z2ggdGhlIGRldmljZSBzd2l0Y2ggcHJvYmlu ZyBmb3IgdGhpbmdzLgogCSAqLwpAQCAtMTI4LDExICsxNDUsMTEgQEAgbG9hZGVyX21haW4o c3RydWN0IGxvYWRlcl9jYWxsYmFja3MgKmNiLCB2b2lkICphcmcsIGludCB2ZXJzaW9uLCBp bnQgbmRpc2tzKQogCWV4dHJhY3RfY3VycmRldigpOwogCiAJaWYgKHNldGptcChqYikpCi0J CXJldHVybjsKKwkJcmV0dXJuICgwKTsKIAogCWludGVyYWN0KCk7CQkJLyogZG9lc24ndCBy ZXR1cm4gKi8KIAotCWV4aXQoMCk7CisJcmV0dXJuKDApOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvdXNlcmJvb3RfY29ucy5jIGIvc3lzL2Jv b3QvdXNlcmJvb3QvdXNlcmJvb3QvdXNlcmJvb3RfY29ucy5jCmluZGV4IDVlY2I3YzguLjVh OWE1NzMgMTAwNjQ0Ci0tLSBhL3N5cy9ib290L3VzZXJib290L3VzZXJib290L3VzZXJib290 X2NvbnMuYworKysgYi9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC91c2VyYm9vdF9jb25z LmMKQEAgLTUwLDYgKzUwLDE4IEBAIHN0cnVjdCBjb25zb2xlIHVzZXJib290X2NvbnNvbGUg PSB7CiAJdXNlcmJvb3RfY29uc19wb2xsLAogfTsKIAorCitzdHJ1Y3QgY29uc29sZSBjb21j b25zb2xlID0geworCSJjb21jb25zb2xlIiwKKwkiY29tc29uc29sZSIsCisJMCwKKwl1c2Vy Ym9vdF9jb25zX3Byb2JlLAorCXVzZXJib290X2NvbnNfaW5pdCwKKwl1c2VyYm9vdF9jb25z X3B1dGNoYXIsCisJdXNlcmJvb3RfY29uc19nZXRjaGFyLAorCXVzZXJib290X2NvbnNfcG9s bCwKK307CisKIHN0YXRpYyB2b2lkCiB1c2VyYm9vdF9jb25zX3Byb2JlKHN0cnVjdCBjb25z b2xlICpjcCkKIHsKZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmls ZXMKaW5kZXggNTU1NGVjMC4uNDlkZTkwYSAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMK KysrIGIvc3lzL2NvbmYvZmlsZXMKQEAgLTI2MDcsNiArMjYwNyw3IEBAIGtlcm4va2Vybl9r aGVscC5jCQlzdGFuZGFyZAoga2Vybi9rZXJuX2t0aHJlYWQuYwkJc3RhbmRhcmQKIGtlcm4v a2Vybl9rdHIuYwkJCW9wdGlvbmFsIGt0cgoga2Vybi9rZXJuX2t0cmFjZS5jCQlzdGFuZGFy ZAora2Vybi9rZXJuX2tsb2FkLmMJCXN0YW5kYXJkCiBrZXJuL2tlcm5fbGlua2VyLmMJCXN0 YW5kYXJkCiBrZXJuL2tlcm5fbG9jay5jCQlzdGFuZGFyZAoga2Vybi9rZXJuX2xvY2tmLmMJ CXN0YW5kYXJkCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcy5hbWQ2NCBiL3N5cy9jb25m L2ZpbGVzLmFtZDY0CmluZGV4IGI2YTQ3NGUuLjI0NDdjN2JkIDEwMDY0NAotLS0gYS9zeXMv Y29uZi9maWxlcy5hbWQ2NAorKysgYi9zeXMvY29uZi9maWxlcy5hbWQ2NApAQCAtOTMsNiAr OTMsOSBAQCBhY3BpX3dha2VkYXRhLmgJCQlvcHRpb25hbAlhY3BpCQkJXAogCW5vLW9iaiBu by1pbXBsaWNpdC1ydWxlCWJlZm9yZS1kZXBlbmQJCQkJXAogCWNsZWFuCQkiYWNwaV93YWtl ZGF0YS5oIgogIworYW1kNjQvYW1kNjQva2xvYWRfZXhlYy5TCXN0YW5kYXJkCithbWQ2NC9h bWQ2NC9rbG9hZC5jICAgICAgICAgICAgIHN0YW5kYXJkCisjCiBhbWQ2NC9hbWQ2NC9hbWQ2 NF9tZW0uYwkJb3B0aW9uYWwJbWVtCiAjYW1kNjQvYW1kNjQvYXBpY192ZWN0b3IuUwlzdGFu ZGFyZAogYW1kNjQvYW1kNjQvYXRvbWljLmMJCXN0YW5kYXJkCmRpZmYgLS1naXQgYS9zeXMv a2Vybi9pbml0X3N5c2VudC5jIGIvc3lzL2tlcm4vaW5pdF9zeXNlbnQuYwppbmRleCA2OGMy NGUwLi5mODFhMDVmIDEwMDY0NAotLS0gYS9zeXMva2Vybi9pbml0X3N5c2VudC5jCisrKyBi L3N5cy9rZXJuL2luaXRfc3lzZW50LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRE8gTk9U IEVESVQtLSB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCiAgKiAkRnJl ZUJTRCQKLSAqIGNyZWF0ZWQgZnJvbSBGcmVlQlNEOiBoZWFkL3N5cy9rZXJuL3N5c2NhbGxz Lm1hc3RlciAyNDI5NTggMjAxMi0xMS0xMyAxMjo1MjozMVoga2liIAorICogY3JlYXRlZCBm cm9tIEZyZWVCU0QKICAqLwogCiAjaW5jbHVkZSAib3B0X2NvbXBhdC5oIgpAQCAtNTY3LDQg KzU2Nyw1IEBAIHN0cnVjdCBzeXNlbnQgc3lzZW50W10gPSB7CiAJeyBBUyhwb3NpeF9mYWxs b2NhdGVfYXJncyksIChzeV9jYWxsX3QgKilzeXNfcG9zaXhfZmFsbG9jYXRlLCBBVUVfTlVM TCwgTlVMTCwgMCwgMCwgMCwgU1lfVEhSX1NUQVRJQyB9LAkvKiA1MzAgPSBwb3NpeF9mYWxs b2NhdGUgKi8KIAl7IEFTKHBvc2l4X2ZhZHZpc2VfYXJncyksIChzeV9jYWxsX3QgKilzeXNf cG9zaXhfZmFkdmlzZSwgQVVFX05VTEwsIE5VTEwsIDAsIDAsIDAsIFNZX1RIUl9TVEFUSUMg fSwJLyogNTMxID0gcG9zaXhfZmFkdmlzZSAqLwogCXsgQVMod2FpdDZfYXJncyksIChzeV9j YWxsX3QgKilzeXNfd2FpdDYsIEFVRV9XQUlUNiwgTlVMTCwgMCwgMCwgMCwgU1lfVEhSX1NU QVRJQyB9LAkvKiA1MzIgPSB3YWl0NiAqLworCXsgQVMoa2xvYWRfYXJncyksIChzeV9jYWxs X3QgKilzeXNfa2xvYWQsIEFVRV9OVUxMLCBOVUxMLCAwLCAwLCAwLCBTWV9USFJfU1RBVElD IH0sCS8qIDUzMyA9IGtsb2FkICovCiB9OwpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4va2Vybl9r bG9hZC5jIGIvc3lzL2tlcm4va2Vybl9rbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjYzNjgzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMva2Vybi9rZXJu X2tsb2FkLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEg LSAyMDEyCisgKglSdXNzZWxsIENhdHRlbGFuIERpZ2l0YWwgRWx2ZXMgSW5jCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglJc2lsb24gU3lzdGVtcywgTExDLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxzeXMvcGFy YW0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50aGFuZGxl ci5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva2xvYWQuaD4K KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNs dWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorI2luY2x1ZGUgPHN5 cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorI2luY2x1ZGUgPHN5cy9zY2hl ZC5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4K KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvaW50cl9tYWNo ZGVwLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hcGljdmFyLmg+CisjaW5jbHVkZSA8bWFjaGlu ZS9zZWdtZW50cy5oPgorCisjaW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKyNpbmNsdWRlIDx2 bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3ZtX2tl cm4uaD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdl Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZW91dC5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5o PgorCisKK3N0YXRpYyBzdHJ1Y3Qga2xvYWRfaXRlbXMgKmtfaXRlbXMgPSBOVUxMOworc3Rh dGljIE1BTExPQ19ERUZJTkUoTV9LTE9BRCwgImtsb2FkX2l0ZW1zIiwgImtsb2FkIGl0ZW1z Iik7CitpbnQga2xvYWRfcmVhZHkgPSAwOworCitzdGF0aWMgdm1fb2Zmc2V0X3Qga2xvYWRf aW1hZ2VfdmEgPSAwOworLyoKKyAqIFdhcm5pbmcgdGhpcyBpcyBzb21ld2hhdCBhcmJpdHJh cnksIGJ1dCBzaG91bGQgZ28KKyAqIGF3YXkgb25jZSB0aGUgYWxsb2NhdGUgZGVsYXlzIGlu IGttZW1fYWxsb2NfYXR0ciBhcmUKKyAqIGZpeGVkLgorICovCisjZGVmaW5lCUlNQUdFX1BS RUFMTE9DCSgyNCAqIDEwMjQgKiAxMDI0KQorCitzdGF0aWMgdm9pZCBrbG9hZF9pbml0KHZv aWQpOworU1lTSU5JVChrbG9hZF9tZW0sIFNJX1NVQl9EUklWRVJTLCBTSV9PUkRFUl9BTlks IGtsb2FkX2luaXQsIE5VTEwpOworCitzdGF0aWMgaW50IGtsb2FkX2NvcHlpbl9zZWdtZW50 KHN0cnVjdCBrbG9hZF9zZWdtZW50ICosaW50KTsKK3N0YXRpYyBpbnQga2xvYWRfYWRkX3Bh Z2Uoc3RydWN0IGtsb2FkX2l0ZW1zICosIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQg a2xvYWRfc2h1dGRvd25fZmluYWwodm9pZCAqLCBpbnQpOworc3RhdGljIHN0cnVjdCByZWdp b25fZGVzY3JpcHRvciAqbXlnZHQ7CitzdGF0aWMJdm1fb2Zmc2V0X3QgY29udHJvbF9wYWdl Oworc3RhdGljCXZtX29mZnNldF90IGNvZGVfcGFnZTsKK3N0YXRpYyAJdm9pZCAqZ2R0X2Rl c2M7CitzdGF0aWMgcHRfZW50cnlfdCAqcGd0Ymw7Cit1bnNpZ25lZCBsb25nIGtsb2FkX3Bn dGJsOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIgPSAwICwgbWluX2FkZHIgPSAw OworCisjZGVmaW5lIEdJR01BU0sJCQkofigoMTw8MzApLTEpKQorI2RlZmluZQlPTkVHSUcJ CQkoMTw8MzApCisjZGVmaW5lCUdVRVNUX0dEVFJfTElNSVQJKDMgKiA4IC0gMSkKKworZXh0 ZXJuIGNoYXIga2VybnBoeXNbXTsKKyNkZWZpbmUJS0xPQURCQVNFCQlLRVJOQkFTRQorCitz dGF0aWMgdm9pZAordXBkYXRlX21heF9taW4odm1fb2Zmc2V0X3QgYWRkciwgaW50IGNvdW50 KQoreworCWludCBpOworCisJZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAo dnRvcGh5cyhhZGRyICsgKGkgKiBQQUdFX1NJWkUpKSA8IG1pbl9hZGRyKQorCQkJbWluX2Fk ZHIgPSB2dG9waHlzKGFkZHIgKyAoaSAqIFBBR0VfU0laRSkpOworCQlpZiAodnRvcGh5cyhh ZGRyICsgKGkgKiBQQUdFX1NJWkUpKSA+IG1heF9hZGRyKQorCQkJbWF4X2FkZHIgPSB2dG9w aHlzKGFkZHIgKyAoaSAqIFBBR0VfU0laRSkpOworCX0KK30KKworc3RhdGljIHZtX29mZnNl dF90CitrbG9hZF9rbWVtX2FsbG9jKHZtX21hcF90IG1hcCwgdm1fc2l6ZV90IHNpemUpCit7 CisJdm1fb2Zmc2V0X3QgdmE7CisJaW50IG51bV9wYWdlczsKKworCXZhID0ga21lbV9hbGxv Y19hdHRyKG1hcCwgc2l6ZSwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8sCisJICAgIDAsICgx IDw8IDMwKSAvKiAxR2lnIGxpbWl0ICovLAorCSAgICBWTV9NRU1BVFRSX1dSSVRFX0NPTUJJ TklORyk7CisKKwludW1fcGFnZXMgPSByb3VuZHVwMihzaXplLFBBR0VfU0laRSkgPj4gUEFH RV9TSElGVDsKKwl1cGRhdGVfbWF4X21pbih2YSwgbnVtX3BhZ2VzKTsKKworCXJldHVybiAo dmEpOworCX0KKworc3RydWN0IGtsb2FkX2NwYWdlIHsKKwl1bnNpZ25lZCBsb25nIGtjcF9t YWdpYzsJLyogMCAqLworCXVuc2lnbmVkIGxvbmcga2NwX21vZHVsZXA7CS8qIDEgKi8KKwl1 bnNpZ25lZCBsb25nIGtjcF9waHlzZnJlZTsJLyogMiAqLworCXVuc2lnbmVkIGxvbmcga2Nw X2dkdDsJCS8qIDMgKi8KKwl1bnNpZ25lZCBsb25nIGtjcF9wZ3RibDsJLyogNCAqLworCXVu c2lnbmVkIGxvbmcga2NwX2NwOwkJLyogNSAqLworCXVuc2lnbmVkIGxvbmcga2NwX2VudHJ5 X3B0OwkvKiA2ICovCisJdW5zaWduZWQgbG9uZyBrY3BfaWR0OwkJLyogNyAqLworfSBfX3Bh Y2tlZDsKKworc3RhdGljIGludAora2xvYWRfYWRkX3BhZ2Uoc3RydWN0IGtsb2FkX2l0ZW1z ICppdGVtcywgdW5zaWduZWQgbG9uZyBpdGVtX20pCit7CisJdm1fcGFkZHJfdCBwaHlzOwor CXVuc2lnbmVkIGxvbmcgdmE7CisKKwlpZiAoKml0ZW1zLT5pdGVtICE9IDApIHsKKwkJcHJp bnRmKCIgaXRlbSAhPSAwIDB4JWx4XG4iLCppdGVtcy0+aXRlbSk7CisJCWl0ZW1zLT5pdGVt Kys7CisJCWl0ZW1zLT5pX2NvdW50LS07CisJfQorCisKKwlpZiAoKGl0ZW1zLT5pdGVtID09 IGl0ZW1zLT5sYXN0X2l0ZW0pIHx8IChpdGVtcy0+aV9jb3VudCA9PSAwKSkgeworCQkvKiBv dXQgb2Ygc3BhY2UgaW4gY3VycmVudCBwYWdlIGdyYWIgYSBuZXcgb25lICovCisJCXZhID0g KHVuc2lnbmVkIGxvbmcpa2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLFBBR0VfU0laRSk7 CisJCWlmIChpdGVtcy0+aGVhZF92YSA9PSAwKQorCQkJaXRlbXMtPmhlYWRfdmEgPSB2YTsK KworCQlwaHlzID0gdnRvcGh5cyh2YSk7CisJCS8qIHN0b3JlIHRoZSBhZGRyZXNzIG9mIGlu ZHJlY3QgcGFnZSAqLworCQkqaXRlbXMtPml0ZW0gPSAodW5zaWduZWQgbG9uZykKKwkJICAg ICh2dG9waHlzKHZhKSArIEtMT0FEQkFTRSkgfCBLTE9BRF9JTkRJUkVDVDsKKwkJaXRlbXMt Pml0ZW0gPSAodW5zaWduZWQgbG9uZyAqKXZhOworCQkvKiBvayBub3cgbW92ZSB0byBuZXcg cGFnZSB0byBzdGFydCBzdG9yaW5nIGFkZHJlc3MgKi8KKwkJaXRlbXMtPmxhc3RfaXRlbSA9 ICh1bnNpZ25lZCBsb25nICopdmEgKworCQkgICAgKChQQUdFX1NJWkUvc2l6ZW9mKHVuc2ln bmVkIGxvbmcpKSAtIDEpOworCQlpdGVtcy0+aV9jb3VudCA9ICgoUEFHRV9TSVpFL3NpemVv Zih1bnNpZ25lZCBsb25nKSkgLSAxKTsKKwl9CisJKml0ZW1zLT5pdGVtID0gaXRlbV9tOwor CWl0ZW1zLT5pdGVtKys7CisJaXRlbXMtPmlfY291bnQtLTsKKworCXJldHVybiAoMCk7Cit9 CisKK3N0YXRpYyB2b2lkCitrbG9hZF9pbml0KHZvaWQpCit7CisJaW50IHNpemUgPSBJTUFH RV9QUkVBTExPQzsKKwlrbG9hZF9pbWFnZV92YSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVs X21hcCwgc2l6ZSk7CisJcHJpbnRmKCIlcyAweCVseCBwcmVhbGxvY2F0ZWQgc2l6ZSAlZFxu IiwgX19mdW5jX18sCisJICAgIGtsb2FkX2ltYWdlX3ZhLCBzaXplKTsKK30KKworaW50Citr bG9hZF9jb3B5aW5fc2VnbWVudChzdHJ1Y3Qga2xvYWRfc2VnbWVudCAqa2hkciwgaW50IHNl ZykKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX3BhZ2VzOworCWludCBlcnJvciA9IDA7CisJdm1f b2Zmc2V0X3QgdmEgPSBrbG9hZF9pbWFnZV92YTsKKworCW51bV9wYWdlcyA9IHJvdW5kdXAy KGtoZHItPmtfbWVtc3osUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOworCisJLyogY2hlY2sg dG8gbWFrZSBzdXJlIHRoZSBwcmVhbGxvY2F0ZSBzcGFjZSBpcyBiZWcgZW5vdWdoICovCisJ aWYgKHZhICYmICgobnVtX3BhZ2VzICogUEFHRV9TSVpFKSA+IElNQUdFX1BSRUFMTE9DKSkg eworCQlwcmludGYoIiVzIHNpemUgb3ZlciAyNE1lZyAlZFxuIiwgX19mdW5jX18sCisJCQkg bnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKwkJa21lbV9mcmVlKGtlcm5lbF9tYXAsIHZhLCBJ TUFHRV9QUkVBTExPQyk7CisJCXZhID0gMDsKKwl9CisKKwlpZiAodmEgPT0gMCkgeworCQl2 YSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVsX21hcCwgbnVtX3BhZ2VzICogUEFHRV9TSVpF KTsKKwkJaWYgKHZhID09IDApCisJCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJLyogIG5l ZWQgdG8gc2V0IHVwIGEgU1RBUlQgZHN0IHBhZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVt X3BhZ2VzOyBpKyspIHsKKwkJa2xvYWRfYWRkX3BhZ2Uoa19pdGVtcywKKwkJICAgICh2dG9w aHlzKHZhICsgKGkgKiBQQUdFX1NJWkUpKSArIEtMT0FEQkFTRSkgfCBLTE9BRF9TT1VSQ0Up OworCX0KKwlwcmludGYoIiVzIHN0YXJ0aW5nIGNvcHlpbi4uLiAiLCBfX2Z1bmNfXyk7CisJ KmtfaXRlbXMtPml0ZW0gPSBLTE9BRF9ET05FOworCWlmICgoZXJyb3IgPSBjb3B5aW4oa2hk ci0+a19idWYsICh2b2lkICopdmEsIGtoZHItPmtfbWVtc3opKSAhPSAwKQorCQlyZXR1cm4g KGVycm9yKTsKKwlwcmludGYoImNvcGllZCAlZCBieXRlcyB0byB2YSAlcCBkb25lIG1hcmtl ciBhdCAlcFxuIiwKKwkgICAgICAgKGludClraGRyLT5rX21lbXN6LCAodm9pZCAqKXZhLCAm a19pdGVtcy0+aXRlbSApOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAorc3lzX2ts b2FkKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3Qga2xvYWRfYXJncyAqdWFwKQoreworCXN0 cnVjdCByZWdpb25fZGVzY3JpcHRvciAqbnVsbF9pZHQ7CisJc3RydWN0IGtsb2FkX2NwYWdl ICprX2NwYWdlOworCXN0cnVjdCBrbG9hZCBrbGQ7CisJaW50IGVycm9yID0gMDsKKwlpbnQg aTsKKwlzaXplX3QgYnVmc2l6ZSA9IHVhcC0+YnVmbGVuOworCisJZXJyb3IgPSBwcml2X2No ZWNrKHRkLCBQUklWX1JFQk9PVCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsK KworCS8qCisJICogaG9vayBpbnRvIHRoZSBzaHV0ZG93bi9yZWJvb3QgcGF0aCBzbworCSAq IHdlIGVuZCB1cCBoZXJlIGJlZm9yZSBjcHUgcmVzZXQKKwkgKi8KKwlFVkVOVEhBTkRMRVJf UkVHSVNURVIoc2h1dGRvd25fZmluYWwsIGtsb2FkX3NodXRkb3duX2ZpbmFsLAorCSAgICBO VUxMLCBTSFVURE9XTl9QUklfS0xPQUQpOworCisJbWF4X2FkZHIgPSAwOworCW1pbl9hZGRy ID0gfjBVTDsKKworCWlmIChidWZzaXplICE9IHNpemVvZihzdHJ1Y3Qga2xvYWQpKSB7CisJ CXByaW50ZigiSG1tIHNpemUgbm90IHJpZ2h0ICVqZCAlamRcbiIsICh1aW50bWF4X3QpYnVm c2l6ZSwKKwkJICAgICh1aW50bWF4X3Qpc2l6ZW9mKHN0cnVjdCBrbG9hZCkpOworCQlyZXR1 cm4gKGVycm9yKTsKKwl9CisJaWYgKChlcnJvciA9IGNvcHlpbih1YXAtPmJ1ZiwgJmtsZCwg YnVmc2l6ZSkpICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKGtfaXRlbXMgPT0g TlVMTCkgeworCQlpZigoa19pdGVtcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGtsb2FkX2l0 ZW1zKSwKKwkJCQkgICAgIE1fS0xPQUQsIE1fV0FJVE9LfE1fWkVSTykpID09IE5VTEwpCisJ CQlyZXR1cm4gKEVOT01FTSk7CisKKwkJa19pdGVtcy0+aGVhZCA9IDA7CisJCWtfaXRlbXMt PmhlYWRfdmEgPSAwOworCQlrX2l0ZW1zLT5pdGVtID0gJmtfaXRlbXMtPmhlYWQ7CisJCWtf aXRlbXMtPmxhc3RfaXRlbSA9ICZrX2l0ZW1zLT5oZWFkOworCX0KKworCWNvbnRyb2xfcGFn ZSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVsX21hcCwgUEFHRV9TSVpFICogMik7CisJa19j cGFnZSA9IChzdHJ1Y3Qga2xvYWRfY3BhZ2UgKiljb250cm9sX3BhZ2U7CisJY29kZV9wYWdl ID0gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFOworCisJcHJpbnRmKCJjb3B5IGZyb20gJXAg a2VybmVsX2t1bXAgdG8gMHglbHggc2l6ZSAlZFxuIiwKKwkgICAgICAgcmVsb2NhdGVfa2Vy bmVsLCAodW5zaWduZWQgbG9uZyljb2RlX3BhZ2UsIHJlbG9jYXRlX2tlcm5lbF9zaXplKTsK KwltZW1zZXQoKHZvaWQgKiljb250cm9sX3BhZ2UsIDAsIFBBR0VfU0laRSAqIDIpOworCW1l bWNweSgodm9pZCAqKWNvZGVfcGFnZSwgcmVsb2NhdGVfa2VybmVsLCByZWxvY2F0ZV9rZXJu ZWxfc2l6ZSk7CisKKwlrX2NwYWdlLT5rY3BfbWFnaWMgPSAweEMwREU7CisJa19jcGFnZS0+ a2NwX21vZHVsZXAgPSBrbGQua19tb2R1bGVwOworCWtfY3BhZ2UtPmtjcF9waHlzZnJlZSA9 IGtsZC5rX3BoeXNmcmVlOworCisJbXlnZHQgPSAoc3RydWN0IHJlZ2lvbl9kZXNjcmlwdG9y ICopa2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLAorCSAgICBQQUdFX1NJWkUpOworCWtf Y3BhZ2UtPmtjcF9nZHQgPSAodW5zaWduZWQgbG9uZyl2dG9waHlzKG15Z2R0KSArIEtMT0FE QkFTRTsKKworCWdkdF9kZXNjID0gKGNoYXIgKilteWdkdCArIHNpemVvZihzdHJ1Y3QgcmVn aW9uX2Rlc2NyaXB0b3IpOworCXNldHVwX2ZyZWVic2RfZ2R0KGdkdF9kZXNjKTsKKwlteWdk dC0+cmRfbGltaXQgPSBHVUVTVF9HRFRSX0xJTUlUOworCW15Z2R0LT5yZF9iYXNlID0gKHVu c2lnbmVkIGxvbmcpKHZ0b3BoeXMoZ2R0X2Rlc2MpICsgS0xPQURCQVNFKTsKKworCS8qCisJ ICogd2UgcGFzcyB0aGUgdmlydCBhZGRyIG9mIGNvbnRyb2xfcGFnZSBidXQgd2UgbmVlZAor CSAqIG5ldyB2aXJ0IGFkZHIgYXMgd2VsbAorCSAqLworCWtfY3BhZ2UtPmtjcF9jcCA9ICh1 bnNpZ25lZCBsb25nKSh2dG9waHlzKGNvbnRyb2xfcGFnZSkgKyBLTE9BREJBU0UpOworCWtf Y3BhZ2UtPmtjcF9lbnRyeV9wdCA9IGtsZC5rX2VudHJ5X3B0OworCisJLyogMTAgc2VnbWVu dHMgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggKi8KKwlmb3IgKGkgPSAwIDsgKGkgPCBr bGQubnVtX2hkcnMgJiYgaSA8PSAxMCk7IGkrKykKKwkJa2xvYWRfY29weWluX3NlZ21lbnQo JmtsZC5raGRyW2ldLGkpOworCisJbnVsbF9pZHQgPSAoc3RydWN0IHJlZ2lvbl9kZXNjcmlw dG9yKikKKwkgICAga2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLFBBR0VfU0laRSk7CisJ a19jcGFnZS0+a2NwX2lkdCA9ICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMobnVsbF9pZHQpICsg S0xPQURCQVNFOworCS8qIFdpcGUgdGhlIElEVC4gKi8KKwludWxsX2lkdC0+cmRfbGltaXQg PSAwOworCW51bGxfaWR0LT5yZF9iYXNlID0gMDsKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSBi dWlsdCBhZnRlciBhbGwgb3RoZXIgYWxsb2NhdGlvbnMgc28gaXQgY2FuCisJICogYnVpbGQg YSBwYWdlIHRhYmxlIGVudHJ5IGJhc2VkIG9uIG1pbiBtYXggYWRkcmVzc2VzCisJICovCisJ LyogcmV0dXJucyBuZXcgcGFnZSB0YWJsZSBwaHlzIGFkZHIgKi8KKwlwZ3RibCA9IGtsb2Fk X2J1aWxkX3BhZ2VfdGFibGUoKTsKKwlpZiAocGd0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIChF Tk9NRU0pOworCWtsb2FkX3BndGJsID0gKHVuc2lnbmVkIGxvbmcpcGd0Ymw7CisJa19jcGFn ZS0+a2NwX3BndGJsID0gKHVuc2lnbmVkIGxvbmcpcGd0Ymw7CisKKwlrbG9hZF9yZWFkeSA9 IDE7CisKKwlpZiAoYm9vdHZlcmJvc2UpCisJCXByaW50ZigiJXM6XG5cdCIKKwkJICAgICAg ICJoZWFkX3ZhICAgICAgICAgMHglbHggKHBoeXMgMHglbHgpXG5cdCIKKwkJICAgICAgICJr ZXJuYmFzZSAgICAgICAgMHglbHhcblx0IgorCQkgICAgICAgImNvZGVfcGFnZSAgICAgICAw eCVseCAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgImNvbnRyb2xfcGFnZSAgICAweCVs eCAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgImdkdCAgICAgICAgICAgICAweCVseCAo cGh5cyAweCVseClcblx0IgorCQkgICAgICAgImlkdCAgICAgICAgICAgICAweCVseCAocGh5 cyAweCVseClcblx0IgorCQkgICAgICAgImtfZW50cnlfcHQgICAgICAweCVseFxuXHQiCisJ CSAgICAgICAicGd0YmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGh5cyAweCVs eClcblx0IgorCQkgICAgICAgIm1heF9hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBoeXMgMHglbHgpXG5cdCIKKwkJICAgICAgICJtaW5fYWRkciAgICAgICAgICAgICAgICAg ICAgICAgICAgIChwaHlzIDB4JWx4KVxuXHQiCisJCSAgICAgICAibW9kdWxlcCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgInBoeXNm cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwaHlzIDB4JWx4KVxuIiwKKwkJICAg ICAgIF9fZnVuY19fLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpa19pdGVtcy0+aGVhZF92 YSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoa19pdGVtcy0+aGVhZF92YSks CisJCSAgICAgICAodW5zaWduZWQgbG9uZykoS0VSTkJBU0UgKyAodm1fcGFkZHJfdClrZXJu cGh5cyksCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoY29udHJvbF9wYWdlICsgUEFHRV9T SVpFKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoY29udHJvbF9wYWdlICsg UEFHRV9TSVpFKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWNvbnRyb2xfcGFnZSwKKwkJ ICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoY29udHJvbF9wYWdlKSwKKwkJICAgICAg ICh1bnNpZ25lZCBsb25nKW15Z2R0LCh1bnNpZ25lZCBsb25nKXZ0b3BoeXMobXlnZHQpLAor CQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnVsbF9pZHQsKHVuc2lnbmVkIGxvbmcpdnRvcGh5 cyhudWxsX2lkdCksCisJCSAgICAgICAodW5zaWduZWQgbG9uZylrbGQua19lbnRyeV9wdCwK KwkJICAgICAgICh1bnNpZ25lZCBsb25nKXBndGJsLAorCQkgICAgICAgKHVuc2lnbmVkIGxv bmcpbWF4X2FkZHIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyltaW5fYWRkciwKKwkJICAg ICAgICh1bnNpZ25lZCBsb25nKWtsZC5rX21vZHVsZXAsCisJCSAgICAgICAodW5zaWduZWQg bG9uZylrbGQua19waHlzZnJlZSk7CisJCisJaWYoISh1YXAtPmZsYWdzICYgKEtMT0FEX0VY RUMgfCBLTE9BRF9SRUJPT1QpKSkKKwkJZ290byBqdXN0X2xvYWQ7CisjaWYgZGVmaW5lZChT TVApCisJLyoKKwkgKiBCaW5kIHVzIHRvIENQVSAwIHNvIHRoYXQgYWxsIHNodXRkb3duIGNv ZGUgcnVucyB0aGVyZS4gIFNvbWUKKwkgKiBzeXN0ZW1zIGRvbid0IHNodXRkb3duIHByb3Bl cmx5IChpLmUuLCBBQ1BJIHBvd2VyIG9mZikgaWYgd2UKKwkgKiBydW4gb24gYW5vdGhlciBw cm9jZXNzb3IuCisJICovCisJcHJpbnRmKCJCaW5kaW5nIHByb2Nlc3MgdG8gY3B1IDBcbiIp OworCXRocmVhZF9sb2NrKGN1cnRocmVhZCk7CisJc2NoZWRfYmluZChjdXJ0aHJlYWQsIDAp OworCXRocmVhZF91bmxvY2soY3VydGhyZWFkKTsKKwlLQVNTRVJUKFBDUFVfR0VUKGNwdWlk KSA9PSAwLCAoIiVzOiBub3QgcnVubmluZyBvbiBjcHUgMCIsIF9fZnVuY19fKSk7CisjZW5k aWYKKwlpZih1YXAtPmZsYWdzICYgS0xPQURfUkVCT09UKSB7CisJCW10eF9sb2NrKCZHaWFu dCk7CisJCWtlcm5fcmVib290KFJCX0tMT0FEKTsKKwkJLyogc2hvdWxkIG5vdCByZXR1cm4g Ki8KKwkJbXR4X3VubG9jaygmR2lhbnQpOworCX0KKwkvKgorCSAqIHRoZSByZWJvb3QgY29k ZSB3aWxsIGRvIGEgbW9kdWxlIHNodXRkb3duIHNvIGl0IGlzIG5vdAorCSAqIHBhcnQga2xv YWRfc2h1dGRvd25fZmluYWwgYnV0IGl0IG5lZWRzIHRvIGhhcHBlbi4KKwkgKiBTbyBpbiB0 aGUgY2FzZSBvZiBleGVjIHJ1biBpdCBoZXJlCisJICovCisJaWYgKGJvb3R2ZXJib3NlKQor CQlwcmludGYoIiVzOiBtb2R1bGVfc2h1dGRvd25cbiIsIF9fZnVuY19fKTsKKwlrbG9hZF9t b2R1bGVfc2h1dGRvd24oKTsKKwlrbG9hZF9zaHV0ZG93bl9maW5hbChOVUxMLCBSQl9LTE9B RCk7CitqdXN0X2xvYWQ6CisJcHJpbnRmKCIlczogS2VybmVsIGltYWdlIGxvYWRlZCB3YWl0 aW5nIGZvciByZWJvb3RcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgdm9pZAora2xvYWRfc2h1dGRvd25fZmluYWwodm9pZCAqYXJnLCBpbnQgaG93dG8pCit7 CisJaW50IHJldDsKKwljcHVzZXRfdCBtYXA7CisKKwkvKiBKdXN0IHRvIG1ha2Ugc3VyZSB3 ZSBhcmUgb24gY3B1IDAgKi8KKwlLQVNTRVJUKFBDUFVfR0VUKGNwdWlkKSA9PSAwLCAoIiVz OiBub3QgcnVubmluZyBvbiBjcHUgMCIsIF9fZnVuY19fKSk7CisJaWYgKGtsb2FkX3JlYWR5 KSB7CisJCXByaW50ZigiJXM6IHN1c3BlbmQgQVBzXG4iLF9fRlVOQ1RJT05fXyk7CisJCW1h cCA9IGFsbF9jcHVzOworCQkvKiB3ZSBzaG91bGQgYmUgYm91bmQgdG8gY3B1IDAgYXQgdGhp cyBwb2ludCAqLworCQlwcmludGYoIiVzICBjcHVpZCAlZFxuIixfX0ZVTkNUSU9OX18sUENQ VV9HRVQoY3B1aWQpKTsKKwkJQ1BVX0NMUihQQ1BVX0dFVChjcHVpZCksICZtYXApOworCQlD UFVfTkFORCgmbWFwLCAmc3RvcHBlZF9jcHVzKTsKKwkJaWYgKCFDUFVfRU1QVFkoJm1hcCkp IHsKKwkJCXByaW50ZigiY3B1X3Jlc2V0OiBTdG9wcGluZyBvdGhlciBDUFVzXG4iKTsKKwkJ CXN1c3BlbmRfY3B1cyhtYXApOworCQl9CisKKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJcHJp bnRmKCIlczogY2xlYXIgYWxsIGhhbmRsZXJzXG4iLCBfX2Z1bmNfXyk7CisJCWludHJfY2xl YXJfYWxsX2hhbmRsZXJzKCk7CisKKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJcHJpbnRmKCIl czogbG9hcGljX2NsZWFyX2xhcGljXG4iLCBfX2Z1bmNfXyk7CisJCWxhcGljX2NsZWFyX2xh cGljKDEpOworCisJCWludHJfc3VzcGVuZCgpOworCisJCWlmIChib290dmVyYm9zZSkKKwkJ CXByaW50ZigiJXMgZGlzYWJsZV9pbnRlcnJ1cHRzIGNwdWlkICVkXG4iLAorCQkJICAgIF9f ZnVuY19fLCBQQ1BVX0dFVChjcHVpZCkpOworCQlkaXNhYmxlX2ludHIoKTsKKworCQlwcmlu dGYoImNhbGxpbmcgcmVsb2NhdGVfa2VybmVsXG4iKTsKKwkJcmV0ID0gcmVsb2NhdGVfa2Vy bmVsKHZ0b3BoeXMoa19pdGVtcy0+aGVhZF92YSkgKyBLTE9BREJBU0UsCisJCQkJICAgICAg LyogZGVzdCBhZGRyIGkuZS4gb3ZlcndyaXRlIGV4aXN0aW5nIGtlcm5lbCAqLworCQkJCSAg ICAgIEtFUk5CQVNFICsgKHZtX3BhZGRyX3Qpa2VybnBoeXMsCisJCQkJICAgICAgdnRvcGh5 cyhjb2RlX3BhZ2UpICsgS0xPQURCQVNFLAorCQkJCSAgICAgIGNvbnRyb2xfcGFnZSk7CisJ CS8qIGN1cnJlbnRseSB0aGlzIHdpbGwgbmV2ZXIgaGFwcGVuICovCisJCXByaW50ZigiXHRy ZWxvY2F0ZV9uZXdfa2VybmVsIHJldHVybmVkICVkXG4iLHJldCk7CisJfSBlbHNlIHsKKwkJ cHJpbnRmKCJrbG9hZF9zaHV0ZG93bl9maW5hbCBjYWxsZWQgd2l0aG91dCAiCisJCSAgICAi YSBuZXcga2VybmVsIGxvYWRlZFxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4v a2Vybl9tb2R1bGUuYyBiL3N5cy9rZXJuL2tlcm5fbW9kdWxlLmMKaW5kZXggYjc2OTMyMC4u MmE4ODBjNSAxMDA2NDQKLS0tIGEvc3lzL2tlcm4va2Vybl9tb2R1bGUuYworKysgYi9zeXMv a2Vybi9rZXJuX21vZHVsZS5jCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBUQUlMUV9IRUFE KG1vZHVsZWxpc3QsIG1vZHVsZSkgbW9kdWxlczsKIHN0cnVjdCBzeCBtb2R1bGVzX3N4Owog c3RhdGljIGludCBuZXh0aWQgPSAxOwogc3RhdGljIHZvaWQgbW9kdWxlX3NodXRkb3duKHZv aWQgKiwgaW50KTsKK3ZvaWQga2xvYWRfbW9kdWxlX3NodXRkb3duKHZvaWQpOwogCiBzdGF0 aWMgaW50CiBtb2RldmVudF9ub3AobW9kdWxlX3QgbW9kLCBpbnQgd2hhdCwgdm9pZCAqYXJn KQpAQCAtMTA3LDYgKzEwOCwxMiBAQCBtb2R1bGVfc2h1dGRvd24odm9pZCAqYXJnMSwgaW50 IGFyZzIpCiB9CiAKIHZvaWQKK2tsb2FkX21vZHVsZV9zaHV0ZG93bih2b2lkKSB7CisJbW9k dWxlX3NodXRkb3duKE5VTEwsIDApOworfQorCisKK3ZvaWQKIG1vZHVsZV9yZWdpc3Rlcl9p bml0KGNvbnN0IHZvaWQgKmFyZykKIHsKIAljb25zdCBtb2R1bGVkYXRhX3QgKmRhdGEgPSAo Y29uc3QgbW9kdWxlZGF0YV90ICopYXJnOwpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4vc3lzY2Fs bHMuYyBiL3N5cy9rZXJuL3N5c2NhbGxzLmMKaW5kZXggOTZmMjQwMC4uNmVkZDdmYSAxMDA2 NDQKLS0tIGEvc3lzL2tlcm4vc3lzY2FsbHMuYworKysgYi9zeXMva2Vybi9zeXNjYWxscy5j CkBAIC0zLDcgKzMsNyBAQAogICoKICAqIERPIE5PVCBFRElULS0gdGhpcyBmaWxlIGlzIGF1 dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgogICogJEZyZWVCU0QkCi0gKiBjcmVhdGVkIGZyb20g RnJlZUJTRDogaGVhZC9zeXMva2Vybi9zeXNjYWxscy5tYXN0ZXIgMjQyOTU4IDIwMTItMTEt MTMgMTI6NTI6MzFaIGtpYiAKKyAqIGNyZWF0ZWQgZnJvbSBGcmVlQlNECiAgKi8KIAogY29u c3QgY2hhciAqc3lzY2FsbG5hbWVzW10gPSB7CkBAIC01NDAsNCArNTQwLDUgQEAgY29uc3Qg Y2hhciAqc3lzY2FsbG5hbWVzW10gPSB7CiAJInBvc2l4X2ZhbGxvY2F0ZSIsCQkJLyogNTMw ID0gcG9zaXhfZmFsbG9jYXRlICovCiAJInBvc2l4X2ZhZHZpc2UiLAkJCS8qIDUzMSA9IHBv c2l4X2ZhZHZpc2UgKi8KIAkid2FpdDYiLAkJCS8qIDUzMiA9IHdhaXQ2ICovCisJImtsb2Fk IiwJCQkvKiA1MzMgPSBrbG9hZCAqLwogfTsKZGlmZiAtLWdpdCBhL3N5cy9rZXJuL3N5c2Nh bGxzLm1hc3RlciBiL3N5cy9rZXJuL3N5c2NhbGxzLm1hc3RlcgppbmRleCAxNDhkZWEzLi5l YjJiNjQ4IDEwMDY0NAotLS0gYS9zeXMva2Vybi9zeXNjYWxscy5tYXN0ZXIKKysrIGIvc3lz L2tlcm4vc3lzY2FsbHMubWFzdGVyCkBAIC05NTUsNSArOTU1LDcgQEAKIAkJCQkgICAgaW50 ICpzdGF0dXMsIGludCBvcHRpb25zLCBcCiAJCQkJICAgIHN0cnVjdCBfX3dydXNhZ2UgKndy dXNhZ2UsIFwKIAkJCQkgICAgc2lnaW5mb190ICppbmZvKTsgfQorNTMzCUFVRV9OVUxMCVNU RCAJeyBpbnQga2xvYWQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBcCisJCQkJ ICBpbnQgZmxhZ3MpOyB9CiA7IFBsZWFzZSBjb3B5IGFueSBhZGRpdGlvbnMgYW5kIGNoYW5n ZXMgdG8gdGhlIGZvbGxvd2luZyBjb21wYXRhYmlsaXR5IHRhYmxlczoKIDsgc3lzL2NvbXBh dC9mcmVlYnNkMzIvc3lzY2FsbHMubWFzdGVyCmRpZmYgLS1naXQgYS9zeXMva2Vybi9zeXN0 cmFjZV9hcmdzLmMgYi9zeXMva2Vybi9zeXN0cmFjZV9hcmdzLmMKaW5kZXggYzc1NWY5Mi4u YzQ4MDU3YSAxMDA2NDQKLS0tIGEvc3lzL2tlcm4vc3lzdHJhY2VfYXJncy5jCisrKyBiL3N5 cy9rZXJuL3N5c3RyYWNlX2FyZ3MuYwpAQCAtMzI4Niw2ICszMjg2LDE1IEBAIHN5c3RyYWNl X2FyZ3MoaW50IHN5c251bSwgdm9pZCAqcGFyYW1zLCB1aW50NjRfdCAqdWFyZywgaW50ICpu X2FyZ3MpCiAJCSpuX2FyZ3MgPSA2OwogCQlicmVhazsKIAl9CisJLyoga2xvYWQgKi8KKwlj YXNlIDUzMzogeworCQlzdHJ1Y3Qga2xvYWRfYXJncyAqcCA9IHBhcmFtczsKKwkJdWFyZ1sw XSA9IChpbnRwdHJfdCkgcC0+YnVmOyAvKiBjb25zdCB2b2lkICogKi8KKwkJdWFyZ1sxXSA9 IHAtPmJ1ZmxlbjsgLyogc2l6ZV90ICovCisJCWlhcmdbMl0gPSBwLT5mbGFnczsgLyogaW50 ICovCisJCSpuX2FyZ3MgPSAzOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJKm5fYXJn cyA9IDA7CiAJCWJyZWFrOwpAQCAtODc0NSw2ICs4NzU0LDIyIEBAIHN5c3RyYWNlX2VudHJ5 X3NldGFyZ2Rlc2MoaW50IHN5c251bSwgaW50IG5keCwgY2hhciAqZGVzYywgc2l6ZV90IGRl c2NzeikKIAkJCWJyZWFrOwogCQl9OwogCQlicmVhazsKKwkvKiBrbG9hZCAqLworCWNhc2Ug NTMzOgorCQlzd2l0Y2gobmR4KSB7CisJCWNhc2UgMDoKKwkJCXAgPSAiY29uc3Qgdm9pZCAq IjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwID0gInNpemVfdCI7CisJCQlicmVhazsK KwkJY2FzZSAyOgorCQkJcCA9ICJpbnQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQli cmVhazsKKwkJfTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfTsKQEAgLTEw NjM4LDYgKzEwNjYzLDExIEBAIHN5c3RyYWNlX3JldHVybl9zZXRhcmdkZXNjKGludCBzeXNu dW0sIGludCBuZHgsIGNoYXIgKmRlc2MsIHNpemVfdCBkZXNjc3opCiAJCWlmIChuZHggPT0g MCB8fCBuZHggPT0gMSkKIAkJCXAgPSAiaW50IjsKIAkJYnJlYWs7CisJLyoga2xvYWQgKi8K KwljYXNlIDUzMzoKKwkJaWYgKG5keCA9PSAwIHx8IG5keCA9PSAxKQorCQkJcCA9ICJpbnQi OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9OwpkaWZmIC0tZ2l0IGEvc3lz L3N5cy9ldmVudGhhbmRsZXIuaCBiL3N5cy9zeXMvZXZlbnRoYW5kbGVyLmgKaW5kZXggNmQz N2JmNC4uMzFhYTRlNCAxMDA2NDQKLS0tIGEvc3lzL3N5cy9ldmVudGhhbmRsZXIuaAorKysg Yi9zeXMvc3lzL2V2ZW50aGFuZGxlci5oCkBAIC0xNzMsNiArMTczLDcgQEAgdHlwZWRlZiB2 b2lkICgqc2h1dGRvd25fZm4pKHZvaWQgKiwgaW50KTsKICNkZWZpbmUJU0hVVERPV05fUFJJ X0ZJUlNUCUVWRU5USEFORExFUl9QUklfRklSU1QKICNkZWZpbmUJU0hVVERPV05fUFJJX0RF RkFVTFQJRVZFTlRIQU5ETEVSX1BSSV9BTlkKICNkZWZpbmUJU0hVVERPV05fUFJJX0xBU1QJ RVZFTlRIQU5ETEVSX1BSSV9MQVNUCisjZGVmaW5lCVNIVVRET1dOX1BSSV9LTE9BRAlFVkVO VEhBTkRMRVJfUFJJX0xBU1QgLSAxMDAKIAogRVZFTlRIQU5ETEVSX0RFQ0xBUkUoc2h1dGRv d25fcHJlX3N5bmMsIHNodXRkb3duX2ZuKTsJLyogYmVmb3JlIGZzIHN5bmMgKi8KIEVWRU5U SEFORExFUl9ERUNMQVJFKHNodXRkb3duX3Bvc3Rfc3luYywgc2h1dGRvd25fZm4pOwkvKiBh ZnRlciBmcyBzeW5jICovCmRpZmYgLS1naXQgYS9zeXMvc3lzL2tsb2FkLmggYi9zeXMvc3lz L2tsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyMDE3Ngot LS0gL2Rldi9udWxsCisrKyBiL3N5cy9zeXMva2xvYWQuaApAQCAtMCwwICsxLDg4IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxMgorICoJUnVzc2VsbCBDYXR0ZWxhbiBE aWdpdGFsIEVsdmVzIEluYworICogQ29weXJpZ2h0IChjKSAKKyAqCUlzaWxvbiBTeXN0ZW1z LCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj aWZuZGVmIF9fS0xPQURfSF9fCisjZGVmaW5lIF9fS0xPQURfSF9fCisKKyNpbmNsdWRlIDxz eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHZtL3Zt Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorCisjZGVmaW5lIEtMT0FEX0xPQUQJCSAw CisjZGVmaW5lIEtMT0FEX1JFQk9PVAkJKDEgPDwgMCApCisjZGVmaW5lIEtMT0FEX0VYRUMJ CSgxIDw8IDEgKQorCitzdHJ1Y3Qga2xvYWRfc2VnbWVudCB7CisJdm9pZAkJICAgICAgICpr X2J1ZjsKKwlzaXplX3QJCQlrX21lbXN6OworCXVuc2lnbmVkIGxvbmcJICAgICAgICprX3Bh Z2VzOworCXVuc2lnbmVkIGxvbmcJCWtfc2VnX3N0YXJ0OworfTsKKworc3RydWN0IGtsb2Fk IHsKKwlzdHJ1Y3Qga2xvYWRfc2VnbWVudAlraGRyWzEwXTsKKwlpbnQJCQludW1faGRyczsK Kwl1bnNpZ25lZCBsb25nCQlrX2VudHJ5X3B0OworCXVuc2lnbmVkIGludAkJa19tb2R1bGVw OworCXVuc2lnbmVkIGludAkJa19waHlzZnJlZTsKK307CisKKy8vdHlwZWRlZiB1X2xvbmcg a2xvYWRfaXRlbV90OworI2RlZmluZSBLTE9BRF9ERVNUSU5BVElPTiAgMHgxCisjZGVmaW5l IEtMT0FEX0lORElSRUNUICAgICAweDIKKyNkZWZpbmUgS0xPQURfRE9ORSAgICAgICAgIDB4 NAorI2RlZmluZSBLTE9BRF9TT1VSQ0UgICAgICAgMHg4CisKK3N0cnVjdCBrbG9hZF9pdGVt cyB7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCXZtX29mZnNldF90IGhlYWRfdmE7CisJdW5z aWduZWQgbG9uZyAqbGFzdF9pdGVtOworCXVuc2lnbmVkIGxvbmcgKml0ZW07CisJaW50IGlf Y291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgIC8qIG5vdCB1c2VkIHlldCAqLworfTsK KworLyoKKyAqIGRlZmluZWQgaW4gPGFyY2g+L2tsb2FkLmMKKyAqLworcHRfZW50cnlfdCAq IGtsb2FkX2J1aWxkX3BhZ2VfdGFibGUodm9pZCk7Cit2b2lkIHNldHVwX2ZyZWVic2RfZ2R0 KHVpbnQ2NF90ICopOwordm9pZCBrbG9hZF9tb2R1bGVfc2h1dGRvd24odm9pZCk7CisKKy8q CisgKiBkZWZpbmVkIGluIDxhcmNoPi9rbG9hZF9leGVjLlMKKyAqLwordW5zaWduZWQgbG9u ZyByZWxvY2F0ZV9rZXJuZWwodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorICAg IHVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LCB1bnNpZ25lZCBsb25nIGNvZGVfcGFnZSwKKyAg ICB1bnNpZ25lZCBsb25nIGNvbnRyb2xfcGFnZSk7CitleHRlcm4gaW50IHJlbG9jYXRlX2tl cm5lbF9zaXplOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3N5cy9zeXMvcmVib290LmggYi9z eXMvc3lzL3JlYm9vdC5oCmluZGV4IDZiOGUyNWUuLjliNzAxNjAgMTAwNjQ0Ci0tLSBhL3N5 cy9zeXMvcmVib290LmgKKysrIGIvc3lzL3N5cy9yZWJvb3QuaApAQCAtNTksNiArNTksNyBA QAogI2RlZmluZQlSQl9SRVNFUlZFRDEJMHg0MDAwMAkvKiByZXNlcnZlZCBmb3IgaW50ZXJu YWwgdXNlIG9mIGJvb3QgYmxvY2tzICovCiAjZGVmaW5lCVJCX1JFU0VSVkVEMgkweDgwMDAw CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2Ugb2YgYm9vdCBibG9ja3MgKi8KICNkZWZp bmUJUkJfUEFVU0UJMHgxMDAwMDAgLyogcGF1c2UgYWZ0ZXIgZWFjaCBvdXRwdXQgbGluZSBk dXJpbmcgcHJvYmUgKi8KKyNkZWZpbmUJUkJfS0xPQUQJMHgyMDAwMDAgLyogcmVib290IHVz aW5nIGtsb2FkJ2VkIGtlcm5lbCBpbWFnZSAqLwogI2RlZmluZQlSQl9NVUxUSVBMRQkweDIw MDAwMDAwCS8qIHVzZSBtdWx0aXBsZSBjb25zb2xlcyAqLwogCiAjZGVmaW5lCVJCX0JPT1RJ TkZPCTB4ODAwMDAwMDAJLyogaGF2ZSBgc3RydWN0IGJvb3RpbmZvIConIGFyZyAqLwpkaWZm IC0tZ2l0IGEvc3lzL3N5cy9zeXNjYWxsLmggYi9zeXMvc3lzL3N5c2NhbGwuaAppbmRleCA2 YjBjZDY3Li5mOTBjYWQyIDEwMDY0NAotLS0gYS9zeXMvc3lzL3N5c2NhbGwuaAorKysgYi9z eXMvc3lzL3N5c2NhbGwuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBETyBOT1QgRURJVC0t IHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICAqICRGcmVlQlNEJAot ICogY3JlYXRlZCBmcm9tIEZyZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVy IDI0Mjk1OCAyMDEyLTExLTEzIDEyOjUyOjMxWiBraWIgCisgKiBjcmVhdGVkIGZyb20gRnJl ZUJTRAogICovCiAKICNkZWZpbmUJU1lTX3N5c2NhbGwJMApAQCAtNDUyLDQgKzQ1Miw1IEBA CiAjZGVmaW5lCVNZU19wb3NpeF9mYWxsb2NhdGUJNTMwCiAjZGVmaW5lCVNZU19wb3NpeF9m YWR2aXNlCTUzMQogI2RlZmluZQlTWVNfd2FpdDYJNTMyCi0jZGVmaW5lCVNZU19NQVhTWVND QUxMCTUzMworI2RlZmluZQlTWVNfa2xvYWQJNTMzCisjZGVmaW5lCVNZU19NQVhTWVNDQUxM CTUzNApkaWZmIC0tZ2l0IGEvc3lzL3N5cy9zeXNjYWxsLm1rIGIvc3lzL3N5cy9zeXNjYWxs Lm1rCmluZGV4IDI1ZjA0NzAuLjM5ZmQwNWIgMTAwNjQ0Ci0tLSBhL3N5cy9zeXMvc3lzY2Fs bC5taworKysgYi9zeXMvc3lzL3N5c2NhbGwubWsKQEAgLTEsNyArMSw3IEBACiAjIEZyZWVC U0Qgc3lzdGVtIGNhbGwgbmFtZXMuCiAjIERPIE5PVCBFRElULS0gdGhpcyBmaWxlIGlzIGF1 dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgogIyAkRnJlZUJTRCQKLSMgY3JlYXRlZCBmcm9tIEZy ZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVyIDI0Mjk1OCAyMDEyLTExLTEz IDEyOjUyOjMxWiBraWIgCisjIGNyZWF0ZWQgZnJvbSBGcmVlQlNECiBNSUFTTSA9ICBcCiAJ c3lzY2FsbC5vIFwKIAlleGl0Lm8gXApAQCAtNDAwLDQgKzQwMCw1IEBAIE1JQVNNID0gIFwK IAlyY3RsX3JlbW92ZV9ydWxlLm8gXAogCXBvc2l4X2ZhbGxvY2F0ZS5vIFwKIAlwb3NpeF9m YWR2aXNlLm8gXAotCXdhaXQ2Lm8KKwl3YWl0Ni5vIFwKKwlrbG9hZC5vCmRpZmYgLS1naXQg YS9zeXMvc3lzL3N5c3Byb3RvLmggYi9zeXMvc3lzL3N5c3Byb3RvLmgKaW5kZXggZWY1OWFk NS4uODFkYWMxNSAxMDA2NDQKLS0tIGEvc3lzL3N5cy9zeXNwcm90by5oCisrKyBiL3N5cy9z eXMvc3lzcHJvdG8uaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBETyBOT1QgRURJVC0tIHRo aXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICAqICRGcmVlQlNEJAotICog Y3JlYXRlZCBmcm9tIEZyZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVyIDI0 Mjk1OCAyMDEyLTExLTEzIDEyOjUyOjMxWiBraWIgCisgKiBjcmVhdGVkIGZyb20gRnJlZUJT RAogICovCiAKICNpZm5kZWYgX1NZU19TWVNQUk9UT19IXwpAQCAtMTc2Miw2ICsxNzYyLDEx IEBAIHN0cnVjdCB3YWl0Nl9hcmdzIHsKIAljaGFyIHdydXNhZ2VfbF9bUEFETF8oc3RydWN0 IF9fd3J1c2FnZSAqKV07IHN0cnVjdCBfX3dydXNhZ2UgKiB3cnVzYWdlOyBjaGFyIHdydXNh Z2Vfcl9bUEFEUl8oc3RydWN0IF9fd3J1c2FnZSAqKV07CiAJY2hhciBpbmZvX2xfW1BBRExf KHNpZ2luZm9fdCAqKV07IHNpZ2luZm9fdCAqIGluZm87IGNoYXIgaW5mb19yX1tQQURSXyhz aWdpbmZvX3QgKildOwogfTsKK3N0cnVjdCBrbG9hZF9hcmdzIHsKKwljaGFyIGJ1Zl9sX1tQ QURMXyhjb25zdCB2b2lkICopXTsgY29uc3Qgdm9pZCAqIGJ1ZjsgY2hhciBidWZfcl9bUEFE Ul8oY29uc3Qgdm9pZCAqKV07CisJY2hhciBidWZsZW5fbF9bUEFETF8oc2l6ZV90KV07IHNp emVfdCBidWZsZW47IGNoYXIgYnVmbGVuX3JfW1BBRFJfKHNpemVfdCldOworCWNoYXIgZmxh Z3NfbF9bUEFETF8oaW50KV07IGludCBmbGFnczsgY2hhciBmbGFnc19yX1tQQURSXyhpbnQp XTsKK307CiBpbnQJbm9zeXMoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3Qgbm9zeXNfYXJncyAq KTsKIHZvaWQJc3lzX3N5c19leGl0KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHN5c19leGl0 X2FyZ3MgKik7CiBpbnQJc3lzX2Zvcmsoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZm9ya19h cmdzICopOwpAQCAtMjE0NCw2ICsyMTQ5LDcgQEAgaW50CXN5c19yY3RsX3JlbW92ZV9ydWxl KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHJjdGxfcmVtb3ZlX3J1bGVfYXJncyAqKTsKIGlu dAlzeXNfcG9zaXhfZmFsbG9jYXRlKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHBvc2l4X2Zh bGxvY2F0ZV9hcmdzICopOwogaW50CXN5c19wb3NpeF9mYWR2aXNlKHN0cnVjdCB0aHJlYWQg Kiwgc3RydWN0IHBvc2l4X2ZhZHZpc2VfYXJncyAqKTsKIGludAlzeXNfd2FpdDYoc3RydWN0 IHRocmVhZCAqLCBzdHJ1Y3Qgd2FpdDZfYXJncyAqKTsKK2ludAlzeXNfa2xvYWQoc3RydWN0 IHRocmVhZCAqLCBzdHJ1Y3Qga2xvYWRfYXJncyAqKTsKIAogI2lmZGVmIENPTVBBVF80Mwog CkBAIC0yODQwLDYgKzI4NDYsNyBAQCBpbnQJZnJlZWJzZDdfc2htY3RsKHN0cnVjdCB0aHJl YWQgKiwgc3RydWN0IGZyZWVic2Q3X3NobWN0bF9hcmdzICopOwogI2RlZmluZQlTWVNfQVVF X3Bvc2l4X2ZhbGxvY2F0ZQlBVUVfTlVMTAogI2RlZmluZQlTWVNfQVVFX3Bvc2l4X2ZhZHZp c2UJQVVFX05VTEwKICNkZWZpbmUJU1lTX0FVRV93YWl0NglBVUVfV0FJVDYKKyNkZWZpbmUJ U1lTX0FVRV9rbG9hZAlBVUVfTlVMTAogCiAjdW5kZWYgUEFEXwogI3VuZGVmIFBBRExfCmRp ZmYgLS1naXQgYS9zeXMveDg2L3g4Ni9pbnRyX21hY2hkZXAuYyBiL3N5cy94ODYveDg2L2lu dHJfbWFjaGRlcC5jCmluZGV4IDMxY2M4MGIuLmVlZTc2NzggMTAwNjQ0Ci0tLSBhL3N5cy94 ODYveDg2L2ludHJfbWFjaGRlcC5jCisrKyBiL3N5cy94ODYveDg2L2ludHJfbWFjaGRlcC5j CkBAIC0xOTcsNiArMTk3LDM3IEBAIGludHJfYWRkX2hhbmRsZXIoY29uc3QgY2hhciAqbmFt ZSwgaW50IHZlY3RvciwgZHJpdmVyX2ZpbHRlcl90IGZpbHRlciwKIH0KIAogaW50CitpbnRy X2NsZWFyX2FsbF9oYW5kbGVycyh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBpbnRzcmMg KmlzcmM7CisKKwltdHhfbG9jaygmaW50cl90YWJsZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBp IDwgTlVNX0lPX0lOVFM7IGkrKykgeworCQlpc3JjID0gaW50ZXJydXB0X3NvdXJjZXNbaV07 CisJCWlmIChpc3JjICE9IE5VTEwgJiYgaXNyYy0+aXNfaGFuZGxlcnMgPiAwKSB7CisJCQlw cmludGYoIiVzOiVkIGlzcmNbJWRdICVwIGlzX2hhbmRsZXJzICVkXG4iLAorCQkJICAgICAg IF9fRlVOQ1RJT05fXyxfX0xJTkVfXyxpLGlzcmMsCisJCQkgICAgICAgaXNyYy0+aXNfaGFu ZGxlcnMpOworCQkJICAgICAgIGlzcmMtPmlzX2hhbmRsZXJzLS07CisJCQlpZiAoaXNyYy0+ aXNfaGFuZGxlcnMgPT0gMCkgeworCQkJCXByaW50ZigiXHQgZGlzX3NvdXJjZSAlcCBkaXNf aW50ciAlcFxuIiwKKwkJCQkgICAgICAgaXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9zb3Vy Y2UsCisJCQkJICAgICAgIGlzcmMtPmlzX3BpYy0+cGljX2Rpc2FibGVfaW50cik7CisJCQkJ aXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9zb3VyY2UoaXNyYywgUElDX05PX0VPSSk7CisJ CQkJaXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9pbnRyKGlzcmMpOworCQkJfQorCQkJaW50 cmNudF91cGRhdGVuYW1lKGlzcmMpOworCisJCX0KKwl9CisJbXR4X3VubG9jaygmaW50cl90 YWJsZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCisKK2ludAogaW50cl9yZW1vdmVfaGFu ZGxlcih2b2lkICpjb29raWUpCiB7CiAJc3RydWN0IGludHNyYyAqaXNyYzsKZGlmZiAtLWdp dCBhL3N5cy94ODYveDg2L2xvY2FsX2FwaWMuYyBiL3N5cy94ODYveDg2L2xvY2FsX2FwaWMu YwppbmRleCBlOTk0MTcyLi42NTkzZThiIDEwMDY0NAotLS0gYS9zeXMveDg2L3g4Ni9sb2Nh bF9hcGljLmMKKysrIGIvc3lzL3g4Ni94ODYvbG9jYWxfYXBpYy5jCkBAIC0zNDYsNiArMzQ2 LDYwIEBAIGxhcGljX2R1bXAoY29uc3QgY2hhciogc3RyKQogfQogCiB2b2lkCitsYXBpY19j bGVhcl9sYXBpYyh1X2ludCBkaXNhYmxlKSB7CisKKwlzdHJ1Y3QgbGFwaWMgKmxhOworCWxh ID0gJmxhcGljc1tsYXBpY19pZCgpXTsKKworCXVpbnQzMl90IHZhbHVlOworCisJaWYgKGJv b3R2ZXJib3NlKQorCQlwcmludGYoIiVzIGxhcGljX2lkKCVkKSBjcHUoJWQpIGxhICVwIGxh cGljICVwXG4iLF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGxhcGljX2lkKCksIFBDUFVfR0VU KGNwdWlkKSwgbGEsIGxhcGljKTsKKworCS8qCisJICogRmlzdCB3ZSBzZXQgdGhlIG1hc2sg Yml0IHRvIGtlZXAgYW5kIG5ldyBpbnRlcnJ1cHRzIGZyb20KKwkgKiBhcnJpdmluZyBidXQg YWxsb3dpbmcgYW55IHBlbmRpbmcgaW50ZXJydXB0cyB0byBmaW5pc2gKKwkgKiAqVEhFTiog c2V0IHRoZSByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMKKwkgKiBJZiB0aGUgaW50ZXJy dXB0cyBhcmUgbm90IGFsbG93ZWQgdG8gY2xlYXIgYSBrbG9hZCdlZCAvIGJvb3RlZAorCSAq IGtlcm5lbCB3aWxsIHNlZSB0aGUgb2xkIGludGVycnVwdHMgYmVmb3JlIHRoZSBhcHByb3By aWF0ZSBoYW5kbGVycworCSAqIGFyZSBpbiBwbGFjZSBhbmQgdHJpZ2dlciBhIHBhbmljLgor CSAqLworI2lmZGVmIG5vdHlldAorCS8qIHRoaXMgc2VlbXMgdG8gYmUgY2F1c2luZyBBUElD IGVycm9yIGluIHRoZSBuZXcga2VybmVsICovCisJdmFsdWUgPSBsYXBpYy0+bHZ0X2Vycm9y OworCXZhbHVlIHw9IEFQSUNfTFZUX007CisJbGFwaWMtPmx2dF9lcnJvciA9IHZhbHVlOwor I2VuZGlmCisKKwl2YWx1ZSA9IGxhcGljLT5sdnRfdGltZXI7CisJdmFsdWUgfD0gQVBJQ19M VlRfTTsKKwlsYXBpYy0+bHZ0X3RpbWVyID0gdmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5s dnRfbGludDA7CisJdmFsdWUgfD0gQVBJQ19MVlRfTTsKKwlsYXBpYy0+bHZ0X2xpbnQwID0g dmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5sdnRfbGludDE7CisJdmFsdWUgfD0gQVBJQ19M VlRfTTsKKwlsYXBpYy0+bHZ0X2xpbnQxID0gdmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5s dnRfcGNpbnQ7CisJdmFsdWUgfD0gQVBJQ19MVlRfTTsKKwlsYXBpYy0+bHZ0X3BjaW50ID0g dmFsdWU7CisKKwkvKiBQcm9ncmFtIHRpbWVyIExWVCBhbmQgc2V0dXAgaGFuZGxlci4gKi8K KwlsYXBpYy0+bHZ0X3RpbWVyID0gQVBJQ19MVlRUX007IC8qIG1hc2tlZCAqLworCWxhcGlj LT5sdnRfbGludDAgPSBBUElDX0xWVF9NOyAvKiBtYXNrZWQgKi8KKwlsYXBpYy0+bHZ0X2xp bnQxID0gQVBJQ19MVlRfTTsgLyogbWFza2VkICovCisKKwlpZiAoZGlzYWJsZSkgeworCQlw cmludGYoIlx0bGFwaWMgZGlzYWJsZVxuIik7CisJCWxhcGljX2Rpc2FibGUoKTsKKwl9Cit9 CisKK3ZvaWQKIGxhcGljX3NldHVwKGludCBib290KQogewogCXN0cnVjdCBsYXBpYyAqbGE7 CkBAIC05MjQsNyArOTc4LDIwIEBAIGxhcGljX2hhbmRsZV9lcnJvcih2b2lkKQogCWxhcGlj LT5lc3IgPSAwOwogCWVzciA9IGxhcGljLT5lc3I7CiAKLQlwcmludGYoIkNQVSVkOiBsb2Nh bCBBUElDIGVycm9yIDB4JXhcbiIsIFBDUFVfR0VUKGNwdWlkKSwgZXNyKTsKKwlwcmludGYo IkNQVSVkOiBsb2NhbCBBUElDIGVycm9yIDB4JXhcdCIsIFBDUFVfR0VUKGNwdWlkKSwgZXNy KTsKKwlpZiAobGFwaWMtPmVzciAmIEFQSUNfRVNSX1NFTkRfQ1NfRVJST1IpCisJCXByaW50 Zigic2VuZF9jc19lcnJvclxuIik7CisJaWYgKGxhcGljLT5lc3IgJiBBUElDX0VTUl9SRUNF SVZFX0NTX0VSUk9SKQorCQlwcmludGYoInJlY2VpdmVfY3NfZXJyb3JcbiIpOworCWlmIChs YXBpYy0+ZXNyICYgQVBJQ19FU1JfU0VORF9BQ0NFUFQpCisJCXByaW50Zigic2VuZF9hY2Nl cHRcbiIpOworCWlmIChsYXBpYy0+ZXNyICYgQVBJQ19FU1JfUkVDRUlWRV9BQ0NFUFQpCisJ CXByaW50ZigicmVjZWl2ZV9hY2NlcHRcbiIpOworCWlmIChsYXBpYy0+ZXNyICYgQVBJQ19F U1JfU0VORF9JTExFR0FMX1ZFQ1RPUikKKwkJcHJpbnRmKCJzZW5kX2lsbGVnYWxfdmVjdG9y XG4iKTsKKwlpZiAobGFwaWMtPmVzciAmIEFQSUNfRVNSX0lMTEVHQUxfUkVHSVNURVIpCisJ CXByaW50ZigiaWxsZWdhbF9yZWdpc3RlclxuIik7CisKIAlsYXBpY19lb2koKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3lzL3g4Ni94ODYvbmV4dXMuYyBiL3N5cy94ODYveDg2L25leHVzLmMK aW5kZXggOWVhZDhjOC4uMGIyODQ2NSAxMDA2NDQKLS0tIGEvc3lzL3g4Ni94ODYvbmV4dXMu YworKysgYi9zeXMveDg2L3g4Ni9uZXh1cy5jCkBAIC01OSw2ICs1OSw3IEBAIF9fRkJTRElE KCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFjaGRlcC5oPgogI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPgorI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvdm1wYXJhbS5oPgogI2lu Y2x1ZGUgPHZtL3ZtLmg+CkBAIC02NzUsNiArNjc2LDUyIEBAIHJhbV9wcm9iZShkZXZpY2Vf dCBkZXYpCiB9CiAKIHN0YXRpYyBpbnQKK3NtYXBfaGRscihTWVNDVExfSEFORExFUl9BUkdT KSB7CisKKyAgLyogU1lTQ1RMX0hBTkRMRVJfQVJHUworICAgICBzdHJ1Y3Qgc3lzY3RsX29p ZCAqb2lkcCwgdm9pZCAqYXJnMSwKKyAgICAgaW50cHRyX3QgYXJnMiwgc3RydWN0IHN5c2N0 bF9yZXEgKnJlcQorICAqLworCisJc3RydWN0IGJpb3Nfc21hcCAqc21hcGJhc2U7CisJY2Fk ZHJfdCBrbWRwOworCXVpbnQzMl90IHNtYXBzaXplID0gMDsKKworCS8qIFJldHJpZXZlIHRo ZSBzeXN0ZW0gbWVtb3J5IG1hcCBmcm9tIHRoZSBsb2FkZXIuICovCisJa21kcCA9IHByZWxv YWRfc2VhcmNoX2J5X3R5cGUoImVsZiBrZXJuZWwiKTsKKwlpZiAoa21kcCA9PSBOVUxMKQor CQlrbWRwID0gcHJlbG9hZF9zZWFyY2hfYnlfdHlwZShFTEZfS0VSTl9TVFIpOworCWlmIChr bWRwICE9IE5VTEwpIHsKKwkJc21hcGJhc2UgPSAoc3RydWN0IGJpb3Nfc21hcCAqKXByZWxv YWRfc2VhcmNoX2luZm8oa21kcCwKKwkJCQkJCQkJICAgTU9ESU5GT19NRVRBREFUQSB8IE1P RElORk9NRF9TTUFQKTsKKwl9IGVsc2UgeworCQlzbWFwYmFzZSA9IE5VTEw7CisJCWdvdG8g b3V0OworCX0KKworCisJcHJpbnRmKCIlcyBzbWFwYmFzZSAlcFxuIixfX0ZVTkNUSU9OX18s c21hcGJhc2UpOworCXNtYXBzaXplID0gKigodV9pbnQzMl90ICopc21hcGJhc2UgLSAxKTsK KworI2lmIDAKKwl7CisJCXN0cnVjdCBiaW9zX3NtYXAgKnNtYXAsICpzbWFwZW5kOworCQlz bWFwZW5kID0gKHN0cnVjdCBiaW9zX3NtYXAgKikoKHVpbnRwdHJfdClzbWFwYmFzZSArIHNt YXBzaXplKTsKKwkJZm9yIChzbWFwID0gc21hcGJhc2U7IHNtYXAgPCBzbWFwZW5kOyBzbWFw KyspIHsKKwkJCXByaW50ZigiXHR0eXBlICVkIGJhc2UgMHglbHggbGVuZ3RoIDB4JWx4XG4i LAorCQkJICAgICAgIHNtYXAtPnR5cGUsc21hcC0+YmFzZSwgc21hcC0+bGVuZ3RoKTsKKwkJ fQorCX0KKyNlbmRpZgorCitvdXQ6CisJcmV0dXJuIChzeXNjdGxfaGFuZGxlX29wYXF1ZShv aWRwLCBzbWFwYmFzZSwgc21hcHNpemUsIHJlcSkpOworfQorU1lTQ1RMX1BST0MoX2h3LCBP SURfQVVUTywgc21hcCwgQ1RMVFlQRV9PUEFRVUV8Q1RMRkxBR19SRHxDVExGTEFHX01QU0FG RSwKKwkgICAgMCwgc2l6ZW9mKHN0cnVjdCBiaW9zX3NtYXApLCBzbWFwX2hkbHIsICJTLHNt YXAiLAorCSAgICAiQmlvcyBTeXN0ZW0gTWFwIik7CisKK3N0YXRpYyBpbnQKIHJhbV9hdHRh Y2goZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBiaW9zX3NtYXAgKnNtYXBiYXNlLCAqc21h cCwgKnNtYXBlbmQ7CmRpZmYgLS1naXQgYS91c3Iuc2Jpbi9rbG9hZC9NYWtlZmlsZSBiL3Vz ci5zYmluL2tsb2FkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjBkNGEyN2EKLS0tIC9kZXYvbnVsbAorKysgYi91c3Iuc2Jpbi9rbG9hZC9NYWtlZmls ZQpAQCAtMCwwICsxLDE1IEBACisjICRGcmVlQlNEJAorCitQUk9HPQlrbG9hZAorU1JDUz0J a2xvYWQuYworTk9fTUFOPQorCisjRFBBREQrPQkke0xJQlZNTUFQSX0KKyNMREFERCs9CS1s dm1tYXBpCisKK1dBUk5TPz0JMworCitDRkxBR1MrPS1JJHsuQ1VSRElSfS8uLi8uLi9zeXMv Ym9vdC91c2VyYm9vdAorQ0ZMQUdTKz0tSSR7LkNVUkRJUn0vLi4vLi4vc3lzCisKKy5pbmNs dWRlIDxic2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3Vzci5zYmluL2tsb2FkL2tsb2FkLmMg Yi91c3Iuc2Jpbi9rbG9hZC9rbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjUxYWMzYjcKLS0tIC9kZXYvbnVsbAorKysgYi91c3Iuc2Jpbi9rbG9hZC9rbG9h ZC5jCkBAIC0wLDAgKzEsNzQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAx MgorICoJUnVzc2VsbCBDYXR0ZWxhbiBEaWdpdGFsIEVsdmVzIEluYworICogQ29weXJpZ2h0 IChjKSAyMDExIC0gMjAxMgorICoJSXNpbG9uIFN5c3RlbXMsIExMQy4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiBwcm9jZXNzIGtpbGwg Y29kZSBib3Jyb3dlZCBmcm9tIGhhbHQuYworICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KKyNpbmNsdWRlIDxzeXMva2xvYWQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNp bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl IDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworI2luY2x1ZGUgPGRpcmVu dC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8 ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2lu Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVzZXJib290Lmg+CisjaW5jbHVkZSA8dW5pc3Rk Lmg+CisKK2NoYXIgKmhvc3RfYmFzZSA9ICIvIjsKKy8qIGhvdyBjYW4gd2UgZ2V0IHJpZCBv ZiB0aGVzZT8gSSBkb24ndCB0aGluayB3ZSBuZWVkIHRoZW0gKi8KKworc3RydWN0IHRlcm1p b3MgdGVybSwgb2xkdGVybTsKK2NoYXIgKmltYWdlOworc2l6ZV90IGltYWdlX3NpemU7Citz aXplX3QgaW1hZ2VfbWF4X3VzZWQgPSAwOworaW50IGRpc2tfZmQgPSAtMTsKK3VpbnQ2NF90 IHJlZ3NbMTZdOwordWludDY0X3QgcGM7CitzdGF0aWMgaW50IGtfZXhlY3V0ZSA9IDA7Citz dGF0aWMgaW50IGtfcmVib290ID0gMDsKK3N0YXRpYyB2b2lkICpkbF9saWI7Cit0eXBlZGVm IHZvaWQgKigqTV9mdW5jKShzaXplX3QgYnl0ZXMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBs aW5lKTsKK01fZnVuYyBNYWxsb2NfZnVuYzsKK3N0YXRpYyB2b2lkIGtfZXhpdCh2b2lkICos IGludCk7CitzdGF0aWMgaW50IHNodXRkb3duX3Byb2Nlc3Nlcyh2b2lkKTsKK3N0YXRpYyB1 X2ludCBnZXRfcGFnZWlucyh2b2lkKTsKK3N0YXRpYyBpbnQga2xvYWRfbG9hZF9pbWFnZSh2 b2lkICppbWFnZSx1bnNpZ25lZCBsb25nIGVudHJ5X3B0KTsKKworc3RydWN0IGxvYWRfZmls ZSB7CisJaW50IGxfaXNkaXI7CisJc2l6ZV90IGxfc2l6ZTsKKwlzdHJ1Y3Qgc3RhdCBsX3N0 YXQ7CisJdW5pb24geworCQlpbnQgZmQ7CisJCURJUiAqZGlyOworCX0gbF91OworfTsKKwor c3RydWN0IHNtYXAgeworCXVpbnQ2NF90CWJhc2U7CisJdWludDY0X3QJbGVuZ3RoOworCXVp bnQzMl90CXR5cGU7Cit9IF9fcGFja2VkOworCitzdGF0aWMgaW50CituYW1lMm9pZChjaGFy ICpuYW1lLCBpbnQgKm9pZHApCit7CisJaW50IG9pZFsyXTsKKwlpbnQgaTsKKwlzaXplX3Qg ajsKKworCW9pZFswXSA9IDA7CisJb2lkWzFdID0gMzsKKworCWogPSBDVExfTUFYTkFNRSAq IHNpemVvZihpbnQpOworCWkgPSBzeXNjdGwob2lkLCAyLCBvaWRwLCAmaiwgbmFtZSwgc3Ry bGVuKG5hbWUpKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAoaSk7CisJaiAvPSBzaXplb2Yo aW50KTsKKworCXJldHVybiAoaik7Cit9CisKK3N0YXRpYyB2b2lkCitrX3B1dGModm9pZCAq YXJnLCBpbnQgY2hyKQoreworCXdyaXRlKDEsICZjaHIsIDEpOworfQorCitzdGF0aWMgaW50 CitrX2dldGModm9pZCAqYXJnKQoreworCWNoYXIgY2hyOworCWlmKHJlYWQoMCwgJmNociwg MSkgPT0gMSkKKwkJcmV0dXJuIChjaHIpOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMg aW50CitrX3BvbGwodm9pZCAqYXJnKQoreworCWludCBuOworCWlmIChpb2N0bCgwLCBGSU9O UkVBRCwgJm4pID49IDApCisJCXJldHVybiAobiA+IDApOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50CitrX29wZW4odm9pZCAqYXJnLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9p ZCAqKmxmX3JldCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgbG9hZF9maWxlICps ZjsKKwlpbnQgZXJyb3IgPSAtMTsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCisJaWYgKCFo b3N0X2Jhc2UpIHsKKwkJcHJpbnRmKCJIb3N0IGJhc2Ugbm90IHNldFxuIik7CisJCXJldHVy biAoRU5PRU5UKTsKKwl9CisKKwlzdHJsY3B5KHBhdGgsIGhvc3RfYmFzZSwgUEFUSF9NQVgp OworCWlmIChwYXRoW3N0cmxlbihwYXRoKSAtIDFdID09ICcvJykKKwkJcGF0aFtzdHJsZW4o cGF0aCkgLSAxXSA9IDA7CisJc3RybGNhdChwYXRoLCBmaWxlbmFtZSwgUEFUSF9NQVgpOwor CWxmID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9hZF9maWxlKSk7CisJaWYgKHN0YXQocGF0 aCwgJmxmLT5sX3N0YXQpIDwgMCkgeworCQllcnJvciA9IGVycm5vOworCQlnb3RvIG91dDsK Kwl9CisKKwlsZi0+bF9zaXplID0gc3Quc3Rfc2l6ZTsKKwlpZiAoU19JU0RJUihsZi0+bF9z dGF0LnN0X21vZGUpKSB7CisJCWxmLT5sX2lzZGlyID0gMTsKKwkJbGYtPmxfdS5kaXIgPSBv cGVuZGlyKHBhdGgpOworCQlpZiAoIWxmLT5sX3UuZGlyKSB7CisJCQllcnJvciA9IEVJTlZB TDsKKwkJCWdvdG8gb3V0OworCQl9CisJCSpsZl9yZXQgPSBsZjsKKwkJcmV0dXJuICgwKTsK Kwl9CisJaWYgKFNfSVNSRUcobGYtPmxfc3RhdC5zdF9tb2RlKSkgeworCQlsZi0+bF9pc2Rp ciA9IDA7CisJCWxmLT5sX3UuZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGxm LT5sX3UuZmQgPCAwKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9 CisJCSpsZl9yZXQgPSBsZjsKKwkJcmV0dXJuICgwKTsKKwl9CisKK291dDoKKwlmcmVlKGxm KTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAora19jbG9zZSh2b2lkICph cmcsIHZvaWQgKmgpCit7CisJc3RydWN0IGxvYWRfZmlsZSAqbGYgPSAoc3RydWN0IGxvYWRf ZmlsZSAqKWg7CisKKwlpZiAobGYtPmxfaXNkaXIpCisJCWNsb3NlZGlyKGxmLT5sX3UuZGly KTsKKwllbHNlCisJCWNsb3NlKGxmLT5sX3UuZmQpOworCWZyZWUobGYpOworCisJcmV0dXJu ICgwKTsKK30KKworc3RhdGljIGludAora19pc2Rpcih2b2lkICphcmcsIHZvaWQgKmgpCit7 CisJcmV0dXJuICgoKHN0cnVjdCBsb2FkX2ZpbGUgKiloKS0+bF9pc2Rpcik7Cit9CisKK3N0 YXRpYyBpbnQKK2tfcmVhZCh2b2lkICphcmcsIHZvaWQgKmgsIHZvaWQgKmRzdCwgc2l6ZV90 IHNpemUsIHNpemVfdCAqcmVzaWRfcmV0dXJuKQoreworCXN0cnVjdCBsb2FkX2ZpbGUgKmxm ID0gKHN0cnVjdCBsb2FkX2ZpbGUgKiloOworCXNzaXplX3Qgc3o7CisKKwlpZiAobGYtPmxf aXNkaXIpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmKChzeiA9IHJlYWQobGYtPmxfdS5m ZCwgZHN0LCBzaXplKSkgPCAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJKnJlc2lkX3JldHVy biA9IHNpemUgLSBzejsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX3JlYWRk aXIodm9pZCAqYXJnLCB2b2lkICpoLCB1aW50MzJfdCAqZmlsZW5vX3JldHVybiwgdWludDhf dCAqdHlwZV9yZXR1cm4sCisgICAgc2l6ZV90ICpuYW1lbGVuX3JldHVybiwgY2hhciAqbmFt ZSkKK3sKKwlzdHJ1Y3QgbG9hZF9maWxlICpsZiA9IChzdHJ1Y3QgbG9hZF9maWxlICopaDsK KwlzdHJ1Y3QgZGlyZW50ICpkcDsKKworCWlmICghbGYtPmxfaXNkaXIpCisJCXJldHVybiAo RUlOVkFMKTsKKworCWRwID0gcmVhZGRpcihsZi0+bF91LmRpcik7CisJaWYgKCFkcCkKKwkJ cmV0dXJuIChFTk9FTlQpOworCisJLyoKKwkgKiBOb3RlOiBkX25hbWxlbiBpcyBpbiB0aGUg cmFuZ2UgMC4uMjU1IGFuZCB0aGVyZWZvcmUgbGVzcworCSAqIHRoYW4gUEFUSF9NQVggc28g d2UgZG9uJ3QgbmVlZCB0byB0ZXN0IGJlZm9yZSBjb3B5aW5nLgorCSAqLworCSpmaWxlbm9f cmV0dXJuID0gZHAtPmRfZmlsZW5vOworCSp0eXBlX3JldHVybiA9IGRwLT5kX3R5cGU7CisJ Km5hbWVsZW5fcmV0dXJuID0gZHAtPmRfbmFtbGVuOworCW1lbWNweShuYW1lLCBkcC0+ZF9u YW1lLCBkcC0+ZF9uYW1sZW4pOworCW5hbWVbZHAtPmRfbmFtbGVuXSA9IDA7CisKKwlyZXR1 cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX3NlZWsodm9pZCAqYXJnLCB2b2lkICpoLCB1 aW50NjRfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJc3RydWN0IGxvYWRfZmlsZSAqbGYg PSAoc3RydWN0IGxvYWRfZmlsZSAqKWg7CisKKwlpZiAobGYtPmxfaXNkaXIpCisJCXJldHVy biAoRUlOVkFMKTsKKworCWlmIChsc2VlayhsZi0+bF91LmZkLCBvZmZzZXQsIHdoZW5jZSkg PCAwKQorCQlyZXR1cm4gKGVycm5vKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp bnQKK2tfc3RhdCh2b2lkICphcmcsIHZvaWQgKmgsCisgICAgICAgaW50ICptb2RlX3JldHVy biwgaW50ICp1aWRfcmV0dXJuLAorICAgICAgIGludCAqZ2lkX3JldHVybiwgdWludDY0X3Qg KnNpemVfcmV0dXJuKQoreworCisJc3RydWN0IGxvYWRfZmlsZSAqbGYgPSAoc3RydWN0IGxv YWRfZmlsZSAqKWg7CisKKwkqbW9kZV9yZXR1cm4gPSBsZi0+bF9zdGF0LnN0X21vZGU7CisJ KnVpZF9yZXR1cm4gPSBsZi0+bF9zdGF0LnN0X3VpZDsKKwkqZ2lkX3JldHVybiA9IGxmLT5s X3N0YXQuc3RfZ2lkOworCSpzaXplX3JldHVybiA9IGxmLT5sX3N0YXQuc3Rfc2l6ZTsKKwly ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX2Rpc2tyZWFkKHZvaWQgKmFyZywgaW50 IHVuaXQsIHVpbnQ2NF90IG9mZnNldCwgdm9pZCAqZHN0LCBzaXplX3Qgc2l6ZSwKKyAgICBz aXplX3QgKnJlc2lkX3JldHVybikKK3sKKwlzc2l6ZV90IG47CisKKwlpZiAodW5pdCAhPSAw IHx8IGRpc2tfZmQgPT0gLTEpCisJCXJldHVybiAoRUlPKTsKKwluID0gcHJlYWQoZGlza19m ZCwgZHN0LCBzaXplLCBvZmZzZXQpOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIChlcnJubyk7 CisJKnJlc2lkX3JldHVybiA9IHNpemUgLSBuOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp YyBpbnQKK2tfZGlza2lvY3RsKHZvaWQgKmFyZywgaW50IHVuaXQsIHVfbG9uZyBjbWQsIHZv aWQgKmRhdGEpCit7CisJLyogbm90IHN1cHBvcnRlZCBvbiBieSBrbG9hZCAqLworCXJldHVy biAoRU5PVFRZKTsKK30KKworLyoKKyAqIFRoaXMgaXMgcmVhbGx5IGNvbmZ1c2luZyBzaW5j ZSB0aGlzIGlzIG5vdCByZWFsbHkgbGlrZSBkb2luZyBjb3B5aW4gLyBjb3B5b3V0CisgKiBp biBrZXJuZWwgbGFuZCB0aGlzIHdpbGwgY29weSB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRo ZSAiZnJvbSIgcHRyIGFuZCBjb3B5CisgKiAidG8iIHRoZSBvZmZzZXQgaW50byB0aGUgbG9h ZCBpbWFnZQorICovCitzdGF0aWMgaW50CitrX2NvcHlfdG9faW1hZ2Uodm9pZCAqYXJnLCBj b25zdCB2b2lkICpmcm9tLCB1aW50NjRfdCB0bywgc2l6ZV90IHNpemUpCit7CisJdG8gJj0g MHg3ZmZmZmZmZjsKKwlpZiAodG8gPiBpbWFnZV9zaXplKQorCQlyZXR1cm4gKEVGQVVMVCk7 CisJaWYgKHRvICsgc2l6ZSA+IGltYWdlX3NpemUpIHsKKwkJc2l6ZSA9IGltYWdlX3NpemUg LSB0bzsKKwkJcHJpbnRmKCJXQVJOSU5HIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7 CisJfQorCW1lbWNweSgmaW1hZ2VbdG9dLCBmcm9tLCBzaXplKTsKKworCWlmICh0byArIHNp emUgPiBpbWFnZV9tYXhfdXNlZCkKKwkJaW1hZ2VfbWF4X3VzZWQgPSB0byArIHNpemU7CisK KwlyZXR1cm4gKDApOworfQorCisvKgorICogY29weW91dCBpcyBjb3B5aW5nIEZST00gdGhl IGltYWdlIGF0ICJmcm9tIiBvZmZzZXQgdG8gbWVtb3J5IHBvaW50ZWQgdG8gYnkgdG8KKyAq IHB0cgorICovCitzdGF0aWMgaW50CitrX2NvcHlfZnJvbV9pbWFnZSh2b2lkICphcmcsIHVp bnQ2NF90IGZyb20sIHZvaWQgKnRvLCBzaXplX3Qgc2l6ZSkKK3sKKwlmcm9tICY9IDB4N2Zm ZmZmZmY7CisJaWYgKGZyb20gPiBpbWFnZV9zaXplKQorCQlyZXR1cm4gKEVGQVVMVCk7CisJ aWYgKGZyb20gKyBzaXplID4gaW1hZ2Vfc2l6ZSkKKwkJc2l6ZSA9IGltYWdlX3NpemUgLSBm cm9tOworCW1lbWNweSh0bywgJmltYWdlW2Zyb21dLCBzaXplKTsKKworCXJldHVybiAoMCk7 Cit9CisKK3N0YXRpYyB2b2lkCitrX3NldHJlZyh2b2lkICphcmcsIGludCByLCB1aW50NjRf dCB2KQoreworCWlmIChyIDwgMCB8fCByID49IDE2KQorCQlyZXR1cm47CisJcmVnc1tyXSA9 IHY7Cit9CisKK3N0YXRpYyB2b2lkCitrX3NldG1zcih2b2lkICphcmcsIGludCByLCB1aW50 NjRfdCB2KQoreworCS8qIFVubmVlZGVkICovCit9CisKK3N0YXRpYyB2b2lkCitrX3NldGNy KHZvaWQgKmFyZywgaW50IHIsIHVpbnQ2NF90IHYpCit7CisJLyogVW5uZWVkZWQgKi8KK30K Kworc3RhdGljIHZvaWQKK2tfc2V0Z2R0KHZvaWQgKmFyZywgdWludDY0X3Qgdiwgc2l6ZV90 IHN6KQoreworCS8qIFVubmVlZGVkICovCit9CisKK3N0YXRpYyB2b2lkCitrX2V4ZWModm9p ZCAqYXJnLCB1aW50NjRfdCBlbnRyeV9wdCkKK3sKKyNpZmRlZiBERUJVRworCXByaW50Zigi RXhlY3V0ZSBhdCAweCVqeFxuIiwgZW50cnlfcHQpOworCXByaW50ZigiaW1hZ2Ugc2l6ZSBt YXggdXNlZCAlamQgZW5kb2YgcGFnZSAlamRcbiIsIGltYWdlX21heF91c2VkLAorCSAgICBy b3VuZHVwMihpbWFnZV9tYXhfdXNlZCwgUEFHRV9TSVpFKSk7CisjZW5kaWYKKwlrbG9hZF9s b2FkX2ltYWdlKGltYWdlLCBlbnRyeV9wdCk7CisJa19leGl0KGFyZywgMCk7Cit9CisKK3N0 YXRpYyB2b2lkCitrX2RlbGF5KHZvaWQgKmFyZywgaW50IHVzZWMpCit7CisJdXNsZWVwKHVz ZWMpOworfQorCitzdGF0aWMgdm9pZAora19leGl0KHZvaWQgKmFyZywgaW50IHYpCit7CisJ dGNzZXRhdHRyKDAsIFRDU0FGTFVTSCwgJm9sZHRlcm0pOworCWV4aXQodik7Cit9CisKK3N0 YXRpYyB2b2lkCitrX2dldG1lbSh2b2lkICphcmcsIHVpbnQ2NF90ICpsb3dtZW0sIHVpbnQ2 NF90ICpoaWdobWVtKQoreworCWludCBtaWJbMl07CisJdW5zaWduZWQgbG9uZyBsb25nIHBo eXNtZW07CisJc2l6ZV90IGxlbjsKKworCW1pYlswXSA9IENUTF9IVzsKKwltaWJbMV0gPSBI V19QSFlTTUVNOworCWxlbiA9IHNpemVvZihwaHlzbWVtKTsKKwlzeXNjdGwobWliLCAyLCAm cGh5c21lbSwgJmxlbiwgTlVMTCwgMCk7CisKKwkqbG93bWVtID0gcGh5c21lbTsKKwkqaGln aG1lbSA9IDA7CisKKwlwcmludGYoIiVzOiVkIGxvd21lbSAlanUgaGlnaG1lbSAlanVcbiIs X19GVU5DVElPTl9fLF9fTElORV9fLAorCSAgICAgICAqbG93bWVtLAorCSAgICAgICAqaGln aG1lbQorCQkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitrX2dldGVudih2b2lkICph cmcsIGludCBpZHgpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnZhcnNbXSA9IHsKKwkJImZv bz1iYXIiLAorCQkiYmFyPWJhcmJhciIsCisJCU5VTEwKKwl9OworCisJcmV0dXJuICh2YXJz W2lkeF0pOworfQorCitzdGF0aWMgaW50CitrX2J1aWxkc21hcCh2b2lkICphcmcsIHZvaWQg KipzbWFwX3ZvaWQsIHNpemVfdCAqb3V0bGVuKSAKK3sKKwlzdHJ1Y3Qgc21hcCAqc21hcGJh c2U7CisJc2l6ZV90IGksajsKKwlzaXplX3QgbGVuOworCWNoYXIgbmFtZVtdID0gImh3LnNt YXAiOworCWludCBtaWJbQ1RMX01BWE5BTUVdOworCisJbGVuID0gbmFtZTJvaWQobmFtZSwg bWliKTsKKworCS8qIGdldCB0aGUgY3VycmVudCBzbWFwIGZyb20gdGhlIHJ1bm5pbmcgc3lz dGVtICovCisJaSA9IHN5c2N0bChtaWIsIDIsIDAsICZqLCAwLCAwKTsKKwlsZW4gPSBqOwor CisJLyoKKwkgKiBVc2UgdGhlIG1hbGxvYyBmdW5jdGlvbiBmcm9tIGxpYnN0YW5kL3VzZXJi b290LnNvIHNpbmNlCisJICogYmlvc19hZGRzbWFwZGF0YSB3aWxsIGZyZWUgdGhlIG1lbW9y eSB1c2luZyB0aGUgbGlic3RhbmQgRnJlZQorCSAqIHNvIGJlIGNhcmVmdWwgdG8gdXNlIG5v dCB1c2Ugc3RhbmRhcmQgbWFsbG9jIGhlcmUKKwkgKi8KKwlzbWFwYmFzZSA9IE1hbGxvY19m dW5jKGosIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJaWYgKCFzbWFwYmFzZSkgeworCQlwcmlu dGYoImtsb2FkIGZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igc21hcFxuIik7CisJCXJl dHVybiAxOworCX0KKworCWkgPSBzeXNjdGwobWliLCAyLCBzbWFwYmFzZSwgJmosIE5VTEws IDApOworCisJKm91dGxlbiA9IGxlbjsKKwkqc21hcF92b2lkID0gc21hcGJhc2U7CisKKyNp ZmRlZiBERUJVRworCXsKKwkJc3RydWN0IHNtYXAgKnNtYXAsICpzbWFwZW5kOworCQlzbWFw ZW5kID0gKHN0cnVjdCBzbWFwICopKCh1aW50cHRyX3Qpc21hcGJhc2UgKyBsZW4pOworCQlm b3IgKHNtYXAgPSBzbWFwYmFzZTsgc21hcCA8IHNtYXBlbmQ7IHNtYXArKykgeworCQkJcHJp bnRmKCJcdHR5cGUgJWQgYmFzZSAweCUwMTZseCBsZW5ndGggMHglMDE2bHhcbiIsCisJCQkg ICAgICAgc21hcC0+dHlwZSwgc21hcC0+YmFzZSwgc21hcC0+bGVuZ3RoKTsKKwkJfQorCX0K KyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsb2FkZXJfY2FsbGJhY2tzIGNi ID0geworCisJLm9wZW4gPSBrX29wZW4sCisJLmNsb3NlID0ga19jbG9zZSwKKwkuaXNkaXIg PSBrX2lzZGlyLAorCS5yZWFkID0ga19yZWFkLAorCS5yZWFkZGlyID0ga19yZWFkZGlyLAor CS5zZWVrID0ga19zZWVrLAorCS5zdGF0ID0ga19zdGF0LAorCisJLmRpc2tyZWFkID0ga19k aXNrcmVhZCwKKwkuZGlza2lvY3RsID0ga19kaXNraW9jdGwsCisKKwkuY29weWluID0ga19j b3B5X3RvX2ltYWdlLAorCS5jb3B5b3V0ID0ga19jb3B5X2Zyb21faW1hZ2UsCisJLnNldHJl ZyA9IGtfc2V0cmVnLAorCS5zZXRtc3IgPSBrX3NldG1zciwKKwkuc2V0Y3IgPSBrX3NldGNy LAorCS5zZXRnZHQgPSBrX3NldGdkdCwKKwkuZXhlYyA9IGtfZXhlYywKKworCS5kZWxheSA9 IGtfZGVsYXksCisJLmV4aXQgPSBrX2V4aXQsCisJLmdldG1lbSA9IGtfZ2V0bWVtLAorCisJ LnB1dGMgPSBrX3B1dGMsCisJLmdldGMgPSBrX2dldGMsCisJLnBvbGwgPSBrX3BvbGwsCisJ LmdldGVudiA9IGtfZ2V0ZW52LAorCS5idWlsZHNtYXAgPSBrX2J1aWxkc21hcCwKK307CisK K3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworCXByaW50ZigidXNhZ2U6IGtsb2FkIFst ZCA8ZGlzayBpbWFnZSBwYXRoPl0gIgorCSAgICAiWy1oIDxob3N0IGZpbGVzeXN0ZW0gcGF0 aD5dIFstZSB8IC1yXVxuIik7CisJZXhpdCgxKTsKK30KKworaW50CittYWluKGludCBhcmdj LCBjaGFyKiogYXJndikKK3sKKwlpbnQgKCpsb2FkZXJfbWFpbikoc3RydWN0IGxvYWRlcl9j YWxsYmFja3MgKiwgdm9pZCAqLCBpbnQsIGludCk7CisJdm9pZCAoKmxvYWRlcl9pbml0KSh2 b2lkKTsKKwlpbnQgKCpzZXRlbnYpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQp OworCWludCBvcHQ7CisJY2hhciAqZGlza19pbWFnZSA9IE5VTEw7CisJY2hhciBrYXJnWzIw XTsKKwljaGFyIGt2YWxbMTI4XTsKKworCWlmIChnZXRldWlkKCkpIHsKKwkJZXJybm8gPSBF UEVSTTsKKwkJZXJyKDEsIE5VTEwpOworCX0KKworCWRsX2xpYiA9IGRsb3BlbigiL2Jvb3Qv dXNlcmJvb3Quc28iLCBSVExEX0xPQ0FMKTsKKwlpZiAoIWRsX2xpYikgeworCQlwcmludGYo IiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlsb2FkZXJfbWFpbiA9 IGRsc3ltKGRsX2xpYiwgImxvYWRlcl9tYWluIik7CisJaWYgKCFsb2FkZXJfbWFpbikgewor CQlwcmludGYoIiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlNYWxs b2NfZnVuYyA9IGRsc3ltKGRsX2xpYiwgIk1hbGxvYyIpOworCWlmICghTWFsbG9jX2Z1bmMp IHsKKwkJcHJpbnRmKCIlc1xuIiwgZGxlcnJvcigpKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJ LyoKKwkgKiBwdWxsIGluIHRoZSBsaWJzdGFuZCBzZXRlbnYgZm9yIHNldHRpbmcgbmFtZSB2 YWx1ZSBwYWlycworCSAqIGluIHRoZSBrZXJuZWwgZW52IHBhZ2UKKwkgKi8KKwlzZXRlbnYg PSBkbHN5bShkbF9saWIsICJzZXRlbnYiKTsKKwlpZiAoIXNldGVudikgeworCQlwcmludGYo IiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlsb2FkZXJfaW5pdCA9 IGRsc3ltKGRsX2xpYiwgImxvYWRlcl9pbml0Iik7CisJaWYgKCFsb2FkZXJfaW5pdCkgewor CQlwcmludGYoIiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwkvKiBj YWxsIGxpYnN0YW5kIHNldGhlYXAgdG8gaW5pdCBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKwls b2FkZXJfaW5pdCgpOworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImQ6 aDplcms6IikpICE9IC0xKSB7CisJCXN3aXRjaCAob3B0KSB7CisJCWNhc2UgJ2QnOgorCQkJ ZGlza19pbWFnZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2gnOgorCQkJaG9z dF9iYXNlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJa19leGVjdXRl ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWtfcmVib290ID0gMTsKKwkJCWJy ZWFrOworCQljYXNlICdrJzoKKwkJCW1lbXNldChrYXJnLDAsc2l6ZW9mKGthcmcpKTsKKwkJ CW1lbXNldChrdmFsLDAsc2l6ZW9mKGt2YWwpKTsKKwkJCWlmKHNzY2FuZihvcHRhcmcsIiVb YS16QS1aXy1dPSVzIixrYXJnLGt2YWwpID09IDIpIHsKKwkJCQlwcmludGYoImdvdCB2YWx1 ZSAlcyAlc1xuIixrYXJnLGt2YWwpOworCQkJCXNldGVudihrYXJnLCBrdmFsLCAxKTsKKwkJ CX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsIi1rIGZhaWx1cmUgJXNcbiIsb3B0YXJn KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgJz8nOgorCQkJdXNhZ2UoKTsKKwkJfQor CX0KKworCWltYWdlX3NpemUgPSAxMjgqMTAyNCoxMDI0OworCWltYWdlID0gbWFsbG9jKGlt YWdlX3NpemUpOworCWlmIChkaXNrX2ltYWdlKSB7CisJCWRpc2tfZmQgPSBvcGVuKGRpc2tf aW1hZ2UsIE9fUkRPTkxZKTsKKwkJaWYgKGRpc2tfZmQgPCAwKQorCQkJZXJyKDEsICJDYW4n dCBvcGVuIGRpc2sgaW1hZ2UgJyVzJyIsIGRpc2tfaW1hZ2UpOworCX0KKworCXRjZ2V0YXR0 cigwLCAmdGVybSk7CisJb2xkdGVybSA9IHRlcm07CisJdGVybS5jX2lmbGFnICY9IH4oSUNS TkwpOworCXRlcm0uY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKKwl0Y3NldGF0dHIoMCwg VENTQUZMVVNILCAmdGVybSk7CisKKwlyZXR1cm4obG9hZGVyX21haW4oJmNiLCBOVUxMLCBV U0VSQk9PVF9WRVJTSU9OXzQsIGRpc2tfZmQgPj0gMCkpOworfQorCitzdGF0aWMgaW50Citr bG9hZF9sb2FkX2ltYWdlKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBsb25nIGVudHJ5X3B0KQor eworCWNoYXIgKnN0YWNrID0gKGNoYXIgKilpbWFnZSArIDB4MTAwMDsgLyogUEFHRVNJWkUg Ki8KKwlzdHJ1Y3Qga2xvYWQga2xkOworCWludCBmbGFncyA9IEtMT0FEX0xPQUQ7CisJLyoK KwkgKiBUaGlzIG11c3QgdGhlIHNhbWUgdmFsdWUgc3lzL2NvbmYvbGRzY3JpcHQueHh4CisJ ICogVGhpcyB2YWx1ZSB3YXMgY2hhbmdlZCBhdCBvbmUgcG9pbnQgd2hlbiBhIG5ldyB2ZXJz aW9uCisJICogb2YgYmludXRpbHMgd2FzIGltcG9ydGVkLiBUaGUgdmFsdWUgaXMgYWxpZ25l ZCB0bworCSAqIG1heCBwYWdlIHNpemUgc3VwcG9ydGVkIGJ5IGdpdmVuIHByb2Nlc3Nvcgor CSAqLworCXVuc2lnbmVkIGxvbmcga2VybnBoeXMgPSAweDIwMDAwMDsKKworCWtsZC5raGRy WzBdLmtfYnVmID0gJigoY2hhciAqKWltYWdlKVtrZXJucGh5c107CisJa2xkLmtoZHJbMF0u a19tZW1zeiA9IHJvdW5kdXAyKGltYWdlX21heF91c2VkLFBBR0VfU0laRSkgLSBrZXJucGh5 czsKKwlrbGQua19lbnRyeV9wdCA9IGVudHJ5X3B0OworCWtsZC5udW1faGRycyA9IDE7CisK KwkvKgorCSAqIHB1bGwgcGFyYW1hdGVycyBmcm9tIHRoZSBzdGFjayBwYWdlCisJICogYSBi ZXR0ZXIgaW50ZXJmYWNlIHNob3VsZCBiZSBkZXZlbG9wZWQgZm9yIGtsb2FkCisJICogaW4g dGhlIGZ1dHVyZQorCSAqLworCWtsZC5rX21vZHVsZXAgPSAoKHVuc2lnbmVkIGludCAqKXN0 YWNrKVsxXTsKKwlrbGQua19waHlzZnJlZSA9ICgodW5zaWduZWQgaW50ICopc3RhY2spWzJd OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgNCBwYWdlcyBvZiBrZW52IHBhZ2Vz IGJldHdlZW4gdGhlIGVuZCBvZiB0aGUKKwkgKiBrZXJuZWwgYW5kIHN0YXJ0IG9mIGZyZWUg bWVtb3J5LgorCSAqIFdoeSB5b3UgYXNrPyBXZWxsIHRoYXQgaXMgYSBxdWVzdGlvbiB3aXRo b3V0IGEgZ29vZCBhbnN3ZXIgYXMgb2YgeWV0CisJICogZm9yIHNvbWUgc3RyYW5nZSByZWFz b24gc29tZSBhdGEgY2hpcHMgd2lsbCBub3QgcmVzcG9uZCBjb3JyZWN0bHkKKwkgKiB1bmxl c3MgZnJlZSBtZW1vcnkgc3RhcnRzIGF0IGdyZWF0ZXIgdGhhbiAyIHBhZ2VzIG91dC4KKwkg KiBUaGUgb2J2b2l1cyBhc3N1bXB0aW9uIGlzIHRoYXQgc29tZXRoaW5nIGlzIGdldHRpbmcg c3RvbW1wZWQgb24gYnV0CisJICogdGhhdCBoYXMgeWV0IHRvIGJlIGRldGVybWluZWQuIEFk ZGluZyB0aGlzIHdvcmthcm91bmQuCisJICovIAorCWtsZC5rX3BoeXNmcmVlID0gTUFYKGts ZC5rX21vZHVsZXAgKyAoNCAqIFBBR0VfU0laRSksIGtsZC5rX3BoeXNmcmVlKTsKKworCXBy aW50ZigiV0FSTklORyBrZXJucGh5cyBzZXQgdG8gMHglbHggbWFrZSBzdXJlIHRoaXMgbWF0 Y2hlcyBrZXJucGh5cyAiCisJICAgICJmcm9tIHN5cy9jb25maWcvbGRzY3JpcHRcbiIsIGtl cm5waHlzKTsKKworCWlmIChrX2V4ZWN1dGUpIHsKKwkJZmxhZ3MgJj0gfktMT0FEX1JFQk9P VDsKKwkJZmxhZ3MgfD0gS0xPQURfRVhFQzsKKwl9CisJaWYgKGtfcmVib290KSB7CisJCWZs YWdzICY9IH5LTE9BRF9FWEVDOworCQlmbGFncyB8PSBLTE9BRF9SRUJPT1Q7CisJCXNodXRk b3duX3Byb2Nlc3NlcygpOworCX0KKworCXJldHVybiAoc3lzY2FsbChTWVNfa2xvYWQsICZr bGQsIHNpemVvZihzdHJ1Y3Qga2xvYWQpLCBmbGFncykpOworfQorCitzdGF0aWMgaW50Citz aHV0ZG93bl9wcm9jZXNzZXModm9pZCkKK3sKKwlpbnQgaTsKKwl1X2ludCBwYWdlaW5zOwor CWludCBzdmVycm5vOworCS8qCisJICogRG8gYSBzeW5jIGVhcmx5IG9uLCBzbyBkaXNrcyBz dGFydCB0cmFuc2ZlcnMgd2hpbGUgd2UncmUgb2ZmCisJICoga2lsbGluZyBwcm9jZXNzZXMu ICBEb24ndCB3b3JyeSBhYm91dCB3cml0ZXMgZG9uZSBiZWZvcmUgdGhlCisJICogcHJvY2Vz c2VzIGRpZSwgdGhlIHJlYm9vdCBzeXN0ZW0gY2FsbCBzeW5jcyB0aGUgZGlza3MuCisJICov CisJc3luYygpOworCisJLyoKKwkgKiBJZ25vcmUgc2lnbmFscyB0aGF0IHdlIGNhbiBnZXQg YXMgYSByZXN1bHQgb2Yga2lsbGluZworCSAqIHBhcmVudHMsIGdyb3VwIGxlYWRlcnMsIGV0 Yy4KKwkgKi8KKwkodm9pZClzaWduYWwoU0lHSFVQLCAgU0lHX0lHTik7CisJKHZvaWQpc2ln bmFsKFNJR0lOVCwgIFNJR19JR04pOworCSh2b2lkKXNpZ25hbChTSUdRVUlULCBTSUdfSUdO KTsKKwkodm9pZClzaWduYWwoU0lHVEVSTSwgU0lHX0lHTik7CisJKHZvaWQpc2lnbmFsKFNJ R1RTVFAsIFNJR19JR04pOworCisJLyoKKwkgKiBJZiB3ZSdyZSBydW5uaW5nIGluIGEgcGlw ZWxpbmUsIHdlIGRvbid0IHdhbnQgdG8gZGllCisJICogYWZ0ZXIga2lsbGluZyB3aGF0ZXZl ciB3ZSdyZSB3cml0aW5nIHRvLgorCSAqLworCSh2b2lkKXNpZ25hbChTSUdQSVBFLCBTSUdf SUdOKTsKKworCS8qIEp1c3Qgc3RvcCBpbml0IC0tIGlmIHdlIGZhaWwsIHdlJ2xsIHJlc3Rh cnQgaXQuICovCisJaWYgKGtpbGwoMSwgU0lHVFNUUCkgPT0gLTEpCisJCWVycigxLCAiU0lH VFNUUCBpbml0Iik7CisKKwkvKiBTZW5kIGEgU0lHVEVSTSBmaXJzdCwgYSBjaGFuY2UgdG8g c2F2ZSB0aGUgYnVmZmVycy4gKi8KKwlpZiAoa2lsbCgtMSwgU0lHVEVSTSkgPT0gLTEgJiYg ZXJybm8gIT0gRVNSQ0gpCisJCWVycigxLCAiU0lHVEVSTSBwcm9jZXNzZXMiKTsKKworCS8q CisJICogQWZ0ZXIgdGhlIHByb2Nlc3NlcyByZWNlaXZlIHRoZSBzaWduYWwsIHN0YXJ0IHRo ZSByZXN0IG9mIHRoZQorCSAqIGJ1ZmZlcnMgb24gdGhlaXIgd2F5LiAgV2FpdCA1IHNlY29u ZHMgYmV0d2VlbiB0aGUgU0lHVEVSTSBhbmQKKwkgKiB0aGUgU0lHS0lMTCB0byBnaXZlIGV2 ZXJ5Ym9keSBhIGNoYW5jZS4gSWYgdGhlcmUgaXMgYSBsb3Qgb2YKKwkgKiBwYWdpbmcgYWN0 aXZpdHkgdGhlbiB3YWl0IGxvbmdlciwgdXAgdG8gYSBtYXhpbXVtIG9mIGFwcHJveAorCSAq IDYwIHNlY29uZHMuCisJICovCisJc2xlZXAoMik7CisJZm9yIChpID0gMDsgaSA8IDIwOyBp KyspIHsKKwkJcGFnZWlucyA9IGdldF9wYWdlaW5zKCk7CisJCXN5bmMoKTsKKwkJc2xlZXAo Myk7CisJCWlmIChnZXRfcGFnZWlucygpID09IHBhZ2VpbnMpCisJCQlicmVhazsKKwl9CisK Kwlmb3IgKGkgPSAxOzsgKytpKSB7CisJCWlmIChraWxsKC0xLCBTSUdLSUxMKSA9PSAtMSkg eworCQkJaWYgKGVycm5vID09IEVTUkNIKQorCQkJCWJyZWFrOworCQkJZ290byByZXN0YXJ0 OworCQl9CisJCWlmIChpID4gNSkgeworCQkJKHZvaWQpZnByaW50ZihzdGRlcnIsCisJCQkg ICAgIldBUk5JTkc6IHNvbWUgcHJvY2Vzcyhlcykgd291bGRuJ3QgZGllXG4iKTsKKwkJCWJy ZWFrOworCQl9CisJCSh2b2lkKXNsZWVwKDIgKiBpKTsKKwl9CisJcmV0dXJuIDE7CityZXN0 YXJ0OgorCXN2ZXJybm8gPSBlcnJubzsKKwllcnJ4KDEsICIlcyVzIiwga2lsbCgxLCBTSUdI VVApID09IC0xID8KKwkgICAgIihjYW4ndCByZXN0YXJ0IGluaXQpOiAiIDogIiIsIHN0cmVy cm9yKHN2ZXJybm8pKTsKKwkvKiBOT1RSRUFDSEVEICovCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1X2ludAorZ2V0X3BhZ2VpbnModm9pZCkKK3sKKwl1X2ludCBwYWdlaW5zOworCXNp emVfdCBsZW47CisKKwlsZW4gPSBzaXplb2YocGFnZWlucyk7CisJaWYgKHN5c2N0bGJ5bmFt ZSgidm0uc3RhdHMudm0udl9zd2FwcGdzaW4iLCAmcGFnZWlucywgJmxlbiwgTlVMTCwgMCkK KwkgICAgIT0gMCkgeworCQl3YXJueCgidl9zd2FwcGdzaW4iKTsKKwkJcmV0dXJuICgwKTsK Kwl9CisJcmV0dXJuIChwYWdlaW5zKTsKK30K --------------010401020106090303040504-- --------------enigEF8640DC65B19FFA7A0B0F0B Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (Darwin) Comment: Using GnuPG with Mozilla - http://www.enigmail.net/ iEYEARECAAYFAlCkb8YACgkQNRmM+OaGhBhXTQCeM+QAfsB8NiEQ2sZvKxXEMJRm YU4An24ju3d/k5mTmcQqik1UHaT0V3RF =T8ZP -----END PGP SIGNATURE----- --------------enigEF8640DC65B19FFA7A0B0F0B--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50A46FC6.9090404>