diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 5bcbc04..7b98a85 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2203,11 +2203,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // notifybar-desktop, refer to modules/notifybar-desktop.js - char *_notifybardesktop = ILibMemory_Allocate(36919, 0, NULL, NULL); - memcpy_s(_notifybardesktop + 0, 21096, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHRyc2l6ZSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplOw0KdmFyIENsaWVudE1lc3NhZ2UgPSAzMzsNCg0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9jaGVjayh0aXRsZSwgdHNpZCkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW0odGl0bGUsIHRzaWQpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHdpbmRvd3Nfbm90aWZ5YmFyX3N5c3RlbSh0aXRsZSwgdHNpZCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQoNCiAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuX2V4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLmNoaWxkLmtpbGwoKTsgfSk7DQoNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJ1xcJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdHlwZTogMSwgdWlkOiB0c2lkIH0pOw0KICAgIHJldC5jaGlsZC5wYXJlbnQgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gd2luZG93c19ub3RpZnliYXJfbG9jYWwodGl0bGUpDQp7DQogICAgdmFyIE1lc3NhZ2VQdW1wOw0KICAgIHZhciByZXQ7DQoNCiAgICBNZXNzYWdlUHVtcCA9IHJlcXVpcmUoJ3dpbi1tZXNzYWdlLXB1bXAnKTsNCiAgICByZXQgPSB7IF9PYmplY3RJRDogJ25vdGlmeWJhci1kZXNrdG9wLldpbmRvd3MnLCB0aXRsZTogdGl0bGUsIF9wdW1wczogW10sIF9wcm9taXNlOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCkgfTsNCg0KICAgIHJldC5fcHJvbWlzZS5ub3RpZnliYXIgPSByZXQ7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0uY2xvc2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3B1bXBzID0gW107DQogICAgICAgIH0pOw0KDQogICAgcmV0Ll9wcm9taXNlLnRoZW4oZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICB2YXIgb2Zmc2V0Ow0KICAgICAgICB2YXIgYmFyV2lkdGgsIG1vbldpZHRoLCBvZmZzZXQsIGJhckhlaWdodCwgbW9uSGVpZ2h0Ow0KDQogICAgICAgIGZvciAodmFyIGkgaW4gbSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTW9uaXRvcjogJyArIGkgKyAnID0gV2lkdGhbJyArIChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KSArICddJyk7DQogICAgICAgICAgICBtb25XaWR0aCA9IChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KTsNCiAgICAgICAgICAgIG1vbkhlaWdodCA9IChtW2ldLmJvdHRvbSAtIG1baV0udG9wKTsNCiAgICAgICAgICAgIGJhcldpZHRoID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuMzApOw0KICAgICAgICAgICAgYmFySGVpZ2h0ID0gTWF0aC5mbG9vcihtb25IZWlnaHQgKiAwLjAzNSk7DQogICAgICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC41MCkgLSBNYXRoLmZsb29yKGJhcldpZHRoICogMC41MCk7DQogICAgICAgICAgICBzdGFydCA9IG1baV0ubGVmdCArIG9mZnNldDsNCiAgICAgICAgICAgIHZhciBvcHRpb25zID0NCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdzoNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2luc3R5bGVzOiBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfVklTSUJMRSB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19CT1JERVIgfCBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfQ0FQVElPTiB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19TWVNNRU5VLA0KICAgICAgICAgICAgICAgICAgICAgICAgeDogc3RhcnQsIHk6IG1baV0udG9wLCBsZWZ0OiBtW2ldLmxlZnQsIHJpZ2h0OiBtW2ldLnJpZ2h0LCB3aWR0aDogYmFyV2lkdGgsIGhlaWdodDogYmFySGVpZ2h0LCB0aXRsZTogdGhpcy5ub3RpZnliYXIudGl0bGUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICANCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wdXNoKG5ldyBNZXNzYWdlUHVtcChvcHRpb25zKSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm5vdGlmeWJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnBlZWsoKS5vbignaHduZCcsIGZ1bmN0aW9uIChoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX0hBTkRMRSA9IGg7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkub24oJ2V4aXQnLCBmdW5jdGlvbiAoaCkNCiAgICAgICAgICAgIHsgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vdGlmeWJhci5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wc1tpXS5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5lbWl0KCdjbG9zZScpOw0KICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcyA9IFtdOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gb25XaW5kb3dzTWVzc2FnZShtc2cpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDEzMykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coIldNX05DUEFJTlQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDcwKSAgIC8vIFdlIGFyZSBpbnRlcmNlcHRpbmcgV01fV0lORE9XUE9TQ0hBTkdJTkcgdG8gRElTQUJMRSBtb3ZpbmcgdGhlIHdpbmRvdw0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX0hBTkRMRSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyc2l6ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDI7IC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgPCB0aGlzLl9vcHRpb25zLndpbmRvdy5sZWZ0IHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXNnLmxwYXJhbV9yYXcuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDEyLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDIgIC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpIDwgdGhpcy5fb3B0aW9ucy53aW5kb3cubGVmdCB8fCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDMyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDIwLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCg0KZnVuY3Rpb24geF9ub3RpZnliYXJfY2hlY2sodGl0bGUpDQp7DQogICAgdmFyIHNjcmlwdCA9IEJ1ZmZlci5mcm9tKCJyZXF1aXJlKCdub3RpZnliYXItZGVza3RvcCcpKCciICsgdGl0bGUgKyAiJykub24oJ2Nsb3NlJywgZnVuY3Rpb24oKXtwcm9jZXNzLmV4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICB2YXIgbWluID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLm1pblVpZCgpOw0KICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIHZhciBzZWxmID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLlNlbGYoKTsNCg0KICAgIGlmIChzZWxmICE9IDAgfHwgdWlkID09IDApDQogICAgew0KICAgICAgICByZXR1cm4gKHhfbm90aWZ5YmFyKHRpdGxlKSk7IC8vIE5vIERpc3BhdGNoaW5nIG5lY2Vzc2FyeQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAvLyBXZSBhcmUgcm9vdCwgc28gd2Ugc2hvdWxkIHRyeSB0byBzcGF3biBhIGNoaWxkIGludG8gdGhlIHVzZXIncyBkZXNrdG9wDQogICAgICAgIGlmICh1aWQgPCBtaW4gJiYgdWlkICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIExldHMgaG9vayBsb2dpbiBldmVudCwgc28gd2UgY2FuIHJlc3Bhd24gdGhlIGJhcnMgbGF0ZXINCiAgICAgICAgICAgIHZhciByZXQgPSB7IG1pbjogbWluIH07DQogICAgICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgICAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2VkJywgdGhpcy5fY2hhbmdlZCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlMigpDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXQuX2NoYW5nZWQgPSBmdW5jdGlvbiBfY2hhbmdlZCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBfY2hhbmdlZC5zZWxmOw0KICAgICAgICAgICAgICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgIGlmICh1aWQgPj0gdGhhdC5taW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jbG9zZTIgPSBmdW5jdGlvbiAoKSB7IHRoaXMuY2hpbGQua2lsbCgpOyB9Ow0KICAgICAgICAgICAgICAgICAgICB2YXIgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICB0aGF0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdWlkOiB1aWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQucGFyZW50ID0gdGhhdDsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50LmVtaXQoJ2Nsb3NlJywgY29kZSk7IH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQogICAgICAgICAgICByZXQuX2NoYW5nZWQuc2VsZiA9IHJldDsNCiAgICAgICAgICAgIHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5vbignY2hhbmdlZCcsIHJldC5fY2hhbmdlZCk7DQogICAgICAgICAgICByZXQuX2Nsb3NlMiA9IGZ1bmN0aW9uIF9jbG9zZTIoKSB7IHRoaXMuZW1pdCgnY2xvc2UnKTsgfTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgIGlmICgheGluZm8pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRocm93KCdYU2VydmVyIEluaXRpYWxpemF0aW9uIEVycm9yJykNCiAgICAgICAgfQ0KICAgICAgICB2YXIgcmV0ID0ge307DQogICAgICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpIHsgdGhpcy5jaGlsZC5raWxsKCk7IH0pOw0KDQogICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnLycpLnBvcCgpLCAnLWI2NGV4ZWMnLCBzY3JpcHRdLCB7IHVpZDogdWlkLCBlbnY6IHhpbmZvLmV4cG9ydEVudigpIH0pOw0KICAgICAgICByZXQuY2hpbGQucGFyZW50ID0gcmV0Ow0KICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuZW1pdCgnY2xvc2UnLCBjb2RlKTsgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24geF9ub3RpZnliYXIodGl0bGUpDQp7DQogICAgcmV0ID0geyBfT2JqZWN0SUQ6ICdub3RpZnliYXItZGVza3RvcC5YJywgdGl0bGU6IHRpdGxlLCBfd2luZG93czogW10sIF9wcm9taXNlOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCksIG1vbml0b3JzOiBbXSwgd29ya3NwYWNlczoge30gfTsNCg0KICAgIHJldC5fcHJvbWlzZS5ub3RpZnliYXIgPSByZXQ7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgfSk7DQoNCiAgICByZXQuX3Byb21pc2UuY3JlYXRlQmFycyA9IGZ1bmN0aW9uIChtKQ0KICAgIHsNCiAgICAgICAgZm9yICh2YXIgaSBpbiBtKQ0KICAgICAgICB7DQogICAgICAgICAgICBtb25XaWR0aCA9IChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KTsNCiAgICAgICAgICAgIG1vbkhlaWdodCA9IChtW2ldLmJvdHRvbSAtIG1baV0udG9wKTsNCiAgICAgICAgICAgIGJhcldpZHRoID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuMzApOw0KICAgICAgICAgICAgYmFySGVpZ2h0ID0gTWF0aC5mbG9vcihtb25IZWlnaHQgKiAwLjAzNSk7DQogICAgICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC41MCkgLSBNYXRoLmZsb29yKGJhcldpZHRoICogMC41MCk7DQogICAgICAgICAgICBzdGFydCA9IG1baV0ubGVmdCArIG9mZnNldDsNCg0KICAgICAgICAgICAgdmFyIHdoaXRlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YV2hpdGVQaXhlbChtW2ldLmRpc3BsYXksIG1baV0uc2NyZWVuSWQpLlZhbDsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnB1c2goew0KICAgICAgICAgICAgICAgIHJvb3Q6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFJvb3RXaW5kb3cobVtpXS5kaXNwbGF5LCBtW2ldLnNjcmVlbklkKSwNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBtW2ldLmRpc3BsYXksIGlkOiBtW2ldLnNjcmVlZElkDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5yb290LCBzdGFydCwgMCwgYmFyV2lkdGgsIDEsIDAsIHdoaXRlLCB3aGl0ZSk7DQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhTdG9yZU5hbWUobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyLCByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSh0aGlzLm5vdGlmeWJhci50aXRsZSkpOw0KDQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5zZXRXaW5kb3dTaXplSGludHMobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyLCBzdGFydCwgMCwgYmFyV2lkdGgsIDEsIGJhcldpZHRoLCAxLCBiYXJXaWR0aCwgMSk7DQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5oaWRlV2luZG93SWNvbihtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5yb290LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyKTsNCg0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuc2V0QWxsb3dlZEFjdGlvbnMobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyLCByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5NT1RJRl9GTEFHUy5NV01fRlVOQ19DTE9TRSk7DQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5zZXRBbHdheXNPblRvcChtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5yb290LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyKTsNCg0KDQogICAgICAgICAgICB2YXIgd21fZGVsZXRlX3dpbmRvd19hdG9tID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5Y", 16000); - memcpy_s(_notifybardesktop + 16000, 5096, "SW50ZXJuQXRvbShtW2ldLmRpc3BsYXksIHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZVZhcmlhYmxlKCdXTV9ERUxFVEVfV0lORE9XJyksIDApLlZhbDsNCiAgICAgICAgICAgIHZhciBhdG9tcyA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgYXRvbXMudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHdtX2RlbGV0ZV93aW5kb3dfYXRvbSk7DQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhTZXRXTVByb3RvY29scyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIGF0b21zLCAxKTsNCg0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YTWFwV2luZG93KG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhcik7DQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhGbHVzaChtW2ldLmRpc3BsYXkpOw0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50ID0gcmVxdWlyZSgnRGVzY3JpcHRvckV2ZW50cycpLmFkZERlc2NyaXB0b3IocmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YQ29ubmVjdGlvbk51bWJlcihtW2ldLmRpc3BsYXkpLlZhbCwgeyByZWFkc2V0OiB0cnVlIH0pOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudC5hdG9tID0gd21fZGVsZXRlX3dpbmRvd19hdG9tOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudC5yZXQgPSB0aGlzLm5vdGlmeWJhcjsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQuX2Rpc3BsYXkgPSBtW2ldLmRpc3BsYXk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50Lm9uKCdyZWFkc2V0JywgZnVuY3Rpb24gKGZkKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBYRSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgICAgIHdoaWxlIChyZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhQZW5kaW5nKHRoaXMuX2Rpc3BsYXkpLlZhbCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWE5leHRFdmVudFN5bmModGhpcy5fZGlzcGxheSwgWEUpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoWEUuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSA9PSBDbGllbnRNZXNzYWdlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpZW50VHlwZSA9IFhFLkRlcmVmKHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplID09IDggPyA1NiA6IDI4LCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudFR5cGUgPT0gdGhpcy5hdG9tKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKGZkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhDbG9zZURpc3BsYXkodGhpcy5fZGlzcGxheSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LmVtaXQoJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Ll93aW5kb3dzLmNsZWFyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH07DQogICAgcmV0Ll9wcm9taXNlLnRoZW4oZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICB2YXIgb2Zmc2V0Ow0KICAgICAgICB2YXIgYmFyV2lkdGgsIG1vbldpZHRoLCBvZmZzZXQsIGJhckhlaWdodCwgbW9uSGVpZ2h0Ow0KICAgICAgICB0aGlzLm5vdGlmeWJhci5tb25pdG9ycyA9IG07DQogICAgICAgIGlmIChtLmxlbmd0aCA+IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciB3cyA9IDA7DQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB3cyA9IG1bMF0uZGlzcGxheS5nZXRDdXJyZW50V29ya3NwYWNlKCk7DQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgY2F0Y2god2V4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci53b3Jrc3BhY2VzW3dzXSA9IHRydWU7DQogICAgICAgICAgICB0aGlzLmNyZWF0ZUJhcnMobSk7DQogICAgICAgICAgICBtWzBdLmRpc3BsYXkuX25vdGlmeUJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgbVswXS5kaXNwbGF5Lm9uKCd3b3Jrc3BhY2VDaGFuZ2VkJywgZnVuY3Rpb24gKHcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoIXRoaXMuX25vdGlmeUJhci53b3Jrc3BhY2VzW3ddKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5QmFyLndvcmtzcGFjZXNbd10gPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlCYXIuX3Byb21pc2UuY3JlYXRlQmFycyh0aGlzLl9ub3RpZnlCYXIubW9uaXRvcnMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgDQogICAgfSk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlYm94KHRpdGxlKQ0Kew0KICAgIHZhciByZXQgPSB7fTsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLl9tZXNzYWdlQm94LmNsb3NlKCk7IH0pOw0KICAgIHJldC5fbWVzc2FnZUJveCA9IHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuY3JlYXRlKCcnLCB0aXRsZSwgMCwgWydEaXNjb25uZWN0J10pOw0KICAgIHJldC5fbWVzc2FnZUJveC50aGF0ID0gcmV0Ow0KICAgIHJldC5fbWVzc2FnZUJveC50aGVuKGZ1bmN0aW9uICgpIHsgdGhpcy50aGF0LmVtaXQoJ2Nsb3NlJyk7IH0sIGZ1bmN0aW9uICgpIHsgdGhpcy50aGF0LmVtaXQoJ2Nsb3NlJyk7IH0pOw0KICAgIHJldHVybiAocmV0KTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd3Nfbm90aWZ5YmFyX2NoZWNrOw0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5zeXN0ZW0gPSB3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW07DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB4X25vdGlmeWJhcl9jaGVjazsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtYWNvc19tZXNzYWdlYm94Ow0KICAgICAgICBicmVhazsNCn0NCg0KDQo=", 5096); - ILibBase64DecodeEx((unsigned char*)_notifybardesktop, 21096, (unsigned char*)_notifybardesktop + 21096); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "notifybar-desktop"); duk_push_string(ctx, _notifybardesktop + 21096); + char *_notifybardesktop = ILibMemory_Allocate(37242, 0, NULL, NULL); + memcpy_s(_notifybardesktop + 0, 21280, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHRyc2l6ZSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplOw0KdmFyIENsaWVudE1lc3NhZ2UgPSAzMzsNCg0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9jaGVjayh0aXRsZSwgdHNpZCkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW0odGl0bGUsIHRzaWQpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHdpbmRvd3Nfbm90aWZ5YmFyX3N5c3RlbSh0aXRsZSwgdHNpZCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQoNCiAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuX2V4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLmNoaWxkLmtpbGwoKTsgfSk7DQoNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJ1xcJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdHlwZTogMSwgdWlkOiB0c2lkIH0pOw0KICAgIHJldC5jaGlsZC5wYXJlbnQgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gd2luZG93c19ub3RpZnliYXJfbG9jYWwodGl0bGUpDQp7DQogICAgdmFyIE1lc3NhZ2VQdW1wOw0KICAgIHZhciByZXQ7DQoNCiAgICBNZXNzYWdlUHVtcCA9IHJlcXVpcmUoJ3dpbi1tZXNzYWdlLXB1bXAnKTsNCiAgICByZXQgPSB7IF9PYmplY3RJRDogJ25vdGlmeWJhci1kZXNrdG9wLldpbmRvd3MnLCB0aXRsZTogdGl0bGUsIF9wdW1wczogW10sIF9wcm9taXNlOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCkgfTsNCg0KICAgIHJldC5fcHJvbWlzZS5ub3RpZnliYXIgPSByZXQ7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0uY2xvc2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3B1bXBzID0gW107DQogICAgICAgIH0pOw0KDQogICAgcmV0Ll9wcm9taXNlLnRoZW4oZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICB2YXIgb2Zmc2V0Ow0KICAgICAgICB2YXIgYmFyV2lkdGgsIG1vbldpZHRoLCBvZmZzZXQsIGJhckhlaWdodCwgbW9uSGVpZ2h0Ow0KDQogICAgICAgIGZvciAodmFyIGkgaW4gbSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTW9uaXRvcjogJyArIGkgKyAnID0gV2lkdGhbJyArIChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KSArICddJyk7DQogICAgICAgICAgICBtb25XaWR0aCA9IChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KTsNCiAgICAgICAgICAgIG1vbkhlaWdodCA9IChtW2ldLmJvdHRvbSAtIG1baV0udG9wKTsNCiAgICAgICAgICAgIGJhcldpZHRoID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuMzApOw0KICAgICAgICAgICAgYmFySGVpZ2h0ID0gTWF0aC5mbG9vcihtb25IZWlnaHQgKiAwLjAzNSk7DQogICAgICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC41MCkgLSBNYXRoLmZsb29yKGJhcldpZHRoICogMC41MCk7DQogICAgICAgICAgICBzdGFydCA9IG1baV0ubGVmdCArIG9mZnNldDsNCiAgICAgICAgICAgIHZhciBvcHRpb25zID0NCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdzoNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2luc3R5bGVzOiBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfVklTSUJMRSB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19CT1JERVIgfCBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfQ0FQVElPTiB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19TWVNNRU5VLA0KICAgICAgICAgICAgICAgICAgICAgICAgeDogc3RhcnQsIHk6IG1baV0udG9wLCBsZWZ0OiBtW2ldLmxlZnQsIHJpZ2h0OiBtW2ldLnJpZ2h0LCB3aWR0aDogYmFyV2lkdGgsIGhlaWdodDogYmFySGVpZ2h0LCB0aXRsZTogdGhpcy5ub3RpZnliYXIudGl0bGUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICANCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wdXNoKG5ldyBNZXNzYWdlUHVtcChvcHRpb25zKSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm5vdGlmeWJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnBlZWsoKS5vbignaHduZCcsIGZ1bmN0aW9uIChoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX0hBTkRMRSA9IGg7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkub24oJ2V4aXQnLCBmdW5jdGlvbiAoaCkNCiAgICAgICAgICAgIHsgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vdGlmeWJhci5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wc1tpXS5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5lbWl0KCdjbG9zZScpOw0KICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcyA9IFtdOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gb25XaW5kb3dzTWVzc2FnZShtc2cpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDEzMykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coIldNX05DUEFJTlQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDcwKSAgIC8vIFdlIGFyZSBpbnRlcmNlcHRpbmcgV01fV0lORE9XUE9TQ0hBTkdJTkcgdG8gRElTQUJMRSBtb3ZpbmcgdGhlIHdpbmRvdw0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX0hBTkRMRSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyc2l6ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDI7IC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgPCB0aGlzLl9vcHRpb25zLndpbmRvdy5sZWZ0IHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXNnLmxwYXJhbV9yYXcuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDEyLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDIgIC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpIDwgdGhpcy5fb3B0aW9ucy53aW5kb3cubGVmdCB8fCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDMyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDIwLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCg0KZnVuY3Rpb24geF9ub3RpZnliYXJfY2hlY2sodGl0bGUpDQp7DQogICAgdmFyIHNjcmlwdCA9IEJ1ZmZlci5mcm9tKCJyZXF1aXJlKCdub3RpZnliYXItZGVza3RvcCcpKCciICsgdGl0bGUgKyAiJykub24oJ2Nsb3NlJywgZnVuY3Rpb24oKXtwcm9jZXNzLmV4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICB2YXIgbWluID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLm1pblVpZCgpOw0KICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIHZhciBzZWxmID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLlNlbGYoKTsNCg0KICAgIGlmIChzZWxmICE9IDAgfHwgdWlkID09IDApDQogICAgew0KICAgICAgICByZXR1cm4gKHhfbm90aWZ5YmFyKHRpdGxlKSk7IC8vIE5vIERpc3BhdGNoaW5nIG5lY2Vzc2FyeQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAvLyBXZSBhcmUgcm9vdCwgc28gd2Ugc2hvdWxkIHRyeSB0byBzcGF3biBhIGNoaWxkIGludG8gdGhlIHVzZXIncyBkZXNrdG9wDQogICAgICAgIGlmICh1aWQgPCBtaW4gJiYgdWlkICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIExldHMgaG9vayBsb2dpbiBldmVudCwgc28gd2UgY2FuIHJlc3Bhd24gdGhlIGJhcnMgbGF0ZXINCiAgICAgICAgICAgIHZhciByZXQgPSB7IG1pbjogbWluIH07DQogICAgICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgICAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykucmVtb3ZlTGlzdGVuZXIoJ2NoYW5nZWQnLCB0aGlzLl9jaGFuZ2VkKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2UyKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXQuX2NoYW5nZWQgPSBmdW5jdGlvbiBfY2hhbmdlZCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBfY2hhbmdlZC5zZWxmOw0KICAgICAgICAgICAgICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgIGlmICh1aWQgPj0gdGhhdC5taW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jbG9zZTIgPSBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmtpbGwoKTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnLycpLnBvcCgpLCAnLWI2NGV4ZWMnLCBzY3JpcHRdLCB7IHVpZDogdWlkLCBlbnY6IHhpbmZvLmV4cG9ydEVudigpIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGF0LmNoaWxkLnBhcmVudCA9IHRoYXQ7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgcmV0Ll9jaGFuZ2VkLnNlbGYgPSByZXQ7DQogICAgICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykub24oJ2NoYW5nZWQnLCByZXQuX2NoYW5nZWQpOw0KICAgICAgICAgICAgcmV0Ll9jbG9zZTIgPSBmdW5jdGlvbiBfY2xvc2UyKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgaWYgKCF4aW5mbykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3coJ1hTZXJ2ZXIgSW5pdGlhbGl6YXRpb24gRXJyb3InKQ0KICAgICAgICB9DQogICAgICAgIHZhciByZXQgPSB7fTsNCiAgICAgICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLmNoaWxkLmtpbGwoKTsgfSk7DQoNCiAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdWlkOiB1aWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgICAgIHJldC5jaGlsZC5wYXJlbnQgPSByZXQ7DQogICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB4X25vdGlmeWJhcih0aXRsZSkNCnsNCiAgICByZXQgPSB7IF9PYmplY3RJRDogJ25vdGlmeWJhci1kZXNrdG9wLlgnLCB0aXRsZTogdGl0bGUsIF93aW5kb3dzOiBbXSwgX3Byb21pc2U6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKSwgbW9uaXRvcnM6IFtdLCB3b3Jrc3BhY2VzOiB7fSB9Ow0KDQogICAgcmV0Ll9wcm9taXNlLm5vdGlmeWJhciA9IHJldDsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICB9KTsNCg0KICAgIHJldC5fcHJvbWlzZS5jcmVhdGVCYXJzID0gZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICBmb3IgKHZhciBpIGluIG0pDQogICAgICAgIHsNCiAgICAgICAgICAgIG1vbldpZHRoID0gKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpOw0KICAgICAgICAgICAgbW9uSGVpZ2h0ID0gKG1baV0uYm90dG9tIC0gbVtpXS50b3ApOw0KICAgICAgICAgICAgYmFyV2lkdGggPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC4zMCk7DQogICAgICAgICAgICBiYXJIZWlnaHQgPSBNYXRoLmZsb29yKG1vbkhlaWdodCAqIDAuMDM1KTsNCiAgICAgICAgICAgIG9mZnNldCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjUwKSAtIE1hdGguZmxvb3IoYmFyV2lkdGggKiAwLjUwKTsNCiAgICAgICAgICAgIHN0YXJ0ID0gbVtpXS5sZWZ0ICsgb2Zmc2V0Ow0KDQogICAgICAgICAgICB2YXIgd2hpdGUgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhXaGl0ZVBpeGVsKG1baV0uZGlzcGxheSwgbVtpXS5zY3JlZW5JZCkuVmFsOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucHVzaCh7DQogICAgICAgICAgICAgICAgcm9vdDogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YUm9vdFdpbmRvdyhtW2ldLmRpc3BsYXksIG1baV0uc2NyZWVuSWQpLA0KICAgICAgICAgICAgICAgIGRpc3BsYXk6IG1baV0uZGlzcGxheSwgaWQ6IG1baV0uc2NyZWVkSWQNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YQ3JlYXRlU2ltcGxlV2luZG93KG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLnJvb3QsIHN0YXJ0LCAwLCBiYXJXaWR0aCwgMSwgMCwgd2hpdGUsIHdoaXRlKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFN0b3JlTmFtZShtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZVZhcmlhYmxlKHRoaXMubm90aWZ5YmFyLnRpdGxlKSk7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldFdpbmRvd1NpemVIaW50cyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHN0YXJ0LCAwLCBiYXJXaWR0aCwgMSwgYmFyV2lkdGgsIDEsIGJhcldpZHRoLCAxKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmhpZGVXaW5kb3dJY29uKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLnJvb3QsIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIpOw0KDQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5zZXRBbGxvd2VkQWN0aW9ucyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLk1PVElGX0ZMQUdTLk1XTV9GVU5DX0NMT1NFKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldEFsd2F5c09uVG9wKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3Mu", 16000); + memcpy_s(_notifybardesktop + 16000, 5280, "cGVlaygpLnJvb3QsIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIpOw0KDQoNCiAgICAgICAgICAgIHZhciB3bV9kZWxldGVfd2luZG93X2F0b20gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhJbnRlcm5BdG9tKG1baV0uZGlzcGxheSwgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlVmFyaWFibGUoJ1dNX0RFTEVURV9XSU5ET1cnKSwgMCkuVmFsOw0KICAgICAgICAgICAgdmFyIGF0b21zID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICBhdG9tcy50b0J1ZmZlcigpLndyaXRlVUludDMyTEUod21fZGVsZXRlX3dpbmRvd19hdG9tKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFNldFdNUHJvdG9jb2xzKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgYXRvbXMsIDEpOw0KDQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhNYXBXaW5kb3cobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWEZsdXNoKG1baV0uZGlzcGxheSk7DQoNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQgPSByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykuYWRkRGVzY3JpcHRvcihyZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhDb25uZWN0aW9uTnVtYmVyKG1baV0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50LmF0b20gPSB3bV9kZWxldGVfd2luZG93X2F0b207DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50LnJldCA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudC5fZGlzcGxheSA9IG1baV0uZGlzcGxheTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIFhFID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlVmFyaWFibGUoMTAyNCk7DQogICAgICAgICAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFBlbmRpbmcodGhpcy5fZGlzcGxheSkuVmFsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChYRS5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpID09IENsaWVudE1lc3NhZ2UpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGllbnRUeXBlID0gWEUuRGVyZWYocmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuUG9pbnRlclNpemUgPT0gOCA/IDU2IDogMjgsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50VHlwZSA9PSB0aGlzLmF0b20pDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnRGVzY3JpcHRvckV2ZW50cycpLnJlbW92ZURlc2NyaXB0b3IoZmQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWENsb3NlRGlzcGxheSh0aGlzLl9kaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuZW1pdCgnY2xvc2UnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuX3dpbmRvd3MuY2xlYXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfTsNCiAgICByZXQuX3Byb21pc2UudGhlbihmdW5jdGlvbiAobSkNCiAgICB7DQogICAgICAgIHZhciBvZmZzZXQ7DQogICAgICAgIHZhciBiYXJXaWR0aCwgbW9uV2lkdGgsIG9mZnNldCwgYmFySGVpZ2h0LCBtb25IZWlnaHQ7DQogICAgICAgIHRoaXMubm90aWZ5YmFyLm1vbml0b3JzID0gbTsNCiAgICAgICAgaWYgKG0ubGVuZ3RoID4gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHdzID0gMDsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdzID0gbVswXS5kaXNwbGF5LmdldEN1cnJlbnRXb3Jrc3BhY2UoKTsNCiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci53b3Jrc3BhY2VzW3dzXSA9IHRydWU7DQogICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVCYXJzKG0pOw0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGNhdGNoKHdleCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbVswXS5kaXNwbGF5Ll9ub3RpZnlCYXIgPSB0aGlzLm5vdGlmeWJhcjsNCiAgICAgICAgICAgIG1bMF0uZGlzcGxheS5vbignd29ya3NwYWNlQ2hhbmdlZCcsIGZ1bmN0aW9uICh3KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmKCF0aGlzLl9ub3RpZnlCYXIud29ya3NwYWNlc1t3XSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeUJhci53b3Jrc3BhY2VzW3ddID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5QmFyLl9wcm9taXNlLmNyZWF0ZUJhcnModGhpcy5fbm90aWZ5QmFyLm1vbml0b3JzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgIA0KICAgIH0pOw0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gbWFjb3NfbWVzc2FnZWJveCh0aXRsZSkNCnsNCiAgICB2YXIgcmV0ID0ge307DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpIHsgdGhpcy5fbWVzc2FnZUJveC5jbG9zZSgpOyB9KTsNCiAgICByZXQuX21lc3NhZ2VCb3ggPSByZXF1aXJlKCdtZXNzYWdlLWJveCcpLmNyZWF0ZSgnJywgdGl0bGUsIDAsIFsnRGlzY29ubmVjdCddKTsNCiAgICByZXQuX21lc3NhZ2VCb3gudGhhdCA9IHJldDsNCiAgICByZXQuX21lc3NhZ2VCb3gudGhlbihmdW5jdGlvbiAoKSB7IHRoaXMudGhhdC5lbWl0KCdjbG9zZScpOyB9LCBmdW5jdGlvbiAoKSB7IHRoaXMudGhhdC5lbWl0KCdjbG9zZScpOyB9KTsNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCnN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB3aW5kb3dzX25vdGlmeWJhcl9jaGVjazsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMuc3lzdGVtID0gd2luZG93c19ub3RpZnliYXJfc3lzdGVtOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0geF9ub3RpZnliYXJfY2hlY2s7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWFjb3NfbWVzc2FnZWJveDsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0K", 5280); + ILibBase64DecodeEx((unsigned char*)_notifybardesktop, 21280, (unsigned char*)_notifybardesktop + 21280); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "notifybar-desktop"); duk_push_string(ctx, _notifybardesktop + 21280); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_notifybardesktop); diff --git a/modules/notifybar-desktop.js b/modules/notifybar-desktop.js index bb5d628..5cfa0ee 100644 --- a/modules/notifybar-desktop.js +++ b/modules/notifybar-desktop.js @@ -183,8 +183,8 @@ function x_notifybar_check(title) .createEvent('close') .addMethod('close', function close() { - this.removeListener('changed', this._changed); - this._close2() + require('user-sessions').removeListener('changed', this._changed); + this._close2(); }); ret._changed = function _changed() { @@ -192,7 +192,10 @@ function x_notifybar_check(title) var uid = require('user-sessions').consoleUid(); if (uid >= that.min) { - that._close2 = function () { this.child.kill(); }; + that._close2 = function () + { + this.child.kill(); + }; var xinfo = require('monitor-info').getXInfo(uid); that.child = require('child_process').execFile(process.execPath, [process.execPath.split('/').pop(), '-b64exec', script], { uid: uid, env: xinfo.exportEnv() }); that.child.parent = that; @@ -203,7 +206,10 @@ function x_notifybar_check(title) }; ret._changed.self = ret; require('user-sessions').on('changed', ret._changed); - ret._close2 = function _close2() { this.emit('close'); }; + ret._close2 = function _close2() + { + this.emit('close'); + }; return (ret); } @@ -310,13 +316,13 @@ function x_notifybar(title) try { ws = m[0].display.getCurrentWorkspace(); + this.notifybar.workspaces[ws] = true; + this.createBars(m); } catch(wex) { } - this.notifybar.workspaces[ws] = true; - this.createBars(m); m[0].display._notifyBar = this.notifybar; m[0].display.on('workspaceChanged', function (w) {