@utoo/web 1.5.8 → 1.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXsiLi9jbGkvbW9ja3MvZW52LmpzIihtb2R1bGUpe21vZHVsZS5leHBvcnRzPXt9fSwiLi9zcmMvdXRvby9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO3ZhciBlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuL2NsaS9tb2Nrcy9lbnYuanMiKSxlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Y2xhc3MgQnVpbGRPcHRpb25ze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxCdWlsZE9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfYnVpbGRvcHRpb25zX2ZyZWUocHRyLDApfWdldCBjb25maWcoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmJ1aWxkb3B0aW9uc19jb25maWcodGhpcy5fX3diZ19wdHIpKX1jb25zdHJ1Y3Rvcigpe2NvbnN0IHJldD13YXNtLmJ1aWxkb3B0aW9uc19uZXcoKTtyZXR1cm4gdGhpcy5fX3diZ19wdHI9cmV0Pj4+MCxCdWlsZE9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIodGhpcyx0aGlzLl9fd2JnX3B0cix0aGlzKSx0aGlzfXNldCBjb25maWcodmFsKXt3YXNtLmJ1aWxkb3B0aW9uc19zZXRfY29uZmlnKHRoaXMuX193YmdfcHRyLGFkZEhlYXBPYmplY3QodmFsKSl9Z2V0IGNsZWFudXAoKXtyZXR1cm4gMCE9PXdhc20uX193YmdfZ2V0X2J1aWxkb3B0aW9uc19jbGVhbnVwKHRoaXMuX193YmdfcHRyKX1zZXQgY2xlYW51cChhcmcwKXt3YXNtLl9fd2JnX3NldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cixhcmcwKX19U3ltYm9sLmRpc3Bvc2UmJihCdWlsZE9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1CdWlsZE9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIENyZWF0ZVN5bmNBY2Nlc3NIYW5kbGVPcHRpb25ze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19jcmVhdGVzeW5jYWNjZXNzaGFuZGxlb3B0aW9uc19mcmVlKHB0ciwwKX19U3ltYm9sLmRpc3Bvc2UmJihDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPUNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGVPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBEaXJFbnRyeXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoRGlyRW50cnkucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsRGlyRW50cnlGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9dG9KU09OKCl7cmV0dXJue25hbWU6dGhpcy5uYW1lLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRGlyRW50cnlGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHIsMCl9Z2V0IG5hbWUoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLl9fd2JnX2dldF9kaXJlbnRyeV9uYW1lKHJldHB0cix0aGlzLl9fd2JnX3B0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1nZXQgdHlwZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9kaXJlbnRyeV90eXBlKHRoaXMuX193YmdfcHRyKTtyZXR1cm4gX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZVtyZXRdfXNldCBuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF9kaXJlbnRyeV9uYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1mdW5jdGlvbiBFUlJfQUJPUlQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9BQk9SVChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0lOVkFMSURfU1RBVEUoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9JTlZBTElEX1NUQVRFKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfS0VZX0FMUkVBRFlfRVhJU1RTKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfS0VZX0FMUkVBRFlfRVhJU1RTKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfTk9UX0FMTE9XRUQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfQUxMT1dFRChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9GT1VORCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX05PVF9GT1VORChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PX01PRElGSUNBVElPTl9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfS0VZX0FMUkVBRFlfRVhJU1RTKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfUVVPVEFfRVhDRUVERUQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9RVU9UQV9FWENFRURFRChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1RZUEVfTUlTTUFUQ0goKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9UWVBFX01JU01BVENIKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1TeW1ib2wuZGlzcG9zZSYmKERpckVudHJ5LnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RGlyRW50cnkucHJvdG90eXBlLmZyZWUpO2NsYXNzIEZze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxGc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19mc19mcmVlKHB0ciwwKX1zdGF0aWMgY29weUZpbGUoc3JjLGRzdCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChzcmMsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU4scHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkc3Qsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19jb3B5RmlsZShwdHIwLGxlbjAscHRyMSxsZW4xKSl9c3RhdGljIGNvcHlGaWxlU3luYyhzcmMsZHN0KXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY29weUZpbGVTeW5jKHJldHB0cixwdHIwLGxlbjAscHRyMSxsZW4xKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBjcmVhdGVEaXIocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY3JlYXRlRGlyKHB0cjAsbGVuMCkpfXN0YXRpYyBjcmVhdGVEaXJBbGwocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY3JlYXRlRGlyQWxsKHB0cjAsbGVuMCkpfXN0YXRpYyBjcmVhdGVEaXJBbGxTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY3JlYXRlRGlyQWxsU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBjcmVhdGVEaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY3JlYXRlRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBtZXRhZGF0YShwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19tZXRhZGF0YShwdHIwLGxlbjApKX1zdGF0aWMgbWV0YWRhdGFTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfbWV0YWRhdGFTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gTWV0YWRhdGEuX193cmFwKHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWQocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXIocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVhZERpcihwdHIwLGxlbjApKX1zdGF0aWMgcmVhZERpclN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZWFkRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSxyMj1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzEyLCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIyKTt2YXIgdjI9Z2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHIwLHIxKS5zbGljZSgpO3JldHVybiB3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChyMCw0KnIxLDQpLHYyfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlYWRTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApKXRocm93IHRha2VPYmplY3QocjEpO3JldHVybiB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkVG9TdHJpbmcocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVhZFRvU3RyaW5nKHB0cjAsbGVuMCkpfXN0YXRpYyByZW1vdmVEaXIocGF0aCxyZWN1cnNpdmUpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlbW92ZURpcihwdHIwLGxlbjAscmVjdXJzaXZlKSl9c3RhdGljIHJlbW92ZURpclN5bmMocGF0aCxyZWN1cnNpdmUpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVtb3ZlRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wLHJlY3Vyc2l2ZSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVtb3ZlRmlsZShwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVGaWxlKHB0cjAsbGVuMCkpfXN0YXRpYyByZW1vdmVGaWxlU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZUZpbGVTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHdyaXRlKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfd3JpdGUocHRyMCxsZW4wLGFkZEhlYXBPYmplY3QoY29udGVudCkpKX1zdGF0aWMgd3JpdGVTdHJpbmcocGF0aCxjb250ZW50KXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU4scHRyMT1wYXNzU3RyaW5nVG9XYXNtMChjb250ZW50LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfd3JpdGVTdHJpbmcocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyB3cml0ZVN5bmMocGF0aCxjb250ZW50KXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3dyaXRlU3luYyhyZXRwdHIscHRyMCxsZW4wLGFkZEhlYXBPYmplY3QoY29udGVudCkpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19fVN5bWJvbC5kaXNwb3NlJiYoRnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Gcy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgTWV0YWRhdGF7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKE1ldGFkYXRhLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLE1ldGFkYXRhRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntmaWxlX3NpemU6dGhpcy5maWxlX3NpemUsdHlwZTp0aGlzLnR5cGV9fXRvU3RyaW5nKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxNZXRhZGF0YUZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19tZXRhZGF0YV9mcmVlKHB0ciwwKX1nZXQgZmlsZV9zaXplKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX2ZpbGVfc2l6ZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIEJpZ0ludC5hc1VpbnROKDY0LHJldCl9Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgZmlsZV9zaXplKGFyZzApe3dhc20uX193Ymdfc2V0X21ldGFkYXRhX2ZpbGVfc2l6ZSh0aGlzLl9fd2JnX3B0cixhcmcwKX1zZXQgdHlwZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV90eXBlKHRoaXMuX193YmdfcHRyLChfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlLmluZGV4T2YoYXJnMCkrMXx8MyktMSl9fVN5bWJvbC5kaXNwb3NlJiYoTWV0YWRhdGEucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1NZXRhZGF0YS5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgUHJvamVjdHtfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsUHJvamVjdEZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyLDApfXN0YXRpYyBidWlsZChvcHRpb25zKXtfYXNzZXJ0Q2xhc3Mob3B0aW9ucyxCdWlsZE9wdGlvbnMpO3ZhciBwdHIwPW9wdGlvbnMuX19kZXN0cm95X2ludG9fcmF3KCk7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2J1aWxkKHB0cjApKX1zdGF0aWMgZ2V0IGN3ZCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20ucHJvamVjdF9jd2QocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXN0YXRpYyBkZXBzKHJlZ2lzdHJ5LGNvbmN1cnJlbmN5KXt2YXIgcHRyMD1pc0xpa2VOb25lKHJlZ2lzdHJ5KT8wOnBhc3NTdHJpbmdUb1dhc20wKHJlZ2lzdHJ5LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9kZXBzKHB0cjAsbGVuMCxpc0xpa2VOb25lKGNvbmN1cnJlbmN5KT80Mjk0OTY3Mjk3OmNvbmN1cnJlbmN5Pj4+MCkpfXN0YXRpYyBlbnRyeXBvaW50c1N1YnNjcmliZShjb25maWcsY2FsbGJhY2spe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9lbnRyeXBvaW50c1N1YnNjcmliZShhZGRIZWFwT2JqZWN0KGNvbmZpZyksYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgZ3ppcChmaWxlcyl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2d6aXAoYWRkSGVhcE9iamVjdChmaWxlcykpKX1zdGF0aWMgaG1yRXZlbnRzKGlkZW50aWZpZXIsY2FsbGJhY2spe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoaWRlbnRpZmllcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaG1yRXZlbnRzKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSkpfXN0YXRpYyBpbml0KHRocmVhZF91cmwpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAodGhyZWFkX3VybCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLnByb2plY3RfaW5pdChwdHIwLGxlbjApfXN0YXRpYyBpbnN0YWxsKHBhY2thZ2VfbG9jayxtYXhfY29uY3VycmVudF9kb3dubG9hZHMpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGFja2FnZV9sb2NrLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9pbnN0YWxsKHB0cjAsbGVuMCxpc0xpa2VOb25lKG1heF9jb25jdXJyZW50X2Rvd25sb2Fkcyk/NDI5NDk2NzI5NzptYXhfY29uY3VycmVudF9kb3dubG9hZHM+Pj4wKSl9c3RhdGljIHNldEN3ZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X3NldEN3ZChwdHIwLGxlbjApfXN0YXRpYyBzaWdNZDUoY29udGVudCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X3NpZ01kNShhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHVwZGF0ZUluZm9TdWJzY3JpYmUoYWdncmVnYXRpb25fbXMsY2FsbGJhY2spe3dhc20ucHJvamVjdF91cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKX1zdGF0aWMgd3JpdGVBbGxUb0Rpc2soY2FsbGJhY2spe3dhc20ucHJvamVjdF93cml0ZUFsbFRvRGlzayhhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9fVN5bWJvbC5kaXNwb3NlJiYoUHJvamVjdC5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVByb2plY3QucHJvdG90eXBlLmZyZWUpO2NsYXNzIFJvb3RUYXNre3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShSb290VGFzay5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixSb290VGFza0ZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsUm9vdFRhc2tGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfcm9vdHRhc2tfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoUm9vdFRhc2sucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Sb290VGFzay5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgV2FzbVRhc2tNZXNzYWdle3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXYXNtVGFza01lc3NhZ2UucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxXYXNtVGFza01lc3NhZ2VGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2FzbXRhc2ttZXNzYWdlX2ZyZWUocHRyLDApfWdldCB0YXNrSWQoKXtyZXR1cm4gd2FzbS5fX3diZ19nZXRfd2FzbXRhc2ttZXNzYWdlX3Rhc2tJZCh0aGlzLl9fd2JnX3B0cik+Pj4wfXNldCB0YXNrSWQoYXJnMCl7d2FzbS5fX3diZ19zZXRfd2FzbXRhc2ttZXNzYWdlX3Rhc2tJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX1nZXQgZGF0YSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ud2FzbXRhc2ttZXNzYWdlX2RhdGEodGhpcy5fX3diZ19wdHIpKX19U3ltYm9sLmRpc3Bvc2UmJihXYXNtVGFza01lc3NhZ2UucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1XYXNtVGFza01lc3NhZ2UucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlckNyZWF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJjcmVhdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfX1TeW1ib2wuZGlzcG9zZSYmKFdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlck9wdGlvbnN7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKFdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyT3B0aW9uc0ZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyT3B0aW9uc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyLDApfWdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLl9fd2JnX2dldF93ZWJ3b3JrZXJvcHRpb25zX2N3ZChyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IGZpbGVuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19maWxlbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19c2V0IGN3ZChhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QodGhpcy5fX3diZ19wdHIscHRyMCxsZW4wKX1zZXQgZmlsZW5hbWUoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUodGhpcy5fX3diZ19wdHIscHRyMCxsZW4wKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgV2ViV29ya2VyVGVybWluYXRpb257c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKFdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlclRlcm1pbmF0aW9uRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9mcmVlKHB0ciwwKX1nZXQgb3B0aW9ucygpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF93ZWJ3b3JrZXJjcmVhdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyKTtyZXR1cm4gV2ViV29ya2VyT3B0aW9ucy5fX3dyYXAocmV0KX1nZXQgd29ya2VySWQoKXtyZXR1cm4gd2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fd29ya2VySWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgb3B0aW9ucyhhcmcwKXtfYXNzZXJ0Q2xhc3MoYXJnMCxXZWJXb3JrZXJPcHRpb25zKTt2YXIgcHRyMD1hcmcwLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIscHRyMCl9c2V0IHdvcmtlcklkKGFyZzApe3dhc20uX193Ymdfc2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyLGFyZzApfX1mdW5jdGlvbiBnZXRXYXNtTWVtb3J5KCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTWVtb3J5KCkpfWZ1bmN0aW9uIGdldFdhc21Nb2R1bGUoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmdldFdhc21Nb2R1bGUoKSl9ZnVuY3Rpb24gaW5pdExvZ0ZpbHRlcihmaWx0ZXIpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoZmlsdGVyLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uaW5pdExvZ0ZpbHRlcihwdHIwLGxlbjApfWZ1bmN0aW9uIGluaXRfcGFjaygpe3dhc20uaW5pdF9wYWNrKCl9ZnVuY3Rpb24gcmVjdlRhc2tNZXNzYWdlSW5Xb3JrZXIod29ya2VyX2lkKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCkpfWZ1bmN0aW9uIHJlZ2lzdGVyV29ya2VyU2NoZWR1bGVyKGNyZWF0b3IsdGVybWluYXRvcil7d2FzbS5yZWdpc3RlcldvcmtlclNjaGVkdWxlcihhZGRIZWFwT2JqZWN0KGNyZWF0b3IpLGFkZEhlYXBPYmplY3QodGVybWluYXRvcikpfWZ1bmN0aW9uIHNlbmRUYXNrTWVzc2FnZShtZXNzYWdlKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnNlbmRUYXNrTWVzc2FnZShhZGRIZWFwT2JqZWN0KG1lc3NhZ2UpKSl9ZnVuY3Rpb24gd2FzbV90aHJlYWRfZW50cnlfcG9pbnQocHRyKXt3YXNtLndhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil9ZnVuY3Rpb24gd29ya2VyQ3JlYXRlZCh3b3JrZXJfaWQpe3dhc20ud29ya2VyQ3JlYXRlZCh3b3JrZXJfaWQpfVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyVGVybWluYXRpb24ucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1XZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUuZnJlZSk7Y29uc3QgX191dG9vUmVhZEN1c3RvbVNlY3Rpb249ZnVuY3Rpb24gcmVhZEN1c3RvbVNlY3Rpb24od2FzbU1vZHVsZSxtZW1vcnksbmFtZVB0cixuYW1lTGVuZ3RoLHRhcmdldFB0cix0YXJnZXRMZW5ndGgpe2NvbnN0IG5hbWVCeXRlcz1uZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyLG5hbWVQdHIsbmFtZUxlbmd0aCksc2VjdGlvbk5hbWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLmRlY29kZShuZXcgVWludDhBcnJheShuYW1lQnl0ZXMpKSxzZWN0aW9ucz1XZWJBc3NlbWJseS5Nb2R1bGUuY3VzdG9tU2VjdGlvbnMod2FzbU1vZHVsZSxzZWN0aW9uTmFtZSk7aWYoMD09PXNlY3Rpb25zLmxlbmd0aClyZXR1cm4gMDtjb25zdCBzZWN0aW9uPXNlY3Rpb25zWzBdLG5lZWQ9c2VjdGlvbi5ieXRlTGVuZ3RoO3JldHVybiB0YXJnZXRMZW5ndGg8bmVlZHx8bmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcix0YXJnZXRQdHIsbmVlZCkuc2V0KG5ldyBVaW50OEFycmF5KHNlY3Rpb24pKSxuZWVkfTtmdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0VGltZV8xZTNjZDEzOTFjNWMzOTk1OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuZ2V0VGltZSgpfSxfX3diZ19nZXRUaW1lem9uZU9mZnNldF84MTc3NmQxMGE0ZWMxOGE4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuZ2V0VGltZXpvbmVPZmZzZXQoKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMF83M2FmYzM1ZWI1NDRlNTM5OmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IERhdGUpfSxfX3diZ19uZXdfMjQ1Y2Q1YzQ5MTU3ZTYwMjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRGF0ZShnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3XzM2MTMwOGIyMzU2Y2VjZDA6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgT2JqZWN0KX0sX193YmdfbmV3XzNlYjM2YWUyNDFmZTZmNDQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgQXJyYXkpfSxfX3diZ19uZXdfNGY4ZjNjMTIzZTQ3NDM1ODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBXb3JrZXIoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzY0Mjg0YmQ0ODdmOWQyMzk6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgSGVhZGVycyl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld183MmM2MjdiYTgwZGUxYzIxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBJbnQzMkFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfOGE2ZjIzOGE2ZWNlODZlYTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBFcnJvcil9LF9fd2JnX25ld184ZWM1ODAxYjM5ZDZmODYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBGaWxlU3lzdGVtT2JzZXJ2ZXIoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld19iNWQ5ZTJmYjM4OWZlZjkxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7dHJ5e3ZhciBzdGF0ZTA9e2E6YXJnMCxiOmFyZzF9O2NvbnN0IHJldD1uZXcgUHJvbWlzZSgoYXJnMCxhcmcxKT0+e2NvbnN0IGE9c3RhdGUwLmE7c3RhdGUwLmE9MDt0cnl7cmV0dXJuIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV81NjAzKGEsc3RhdGUwLmIsYXJnMCxhcmcxKX1maW5hbGx5e3N0YXRlMC5hPWF9fSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX1maW5hbGx5e3N0YXRlMC5hPXN0YXRlMC5iPTB9fSxfX3diZ19uZXdfYjk0OWU3ZjU2MTUwYTVkMTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBYm9ydENvbnRyb2xsZXIpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfZGQyYjY4MGM4YmY2YWUyOTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgVWludDhBcnJheShnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2Zyb21fc2xpY2VfYTNkMjYyOWRjMTgyNjc4NDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldEFycmF5VThGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19uZXdfbm9fYXJnc18xYzdjODQyZjA4ZDAwZWJiOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZ1bmN0aW9uKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld193aXRoX2xlbmd0aF9hMmMzOWNiZTg4ZmQ4ZmYxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGFyZzA+Pj4wKSl9LF9fd2JnX25ld193aXRoX29wdGlvbnNfMTQ1YWZiYTkyMmFkMzcwMzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSxnZXRPYmplY3QoYXJnMikpKX0sYXJndW1lbnRzKX0sX193YmdfbmV3X3dpdGhfc3RyX2FuZF9pbml0X2E2MWNiYzZiZGVmMjE2MTQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBSZXF1ZXN0KGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfc2VxdWVuY2VfY2VhMmMwNTcxZDZkYzZhYjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgQmxvYihnZXRPYmplY3QoYXJnMCkpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF8wYTVlMGY4YWY5ODE0NmFhOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KCkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzM0ODJmNTRjNDllOGFmMTk6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfNDE4ZjgwZDhmNTMwMzIzMzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCl9LF9fd2JnX25vd18wZGM0OTIwYTQ3Y2Y3MjgwOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubm93KCl9LF9fd2JnX25vd19hM2FmOWEyZjRiYmFhNGQxOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LF9fd2JnX29ic2VydmVfMzIyMzViNWU2MTk1ZDRhYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm9ic2VydmUoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ19vZl9kZGMwOTQyYjBkY2UxNmExOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBcnJheS5vZihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ19wYXJzZV83MDg0NjFhMWZlZGRmYjM4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoSlNPTi5wYXJzZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19wZXJmb3JtYW5jZV82YWRjM2I4OTllNDQ4YTIzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5wZXJmb3JtYW5jZSl9LF9fd2JnX3Bvc3RNZXNzYWdlXzIwNDFmNGU5MGFmNjEzMTg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucG9zdE1lc3NhZ2UoZ2V0T2JqZWN0KGFyZzEpKX0sYXJndW1lbnRzKX0sX193YmdfcG9zdE1lc3NhZ2VfNzcxZWYzMjkzYTI4YmJhYzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wcm90b3R5cGVzZXRjYWxsX2JkY2RjYzU4NDJlNGQ3N2Q6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe1VpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMCxhcmcxKSxnZXRPYmplY3QoYXJnMikpfSxfX3diZ19wdXNoXzhmZmRjYjIwNjMzNDBiYTU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLnB1c2goZ2V0T2JqZWN0KGFyZzEpKX0sX193YmdfcXVldWVNaWNyb3Rhc2tfMGFhMGE5MjdmNzhmNWQ5ODpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucXVldWVNaWNyb3Rhc2spfSxfX3diZ19xdWV1ZU1pY3JvdGFza181YmI1MzY5ODJmNzhhNTZmOmZ1bmN0aW9uKGFyZzApe3F1ZXVlTWljcm90YXNrKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3JhbmRvbV85MTIyODRkYmY2MzZmMjY5OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LF9fd2JnX3JlbGF0aXZlUGF0aENvbXBvbmVudHNfYmM0ODI0MDNjYjZkN2VhOTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVsYXRpdmVQYXRoQ29tcG9uZW50cyl9LF9fd2JnX3JlbW92ZUVudHJ5X2M0ZWZmZmRkMzE4YjUxYTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIsYXJnMyl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnJlbW92ZUVudHJ5KGdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpLGdldE9iamVjdChhcmczKSkpfSxfX3diZ19yZXNvbHZlXzAwMmM0YjdkOWQ4ZjZiNjQ6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoUHJvbWlzZS5yZXNvbHZlKGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19yb290dGFza19uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoUm9vdFRhc2suX193cmFwKGFyZzApKX0sX193Ymdfc2V0VGltZW91dF82MzAwODYxMzY0NGIwN2FmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc2V0VGltZW91dChnZXRPYmplY3QoYXJnMSksYXJnMikpfSxhcmd1bWVudHMpfSxfX3diZ19zZXRUaW1lb3V0XzdiYjM0Mjk2NjJhYjFlNzA6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChzZXRUaW1lb3V0KGdldE9iamVjdChhcmcwKSxhcmcxKSl9LF9fd2JnX3NldF9hdF9lNDUzY2YzZjRiZTllMmQ5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmF0PWFyZzF9LF9fd2JnX3NldF9ib2R5XzlhN2UwMGFmZTNjZmUyNDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYm9keT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9jYWNoZV8zMTVhM2VkNzczYTQxNTQzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNhY2hlPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q2FjaGVbYXJnMV19LF9fd2JnX3NldF9jcmVhdGVfMWY5MDJjNTkzNmFkZGU3ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5jcmVhdGU9MCE9PWFyZzF9LF9fd2JnX3NldF9jcmVhdGVfYzk1ZGRjYTAxOGZhYzljZTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5jcmVhdGU9MCE9PWFyZzF9LF9fd2JnX3NldF9jcmVkZW50aWFsc19jNGE1OGQyZTA1ZWYyNGZiOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWRlbnRpYWxzPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHNbYXJnMV19LF9fd2JnX3NldF9mNDNlNTc3YWVhOTQ0NjViOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdPXRha2VPYmplY3QoYXJnMil9LF9fd2JnX3NldF9oZWFkZXJzX2NmYzVmNGIyYzFmMjA1NDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuaGVhZGVycz1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9tZXRob2RfYzNlMjAzNzVmNWFlN2ZhYzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7Z2V0T2JqZWN0KGFyZzApLm1ldGhvZD1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X21vZGVfYjEzNjQyYzMxMjY0ODIwMjpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5tb2RlPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0TW9kZVthcmcxXX0sX193Ymdfc2V0X25hbWVfNDliOWVjYmE3ZjU4ZjJlNTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7Z2V0T2JqZWN0KGFyZzApLm5hbWU9Z2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMil9LF9fd2JnX3NldF9vbm1lc3NhZ2VfNmVkNDEwNTBlNGE1Y2VlMjpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5vbm1lc3NhZ2U9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfcmVjdXJzaXZlXzY1ZWQwN2RmODkyYjQ4ODU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucmVjdXJzaXZlPTAhPT1hcmcxfSxfX3diZ19zZXRfcmVjdXJzaXZlX2Y1ZDM0MTYwOTgzMjgxMTA6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucmVjdXJzaXZlPTAhPT1hcmcxfSxfX3diZ19zZXRfc2lnbmFsX2YyZDNmODU5OTI0ODg5NmQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuc2lnbmFsPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X3R5cGVfZTEyN2YyNmI3OGQ3OGJmYzpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50eXBlPV9fd2JpbmRnZW5fZW51bV9Xb3JrZXJUeXBlW2FyZzFdfSxfX3diZ19zaWduYWxfZDEyODVlY2FiNGViYzVhZDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc2lnbmFsKX0sX193Ymdfc2l6ZV9lMDVkMzFjYzYwNDk4MTVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuc2l6ZX0sX193Ymdfc2xpY2VfNTY2YTE1ZjMyMTRmYTUyZTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczLGFyZzQpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zbGljZShhcmcxLGFyZzIsZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzMsYXJnNCkpKX0sYXJndW1lbnRzKX0sX193Ymdfc3RhY2tfMGVkNzVkNjg1NzViMGYzYzpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZ2V0T2JqZWN0KGFyZzEpLnN0YWNrLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9HTE9CQUxfMTI4MzcxNjdhZDkzNTExNjpmdW5jdGlvbigpe2NvbnN0IHJldD12b2lkIDA9PT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/bnVsbDpfX3dlYnBhY2tfcmVxdWlyZV9fLmc7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF9USElTX2U2MjhlODlhYjNiMWM5NWY6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBnbG9iYWxUaGlzP251bGw6Z2xvYmFsVGhpcztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfU0VMRl9hNjIxZDNkZmJiNjBkMGNlOmZ1bmN0aW9uKCl7Y29uc3QgcmV0PSJ1bmRlZmluZWQiPT10eXBlb2Ygc2VsZj9udWxsOnNlbGY7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX1dJTkRPV19mODcyN2YwY2Y4ODhlMGJkOmZ1bmN0aW9uKCl7Y29uc3QgcmV0PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P251bGw6d2luZG93O3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXR1c184OWQ3ZTgwM2RiOTExZWU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuc3RhdHVzfSxfX3diZ19zdG9yYWdlX2MwMDJiNTNiYzQ4ODMyOTk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnN0b3JhZ2UpfSxfX3diZ19zdHJpbmdpZnlfOGQxY2M2ZmYzODNlOGJhZTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnN0cmluZ2lmeShnZXRPYmplY3QoYXJnMCkpKX0sYXJndW1lbnRzKX0sX193Ymdfc3ViYXJyYXlfYTk2ZTFmZWYxN2VkMjNjYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnN1YmFycmF5KGFyZzE+Pj4wLGFyZzI+Pj4wKSl9LF9fd2JnX3RoZW5fMGQ5ZmUyYzdiMTg1N2QzMjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnRoZW4oZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ190aGVuX2I5ZTdiM2I1ZjFhOWUxYjU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfdG9TdHJpbmdfOTY0ZmY3ZmU2ZWNhODM2MjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudG9TdHJpbmcoKSl9LF9fd2JnX3RydW5jYXRlX2RjNjYxZmRjYjAwNjJmYTc6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkudHJ1bmNhdGUoYXJnMT4+PjApfSxhcmd1bWVudHMpfSxfX3diZ190eXBlXzAzZGZlNDYyMTczNWU1Mjg6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS50eXBlO3JldHVybihfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUNoYW5nZVJlY29yZFR5cGUuaW5kZXhPZihyZXQpKzF8fDcpLTF9LF9fd2JnX3VybF9jNDg0YzI2YjFmYmY1MTI2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkudXJsLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX3ZhbHVlXzA1NDYyNTViNDE1ZTk2YzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnZhbHVlKX0sX193YmdfdmFsdWVfZmU2ZWUzNGFmNWRjM2RjZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ193YWl0QXN5bmNfYTU4YjIxMzRiZmYzOWMzZTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoQXRvbWljcy53YWl0QXN5bmMoZ2V0T2JqZWN0KGFyZzApLGFyZzE+Pj4wLGFyZzIpKX0sX193Ymdfd2FpdEFzeW5jX2MwYTM5YTdkMzMxOGQ5MWU6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyl9LF9fd2JnX3dhcm5fYTQwYjk3MTQ2N2IyMTljNzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLndhcm4oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193Ymdfd2Fybl9mN2FlMWIyZTY2Y2NiOTMwOmZ1bmN0aW9uKGFyZzApe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ193YXNtdGFza21lc3NhZ2VfbmV3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KFdhc21UYXNrTWVzc2FnZS5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJjcmVhdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyQ3JlYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fbmV3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KFdlYldvcmtlclRlcm1pbmF0aW9uLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dyaXRlXzJkNTkzMzdjYzQ5NjkxOWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIsYXJnMyl7cmV0dXJuIGdldE9iamVjdChhcmcwKS53cml0ZShnZXRBcnJheVU4RnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sYXJndW1lbnRzKX0sX193Ymdfd3JpdGVfMzdmNWE2MmEyNGRhNjYyZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS53cml0ZShnZXRPYmplY3QoYXJnMSkpKX0sYXJndW1lbnRzKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDE6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTcyNzYzLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzM3MTMpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0Njg5LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ2MTkpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0Njg5LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ2MTkpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0NzUxLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ3MTUpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0ODQxLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ4MjIpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNDY5MDAsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzQ2ODgxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGFyZzApfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwODpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXt2YXIgdjA9Z2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKGFyZzAsYXJnMSkuc2xpY2UoKTt3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChhcmcwLDQqYXJnMSw0KTtyZXR1cm4gYWRkSGVhcE9iamVjdCh2MCl9LF9fd2JpbmRnZW5fbGlua18wYjFmNzZkMjM1ZmQyYjg2OmZ1bmN0aW9uKGFyZzApe2NvbnN0IHZhbD0ib25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICAgICAgbGV0IFtpYSwgaW5kZXgsIHZhbHVlXSA9IGV2LmRhdGE7XG4gICAgICAgICAgICAgICAgaWEgPSBuZXcgSW50MzJBcnJheShpYS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBBdG9taWNzLndhaXQoaWEsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UocmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAiLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAodm9pZCAwPT09VVJMLmNyZWF0ZU9iamVjdFVSTD8iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCIrZW5jb2RlVVJJQ29tcG9uZW50KHZhbCk6VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdmFsXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzQsbGVuMSwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLHB0cjEsITApfSxfX3diaW5kZ2VuX29iamVjdF9jbG9uZV9yZWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApKX0sX193YmluZGdlbl9vYmplY3RfZHJvcF9yZWY6ZnVuY3Rpb24oYXJnMCl7dGFrZU9iamVjdChhcmcwKX0sbWVtb3J5Om1lbW9yeXx8bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDoxMDI1LG1heGltdW06NjU1MzYsc2hhcmVkOiEwfSl9O3JldHVybntfX3Byb3RvX186bnVsbCwiLi9pbmRleF9iZy5qcyI6aW1wb3J0MCxlbnY6e19fcHJvdG9fXzpudWxsLC4uLmVudl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLHJlYWRfY3VzdG9tX3NlY3Rpb246KG5hbWVQdHIsbmFtZUxlbmd0aCx0YXJnZXRQdHIsdGFyZ2V0TGVuZ3RoKT0+X191dG9vUmVhZEN1c3RvbVNlY3Rpb24od2FzbU1vZHVsZSx3YXNtLm1lbW9yeSxuYW1lUHRyLG5hbWVMZW5ndGgsdGFyZ2V0UHRyLHRhcmdldExlbmd0aCl9fX1mdW5jdGlvbiBfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0ODIyKGFyZzAsYXJnMSl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0ODIyKGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzQ2ODgxKGFyZzAsYXJnMSl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNDY4ODEoYXJnMCxhcmcxKX1mdW5jdGlvbiBfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTczNzEzKGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzM3MTMoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ2MTkoYXJnMCxhcmcxLGFyZzIpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE3NDYxOShhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE3NDcxNShhcmcwLGFyZzEsYXJnMil7dHJ5e3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE3NDcxNShhcmcwLGFyZzEsYWRkQm9ycm93ZWRPYmplY3QoYXJnMikpfWZpbmFsbHl7aGVhcFtzdGFja19wb2ludGVyKytdPXZvaWQgMH19ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzU2MDMoYXJnMCxhcmcxLGFyZzIsYXJnMyl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNTYwMyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSxhZGRIZWFwT2JqZWN0KGFyZzMpKX1jb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18ucCsiOGRhNjU4YTk3ODcyOTNkNjY5NWEud2FzbSJ9fSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCl7dmFyIGNhY2hlZE1vZHVsZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO2lmKHZvaWQgMCE9PWNhY2hlZE1vZHVsZSlyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7dmFyIG1vZHVsZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdPXtleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLG1vZHVsZS5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pLG1vZHVsZS5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18ubT1fX3dlYnBhY2tfbW9kdWxlc19fLF9fd2VicGFja19yZXF1aXJlX18ubj1tb2R1bGU9Pnt2YXIgZ2V0dGVyPW1vZHVsZSYmbW9kdWxlLl9fZXNNb2R1bGU/KCk9Pm1vZHVsZS5kZWZhdWx0OigpPT5tb2R1bGU7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIse2E6Z2V0dGVyfSksZ2V0dGVyfSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQ9KGV4cG9ydHMsZGVmaW5pdGlvbik9Pntmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKV9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLGtleSkmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cyxrZXkpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxrZXkse2VudW1lcmFibGU6ITAsZ2V0OmRlZmluaXRpb25ba2V5XX0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaChlKXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX3dlYnBhY2tfcmVxdWlyZV9fLm89KG9iaixwcm9wKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaixwcm9wKSwoKCk9Pnt2YXIgc2NyaXB0VXJsO19fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzJiYoc2NyaXB0VXJsPV9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbisiIik7dmFyIGRvY3VtZW50PV9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtpZighc2NyaXB0VXJsJiZkb2N1bWVudCYmKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJiJTQ1JJUFQiPT09ZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkmJihzY3JpcHRVcmw9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLCFzY3JpcHRVcmwpKXt2YXIgc2NyaXB0cz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7aWYoc2NyaXB0cy5sZW5ndGgpZm9yKHZhciBpPXNjcmlwdHMubGVuZ3RoLTE7aT4tMSYmKCFzY3JpcHRVcmx8fCEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKTspc2NyaXB0VXJsPXNjcmlwdHNbaS0tXS5zcmN9aWYoIXNjcmlwdFVybCl0aHJvdyBuZXcgRXJyb3IoIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyIik7c2NyaXB0VXJsPXNjcmlwdFVybC5yZXBsYWNlKC9eYmxvYjovLCIiKS5yZXBsYWNlKC8jLiokLywiIikucmVwbGFjZSgvXD8uKiQvLCIiKS5yZXBsYWNlKC9cL1teXC9dKyQvLCIvIiksX193ZWJwYWNrX3JlcXVpcmVfXy5wPXNjcmlwdFVybH0pKCksX193ZWJwYWNrX3JlcXVpcmVfXy5iPXNlbGYubG9jYXRpb24rIiI7dmFyIF9fd2VicGFja19leHBvcnRzX189e307cmV0dXJuKCgpPT57InVzZSBzdHJpY3QiO3ZhciBfdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fPV9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXguanMiKTtzZWxmLndhc21fYmluZGdlbj1fdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLlFSfSkoKSxfX3dlYnBhY2tfZXhwb3J0c19fPV9fd2VicGFja19leHBvcnRzX18uZGVmYXVsdCxfX3dlYnBhY2tfZXhwb3J0c19ffSkoKSk7";
|
|
1
|
+
export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXsiLi9jbGkvbW9ja3MvZW52LmpzIihtb2R1bGUpe21vZHVsZS5leHBvcnRzPXt9fSwiLi9zcmMvdXRvby9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO3ZhciBlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuL2NsaS9tb2Nrcy9lbnYuanMiKSxlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihlbnZfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7Y2xhc3MgQnVpbGRPcHRpb25ze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxCdWlsZE9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfYnVpbGRvcHRpb25zX2ZyZWUocHRyLDApfWdldCBjb25maWcoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmJ1aWxkb3B0aW9uc19jb25maWcodGhpcy5fX3diZ19wdHIpKX1jb25zdHJ1Y3Rvcigpe2NvbnN0IHJldD13YXNtLmJ1aWxkb3B0aW9uc19uZXcoKTtyZXR1cm4gdGhpcy5fX3diZ19wdHI9cmV0Pj4+MCxCdWlsZE9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIodGhpcyx0aGlzLl9fd2JnX3B0cix0aGlzKSx0aGlzfXNldCBjb25maWcodmFsKXt3YXNtLmJ1aWxkb3B0aW9uc19zZXRfY29uZmlnKHRoaXMuX193YmdfcHRyLGFkZEhlYXBPYmplY3QodmFsKSl9Z2V0IGNsZWFudXAoKXtyZXR1cm4gMCE9PXdhc20uX193YmdfZ2V0X2J1aWxkb3B0aW9uc19jbGVhbnVwKHRoaXMuX193YmdfcHRyKX1zZXQgY2xlYW51cChhcmcwKXt3YXNtLl9fd2JnX3NldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cixhcmcwKX19U3ltYm9sLmRpc3Bvc2UmJihCdWlsZE9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1CdWlsZE9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIENyZWF0ZVN5bmNBY2Nlc3NIYW5kbGVPcHRpb25ze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19jcmVhdGVzeW5jYWNjZXNzaGFuZGxlb3B0aW9uc19mcmVlKHB0ciwwKX19U3ltYm9sLmRpc3Bvc2UmJihDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPUNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGVPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBEaXJFbnRyeXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoRGlyRW50cnkucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsRGlyRW50cnlGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9dG9KU09OKCl7cmV0dXJue25hbWU6dGhpcy5uYW1lLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRGlyRW50cnlGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHIsMCl9Z2V0IG5hbWUoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLl9fd2JnX2dldF9kaXJlbnRyeV9uYW1lKHJldHB0cix0aGlzLl9fd2JnX3B0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1nZXQgdHlwZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9kaXJlbnRyeV90eXBlKHRoaXMuX193YmdfcHRyKTtyZXR1cm4gX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZVtyZXRdfXNldCBuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF9kaXJlbnRyeV9uYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1mdW5jdGlvbiBFUlJfQUJPUlQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9BQk9SVChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0lOVkFMSURfU1RBVEUoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9JTlZBTElEX1NUQVRFKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfS0VZX0FMUkVBRFlfRVhJU1RTKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfS0VZX0FMUkVBRFlfRVhJU1RTKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfTk9UX0FMTE9XRUQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfQUxMT1dFRChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9GT1VORCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX05PVF9GT1VORChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PX01PRElGSUNBVElPTl9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfS0VZX0FMUkVBRFlfRVhJU1RTKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1mdW5jdGlvbiBFUlJfUVVPVEFfRVhDRUVERUQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9RVU9UQV9FWENFRURFRChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1RZUEVfTUlTTUFUQ0goKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9UWVBFX01JU01BVENIKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1TeW1ib2wuZGlzcG9zZSYmKERpckVudHJ5LnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RGlyRW50cnkucHJvdG90eXBlLmZyZWUpO2NsYXNzIEZze19fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxGc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19mc19mcmVlKHB0ciwwKX1zdGF0aWMgY29weUZpbGUoc3JjLGRzdCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChzcmMsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU4scHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkc3Qsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19jb3B5RmlsZShwdHIwLGxlbjAscHRyMSxsZW4xKSl9c3RhdGljIGNvcHlGaWxlU3luYyhzcmMsZHN0KXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY29weUZpbGVTeW5jKHJldHB0cixwdHIwLGxlbjAscHRyMSxsZW4xKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBjcmVhdGVEaXIocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY3JlYXRlRGlyKHB0cjAsbGVuMCkpfXN0YXRpYyBjcmVhdGVEaXJBbGwocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY3JlYXRlRGlyQWxsKHB0cjAsbGVuMCkpfXN0YXRpYyBjcmVhdGVEaXJBbGxTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY3JlYXRlRGlyQWxsU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBjcmVhdGVEaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfY3JlYXRlRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyBtZXRhZGF0YShwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19tZXRhZGF0YShwdHIwLGxlbjApKX1zdGF0aWMgbWV0YWRhdGFTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfbWV0YWRhdGFTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gTWV0YWRhdGEuX193cmFwKHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWQocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXIocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVhZERpcihwdHIwLGxlbjApKX1zdGF0aWMgcmVhZERpclN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZWFkRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSxyMj1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzEyLCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIyKTt2YXIgdjI9Z2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHIwLHIxKS5zbGljZSgpO3JldHVybiB3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChyMCw0KnIxLDQpLHYyfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlYWRTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApKXRocm93IHRha2VPYmplY3QocjEpO3JldHVybiB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkVG9TdHJpbmcocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVhZFRvU3RyaW5nKHB0cjAsbGVuMCkpfXN0YXRpYyByZW1vdmVEaXIocGF0aCxyZWN1cnNpdmUpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlbW92ZURpcihwdHIwLGxlbjAscmVjdXJzaXZlKSl9c3RhdGljIHJlbW92ZURpclN5bmMocGF0aCxyZWN1cnNpdmUpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVtb3ZlRGlyU3luYyhyZXRwdHIscHRyMCxsZW4wLHJlY3Vyc2l2ZSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVtb3ZlRmlsZShwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVGaWxlKHB0cjAsbGVuMCkpfXN0YXRpYyByZW1vdmVGaWxlU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZUZpbGVTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHdyaXRlKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfd3JpdGUocHRyMCxsZW4wLGFkZEhlYXBPYmplY3QoY29udGVudCkpKX1zdGF0aWMgd3JpdGVTdHJpbmcocGF0aCxjb250ZW50KXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU4scHRyMT1wYXNzU3RyaW5nVG9XYXNtMChjb250ZW50LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfd3JpdGVTdHJpbmcocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyB3cml0ZVN5bmMocGF0aCxjb250ZW50KXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3dyaXRlU3luYyhyZXRwdHIscHRyMCxsZW4wLGFkZEhlYXBPYmplY3QoY29udGVudCkpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19fVN5bWJvbC5kaXNwb3NlJiYoRnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Gcy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgTWV0YWRhdGF7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKE1ldGFkYXRhLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLE1ldGFkYXRhRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntmaWxlX3NpemU6dGhpcy5maWxlX3NpemUsdHlwZTp0aGlzLnR5cGV9fXRvU3RyaW5nKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxNZXRhZGF0YUZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19tZXRhZGF0YV9mcmVlKHB0ciwwKX1nZXQgZmlsZV9zaXplKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX2ZpbGVfc2l6ZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIEJpZ0ludC5hc1VpbnROKDY0LHJldCl9Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgZmlsZV9zaXplKGFyZzApe3dhc20uX193Ymdfc2V0X21ldGFkYXRhX2ZpbGVfc2l6ZSh0aGlzLl9fd2JnX3B0cixhcmcwKX1zZXQgdHlwZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV90eXBlKHRoaXMuX193YmdfcHRyLChfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlLmluZGV4T2YoYXJnMCkrMXx8MyktMSl9fVN5bWJvbC5kaXNwb3NlJiYoTWV0YWRhdGEucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1NZXRhZGF0YS5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgUHJvamVjdHtfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsUHJvamVjdEZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyLDApfXN0YXRpYyBidWlsZChvcHRpb25zKXtfYXNzZXJ0Q2xhc3Mob3B0aW9ucyxCdWlsZE9wdGlvbnMpO3ZhciBwdHIwPW9wdGlvbnMuX19kZXN0cm95X2ludG9fcmF3KCk7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2J1aWxkKHB0cjApKX1zdGF0aWMgZ2V0IGN3ZCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20ucHJvamVjdF9jd2QocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXN0YXRpYyBkZXBzKHJlZ2lzdHJ5LGNvbmN1cnJlbmN5KXt2YXIgcHRyMD1pc0xpa2VOb25lKHJlZ2lzdHJ5KT8wOnBhc3NTdHJpbmdUb1dhc20wKHJlZ2lzdHJ5LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9kZXBzKHB0cjAsbGVuMCxpc0xpa2VOb25lKGNvbmN1cnJlbmN5KT80Mjk0OTY3Mjk3OmNvbmN1cnJlbmN5Pj4+MCkpfXN0YXRpYyBlbnRyeXBvaW50c1N1YnNjcmliZShjb25maWcsY2FsbGJhY2spe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9lbnRyeXBvaW50c1N1YnNjcmliZShhZGRIZWFwT2JqZWN0KGNvbmZpZyksYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgZ3ppcChmaWxlcyl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2d6aXAoYWRkSGVhcE9iamVjdChmaWxlcykpKX1zdGF0aWMgaG1yRXZlbnRzKGlkZW50aWZpZXIsY2FsbGJhY2spe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoaWRlbnRpZmllcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaG1yRXZlbnRzKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSkpfXN0YXRpYyBpbml0KHRocmVhZF91cmwpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAodGhyZWFkX3VybCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLnByb2plY3RfaW5pdChwdHIwLGxlbjApfXN0YXRpYyBpbnN0YWxsKHBhY2thZ2VfbG9jayxtYXhfY29uY3VycmVudF9kb3dubG9hZHMpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGFja2FnZV9sb2NrLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9pbnN0YWxsKHB0cjAsbGVuMCxpc0xpa2VOb25lKG1heF9jb25jdXJyZW50X2Rvd25sb2Fkcyk/NDI5NDk2NzI5NzptYXhfY29uY3VycmVudF9kb3dubG9hZHM+Pj4wKSl9c3RhdGljIHNldEN3ZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X3NldEN3ZChwdHIwLGxlbjApfXN0YXRpYyBzaWdNZDUoY29udGVudCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X3NpZ01kNShhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHVwZGF0ZUluZm9TdWJzY3JpYmUoYWdncmVnYXRpb25fbXMsY2FsbGJhY2spe3dhc20ucHJvamVjdF91cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKX1zdGF0aWMgd3JpdGVBbGxUb0Rpc2soY2FsbGJhY2spe3dhc20ucHJvamVjdF93cml0ZUFsbFRvRGlzayhhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9fVN5bWJvbC5kaXNwb3NlJiYoUHJvamVjdC5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVByb2plY3QucHJvdG90eXBlLmZyZWUpO2NsYXNzIFJvb3RUYXNre3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShSb290VGFzay5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixSb290VGFza0ZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsUm9vdFRhc2tGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfcm9vdHRhc2tfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoUm9vdFRhc2sucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Sb290VGFzay5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgV2FzbVRhc2tNZXNzYWdle3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXYXNtVGFza01lc3NhZ2UucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxXYXNtVGFza01lc3NhZ2VGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2FzbXRhc2ttZXNzYWdlX2ZyZWUocHRyLDApfWdldCB0YXNrSWQoKXtyZXR1cm4gd2FzbS5fX3diZ19nZXRfd2FzbXRhc2ttZXNzYWdlX3Rhc2tJZCh0aGlzLl9fd2JnX3B0cik+Pj4wfXNldCB0YXNrSWQoYXJnMCl7d2FzbS5fX3diZ19zZXRfd2FzbXRhc2ttZXNzYWdlX3Rhc2tJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX1nZXQgZGF0YSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ud2FzbXRhc2ttZXNzYWdlX2RhdGEodGhpcy5fX3diZ19wdHIpKX19U3ltYm9sLmRpc3Bvc2UmJihXYXNtVGFza01lc3NhZ2UucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1XYXNtVGFza01lc3NhZ2UucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlckNyZWF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJjcmVhdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfX1TeW1ib2wuZGlzcG9zZSYmKFdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlck9wdGlvbnN7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKFdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyT3B0aW9uc0ZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyT3B0aW9uc0ZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyLDApfWdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLl9fd2JnX2dldF93ZWJ3b3JrZXJvcHRpb25zX2N3ZChyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IGZpbGVuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19maWxlbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19c2V0IGN3ZChhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QodGhpcy5fX3diZ19wdHIscHRyMCxsZW4wKX1zZXQgZmlsZW5hbWUoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUodGhpcy5fX3diZ19wdHIscHRyMCxsZW4wKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgV2ViV29ya2VyVGVybWluYXRpb257c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKFdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlclRlcm1pbmF0aW9uRmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfV9fZGVzdHJveV9pbnRvX3Jhdygpe2NvbnN0IHB0cj10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCxXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi51bnJlZ2lzdGVyKHRoaXMpLHB0cn1mcmVlKCl7Y29uc3QgcHRyPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9mcmVlKHB0ciwwKX1nZXQgb3B0aW9ucygpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF93ZWJ3b3JrZXJjcmVhdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyKTtyZXR1cm4gV2ViV29ya2VyT3B0aW9ucy5fX3dyYXAocmV0KX1nZXQgd29ya2VySWQoKXtyZXR1cm4gd2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fd29ya2VySWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgb3B0aW9ucyhhcmcwKXtfYXNzZXJ0Q2xhc3MoYXJnMCxXZWJXb3JrZXJPcHRpb25zKTt2YXIgcHRyMD1hcmcwLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIscHRyMCl9c2V0IHdvcmtlcklkKGFyZzApe3dhc20uX193Ymdfc2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyLGFyZzApfX1mdW5jdGlvbiBnZXRXYXNtTWVtb3J5KCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTWVtb3J5KCkpfWZ1bmN0aW9uIGdldFdhc21Nb2R1bGUoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmdldFdhc21Nb2R1bGUoKSl9ZnVuY3Rpb24gaW5pdExvZ0ZpbHRlcihmaWx0ZXIpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoZmlsdGVyLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uaW5pdExvZ0ZpbHRlcihwdHIwLGxlbjApfWZ1bmN0aW9uIGluaXRfcGFjaygpe3dhc20uaW5pdF9wYWNrKCl9ZnVuY3Rpb24gcmVjdlRhc2tNZXNzYWdlSW5Xb3JrZXIod29ya2VyX2lkKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCkpfWZ1bmN0aW9uIHJlZ2lzdGVyV29ya2VyU2NoZWR1bGVyKGNyZWF0b3IsdGVybWluYXRvcil7d2FzbS5yZWdpc3RlcldvcmtlclNjaGVkdWxlcihhZGRIZWFwT2JqZWN0KGNyZWF0b3IpLGFkZEhlYXBPYmplY3QodGVybWluYXRvcikpfWZ1bmN0aW9uIHNlbmRUYXNrTWVzc2FnZShtZXNzYWdlKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnNlbmRUYXNrTWVzc2FnZShhZGRIZWFwT2JqZWN0KG1lc3NhZ2UpKSl9ZnVuY3Rpb24gd2FzbV90aHJlYWRfZW50cnlfcG9pbnQocHRyKXt3YXNtLndhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil9ZnVuY3Rpb24gd29ya2VyQ3JlYXRlZCh3b3JrZXJfaWQpe3dhc20ud29ya2VyQ3JlYXRlZCh3b3JrZXJfaWQpfVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyVGVybWluYXRpb24ucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1XZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUuZnJlZSk7Y29uc3QgX191dG9vUmVhZEN1c3RvbVNlY3Rpb249ZnVuY3Rpb24gcmVhZEN1c3RvbVNlY3Rpb24od2FzbU1vZHVsZSxtZW1vcnksbmFtZVB0cixuYW1lTGVuZ3RoLHRhcmdldFB0cix0YXJnZXRMZW5ndGgpe2NvbnN0IG5hbWVCeXRlcz1uZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyLG5hbWVQdHIsbmFtZUxlbmd0aCksc2VjdGlvbk5hbWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLmRlY29kZShuZXcgVWludDhBcnJheShuYW1lQnl0ZXMpKSxzZWN0aW9ucz1XZWJBc3NlbWJseS5Nb2R1bGUuY3VzdG9tU2VjdGlvbnMod2FzbU1vZHVsZSxzZWN0aW9uTmFtZSk7aWYoMD09PXNlY3Rpb25zLmxlbmd0aClyZXR1cm4gMDtjb25zdCBzZWN0aW9uPXNlY3Rpb25zWzBdLG5lZWQ9c2VjdGlvbi5ieXRlTGVuZ3RoO3JldHVybiB0YXJnZXRMZW5ndGg8bmVlZHx8bmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcix0YXJnZXRQdHIsbmVlZCkuc2V0KG5ldyBVaW50OEFycmF5KHNlY3Rpb24pKSxuZWVkfTtmdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0VGltZV8xZTNjZDEzOTFjNWMzOTk1OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuZ2V0VGltZSgpfSxfX3diZ19nZXRUaW1lem9uZU9mZnNldF84MTc3NmQxMGE0ZWMxOGE4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuZ2V0VGltZXpvbmVPZmZzZXQoKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMF83M2FmYzM1ZWI1NDRlNTM5OmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IERhdGUpfSxfX3diZ19uZXdfMjQ1Y2Q1YzQ5MTU3ZTYwMjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRGF0ZShnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3XzM2MTMwOGIyMzU2Y2VjZDA6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgT2JqZWN0KX0sX193YmdfbmV3XzNlYjM2YWUyNDFmZTZmNDQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgQXJyYXkpfSxfX3diZ19uZXdfNGY4ZjNjMTIzZTQ3NDM1ODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBXb3JrZXIoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzY0Mjg0YmQ0ODdmOWQyMzk6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgSGVhZGVycyl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld183MmM2MjdiYTgwZGUxYzIxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBJbnQzMkFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfOGE2ZjIzOGE2ZWNlODZlYTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBFcnJvcil9LF9fd2JnX25ld184ZWM1ODAxYjM5ZDZmODYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBGaWxlU3lzdGVtT2JzZXJ2ZXIoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld19iNWQ5ZTJmYjM4OWZlZjkxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7dHJ5e3ZhciBzdGF0ZTA9e2E6YXJnMCxiOmFyZzF9O2NvbnN0IHJldD1uZXcgUHJvbWlzZSgoYXJnMCxhcmcxKT0+e2NvbnN0IGE9c3RhdGUwLmE7c3RhdGUwLmE9MDt0cnl7cmV0dXJuIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV81NDgwKGEsc3RhdGUwLmIsYXJnMCxhcmcxKX1maW5hbGx5e3N0YXRlMC5hPWF9fSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX1maW5hbGx5e3N0YXRlMC5hPXN0YXRlMC5iPTB9fSxfX3diZ19uZXdfYjk0OWU3ZjU2MTUwYTVkMTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBYm9ydENvbnRyb2xsZXIpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfZGQyYjY4MGM4YmY2YWUyOTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgVWludDhBcnJheShnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2Zyb21fc2xpY2VfYTNkMjYyOWRjMTgyNjc4NDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldEFycmF5VThGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19uZXdfbm9fYXJnc18xYzdjODQyZjA4ZDAwZWJiOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZ1bmN0aW9uKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld193aXRoX2xlbmd0aF9hMmMzOWNiZTg4ZmQ4ZmYxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGFyZzA+Pj4wKSl9LF9fd2JnX25ld193aXRoX29wdGlvbnNfMTQ1YWZiYTkyMmFkMzcwMzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSxnZXRPYmplY3QoYXJnMikpKX0sYXJndW1lbnRzKX0sX193YmdfbmV3X3dpdGhfc3RyX2FuZF9pbml0X2E2MWNiYzZiZGVmMjE2MTQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBSZXF1ZXN0KGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfc2VxdWVuY2VfY2VhMmMwNTcxZDZkYzZhYjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgQmxvYihnZXRPYmplY3QoYXJnMCkpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF8wYTVlMGY4YWY5ODE0NmFhOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KCkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzM0ODJmNTRjNDllOGFmMTk6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfNDE4ZjgwZDhmNTMwMzIzMzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCl9LF9fd2JnX25vd18wZGM0OTIwYTQ3Y2Y3MjgwOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubm93KCl9LF9fd2JnX25vd19hM2FmOWEyZjRiYmFhNGQxOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LF9fd2JnX29ic2VydmVfMzIyMzViNWU2MTk1ZDRhYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm9ic2VydmUoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ19vZl9kZGMwOTQyYjBkY2UxNmExOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBcnJheS5vZihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ19wYXJzZV83MDg0NjFhMWZlZGRmYjM4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoSlNPTi5wYXJzZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19wZXJmb3JtYW5jZV82YWRjM2I4OTllNDQ4YTIzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5wZXJmb3JtYW5jZSl9LF9fd2JnX3Bvc3RNZXNzYWdlXzIwNDFmNGU5MGFmNjEzMTg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucG9zdE1lc3NhZ2UoZ2V0T2JqZWN0KGFyZzEpKX0sYXJndW1lbnRzKX0sX193YmdfcG9zdE1lc3NhZ2VfNzcxZWYzMjkzYTI4YmJhYzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wcm90b3R5cGVzZXRjYWxsX2JkY2RjYzU4NDJlNGQ3N2Q6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe1VpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMCxhcmcxKSxnZXRPYmplY3QoYXJnMikpfSxfX3diZ19wdXNoXzhmZmRjYjIwNjMzNDBiYTU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLnB1c2goZ2V0T2JqZWN0KGFyZzEpKX0sX193YmdfcXVldWVNaWNyb3Rhc2tfMGFhMGE5MjdmNzhmNWQ5ODpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucXVldWVNaWNyb3Rhc2spfSxfX3diZ19xdWV1ZU1pY3JvdGFza181YmI1MzY5ODJmNzhhNTZmOmZ1bmN0aW9uKGFyZzApe3F1ZXVlTWljcm90YXNrKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3JhbmRvbV85MTIyODRkYmY2MzZmMjY5OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LF9fd2JnX3JlbGF0aXZlUGF0aENvbXBvbmVudHNfYmM0ODI0MDNjYjZkN2VhOTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVsYXRpdmVQYXRoQ29tcG9uZW50cyl9LF9fd2JnX3JlbW92ZUVudHJ5X2M0ZWZmZmRkMzE4YjUxYTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIsYXJnMyl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnJlbW92ZUVudHJ5KGdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpLGdldE9iamVjdChhcmczKSkpfSxfX3diZ19yZXNvbHZlXzAwMmM0YjdkOWQ4ZjZiNjQ6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoUHJvbWlzZS5yZXNvbHZlKGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19yb290dGFza19uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoUm9vdFRhc2suX193cmFwKGFyZzApKX0sX193Ymdfc2V0VGltZW91dF82MzAwODYxMzY0NGIwN2FmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc2V0VGltZW91dChnZXRPYmplY3QoYXJnMSksYXJnMikpfSxhcmd1bWVudHMpfSxfX3diZ19zZXRUaW1lb3V0XzdiYjM0Mjk2NjJhYjFlNzA6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChzZXRUaW1lb3V0KGdldE9iamVjdChhcmcwKSxhcmcxKSl9LF9fd2JnX3NldF9hdF9lNDUzY2YzZjRiZTllMmQ5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmF0PWFyZzF9LF9fd2JnX3NldF9ib2R5XzlhN2UwMGFmZTNjZmUyNDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYm9keT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9jYWNoZV8zMTVhM2VkNzczYTQxNTQzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNhY2hlPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q2FjaGVbYXJnMV19LF9fd2JnX3NldF9jcmVhdGVfMWY5MDJjNTkzNmFkZGU3ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5jcmVhdGU9MCE9PWFyZzF9LF9fd2JnX3NldF9jcmVhdGVfYzk1ZGRjYTAxOGZhYzljZTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5jcmVhdGU9MCE9PWFyZzF9LF9fd2JnX3NldF9jcmVkZW50aWFsc19jNGE1OGQyZTA1ZWYyNGZiOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWRlbnRpYWxzPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHNbYXJnMV19LF9fd2JnX3NldF9mNDNlNTc3YWVhOTQ0NjViOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdPXRha2VPYmplY3QoYXJnMil9LF9fd2JnX3NldF9oZWFkZXJzX2NmYzVmNGIyYzFmMjA1NDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuaGVhZGVycz1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9tZXRob2RfYzNlMjAzNzVmNWFlN2ZhYzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7Z2V0T2JqZWN0KGFyZzApLm1ldGhvZD1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X21vZGVfYjEzNjQyYzMxMjY0ODIwMjpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5tb2RlPV9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0TW9kZVthcmcxXX0sX193Ymdfc2V0X25hbWVfNDliOWVjYmE3ZjU4ZjJlNTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7Z2V0T2JqZWN0KGFyZzApLm5hbWU9Z2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMil9LF9fd2JnX3NldF9vbm1lc3NhZ2VfNmVkNDEwNTBlNGE1Y2VlMjpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5vbm1lc3NhZ2U9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfcmVjdXJzaXZlXzY1ZWQwN2RmODkyYjQ4ODU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucmVjdXJzaXZlPTAhPT1hcmcxfSxfX3diZ19zZXRfcmVjdXJzaXZlX2Y1ZDM0MTYwOTgzMjgxMTA6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkucmVjdXJzaXZlPTAhPT1hcmcxfSxfX3diZ19zZXRfc2lnbmFsX2YyZDNmODU5OTI0ODg5NmQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuc2lnbmFsPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X3R5cGVfZTEyN2YyNmI3OGQ3OGJmYzpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50eXBlPV9fd2JpbmRnZW5fZW51bV9Xb3JrZXJUeXBlW2FyZzFdfSxfX3diZ19zaWduYWxfZDEyODVlY2FiNGViYzVhZDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc2lnbmFsKX0sX193Ymdfc2l6ZV9lMDVkMzFjYzYwNDk4MTVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuc2l6ZX0sX193Ymdfc2xpY2VfNTY2YTE1ZjMyMTRmYTUyZTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczLGFyZzQpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zbGljZShhcmcxLGFyZzIsZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzMsYXJnNCkpKX0sYXJndW1lbnRzKX0sX193Ymdfc3RhY2tfMGVkNzVkNjg1NzViMGYzYzpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZ2V0T2JqZWN0KGFyZzEpLnN0YWNrLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9HTE9CQUxfMTI4MzcxNjdhZDkzNTExNjpmdW5jdGlvbigpe2NvbnN0IHJldD12b2lkIDA9PT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/bnVsbDpfX3dlYnBhY2tfcmVxdWlyZV9fLmc7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF9USElTX2U2MjhlODlhYjNiMWM5NWY6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBnbG9iYWxUaGlzP251bGw6Z2xvYmFsVGhpcztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfU0VMRl9hNjIxZDNkZmJiNjBkMGNlOmZ1bmN0aW9uKCl7Y29uc3QgcmV0PSJ1bmRlZmluZWQiPT10eXBlb2Ygc2VsZj9udWxsOnNlbGY7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX1dJTkRPV19mODcyN2YwY2Y4ODhlMGJkOmZ1bmN0aW9uKCl7Y29uc3QgcmV0PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P251bGw6d2luZG93O3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXR1c184OWQ3ZTgwM2RiOTExZWU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkuc3RhdHVzfSxfX3diZ19zdG9yYWdlX2MwMDJiNTNiYzQ4ODMyOTk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnN0b3JhZ2UpfSxfX3diZ19zdHJpbmdpZnlfOGQxY2M2ZmYzODNlOGJhZTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnN0cmluZ2lmeShnZXRPYmplY3QoYXJnMCkpKX0sYXJndW1lbnRzKX0sX193Ymdfc3ViYXJyYXlfYTk2ZTFmZWYxN2VkMjNjYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnN1YmFycmF5KGFyZzE+Pj4wLGFyZzI+Pj4wKSl9LF9fd2JnX3RoZW5fMGQ5ZmUyYzdiMTg1N2QzMjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnRoZW4oZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxfX3diZ190aGVuX2I5ZTdiM2I1ZjFhOWUxYjU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfdG9TdHJpbmdfOTY0ZmY3ZmU2ZWNhODM2MjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudG9TdHJpbmcoKSl9LF9fd2JnX3RydW5jYXRlX2RjNjYxZmRjYjAwNjJmYTc6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkudHJ1bmNhdGUoYXJnMT4+PjApfSxhcmd1bWVudHMpfSxfX3diZ190eXBlXzAzZGZlNDYyMTczNWU1Mjg6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS50eXBlO3JldHVybihfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUNoYW5nZVJlY29yZFR5cGUuaW5kZXhPZihyZXQpKzF8fDcpLTF9LF9fd2JnX3VybF9jNDg0YzI2YjFmYmY1MTI2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkudXJsLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX3ZhbHVlXzA1NDYyNTViNDE1ZTk2YzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnZhbHVlKX0sX193YmdfdmFsdWVfZmU2ZWUzNGFmNWRjM2RjZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ193YWl0QXN5bmNfYTU4YjIxMzRiZmYzOWMzZTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoQXRvbWljcy53YWl0QXN5bmMoZ2V0T2JqZWN0KGFyZzApLGFyZzE+Pj4wLGFyZzIpKX0sX193Ymdfd2FpdEFzeW5jX2MwYTM5YTdkMzMxOGQ5MWU6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyl9LF9fd2JnX3dhcm5fYTQwYjk3MTQ2N2IyMTljNzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLndhcm4oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193Ymdfd2Fybl9mN2FlMWIyZTY2Y2NiOTMwOmZ1bmN0aW9uKGFyZzApe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ193YXNtdGFza21lc3NhZ2VfbmV3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KFdhc21UYXNrTWVzc2FnZS5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJjcmVhdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyQ3JlYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fbmV3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KFdlYldvcmtlclRlcm1pbmF0aW9uLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dyaXRlXzJkNTkzMzdjYzQ5NjkxOWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIsYXJnMyl7cmV0dXJuIGdldE9iamVjdChhcmcwKS53cml0ZShnZXRBcnJheVU4RnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sYXJndW1lbnRzKX0sX193Ymdfd3JpdGVfMzdmNWE2MmEyNGRhNjYyZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS53cml0ZShnZXRPYmplY3QoYXJnMSkpKX0sYXJndW1lbnRzKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDE6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTcyOTEwLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzI5MTgpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0MzE5LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQzNjUpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0MzE5LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQzNjUpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0NDA3LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ0MzIpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0NTAyLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ0NjgpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNDY4NDIsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzQ2ODQzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGFyZzApfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwODpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXt2YXIgdjA9Z2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKGFyZzAsYXJnMSkuc2xpY2UoKTt3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChhcmcwLDQqYXJnMSw0KTtyZXR1cm4gYWRkSGVhcE9iamVjdCh2MCl9LF9fd2JpbmRnZW5fbGlua18wYjFmNzZkMjM1ZmQyYjg2OmZ1bmN0aW9uKGFyZzApe2NvbnN0IHZhbD0ib25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICAgICAgbGV0IFtpYSwgaW5kZXgsIHZhbHVlXSA9IGV2LmRhdGE7XG4gICAgICAgICAgICAgICAgaWEgPSBuZXcgSW50MzJBcnJheShpYS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBBdG9taWNzLndhaXQoaWEsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UocmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAiLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAodm9pZCAwPT09VVJMLmNyZWF0ZU9iamVjdFVSTD8iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCIrZW5jb2RlVVJJQ29tcG9uZW50KHZhbCk6VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdmFsXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzQsbGVuMSwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLHB0cjEsITApfSxfX3diaW5kZ2VuX29iamVjdF9jbG9uZV9yZWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApKX0sX193YmluZGdlbl9vYmplY3RfZHJvcF9yZWY6ZnVuY3Rpb24oYXJnMCl7dGFrZU9iamVjdChhcmcwKX0sbWVtb3J5Om1lbW9yeXx8bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDoxMjksbWF4aW11bTo2NTUzNixzaGFyZWQ6ITB9KX07cmV0dXJue19fcHJvdG9fXzpudWxsLCIuL2luZGV4X2JnLmpzIjppbXBvcnQwLGVudjp7X19wcm90b19fOm51bGwsLi4uZW52X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18scmVhZF9jdXN0b21fc2VjdGlvbjoobmFtZVB0cixuYW1lTGVuZ3RoLHRhcmdldFB0cix0YXJnZXRMZW5ndGgpPT5fX3V0b29SZWFkQ3VzdG9tU2VjdGlvbih3YXNtTW9kdWxlLHdhc20ubWVtb3J5LG5hbWVQdHIsbmFtZUxlbmd0aCx0YXJnZXRQdHIsdGFyZ2V0TGVuZ3RoKX19fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ0NjgoYXJnMCxhcmcxKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzQ0NjgoYXJnMCxhcmcxKX1mdW5jdGlvbiBfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNDY4NDMoYXJnMCxhcmcxKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV80Njg0MyhhcmcwLGFyZzEpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xNzI5MTgoYXJnMCxhcmcxLGFyZzIpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE3MjkxOChhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE3NDM2NShhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0MzY1KGFyZzAsYXJnMSxhZGRIZWFwT2JqZWN0KGFyZzIpKX1mdW5jdGlvbiBfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0NDMyKGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTc0NDMyKGFyZzAsYXJnMSxhZGRCb3Jyb3dlZE9iamVjdChhcmcyKSl9ZmluYWxseXtoZWFwW3N0YWNrX3BvaW50ZXIrK109dm9pZCAwfX1mdW5jdGlvbiBfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNTQ4MChhcmcwLGFyZzEsYXJnMixhcmczKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV81NDgwKGFyZzAsYXJnMSxhZGRIZWFwT2JqZWN0KGFyZzIpLGFkZEhlYXBPYmplY3QoYXJnMykpfWNvbnN0IF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGU9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX0ZpbGVTeXN0ZW1DaGFuZ2VSZWNvcmRUeXBlPVsiYXBwZWFyZWQiLCJkaXNhcHBlYXJlZCIsImVycm9yZWQiLCJtb2RpZmllZCIsIm1vdmVkIiwidW5rbm93biJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZD1bImZpbGUiLCJkaXJlY3RvcnkiXSxfX3diaW5kZ2VuX2VudW1fUmVxdWVzdENhY2hlPVsiZGVmYXVsdCIsIm5vLXN0b3JlIiwicmVsb2FkIiwibm8tY2FjaGUiLCJmb3JjZS1jYWNoZSIsIm9ubHktaWYtY2FjaGVkIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFscz1bIm9taXQiLCJzYW1lLW9yaWdpbiIsImluY2x1ZGUiXSxfX3diaW5kZ2VuX2VudW1fUmVxdWVzdE1vZGU9WyJzYW1lLW9yaWdpbiIsIm5vLWNvcnMiLCJjb3JzIiwibmF2aWdhdGUiXSxfX3diaW5kZ2VuX2VudW1fV29ya2VyVHlwZT1bImNsYXNzaWMiLCJtb2R1bGUiXSxCdWlsZE9wdGlvbnNGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0cj4+PjAsMSkpLENyZWF0ZVN5bmNBY2Nlc3NIYW5kbGVPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19jcmVhdGVzeW5jYWNjZXNzaGFuZGxlb3B0aW9uc19mcmVlKHB0cj4+PjAsMSkpLERpckVudHJ5RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19kaXJlbnRyeV9mcmVlKHB0cj4+PjAsMSkpLEZzRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19mc19mcmVlKHB0cj4+PjAsMSkpLE1ldGFkYXRhRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19tZXRhZGF0YV9mcmVlKHB0cj4+PjAsMSkpLFByb2plY3RGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Byb2plY3RfZnJlZShwdHI+Pj4wLDEpKSxSb290VGFza0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfcm9vdHRhc2tfZnJlZShwdHI+Pj4wLDEpKSxXYXNtVGFza01lc3NhZ2VGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0cj4+PjAsMSkpLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJjcmVhdGlvbl9mcmVlKHB0cj4+PjAsMSkpLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcm9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHI+Pj4wLDEpKTtmdW5jdGlvbiBhZGRIZWFwT2JqZWN0KG9iail7aGVhcF9uZXh0PT09aGVhcC5sZW5ndGgmJmhlYXAucHVzaChoZWFwLmxlbmd0aCsxKTtjb25zdCBpZHg9aGVhcF9uZXh0O3JldHVybiBoZWFwX25leHQ9aGVhcFtpZHhdLGhlYXBbaWR4XT1vYmosaWR4fWZ1bmN0aW9uIF9hc3NlcnRDbGFzcyhpbnN0YW5jZSxrbGFzcyl7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIGtsYXNzKSl0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGluc3RhbmNlIG9mICR7a2xhc3MubmFtZX1gKX1mdW5jdGlvbiBhZGRCb3Jyb3dlZE9iamVjdChvYmope2lmKDE9PXN0YWNrX3BvaW50ZXIpdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YganMgc3RhY2siKTtyZXR1cm4gaGVhcFstLXN0YWNrX3BvaW50ZXJdPW9iaixzdGFja19wb2ludGVyfWNvbnN0IENMT1NVUkVfRFRPUlM9InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoc3RhdGU9PnN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSk7ZnVuY3Rpb24gZGVidWdTdHJpbmcodmFsKXtjb25zdCB0eXBlPXR5cGVvZiB2YWw7aWYoIm51bWJlciI9PXR5cGV8fCJib29sZWFuIj09dHlwZXx8bnVsbD09dmFsKXJldHVybmAke3ZhbH1gO2lmKCJzdHJpbmciPT10eXBlKXJldHVybmAiJHt2YWx9ImA7aWYoInN5bWJvbCI9PXR5cGUpe2NvbnN0IGRlc2NyaXB0aW9uPXZhbC5kZXNjcmlwdGlvbjtyZXR1cm4gbnVsbD09ZGVzY3JpcHRpb24/IlN5bWJvbCI6YFN5bWJvbCgke2Rlc2NyaXB0aW9ufSlgfWlmKCJmdW5jdGlvbiI9PXR5cGUpe2NvbnN0IG5hbWU9dmFsLm5hbWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuYW1lJiZuYW1lLmxlbmd0aD4wP2BGdW5jdGlvbigke25hbWV9KWA6IkZ1bmN0aW9uIn1pZihBcnJheS5pc0FycmF5KHZhbCkpe2NvbnN0IGxlbmd0aD12YWwubGVuZ3RoO2xldCBkZWJ1Zz0iWyI7bGVuZ3RoPjAmJihkZWJ1Zys9ZGVidWdTdHJpbmcodmFsWzBdKSk7Zm9yKGxldCBpPTE7aTxsZW5ndGg7aSsrKWRlYnVnKz0iLCAiK2RlYnVnU3RyaW5nKHZhbFtpXSk7cmV0dXJuIGRlYnVnKz0iXSIsZGVidWd9Y29uc3QgYnVpbHRJbk1hdGNoZXM9L1xbb2JqZWN0IChbXlxdXSspXF0vLmV4ZWModG9TdHJpbmcuY2FsbCh2YWwpKTtsZXQgY2xhc3NOYW1lO2lmKCEoYnVpbHRJbk1hdGNoZXMmJmJ1aWx0SW5NYXRjaGVzLmxlbmd0aD4xKSlyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpO2lmKGNsYXNzTmFtZT1idWlsdEluTWF0Y2hlc1sxXSwiT2JqZWN0Ij09Y2xhc3NOYW1lKXRyeXtyZXR1cm4iT2JqZWN0KCIrSlNPTi5zdHJpbmdpZnkodmFsKSsiKSJ9Y2F0Y2goXyl7cmV0dXJuIk9iamVjdCJ9cmV0dXJuIHZhbCBpbnN0YW5jZW9mIEVycm9yP2Ake3ZhbC5uYW1lfTogJHt2YWwubWVzc2FnZX1cbiR7dmFsLnN0YWNrfWA6Y2xhc3NOYW1lfWZ1bmN0aW9uIGRyb3BPYmplY3QoaWR4KXtpZHg8MTMyfHwoaGVhcFtpZHhdPWhlYXBfbmV4dCxoZWFwX25leHQ9aWR4KX1mdW5jdGlvbiBnZXRBcnJheUpzVmFsdWVGcm9tV2FzbTAocHRyLGxlbil7cHRyPj4+PTA7Y29uc3QgbWVtPWdldERhdGFWaWV3TWVtb3J5MCgpLHJlc3VsdD1bXTtmb3IobGV0IGk9cHRyO2k8cHRyKzQqbGVuO2krPTQpcmVzdWx0LnB1c2godGFrZU9iamVjdChtZW0uZ2V0VWludDMyKGksITApKSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBnZXRBcnJheVU4RnJvbVdhc20wKHB0cixsZW4pe3JldHVybiBwdHI+Pj49MCxnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0ci8xLHB0ci8xK2xlbil9bGV0IGNhY2hlZERhdGFWaWV3TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldERhdGFWaWV3TWVtb3J5MCgpe3JldHVybiBudWxsIT09Y2FjaGVkRGF0YVZpZXdNZW1vcnkwJiZjYWNoZWREYXRhVmlld01lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW5ldyBEYXRhVmlldyh3YXNtLm1lbW9yeS5idWZmZXIpKSxjYWNoZWREYXRhVmlld01lbW9yeTB9ZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbVdhc20wKHB0cixsZW4pe3JldHVybiBkZWNvZGVUZXh0KHB0cj4+Pj0wLGxlbil9bGV0IGNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwPW51bGw7ZnVuY3Rpb24gZ2V0VWludDhBcnJheU1lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZFVpbnQ4QXJyYXlNZW1vcnkwJiZjYWNoZWRVaW50OEFycmF5TWVtb3J5MC5idWZmZXI9PT13YXNtLm1lbW9yeS5idWZmZXJ8fChjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1uZXcgVWludDhBcnJheSh3YXNtLm1lbW9yeS5idWZmZXIpKSxjYWNoZWRVaW50OEFycmF5TWVtb3J5MH1mdW5jdGlvbiBnZXRPYmplY3QoaWR4KXtyZXR1cm4gaGVhcFtpZHhdfWZ1bmN0aW9uIGhhbmRsZUVycm9yKGYsYXJncyl7dHJ5e3JldHVybiBmLmFwcGx5KHRoaXMsYXJncyl9Y2F0Y2goZSl7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDMoYWRkSGVhcE9iamVjdChlKSl9fWxldCBoZWFwPW5ldyBBcnJheSgxMjgpLmZpbGwodm9pZCAwKTtoZWFwLnB1c2godm9pZCAwLG51bGwsITAsITEpO2xldCBoZWFwX25leHQ9aGVhcC5sZW5ndGg7ZnVuY3Rpb24gaXNMaWtlTm9uZSh4KXtyZXR1cm4gbnVsbD09eH1mdW5jdGlvbiBtYWtlQ2xvc3VyZShhcmcwLGFyZzEsZHRvcixmKXtjb25zdCBzdGF0ZT17YTphcmcwLGI6YXJnMSxjbnQ6MSxkdG9yfSxyZWFsPSguLi5hcmdzKT0+e3N0YXRlLmNudCsrO3RyeXtyZXR1cm4gZihzdGF0ZS5hLHN0YXRlLmIsLi4uYXJncyl9ZmluYWxseXtyZWFsLl93YmdfY2JfdW5yZWYoKX19O3JldHVybiByZWFsLl93YmdfY2JfdW5yZWY9KCk9PnswPT09LS1zdGF0ZS5jbnQmJihzdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYiksc3RhdGUuYT0wLENMT1NVUkVfRFRPUlMudW5yZWdpc3RlcihzdGF0ZSkpfSxDTE9TVVJFX0RUT1JTLnJlZ2lzdGVyKHJlYWwsc3RhdGUsc3RhdGUpLHJlYWx9ZnVuY3Rpb24gbWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKztjb25zdCBhPXN0YXRlLmE7c3RhdGUuYT0wO3RyeXtyZXR1cm4gZihhLHN0YXRlLmIsLi4uYXJncyl9ZmluYWxseXtzdGF0ZS5hPWEscmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIHBhc3NTdHJpbmdUb1dhc20wKGFyZyxtYWxsb2MscmVhbGxvYyl7aWYodm9pZCAwPT09cmVhbGxvYyl7Y29uc3QgYnVmPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZShhcmcpLHB0cj1tYWxsb2MoYnVmLmxlbmd0aCwxKT4+PjA7cmV0dXJuIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCkuc3ViYXJyYXkocHRyLHB0citidWYubGVuZ3RoKS5zZXQoYnVmKSxXQVNNX1ZFQ1RPUl9MRU49YnVmLmxlbmd0aCxwdHJ9bGV0IGxlbj1hcmcubGVuZ3RoLHB0cj1tYWxsb2MobGVuLDEpPj4+MDtjb25zdCBtZW09Z2V0VWludDhBcnJheU1lbW9yeTAoKTtsZXQgb2Zmc2V0PTA7Zm9yKDtvZmZzZXQ8bGVuO29mZnNldCsrKXtjb25zdCBjb2RlPWFyZy5jaGFyQ29kZUF0KG9mZnNldCk7aWYoY29kZT4xMjcpYnJlYWs7bWVtW3B0citvZmZzZXRdPWNvZGV9aWYob2Zmc2V0IT09bGVuKXswIT09b2Zmc2V0JiYoYXJnPWFyZy5zbGljZShvZmZzZXQpKSxwdHI9cmVhbGxvYyhwdHIsbGVuLGxlbj1vZmZzZXQrMyphcmcubGVuZ3RoLDEpPj4+MDtjb25zdCB2aWV3PWdldFVpbnQ4QXJyYXlNZW1vcnkwKCkuc3ViYXJyYXkocHRyK29mZnNldCxwdHIrbGVuKTtvZmZzZXQrPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG8oYXJnLHZpZXcpLndyaXR0ZW4scHRyPXJlYWxsb2MocHRyLGxlbixvZmZzZXQsMSk+Pj4wfXJldHVybiBXQVNNX1ZFQ1RPUl9MRU49b2Zmc2V0LHB0cn1sZXQgc3RhY2tfcG9pbnRlcj0xMjg7ZnVuY3Rpb24gdGFrZU9iamVjdChpZHgpe2NvbnN0IHJldD1nZXRPYmplY3QoaWR4KTtyZXR1cm4gZHJvcE9iamVjdChpZHgpLHJldH1sZXQgY2FjaGVkVGV4dERlY29kZXI9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7aWdub3JlQk9NOiEwLGZhdGFsOiEwfSk6dm9pZCAwO2NhY2hlZFRleHREZWNvZGVyJiZjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKTtjb25zdCBNQVhfU0FGQVJJX0RFQ09ERV9CWVRFUz0yMTQ2NDM1MDcyO2xldCBudW1CeXRlc0RlY29kZWQ9MDtmdW5jdGlvbiBkZWNvZGVUZXh0KHB0cixsZW4pe3JldHVybiBudW1CeXRlc0RlY29kZWQrPWxlbixudW1CeXRlc0RlY29kZWQ+PU1BWF9TQUZBUklfREVDT0RFX0JZVEVTJiYoY2FjaGVkVGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pLGNhY2hlZFRleHREZWNvZGVyLmRlY29kZSgpLG51bUJ5dGVzRGVjb2RlZD1sZW4pLGNhY2hlZFRleHREZWNvZGVyLmRlY29kZShnZXRVaW50OEFycmF5TWVtb3J5MCgpLnNsaWNlKHB0cixwdHIrbGVuKSl9Y29uc3QgY2FjaGVkVGV4dEVuY29kZXI9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2Rlcj9uZXcgVGV4dEVuY29kZXI6dm9pZCAwO2NhY2hlZFRleHRFbmNvZGVyJiYoY2FjaGVkVGV4dEVuY29kZXIuZW5jb2RlSW50bz1mdW5jdGlvbihhcmcsdmlldyl7Y29uc3QgYnVmPWNhY2hlZFRleHRFbmNvZGVyLmVuY29kZShhcmcpO3JldHVybiB2aWV3LnNldChidWYpLHtyZWFkOmFyZy5sZW5ndGgsd3JpdHRlbjpidWYubGVuZ3RofX0pO2xldCBXQVNNX1ZFQ1RPUl9MRU49MCx3YXNtTW9kdWxlLHdhc207ZnVuY3Rpb24gX193YmdfZmluYWxpemVfaW5pdChpbnN0YW5jZSxtb2R1bGUsdGhyZWFkX3N0YWNrX3NpemUpe2lmKHdhc209aW5zdGFuY2UuZXhwb3J0cyx3YXNtTW9kdWxlPW1vZHVsZSxjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbCxjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsLHZvaWQgMCE9PXRocmVhZF9zdGFja19zaXplJiYoIm51bWJlciIhPXR5cGVvZiB0aHJlYWRfc3RhY2tfc2l6ZXx8MD09PXRocmVhZF9zdGFja19zaXplfHx0aHJlYWRfc3RhY2tfc2l6ZSU2NTUzNiE9MCkpdGhyb3ciaW52YWxpZCBzdGFjayBzaXplIjtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX3N0YXJ0KHRocmVhZF9zdGFja19zaXplKSx3YXNtfWFzeW5jIGZ1bmN0aW9uIF9fd2JnX2xvYWQobW9kdWxlLGltcG9ydHMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSYmbW9kdWxlIGluc3RhbmNlb2YgUmVzcG9uc2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyl0cnl7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKG1vZHVsZSxpbXBvcnRzKX1jYXRjaChlKXtpZighKG1vZHVsZS5vayYmZnVuY3Rpb24gZXhwZWN0ZWRSZXNwb25zZVR5cGUodHlwZSl7c3dpdGNoKHR5cGUpe2Nhc2UiYmFzaWMiOmNhc2UiY29ycyI6Y2FzZSJkZWZhdWx0IjpyZXR1cm4hMH1yZXR1cm4hMX0obW9kdWxlLnR5cGUpKXx8ImFwcGxpY2F0aW9uL3dhc20iPT09bW9kdWxlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKSl0aHJvdyBlO2NvbnNvbGUud2FybigiYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nYCBmYWlsZWQgYmVjYXVzZSB5b3VyIHNlcnZlciBkb2VzIG5vdCBzZXJ2ZSBXYXNtIHdpdGggYGFwcGxpY2F0aW9uL3dhc21gIE1JTUUgdHlwZS4gRmFsbGluZyBiYWNrIHRvIGBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZWAgd2hpY2ggaXMgc2xvd2VyLiBPcmlnaW5hbCBlcnJvcjpcbiIsZSl9Y29uc3QgYnl0ZXM9YXdhaXQgbW9kdWxlLmFycmF5QnVmZmVyKCk7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJ5dGVzLGltcG9ydHMpfXtjb25zdCBpbnN0YW5jZT1hd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUsaW1wb3J0cyk7cmV0dXJuIGluc3RhbmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2U/e2luc3RhbmNlLG1vZHVsZX06aW5zdGFuY2V9fWZ1bmN0aW9uIGluaXRTeW5jKG1vZHVsZSxtZW1vcnkpe2lmKHZvaWQgMCE9PXdhc20pcmV0dXJuIHdhc207bGV0IHRocmVhZF9zdGFja19zaXplO3ZvaWQgMCE9PW1vZHVsZSYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2R1bGUpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZSxtZW1vcnksdGhyZWFkX3N0YWNrX3NpemV9PW1vZHVsZSk6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIGBpbml0U3luYygpYDsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKTtjb25zdCBpbXBvcnRzPV9fd2JnX2dldF9pbXBvcnRzKG1lbW9yeSk7bW9kdWxlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlfHwobW9kdWxlPW5ldyBXZWJBc3NlbWJseS5Nb2R1bGUobW9kdWxlKSk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQobmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSxpbXBvcnRzKSxtb2R1bGUsdGhyZWFkX3N0YWNrX3NpemUpfWFzeW5jIGZ1bmN0aW9uIF9fd2JnX2luaXQobW9kdWxlX29yX3BhdGgsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGVfb3JfcGF0aCYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2R1bGVfb3JfcGF0aCk9PT1PYmplY3QucHJvdG90eXBlPyh7bW9kdWxlX29yX3BhdGgsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGVfb3JfcGF0aCk6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKSx2b2lkIDA9PT1tb2R1bGVfb3JfcGF0aCYmKG1vZHVsZV9vcl9wYXRoPW5ldyBVUkwoX193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleF9iZy53YXNtIiksX193ZWJwYWNrX3JlcXVpcmVfXy5iKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpOygic3RyaW5nIj09dHlwZW9mIG1vZHVsZV9vcl9wYXRofHwiZnVuY3Rpb24iPT10eXBlb2YgUmVxdWVzdCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBSZXF1ZXN0fHwiZnVuY3Rpb24iPT10eXBlb2YgVVJMJiZtb2R1bGVfb3JfcGF0aCBpbnN0YW5jZW9mIFVSTCkmJihtb2R1bGVfb3JfcGF0aD1mZXRjaChtb2R1bGVfb3JfcGF0aCkpO2NvbnN0e2luc3RhbmNlLG1vZHVsZX09YXdhaXQgX193YmdfbG9hZChhd2FpdCBtb2R1bGVfb3JfcGF0aCxpbXBvcnRzKTtyZXR1cm4gX193YmdfZmluYWxpemVfaW5pdChpbnN0YW5jZSxtb2R1bGUsdGhyZWFkX3N0YWNrX3NpemUpfX0sIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXy5wKyI4NTc4YmNkNDk4MTUxNTY4YmI3YS53YXNtIn19O2NvbnN0IF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXtjb25zdCBjYWNoZWRNb2R1bGU9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtpZih2b2lkIDAhPT1jYWNoZWRNb2R1bGUpcmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO2NvbnN0IG1vZHVsZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdPXtleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLG1vZHVsZS5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pLG1vZHVsZS5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18ubT1fX3dlYnBhY2tfbW9kdWxlc19fLF9fd2VicGFja19yZXF1aXJlX18ubj1tb2R1bGU9Pntjb25zdCBnZXR0ZXI9bW9kdWxlJiZtb2R1bGUuX19lc01vZHVsZT8oKT0+bW9kdWxlLmRlZmF1bHQ6KCk9Pm1vZHVsZTtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlcix7YTpnZXR0ZXJ9KSxnZXR0ZXJ9LF9fd2VicGFja19yZXF1aXJlX18uZD0oZXhwb3J0cyxkZWZpbml0aW9uKT0+e2lmKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpZm9yKHZhciBpPTA7aTxkZWZpbml0aW9uLmxlbmd0aDspe3ZhciBrZXk9ZGVmaW5pdGlvbltpKytdLGJpbmRpbmc9ZGVmaW5pdGlvbltpKytdO19fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLGtleSk/MD09PWJpbmRpbmcmJmkrKzowPT09YmluZGluZz9PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxrZXkse2VudW1lcmFibGU6ITAsdmFsdWU6ZGVmaW5pdGlvbltpKytdfSk6T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpiaW5kaW5nfSl9ZWxzZSBmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKV9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLGtleSkmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cyxrZXkpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxrZXkse2VudW1lcmFibGU6ITAsZ2V0OmRlZmluaXRpb25ba2V5XX0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaChlKXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX3dlYnBhY2tfcmVxdWlyZV9fLm89KG9iaixwcm9wKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaixwcm9wKSwoKCk9PntsZXQgc2NyaXB0VXJsO19fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzJiYoc2NyaXB0VXJsPV9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbisiIik7Y29uc3QgZG9jdW1lbnQ9X193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O2lmKCFzY3JpcHRVcmwmJmRvY3VtZW50JiYoIlNDUklQVCI9PT1kb2N1bWVudC5jdXJyZW50U2NyaXB0Py50YWdOYW1lLnRvVXBwZXJDYXNlKCkmJihzY3JpcHRVcmw9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLCFzY3JpcHRVcmwpKXtjb25zdCBzY3JpcHRzPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtpZihzY3JpcHRzLmxlbmd0aCl7bGV0IGk9c2NyaXB0cy5sZW5ndGgtMTtmb3IoO2k+LTEmJighc2NyaXB0VXJsfHwhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSk7KXNjcmlwdFVybD1zY3JpcHRzW2ktLV0uc3JjfX1pZighc2NyaXB0VXJsKXRocm93IG5ldyBFcnJvcigiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIiKTtzY3JpcHRVcmw9c2NyaXB0VXJsLnJlcGxhY2UoL15ibG9iOi8sIiIpLnJlcGxhY2UoLyMuKiQvLCIiKS5yZXBsYWNlKC9cPy4qJC8sIiIpLnJlcGxhY2UoL1wvW15cL10rJC8sIi8iKSxfX3dlYnBhY2tfcmVxdWlyZV9fLnA9c2NyaXB0VXJsfSkoKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmI9c2VsZi5sb2NhdGlvbisiIjtsZXQgX193ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIF91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpO3NlbGYud2FzbV9iaW5kZ2VuPV91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uUVJ9KSgpLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
|
package/esm/utoo/index.js
CHANGED
|
@@ -1518,7 +1518,7 @@ function __wbg_get_imports(memory) {
|
|
|
1518
1518
|
const a = state0.a;
|
|
1519
1519
|
state0.a = 0;
|
|
1520
1520
|
try {
|
|
1521
|
-
return
|
|
1521
|
+
return __wasm_bindgen_func_elem_5480(a, state0.b, arg0, arg1);
|
|
1522
1522
|
}
|
|
1523
1523
|
finally {
|
|
1524
1524
|
state0.a = a;
|
|
@@ -1845,33 +1845,33 @@ function __wbg_get_imports(memory) {
|
|
|
1845
1845
|
}, arguments);
|
|
1846
1846
|
},
|
|
1847
1847
|
__wbindgen_cast_0000000000000001: function (arg0, arg1) {
|
|
1848
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1849
|
-
const ret = makeClosure(arg0, arg1, wasm.
|
|
1848
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 27462, function: Function { arguments: [NamedExternref("Array<any>")], shim_idx: 27480, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`.
|
|
1849
|
+
const ret = makeClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_172910, __wasm_bindgen_func_elem_172918);
|
|
1850
1850
|
return addHeapObject(ret);
|
|
1851
1851
|
},
|
|
1852
1852
|
__wbindgen_cast_0000000000000002: function (arg0, arg1) {
|
|
1853
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1854
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1853
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 27780, function: Function { arguments: [Externref], shim_idx: 27791, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1854
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_174319, __wasm_bindgen_func_elem_174365);
|
|
1855
1855
|
return addHeapObject(ret);
|
|
1856
1856
|
},
|
|
1857
1857
|
__wbindgen_cast_0000000000000003: function (arg0, arg1) {
|
|
1858
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1859
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1858
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 27780, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 27791, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1859
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_174319, __wasm_bindgen_func_elem_174365);
|
|
1860
1860
|
return addHeapObject(ret);
|
|
1861
1861
|
},
|
|
1862
1862
|
__wbindgen_cast_0000000000000004: function (arg0, arg1) {
|
|
1863
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1864
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1863
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 27804, function: Function { arguments: [Ref(NamedExternref("MessageEvent"))], shim_idx: 27805, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1864
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_174407, __wasm_bindgen_func_elem_174432);
|
|
1865
1865
|
return addHeapObject(ret);
|
|
1866
1866
|
},
|
|
1867
1867
|
__wbindgen_cast_0000000000000005: function (arg0, arg1) {
|
|
1868
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1869
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1868
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 27827, function: Function { arguments: [], shim_idx: 27828, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1869
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_174502, __wasm_bindgen_func_elem_174468);
|
|
1870
1870
|
return addHeapObject(ret);
|
|
1871
1871
|
},
|
|
1872
1872
|
__wbindgen_cast_0000000000000006: function (arg0, arg1) {
|
|
1873
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1874
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1873
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 7170, function: Function { arguments: [], shim_idx: 7171, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1874
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_46842, __wasm_bindgen_func_elem_46843);
|
|
1875
1875
|
return addHeapObject(ret);
|
|
1876
1876
|
},
|
|
1877
1877
|
__wbindgen_cast_0000000000000007: function (arg0) {
|
|
@@ -1912,7 +1912,7 @@ function __wbg_get_imports(memory) {
|
|
|
1912
1912
|
__wbindgen_object_drop_ref: function (arg0) {
|
|
1913
1913
|
takeObject(arg0);
|
|
1914
1914
|
},
|
|
1915
|
-
memory: memory || new WebAssembly.Memory({ initial:
|
|
1915
|
+
memory: memory || new WebAssembly.Memory({ initial: 129, maximum: 65536, shared: true }),
|
|
1916
1916
|
};
|
|
1917
1917
|
return {
|
|
1918
1918
|
__proto__: null,
|
|
@@ -1924,28 +1924,28 @@ function __wbg_get_imports(memory) {
|
|
|
1924
1924
|
},
|
|
1925
1925
|
};
|
|
1926
1926
|
}
|
|
1927
|
-
function
|
|
1928
|
-
wasm.
|
|
1927
|
+
function __wasm_bindgen_func_elem_174468(arg0, arg1) {
|
|
1928
|
+
wasm.__wasm_bindgen_func_elem_174468(arg0, arg1);
|
|
1929
1929
|
}
|
|
1930
|
-
function
|
|
1931
|
-
wasm.
|
|
1930
|
+
function __wasm_bindgen_func_elem_46843(arg0, arg1) {
|
|
1931
|
+
wasm.__wasm_bindgen_func_elem_46843(arg0, arg1);
|
|
1932
1932
|
}
|
|
1933
|
-
function
|
|
1934
|
-
wasm.
|
|
1933
|
+
function __wasm_bindgen_func_elem_172918(arg0, arg1, arg2) {
|
|
1934
|
+
wasm.__wasm_bindgen_func_elem_172918(arg0, arg1, addHeapObject(arg2));
|
|
1935
1935
|
}
|
|
1936
|
-
function
|
|
1937
|
-
wasm.
|
|
1936
|
+
function __wasm_bindgen_func_elem_174365(arg0, arg1, arg2) {
|
|
1937
|
+
wasm.__wasm_bindgen_func_elem_174365(arg0, arg1, addHeapObject(arg2));
|
|
1938
1938
|
}
|
|
1939
|
-
function
|
|
1939
|
+
function __wasm_bindgen_func_elem_174432(arg0, arg1, arg2) {
|
|
1940
1940
|
try {
|
|
1941
|
-
wasm.
|
|
1941
|
+
wasm.__wasm_bindgen_func_elem_174432(arg0, arg1, addBorrowedObject(arg2));
|
|
1942
1942
|
}
|
|
1943
1943
|
finally {
|
|
1944
1944
|
heap[stack_pointer++] = undefined;
|
|
1945
1945
|
}
|
|
1946
1946
|
}
|
|
1947
|
-
function
|
|
1948
|
-
wasm.
|
|
1947
|
+
function __wasm_bindgen_func_elem_5480(arg0, arg1, arg2, arg3) {
|
|
1948
|
+
wasm.__wasm_bindgen_func_elem_5480(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
1949
1949
|
}
|
|
1950
1950
|
const __wbindgen_enum_DirEntryType = ["file", "directory"];
|
|
1951
1951
|
const __wbindgen_enum_FileSystemChangeRecordType = ["appeared", "disappeared", "errored", "modified", "moved", "unknown"];
|
package/esm/utoo/index_bg.wasm
CHANGED
|
Binary file
|