From: Tom St Denis Subject: [PATCH umr] refactor out wave scanning to new function umr_scan_wave_data() Date: Fri, 20 Apr 2018 14:06:56 -0400 Message-ID: <20180420180656.870-1-tom.stdenis@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Tom St Denis U2lnbmVkLW9mZi1ieTogVG9tIFN0IERlbmlzIDx0b20uc3RkZW5pc0BhbWQuY29tPgotLS0KIGRv Yy9zcGhpbngvc291cmNlL2xpYndhdmVfc3RhdHVzLnJzdCB8ICAyOCArKysKIHNyYy9hcHAvcHJp bnRfd2F2ZXMuYyAgICAgICAgICAgICAgICB8IDM3OSArKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tLQogc3JjL2xpYi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9saWIvc2Nhbl93YXZlcy5jICAgICAgICAgICAgICAgICB8ICA5NyArKysrKysrKysKIHNy Yy91bXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArCiA1IGZpbGVzIGNoYW5n ZWQsIDMxNCBpbnNlcnRpb25zKCspLCAyMDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2xpYi9zY2FuX3dhdmVzLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3BoaW54L3NvdXJjZS9s aWJ3YXZlX3N0YXR1cy5yc3QgYi9kb2Mvc3BoaW54L3NvdXJjZS9saWJ3YXZlX3N0YXR1cy5yc3QK aW5kZXggMGY1OGEzYzkxODU1Li4yZTE2YTRhYzBjYjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcGhpbngv c291cmNlL2xpYndhdmVfc3RhdHVzLnJzdAorKysgYi9kb2Mvc3BoaW54L3NvdXJjZS9saWJ3YXZl X3N0YXR1cy5yc3QKQEAgLTQzLDYgKzQzLDM0IEBAIGNhbiBiZSByZWFkIHdpdGggdGhlIGZvbGxv d2luZyBmdW5jdGlvbjoKIFRoaXMgd2lsbCBwb3B1bGF0ZSBtYW55IG9mIHRoZSBmaWVsZHMgb2Yg dGhlIHN0cnVjdHVyZSAndW1yX3dhdmVfc3RhdHVzJy4gIEFuCiBleGFtcGxlIG9mIHJlYWRpbmcg dGhlbSBjYW4gYmUgZm91bmQgaW4gc3JjL2FwcC9wcmludF93YXZlcy5jLgogCistLS0tLS0tLS0t LS0tLS0tLS0tLS0KK1NjYW5uaW5nIEhhbHRlZCBXYXZlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKK0lmIHRoZSB3YXZlcyBoYXZlIGJlZW4gaGFsdGVkIChzYXkgd2l0aCB0aGUgZnVuY3Rpb24g dW1yX3NxX2NtZF9oYWx0X3dhdmVzKCkpIHRoZW4KK2EgbGlzdCBvZiBoYWx0ZWQgdmFsaWQgd2F2 ZXMgY2FuIGJlIG1hZGUgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCisKKzo6CisKKwlz dHJ1Y3QgdW1yX3dhdmVfZGF0YSAqdW1yX3NjYW5fd2F2ZV9kYXRhKHN0cnVjdCB1bXJfYXNpYyAq YXNpYykKKworVGhpcyB3aWxsIHJldHVybiBOVUxMIG9uIGVycm9yIChvciBubyBoYWx0ZWQgd2F2 ZXMpIG9yIGEgcG9pbnRlcgordG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKzo6CisKKwlz dHJ1Y3QgdW1yX3dhdmVfZGF0YSB7CisJCXVpbnQzMl90IHZncHJzWzY0ICogMjU2XSwgc2dwcnNb MTAyNF07CisJCWludCBzZSwgc2gsIGN1LCBzaW1kLCB3YXZlLCBoYXZlX3ZncHJzOworCQlzdHJ1 Y3QgdW1yX3dhdmVfc3RhdHVzIHdzOworCQlzdHJ1Y3QgdW1yX3dhdmVfdGhyZWFkICp0aHJlYWRz OworCQlzdHJ1Y3QgdW1yX3dhdmVfZGF0YSAqbmV4dDsKKwl9OworCitUaGUgbGlzdCBvZiB3YXZl cyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3QgdGVybWluYXRlZCBieSB0aGUKK2xhc3Qgbm9k ZSBoYXZpbmcgJ25leHQnIHBvaW50IHRvIE5VTEwuCisKIC0tLS0tLS0tLS0tLQogUmVhZGluZyBH UFJzCiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9hcHAvcHJpbnRfd2F2ZXMuYyBiL3Ny Yy9hcHAvcHJpbnRfd2F2ZXMuYwppbmRleCA1NjNmYzY1YmVkYjcuLmQ5MDFiYzkwMmZmMyAxMDA2 NDQKLS0tIGEvc3JjL2FwcC9wcmludF93YXZlcy5jCisrKyBiL3NyYy9hcHAvcHJpbnRfd2F2ZXMu YwpAQCAtMjQsMTEgKzI0LDExIEBACiAgKi8KICNpbmNsdWRlICJ1bXJhcHAuaCIKIAotI2RlZmlu ZSBQUCh4LCB5KSBpZiAoY29sKysgPT0gNCkgeyBjb2wgPSAxOyBwcmludGYoIlxuXHQiKTsgfSBw cmludGYoIiUyMHM6ICU4dSB8ICIsICN5LCAodW5zaWduZWQpd3MueC55KTsgCi0jZGVmaW5lIFBY KHgsIHkpIGlmIChjb2wrKyA9PSA0KSB7IGNvbCA9IDE7IHByaW50ZigiXG5cdCIpOyB9IHByaW50 ZigiJTIwczogJTA4bHggfCAiLCAjeSwgKHVuc2lnbmVkIGxvbmcpd3MueC55KTsKKyNkZWZpbmUg UFAoeCwgeSkgaWYgKGNvbCsrID09IDQpIHsgY29sID0gMTsgcHJpbnRmKCJcblx0Iik7IH0gcHJp bnRmKCIlMjBzOiAlOHUgfCAiLCAjeSwgKHVuc2lnbmVkKXdkLT53cy54LnkpOworI2RlZmluZSBQ WCh4LCB5KSBpZiAoY29sKysgPT0gNCkgeyBjb2wgPSAxOyBwcmludGYoIlxuXHQiKTsgfSBwcmlu dGYoIiUyMHM6ICUwOGx4IHwgIiwgI3ksICh1bnNpZ25lZCBsb25nKXdkLT53cy54LnkpOwogCi0j ZGVmaW5lIFAoeCkgaWYgKGNvbCsrID09IDQpIHsgY29sID0gMTsgcHJpbnRmKCJcblx0Iik7IH0g cHJpbnRmKCIlMjBzOiAlOHUgfCAiLCAjeCwgKHVuc2lnbmVkKXdzLngpOyAKLSNkZWZpbmUgWCh4 KSBpZiAoY29sKysgPT0gNCkgeyBjb2wgPSAxOyBwcmludGYoIlxuXHQiKTsgfSBwcmludGYoIiUy MHM6ICUwOGx4IHwgIiwgI3gsICh1bnNpZ25lZCBsb25nKXdzLngpOworI2RlZmluZSBQKHgpIGlm IChjb2wrKyA9PSA0KSB7IGNvbCA9IDE7IHByaW50ZigiXG5cdCIpOyB9IHByaW50ZigiJTIwczog JTh1IHwgIiwgI3gsICh1bnNpZ25lZCl3ZC0+d3MueCk7CisjZGVmaW5lIFgoeCkgaWYgKGNvbCsr ID09IDQpIHsgY29sID0gMTsgcHJpbnRmKCJcblx0Iik7IH0gcHJpbnRmKCIlMjBzOiAlMDhseCB8 ICIsICN4LCAodW5zaWduZWQgbG9uZyl3ZC0+d3MueCk7CiAKICNkZWZpbmUgSCh4KSBpZiAoY29s KSB7IHByaW50ZigiXG4iKTsgfTsgY29sID0gMDsgcHJpbnRmKCJcblxuJXM6XG5cdCIsIHgpOwog I2RlZmluZSBIdih4LCB5KSBpZiAoY29sKSB7IHByaW50ZigiXG4iKTsgfTsgY29sID0gMDsgcHJp bnRmKCJcblxuJXNbJTA4bHhdOlxuXHQiLCB4LCAodW5zaWduZWQgbG9uZyl5KTsKQEAgLTM3LDEx ICszNyw5IEBACiAKIHZvaWQgdW1yX3ByaW50X3dhdmVzKHN0cnVjdCB1bXJfYXNpYyAqYXNpYykK IHsKLQl1aW50MzJfdCB4LCB5LCBzZSwgc2gsIGN1LCBzaW1kLCB3YXZlLCBzZ3Byc1sxMDI0XSwg c2hpZnQ7Ci0JdWludDMyX3QgdmdwcnNbNjQgKiAyNTZdOwotCXVpbnQzMl90IHRocmVhZDsKKwl1 aW50MzJfdCB4LCB5LCBzaGlmdCwgdGhyZWFkOwogCXVpbnQ2NF90IHBnbV9hZGRyOwotCXN0cnVj dCB1bXJfd2F2ZV9zdGF0dXMgd3M7CisJc3RydWN0IHVtcl93YXZlX2RhdGEgKndkLCAqb3dkOwog CWludCBmaXJzdCA9IDEsIGNvbCA9IDA7CiAKIAlpZiAoYXNpYy0+b3B0aW9ucy5oYWx0X3dhdmVz KQpAQCAtNTIsMjI4ICs1MCwyMDkgQEAgdm9pZCB1bXJfcHJpbnRfd2F2ZXMoc3RydWN0IHVtcl9h c2ljICphc2ljKQogCWVsc2UKIAkJc2hpZnQgPSA0OyAgLy8gb24gVkkgYWxsb2NhdGlvbnMgYXJl IGluIDE2LWR3b3JkIGJsb2NrcwogCi0JZm9yIChzZSA9IDA7IHNlIDwgYXNpYy0+Y29uZmlnLmdm eC5tYXhfc2hhZGVyX2VuZ2luZXM7IHNlKyspCi0JZm9yIChzaCA9IDA7IHNoIDwgYXNpYy0+Y29u ZmlnLmdmeC5tYXhfc2hfcGVyX3NlOyBzaCsrKQotCWZvciAoY3UgPSAwOyBjdSA8IGFzaWMtPmNv bmZpZy5nZngubWF4X2N1X3Blcl9zaDsgY3UrKykgewotCQl1bXJfZ2V0X3dhdmVfc3FfaW5mbyhh c2ljLCBzZSwgc2gsIGN1LCAmd3MpOwotCQlpZiAod3Muc3FfaW5mby5idXN5KSB7Ci0JCQlmb3Ig KHNpbWQgPSAwOyBzaW1kIDwgNDsgc2ltZCsrKQotCQkJZm9yICh3YXZlID0gMDsgd2F2ZSA8IDEw OyB3YXZlKyspIHsgLy9ib3RoIHNpbWQvd2F2ZSBhcmUgaGFyZCBjb2RlZCBhdCB0aGUgbW9tZW50 Li4uCi0JCQkJdW1yX2dldF93YXZlX3N0YXR1cyhhc2ljLCBzZSwgc2gsIGN1LCBzaW1kLCB3YXZl LCAmd3MpOwotCQkJCWlmICh3cy53YXZlX3N0YXR1cy5oYWx0IHx8IHdzLndhdmVfc3RhdHVzLnZh bGlkKSB7Ci0JCQkJCXVuc2lnbmVkIGhhdmVfdmdwcnMgPSAwOwotCi0JCQkJCS8vIGdyYWIgc2dw cnMuLgotCQkJCQlpZiAod3Mud2F2ZV9zdGF0dXMuaGFsdCkgewotCQkJCQkJdW1yX3JlYWRfc2dw cnMoYXNpYywgJndzLCAmc2dwcnNbMF0pOwotCi0JCQkJCQlpZiAoYXNpYy0+b3B0aW9ucy5iaXRm aWVsZHMpIHsKLQkJCQkJCQloYXZlX3ZncHJzID0gMTsKLQkJCQkJCQlmb3IgKHRocmVhZCA9IDA7 IHRocmVhZCA8IDY0OyArK3RocmVhZCkgewotCQkJCQkJCQlpZiAodW1yX3JlYWRfdmdwcnMoYXNp YywgJndzLCB0aHJlYWQsCi0JCQkJCQkJCQkJICAgJnZncHJzWzI1NiAqIHRocmVhZF0pIDwgMCkK LQkJCQkJCQkJCWhhdmVfdmdwcnMgPSAwOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCi0J CQkJCWlmICghYXNpYy0+b3B0aW9ucy5iaXRmaWVsZHMgJiYgZmlyc3QpIHsKLQkJCQkJCWZpcnN0 ID0gMDsKLQkJCQkJCXByaW50ZigiU0UgU0ggQ1UgU0lNRCBXQVZFIyBXQVZFX1NUQVRVUyBQQ19I SSBQQ19MTyBJTlNUX0RXMCBJTlNUX0RXMSBFWEVDX0hJIEVYRUNfTE8gSFdfSUQgR1BSQUxMT0Mg TERTQUxMT0MgVFJBUFNUUyBJQlNUUyBUQkFfSEkgVEJBX0xPIFRNQV9ISSBUTUFfTE8gSUJfREJH MCBNMFxuIik7Ci0JCQkJCX0KLQkJCQkJaWYgKCFhc2ljLT5vcHRpb25zLmJpdGZpZWxkcykgewot CQkJCQlwcmludGYoCisJb3dkID0gd2QgPSB1bXJfc2Nhbl93YXZlX2RhdGEoYXNpYyk7CisJd2hp bGUgKHdkKSB7CisJCWlmICghYXNpYy0+b3B0aW9ucy5iaXRmaWVsZHMgJiYgZmlyc3QpIHsKKwkJ CWZpcnN0ID0gMDsKKwkJCXByaW50ZigiU0UgU0ggQ1UgU0lNRCBXQVZFIyBXQVZFX1NUQVRVUyBQ Q19ISSBQQ19MTyBJTlNUX0RXMCBJTlNUX0RXMSBFWEVDX0hJIEVYRUNfTE8gSFdfSUQgR1BSQUxM T0MgTERTQUxMT0MgVFJBUFNUUyBJQlNUUyBUQkFfSEkgVEJBX0xPIFRNQV9ISSBUTUFfTE8gSUJf REJHMCBNMFxuIik7CisJCX0KKwkJaWYgKCFhc2ljLT5vcHRpb25zLmJpdGZpZWxkcykgeworCQlw cmludGYoCiAiJXUgJXUgJXUgJXUgJXUgIiAvLyBzZS9zaC9jdS9zaW1kL3dhdmUKICIlMDhseCAl MDhseCAlMDhseCAiIC8vIHdhdmVfc3RhdHVzIHBjL2hpL2xvCiAiJTA4bHggJTA4bHggJTA4bHgg JTA4bHggIiAvLyBpbnN0MC8xIGV4ZWMgaGkvbG8KICIlMDhseCAlMDhseCAlMDhseCAlMDhseCAl MDhseCAiIC8vIEhXX0lEIEdQUi9MRFNBTExPQyBUUkFQL0lCIFNUUwogIiUwOGx4ICUwOGx4ICUw OGx4ICUwOGx4ICUwOGx4ICUwOGx4ICIgLy8gVEJBX0hJIFRCQV9MTyBUTUFfSEkgVE1BX0xPIElC X0RCRzAgTTBcbiIpOwogIlxuIiwKLSh1bnNpZ25lZClzZSwgKHVuc2lnbmVkKXNoLCAodW5zaWdu ZWQpY3UsICh1bnNpZ25lZCl3cy5od19pZC5zaW1kX2lkLCAodW5zaWduZWQpd3MuaHdfaWQud2F2 ZV9pZCwKLSh1bnNpZ25lZCBsb25nKXdzLndhdmVfc3RhdHVzLnZhbHVlLCAodW5zaWduZWQgbG9u Zyl3cy5wY19oaSwgKHVuc2lnbmVkIGxvbmcpd3MucGNfbG8sCi0odW5zaWduZWQgbG9uZyl3cy53 YXZlX2luc3RfZHcwLCAodW5zaWduZWQgbG9uZyl3cy53YXZlX2luc3RfZHcxLCAodW5zaWduZWQg bG9uZyl3cy5leGVjX2hpLCAodW5zaWduZWQgbG9uZyl3cy5leGVjX2xvLAotKHVuc2lnbmVkIGxv bmcpd3MuaHdfaWQudmFsdWUsICh1bnNpZ25lZCBsb25nKXdzLmdwcl9hbGxvYy52YWx1ZSwgKHVu c2lnbmVkIGxvbmcpd3MubGRzX2FsbG9jLnZhbHVlLCAodW5zaWduZWQgbG9uZyl3cy50cmFwc3Rz LnZhbHVlLCAodW5zaWduZWQgbG9uZyl3cy5pYl9zdHMudmFsdWUsCi0odW5zaWduZWQgbG9uZyl3 cy50YmFfaGksICh1bnNpZ25lZCBsb25nKXdzLnRiYV9sbywgKHVuc2lnbmVkIGxvbmcpd3MudG1h X2hpLCAodW5zaWduZWQgbG9uZyl3cy50bWFfbG8sICh1bnNpZ25lZCBsb25nKXdzLmliX2RiZzAs ICh1bnNpZ25lZCBsb25nKXdzLm0wCisodW5zaWduZWQpd2QtPnNlLCAodW5zaWduZWQpd2QtPnNo LCAodW5zaWduZWQpd2QtPmN1LCAodW5zaWduZWQpd2QtPndzLmh3X2lkLnNpbWRfaWQsICh1bnNp Z25lZCl3ZC0+d3MuaHdfaWQud2F2ZV9pZCwKKyh1bnNpZ25lZCBsb25nKXdkLT53cy53YXZlX3N0 YXR1cy52YWx1ZSwgKHVuc2lnbmVkIGxvbmcpd2QtPndzLnBjX2hpLCAodW5zaWduZWQgbG9uZyl3 ZC0+d3MucGNfbG8sCisodW5zaWduZWQgbG9uZyl3ZC0+d3Mud2F2ZV9pbnN0X2R3MCwgKHVuc2ln bmVkIGxvbmcpd2QtPndzLndhdmVfaW5zdF9kdzEsICh1bnNpZ25lZCBsb25nKXdkLT53cy5leGVj X2hpLCAodW5zaWduZWQgbG9uZyl3ZC0+d3MuZXhlY19sbywKKyh1bnNpZ25lZCBsb25nKXdkLT53 cy5od19pZC52YWx1ZSwgKHVuc2lnbmVkIGxvbmcpd2QtPndzLmdwcl9hbGxvYy52YWx1ZSwgKHVu c2lnbmVkIGxvbmcpd2QtPndzLmxkc19hbGxvYy52YWx1ZSwgKHVuc2lnbmVkIGxvbmcpd2QtPndz LnRyYXBzdHMudmFsdWUsICh1bnNpZ25lZCBsb25nKXdkLT53cy5pYl9zdHMudmFsdWUsCisodW5z aWduZWQgbG9uZyl3ZC0+d3MudGJhX2hpLCAodW5zaWduZWQgbG9uZyl3ZC0+d3MudGJhX2xvLCAo dW5zaWduZWQgbG9uZyl3ZC0+d3MudG1hX2hpLCAodW5zaWduZWQgbG9uZyl3ZC0+d3MudG1hX2xv LCAodW5zaWduZWQgbG9uZyl3ZC0+d3MuaWJfZGJnMCwgKHVuc2lnbmVkIGxvbmcpd2QtPndzLm0w CiApOwotCQkJCQkJaWYgKHdzLndhdmVfc3RhdHVzLmhhbHQpIHsKLQkJCQkJCQlmb3IgKHggPSAw OyB4IDwgKCh3cy5ncHJfYWxsb2Muc2dwcl9zaXplICsgMSkgPDwgc2hpZnQpOyB4ICs9IDQpCi0J CQkJCQkJCXByaW50ZigiPlNHUFJTWyV1Li4ldV0gPSB7ICUwOGx4LCAlMDhseCwgJTA4bHgsICUw OGx4IH1cbiIsCi0JCQkJCQkJCQkodW5zaWduZWQpKHgpLAotCQkJCQkJCQkJKHVuc2lnbmVkKSh4 ICsgMyksCi0JCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4XSwKLQkJCQkJCQkJCSh1bnNp Z25lZCBsb25nKXNncHJzW3grMV0sCi0JCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4KzJd LAotCQkJCQkJCQkJKHVuc2lnbmVkIGxvbmcpc2dwcnNbeCszXSk7Ci0KLQkJCQkJCQlpZiAod3Mu d2F2ZV9zdGF0dXMudHJhcF9lbiB8fCB3cy53YXZlX3N0YXR1cy5wcml2KSB7Ci0JCQkJCQkJCWZv ciAoeSA9IDAsIHggPSAweDZDOyB4IDwgKDE2ICsgMHg2Qyk7IHggKz0gNCkgewotCQkJCQkJCQkJ cHJpbnRmKCI+JXNbJXUuLiV1XSA9IHsgJTA4bHgsICUwOGx4LCAlMDhseCwgJTA4bHggfVxuIiwK LQkJCQkJCQkJCQkoeCA8ICgweDZDICsgNCkgJiYgYXNpYy0+ZmFtaWx5IDw9IEZBTUlMWV9WSSkg PyAiVEJBL1RNQSIgOiAiVFRNUCIsCi0JCQkJCQkJCQkJKHVuc2lnbmVkKSh5KSwKLQkJCQkJCQkJ CQkodW5zaWduZWQpKHkgKyAzKSwKLQkJCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4XSwK LQkJCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4KzFdLAotCQkJCQkJCQkJCSh1bnNpZ25l ZCBsb25nKXNncHJzW3grMl0sCi0JCQkJCQkJCQkJKHVuc2lnbmVkIGxvbmcpc2dwcnNbeCszXSk7 CisJCQlpZiAod2QtPndzLndhdmVfc3RhdHVzLmhhbHQpIHsKKwkJCQlmb3IgKHggPSAwOyB4IDwg KCh3ZC0+d3MuZ3ByX2FsbG9jLnNncHJfc2l6ZSArIDEpIDw8IHNoaWZ0KTsgeCArPSA0KQorCQkJ CQlwcmludGYoIj5TR1BSU1sldS4uJXVdID0geyAlMDhseCwgJTA4bHgsICUwOGx4LCAlMDhseCB9 XG4iLAorCQkJCQkJKHVuc2lnbmVkKSh4KSwKKwkJCQkJCSh1bnNpZ25lZCkoeCArIDMpLAorCQkJ CQkJKHVuc2lnbmVkIGxvbmcpd2QtPnNncHJzW3hdLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpd2Qt PnNncHJzW3grMV0sCisJCQkJCQkodW5zaWduZWQgbG9uZyl3ZC0+c2dwcnNbeCsyXSwKKwkJCQkJ CSh1bnNpZ25lZCBsb25nKXdkLT5zZ3Byc1t4KzNdKTsKIAotCQkJCQkJCQkJLy8gcmVzdGFydCBu dW1iZXJpbmcgb24gU0kuLlZJIHdpdGggVFRNUDAKLQkJCQkJCQkJCXkgKz0gNDsKLQkJCQkJCQkJ CWlmICh4ID09IDB4NkMgJiYgYXNpYy0+ZmFtaWx5IDw9IEZBTUlMWV9WSSkKLQkJCQkJCQkJCQl5 ID0gMDsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KKwkJCQlpZiAod2QtPndzLndhdmVf c3RhdHVzLnRyYXBfZW4gfHwgd2QtPndzLndhdmVfc3RhdHVzLnByaXYpIHsKKwkJCQkJZm9yICh5 ID0gMCwgeCA9IDB4NkM7IHggPCAoMTYgKyAweDZDKTsgeCArPSA0KSB7CisJCQkJCQlwcmludGYo Ij4lc1sldS4uJXVdID0geyAlMDhseCwgJTA4bHgsICUwOGx4LCAlMDhseCB9XG4iLAorCQkJCQkJ CSh4IDwgKDB4NkMgKyA0KSAmJiBhc2ljLT5mYW1pbHkgPD0gRkFNSUxZX1ZJKSA/ICJUQkEvVE1B IiA6ICJUVE1QIiwKKwkJCQkJCQkodW5zaWduZWQpKHkpLAorCQkJCQkJCSh1bnNpZ25lZCkoeSAr IDMpLAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKXdkLT5zZ3Byc1t4XSwKKwkJCQkJCQkodW5zaWdu ZWQgbG9uZyl3ZC0+c2dwcnNbeCsxXSwKKwkJCQkJCQkodW5zaWduZWQgbG9uZyl3ZC0+c2dwcnNb eCsyXSwKKwkJCQkJCQkodW5zaWduZWQgbG9uZyl3ZC0+c2dwcnNbeCszXSk7CiAKLQkJCQkJCXBn bV9hZGRyID0gKCgodWludDY0X3Qpd3MucGNfaGkgPDwgMzIpIHwgd3MucGNfbG8pIC0gKE5VTV9P UENPREVfV09SRFMqNCkvMjsKLQkJCQkJCXVtcl92bV9kaXNhc20oYXNpYywgd3MuaHdfaWQudm1f aWQsIHBnbV9hZGRyLCAoKCh1aW50NjRfdCl3cy5wY19oaSA8PCAzMikgfCB3cy5wY19sbyksIE5V TV9PUENPREVfV09SRFMqNCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlmaXJzdCA9IDA7Ci0JCQkJ CQlwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tXG5zZSV1LnNoJXUuY3UldS5zaW1kJXUud2F2ZSV1XG4iLAotCQkJCQkJKHVuc2ln bmVkKXNlLCAodW5zaWduZWQpc2gsICh1bnNpZ25lZCljdSwgKHVuc2lnbmVkKXdzLmh3X2lkLnNp bWRfaWQsICh1bnNpZ25lZCl3cy5od19pZC53YXZlX2lkKTsKKwkJCQkJCS8vIHJlc3RhcnQgbnVt YmVyaW5nIG9uIFNJLi5WSSB3aXRoIFRUTVAwCisJCQkJCQl5ICs9IDQ7CisJCQkJCQlpZiAoeCA9 PSAweDZDICYmIGFzaWMtPmZhbWlseSA8PSBGQU1JTFlfVkkpCisJCQkJCQkJeSA9IDA7CisJCQkJ CX0KKwkJCQl9CisJCQl9CiAKLQkJCQkJCUgoIk1haW4gUmVnaXN0ZXJzIik7Ci0JCQkJCQlYKHBj X2hpKTsKLQkJCQkJCVgocGNfbG8pOwotCQkJCQkJWCh3YXZlX2luc3RfZHcwKTsKLQkJCQkJCVgo d2F2ZV9pbnN0X2R3MSk7Ci0JCQkJCQlYKGV4ZWNfaGkpOwotCQkJCQkJWChleGVjX2xvKTsKLQkJ CQkJCVgodGJhX2hpKTsKLQkJCQkJCVgodGJhX2xvKTsKLQkJCQkJCVgodG1hX2hpKTsKLQkJCQkJ CVgodG1hX2xvKTsKLQkJCQkJCVgobTApOwotCQkJCQkJWChpYl9kYmcwKTsKKwkJCXBnbV9hZGRy ID0gKCgodWludDY0X3Qpd2QtPndzLnBjX2hpIDw8IDMyKSB8IHdkLT53cy5wY19sbykgLSAoTlVN X09QQ09ERV9XT1JEUyo0KS8yOworCQkJdW1yX3ZtX2Rpc2FzbShhc2ljLCB3ZC0+d3MuaHdfaWQu dm1faWQsIHBnbV9hZGRyLCAoKCh1aW50NjRfdCl3ZC0+d3MucGNfaGkgPDwgMzIpIHwgd2QtPndz LnBjX2xvKSwgTlVNX09QQ09ERV9XT1JEUyo0KTsKKwkJfSBlbHNlIHsKKwkJCWZpcnN0ID0gMDsK KwkJCXByaW50ZigiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS1cbnNlJXUuc2gldS5jdSV1LnNpbWQldS53YXZlJXVcbiIsCisJCQkodW5zaWdu ZWQpd2QtPnNlLCAodW5zaWduZWQpd2QtPnNoLCAodW5zaWduZWQpd2QtPmN1LCAodW5zaWduZWQp d2QtPndzLmh3X2lkLnNpbWRfaWQsICh1bnNpZ25lZCl3ZC0+d3MuaHdfaWQud2F2ZV9pZCk7CiAK LQkJCQkJCUh2KCJXYXZlX1N0YXR1cyIsIHdzLndhdmVfc3RhdHVzLnZhbHVlKTsKLQkJCQkJCVBQ KHdhdmVfc3RhdHVzLCBzY2MpOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIGV4ZWN6KTsKLQkJCQkJ CVBQKHdhdmVfc3RhdHVzLCB2Y2N6KTsKLQkJCQkJCVBQKHdhdmVfc3RhdHVzLCBpbl90Zyk7Ci0J CQkJCQlQUCh3YXZlX3N0YXR1cywgaGFsdCk7Ci0JCQkJCQlQUCh3YXZlX3N0YXR1cywgdmFsaWQp OwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIHNwaV9wcmlvKTsKLQkJCQkJCVBQKHdhdmVfc3RhdHVz LCB3YXZlX3ByaW8pOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIHByaXYpOwotCQkJCQkJUFAod2F2 ZV9zdGF0dXMsIHRyYXBfZW4pOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIHRyYXApOwotCQkJCQkJ UFAod2F2ZV9zdGF0dXMsIHR0cmFjZV9lbik7Ci0JCQkJCQlQUCh3YXZlX3N0YXR1cywgZXhwb3J0 X3JkeSk7Ci0JCQkJCQlQUCh3YXZlX3N0YXR1cywgaW5fYmFycmllcik7Ci0JCQkJCQlQUCh3YXZl X3N0YXR1cywgZWNjX2Vycik7Ci0JCQkJCQlQUCh3YXZlX3N0YXR1cywgc2tpcF9leHBvcnQpOwot CQkJCQkJUFAod2F2ZV9zdGF0dXMsIHBlcmZfZW4pOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIGNv bmRfZGJnX3VzZXIpOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIGNvbmRfZGJnX3N5cyk7Ci0JCQkJ CQlQUCh3YXZlX3N0YXR1cywgZGF0YV9hdGMpOwotCQkJCQkJUFAod2F2ZV9zdGF0dXMsIGluc3Rf YXRjKTsKLQkJCQkJCVBQKHdhdmVfc3RhdHVzLCBkaXNwYXRjaF9jYWNoZV9jdHJsKTsKLQkJCQkJ CVBQKHdhdmVfc3RhdHVzLCBtdXN0X2V4cG9ydCk7CisJCQlIKCJNYWluIFJlZ2lzdGVycyIpOwor CQkJWChwY19oaSk7CisJCQlYKHBjX2xvKTsKKwkJCVgod2F2ZV9pbnN0X2R3MCk7CisJCQlYKHdh dmVfaW5zdF9kdzEpOworCQkJWChleGVjX2hpKTsKKwkJCVgoZXhlY19sbyk7CisJCQlYKHRiYV9o aSk7CisJCQlYKHRiYV9sbyk7CisJCQlYKHRtYV9oaSk7CisJCQlYKHRtYV9sbyk7CisJCQlYKG0w KTsKKwkJCVgoaWJfZGJnMCk7CiAKLQkJCQkJCUh2KCJIV19JRCIsIHdzLmh3X2lkLnZhbHVlKTsK LQkJCQkJCVBQKGh3X2lkLCB3YXZlX2lkKTsKLQkJCQkJCVBQKGh3X2lkLCBzaW1kX2lkKTsKLQkJ CQkJCVBQKGh3X2lkLCBwaXBlX2lkKTsKLQkJCQkJCVBQKGh3X2lkLCBjdV9pZCk7Ci0JCQkJCQlQ UChod19pZCwgc2hfaWQpOwotCQkJCQkJUFAoaHdfaWQsIHNlX2lkKTsKLQkJCQkJCVBQKGh3X2lk LCB0Z19pZCk7Ci0JCQkJCQlQUChod19pZCwgdm1faWQpOwotCQkJCQkJUFAoaHdfaWQsIHF1ZXVl X2lkKTsKLQkJCQkJCVBQKGh3X2lkLCBzdGF0ZV9pZCk7Ci0JCQkJCQlQUChod19pZCwgbWVfaWQp OworCQkJSHYoIldhdmVfU3RhdHVzIiwgd2QtPndzLndhdmVfc3RhdHVzLnZhbHVlKTsKKwkJCVBQ KHdhdmVfc3RhdHVzLCBzY2MpOworCQkJUFAod2F2ZV9zdGF0dXMsIGV4ZWN6KTsKKwkJCVBQKHdh dmVfc3RhdHVzLCB2Y2N6KTsKKwkJCVBQKHdhdmVfc3RhdHVzLCBpbl90Zyk7CisJCQlQUCh3YXZl X3N0YXR1cywgaGFsdCk7CisJCQlQUCh3YXZlX3N0YXR1cywgdmFsaWQpOworCQkJUFAod2F2ZV9z dGF0dXMsIHNwaV9wcmlvKTsKKwkJCVBQKHdhdmVfc3RhdHVzLCB3YXZlX3ByaW8pOworCQkJUFAo d2F2ZV9zdGF0dXMsIHByaXYpOworCQkJUFAod2F2ZV9zdGF0dXMsIHRyYXBfZW4pOworCQkJUFAo d2F2ZV9zdGF0dXMsIHRyYXApOworCQkJUFAod2F2ZV9zdGF0dXMsIHR0cmFjZV9lbik7CisJCQlQ UCh3YXZlX3N0YXR1cywgZXhwb3J0X3JkeSk7CisJCQlQUCh3YXZlX3N0YXR1cywgaW5fYmFycmll cik7CisJCQlQUCh3YXZlX3N0YXR1cywgZWNjX2Vycik7CisJCQlQUCh3YXZlX3N0YXR1cywgc2tp cF9leHBvcnQpOworCQkJUFAod2F2ZV9zdGF0dXMsIHBlcmZfZW4pOworCQkJUFAod2F2ZV9zdGF0 dXMsIGNvbmRfZGJnX3VzZXIpOworCQkJUFAod2F2ZV9zdGF0dXMsIGNvbmRfZGJnX3N5cyk7CisJ CQlQUCh3YXZlX3N0YXR1cywgZGF0YV9hdGMpOworCQkJUFAod2F2ZV9zdGF0dXMsIGluc3RfYXRj KTsKKwkJCVBQKHdhdmVfc3RhdHVzLCBkaXNwYXRjaF9jYWNoZV9jdHJsKTsKKwkJCVBQKHdhdmVf c3RhdHVzLCBtdXN0X2V4cG9ydCk7CiAKLQkJCQkJCUh2KCJHUFJfQUxMT0MiLCB3cy5ncHJfYWxs b2MudmFsdWUpOwotCQkJCQkJUFAoZ3ByX2FsbG9jLCB2Z3ByX2Jhc2UpOwotCQkJCQkJUFAoZ3By X2FsbG9jLCB2Z3ByX3NpemUpOwotCQkJCQkJUFAoZ3ByX2FsbG9jLCBzZ3ByX2Jhc2UpOwotCQkJ CQkJUFAoZ3ByX2FsbG9jLCBzZ3ByX3NpemUpOworCQkJSHYoIkhXX0lEIiwgd2QtPndzLmh3X2lk LnZhbHVlKTsKKwkJCVBQKGh3X2lkLCB3YXZlX2lkKTsKKwkJCVBQKGh3X2lkLCBzaW1kX2lkKTsK KwkJCVBQKGh3X2lkLCBwaXBlX2lkKTsKKwkJCVBQKGh3X2lkLCBjdV9pZCk7CisJCQlQUChod19p ZCwgc2hfaWQpOworCQkJUFAoaHdfaWQsIHNlX2lkKTsKKwkJCVBQKGh3X2lkLCB0Z19pZCk7CisJ CQlQUChod19pZCwgdm1faWQpOworCQkJUFAoaHdfaWQsIHF1ZXVlX2lkKTsKKwkJCVBQKGh3X2lk LCBzdGF0ZV9pZCk7CisJCQlQUChod19pZCwgbWVfaWQpOwogCi0JCQkJCQlpZiAod3Mud2F2ZV9z dGF0dXMuaGFsdCkgewotCQkJCQkJCXByaW50ZigiXG5cblNHUFJTOlxuIik7Ci0JCQkJCQkJZm9y ICh4ID0gMDsgeCA8ICgod3MuZ3ByX2FsbG9jLnNncHJfc2l6ZSArIDEpIDw8IHNoaWZ0KTsgeCAr PSA0KQotCQkJCQkJCQlwcmludGYoIlx0WyU0dS4uJTR1XSA9IHsgJTA4bHgsICUwOGx4LCAlMDhs eCwgJTA4bHggfVxuIiwKLQkJCQkJCQkJCSh1bnNpZ25lZCkoeCksCi0JCQkJCQkJCQkodW5zaWdu ZWQpKHggKyAzKSwKLQkJCQkJCQkJCSh1bnNpZ25lZCBsb25nKXNncHJzW3hdLAotCQkJCQkJCQkJ KHVuc2lnbmVkIGxvbmcpc2dwcnNbeCsxXSwKLQkJCQkJCQkJCSh1bnNpZ25lZCBsb25nKXNncHJz W3grMl0sCi0JCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4KzNdKTsKKwkJCUh2KCJHUFJf QUxMT0MiLCB3ZC0+d3MuZ3ByX2FsbG9jLnZhbHVlKTsKKwkJCVBQKGdwcl9hbGxvYywgdmdwcl9i YXNlKTsKKwkJCVBQKGdwcl9hbGxvYywgdmdwcl9zaXplKTsKKwkJCVBQKGdwcl9hbGxvYywgc2dw cl9iYXNlKTsKKwkJCVBQKGdwcl9hbGxvYywgc2dwcl9zaXplKTsKIAotCQkJCQkJCWlmICh3cy53 YXZlX3N0YXR1cy50cmFwX2VuIHx8IHdzLndhdmVfc3RhdHVzLnByaXYpIHsKLQkJCQkJCQkJZm9y ICh5ICA9IDAsIHggPSAweDZDOyB4IDwgKDE2ICsgMHg2Qyk7IHggKz0gNCkgewotCQkJCQkJCQkJ Ly8gb25seSBwcmludCBsYWJlbCBvbmNlIGVhY2gKLQkJCQkJCQkJCWlmICgoYXNpYy0+ZmFtaWx5 IDw9IEZBTUlMWV9WSSAmJiB4IDwgMHg2QyArIDgpIHx8Ci0JCQkJCQkJCQkJKGFzaWMtPmZhbWls eSA+IEZBTUlMWV9WSSAmJiB4IDwgMHg2QyArIDQpKQotCQkJCQkJCQkJCXByaW50ZigiXG4lczpc biIsICh4IDwgMHg2QyArIDQgJiYgYXNpYy0+ZmFtaWx5IDw9IEZBTUlMWV9WSSkgPyAiVEJBL1RN QSIgOiAiVFRNUCIpOwotCQkJCQkJCQkJcHJpbnRmKCJcdFslNHUuLiU0dV0gPSB7ICUwOGx4LCAl MDhseCwgJTA4bHgsICUwOGx4IH1cbiIsCi0JCQkJCQkJCQkJKHVuc2lnbmVkKSh5KSwKLQkJCQkJ CQkJCQkodW5zaWduZWQpKHkgKyAzKSwKLQkJCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4 XSwKLQkJCQkJCQkJCQkodW5zaWduZWQgbG9uZylzZ3Byc1t4KzFdLAotCQkJCQkJCQkJCSh1bnNp Z25lZCBsb25nKXNncHJzW3grMl0sCi0JCQkJCQkJCQkJKHVuc2lnbmVkIGxvbmcpc2dwcnNbeCsz XSk7CisJCQlpZiAod2QtPndzLndhdmVfc3RhdHVzLmhhbHQpIHsKKwkJCQlwcmludGYoIlxuXG5T R1BSUzpcbiIpOworCQkJCWZvciAoeCA9IDA7IHggPCAoKHdkLT53cy5ncHJfYWxsb2Muc2dwcl9z aXplICsgMSkgPDwgc2hpZnQpOyB4ICs9IDQpCisJCQkJCXByaW50ZigiXHRbJTR1Li4lNHVdID0g eyAlMDhseCwgJTA4bHgsICUwOGx4LCAlMDhseCB9XG4iLAorCQkJCQkJKHVuc2lnbmVkKSh4KSwK KwkJCQkJCSh1bnNpZ25lZCkoeCArIDMpLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpd2QtPnNncHJz W3hdLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpd2QtPnNncHJzW3grMV0sCisJCQkJCQkodW5zaWdu ZWQgbG9uZyl3ZC0+c2dwcnNbeCsyXSwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKXdkLT5zZ3Byc1t4 KzNdKTsKIAotCQkJCQkJCQkJLy8gcmVzZXQgY291bnQgb24gU0kuLlZJCi0JCQkJCQkJCQl5ICs9 IDQ7Ci0JCQkJCQkJCQlpZiAoeCA9PSAweDZDICYmIGFzaWMtPmZhbWlseSA8PSBGQU1JTFlfVkkp Ci0JCQkJCQkJCQkJeSA9IDA7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9CisJCQkJaWYg KHdkLT53cy53YXZlX3N0YXR1cy50cmFwX2VuIHx8IHdkLT53cy53YXZlX3N0YXR1cy5wcml2KSB7 CisJCQkJCWZvciAoeSAgPSAwLCB4ID0gMHg2QzsgeCA8ICgxNiArIDB4NkMpOyB4ICs9IDQpIHsK KwkJCQkJCS8vIG9ubHkgcHJpbnQgbGFiZWwgb25jZSBlYWNoCisJCQkJCQlpZiAoKGFzaWMtPmZh bWlseSA8PSBGQU1JTFlfVkkgJiYgeCA8IDB4NkMgKyA4KSB8fAorCQkJCQkJCShhc2ljLT5mYW1p bHkgPiBGQU1JTFlfVkkgJiYgeCA8IDB4NkMgKyA0KSkKKwkJCQkJCQlwcmludGYoIlxuJXM6XG4i LCAoeCA8IDB4NkMgKyA0ICYmIGFzaWMtPmZhbWlseSA8PSBGQU1JTFlfVkkpID8gIlRCQS9UTUEi IDogIlRUTVAiKTsKKwkJCQkJCXByaW50ZigiXHRbJTR1Li4lNHVdID0geyAlMDhseCwgJTA4bHgs ICUwOGx4LCAlMDhseCB9XG4iLAorCQkJCQkJCSh1bnNpZ25lZCkoeSksCisJCQkJCQkJKHVuc2ln bmVkKSh5ICsgMyksCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpd2QtPnNncHJzW3hdLAorCQkJCQkJ CSh1bnNpZ25lZCBsb25nKXdkLT5zZ3Byc1t4KzFdLAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKXdk LT5zZ3Byc1t4KzJdLAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKXdkLT5zZ3Byc1t4KzNdKTsKIAot CQkJCQkJaWYgKGhhdmVfdmdwcnMpIHsKLQkJCQkJCQlwcmludGYoIlxuIik7Ci0JCQkJCQkJZm9y ICh4ID0gMDsgeCA8ICgod3MuZ3ByX2FsbG9jLnZncHJfc2l6ZSArIDEpIDw8IDIpOyArK3gpIHsK LQkJCQkJCQkJaWYgKHggJSAxNiA9PSAwKSB7Ci0JCQkJCQkJCQlpZiAoeCA9PSAwKQotCQkJCQkJ CQkJCXByaW50ZigiVkdQUlM6ICAgICAgICIpOwotCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCXBy aW50ZigiICAgICAgICAgICAgICIpOwotCQkJCQkJCQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQg PCA2NDsgKyt0aHJlYWQpIHsKLQkJCQkJCQkJCQl1bnNpZ25lZCBsaXZlID0gdGhyZWFkIDwgMzIg PyAod3MuZXhlY19sbyAmICgxdSA8PCB0aHJlYWQpKQotCQkJCQkJCQkJCQkJCSAgICA6ICh3cy5l eGVjX2hpICYgKDF1IDw8ICh0aHJlYWQgLSAzMikpKTsKLQkJCQkJCQkJCQlwcmludGYobGl2ZSA/ ICIgdCUwMnUgICAgICIgOiAiICh0JTAydSkgICAiLCB0aHJlYWQpOwotCQkJCQkJCQkJfQotCQkJ CQkJCQkJcHJpbnRmKCJcbiIpOwotCQkJCQkJCQl9CisJCQkJCQkvLyByZXNldCBjb3VudCBvbiBT SS4uVkkKKwkJCQkJCXkgKz0gNDsKKwkJCQkJCWlmICh4ID09IDB4NkMgJiYgYXNpYy0+ZmFtaWx5 IDw9IEZBTUlMWV9WSSkKKwkJCQkJCQl5ID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KIAotCQkJ CQkJCQlwcmludGYoIiAgICBbJTN1XSA9IHsiLCB4KTsKLQkJCQkJCQkJZm9yICh0aHJlYWQgPSAw OyB0aHJlYWQgPCA2NDsgKyt0aHJlYWQpCi0JCQkJCQkJCQlwcmludGYoIiAlMDh4IiwgdmdwcnNb dGhyZWFkICogMjU2ICsgeF0pOwotCQkJCQkJCQlwcmludGYoIiB9XG4iKTsKLQkJCQkJCQl9CisJ CQlpZiAod2QtPmhhdmVfdmdwcnMpIHsKKwkJCQlwcmludGYoIlxuIik7CisJCQkJZm9yICh4ID0g MDsgeCA8ICgod2QtPndzLmdwcl9hbGxvYy52Z3ByX3NpemUgKyAxKSA8PCAyKTsgKyt4KSB7CisJ CQkJCWlmICh4ICUgMTYgPT0gMCkgeworCQkJCQkJaWYgKHggPT0gMCkKKwkJCQkJCQlwcmludGYo IlZHUFJTOiAgICAgICAiKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwcmludGYoIiAgICAgICAgICAg ICAiKTsKKwkJCQkJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgNjQ7ICsrdGhyZWFkKSB7CisJ CQkJCQkJdW5zaWduZWQgbGl2ZSA9IHRocmVhZCA8IDMyID8gKHdkLT53cy5leGVjX2xvICYgKDF1 IDw8IHRocmVhZCkpCisJCQkJCQkJCQkJCTogKHdkLT53cy5leGVjX2hpICYgKDF1IDw8ICh0aHJl YWQgLSAzMikpKTsKKwkJCQkJCQlwcmludGYobGl2ZSA/ICIgdCUwMnUgICAgICIgOiAiICh0JTAy dSkgICAiLCB0aHJlYWQpOwogCQkJCQkJfQorCQkJCQkJcHJpbnRmKCJcbiIpOworCQkJCQl9CiAK LQkJCQkJCXByaW50ZigiXG5cblBHTV9NRU06XG4iKTsKLQkJCQkJCXBnbV9hZGRyID0gKCgodWlu dDY0X3Qpd3MucGNfaGkgPDwgMzIpIHwgd3MucGNfbG8pIC0gKE5VTV9PUENPREVfV09SRFMqNCkv MjsKLQkJCQkJCXVtcl92bV9kaXNhc20oYXNpYywgd3MuaHdfaWQudm1faWQsIHBnbV9hZGRyLCAo KCh1aW50NjRfdCl3cy5wY19oaSA8PCAzMikgfCB3cy5wY19sbyksIE5VTV9PUENPREVfV09SRFMq NCk7CisJCQkJCXByaW50ZigiICAgIFslM3VdID0geyIsIHgpOworCQkJCQlmb3IgKHRocmVhZCA9 IDA7IHRocmVhZCA8IDY0OyArK3RocmVhZCkKKwkJCQkJCXByaW50ZigiICUwOHgiLCB3ZC0+dmdw cnNbdGhyZWFkICogMjU2ICsgeF0pOworCQkJCQlwcmludGYoIiB9XG4iKTsKKwkJCQl9CisJCQl9 CiAKLQkJCQkJCUh2KCJMRFNfQUxMT0MiLCB3cy5sZHNfYWxsb2MudmFsdWUpOwotCQkJCQkJUFAo bGRzX2FsbG9jLCBsZHNfYmFzZSk7Ci0JCQkJCQlQUChsZHNfYWxsb2MsIGxkc19zaXplKTsKKwkJ CXByaW50ZigiXG5cblBHTV9NRU06XG4iKTsKKwkJCXBnbV9hZGRyID0gKCgodWludDY0X3Qpd2Qt PndzLnBjX2hpIDw8IDMyKSB8IHdkLT53cy5wY19sbykgLSAoTlVNX09QQ09ERV9XT1JEUyo0KS8y OworCQkJdW1yX3ZtX2Rpc2FzbShhc2ljLCB3ZC0+d3MuaHdfaWQudm1faWQsIHBnbV9hZGRyLCAo KCh1aW50NjRfdCl3ZC0+d3MucGNfaGkgPDwgMzIpIHwgd2QtPndzLnBjX2xvKSwgTlVNX09QQ09E RV9XT1JEUyo0KTsKIAotCQkJCQkJSHYoIklCX1NUUyIsIHdzLmliX3N0cy52YWx1ZSk7Ci0JCQkJ CQlQUChpYl9zdHMsIHZtX2NudCk7Ci0JCQkJCQlQUChpYl9zdHMsIGV4cF9jbnQpOwotCQkJCQkJ UFAoaWJfc3RzLCBsZ2ttX2NudCk7Ci0JCQkJCQlQUChpYl9zdHMsIHZhbHVfY250KTsKKwkJCUh2 KCJMRFNfQUxMT0MiLCB3ZC0+d3MubGRzX2FsbG9jLnZhbHVlKTsKKwkJCVBQKGxkc19hbGxvYywg bGRzX2Jhc2UpOworCQkJUFAobGRzX2FsbG9jLCBsZHNfc2l6ZSk7CiAKLQkJCQkJCUh2KCJUUkFQ U1RTIiwgd3MudHJhcHN0cy52YWx1ZSk7Ci0JCQkJCQlQUCh0cmFwc3RzLCBleGNwKTsKLQkJCQkJ CVBQKHRyYXBzdHMsIGV4Y3BfY3ljbGUpOwotCQkJCQkJUFAodHJhcHN0cywgZHBfcmF0ZSk7CisJ CQlIdigiSUJfU1RTIiwgd2QtPndzLmliX3N0cy52YWx1ZSk7CisJCQlQUChpYl9zdHMsIHZtX2Nu dCk7CisJCQlQUChpYl9zdHMsIGV4cF9jbnQpOworCQkJUFAoaWJfc3RzLCBsZ2ttX2NudCk7CisJ CQlQUChpYl9zdHMsIHZhbHVfY250KTsKIAotCQkJCQkJcHJpbnRmKCJcbiIpOyBjb2wgPSAwOwot CQkJCQl9CisJCQlIdigiVFJBUFNUUyIsIHdkLT53cy50cmFwc3RzLnZhbHVlKTsKKwkJCVBQKHRy YXBzdHMsIGV4Y3ApOworCQkJUFAodHJhcHN0cywgZXhjcF9jeWNsZSk7CisJCQlQUCh0cmFwc3Rz LCBkcF9yYXRlKTsKIAotCQkJCX0KLQkJCX0KKwkJCXByaW50ZigiXG4iKTsgY29sID0gMDsKIAkJ fQorCQl3ZCA9IHdkLT5uZXh0OwogCX0KIAlpZiAoZmlyc3QpCiAJCXByaW50ZigiTm8gYWN0aXZl IHdhdmVzIVxuIik7CiAKKwl3ZCA9IG93ZDsKKwl3aGlsZSAod2QpIHsKKwkJb3dkID0gd2QtPm5l eHQ7CisJCWZyZWUod2QpOworCQl3ZCA9IG93ZDsKKwl9CisKIAlpZiAoYXNpYy0+b3B0aW9ucy5o YWx0X3dhdmVzKQogCQl1bXJfc3FfY21kX2hhbHRfd2F2ZXMoYXNpYywgVU1SX1NRX0NNRF9SRVNV TUUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2xpYi9DTWFrZUxpc3RzLnR4dCBiL3NyYy9saWIvQ01h a2VMaXN0cy50eHQKaW5kZXggYzAyOGM1NTBmYTNlLi44ZDU0MjdkNjNhYWUgMTAwNjQ0Ci0tLSBh L3NyYy9saWIvQ01ha2VMaXN0cy50eHQKKysrIGIvc3JjL2xpYi9DTWFrZUxpc3RzLnR4dApAQCAt MjEsNiArMjEsNyBAQCBhZGRfbGlicmFyeSh1bXJjb3JlIFNUQVRJQwogICByZWFkX3ZyYW0uYwog ICByaW5nX2RlY29kZS5jCiAgIHNjYW5fY29uZmlnLmMKKyAgc2Nhbl93YXZlcy5jCiAgIHNxX2Nt ZF9oYWx0X3dhdmVzLmMKICAgdHJhbnNmZXJfc29jMTUuYwogICB3YXZlX3N0YXR1cy5jCmRpZmYg LS1naXQgYS9zcmMvbGliL3NjYW5fd2F2ZXMuYyBiL3NyYy9saWIvc2Nhbl93YXZlcy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTNlN2UxMzFjODg4Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2xpYi9zY2FuX3dhdmVzLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAq IENvcHlyaWdodCAyMDE4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOiBUb20gU3QgRGVuaXMgPHRvbS5zdGRlbmlzQGFtZC5jb20+Cisg KgorICovCisjaW5jbHVkZSAidW1yLmgiCisKK3N0cnVjdCB1bXJfd2F2ZV9kYXRhICp1bXJfc2Nh bl93YXZlX2RhdGEoc3RydWN0IHVtcl9hc2ljICphc2ljKQoreworCXVpbnQzMl90IHNlLCBzaCwg Y3UsIHNpbWQsIHdhdmUsIHRocmVhZDsKKwlzdHJ1Y3QgdW1yX3dhdmVfZGF0YSAqb3B3ZCwgKnBw d2QsICpwd2Q7CisKKwlwcHdkID0gb3B3ZCA9IHB3ZCA9IGNhbGxvYygxLCBzaXplb2YgKnB3ZCk7 CisJaWYgKCFwd2QpIHsKKwkJZnByaW50ZihzdGRlcnIsICJbRVJST1JdOiBPdXQgb2YgbWVtb3J5 XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChzZSA9IDA7IHNlIDwgYXNpYy0+Y29u ZmlnLmdmeC5tYXhfc2hhZGVyX2VuZ2luZXM7IHNlKyspCisJZm9yIChzaCA9IDA7IHNoIDwgYXNp Yy0+Y29uZmlnLmdmeC5tYXhfc2hfcGVyX3NlOyBzaCsrKQorCWZvciAoY3UgPSAwOyBjdSA8IGFz aWMtPmNvbmZpZy5nZngubWF4X2N1X3Blcl9zaDsgY3UrKykgeworCQkvLyBlbnN1cmUgdGhlIHdh dmUgZGF0YSBpcyB6ZXJvZWQgb3V0IGlmIGl0IHdhcyBmb3J3YXJkZWQKKwkJLy8gZnJvbSBhIHBy ZXZpb3VzIGl0ZXJhdGlvbgorCQltZW1zZXQoJnB3ZC0+d3MsIDAsIHNpemVvZihwd2QtPndzKSk7 CisKKwkJcHdkLT5zZSA9IHNlOworCQlwd2QtPnNoID0gc2g7CisJCXB3ZC0+Y3UgPSBjdTsKKwkJ dW1yX2dldF93YXZlX3NxX2luZm8oYXNpYywgc2UsIHNoLCBjdSwgJnB3ZC0+d3MpOworCQlpZiAo cHdkLT53cy5zcV9pbmZvLmJ1c3kpIHsKKwkJCWZvciAoc2ltZCA9IDA7IHNpbWQgPCA0OyBzaW1k KyspCisJCQlmb3IgKHdhdmUgPSAwOyB3YXZlIDwgMTA7IHdhdmUrKykgeyAvL2JvdGggc2ltZC93 YXZlIGFyZSBoYXJkIGNvZGVkIGF0IHRoZSBtb21lbnQuLi4KKwkJCQlwd2QtPnNpbWQgPSBzaW1k OworCQkJCXB3ZC0+d2F2ZSA9IHdhdmU7CisJCQkJdW1yX2dldF93YXZlX3N0YXR1cyhhc2ljLCBz ZSwgc2gsIGN1LCBzaW1kLCB3YXZlLCAmcHdkLT53cyk7CisJCQkJaWYgKHB3ZC0+d3Mud2F2ZV9z dGF0dXMuaGFsdCB8fCBwd2QtPndzLndhdmVfc3RhdHVzLnZhbGlkKSB7CisJCQkJCS8vIGdyYWIg c2dwcnMuLgorCQkJCQlpZiAocHdkLT53cy53YXZlX3N0YXR1cy5oYWx0KSB7CisJCQkJCQl1bXJf cmVhZF9zZ3Bycyhhc2ljLCAmcHdkLT53cywgJnB3ZC0+c2dwcnNbMF0pOworCisJCQkJCQlwd2Qt PmhhdmVfdmdwcnMgPSAxOworCQkJCQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCA2NDsgKyt0 aHJlYWQpIHsKKwkJCQkJCQlpZiAodW1yX3JlYWRfdmdwcnMoYXNpYywgJnB3ZC0+d3MsIHRocmVh ZCwKKwkJCQkJCQkJCSAgICZwd2QtPnZncHJzWzI1NiAqIHRocmVhZF0pIDwgMCkgeworCQkJCQkJ CQlwd2QtPmhhdmVfdmdwcnMgPSAwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQl9 CisJCQkJCX0KKworCQkJCQlwd2QtPm5leHQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwd2QpKTsKKwkJ CQkJaWYgKCFwd2QtPm5leHQpIHsKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiW0VSUk9SXTogT3V0 IG9mIG1lbW9yeVxuIik7CisJCQkJCQlyZXR1cm4gb3B3ZDsKKwkJCQkJfQorCQkJCQlwd2QtPm5l eHQtPnNlID0gcHdkLT5zZTsKKwkJCQkJcHdkLT5uZXh0LT5zaCA9IHB3ZC0+c2g7CisJCQkJCXB3 ZC0+bmV4dC0+Y3UgPSBwd2QtPmN1OworCQkJCQlwd2QtPm5leHQtPndzID0gcHdkLT53czsKKwkJ CQkJcHB3ZCA9IHB3ZDsKKwkJCQkJcHdkID0gcHdkLT5uZXh0OworCQkJCX0KKwkJCX0KKwkJfQor CX0KKworCS8vIG5vIHdhdmVzIHRvIGNhcHR1cmUKKwlpZiAob3B3ZCA9PSBwd2QpIHsKKwkJZnJl ZShwd2QpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvLyBkcm9wIHRhaWwgbm9kZQorCWZyZWUo cHB3ZC0+bmV4dCk7CisJcHB3ZC0+bmV4dCA9IE5VTEw7CisKKwlyZXR1cm4gb3B3ZDsKK30KZGlm ZiAtLWdpdCBhL3NyYy91bXIuaCBiL3NyYy91bXIuaAppbmRleCA3MTU0ZGI3YmIyYzMuLmU5OWVl OTY1NTI3ZSAxMDA2NDQKLS0tIGEvc3JjL3Vtci5oCisrKyBiL3NyYy91bXIuaApAQCAtMzYyLDYg KzM2MiwxNCBAQCBzdHJ1Y3QgdW1yX3dhdmVfc3RhdHVzIHsKIAl9IHRyYXBzdHM7CiB9OwogCitz dHJ1Y3QgdW1yX3dhdmVfZGF0YSB7CisJdWludDMyX3QgdmdwcnNbNjQgKiAyNTZdLCBzZ3Byc1sx MDI0XTsKKwlpbnQgc2UsIHNoLCBjdSwgc2ltZCwgd2F2ZSwgaGF2ZV92Z3ByczsKKwlzdHJ1Y3Qg dW1yX3dhdmVfc3RhdHVzIHdzOworCXN0cnVjdCB1bXJfd2F2ZV90aHJlYWQgKnRocmVhZHM7CisJ c3RydWN0IHVtcl93YXZlX2RhdGEgKm5leHQ7Cit9OworCiBzdHJ1Y3QgdW1yX3NoYWRlcnNfcGdt IHsKIAkvLyBWTUlEIGFuZCBsZW5ndGggaW4gYnl0ZXMKIAl1aW50MzJfdApAQCAtNTYxLDYgKzU2 OSw3IEBAIGludCB1bXJfdXBkYXRlKHN0cnVjdCB1bXJfYXNpYyAqYXNpYywgY2hhciAqc2NyaXB0 KTsKIAogLyogbGliIGhlbHBlcnMgKi8KIGludCB1bXJfZ2V0X3dhdmVfc3RhdHVzKHN0cnVjdCB1 bXJfYXNpYyAqYXNpYywgdW5zaWduZWQgc2UsIHVuc2lnbmVkIHNoLCB1bnNpZ25lZCBjdSwgdW5z aWduZWQgc2ltZCwgdW5zaWduZWQgd2F2ZSwgc3RydWN0IHVtcl93YXZlX3N0YXR1cyAqd3MpOwor c3RydWN0IHVtcl93YXZlX2RhdGEgKnVtcl9zY2FuX3dhdmVfZGF0YShzdHJ1Y3QgdW1yX2FzaWMg KmFzaWMpOwogaW50IHVtcl9nZXRfd2F2ZV9zcV9pbmZvKHN0cnVjdCB1bXJfYXNpYyAqYXNpYywg dW5zaWduZWQgc2UsIHVuc2lnbmVkIHNoLCB1bnNpZ25lZCBjdSwgc3RydWN0IHVtcl93YXZlX3N0 YXR1cyAqd3MpOwogaW50IHVtcl9yZWFkX3NncHJzKHN0cnVjdCB1bXJfYXNpYyAqYXNpYywgc3Ry dWN0IHVtcl93YXZlX3N0YXR1cyAqd3MsIHVpbnQzMl90ICpkc3QpOwogaW50IHVtcl9yZWFkX3Zn cHJzKHN0cnVjdCB1bXJfYXNpYyAqYXNpYywgc3RydWN0IHVtcl93YXZlX3N0YXR1cyAqd3MsIHVp bnQzMl90IHRocmVhZCwgdWludDMyX3QgKmRzdCk7Ci0tIAoyLjE0LjMKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFt ZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=