From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [PATCH for-next v3 01/22] x86/traps: move privilege instruction emulation code Date: Thu, 18 May 2017 18:28:32 +0100 Message-ID: <20170518172832.afqcp65eztdaurdb@citrix.com> References: <20170518171004.27204-1-wei.liu2@citrix.com> <20170518171004.27204-2-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBPEq-0006cU-P3 for xen-devel@lists.xenproject.org; Thu, 18 May 2017 17:29:25 +0000 Content-Disposition: inline In-Reply-To: <20170518171004.27204-2-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org SSBmb3Jnb3QgdG8gbW92ZSBncHJfc3dpdGNoLlMuIEhlcmUgaXMgYW4gdXBkYXRlZCB2ZXJzaW9u LgoKLS0tODwtLS0KRnJvbSA1OGRmODE2YjkzN2RjN2EzNTk4ZGUwMWYwNTNhNjAzMGU2MzEwNTdl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXgu Y29tPgpEYXRlOiBUaHUsIDE4IE1heSAyMDE3IDE2OjE4OjU2ICswMTAwClN1YmplY3Q6IFtQQVRD SF0geDg2L3RyYXBzOiBtb3ZlIHByaXZpbGVnZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24gY29kZQoK TW92ZSByZWxldmFudCBjb2RlIHRvIHB2L2VtdWxhdGUuYy4gRXhwb3J0IGVtdWxhdGVfcHJpdmls ZWdlZF9vcCBpbgpwdi90cmFwcy5oLgoKTm90ZSB0aGF0IHJlYWRfZGVzY3JpcHRvciBpcyBkdXBs aWNhdGVkIGluIGVtdWxhdGUuYy4gVGhlIGR1cGxpY2F0aW9uCndpbGwgYmUgZ29uZSBvbmNlIGFs bCBlbXVsYXRpb24gY29kZSBpcyBtb3ZlZC4KCkFsc28gbW92ZSBncHJfc3dpdGNoLlMgdG8gcHYv IGJlY2F1c2UgdGhlIGNvZGUgaW4gdGhhdCBmaWxlIGlzIG9ubHkKdXNlZCBieSBwcml2aWxlZ2Ug aW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgoKTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpTaWduZWQtb2Zm LWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wdi9N YWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAyICsKIHhlbi9hcmNoL3g4Ni9wdi9lbXVsYXRl LmMgICAgICAgICAgICAgICAgfCAxNDcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog eGVuL2FyY2gveDg2L3t4ODZfNjQgPT4gcHZ9L2dwcl9zd2l0Y2guUyB8ICAgIDAKIHhlbi9hcmNo L3g4Ni90cmFwcy5jICAgICAgICAgICAgICAgICAgICAgfCAxMzU4ICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3g4Nl82NC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAg IDEgLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oICAgICAgICAgICB8ICAgNDggKwog NiBmaWxlcyBjaGFuZ2VkLCAxNTIyIGluc2VydGlvbnMoKyksIDEzNTcgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuYwogcmVuYW1lIHhlbi9h cmNoL3g4Ni97eDg2XzY0ID0+IHB2fS9ncHJfc3dpdGNoLlMgKDEwMCUpCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oCgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCmluZGV4IDQ4OWE5 ZjU5Y2IuLmYyNzJmNjA3ZDQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQor KysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBAIG9iai15ICs9IHRy YXBzLm8KIAogb2JqLWJpbi15ICs9IGRvbTBfYnVpbGQuaW5pdC5vCiBvYmoteSArPSBkb21haW4u bworb2JqLXkgKz0gZW11bGF0ZS5vCitvYmotYmluLXkgKz0gZ3ByX3N3aXRjaC5vCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bGF0ZS5jIGIveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYjBkMDY2YTNiCi0tLSAv ZGV2L251bGwKKysrIGIveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuYwpAQCAtMCwwICsxLDE0NzAg QEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gveDg2L3B2L2VtdWxhdGUuYworICoK KyAqIFBWIGVtdWxhdGlvbiBjb2RlCisgKgorICogTW9kaWZpY2F0aW9ucyB0byBMaW51eCBvcmln aW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIKKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2lu Y2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KKyNpbmNs dWRlIDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRlIDx4ZW4vc3BpbmxvY2suaD4KKyNpbmNsdWRlIDx4 ZW4vdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVn cmVnLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJjYWxsLmg+ CisjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8YXNtL3AybS5oPgorI2lu Y2x1ZGUgPGFzbS9wdi90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9zaGFyZWQuaD4KKyNpbmNsdWRl IDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20veDg2X2VtdWxhdGUuaD4KKworI2luY2x1ZGUg PHhzbS94c20uaD4KKworI2luY2x1ZGUgIi4uL3g4Nl82NC9tbWNvbmZpZy5oIgorCisvKioqKioq KioqKioqKioqKioqCisgKiBIZWxwZXIgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCByZWFk X2Rlc2NyaXB0b3IodW5zaWduZWQgaW50IHNlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCB2Y3B1ICp2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg KmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICphciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpbnNuX2ZldGNoKQoreworICAgIHN0cnVj dCBkZXNjX3N0cnVjdCBkZXNjOworCisgICAgaWYgKCBzZWwgPCA0KQorICAgICAgICBkZXNjLmIg PSBkZXNjLmEgPSAwOworICAgIGVsc2UgaWYgKCBfX2dldF91c2VyKGRlc2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBkZXNjX3N0cnVjdCAqKSghKHNlbCAmIDQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEdE VF9WSVJUX1NUQVJUKHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IExEVF9WSVJUX1NUQVJUKHYpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICsgKHNlbCA+PiAzKSkgKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoICFpbnNuX2Zl dGNoICkKKyAgICAgICAgZGVzYy5iICY9IH5fU0VHTUVOVF9MOworCisgICAgKmFyID0gZGVzYy5i ICYgMHgwMGYwZmYwMDsKKyAgICBpZiAoICEoZGVzYy5iICYgX1NFR01FTlRfTCkgKQorICAgIHsK KyAgICAgICAgKmJhc2UgPSAoKGRlc2MuYSA+PiAxNikgKyAoKGRlc2MuYiAmIDB4ZmYpIDw8IDE2 KSArCisgICAgICAgICAgICAgICAgIChkZXNjLmIgJiAweGZmMDAwMDAwKSk7CisgICAgICAgICps aW1pdCA9IChkZXNjLmEgJiAweGZmZmYpIHwgKGRlc2MuYiAmIDB4MDAwZjAwMDApOworICAgICAg ICBpZiAoIGRlc2MuYiAmIF9TRUdNRU5UX0cgKQorICAgICAgICAgICAgKmxpbWl0ID0gKCgqbGlt aXQgKyAxKSA8PCAxMikgLSAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgaWYgKCBzZWwgPiAz ICkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGEsIGw7CisgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyIHZhbGlkOworCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKAorICAg ICAgICAgICAgICAgICJsYXJsICUyLCUwIDsgc2V0eiAlMSIKKyAgICAgICAgICAgICAgICA6ICI9 ciIgKGEpLCAiPXFtIiAodmFsaWQpIDogInJtIiAoc2VsKSk7CisgICAgICAgICAgICBCVUdfT04o dmFsaWQgJiYgKChhICYgMHgwMGYwZmYwMCkgIT0gKmFyKSk7CisgICAgICAgICAgICBhc20gdm9s YXRpbGUgKAorICAgICAgICAgICAgICAgICJsc2xsICUyLCUwIDsgc2V0eiAlMSIKKyAgICAgICAg ICAgICAgICA6ICI9ciIgKGwpLCAiPXFtIiAodmFsaWQpIDogInJtIiAoc2VsKSk7CisgICAgICAg ICAgICBCVUdfT04odmFsaWQgJiYgKGwgIT0gKmxpbWl0KSk7CisgICAgICAgIH0KKyNlbmRpZgor ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqYmFzZSA9IDBVTDsKKyAgICAgICAgKmxp bWl0ID0gfjBVTDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioq KioqKioqKioqCisgKiBJL08gZW11bGF0aW9uIHN1cHBvcnQKKyAqLworCitzdHJ1Y3QgcHJpdl9v cF9jdHh0IHsKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0OworICAgIHN0cnVjdCB7 CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7CisgICAgfSBjczsKKyAgICBjaGFy ICppb19lbXVsX3N0dWI7CisgICAgdW5zaWduZWQgaW50IGJwbWF0Y2g7CisgICAgdW5zaWduZWQg aW50IHRzYzsKKyNkZWZpbmUgVFNDX0JBU0UgMQorI2RlZmluZSBUU0NfQVVYIDIKK307CisKKy8q IEkvTyBlbXVsYXRpb24gc3VwcG9ydC4gSGVscGVyIHJvdXRpbmVzIGZvciwgYW5kIHR5cGUgb2Ys IHRoZSBzdGFjayBzdHViLiovCit2b2lkIGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaChzdHJ1Y3Qg Y3B1X3VzZXJfcmVncyAqKTsKK3Vuc2lnbmVkIGxvbmcgZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNo KHVuc2lnbmVkIGxvbmcpOworCit2b2lkICgqcHZfcG9zdF9vdXRiX2hvb2spKHVuc2lnbmVkIGlu dCBwb3J0LCB1OCB2YWx1ZSk7CisKK3R5cGVkZWYgdm9pZCBpb19lbXVsX3N0dWJfdChzdHJ1Y3Qg Y3B1X3VzZXJfcmVncyAqKTsKKworc3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJf c2V0dXAoc3RydWN0IHByaXZfb3BfY3R4dCAqY3R4dCwgdTggb3Bjb2RlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVk IGludCBieXRlcykKK3sKKyAgICBpZiAoICFjdHh0LT5pb19lbXVsX3N0dWIgKQorICAgICAgICBj dHh0LT5pb19lbXVsX3N0dWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbih0aGlzX2NwdShzdHVicy5t Zm4pKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRo aXNfY3B1KHN0dWJzLmFkZHIpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB+UEFHRV9NQVNLKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTVFVCX0JVRl9TSVpFIC8gMjsKKworICAgIC8qIG1vdnEgJGhvc3RfdG9f Z3Vlc3RfZ3ByX3N3aXRjaCwlcmN4ICovCisgICAgY3R4dC0+aW9fZW11bF9zdHViWzBdID0gMHg0 ODsKKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMV0gPSAweGI5OworICAgICoodm9pZCAqKikmY3R4 dC0+aW9fZW11bF9zdHViWzJdID0gKHZvaWQgKilob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2g7Cisg ICAgLyogY2FsbHEgKiVyY3ggKi8KKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTBdID0gMHhmZjsK KyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTFdID0gMHhkMTsKKyAgICAvKiBkYXRhMTYgb3Igbm9w ICovCisgICAgY3R4dC0+aW9fZW11bF9zdHViWzEyXSA9IChieXRlcyAhPSAyKSA/IDB4OTAgOiAw eDY2OworICAgIC8qIDxpby1hY2Nlc3Mgb3Bjb2RlPiAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1 YlsxM10gPSBvcGNvZGU7CisgICAgLyogaW1tOCBvciBub3AgKi8KKyAgICBjdHh0LT5pb19lbXVs X3N0dWJbMTRdID0gIShvcGNvZGUgJiA4KSA/IHBvcnQgOiAweDkwOworICAgIC8qIHJldCAoanVt cHMgdG8gZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNoKSAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1 YlsxNV0gPSAweGMzOworICAgIEJVSUxEX0JVR19PTihTVFVCX0JVRl9TSVpFIC8gMiA8IDE2KTsK KworICAgIGlmICggaW9lbXVsX2hhbmRsZV9xdWlyayApCisgICAgICAgIGlvZW11bF9oYW5kbGVf cXVpcmsob3Bjb2RlLCAmY3R4dC0+aW9fZW11bF9zdHViWzEyXSwgY3R4dC0+Y3R4dC5yZWdzKTsK KworICAgIC8qIEhhbmR5IGZ1bmN0aW9uLXR5cGVkIHBvaW50ZXIgdG8gdGhlIHN0dWIuICovCisg ICAgcmV0dXJuICh2b2lkICopKHRoaXNfY3B1KHN0dWJzLmFkZHIpICsgU1RVQl9CVUZfU0laRSAv IDIpOworfQorCisKKy8qIFBlcmZvcm0gSU9QTCBjaGVjayBiZXR3ZWVuIHRoZSB2Y3B1J3Mgc2hh ZG93ZWQgSU9QTCwgYW5kIHRoZSBhc3N1bWVkIGNwbC4gKi8KK3N0YXRpYyBib29sX3QgaW9wbF9v ayhjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3Mp Cit7CisgICAgdW5zaWduZWQgaW50IGNwbCA9IGd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpID8K KyAgICAgICAgKFZNX0FTU0lTVCh2LT5kb21haW4sIGFyY2hpdGVjdHVyYWxfaW9wbCkgPyAwIDog MSkgOiAzOworCisgICAgQVNTRVJUKCh2LT5hcmNoLnB2X3ZjcHUuaW9wbCAmIH5YODZfRUZMQUdT X0lPUEwpID09IDApOworCisgICAgcmV0dXJuIElPUEwoY3BsKSA8PSB2LT5hcmNoLnB2X3ZjcHUu aW9wbDsKK30KKworLyogSGFzIHRoZSBndWVzdCByZXF1ZXN0ZWQgc3VmZmljaWVudCBwZXJtaXNz aW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCitzdGF0aWMgaW50IGd1ZXN0X2lvX29rYXkoCisg ICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3QgdmNw dSAqdiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgLyogSWYgaW4gdXNlciBt b2RlLCBzd2l0Y2ggdG8ga2VybmVsIG1vZGUganVzdCB0byByZWFkIEkvTyBiaXRtYXAuICovCisg ICAgaW50IHVzZXJfbW9kZSA9ICEodi0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKTsKKyNk ZWZpbmUgVE9HR0xFX01PREUoKSBpZiAoIHVzZXJfbW9kZSApIHRvZ2dsZV9ndWVzdF9tb2RlKHYp CisKKyAgICBpZiAoIGlvcGxfb2sodiwgcmVncykgKQorICAgICAgICByZXR1cm4gMTsKKworICAg IGlmICggdi0+YXJjaC5wdl92Y3B1LmlvYm1wX2xpbWl0ID4gKHBvcnQgKyBieXRlcykgKQorICAg IHsKKyAgICAgICAgdW5pb24geyB1aW50OF90IGJ5dGVzWzJdOyB1aW50MTZfdCBtYXNrOyB9IHg7 CisKKyAgICAgICAgLyoKKyAgICAgICAgICogR3JhYiBwZXJtaXNzaW9uIGJ5dGVzIGZyb20gZ3Vl c3Qgc3BhY2UuIEluYWNjZXNzaWJsZSBieXRlcyBhcmUKKyAgICAgICAgICogcmVhZCBhcyAweGZm IChubyBhY2Nlc3MgYWxsb3dlZCkuCisgICAgICAgICAqLworICAgICAgICBUT0dHTEVfTU9ERSgp OworICAgICAgICBzd2l0Y2ggKCBfX2NvcHlfZnJvbV9ndWVzdF9vZmZzZXQoeC5ieXRlcywgdi0+ YXJjaC5wdl92Y3B1LmlvYm1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcG9ydD4+MywgMikgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6IHguYnl0ZXNb MF0gPSB+MDsKKyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgMTog IHguYnl0ZXNbMV0gPSB+MDsKKyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAg IGNhc2UgMDogIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFRPR0dMRV9NT0RFKCk7CisKKyAg ICAgICAgaWYgKCAoeC5tYXNrICYgKCgoMTw8Ynl0ZXMpLTEpIDw8IChwb3J0JjcpKSkgPT0gMCAp CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyog SGFzIHRoZSBhZG1pbmlzdHJhdG9yIGdyYW50ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0 aGlzIEkvTyBhY2Nlc3M/ICovCitzdGF0aWMgYm9vbF90IGFkbWluX2lvX29rYXkodW5zaWduZWQg aW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIC8qCisgICAgICogUG9ydCAweGNmOCAo Q09ORklHX0FERFJFU1MpIGlzIG9ubHkgdmlzaWJsZSBmb3IgRFdPUkQgYWNjZXNzZXMuCisgICAg ICogV2UgbmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhhdCByZWdpc3Rlci4KKyAgICAg Ki8KKyAgICBpZiAoIChwb3J0ID09IDB4Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQorICAgICAgICBy ZXR1cm4gMDsKKworICAgIC8qIFdlIGFsc28gbmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8g dGhlIFJUQy9DTU9TIHJlZ2lzdGVycy4gKi8KKyAgICBpZiAoICgocG9ydCAmIH4xKSA9PSBSVENf UE9SVCgwKSkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpb3BvcnRzX2FjY2Vz c19wZXJtaXR0ZWQoZCwgcG9ydCwgcG9ydCArIGJ5dGVzIC0gMSk7Cit9CisKK3N0YXRpYyBib29s X3QgcGNpX2NmZ19vayhzdHJ1Y3QgZG9tYWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAor ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqd3Jp dGUpCit7CisgICAgdWludDMyX3QgbWFjaGluZV9iZGY7CisKKyAgICBpZiAoICFpc19oYXJkd2Fy ZV9kb21haW4oY3VycmQpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICFDRjhfRU5B QkxFRChjdXJyZC0+YXJjaC5wY2lfY2Y4KSApCisgICAgICAgIHJldHVybiAxOworCisgICAgbWFj aGluZV9iZGYgPSBDRjhfQkRGKGN1cnJkLT5hcmNoLnBjaV9jZjgpOworICAgIGlmICggd3JpdGUg KQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqcm9fbWFwID0gcGNpX2dldF9y b19tYXAoMCk7CisKKyAgICAgICAgaWYgKCByb19tYXAgJiYgdGVzdF9iaXQobWFjaGluZV9iZGYs IHJvX21hcCkgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHN0YXJ0IHw9IENG OF9BRERSX0xPKGN1cnJkLT5hcmNoLnBjaV9jZjgpOworICAgIC8qIEFNRCBleHRlbmRlZCBjb25m aWd1cmF0aW9uIHNwYWNlIGFjY2Vzcz8gKi8KKyAgICBpZiAoIENGOF9BRERSX0hJKGN1cnJkLT5h cmNoLnBjaV9jZjgpICYmCisgICAgICAgICBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2 X1ZFTkRPUl9BTUQgJiYKKyAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTAgJiYgYm9v dF9jcHVfZGF0YS54ODYgPD0gMHgxNyApCisgICAgeworICAgICAgICB1aW50NjRfdCBtc3JfdmFs OworCisgICAgICAgIGlmICggcmRtc3Jfc2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCBtc3JfdmFsKSAp CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCBtc3JfdmFsICYgKDFVTEwgPDwg QU1ENjRfTkJfQ0ZHX0NGOF9FWFRfRU5BQkxFX0JJVCkgKQorICAgICAgICAgICAgc3RhcnQgfD0g Q0Y4X0FERFJfSEkoY3VycmQtPmFyY2gucGNpX2NmOCk7CisgICAgfQorCisgICAgcmV0dXJuICF3 cml0ZSA/CisgICAgICAgICAgIHhzbV9wY2lfY29uZmlnX3Blcm1pc3Npb24oWFNNX0hPT0ssIGN1 cnJkLCBtYWNoaW5lX2JkZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dGFydCwgc3RhcnQgKyBzaXplIC0gMSwgMCkgPT0gMCA6CisgICAgICAgICAgIHBjaV9jb25mX3dy aXRlX2ludGVyY2VwdCgwLCBtYWNoaW5lX2JkZiwgc3RhcnQsIHNpemUsIHdyaXRlKSA+PSAwOwor fQorCit1aW50MzJfdCBndWVzdF9pb19yZWFkKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBp bnQgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQor eworICAgIHVpbnQzMl90IGRhdGEgPSAwOworICAgIHVuc2lnbmVkIGludCBzaGlmdCA9IDA7CisK KyAgICBpZiAoIGFkbWluX2lvX29rYXkocG9ydCwgYnl0ZXMsIGN1cnJkKSApCisgICAgeworICAg ICAgICBzd2l0Y2ggKCBieXRlcyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4g aW5iKHBvcnQpOworICAgICAgICBjYXNlIDI6IHJldHVybiBpbncocG9ydCk7CisgICAgICAgIGNh c2UgNDogcmV0dXJuIGlubChwb3J0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICgg Ynl0ZXMgIT0gMCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDE7CisgICAg ICAgIHVpbnQzMl90IHN1Yl9kYXRhID0gfjA7CisKKyAgICAgICAgaWYgKCAocG9ydCA9PSAweDQy KSB8fCAocG9ydCA9PSAweDQzKSB8fCAocG9ydCA9PSAweDYxKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHN1Yl9kYXRhID0gcHZfcGl0X2hhbmRsZXIocG9ydCwgMCwgMCk7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSBpZiAoIHBvcnQgPT0gUlRDX1BPUlQoMCkgKQorICAgICAgICB7CisgICAg ICAgICAgICBzdWJfZGF0YSA9IGN1cnJkLT5hcmNoLmNtb3NfaWR4OworICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKCAocG9ydCA9PSBSVENfUE9SVCgxKSkgJiYKKyAgICAgICAgICAgICAgICAg IGlvcG9ydHNfYWNjZXNzX3Blcm1pdHRlZChjdXJyZCwgUlRDX1BPUlQoMCksIFJUQ19QT1JUKDEp KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAg ICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworICAgICAgICAgICAg b3V0YihjdXJyZC0+YXJjaC5jbW9zX2lkeCAmIDB4N2YsIFJUQ19QT1JUKDApKTsKKyAgICAgICAg ICAgIHN1Yl9kYXRhID0gaW5iKFJUQ19QT1JUKDEpKTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp ZiAoIChwb3J0ID09IDB4Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQorICAgICAgICB7CisgICAgICAg ICAgICBzaXplID0gNDsKKyAgICAgICAgICAgIHN1Yl9kYXRhID0gY3VycmQtPmFyY2gucGNpX2Nm ODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2Zj ICkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYg MykpOworICAgICAgICAgICAgaWYgKCBzaXplID09IDMgKQorICAgICAgICAgICAgICAgIHNpemUg PSAyOworICAgICAgICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwg TlVMTCkgKQorICAgICAgICAgICAgICAgIHN1Yl9kYXRhID0gcGNpX2NvbmZfcmVhZChjdXJyZC0+ YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo IHNpemUgPT0gNCApCisgICAgICAgICAgICByZXR1cm4gc3ViX2RhdGE7CisKKyAgICAgICAgZGF0 YSB8PSAoc3ViX2RhdGEgJiAoKDF1IDw8IChzaXplICogOCkpIC0gMSkpIDw8IHNoaWZ0OworICAg ICAgICBzaGlmdCArPSBzaXplICogODsKKyAgICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBi eXRlcyAtPSBzaXplOworICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCitzdGF0aWMgdW5z aWduZWQgaW50IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoc3RydWN0IHZjcHUgKnYsCisgICAg dW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgdW5zaWduZWQgaW50 IHdpZHRoLCBpLCBtYXRjaCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydDsKKworICAgIGlm ICggISh2LT5hcmNoLmRlYnVncmVnWzVdKSB8fAorICAgICAgICAgISh2LT5hcmNoLnB2X3ZjcHUu Y3RybHJlZ1s0XSAmIFg4Nl9DUjRfREUpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3Ig KCBpID0gMDsgaSA8IDQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAoICEodi0+YXJjaC5kZWJ1 Z3JlZ1s1XSAmCisgICAgICAgICAgICAgICAoMyA8PCAoaSAqIERSX0VOQUJMRV9TSVpFKSkpICkK KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN0YXJ0ID0gdi0+YXJjaC5kZWJ1Z3Jl Z1tpXTsKKyAgICAgICAgd2lkdGggPSAwOworCisgICAgICAgIHN3aXRjaCAoICh2LT5hcmNoLmRl YnVncmVnWzddID4+CisgICAgICAgICAgICAgICAgICAoRFJfQ09OVFJPTF9TSElGVCArIGkgKiBE Ul9DT05UUk9MX1NJWkUpKSAmIDB4YyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBEUl9MRU5f MTogd2lkdGggPSAxOyBicmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5fMjogd2lkdGggPSAyOyBi cmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5fNDogd2lkdGggPSA0OyBicmVhazsKKyAgICAgICAg Y2FzZSBEUl9MRU5fODogd2lkdGggPSA4OyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlm ICggKHN0YXJ0IDwgKHBvcnQgKyBsZW4pKSAmJiAoKHN0YXJ0ICsgd2lkdGgpID4gcG9ydCkgKQor ICAgICAgICAgICAgbWF0Y2ggfD0gMSA8PCBpOworICAgIH0KKworICAgIHJldHVybiBtYXRjaDsK K30KKworc3RhdGljIGludCBwcml2X29wX3JlYWRfaW8odW5zaWduZWQgaW50IHBvcnQsIHVuc2ln bmVkIGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg KnZhbCwgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgc3RydWN0IHByaXZf b3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0 eHQpOworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWlu ICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKKworICAgIC8qIElOUyBtdXN0IG5vdCBjb21lIGhl cmUuICovCisgICAgQVNTRVJUKChjdHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNCk7CisKKyAgICBp ZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHBvYy0+YnBtYXRjaCA9IGNo ZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXMpOworCisgICAgaWYgKCBh ZG1pbl9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyZCkgKQorICAgIHsKKyAgICAgICAgaW9fZW11 bF9zdHViX3QgKmlvX2VtdWwgPQorICAgICAgICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywg Y3R4dC0+b3Bjb2RlLCBwb3J0LCBieXRlcyk7CisKKyAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0 eHQtPnJlZ3MpOworICAgICAgICBpb19lbXVsKGN0eHQtPnJlZ3MpOworICAgICAgICByZXR1cm4g WDg2RU1VTF9ET05FOworICAgIH0KKworICAgICp2YWwgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5 dGVzLCBjdXJyZCk7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCit2b2lkIGd1ZXN0 X2lvX3dyaXRlKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90 IGRhdGEsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQoreworICAg IGlmICggYWRtaW5faW9fb2theShwb3J0LCBieXRlcywgY3VycmQpICkKKyAgICB7CisgICAgICAg IHN3aXRjaCAoIGJ5dGVzICkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBvdXRiKCh1 aW50OF90KWRhdGEsIHBvcnQpOworICAgICAgICAgICAgaWYgKCBwdl9wb3N0X291dGJfaG9vayAp CisgICAgICAgICAgICAgICAgcHZfcG9zdF9vdXRiX2hvb2socG9ydCwgKHVpbnQ4X3QpZGF0YSk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgb3V0dygo dWludDE2X3QpZGF0YSwgcG9ydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0 OgorICAgICAgICAgICAgb3V0bChkYXRhLCBwb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoIGJ5dGVzICE9IDAg KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSAxOworCisgICAgICAgIGlmICgg KHBvcnQgPT0gMHg0MikgfHwgKHBvcnQgPT0gMHg0MykgfHwgKHBvcnQgPT0gMHg2MSkgKQorICAg ICAgICB7CisgICAgICAgICAgICBwdl9waXRfaGFuZGxlcihwb3J0LCAodWludDhfdClkYXRhLCAx KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggcG9ydCA9PSBSVENfUE9SVCgwKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJkLT5hcmNoLmNtb3NfaWR4ID0gZGF0YTsKKyAgICAg ICAgfQorICAgICAgICBlbHNlIGlmICggKHBvcnQgPT0gUlRDX1BPUlQoMSkpICYmCisgICAgICAg ICAgICAgICAgICBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoY3VycmQsIFJUQ19QT1JUKDApLCBS VENfUE9SVCgxKSkgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdz OworCisgICAgICAgICAgICBpZiAoIHB2X3J0Y19oYW5kbGVyICkKKyAgICAgICAgICAgICAgICBw dl9ydGNfaGFuZGxlcihjdXJyZC0+YXJjaC5jbW9zX2lkeCAmIDB4N2YsIGRhdGEpOworICAgICAg ICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisgICAgICAgICAgICBv dXRiKGN1cnJkLT5hcmNoLmNtb3NfaWR4ICYgMHg3ZiwgUlRDX1BPUlQoMCkpOworICAgICAgICAg ICAgb3V0YihkYXRhLCBSVENfUE9SVCgxKSk7CisgICAgICAgICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAo cG9ydCA9PSAweGNmOCkgJiYgKGJ5dGVzID09IDQpICkKKyAgICAgICAgeworICAgICAgICAgICAg c2l6ZSA9IDQ7CisgICAgICAgICAgICBjdXJyZC0+YXJjaC5wY2lfY2Y4ID0gZGF0YTsKKyAgICAg ICAgfQorICAgICAgICBlbHNlIGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKKyAgICAg ICAgeworICAgICAgICAgICAgc2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOworICAg ICAgICAgICAgaWYgKCBzaXplID09IDMgKQorICAgICAgICAgICAgICAgIHNpemUgPSAyOworICAg ICAgICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgJmRhdGEpICkK KyAgICAgICAgICAgICAgICBwY2lfY29uZl93cml0ZShjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0 ICYgMywgc2l6ZSwgZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNpemUgPT0gNCAp CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBi eXRlcyAtPSBzaXplOworICAgICAgICBkYXRhID4+PSBzaXplICogODsKKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9pbyh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50 IGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBz dHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0 ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Cisg ICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJk ID0gY3VycmVudC0+ZG9tYWluOworCisgICAgLyogT1VUUyBtdXN0IG5vdCBjb21lIGhlcmUuICov CisgICAgQVNTRVJUKChjdHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNik7CisKKyAgICBpZiAoICFn dWVzdF9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1 ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXMpOworCisgICAgaWYgKCBhZG1pbl9p b19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyZCkgKQorICAgIHsKKyAgICAgICAgaW9fZW11bF9zdHVi X3QgKmlvX2VtdWwgPQorICAgICAgICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+ b3Bjb2RlLCBwb3J0LCBieXRlcyk7CisKKyAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJl Z3MpOworICAgICAgICBpb19lbXVsKGN0eHQtPnJlZ3MpOworICAgICAgICBpZiAoIChieXRlcyA9 PSAxKSAmJiBwdl9wb3N0X291dGJfaG9vayApCisgICAgICAgICAgICBwdl9wb3N0X291dGJfaG9v ayhwb3J0LCB2YWwpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05FOworICAgIH0KKworICAg IGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5dGVzLCB2YWwsIGN1cnJkKTsKKworICAgIHJldHVybiBY ODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX3NlZ21lbnQoZW51bSB4 ODZfc2VnbWVudCBzZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz ZWdtZW50X3JlZ2lzdGVyICpyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIC8qIENoZWNrIGlmIHRoaXMgaXMg YW4gYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIEkvTyBiaXRtYXAuICovCisgICAgaWYgKCBzZWcgPT0g eDg2X3NlZ190ciApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBjdHh0LT5vcGNvZGUgKQorICAg ICAgICB7CisgICAgICAgIGNhc2UgMHg2YyAuLi4gMHg2ZjogLyogaW5zIC8gb3V0cyAqLworICAg ICAgICBjYXNlIDB4ZTQgLi4uIDB4ZTc6IC8qIGluIC8gb3V0IChpbW1lZGlhdGUgcG9ydCkgKi8K KyAgICAgICAgY2FzZSAweGVjIC4uLiAweGVmOiAvKiBpbiAvIG91dCAocG9ydCBpbiAlZHgpICov CisgICAgICAgICAgICAvKiBEZWZlciB0aGUgY2hlY2sgdG8gcHJpdl9vcF97cmVhZCx3cml0ZX1f aW8oKS4gKi8KKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX0RPTkU7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBpZiAoIGN0eHQtPmFkZHJfc2l6ZSA8IDY0ICkKKyAgICB7CisgICAgICAgIHVu c2lnbmVkIGxvbmcgbGltaXQ7CisgICAgICAgIHVuc2lnbmVkIGludCBzZWwsIGFyOworCisgICAg ICAgIHN3aXRjaCAoIHNlZyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2NzOiBz ZWwgPSBjdHh0LT5yZWdzLT5jczsgYnJlYWs7CisgICAgICAgIGNhc2UgeDg2X3NlZ19kczogc2Vs ID0gcmVhZF9zcmVnKGRzKTsgIGJyZWFrOworICAgICAgICBjYXNlIHg4Nl9zZWdfZXM6IHNlbCA9 IHJlYWRfc3JlZyhlcyk7ICBicmVhazsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2ZzOiBzZWwgPSBy ZWFkX3NyZWcoZnMpOyAgYnJlYWs7CisgICAgICAgIGNhc2UgeDg2X3NlZ19nczogc2VsID0gcmVh ZF9zcmVnKGdzKTsgIGJyZWFrOworICAgICAgICBjYXNlIHg4Nl9zZWdfc3M6IHNlbCA9IGN0eHQt PnJlZ3MtPnNzOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIFg4NkVNVUxfVU5IQU5E TEVBQkxFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhcmVhZF9kZXNjcmlwdG9yKHNlbCwg Y3VycmVudCwgJnJlZy0+YmFzZSwgJmxpbWl0LCAmYXIsIDApICkKKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgICAgICByZWctPmxpbWl0ID0gbGltaXQ7Cisg ICAgICAgIHJlZy0+YXR0ci5ieXRlcyA9IGFyID4+IDg7CisgICAgfQorICAgIGVsc2UKKyAgICB7 CisgICAgICAgIHN3aXRjaCAoIHNlZyApCisgICAgICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIGlmICggIWlzX3g4Nl91c2VyX3NlZ21lbnQoc2VnKSApCisgICAgICAgICAgICAg ICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgICAgICAgICAgcmVnLT5iYXNlID0g MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIHg4Nl9zZWdfZnM6CisgICAgICAg ICAgICByZWctPmJhc2UgPSByZGZzYmFzZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgeDg2X3NlZ19nczoKKyAgICAgICAgICAgIHJlZy0+YmFzZSA9IHJkZ3NiYXNlKCk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlZy0+bGltaXQgPSB+MFU7 CisKKyAgICAgICAgcmVnLT5hdHRyLmJ5dGVzID0gMDsKKyAgICAgICAgcmVnLT5hdHRyLmZpZWxk cy50eXBlID0gX1NFR01FTlRfV1IgPj4gODsKKyAgICAgICAgaWYgKCBzZWcgPT0geDg2X3NlZ19j cyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZy0+YXR0ci5maWVsZHMudHlwZSB8PSBfU0VH TUVOVF9DT0RFID4+IDg7CisgICAgICAgICAgICByZWctPmF0dHIuZmllbGRzLmwgPSAxOworICAg ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZGIgPSAx OworICAgICAgICByZWctPmF0dHIuZmllbGRzLnMgICA9IDE7CisgICAgICAgIHJlZy0+YXR0ci5m aWVsZHMuZHBsID0gMzsKKyAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5wICAgPSAxOworICAgICAg ICByZWctPmF0dHIuZmllbGRzLmcgICA9IDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3Ig eDg2X2VtdWxhdGUuYydzIG1vZGVfcmluZzAoKSB0byB3b3JrLCBmYWtlIGEgRFBMIG9mIHplcm8u CisgICAgICogQWxzbyBkbyB0aGlzIGZvciBjb25zaXN0ZW5jeSBmb3Igbm9uLWNvbmZvcm1pbmcg Y29kZSBzZWdtZW50cy4KKyAgICAgKi8KKyAgICBpZiAoIChzZWcgPT0geDg2X3NlZ19zcyB8fAor ICAgICAgICAgIChzZWcgPT0geDg2X3NlZ19jcyAmJgorICAgICAgICAgICAhKHJlZy0+YXR0ci5m aWVsZHMudHlwZSAmIChfU0VHTUVOVF9FQyA+PiA4KSkpKSAmJgorICAgICAgICAgZ3Vlc3Rfa2Vy bmVsX21vZGUoY3VycmVudCwgY3R4dC0+cmVncykgKQorICAgICAgICByZWctPmF0dHIuZmllbGRz LmRwbCA9IDA7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0aWMgaW50IHB2 X2VtdWxfdmlydF90b19saW5lYXIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIG9m ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0 ZXMsIHVuc2lnbmVkIGxvbmcgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKyAgICBpbnQgcmMgPSBYODZFTVVM X09LQVk7CisKKyAgICAqYWRkciA9IGJhc2UgKyBvZmZzZXQ7CisKKyAgICBpZiAoIGN0eHQtPmFk ZHJfc2l6ZSA8IDY0ICkKKyAgICB7CisgICAgICAgIGlmICggbGltaXQgPCBieXRlcyAtIDEgfHwg b2Zmc2V0ID4gbGltaXQgLSBieXRlcyArIDEgKQorICAgICAgICAgICAgcmMgPSBYODZFTVVMX0VY Q0VQVElPTjsKKyAgICAgICAgKmFkZHIgPSAodWludDMyX3QpKmFkZHI7CisgICAgfQorICAgIGVs c2UgaWYgKCAhX19hZGRyX29rKCphZGRyKSApCisgICAgICAgIHJjID0gWDg2RU1VTF9FWENFUFRJ T047CisKKyAgICBpZiAoIHVubGlrZWx5KHJjID09IFg4NkVNVUxfRVhDRVBUSU9OKSApCisgICAg ICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihzZWcgIT0geDg2X3NlZ19zcyA/IFRSQVBfZ3BfZmF1 bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVFJB UF9zdGFja19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGN0eHQpOwor CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHByaXZfb3BfcmVwX2lucyh1aW50MTZf dCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcs IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGJ5dGVzX3Blcl9yZXAsIHVuc2lnbmVkIGxvbmcgKnJlcHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1 Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3Bf Y3R4dCwgY3R4dCk7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVj dCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgZ29h bCA9ICpyZXBzOworICAgIHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyIHNyZWc7CisgICAgaW50IHJj OworCisgICAgQVNTRVJUKHNlZyA9PSB4ODZfc2VnX2VzKTsKKworICAgICpyZXBzID0gMDsKKwor ICAgIGlmICggIWd1ZXN0X2lvX29rYXkocG9ydCwgYnl0ZXNfcGVyX3JlcCwgY3VyciwgY3R4dC0+ cmVncykgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICByYyA9 IHByaXZfb3BfcmVhZF9zZWdtZW50KHg4Nl9zZWdfZXMsICZzcmVnLCBjdHh0KTsKKyAgICBpZiAo IHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHJldHVybiByYzsKKworICAgIGlmICggIXNy ZWcuYXR0ci5maWVsZHMucCApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK KyAgICBpZiAoICFzcmVnLmF0dHIuZmllbGRzLnMgfHwKKyAgICAgICAgIChzcmVnLmF0dHIuZmll bGRzLnR5cGUgJiAoX1NFR01FTlRfQ09ERSA+PiA4KSkgfHwKKyAgICAgICAgICEoc3JlZy5hdHRy LmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX1dSID4+IDgpKSApCisgICAgeworICAgICAgICB4ODZf ZW11bF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgMCwgY3R4dCk7CisgICAgICAgIHJldHVy biBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICBwb2MtPmJwbWF0Y2ggPSBjaGVja19n dWVzdF9pb19icmVha3BvaW50KGN1cnIsIHBvcnQsIGJ5dGVzX3Blcl9yZXApOworCisgICAgd2hp bGUgKCAqcmVwcyA8IGdvYWwgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGEgPSBn dWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVzX3Blcl9yZXAsIGN1cnJkKTsKKyAgICAgICAgdW5zaWdu ZWQgbG9uZyBhZGRyOworCisgICAgICAgIHJjID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVn LmJhc2UsIG9mZnNldCwgYnl0ZXNfcGVyX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNyZWcubGltaXQsIHg4Nl9zZWdfZXMsIGN0eHQsICZhZGRyKTsKKyAgICAgICAg aWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAg ICAgIGlmICggKHJjID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgKilhZGRyLCAmZGF0YSwgYnl0ZXNf cGVyX3JlcCkpICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB4ODZfZW11bF9wYWdlZmF1 bHQoUEZFQ193cml0ZV9hY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk ciArIGJ5dGVzX3Blcl9yZXAgLSByYywgY3R4dCk7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1V TF9FWENFUFRJT047CisgICAgICAgIH0KKworICAgICAgICArKypyZXBzOworCisgICAgICAgIGlm ICggcG9jLT5icG1hdGNoIHx8IGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgLyogeDg2X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVwZXRpdGlv biBjb3VudCB0byBlbnN1cmUgd2UgZG9uJ3Qgd3JhcC4gKi8KKyAgICAgICAgaWYgKCB1bmxpa2Vs eShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBYODZfRUZMQUdTX0RGKSApCisgICAgICAgICAgICBvZmZz ZXQgLT0gYnl0ZXNfcGVyX3JlcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0ICs9 IGJ5dGVzX3Blcl9yZXA7CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKwor c3RhdGljIGludCBwcml2X29wX3JlcF9vdXRzKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25l ZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc19wZXJfcmVw LCB1bnNpZ25lZCBsb25nICpyZXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBv YyA9IGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKKyAgICBz dHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBj dXJyZW50LT5kb21haW47CisgICAgdW5zaWduZWQgbG9uZyBnb2FsID0gKnJlcHM7CisgICAgc3Ry dWN0IHNlZ21lbnRfcmVnaXN0ZXIgc3JlZzsKKyAgICBpbnQgcmM7CisKKyAgICAqcmVwcyA9IDA7 CisKKyAgICBpZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5dGVzX3Blcl9yZXAsIGN1cnIsIGN0 eHQtPnJlZ3MpICkKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCisgICAg cmMgPSBwcml2X29wX3JlYWRfc2VnbWVudChzZWcsICZzcmVnLCBjdHh0KTsKKyAgICBpZiAoIHJj ICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHJldHVybiByYzsKKworICAgIGlmICggIXNyZWcu YXR0ci5maWVsZHMucCApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAg ICBpZiAoICFzcmVnLmF0dHIuZmllbGRzLnMgfHwKKyAgICAgICAgICgoc3JlZy5hdHRyLmZpZWxk cy50eXBlICYgKF9TRUdNRU5UX0NPREUgPj4gOCkpICYmCisgICAgICAgICAgIShzcmVnLmF0dHIu ZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfV1IgPj4gOCkpKSApCisgICAgeworICAgICAgICB4ODZf ZW11bF9od19leGNlcHRpb24oc2VnICE9IHg4Nl9zZWdfc3MgPyBUUkFQX2dwX2ZhdWx0CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFRSQVBfc3RhY2tf ZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjdHh0KTsKKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAgIH0KKworICAgIHBvYy0+YnBtYXRjaCA9IGNo ZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXNfcGVyX3JlcCk7CisKKyAg ICB3aGlsZSAoICpyZXBzIDwgZ29hbCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0 YSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKworICAgICAgICByYyA9IHB2X2Vt dWxfdmlydF90b19saW5lYXIoc3JlZy5iYXNlLCBvZmZzZXQsIGJ5dGVzX3Blcl9yZXAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmVnLmxpbWl0LCBzZWcsIGN0eHQsICZh ZGRyKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQorICAgICAgICAgICAgcmV0 dXJuIHJjOworCisgICAgICAgIGlmICggKHJjID0gX19jb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZv aWQgKilhZGRyLCBieXRlc19wZXJfcmVwKSkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAg IHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRyICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBjdHh0KTsK KyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICAgICAgfQorCisgICAg ICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5dGVzX3Blcl9yZXAsIGRhdGEsIGN1cnJkKTsKKwor ICAgICAgICArKypyZXBzOworCisgICAgICAgIGlmICggcG9jLT5icG1hdGNoIHx8IGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogeDg2 X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVwZXRpdGlvbiBjb3VudCB0byBlbnN1cmUgd2UgZG9uJ3Qg d3JhcC4gKi8KKyAgICAgICAgaWYgKCB1bmxpa2VseShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBYODZf RUZMQUdTX0RGKSApCisgICAgICAgICAgICBvZmZzZXQgLT0gYnl0ZXNfcGVyX3JlcDsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzX3Blcl9yZXA7CisgICAgfQorCisg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwcml2X29wX3JlYWRfY3Io dW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqdmFsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgY29uc3Qgc3Ry dWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworCisgICAgc3dpdGNoICggcmVnICkKKyAgICB7Cisg ICAgY2FzZSAwOiAvKiBSZWFkIENSMCAqLworICAgICAgICAqdmFsID0gKHJlYWRfY3IwKCkgJiB+ WDg2X0NSMF9UUykgfCBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1swXTsKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgMjogLyogUmVhZCBDUjIgKi8KKyAgICBjYXNl IDQ6IC8qIFJlYWQgQ1I0ICovCisgICAgICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuY3Ry bHJlZ1tyZWddOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSAzOiAv KiBSZWFkIENSMyAqLworICAgIHsKKyAgICAgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQg PSBjdXJyLT5kb21haW47CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuOworCisgICAgICAgIGlm ICggIWlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBt Zm4gPSBwYWdldGFibGVfZ2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKKyAgICAgICAg ICAgICp2YWwgPSB4ZW5fcGZuX3RvX2NyMyhtZm5fdG9fZ21mbihjdXJyZCwgbWZuKSk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBsNF9wZ2VudHJ5X3Qg KnBsNGUgPQorICAgICAgICAgICAgICAgIG1hcF9kb21haW5fcGFnZShfbWZuKHBhZ2V0YWJsZV9n ZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpKSk7CisKKyAgICAgICAgICAgIG1mbiA9IGw0 ZV9nZXRfcGZuKCpwbDRlKTsKKyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwor ICAgICAgICAgICAgKnZhbCA9IGNvbXBhdF9wZm5fdG9fY3IzKG1mbl90b19nbWZuKGN1cnJkLCBt Zm4pKTsKKyAgICAgICAgfQorICAgICAgICAvKiBQVHMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgKi8K KyAgICAgICAgQlVHX09OKHBhZ2VfZ2V0X293bmVyKG1mbl90b19wYWdlKG1mbikpID09IGRvbV9j b3cpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0KKyAgICB9CisKKyAgICBy ZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93cml0 ZV9jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1 Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisKKyAgICBzd2l0Y2ggKCByZWcgKQorICAgIHsKKyAg ICBjYXNlIDA6IC8qIFdyaXRlIENSMCAqLworICAgICAgICBpZiAoICh2YWwgXiByZWFkX2NyMCgp KSAmIH5YODZfQ1IwX1RTICkKKyAgICAgICAgeworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIGNoYW5nZSB1bm1vZGlm aWFibGUgQ1IwIGZsYWdzXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGRvX2ZwdV90YXNrc3dpdGNoKCEhKHZhbCAmIFg4Nl9DUjBfVFMpKTsKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgMjogLyogV3JpdGUgQ1IyICovCisgICAgICAg IGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzJdID0gdmFsOworICAgICAgICBhcmNoX3NldF9j cjIoY3VyciwgdmFsKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2Ug MzogLyogV3JpdGUgQ1IzICovCisgICAgeworICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9 IGN1cnItPmRvbWFpbjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZm47CisgICAgICAgIHN0cnVj dCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAgIGludCByYzsKKworICAgICAgICBnZm4gPSAhaXNf cHZfMzJiaXRfZG9tYWluKGN1cnJkKQorICAgICAgICAgICAgICA/IHhlbl9jcjNfdG9fcGZuKHZh bCkgOiBjb21wYXRfY3IzX3RvX3Bmbih2YWwpOworICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJv bV9nZm4oY3VycmQsIGdmbiwgTlVMTCwgUDJNX0FMTE9DKTsKKyAgICAgICAgaWYgKCAhcGFnZSAp CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmMgPSBuZXdfZ3Vlc3RfY3IzKHBhZ2VfdG9f bWZuKHBhZ2UpKTsKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAgICAgICAgc3dpdGNoICgg cmMgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7CisgICAgICAgIGNhc2UgLUVSRVNUQVJUOiAvKiByZXRyeSBhZnRlciBwcmVlbXB0 aW9uICovCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIDQ6IC8qIFdyaXRlIENSNCAqLworICAgICAg ICBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1s0XSA9IHB2X2d1ZXN0X2NyNF9maXh1cChjdXJy LCB2YWwpOworICAgICAgICB3cml0ZV9jcjQocHZfZ3Vlc3RfY3I0X3RvX3JlYWxfY3I0KGN1cnIp KTsKKyAgICAgICAgY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKGN1cnIpOworICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworICAgIH0KKworICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK K30KKworc3RhdGljIGludCBwcml2X29wX3JlYWRfZHIodW5zaWduZWQgaW50IHJlZywgdW5zaWdu ZWQgbG9uZyAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5zaWduZWQgbG9uZyByZXMgPSBkb19nZXRfZGVidWdy ZWcocmVnKTsKKworICAgIGlmICggSVNfRVJSX1ZBTFVFKHJlcykgKQorICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICAqdmFsID0gcmVzOworCisgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwcml2X29wX3dyaXRlX2RyKHVuc2lnbmVkIGlu dCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBkb19zZXRfZGVidWdy ZWcocmVnLCB2YWwpID09IDAKKyAgICAgICAgICAgPyBYODZFTVVMX09LQVkgOiBYODZFTVVMX1VO SEFORExFQUJMRTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBndWVzdF9taXNjX2VuYWJs ZSh1aW50NjRfdCB2YWwpCit7CisgICAgdmFsICY9IH4oTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVS Rl9BVkFJTCB8CisgICAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTU9OSVRPUl9FTkFC TEUpOworICAgIHZhbCB8PSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9CVFNfVU5BVkFJTCB8CisgICAg ICAgICAgIE1TUl9JQTMyX01JU0NfRU5BQkxFX1BFQlNfVU5BVkFJTCB8CisgICAgICAgICAgIE1T Ul9JQTMyX01JU0NfRU5BQkxFX1hUUFJfRElTQUJMRTsKKyAgICByZXR1cm4gdmFsOworfQorCitz dGF0aWMgaW5saW5lIGJvb2wgaXNfY3B1ZnJlcV9jb250cm9sbGVyKGNvbnN0IHN0cnVjdCBkb21h aW4gKmQpCit7CisgICAgcmV0dXJuICgoY3B1ZnJlcV9jb250cm9sbGVyID09IEZSRVFDVExfZG9t MF9rZXJuZWwpICYmCisgICAgICAgICAgICBpc19oYXJkd2FyZV9kb21haW4oZCkpOworfQorCitz dGF0aWMgaW50IHByaXZfb3BfcmVhZF9tc3IodW5zaWduZWQgaW50IHJlZywgdWludDY0X3QgKnZh bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAq Y3R4dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4 dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7CisgICAgY29uc3Qgc3RydWN0IHZjcHUgKmN1 cnIgPSBjdXJyZW50OworICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9t YWluOworICAgIGJvb2wgdnBtdV9tc3IgPSBmYWxzZTsKKworICAgIHN3aXRjaCAoIHJlZyApCisg ICAgeworICAgICAgICBpbnQgcmM7CisKKyAgICBjYXNlIE1TUl9GU19CQVNFOgorICAgICAgICBp ZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICp2YWwgPSBjcHVfaGFzX2ZzZ3NiYXNlID8gX19yZGZzYmFzZSgpIDogY3Vyci0+YXJjaC5w dl92Y3B1LmZzX2Jhc2U7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNl IE1TUl9HU19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBjcHVfaGFzX2ZzZ3NiYXNlID8gX19y ZGdzYmFzZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3Vyci0+YXJjaC5w dl92Y3B1LmdzX2Jhc2Vfa2VybmVsOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisg ICAgY2FzZSBNU1JfU0hBRE9XX0dTX0JBU0U6CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9t YWluKGN1cnJkKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKnZhbCA9IGN1cnItPmFy Y2gucHZfdmNwdS5nc19iYXNlX3VzZXI7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisK KyAgICAvKgorICAgICAqIEluIG9yZGVyIHRvIGZ1bGx5IHJldGFpbiBvcmlnaW5hbCBiZWhhdmlv ciwgZGVmZXIgY2FsbGluZworICAgICAqIHB2X3NvZnRfcmR0c2MoKSB1bnRpbCBhZnRlciBlbXVs YXRpb24uIFRoaXMgbWF5IHdhbnQvbmVlZCB0byBiZQorICAgICAqIHJlY29uc2lkZXJlZC4KKyAg ICAgKi8KKyAgICBjYXNlIE1TUl9JQTMyX1RTQzoKKyAgICAgICAgcG9jLT50c2MgfD0gVFNDX0JB U0U7CisgICAgICAgIGdvdG8gbm9ybWFsOworCisgICAgY2FzZSBNU1JfVFNDX0FVWDoKKyAgICAg ICAgcG9jLT50c2MgfD0gVFNDX0FVWDsKKyAgICAgICAgaWYgKCBjcHVfaGFzX3JkdHNjcCApCisg ICAgICAgICAgICBnb3RvIG5vcm1hbDsKKyAgICAgICAgKnZhbCA9IDA7CisgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9FRkVSOgorICAgICAgICAqdmFsID0gcmVh ZF9lZmVyKCk7CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCisgICAg ICAgICAgICAqdmFsICY9IH4oRUZFUl9MTUUgfCBFRkVSX0xNQSB8IEVGRVJfTE1TTEUpOworICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9DVEw6 CisgICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVM6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRF X0xJTUlUOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURV9DVFJMOgorICAgIGNhc2UgTVNSX0s4X1BT VEFURV9TVEFUVVM6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFMDoKKyAgICBjYXNlIE1TUl9LOF9Q U1RBVEUxOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTI6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRF MzoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEU0OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTU6Cisg ICAgY2FzZSBNU1JfSzhfUFNUQVRFNjoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEU3OgorICAgICAg ICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCApCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCB1bmxpa2VseShpc19jcHVmcmVxX2NvbnRyb2xs ZXIoY3VycmQpKSApCisgICAgICAgICAgICBnb3RvIG5vcm1hbDsKKyAgICAgICAgKnZhbCA9IDA7 CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9JQTMyX1VDT0RF X1JFVjoKKyAgICAgICAgQlVJTERfQlVHX09OKE1TUl9JQTMyX1VDT0RFX1JFViAhPSBNU1JfQU1E X1BBVENITEVWRUwpOworICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBY ODZfVkVORE9SX0lOVEVMICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB3cm1zcl9zYWZl KE1TUl9JQTMyX1VDT0RFX1JFViwgMCkgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgLyogQXMgZG9jdW1lbnRlZCBpbiB0aGUgU0RNOiBEbyBhIENQVUlEIDEgaGVyZSAqLwor ICAgICAgICAgICAgY3B1aWRfZWF4KDEpOworICAgICAgICB9CisgICAgICAgIGdvdG8gbm9ybWFs OworCisgICAgY2FzZSBNU1JfSUEzMl9NSVNDX0VOQUJMRToKKyAgICAgICAgaWYgKCByZG1zcl9z YWZlKHJlZywgKnZhbCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBndWVz dF9taXNjX2VuYWJsZSgqdmFsKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAg IGNhc2UgTVNSX0FNRDY0X0RSMF9BRERSRVNTX01BU0s6CisgICAgICAgIGlmICggIWJvb3RfY3B1 X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICp2 YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1swXTsKKyAgICAgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgLi4uIE1TUl9B TUQ2NF9EUjNfQUREUkVTU19NQVNLOgorICAgICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZF QVRVUkVfREJFWFQpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAqdmFsID0gY3Vyci0+ YXJjaC5wdl92Y3B1LmRyX21hc2tbcmVnIC0gTVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgKyAx XTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0lBMzJfUEVS Rl9DQVBBQklMSVRJRVM6CisgICAgICAgIC8qIE5vIGV4dHJhIGNhcGFiaWxpdGllcyBhcmUgc3Vw cG9ydGVkLiAqLworICAgICAgICAqdmFsID0gMDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKKworICAgIGNhc2UgTVNSX0lOVEVMX1BMQVRGT1JNX0lORk86CisgICAgICAgIGlmICggYm9v dF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwKKyAgICAgICAgICAg ICByZG1zcl9zYWZlKE1TUl9JTlRFTF9QTEFURk9STV9JTkZPLCAqdmFsKSApCisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgKnZhbCA9IDA7CisgICAgICAgIGlmICggdGhpc19jcHUoY3B1aWRf ZmF1bHRpbmdfZW5hYmxlZCkgKQorICAgICAgICAgICAgKnZhbCB8PSBNU1JfUExBVEZPUk1fSU5G T19DUFVJRF9GQVVMVElORzsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNh c2UgTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNfRU5BQkxFUzoKKyAgICAgICAgaWYgKCBib290X2Nw dV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAorICAgICAgICAgICAgIHJk bXNyX3NhZmUoTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNfRU5BQkxFUywgKnZhbCkgKQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICp2YWwgPSAwOworICAgICAgICBpZiAoIGN1cnItPmFyY2gu Y3B1aWRfZmF1bHRpbmcgKQorICAgICAgICAgICAgKnZhbCB8PSBNU1JfTUlTQ19GRUFUVVJFU19D UFVJRF9GQVVMVElORzsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2Ug TVNSX1A2X1BFUkZDVFIoMCkuLi5NU1JfUDZfUEVSRkNUUig3KToKKyAgICBjYXNlIE1TUl9QNl9F Vk5UU0VMKDApLi4uTVNSX1A2X0VWTlRTRUwoMyk6CisgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJ WEVEX0NUUjAuLi5NU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6CisgICAgY2FzZSBNU1JfQ09SRV9Q RVJGX0ZJWEVEX0NUUl9DVFJMLi4uTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CisgICAg ICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQor ICAgICAgICB7CisgICAgICAgICAgICB2cG11X21zciA9IHRydWU7CisgICAgICAgICAgICAvKiBm YWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE1TUl9BTURfRkFNMTVIX0VWTlRTRUwwLi4uTVNSX0FN RF9GQU0xNUhfUEVSRkNUUjU6CisgICAgY2FzZSBNU1JfSzdfRVZOVFNFTDAuLi5NU1JfSzdfUEVS RkNUUjM6CisgICAgICAgICAgICBpZiAoIHZwbXVfbXNyIHx8IChib290X2NwdV9kYXRhLng4Nl92 ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBpZiAoIHZwbXVfZG9fcmRtc3IocmVnLCB2YWwpICkKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAg ICAgICBpZiAoIHJkbXNyX2h5cGVydmlzb3JfcmVncyhyZWcsIHZhbCkgKQorICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgICAgICByYyA9IHZtY2VfcmRtc3IocmVnLCB2YWwp OworICAgICAgICBpZiAoIHJjIDwgMCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg KCByYyApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICAvKiBmYWxs IHRocm91Z2ggKi8KKyAgICBub3JtYWw6CisgICAgICAgIC8qIEV2ZXJ5b25lIGNhbiByZWFkIHRo ZSBNU1Igc3BhY2UuICovCisgICAgICAgIC8qIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRG9t YWluIGF0dGVtcHRlZCBSRE1TUiAlMDh4XG4iLCByZWcpOyAqLworICAgICAgICBpZiAoIHJkbXNy X3NhZmUocmVnLCAqdmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9 CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9tc3IodW5zaWduZWQgaW50IHJlZywgdWludDY0 X3QgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgY29u c3Qgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgYm9vbCB2cG11X21z ciA9IGZhbHNlOworCisgICAgc3dpdGNoICggcmVnICkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90 IHRlbXA7CisgICAgICAgIGludCByYzsKKworICAgIGNhc2UgTVNSX0ZTX0JBU0U6CisgICAgICAg IGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSB8fCAhaXNfY2Fub25pY2FsX2FkZHJlc3Mo dmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgd3Jmc2Jhc2UodmFsKTsKKyAgICAg ICAgY3Vyci0+YXJjaC5wdl92Y3B1LmZzX2Jhc2UgPSB2YWw7CisgICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9HU19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nhbm9uaWNhbF9hZGRyZXNzKHZhbCkgKQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIHdyZ3NiYXNlKHZhbCk7CisgICAgICAgIGN1cnItPmFyY2gu cHZfdmNwdS5nc19iYXNlX2tlcm5lbCA9IHZhbDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKKworICAgIGNhc2UgTVNSX1NIQURPV19HU19CQVNFOgorICAgICAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nhbm9uaWNhbF9hZGRyZXNzKHZhbCkgKQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIHdybXNybChNU1JfU0hBRE9XX0dTX0JBU0UsIHZhbCk7Cisg ICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5nc19iYXNlX3VzZXIgPSB2YWw7CisgICAgICAgIHJl dHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9LN19GSURfVklEX1NUQVRVUzoKKyAg ICBjYXNlIE1TUl9LN19GSURfVklEX0NUTDoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEVfTElNSVQ6 CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX0NUUkw6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX1NU QVRVUzoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEUwOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTE6 CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFMjoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEUzOgorICAg IGNhc2UgTVNSX0s4X1BTVEFURTQ6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFNToKKyAgICBjYXNl IE1TUl9LOF9QU1RBVEU2OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTc6CisgICAgY2FzZSBNU1Jf SzhfSFdDUjoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZF TkRPUl9BTUQgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggbGlrZWx5KCFpc19j cHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSB8fAorICAgICAgICAgICAgIHdybXNyX3NhZmUocmVn LCB2YWwpID09IDAgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIE1TUl9BTUQ2NF9OQl9DRkc6CisgICAgICAgIGlmICggYm9vdF9j cHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8CisgICAgICAgICAgICAgYm9v dF9jcHVfZGF0YS54ODYgPCAweDEwIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxNyApCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8 fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKKyAgICAgICAgaWYgKCAocmRtc3Jfc2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCB0ZW1wKSAhPSAw KSB8fAorICAgICAgICAgICAgICgodmFsIF4gdGVtcCkgJiB+KDFVTEwgPDwgQU1ENjRfTkJfQ0ZH X0NGOF9FWFRfRU5BQkxFX0JJVCkpICkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAg ICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9BTUQ2NF9OQl9DRkcsIHZhbCkgPT0gMCApCisgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTVNS X0ZBTTEwSF9NTUlPX0NPTkZfQkFTRToKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92 ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKKyAgICAgICAgICAgICBib290X2NwdV9kYXRhLng4 NiA8IDB4MTAgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDE3ICkKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpIHx8ICFpc19waW5uZWRf dmNwdShjdXJyKSApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBp ZiAoIHJkbXNyX3NhZmUoTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRSwgdGVtcCkgIT0gMCApCisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCAocGNpX3Byb2JlICYgUENJX1BST0JFX01B U0spID09IFBDSV9QUk9CRV9NTUNPTkYgPworICAgICAgICAgICAgIHRlbXAgIT0gdmFsIDoKKyAg ICAgICAgICAgICAoKHRlbXAgXiB2YWwpICYKKyAgICAgICAgICAgICAgfihGQU0xMEhfTU1JT19D T05GX0VOQUJMRSB8CisgICAgICAgICAgICAgICAgKEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0Vf TUFTSyA8PAorICAgICAgICAgICAgICAgICBGQU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX1NISUZU KSB8CisgICAgICAgICAgICAgICAgKCh1NjQpRkFNMTBIX01NSU9fQ09ORl9CQVNFX01BU0sgPDwK KyAgICAgICAgICAgICAgICAgRkFNMTBIX01NSU9fQ09ORl9CQVNFX1NISUZUKSkpICkKKyAgICAg ICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9GQU0xMEhf TU1JT19DT05GX0JBU0UsIHZhbCkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorICAg ICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMICkK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3Vy cmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCB0ZW1wKSApCisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgaWYgKCB2YWwgKQorICAgICAgICAgICAgZ290byBpbnZhbGlkOwor ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfSUEzMl9NSVNDX0VO QUJMRToKKyAgICAgICAgaWYgKCByZG1zcl9zYWZlKHJlZywgdGVtcCkgKQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGlmICggdmFsICE9IGd1ZXN0X21pc2NfZW5hYmxlKHRlbXApICkKKyAg ICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKwor ICAgIGNhc2UgTVNSX0lBMzJfTVBFUkY6CisgICAgY2FzZSBNU1JfSUEzMl9BUEVSRjoKKyAgICAg ICAgaWYgKCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpICYm CisgICAgICAgICAgICAgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FN RCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggbGlrZWx5KCFpc19jcHVmcmVx X2NvbnRyb2xsZXIoY3VycmQpKSB8fAorICAgICAgICAgICAgIHdybXNyX3NhZmUocmVnLCB2YWwp ID09IDAgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIE1TUl9JQTMyX1BFUkZfQ1RMOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2Rh dGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMICkKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBpZiAoIGxpa2VseSghaXNfY3B1ZnJlcV9jb250cm9sbGVyKGN1cnJkKSkgfHwKKyAg ICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywgdmFsKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNU1JfSUEzMl9USEVS TV9DT05UUk9MOgorICAgIGNhc2UgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUzoKKyAgICAgICAg aWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCApCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8 fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgfHwKKyAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywg dmFsKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBNU1JfQU1ENjRfRFIwX0FERFJFU1NfTUFTSzoKKyAgICAgICAgaWYg KCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSB8fCAodmFsID4+IDMyKSApCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbMF0gPSB2 YWw7CisgICAgICAgIGlmICggY3Vyci0+YXJjaC5kZWJ1Z3JlZ1s3XSAmIERSN19BQ1RJVkVfTUFT SyApCisgICAgICAgICAgICB3cm1zcmwoTVNSX0FNRDY0X0RSMF9BRERSRVNTX01BU0ssIHZhbCk7 CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9BTUQ2NF9EUjFf QUREUkVTU19NQVNLIC4uLiBNU1JfQU1ENjRfRFIzX0FERFJFU1NfTUFTSzoKKyAgICAgICAgaWYg KCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSB8fCAodmFsID4+IDMyKSApCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbcmVnIC0g TVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgKyAxXSA9IHZhbDsKKyAgICAgICAgaWYgKCBjdXJy LT5hcmNoLmRlYnVncmVnWzddICYgRFI3X0FDVElWRV9NQVNLICkKKyAgICAgICAgICAgIHdybXNy bChyZWcsIHZhbCk7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1T Ul9JTlRFTF9QTEFURk9STV9JTkZPOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3Zl bmRvciAhPSBYODZfVkVORE9SX0lOVEVMIHx8CisgICAgICAgICAgICAgdmFsIHx8IHJkbXNyX3Nh ZmUoTVNSX0lOVEVMX1BMQVRGT1JNX0lORk8sIHZhbCkgKQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9JTlRFTF9NSVNDX0ZF QVRVUkVTX0VOQUJMRVM6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9 IFg4Nl9WRU5ET1JfSU5URUwgfHwKKyAgICAgICAgICAgICAodmFsICYgfk1TUl9NSVNDX0ZFQVRV UkVTX0NQVUlEX0ZBVUxUSU5HKSB8fAorICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVM X01JU0NfRkVBVFVSRVNfRU5BQkxFUywgdGVtcCkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGlmICggKHZhbCAmIE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HKSAmJgorICAg ICAgICAgICAgICF0aGlzX2NwdShjcHVpZF9mYXVsdGluZ19lbmFibGVkKSApCisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY3Vyci0+YXJjaC5jcHVpZF9mYXVsdGluZyA9ICEhKHZhbCAmIE1T Ul9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKKworICAgIGNhc2UgTVNSX1A2X1BFUkZDVFIoMCkuLi5NU1JfUDZfUEVSRkNUUig3KToK KyAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDApLi4uTVNSX1A2X0VWTlRTRUwoMyk6CisgICAgY2Fz ZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAuLi5NU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6Cisg ICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLi4uTVNSX0NPUkVfUEVSRl9HTE9C QUxfT1ZGX0NUUkw6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4 Nl9WRU5ET1JfSU5URUwgKQorICAgICAgICB7CisgICAgICAgICAgICB2cG11X21zciA9IHRydWU7 CisgICAgY2FzZSBNU1JfQU1EX0ZBTTE1SF9FVk5UU0VMMC4uLk1TUl9BTURfRkFNMTVIX1BFUkZD VFI1OgorICAgIGNhc2UgTVNSX0s3X0VWTlRTRUwwLi4uTVNSX0s3X1BFUkZDVFIzOgorICAgICAg ICAgICAgaWYgKCB2cG11X21zciB8fCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9W RU5ET1JfQU1EKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCAodnBtdV9t b2RlICYgWEVOUE1VX01PREVfQUxMKSAmJgorICAgICAgICAgICAgICAgICAgICAgIWlzX2hhcmR3 YXJlX2RvbWFpbihjdXJyZCkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOworCisgICAgICAgICAgICAgICAgaWYgKCB2cG11X2RvX3dybXNyKHJlZywgdmFsLCAwKSAp CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogZmFsbCB0aHJv dWdoICovCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCB3cm1zcl9oeXBlcnZpc29yX3JlZ3Mo cmVnLCB2YWwpID09IDEgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAg ICAgICByYyA9IHZtY2Vfd3Jtc3IocmVnLCB2YWwpOworICAgICAgICBpZiAoIHJjIDwgMCApCisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworCisgICAgICAgIGlmICggKHJkbXNyX3NhZmUocmVnLCB0ZW1wKSAhPSAw KSB8fCAodmFsICE9IHRlbXApICkKKyAgICBpbnZhbGlkOgorICAgICAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiRG9tYWluIGF0dGVtcHRlZCBX Uk1TUiAlMDh4IGZyb20gMHglMDE2IlBSSXg2NCIgdG8gMHglMDE2IlBSSXg2NCJcbiIsCisgICAg ICAgICAgICAgICAgICAgICByZWcsIHRlbXAsIHZhbCk7CisgICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitz dGF0aWMgaW50IHByaXZfb3Bfd2JpbnZkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQor eworICAgIC8qIElnbm9yZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgdW5wcml2aWxlZ2VkLiAqLworICAg IGlmICggIWNhY2hlX2ZsdXNoX3Blcm1pdHRlZChjdXJyZW50LT5kb21haW4pICkKKyAgICAgICAg LyoKKyAgICAgICAgICogTm9uLXBoeXNkZXYgZG9tYWluIGF0dGVtcHRlZCBXQklOVkQ7IGlnbm9y ZSBmb3Igbm93IHNpbmNlCisgICAgICAgICAqIG5ld2VyIGxpbnV4IHVzZXMgdGhpcyBpbiBzb21l IHN0YXJ0LW9mLWRheSB0aW1pbmcgbG9vcHMuCisgICAgICAgICAqLworICAgICAgICA7CisgICAg ZWxzZQorICAgICAgICB3YmludmQoKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisK K2ludCBwdl9lbXVsX2NwdWlkKHVpbnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsCisgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgY3B1aWRfbGVhZiAqcmVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkKK3sKKyAgICBndWVzdF9jcHVpZChjdXJyZW50LCBsZWFmLCBzdWJsZWFmLCBy ZXMpOworCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwcml2X29w X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9zdGF0ZSAqc3RhdGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7Cisg ICAgc3dpdGNoICggY3R4dC0+b3Bjb2RlICkKKyAgICB7CisgICAgY2FzZSAweDZjIC4uLiAweDZm OiAvKiBpbnMgLyBvdXRzICovCisgICAgY2FzZSAweGU0IC4uLiAweGU3OiAvKiBpbiAvIG91dCAo aW1tZWRpYXRlIHBvcnQpICovCisgICAgY2FzZSAweGVjIC4uLiAweGVmOiAvKiBpbiAvIG91dCAo cG9ydCBpbiAlZHgpICovCisgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDA2KTogLyogY2x0 cyAqLworICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwOSk6IC8qIHdiaW52ZCAqLworICAg IGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgyMCkgLi4uCisgICAgICAgICBYODZFTVVMX09QQygw eDBmLCAweDIzKTogLyogbW92IHRvL2Zyb20gY3IvZHIgKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BD KDB4MGYsIDB4MzApOiAvKiB3cm1zciAqLworICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgz MSk6IC8qIHJkdHNjICovCisgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDMyKTogLyogcmRt c3IgKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4YTIpOiAvKiBjcHVpZCAqLworICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSAweGZhOiBjYXNlIDB4ZmI6IC8q IGNsaSAvIHN0aSAqLworICAgICAgICBpZiAoICFpb3BsX29rKGN1cnJlbnQsIGN0eHQtPnJlZ3Mp ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGp1 c3QgdG9vIGRhbmdlcm91cyB0byBhbGxvdywgaW4gbXkgb3Bpbmlvbi4gQ29uc2lkZXIgaWYgdGhl CisgICAgICAgICAqIGNhbGxlciB0aGVuIHRyaWVzIHRvIHJlZW5hYmxlIGludGVycnVwdHMgdXNp bmcgUE9QRjogd2UgY2FuJ3QgdHJhcAorICAgICAgICAgKiB0aGF0IGFuZCB3ZSdsbCBlbmQgdXAg d2l0aCBoYXJkLXRvLWRlYnVnIGxvY2t1cHMuIEZhc3QgJiBsb29zZSB3aWxsCisgICAgICAgICAq IGRvIGZvciB1cy4gOi0pCisgICAgICAgIHZjcHVfaW5mbyhjdXJyZW50LCBldnRjaG5fdXBjYWxs X21hc2spID0gKGN0eHQtPm9wY29kZSA9PSAweGZhKTsKKyAgICAgICAgICovCisgICAgICAgIHJl dHVybiBYODZFTVVMX0RPTkU7CisKKyAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MDEpOgor ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IG1vZHJtX3JtLCBtb2RybV9yZWc7CisKKyAgICAg ICAgaWYgKCB4ODZfaW5zbl9tb2RybShzdGF0ZSwgJm1vZHJtX3JtLCAmbW9kcm1fcmVnKSAhPSAz IHx8CisgICAgICAgICAgICAgKG1vZHJtX3JtICYgNykgIT0gMSApCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgc3dpdGNoICggbW9kcm1fcmVnICYgNyApCisgICAgICAgIHsKKyAgICAgICAg Y2FzZSAyOiAvKiB4c2V0YnYgKi8KKyAgICAgICAgY2FzZSA3OiAvKiByZHRzY3AgKi8KKyAgICAg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIH0KKworICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKK30KKworc3Rh dGljIGludCBwcml2X29wX2luc25fZmV0Y2goZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIGNvbnN0IHN0cnVjdCBwcml2 X29wX2N0eHQgKnBvYyA9CisgICAgICAgIGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9v cF9jdHh0LCBjdHh0KTsKKyAgICB1bnNpZ25lZCBpbnQgcmM7CisgICAgdW5zaWduZWQgbG9uZyBh ZGRyID0gcG9jLT5jcy5iYXNlICsgb2Zmc2V0OworCisgICAgQVNTRVJUKHNlZyA9PSB4ODZfc2Vn X2NzKTsKKworICAgIC8qIFdlIGRvbid0IG1lYW4gdG8gZW11bGF0ZSBhbnkgYnJhbmNoZXMuICov CisgICAgaWYgKCAhYnl0ZXMgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7 CisKKyAgICByYyA9IHB2X2VtdWxfdmlydF90b19saW5lYXIocG9jLT5jcy5iYXNlLCBvZmZzZXQs IGJ5dGVzLCBwb2MtPmNzLmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4 ODZfc2VnX2NzLCBjdHh0LCAmYWRkcik7CisgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQor ICAgICAgICByZXR1cm4gcmM7CisKKyAgICBpZiAoIChyYyA9IF9fY29weV9mcm9tX3VzZXIocF9k YXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzKSkgIT0gMCApCisgICAgeworICAgICAgICAvKgorICAg ICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZCByZXBvcnQgUEZFQ19pbnNuX2ZldGNoIHdoZW4gZ29j LT5pbnNuX2ZldGNoICYmCisgICAgICAgICAqIGNwdV9oYXNfbngsIGJ1dCB3ZSdkIHRoZW4gbmVl ZCBhICJmZXRjaCIgdmFyaWFudCBvZgorICAgICAgICAgKiBfX2NvcHlfZnJvbV91c2VyKCkgcmVz cGVjdGluZyBOWCwgU01FUCwgYW5kIHByb3RlY3Rpb24ga2V5cy4KKyAgICAgICAgICovCisgICAg ICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7CisgICAg ICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHByaXZf b3Bfb3BzID0geworICAgIC5pbnNuX2ZldGNoICAgICAgICAgID0gcHJpdl9vcF9pbnNuX2ZldGNo LAorICAgIC5yZWFkICAgICAgICAgICAgICAgID0geDg2ZW11bF91bmhhbmRsZWFibGVfcncsCisg ICAgLnZhbGlkYXRlICAgICAgICAgICAgPSBwcml2X29wX3ZhbGlkYXRlLAorICAgIC5yZWFkX2lv ICAgICAgICAgICAgID0gcHJpdl9vcF9yZWFkX2lvLAorICAgIC53cml0ZV9pbyAgICAgICAgICAg ID0gcHJpdl9vcF93cml0ZV9pbywKKyAgICAucmVwX2lucyAgICAgICAgICAgICA9IHByaXZfb3Bf cmVwX2lucywKKyAgICAucmVwX291dHMgICAgICAgICAgICA9IHByaXZfb3BfcmVwX291dHMsCisg ICAgLnJlYWRfc2VnbWVudCAgICAgICAgPSBwcml2X29wX3JlYWRfc2VnbWVudCwKKyAgICAucmVh ZF9jciAgICAgICAgICAgICA9IHByaXZfb3BfcmVhZF9jciwKKyAgICAud3JpdGVfY3IgICAgICAg ICAgICA9IHByaXZfb3Bfd3JpdGVfY3IsCisgICAgLnJlYWRfZHIgICAgICAgICAgICAgPSBwcml2 X29wX3JlYWRfZHIsCisgICAgLndyaXRlX2RyICAgICAgICAgICAgPSBwcml2X29wX3dyaXRlX2Ry LAorICAgIC5yZWFkX21zciAgICAgICAgICAgID0gcHJpdl9vcF9yZWFkX21zciwKKyAgICAud3Jp dGVfbXNyICAgICAgICAgICA9IHByaXZfb3Bfd3JpdGVfbXNyLAorICAgIC5jcHVpZCAgICAgICAg ICAgICAgID0gcHZfZW11bF9jcHVpZCwKKyAgICAud2JpbnZkICAgICAgICAgICAgICA9IHByaXZf b3Bfd2JpbnZkLAorfTsKKworaW50IGVtdWxhdGVfcHJpdmlsZWdlZF9vcChzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAg c3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgc3RydWN0IHByaXZfb3Bf Y3R4dCBjdHh0ID0geworICAgICAgICAuY3R4dC5yZWdzID0gcmVncywKKyAgICAgICAgLmN0eHQu dmVuZG9yID0gY3VycmQtPmFyY2guY3B1aWQtPng4Nl92ZW5kb3IsCisgICAgICAgIC5jdHh0Lmxt YSA9ICFpc19wdl8zMmJpdF9kb21haW4oY3VycmQpLAorICAgIH07CisgICAgaW50IHJjOworICAg IHVuc2lnbmVkIGludCBlZmxhZ3MsIGFyOworCisgICAgaWYgKCAhcmVhZF9kZXNjcmlwdG9yKHJl Z3MtPmNzLCBjdXJyLCAmY3R4dC5jcy5iYXNlLCAmY3R4dC5jcy5saW1pdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgJmFyLCAxKSB8fAorICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8 CisgICAgICAgICAhKGFyICYgX1NFR01FTlRfUCkgfHwKKyAgICAgICAgICEoYXIgJiBfU0VHTUVO VF9DT0RFKSApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogTWlycm9yIHZpcnR1YWxpemVk IHN0YXRlIGludG8gRUZMQUdTLiAqLworICAgIEFTU0VSVChyZWdzLT5lZmxhZ3MgJiBYODZfRUZM QUdTX0lGKTsKKyAgICBpZiAoIHZjcHVfaW5mbyhjdXJyLCBldnRjaG5fdXBjYWxsX21hc2spICkK KyAgICAgICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOworICAgIGVsc2UKKyAgICAg ICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7CisgICAgQVNTRVJUKCEocmVncy0+ZWZs YWdzICYgWDg2X0VGTEFHU19JT1BMKSk7CisgICAgcmVncy0+ZWZsYWdzIHw9IGN1cnItPmFyY2gu cHZfdmNwdS5pb3BsOworICAgIGVmbGFncyA9IHJlZ3MtPmVmbGFnczsKKworICAgIGN0eHQuY3R4 dC5hZGRyX3NpemUgPSBhciAmIF9TRUdNRU5UX0wgPyA2NCA6IGFyICYgX1NFR01FTlRfREIgPyAz MiA6IDE2OworICAgIC8qIExlYXZlIHplcm8gaW4gY3R4dC5jdHh0LnNwX3NpemUsIGFzIGl0J3Mg bm90IG5lZWRlZC4gKi8KKyAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LmN0eHQsICZwcml2X29w X29wcyk7CisKKyAgICBpZiAoIGN0eHQuaW9fZW11bF9zdHViICkKKyAgICAgICAgdW5tYXBfZG9t YWluX3BhZ2UoY3R4dC5pb19lbXVsX3N0dWIpOworCisgICAgLyoKKyAgICAgKiBVbi1taXJyb3Ig dmlydHVhbGl6ZWQgc3RhdGUgZnJvbSBFRkxBR1MuCisgICAgICogTm90aGluZyB3ZSBhbGxvdyB0 byBiZSBlbXVsYXRlZCBjYW4gY2hhbmdlIGFueXRoaW5nIG90aGVyIHRoYW4gdGhlCisgICAgICog YXJpdGhtZXRpYyBiaXRzLCBhbmQgdGhlIHJlc3VtZSBmbGFnLgorICAgICAqLworICAgIEFTU0VS VCghKChyZWdzLT5lZmxhZ3MgXiBlZmxhZ3MpICYKKyAgICAgICAgICAgICB+KFg4Nl9FRkxBR1Nf UkYgfCBYODZfRUZMQUdTX0FSSVRIX01BU0spKSk7CisgICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9F RkxBR1NfSUY7CisgICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lPUEw7CisKKyAgICBz d2l0Y2ggKCByYyApCisgICAgeworICAgIGNhc2UgWDg2RU1VTF9PS0FZOgorICAgICAgICBpZiAo IGN0eHQudHNjICYgVFNDX0JBU0UgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGN0eHQu dHNjICYgVFNDX0FVWCApCisgICAgICAgICAgICAgICAgcHZfc29mdF9yZHRzYyhjdXJyLCByZWdz LCAxKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBjdXJyZC0+YXJjaC52dHNjICkKKyAgICAgICAg ICAgICAgICBwdl9zb2Z0X3JkdHNjKGN1cnIsIHJlZ3MsIDApOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIG1zcl9zcGxpdChyZWdzLCByZHRzYygpKTsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICggY3R4dC5jdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIGN0 eHQuYnBtYXRjaCB8PSBEUl9TVEVQOworICAgICAgICBpZiAoIGN0eHQuYnBtYXRjaCApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGN1cnItPmFyY2guZGVidWdyZWdbNl0gfD0gY3R4dC5icG1hdGNo IHwgRFJfU1RBVFVTX1JFU0VSVkVEX09ORTsKKyAgICAgICAgICAgIGlmICggIShjdXJyLT5hcmNo LnB2X3ZjcHUudHJhcF9ib3VuY2UuZmxhZ3MgJiBUQkZfRVhDRVBUSU9OKSApCisgICAgICAgICAg ICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMp OworICAgICAgICB9CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1V TF9SRVRSWToKKyAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKKworICAgIGNhc2Ug WDg2RU1VTF9FWENFUFRJT046CisgICAgICAgIHB2X2luamVjdF9ldmVudCgmY3R4dC5jdHh0LmV2 ZW50KTsKKyAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKKyAgICB9CisKKyAgICBy ZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMt ZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQK KyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4v YXJjaC94ODYveDg2XzY0L2dwcl9zd2l0Y2guUyBiL3hlbi9hcmNoL3g4Ni9wdi9ncHJfc3dpdGNo LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHhlbi9hcmNoL3g4Ni94ODZfNjQv Z3ByX3N3aXRjaC5TCnJlbmFtZSB0byB4ZW4vYXJjaC94ODYvcHYvZ3ByX3N3aXRjaC5TCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvdHJhcHMuYyBiL3hlbi9hcmNoL3g4Ni90cmFwcy5jCmluZGV4 IGNkOGNhMjAzOTguLmNkNDNlOWY0NGMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni90cmFwcy5j CisrKyBiL3hlbi9hcmNoL3g4Ni90cmFwcy5jCkBAIC03OCw2ICs3OCw4IEBACiAjaW5jbHVkZSA8 YXNtL2NwdWlkLmg+CiAjaW5jbHVkZSA8eHNtL3hzbS5oPgogCisjaW5jbHVkZSA8YXNtL3B2L3Ry YXBzLmg+CisKIC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9yZScsICdkb20wJywgb3IgJ2Zh dGFsJy4KICAqICBmYXRhbDogIFhlbiBwcmludHMgZGlhZ25vc3RpYyBtZXNzYWdlIGFuZCB0aGVu IGhhbmdzLgpAQCAtNzA1LDQxICs3MDcsNiBAQCBzdGF0aWMgdm9pZCBpbnN0cnVjdGlvbl9kb25l KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHJpcCkKICAgICB9CiB9 CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChzdHJ1Y3Qg dmNwdSAqdiwKLSAgICB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGxlbikKLXsKLSAg ICB1bnNpZ25lZCBpbnQgd2lkdGgsIGksIG1hdGNoID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIHN0 YXJ0OwotCi0gICAgaWYgKCAhKHYtPmFyY2guZGVidWdyZWdbNV0pIHx8Ci0gICAgICAgICAhKHYt PmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NSNF9ERSkgKQotICAgICAgICByZXR1cm4g MDsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgNDsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICgg ISh2LT5hcmNoLmRlYnVncmVnWzVdICYKLSAgICAgICAgICAgICAgICgzIDw8IChpICogRFJfRU5B QkxFX1NJWkUpKSkgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3RhcnQgPSB2 LT5hcmNoLmRlYnVncmVnW2ldOwotICAgICAgICB3aWR0aCA9IDA7Ci0KLSAgICAgICAgc3dpdGNo ICggKHYtPmFyY2guZGVidWdyZWdbN10gPj4KLSAgICAgICAgICAgICAgICAgIChEUl9DT05UUk9M X1NISUZUICsgaSAqIERSX0NPTlRST0xfU0laRSkpICYgMHhjICkKLSAgICAgICAgewotICAgICAg ICBjYXNlIERSX0xFTl8xOiB3aWR0aCA9IDE7IGJyZWFrOwotICAgICAgICBjYXNlIERSX0xFTl8y OiB3aWR0aCA9IDI7IGJyZWFrOwotICAgICAgICBjYXNlIERSX0xFTl80OiB3aWR0aCA9IDQ7IGJy ZWFrOwotICAgICAgICBjYXNlIERSX0xFTl84OiB3aWR0aCA9IDg7IGJyZWFrOwotICAgICAgICB9 Ci0KLSAgICAgICAgaWYgKCAoc3RhcnQgPCAocG9ydCArIGxlbikpICYmICgoc3RhcnQgKyB3aWR0 aCkgPiBwb3J0KSApCi0gICAgICAgICAgICBtYXRjaCB8PSAxIDw8IGk7Ci0gICAgfQotCi0gICAg cmV0dXJuIG1hdGNoOwotfQotCiAvKgogICogQ2FsbGVkIGZyb20gYXNtIHRvIHNldCB1cCB0aGUg TUNFIHRyYXBib3VuY2UgaW5mby4KICAqIFJldHVybnMgMCBpZiBubyBjYWxsYmFjayBpcyBzZXQg dXAsIGVsc2UgMS4KQEAgLTE3MzMsMTMyNyArMTcwMCw2IEBAIHN0YXRpYyBpbnQgcmVhZF9nYXRl X2Rlc2NyaXB0b3IodW5zaWduZWQgaW50IGdhdGVfc2VsLAogICAgIHJldHVybiAxOwogfQogCi1z dGF0aWMgaW50IHB2X2VtdWxfdmlydF90b19saW5lYXIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNp Z25lZCBsb25nIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgbGltaXQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLSAgICBpbnQg cmMgPSBYODZFTVVMX09LQVk7Ci0KLSAgICAqYWRkciA9IGJhc2UgKyBvZmZzZXQ7Ci0KLSAgICBp ZiAoIGN0eHQtPmFkZHJfc2l6ZSA8IDY0ICkKLSAgICB7Ci0gICAgICAgIGlmICggbGltaXQgPCBi eXRlcyAtIDEgfHwgb2Zmc2V0ID4gbGltaXQgLSBieXRlcyArIDEgKQotICAgICAgICAgICAgcmMg PSBYODZFTVVMX0VYQ0VQVElPTjsKLSAgICAgICAgKmFkZHIgPSAodWludDMyX3QpKmFkZHI7Ci0g ICAgfQotICAgIGVsc2UgaWYgKCAhX19hZGRyX29rKCphZGRyKSApCi0gICAgICAgIHJjID0gWDg2 RU1VTF9FWENFUFRJT047Ci0KLSAgICBpZiAoIHVubGlrZWx5KHJjID09IFg4NkVNVUxfRVhDRVBU SU9OKSApCi0gICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihzZWcgIT0geDg2X3NlZ19zcyA/ IFRSQVBfZ3BfZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogVFJBUF9zdGFja19lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsIGN0eHQpOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3QgcHJpdl9vcF9jdHh0IHsK LSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0OwotICAgIHN0cnVjdCB7Ci0gICAgICAg IHVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7Ci0gICAgfSBjczsKLSAgICBjaGFyICppb19lbXVs X3N0dWI7Ci0gICAgdW5zaWduZWQgaW50IGJwbWF0Y2g7Ci0gICAgdW5zaWduZWQgaW50IHRzYzsK LSNkZWZpbmUgVFNDX0JBU0UgMQotI2RlZmluZSBUU0NfQVVYIDIKLX07Ci0KLXN0YXRpYyBpbnQg cHJpdl9vcF9pbnNuX2ZldGNoKGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpwX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg eDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBjb25zdCBzdHJ1Y3QgcHJpdl9vcF9jdHh0 ICpwb2MgPQotICAgICAgICBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwg Y3R4dCk7Ci0gICAgdW5zaWduZWQgaW50IHJjOwotICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9IHBv Yy0+Y3MuYmFzZSArIG9mZnNldDsKLQotICAgIEFTU0VSVChzZWcgPT0geDg2X3NlZ19jcyk7Ci0K LSAgICAvKiBXZSBkb24ndCBtZWFuIHRvIGVtdWxhdGUgYW55IGJyYW5jaGVzLiAqLwotICAgIGlm ICggIWJ5dGVzICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotCi0gICAg cmMgPSBwdl9lbXVsX3ZpcnRfdG9fbGluZWFyKHBvYy0+Y3MuYmFzZSwgb2Zmc2V0LCBieXRlcywg cG9jLT5jcy5saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2X3NlZ19j cywgY3R4dCwgJmFkZHIpOwotICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKLSAgICAgICAg cmV0dXJuIHJjOwotCi0gICAgaWYgKCAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBfZGF0YSwgKHZv aWQgKilhZGRyLCBieXRlcykpICE9IDAgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICog VE9ETzogVGhpcyBzaG91bGQgcmVwb3J0IFBGRUNfaW5zbl9mZXRjaCB3aGVuIGdvYy0+aW5zbl9m ZXRjaCAmJgotICAgICAgICAgKiBjcHVfaGFzX254LCBidXQgd2UnZCB0aGVuIG5lZWQgYSAiZmV0 Y2giIHZhcmlhbnQgb2YKLSAgICAgICAgICogX19jb3B5X2Zyb21fdXNlcigpIHJlc3BlY3Rpbmcg TlgsIFNNRVAsIGFuZCBwcm90ZWN0aW9uIGtleXMuCi0gICAgICAgICAqLwotICAgICAgICB4ODZf ZW11bF9wYWdlZmF1bHQoMCwgYWRkciArIGJ5dGVzIC0gcmMsIGN0eHQpOwotICAgICAgICByZXR1 cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK LX0KLQotc3RhdGljIGludCBwcml2X29wX3JlYWRfc2VnbWVudChlbnVtIHg4Nl9zZWdtZW50IHNl ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0 ZXIgKnJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgLyogQ2hlY2sgaWYgdGhpcyBpcyBhbiBhdHRlbXB0IHRv IGFjY2VzcyB0aGUgSS9PIGJpdG1hcC4gKi8KLSAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX3RyICkK LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGN0eHQtPm9wY29kZSApCi0gICAgICAgIHsKLSAgICAg ICAgY2FzZSAweDZjIC4uLiAweDZmOiAvKiBpbnMgLyBvdXRzICovCi0gICAgICAgIGNhc2UgMHhl NCAuLi4gMHhlNzogLyogaW4gLyBvdXQgKGltbWVkaWF0ZSBwb3J0KSAqLwotICAgICAgICBjYXNl IDB4ZWMgLi4uIDB4ZWY6IC8qIGluIC8gb3V0IChwb3J0IGluICVkeCkgKi8KLSAgICAgICAgICAg IC8qIERlZmVyIHRoZSBjaGVjayB0byBwcml2X29wX3tyZWFkLHdyaXRlfV9pbygpLiAqLwotICAg ICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRE9ORTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm ICggY3R4dC0+YWRkcl9zaXplIDwgNjQgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBs aW1pdDsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlbCwgYXI7Ci0KLSAgICAgICAgc3dpdGNoICgg c2VnICkKLSAgICAgICAgewotICAgICAgICBjYXNlIHg4Nl9zZWdfY3M6IHNlbCA9IGN0eHQtPnJl Z3MtPmNzOyBicmVhazsKLSAgICAgICAgY2FzZSB4ODZfc2VnX2RzOiBzZWwgPSByZWFkX3NyZWco ZHMpOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19lczogc2VsID0gcmVhZF9zcmVnKGVz KTsgIGJyZWFrOwotICAgICAgICBjYXNlIHg4Nl9zZWdfZnM6IHNlbCA9IHJlYWRfc3JlZyhmcyk7 ICBicmVhazsKLSAgICAgICAgY2FzZSB4ODZfc2VnX2dzOiBzZWwgPSByZWFkX3NyZWcoZ3MpOyAg YnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19zczogc2VsID0gY3R4dC0+cmVncy0+c3M7IGJy ZWFrOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAg ICAgIH0KLQotICAgICAgICBpZiAoICFyZWFkX2Rlc2NyaXB0b3Ioc2VsLCBjdXJyZW50LCAmcmVn LT5iYXNlLCAmbGltaXQsICZhciwgMCkgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5I QU5ETEVBQkxFOwotCi0gICAgICAgIHJlZy0+bGltaXQgPSBsaW1pdDsKLSAgICAgICAgcmVnLT5h dHRyLmJ5dGVzID0gYXIgPj4gODsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc3dp dGNoICggc2VnICkKLSAgICAgICAgewotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYg KCAhaXNfeDg2X3VzZXJfc2VnbWVudChzZWcpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gWDg2 RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgICAgICAgICByZWctPmJhc2UgPSAwOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19mczoKLSAgICAgICAgICAgIHJlZy0+YmFz ZSA9IHJkZnNiYXNlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSB4ODZfc2Vn X2dzOgotICAgICAgICAgICAgcmVnLT5iYXNlID0gcmRnc2Jhc2UoKTsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnLT5saW1pdCA9IH4wVTsKLQotICAgICAgICBy ZWctPmF0dHIuYnl0ZXMgPSAwOwotICAgICAgICByZWctPmF0dHIuZmllbGRzLnR5cGUgPSBfU0VH TUVOVF9XUiA+PiA4OwotICAgICAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX2NzICkKLSAgICAgICAg ewotICAgICAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy50eXBlIHw9IF9TRUdNRU5UX0NPREUgPj4g ODsKLSAgICAgICAgICAgIHJlZy0+YXR0ci5maWVsZHMubCA9IDE7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5kYiA9IDE7Ci0gICAgICAgIHJl Zy0+YXR0ci5maWVsZHMucyAgID0gMTsKLSAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5kcGwgPSAz OwotICAgICAgICByZWctPmF0dHIuZmllbGRzLnAgICA9IDE7Ci0gICAgICAgIHJlZy0+YXR0ci5m aWVsZHMuZyAgID0gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZvciB4ODZfZW11bGF0ZS5j J3MgbW9kZV9yaW5nMCgpIHRvIHdvcmssIGZha2UgYSBEUEwgb2YgemVyby4KLSAgICAgKiBBbHNv IGRvIHRoaXMgZm9yIGNvbnNpc3RlbmN5IGZvciBub24tY29uZm9ybWluZyBjb2RlIHNlZ21lbnRz LgotICAgICAqLwotICAgIGlmICggKHNlZyA9PSB4ODZfc2VnX3NzIHx8Ci0gICAgICAgICAgKHNl ZyA9PSB4ODZfc2VnX2NzICYmCi0gICAgICAgICAgICEocmVnLT5hdHRyLmZpZWxkcy50eXBlICYg KF9TRUdNRU5UX0VDID4+IDgpKSkpICYmCi0gICAgICAgICBndWVzdF9rZXJuZWxfbW9kZShjdXJy ZW50LCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZHBsID0gMDsKLQot ICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLS8qIFBlcmZvcm0gSU9QTCBjaGVjayBiZXR3 ZWVuIHRoZSB2Y3B1J3Mgc2hhZG93ZWQgSU9QTCwgYW5kIHRoZSBhc3N1bWVkIGNwbC4gKi8KLXN0 YXRpYyBib29sX3QgaW9wbF9vayhjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgY29uc3Qgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgdW5zaWduZWQgaW50IGNwbCA9IGd1ZXN0X2tlcm5l bF9tb2RlKHYsIHJlZ3MpID8KLSAgICAgICAgKFZNX0FTU0lTVCh2LT5kb21haW4sIGFyY2hpdGVj dHVyYWxfaW9wbCkgPyAwIDogMSkgOiAzOwotCi0gICAgQVNTRVJUKCh2LT5hcmNoLnB2X3ZjcHUu aW9wbCAmIH5YODZfRUZMQUdTX0lPUEwpID09IDApOwotCi0gICAgcmV0dXJuIElPUEwoY3BsKSA8 PSB2LT5hcmNoLnB2X3ZjcHUuaW9wbDsKLX0KLQotLyogSGFzIHRoZSBndWVzdCByZXF1ZXN0ZWQg c3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCi1zdGF0aWMgaW50 IGd1ZXN0X2lvX29rYXkoCi0gICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRl cywKLSAgICBzdHJ1Y3QgdmNwdSAqdiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0g ICAgLyogSWYgaW4gdXNlciBtb2RlLCBzd2l0Y2ggdG8ga2VybmVsIG1vZGUganVzdCB0byByZWFk IEkvTyBiaXRtYXAuICovCi0gICAgaW50IHVzZXJfbW9kZSA9ICEodi0+YXJjaC5mbGFncyAmIFRG X2tlcm5lbF9tb2RlKTsKLSNkZWZpbmUgVE9HR0xFX01PREUoKSBpZiAoIHVzZXJfbW9kZSApIHRv Z2dsZV9ndWVzdF9tb2RlKHYpCi0KLSAgICBpZiAoIGlvcGxfb2sodiwgcmVncykgKQotICAgICAg ICByZXR1cm4gMTsKLQotICAgIGlmICggdi0+YXJjaC5wdl92Y3B1LmlvYm1wX2xpbWl0ID4gKHBv cnQgKyBieXRlcykgKQotICAgIHsKLSAgICAgICAgdW5pb24geyB1aW50OF90IGJ5dGVzWzJdOyB1 aW50MTZfdCBtYXNrOyB9IHg7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogR3JhYiBwZXJtaXNz aW9uIGJ5dGVzIGZyb20gZ3Vlc3Qgc3BhY2UuIEluYWNjZXNzaWJsZSBieXRlcyBhcmUKLSAgICAg ICAgICogcmVhZCBhcyAweGZmIChubyBhY2Nlc3MgYWxsb3dlZCkuCi0gICAgICAgICAqLwotICAg ICAgICBUT0dHTEVfTU9ERSgpOwotICAgICAgICBzd2l0Y2ggKCBfX2NvcHlfZnJvbV9ndWVzdF9v ZmZzZXQoeC5ieXRlcywgdi0+YXJjaC5wdl92Y3B1LmlvYm1wLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD4+MywgMikgKQotICAgICAgICB7Ci0gICAgICAg IGRlZmF1bHQ6IHguYnl0ZXNbMF0gPSB+MDsKLSAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICov Ci0gICAgICAgIGNhc2UgMTogIHguYnl0ZXNbMV0gPSB+MDsKLSAgICAgICAgICAgIC8qIGZhbGx0 aHJvdWdoICovCi0gICAgICAgIGNhc2UgMDogIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFRP R0dMRV9NT0RFKCk7Ci0KLSAgICAgICAgaWYgKCAoeC5tYXNrICYgKCgoMTw8Ynl0ZXMpLTEpIDw8 IChwb3J0JjcpKSkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotLyogSGFzIHRoZSBhZG1pbmlzdHJhdG9yIGdyYW50ZWQgc3VmZmljaWVu dCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ICovCi1zdGF0aWMgYm9vbF90IGFkbWlu X2lvX29rYXkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIC8qCi0g ICAgICogUG9ydCAweGNmOCAoQ09ORklHX0FERFJFU1MpIGlzIG9ubHkgdmlzaWJsZSBmb3IgRFdP UkQgYWNjZXNzZXMuCi0gICAgICogV2UgbmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhh dCByZWdpc3Rlci4KLSAgICAgKi8KLSAgICBpZiAoIChwb3J0ID09IDB4Y2Y4KSAmJiAoYnl0ZXMg PT0gNCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFdlIGFsc28gbmV2ZXIgcGVybWl0 IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFJUQy9DTU9TIHJlZ2lzdGVycy4gKi8KLSAgICBpZiAoICgo cG9ydCAmIH4xKSA9PSBSVENfUE9SVCgwKSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl dHVybiBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoZCwgcG9ydCwgcG9ydCArIGJ5dGVzIC0gMSk7 Ci19Ci0KLXN0YXRpYyBib29sX3QgcGNpX2NmZ19vayhzdHJ1Y3QgZG9tYWluICpjdXJyZCwgdW5z aWduZWQgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz aXplLCB1aW50MzJfdCAqd3JpdGUpCi17Ci0gICAgdWludDMyX3QgbWFjaGluZV9iZGY7Ci0KLSAg ICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0K LSAgICBpZiAoICFDRjhfRU5BQkxFRChjdXJyZC0+YXJjaC5wY2lfY2Y4KSApCi0gICAgICAgIHJl dHVybiAxOwotCi0gICAgbWFjaGluZV9iZGYgPSBDRjhfQkRGKGN1cnJkLT5hcmNoLnBjaV9jZjgp OwotICAgIGlmICggd3JpdGUgKQotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAq cm9fbWFwID0gcGNpX2dldF9yb19tYXAoMCk7Ci0KLSAgICAgICAgaWYgKCByb19tYXAgJiYgdGVz dF9iaXQobWFjaGluZV9iZGYsIHJvX21hcCkgKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg fQotICAgIHN0YXJ0IHw9IENGOF9BRERSX0xPKGN1cnJkLT5hcmNoLnBjaV9jZjgpOwotICAgIC8q IEFNRCBleHRlbmRlZCBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzcz8gKi8KLSAgICBpZiAoIENG OF9BRERSX0hJKGN1cnJkLT5hcmNoLnBjaV9jZjgpICYmCi0gICAgICAgICBib290X2NwdV9kYXRh Lng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLSAgICAgICAgIGJvb3RfY3B1X2RhdGEu eDg2ID49IDB4MTAgJiYgYm9vdF9jcHVfZGF0YS54ODYgPD0gMHgxNyApCi0gICAgewotICAgICAg ICB1aW50NjRfdCBtc3JfdmFsOwotCi0gICAgICAgIGlmICggcmRtc3Jfc2FmZShNU1JfQU1ENjRf TkJfQ0ZHLCBtc3JfdmFsKSApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKCBt c3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NGOF9FWFRfRU5BQkxFX0JJVCkgKQotICAg ICAgICAgICAgc3RhcnQgfD0gQ0Y4X0FERFJfSEkoY3VycmQtPmFyY2gucGNpX2NmOCk7Ci0gICAg fQotCi0gICAgcmV0dXJuICF3cml0ZSA/Ci0gICAgICAgICAgIHhzbV9wY2lfY29uZmlnX3Blcm1p c3Npb24oWFNNX0hPT0ssIGN1cnJkLCBtYWNoaW5lX2JkZiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQgKyBzaXplIC0gMSwgMCkgPT0gMCA6Ci0gICAg ICAgICAgIHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdCgwLCBtYWNoaW5lX2JkZiwgc3RhcnQsIHNp emUsIHdyaXRlKSA+PSAwOwotfQotCi11aW50MzJfdCBndWVzdF9pb19yZWFkKHVuc2lnbmVkIGlu dCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkb21haW4gKmN1cnJkKQotewotICAgIHVpbnQzMl90IGRhdGEgPSAwOwotICAgIHVuc2lnbmVk IGludCBzaGlmdCA9IDA7Ci0KLSAgICBpZiAoIGFkbWluX2lvX29rYXkocG9ydCwgYnl0ZXMsIGN1 cnJkKSApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBieXRlcyApCi0gICAgICAgIHsKLSAgICAg ICAgY2FzZSAxOiByZXR1cm4gaW5iKHBvcnQpOwotICAgICAgICBjYXNlIDI6IHJldHVybiBpbnco cG9ydCk7Ci0gICAgICAgIGNhc2UgNDogcmV0dXJuIGlubChwb3J0KTsKLSAgICAgICAgfQotICAg IH0KLQotICAgIHdoaWxlICggYnl0ZXMgIT0gMCApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBp bnQgc2l6ZSA9IDE7Ci0gICAgICAgIHVpbnQzMl90IHN1Yl9kYXRhID0gfjA7Ci0KLSAgICAgICAg aWYgKCAocG9ydCA9PSAweDQyKSB8fCAocG9ydCA9PSAweDQzKSB8fCAocG9ydCA9PSAweDYxKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN1Yl9kYXRhID0gcHZfcGl0X2hhbmRsZXIocG9ydCwg MCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHBvcnQgPT0gUlRDX1BPUlQoMCkg KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdWJfZGF0YSA9IGN1cnJkLT5hcmNoLmNtb3NfaWR4 OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSBSVENfUE9SVCgxKSkgJiYK LSAgICAgICAgICAgICAgICAgIGlvcG9ydHNfYWNjZXNzX3Blcm1pdHRlZChjdXJyZCwgUlRDX1BP UlQoMCksIFJUQ19QT1JUKDEpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7Ci0KLSAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxh Z3MpOwotICAgICAgICAgICAgb3V0YihjdXJyZC0+YXJjaC5jbW9zX2lkeCAmIDB4N2YsIFJUQ19Q T1JUKDApKTsKLSAgICAgICAgICAgIHN1Yl9kYXRhID0gaW5iKFJUQ19QT1JUKDEpKTsKLSAgICAg ICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0gICAgICAg IH0KLSAgICAgICAgZWxzZSBpZiAoIChwb3J0ID09IDB4Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBzaXplID0gNDsKLSAgICAgICAgICAgIHN1Yl9kYXRhID0g Y3VycmQtPmFyY2gucGNpX2NmODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggKHBvcnQg JiAweGZmZmMpID09IDB4Y2ZjICkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZSA9IG1pbihi eXRlcywgNCAtIChwb3J0ICYgMykpOwotICAgICAgICAgICAgaWYgKCBzaXplID09IDMgKQotICAg ICAgICAgICAgICAgIHNpemUgPSAyOwotICAgICAgICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJk LCBwb3J0ICYgMywgc2l6ZSwgTlVMTCkgKQotICAgICAgICAgICAgICAgIHN1Yl9kYXRhID0gcGNp X2NvbmZfcmVhZChjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSk7Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoIHNpemUgPT0gNCApCi0gICAgICAgICAgICByZXR1cm4gc3ViX2Rh dGE7Ci0KLSAgICAgICAgZGF0YSB8PSAoc3ViX2RhdGEgJiAoKDF1IDw8IChzaXplICogOCkpIC0g MSkpIDw8IHNoaWZ0OwotICAgICAgICBzaGlmdCArPSBzaXplICogODsKLSAgICAgICAgcG9ydCAr PSBzaXplOwotICAgICAgICBieXRlcyAtPSBzaXplOwotICAgIH0KLQotICAgIHJldHVybiBkYXRh OwotfQotCi12b2lkIGd1ZXN0X2lvX3dyaXRlKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBp bnQgYnl0ZXMsIHVpbnQzMl90IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21h aW4gKmN1cnJkKQotewotICAgIGlmICggYWRtaW5faW9fb2theShwb3J0LCBieXRlcywgY3VycmQp ICkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGJ5dGVzICkgewotICAgICAgICBjYXNlIDE6Ci0g ICAgICAgICAgICBvdXRiKCh1aW50OF90KWRhdGEsIHBvcnQpOwotICAgICAgICAgICAgaWYgKCBw dl9wb3N0X291dGJfaG9vayApCi0gICAgICAgICAgICAgICAgcHZfcG9zdF9vdXRiX2hvb2socG9y dCwgKHVpbnQ4X3QpZGF0YSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgot ICAgICAgICAgICAgb3V0dygodWludDE2X3QpZGF0YSwgcG9ydCk7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgb3V0bChkYXRhLCBwb3J0KTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3 aGlsZSAoIGJ5dGVzICE9IDAgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSAx OwotCi0gICAgICAgIGlmICggKHBvcnQgPT0gMHg0MikgfHwgKHBvcnQgPT0gMHg0MykgfHwgKHBv cnQgPT0gMHg2MSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwdl9waXRfaGFuZGxlcihwb3J0 LCAodWludDhfdClkYXRhLCAxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggcG9ydCA9 PSBSVENfUE9SVCgwKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJkLT5hcmNoLmNtb3Nf aWR4ID0gZGF0YTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggKHBvcnQgPT0gUlRDX1BP UlQoMSkpICYmCi0gICAgICAgICAgICAgICAgICBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoY3Vy cmQsIFJUQ19QT1JUKDApLCBSVENfUE9SVCgxKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1 bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgICAgICBpZiAoIHB2X3J0Y19oYW5kbGVyICkK LSAgICAgICAgICAgICAgICBwdl9ydGNfaGFuZGxlcihjdXJyZC0+YXJjaC5jbW9zX2lkeCAmIDB4 N2YsIGRhdGEpOwotICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFn cyk7Ci0gICAgICAgICAgICBvdXRiKGN1cnJkLT5hcmNoLmNtb3NfaWR4ICYgMHg3ZiwgUlRDX1BP UlQoMCkpOwotICAgICAgICAgICAgb3V0YihkYXRhLCBSVENfUE9SVCgxKSk7Ci0gICAgICAgICAg ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgICAgICB9Ci0g ICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSAweGNmOCkgJiYgKGJ5dGVzID09IDQpICkKLSAgICAg ICAgewotICAgICAgICAgICAgc2l6ZSA9IDQ7Ci0gICAgICAgICAgICBjdXJyZC0+YXJjaC5wY2lf Y2Y4ID0gZGF0YTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggKHBvcnQgJiAweGZmZmMp ID09IDB4Y2ZjICkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZSA9IG1pbihieXRlcywgNCAt IChwb3J0ICYgMykpOwotICAgICAgICAgICAgaWYgKCBzaXplID09IDMgKQotICAgICAgICAgICAg ICAgIHNpemUgPSAyOwotICAgICAgICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYg Mywgc2l6ZSwgJmRhdGEpICkKLSAgICAgICAgICAgICAgICBwY2lfY29uZl93cml0ZShjdXJyZC0+ YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAg ICBpZiAoIHNpemUgPT0gNCApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcG9ydCAr PSBzaXplOwotICAgICAgICBieXRlcyAtPSBzaXplOwotICAgICAgICBkYXRhID4+PSBzaXplICog ODsKLSAgICB9Ci19Ci0KLS8qIEkvTyBlbXVsYXRpb24gc3VwcG9ydC4gSGVscGVyIHJvdXRpbmVz IGZvciwgYW5kIHR5cGUgb2YsIHRoZSBzdGFjayBzdHViLiovCi12b2lkIGhvc3RfdG9fZ3Vlc3Rf Z3ByX3N3aXRjaChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKLXVuc2lnbmVkIGxvbmcgZ3Vlc3Rf dG9faG9zdF9ncHJfc3dpdGNoKHVuc2lnbmVkIGxvbmcpOwotCi12b2lkICgqcHZfcG9zdF9vdXRi X2hvb2spKHVuc2lnbmVkIGludCBwb3J0LCB1OCB2YWx1ZSk7Ci0KLXR5cGVkZWYgdm9pZCBpb19l bXVsX3N0dWJfdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKLQotc3RhdGljIGlvX2VtdWxfc3R1 Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHByaXZfb3BfY3R4dCAqY3R4dCwgdTggb3Bj b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcykKLXsKLSAgICBpZiAoICFjdHh0LT5pb19lbXVs X3N0dWIgKQotICAgICAgICBjdHh0LT5pb19lbXVsX3N0dWIgPSBtYXBfZG9tYWluX3BhZ2UoX21m bih0aGlzX2NwdShzdHVicy5tZm4pKSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHRoaXNfY3B1KHN0dWJzLmFkZHIpICYKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+UEFHRV9NQVNLKSArCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFVCX0JVRl9TSVpFIC8gMjsKLQotICAg IC8qIG1vdnEgJGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaCwlcmN4ICovCi0gICAgY3R4dC0+aW9f ZW11bF9zdHViWzBdID0gMHg0ODsKLSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMV0gPSAweGI5Owot ICAgICoodm9pZCAqKikmY3R4dC0+aW9fZW11bF9zdHViWzJdID0gKHZvaWQgKilob3N0X3RvX2d1 ZXN0X2dwcl9zd2l0Y2g7Ci0gICAgLyogY2FsbHEgKiVyY3ggKi8KLSAgICBjdHh0LT5pb19lbXVs X3N0dWJbMTBdID0gMHhmZjsKLSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTFdID0gMHhkMTsKLSAg ICAvKiBkYXRhMTYgb3Igbm9wICovCi0gICAgY3R4dC0+aW9fZW11bF9zdHViWzEyXSA9IChieXRl cyAhPSAyKSA/IDB4OTAgOiAweDY2OwotICAgIC8qIDxpby1hY2Nlc3Mgb3Bjb2RlPiAqLwotICAg IGN0eHQtPmlvX2VtdWxfc3R1YlsxM10gPSBvcGNvZGU7Ci0gICAgLyogaW1tOCBvciBub3AgKi8K LSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTRdID0gIShvcGNvZGUgJiA4KSA/IHBvcnQgOiAweDkw OwotICAgIC8qIHJldCAoanVtcHMgdG8gZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNoKSAqLwotICAg IGN0eHQtPmlvX2VtdWxfc3R1YlsxNV0gPSAweGMzOwotICAgIEJVSUxEX0JVR19PTihTVFVCX0JV Rl9TSVpFIC8gMiA8IDE2KTsKLQotICAgIGlmICggaW9lbXVsX2hhbmRsZV9xdWlyayApCi0gICAg ICAgIGlvZW11bF9oYW5kbGVfcXVpcmsob3Bjb2RlLCAmY3R4dC0+aW9fZW11bF9zdHViWzEyXSwg Y3R4dC0+Y3R4dC5yZWdzKTsKLQotICAgIC8qIEhhbmR5IGZ1bmN0aW9uLXR5cGVkIHBvaW50ZXIg dG8gdGhlIHN0dWIuICovCi0gICAgcmV0dXJuICh2b2lkICopKHRoaXNfY3B1KHN0dWJzLmFkZHIp ICsgU1RVQl9CVUZfU0laRSAvIDIpOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVhZF9pbyh1 bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyAqdmFsLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKLXsKLSAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwg c3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJy ZW50OwotICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwotCi0gICAg LyogSU5TIG11c3Qgbm90IGNvbWUgaGVyZS4gKi8KLSAgICBBU1NFUlQoKGN0eHQtPm9wY29kZSAm IH45KSA9PSAweGU0KTsKLQotICAgIGlmICggIWd1ZXN0X2lvX29rYXkocG9ydCwgYnl0ZXMsIGN1 cnIsIGN0eHQtPnJlZ3MpICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwot Ci0gICAgcG9jLT5icG1hdGNoID0gY2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChjdXJyLCBwb3J0 LCBieXRlcyk7Ci0KLSAgICBpZiAoIGFkbWluX2lvX29rYXkocG9ydCwgYnl0ZXMsIGN1cnJkKSAp Ci0gICAgewotICAgICAgICBpb19lbXVsX3N0dWJfdCAqaW9fZW11bCA9Ci0gICAgICAgICAgICBp b19lbXVsX3N0dWJfc2V0dXAocG9jLCBjdHh0LT5vcGNvZGUsIHBvcnQsIGJ5dGVzKTsKLQotICAg ICAgICBtYXJrX3JlZ3NfZGlydHkoY3R4dC0+cmVncyk7Ci0gICAgICAgIGlvX2VtdWwoY3R4dC0+ cmVncyk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX0RPTkU7Ci0gICAgfQotCi0gICAgKnZhbCA9 IGd1ZXN0X2lvX3JlYWQocG9ydCwgYnl0ZXMsIGN1cnJkKTsKLQotICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9pbyh1bnNpZ25lZCBpbnQgcG9y dCwgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgdmFsLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1 Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3Bf Y3R4dCwgY3R4dCk7Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHN0cnVj dCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwotCi0gICAgLyogT1VUUyBtdXN0IG5v dCBjb21lIGhlcmUuICovCi0gICAgQVNTRVJUKChjdHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNik7 Ci0KLSAgICBpZiAoICFndWVzdF9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdz KSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAgIHBvYy0+YnBt YXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXMpOwotCi0g ICAgaWYgKCBhZG1pbl9pb19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyZCkgKQotICAgIHsKLSAgICAg ICAgaW9fZW11bF9zdHViX3QgKmlvX2VtdWwgPQotICAgICAgICAgICAgaW9fZW11bF9zdHViX3Nl dHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBwb3J0LCBieXRlcyk7Ci0KLSAgICAgICAgbWFya19yZWdz X2RpcnR5KGN0eHQtPnJlZ3MpOwotICAgICAgICBpb19lbXVsKGN0eHQtPnJlZ3MpOwotICAgICAg ICBpZiAoIChieXRlcyA9PSAxKSAmJiBwdl9wb3N0X291dGJfaG9vayApCi0gICAgICAgICAgICBw dl9wb3N0X291dGJfaG9vayhwb3J0LCB2YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05F OwotICAgIH0KLQotICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQsIGJ5dGVzLCB2YWwsIGN1cnJkKTsK LQotICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF9yZXBf aW5zKHVpbnQxNl90IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHg4Nl9z ZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3JlcCwgdW5zaWduZWQgbG9uZyAqcmVwcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQot ewotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1 Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7 Ci0gICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47Ci0gICAgdW5zaWdu ZWQgbG9uZyBnb2FsID0gKnJlcHM7Ci0gICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgc3JlZzsK LSAgICBpbnQgcmM7Ci0KLSAgICBBU1NFUlQoc2VnID09IHg4Nl9zZWdfZXMpOwotCi0gICAgKnJl cHMgPSAwOwotCi0gICAgaWYgKCAhZ3Vlc3RfaW9fb2theShwb3J0LCBieXRlc19wZXJfcmVwLCBj dXJyLCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK LQotICAgIHJjID0gcHJpdl9vcF9yZWFkX3NlZ21lbnQoeDg2X3NlZ19lcywgJnNyZWcsIGN0eHQp OwotICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0g ICAgaWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5I QU5ETEVBQkxFOwotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucyB8fAotICAgICAgICAgKHNy ZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9DT0RFID4+IDgpKSB8fAotICAgICAgICAg IShzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfV1IgPj4gOCkpICkKLSAgICB7Ci0g ICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwLCBjdHh0KTsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgIH0KLQotICAgIHBvYy0+YnBtYXRj aCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXNfcGVyX3JlcCk7 Ci0KLSAgICB3aGlsZSAoICpyZXBzIDwgZ29hbCApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBp bnQgZGF0YSA9IGd1ZXN0X2lvX3JlYWQocG9ydCwgYnl0ZXNfcGVyX3JlcCwgY3VycmQpOwotICAg ICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLSAgICAgICAgcmMgPSBwdl9lbXVsX3ZpcnRfdG9f bGluZWFyKHNyZWcuYmFzZSwgb2Zmc2V0LCBieXRlc19wZXJfcmVwLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3JlZy5saW1pdCwgeDg2X3NlZ19lcywgY3R4dCwgJmFkZHIp OwotICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCi0gICAgICAgICAgICByZXR1cm4g cmM7Ci0KLSAgICAgICAgaWYgKCAocmMgPSBfX2NvcHlfdG9fdXNlcigodm9pZCAqKWFkZHIsICZk YXRhLCBieXRlc19wZXJfcmVwKSkgIT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHg4Nl9l bXVsX3BhZ2VmYXVsdChQRkVDX3dyaXRlX2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhZGRyICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBjdHh0KTsKLSAgICAgICAgICAgIHJl dHVybiBYODZFTVVMX0VYQ0VQVElPTjsKLSAgICAgICAgfQotCi0gICAgICAgICsrKnJlcHM7Ci0K LSAgICAgICAgaWYgKCBwb2MtPmJwbWF0Y2ggfHwgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSAp Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvKiB4ODZfZW11bGF0ZSgpIGNsaXBzIHRo ZSByZXBldGl0aW9uIGNvdW50IHRvIGVuc3VyZSB3ZSBkb24ndCB3cmFwLiAqLwotICAgICAgICBp ZiAoIHVubGlrZWx5KGN0eHQtPnJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfREYpICkKLSAgICAg ICAgICAgIG9mZnNldCAtPSBieXRlc19wZXJfcmVwOwotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBvZmZzZXQgKz0gYnl0ZXNfcGVyX3JlcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9P S0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVwX291dHMoZW51bSB4ODZfc2VnbWVudCBz ZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQxNl90IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5 dGVzX3Blcl9yZXAsIHVuc2lnbmVkIGxvbmcgKnJlcHMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgc3RydWN0IHByaXZf b3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0 eHQpOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9tYWlu ICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNpZ25lZCBsb25nIGdvYWwgPSAqcmVw czsKLSAgICBzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciBzcmVnOwotICAgIGludCByYzsKLQotICAg ICpyZXBzID0gMDsKLQotICAgIGlmICggIWd1ZXN0X2lvX29rYXkocG9ydCwgYnl0ZXNfcGVyX3Jl cCwgY3VyciwgY3R4dC0+cmVncykgKQotICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFC TEU7Ci0KLSAgICByYyA9IHByaXZfb3BfcmVhZF9zZWdtZW50KHNlZywgJnNyZWcsIGN0eHQpOwot ICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAg aWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5E TEVBQkxFOwotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucyB8fAotICAgICAgICAgKChzcmVn LmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfQ09ERSA+PiA4KSkgJiYKLSAgICAgICAgICAh KHNyZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9XUiA+PiA4KSkpICkKLSAgICB7Ci0g ICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihzZWcgIT0geDg2X3NlZ19zcyA/IFRSQVBfZ3Bf ZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog VFJBUF9zdGFja19lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGN0eHQp OwotICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcG9jLT5i cG1hdGNoID0gY2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChjdXJyLCBwb3J0LCBieXRlc19wZXJf cmVwKTsKLQotICAgIHdoaWxlICggKnJlcHMgPCBnb2FsICkKLSAgICB7Ci0gICAgICAgIHVuc2ln bmVkIGludCBkYXRhID0gMDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOwotCi0gICAgICAg IHJjID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVnLmJhc2UsIG9mZnNldCwgYnl0ZXNfcGVy X3JlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyZWcubGltaXQsIHNl ZywgY3R4dCwgJmFkZHIpOwotICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCi0gICAg ICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgaWYgKCAocmMgPSBfX2NvcHlfZnJvbV91c2Vy KCZkYXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzX3Blcl9yZXApKSAhPSAwICkKLSAgICAgICAgewot ICAgICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIGFkZHIgKyBieXRlc19wZXJfcmVwIC0g cmMsIGN0eHQpOwotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgICAg ICB9Ci0KLSAgICAgICAgZ3Vlc3RfaW9fd3JpdGUocG9ydCwgYnl0ZXNfcGVyX3JlcCwgZGF0YSwg Y3VycmQpOwotCi0gICAgICAgICsrKnJlcHM7Ci0KLSAgICAgICAgaWYgKCBwb2MtPmJwbWF0Y2gg fHwgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgICAgICBicmVhazsKLQotICAg ICAgICAvKiB4ODZfZW11bGF0ZSgpIGNsaXBzIHRoZSByZXBldGl0aW9uIGNvdW50IHRvIGVuc3Vy ZSB3ZSBkb24ndCB3cmFwLiAqLwotICAgICAgICBpZiAoIHVubGlrZWx5KGN0eHQtPnJlZ3MtPmVm bGFncyAmIFg4Nl9FRkxBR1NfREYpICkKLSAgICAgICAgICAgIG9mZnNldCAtPSBieXRlc19wZXJf cmVwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXNfcGVyX3JlcDsK LSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZf b3BfcmVhZF9jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nICp2YWwsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAg ICBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0KLSAgICBzd2l0Y2ggKCByZWcg KQotICAgIHsKLSAgICBjYXNlIDA6IC8qIFJlYWQgQ1IwICovCi0gICAgICAgICp2YWwgPSAocmVh ZF9jcjAoKSAmIH5YODZfQ1IwX1RTKSB8IGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzBdOwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSAyOiAvKiBSZWFkIENSMiAq LwotICAgIGNhc2UgNDogLyogUmVhZCBDUjQgKi8KLSAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gu cHZfdmNwdS5jdHJscmVnW3JlZ107Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAg ICBjYXNlIDM6IC8qIFJlYWQgQ1IzICovCi0gICAgewotICAgICAgICBjb25zdCBzdHJ1Y3QgZG9t YWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtZm47Ci0K LSAgICAgICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIG1mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUp OwotICAgICAgICAgICAgKnZhbCA9IHhlbl9wZm5fdG9fY3IzKG1mbl90b19nbWZuKGN1cnJkLCBt Zm4pKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGw0 X3BnZW50cnlfdCAqcGw0ZSA9Ci0gICAgICAgICAgICAgICAgbWFwX2RvbWFpbl9wYWdlKF9tZm4o cGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZSkpKTsKLQotICAgICAgICAg ICAgbWZuID0gbDRlX2dldF9wZm4oKnBsNGUpOwotICAgICAgICAgICAgdW5tYXBfZG9tYWluX3Bh Z2UocGw0ZSk7Ci0gICAgICAgICAgICAqdmFsID0gY29tcGF0X3Bmbl90b19jcjMobWZuX3RvX2dt Zm4oY3VycmQsIG1mbikpOwotICAgICAgICB9Ci0gICAgICAgIC8qIFBUcyBzaG91bGQgbm90IGJl IHNoYXJlZCAqLwotICAgICAgICBCVUdfT04ocGFnZV9nZXRfb3duZXIobWZuX3RvX3BhZ2UobWZu KSkgPT0gZG9tX2Nvdyk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgfQotICAg IH0KLQotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotc3RhdGljIGludCBw cml2X29wX3dyaXRlX2NyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQot ewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLQotICAgIHN3aXRjaCAoIHJlZyAp Ci0gICAgewotICAgIGNhc2UgMDogLyogV3JpdGUgQ1IwICovCi0gICAgICAgIGlmICggKHZhbCBe IHJlYWRfY3IwKCkpICYgflg4Nl9DUjBfVFMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gY2hh bmdlIHVubW9kaWZpYWJsZSBDUjAgZmxhZ3NcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIH0KLSAgICAgICAgZG9fZnB1X3Rhc2tzd2l0Y2goISEodmFsICYgWDg2X0NSMF9UUykpOwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSAyOiAvKiBXcml0ZSBDUjIg Ki8KLSAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmN0cmxyZWdbMl0gPSB2YWw7Ci0gICAgICAg IGFyY2hfc2V0X2NyMihjdXJyLCB2YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwot Ci0gICAgY2FzZSAzOiAvKiBXcml0ZSBDUjMgKi8KLSAgICB7Ci0gICAgICAgIHN0cnVjdCBkb21h aW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgICAgICB1bnNpZ25lZCBsb25nIGdmbjsKLSAg ICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICAgICAgaW50IHJjOwotCi0gICAgICAg IGdmbiA9ICFpc19wdl8zMmJpdF9kb21haW4oY3VycmQpCi0gICAgICAgICAgICAgID8geGVuX2Ny M190b19wZm4odmFsKSA6IGNvbXBhdF9jcjNfdG9fcGZuKHZhbCk7Ci0gICAgICAgIHBhZ2UgPSBn ZXRfcGFnZV9mcm9tX2dmbihjdXJyZCwgZ2ZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICBp ZiAoICFwYWdlICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByYyA9IG5ld19ndWVzdF9j cjMocGFnZV90b19tZm4ocGFnZSkpOwotICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQotICAgICAg ICBzd2l0Y2ggKCByYyApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgY2FzZSAtRVJFU1RBUlQ6IC8qIHJldHJ5IGFm dGVyIHByZWVtcHRpb24gKi8KLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1JFVFJZOwotICAg ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgNDogLyogV3JpdGUgQ1I0 ICovCi0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdID0gcHZfZ3Vlc3RfY3I0 X2ZpeHVwKGN1cnIsIHZhbCk7Ci0gICAgICAgIHdyaXRlX2NyNChwdl9ndWVzdF9jcjRfdG9fcmVh bF9jcjQoY3VycikpOwotICAgICAgICBjdHh0X3N3aXRjaF9sZXZlbGxpbmcoY3Vycik7Ci0gICAg ICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfVU5I QU5ETEVBQkxFOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVhZF9kcih1bnNpZ25lZCBpbnQg cmVnLCB1bnNpZ25lZCBsb25nICp2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIHJlcyA9IGRv X2dldF9kZWJ1Z3JlZyhyZWcpOwotCi0gICAgaWYgKCBJU19FUlJfVkFMVUUocmVzKSApCi0gICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAgICp2YWwgPSByZXM7Ci0KLSAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3Bfd3JpdGVfZHIo dW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgcmV0dXJuIGRv X3NldF9kZWJ1Z3JlZyhyZWcsIHZhbCkgPT0gMAotICAgICAgICAgICA/IFg4NkVNVUxfT0tBWSA6 IFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90IGd1ZXN0 X21pc2NfZW5hYmxlKHVpbnQ2NF90IHZhbCkKLXsKLSAgICB2YWwgJj0gfihNU1JfSUEzMl9NSVND X0VOQUJMRV9QRVJGX0FWQUlMIHwKLSAgICAgICAgICAgICBNU1JfSUEzMl9NSVNDX0VOQUJMRV9N T05JVE9SX0VOQUJMRSk7Ci0gICAgdmFsIHw9IE1TUl9JQTMyX01JU0NfRU5BQkxFX0JUU19VTkFW QUlMIHwKLSAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVCU19VTkFWQUlMIHwKLSAg ICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWFRQUl9ESVNBQkxFOwotICAgIHJldHVybiB2 YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19jcHVmcmVxX2NvbnRyb2xsZXIoY29uc3Qg c3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICByZXR1cm4gKChjcHVmcmVxX2NvbnRyb2xsZXIgPT0g RlJFUUNUTF9kb20wX2tlcm5lbCkgJiYKLSAgICAgICAgICAgIGlzX2hhcmR3YXJlX2RvbWFpbihk KSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX21zcih1bnNpZ25lZCBpbnQgcmVnLCB1 aW50NjRfdCAqdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNvbnRh aW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKLSAgICBjb25zdCBzdHJ1 Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQg PSBjdXJyLT5kb21haW47Ci0gICAgYm9vbCB2cG11X21zciA9IGZhbHNlOwotCi0gICAgc3dpdGNo ICggcmVnICkKLSAgICB7Ci0gICAgICAgIGludCByYzsKLQotICAgIGNhc2UgTVNSX0ZTX0JBU0U6 Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgKnZhbCA9IGNwdV9oYXNfZnNnc2Jhc2UgPyBfX3JkZnNiYXNlKCkgOiBj dXJyLT5hcmNoLnB2X3ZjcHUuZnNfYmFzZTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK LQotICAgIGNhc2UgTVNSX0dTX0JBU0U6Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWlu KGN1cnJkKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9IGNwdV9oYXNfZnNn c2Jhc2UgPyBfX3JkZ3NiYXNlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBj dXJyLT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWw7Ci0gICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci0KLSAgICBjYXNlIE1TUl9TSEFET1dfR1NfQkFTRToKLSAgICAgICAgaWYgKCBpc19w dl8zMmJpdF9kb21haW4oY3VycmQpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAqdmFs ID0gY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2VfdXNlcjsKLSAgICAgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKLQotICAgIC8qCi0gICAgICogSW4gb3JkZXIgdG8gZnVsbHkgcmV0YWluIG9yaWdp bmFsIGJlaGF2aW9yLCBkZWZlciBjYWxsaW5nCi0gICAgICogcHZfc29mdF9yZHRzYygpIHVudGls IGFmdGVyIGVtdWxhdGlvbi4gVGhpcyBtYXkgd2FudC9uZWVkIHRvIGJlCi0gICAgICogcmVjb25z aWRlcmVkLgotICAgICAqLwotICAgIGNhc2UgTVNSX0lBMzJfVFNDOgotICAgICAgICBwb2MtPnRz YyB8PSBUU0NfQkFTRTsKLSAgICAgICAgZ290byBub3JtYWw7Ci0KLSAgICBjYXNlIE1TUl9UU0Nf QVVYOgotICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQVVYOwotICAgICAgICBpZiAoIGNwdV9oYXNf cmR0c2NwICkKLSAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAgICAqdmFsID0gMDsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0VGRVI6Ci0gICAgICAg ICp2YWwgPSByZWFkX2VmZXIoKTsKLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3Vy cmQpICkKLSAgICAgICAgICAgICp2YWwgJj0gfihFRkVSX0xNRSB8IEVGRVJfTE1BIHwgRUZFUl9M TVNMRSk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9LN19G SURfVklEX0NUTDoKLSAgICBjYXNlIE1TUl9LN19GSURfVklEX1NUQVRVUzoKLSAgICBjYXNlIE1T Ul9LOF9QU1RBVEVfTElNSVQ6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFX0NUUkw6Ci0gICAgY2Fz ZSBNU1JfSzhfUFNUQVRFX1NUQVRVUzoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEUwOgotICAgIGNh c2UgTVNSX0s4X1BTVEFURTE6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFMjoKLSAgICBjYXNlIE1T Ul9LOF9QU1RBVEUzOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTQ6Ci0gICAgY2FzZSBNU1JfSzhf UFNUQVRFNToKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEU2OgotICAgIGNhc2UgTVNSX0s4X1BTVEFU RTc6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1Jf QU1EICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIHVubGlrZWx5KGlzX2NwdWZy ZXFfY29udHJvbGxlcihjdXJyZCkpICkKLSAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAg ICAqdmFsID0gMDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNS X0lBMzJfVUNPREVfUkVWOgotICAgICAgICBCVUlMRF9CVUdfT04oTVNSX0lBMzJfVUNPREVfUkVW ICE9IE1TUl9BTURfUEFUQ0hMRVZFTCk7Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZf dmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo IHdybXNyX3NhZmUoTVNSX0lBMzJfVUNPREVfUkVWLCAwKSApCi0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAvKiBBcyBkb2N1bWVudGVkIGluIHRoZSBTRE06IERvIGEgQ1BVSUQg MSBoZXJlICovCi0gICAgICAgICAgICBjcHVpZF9lYXgoMSk7Ci0gICAgICAgIH0KLSAgICAgICAg Z290byBub3JtYWw7Ci0KLSAgICBjYXNlIE1TUl9JQTMyX01JU0NfRU5BQkxFOgotICAgICAgICBp ZiAoIHJkbXNyX3NhZmUocmVnLCAqdmFsKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg KnZhbCA9IGd1ZXN0X21pc2NfZW5hYmxlKCp2YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOwotCi0gICAgY2FzZSBNU1JfQU1ENjRfRFIwX0FERFJFU1NfTUFTSzoKLSAgICAgICAgaWYg KCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSApCi0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5kcl9tYXNrWzBdOwotICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfQU1ENjRfRFIxX0FERFJFU1NfTUFT SyAuLi4gTVNSX0FNRDY0X0RSM19BRERSRVNTX01BU0s6Ci0gICAgICAgIGlmICggIWJvb3RfY3B1 X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICp2 YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1tyZWcgLSBNU1JfQU1ENjRfRFIxX0FERFJF U1NfTUFTSyArIDFdOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBN U1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUzoKLSAgICAgICAgLyogTm8gZXh0cmEgY2FwYWJpbGl0 aWVzIGFyZSBzdXBwb3J0ZWQuICovCi0gICAgICAgICp2YWwgPSAwOwotICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfUExBVEZPUk1fSU5GTzoKLSAgICAg ICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAot ICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX1BMQVRGT1JNX0lORk8sICp2YWwpICkK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAqdmFsID0gMDsKLSAgICAgICAgaWYgKCB0aGlz X2NwdShjcHVpZF9mYXVsdGluZ19lbmFibGVkKSApCi0gICAgICAgICAgICAqdmFsIHw9IE1TUl9Q TEFURk9STV9JTkZPX0NQVUlEX0ZBVUxUSU5HOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OwotCi0gICAgY2FzZSBNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVTOgotICAgICAgICBp ZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMIHx8Ci0gICAg ICAgICAgICAgcmRtc3Jfc2FmZShNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVTLCAqdmFs KSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9IDA7Ci0gICAgICAgIGlmICgg Y3Vyci0+YXJjaC5jcHVpZF9mYXVsdGluZyApCi0gICAgICAgICAgICAqdmFsIHw9IE1TUl9NSVND X0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwot Ci0gICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4uLk1TUl9QNl9QRVJGQ1RSKDcpOgotICAgIGNh c2UgTVNSX1A2X0VWTlRTRUwoMCkuLi5NU1JfUDZfRVZOVFNFTCgzKToKLSAgICBjYXNlIE1TUl9D T1JFX1BFUkZfRklYRURfQ1RSMC4uLk1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMjoKLSAgICBjYXNl IE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwuLi5NU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZf Q1RSTDoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRP Ul9JTlRFTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZwbXVfbXNyID0gdHJ1ZTsKLSAgICAg ICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgTVNSX0FNRF9GQU0xNUhfRVZOVFNF TDAuLi5NU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKLSAgICBjYXNlIE1TUl9LN19FVk5UU0VMMC4u Lk1TUl9LN19QRVJGQ1RSMzoKLSAgICAgICAgICAgIGlmICggdnBtdV9tc3IgfHwgKGJvb3RfY3B1 X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIGlmICggdnBtdV9kb19yZG1zcihyZWcsIHZhbCkgKQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGlmICggcmRtc3JfaHlwZXJ2aXNvcl9yZWdzKHJlZywgdmFsKSApCi0g ICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgICAgIHJjID0gdm1jZV9yZG1z cihyZWcsIHZhbCk7Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAg ICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIG5vcm1hbDoKLSAgICAgICAgLyogRXZlcnlvbmUg Y2FuIHJlYWQgdGhlIE1TUiBzcGFjZS4gKi8KLSAgICAgICAgLyogZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJEb21haW4gYXR0ZW1wdGVkIFJETVNSICUwOHhcbiIsIHJlZyk7ICovCi0gICAgICAg IGlmICggcmRtc3Jfc2FmZShyZWcsICp2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgIH0KLQotICAgIHJldHVybiBYODZFTVVMX1VOSEFO RExFQUJMRTsKLX0KLQotI2luY2x1ZGUgIng4Nl82NC9tbWNvbmZpZy5oIgotCi1zdGF0aWMgaW50 IHByaXZfb3Bfd3JpdGVfbXNyKHVuc2lnbmVkIGludCByZWcsIHVpbnQ2NF90IHZhbCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17 Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIGNvbnN0IHN0cnVjdCBkb21h aW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgIGJvb2wgdnBtdV9tc3IgPSBmYWxzZTsKLQot ICAgIHN3aXRjaCAoIHJlZyApCi0gICAgewotICAgICAgICB1aW50NjRfdCB0ZW1wOwotICAgICAg ICBpbnQgcmM7Ci0KLSAgICBjYXNlIE1TUl9GU19CQVNFOgotICAgICAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihjdXJyZCkgfHwgIWlzX2Nhbm9uaWNhbF9hZGRyZXNzKHZhbCkgKQotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIHdyZnNiYXNlKHZhbCk7Ci0gICAgICAgIGN1cnItPmFyY2gu cHZfdmNwdS5mc19iYXNlID0gdmFsOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0g ICAgY2FzZSBNU1JfR1NfQkFTRToKLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3Vy cmQpIHx8ICFpc19jYW5vbmljYWxfYWRkcmVzcyh2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB3cmdzYmFzZSh2YWwpOwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZ3NfYmFz ZV9rZXJuZWwgPSB2YWw7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNl IE1TUl9TSEFET1dfR1NfQkFTRToKLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3Vy cmQpIHx8ICFpc19jYW5vbmljYWxfYWRkcmVzcyh2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB3cm1zcmwoTVNSX1NIQURPV19HU19CQVNFLCB2YWwpOwotICAgICAgICBjdXJyLT5h cmNoLnB2X3ZjcHUuZ3NfYmFzZV91c2VyID0gdmFsOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOwotCi0gICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVM6Ci0gICAgY2FzZSBNU1JfSzdf RklEX1ZJRF9DVEw6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFX0xJTUlUOgotICAgIGNhc2UgTVNS X0s4X1BTVEFURV9DVFJMOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURV9TVEFUVVM6Ci0gICAgY2Fz ZSBNU1JfSzhfUFNUQVRFMDoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEUxOgotICAgIGNhc2UgTVNS X0s4X1BTVEFURTI6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFMzoKLSAgICBjYXNlIE1TUl9LOF9Q U1RBVEU0OgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTU6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRF NjoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEU3OgotICAgIGNhc2UgTVNSX0s4X0hXQ1I6Ci0gICAg ICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIGxpa2VseSghaXNfY3B1ZnJlcV9jb250cm9s bGVyKGN1cnJkKSkgfHwKLSAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywgdmFsKSA9PSAwICkK LSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg Y2FzZSBNU1JfQU1ENjRfTkJfQ0ZHOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3Zl bmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAotICAgICAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2 IDwgMHgxMCB8fCBib290X2NwdV9kYXRhLng4NiA+IDB4MTcgKQotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgfHwgIWlzX3Bpbm5lZF92 Y3B1KGN1cnIpICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGlm ICggKHJkbXNyX3NhZmUoTVNSX0FNRDY0X05CX0NGRywgdGVtcCkgIT0gMCkgfHwKLSAgICAgICAg ICAgICAoKHZhbCBeIHRlbXApICYgfigxVUxMIDw8IEFNRDY0X05CX0NGR19DRjhfRVhUX0VOQUJM RV9CSVQpKSApCi0gICAgICAgICAgICBnb3RvIGludmFsaWQ7Ci0gICAgICAgIGlmICggd3Jtc3Jf c2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCB2YWwpID09IDAgKQotICAgICAgICAgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1TUl9GQU0xMEhfTU1JT19D T05GX0JBU0U6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9W RU5ET1JfQU1EIHx8Ci0gICAgICAgICAgICAgYm9vdF9jcHVfZGF0YS54ODYgPCAweDEwIHx8IGJv b3RfY3B1X2RhdGEueDg2ID4gMHgxNyApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYg KCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8fCAhaXNfcGlubmVkX3ZjcHUoY3VycikgKQot ICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgaWYgKCByZG1zcl9zYWZl KE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0UsIHRlbXApICE9IDAgKQotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGlmICggKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9NQVNLKSA9PSBQQ0lfUFJP QkVfTU1DT05GID8KLSAgICAgICAgICAgICB0ZW1wICE9IHZhbCA6Ci0gICAgICAgICAgICAgKCh0 ZW1wIF4gdmFsKSAmCi0gICAgICAgICAgICAgIH4oRkFNMTBIX01NSU9fQ09ORl9FTkFCTEUgfAot ICAgICAgICAgICAgICAgIChGQU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX01BU0sgPDwKLSAgICAg ICAgICAgICAgICAgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9TSElGVCkgfAotICAgICAgICAg ICAgICAgICgodTY0KUZBTTEwSF9NTUlPX0NPTkZfQkFTRV9NQVNLIDw8Ci0gICAgICAgICAgICAg ICAgIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9TSElGVCkpKSApCi0gICAgICAgICAgICBnb3RvIGlu dmFsaWQ7Ci0gICAgICAgIGlmICggd3Jtc3Jfc2FmZShNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNF LCB2YWwpID09IDAgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICBjYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKLSAgICAgICAgaWYgKCBib290 X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCApCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSB8fCAhaXNfcGlu bmVkX3ZjcHUoY3VycikgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAg ICAgaWYgKCByZG1zcl9zYWZlKHJlZywgdGVtcCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGlmICggdmFsICkKLSAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKLSAgICAgICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lBMzJfTUlTQ19FTkFCTEU6Ci0gICAgICAg IGlmICggcmRtc3Jfc2FmZShyZWcsIHRlbXApICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICBpZiAoIHZhbCAhPSBndWVzdF9taXNjX2VuYWJsZSh0ZW1wKSApCi0gICAgICAgICAgICBnb3Rv IGludmFsaWQ7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9J QTMyX01QRVJGOgotICAgIGNhc2UgTVNSX0lBMzJfQVBFUkY6Ci0gICAgICAgIGlmICggKGJvb3Rf Y3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKSAmJgotICAgICAgICAgICAg IChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpICkKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBpZiAoIGxpa2VseSghaXNfY3B1ZnJlcV9jb250cm9sbGVyKGN1 cnJkKSkgfHwKLSAgICAgICAgICAgICB3cm1zcl9zYWZlKHJlZywgdmFsKSA9PSAwICkKLSAgICAg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBN U1JfSUEzMl9QRVJGX0NUTDoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3Ig IT0gWDg2X1ZFTkRPUl9JTlRFTCApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCBs aWtlbHkoIWlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpIHx8Ci0gICAgICAgICAgICAgd3Jt c3Jfc2FmZShyZWcsIHZhbCkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTDoKLSAg ICBjYXNlIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVM6Ci0gICAgICAgIGlmICggYm9vdF9jcHVf ZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgKQotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgfHwgIWlzX3Bpbm5lZF92 Y3B1KGN1cnIpIHx8Ci0gICAgICAgICAgICAgd3Jtc3Jfc2FmZShyZWcsIHZhbCkgPT0gMCApCi0g ICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgICAgICBicmVhazsKLQotICAgIGNh c2UgTVNSX0FNRDY0X0RSMF9BRERSRVNTX01BU0s6Ci0gICAgICAgIGlmICggIWJvb3RfY3B1X2hh cyhYODZfRkVBVFVSRV9EQkVYVCkgfHwgKHZhbCA+PiAzMikgKQotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5kcl9tYXNrWzBdID0gdmFsOwotICAgICAgICBp ZiAoIGN1cnItPmFyY2guZGVidWdyZWdbN10gJiBEUjdfQUNUSVZFX01BU0sgKQotICAgICAgICAg ICAgd3Jtc3JsKE1TUl9BTUQ2NF9EUjBfQUREUkVTU19NQVNLLCB2YWwpOwotICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfQU1ENjRfRFIxX0FERFJFU1NfTUFTSyAu Li4gTVNSX0FNRDY0X0RSM19BRERSRVNTX01BU0s6Ci0gICAgICAgIGlmICggIWJvb3RfY3B1X2hh cyhYODZfRkVBVFVSRV9EQkVYVCkgfHwgKHZhbCA+PiAzMikgKQotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5kcl9tYXNrW3JlZyAtIE1TUl9BTUQ2NF9EUjFf QUREUkVTU19NQVNLICsgMV0gPSB2YWw7Ci0gICAgICAgIGlmICggY3Vyci0+YXJjaC5kZWJ1Z3Jl Z1s3XSAmIERSN19BQ1RJVkVfTUFTSyApCi0gICAgICAgICAgICB3cm1zcmwocmVnLCB2YWwpOwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfUExBVEZP Uk1fSU5GTzoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZF TkRPUl9JTlRFTCB8fAotICAgICAgICAgICAgIHZhbCB8fCByZG1zcl9zYWZlKE1TUl9JTlRFTF9Q TEFURk9STV9JTkZPLCB2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVT OgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lO VEVMIHx8Ci0gICAgICAgICAgICAgKHZhbCAmIH5NU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVM VElORykgfHwKLSAgICAgICAgICAgICByZG1zcl9zYWZlKE1TUl9JTlRFTF9NSVNDX0ZFQVRVUkVT X0VOQUJMRVMsIHRlbXApICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoICh2YWwg JiBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORykgJiYKLSAgICAgICAgICAgICAhdGhp c19jcHUoY3B1aWRfZmF1bHRpbmdfZW5hYmxlZCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGN1cnItPmFyY2guY3B1aWRfZmF1bHRpbmcgPSAhISh2YWwgJiBNU1JfTUlTQ19GRUFUVVJF U19DUFVJRF9GQVVMVElORyk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBj YXNlIE1TUl9QNl9QRVJGQ1RSKDApLi4uTVNSX1A2X1BFUkZDVFIoNyk6Ci0gICAgY2FzZSBNU1Jf UDZfRVZOVFNFTCgwKS4uLk1TUl9QNl9FVk5UU0VMKDMpOgotICAgIGNhc2UgTVNSX0NPUkVfUEVS Rl9GSVhFRF9DVFIwLi4uTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIyOgotICAgIGNhc2UgTVNSX0NP UkVfUEVSRl9GSVhFRF9DVFJfQ1RSTC4uLk1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOgot ICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVM ICkKLSAgICAgICAgewotICAgICAgICAgICAgdnBtdV9tc3IgPSB0cnVlOwotICAgIGNhc2UgTVNS X0FNRF9GQU0xNUhfRVZOVFNFTDAuLi5NU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKLSAgICBjYXNl IE1TUl9LN19FVk5UU0VMMC4uLk1TUl9LN19QRVJGQ1RSMzoKLSAgICAgICAgICAgIGlmICggdnBt dV9tc3IgfHwgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgKQot ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggKHZwbXVfbW9kZSAmIFhFTlBNVV9N T0RFX0FMTCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICFpc19oYXJkd2FyZV9kb21haW4oY3Vy cmQpICkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgICAg ICAgICAgICAgIGlmICggdnBtdV9kb193cm1zcihyZWcsIHZhbCwgMCkgKQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGlmICggd3Jtc3JfaHlwZXJ2aXNvcl9yZWdzKHJlZywgdmFsKSA9PSAx ICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICAgICAgcmMgPSB2bWNl X3dybXNyKHJlZywgdmFsKTsKLSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK LQotICAgICAgICBpZiAoIChyZG1zcl9zYWZlKHJlZywgdGVtcCkgIT0gMCkgfHwgKHZhbCAhPSB0 ZW1wKSApCi0gICAgaW52YWxpZDoKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAgICAgIkRvbWFpbiBhdHRlbXB0ZWQgV1JNU1IgJTA4eCBmcm9t IDB4JTAxNiJQUkl4NjQiIHRvIDB4JTAxNiJQUkl4NjQiXG4iLAotICAgICAgICAgICAgICAgICAg ICAgcmVnLCB0ZW1wLCB2YWwpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgIH0K LQotICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotc3RhdGljIGludCBwcml2 X29wX3diaW52ZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICAvKiBJZ25v cmUgdGhlIGluc3RydWN0aW9uIGlmIHVucHJpdmlsZWdlZC4gKi8KLSAgICBpZiAoICFjYWNoZV9m bHVzaF9wZXJtaXR0ZWQoY3VycmVudC0+ZG9tYWluKSApCi0gICAgICAgIC8qCi0gICAgICAgICAq IE5vbi1waHlzZGV2IGRvbWFpbiBhdHRlbXB0ZWQgV0JJTlZEOyBpZ25vcmUgZm9yIG5vdyBzaW5j ZQotICAgICAgICAgKiBuZXdlciBsaW51eCB1c2VzIHRoaXMgaW4gc29tZSBzdGFydC1vZi1kYXkg dGltaW5nIGxvb3BzLgotICAgICAgICAgKi8KLSAgICAgICAgOwotICAgIGVsc2UKLSAgICAgICAg d2JpbnZkKCk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1pbnQgcHZfZW11bF9j cHVpZCh1aW50MzJfdCBsZWFmLCB1aW50MzJfdCBzdWJsZWFmLAotICAgICAgICAgICAgICAgICAg c3RydWN0IGNwdWlkX2xlYWYgKnJlcywgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17 Ci0gICAgZ3Vlc3RfY3B1aWQoY3VycmVudCwgbGVhZiwgc3VibGVhZiwgcmVzKTsKLQotICAgIHJl dHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF92YWxpZGF0ZShjb25z dCBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN3aXRjaCAoIGN0 eHQtPm9wY29kZSApCi0gICAgewotICAgIGNhc2UgMHg2YyAuLi4gMHg2ZjogLyogaW5zIC8gb3V0 cyAqLwotICAgIGNhc2UgMHhlNCAuLi4gMHhlNzogLyogaW4gLyBvdXQgKGltbWVkaWF0ZSBwb3J0 KSAqLwotICAgIGNhc2UgMHhlYyAuLi4gMHhlZjogLyogaW4gLyBvdXQgKHBvcnQgaW4gJWR4KSAq LwotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwNik6IC8qIGNsdHMgKi8KLSAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MDkpOiAvKiB3YmludmQgKi8KLSAgICBjYXNlIFg4NkVNVUxf T1BDKDB4MGYsIDB4MjApIC4uLgotICAgICAgICAgWDg2RU1VTF9PUEMoMHgwZiwgMHgyMyk6IC8q IG1vdiB0by9mcm9tIGNyL2RyICovCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDMwKTog Lyogd3Jtc3IgKi8KLSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MzEpOiAvKiByZHRzYyAq LwotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgzMik6IC8qIHJkbXNyICovCi0gICAgY2Fz ZSBYODZFTVVMX09QQygweDBmLCAweGEyKTogLyogY3B1aWQgKi8KLSAgICAgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgMHhmYTogY2FzZSAweGZiOiAvKiBjbGkgLyBzdGkgKi8K LSAgICAgICAgaWYgKCAhaW9wbF9vayhjdXJyZW50LCBjdHh0LT5yZWdzKSApCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBqdXN0IHRvbyBkYW5nZXJv dXMgdG8gYWxsb3csIGluIG15IG9waW5pb24uIENvbnNpZGVyIGlmIHRoZQotICAgICAgICAgKiBj YWxsZXIgdGhlbiB0cmllcyB0byByZWVuYWJsZSBpbnRlcnJ1cHRzIHVzaW5nIFBPUEY6IHdlIGNh bid0IHRyYXAKLSAgICAgICAgICogdGhhdCBhbmQgd2UnbGwgZW5kIHVwIHdpdGggaGFyZC10by1k ZWJ1ZyBsb2NrdXBzLiBGYXN0ICYgbG9vc2Ugd2lsbAotICAgICAgICAgKiBkbyBmb3IgdXMuIDot KQotICAgICAgICB2Y3B1X2luZm8oY3VycmVudCwgZXZ0Y2huX3VwY2FsbF9tYXNrKSA9IChjdHh0 LT5vcGNvZGUgPT0gMHhmYSk7Ci0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gWDg2RU1VTF9E T05FOwotCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDAxKToKLSAgICB7Ci0gICAgICAg IHVuc2lnbmVkIGludCBtb2RybV9ybSwgbW9kcm1fcmVnOwotCi0gICAgICAgIGlmICggeDg2X2lu c25fbW9kcm0oc3RhdGUsICZtb2RybV9ybSwgJm1vZHJtX3JlZykgIT0gMyB8fAotICAgICAgICAg ICAgIChtb2RybV9ybSAmIDcpICE9IDEgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN3 aXRjaCAoIG1vZHJtX3JlZyAmIDcgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMjogLyogeHNl dGJ2ICovCi0gICAgICAgIGNhc2UgNzogLyogcmR0c2NwICovCi0gICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0K LSAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgeDg2X2VtdWxhdGVfb3BzIHByaXZfb3Bfb3BzID0gewotICAgIC5pbnNuX2ZldGNoICAgICAg ICAgID0gcHJpdl9vcF9pbnNuX2ZldGNoLAotICAgIC5yZWFkICAgICAgICAgICAgICAgID0geDg2 ZW11bF91bmhhbmRsZWFibGVfcncsCi0gICAgLnZhbGlkYXRlICAgICAgICAgICAgPSBwcml2X29w X3ZhbGlkYXRlLAotICAgIC5yZWFkX2lvICAgICAgICAgICAgID0gcHJpdl9vcF9yZWFkX2lvLAot ICAgIC53cml0ZV9pbyAgICAgICAgICAgID0gcHJpdl9vcF93cml0ZV9pbywKLSAgICAucmVwX2lu cyAgICAgICAgICAgICA9IHByaXZfb3BfcmVwX2lucywKLSAgICAucmVwX291dHMgICAgICAgICAg ICA9IHByaXZfb3BfcmVwX291dHMsCi0gICAgLnJlYWRfc2VnbWVudCAgICAgICAgPSBwcml2X29w X3JlYWRfc2VnbWVudCwKLSAgICAucmVhZF9jciAgICAgICAgICAgICA9IHByaXZfb3BfcmVhZF9j ciwKLSAgICAud3JpdGVfY3IgICAgICAgICAgICA9IHByaXZfb3Bfd3JpdGVfY3IsCi0gICAgLnJl YWRfZHIgICAgICAgICAgICAgPSBwcml2X29wX3JlYWRfZHIsCi0gICAgLndyaXRlX2RyICAgICAg ICAgICAgPSBwcml2X29wX3dyaXRlX2RyLAotICAgIC5yZWFkX21zciAgICAgICAgICAgID0gcHJp dl9vcF9yZWFkX21zciwKLSAgICAud3JpdGVfbXNyICAgICAgICAgICA9IHByaXZfb3Bfd3JpdGVf bXNyLAotICAgIC5jcHVpZCAgICAgICAgICAgICAgID0gcHZfZW11bF9jcHVpZCwKLSAgICAud2Jp bnZkICAgICAgICAgICAgICA9IHByaXZfb3Bfd2JpbnZkLAotfTsKLQotc3RhdGljIGludCBlbXVs YXRlX3ByaXZpbGVnZWRfb3Aoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgc3Ry dWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vy ci0+ZG9tYWluOwotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgY3R4dCA9IHsKLSAgICAgICAgLmN0 eHQucmVncyA9IHJlZ3MsCi0gICAgICAgIC5jdHh0LnZlbmRvciA9IGN1cnJkLT5hcmNoLmNwdWlk LT54ODZfdmVuZG9yLAotICAgICAgICAuY3R4dC5sbWEgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGN1 cnJkKSwKLSAgICB9OwotICAgIGludCByYzsKLSAgICB1bnNpZ25lZCBpbnQgZWZsYWdzLCBhcjsK LQotICAgIGlmICggIXJlYWRfZGVzY3JpcHRvcihyZWdzLT5jcywgY3VyciwgJmN0eHQuY3MuYmFz ZSwgJmN0eHQuY3MubGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZhciwgMSkgfHwK LSAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9TKSB8fAotICAgICAgICAgIShhciAmIF9TRUdNRU5U X1ApIHx8Ci0gICAgICAgICAhKGFyICYgX1NFR01FTlRfQ09ERSkgKQotICAgICAgICByZXR1cm4g MDsKLQotICAgIC8qIE1pcnJvciB2aXJ0dWFsaXplZCBzdGF0ZSBpbnRvIEVGTEFHUy4gKi8KLSAg ICBBU1NFUlQocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JRik7Ci0gICAgaWYgKCB2Y3B1X2lu Zm8oY3VyciwgZXZ0Y2huX3VwY2FsbF9tYXNrKSApCi0gICAgICAgIHJlZ3MtPmVmbGFncyAmPSB+ WDg2X0VGTEFHU19JRjsKLSAgICBlbHNlCi0gICAgICAgIHJlZ3MtPmVmbGFncyB8PSBYODZfRUZM QUdTX0lGOwotICAgIEFTU0VSVCghKHJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfSU9QTCkpOwot ICAgIHJlZ3MtPmVmbGFncyB8PSBjdXJyLT5hcmNoLnB2X3ZjcHUuaW9wbDsKLSAgICBlZmxhZ3Mg PSByZWdzLT5lZmxhZ3M7Ci0KLSAgICBjdHh0LmN0eHQuYWRkcl9zaXplID0gYXIgJiBfU0VHTUVO VF9MID8gNjQgOiBhciAmIF9TRUdNRU5UX0RCID8gMzIgOiAxNjsKLSAgICAvKiBMZWF2ZSB6ZXJv IGluIGN0eHQuY3R4dC5zcF9zaXplLCBhcyBpdCdzIG5vdCBuZWVkZWQuICovCi0gICAgcmMgPSB4 ODZfZW11bGF0ZSgmY3R4dC5jdHh0LCAmcHJpdl9vcF9vcHMpOwotCi0gICAgaWYgKCBjdHh0Lmlv X2VtdWxfc3R1YiApCi0gICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGN0eHQuaW9fZW11bF9zdHVi KTsKLQotICAgIC8qCi0gICAgICogVW4tbWlycm9yIHZpcnR1YWxpemVkIHN0YXRlIGZyb20gRUZM QUdTLgotICAgICAqIE5vdGhpbmcgd2UgYWxsb3cgdG8gYmUgZW11bGF0ZWQgY2FuIGNoYW5nZSBh bnl0aGluZyBvdGhlciB0aGFuIHRoZQotICAgICAqIGFyaXRobWV0aWMgYml0cywgYW5kIHRoZSBy ZXN1bWUgZmxhZy4KLSAgICAgKi8KLSAgICBBU1NFUlQoISgocmVncy0+ZWZsYWdzIF4gZWZsYWdz KSAmCi0gICAgICAgICAgICAgfihYODZfRUZMQUdTX1JGIHwgWDg2X0VGTEFHU19BUklUSF9NQVNL KSkpOwotICAgIHJlZ3MtPmVmbGFncyB8PSBYODZfRUZMQUdTX0lGOwotICAgIHJlZ3MtPmVmbGFn cyAmPSB+WDg2X0VGTEFHU19JT1BMOwotCi0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBj YXNlIFg4NkVNVUxfT0tBWToKLSAgICAgICAgaWYgKCBjdHh0LnRzYyAmIFRTQ19CQVNFICkKLSAg ICAgICAgewotICAgICAgICAgICAgaWYgKCBjdHh0LnRzYyAmIFRTQ19BVVggKQotICAgICAgICAg ICAgICAgIHB2X3NvZnRfcmR0c2MoY3VyciwgcmVncywgMSk7Ci0gICAgICAgICAgICBlbHNlIGlm ICggY3VycmQtPmFyY2gudnRzYyApCi0gICAgICAgICAgICAgICAgcHZfc29mdF9yZHRzYyhjdXJy LCByZWdzLCAwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtc3Jfc3BsaXQo cmVncywgcmR0c2MoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGN0eHQuY3R4dC5yZXRp cmUuc2luZ2xlc3RlcCApCi0gICAgICAgICAgICBjdHh0LmJwbWF0Y2ggfD0gRFJfU1RFUDsKLSAg ICAgICAgaWYgKCBjdHh0LmJwbWF0Y2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyLT5h cmNoLmRlYnVncmVnWzZdIHw9IGN0eHQuYnBtYXRjaCB8IERSX1NUQVRVU19SRVNFUlZFRF9PTkU7 Ci0gICAgICAgICAgICBpZiAoICEoY3Vyci0+YXJjaC5wdl92Y3B1LnRyYXBfYm91bmNlLmZsYWdz ICYgVEJGX0VYQ0VQVElPTikgKQotICAgICAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRp b24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKLSAgICAgICAgfQotICAgICAgICAvKiBm YWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfUkVUUlk6Ci0gICAgICAgIHJldHVybiBF WENSRVRfZmF1bHRfZml4ZWQ7Ci0KLSAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgotICAgICAg ICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuY3R4dC5ldmVudCk7Ci0gICAgICAgIHJldHVybiBFWENS RVRfZmF1bHRfZml4ZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxp bmUgaW50IGNoZWNrX3N0YWNrX2xpbWl0KHVuc2lnbmVkIGludCBhciwgdW5zaWduZWQgaW50IGxp bWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVz cCwgdW5zaWduZWQgaW50IGRlY3IpCiB7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveDg2XzY0 L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3g4Nl82NC9NYWtlZmlsZQppbmRleCBkODgxNWU3OGIw Li5mMzM2YTZhZTY1IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYveDg2XzY0L01ha2VmaWxlCisr KyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQvTWFrZWZpbGUKQEAgLTEsNyArMSw2IEBACiBzdWJkaXIt eSArPSBjb21wYXQKIAogb2JqLWJpbi15ICs9IGVudHJ5Lm8KLW9iai1iaW4teSArPSBncHJfc3dp dGNoLm8KIG9iai15ICs9IHRyYXBzLm8KIG9iai0kKENPTkZJR19LRVhFQykgKz0gbWFjaGluZV9r ZXhlYy5vCiBvYmoteSArPSBwY2kubwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9w di90cmFwcy5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi90cmFwcy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjMyYzdiYWM1ODcKLS0tIC9kZXYvbnVsbAorKysgYi94 ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIHB2 L3RyYXBzLmgKKyAqCisgKiBQViBndWVzdCB0cmFwcyBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9f WDg2X1BWX1RSQVBTX0hfXworI2RlZmluZSBfX1g4Nl9QVl9UUkFQU19IX18KKworI2lmZGVmIENP TkZJR19QVgorCisjaW5jbHVkZSA8cHVibGljL3hlbi5oPgorCitpbnQgZW11bGF0ZV9wcml2aWxl Z2VkX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKTsKKworI2Vsc2UgIC8qICFDT05GSUdf UFYgKi8KKworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorCitpbnQgZW11bGF0ZV9wcml2aWxlZ2Vk X29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKSB7IHJldHVybiAtRU9QTk9UU1VQUDsgfQor CisjZW5kaWYJLyogQ09ORklHX1BWICovCisKKyNlbmRpZgkvKiBfX1g4Nl9QVl9UUkFQU19IX18g Ki8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHls ZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVu dC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK