LyogVGVzdCBjYXNlIGJ5IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4uICAqLwojaW5jbHVkZSA8bG9jYWxlLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxyZWdleC5oPgojaW5jbHVkZSA8d2NoYXIuaD4KCmludAptYWluICh2b2lkKQp7CiAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlZ2V4OwogIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnczsKICBjb25zdCBjaGFyICpzOwogIGludCBtYXRjaDsKICBpbnQgcmVzdWx0ID0gMDsKCiAgbWVtc2V0ICgmcmVnZXgsICdcMCcsIHNpemVvZiAocmVnZXgpKTsKCiAgc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5JU08tODg1OS0xIik7CiAgZndpZGUgKHN0ZG91dCwgLTEpOwoKICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAgfCBSRV9ERUJVRyk7CgogIHB1dHMgKCJpbiBDIGxvY2FsZSIpOwogIHNldGxvY2FsZSAoTENfQUxMLCAiQyIpOwogIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJbYW75XSpuIiwgNywgJnJlZ2V4KTsKICBpZiAocyAhPSBOVUxMKQogICAgewogICAgICBwdXRzICgicmVfY29tcGlsZV9wYXR0ZXJuIHJldHVybiBub24tTlVMTCB2YWx1ZSIpOwogICAgICByZXN1bHQgPSAxOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgbWF0Y2ggPSByZV9tYXRjaCAoJnJlZ2V4LCAiYW4iLCAyLCAwLCAmcmVncyk7CiAgICAgIGlmIChtYXRjaCAhPSAyKQoJewoJICBwcmludGYgKCJyZV9tYXRjaCByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgMlxuIiwgbWF0Y2gpOwoJICByZXN1bHQgPSAxOwoJfQogICAgICBlbHNlCglwdXRzICgiIC0+IE9LIik7CiAgICB9CgogIHB1dHMgKCJpbiBkZV9ERS5JU08tODg1OS0xIGxvY2FsZSIpOwogIHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuSVNPLTg4NTktMSIpOwogIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJbYW75XSpuIiwgNywgJnJlZ2V4KTsKICBpZiAocyAhPSBOVUxMKQogICAgewogICAgICBwdXRzICgicmVfY29tcGlsZV9wYXR0ZXJuIHJldHVybiBub24tTlVMTCB2YWx1ZSIpOwogICAgICByZXN1bHQgPSAxOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgbWF0Y2ggPSByZV9tYXRjaCAoJnJlZ2V4LCAiYW4iLCAyLCAwLCAmcmVncyk7CiAgICAgIGlmIChtYXRjaCAhPSAyKQoJewoJICBwcmludGYgKCJyZV9tYXRjaCByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgMlxuIiwgbWF0Y2gpOwoJICByZXN1bHQgPSAxOwoJfQogICAgICBlbHNlCglwdXRzICgiIC0+IE9LIik7CiAgICB9CgogIHJldHVybiByZXN1bHQ7Cn0K