PGh0bWwgbWFuaWZlc3Q9InJlc291cmNlcy9jeXJpbGxpYy11cmkubWFuaWZlc3QiPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0ia29pOC1yIj4KPC9oZWFkPgo8Ym9keT4KPHA+VGVzdCB0aGF0IG5vbi1BU0NJSSBVUklzIHdvcmsgY29ycmVjdGx5IGluIGNhY2hlIG1hbmlmZXN0cy48L3A+CjxwPlNob3VsZCBiZSBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuPC9wPgo8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KCjxzY3JpcHQ+CmlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CiAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKfQoKZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCnsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKfQoKZnVuY3Rpb24gbG9hZCh1cmwpCnsKICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CiAgICByZXEub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgICByZXEuc2VuZCgiIik7CiAgICByZXR1cm4gcmVxLnJlc3BvbnNlVGV4dDsKfQoKZnVuY3Rpb24gY2FuTG9hZCh1cmwpCnsKICAgIHRyeSB7CiAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKICAgICAgICByZXEub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgICAgICAgcmVxLnNlbmQoIiIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCmZ1bmN0aW9uIHNob3VsZEJlTG9hZGFibGUodXJsKQp7CiAgICBsb2coKGNhbkxvYWQodXJsKSA/ICJQQVNTOiAiIDogIkZBSUw6ICIpICsgdXJsKTsKfQoKZnVuY3Rpb24gdGVzdCgpCnsKICAgIC8vIFBhdGggaXMgYWx3YXlzIFVURi04LgogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9jYWNoZWQt8NLP18XSy8EiKTsKICAgIHNob3VsZEJlTG9hZGFibGUoInJlc291cmNlcy9pbnRlcmNlcHQvY2FjaGVkLSVEMCU5RiVEMSU4MCVEMCVCRSVEMCVCMiVEMCVCNSVEMSU4MCVEMCVCQSVEMCVCMCIpOwogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9jYWNoZWQyLfDSz9fF0svBIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvaW50ZXJjZXB0L2NhY2hlZDItJUQwJTlGJUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI1JUQxJTgwJUQwJUJBJUQwJUIwIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvaW50ZXJjZXB0L25ldHdvcmst8NLP18XSy8EtUEFTUyIpOwogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9uZXR3b3JrLSVEMCU5RiVEMSU4MCVEMCVCRSVEMCVCMiVEMCVCNSVEMSU4MCVEMCVCQSVEMCVCMC1QQVNTIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvZG9lcy1ub3QtZXhpc3Qt8NLP18XSy8EiKTsKCiAgICAvLyBUbyB0ZXN0IGVuY29kaW5ncyBvdGhlciB0aGFuIFVURi04LCB3ZSBuZWVkIHRvIHNpbXVsYXRlIGZvcm0gc3VibWlzc2lvbiAoZm9yIFhIUiwgRmlyZWZveAogICAgLy8gYWx3YXlzIHVzZXMgVVRGLTgsIGV2ZW4gaW4gcXVlcnkgcGFydCkuCiAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBudWxsOwogICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IG51bGw7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZyYW1lRG9uZSwgZmFsc2UpOwogICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgaWZyLnNldEF0dHJpYnV0ZSgic3JjIiwgInJlc291cmNlcy9jeXJpbGxpYy11cmktZm9ybS5odG1sIik7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcik7Cn0KCmZ1bmN0aW9uIGZyYW1lRG9uZShldnQpCnsKICAgIGxvZygiRE9ORSIpOwogICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwp9CgphcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgdGVzdCgpIH0KYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkgeyB0ZXN0KCkgfQoKYXBwbGljYXRpb25DYWNoZS5vbnVwZGF0ZXJlYWR5ID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCB1cGRhdGVyZWFkeSBldmVudCIpIH0KYXBwbGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBlcnJvciBldmVudCIpIH0KCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K