From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Brown Subject: [PATCH 01/14] ASoC: Add driver for s6000 I2S interface Date: Tue, 14 Apr 2009 13:32:59 +0100 Message-ID: <1239712393-6428-1-git-send-email-broonie@opensource.wolfsonmicro.com> References: <20090414123220.GA6342@rakim.wolfsonmicro.main> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from opensource2.wolfsonmicro.com (opensource.wolfsonmicro.com [80.75.67.52]) by alsa0.perex.cz (Postfix) with ESMTP id 5771110384C for ; Tue, 14 Apr 2009 14:33:16 +0200 (CEST) In-Reply-To: <20090414123220.GA6342@rakim.wolfsonmicro.main> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Takashi Iwai Cc: alsa-devel@alsa-project.org, Mark Brown , =?utf-8?q?Daniel=20Gl=C3=B6ckner?= List-Id: alsa-devel@alsa-project.org RnJvbTogRGFuaWVsIEdsw7Zja25lciA8ZGdAZW1saXguY29tPgoKVGhpcyBwYXRjaCBhZGRzIGEg ZHJpdmVyIGZvciB0aGUgSTJTIGludGVyZmFjZSBmb3VuZCBvbiBTdHJldGNoIHM2MDAwCmZhbWls eSBwcm9jZXNzb3JzLgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsIEdsw7Zja25lciA8ZGdAZW1saXgu Y29tPgpTaWduZWQtb2ZmLWJ5OiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNv bm1pY3JvLmNvbT4KLS0tCiBzb3VuZC9zb2MvS2NvbmZpZyAgICAgICAgICAgfCAgICAxICsKIHNv dW5kL3NvYy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDEgKwogc291bmQvc29jL3M2MDAwL0tjb25m aWcgICAgIHwgICAxMCArCiBzb3VuZC9zb2MvczYwMDAvTWFrZWZpbGUgICAgfCAgICA2ICsKIHNv dW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYyB8ICA2MjkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5oIHwgICAyNSAr Kwogc291bmQvc29jL3M2MDAwL3M2MDAwLXBjbS5jIHwgIDQ5NyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzb3VuZC9zb2MvczYwMDAvczYwMDAtcGNtLmggfCAgIDM1ICsrKwog OCBmaWxlcyBjaGFuZ2VkLCAxMjA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3M2MDAwL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzb3VuZC9zb2MvczYwMDAvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2Mv czYwMDAvczYwMDAtaTJzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvczYwMDAvczYw MDAtaTJzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvczYwMDAvczYwMDAtcGNtLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvczYwMDAvczYwMDAtcGNtLmgKCmRpZmYgLS1n aXQgYS9zb3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IDNkMmJiNmYu LjMzMDRmOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9L Y29uZmlnCkBAIC0zMiw2ICszMiw3IEBAIHNvdXJjZSAic291bmQvc29jL2ZzbC9LY29uZmlnIgog c291cmNlICJzb3VuZC9zb2Mvb21hcC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvcHhhL0tj b25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9zM2MyNHh4L0tjb25maWciCitzb3VyY2UgInNvdW5k L3NvYy9zNjAwMC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mvc2gvS2NvbmZpZyIKIAogIyBT dXBwb3J0ZWQgY29kZWNzCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvTWFrZWZpbGUgYi9zb3VuZC9z b2MvTWFrZWZpbGUKaW5kZXggMDIzNzg3OS4uODk0M2ExNCAxMDA2NDQKLS0tIGEvc291bmQvc29j L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9NYWtlZmlsZQpAQCAtMTAsNCArMTAsNSBAQCBvYmot JChDT05GSUdfU05EX1NPQykJKz0gZnNsLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IG9tYXAv CiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gcHhhLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9 IHMzYzI0eHgvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gczYwMDAvCiBvYmotJChDT05GSUdf U05EX1NPQykJKz0gc2gvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvS2NvbmZpZyBiL3Nv dW5kL3NvYy9zNjAwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjRiZmM4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczYwMDAvS2NvbmZpZwpAQCAt MCwwICsxLDEwIEBACitjb25maWcgU05EX1M2MDAwX1NPQworCXRyaXN0YXRlICJTb0MgQXVkaW8g Zm9yIHRoZSBTdHJldGNoIHM2MDAwIGZhbWlseSIKKwlkZXBlbmRzIG9uIFhURU5TQV9WQVJJQU5U X1M2MDAwCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBm b3IgY29kZWNzIGF0dGFjaGVkIHRvCisJICBzNjAwMCBmYW1pbHkgY2hpcHMuIFlvdSB3aWxsIGFs c28gbmVlZCB0byBzZWxlY3QgdGhlIHBsYXRmb3JtCisJICB0byBzdXBwb3J0IGJlbG93LgorCitj b25maWcgU05EX1M2MDAwX1NPQ19JMlMKKwl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29j L3M2MDAwL01ha2VmaWxlIGIvc291bmQvc29jL3M2MDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTVmODcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9z b2MvczYwMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjIHM2MDAwIFBsYXRmb3JtIFN1cHBv cnQKK3NuZC1zb2MtczYwMDAtb2JqcyA6PSBzNjAwMC1wY20ubworc25kLXNvYy1zNjAwMC1pMnMt b2JqcyA6PSBzNjAwMC1pMnMubworCitvYmotJChDT05GSUdfU05EX1M2MDAwX1NPQykgKz0gc25k LXNvYy1zNjAwMC5vCitvYmotJChDT05GSUdfU05EX1M2MDAwX1NPQ19JMlMpICs9IHNuZC1zb2Mt czYwMDAtaTJzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYyBiL3Nv dW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5kY2M3OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3M2MDAwL3M2MDAwLWky cy5jCkBAIC0wLDAgKzEsNjI5IEBACisvKgorICogQUxTQSBTb0MgSTJTIEF1ZGlvIExheWVyIGZv ciB0aGUgU3RyZXRjaCBTNjAwMCBmYW1pbHkKKyAqCisgKiBBdXRob3I6ICAgICAgRGFuaWVsIEds b2Vja25lciwgPGRnQGVtbGl4LmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSBlbWxpeCBH bWJIIDxpbmZvQGVtbGl4LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9p by5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgor I2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+ CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJzNjAwMC1pMnMuaCIKKyNpbmNs dWRlICJzNjAwMC1wY20uaCIKKworc3RydWN0IHM2MDAwX2kyc19kZXYgeworCWRtYV9hZGRyX3Qg c2lmYmFzZTsKKwl1OCBfX2lvbWVtICpzY2JiYXNlOworCXVuc2lnbmVkIGludCB3aWRlOworCXVu c2lnbmVkIGludCBjaGFubmVsX2luOworCXVuc2lnbmVkIGludCBjaGFubmVsX291dDsKKwl1bnNp Z25lZCBpbnQgbGluZXNfaW47CisJdW5zaWduZWQgaW50IGxpbmVzX291dDsKKwlzdHJ1Y3QgczYw MDBfcGNtX2RtYV9wYXJhbXMgZG1hX3BhcmFtczsKK307CisKKyNkZWZpbmUgUzZfSTJTX0lOVEVS UlVQVF9TVEFUVVMJMHgwMAorI2RlZmluZSAgIFM2X0kyU19JTlRfT1ZFUlJVTgkxCisjZGVmaW5l ICAgUzZfSTJTX0lOVF9VTkRFUlJVTgkyCisjZGVmaW5lICAgUzZfSTJTX0lOVF9BTElHTk1FTlQJ NAorI2RlZmluZSBTNl9JMlNfSU5URVJSVVBUX0VOQUJMRQkweDA0CisjZGVmaW5lIFM2X0kyU19J TlRFUlJVUFRfUkFXCTB4MDgKKyNkZWZpbmUgUzZfSTJTX0lOVEVSUlVQVF9DTEVBUgkweDBDCisj ZGVmaW5lIFM2X0kyU19JTlRFUlJVUFRfU0VUCTB4MTAKKyNkZWZpbmUgUzZfSTJTX01PREUJCTB4 MjAKKyNkZWZpbmUgICBTNl9JMlNfRFVBTAkJMAorI2RlZmluZSAgIFM2X0kyU19XSURFCQkxCisj ZGVmaW5lIFM2X0kyU19UWF9ERUZBVUxUCTB4MjQKKyNkZWZpbmUgUzZfSTJTX0RBVEFfQ0ZHKGMp CSgweDQwICsgMHgxMCAqIChjKSkKKyNkZWZpbmUgICBTNl9JMlNfSU4JCTAKKyNkZWZpbmUgICBT Nl9JMlNfT1VUCQkxCisjZGVmaW5lICAgUzZfSTJTX1VOVVNFRAkJMgorI2RlZmluZSBTNl9JMlNf SU5URVJGQUNFX0NGRyhjKQkoMHg0NCArIDB4MTAgKiAoYykpCisjZGVmaW5lICAgUzZfSTJTX0RJ Vl9NQVNLCTB4MDAxZmZmCisjZGVmaW5lICAgUzZfSTJTXzE2QklUCQkweDAwMDAwMAorI2RlZmlu ZSAgIFM2X0kyU18yMEJJVAkJMHgwMDIwMDAKKyNkZWZpbmUgICBTNl9JMlNfMjRCSVQJCTB4MDA0 MDAwCisjZGVmaW5lICAgUzZfSTJTXzMyQklUCQkweDAwNjAwMAorI2RlZmluZSAgIFM2X0kyU19C SVRTX01BU0sJMHgwMDYwMDAKKyNkZWZpbmUgICBTNl9JMlNfTUVNXzE2QklUCTB4MDAwMDAwCisj ZGVmaW5lICAgUzZfSTJTX01FTV8zMkJJVAkweDAwODAwMAorI2RlZmluZSAgIFM2X0kyU19NRU1f TUFTSwkweDAwODAwMAorI2RlZmluZSAgIFM2X0kyU19DSEFOTkVMU19TSElGVAkxNgorI2RlZmlu ZSAgIFM2X0kyU19DSEFOTkVMU19NQVNLCTB4MDMwMDAwCisjZGVmaW5lICAgUzZfSTJTX1NDS19J TgkJMHgwMDAwMDAKKyNkZWZpbmUgICBTNl9JMlNfU0NLX09VVAkweDA0MDAwMAorI2RlZmluZSAg IFM2X0kyU19TQ0tfRElSCTB4MDQwMDAwCisjZGVmaW5lICAgUzZfSTJTX1dTX0lOCQkweDAwMDAw MAorI2RlZmluZSAgIFM2X0kyU19XU19PVVQJCTB4MDgwMDAwCisjZGVmaW5lICAgUzZfSTJTX1dT X0RJUgkJMHgwODAwMDAKKyNkZWZpbmUgICBTNl9JMlNfTEVGVF9GSVJTVAkweDAwMDAwMAorI2Rl ZmluZSAgIFM2X0kyU19SSUdIVF9GSVJTVAkweDEwMDAwMAorI2RlZmluZSAgIFM2X0kyU19GSVJT VAkJMHgxMDAwMDAKKyNkZWZpbmUgICBTNl9JMlNfQ1VSX1NDSwkweDIwMDAwMAorI2RlZmluZSAg IFM2X0kyU19DVVJfV1MJCTB4NDAwMDAwCisjZGVmaW5lIFM2X0kyU19FTkFCTEUoYykJKDB4NDgg KyAweDEwICogKGMpKQorI2RlZmluZSAgIFM2X0kyU19ESVNBQkxFX0lGCTB4MDIKKyNkZWZpbmUg ICBTNl9JMlNfRU5BQkxFX0lGCTB4MDMKKyNkZWZpbmUgICBTNl9JMlNfSVNfQlVTWQkweDA0Cisj ZGVmaW5lICAgUzZfSTJTX0RNQV9BQ1RJVkUJMHgwOAorI2RlZmluZSAgIFM2X0kyU19JU19FTkFC TEVECTB4MTAKKworI2RlZmluZSBTNl9JMlNfTlVNX0xJTkVTCTQKKworI2RlZmluZSBTNl9JMlNf U0lGX1BPUlQwCTB4MDAwMDAwMAorI2RlZmluZSBTNl9JMlNfU0lGX1BPUlQxCTB4MDAwMDA4MCAv KiBkb2NzIHNheSAweDAwMDAwMTAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHM2X2kyc193cml0 ZV9yZWcoc3RydWN0IHM2MDAwX2kyc19kZXYgKmRldiwgaW50IHJlZywgdTMyIHZhbCkKK3sKKwl3 cml0ZWwodmFsLCBkZXYtPnNjYmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBz Nl9pMnNfcmVhZF9yZWcoc3RydWN0IHM2MDAwX2kyc19kZXYgKmRldiwgaW50IHJlZykKK3sKKwly ZXR1cm4gcmVhZGwoZGV2LT5zY2JiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IHM2X2kyc19tb2RfcmVnKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYsIGludCByZWcsCisJCQkJ ICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl2YWwgXj0gczZfaTJzX3JlYWRfcmVnKGRldiwgcmVn KSAmIH5tYXNrOworCXM2X2kyc193cml0ZV9yZWcoZGV2LCByZWcsIHZhbCk7Cit9CisKK3N0YXRp YyB2b2lkIHM2MDAwX2kyc19zdGFydF9jaGFubmVsKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYs IGludCBjaGFubmVsKQoreworCWludCBpLCBqLCBjdXIsIHByZXY7CisKKwkvKgorCSAqIFdhaXQg Zm9yIFdDTEsgdG8gdG9nZ2xlIDUgdGltZXMgYmVmb3JlIGVuYWJsaW5nIHRoZSBjaGFubmVsCisJ ICogczYwMDAgRmFtaWx5IERhdGFzaGVldCAzLjYuNDoKKwkgKiAgICJBdCBsZWFzdCB0d28gY3lj bGVzIG9mIFdTIG11c3Qgb2NjdXIgYmV0d2VlbiBjb21tYW5kcworCSAqICAgIHRvIGRpc2FibGUg b3IgZW5hYmxlIHRoZSBpbnRlcmZhY2UiCisJICovCisJaiA9IDA7CisJcHJldiA9IH5TNl9JMlNf Q1VSX1dTOworCWZvciAoaSA9IDEwMDAwMDA7IC0taSAmJiBqIDwgNjsgKSB7CisJCWN1ciA9IHM2 X2kyc19yZWFkX3JlZyhkZXYsIFM2X0kyU19JTlRFUkZBQ0VfQ0ZHKGNoYW5uZWwpKQorCQkgICAg ICAgJiBTNl9JMlNfQ1VSX1dTOworCQlpZiAocHJldiAhPSBjdXIpIHsKKwkJCXByZXYgPSBjdXI7 CisJCQlqKys7CisJCX0KKwl9CisJaWYgKGogPCA2KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJz NjAwMC1pMnM6IHRpbWVvdXQgd2FpdGluZyBmb3IgV0NMS1xuIik7CisKKwlzNl9pMnNfd3JpdGVf cmVnKGRldiwgUzZfSTJTX0VOQUJMRShjaGFubmVsKSwgUzZfSTJTX0VOQUJMRV9JRik7Cit9CisK K3N0YXRpYyB2b2lkIHM2MDAwX2kyc19zdG9wX2NoYW5uZWwoc3RydWN0IHM2MDAwX2kyc19kZXYg KmRldiwgaW50IGNoYW5uZWwpCit7CisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19FTkFC TEUoY2hhbm5lbCksIFM2X0kyU19ESVNBQkxFX0lGKTsKK30KKworc3RhdGljIHZvaWQgczYwMDBf aTJzX3N0YXJ0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVj dCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlz dHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2ID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0 YTsKKwlpbnQgY2hhbm5lbDsKKworCWNoYW5uZWwgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05E UlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPworCQkJZGV2LT5jaGFubmVsX291dCA6IGRldi0+Y2hh bm5lbF9pbjsKKworCXM2MDAwX2kyc19zdGFydF9jaGFubmVsKGRldiwgY2hhbm5lbCk7Cit9CisK K3N0YXRpYyB2b2lkIHM2MDAwX2kyc19zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0t PnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2ID0gcnRkLT5kYWktPmNw dV9kYWktPnByaXZhdGVfZGF0YTsKKwlpbnQgY2hhbm5lbDsKKworCWNoYW5uZWwgPSAoc3Vic3Ry ZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPworCQkJZGV2LT5jaGFu bmVsX291dCA6IGRldi0+Y2hhbm5lbF9pbjsKKworCXM2MDAwX2kyc19zdG9wX2NoYW5uZWwoZGV2 LCBjaGFubmVsKTsKK30KKworc3RhdGljIGludCBzNjAwMF9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25k X3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCSAgICAgaW50IGFmdGVyKQor eworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNl IFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNF X1JFTEVBU0U6CisJCWlmICgoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9D QVBUVVJFKSBeICFhZnRlcikKKwkJCXM2MDAwX2kyc19zdGFydChzdWJzdHJlYW0pOworCQlicmVh azsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dF Ul9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJaWYgKCFh ZnRlcikKKwkJCXM2MDAwX2kyc19zdG9wKHN1YnN0cmVhbSk7CisJfQorCXJldHVybiAwOworfQor CitzdGF0aWMgdW5zaWduZWQgaW50IHM2MDAwX2kyc19pbnRfc291cmNlcyhzdHJ1Y3QgczYwMDBf aTJzX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nOworCXBlbmRpbmcgPSBzNl9p MnNfcmVhZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJSVVBUX1JBVyk7CisJcGVuZGluZyAmPSBTNl9J MlNfSU5UX0FMSUdOTUVOVCB8CisJCSAgIFM2X0kyU19JTlRfVU5ERVJSVU4gfAorCQkgICBTNl9J MlNfSU5UX09WRVJSVU47CisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19JTlRFUlJVUFRf Q0xFQVIsIHBlbmRpbmcpOworCisJcmV0dXJuIHBlbmRpbmc7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBpbnQgczYwMDBfaTJzX2NoZWNrX3hydW4oc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQor eworCXN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJ dW5zaWduZWQgaW50IGVycm9yczsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJZXJyb3JzID0gczYw MDBfaTJzX2ludF9zb3VyY2VzKGRldik7CisJaWYgKGxpa2VseSghZXJyb3JzKSkKKwkJcmV0dXJu IDA7CisKKwlyZXQgPSAwOworCWlmIChlcnJvcnMgJiBTNl9JMlNfSU5UX0FMSUdOTUVOVCkKKwkJ cHJpbnRrKEtFUk5fRVJSICJzNjAwMC1pMnM6IFdDTEsgbWlzYWxpZ25lZFxuIik7CisJaWYgKGVy cm9ycyAmIFM2X0kyU19JTlRfVU5ERVJSVU4pCisJCXJldCB8PSAxIDw8IFNORFJWX1BDTV9TVFJF QU1fUExBWUJBQ0s7CisJaWYgKGVycm9ycyAmIFM2X0kyU19JTlRfT1ZFUlJVTikKKwkJcmV0IHw9 IDEgPDwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIHM2MDAwX2kyc193YWl0X2Rpc2FibGVkKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYp Cit7CisJaW50IGNoYW5uZWw7CisJaW50IG4gPSA1MDsKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFu bmVsIDwgMjsgY2hhbm5lbCsrKSB7CisJCXdoaWxlICgtLW4gPj0gMCkgeworCQkJaW50IHYgPSBz Nl9pMnNfcmVhZF9yZWcoZGV2LCBTNl9JMlNfRU5BQkxFKGNoYW5uZWwpKTsKKwkJCWlmICgodiAm IFM2X0kyU19JU19FTkFCTEVEKQorCQkJICAgIHx8ICEodiAmIChTNl9JMlNfRE1BX0FDVElWRSB8 IFM2X0kyU19JU19CVVNZKSkpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMjApOworCQl9CisJfQor CWlmIChuIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiczYwMDAtaTJzOiB0aW1lb3V0IGRp c2FibGluZyBpbnRlcmZhY2VzIik7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfaTJzX3NldF9kYWlf Zm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZm10 KQoreworCXN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7 CisJdTMyIHc7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7 CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQl3ID0gUzZfSTJTX1NDS19JTiB8IFM2 X0kyU19XU19JTjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCQl3 ID0gUzZfSTJTX1NDS19PVVQgfCBTNl9JMlNfV1NfSU47CisJCWJyZWFrOworCWNhc2UgU05EX1NP Q19EQUlGTVRfQ0JNX0NGUzoKKwkJdyA9IFM2X0kyU19TQ0tfSU4gfCBTNl9JMlNfV1NfT1VUOwor CQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCXcgPSBTNl9JMlNfU0NL X09VVCB8IFM2X0kyU19XU19PVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwlj YXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQl3IHw9IFM2X0kyU19MRUZUX0ZJUlNUOworCQli cmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQl3IHw9IFM2X0kyU19SSUdIVF9G SVJTVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJczZf aTJzX21vZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRygwKSwKKwkJICAgICAgIFM2X0ky U19GSVJTVCB8IFM2X0kyU19XU19ESVIgfCBTNl9JMlNfU0NLX0RJUiwgdyk7CisJczZfaTJzX21v ZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRygxKSwKKwkJICAgICAgIFM2X0kyU19GSVJT VCB8IFM2X0kyU19XU19ESVIgfCBTNl9JMlNfU0NLX0RJUiwgdyk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBzNjAwMF9pMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmRh aSwgaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2ID0g ZGFpLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWRpdiB8fCAoZGl2ICYgMSkgfHwgZGl2ID4gKFM2 X0kyU19ESVZfTUFTSyArIDEpICogMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzNl9pMnNfbW9k X3JlZyhkZXYsIFM2X0kyU19JTlRFUkZBQ0VfQ0ZHKGRpdl9pZCksCisJCSAgICAgICBTNl9JMlNf RElWX01BU0ssIGRpdiAvIDIgLSAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNjAw MF9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJ ICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICAgIHN0cnVj dCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYgPSBkYWkt PnByaXZhdGVfZGF0YTsKKwlpbnQgaW50ZXJmOworCXUzMiB3ID0gMDsKKworCWlmIChkZXYtPndp ZGUpCisJCWludGVyZiA9IDA7CisJZWxzZSB7CisJCXcgfD0gKCgocGFyYW1zX2NoYW5uZWxzKHBh cmFtcykgLSAyKSAvIDIpCisJCSAgICAgIDw8IFM2X0kyU19DSEFOTkVMU19TSElGVCkgJiBTNl9J MlNfQ0hBTk5FTFNfTUFTSzsKKwkJaW50ZXJmID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJW X1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQkJPyBkZXYtPmNoYW5uZWxfb3V0IDogZGV2LT5jaGFu bmVsX2luOworCX0KKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBT TkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJdyB8PSBTNl9JMlNfMTZCSVQgfCBTNl9JMlNfTUVN XzE2QklUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQl3IHw9 IFM2X0kyU18zMkJJVCB8IFM2X0kyU19NRU1fMzJCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXByaW50ayhLRVJOX1dBUk5JTkcgInM2MDAwLWkyczogdW5zdXBwb3J0ZWQgUENNIGZvcm1hdCAl eFxuIiwKKwkJICAgICAgIHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWlmIChzNl9pMnNfcmVhZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRyhp bnRlcmYpKQorCSAgICAgJiBTNl9JMlNfSVNfRU5BQkxFRCkgeworCQlwcmludGsoS0VSTl9FUlIg InM2MDAwLWkyczogaW50ZXJmYWNlIGFscmVhZHkgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUJV U1k7CisJfQorCisJczZfaTJzX21vZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRyhpbnRl cmYpLAorCQkgICAgICAgUzZfSTJTX0NIQU5ORUxTX01BU0t8UzZfSTJTX01FTV9NQVNLfFM2X0ky U19CSVRTX01BU0ssCisJCSAgICAgICB3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHM2MDAwX2kyc19kYWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAg ICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAq ZGV2ID0gZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3NuZF9wbGF0Zm9ybV9kYXRh ICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFwZGF0YSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlkZXYtPndpZGUgPSBwZGF0YS0+d2lkZTsKKwlkZXYtPmNoYW5uZWxf aW4gPSBwZGF0YS0+Y2hhbm5lbF9pbjsKKwlkZXYtPmNoYW5uZWxfb3V0ID0gcGRhdGEtPmNoYW5u ZWxfb3V0OworCWRldi0+bGluZXNfaW4gPSBwZGF0YS0+bGluZXNfaW47CisJZGV2LT5saW5lc19v dXQgPSBwZGF0YS0+bGluZXNfb3V0OworCisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19N T0RFLAorCQkJIGRldi0+d2lkZSA/IFM2X0kyU19XSURFIDogUzZfSTJTX0RVQUwpOworCisJaWYg KGRldi0+d2lkZSkgeworCQlpbnQgaTsKKworCQlpZiAoZGV2LT5saW5lc19pbiArIGRldi0+bGlu ZXNfb3V0ID4gUzZfSTJTX05VTV9MSU5FUykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRldi0+ Y2hhbm5lbF9pbiA9IDA7CisJCWRldi0+Y2hhbm5lbF9vdXQgPSAxOworCQlkYWktPmNhcHR1cmUu Y2hhbm5lbHNfbWluID0gMiAqIGRldi0+bGluZXNfaW47CisJCWRhaS0+Y2FwdHVyZS5jaGFubmVs c19tYXggPSBkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluOworCQlkYWktPnBsYXliYWNrLmNoYW5u ZWxzX21pbiA9IDIgKiBkZXYtPmxpbmVzX291dDsKKwkJZGFpLT5wbGF5YmFjay5jaGFubmVsc19t YXggPSBkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2 LT5saW5lc19vdXQ7IGkrKykKKwkJCXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9JMlNfREFUQV9D RkcoaSksIFM2X0kyU19PVVQpOworCisJCWZvciAoOyBpIDwgUzZfSTJTX05VTV9MSU5FUyAtIGRl di0+bGluZXNfaW47IGkrKykKKwkJCXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9JMlNfREFUQV9D RkcoaSksCisJCQkJCSBTNl9JMlNfVU5VU0VEKTsKKworCQlmb3IgKDsgaSA8IFM2X0kyU19OVU1f TElORVM7IGkrKykKKwkJCXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9JMlNfREFUQV9DRkcoaSks IFM2X0kyU19JTik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IGNmZ1syXSA9IHtTNl9JMlNf VU5VU0VELCBTNl9JMlNfVU5VU0VEfTsKKworCQlpZiAoZGV2LT5saW5lc19pbiA+IDEgfHwgZGV2 LT5saW5lc19vdXQgPiAxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZGFpLT5jYXB0dXJlLmNo YW5uZWxzX21pbiA9IDIgKiBkZXYtPmxpbmVzX2luOworCQlkYWktPmNhcHR1cmUuY2hhbm5lbHNf bWF4ID0gOCAqIGRldi0+bGluZXNfaW47CisJCWRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluID0g MiAqIGRldi0+bGluZXNfb3V0OworCQlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21heCA9IDggKiBk ZXYtPmxpbmVzX291dDsKKworCQlpZiAoZGV2LT5saW5lc19pbikKKwkJCWNmZ1tkZXYtPmNoYW5u ZWxfaW5dID0gUzZfSTJTX0lOOworCQlpZiAoZGV2LT5saW5lc19vdXQpCisJCQljZmdbZGV2LT5j aGFubmVsX291dF0gPSBTNl9JMlNfT1VUOworCisJCXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9J MlNfREFUQV9DRkcoMCksIGNmZ1swXSk7CisJCXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9JMlNf REFUQV9DRkcoMSksIGNmZ1sxXSk7CisJfQorCisJaWYgKGRldi0+bGluZXNfb3V0KSB7CisJCWlm IChkZXYtPmxpbmVzX2luKSB7CisJCQlpZiAoIWRldi0+ZG1hX3BhcmFtcy5kbWFfb3V0KQorCQkJ CXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZGV2LT5kbWFfcGFyYW1zLmRtYV9vdXQg PSBkZXYtPmRtYV9wYXJhbXMuZG1hX2luOworCQkJZGV2LT5kbWFfcGFyYW1zLmRtYV9pbiA9IDA7 CisJCX0KKwl9CisJZGV2LT5kbWFfcGFyYW1zLnNpZl9pbiA9IGRldi0+c2lmYmFzZSArIChkZXYt PmNoYW5uZWxfaW4gPworCQkJCQlTNl9JMlNfU0lGX1BPUlQxIDogUzZfSTJTX1NJRl9QT1JUMCk7 CisJZGV2LT5kbWFfcGFyYW1zLnNpZl9vdXQgPSBkZXYtPnNpZmJhc2UgKyAoZGV2LT5jaGFubmVs X291dCA/CisJCQkJCVM2X0kyU19TSUZfUE9SVDEgOiBTNl9JMlNfU0lGX1BPUlQwKTsKKwlkZXYt PmRtYV9wYXJhbXMuc2FtZV9yYXRlID0gcGRhdGEtPnNhbWVfcmF0ZSB8IHBkYXRhLT53aWRlOwor CXJldHVybiAwOworfQorCisjZGVmaW5lIFM2MDAwX0kyU19SQVRFUwkoU05EUlZfUENNX1JBVEVf Q09OVElOVU9VUyB8IFNORFJWX1BDTV9SQVRFXzU1MTIgfCBcCisJCQkgU05EUlZfUENNX1JBVEVf ODAwMF8xOTIwMDApCisjZGVmaW5lIFM2MDAwX0kyU19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklU X1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9z b2NfZGFpX29wcyBzNjAwMF9pMnNfZGFpX29wcyA9IHsKKwkuc2V0X2ZtdCA9IHM2MDAwX2kyc19z ZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2RpdiA9IHM2MDAwX2kyc19zZXRfY2xrZGl2LAorCS5od19w YXJhbXMgPSBzNjAwMF9pMnNfaHdfcGFyYW1zLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHM2 MDAwX2kyc19kYWkgPSB7CisJLm5hbWUgPSAiczYwMDAtaTJzIiwKKwkuaWQgPSAwLAorCS5wcm9i ZSA9IHM2MDAwX2kyc19kYWlfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWlu ID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5mb3JtYXRzID0gUzYwMDBfSTJTX0ZPUk1B VFMsCisJCS5yYXRlcyA9IFM2MDAwX0kyU19SQVRFUywKKwkJLnJhdGVfbWluID0gMCwKKwkJLnJh dGVfbWF4ID0gMTU2MjUwMCwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0g MiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5mb3JtYXRzID0gUzYwMDBfSTJTX0ZPUk1BVFMs CisJCS5yYXRlcyA9IFM2MDAwX0kyU19SQVRFUywKKwkJLnJhdGVfbWluID0gMCwKKwkJLnJhdGVf bWF4ID0gMTU2MjUwMCwKKwl9LAorCS5vcHMgPSAmczYwMDBfaTJzX2RhaV9vcHMsCit9CitFWFBP UlRfU1lNQk9MX0dQTChzNjAwMF9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2RldmluaXQgczYw MDBfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHM2 MDAwX2kyc19kZXYgKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnNjYm1lbSwgKnNpZm1lbSwgKnJl Z2lvbiwgKmRtYTEsICpkbWEyOworCXU4IF9faW9tZW0gKm1taW87CisJaW50IHJldDsKKworCXNj Ym1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJ aWYgKCFzY2JtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtIHJlc291cmNlP1xu Iik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3JlbGVhc2Vfbm9uZTsKKwl9CisKKwly ZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oc2NibWVtLT5zdGFydCwKKwkJCQkgICAgc2NibWVt LT5lbmQgLSBzY2JtZW0tPnN0YXJ0ICsgMSwKKwkJCQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFy ZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJTIFNDQiByZWdpb24gYWxyZWFkeSBj bGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yZWxlYXNlX25vbmU7CisJ fQorCisJbW1pbyA9IGlvcmVtYXAoc2NibWVtLT5zdGFydCwgc2NibWVtLT5lbmQgLSBzY2JtZW0t PnN0YXJ0ICsgMSk7CisJaWYgKCFtbWlvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0 IGlvcmVtYXAgU0NCIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3Jl bGVhc2Vfc2NiOworCX0KKworCXNpZm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFzaWZtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAibm8gc2Vjb25kIG1lbSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3Rv IGVycl9yZWxlYXNlX21hcDsKKwl9CisKKwlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oc2lm bWVtLT5zdGFydCwKKwkJCQkgICAgc2lmbWVtLT5lbmQgLSBzaWZtZW0tPnN0YXJ0ICsgMSwKKwkJ CQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiSTJTIFNJRiByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOwor CQlnb3RvIGVycl9yZWxlYXNlX21hcDsKKwl9CisKKwlkbWExID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwlpZiAoIWRtYTEpIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAibm8gZG1hIHJlc291cmNlP1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdv dG8gZXJyX3JlbGVhc2Vfc2lmOworCX0KKworCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihk bWExLT5zdGFydCwgZG1hMS0+ZW5kIC0gZG1hMS0+c3RhcnQgKyAxLAorCQkJCSAgICBwZGV2LT5u YW1lKTsKKwlpZiAoIXJlZ2lvbikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJMlMgRE1BIHJl Z2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3Jl bGVhc2Vfc2lmOworCX0KKworCWRtYTIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S RVNPVVJDRV9ETUEsIDEpOworCWlmIChkbWEyKSB7CisJCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3Jl Z2lvbihkbWEyLT5zdGFydCwKKwkJCQkJICAgIGRtYTItPmVuZCAtIGRtYTItPnN0YXJ0ICsgMSwK KwkJCQkJICAgIHBkZXYtPm5hbWUpOworCQlpZiAoIXJlZ2lvbikgeworCQkJZGV2X2VycigmcGRl di0+ZGV2LAorCQkJCSJJMlMgRE1BIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQkJcmV0 ID0gLUVCVVNZOworCQkJZ290byBlcnJfcmVsZWFzZV9kbWExOworCQl9CisJfQorCisJZGV2ID0g a3phbGxvYyhzaXplb2Yoc3RydWN0IHM2MDAwX2kyc19kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX2RtYTI7CisJfQor CisJczYwMDBfaTJzX2RhaS5kZXYgPSAmcGRldi0+ZGV2OworCXM2MDAwX2kyc19kYWkucHJpdmF0 ZV9kYXRhID0gZGV2OworCXM2MDAwX2kyc19kYWkuZG1hX2RhdGEgPSAmZGV2LT5kbWFfcGFyYW1z OworCisJZGV2LT5zaWZiYXNlID0gc2lmbWVtLT5zdGFydDsKKwlkZXYtPnNjYmJhc2UgPSBtbWlv OworCisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19JTlRFUlJVUFRfRU5BQkxFLCAwKTsK KwlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0lOVEVSUlVQVF9DTEVBUiwKKwkJCSBTNl9J MlNfSU5UX0FMSUdOTUVOVCB8CisJCQkgUzZfSTJTX0lOVF9VTkRFUlJVTiB8CisJCQkgUzZfSTJT X0lOVF9PVkVSUlVOKTsKKworCXM2MDAwX2kyc19zdG9wX2NoYW5uZWwoZGV2LCAwKTsKKwlzNjAw MF9pMnNfc3RvcF9jaGFubmVsKGRldiwgMSk7CisJczYwMDBfaTJzX3dhaXRfZGlzYWJsZWQoZGV2 KTsKKworCWRldi0+ZG1hX3BhcmFtcy5jaGVja194cnVuID0gczYwMDBfaTJzX2NoZWNrX3hydW47 CisJZGV2LT5kbWFfcGFyYW1zLnRyaWdnZXIgPSBzNjAwMF9pMnNfdHJpZ2dlcjsKKwlkZXYtPmRt YV9wYXJhbXMuZG1hX2luID0gZG1hMS0+c3RhcnQ7CisJZGV2LT5kbWFfcGFyYW1zLmRtYV9vdXQg PSBkbWEyID8gZG1hMi0+c3RhcnQgOiAwOworCWRldi0+ZG1hX3BhcmFtcy5pcnEgPSBwbGF0Zm9y bV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkZXYtPmRtYV9wYXJhbXMuaXJxIDwgMCkgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgcmVzb3VyY2U/XG4iKTsKKwkJcmV0ID0gLUVOT0RF VjsKKwkJZ290byBlcnJfcmVsZWFzZV9kZXY7CisJfQorCisJczZfaTJzX3dyaXRlX3JlZyhkZXYs IFM2X0kyU19JTlRFUlJVUFRfRU5BQkxFLAorCQkJIFM2X0kyU19JTlRfQUxJR05NRU5UIHwKKwkJ CSBTNl9JMlNfSU5UX1VOREVSUlVOIHwKKwkJCSBTNl9JMlNfSU5UX09WRVJSVU4pOworCisJcmV0 ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnM2MDAwX2kyc19kYWkpOworCWlmIChyZXQpCisJCWdv dG8gZXJyX3JlbGVhc2VfZGV2OworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlX2RldjoKKwlr ZnJlZShkZXYpOworZXJyX3JlbGVhc2VfZG1hMjoKKwlpZiAoZG1hMikKKwkJcmVsZWFzZV9tZW1f cmVnaW9uKGRtYTItPnN0YXJ0LCBkbWEyLT5lbmQgLSBkbWEyLT5zdGFydCArIDEpOworZXJyX3Jl bGVhc2VfZG1hMToKKwlyZWxlYXNlX21lbV9yZWdpb24oZG1hMS0+c3RhcnQsIGRtYTEtPmVuZCAt IGRtYTEtPnN0YXJ0ICsgMSk7CitlcnJfcmVsZWFzZV9zaWY6CisJcmVsZWFzZV9tZW1fcmVnaW9u KHNpZm1lbS0+c3RhcnQsIChzaWZtZW0tPmVuZCAtIHNpZm1lbS0+c3RhcnQpICsgMSk7CitlcnJf cmVsZWFzZV9tYXA6CisJaW91bm1hcChtbWlvKTsKK2Vycl9yZWxlYXNlX3NjYjoKKwlyZWxlYXNl X21lbV9yZWdpb24oc2NibWVtLT5zdGFydCwgKHNjYm1lbS0+ZW5kIC0gc2NibWVtLT5zdGFydCkg KyAxKTsKK2Vycl9yZWxlYXNlX25vbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg X19kZXZleGl0IHM2MDAwX2kyc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2ID0gczYwMDBfaTJzX2RhaS5wcml2YXRlX2Rh dGE7CisJc3RydWN0IHJlc291cmNlICpyZWdpb247CisJdm9pZCBfX2lvbWVtICptbWlvID0gZGV2 LT5zY2JiYXNlOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmczYwMDBfaTJzX2RhaSk7CisK KwlzNjAwMF9pMnNfc3RvcF9jaGFubmVsKGRldiwgMCk7CisJczYwMDBfaTJzX3N0b3BfY2hhbm5l bChkZXYsIDEpOworCisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19JTlRFUlJVUFRfRU5B QkxFLCAwKTsKKwlzNjAwMF9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IDA7CisJa2ZyZWUoZGV2KTsK KworCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwg MCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIHJlZ2lvbi0+ZW5kIC0gcmVn aW9uLT5zdGFydCArIDEpOworCisJcmVnaW9uID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfRE1BLCAxKTsKKwlpZiAocmVnaW9uKQorCQlyZWxlYXNlX21lbV9yZWdpb24o cmVnaW9uLT5zdGFydCwKKwkJCQkgICByZWdpb24tPmVuZCAtIHJlZ2lvbi0+c3RhcnQgKyAxKTsK KworCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg MCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIChyZWdpb24tPmVuZCAtIHJl Z2lvbi0+c3RhcnQpICsgMSk7CisKKwlpb3VubWFwKG1taW8pOworCXJlZ2lvbiA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdp b24ocmVnaW9uLT5zdGFydCwgKHJlZ2lvbi0+ZW5kIC0gcmVnaW9uLT5zdGFydCkgKyAxKTsKK30K Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczYwMDBfaTJzX2RyaXZlciA9IHsKKwku cHJvYmUgID0gczYwMDBfaTJzX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzNjAwMF9p MnNfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gInM2MDAwLWkycyIsCisJCS5v d25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczYwMDBf aTJzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzNjAw MF9pMnNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHM2MDAwX2kyc19pbml0KTsKKworc3RhdGlj IHZvaWQgX19leGl0IHM2MDAwX2kyc19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3Vu cmVnaXN0ZXIoJnM2MDAwX2kyc19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoczYwMDBfaTJzX2V4 aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgR2xvZWNrbmVyIik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIlN0cmV0Y2ggczYwMDAgZmFtaWx5IEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVf TElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvczYwMDAtaTJzLmgg Yi9zb3VuZC9zb2MvczYwMDAvczYwMDAtaTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMjM3NWZkZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zNjAwMC9zNjAw MC1pMnMuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQUxTQSBTb0MgSTJTIEF1ZGlvIExheWVy IGZvciB0aGUgU3RyZXRjaCBzNjAwMCBmYW1pbHkKKyAqCisgKiBBdXRob3I6ICAgICAgRGFuaWVs IEdsb2Vja25lciwgPGRnQGVtbGl4LmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSBlbWxp eCBHbWJIIDxpbmZvQGVtbGl4LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNp Zm5kZWYgX1M2MDAwX0kyU19ICisjZGVmaW5lIF9TNjAwMF9JMlNfSAorCitleHRlcm4gc3RydWN0 IHNuZF9zb2NfZGFpIHM2MDAwX2kyc19kYWk7CisKK3N0cnVjdCBzNjAwMF9zbmRfcGxhdGZvcm1f ZGF0YSB7CisJaW50IGxpbmVzX2luOworCWludCBsaW5lc19vdXQ7CisJaW50IGNoYW5uZWxfaW47 CisJaW50IGNoYW5uZWxfb3V0OworCWludCB3aWRlOworCWludCBzYW1lX3JhdGU7Cit9OworI2Vu ZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvczYwMDAtcGNtLmMgYi9zb3VuZC9zb2Mv czYwMDAvczYwMDAtcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNi ODAyOAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1wY20uYwpAQCAt MCwwICsxLDQ5NyBAQAorLyoKKyAqIEFMU0EgUENNIGludGVyZmFjZSBmb3IgdGhlIFN0ZXRjaCBz NjAwMCBmYW1pbHkKKyAqCisgKiBBdXRob3I6ICAgICAgRGFuaWVsIEdsb2Vja25lciwgPGRnQGVt bGl4LmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSBlbWxpeCBHbWJIIDxpbmZvQGVtbGl4 LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1t YXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxzb3Vu ZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3Bh cmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgor I2luY2x1ZGUgPHZhcmlhbnQvZG1hYy5oPgorCisjaW5jbHVkZSAiczYwMDAtcGNtLmgiCisKKyNk ZWZpbmUgUzZfUENNX1BSRUFMTE9DQVRFX1NJWkUgKDk2ICogMTAyNCkKKyNkZWZpbmUgUzZfUENN X1BSRUFMTE9DQVRFX01BWCAgKDIwNDggKiAxMDI0KQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21f aGFyZHdhcmUgczYwMDBfcGNtX2hhcmR3YXJlID0geworCS5pbmZvID0gKFNORFJWX1BDTV9JTkZP X0lOVEVSTEVBVkVEIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkgU05EUlZf UENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkgU05EUlZfUENN X0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgpLAorCS5mb3JtYXRzID0g KFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpLAorCS5y YXRlcyA9IChTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTIHwgU05EUlZfUENNX1JBVEVfNTUxMiB8 IFwKKwkJICBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCksCisJLnJhdGVfbWluID0gMCwKKwku cmF0ZV9tYXggPSAxNTYyNTAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXgg PSA4LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMHg3ZmZmZmZmMCwKKwkucGVyaW9kX2J5dGVzX21p biA9IDE2LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMHhmZmZmZjAsCisJLnBlcmlvZHNfbWluID0g MiwKKwkucGVyaW9kc19tYXggPSAxMDI0LCAvKiBubyBsaW1pdCAqLworCS5maWZvX3NpemUgPSAw LAorfTsKKworc3RydWN0IHM2MDAwX3J1bnRpbWVfZGF0YSB7CisJc3BpbmxvY2tfdCBsb2NrOwor CWludCBwZXJpb2Q7CQkvKiBjdXJyZW50IERNQSBwZXJpb2QgKi8KK307CisKK3N0YXRpYyB2b2lk IHM2MDAwX3BjbV9lbnF1ZXVlX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVh bSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50 aW1lOworCXN0cnVjdCBzNjAwMF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRl X2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3Ry ZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBz b2NfcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlpbnQgY2hhbm5lbDsKKwl1bnNp Z25lZCBpbnQgcGVyaW9kX3NpemU7CisJdW5zaWduZWQgaW50IGRtYV9vZmZzZXQ7CisJZG1hX2Fk ZHJfdCBkbWFfcG9zOworCWRtYV9hZGRyX3Qgc3JjLCBkc3Q7CisKKwlwZXJpb2Rfc2l6ZSA9IHNu ZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCWRtYV9vZmZzZXQgPSBwcnRkLT5w ZXJpb2QgKiBwZXJpb2Rfc2l6ZTsKKwlkbWFfcG9zID0gcnVudGltZS0+ZG1hX2FkZHIgKyBkbWFf b2Zmc2V0OworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExB WUJBQ0spIHsKKwkJc3JjID0gZG1hX3BvczsKKwkJZHN0ID0gcGFyLT5zaWZfb3V0OworCQljaGFu bmVsID0gcGFyLT5kbWFfb3V0OworCX0gZWxzZSB7CisJCXNyYyA9IHBhci0+c2lmX2luOworCQlk c3QgPSBkbWFfcG9zOworCQljaGFubmVsID0gcGFyLT5kbWFfaW47CisJfQorCisJaWYgKCFzNmRt YWNfY2hhbm5lbF9lbmFibGVkKERNQV9NQVNLX0RNQUMoY2hhbm5lbCksCisJCQkJICAgIERNQV9J TkRFWF9DSE5MKGNoYW5uZWwpKSkKKwkJcmV0dXJuOworCisJaWYgKHM2ZG1hY19maWZvX2Z1bGwo RE1BX01BU0tfRE1BQyhjaGFubmVsKSwgRE1BX0lOREVYX0NITkwoY2hhbm5lbCkpKSB7CisJCXBy aW50ayhLRVJOX0VSUiAiczYwMDAtcGNtOiBmaWZvIGZ1bGxcbiIpOworCQlyZXR1cm47CisJfQor CisJQlVHX09OKHBlcmlvZF9zaXplICYgMTUpOworCXM2ZG1hY19wdXRfZmlmbyhETUFfTUFTS19E TUFDKGNoYW5uZWwpLCBETUFfSU5ERVhfQ0hOTChjaGFubmVsKSwKKwkJCXNyYywgZHN0LCBwZXJp b2Rfc2l6ZSk7CisKKwlwcnRkLT5wZXJpb2QrKzsKKwlpZiAodW5saWtlbHkocHJ0ZC0+cGVyaW9k ID49IHJ1bnRpbWUtPnBlcmlvZHMpKQorCQlwcnRkLT5wZXJpb2QgPSAwOworfQorCitzdGF0aWMg aXJxcmV0dXJuX3QgczYwMDBfcGNtX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBzbmRfcGNtICpwY20gPSBkYXRhOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydW50 aW1lID0gcGNtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpw YXJhbXMgPSBydW50aW1lLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXN0cnVjdCBzNjAwMF9y dW50aW1lX2RhdGEgKnBydGQ7CisJdW5zaWduZWQgaW50IGhhc194cnVuOworCWludCBpLCByZXQg PSBJUlFfTk9ORTsKKwl1MzIgY2hhbm5lbFsyXSA9IHsKKwkJW1NORFJWX1BDTV9TVFJFQU1fUExB WUJBQ0tdID0gcGFyYW1zLT5kbWFfb3V0LAorCQlbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9 IHBhcmFtcy0+ZG1hX2luCisJfTsKKworCWhhc194cnVuID0gcGFyYW1zLT5jaGVja194cnVuKHJ1 bnRpbWUtPmRhaS0+Y3B1X2RhaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFu bmVsKTsgKytpKSB7CisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNt LT5zdHJlYW1zW2ldLnN1YnN0cmVhbTsKKwkJdW5zaWduZWQgaW50IHBlbmRpbmc7CisKKwkJaWYg KCFjaGFubmVsW2ldKQorCQkJY29udGludWU7CisKKwkJaWYgKHVubGlrZWx5KGhhc194cnVuICYg KDEgPDwgaSkpICYmCisJCSAgICBzdWJzdHJlYW0tPnJ1bnRpbWUgJiYKKwkJICAgIHNuZF9wY21f cnVubmluZyhzdWJzdHJlYW0pKSB7CisJCQlkZXZfZGJnKHBjbS0+ZGV2LCAieHJ1blxuIik7CisJ CQlzbmRfcGNtX3N0b3Aoc3Vic3RyZWFtLCBTTkRSVl9QQ01fU1RBVEVfWFJVTik7CisJCQlyZXQg PSBJUlFfSEFORExFRDsKKwkJfQorCisJCXBlbmRpbmcgPSBzNmRtYWNfaW50X3NvdXJjZXMoRE1B X01BU0tfRE1BQyhjaGFubmVsW2ldKSwKKwkJCQkJICAgICBETUFfSU5ERVhfQ0hOTChjaGFubmVs W2ldKSk7CisKKwkJaWYgKHBlbmRpbmcgJiAxKSB7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJ CWlmIChsaWtlbHkoc3Vic3RyZWFtLT5ydW50aW1lICYmCisJCQkJICAgc25kX3BjbV9ydW5uaW5n KHN1YnN0cmVhbSkpKSB7CisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwor CQkJCWRldl9kYmcocGNtLT5kZXYsICJwZXJpb2QgZWxhcHNlZCAleCAleFxuIiwKKwkJCQkgICAg ICAgczZkbWFjX2N1cl9zcmMoRE1BX01BU0tfRE1BQyhjaGFubmVsW2ldKSwKKwkJCQkJCSAgIERN QV9JTkRFWF9DSE5MKGNoYW5uZWxbaV0pKSwKKwkJCQkgICAgICAgczZkbWFjX2N1cl9kc3QoRE1B X01BU0tfRE1BQyhjaGFubmVsW2ldKSwKKwkJCQkJCSAgIERNQV9JTkRFWF9DSE5MKGNoYW5uZWxb aV0pKSk7CisJCQkJcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJ CXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CisJCQkJczYwMDBfcGNtX2VucXVldWVfZG1hKHN1YnN0 cmVhbSk7CisJCQkJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCQkJfQorCQl9CisKKwkJaWYg KHVubGlrZWx5KHBlbmRpbmcgJiB+NykpIHsKKwkJCWlmIChwZW5kaW5nICYgKDEgPDwgMykpCisJ CQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiczYwMDAtcGNtOiBETUEgJXggVW5k ZXJmbG93XG4iLAorCQkJCSAgICAgICBjaGFubmVsW2ldKTsKKwkJCWlmIChwZW5kaW5nICYgKDEg PDwgNCkpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiczYwMDAtcGNtOiBE TUEgJXggT3ZlcmZsb3dcbiIsCisJCQkJICAgICAgIGNoYW5uZWxbaV0pOworCQkJaWYgKHBlbmRp bmcgJiAweDFlMCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJzNjAwMC1w Y206IERNQSAleCBNYXN0ZXIgRXJyb3IgIgorCQkJCSAgICAgICAiKG1hc2sgJXgpXG4iLAorCQkJ CSAgICAgICBjaGFubmVsW2ldLCBwZW5kaW5nID4+IDUpOworCisJCX0KKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IHM2MDAwX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJz dHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhICpwcnRkID0g c3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1 bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2 MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFf ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzcmNpbmM7CisJdTMyIGRtYTsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZwcnRkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3Vic3RyZWFt LT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlzcmNpbmMgPSAxOwor CQlkbWEgPSBwYXItPmRtYV9vdXQ7CisJfSBlbHNlIHsKKwkJc3JjaW5jID0gMDsKKwkJZG1hID0g cGFyLT5kbWFfaW47CisJfQorCXM2ZG1hY19lbmFibGVfY2hhbihETUFfTUFTS19ETUFDKGRtYSks IERNQV9JTkRFWF9DSE5MKGRtYSksCisJCQkgICAxIC8qIHByaW9yaXR5IDEgKDAgaXMgbWF4KSAq LywKKwkJCSAgIDAgLyogcGVyaXBoZXJhbCByZXF1ZXN0cyB3L28geGZlciBsZW5ndGggbW9kZSAq LywKKwkJCSAgIHNyY2luYyAvKiBzb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8sCisJCQkgICBz cmNpbmNeMSAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluY3JlbWVudCAqLywKKwkJCSAgIDAgLyog Y2h1bmtzaXplIDAgKHNraXAgaW1wb3NzaWJsZSBvbiB0aGlzIGRtYSkgKi8sCisJCQkgICAwIC8q IHNvdXJjZSBza2lwIGFmdGVyIGNodW5rIChpbXBvc3NpYmxlKSAqLywKKwkJCSAgIDAgLyogZGVz dGluYXRpb24gc2tpcCBhZnRlciBjaHVuayAoaW1wb3NzaWJsZSkgKi8sCisJCQkgICA0IC8qIDE2 IGJ5dGUgYnVyc3Qgc2l6ZSAqLywKKwkJCSAgIC0xIC8qIGRvbid0IGNvbnNlcnZlIGJhbmR3aWR0 aCAqLywKKwkJCSAgIDAgLyogbG93IHdhdGVybWFyayBpcnEgZGVzY3JpcHRvciB0aGVzaG9sZCAq LywKKwkJCSAgIDAgLyogZGlzYWJsZSBoYXJkd2FyZSB0aW1lc3RhbXBzICovLAorCQkJICAgMSAv KiBlbmFibGUgY2hhbm5lbCAqLyk7CisKKwlzNjAwMF9wY21fZW5xdWV1ZV9kbWEoc3Vic3RyZWFt KTsKKwlzNjAwMF9wY21fZW5xdWV1ZV9kbWEoc3Vic3RyZWFtKTsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnBydGQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHM2MDAwX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQor eworCXN0cnVjdCBzNjAwMF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUt PnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqc29jX3J1bnRpbWUg PSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczYwMDBfcGNtX2RtYV9wYXJhbXMg KnBhciA9IHNvY19ydW50aW1lLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisJdTMyIGNoYW5uZWw7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05E UlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJY2hhbm5lbCA9IHBhci0+ZG1hX291dDsKKwllbHNl CisJCWNoYW5uZWwgPSBwYXItPmRtYV9pbjsKKworCXM2ZG1hY19zZXRfdGVybWluYWxfY291bnQo RE1BX01BU0tfRE1BQyhjaGFubmVsKSwKKwkJCQkgIERNQV9JTkRFWF9DSE5MKGNoYW5uZWwpLCAw KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcnRkLT5sb2NrLCBmbGFncyk7CisKKwlzNmRtYWNf ZGlzYWJsZV9jaGFuKERNQV9NQVNLX0RNQUMoY2hhbm5lbCksIERNQV9JTkRFWF9DSE5MKGNoYW5u ZWwpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmxvY2ssIGZsYWdzKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM2MDAwX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRf cGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfc29jX3Bj bV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVj dCBzNjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyID0gc29jX3J1bnRpbWUtPmRhaS0+Y3B1X2RhaS0+ ZG1hX2RhdGE7CisJaW50IHJldDsKKworCXJldCA9IHBhci0+dHJpZ2dlcihzdWJzdHJlYW0sIGNt ZCwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgewor CWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9S RVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlyZXQgPSBz NjAwMF9wY21fc3RhcnQoc3Vic3RyZWFtKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJ R0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJW X1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXJldCA9IHM2MDAwX3BjbV9zdG9wKHN1YnN0cmVh bSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHBhci0+dHJpZ2dlcihzdWJzdHJlYW0sIGNt ZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21f c3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHM2MDAwX3J1bnRpbWVfZGF0YSAqcHJ0 ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJcHJ0ZC0+cGVyaW9kID0g MDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgczYwMDBfcGNt X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0 IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2Rh dGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ZGFp LT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0g c3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzNjAwMF9ydW50aW1lX2RhdGEgKnBydGQgPSBy dW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBp bnQgb2Zmc2V0OworCWRtYV9hZGRyX3QgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJ0 ZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9T VFJFQU1fUExBWUJBQ0spCisJCWNvdW50ID0gczZkbWFjX2N1cl9zcmMoRE1BX01BU0tfRE1BQyhw YXItPmRtYV9vdXQpLAorCQkJCSAgICAgICBETUFfSU5ERVhfQ0hOTChwYXItPmRtYV9vdXQpKTsK KwllbHNlCisJCWNvdW50ID0gczZkbWFjX2N1cl9kc3QoRE1BX01BU0tfRE1BQyhwYXItPmRtYV9p biksCisJCQkJICAgICAgIERNQV9JTkRFWF9DSE5MKHBhci0+ZG1hX2luKSk7CisKKwljb3VudCAt PSBydW50aW1lLT5kbWFfYWRkcjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmxv Y2ssIGZsYWdzKTsKKworCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBjb3VudCk7 CisJaWYgKHVubGlrZWx5KG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkpCisJCW9mZnNl dCA9IDA7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IHM2MDAwX3BjbV9vcGVu KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29j X3BjbV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0 cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyID0gc29jX3J1bnRpbWUtPmRhaS0+Y3B1X2Rh aS0+ZG1hX2RhdGE7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVh bS0+cnVudGltZTsKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhICpwcnRkOworCWludCByZXQ7 CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnM2MDAwX3BjbV9o YXJkd2FyZSk7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAw LAorCQkJCQkgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgMTYpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1 bnRpbWUsIDAsCisJCQkJCSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCAxNik7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50 X2ludGVnZXIocnVudGltZSwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwYXItPnNhbWVfcmF0ZSkgewor CQlpbnQgcmF0ZTsKKwkJc3Bpbl9sb2NrKCZwYXItPmxvY2spOyAvKiBuZWVkZWQ/ICovCisJCXJh dGUgPSBwYXItPnJhdGU7CisJCXNwaW5fdW5sb2NrKCZwYXItPmxvY2spOworCQlpZiAocmF0ZSAh PSAtMSkgeworCQkJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLAor CQkJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkJCXJhdGUsIHJhdGUpOworCQkJ aWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXBydGQgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBy dGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+ bG9jayk7CisKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwcnRkOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJl YW0tPnJ1bnRpbWU7CisJc3RydWN0IHM2MDAwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUt PnByaXZhdGVfZGF0YTsKKworCWtmcmVlKHBydGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgczYwMDBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3Ry dWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRl X2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlpbnQgcmV0OworCXJldCA9IHNuZF9wY21fbGliX21h bGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdf cGFyYW1zKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiczYwMDAt cGNtOiBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCWlmIChwYXItPnNhbWVfcmF0ZSkgeworCQlzcGluX2xvY2soJnBhci0+bG9jayk7CisJCWlm IChwYXItPnJhdGUgPT0gLTEgfHwKKwkJICAgICEocGFyLT5pbl91c2UgJiB+KDEgPDwgc3Vic3Ry ZWFtLT5zdHJlYW0pKSkgeworCQkJcGFyLT5yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsK KwkJCXBhci0+aW5fdXNlIHw9IDEgPDwgc3Vic3RyZWFtLT5zdHJlYW07CisJCX0gZWxzZSBpZiAo cGFyYW1zX3JhdGUoaHdfcGFyYW1zKSAhPSBwYXItPnJhdGUpIHsKKwkJCXNuZF9wY21fbGliX2Zy ZWVfcGFnZXMoc3Vic3RyZWFtKTsKKwkJCXBhci0+aW5fdXNlICY9IH4oMSA8PCBzdWJzdHJlYW0t PnN0cmVhbSk7CisJCQlyZXQgPSAtRUJVU1k7CisJCX0KKwkJc3Bpbl91bmxvY2soJnBhci0+bG9j ayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX2h3X2ZyZWUo c3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2Nf cGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3Ry dWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ZGFpLT5jcHVfZGFp LT5kbWFfZGF0YTsKKworCXNwaW5fbG9jaygmcGFyLT5sb2NrKTsKKwlwYXItPmluX3VzZSAmPSB+ KDEgPDwgc3Vic3RyZWFtLT5zdHJlYW0pOworCWlmICghcGFyLT5pbl91c2UpCisJCXBhci0+cmF0 ZSA9IC0xOworCXNwaW5fdW5sb2NrKCZwYXItPmxvY2spOworCisJcmV0dXJuIHNuZF9wY21fbGli X2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBz NjAwMF9wY21fb3BzID0geworCS5vcGVuID0gCXM2MDAwX3BjbV9vcGVuLAorCS5jbG9zZSA9IAlz NjAwMF9wY21fY2xvc2UsCisJLmlvY3RsID0gCXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJh bXMgPSAJczYwMDBfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IAlzNjAwMF9wY21faHdfZnJl ZSwKKwkudHJpZ2dlciA9CXM2MDAwX3BjbV90cmlnZ2VyLAorCS5wcmVwYXJlID0gCXM2MDAwX3Bj bV9wcmVwYXJlLAorCS5wb2ludGVyID0gCXM2MDAwX3BjbV9wb2ludGVyLAorfTsKKworc3RhdGlj IHZvaWQgczYwMDBfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25k X3NvY19wY21fcnVudGltZSAqcnVudGltZSA9IHBjbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBz NjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFf ZGF0YTsKKworCWZyZWVfaXJxKHBhcmFtcy0+aXJxLCBwY20pOworCXNuZF9wY21fbGliX3ByZWFs bG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOworfQorCitzdGF0aWMgdTY0IHM2MDAwX3BjbV9kbWFt YXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX25ldyhzdHJ1Y3Qg c25kX2NhcmQgKmNhcmQsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHN0cnVjdCBzbmRf cGNtICpwY20pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBwY20t PnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczYwMDBfcGNtX2RtYV9wYXJhbXMgKnBhcmFtcyA9IHJ1 bnRpbWUtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJaW50IHJlczsKKworCWlmICghY2FyZC0+ ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZzNjAwMF9wY21fZG1hbWFz azsKKwlpZiAoIWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2spCisJCWNhcmQtPmRldi0+Y29o ZXJlbnRfZG1hX21hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworCWlmIChwYXJhbXMtPmRtYV9pbikg eworCQlzNmRtYWNfZGlzYWJsZV9jaGFuKERNQV9NQVNLX0RNQUMocGFyYW1zLT5kbWFfaW4pLAor CQkJCSAgICBETUFfSU5ERVhfQ0hOTChwYXJhbXMtPmRtYV9pbikpOworCQlzNmRtYWNfaW50X3Nv dXJjZXMoRE1BX01BU0tfRE1BQyhwYXJhbXMtPmRtYV9pbiksCisJCQkJICAgRE1BX0lOREVYX0NI TkwocGFyYW1zLT5kbWFfaW4pKTsKKwl9CisKKwlpZiAocGFyYW1zLT5kbWFfb3V0KSB7CisJCXM2 ZG1hY19kaXNhYmxlX2NoYW4oRE1BX01BU0tfRE1BQyhwYXJhbXMtPmRtYV9vdXQpLAorCQkJCSAg ICBETUFfSU5ERVhfQ0hOTChwYXJhbXMtPmRtYV9vdXQpKTsKKwkJczZkbWFjX2ludF9zb3VyY2Vz KERNQV9NQVNLX0RNQUMocGFyYW1zLT5kbWFfb3V0KSwKKwkJCQkgICBETUFfSU5ERVhfQ0hOTChw YXJhbXMtPmRtYV9vdXQpKTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X2lycShwYXJhbXMtPmlycSwg czYwMDBfcGNtX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgIHM2MDAwX3NvY19wbGF0Zm9ybS5uYW1l LCBwY20pOworCWlmIChyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzNjAwMC1wY20gY291bGRu J3QgZ2V0IElSUVxuIik7CisJCXJldHVybiByZXM7CisJfQorCisJcmVzID0gc25kX3BjbV9saWJf cHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sCisJCQkJCQkgICAgU05EUlZfRE1BX1RZUEVf REVWLAorCQkJCQkJICAgIGNhcmQtPmRldiwKKwkJCQkJCSAgICBTNl9QQ01fUFJFQUxMT0NBVEVf U0laRSwKKwkJCQkJCSAgICBTNl9QQ01fUFJFQUxMT0NBVEVfTUFYKTsKKwlpZiAocmVzKQorCQlw cmludGsoS0VSTl9XQVJOSU5HICJzNjAwMC1wY206IHByZWFsbG9jYXRpb24gZmFpbGVkXG4iKTsK KworCXNwaW5fbG9ja19pbml0KCZwYXJhbXMtPmxvY2spOworCXBhcmFtcy0+aW5fdXNlID0gMDsK KwlwYXJhbXMtPnJhdGUgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfcGxh dGZvcm0gczYwMDBfc29jX3BsYXRmb3JtID0geworCS5uYW1lID0gCSJzNjAwMC1hdWRpbyIsCisJ LnBjbV9vcHMgPSAJJnM2MDAwX3BjbV9vcHMsCisJLnBjbV9uZXcgPSAJczYwMDBfcGNtX25ldywK KwkucGNtX2ZyZWUgPSAJczYwMDBfcGNtX2ZyZWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczYw MDBfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIGludCBfX2luaXQgczYwMDBfcGNtX2luaXQodm9p ZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmczYwMDBfc29jX3BsYXRm b3JtKTsKK30KK21vZHVsZV9pbml0KHM2MDAwX3BjbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19l eGl0IHM2MDAwX3BjbV9leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3Jt KCZzNjAwMF9zb2NfcGxhdGZvcm0pOworfQorbW9kdWxlX2V4aXQoczYwMDBfcGNtX2V4aXQpOwor CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgR2xvZWNrbmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04o IlN0cmV0Y2ggczYwMDAgZmFtaWx5IFBDTSBETUEgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgi R1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvczYwMDAtcGNtLmggYi9zb3VuZC9z b2MvczYwMDAvczYwMDAtcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTZmMjNmNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1wY20uaApA QCAtMCwwICsxLDM1IEBACisvKgorICogQUxTQSBQQ00gaW50ZXJmYWNlIGZvciB0aGUgU3RyZXRj aCBzNjAwMCBmYW1pbHkKKyAqCisgKiBBdXRob3I6ICAgICAgRGFuaWVsIEdsb2Vja25lciwgPGRn QGVtbGl4LmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSBlbWxpeCBHbWJIIDxpbmZvQGVt bGl4LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1M2MDAwX1BD TV9ICisjZGVmaW5lIF9TNjAwMF9QQ01fSAorCitzdHJ1Y3Qgc25kX3NvY19kYWk7CitzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW07CisKK3N0cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyB7CisJdW5z aWduZWQgaW50ICgqY2hlY2tfeHJ1bikoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKTsKKwlp bnQgKCp0cmlnZ2VyKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNt ZCwgaW50IGFmdGVyKTsKKwlkbWFfYWRkcl90IHNpZl9pbjsKKwlkbWFfYWRkcl90IHNpZl9vdXQ7 CisJdTMyIGRtYV9pbjsKKwl1MzIgZG1hX291dDsKKwlpbnQgaXJxOworCWludCBzYW1lX3JhdGU7 CisKKwlzcGlubG9ja190IGxvY2s7CisJaW50IGluX3VzZTsKKwlpbnQgcmF0ZTsKK307CisKK2V4 dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBzNjAwMF9zb2NfcGxhdGZvcm07CisKKyNlbmRp ZgotLSAKMS42LjIuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3Jn Cmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRl dmVsCg==