diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 7111943..68865a0 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2324,11 +2324,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('http-digest', Buffer.from('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', 'base64'));"); // Clipboard. Refer to /modules/clipboard.js for a human readable version - duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'), '2021-07-20T18:48:14.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'));"); // Promise: This is very important, as it is used everywhere. Refer to /modules/promise.js to see a human readable version of promise.js - duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); - + duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); + // util-agentlog, used to parse agent error logs. Refer to modules/util-agentlog.js duk_peval_string_noresult(ctx, "addCompressedModule('util-agentlog', Buffer.from('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', 'base64'));"); diff --git a/modules/clipboard.js b/modules/clipboard.js index e0d61f9..b3aebb4 100644 --- a/modules/clipboard.js +++ b/modules/clipboard.js @@ -85,11 +85,11 @@ function nativeAddCompressedModule(name) } module.exports(ret); } -function nativeAddModule(name) +function nativeAddModule(name,single) { var value = getJSModule(name); var ret = "duk_peval_string_noresult(ctx, \"addModule('" + name + "', Buffer.from('" + Buffer.from(value).toString('base64') + "', 'base64').toString());\");"; - if (ret.length > 16300) + if (ret.length > 16300 && (single==null || single==false)) { // MS Visual Studio has a maxsize limitation var tmp = Buffer.from(value).toString('base64'); diff --git a/modules/dhcp.js b/modules/dhcp.js index e14668e..efc6ccb 100644 --- a/modules/dhcp.js +++ b/modules/dhcp.js @@ -35,7 +35,7 @@ if (global._hide == null) } } } -addModule('promise2', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcmVmVGFibGUgPSB7fTsNCg0KZnVuY3Rpb24gcHJvbWlzZUluaXRpYWxpemVyKHIsaikNCnsNCiAgICB0aGlzLl9yZXMgPSByOw0KICAgIHRoaXMuX3JlaiA9IGo7DQp9DQoNCmZ1bmN0aW9uIGdldFJvb3RQcm9taXNlKG9iaikNCnsNCiAgICB3aGlsZShvYmoucGFyZW50UHJvbWlzZSkNCiAgICB7DQogICAgICAgIG9iaiA9IG9iai5wYXJlbnRQcm9taXNlOw0KICAgIH0NCiAgICByZXR1cm4gKG9iaik7DQp9DQoNCmZ1bmN0aW9uIGV2ZW50X3N3aXRjaGVyKGRlc2lyZWRfY2FsbGVlLCB0YXJnZXQpDQp7DQogICAgcmV0dXJuICh7IF9PYmplY3RJRDogJ2V2ZW50X3N3aXRjaGVyJywgZnVuYzogdGFyZ2V0LmJpbmQoZGVzaXJlZF9jYWxsZWUpIH0pOw0KfQ0KDQpmdW5jdGlvbiBldmVudF9mb3J3YXJkZXIoc291cmNlT2JqLCBzb3VyY2VOYW1lLCB0YXJnZXRPYmosIHRhcmdldE5hbWUpDQp7DQogICAgc291cmNlT2JqLm9uKHNvdXJjZU5hbWUsIHRhcmdldE9iai5lbWl0LmJpbmQodGFyZ2V0T2JqKSk7DQp9DQoNCg0KZnVuY3Rpb24gcmV0dXJuX3Jlc29sdmVkKCkNCnsNCiAgICB2YXIgcGFybXMgPSBbJ3Jlc29sdmVkJ107DQogICAgZm9yICh2YXIgYWkgaW4gYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgICAgcGFybXMucHVzaChhcmd1bWVudHNbYWldKTsNCiAgICB9DQogICAgdGhpcy5fWFNMRi5lbWl0LmFwcGx5KHRoaXMuX1hTTEYsIHBhcm1zKTsNCn0NCmZ1bmN0aW9uIHJldHVybl9yZWplY3RlZCgpDQp7DQogICAgdGhpcy5fWFNMRi5wcm9taXNlLl9fY2hpbGRQcm9taXNlLl9yZWooZSk7DQp9DQpmdW5jdGlvbiBlbWl0cmVqZWN0KGEpDQp7DQogICAgcHJvY2Vzcy5lbWl0KCd1bmNhdWdodEV4Y2VwdGlvbicsICdwcm9taXNlLnVuY2F1Z2h0UmVqZWN0aW9uOiAnICsgSlNPTi5zdHJpbmdpZnkoYSkpOw0KfQ0KZnVuY3Rpb24gUHJvbWlzZShwcm9taXNlRnVuYykNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdwcm9taXNlJzsNCiAgICB0aGlzLnByb21pc2UgPSB0aGlzOw0KICAgIHRoaXMuX2ludGVybmFsID0geyBfT2JqZWN0SUQ6ICdwcm9taXNlLmludGVybmFsJywgcHJvbWlzZTogdGhpcywgY29tcGxldGVkOiBmYWxzZSwgZXJyb3JzOiBmYWxzZSwgY29tcGxldGVkQXJnczogW10sIGludGVybmFsQ291bnQ6IDAsIF91cDogbnVsbCB9Ow0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMuX2ludGVybmFsKTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInBhcmVudFByb21pc2UiLA0KICAgICAgICB7DQogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl91cCk7IH0sDQogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0aGlzLl91cCA9PSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBhbiBvcnBoYW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLl91cCA9IHZhbHVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRlc2NyaXB0b3JNZXRhZGF0YSIsDQogICAgICAgIHsNCiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJlcXVpcmUoJ2V2ZW50cycpLmdldFByb3BlcnR5LmNhbGwodGhpcy5faW50ZXJuYWwsICc/X0ZpbmFsaXplckRlYnVnTWVzc2FnZScpKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXF1aXJlKCdldmVudHMnKS5zZXRQcm9wZXJ0eS5jYWxsKHRoaXMuX2ludGVybmFsLCAnP19GaW5hbGl6ZXJEZWJ1Z01lc3NhZ2UnLCB2YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIHRoaXMuX2ludGVybmFsLm9uKCd+JywgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHRoaXMuY29tcGxldGVkQXJncyA9IFtdOw0KICAgIH0pOw0KICAgIHRoaXMuX2ludGVybmFsLm9uKCduZXdMaXN0ZW5lcjInLCAoZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaykNCiAgICB7DQogICAgICAgIC8vY29uc29sZS5sb2coJ25ld0xpc3RlbmVyJywgZXZlbnROYW1lLCAnZXJyb3JzLycgKyB0aGlzLmVycm9ycyArICcgY29tcGxldGVkLycgKyB0aGlzLmNvbXBsZXRlZCk7DQogICAgICAgIHZhciByID0gbnVsbDsNCg0KICAgICAgICBpZiAoZXZlbnROYW1lID09ICdyZXNvbHZlZCcgJiYgIXRoaXMuZXJyb3JzICYmIHRoaXMuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICByID0gZXZlbnRDYWxsYmFjay5hcHBseSh0aGlzLCB0aGlzLmNvbXBsZXRlZEFyZ3MpOw0KICAgICAgICAgICAgaWYociE9bnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXRfcmV0dXJuVmFsdWUoJ3Jlc29sdmVkJywgcik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVzb2x2ZWQnKTsNCiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZWplY3RlZCcpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy9pZiAoZXZlbnROYW1lID09ICdyZWplY3RlZCcgJiYgKGV2ZW50Q2FsbGJhY2suaW50ZXJuYWwgPT0gbnVsbCB8fCBldmVudENhbGxiYWNrLmludGVybmFsID09IGZhbHNlKSkNCiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PSAncmVqZWN0ZWQnKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgcnAgPSBnZXRSb290UHJvbWlzZSh0aGlzLnByb21pc2UpOw0KICAgICAgICAgICAgcnAuX2ludGVybmFsLmV4dGVybmFsID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmICh0aGlzLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUodGhpcy51bmNhdWdodCk7DQogICAgICAgICAgICAgICAgdGhpcy51bmNhdWdodCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAocnAuX2ludGVybmFsLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUocnAuX2ludGVybmFsLnVuY2F1Z2h0KTsNCiAgICAgICAgICAgICAgICBycC5faW50ZXJuYWwudW5jYXVnaHQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PSAncmVqZWN0ZWQnICYmIHRoaXMuZXJyb3JzICYmIHRoaXMuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICBldmVudENhbGxiYWNrLmFwcGx5KHRoaXMsIHRoaXMuY29tcGxldGVkQXJncyk7DQogICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVzb2x2ZWQnKTsNCiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZWplY3RlZCcpOw0KICAgICAgICB9DQogICAgICAgIGlmIChldmVudE5hbWUgPT0gJ3NldHRsZWQnICYmIHRoaXMuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICBldmVudENhbGxiYWNrLmFwcGx5KHRoaXMsIFtdKTsNCiAgICAgICAgfQ0KICAgIH0pLmludGVybmFsKTsNCiAgICB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlciA9IGZ1bmN0aW9uIF9yZXNvbHZlcigpDQogICAgew0KICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQpIHsgcmV0dXJuOyB9DQogICAgICAgIHRoaXMuZXJyb3JzID0gZmFsc2U7DQogICAgICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5jb21wbGV0ZWRBcmdzID0gW107DQogICAgICAgIHZhciBhcmdzID0gWydyZXNvbHZlZCddOw0KICAgICAgICBpZiAodGhpcy5lbWl0X3JldHVyblZhbHVlICYmIHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnKSAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZEFyZ3MucHVzaCh0aGlzLmVtaXRfcmV0dXJuVmFsdWUoJ3Jlc29sdmVkJykpOw0KICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBmb3IgKHZhciBhIGluIGFyZ3VtZW50cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZEFyZ3MucHVzaChhcmd1bWVudHNbYV0pOw0KICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbYV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAyICYmIGFyZ3NbMV0hPW51bGwgJiYgdHlwZW9mKGFyZ3NbMV0pID09ICdvYmplY3QnICYmIGFyZ3NbMV0uX09iamVjdElEID09ICdwcm9taXNlJykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHByID0gZ2V0Um9vdFByb21pc2UodGhpcy5wcm9taXNlKTsNCiAgICAgICAgICAgIGFyZ3NbMV0uX1hTTEYgPSB0aGlzOw0KICAgICAgICAgICAgYXJnc1sxXS50aGVuKHJldHVybl9yZXNvbHZlZCwgcmV0dXJuX3JlamVjdGVkKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTsNCiAgICAgICAgICAgIHRoaXMuZW1pdCgnc2V0dGxlZCcpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIHRoaXMuX2ludGVybmFsLnJlamVjdG9yID0gZnVuY3Rpb24gX3JlamVjdG9yKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZCkgeyByZXR1cm47IH0NCiAgICAgICAgdGhpcy5lcnJvcnMgPSB0cnVlOw0KICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWU7DQogICAgICAgIHRoaXMuY29tcGxldGVkQXJncyA9IFtdOw0KICAgICAgICB2YXIgYXJncyA9IFsncmVqZWN0ZWQnXTsNCiAgICAgICAgZm9yICh2YXIgYSBpbiBhcmd1bWVudHMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkQXJncy5wdXNoKGFyZ3VtZW50c1thXSk7DQogICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2FdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciByID0gZ2V0Um9vdFByb21pc2UodGhpcy5wcm9taXNlKTsNCiAgICAgICAgaWYgKChyLl9pbnRlcm5hbC5leHRlcm5hbCA9PSBudWxsIHx8IHIuX2ludGVybmFsLmV4dGVybmFsID09IGZhbHNlKSAmJiByLl9pbnRlcm5hbC51bmNhdWdodCA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByLl9pbnRlcm5hbC51bmNhdWdodCA9IHNldEltbWVkaWF0ZShlbWl0cmVqZWN0LCBhcmd1bWVudHNbMF0pOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpOw0KICAgICAgICB0aGlzLmVtaXQoJ3NldHRsZWQnKTsNCiAgICB9Ow0KDQogICAgdGhpcy5jYXRjaCA9IGZ1bmN0aW9uKGZ1bmMpDQogICAgew0KICAgICAgICB2YXIgcnQgPSBnZXRSb290UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgaWYgKHJ0Ll9pbnRlcm5hbC51bmNhdWdodCAhPSBudWxsKSB7IGNsZWFySW1tZWRpYXRlKHJ0Ll9pbnRlcm5hbC51bmNhdWdodCk7IH0NCiAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCBmdW5jKS5mdW5jLmludGVybmFsKTsNCiAgICB9DQogICAgdGhpcy5maW5hbGx5ID0gZnVuY3Rpb24gKGZ1bmMpDQogICAgew0KICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdzZXR0bGVkJywgZXZlbnRfc3dpdGNoZXIodGhpcywgZnVuYykuZnVuYy5pbnRlcm5hbCk7DQogICAgfTsNCiAgICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZWQsIHJlamVjdGVkKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlc29sdmVkKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdyZXNvbHZlZCcsIGV2ZW50X3N3aXRjaGVyKHRoaXMsIHJlc29sdmVkKS5mdW5jLmludGVybmFsKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVqZWN0ZWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbC5jb21wbGV0ZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHIgPSBnZXRSb290UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgICAgICAgICBpZihyLl9pbnRlcm5hbC51bmNhdWdodCAhPSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoci5faW50ZXJuYWwudW5jYXVnaHQpOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCByZWplY3RlZCkuZnVuYy5pbnRlcm5hbCk7DQogICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKHByb21pc2VJbml0aWFsaXplcik7DQogICAgICAgIHJldFZhbC5wYXJlbnRQcm9taXNlID0gdGhpczsNCg0KICAgICAgICBpZiAodGhpcy5faW50ZXJuYWwuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBUaGlzIHByb21pc2Ugd2FzIGFscmVhZHkgcmVzb2x2ZWQsIHNvIGxldHMgY2hlY2sgaWYgdGhlIGhhbmRsZXIgcmV0dXJuZWQgYSBwcm9taXNlDQogICAgICAgICAgICB2YXIgcnYgPSB0aGlzLl9pbnRlcm5hbC5lbWl0X3JldHVyblZhbHVlKCdyZXNvbHZlZCcpOw0KICAgICAgICAgICAgaWYocnYhPW51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYocnYuX09iamVjdElEID09ICdwcm9taXNlJykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJ2LnBhcmVudFByb21pc2UgPSB0aGlzOw0KICAgICAgICAgICAgICAgICAgICBydi5faW50ZXJuYWwub25jZSgncmVzb2x2ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgICAgICAgICBydi5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmNhbGwocmV0VmFsLl9pbnRlcm5hbCwgcnYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdyZXNvbHZlZCcsIHJldFZhbC5faW50ZXJuYWwucmVzb2x2ZXIuYmluZChyZXRWYWwuX2ludGVybmFsKS5pbnRlcm5hbCk7DQogICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVzb2x2ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5fX2NoaWxkUHJvbWlzZSA9IHJldFZhbDsNCiAgICAgICAgcmV0dXJuKHJldFZhbCk7DQogICAgfTsNCg0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcHJvbWlzZUZ1bmMuY2FsbCh0aGlzLCB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlci5iaW5kKHRoaXMuX2ludGVybmFsKSwgdGhpcy5faW50ZXJuYWwucmVqZWN0b3IuYmluZCh0aGlzLl9pbnRlcm5hbCkpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVycm9ycyA9IHRydWU7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZCA9IHRydWU7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZEFyZ3MgPSBbZV07DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVtaXQoJ3JlamVjdGVkJywgZSk7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVtaXQoJ3NldHRsZWQnKTsNCiAgICB9DQoNCiAgICBpZighdGhpcy5faW50ZXJuYWwuY29tcGxldGVkKQ0KICAgIHsNCiAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QNCiAgICAgICAgcmVmVGFibGVbdGhpcy5faW50ZXJuYWwuX2hhc2hDb2RlKCldID0gdGhpcy5faW50ZXJuYWw7DQogICAgICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3NldHRsZWQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICBkZWxldGUgcmVmVGFibGVbdGhpcy5faGFzaENvZGUoKV07DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbXBsZXRlZCIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3NldHRsZWQnLCAoZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIGRlbGV0ZSB0aGlzLnByb21pc2UuX3VwOw0KICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLl9fY2hpbGRQcm9taXNlOw0KICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLnByb21pc2U7DQoNCiAgICAgICAgZGVsZXRlIHRoaXMuX3VwOw0KICAgICAgICBkZWxldGUgdGhpcy5fX2NoaWxkUHJvbWlzZTsNCiAgICAgICAgZGVsZXRlIHRoaXMucHJvbWlzZTsNCiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3Jlc29sdmVkJyk7DQogICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZWplY3RlZCcpOw0KICAgIH0pLmludGVybmFsKTsNCn0NCg0KUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSgpDQp7DQogICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBqKSB7IH0pOw0KICAgIHZhciBhcmdzID0gW107DQogICAgZm9yICh2YXIgaSBpbiBhcmd1bWVudHMpDQogICAgew0KICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsNCiAgICB9DQogICAgcmV0VmFsLl9pbnRlcm5hbC5yZXNvbHZlci5hcHBseShyZXRWYWwuX2ludGVybmFsLCBhcmdzKTsNCiAgICByZXR1cm4gKHJldFZhbCk7DQp9Ow0KUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbiByZWplY3QoKSB7DQogICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBqKSB7IH0pOw0KICAgIHZhciBhcmdzID0gW107DQogICAgZm9yICh2YXIgaSBpbiBhcmd1bWVudHMpIHsNCiAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7DQogICAgfQ0KICAgIHJldFZhbC5faW50ZXJuYWwucmVqZWN0b3IuYXBwbHkocmV0VmFsLl9pbnRlcm5hbCwgYXJncyk7DQogICAgcmV0dXJuIChyZXRWYWwpOw0KfTsNClByb21pc2UuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VMaXN0KQ0Kew0KICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopDQogICAgew0KICAgICAgICB0aGlzLl9fcmVqZWN0b3IgPSByZWo7DQogICAgICAgIHRoaXMuX19yZXNvbHZlciA9IHJlczsNCiAgICAgICAgdGhpcy5fX3Byb21pc2VMaXN0ID0gcHJvbWlzZUxpc3Q7DQogICAgICAgIHRoaXMuX19kb25lID0gZmFsc2U7DQogICAgICAgIHRoaXMuX19jb3VudCA9IDA7DQogICAgfSk7DQoNCiAgICBmb3IgKHZhciBpIGluIHByb21pc2VMaXN0KQ0KICAgIHsNCiAgICAgICAgcHJvbWlzZUxpc3RbaV0udGhlbihmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBTdWNjZXNzDQogICAgICAgICAgICBpZigrK3JldC5fX2NvdW50ID09IHJldC5fX3Byb21pc2VMaXN0Lmxlbmd0aCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQuX19kb25lID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICByZXQuX19yZXNvbHZlcihyZXQuX19wcm9taXNlTGlzdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGZ1bmN0aW9uIChhcmcpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZhaWx1cmUNCiAgICAgICAgICAgIGlmKCFyZXQuX19kb25lKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5fX2RvbmUgPSB0cnVlOw0KICAgICAgICAgICAgICAgIHJldC5fX3JlamVjdG9yKGFyZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBpZiAocHJvbWlzZUxpc3QubGVuZ3RoID09IDApDQogICAgew0KICAgICAgICByZXQuX19yZXNvbHZlcihwcm9taXNlTGlzdCk7DQogICAgfQ0KICAgIHJldHVybiAocmV0KTsNCn07DQoNCm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTsNCm1vZHVsZS5leHBvcnRzLmV2ZW50X3N3aXRjaGVyID0gZXZlbnRfc3dpdGNoZXI7DQptb2R1bGUuZXhwb3J0cy5ldmVudF9mb3J3YXJkZXIgPSBldmVudF9mb3J3YXJkZXI7DQptb2R1bGUuZXhwb3J0cy5kZWZhdWx0SW5pdCA9IGZ1bmN0aW9uIGRlZmF1bHRJbml0KHJlcywgcmVqKSB7IHRoaXMucmVzb2x2ZSA9IHJlczsgdGhpcy5yZWplY3QgPSByZWo7IH0=', 'base64').toString()); +addModule('promise2', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcmVmVGFibGUgPSB7fTsNCg0KZnVuY3Rpb24gcHJvbWlzZUluaXRpYWxpemVyKHIsaikNCnsNCiAgICB0aGlzLl9yZXMgPSByOw0KICAgIHRoaXMuX3JlaiA9IGo7DQp9DQoNCmZ1bmN0aW9uIGdldFJvb3RQcm9taXNlKG9iaikNCnsNCiAgICB3aGlsZShvYmoucGFyZW50UHJvbWlzZSkNCiAgICB7DQogICAgICAgIG9iaiA9IG9iai5wYXJlbnRQcm9taXNlOw0KICAgIH0NCiAgICByZXR1cm4gKG9iaik7DQp9DQoNCmZ1bmN0aW9uIGV2ZW50X3N3aXRjaGVyKGRlc2lyZWRfY2FsbGVlLCB0YXJnZXQpDQp7DQogICAgcmV0dXJuICh7IF9PYmplY3RJRDogJ2V2ZW50X3N3aXRjaGVyJywgZnVuYzogdGFyZ2V0LmJpbmQoZGVzaXJlZF9jYWxsZWUpIH0pOw0KfQ0KDQpmdW5jdGlvbiBldmVudF9mb3J3YXJkZXIoc291cmNlT2JqLCBzb3VyY2VOYW1lLCB0YXJnZXRPYmosIHRhcmdldE5hbWUpDQp7DQogICAgc291cmNlT2JqLm9uKHNvdXJjZU5hbWUsIHRhcmdldE9iai5lbWl0LmJpbmQodGFyZ2V0T2JqKSk7DQp9DQoNCg0KZnVuY3Rpb24gcmV0dXJuX3Jlc29sdmVkKCkNCnsNCiAgICB2YXIgcGFybXMgPSBbJ3Jlc29sdmVkJ107DQogICAgZm9yICh2YXIgYWkgaW4gYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgICAgcGFybXMucHVzaChhcmd1bWVudHNbYWldKTsNCiAgICB9DQogICAgdGhpcy5fWFNMRi5lbWl0LmFwcGx5KHRoaXMuX1hTTEYsIHBhcm1zKTsNCn0NCmZ1bmN0aW9uIHJldHVybl9yZWplY3RlZCgpDQp7DQogICAgdGhpcy5fWFNMRi5wcm9taXNlLl9fY2hpbGRQcm9taXNlLl9yZWooZSk7DQp9DQpmdW5jdGlvbiBlbWl0cmVqZWN0KGEpDQp7DQogICAgcHJvY2Vzcy5lbWl0KCd1bmNhdWdodEV4Y2VwdGlvbicsICdwcm9taXNlLnVuY2F1Z2h0UmVqZWN0aW9uOiAnICsgSlNPTi5zdHJpbmdpZnkoYSkpOw0KfQ0KZnVuY3Rpb24gUHJvbWlzZShwcm9taXNlRnVuYykNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdwcm9taXNlJzsNCiAgICB0aGlzLnByb21pc2UgPSB0aGlzOw0KICAgIHRoaXMuX2ludGVybmFsID0geyBfT2JqZWN0SUQ6ICdwcm9taXNlLmludGVybmFsJywgcHJvbWlzZTogdGhpcywgY29tcGxldGVkOiBmYWxzZSwgZXJyb3JzOiBmYWxzZSwgY29tcGxldGVkQXJnczogW10sIGludGVybmFsQ291bnQ6IDAsIF91cDogbnVsbCB9Ow0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMuX2ludGVybmFsKTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInBhcmVudFByb21pc2UiLA0KICAgICAgICB7DQogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl91cCk7IH0sDQogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0aGlzLl91cCA9PSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBhbiBvcnBoYW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnVuY2F1Z2h0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLl91cCA9IHZhbHVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRlc2NyaXB0b3JNZXRhZGF0YSIsDQogICAgICAgIHsNCiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJlcXVpcmUoJ2V2ZW50cycpLmdldFByb3BlcnR5LmNhbGwodGhpcy5faW50ZXJuYWwsICc/X0ZpbmFsaXplckRlYnVnTWVzc2FnZScpKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXF1aXJlKCdldmVudHMnKS5zZXRQcm9wZXJ0eS5jYWxsKHRoaXMuX2ludGVybmFsLCAnP19GaW5hbGl6ZXJEZWJ1Z01lc3NhZ2UnLCB2YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIHRoaXMuX2ludGVybmFsLm9uKCd+JywgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHRoaXMuY29tcGxldGVkQXJncyA9IFtdOw0KICAgIH0pOw0KICAgIHRoaXMuX2ludGVybmFsLm9uKCduZXdMaXN0ZW5lcjInLCAoZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaykNCiAgICB7DQogICAgICAgIC8vY29uc29sZS5sb2coJ25ld0xpc3RlbmVyJywgZXZlbnROYW1lLCAnZXJyb3JzLycgKyB0aGlzLmVycm9ycyArICcgY29tcGxldGVkLycgKyB0aGlzLmNvbXBsZXRlZCk7DQogICAgICAgIHZhciByID0gbnVsbDsNCg0KICAgICAgICBpZiAoZXZlbnROYW1lID09ICdyZXNvbHZlZCcgJiYgIXRoaXMuZXJyb3JzICYmIHRoaXMuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICByID0gZXZlbnRDYWxsYmFjay5hcHBseSh0aGlzLCB0aGlzLmNvbXBsZXRlZEFyZ3MpOw0KICAgICAgICAgICAgaWYociE9bnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXRfcmV0dXJuVmFsdWUoJ3Jlc29sdmVkJywgcik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cnkgeyB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVzb2x2ZWQnKTsgfSBjYXRjaCAoeCkgeyB9DQogICAgICAgICAgICB0cnkgeyB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVqZWN0ZWQnKTsgfSBjYXRjaCAoeCkgeyB9DQogICAgICAgIH0NCg0KICAgICAgICAvL2lmIChldmVudE5hbWUgPT0gJ3JlamVjdGVkJyAmJiAoZXZlbnRDYWxsYmFjay5pbnRlcm5hbCA9PSBudWxsIHx8IGV2ZW50Q2FsbGJhY2suaW50ZXJuYWwgPT0gZmFsc2UpKQ0KICAgICAgICBpZiAoZXZlbnROYW1lID09ICdyZWplY3RlZCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUodGhpcy51bmNhdWdodCk7DQogICAgICAgICAgICAgICAgdGhpcy51bmNhdWdodCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGhpcy5wcm9taXNlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBycCA9IGdldFJvb3RQcm9taXNlKHRoaXMucHJvbWlzZSk7DQogICAgICAgICAgICAgICAgcnAuX2ludGVybmFsLmV4dGVybmFsID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpZiAocnAuX2ludGVybmFsLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShycC5faW50ZXJuYWwudW5jYXVnaHQpOw0KICAgICAgICAgICAgICAgICAgICBycC5faW50ZXJuYWwudW5jYXVnaHQgPSBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChldmVudE5hbWUgPT0gJ3JlamVjdGVkJyAmJiB0aGlzLmVycm9ycyAmJiB0aGlzLmNvbXBsZXRlZCkNCiAgICAgICAgew0KICAgICAgICAgICAgZXZlbnRDYWxsYmFjay5hcHBseSh0aGlzLCB0aGlzLmNvbXBsZXRlZEFyZ3MpOw0KICAgICAgICAgICAgdHJ5IHsgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3Jlc29sdmVkJyk7IH0gY2F0Y2ggKHgpIHsgfQ0KICAgICAgICAgICAgdHJ5IHsgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlamVjdGVkJyk7IH0gY2F0Y2ggKHgpIHsgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChldmVudE5hbWUgPT0gJ3NldHRsZWQnICYmIHRoaXMuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICBldmVudENhbGxiYWNrLmFwcGx5KHRoaXMsIFtdKTsNCiAgICAgICAgfQ0KICAgIH0pLmludGVybmFsKTsNCiAgICB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlciA9IGZ1bmN0aW9uIF9yZXNvbHZlcigpDQogICAgew0KICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQpIHsgcmV0dXJuOyB9DQogICAgICAgIHRoaXMuZXJyb3JzID0gZmFsc2U7DQogICAgICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5jb21wbGV0ZWRBcmdzID0gW107DQogICAgICAgIHZhciBhcmdzID0gWydyZXNvbHZlZCddOw0KICAgICAgICBpZiAodGhpcy5lbWl0X3JldHVyblZhbHVlICYmIHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnKSAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZEFyZ3MucHVzaCh0aGlzLmVtaXRfcmV0dXJuVmFsdWUoJ3Jlc29sdmVkJykpOw0KICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBmb3IgKHZhciBhIGluIGFyZ3VtZW50cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZEFyZ3MucHVzaChhcmd1bWVudHNbYV0pOw0KICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbYV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAyICYmIGFyZ3NbMV0hPW51bGwgJiYgdHlwZW9mKGFyZ3NbMV0pID09ICdvYmplY3QnICYmIGFyZ3NbMV0uX09iamVjdElEID09ICdwcm9taXNlJykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHByID0gZ2V0Um9vdFByb21pc2UodGhpcy5wcm9taXNlKTsNCiAgICAgICAgICAgIGFyZ3NbMV0uX1hTTEYgPSB0aGlzOw0KICAgICAgICAgICAgYXJnc1sxXS50aGVuKHJldHVybl9yZXNvbHZlZCwgcmV0dXJuX3JlamVjdGVkKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTsNCiAgICAgICAgICAgIHRoaXMuZW1pdCgnc2V0dGxlZCcpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIHRoaXMuX2ludGVybmFsLnJlamVjdG9yID0gZnVuY3Rpb24gX3JlamVjdG9yKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZCkgeyByZXR1cm47IH0NCiAgICAgICAgdGhpcy5lcnJvcnMgPSB0cnVlOw0KICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWU7DQogICAgICAgIHRoaXMuY29tcGxldGVkQXJncyA9IFtdOw0KICAgICAgICB2YXIgYXJncyA9IFsncmVqZWN0ZWQnXTsNCiAgICAgICAgZm9yICh2YXIgYSBpbiBhcmd1bWVudHMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkQXJncy5wdXNoKGFyZ3VtZW50c1thXSk7DQogICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2FdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciByID0gZ2V0Um9vdFByb21pc2UodGhpcy5wcm9taXNlKTsNCiAgICAgICAgaWYgKChyLl9pbnRlcm5hbC5leHRlcm5hbCA9PSBudWxsIHx8IHIuX2ludGVybmFsLmV4dGVybmFsID09IGZhbHNlKSAmJiByLl9pbnRlcm5hbC51bmNhdWdodCA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByLl9pbnRlcm5hbC51bmNhdWdodCA9IHNldEltbWVkaWF0ZShlbWl0cmVqZWN0LCBhcmd1bWVudHNbMF0pOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpOw0KICAgICAgICB0aGlzLmVtaXQoJ3NldHRsZWQnKTsNCiAgICB9Ow0KDQogICAgdGhpcy5jYXRjaCA9IGZ1bmN0aW9uKGZ1bmMpDQogICAgew0KICAgICAgICB2YXIgcnQgPSBnZXRSb290UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgaWYgKHJ0Ll9pbnRlcm5hbC51bmNhdWdodCAhPSBudWxsKSB7IGNsZWFySW1tZWRpYXRlKHJ0Ll9pbnRlcm5hbC51bmNhdWdodCk7IH0NCiAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCBmdW5jKS5mdW5jLmludGVybmFsKTsNCiAgICB9DQogICAgdGhpcy5maW5hbGx5ID0gZnVuY3Rpb24gKGZ1bmMpDQogICAgew0KICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdzZXR0bGVkJywgZXZlbnRfc3dpdGNoZXIodGhpcywgZnVuYykuZnVuYy5pbnRlcm5hbCk7DQogICAgfTsNCiAgICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZWQsIHJlamVjdGVkKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlc29sdmVkKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdyZXNvbHZlZCcsIGV2ZW50X3N3aXRjaGVyKHRoaXMsIHJlc29sdmVkKS5mdW5jLmludGVybmFsKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVqZWN0ZWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbC5jb21wbGV0ZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHIgPSBnZXRSb290UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgICAgICAgICBpZihyLl9pbnRlcm5hbC51bmNhdWdodCAhPSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoci5faW50ZXJuYWwudW5jYXVnaHQpOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCByZWplY3RlZCkuZnVuYy5pbnRlcm5hbCk7DQogICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKHByb21pc2VJbml0aWFsaXplcik7DQogICAgICAgIHJldFZhbC5wYXJlbnRQcm9taXNlID0gdGhpczsNCg0KICAgICAgICBpZiAodGhpcy5faW50ZXJuYWwuY29tcGxldGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBUaGlzIHByb21pc2Ugd2FzIGFscmVhZHkgcmVzb2x2ZWQsIHNvIGxldHMgY2hlY2sgaWYgdGhlIGhhbmRsZXIgcmV0dXJuZWQgYSBwcm9taXNlDQogICAgICAgICAgICB2YXIgcnYgPSB0aGlzLl9pbnRlcm5hbC5lbWl0X3JldHVyblZhbHVlKCdyZXNvbHZlZCcpOw0KICAgICAgICAgICAgaWYocnYhPW51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYocnYuX09iamVjdElEID09ICdwcm9taXNlJykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJ2LnBhcmVudFByb21pc2UgPSB0aGlzOw0KICAgICAgICAgICAgICAgICAgICBydi5faW50ZXJuYWwub25jZSgncmVzb2x2ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgICAgICAgICBydi5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmNhbGwocmV0VmFsLl9pbnRlcm5hbCwgcnYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdyZXNvbHZlZCcsIHJldFZhbC5faW50ZXJuYWwucmVzb2x2ZXIuYmluZChyZXRWYWwuX2ludGVybmFsKS5pbnRlcm5hbCk7DQogICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVzb2x2ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmJpbmQocmV0VmFsLl9pbnRlcm5hbCkuaW50ZXJuYWwpOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5fX2NoaWxkUHJvbWlzZSA9IHJldFZhbDsNCiAgICAgICAgcmV0dXJuKHJldFZhbCk7DQogICAgfTsNCg0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcHJvbWlzZUZ1bmMuY2FsbCh0aGlzLCB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlci5iaW5kKHRoaXMuX2ludGVybmFsKSwgdGhpcy5faW50ZXJuYWwucmVqZWN0b3IuYmluZCh0aGlzLl9pbnRlcm5hbCkpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVycm9ycyA9IHRydWU7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZCA9IHRydWU7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZEFyZ3MgPSBbZV07DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVtaXQoJ3JlamVjdGVkJywgZSk7DQogICAgICAgIHRoaXMuX2ludGVybmFsLmVtaXQoJ3NldHRsZWQnKTsNCiAgICB9DQoNCiAgICBpZighdGhpcy5faW50ZXJuYWwuY29tcGxldGVkKQ0KICAgIHsNCiAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QNCiAgICAgICAgcmVmVGFibGVbdGhpcy5faW50ZXJuYWwuX2hhc2hDb2RlKCldID0gdGhpcy5faW50ZXJuYWw7DQogICAgICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3NldHRsZWQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICBkZWxldGUgcmVmVGFibGVbdGhpcy5faGFzaENvZGUoKV07DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbXBsZXRlZCIsIHsNCiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3NldHRsZWQnLCAoZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLnVuY2F1Z2h0ICE9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMudW5jYXVnaHQpOw0KICAgICAgICAgICAgdGhpcy51bmNhdWdodCA9IG51bGw7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgcnAgPSBnZXRSb290UHJvbWlzZSh0aGlzLnByb21pc2UpOw0KICAgICAgICBpZiAocnAgJiYgcnAuX2ludGVybmFsLnVuY2F1Z2h0KQ0KICAgICAgICB7DQogICAgICAgICAgICBjbGVhckltbWVkaWF0ZShycC5faW50ZXJuYWwudW5jYXVnaHQpOw0KICAgICAgICAgICAgcnAuX2ludGVybmFsLnVuY2F1Z2h0ID0gbnVsbDsNCiAgICAgICAgfQ0KDQogICAgICAgIGRlbGV0ZSB0aGlzLnByb21pc2UuX3VwOw0KICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLl9fY2hpbGRQcm9taXNlOw0KICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLnByb21pc2U7DQoNCiAgICAgICAgZGVsZXRlIHRoaXMuX3VwOw0KICAgICAgICBkZWxldGUgdGhpcy5fX2NoaWxkUHJvbWlzZTsNCiAgICAgICAgZGVsZXRlIHRoaXMucHJvbWlzZTsNCiAgICAgICAgdHJ5IHsgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3Jlc29sdmVkJyk7IH0gY2F0Y2ggKHgpIHsgfQ0KICAgICAgICB0cnkgeyB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVqZWN0ZWQnKTsgfSBjYXRjaCAoeCkgeyB9DQogICAgfSkuaW50ZXJuYWwpOw0KfQ0KDQpQcm9taXNlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKCkNCnsNCiAgICB2YXIgcmV0VmFsID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIsIGopIHsgfSk7DQogICAgdmFyIGFyZ3MgPSBbXTsNCiAgICBmb3IgKHZhciBpIGluIGFyZ3VtZW50cykNCiAgICB7DQogICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pOw0KICAgIH0NCiAgICByZXRWYWwuX2ludGVybmFsLnJlc29sdmVyLmFwcGx5KHJldFZhbC5faW50ZXJuYWwsIGFyZ3MpOw0KICAgIHJldHVybiAocmV0VmFsKTsNCn07DQpQcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCgpIHsNCiAgICB2YXIgcmV0VmFsID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIsIGopIHsgfSk7DQogICAgdmFyIGFyZ3MgPSBbXTsNCiAgICBmb3IgKHZhciBpIGluIGFyZ3VtZW50cykgew0KICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsNCiAgICB9DQogICAgcmV0VmFsLl9pbnRlcm5hbC5yZWplY3Rvci5hcHBseShyZXRWYWwuX2ludGVybmFsLCBhcmdzKTsNCiAgICByZXR1cm4gKHJldFZhbCk7DQp9Ow0KUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZUxpc3QpDQp7DQogICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikNCiAgICB7DQogICAgICAgIHRoaXMuX19yZWplY3RvciA9IHJlajsNCiAgICAgICAgdGhpcy5fX3Jlc29sdmVyID0gcmVzOw0KICAgICAgICB0aGlzLl9fcHJvbWlzZUxpc3QgPSBwcm9taXNlTGlzdDsNCiAgICAgICAgdGhpcy5fX2RvbmUgPSBmYWxzZTsNCiAgICAgICAgdGhpcy5fX2NvdW50ID0gMDsNCiAgICB9KTsNCg0KICAgIGZvciAodmFyIGkgaW4gcHJvbWlzZUxpc3QpDQogICAgew0KICAgICAgICBwcm9taXNlTGlzdFtpXS50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFN1Y2Nlc3MNCiAgICAgICAgICAgIGlmKCsrcmV0Ll9fY291bnQgPT0gcmV0Ll9fcHJvbWlzZUxpc3QubGVuZ3RoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5fX2RvbmUgPSB0cnVlOw0KICAgICAgICAgICAgICAgIHJldC5fX3Jlc29sdmVyKHJldC5fX3Byb21pc2VMaXN0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgZnVuY3Rpb24gKGFyZykNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gRmFpbHVyZQ0KICAgICAgICAgICAgaWYoIXJldC5fX2RvbmUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0Ll9fZG9uZSA9IHRydWU7DQogICAgICAgICAgICAgICAgcmV0Ll9fcmVqZWN0b3IoYXJnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KICAgIGlmIChwcm9taXNlTGlzdC5sZW5ndGggPT0gMCkNCiAgICB7DQogICAgICAgIHJldC5fX3Jlc29sdmVyKHByb21pc2VMaXN0KTsNCiAgICB9DQogICAgcmV0dXJuIChyZXQpOw0KfTsNCg0KbW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlOw0KbW9kdWxlLmV4cG9ydHMuZXZlbnRfc3dpdGNoZXIgPSBldmVudF9zd2l0Y2hlcjsNCm1vZHVsZS5leHBvcnRzLmV2ZW50X2ZvcndhcmRlciA9IGV2ZW50X2ZvcndhcmRlcjsNCm1vZHVsZS5leHBvcnRzLmRlZmF1bHRJbml0ID0gZnVuY3Rpb24gZGVmYXVsdEluaXQocmVzLCByZWopIHsgdGhpcy5yZXNvbHZlID0gcmVzOyB0aGlzLnJlamVjdCA9IHJlajsgfQ==', 'base64').toString()); var promise = require('promise2'); function promise_default(res, rej) { @@ -234,6 +234,28 @@ function raw(localAddress, port, buffer, handler) function info(interfaceName, port) { var f = require('os').networkInterfaces(); + if (interfaceName.split(':').length == 6) + { + var newname = null; + for(var n in f) + { + for (var nx in f[n]) + { + if(f[n][nx].mac.toUpperCase() == interfaceName.toUpperCase()) + { + newname = n; + break; + } + } + if(newname) + { + interfaceName = newname; + break; + } + } + } + + if (f[interfaceName] != null) { var i; diff --git a/modules/promise.js b/modules/promise.js index f2dfbdc..b00fc92 100644 --- a/modules/promise.js +++ b/modules/promise.js @@ -116,17 +116,20 @@ function Promise(promiseFunc) //if (eventName == 'rejected' && (eventCallback.internal == null || eventCallback.internal == false)) if (eventName == 'rejected') { - var rp = getRootPromise(this.promise); - rp._internal.external = true; if (this.uncaught != null) { clearImmediate(this.uncaught); this.uncaught = null; } - if (rp._internal.uncaught != null) + if (this.promise) { - clearImmediate(rp._internal.uncaught); - rp._internal.uncaught = null; + var rp = getRootPromise(this.promise); + rp._internal.external = true; + if (rp._internal.uncaught != null) + { + clearImmediate(rp._internal.uncaught); + rp._internal.uncaught = null; + } } } @@ -293,6 +296,19 @@ function Promise(promiseFunc) this._internal.once('settled', (function () { + if (this.uncaught != null) + { + clearImmediate(this.uncaught); + this.uncaught = null; + } + + var rp = getRootPromise(this.promise); + if (rp && rp._internal.uncaught) + { + clearImmediate(rp._internal.uncaught); + rp._internal.uncaught = null; + } + delete this.promise._up; delete this.promise.__childPromise; delete this.promise.promise;