From 3816c47a58ec42ff2e4a5bdda7552a1913701c46 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Fri, 1 May 2020 11:30:50 -0700 Subject: [PATCH] 1. Removed dead code from service-manager.js2. 2. Updated win-dispatcher to create task using command line parameters, instead of stdin, negating need to export/import XML to fix non-english characters --- microscript/ILibDuktape_Polyfills.c | 2 +- modules/service-manager.js | 14 -------- modules/win-dispatcher.js | 53 ++++++++--------------------- 3 files changed, 16 insertions(+), 53 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 70f4305..b7d1182 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2093,7 +2093,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('win-bcd', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQpmdW5jdGlvbiBnZXRLZXlzKCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgIlxcU3lzdGVtMzJcXGJjZGVkaXQuZXhlIiwgWydiY2RlZGl0JywgJy9lbnVtJywgJ3tjdXJyZW50fSddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkuc3BsaXQoJ1xyXG4nKTsNCiAgICBsaW5lcy5zaGlmdCgpOyBsaW5lcy5zaGlmdCgpOw0KDQogICAgZm9yICh2YXIgaSBpbiBsaW5lcykNCiAgICB7DQogICAgICAgIHZhciB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnICcpOw0KICAgICAgICB2YXIga2V5ID0gdG9rZW5zLnNoaWZ0KCk7DQogICAgICAgIHZhciB2YWx1ZSA9IHRva2Vucy5qb2luKCcgJykudHJpbSgpOw0KICAgICAgICByZXRba2V5XSA9IHZhbHVlOw0KICAgIH0NCiAgICByZXR1cm4gKHJldCk7DQp9DQpmdW5jdGlvbiBnZXRLZXkoa2V5KQ0Kew0KICAgIHJldHVybiAodGhpcy5nZXRLZXlzKClba2V5XSk7DQp9DQpmdW5jdGlvbiBzZXRLZXkoa2V5LCB2YWx1ZSkNCnsNCiAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgIlxcU3lzdGVtMzJcXGJjZGVkaXQuZXhlIiwgWydiY2RlZGl0JywgJy9zZXQnLCAne2N1cnJlbnR9Jywga2V5LCB2YWx1ZV0pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQp9DQpmdW5jdGlvbiBkZWxldGVLZXkoa2V5KQ0Kew0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAiXFxTeXN0ZW0zMlxcYmNkZWRpdC5leGUiLCBbJ2JjZGVkaXQnLCAnL2RlbGV0ZXZhbHVlJywgJ3tjdXJyZW50fScsIGtleV0pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQp9DQoNCmZ1bmN0aW9uIGVuYWJsZVNhZmVNb2RlU2VydmljZShzZXJ2aWNlTmFtZSkNCnsNCiAgICByZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5Xcml0ZUtleShyZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5IS0VZLkxvY2FsTWFjaGluZSwgJ1NZU1RFTVxcQ3VycmVudENvbnRyb2xTZXRcXENvbnRyb2xcXFNhZmVib290XFxOZXR3b3JrXFwnICsgc2VydmljZU5hbWUsIG51bGwsICdTZXJ2aWNlJyk7DQp9DQpmdW5jdGlvbiBpc1NhZmVNb2RlU2VydmljZShzZXJ2aWNlTmFtZSkNCnsNCiAgICB2YXIgcmVnID0gcmVxdWlyZSgnd2luLXJlZ2lzdHJ5Jyk7DQogICAgdmFyIGtleSA9IHsgZGVmYXVsdDogJ25vbmUnIH07DQogICAgdHJ5IHsga2V5ID0gcmVnLlF1ZXJ5S2V5KHJlZy5IS0VZLkxvY2FsTWFjaGluZSwgJ1NZU1RFTVxcQ3VycmVudENvbnRyb2xTZXRcXENvbnRyb2xcXFNhZmVib290XFxOZXR3b3JrXFwnICsgc2VydmljZU5hbWUpOyB9IGNhdGNoIChxa2UpIHsgfQ0KICAgIHJldHVybiAoa2V5LmRlZmF1bHQgPT0gJ1NlcnZpY2UnKTsNCn0NCmZ1bmN0aW9uIGRpc2FibGVTYWZlTW9kZVNlcnZpY2Uoc2VydmljZU5hbWUpDQp7DQogICAgdHJ5DQogICAgew0KICAgICAgICByZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5EZWxldGVLZXkocmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykuSEtFWS5Mb2NhbE1hY2hpbmUsICdTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxDb250cm9sXFxTYWZlYm9vdFxcTmV0d29ya1xcJyArIHNlcnZpY2VOYW1lKTsNCiAgICB9DQogICAgY2F0Y2goeCkNCiAgICB7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiByZXN0YXJ0KGRlbGF5KQ0Kew0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAiXFxTeXN0ZW0zMlxcc2h1dGRvd24uZXhlIiwgWydzaHV0ZG93bicsICcvcicsICcvdCcsIGRlbGF5IT1udWxsP2RlbGF5LnRvU3RyaW5nKCk6JzAnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7fSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCn0NCg0KaWYgKHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplID09IDQgJiYgcmVxdWlyZSgnb3MnKS5hcmNoKCkgPT0gJ3g2NCcpDQp7DQogICAgbW9kdWxlLmV4cG9ydHMgPQ0KICAgIHsNCiAgICAgICAgZW5hYmxlU2FmZU1vZGVTZXJ2aWNlOiBlbmFibGVTYWZlTW9kZVNlcnZpY2UsDQogICAgICAgIGRpc2FibGVTYWZlTW9kZVNlcnZpY2U6IGRpc2FibGVTYWZlTW9kZVNlcnZpY2UsIHJlc3RhcnQ6IHJlc3RhcnQsIGlzU2FmZU1vZGVTZXJ2aWNlOiBpc1NhZmVNb2RlU2VydmljZQ0KICAgIH07DQp9DQplbHNlDQp7DQogICAgbW9kdWxlLmV4cG9ydHMgPQ0KICAgICAgICB7DQogICAgICAgICAgICBnZXRLZXlzOiBnZXRLZXlzLCBzZXRLZXk6IHNldEtleSwgZGVsZXRlS2V5OiBkZWxldGVLZXksIGVuYWJsZVNhZmVNb2RlU2VydmljZTogZW5hYmxlU2FmZU1vZGVTZXJ2aWNlLA0KICAgICAgICAgICAgZGlzYWJsZVNhZmVNb2RlU2VydmljZTogZGlzYWJsZVNhZmVNb2RlU2VydmljZSwgZ2V0S2V5OiBnZXRLZXksIHJlc3RhcnQ6IHJlc3RhcnQsIGlzU2FmZU1vZGVTZXJ2aWNlOiBpc1NhZmVNb2RlU2VydmljZQ0KICAgICAgICB9Ow0KDQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAiYm9vdE1vZGUiLA0KICAgICAgICB7DQogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLlF1ZXJ5S2V5KHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLkhLRVkuTG9jYWxNYWNoaW5lLCAnU1lTVEVNXFxDdXJyZW50Q29udHJvbFNldFxcQ29udHJvbFxcU2FmZWJvb3RcXE9wdGlvbicsICdPcHRpb25WYWx1ZScpOw0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHYpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCdTQUZFX01PREVfTkVUV09SSycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCdTQUZFX01PREUnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjYXRjaCAoeCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoJ05PUk1BTCcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQp9', 'base64').toString());"); // win-dispatcher a helper to run JavaScript as a particular user. Refer to modules/win-dispatcher.js - duk_peval_string_noresult(ctx, "addModule('win-dispatcher', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGRpc3BhdGNoKG9wdGlvbnMpDQp7DQogICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm1vZHVsZXMgfHwgIW9wdGlvbnMubGF1bmNoIHx8ICFvcHRpb25zLmxhdW5jaC5tb2R1bGUgfHwgIW9wdGlvbnMubGF1bmNoLm1ldGhvZCB8fCAhb3B0aW9ucy5sYXVuY2guYXJncykgeyB0aHJvdyAoJ0ludmFsaWQgUGFyYW1ldGVycycpOyB9DQoNCiAgICB2YXIgaXBjSW50ZWdlcg0KICAgIHZhciByZXQgPSB7IG9wdGlvbnM6IG9wdGlvbnMgfTsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpLmNyZWF0ZUV2ZW50KCdjb25uZWN0aW9uJyk7DQoNCiAgICByZXQuX2lwYyA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOyByZXQuX2lwYy5wYXJlbnQgPSByZXQ7DQogICAgcmV0Ll9pcGMyID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlU2VydmVyKCk7IHJldC5faXBjMi5wYXJlbnQgPSByZXQ7DQogICAgcmV0Ll9pcGMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICByZXQuX2lwYzIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeyB9KTsNCg0KICAgIHdoaWxlICh0cnVlKQ0KICAgIHsNCiAgICAgICAgaXBjSW50ZWdlciA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMTAwMCcsICc5OTk5Jyk7DQogICAgICAgIHJldC5faXBjUGF0aCA9ICdcXFxcLlxccGlwZVxcdGFza1JlZGlyZWN0aW9uLScgKyBpcGNJbnRlZ2VyOw0KICAgICAgICANCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5faXBjLmxpc3Rlbih7IHBhdGg6IHJldC5faXBjUGF0aCwgd3JpdGFibGVBbGw6IHRydWUgfSk7DQogICAgICAgICAgICByZXQuX2lwYzIubGlzdGVuKHsgcGF0aDogcmV0Ll9pcGNQYXRoICsgJ0MnLCB3cml0YWJsZUFsbDogdHJ1ZSB9KTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoICh4KQ0KICAgICAgICB7DQogICAgICAgIH0NCiAgICB9DQogICAgdmFyIHN0ciA9IEJ1ZmZlci5mcm9tKCJyZXF1aXJlKCd3aW4tY29uc29sZScpLmhpZGUoKTtyZXF1aXJlKCd3aW4tZGlzcGF0Y2hlcicpLmNvbm5lY3QoJyIgKyBpcGNJbnRlZ2VyICsgIicpOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCiAgICByZXQuX2lwYzIub25jZSgnY29ubmVjdGlvbicsIGZ1bmN0aW9uIG9uQ29ubmVjdChzKQ0KICAgIHsNCiAgICAgICAgdGhpcy5wYXJlbnQuX2NvbnRyb2wgPSBzOw0KICAgICAgICB0aGlzLnBhcmVudC5fY29udHJvbC5fcGFyZW50ID0gdGhpczsNCiAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJncykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGQsIGggPSBCdWZmZXIuYWxsb2MoNCk7DQogICAgICAgICAgICBkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoeyBjb21tYW5kOiAnaW52b2tlJywgdmFsdWU6IHsgbWV0aG9kOiBtZXRob2QsIGFyZ3M6IGFyZ3MgfSB9KSk7DQogICAgICAgICAgICBoLndyaXRlVUludDMyTEUoZC5sZW5ndGggKyA0KTsNCiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wud3JpdGUoaCk7DQogICAgICAgICAgICB0aGlzLl9jb250cm9sLndyaXRlKGQpOw0KICAgICAgICB9Ow0KICAgICAgICBzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5fcGFyZW50LmNsb3NlKCk7IH0pOw0KICAgIH0pOw0KICAgIHJldC5faXBjLm9uY2UoJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiBvbkNvbm5lY3QocykNCiAgICB7DQogICAgICAgIHRoaXMucGFyZW50Ll9jbGllbnQgPSBzOw0KICAgICAgICB0aGlzLnBhcmVudC5fY2xpZW50Ll9wYXJlbnQgPSB0aGlzOw0KICAgICAgICB2YXIgZCwgaCA9IEJ1ZmZlci5hbGxvYyg0KTsNCg0KICAgICAgICBmb3IgKHZhciBtIGluIHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlcykNCiAgICAgICAgew0KICAgICAgICAgICAgZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHsgY29tbWFuZDogJ2FkZE1vZHVsZScsIHZhbHVlOiB7IG5hbWU6IHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlc1ttXS5uYW1lLCBqczogdGhpcy5wYXJlbnQub3B0aW9ucy5tb2R1bGVzW21dLnNjcmlwdCB9IH0pKTsNCiAgICAgICAgICAgIGgud3JpdGVVSW50MzJMRShkLmxlbmd0aCArIDQpOw0KICAgICAgICAgICAgcy53cml0ZShoKTsNCiAgICAgICAgICAgIHMud3JpdGUoZCk7DQogICAgICAgIH0NCiAgICAgICAgZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHsgY29tbWFuZDogJ2xhdW5jaCcsIHZhbHVlOiB7IG1vZHVsZTogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2gubW9kdWxlLCBtZXRob2Q6IHRoaXMucGFyZW50Lm9wdGlvbnMubGF1bmNoLm1ldGhvZCwgYXJnczogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2guYXJncyB9IH0pKTsNCiAgICAgICAgaC53cml0ZVVJbnQzMkxFKGQubGVuZ3RoICsgNCk7DQogICAgICAgIHMud3JpdGUoaCk7DQogICAgICAgIHMud3JpdGUoZCk7DQogICAgICAgIHMub25jZSgnZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLl9wYXJlbnQuY2xvc2UoKTsgfSk7DQogICAgICAgIHRoaXMucGFyZW50LmVtaXQoJ2Nvbm5lY3Rpb24nLCBzKTsNCiAgICB9KTsNCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxzeXN0ZW0zMlxcY21kLmV4ZScsIFsnY21kJ10pOw0KICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KDQogICAgaWYgKG9wdGlvbnMudXNlcikNCiAgICB7DQogICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdTQ0hUQVNLUyAvQ1JFQVRFIC9GIC9UTiBNZXNoVXNlclRhc2sgL1NDIE9OQ0UgL1NUIDAwOjAwIC9SVSAnICsgb3B0aW9ucy51c2VyICsgJyAvVFIgIlxcIicgKyBwcm9jZXNzLmV4ZWNQYXRoICsgJ1xcIiAtYjY0ZXhlYyAnICsgc3RyICsgJyJcclxuJyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBMb2NhbFN5c3RlbQ0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1NDSFRBU0tTIC9DUkVBVEUgL0YgL1ROIE1lc2hVc2VyVGFzayAvU0MgT05DRSAvU1QgMDA6MDAgL1JVIFNZU1RFTSAvVFIgIlxcIicgKyBwcm9jZXNzLmV4ZWNQYXRoICsgJ1xcIiAtYjY0ZXhlYyAnICsgc3RyICsgJyJcclxuJyk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBSdW5uaW5nIGFzIGxvZ2dlZCBpbiB1c2VyDQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnU0NIVEFTS1MgL0NSRUFURSAvRiAvVE4gTWVzaFVzZXJUYXNrIC9TQyBPTkNFIC9TVCAwMDowMCAvVFIgIlxcIicgKyBwcm9jZXNzLmV4ZWNQYXRoICsgJ1xcIiAtYjY0ZXhlYyAnICsgc3RyICsgJyJcclxuJyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAocHJvY2Vzcy5leGVjUGF0aC5sZW5ndGggPT0gQnVmZmVyLmZyb20ocHJvY2Vzcy5leGVjUGF0aCkubGVuZ3RoKQ0KICAgIHsNCiAgICAgICAgLy8gZXhlY1BhdGggY29udGFpbnMgb25seSBBU0NJSSwgc28gd2UgY2FuIHJ1biB0aGUgdGFzayBhcyBpcw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnU0NIVEFTS1MgL1JVTiAvVE4gTWVzaFVzZXJUYXNrXHJcbicpOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnU0NIVEFTS1MgL0RFTEVURSAvRiAvVE4gTWVzaFVzZXJUYXNrXHJcbicpOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxyXG4nKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgLy8gZXhlY1BhdGggY29udGFpbnMgVVRGOCwgc28gd2UgbXVzdCB1c2UgVVRGLTE2IHRvIGNyZWF0ZSB0aGUgVGFzaw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxyXG4nKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAvLyBHZXQgdGhlIFRhc2sgWE1MIGZyb20gV2luZG93cywgd2hpY2ggd2lsbCBoYXZlIHRoZSBleGVjUGF0aCBnYXJibGVkDQogICAgICAgIHZhciB4bWwgPSByZXF1aXJlKCd0YXNrLXNjaGVkdWxlcicpLmdldFRhc2tYbWwoJ01lc2hVc2VyVGFzaycpOw0KDQogICAgICAgIC8vIEVkaXQgdGhlIDxFeGVjPiBlbGVtZW50cw0KICAgICAgICByZXF1aXJlKCd0YXNrLXNjaGVkdWxlcicpLmVkaXRBY3Rpb25Db21tYW5kKCdNZXNoVXNlclRhc2snLCAnIicgKyBwcm9jZXNzLmV4ZWNQYXRoICsgJyInLCAnLWI2NGV4ZWMgJyArIHN0ciwgeG1sKTsNCg0KICAgICAgICAvLyBSdW4gdGhlIGVkaXRlZCBUYXNrDQogICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXHN5c3RlbTMyXFxjbWQuZXhlJywgWydjbWQnXSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1NDSFRBU0tTIC9SVU4gL1ROIE1lc2hVc2VyVGFza1xyXG4nKTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1NDSFRBU0tTIC9ERUxFVEUgL0YgL1ROIE1lc2hVc2VyVGFza1xyXG4nKTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2V4aXRcclxuJyk7DQoNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICB9DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBjb25uZWN0KGlwYykNCnsNCiAgICB2YXIgaXBjUGF0aCA9ICdcXFxcLlxccGlwZVxcdGFza1JlZGlyZWN0aW9uLScgKyBpcGM7DQogICAgZ2xvYmFsLmlwYzJDbGllbnQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVDb25uZWN0aW9uKHsgcGF0aDogaXBjUGF0aCArICdDJyB9LCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY0xlbiA9IGMucmVhZFVJbnQzMkxFKDApOw0KICAgICAgICAgICAgaWYgKGNMZW4gPiBjLmxlbmd0aCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnVuc2hpZnQoYyk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIGNtZCA9IEpTT04ucGFyc2UoYy5zbGljZSg0LCBjTGVuKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAoY21kLmNvbW1hbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlJzoNCiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLl9wcm94eVN0cmVhbVtjbWQudmFsdWUubWV0aG9kXS5hcHBseShnbG9iYWwuX3Byb3h5U3RyZWFtLCBjbWQudmFsdWUuYXJncyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoY0xlbiA8IGMubGVuZ3RoKSB7IHRoaXMudW5zaGlmdChjLnNsaWNlKGNMZW4pKTsgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCiAgICBnbG9iYWwuaXBjQ2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbih7IHBhdGg6IGlwY1BhdGggfSwgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNMZW4gPSBjLnJlYWRVSW50MzJMRSgwKTsNCiAgICAgICAgICAgIGlmIChjTGVuID4gYy5sZW5ndGgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy51bnNoaWZ0KGMpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBjbWQgPSBKU09OLnBhcnNlKGMuc2xpY2UoNCwgY0xlbikudG9TdHJpbmcoKSk7DQogICAgICAgICAgICBzd2l0Y2ggKGNtZC5jb21tYW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2FkZE1vZHVsZSc6DQogICAgICAgICAgICAgICAgICAgIGFkZE1vZHVsZShjbWQudmFsdWUubmFtZSwgY21kLnZhbHVlLmpzKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnbGF1bmNoJzoNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHJlcXVpcmUoY21kLnZhbHVlLm1vZHVsZSk7DQogICAgICAgICAgICAgICAgICAgIGdsb2JhbC5fcHJveHlTdHJlYW0gPSBvYmpbY21kLnZhbHVlLm1ldGhvZF0uYXBwbHkob2JqLCBjbWQudmFsdWUuYXJncyk7DQogICAgICAgICAgICAgICAgICAgIGdsb2JhbC5fcHJveHlTdHJlYW0ucGlwZSh0aGlzLCB7IGVuZDogZmFsc2UgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucGlwZShnbG9iYWwuX3Byb3h5U3RyZWFtLCB7IGVuZDogZmFsc2UgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLl9wcm94eVN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGNMZW4gPCBjLmxlbmd0aCkgeyB0aGlzLnVuc2hpZnQoYy5zbGljZShjTGVuKSk7IH0NCiAgICAgICAgfSk7DQogICAgfSk7DQp9DQoNCm1vZHVsZS5leHBvcnRzID0geyBkaXNwYXRjaDogZGlzcGF0Y2gsIGNvbm5lY3Q6IGNvbm5lY3QgfTsNCg0K', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('win-dispatcher', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGRpc3BhdGNoKG9wdGlvbnMpDQp7DQogICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm1vZHVsZXMgfHwgIW9wdGlvbnMubGF1bmNoIHx8ICFvcHRpb25zLmxhdW5jaC5tb2R1bGUgfHwgIW9wdGlvbnMubGF1bmNoLm1ldGhvZCB8fCAhb3B0aW9ucy5sYXVuY2guYXJncykgeyB0aHJvdyAoJ0ludmFsaWQgUGFyYW1ldGVycycpOyB9DQoNCiAgICB2YXIgaXBjSW50ZWdlcg0KICAgIHZhciByZXQgPSB7IG9wdGlvbnM6IG9wdGlvbnMgfTsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpLmNyZWF0ZUV2ZW50KCdjb25uZWN0aW9uJyk7DQoNCiAgICByZXQuX2lwYyA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOyByZXQuX2lwYy5wYXJlbnQgPSByZXQ7DQogICAgcmV0Ll9pcGMyID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlU2VydmVyKCk7IHJldC5faXBjMi5wYXJlbnQgPSByZXQ7DQogICAgcmV0Ll9pcGMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICByZXQuX2lwYzIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeyB9KTsNCg0KICAgIHdoaWxlICh0cnVlKQ0KICAgIHsNCiAgICAgICAgaXBjSW50ZWdlciA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMTAwMCcsICc5OTk5Jyk7DQogICAgICAgIHJldC5faXBjUGF0aCA9ICdcXFxcLlxccGlwZVxcdGFza1JlZGlyZWN0aW9uLScgKyBpcGNJbnRlZ2VyOw0KICAgICAgICANCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5faXBjLmxpc3Rlbih7IHBhdGg6IHJldC5faXBjUGF0aCwgd3JpdGFibGVBbGw6IHRydWUgfSk7DQogICAgICAgICAgICByZXQuX2lwYzIubGlzdGVuKHsgcGF0aDogcmV0Ll9pcGNQYXRoICsgJ0MnLCB3cml0YWJsZUFsbDogdHJ1ZSB9KTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoICh4KQ0KICAgICAgICB7DQogICAgICAgIH0NCiAgICB9DQogICAgdmFyIHN0ciA9IEJ1ZmZlci5mcm9tKCJyZXF1aXJlKCd3aW4tY29uc29sZScpLmhpZGUoKTtyZXF1aXJlKCd3aW4tZGlzcGF0Y2hlcicpLmNvbm5lY3QoJyIgKyBpcGNJbnRlZ2VyICsgIicpOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCiAgICByZXQuX2lwYzIub25jZSgnY29ubmVjdGlvbicsIGZ1bmN0aW9uIG9uQ29ubmVjdChzKQ0KICAgIHsNCiAgICAgICAgdGhpcy5wYXJlbnQuX2NvbnRyb2wgPSBzOw0KICAgICAgICB0aGlzLnBhcmVudC5fY29udHJvbC5fcGFyZW50ID0gdGhpczsNCiAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJncykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGQsIGggPSBCdWZmZXIuYWxsb2MoNCk7DQogICAgICAgICAgICBkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoeyBjb21tYW5kOiAnaW52b2tlJywgdmFsdWU6IHsgbWV0aG9kOiBtZXRob2QsIGFyZ3M6IGFyZ3MgfSB9KSk7DQogICAgICAgICAgICBoLndyaXRlVUludDMyTEUoZC5sZW5ndGggKyA0KTsNCiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wud3JpdGUoaCk7DQogICAgICAgICAgICB0aGlzLl9jb250cm9sLndyaXRlKGQpOw0KICAgICAgICB9Ow0KICAgICAgICBzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5fcGFyZW50LmNsb3NlKCk7IH0pOw0KICAgIH0pOw0KICAgIHJldC5faXBjLm9uY2UoJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiBvbkNvbm5lY3QocykNCiAgICB7DQogICAgICAgIHRoaXMucGFyZW50Ll9jbGllbnQgPSBzOw0KICAgICAgICB0aGlzLnBhcmVudC5fY2xpZW50Ll9wYXJlbnQgPSB0aGlzOw0KICAgICAgICB2YXIgZCwgaCA9IEJ1ZmZlci5hbGxvYyg0KTsNCg0KICAgICAgICBmb3IgKHZhciBtIGluIHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlcykNCiAgICAgICAgew0KICAgICAgICAgICAgZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHsgY29tbWFuZDogJ2FkZE1vZHVsZScsIHZhbHVlOiB7IG5hbWU6IHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlc1ttXS5uYW1lLCBqczogdGhpcy5wYXJlbnQub3B0aW9ucy5tb2R1bGVzW21dLnNjcmlwdCB9IH0pKTsNCiAgICAgICAgICAgIGgud3JpdGVVSW50MzJMRShkLmxlbmd0aCArIDQpOw0KICAgICAgICAgICAgcy53cml0ZShoKTsNCiAgICAgICAgICAgIHMud3JpdGUoZCk7DQogICAgICAgIH0NCiAgICAgICAgZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHsgY29tbWFuZDogJ2xhdW5jaCcsIHZhbHVlOiB7IG1vZHVsZTogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2gubW9kdWxlLCBtZXRob2Q6IHRoaXMucGFyZW50Lm9wdGlvbnMubGF1bmNoLm1ldGhvZCwgYXJnczogdGhpcy5wYXJlbnQub3B0aW9ucy5sYXVuY2guYXJncyB9IH0pKTsNCiAgICAgICAgaC53cml0ZVVJbnQzMkxFKGQubGVuZ3RoICsgNCk7DQogICAgICAgIHMud3JpdGUoaCk7DQogICAgICAgIHMud3JpdGUoZCk7DQogICAgICAgIHMub25jZSgnZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLl9wYXJlbnQuY2xvc2UoKTsgfSk7DQogICAgICAgIHRoaXMucGFyZW50LmVtaXQoJ2Nvbm5lY3Rpb24nLCBzKTsNCiAgICB9KTsNCg0KICAgIHZhciBwYXJtcyA9ICcvQyBTQ0hUQVNLUyAvQ1JFQVRFIC9GIC9UTiBNZXNoVXNlclRhc2sgL1ogL1NDIE9OQ0UgL1NUIDAwOjAwICc7DQogICAgaWYgKG9wdGlvbnMudXNlcikNCiAgICB7DQogICAgICAgIC8vIFNwZWNpZmllZCBVc2VyDQogICAgICAgIHBhcm1zICs9ICgnL1JVICcgKyBvcHRpb25zLnVzZXIgKyAnICcpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocHJvY2Vzcy5waWQpLnRzaWQgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gTG9jYWxTeXN0ZW0NCiAgICAgICAgICAgIHBhcm1zICs9ICgnL1JVIFNZU1RFTSAnKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwYXJtcyArPSAoJy9UUiAiXFwiJyArIHByb2Nlc3MuZXhlY1BhdGggKyAnXFwiIC1iNjRleGVjICcgKyBzdHIgKyAnIicpOw0KDQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXHN5c3RlbTMyXFxjbWQuZXhlJywgW3Bhcm1zXSk7DQogICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxzeXN0ZW0zMlxcY21kLmV4ZScsIFsnL0MgU0NIVEFTS1MgL1JVTiAvVE4gTWVzaFVzZXJUYXNrJ10pOw0KICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGNvbm5lY3QoaXBjKQ0Kew0KICAgIHZhciBpcGNQYXRoID0gJ1xcXFwuXFxwaXBlXFx0YXNrUmVkaXJlY3Rpb24tJyArIGlwYzsNCiAgICBnbG9iYWwuaXBjMkNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24oeyBwYXRoOiBpcGNQYXRoICsgJ0MnIH0sIGZ1bmN0aW9uICgpDQogICAgew0KICAgICAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjTGVuID0gYy5yZWFkVUludDMyTEUoMCk7DQogICAgICAgICAgICBpZiAoY0xlbiA+IGMubGVuZ3RoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMudW5zaGlmdChjKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgY21kID0gSlNPTi5wYXJzZShjLnNsaWNlKDQsIGNMZW4pLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgc3dpdGNoIChjbWQuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdpbnZva2UnOg0KICAgICAgICAgICAgICAgICAgICBnbG9iYWwuX3Byb3h5U3RyZWFtW2NtZC52YWx1ZS5tZXRob2RdLmFwcGx5KGdsb2JhbC5fcHJveHlTdHJlYW0sIGNtZC52YWx1ZS5hcmdzKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChjTGVuIDwgYy5sZW5ndGgpIHsgdGhpcy51bnNoaWZ0KGMuc2xpY2UoY0xlbikpOyB9DQogICAgICAgIH0pOw0KICAgIH0pOw0KICAgIGdsb2JhbC5pcGNDbGllbnQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVDb25uZWN0aW9uKHsgcGF0aDogaXBjUGF0aCB9LCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY0xlbiA9IGMucmVhZFVJbnQzMkxFKDApOw0KICAgICAgICAgICAgaWYgKGNMZW4gPiBjLmxlbmd0aCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnVuc2hpZnQoYyk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIGNtZCA9IEpTT04ucGFyc2UoYy5zbGljZSg0LCBjTGVuKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAoY21kLmNvbW1hbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnYWRkTW9kdWxlJzoNCiAgICAgICAgICAgICAgICAgICAgYWRkTW9kdWxlKGNtZC52YWx1ZS5uYW1lLCBjbWQudmFsdWUuanMpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdsYXVuY2gnOg0KICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gcmVxdWlyZShjbWQudmFsdWUubW9kdWxlKTsNCiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLl9wcm94eVN0cmVhbSA9IG9ialtjbWQudmFsdWUubWV0aG9kXS5hcHBseShvYmosIGNtZC52YWx1ZS5hcmdzKTsNCiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLl9wcm94eVN0cmVhbS5waXBlKHRoaXMsIHsgZW5kOiBmYWxzZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXBlKGdsb2JhbC5fcHJveHlTdHJlYW0sIHsgZW5kOiBmYWxzZSB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBnbG9iYWwuX3Byb3h5U3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoY0xlbiA8IGMubGVuZ3RoKSB7IHRoaXMudW5zaGlmdChjLnNsaWNlKGNMZW4pKTsgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSB7IGRpc3BhdGNoOiBkaXNwYXRjaCwgY29ubmVjdDogY29ubmVjdCB9Ow0KDQo=', 'base64').toString());"); // win-firewall is a helper to Modify Windows Firewall Filters. Refer to modules/win-firewall.js char *_winfirewall = ILibMemory_Allocate(60573, 0, NULL, NULL); diff --git a/modules/service-manager.js b/modules/service-manager.js index 268a2ab..2e94ad8 100644 --- a/modules/service-manager.js +++ b/modules/service-manager.js @@ -69,20 +69,6 @@ function perpareFolders(folderPath) } } -function win_deleteLater(delaySeconds, commandPath, arguments) -{ - if (process.platform != 'win32') { throw ('This Method is only supported on Windows'); } - var needFix = (commandPath.length != Buffer.from(commandPath).length) || (arguments.length != Buffer.from(arguments).length); - var info = require('user-sessions').getProcessOwnerName(process.pid); - - var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - //child.stdin.write('SCHTASKS /CREATE /TN _ServiceTask /ST 00:00 /ONCE /RU ' + info.domain + '\\' + info.user + ' /TR "\\"' + process.env['windir'] + '\\system32\\cmd.exe /C choice /C Y /N /D Y /T 2 & del' - -} - - function parseServiceStatus(token) { var j = {}; diff --git a/modules/win-dispatcher.js b/modules/win-dispatcher.js index edfea18..b761fa7 100644 --- a/modules/win-dispatcher.js +++ b/modules/win-dispatcher.js @@ -79,58 +79,35 @@ function dispatch(options) this.parent.emit('connection', s); }); - var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']); - child.stderr.on('data', function (c) { }); - child.stdout.on('data', function (c) { }); - + var parms = '/C SCHTASKS /CREATE /F /TN MeshUserTask /SC ONCE /ST 00:00 '; if (options.user) { - child.stdin.write('SCHTASKS /CREATE /F /TN MeshUserTask /SC ONCE /ST 00:00 /RU ' + options.user + ' /TR "\\"' + process.execPath + '\\" -b64exec ' + str + '"\r\n'); + // Specified User + parms += ('/RU ' + options.user + ' '); } else { if (require('user-sessions').getProcessOwnerName(process.pid).tsid == 0) { // LocalSystem - child.stdin.write('SCHTASKS /CREATE /F /TN MeshUserTask /SC ONCE /ST 00:00 /RU SYSTEM /TR "\\"' + process.execPath + '\\" -b64exec ' + str + '"\r\n'); - } - else - { - // Running as logged in user - child.stdin.write('SCHTASKS /CREATE /F /TN MeshUserTask /SC ONCE /ST 00:00 /TR "\\"' + process.execPath + '\\" -b64exec ' + str + '"\r\n'); + parms += ('/RU SYSTEM '); } } + parms += ('/TR "\\"' + process.execPath + '\\" -b64exec ' + str + '"'); - if (process.execPath.length == Buffer.from(process.execPath).length) - { - // execPath contains only ASCII, so we can run the task as is - child.stdin.write('SCHTASKS /RUN /TN MeshUserTask\r\n'); - child.stdin.write('SCHTASKS /DELETE /F /TN MeshUserTask\r\n'); - child.stdin.write('exit\r\n'); - child.waitExit(); - } - else - { - // execPath contains UTF8, so we must use UTF-16 to create the Task - child.stdin.write('exit\r\n'); - child.waitExit(); + var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', [parms]); + child.stderr.on('data', function (c) { console.log(c.toString()); }); + child.stdout.on('data', function (c) { console.log(c.toString()); }); + child.waitExit(); - // Get the Task XML from Windows, which will have the execPath garbled - var xml = require('task-scheduler').getTaskXml('MeshUserTask'); + var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']); + child.stderr.on('data', function (c) { }); + child.stdout.on('data', function (c) { }); + child.stdin.write('SCHTASKS /RUN /TN MeshUserTask\r\n'); + child.stdin.write('SCHTASKS /DELETE /F /TN MeshUserTask\r\nexit\r\n'); - // Edit the elements - require('task-scheduler').editActionCommand('MeshUserTask', '"' + process.execPath + '"', '-b64exec ' + str, xml); + child.waitExit(); - // Run the edited Task - child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']); - child.stderr.on('data', function (c) { }); - child.stdout.on('data', function (c) { }); - child.stdin.write('SCHTASKS /RUN /TN MeshUserTask\r\n'); - child.stdin.write('SCHTASKS /DELETE /F /TN MeshUserTask\r\n'); - child.stdin.write('exit\r\n'); - - child.waitExit(); - } return (ret); }