diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 012936d..ad49c23 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2158,7 +2158,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // power-monitor, refer to modules/power-monitor.js for details - duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBXTV9TWVNDT01NQU5EID0gMHgwMTEyOw0KdmFyIFNDX01PTklUT1JQT1dFUiA9IDB4RjE3MDsNCnZhciBIV05EX0JST0FEQ0FTVCA9IDB4ZmZmZjsNCnZhciBFU19ESVNQTEFZX1JFUVVJUkVEID0gMHgwMDAwMDAwMjsNCg0KZnVuY3Rpb24gcG93ZXJNb25pdG9yKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdwb3dlci1tb25pdG9yJzsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2NoYW5nZWQnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ3N4JykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdiYXR0ZXJ5TGV2ZWwnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2FjZGMnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Rpc3BsYXknKTsNCg0KICAgIHRoaXMuX0FDU3RhdGUgPSAxOw0KICAgIHRoaXMuX0JhdHRlcnlMZXZlbCA9IC0xOw0KDQogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICB7DQogICAgICAgIC8vIFRoZXNlIG11c3QgYmUgcmVnaXN0ZXJlZCBCRUZPUkUgbmV3TGlzdGVuZXIgaXMgaG9va2VkIHVwDQogICAgICAgIHRoaXMub24oJ2JhdHRlcnlMZXZlbCcsIGZ1bmN0aW9uIChsZXZlbCkgeyB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSBsZXZlbDsgfSk7DQogICAgICAgIHRoaXMub24oJ2FjZGMnLCBmdW5jdGlvbiAobSkgeyB0aGlzLl9BQ1N0YXRlID0gKG0gPT0gJ0FDJyA/IDEgOiAwKTsgfSk7DQogICAgfQ0KDQogICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spDQogICAgew0KICAgICAgICBpZiAobmFtZSA9PSAnYWNkYycpIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9BQ1N0YXRlID09IDEgPyAnQUMnIDogJ0JBVFRFUlknKTsgfQ0KICAgICAgICBpZiAobmFtZSA9PSAnYmF0dGVyeUxldmVsJykgeyBpZiAodGhpcy5fQmF0dGVyeUxldmVsID49IDApIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9CYXR0ZXJ5TGV2ZWwpOyB9IH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2kgPSBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKHNlbGYpDQogICAgew0KICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJyk7IC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgV2luZG93cyBNZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGZvciB0aGVzZSBldmVudHMNCiAgICAgICAgZGVsZXRlIHNlbGYuX2k7DQogICAgfSwgdGhpcyk7DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fQUNQYXRoID0gbnVsbDsNCiAgICAgICAgdGhpcy5fQmF0dGVyeVBhdGggPSBbXTsNCg0KICAgICAgICB2YXIgZGV2aWNlcyA9IHJlcXVpcmUoJ2ZzJykucmVhZGRpclN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5Jyk7DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdNYWlucycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fQUNQYXRoID0gJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy8nOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdCYXR0ZXJ5JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aC5wdXNoKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRoaXMuX0FDUGF0aCAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9BQ1N0YXRlID0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQUNQYXRoICsgJ29ubGluZScpLnRvU3RyaW5nKCkudHJpbSgpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy5fQmF0dGVyeVBhdGgubGVuZ3RoID4gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fZ2V0QmF0dGVyeUxldmVsID0gZnVuY3Rpb24gX2dldEJhdHRlcnlMZXZlbCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHN1bSA9IDA7DQogICAgICAgICAgICAgICAgdmFyIGk7DQogICAgICAgICAgICAgICAgZm9yIChpIGluIHRoaXMuX0JhdHRlcnlQYXRoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHBhcnNlSW50KHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKHRoaXMuX0JhdHRlcnlQYXRoW2ldICsgJ2NhcGFjaXR5JykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzdW0gPSBNYXRoLmZsb29yKHN1bSAvIHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChzdW0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdGhpcy5fZ2V0QmF0dGVyeUxldmVsKCk7DQoNCiAgICAgICAgICAgIC8vIFNpbmNlIEJhdHRlcnkgTGV2ZWxzIGFyZSBub3QgcHJvcGFnYXRlZCB3aXRoIEFDUEksIHdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGNoZWNrIHRoZSBiYXR0ZXJ5IGxldmVsDQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWxDaGVjayA9IGZ1bmN0aW9uIF9CYXR0ZXJ5TGV2ZWxDaGVjaygpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuX2dldEJhdHRlcnlMZXZlbCgpOw0KICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy5fQmF0dGVyeUxldmVsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIHZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHRoaXMuX0JhdHRDaGVja0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKHNlbGYpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc2VsZi5fQmF0dGVyeUxldmVsQ2hlY2suY2FsbChzZWxmKTsNCiAgICAgICAgICAgIH0sIDMwMDAwMCwgdGhpcyk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5fYWNwaVNpbmsgPSBmdW5jdGlvbiBfYWNwaVNpbmsoYWNwaUV2ZW50KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoYWNwaUV2ZW50Lm5hbWUgPT0gJ2FjX2FkYXB0ZXInKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLl9BQ1N0YXRlID0gYWNwaUV2ZW50LnZhbHVlOw0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLmVtaXQoJ2FjZGMnLCBhY3BpRXZlbnQudmFsdWUgPT0gMSA/ICdBQycgOiAnQkFUVEVSWScpOw0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLl9CYXR0ZXJ5TGV2ZWxDaGVjaygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9hY3BpU2luay5zZWxmID0gdGhpczsNCiAgICAgICAgcmVxdWlyZSgnbGludXgtYWNwaScpLm9uKCdhY3BpJywgdGhpcy5fYWNwaVNpbmspOw0KICAgIH0NCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX2NhZmZlaW5hdGUiLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3doZXJlaXMgY2FmZmVpbmF0ZVxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsNCiAgICAgICAgICAgIH0pKCkNCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuX2dldEJhdHRlcnlMZXZlbCA9IGZ1bmN0aW9uIF9nZXRCYXR0ZXJ5TGV2ZWwoKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBtc2V0IC1nIGJhdHQgfCB0ciAnXFxuJyAnYCcgfCBhd2sgLUYnYCcgJyIpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3snKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCcgICBwb3dlcj1zcGxpdCgkMSxwd3IsIkFDIik+MT8iMSI6IjAiOycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJyAgIHNwbGl0KCQyLCBiYXR0LCAiICIpOycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJyAgIHNwbGl0KGJhdHRbMl0sY2hnLCIlIik7Jyk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnICAgcHJpbnRmICJ7XFwiYWNcXCI6ICVzLFxcImxldmVsXFwiOiAlc30iLHBvd2VyLCBjaGdbMV07ICcpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBpbmZvID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChpbmZvKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAoeyBhYzogMSwgbGV2ZWw6IC0xIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9iYXR0ZXJ5TGV2ZWxDaGVjayA9IGZ1bmN0aW9uIF9iYXR0ZXJ5TGV2ZWxDaGVjaygpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBuZXdMZXZlbCA9IHRoaXMuX2dldEJhdHRlcnlMZXZlbCgpOw0KICAgICAgICAgICAgaWYgKG5ld0xldmVsLmFjICE9IHRoaXMuX0FDU3RhdGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fQUNTdGF0ZSA9IG5ld0xldmVsLmFjOw0KICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYWNkYycsIHRoaXMuX0FDU3RhdGUgPT0gMSA/ICdBQycgOiAnQkFUVEVSWScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5ld0xldmVsLmxldmVsICE9IHRoaXMuX0JhdHRlcnlMZXZlbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSBuZXdMZXZlbC5sZXZlbDsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIHRoaXMuX0JhdHRlcnlMZXZlbCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgICAgIHZhciB0bXAgPSB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwoKTsNCiAgICAgICAgdGhpcy5fQUNTdGF0ZSA9IHRtcC5hYzsNCiAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdG1wLmxldmVsOw0KDQogICAgICAgIGlmICh0aGlzLl9CYXR0ZXJ5TGV2ZWwgPj0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fQmF0dENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLl9iYXR0ZXJ5TGV2ZWxDaGVjay5jYWxsKHNlbGYpOw0KICAgICAgICAgICAgfSwgMzAwMDAwLCB0aGlzKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICB0aGlzLnNsZWVwRGlzcGxheSA9IGZ1bmN0aW9uIHNsZWVwRGlzcGF5KGZvcmNlKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHAgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKSB7IHAuX3JlaignTm90IHN1cHBvcnRlZCcpOyByZXR1cm4gKHApOyB9DQoNCiAgICAgICAgaWYgKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFdlIGFyZSBydW5uaW5nIGFzIExvY2FsU3lzdGVtLCBzbyB3ZSBoYXZlIHRvIGZpbmQgYSB1c2VyIHNlc3Npb24gZm9yIHRoaXMgdG8gd29yaw0KICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGxhdW5jaDogeyBtb2R1bGU6ICdwb3dlci1tb25pdG9yJywgbWV0aG9kOiAnc2xlZXBEaXNwbGF5JywgYXJnczogW10gfSB9Ow0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcC5fcmVqKCdObyB1c2VycyBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLmNyZWF0ZShvcHRpb25zKTsNCiAgICAgICAgICAgIHAuY2hpbGQucHJvbWlzZSA9IHA7DQogICAgICAgICAgICBwLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2UuX3JlcygpOyB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChyZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jaGlsZCkgeyByZXF1aXJlKCd3aW4tY29uc29sZScpLmhpZGUoKTsgfQ0KICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICB2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ1VzZXIzMi5kbGwnKTsNCiAgICAgICAgICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ1NlbmRNZXNzYWdlQScpOw0KICAgICAgICAgICAgdXNlcjMyLlNlbmRNZXNzYWdlQShIV05EX0JST0FEQ0FTVCwgV01fU1lTQ09NTUFORCwgU0NfTU9OSVRPUlBPV0VSLCAyKTsNCiAgICAgICAgICAgIHAuX3JlcygpOw0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLmNoaWxkKSB7IHByb2Nlc3MuX2V4aXQoKTsgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocCk7DQogICAgfTsNCiAgICB0aGlzLndha2VEaXNwbGF5ID0gZnVuY3Rpb24gd2FrZURpc3BsYXkoKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHAgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICBzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FmZmVpbmF0ZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy5fY2FmZmVpbmF0ZSwgWydjYWZmZWluYXRlJywgJy11JywgJy10IDInXSk7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICBwLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wcm9taXNlLl9yZXMoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQucHJvbWlzZSA9IHA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHJ1bm5pbmcgYXMgTG9jYWxTeXN0ZW0sIHNvIHdlIGhhdmUgdG8gZmluZCBhIHVzZXIgc2Vzc2lvbiBmb3IgdGhpcyB0byB3b3JrDQogICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0geyBsYXVuY2g6IHsgbW9kdWxlOiAncG93ZXItbW9uaXRvcicsIG1ldGhvZDogJ3dha2VEaXNwbGF5JywgYXJnczogW10gfSB9Ow0KICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcC5fcmVqKCdObyB1c2VycyBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgcC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLmNyZWF0ZShvcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcC5jaGlsZC5wcm9taXNlID0gcDsNCiAgICAgICAgICAgICAgICAgICAgcC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5wcm9taXNlLl9yZXMoKTsgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jaGlsZCkgeyByZXF1aXJlKCd3aW4tY29uc29sZScpLmhpZGUoKTsgfQ0KICAgICAgICAgICAgICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ0tlcm5lbDMyLmRsbCcpOw0KICAgICAgICAgICAgICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1NldFRocmVhZEV4ZWN1dGlvblN0YXRlJyk7DQogICAgICAgICAgICAgICAgICAgIGtlcm5lbDMyLlNldFRocmVhZEV4ZWN1dGlvblN0YXRlKEVTX0RJU1BMQVlfUkVRVUlSRUQpOw0KICAgICAgICAgICAgICAgICAgICBwLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLmNoaWxkKSB7IHByb2Nlc3MuX2V4aXQoKTsgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgcC5fcmVzKCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIChwKTsNCiAgICB9Ow0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBwb3dlck1vbml0b3IoKTsNCg==', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBXTV9TWVNDT01NQU5EID0gMHgwMTEyOw0KdmFyIFNDX01PTklUT1JQT1dFUiA9IDB4RjE3MDsNCnZhciBIV05EX0JST0FEQ0FTVCA9IDB4ZmZmZjsNCnZhciBFU19ESVNQTEFZX1JFUVVJUkVEID0gMHgwMDAwMDAwMjsNCg0KZnVuY3Rpb24gcG93ZXJNb25pdG9yKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdwb3dlci1tb25pdG9yJzsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2NoYW5nZWQnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ3N4JykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdiYXR0ZXJ5TGV2ZWwnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2FjZGMnKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Rpc3BsYXknKTsNCg0KICAgIHRoaXMuX0FDU3RhdGUgPSAxOw0KICAgIHRoaXMuX0JhdHRlcnlMZXZlbCA9IC0xOw0KDQogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICB7DQogICAgICAgIC8vIFRoZXNlIG11c3QgYmUgcmVnaXN0ZXJlZCBCRUZPUkUgbmV3TGlzdGVuZXIgaXMgaG9va2VkIHVwDQogICAgICAgIHRoaXMub24oJ2JhdHRlcnlMZXZlbCcsIGZ1bmN0aW9uIChsZXZlbCkgeyB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSBsZXZlbDsgfSk7DQogICAgICAgIHRoaXMub24oJ2FjZGMnLCBmdW5jdGlvbiAobSkgeyB0aGlzLl9BQ1N0YXRlID0gKG0gPT0gJ0FDJyA/IDEgOiAwKTsgfSk7DQogICAgfQ0KDQogICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spDQogICAgew0KICAgICAgICBpZiAobmFtZSA9PSAnYWNkYycpIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9BQ1N0YXRlID09IDEgPyAnQUMnIDogJ0JBVFRFUlknKTsgfQ0KICAgICAgICBpZiAobmFtZSA9PSAnYmF0dGVyeUxldmVsJykgeyBpZiAodGhpcy5fQmF0dGVyeUxldmVsID49IDApIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9CYXR0ZXJ5TGV2ZWwpOyB9IH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2kgPSBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKHNlbGYpDQogICAgew0KICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJyk7IC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgV2luZG93cyBNZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGZvciB0aGVzZSBldmVudHMNCiAgICAgICAgZGVsZXRlIHNlbGYuX2k7DQogICAgfSwgdGhpcyk7DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fQUNQYXRoID0gbnVsbDsNCiAgICAgICAgdGhpcy5fQmF0dGVyeVBhdGggPSBbXTsNCg0KICAgICAgICB2YXIgZGV2aWNlcyA9IHJlcXVpcmUoJ2ZzJykucmVhZGRpclN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5Jyk7DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdNYWlucycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fQUNQYXRoID0gJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy8nOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdCYXR0ZXJ5JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aC5wdXNoKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRoaXMuX0FDUGF0aCAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9BQ1N0YXRlID0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQUNQYXRoICsgJ29ubGluZScpLnRvU3RyaW5nKCkudHJpbSgpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy5fQmF0dGVyeVBhdGgubGVuZ3RoID4gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fZ2V0QmF0dGVyeUxldmVsID0gZnVuY3Rpb24gX2dldEJhdHRlcnlMZXZlbCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHN1bSA9IDA7DQogICAgICAgICAgICAgICAgdmFyIGk7DQogICAgICAgICAgICAgICAgZm9yIChpIGluIHRoaXMuX0JhdHRlcnlQYXRoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHBhcnNlSW50KHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKHRoaXMuX0JhdHRlcnlQYXRoW2ldICsgJ2NhcGFjaXR5JykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzdW0gPSBNYXRoLmZsb29yKHN1bSAvIHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChzdW0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdGhpcy5fZ2V0QmF0dGVyeUxldmVsKCk7DQoNCiAgICAgICAgICAgIC8vIFNpbmNlIEJhdHRlcnkgTGV2ZWxzIGFyZSBub3QgcHJvcGFnYXRlZCB3aXRoIEFDUEksIHdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGNoZWNrIHRoZSBiYXR0ZXJ5IGxldmVsDQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWxDaGVjayA9IGZ1bmN0aW9uIF9CYXR0ZXJ5TGV2ZWxDaGVjaygpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuX2dldEJhdHRlcnlMZXZlbCgpOw0KICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy5fQmF0dGVyeUxldmVsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIHZhbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHRoaXMuX0JhdHRDaGVja0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKHNlbGYpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc2VsZi5fQmF0dGVyeUxldmVsQ2hlY2suY2FsbChzZWxmKTsNCiAgICAgICAgICAgIH0sIDMwMDAwMCwgdGhpcyk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5fYWNwaVNpbmsgPSBmdW5jdGlvbiBfYWNwaVNpbmsoYWNwaUV2ZW50KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoYWNwaUV2ZW50Lm5hbWUgPT0gJ2FjX2FkYXB0ZXInKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLl9BQ1N0YXRlID0gYWNwaUV2ZW50LnZhbHVlOw0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLmVtaXQoJ2FjZGMnLCBhY3BpRXZlbnQudmFsdWUgPT0gMSA/ICdBQycgOiAnQkFUVEVSWScpOw0KICAgICAgICAgICAgICAgIF9hY3BpU2luay5zZWxmLl9CYXR0ZXJ5TGV2ZWxDaGVjaygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9hY3BpU2luay5zZWxmID0gdGhpczsNCiAgICAgICAgcmVxdWlyZSgnbGludXgtYWNwaScpLm9uKCdhY3BpJywgdGhpcy5fYWNwaVNpbmspOw0KICAgIH0NCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX2NhZmZlaW5hdGUiLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3doZXJlaXMgY2FmZmVpbmF0ZVxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsNCiAgICAgICAgICAgIH0pKCkNCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuX2dldEJhdHRlcnlMZXZlbCA9IGZ1bmN0aW9uIF9nZXRCYXR0ZXJ5TGV2ZWwoKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBtc2V0IC1nIGJhdHQgfCB0ciAnXFxuJyAnYCcgfCBhd2sgLUYnYCcgJyIpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3snKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCcgICBwb3dlcj1zcGxpdCgkMSxwd3IsIkFDIik+MT8iMSI6IjAiOycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJyAgIHNwbGl0KCQyLCBiYXR0LCAiICIpOycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJyAgIHNwbGl0KGJhdHRbMl0sY2hnLCIlIik7Jyk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnICAgcHJpbnRmICJ7XFwiYWNcXCI6ICVzLFxcImxldmVsXFwiOiAlc30iLHBvd2VyLCBjaGdbMV07ICcpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBpbmZvID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChpbmZvKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAoeyBhYzogMSwgbGV2ZWw6IC0xIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9iYXR0ZXJ5TGV2ZWxDaGVjayA9IGZ1bmN0aW9uIF9iYXR0ZXJ5TGV2ZWxDaGVjaygpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBuZXdMZXZlbCA9IHRoaXMuX2dldEJhdHRlcnlMZXZlbCgpOw0KICAgICAgICAgICAgaWYgKG5ld0xldmVsLmFjICE9IHRoaXMuX0FDU3RhdGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fQUNTdGF0ZSA9IG5ld0xldmVsLmFjOw0KICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYWNkYycsIHRoaXMuX0FDU3RhdGUgPT0gMSA/ICdBQycgOiAnQkFUVEVSWScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5ld0xldmVsLmxldmVsICE9IHRoaXMuX0JhdHRlcnlMZXZlbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSBuZXdMZXZlbC5sZXZlbDsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIHRoaXMuX0JhdHRlcnlMZXZlbCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgICAgIHZhciB0bXAgPSB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwoKTsNCiAgICAgICAgdGhpcy5fQUNTdGF0ZSA9IHRtcC5hYzsNCiAgICAgICAgdGhpcy5fQmF0dGVyeUxldmVsID0gdG1wLmxldmVsOw0KDQogICAgICAgIGlmICh0aGlzLl9CYXR0ZXJ5TGV2ZWwgPj0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fQmF0dENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLl9iYXR0ZXJ5TGV2ZWxDaGVjay5jYWxsKHNlbGYpOw0KICAgICAgICAgICAgfSwgMzAwMDAwLCB0aGlzKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICB0aGlzLnNsZWVwRGlzcGxheSA9IGZ1bmN0aW9uIHNsZWVwRGlzcGF5KGZvcmNlKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHAgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHJ1bm5pbmcgYXMgTG9jYWxTeXN0ZW0sIHNvIHdlIGhhdmUgdG8gZmluZCBhIHVzZXIgc2Vzc2lvbiBmb3IgdGhpcyB0byB3b3JrDQogICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0geyBsYXVuY2g6IHsgbW9kdWxlOiAncG93ZXItbW9uaXRvcicsIG1ldGhvZDogJ3NsZWVwRGlzcGxheScsIGFyZ3M6IFtdIH0gfTsNCiAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlciA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHAuX3JlaignTm8gdXNlcnMgbG9nZ2VkIGluJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQgPSByZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jcmVhdGUob3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQucHJvbWlzZSA9IHA7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJvbWlzZS5fcmVzKCk7IH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY2hpbGQpIHsgcmVxdWlyZSgnd2luLWNvbnNvbGUnKS5oaWRlKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICAgICAgICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgnVXNlcjMyLmRsbCcpOw0KICAgICAgICAgICAgICAgICAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdTZW5kTWVzc2FnZUEnKTsNCiAgICAgICAgICAgICAgICAgICAgdXNlcjMyLlNlbmRNZXNzYWdlQShIV05EX0JST0FEQ0FTVCwgV01fU1lTQ09NTUFORCwgU0NfTU9OSVRPUlBPV0VSLCAyKTsNCiAgICAgICAgICAgICAgICAgICAgcC5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jaGlsZCkgeyBwcm9jZXNzLl9leGl0KCk7IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgICAgIHAuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuY2hpbGQucHJvbWlzZSA9IHA7DQogICAgICAgICAgICAgICAgcC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOw0KICAgICAgICAgICAgICAgIHAuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICAgICAgICAgICAgICBwLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2UuX3JlcygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLmNoaWxkLnN0ZGluLndyaXRlKCdwbXNldCBkaXNwbGF5c2xlZXBub3dcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBwLl9yZWooJ05vdCBTdXBwb3J0ZWQnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHApOw0KICAgIH07DQogICAgdGhpcy53YWtlRGlzcGxheSA9IGZ1bmN0aW9uIHdha2VEaXNwbGF5KCkNCiAgICB7DQogICAgICAgIHZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KICAgICAgICBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQogICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhZmZlaW5hdGUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuX2NhZmZlaW5hdGUsIFsnY2FmZmVpbmF0ZScsICctdScsICctdCAyJ10pOw0KICAgICAgICAgICAgICAgICAgICBwLmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uICgpIHsgfSk7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucHJvbWlzZS5fcmVzKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBwLmNoaWxkLnByb21pc2UgPSBwOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocHJvY2Vzcy5waWQpLnRzaWQgPT0gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBydW5uaW5nIGFzIExvY2FsU3lzdGVtLCBzbyB3ZSBoYXZlIHRvIGZpbmQgYSB1c2VyIHNlc3Npb24gZm9yIHRoaXMgdG8gd29yaw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHsgbGF1bmNoOiB7IG1vZHVsZTogJ3Bvd2VyLW1vbml0b3InLCBtZXRob2Q6ICd3YWtlRGlzcGxheScsIGFyZ3M6IFtdIH0gfTsNCiAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlciA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHAuX3JlaignTm8gdXNlcnMgbG9nZ2VkIGluJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQgPSByZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jcmVhdGUob3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQucHJvbWlzZSA9IHA7DQogICAgICAgICAgICAgICAgICAgIHAuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKSB7IHRoaXMucHJvbWlzZS5fcmVzKCk7IH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY2hpbGQpIHsgcmVxdWlyZSgnd2luLWNvbnNvbGUnKS5oaWRlKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICAgICAgICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdLZXJuZWwzMi5kbGwnKTsNCiAgICAgICAgICAgICAgICAgICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdTZXRUaHJlYWRFeGVjdXRpb25TdGF0ZScpOw0KICAgICAgICAgICAgICAgICAgICBrZXJuZWwzMi5TZXRUaHJlYWRFeGVjdXRpb25TdGF0ZShFU19ESVNQTEFZX1JFUVVJUkVEKTsNCiAgICAgICAgICAgICAgICAgICAgcC5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdjaGlsZC1jb250YWluZXInKS5jaGlsZCkgeyBwcm9jZXNzLl9leGl0KCk7IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHAuX3JlcygpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocCk7DQogICAgfTsNCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSBuZXcgcG93ZXJNb25pdG9yKCk7DQo=', 'base64').toString());"); // service-manager, which on linux has a dependency on user-sessions and process-manager. Refer to /modules folder for human readable versions. duk_peval_string_noresult(ctx, "addModule('process-manager', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KdmFyIFRIMzJDU19TTkFQUFJPQ0VTUyA9IDB4MDI7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUzMiA9IDB4MTA7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUgPSAweDA4Ow0KdmFyIFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiA9IDB4MTAwMDsNCg0KDQovLyBVc2VkIG9uIFdpbmRvd3MgYW5kIExpbnV4IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIHByb2Nlc3Nlcw0KZnVuY3Rpb24gcHJvY2Vzc01hbmFnZXIoKSB7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncHJvY2Vzcy1tYW5hZ2VyJzsgLy8gVXNlZCBmb3IgZGVidWdnaW5nLCBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0IHR5cGUgYXQgcnVudGltZS4NCiAgICANCiAgICAvLyBTZXR1cCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY2FsbHMuDQogICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgIHsNCiAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlSGFuZGxlJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldExhc3RFcnJvcicpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdDcmVhdGVUb29saGVscDMyU25hcHNob3QnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJOZXh0VycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdPcGVuUHJvY2VzcycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdQcm9jZXNzMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyTmV4dFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUXVlcnlGdWxsUHJvY2Vzc0ltYWdlTmFtZVcnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KCWNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIHRocm93IChwcm9jZXNzLnBsYXRmb3JtICsgJyBub3Qgc3VwcG9ydGVkJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICB9DQogICAgdGhpcy5lbnVtZXJhdGVQcm9jZXNzZXMgPSBmdW5jdGlvbiBlbnVtZXJhdGVQcm9jZXNzZXMoKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhwcykNCiAgICAgICAgew0KICAgICAgICAgICAgY2FsbGJhY2sucHJvbS5fcmVzKHBzKTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuY2FsbGJhY2sucHJvbSA9IHJldDsNCiAgICAgICAgdGhpcy5nZXRQcm9jZXNzZXMocmV0LmNhbGxiYWNrKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCiAgICAvLyBSZXR1cm4gYSBvYmplY3Qgb2Y6IHBpZCAtPiBwcm9jZXNzIGluZm9ybWF0aW9uLg0KICAgIHRoaXMuZ2V0UHJvY2Vzc2VzID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc2VzKGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgKCdFbnVtZXJhdGluZyBwcm9jZXNzZXMgb24gJyArIHByb2Nlc3MucGxhdGZvcm0gKyAnIG5vdCBzdXBwb3J0ZWQnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzogLy8gV2luZG93cyBwcm9jZXNzZXMNCiAgICAgICAgICAgICAgICB2YXIgcGlkOw0KICAgICAgICAgICAgICAgIHZhciByZXRWYWwgPSB7fTsNCiAgICAgICAgICAgICAgICB2YXIgaCA9IHRoaXMuX2tlcm5lbDMyLkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOw0KICAgICAgICAgICAgICAgIHZhciBpbmZvID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDU2OCA6IDU1Nik7DQogICAgICAgICAgICAgICAgdmFyIGZ1bGxwYXRoID0gR00uQ3JlYXRlVmFyaWFibGUoMjA0OCk7DQogICAgICAgICAgICAgICAgdmFyIHBhdGhTaXplID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICAgICAgdmFyIHBoOw0KDQogICAgICAgICAgICAgICAgaW5mby50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaW5mby5fc2l6ZSwgMCk7DQogICAgICAgICAgICAgICAgdmFyIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyRmlyc3RXKGgsIGluZm8pOw0KICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0UHJvY2Vzcy5WYWwpIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcGlkID0gaW5mby5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgwKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsW3BpZF0gPSB7IHBpZDogcGlkLCBjbWQ6IGluZm8uRGVyZWYoR00uUG9pbnRlclNpemUgPT0gNCA/IDM2IDogNDQsIDI2MCkuV2lkZTJVVEY4IH07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKChwaCA9IHRoaXMuX2tlcm5lbDMyLk9wZW5Qcm9jZXNzKFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiwgMCwgcGlkKSkuVmFsICE9IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXRoU2l6ZS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZnVsbHBhdGguX3NpemUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2tlcm5lbDMyLlF1ZXJ5RnVsbFByb2Nlc3NJbWFnZU5hbWVXKHBoLCAwLCBmdWxscGF0aCwgcGF0aFNpemUpLlZhbCAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbFtwaWRdLnBhdGggPSBmdWxscGF0aC5XaWRlMlVURjg7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DbG9zZUhhbmRsZShwaCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWxbcGlkXS51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocGlkKS5uYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyTmV4dFcoaCwgaW5mbyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNsb3NlSGFuZGxlKGgpOw0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjay5hcHBseSh0aGlzLCBbcmV0VmFsXSk7IH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzogLy8gTGludXggcHJvY2Vzc2VzDQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXggLW8gcGlkIC1vIHVzZXI6OTkgLW8gY29tbWFuZCB8IHRyICcgKyAiJ1xcbicgJ1xcdCcgfCBhd2sgLUYiICsgJyJcXHQiIFwneyBwcmludGYgInsiOyBmb3IoaT0yO2k8TkY7KytpKSB7IHNwbGl0KCRpLHRvaywiICIpOyBwaWQ9dG9rWzFdOyB1c2VyPXRva1syXTsgY21kPXN1YnN0cigkaSxsZW5ndGgodG9rWzFdKSsxMDIpOyBnc3ViKC9cXFxcLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC8iLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC9eWyBdKy8sIiIsY21kKTsgcHJpbnRmICIlc1xcIiVzXFwiOntcXCJwaWRcXCI6XFwiJXNcXCIsXFwidXNlclxcIjpcXCIlc1xcIixcXCJjbWRcXCI6XFwiJXNcXCJ9IiwoaSE9Mj8iLCI6IiIpLHBpZCxwaWQsdXNlcixjbWQ7IH0gcHJpbnRmICJ9IjsgfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICBwLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwLmFyZ3MgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsgcC5hcmdzLnB1c2goYXJndW1lbnRzW2ldKTsgfQ0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7DQogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIHAuYXJncyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyB1c2VyIC1vIGNvbW1hbmQgfCB0ciAnICsgIidcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJ7IjsgZm9yKGk9MjtpPE5GOysraSkgeyBnc3ViKC9eWyBdKy8sIiIsJGkpOyBzcGxpdCgkaSx0b2ssIiAiKTsgcGlkPXRva1sxXTsgdXNlcj10b2tbMl07IGNtZD1zdWJzdHIoJGksbGVuZ3RoKHRva1sxXSkrbGVuZ3RoKHRva1syXSkrMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIHAud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeyBwLmFyZ3MucHVzaChhcmd1bWVudHNbaV0pOyB9DQoNCiAgICAgICAgICAgICAgICAgICAgcC5hcmdzLnVuc2hpZnQoSlNPTi5wYXJzZShwLnN0ZG91dC5zdHIpKTsNCiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBwcm9jZXNzIG9uIExpbnV4DQogICAgdGhpcy5nZXRQcm9jZXNzSW5mbyA9IGZ1bmN0aW9uIGdldFByb2Nlc3NJbmZvKHBpZCkNCiAgICB7DQogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgICAgICB7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHRocm93ICgnZ2V0UHJvY2Vzc0luZm8oKSBub3Qgc3VwcG9ydGVkIGZvciAnICsgcHJvY2Vzcy5wbGF0Zm9ybSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgcGlkICsgJy9zdGF0dXMnKTsNCiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHt9Ow0KICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IHN0YXR1cy50b1N0cmluZygpLnNwbGl0KCdcbicpOw0KICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8bGluZXMubGVuZ3RoOysraSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnOicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHsgdG9rZW5zWzFdID0gdG9rZW5zWzFdLnRyaW0oKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpbmZvW3Rva2Vuc1swXV0gPSB0b2tlbnNbMV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiAoaW5mbyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfcGdyZXAnLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHBncmVwIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAodGhpcy5fcGdyZXAgIT0gJycpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZ2V0UHJvY2VzcyA9IGZ1bmN0aW9uIGdldFByb2Nlc3MoY21kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicGdyZXAgZ25vbWUtc2Vzc2lvbiB8IHRyICdcXG4nICdcXHQnIHwiICsgJyBhd2sgLUYiXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVkIiwgJGk7IH0gcHJpbnRmICJdIjsgfVwnJyk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3RkZXJyLnN0ciAhPSAnJykgeyB0aHJvdyAoY2hpbGQuc3RkZXJyLnN0ci50cmltKCkpOyB9DQogICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnKSB7IHRocm93IChjbWQgKyAnIG5vdCBmb3VuZCcpOyB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLmdldFByb2Nlc3NFeCA9IGZ1bmN0aW9uIGdldFByb2Nlc3NFeChjbWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgncHMgLWF4IC1vIHBpZCAtbyBjb21tYW5kIHwgZ3JlcCAnICsgY21kICsgIiB8IHRyICdcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBzcGxpdCgkaSxyLCIgIik7IGlmKHJbMl0hPSJncmVwIikgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVzIiwgclsxXTsgfSB9IHByaW50ZiAiXSI7IH1cJycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyb3cgKGNtZCArICcgbm90IGZvdW5kJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHByb2Nlc3NNYW5hZ2VyKCk7DQo=', 'base64').toString());"); diff --git a/modules/power-monitor.js b/modules/power-monitor.js index 300afe7..8c6d96f 100644 --- a/modules/power-monitor.js +++ b/modules/power-monitor.js @@ -184,34 +184,49 @@ function powerMonitor() { var promise = require('promise'); p = new promise(function (res, rej) { this._res = res; this._rej = rej; }); - if (process.platform != 'win32') { p._rej('Not supported'); return (p); } - if (require('user-sessions').getProcessOwnerName(process.pid).tsid == 0) + switch (process.platform) { - // We are running as LocalSystem, so we have to find a user session for this to work - var options = { launch: { module: 'power-monitor', method: 'sleepDisplay', args: [] } }; - try - { - options.user = require('user-sessions').getUsername(require('user-sessions').consoleUid()); - } - catch(ee) - { - p._rej('No users logged in'); - return (p); - } - p.child = require('child-container').create(options); - p.child.promise = p; - p.child.on('exit', function () { this.promise._res(); }); - } - else - { - if (require('child-container').child) { require('win-console').hide(); } - var GM = require('_GenericMarshal'); - var user32 = GM.CreateNativeProxy('User32.dll'); - user32.CreateMethod('SendMessageA'); - user32.SendMessageA(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); - p._res(); - if (require('child-container').child) { process._exit(); } + case 'win32': + if (require('user-sessions').getProcessOwnerName(process.pid).tsid == 0) + { + // We are running as LocalSystem, so we have to find a user session for this to work + var options = { launch: { module: 'power-monitor', method: 'sleepDisplay', args: [] } }; + try + { + options.user = require('user-sessions').getUsername(require('user-sessions').consoleUid()); + } + catch (ee) + { + p._rej('No users logged in'); + return (p); + } + p.child = require('child-container').create(options); + p.child.promise = p; + p.child.on('exit', function () { this.promise._res(); }); + } + else + { + if (require('child-container').child) { require('win-console').hide(); } + var GM = require('_GenericMarshal'); + var user32 = GM.CreateNativeProxy('User32.dll'); + user32.CreateMethod('SendMessageA'); + user32.SendMessageA(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); + p._res(); + if (require('child-container').child) { process._exit(); } + } + break; + case 'darwin': + p.child = require('child_process').execFile('/bin/sh', ['sh']); + p.child.promise = p; + p.child.stderr.on('data', function () { }); + p.child.stdout.on('data', function () { }); + p.child.on('exit', function () { this.promise._res(); }); + p.child.stdin.write('pmset displaysleepnow\nexit\n'); + break; + default: + p._rej('Not Supported'); + break; } return (p); };