ZGlmZiAtLWdpdCBhL3NyYy9jaGFyc2V0LmMgYi9zcmMvY2hhcnNldC5jCmluZGV4IDBmNGIwYjkuLjliZjc0YTggMTAwNjQ0Ci0tLSBhL3NyYy9jaGFyc2V0LmMKKysrIGIvc3JjL2NoYXJzZXQuYwpAQCAtMTcsNyArMTcsNyBAQAogc3RhdGljIGludCB3aW5fbm9sYnJfY2hhcnRhYnNpemUgX19BUkdTKCh3aW5fVCAqd3AsIGNoYXJfdSAqcywgY29sbnJfVCBjb2wsIGludCAqaGVhZHApKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IG5yMmhleCBfX0FSR1MoKGludCBjKSk7CitzdGF0aWMgdW5zaWduZWQgbnIyaGV4IF9fQVJHUygodW5zaWduZWQgYykpOwogCiBzdGF0aWMgaW50ICAgIGNoYXJ0YWJfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKIApAQCAtNjY0LDcgKzY2NCw3IEBACiAgICAgfQogI2VuZGlmCiAgICAgYnVmWysraV0gPSBucjJoZXgoKHVuc2lnbmVkKWMgPj4gNCk7Ci0gICAgYnVmWysraV0gPSBucjJoZXgoYyk7CisgICAgYnVmWysraV0gPSBucjJoZXgoKHVuc2lnbmVkKWMpOwogICAgIGJ1ZlsrK2ldID0gJz4nOwogICAgIGJ1ZlsrK2ldID0gTlVMOwogfQpAQCAtNjc0LDkgKzY3NCw5IEBACiAgKiBMb3dlciBjYXNlIGxldHRlcnMgYXJlIHVzZWQgdG8gYXZvaWQgdGhlIGNvbmZ1c2lvbiBvZiA8RjE+IGJlaW5nIDB4ZjEgb3IKICAqIGZ1bmN0aW9uIGtleSAxLgogICovCi0gICAgc3RhdGljIGludAorICAgIHN0YXRpYyB1bnNpZ25lZAogbnIyaGV4KGMpCi0gICAgaW50CQljOworICAgIHVuc2lnbmVkCWM7CiB7CiAgICAgaWYgKChjICYgMHhmKSA8PSA5KQogCXJldHVybiAoYyAmIDB4ZikgKyAnMCc7CkBAIC04ODQsNyArODg0LDcgQEAKICAgICBpZiAoYyA+PSAweDEwMCkKICAgICB7CiAJaWYgKGVuY19kYmNzICE9IDApCi0JICAgIHJldHVybiBkYmNzX2NsYXNzKCh1bnNpZ25lZCljID4+IDgsIGMgJiAweGZmKSA+PSAyOworCSAgICByZXR1cm4gZGJjc19jbGFzcygodW5zaWduZWQpYyA+PiA4LCAodW5zaWduZWQpKGMgJiAweGZmKSkgPj0gMjsKIAlpZiAoZW5jX3V0ZjgpCiAJICAgIHJldHVybiB1dGZfY2xhc3MoYykgPj0gMjsKICAgICB9CkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCSAqLwogCW51bWJlcmV4dHJhID0gd2luX2NvbF9vZmYod3ApOwogCWNvbDIgPSBjb2w7Ci0JY29sbWF4ID0gV19XSURUSCh3cCkgLSBudW1iZXJleHRyYTsKKwljb2xtYXggPSAoY29sbnJfVCkoV19XSURUSCh3cCkgLSBudW1iZXJleHRyYSk7CiAJaWYgKGNvbCA+PSBjb2xtYXgpCiAJewogCSAgICBuID0gY29sbWF4ICsgd2luX2NvbF9vZmYyKHdwKTsKQEAgLTEyMDEsMTcgKzEyMDEsMTcgQEAKICAgICB3aW5fVAkqd3A7CiAgICAgY29sbnJfVAl2Y29sOwogewotICAgIGNvbG5yX1QJd2lkdGgxOwkJLyogd2lkdGggb2YgZmlyc3QgbGluZSAoYWZ0ZXIgbGluZSBudW1iZXIpICovCi0gICAgY29sbnJfVAl3aWR0aDI7CQkvKiB3aWR0aCBvZiBmdXJ0aGVyIGxpbmVzICovCisgICAgaW50CQl3aWR0aDE7CQkvKiB3aWR0aCBvZiBmaXJzdCBsaW5lIChhZnRlciBsaW5lIG51bWJlcikgKi8KKyAgICBpbnQJCXdpZHRoMjsJCS8qIHdpZHRoIG9mIGZ1cnRoZXIgbGluZXMgKi8KIAogI2lmZGVmIEZFQVRfVkVSVFNQTElUCiAgICAgaWYgKHdwLT53X3dpZHRoID09IDApCS8qIHRoZXJlIGlzIG5vIGJvcmRlciAqLwogCXJldHVybiBGQUxTRTsKICNlbmRpZgogICAgIHdpZHRoMSA9IFdfV0lEVEgod3ApIC0gd2luX2NvbF9vZmYod3ApOwotICAgIGlmICh2Y29sIDwgd2lkdGgxIC0gMSkKKyAgICBpZiAoKGludCl2Y29sIDwgd2lkdGgxIC0gMSkKIAlyZXR1cm4gRkFMU0U7Ci0gICAgaWYgKHZjb2wgPT0gd2lkdGgxIC0gMSkKKyAgICBpZiAoKGludCl2Y29sID09IHdpZHRoMSAtIDEpCiAJcmV0dXJuIFRSVUU7CiAgICAgd2lkdGgyID0gd2lkdGgxICsgd2luX2NvbF9vZmYyKHdwKTsKICAgICByZXR1cm4gKCh2Y29sIC0gd2lkdGgxKSAlIHdpZHRoMiA9PSB3aWR0aDIgLSAxKTsKQEAgLTEzOTYsMTMgKzEzOTYsMTMgQEAKICMgaWZkZWYgRkVBVF9NQllURQogCS8qIENhbm5vdCBwdXQgdGhlIGN1cnNvciBvbiBwYXJ0IG9mIGEgd2lkZSBjaGFyYWN0ZXIuICovCiAJcHRyID0gbWxfZ2V0X2J1Zih3cC0+d19idWZmZXIsIHBvcy0+bG51bSwgRkFMU0UpOwotCWlmIChwb3MtPmNvbCA8IFNUUkxFTihwdHIpKQorCWlmIChwb3MtPmNvbCA8IChjb2xucl9UKVNUUkxFTihwdHIpKQogCXsKIAkgICAgaW50IGMgPSAoKm1iX3B0cjJjaGFyKShwdHIgKyBwb3MtPmNvbCk7CiAKIAkgICAgaWYgKGMgIT0gVEFCICYmIHZpbV9pc3ByaW50YyhjKSkKIAkgICAgewotCQllbmRhZGQgPSBjaGFyMmNlbGxzKGMpIC0gMTsKKwkJZW5kYWRkID0gKGNvbG5yX1QpKGNoYXIyY2VsbHMoYykgLSAxKTsKIAkJaWYgKGNvbGFkZCA+IGVuZGFkZCkJLyogcGFzdCBlbmQgb2YgbGluZSAqLwogCQkgICAgZW5kYWRkID0gMDsKIAkJZWxzZQpAQCAtMTU3MywxMCArMTU3MywxNiBAQAogI2RlZmluZSBMQVRJTjFMT1dFUiAnbCcKICNkZWZpbmUgTEFUSU4xVVBQRVIgJ1UnCiAKKyNpZmRlZiBTX1NQTElOVF9TICAgLyogc3BsaW50IGNhbid0IGhhbmRsZSBzb21lIDggYml0IGNoYXJzICovCitzdGF0aWMgY2hhcl91IGxhdGluMWZsYWdzW10gPSAoY2hhcl91ICopIiAiOworc3RhdGljIGNoYXJfdSBsYXRpbjF1cHBlcltdID0gKGNoYXJfdSAqKSIgIjsKK3N0YXRpYyBjaGFyX3UgbGF0aW4xbG93ZXJbXSA9IChjaGFyX3UgKikiICI7CisjZWxzZQogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF0lXydhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgoaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8gKi8KIHN0YXRpYyBjaGFyX3UgbGF0aW4xZmxhZ3NbMjU3XSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVICAgICAgbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSBVVVVVVVVVbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsIGxsbGxsbGxsIjsKIHN0YXRpYyBjaGFyX3UgbGF0aW4xdXBwZXJbMjU3XSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWnt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7fwMHCw8TFxsfIycrLzM3Oz9DR0tPU1db32Nna29zd3v8iOwogc3RhdGljIGNoYXJfdSBsYXRpbjFsb3dlclsyNTddID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6W1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/4OHi4+Tl5ufo6err7O3u7/Dx8vP09fbX+Pn6+/z9/t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/yI7CisjZW5kaWYKIAogICAgIGludAogdmltX2lzbG93ZXIoYykK