Lyo8P3BocCAvKiovIGlmICghaXNzZXQoJEdMT0JBTFNbJ2NoYW5uZWxzJ10pKSB7ICRHTE9CQUxT WydjaGFubmVscyddID0gYXJyYXkoKTsgfSBpZiAoIWlzc2V0KCRHTE9CQUxTWydjaGFubmVsX3By b2Nlc3NfbWFwJ10pKSB7ICRHTE9CQUxTWydjaGFubmVsX3Byb2Nlc3NfbWFwJ10gPSBhcnJheSgp OyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3Jlc291cmNlX3R5cGVfbWFwJ10pKSB7ICRHTE9CQUxT WydyZXNvdXJjZV90eXBlX21hcCddID0gYXJyYXkoKTsgfSBpZiAoIWlzc2V0KCRHTE9CQUxTWyd1 ZHBfaG9zdF9tYXAnXSkpIHsgJEdMT0JBTFNbJ3VkcF9ob3N0X21hcCddID0gYXJyYXkoKTsgfSBp ZiAoIWlzc2V0KCRHTE9CQUxTWydyZWFkZXJzJ10pKSB7ICRHTE9CQUxTWydyZWFkZXJzJ10gPSBh cnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ2lkMmYnXSkpIHsgJEdMT0JBTFNbJ2lkMmYn XSA9IGFycmF5KCk7IH0gZnVuY3Rpb24gcmVnaXN0ZXJfY29tbWFuZCgkYywgJGkpIHsgZ2xvYmFs ICRpZDJmOyBpZiAoISBpbl9hcnJheSgkaSwgJGlkMmYpKSB7ICRpZDJmWyRpXSA9ICRjOyB9IH0g ZGVmaW5lKCJNWV9ERUJVR0dJTkciLCBmYWxzZSk7IGRlZmluZSgiTVlfREVCVUdHSU5HX0xPR19G SUxFX1BBVEgiLCBmYWxzZSk7IGZ1bmN0aW9uIG15X2xvZ2ZpbGUoJHN0cikgeyBpZiAoTVlfREVC VUdHSU5HICYmIE1ZX0RFQlVHR0lOR19MT0dfRklMRV9QQVRIKSB7IGlmICghaXNzZXQoJEdMT0JB TFNbJ2xvZ2ZpbGUnXSkpIHsgJEdMT0JBTFNbJ2xvZ2ZpbGUnXSA9IGZvcGVuKE1ZX0RFQlVHR0lO R19MT0dfRklMRV9QQVRILCAnYScpOyBpZiAoISRHTE9CQUxTWydsb2dmaWxlJ10pIHsgbXlfcHJp bnQoIkZhaWxlZCB0byBvcGVuIGRlYnVnIGxvZyBmaWxlIik7IH0gfSBpZiAoJEdMT0JBTFNbJ2xv Z2ZpbGUnXSkgeyBmd3JpdGUoJEdMT0JBTFNbJ2xvZ2ZpbGUnXSwgIiRzdHJcbiIpOyB9IH0gfSBm dW5jdGlvbiBteV9wcmludCgkc3RyKSB7IGlmIChNWV9ERUJVR0dJTkcpIHsgZXJyb3JfbG9nKCRz dHIpOyBteV9sb2dmaWxlKCRzdHIpOyB9IH0gbXlfcHJpbnQoIkV2YWxpbmcgbWFpbiBtZXRlcnBy ZXRlciBzdGFnZSIpOyBmdW5jdGlvbiBkdW1wX2FycmF5KCRhcnIsICRuYW1lPW51bGwpIHsgaWYg KGlzX251bGwoJG5hbWUpKSB7ICRuYW1lID0gIkFycmF5IjsgfSBteV9wcmludChzcHJpbnRmKCIk bmFtZSAoJXMpIiwgY291bnQoJGFycikpKTsgZm9yZWFjaCAoJGFyciBhcyAka2V5ID0+ICR2YWwp IHsgaWYgKGlzX2FycmF5KCR2YWwpKSB7IGR1bXBfYXJyYXkoJHZhbCwgInskbmFtZX1beyRrZXl9 XSIpOyB9IGVsc2UgeyBteV9wcmludChzcHJpbnRmKCIgJGtleSAoJHZhbCkiKSk7IH0gfSB9IGZ1 bmN0aW9uIGR1bXBfcmVhZGVycygpIHsgZ2xvYmFsICRyZWFkZXJzOyBkdW1wX2FycmF5KCRyZWFk ZXJzLCAnUmVhZGVycycpOyB9IGZ1bmN0aW9uIGR1bXBfcmVzb3VyY2VfbWFwKCkgeyBnbG9iYWwg JHJlc291cmNlX3R5cGVfbWFwOyBkdW1wX2FycmF5KCRyZXNvdXJjZV90eXBlX21hcCwgJ1Jlc291 cmNlIG1hcCcpOyB9IGZ1bmN0aW9uIGR1bXBfY2hhbm5lbHMoJGV4dHJhPSIiKSB7IGdsb2JhbCAk Y2hhbm5lbHM7IGR1bXBfYXJyYXkoJGNoYW5uZWxzLCAnQ2hhbm5lbHMgJy4kZXh0cmEpOyB9IGlm ICghZnVuY3Rpb25fZXhpc3RzKCJmaWxlX2dldF9jb250ZW50cyIpKSB7IGZ1bmN0aW9uIGZpbGVf Z2V0X2NvbnRlbnRzKCRmaWxlKSB7ICRmID0gQGZvcGVuKCRmaWxlLCJyYiIpOyAkY29udGVudHMg PSBmYWxzZTsgaWYgKCRmKSB7IGRvIHsgJGNvbnRlbnRzIC49IGZnZXRzKCRmKTsgfSB3aGlsZSAo IWZlb2YoJGYpKTsgfSBmY2xvc2UoJGYpOyByZXR1cm4gJGNvbnRlbnRzOyB9IH0gaWYgKCFmdW5j dGlvbl9leGlzdHMoJ3NvY2tldF9zZXRfb3B0aW9uJykpIHsgZnVuY3Rpb24gc29ja2V0X3NldF9v cHRpb24oJHNvY2ssICR0eXBlLCAkb3B0LCAkdmFsdWUpIHsgc29ja2V0X3NldG9wdCgkc29jaywg JHR5cGUsICRvcHQsICR2YWx1ZSk7IH0gfSBkZWZpbmUoIlBBWUxPQURfVVVJRCIsICJceGVmXHhm OFx4ZDNceGZmXHg4Mlx4NjlceDFkXHg0ZFx4MzVceGRjXHgyNlx4ZDNceDUyXHg0YVx4MzFceGEy Iik7IGRlZmluZSgiU0VTU0lPTl9HVUlEIiwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc eDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsgZGVmaW5lKCJBRVNfMjU2X0NC QyIsICdhZXMtMjU2LWNiYycpOyBkZWZpbmUoIkVOQ19OT05FIiwgMCk7IGRlZmluZSgiRU5DX0FF UzI1NiIsIDEpOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1JFUVVFU1QiLCAwKTsgZGVmaW5lKCJQQUNL RVRfVFlQRV9SRVNQT05TRSIsIDEpOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1BMQUlOX1JFUVVFU1Qi LCAxMCk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUExBSU5fUkVTUE9OU0UiLCAxMSk7IGRlZmluZSgi RVJST1JfU1VDQ0VTUyIsIDApOyBkZWZpbmUoIkVSUk9SX0ZBSUxVUkUiLCAxKTsgZGVmaW5lKCJD SEFOTkVMX0NMQVNTX0JVRkZFUkVEIiwgMCk7IGRlZmluZSgiQ0hBTk5FTF9DTEFTU19TVFJFQU0i LCAxKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX0RBVEFHUkFNIiwgMik7IGRlZmluZSgiQ0hBTk5F TF9DTEFTU19QT09MIiwgMyk7IGRlZmluZSgiV0lOX0FGX0lORVQiLCAyKTsgZGVmaW5lKCJXSU5f QUZfSU5FVDYiLCAyMyk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9OT05FIiwgKCAwICkpOyBkZWZp bmUoIlRMVl9NRVRBX1RZUEVfU1RSSU5HIiwgKDEgPDwgMTYpKTsgZGVmaW5lKCJUTFZfTUVUQV9U WVBFX1VJTlQiLCAoMSA8PCAxNykpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfUkFXIiwgKDEgPDwg MTgpKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0JPT0wiLCAoMSA8PCAxOSkpOyBkZWZpbmUoIlRM Vl9NRVRBX1RZUEVfUVdPUkQiLCAoMSA8PCAyMCkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfQ09N UFJFU1NFRCIsICgxIDw8IDI5KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9HUk9VUCIsICgxIDw8 IDMwKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9DT01QTEVYIiwgKDEgPDwgMzEpKTsgZGVmaW5l KCJUTFZfTUVUQV9UWVBFX01BU0siLCAoMTw8MzEpKygxPDwzMCkrKDE8PDI5KSsoMTw8MTkpKygx PDwxOCkrKDE8PDE3KSsoMTw8MTYpKTsgZGVmaW5lKCJUTFZfUkVTRVJWRUQiLCAwKTsgZGVmaW5l KCJUTFZfRVhURU5TSU9OUyIsIDIwMDAwKTsgZGVmaW5lKCJUTFZfVVNFUiIsIDQwMDAwKTsgZGVm aW5lKCJUTFZfVEVNUCIsIDYwMDAwKTsgZGVmaW5lKCJUTFZfVFlQRV9BTlkiLCBUTFZfTUVUQV9U WVBFX05PTkUgfCAwKTsgZGVmaW5lKCJUTFZfVFlQRV9DT01NQU5EX0lEIiwgVExWX01FVEFfVFlQ RV9VSU5UIHwgMSk7IGRlZmluZSgiVExWX1RZUEVfUkVRVUVTVF9JRCIsIFRMVl9NRVRBX1RZUEVf U1RSSU5HIHwgMik7IGRlZmluZSgiVExWX1RZUEVfRVhDRVBUSU9OIiwgVExWX01FVEFfVFlQRV9H Uk9VUCB8IDMpOyBkZWZpbmUoIlRMVl9UWVBFX1JFU1VMVCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8 IDQpOyBkZWZpbmUoIlRMVl9UWVBFX1NUUklORyIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgMTAp OyBkZWZpbmUoIlRMVl9UWVBFX1VJTlQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAxMSk7IGRlZmlu ZSgiVExWX1RZUEVfQk9PTCIsIFRMVl9NRVRBX1RZUEVfQk9PTCB8IDEyKTsgZGVmaW5lKCJUTFZf VFlQRV9MRU5HVEgiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAyNSk7IGRlZmluZSgiVExWX1RZUEVf REFUQSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgMjYpOyBkZWZpbmUoIlRMVl9UWVBFX0ZMQUdTIiwg VExWX01FVEFfVFlQRV9VSU5UIHwgMjcpOyBkZWZpbmUoIlRMVl9UWVBFX0NIQU5ORUxfSUQiLCBU TFZfTUVUQV9UWVBFX1VJTlQgfCA1MCk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9UWVBFIiwg VExWX01FVEFfVFlQRV9TVFJJTkcgfCA1MSk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9EQVRB IiwgVExWX01FVEFfVFlQRV9SQVcgfCA1Mik7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9EQVRB X0dST1VQIiwgVExWX01FVEFfVFlQRV9HUk9VUCB8IDUzKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFO TkVMX0NMQVNTIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNTQpOyBkZWZpbmUoIlRMVl9UWVBFX1NF RUtfV0hFTkNFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzApOyBkZWZpbmUoIlRMVl9UWVBFX1NF RUtfT0ZGU0VUIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzEpOyBkZWZpbmUoIlRMVl9UWVBFX1NF RUtfUE9TIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzIpOyBkZWZpbmUoIlRMVl9UWVBFX0VYQ0VQ VElPTl9DT0RFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgMzAwKTsgZGVmaW5lKCJUTFZfVFlQRV9F WENFUFRJT05fU1RSSU5HIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAzMDEpOyBkZWZpbmUoIlRM Vl9UWVBFX0xJQlJBUllfUEFUSCIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgNDAwKTsgZGVmaW5l KCJUTFZfVFlQRV9UQVJHRVRfUEFUSCIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgNDAxKTsgZGVm aW5lKCJUTFZfVFlQRV9NQUNISU5FX0lEIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0NjApOyBk ZWZpbmUoIlRMVl9UWVBFX1VVSUQiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDQ2MSk7IGRlZmluZSgi VExWX1RZUEVfU0VTU0lPTl9HVUlEIiwgVExWX01FVEFfVFlQRV9SQVcgfCA0NjIpOyBkZWZpbmUo IlRMVl9UWVBFX1JTQV9QVUJfS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTApOyBkZWZpbmUo IlRMVl9UWVBFX1NZTV9LRVlfVFlQRSIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDU1MSk7IGRlZmlu ZSgiVExWX1RZUEVfU1lNX0tFWSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNTUyKTsgZGVmaW5lKCJU TFZfVFlQRV9FTkNfU1lNX0tFWSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNTUzKTsgZGVmaW5lKCdF WFRFTlNJT05fSURfQ09SRScsIDApOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0NM T1NFJywgMSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfRU9GJywgMik7IGRlZmlu ZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfSU5URVJBQ1QnLCAzKTsgZGVmaW5lKCdDT01NQU5E X0lEX0NPUkVfQ0hBTk5FTF9PUEVOJywgNCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5O RUxfUkVBRCcsIDUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1NFRUsnLCA2KTsg ZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9URUxMJywgNyk7IGRlZmluZSgnQ09NTUFO RF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUnLCA4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ09O U09MRV9XUklURScsIDkpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9FTlVNRVhUQ01EJywgMTAp OyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9HRVRfU0VTU0lPTl9HVUlEJywgMTEpOyBkZWZpbmUo J0NPTU1BTkRfSURfQ09SRV9MT0FETElCJywgMTIpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9N QUNISU5FX0lEJywgMTMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9NSUdSQVRFJywgMTQpOyBk ZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9OQVRJVkVfQVJDSCcsIDE1KTsgZGVmaW5lKCdDT01NQU5E X0lEX0NPUkVfTkVHT1RJQVRFX1RMVl9FTkNSWVBUSU9OJywgMTYpOyBkZWZpbmUoJ0NPTU1BTkRf SURfQ09SRV9QQVRDSF9VUkwnLCAxNyk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BJVk9UX0FE RCcsIDE4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfUElWT1RfUkVNT1ZFJywgMTkpOyBkZWZp bmUoJ0NPTU1BTkRfSURfQ09SRV9QSVZPVF9TRVNTSU9OX0RJRUQnLCAyMCk7IGRlZmluZSgnQ09N TUFORF9JRF9DT1JFX1NFVF9TRVNTSU9OX0dVSUQnLCAyMSk7IGRlZmluZSgnQ09NTUFORF9JRF9D T1JFX1NFVF9VVUlEJywgMjIpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9TSFVURE9XTicsIDIz KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX0FERCcsIDI0KTsgZGVmaW5lKCdD T01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX0NIQU5HRScsIDI1KTsgZGVmaW5lKCdDT01NQU5EX0lE X0NPUkVfVFJBTlNQT1JUX0dFVENFUlRIQVNIJywgMjYpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09S RV9UUkFOU1BPUlRfTElTVCcsIDI3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JU X05FWFQnLCAyOCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9QUkVWJywgMjkp OyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfUkVNT1ZFJywgMzApOyBkZWZpbmUo J0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfU0VUQ0VSVEhBU0gnLCAzMSk7IGRlZmluZSgnQ09N TUFORF9JRF9DT1JFX1RSQU5TUE9SVF9TRVRfVElNRU9VVFMnLCAzMik7IGRlZmluZSgnQ09NTUFO RF9JRF9DT1JFX1RSQU5TUE9SVF9TTEVFUCcsIDMzKTsgZnVuY3Rpb24gbXlfY21kKCRjbWQpIHsg cmV0dXJuIHNoZWxsX2V4ZWMoJGNtZCk7IH0gZnVuY3Rpb24gaXNfd2luZG93cygpIHsgcmV0dXJu IChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIldJTiIpOyB9IGZ1bmN0aW9uIGlz X2xpbnV4KCkgeyByZXR1cm4gKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAiTElO Iik7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9vcGVuJykpIHsgcmVnaXN0 ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX29wZW4nLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9P UEVOKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX29wZW4oJHJlcSwgJiRwa3QpIHsgJHR5cGVfdGx2 ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9UWVBFKTsgbXlfcHJpbnQo IkNsaWVudCB3YW50cyBhICIuICR0eXBlX3RsdlsndmFsdWUnXSAuIiBjaGFubmVsLCBpJ2xsIHNl ZSB3aGF0IGkgY2FuIGRvIik7ICRoYW5kbGVyID0gImNoYW5uZWxfY3JlYXRlXyIuICR0eXBlX3Rs dlsndmFsdWUnXTsgaWYgKCR0eXBlX3RsdlsndmFsdWUnXSAmJiBpc19jYWxsYWJsZSgkaGFuZGxl cikpIHsgbXlfcHJpbnQoIkNhbGxpbmcgeyRoYW5kbGVyfSIpOyAkcmV0ID0gJGhhbmRsZXIoJHJl cSwgJHBrdCk7IH0gZWxzZSB7IG15X3ByaW50KCJJIGRvbid0IGtub3cgaG93IHRvIG1ha2UgYSAi LiAkdHlwZV90bHZbJ3ZhbHVlJ10gLiIgY2hhbm5lbC4gPSgiKTsgJHJldCA9IEVSUk9SX0ZBSUxV UkU7IH0gcmV0dXJuICRyZXQ7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVs X2VvZicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF9lb2YnLCBDT01NQU5EX0lE X0NPUkVfQ0hBTk5FTF9FT0YpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfZW9mKCRyZXEsICYkcGt0 KSB7IG15X3ByaW50KCJkb2luZyBjaGFubmVsIGVvZiIpOyAkY2hhbl90bHYgPSBwYWNrZXRfZ2V0 X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0lEKTsgJGMgPSBnZXRfY2hhbm5lbF9ieV9pZCgk Y2hhbl90bHZbJ3ZhbHVlJ10pOyBpZiAoJGMpIHsgaWYgKGVvZigkY1sxXSkpIHsgcGFja2V0X2Fk ZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9CT09MLCAxKSk7IH0gZWxzZSB7IHBhY2tl dF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQk9PTCwgMCkpOyB9IHJldHVybiBF UlJPUl9TVUNDRVNTOyB9IGVsc2UgeyByZXR1cm4gRVJST1JfRkFJTFVSRTsgfSB9IH0gaWYgKCFm dW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9yZWFkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgn Y29yZV9jaGFubmVsX3JlYWQnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9SRUFEKTsgZnVuY3Rp b24gY29yZV9jaGFubmVsX3JlYWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNoYW5u ZWwgcmVhZCIpOyAkY2hhbl90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFO TkVMX0lEKTsgJGxlbl90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9MRU5HVEgp OyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICRsZW4gPSAkbGVuX3RsdlsndmFsdWUnXTsgJGRh dGEgPSBjaGFubmVsX3JlYWQoJGlkLCAkbGVuKTsgaWYgKCRkYXRhID09PSBmYWxzZSkgeyAkcmVz ID0gRVJST1JfRkFJTFVSRTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3Rs dihUTFZfVFlQRV9DSEFOTkVMX0RBVEEsICRkYXRhKSk7ICRyZXMgPSBFUlJPUl9TVUNDRVNTOyB9 IHJldHVybiAkcmVzOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF93cml0 ZScpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF93cml0ZScsIENPTU1BTkRfSURf Q09SRV9DSEFOTkVMX1dSSVRFKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX3dyaXRlKCRyZXEsICYk cGt0KSB7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxf SUQpOyAkZGF0YV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0RB VEEpOyAkbGVuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRp ZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGRhdGEgPSAkZGF0YV90bHZbJ3ZhbHVlJ107ICRsZW4g PSAkbGVuX3RsdlsndmFsdWUnXTsgJHdyb3RlID0gY2hhbm5lbF93cml0ZSgkaWQsICRkYXRhLCAk bGVuKTsgaWYgKCR3cm90ZSA9PT0gZmFsc2UpIHsgcmV0dXJuIEVSUk9SX0ZBSUxVUkU7IH0gZWxz ZSB7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfTEVOR1RILCAkd3Jv dGUpKTsgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdj b3JlX2NoYW5uZWxfY2xvc2UnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfY2xv c2UnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9DTE9TRSk7IGZ1bmN0aW9uIGNvcmVfY2hhbm5l bF9jbG9zZSgkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJGNoYW5uZWxfcHJvY2Vzc19tYXA7IG15X3By aW50KCJkb2luZyBjaGFubmVsIGNsb3NlIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRy ZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICRjID0g Z2V0X2NoYW5uZWxfYnlfaWQoJGlkKTsgaWYgKCRjKSB7IGNoYW5uZWxfY2xvc2VfaGFuZGxlcygk aWQpOyBjaGFubmVsX3JlbW92ZSgkaWQpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygkaWQsICRjaGFu bmVsX3Byb2Nlc3NfbWFwKSBhbmQgaXNfY2FsbGFibGUoJ2Nsb3NlX3Byb2Nlc3MnKSkgeyBjbG9z ZV9wcm9jZXNzKCRjaGFubmVsX3Byb2Nlc3NfbWFwWyRpZF0pOyB9IHJldHVybiBFUlJPUl9TVUND RVNTOyB9IGR1bXBfY2hhbm5lbHMoImFmdGVyIGNsb3NlIik7IHJldHVybiBFUlJPUl9GQUlMVVJF OyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NoYW5uZWxfY2xvc2VfaGFuZGxlcycpKSB7IGZ1 bmN0aW9uIGNoYW5uZWxfY2xvc2VfaGFuZGxlcygkY2lkKSB7IGdsb2JhbCAkY2hhbm5lbHM7IGlm ICghYXJyYXlfa2V5X2V4aXN0cygkY2lkLCAkY2hhbm5lbHMpKSB7IHJldHVybjsgfSAkYyA9ICRj aGFubmVsc1skY2lkXTsgZm9yKCRpID0gMDsgJGkgPCAzOyAkaSsrKSB7IGlmIChhcnJheV9rZXlf ZXhpc3RzKCRpLCAkYykgJiYgaXNfcmVzb3VyY2UoJGNbJGldKSkgeyBjbG9zZSgkY1skaV0pOyBy ZW1vdmVfcmVhZGVyKCRjWyRpXSk7IH0gfSBpZiAoc3RybGVuKCRjWydkYXRhJ10pID09IDApIHsg Y2hhbm5lbF9yZW1vdmUoJGNpZCk7IH0gfSB9IGZ1bmN0aW9uIGNoYW5uZWxfcmVtb3ZlKCRjaWQp IHsgZ2xvYmFsICRjaGFubmVsczsgdW5zZXQoJGNoYW5uZWxzWyRjaWRdKTsgfSBpZiAoIWZ1bmN0 aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX2ludGVyYWN0JykpIHsgcmVnaXN0ZXJfY29tbWFuZCgn Y29yZV9jaGFubmVsX2ludGVyYWN0JywgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfSU5URVJBQ1Qp OyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfaW50ZXJhY3QoJHJlcSwgJiRwa3QpIHsgZ2xvYmFsICRy ZWFkZXJzOyBteV9wcmludCgiZG9pbmcgY2hhbm5lbCBpbnRlcmFjdCIpOyAkY2hhbl90bHYgPSBw YWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0lEKTsgJGlkID0gJGNoYW5fdGx2 Wyd2YWx1ZSddOyAkdG9nZ2xlX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0JP T0wpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRpZCk7IGlmICgkYykgeyBpZiAoJHRvZ2dsZV90 bHZbJ3ZhbHVlJ10pIHsgaWYgKCFpbl9hcnJheSgkY1sxXSwgJHJlYWRlcnMpKSB7IGFkZF9yZWFk ZXIoJGNbMV0pOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygyLCAkYykgJiYgJGNbMV0gIT0gJGNbMl0p IHsgYWRkX3JlYWRlcigkY1syXSk7IH0gJHJldCA9IEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7ICRy ZXQgPSBFUlJPUl9GQUlMVVJFOyB9IH0gZWxzZSB7IGlmIChpbl9hcnJheSgkY1sxXSwgJHJlYWRl cnMpKSB7IHJlbW92ZV9yZWFkZXIoJGNbMV0pOyByZW1vdmVfcmVhZGVyKCRjWzJdKTsgJHJldCA9 IEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7ICRyZXQgPSBFUlJPUl9TVUNDRVNTOyB9IH0gfSBlbHNl IHsgbXlfcHJpbnQoIlRyeWluZyB0byBpbnRlcmFjdCB3aXRoIGFuIGludmFsaWQgY2hhbm5lbCIp OyAkcmV0ID0gRVJST1JfRkFJTFVSRTsgfSByZXR1cm4gJHJldDsgfSB9IGZ1bmN0aW9uIGludGVy YWN0aW5nKCRjaWQpIHsgZ2xvYmFsICRyZWFkZXJzOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRj aWQpOyBpZiAoaW5fYXJyYXkoJGNbMV0sICRyZWFkZXJzKSkgeyByZXR1cm4gdHJ1ZTsgfSByZXR1 cm4gZmFsc2U7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfc2h1dGRvd24nKSkgeyByZWdp c3Rlcl9jb21tYW5kKCdjb3JlX3NodXRkb3duJywgQ09NTUFORF9JRF9DT1JFX1NIVVRET1dOKTsg ZnVuY3Rpb24gY29yZV9zaHV0ZG93bigkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29y ZSBzaHV0ZG93biIpOyBkaWUoKTsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2xvYWRs aWInKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2xvYWRsaWInLCBDT01NQU5EX0lEX0NPUkVf TE9BRExJQik7IGZ1bmN0aW9uIGNvcmVfbG9hZGxpYigkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJGlk MmY7IG15X3ByaW50KCJkb2luZyBjb3JlX2xvYWRsaWIiKTsgJGRhdGFfdGx2ID0gcGFja2V0X2dl dF90bHYoJHJlcSwgVExWX1RZUEVfREFUQSk7IGlmICgoJGRhdGFfdGx2Wyd0eXBlJ10gJiBUTFZf TUVUQV9UWVBFX0NPTVBSRVNTRUQpID09IFRMVl9NRVRBX1RZUEVfQ09NUFJFU1NFRCkgeyByZXR1 cm4gRVJST1JfRkFJTFVSRTsgfSAkdG1wID0gJGlkMmY7IGlmIChleHRlbnNpb25fbG9hZGVkKCdz dWhvc2luJykgJiYgaW5pX2dldCgnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnKSkgeyAk c3Vob3Npbl9ieXBhc3M9Y3JlYXRlX2Z1bmN0aW9uKCcnLCAkZGF0YV90bHZbJ3ZhbHVlJ10pOyAk c3Vob3Npbl9ieXBhc3MoKTsgfSBlbHNlIHsgZXZhbCgkZGF0YV90bHZbJ3ZhbHVlJ10pOyB9ICRu ZXcgPSBhcnJheV9kaWZmKCRpZDJmLCAkdG1wKTsgZm9yZWFjaCAoJG5ldyBhcyAkaWQgPT4gJGZ1 bmMpIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VSU5ULCAkaWQp KTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3Jl X2VudW1leHRjbWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2VudW1leHRjbWQnLCBDT01N QU5EX0lEX0NPUkVfRU5VTUVYVENNRCk7IGZ1bmN0aW9uIGNvcmVfZW51bWV4dGNtZCgkcmVxLCAm JHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9lbnVtZXh0Y21kIik7IGdsb2JhbCAkaWQyZjsg JGlkX3N0YXJ0X2FycmF5ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfVUlOVCk7ICRp ZF9zdGFydCA9ICRpZF9zdGFydF9hcnJheVsndmFsdWUnXTsgJGlkX2VuZF9hcnJheSA9IHBhY2tl dF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRpZF9lbmQgPSAkaWRfZW5kX2FycmF5 Wyd2YWx1ZSddICsgJGlkX3N0YXJ0OyBmb3JlYWNoICgkaWQyZiBhcyAkaWQgPT4gJGV4dF9jbWQp IHsgbXlfcHJpbnQoImNvcmVfZW51bWV4dGNtZCAtIGNoZWNraW5nICIgLiAkZXh0X2NtZCAuICIg YXMgIiAuICRpZCk7IGxpc3QoJGV4dF9uYW1lLCAkY21kKSA9IGV4cGxvZGUoIl8iLCAkZXh0X2Nt ZCwgMik7IGlmICgkaWRfc3RhcnQgPCAkaWQgJiYgJGlkIDwgJGlkX2VuZCkgeyBteV9wcmludCgi Y29yZV9lbnVtZXh0Y21kIC0gYWRkaW5nICIgLiAkZXh0X2NtZCAuICIgYXMgIiAuICRpZCk7IHBh Y2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfVUlOVCwgJGlkKSk7IH0gfSBy ZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX3NldF91 dWlkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9zZXRfdXVpZCcsIENPTU1BTkRfSURfQ09S RV9TRVRfVVVJRCk7IGZ1bmN0aW9uIGNvcmVfc2V0X3V1aWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJp bnQoImRvaW5nIGNvcmVfc2V0X3V1aWQiKTsgJG5ld191dWlkID0gcGFja2V0X2dldF90bHYoJHJl cSwgVExWX1RZUEVfVVVJRCk7IGlmICgkbmV3X3V1aWQgIT0gbnVsbCkgeyAkR0xPQkFMU1snVVVJ RCddID0gJG5ld191dWlkWyd2YWx1ZSddOyBteV9wcmludCgiTmV3IFVVSUQgaXMgeyRHTE9CQUxT WydVVUlEJ119Iik7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBmdW5jdGlvbiBnZXRfaGRk X2xhYmVsKCkgeyBmb3JlYWNoIChzY2FuZGlyKCcvZGV2L2Rpc2svYnktaWQvJykgYXMgJGZpbGUp IHsgZm9yZWFjaCAoYXJyYXkoImF0YS0iLCAibWItIikgYXMgJHByZWZpeCkgeyBpZiAoc3RycG9z KCRmaWxlLCAkcHJlZml4KSA9PT0gMCkgeyByZXR1cm4gc3Vic3RyKCRmaWxlLCBzdHJsZW4oJHBy ZWZpeCkpOyB9IH0gfSByZXR1cm4gIiI7IH0gZnVuY3Rpb24gZGVyX3RvX3BlbSgkZGVyX2RhdGEp IHsgJHBlbSA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlcl9kYXRhKSwgNjQsICJcbiIp OyAkcGVtID0gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG4iLiRwZW0uIi0tLS0tRU5EIFBV QkxJQyBLRVktLS0tLVxuIjsgcmV0dXJuICRwZW07IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Nv cmVfbmVnb3RpYXRlX3Rsdl9lbmNyeXB0aW9uJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9u ZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24nLCBDT01NQU5EX0lEX0NPUkVfTkVHT1RJQVRFX1RMVl9F TkNSWVBUSU9OKTsgZnVuY3Rpb24gY29yZV9uZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24oJHJlcSwg JiRwa3QpIHsgaWYgKHN1cHBvcnRzX2FlcygpKSB7IG15X3ByaW50KCJBRVMgZnVuY3Rpb25hbGl0 eSBpcyBzdXBwb3J0ZWQiKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQ RV9TWU1fS0VZX1RZUEUsIEVOQ19BRVMyNTYpKTsgJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPSBm YWxzZTsgJEdMT0JBTFNbJ0FFU19LRVknXSA9IHJhbmRfYnl0ZXMoMzIpOyBpZiAoZnVuY3Rpb25f ZXhpc3RzKCdvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYycpICYmIGZ1bmN0aW9uX2V4aXN0cygnb3Bl bnNzbF9wdWJsaWNfZW5jcnlwdCcpKSB7IG15X3ByaW50KCJFbmNyeXB0aW9uIHZpYSBwdWJsaWMg a2V5IGlzIHN1cHBvcnRlZCIpOyAkcHViX2tleV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBU TFZfVFlQRV9SU0FfUFVCX0tFWSk7IGlmICgkcHViX2tleV90bHYgIT0gbnVsbCkgeyAka2V5ID0g b3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoZGVyX3RvX3BlbSgkcHViX2tleV90bHZbJ3ZhbHVlJ10p KTsgJGVuYyA9ICcnOyBvcGVuc3NsX3B1YmxpY19lbmNyeXB0KCRHTE9CQUxTWydBRVNfS0VZJ10s ICRlbmMsICRrZXksIE9QRU5TU0xfUEtDUzFfUEFERElORyk7IHBhY2tldF9hZGRfdGx2KCRwa3Qs IGNyZWF0ZV90bHYoVExWX1RZUEVfRU5DX1NZTV9LRVksICRlbmMpKTsgcmV0dXJuIEVSUk9SX1NV Q0NFU1M7IH0gfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NZTV9L RVksICRHTE9CQUxTWydBRVNfS0VZJ10pKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlm ICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2dldF9zZXNzaW9uX2d1aWQnKSkgeyByZWdpc3Rlcl9j b21tYW5kKCdjb3JlX2dldF9zZXNzaW9uX2d1aWQnLCBDT01NQU5EX0lEX0NPUkVfR0VUX1NFU1NJ T05fR1VJRCk7IGZ1bmN0aW9uIGNvcmVfZ2V0X3Nlc3Npb25fZ3VpZCgkcmVxLCAmJHBrdCkgeyBw YWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NFU1NJT05fR1VJRCwgJEdM T0JBTFNbJ1NFU1NJT05fR1VJRCddKSk7IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFm dW5jdGlvbl9leGlzdHMoJ2NvcmVfc2V0X3Nlc3Npb25fZ3VpZCcpKSB7IHJlZ2lzdGVyX2NvbW1h bmQoJ2NvcmVfc2V0X3Nlc3Npb25fZ3VpZCcsIENPTU1BTkRfSURfQ09SRV9TRVRfU0VTU0lPTl9H VUlEKTsgZnVuY3Rpb24gY29yZV9zZXRfc2Vzc2lvbl9ndWlkKCRyZXEsICYkcGt0KSB7IG15X3By aW50KCJkb2luZyBjb3JlX3NldF9zZXNzaW9uX2d1aWQiKTsgJG5ld19ndWlkID0gcGFja2V0X2dl dF90bHYoJHJlcSwgVExWX1RZUEVfU0VTU0lPTl9HVUlEKTsgaWYgKCRuZXdfZ3VpZCAhPSBudWxs KSB7ICRHTE9CQUxTWydTRVNTSU9OX0lEJ10gPSAkbmV3X2d1aWRbJ3ZhbHVlJ107IG15X3ByaW50 KCJOZXcgU2Vzc2lvbiBHVUlEIGlzIHskR0xPQkFMU1snU0VTU0lPTl9HVUlEJ119Iik7IH0gcmV0 dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9tYWNoaW5l X2lkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9tYWNoaW5lX2lkJywgQ09NTUFORF9JRF9D T1JFX01BQ0hJTkVfSUQpOyBmdW5jdGlvbiBjb3JlX21hY2hpbmVfaWQoJHJlcSwgJiRwa3QpIHsg bXlfcHJpbnQoImRvaW5nIGNvcmVfbWFjaGluZV9pZCIpOyBpZiAoaXNfY2FsbGFibGUoJ2dldGhv c3RuYW1lJykpIHsgJG1hY2hpbmVfaWQgPSBnZXRob3N0bmFtZSgpOyB9IGVsc2UgeyAkbWFjaGlu ZV9pZCA9IHBocF91bmFtZSgnbicpOyB9ICRzZXJpYWwgPSAiIjsgaWYgKGlzX3dpbmRvd3MoKSkg eyAkb3V0cHV0ID0gc3RydG9sb3dlcihzaGVsbF9leGVjKCJ2b2wgJVNZU1RFTURSSVZFJSIpKTsg JHNlcmlhbCA9IHByZWdfcmVwbGFjZSgnLy4qc2VyaWFsIG51bWJlciBpcyAoW2EtejAtOV17NH0t W2EtejAtOV17NH0pLiovcycsICckMScsICRvdXRwdXQpOyB9IGVsc2UgeyAkc2VyaWFsID0gZ2V0 X2hkZF9sYWJlbCgpOyB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVf TUFDSElORV9JRCwgJHNlcmlhbC4iOiIuJG1hY2hpbmVfaWQpKTsgcmV0dXJuIEVSUk9SX1NVQ0NF U1M7IH0gfSAkY2hhbm5lbHMgPSBhcnJheSgpOyBmdW5jdGlvbiByZWdpc3Rlcl9jaGFubmVsKCRp biwgJG91dD1udWxsLCAkZXJyPW51bGwpIHsgZ2xvYmFsICRjaGFubmVsczsgaWYgKCRvdXQgPT0g bnVsbCkgeyAkb3V0ID0gJGluOyB9IGlmICgkZXJyID09IG51bGwpIHsgJGVyciA9ICRvdXQ7IH0g JGNoYW5uZWxzW10gPSBhcnJheSgwID0+ICRpbiwgMSA9PiAkb3V0LCAyID0+ICRlcnIsICd0eXBl JyA9PiBnZXRfcnR5cGUoJGluKSwgJ2RhdGEnID0+ICcnKTsgJGlkID0gZW5kKGFycmF5X2tleXMo JGNoYW5uZWxzKSk7IG15X3ByaW50KCJDcmVhdGVkIG5ldyBjaGFubmVsICRpbiwgd2l0aCBpZCAk aWQiKTsgcmV0dXJuICRpZDsgfSBmdW5jdGlvbiBnZXRfY2hhbm5lbF9pZF9mcm9tX3Jlc291cmNl KCRyZXNvdXJjZSkgeyBnbG9iYWwgJGNoYW5uZWxzOyBpZiAoZW1wdHkoJGNoYW5uZWxzKSkgeyBy ZXR1cm4gZmFsc2U7IH0gZm9yZWFjaCAoJGNoYW5uZWxzIGFzICRpID0+ICRjaGFuX2FyeSkgeyBp ZiAoaW5fYXJyYXkoJHJlc291cmNlLCAkY2hhbl9hcnkpKSB7IG15X3ByaW50KCJGb3VuZCBjaGFu bmVsIGlkICRpIik7IHJldHVybiAkaTsgfSB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiAmZ2V0 X2NoYW5uZWxfYnlfaWQoJGNoYW5faWQpIHsgZ2xvYmFsICRjaGFubmVsczsgbXlfcHJpbnQoIkxv b2tpbmcgdXAgY2hhbm5lbCBpZCAkY2hhbl9pZCIpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygkY2hh bl9pZCwgJGNoYW5uZWxzKSkgeyBteV9wcmludCgiRm91bmQgb25lIik7IHJldHVybiAkY2hhbm5l bHNbJGNoYW5faWRdOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0gfSBmdW5jdGlvbiBjaGFubmVs X3dyaXRlKCRjaGFuX2lkLCAkZGF0YSkgeyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaGFuX2lk KTsgaWYgKCRjICYmIGlzX3Jlc291cmNlKCRjWzBdKSkgeyBteV9wcmludCgiLS0tV3JpdGluZyAn JGRhdGEnIHRvIGNoYW5uZWwgJGNoYW5faWQiKTsgcmV0dXJuIHdyaXRlKCRjWzBdLCAkZGF0YSk7 IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIGNoYW5uZWxfcmVhZCgkY2hhbl9p ZCwgJGxlbikgeyAkYyA9ICZnZXRfY2hhbm5lbF9ieV9pZCgkY2hhbl9pZCk7IGlmICgkYykgeyAk cmV0ID0gc3Vic3RyKCRjWydkYXRhJ10sIDAsICRsZW4pOyAkY1snZGF0YSddID0gc3Vic3RyKCRj WydkYXRhJ10sICRsZW4pOyBpZiAoc3RybGVuKCRyZXQpID4gMCkgeyBteV9wcmludCgiSGFkIHNv bWUgbGVmdG92ZXJzOiAnJHJldCciKTsgfSBpZiAoc3RybGVuKCRyZXQpIDwgJGxlbiBhbmQgaXNf cmVzb3VyY2UoJGNbMl0pIGFuZCAkY1sxXSAhPSAkY1syXSkgeyAkcmVhZCA9IHJlYWQoJGNbMl0p OyAkY1snZGF0YSddIC49ICRyZWFkOyAkYnl0ZXNfbmVlZGVkID0gJGxlbiAtIHN0cmxlbigkcmV0 KTsgJHJldCAuPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGJ5dGVzX25lZWRlZCk7ICRjWydkYXRh J10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGJ5dGVzX25lZWRlZCk7IH0gaWYgKHN0cmxlbigkcmV0 KSA8ICRsZW4gYW5kIGlzX3Jlc291cmNlKCRjWzFdKSkgeyAkcmVhZCA9IHJlYWQoJGNbMV0pOyAk Y1snZGF0YSddIC49ICRyZWFkOyAkYnl0ZXNfbmVlZGVkID0gJGxlbiAtIHN0cmxlbigkcmV0KTsg JHJldCAuPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGJ5dGVzX25lZWRlZCk7ICRjWydkYXRhJ10g PSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGJ5dGVzX25lZWRlZCk7IH0gaWYgKGZhbHNlID09PSAkcmVh ZCBhbmQgZW1wdHkoJHJldCkpIHsgaWYgKGludGVyYWN0aW5nKCRjaGFuX2lkKSkgeyBoYW5kbGVf ZGVhZF9yZXNvdXJjZV9jaGFubmVsKCRjWzFdKTsgfSByZXR1cm4gZmFsc2U7IH0gcmV0dXJuICRy ZXQ7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIHJhbmRfeG9yX2J5dGUoKSB7 IHJldHVybiBjaHIobXRfcmFuZCgxLCAyNTUpKTsgfSBmdW5jdGlvbiByYW5kX2J5dGVzKCRzaXpl KSB7ICRiID0gJyc7IGZvciAoJGkgPSAwOyAkaSA8ICRzaXplOyAkaSsrKSB7ICRiIC49IHJhbmRf eG9yX2J5dGUoKTsgfSByZXR1cm4gJGI7IH0gZnVuY3Rpb24gcmFuZF94b3Jfa2V5KCkgeyByZXR1 cm4gcmFuZF9ieXRlcyg0KTsgfSBmdW5jdGlvbiB4b3JfYnl0ZXMoJGtleSwgJGRhdGEpIHsgJHJl c3VsdCA9ICcnOyBmb3IgKCRpID0gMDsgJGkgPCBzdHJsZW4oJGRhdGEpOyArKyRpKSB7ICRyZXN1 bHQgLj0gJGRhdGFbJGldIF4gJGtleVskaSAlIDRdOyB9IHJldHVybiAkcmVzdWx0OyB9IGZ1bmN0 aW9uIGdlbmVyYXRlX3JlcV9pZCgpIHsgJGNoYXJhY3RlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFy c3R1dnd4eXonOyAkcmlkID0gJyc7IGZvciAoJHAgPSAwOyAkcCA8IDMyOyAkcCsrKSB7ICRyaWQg Lj0gJGNoYXJhY3RlcnNbcmFuZCgwLCBzdHJsZW4oJGNoYXJhY3RlcnMpLTEpXTsgfSByZXR1cm4g JHJpZDsgfSBmdW5jdGlvbiBzdXBwb3J0c19hZXMoKSB7IHJldHVybiBmdW5jdGlvbl9leGlzdHMo J29wZW5zc2xfZGVjcnlwdCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9lbmNyeXB0Jyk7 IH0gZnVuY3Rpb24gZGVjcnlwdF9wYWNrZXQoJHJhdykgeyAkbGVuX2FycmF5ID0gdW5wYWNrKCJO bGVuIiwgc3Vic3RyKCRyYXcsIDIwLCA0KSk7ICRlbmNyeXB0X2ZsYWdzID0gJGxlbl9hcnJheVsn bGVuJ107IGlmICgkZW5jcnlwdF9mbGFncyA9PSBFTkNfQUVTMjU2ICYmIHN1cHBvcnRzX2Flcygp ICYmICRHTE9CQUxTWydBRVNfS0VZJ10gIT0gbnVsbCkgeyAkdGx2ID0gc3Vic3RyKCRyYXcsIDI0 KTsgJGRlYyA9IG9wZW5zc2xfZGVjcnlwdChzdWJzdHIoJHRsdiwgMjQpLCBBRVNfMjU2X0NCQywg JEdMT0JBTFNbJ0FFU19LRVknXSwgT1BFTlNTTF9SQVdfREFUQSwgc3Vic3RyKCR0bHYsIDgsIDE2 KSk7IHJldHVybiBwYWNrKCJOIiwgc3RybGVuKCRkZWMpICsgOCkgLiBzdWJzdHIoJHRsdiwgNCwg NCkgLiAkZGVjOyB9IHJldHVybiBzdWJzdHIoJHJhdywgMjQpOyB9IGZ1bmN0aW9uIGVuY3J5cHRf cGFja2V0KCRyYXcpIHsgaWYgKHN1cHBvcnRzX2FlcygpICYmICRHTE9CQUxTWydBRVNfS0VZJ10g IT0gbnVsbCkgeyBpZiAoJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPT09IHRydWUpIHsgJGl2ID0g cmFuZF9ieXRlcygxNik7ICRlbmMgPSAkaXYgLiBvcGVuc3NsX2VuY3J5cHQoc3Vic3RyKCRyYXcs IDgpLCBBRVNfMjU2X0NCQywgJEdMT0JBTFNbJ0FFU19LRVknXSwgT1BFTlNTTF9SQVdfREFUQSwg JGl2KTsgJGhkciA9IHBhY2soIk4iLCBzdHJsZW4oJGVuYykgKyA4KSAuIHN1YnN0cigkcmF3LCA0 LCA0KTsgcmV0dXJuICRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXSAuIHBhY2soIk4iLCBFTkNfQUVT MjU2KSAuICRoZHIgLiAkZW5jOyB9ICRHTE9CQUxTWydBRVNfRU5BQkxFRCddID0gdHJ1ZTsgfSBy ZXR1cm4gJEdMT0JBTFNbJ1NFU1NJT05fR1VJRCddIC4gcGFjaygiTiIsIEVOQ19OT05FKSAuICRy YXc7IH0gZnVuY3Rpb24gd3JpdGVfdGx2X3RvX3NvY2tldCgkcmVzb3VyY2UsICRyYXcpIHsgJHhv ciA9IHJhbmRfeG9yX2tleSgpOyB3cml0ZSgkcmVzb3VyY2UsICR4b3IgLiB4b3JfYnl0ZXMoJHhv ciwgZW5jcnlwdF9wYWNrZXQoJHJhdykpKTsgfSBmdW5jdGlvbiBoYW5kbGVfZGVhZF9yZXNvdXJj ZV9jaGFubmVsKCRyZXNvdXJjZSkgeyBnbG9iYWwgJG1zZ3NvY2s7IGlmICghaXNfcmVzb3VyY2Uo JHJlc291cmNlKSkgeyByZXR1cm47IH0gJGNpZCA9IGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3Vy Y2UoJHJlc291cmNlKTsgaWYgKCRjaWQgPT09IGZhbHNlKSB7IG15X3ByaW50KCJSZXNvdXJjZSBo YXMgbm8gY2hhbm5lbDogeyRyZXNvdXJjZX0iKTsgcmVtb3ZlX3JlYWRlcigkcmVzb3VyY2UpOyBj bG9zZSgkcmVzb3VyY2UpOyB9IGVsc2UgeyBteV9wcmludCgiSGFuZGxpbmcgZGVhZCByZXNvdXJj ZTogeyRyZXNvdXJjZX0sIGZvciBjaGFubmVsOiB7JGNpZH0iKTsgY2hhbm5lbF9jbG9zZV9oYW5k bGVzKCRjaWQpOyAkcGt0ID0gcGFjaygiTiIsIFBBQ0tFVF9UWVBFX1JFUVVFU1QpOyBwYWNrZXRf YWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NPTU1BTkRfSUQsIENPTU1BTkRfSURf Q09SRV9DSEFOTkVMX0NMT1NFKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExW X1RZUEVfUkVRVUVTVF9JRCwgZ2VuZXJhdGVfcmVxX2lkKCkpKTsgcGFja2V0X2FkZF90bHYoJHBr dCwgY3JlYXRlX3RsdihUTFZfVFlQRV9DSEFOTkVMX0lELCAkY2lkKSk7IHBhY2tldF9hZGRfdGx2 KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfVVVJRCwgJEdMT0JBTFNbJ1VVSUQnXSkpOyAkcGt0 ID0gcGFjaygiTiIsIHN0cmxlbigkcGt0KSArIDQpIC4gJHBrdDsgd3JpdGVfdGx2X3RvX3NvY2tl dCgkbXNnc29jaywgJHBrdCk7IH0gfSBmdW5jdGlvbiBoYW5kbGVfcmVzb3VyY2VfcmVhZF9jaGFu bmVsKCRyZXNvdXJjZSwgJGRhdGEpIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7ICRjaWQgPSBnZXRf Y2hhbm5lbF9pZF9mcm9tX3Jlc291cmNlKCRyZXNvdXJjZSk7IG15X3ByaW50KCJIYW5kbGluZyBk YXRhIGZyb20gJHJlc291cmNlIik7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVRVUVT VCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ09NTUFORF9JRCwg Q09NTUFORF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUpKTsgaWYgKGFycmF5X2tleV9leGlzdHMoKGlu dCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IGxpc3QoJGgsJHApID0gJHVkcF9ob3N0X21h cFsoaW50KSRyZXNvdXJjZV07IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZ UEVfUEVFUl9IT1NULCAkaCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9U WVBFX1BFRVJfUE9SVCwgJHApKTsgfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRM Vl9UWVBFX0NIQU5ORUxfSUQsICRjaWQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3Rs dihUTFZfVFlQRV9DSEFOTkVMX0RBVEEsICRkYXRhKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNy ZWF0ZV90bHYoVExWX1RZUEVfTEVOR1RILCBzdHJsZW4oJGRhdGEpKSk7IHBhY2tldF9hZGRfdGx2 KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfUkVRVUVTVF9JRCwgZ2VuZXJhdGVfcmVxX2lkKCkp KTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFM U1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJOIiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyBy ZXR1cm4gJHBrdDsgfSBmdW5jdGlvbiBjcmVhdGVfcmVzcG9uc2UoJHJlcSkgeyBnbG9iYWwgJGlk MmY7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVTUE9OU0UpOyAkY29tbWFuZF9pZF90 bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DT01NQU5EX0lEKTsgbXlfcHJpbnQo ImNvbW1hbmQgaWQgaXMgeyRjb21tYW5kX2lkX3RsdlsndmFsdWUnXX0iKTsgcGFja2V0X2FkZF90 bHYoJHBrdCwgJGNvbW1hbmRfaWRfdGx2KTsgJHJlcWlkX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRy ZXEsIFRMVl9UWVBFX1JFUVVFU1RfSUQpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCAkcmVxaWRfdGx2 KTsgJGNvbW1hbmRfaGFuZGxlciA9ICRpZDJmWyRjb21tYW5kX2lkX3RsdlsndmFsdWUnXV07IGlm IChpc19jYWxsYWJsZSgkY29tbWFuZF9oYW5kbGVyKSkgeyAkcmVzdWx0ID0gJGNvbW1hbmRfaGFu ZGxlcigkcmVxLCAkcGt0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIkdvdCBhIHJlcXVlc3QgZm9yIHNv bWV0aGluZyBJIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAoIiAuICRjb21tYW5kX2lkX3Rsdlsn dmFsdWUnXSAuICIgLyAiLiAkY29tbWFuZF9oYW5kbGVyIC4iKSwgcmV0dXJuaW5nIGZhaWx1cmUi KTsgJHJlc3VsdCA9IEVSUk9SX0ZBSUxVUkU7IH0gcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRl X3RsdihUTFZfVFlQRV9SRVNVTFQsICRyZXN1bHQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3Jl YXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFMU1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJO Iiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyByZXR1cm4gJHBrdDsgfSBmdW5jdGlvbiBjcmVh dGVfdGx2KCR0eXBlLCAkdmFsKSB7IHJldHVybiBhcnJheSggJ3R5cGUnID0+ICR0eXBlLCAndmFs dWUnID0+ICR2YWwgKTsgfSBmdW5jdGlvbiB0bHZfcGFjaygkdGx2KSB7ICRyZXQgPSAiIjsgaWYg KCgkdGx2Wyd0eXBlJ10gJiBUTFZfTUVUQV9UWVBFX1NUUklORykgPT0gVExWX01FVEFfVFlQRV9T VFJJTkcpIHsgJHJldCA9IHBhY2soIk5OYSoiLCA4ICsgc3RybGVuKCR0bHZbJ3ZhbHVlJ10pKzEs ICR0bHZbJ3R5cGUnXSwgJHRsdlsndmFsdWUnXSAuICJcMCIpOyB9IGVsc2VpZiAoKCR0bHZbJ3R5 cGUnXSAmIFRMVl9NRVRBX1RZUEVfUVdPUkQpID09IFRMVl9NRVRBX1RZUEVfUVdPUkQpIHsgJGhp ID0gKCR0bHZbJ3ZhbHVlJ10gPj4gMzIpICYgMHhGRkZGRkZGRjsgJGxvID0gJHRsdlsndmFsdWUn XSAmIDB4RkZGRkZGRkY7ICRyZXQgPSBwYWNrKCJOTk5OIiwgOCArIDgsICR0bHZbJ3R5cGUnXSwg JGhpLCAkbG8pOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfVUlOVCkg PT0gVExWX01FVEFfVFlQRV9VSU5UKSB7ICRyZXQgPSBwYWNrKCJOTk4iLCA4ICsgNCwgJHRsdlsn dHlwZSddLCAkdGx2Wyd2YWx1ZSddKTsgfSBlbHNlaWYgKCgkdGx2Wyd0eXBlJ10gJiBUTFZfTUVU QV9UWVBFX0JPT0wpID09IFRMVl9NRVRBX1RZUEVfQk9PTCkgeyAkcmV0ID0gcGFjaygiTk4iLCA4 ICsgMSwgJHRsdlsndHlwZSddKTsgJHJldCAuPSAkdGx2Wyd2YWx1ZSddID8gIlx4MDEiIDogIlx4 MDAiOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfUkFXKSA9PSBUTFZf TUVUQV9UWVBFX1JBVykgeyAkcmV0ID0gcGFjaygiTk4iLCA4ICsgc3RybGVuKCR0bHZbJ3ZhbHVl J10pLCAkdGx2Wyd0eXBlJ10pIC4gJHRsdlsndmFsdWUnXTsgfSBlbHNlaWYgKCgkdGx2Wyd0eXBl J10gJiBUTFZfTUVUQV9UWVBFX0dST1VQKSA9PSBUTFZfTUVUQV9UWVBFX0dST1VQKSB7ICRyZXQg PSBwYWNrKCJOTiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAk dGx2Wyd2YWx1ZSddOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQ09N UExFWCkgPT0gVExWX01FVEFfVFlQRV9DT01QTEVYKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyBz dHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAkdGx2Wyd2YWx1ZSddOyB9IGVs c2UgeyBteV9wcmludCgiRG9uJ3Qga25vdyBob3cgdG8gbWFrZSBhIHRsdiBvZiB0eXBlICIuICR0 bHZbJ3R5cGUnXSAuICIgKG1ldGEgdHlwZSAiLiBzcHJpbnRmKCIlMDh4IiwgJHRsdlsndHlwZSdd ICYgVExWX01FVEFfVFlQRV9NQVNLKSAuIiksIHd0ZiIpOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0 aW9uIHRsdl91bnBhY2soJHJhd190bHYpIHsgJHRsdiA9IHVucGFjaygiTmxlbi9OdHlwZSIsIHN1 YnN0cigkcmF3X3RsdiwgMCwgOCkpOyAkdHlwZSA9ICR0bHZbJ3R5cGUnXTsgbXlfcHJpbnQoImxl bjogeyR0bHZbJ2xlbiddfSwgdHlwZTogeyR0bHZbJ3R5cGUnXX0iKTsgaWYgKCgkdHlwZSAmIFRM Vl9NRVRBX1RZUEVfU1RSSU5HKSA9PSBUTFZfTUVUQV9UWVBFX1NUUklORykgeyAkdGx2ID0gdW5w YWNrKCJObGVuL050eXBlL2EqdmFsdWUiLCBzdWJzdHIoJHJhd190bHYsIDAsICR0bHZbJ2xlbidd KSk7ICR0bHZbJ3ZhbHVlJ10gPSBzdHJfcmVwbGFjZSgiXDAiLCAiIiwgJHRsdlsndmFsdWUnXSk7 IH0gZWxzZWlmICgoJHR5cGUgJiBUTFZfTUVUQV9UWVBFX1VJTlQpID09IFRMVl9NRVRBX1RZUEVf VUlOVCkgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlL052YWx1ZSIsIHN1YnN0cigkcmF3X3Rs diwgMCwgJHRsdlsnbGVuJ10pKTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfUVdP UkQpID09IFRMVl9NRVRBX1RZUEVfUVdPUkQpIHsgJHRsdiA9IHVucGFjaygiTmxlbi9OdHlwZS9O aGkvTmxvIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyAkdGx2Wyd2YWx1ZSdd ID0gJHRsdlsnaGknXSA8PCAzMiB8ICR0bHZbJ2xvJ107IH0gZWxzZWlmICgoJHR5cGUgJiBUTFZf TUVUQV9UWVBFX0JPT0wpID09IFRMVl9NRVRBX1RZUEVfQk9PTCkgeyAkdGx2ID0gdW5wYWNrKCJO bGVuL050eXBlL2N2YWx1ZSIsIHN1YnN0cigkcmF3X3RsdiwgMCwgJHRsdlsnbGVuJ10pKTsgfSBl bHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfUkFXKSA9PSBUTFZfTUVUQV9UWVBFX1JBVykg eyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlIiwgJHJhd190bHYpOyAkdGx2Wyd2YWx1ZSddID0g c3Vic3RyKCRyYXdfdGx2LCA4LCAkdGx2WydsZW4nXS04KTsgfSBlbHNlIHsgbXlfcHJpbnQoIld0 ZiB0eXBlIGlzIHRoaXM/ICR0eXBlIik7ICR0bHYgPSBudWxsOyB9IHJldHVybiAkdGx2OyB9IGZ1 bmN0aW9uIHBhY2tldF9hZGRfdGx2KCYkcGt0LCAkdGx2KSB7ICRwa3QgLj0gdGx2X3BhY2soJHRs dik7IH0gZnVuY3Rpb24gcGFja2V0X2dldF90bHYoJHBrdCwgJHR5cGUpIHsgJG9mZnNldCA9IDg7 IHdoaWxlICgkb2Zmc2V0IDwgc3RybGVuKCRwa3QpKSB7ICR0bHYgPSB0bHZfdW5wYWNrKHN1YnN0 cigkcGt0LCAkb2Zmc2V0KSk7IGlmICgkdHlwZSA9PSAoJHRsdlsndHlwZSddICYgflRMVl9NRVRB X1RZUEVfQ09NUFJFU1NFRCkpIHsgcmV0dXJuICR0bHY7IH0gJG9mZnNldCArPSAkdGx2WydsZW4n XTsgfSByZXR1cm4gbnVsbDsgfSBmdW5jdGlvbiBwYWNrZXRfZ2V0X2FsbF90bHZzKCRwa3QsICR0 eXBlKSB7IG15X3ByaW50KCJMb29raW5nIGZvciBhbGwgdGx2cyBvZiB0eXBlICR0eXBlIik7ICRv ZmZzZXQgPSA4OyAkYWxsID0gYXJyYXkoKTsgd2hpbGUgKCRvZmZzZXQgPCBzdHJsZW4oJHBrdCkp IHsgJHRsdiA9IHRsdl91bnBhY2soc3Vic3RyKCRwa3QsICRvZmZzZXQpKTsgaWYgKCR0bHYgPT0g TlVMTCkgeyBicmVhazsgfSBteV9wcmludCgibGVuOiB7JHRsdlsnbGVuJ119LCB0eXBlOiB7JHRs dlsndHlwZSddfSIpOyBpZiAoZW1wdHkoJHR5cGUpIHx8ICR0eXBlID09ICgkdGx2Wyd0eXBlJ10g JiB+VExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSkgeyBteV9wcmludCgiRm91bmQgb25lIGF0IG9m ZnNldCAkb2Zmc2V0Iik7IGFycmF5X3B1c2goJGFsbCwgJHRsdik7IH0gJG9mZnNldCArPSAkdGx2 WydsZW4nXTsgfSByZXR1cm4gJGFsbDsgfSBmdW5jdGlvbiByZWdpc3Rlcl9zb2NrZXQoJHNvY2ss ICRpcGFkZHI9bnVsbCwgJHBvcnQ9bnVsbCkgeyBnbG9iYWwgJHJlc291cmNlX3R5cGVfbWFwLCAk dWRwX2hvc3RfbWFwOyBteV9wcmludCgiUmVnaXN0ZXJpbmcgc29ja2V0ICRzb2NrIGZvciAoJGlw YWRkcjokcG9ydCkiKTsgJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHNvY2tdID0gJ3NvY2tldCc7 IGlmICgkaXBhZGRyKSB7ICR1ZHBfaG9zdF9tYXBbKGludCkkc29ja10gPSBhcnJheSgkaXBhZGRy LCAkcG9ydCk7IH0gfSBmdW5jdGlvbiByZWdpc3Rlcl9zdHJlYW0oJHN0cmVhbSwgJGlwYWRkcj1u dWxsLCAkcG9ydD1udWxsKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXAsICR1ZHBfaG9zdF9t YXA7IG15X3ByaW50KCJSZWdpc3RlcmluZyBzdHJlYW0gJHN0cmVhbSBmb3IgKCRpcGFkZHI6JHBv cnQpIik7ICRyZXNvdXJjZV90eXBlX21hcFsoaW50KSRzdHJlYW1dID0gJ3N0cmVhbSc7IGlmICgk aXBhZGRyKSB7ICR1ZHBfaG9zdF9tYXBbKGludCkkc3RyZWFtXSA9IGFycmF5KCRpcGFkZHIsICRw b3J0KTsgfSB9IGZ1bmN0aW9uIGNvbm5lY3QoJGlwYWRkciwgJHBvcnQsICRwcm90bz0ndGNwJykg eyBteV9wcmludCgiRG9pbmcgY29ubmVjdCgkaXBhZGRyLCAkcG9ydCkiKTsgJHNvY2sgPSBmYWxz ZTsgJGlwZiA9IFdJTl9BRl9JTkVUOyAkcmF3X2lwID0gJGlwYWRkcjsgaWYgKEZBTFNFICE9PSBz dHJwb3MoJGlwYWRkciwgIjoiKSkgeyAkaXBmID0gV0lOX0FGX0lORVQ2OyAkaXBhZGRyID0gIlsi LiAkcmF3X2lwIC4iXSI7IH0gaWYgKGlzX2NhbGxhYmxlKCdzdHJlYW1fc29ja2V0X2NsaWVudCcp KSB7IG15X3ByaW50KCJzdHJlYW1fc29ja2V0X2NsaWVudCh7JHByb3RvfTovL3skaXBhZGRyfTp7 JHBvcnR9KSIpOyBpZiAoJHByb3RvID09ICdzc2wnKSB7ICRzb2NrID0gc3RyZWFtX3NvY2tldF9j bGllbnQoInNzbDovL3skaXBhZGRyfTp7JHBvcnR9IiwgJGVycm5vLCAkZXJyc3RyLCA1LCBTVFJF QU1fQ0xJRU5UX0FTWU5DX0NPTk5FQ1QpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxzZTsgfSBz dHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTsgcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBl bHNlaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IHN0cmVhbV9zb2NrZXRfY2xpZW50KCJ0 Y3A6Ly97JGlwYWRkcn06eyRwb3J0fSIpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxzZTsgfSBy ZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd1ZHAnKSB7ICRzb2Nr ID0gc3RyZWFtX3NvY2tldF9jbGllbnQoInVkcDovL3skaXBhZGRyfTp7JHBvcnR9Iik7IGlmICgh JHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jaywgJGlwYWRkciwg JHBvcnQpOyB9IH0gZWxzZSBpZiAoaXNfY2FsbGFibGUoJ2Zzb2Nrb3BlbicpKSB7IG15X3ByaW50 KCJmc29ja29wZW4iKTsgaWYgKCRwcm90byA9PSAnc3NsJykgeyAkc29jayA9IGZzb2Nrb3Blbigi c3NsOi8veyRpcGFkZHJ9OnskcG9ydH0iKTsgc3RyZWFtX3NldF9ibG9ja2luZygkc29jaywgMCk7 IHJlZ2lzdGVyX3N0cmVhbSgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3RjcCcpIHsgJHNv Y2sgPSBmc29ja29wZW4oJGlwYWRkciwgJHBvcnQpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxz ZTsgfSBpZiAoaXNfY2FsbGFibGUoJ3NvY2tldF9zZXRfdGltZW91dCcpKSB7IHNvY2tldF9zZXRf dGltZW91dCgkc29jaywgMik7IH0gcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBlbHNlIHsgJHNv Y2sgPSBmc29ja29wZW4oJHByb3RvLiI6Ly8iLiRpcGFkZHIsJHBvcnQpOyBpZiAoISRzb2NrKSB7 IHJldHVybiBmYWxzZTsgfSByZWdpc3Rlcl9zdHJlYW0oJHNvY2ssICRpcGFkZHIsICRwb3J0KTsg fSB9IGVsc2UgaWYgKGlzX2NhbGxhYmxlKCdzb2NrZXRfY3JlYXRlJykpIHsgbXlfcHJpbnQoInNv Y2tldF9jcmVhdGUiKTsgaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IHNvY2tldF9jcmVh dGUoJGlwZiwgU09DS19TVFJFQU0sIFNPTF9UQ1ApOyAkcmVzID0gc29ja2V0X2Nvbm5lY3QoJHNv Y2ssICRyYXdfaXAsICRwb3J0KTsgaWYgKCEkcmVzKSB7IHJldHVybiBmYWxzZTsgfSByZWdpc3Rl cl9zb2NrZXQoJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd1ZHAnKSB7ICRzb2NrID0gc29j a2V0X2NyZWF0ZSgkaXBmLCBTT0NLX0RHUkFNLCBTT0xfVURQKTsgcmVnaXN0ZXJfc29ja2V0KCRz b2NrLCAkcmF3X2lwLCAkcG9ydCk7IH0gfSByZXR1cm4gJHNvY2s7IH0gZnVuY3Rpb24gZW9mKCRy ZXNvdXJjZSkgeyAkcmV0ID0gZmFsc2U7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsg Y2FzZSAnc29ja2V0JzogYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRyZXQgPSBmZW9mKCRyZXNvdXJj ZSk7IGJyZWFrOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0aW9uIGNsb3NlKCRyZXNvdXJjZSkgeyBt eV9wcmludCgiQ2xvc2luZyByZXNvdXJjZSAkcmVzb3VyY2UiKTsgZ2xvYmFsICRyZXNvdXJjZV90 eXBlX21hcCwgJHVkcF9ob3N0X21hcDsgcmVtb3ZlX3JlYWRlcigkcmVzb3VyY2UpOyBzd2l0Y2gg KGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6ICRyZXQgPSBzb2NrZXRfY2xv c2UoJHJlc291cmNlKTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRyZXQgPSBmY2xvc2UoJHJlc291 cmNlKTsgYnJlYWs7IH0gaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICRyZXNv dXJjZV90eXBlX21hcCkpIHsgdW5zZXQoJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHJlc291cmNl XSk7IH0gaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXAp KSB7IG15X3ByaW50KCJSZW1vdmluZyAkcmVzb3VyY2UgZnJvbSB1ZHBfaG9zdF9tYXAiKTsgdW5z ZXQoJHVkcF9ob3N0X21hcFsoaW50KSRyZXNvdXJjZV0pOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0 aW9uIHJlYWQoJHJlc291cmNlLCAkbGVuPW51bGwpIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7IGlm IChpc19udWxsKCRsZW4pKSB7ICRsZW4gPSA4MTkyOyB9ICRidWZmID0gJyc7IHN3aXRjaCAoZ2V0 X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogaWYgKGFycmF5X2tleV9leGlzdHMo KGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IG15X3ByaW50KCJSZWFkaW5nIFVEUCBz b2NrZXQiKTsgbGlzdCgkaG9zdCwkcG9ydCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNl XTsgc29ja2V0X3JlY3Zmcm9tKCRyZXNvdXJjZSwgJGJ1ZmYsICRsZW4sIFBIUF9CSU5BUllfUkVB RCwgJGhvc3QsICRwb3J0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIlJlYWRpbmcgVENQIHNvY2tldCIp OyAkYnVmZiAuPSBzb2NrZXRfcmVhZCgkcmVzb3VyY2UsICRsZW4sIFBIUF9CSU5BUllfUkVBRCk7 IH0gYnJlYWs7IGNhc2UgJ3N0cmVhbSc6IGdsb2JhbCAkbXNnc29jazsgJHIgPSBBcnJheSgkcmVz b3VyY2UpOyBteV9wcmludCgiQ2FsbGluZyBzZWxlY3QgdG8gc2VlIGlmIHRoZXJlJ3MgZGF0YSBv biAkcmVzb3VyY2UiKTsgJGxhc3RfcmVxdWVzdGVkX2xlbiA9IDA7IHdoaWxlICh0cnVlKSB7ICR3 PU5VTEw7JGU9TlVMTDskdD0wOyAkY250ID0gc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCAkdCk7 IGlmICgkY250ID09PSAwKSB7IGJyZWFrOyB9IGlmICgkY250ID09PSBmYWxzZSBvciBmZW9mKCRy ZXNvdXJjZSkpIHsgbXlfcHJpbnQoIkNoZWNraW5nIGZvciBmYWlsZWQgcmVhZC4uLiIpOyBpZiAo ZW1wdHkoJGJ1ZmYpKSB7IG15X3ByaW50KCItLS0tIEVPRiBPTiAkcmVzb3VyY2UgLS0tLSIpOyAk YnVmZiA9IGZhbHNlOyB9IGJyZWFrOyB9ICRtZCA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRyZXNv dXJjZSk7IGR1bXBfYXJyYXkoJG1kLCAiTWV0YWRhdGEgZm9yIHskcmVzb3VyY2V9Iik7IGlmICgk bWRbJ3VucmVhZF9ieXRlcyddID4gMCkgeyAkbGFzdF9yZXF1ZXN0ZWRfbGVuID0gbWluKCRsZW4s ICRtZFsndW5yZWFkX2J5dGVzJ10pOyAkYnVmZiAuPSBmcmVhZCgkcmVzb3VyY2UsICRsYXN0X3Jl cXVlc3RlZF9sZW4pOyBicmVhazsgfSBlbHNlIHsgJHRtcCA9IGZyZWFkKCRyZXNvdXJjZSwgJGxl bik7ICRsYXN0X3JlcXVlc3RlZF9sZW4gPSAkbGVuOyAkYnVmZiAuPSAkdG1wOyBpZiAoc3RybGVu KCR0bXApIDwgJGxlbikgeyBicmVhazsgfSB9IGlmICgkcmVzb3VyY2UgIT0gJG1zZ3NvY2spIHsg bXlfcHJpbnQoImJ1ZmY6ICckYnVmZiciKTsgfSAkciA9IEFycmF5KCRyZXNvdXJjZSk7IH0gbXlf cHJpbnQoc3ByaW50ZigiRG9uZSB3aXRoIHRoZSBiaWcgcmVhZCBsb29wIG9uICRyZXNvdXJjZSwg Z290ICVkIGJ5dGVzLCBhc2tlZCBmb3IgJWQgYnl0ZXMiLCBzdHJsZW4oJGJ1ZmYpLCAkbGFzdF9y ZXF1ZXN0ZWRfbGVuKSk7IGJyZWFrOyBkZWZhdWx0OiAkY2lkID0gZ2V0X2NoYW5uZWxfaWRfZnJv bV9yZXNvdXJjZSgkcmVzb3VyY2UpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaWQpOyBpZiAo JGMgYW5kICRjWydkYXRhJ10pIHsgJGJ1ZmYgPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGxlbik7 ICRjWydkYXRhJ10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGxlbik7IG15X3ByaW50KCJBaGEhIGdv dCBzb21lIGxlZnRvdmVycyIpOyB9IGVsc2UgeyBteV9wcmludCgiV3RmIGRvbid0IGtub3cgaG93 IHRvIHJlYWQgZnJvbSByZXNvdXJjZSAkcmVzb3VyY2UsIGM6ICRjIik7IGlmIChpc19hcnJheSgk YykpIHsgZHVtcF9hcnJheSgkYyk7IH0gYnJlYWs7IH0gfSBteV9wcmludChzcHJpbnRmKCJSZWFk ICVkIGJ5dGVzIiwgc3RybGVuKCRidWZmKSkpOyByZXR1cm4gJGJ1ZmY7IH0gZnVuY3Rpb24gd3Jp dGUoJHJlc291cmNlLCAkYnVmZiwgJGxlbj0wKSB7IGdsb2JhbCAkdWRwX2hvc3RfbWFwOyBpZiAo JGxlbiA9PSAwKSB7ICRsZW4gPSBzdHJsZW4oJGJ1ZmYpOyB9ICRjb3VudCA9IGZhbHNlOyBzd2l0 Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6IGlmIChhcnJheV9rZXlf ZXhpc3RzKChpbnQpJHJlc291cmNlLCAkdWRwX2hvc3RfbWFwKSkgeyBteV9wcmludCgiV3JpdGlu ZyBVRFAgc29ja2V0Iik7IGxpc3QoJGhvc3QsJHBvcnQpID0gJHVkcF9ob3N0X21hcFsoaW50KSRy ZXNvdXJjZV07ICRjb3VudCA9IHNvY2tldF9zZW5kdG8oJHJlc291cmNlLCAkYnVmZiwgJGxlbiwg JGhvc3QsICRwb3J0KTsgfSBlbHNlIHsgJGNvdW50ID0gc29ja2V0X3dyaXRlKCRyZXNvdXJjZSwg JGJ1ZmYsICRsZW4pOyB9IGJyZWFrOyBjYXNlICdzdHJlYW0nOiAkY291bnQgPSBmd3JpdGUoJHJl c291cmNlLCAkYnVmZiwgJGxlbik7IGZmbHVzaCgkcmVzb3VyY2UpOyBicmVhazsgZGVmYXVsdDog bXlfcHJpbnQoIld0ZiBkb24ndCBrbm93IGhvdyB0byB3cml0ZSB0byByZXNvdXJjZSAkcmVzb3Vy Y2UiKTsgYnJlYWs7IH0gcmV0dXJuICRjb3VudDsgfSBmdW5jdGlvbiBnZXRfcnR5cGUoJHJlc291 cmNlKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXA7IGlmIChhcnJheV9rZXlfZXhpc3RzKChp bnQpJHJlc291cmNlLCAkcmVzb3VyY2VfdHlwZV9tYXApKSB7IHJldHVybiAkcmVzb3VyY2VfdHlw ZV9tYXBbKGludCkkcmVzb3VyY2VdOyB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBzZWxlY3Qo JiRyLCAmJHcsICYkZSwgJHR2X3NlYz0wLCAkdHZfdXNlYz0wKSB7ICRzdHJlYW1zX3IgPSBhcnJh eSgpOyAkc3RyZWFtc193ID0gYXJyYXkoKTsgJHN0cmVhbXNfZSA9IGFycmF5KCk7ICRzb2NrZXRz X3IgPSBhcnJheSgpOyAkc29ja2V0c193ID0gYXJyYXkoKTsgJHNvY2tldHNfZSA9IGFycmF5KCk7 IGlmICgkcikgeyBmb3JlYWNoICgkciBhcyAkcmVzb3VyY2UpIHsgc3dpdGNoIChnZXRfcnR5cGUo JHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiAkc29ja2V0c19yW10gPSAkcmVzb3VyY2U7IGJy ZWFrOyBjYXNlICdzdHJlYW0nOiAkc3RyZWFtc19yW10gPSAkcmVzb3VyY2U7IGJyZWFrOyBkZWZh dWx0OiBteV9wcmludCgiVW5rbm93biByZXNvdXJjZSB0eXBlIik7IGJyZWFrOyB9IH0gfSBpZiAo JHcpIHsgZm9yZWFjaCAoJHcgYXMgJHJlc291cmNlKSB7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNv dXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHNvY2tldHNfd1tdID0gJHJlc291cmNlOyBicmVhazsg Y2FzZSAnc3RyZWFtJzogJHN0cmVhbXNfd1tdID0gJHJlc291cmNlOyBicmVhazsgZGVmYXVsdDog bXlfcHJpbnQoIlVua25vd24gcmVzb3VyY2UgdHlwZSIpOyBicmVhazsgfSB9IH0gaWYgKCRlKSB7 IGZvcmVhY2ggKCRlIGFzICRyZXNvdXJjZSkgeyBzd2l0Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2Up KSB7IGNhc2UgJ3NvY2tldCc6ICRzb2NrZXRzX2VbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGNhc2Ug J3N0cmVhbSc6ICRzdHJlYW1zX2VbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGRlZmF1bHQ6IG15X3By aW50KCJVbmtub3duIHJlc291cmNlIHR5cGUiKTsgYnJlYWs7IH0gfSB9ICRuX3NvY2tldHMgPSBj b3VudCgkc29ja2V0c19yKSArIGNvdW50KCRzb2NrZXRzX3cpICsgY291bnQoJHNvY2tldHNfZSk7 ICRuX3N0cmVhbXMgPSBjb3VudCgkc3RyZWFtc19yKSArIGNvdW50KCRzdHJlYW1zX3cpICsgY291 bnQoJHN0cmVhbXNfZSk7ICRyID0gYXJyYXkoKTsgJHcgPSBhcnJheSgpOyAkZSA9IGFycmF5KCk7 IGlmIChjb3VudCgkc29ja2V0c19yKT09MCkgeyAkc29ja2V0c19yID0gbnVsbDsgfSBpZiAoY291 bnQoJHNvY2tldHNfdyk9PTApIHsgJHNvY2tldHNfdyA9IG51bGw7IH0gaWYgKGNvdW50KCRzb2Nr ZXRzX2UpPT0wKSB7ICRzb2NrZXRzX2UgPSBudWxsOyB9IGlmIChjb3VudCgkc3RyZWFtc19yKT09 MCkgeyAkc3RyZWFtc19yID0gbnVsbDsgfSBpZiAoY291bnQoJHN0cmVhbXNfdyk9PTApIHsgJHN0 cmVhbXNfdyA9IG51bGw7IH0gaWYgKGNvdW50KCRzdHJlYW1zX2UpPT0wKSB7ICRzdHJlYW1zX2Ug PSBudWxsOyB9ICRjb3VudCA9IDA7IGlmICgkbl9zb2NrZXRzID4gMCkgeyAkcmVzID0gc29ja2V0 X3NlbGVjdCgkc29ja2V0c19yLCAkc29ja2V0c193LCAkc29ja2V0c19lLCAkdHZfc2VjLCAkdHZf dXNlYyk7IGlmIChmYWxzZSA9PT0gJHJlcykgeyByZXR1cm4gZmFsc2U7IH0gaWYgKGlzX2FycmF5 KCRyKSAmJiBpc19hcnJheSgkc29ja2V0c19yKSkgeyAkciA9IGFycmF5X21lcmdlKCRyLCAkc29j a2V0c19yKTsgfSBpZiAoaXNfYXJyYXkoJHcpICYmIGlzX2FycmF5KCRzb2NrZXRzX3cpKSB7ICR3 ID0gYXJyYXlfbWVyZ2UoJHcsICRzb2NrZXRzX3cpOyB9IGlmIChpc19hcnJheSgkZSkgJiYgaXNf YXJyYXkoJHNvY2tldHNfZSkpIHsgJGUgPSBhcnJheV9tZXJnZSgkZSwgJHNvY2tldHNfZSk7IH0g JGNvdW50ICs9ICRyZXM7IH0gaWYgKCRuX3N0cmVhbXMgPiAwKSB7ICRyZXMgPSBzdHJlYW1fc2Vs ZWN0KCRzdHJlYW1zX3IsICRzdHJlYW1zX3csICRzdHJlYW1zX2UsICR0dl9zZWMsICR0dl91c2Vj KTsgaWYgKGZhbHNlID09PSAkcmVzKSB7IHJldHVybiBmYWxzZTsgfSBpZiAoaXNfYXJyYXkoJHIp ICYmIGlzX2FycmF5KCRzdHJlYW1zX3IpKSB7ICRyID0gYXJyYXlfbWVyZ2UoJHIsICRzdHJlYW1z X3IpOyB9IGlmIChpc19hcnJheSgkdykgJiYgaXNfYXJyYXkoJHN0cmVhbXNfdykpIHsgJHcgPSBh cnJheV9tZXJnZSgkdywgJHN0cmVhbXNfdyk7IH0gaWYgKGlzX2FycmF5KCRlKSAmJiBpc19hcnJh eSgkc3RyZWFtc19lKSkgeyAkZSA9IGFycmF5X21lcmdlKCRlLCAkc3RyZWFtc19lKTsgfSAkY291 bnQgKz0gJHJlczsgfSByZXR1cm4gJGNvdW50OyB9IGZ1bmN0aW9uIGFkZF9yZWFkZXIoJHJlc291 cmNlKSB7IGdsb2JhbCAkcmVhZGVyczsgaWYgKGlzX3Jlc291cmNlKCRyZXNvdXJjZSkgJiYgIWlu X2FycmF5KCRyZXNvdXJjZSwgJHJlYWRlcnMpKSB7ICRyZWFkZXJzW10gPSAkcmVzb3VyY2U7IH0g fSBmdW5jdGlvbiByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSkgeyBnbG9iYWwgJHJlYWRlcnM7IGlm IChpbl9hcnJheSgkcmVzb3VyY2UsICRyZWFkZXJzKSkgeyBmb3JlYWNoICgkcmVhZGVycyBhcyAk a2V5ID0+ICRyKSB7IGlmICgkciA9PSAkcmVzb3VyY2UpIHsgdW5zZXQoJHJlYWRlcnNbJGtleV0p OyB9IH0gfSB9IG9iX2ltcGxpY2l0X2ZsdXNoKCk7IGlmIChNWV9ERUJVR0dJTkcpIHsgZXJyb3Jf cmVwb3J0aW5nKEVfQUxMKTsgfSBlbHNlIHsgZXJyb3JfcmVwb3J0aW5nKDApOyB9IEBpZ25vcmVf dXNlcl9hYm9ydCh0cnVlKTsgQHNldF90aW1lX2xpbWl0KDApOyBAaWdub3JlX3VzZXJfYWJvcnQo MSk7IEBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyAkR0xPQkFMU1snVVVJRCddID0g UEFZTE9BRF9VVUlEOyAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10gPSBTRVNTSU9OX0dVSUQ7ICRH TE9CQUxTWydBRVNfS0VZJ10gPSBudWxsOyAkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9IGZhbHNl OyBpZiAoIWlzc2V0KCRHTE9CQUxTWydtc2dzb2NrJ10pKSB7ICRpcGFkZHIgPSAnMTI3LjAuMC4x JzsgJHBvcnQgPSA0NDQ0OyBteV9wcmludCgiRG9uJ3QgaGF2ZSBhIG1zZ3NvY2ssIHRyeWluZyB0 byBjb25uZWN0KCRpcGFkZHIsICRwb3J0KSIpOyAkbXNnc29jayA9IGNvbm5lY3QoJGlwYWRkciwg JHBvcnQpOyBpZiAoISRtc2dzb2NrKSB7IGRpZSgpOyB9IH0gZWxzZSB7ICRtc2dzb2NrID0gJEdM T0JBTFNbJ21zZ3NvY2snXTsgJG1zZ3NvY2tfdHlwZSA9ICRHTE9CQUxTWydtc2dzb2NrX3R5cGUn XTsgc3dpdGNoICgkbXNnc29ja190eXBlKSB7IGNhc2UgJ3NvY2tldCc6IHJlZ2lzdGVyX3NvY2tl dCgkbXNnc29jayk7IGJyZWFrOyBjYXNlICdzdHJlYW0nOiBkZWZhdWx0OiByZWdpc3Rlcl9zdHJl YW0oJG1zZ3NvY2spOyB9IH0gYWRkX3JlYWRlcigkbXNnc29jayk7ICRyPSRHTE9CQUxTWydyZWFk ZXJzJ107ICR3PU5VTEw7JGU9TlVMTDskdD0xOyB3aGlsZSAoZmFsc2UgIT09ICgkY250ID0gc2Vs ZWN0KCRyLCAkdywgJGUsICR0KSkpIHsgJHJlYWRfZmFpbGVkID0gZmFsc2U7IGZvciAoJGkgPSAw OyAkaSA8ICRjbnQ7ICRpKyspIHsgJHJlYWR5ID0gJHJbJGldOyBpZiAoJHJlYWR5ID09ICRtc2dz b2NrKSB7ICRwYWNrZXQgPSByZWFkKCRtc2dzb2NrLCAzMik7IG15X3ByaW50KHNwcmludGYoIlJl YWQgcmV0dXJuZWQgJXMgYnl0ZXMiLCBzdHJsZW4oJHBhY2tldCkpKTsgaWYgKGZhbHNlPT0kcGFj a2V0KSB7IG15X3ByaW50KCJSZWFkIGZhaWxlZCBvbiBtYWluIHNvY2tldCwgYmFpbGluZyIpOyBi cmVhayAyOyB9ICR4b3IgPSBzdWJzdHIoJHBhY2tldCwgMCwgNCk7ICRoZWFkZXIgPSB4b3JfYnl0 ZXMoJHhvciwgc3Vic3RyKCRwYWNrZXQsIDQsIDI4KSk7ICRsZW5fYXJyYXkgPSB1bnBhY2soIk5s ZW4iLCBzdWJzdHIoJGhlYWRlciwgMjAsIDQpKTsgJGxlbiA9ICRsZW5fYXJyYXlbJ2xlbiddICsg MzIgLSA4OyB3aGlsZSAoc3RybGVuKCRwYWNrZXQpIDwgJGxlbikgeyAkcGFja2V0IC49IHJlYWQo JG1zZ3NvY2ssICRsZW4tc3RybGVuKCRwYWNrZXQpKTsgfSAkcmVzcG9uc2UgPSBjcmVhdGVfcmVz cG9uc2UoZGVjcnlwdF9wYWNrZXQoeG9yX2J5dGVzKCR4b3IsICRwYWNrZXQpKSk7IHdyaXRlX3Rs dl90b19zb2NrZXQoJG1zZ3NvY2ssICRyZXNwb25zZSk7IH0gZWxzZSB7ICRkYXRhID0gcmVhZCgk cmVhZHkpOyBpZiAoZmFsc2UgPT09ICRkYXRhKSB7IGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5u ZWwoJHJlYWR5KTsgfSBlbHNlaWYgKHN0cmxlbigkZGF0YSkgPiAwKXsgbXlfcHJpbnQoc3ByaW50 ZigiUmVhZCByZXR1cm5lZCAlcyBieXRlcyIsIHN0cmxlbigkZGF0YSkpKTsgJHJlcXVlc3QgPSBo YW5kbGVfcmVzb3VyY2VfcmVhZF9jaGFubmVsKCRyZWFkeSwgJGRhdGEpOyBpZiAoJHJlcXVlc3Qp IHsgd3JpdGVfdGx2X3RvX3NvY2tldCgkbXNnc29jaywgJHJlcXVlc3QpOyB9IH0gfSB9ICRyID0g JEdMT0JBTFNbJ3JlYWRlcnMnXTsgfSBteV9wcmludCgiRmluaXNoZWQiKTsgbXlfcHJpbnQoIi0t LS0tLS0tLS0tLS0tLS0tLS0tIik7IGNsb3NlKCRtc2dzb2NrKTs=