diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 919ec00..9260238 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2090,11 +2090,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('http-digest', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciB3cml0YWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLldyaXRhYmxlOw0KdmFyIG1kNSA9IHJlcXVpcmUoJ01ENVN0cmVhbScpLmNyZWF0ZSgpOw0KDQpmdW5jdGlvbiBjaGVja0V2ZW50Rm9yd2FyZGluZyhkaWdlc3RSZXF1ZXN0LCBldmVudE5hbWUpDQp7DQogICAgaWYgKGRpZ2VzdFJlcXVlc3QubGlzdGVuZXJDb3VudChldmVudE5hbWUpID4gMCkNCiAgICB7DQogICAgICAgIHZhciBlRm9yd2FyZCA9IGZ1bmN0aW9uIF9lRm9yd2FyZCgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBwID0gW2VGb3J3YXJkLl9ldmVudE5hbWVdOw0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsgcC5wdXNoKGFyZ3VtZW50c1tpXSk7IH0NCiAgICAgICAgICAgIF9lRm9yd2FyZC5fZGlnZXN0UmVxdWVzdC5lbWl0LmFwcGx5KF9lRm9yd2FyZC5fZGlnZXN0UmVxdWVzdCwgcCk7DQogICAgICAgIH07DQogICAgICAgIGVGb3J3YXJkLl9ldmVudE5hbWUgPSBldmVudE5hbWU7DQogICAgICAgIGVGb3J3YXJkLl9kaWdlc3RSZXF1ZXN0ID0gZGlnZXN0UmVxdWVzdDsNCiAgICAgICAgZGlnZXN0UmVxdWVzdC5fcmVxdWVzdC5vbihldmVudE5hbWUsIGVGb3J3YXJkKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGdlbmVyYXRlQXV0aEhlYWRlcnMoaW1zZywgb3B0aW9ucywgZGlnZXN0KQ0Kew0KICAgIHZhciBhdXRoOw0KDQogICAgaWYgKGltc2cgIT0gbnVsbCkNCiAgICB7DQogICAgICAgIGF1dGggPSB7IHJlYWxtOiBudWxsLCBub25jZTogbnVsbCwgb3BhcXVlOiBudWxsLCBxb3A6IG51bGwgfTsNCiAgICAgICAgdmFyIHd3dyA9IGltc2cuaGVhZGVyc1snV1dXLUF1dGhlbnRpY2F0ZSddOw0KICAgICAgICB2YXIgdG9rZW5zID0gd3d3LnNwbGl0KCcsJyk7DQoNCiAgICAgICAgdmFyIHBhaXJzOw0KICAgICAgICBmb3IgKHZhciBpIGluIHRva2VucykNCiAgICAgICAgew0KICAgICAgICAgICAgcGFpcnMgPSB0b2tlbnNbaV0uc3BsaXQoJz0nKTsNCiAgICAgICAgICAgIGlmIChwYWlycy5sZW5ndGggPT0gMikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXJzWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGlnZXN0IHJlYWxtJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgucmVhbG0gPSBwYWlyc1sxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoLnJlYWxtWzBdID09ICciJykgeyBhdXRoLnJlYWxtID0gYXV0aC5yZWFsbS5zdWJzdHJpbmcoMSwgYXV0aC5yZWFsbS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vbmNlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgubm9uY2UgPSBwYWlyc1sxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoLm5vbmNlWzBdID09ICciJykgeyBhdXRoLm5vbmNlID0gYXV0aC5ub25jZS5zdWJzdHJpbmcoMSwgYXV0aC5ub25jZS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ29wYXF1ZSc6DQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLm9wYXF1ZSA9IHBhaXJzWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGgub3BhcXVlWzBdID09ICciJykgeyBhdXRoLm9wYXF1ZSA9IGF1dGgub3BhcXVlLnN1YnN0cmluZygxLCBhdXRoLm9wYXF1ZS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3FvcCc6DQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLnFvcCA9IHBhaXJzWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGgucW9wWzBdID09ICciJykgeyBhdXRoLnFvcCA9IGF1dGgucW9wLnN1YnN0cmluZygxLCBhdXRoLnFvcC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGRpZ2VzdC5fYXV0aCA9IGF1dGg7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmICghKGF1dGggPSBkaWdlc3QuX2F1dGgpKSB7IHJldHVybjsgfQ0KICAgIH0NCg0KICAgIHZhciBzdGVwMSA9IGRpZ2VzdC5fb3B0aW9ucy51c2VybmFtZSArICc6JyArIGF1dGgucmVhbG0gKyAnOicgKyBkaWdlc3QuX29wdGlvbnMucGFzc3dvcmQ7DQogICAgYXV0aC5zdGVwMSA9IG1kNS5zeW5jSGFzaChzdGVwMSkudG9TdHJpbmcoJ2hleCcpLnRvTG93ZXJDYXNlKCk7DQoNCiAgICB2YXIgc3RlcDIgPSBvcHRpb25zLm1ldGhvZCArICc6JyArIG9wdGlvbnMucGF0aDsNCiAgICBhdXRoLnN0ZXAyID0gbWQ1LnN5bmNIYXNoKHN0ZXAyKS50b1N0cmluZygnaGV4JykudG9Mb3dlckNhc2UoKTsNCg0KDQogICAgaWYgKGF1dGgucW9wID09IG51bGwpDQogICAgew0KICAgICAgICB2YXIgc3RlcDMgPSBhdXRoLnN0ZXAxICsgJzonICsgYXV0aC5ub25jZSArICc6JyArIGF1dGguc3RlcDI7DQogICAgICAgIGF1dGguc3RlcDMgPSBtZDUuc3luY0hhc2goc3RlcDMpLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBkaWdlc3QuX05DICs9IDE7DQogICAgICAgIHZhciBzdGVwMyA9IGF1dGguc3RlcDEgKyAnOicgKyBhdXRoLm5vbmNlICsgJzonICsgZGlnZXN0Ll9OQy50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg4LCAnMCcpICsgJzonICsgZGlnZXN0Ll9DTk9OQ0UgKyAnOicgKyBhdXRoLnFvcCArICc6JyArIGF1dGguc3RlcDI7DQogICAgICAgIGF1dGguc3RlcDMgPSBtZDUuc3luY0hhc2goc3RlcDMpLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpOw0KICAgIH0NCg0KICAgIHZhciByZXQgPSAnRGlnZXN0IHVzZXJuYW1lPSInICsgZGlnZXN0Ll9vcHRpb25zLnVzZXJuYW1lICsgJyIscmVhbG09IicgKyBhdXRoLnJlYWxtICsgJyIsbm9uY2U9IicgKyBhdXRoLm5vbmNlICsgJyIsdXJpPSInICsgb3B0aW9ucy5wYXRoICsgJyInOw0KICAgIGlmIChhdXRoLm9wYXF1ZSAhPSBudWxsKSB7IHJldCArPSAoJyxvcGFxdWU9IicgKyBhdXRoLm9wYXF1ZSArICciJyk7IH0NCiAgICByZXQgKz0gKCcscmVzcG9uc2U9IicgKyBhdXRoLnN0ZXAzICsgJyInKTsNCg0KICAgIGlmIChhdXRoLnFvcCAhPSBudWxsKQ0KICAgIHsNCiAgICAgICAgcmV0ICs9ICgnLHFvcD0iJyArIGF1dGgucW9wICsgJyIsbmM9IicgKyBkaWdlc3QuX05DLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDgsICcwJykgKyAnIixjbm9uY2U9IicgKyBkaWdlc3QuX0NOT05DRSArICciJyk7DQogICAgfQ0KDQoNCiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykgeyBvcHRpb25zLmhlYWRlcnMgPSB7fTsgfQ0KICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gcmV0Ow0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gaHR0cF9kaWdlc3QoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gImh0dHAtZGlnZXN0IjsNCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uKCkNCiAgICB7DQogICAgICAgIGlmKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiB0eXBlb2YoYXJndW1lbnRzWzBdID09ICdvYmplY3QnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIChuZXcgaHR0cF9kaWdlc3RfaW5zdGFuY2UoYXJndW1lbnRzWzBdKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoYXJndW1lbnRzLmxlbmd0aCA9PSAyICYmIHR5cGVvZihhcmd1bWVudHNbMF0pID09ICdzdHJpbmcnICYmIHR5cGVvZihhcmd1bWVudHNbMV0pID09ICdzdHJpbmcnKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKG5ldyBodHRwX2RpZ2VzdF9pbnN0YW5jZSh7dXNlcm5hbWU6IGFyZ3VtZW50c1swXSwgcGFzc3dvcmQ6IGFyZ3VtZW50c1sxXX0pKTsNCiAgICAgICAgfQ0KICAgICAgICB0aHJvdyAoJ0ludmFsaWQgUGFyYW1ldGVycycpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gaHR0cF9kaWdlc3RfaW5zdGFuY2Uob3B0aW9ucykNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdodHRwLWRpZ2VzdC5pbnN0YW5jZSc7DQogICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7DQogICAgdGhpcy5odHRwID0gbnVsbDsNCiAgICB0aGlzLl9OQyA9IDA7DQogICAgdGhpcy5fQ05PTkNFID0gcmVxdWlyZSgnaHR0cCcpLmdlbmVyYXRlTm9uY2UoMTYpOw0KDQogICAgdGhpcy5nZXQgPSBmdW5jdGlvbih1cmkpDQogICAgew0KICAgICAgICByZXR1cm4gKHRoaXMucmVxdWVzdCh1cmkpKTsNCiAgICB9DQogICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcjEpDQogICAgew0KICAgICAgICB2YXIgY2FsbGVuZCA9IGZhbHNlOw0KICAgICAgICB2YXIgcmV0ID0gbmV3IHdyaXRhYmxlKA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbiAoY2h1bmssIGZsdXNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSB7IHRocm93ICgnU3RyZWFtIGFscmVhZHkgZW5kZWQnKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5fYnVmZmVyZWQpIA0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJlZCA9IEJ1ZmZlci5hbGxvYyhjaHVuay5sZW5ndGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsuY29weSh0aGlzLl9idWZmZXJlZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZmZlcmVkLCBjaHVua10sIHRoaXMuX2J1ZmZlcmVkLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkgeyB0aGlzLl9yZXF1ZXN0LndyaXRlKGNodW5rKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggIT0gbnVsbCkgeyBmbHVzaCgpOyB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBmaW5hbDogZnVuY3Rpb24gKGZsdXNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSB7IHRocm93ICgnU3RyZWFtIGFscmVhZHkgZW5kZWQnKTsgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmRlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7IHRoaXMuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoICE9IG51bGwpIHsgZmx1c2goKTsgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXQuX2J1ZmZlcmVkID0gbnVsbDsNCiAgICAgICAgcmV0Ll9lbmRlZCA9IGZhbHNlOw0KICAgICAgICBzd2l0Y2ggKHR5cGVvZiAocGFyMSkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgKCdJbnZhbGlkIFBhcmFtZXRlcicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoNCiAgICAgICAgICAgICAgICByZXQub3B0aW9ucyA9IHRoaXMuaHR0cC5wYXJzZVVyaShwYXIxKTsNCiAgICAgICAgICAgICAgICBjYWxsZW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6DQogICAgICAgICAgICAgICAgcmV0Lm9wdGlvbnMgPSBwYXIxOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgncmVzcG9uc2UnKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdlcnJvcicpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ3VwZ3JhZGUnKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjb250aW51ZScpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ3RpbWVvdXQnKTsNCiAgICAgICAgcmV0Ll9kaWdlc3QgPSB0aGlzOw0KDQogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgKGFyZ3VtZW50c1sxXSkgPT0gJ2Z1bmN0aW9uJykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Lm9uY2UoJ3Jlc3BvbnNlJywgYXJndW1lbnRzWzFdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vDQogICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBhZGQgQXV0aEhlYWRlcnMgbm93DQogICAgICAgIC8vDQogICAgICAgIGdlbmVyYXRlQXV0aEhlYWRlcnMobnVsbCwgcmV0Lm9wdGlvbnMsIHRoaXMpOw0KDQogICAgICAgIC8vIFdoZW4gc29tZWJvZHkgaG9va3MgdXAgZXZlbnRzIHRvIGRpZ2VzdC5jbGllbnRSZXF1ZXN0LCB3ZSBuZWVkIHRvIGhvb2sgdGhlIHJlYWwgZXZlbnQgb24gaHR0cC5jbGllbnRSZXF1ZXN0DQogICAgICAgIHJldC5fcmVxdWVzdCA9IHRoaXMuaHR0cC5yZXF1ZXN0KHJldC5vcHRpb25zKTsNCiAgICAgICAgcmV0Ll9yZXF1ZXN0LmRpZ1JlcXVlc3QgPSByZXQ7DQogICAgICAgIHJldC5vbignbmV3TGlzdGVuZXInLCBmdW5jdGlvbiAoZXZOYW1lLCBjYWxsYmFjaykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGV2TmFtZSAhPSAndXBncmFkZScgJiYgZXZOYW1lICE9ICdlcnJvcicgJiYgZXZOYW1lICE9ICdjb250aW51ZScgJiYgZXZOYW1lICE9ICd0aW1lb3V0JyAmJiBldk5hbWUgIT0gJ2RyYWluJykgeyByZXR1cm47IH0NCiAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Lmxpc3RlbmVyQ291bnQoZXZOYW1lKSA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBldlNpbmsgPSBmdW5jdGlvbiBfZXZTaW5rKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwYXJtcyA9IFtfZXZTaW5rLmV2ZW50TmFtZV07DQogICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpIHtwYXJtcy5wdXNoKGFyZ3VtZW50c1tpXSk7fQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdC5hcHBseSh0aGlzLmRpZ1JlcXVlc3QsIHBhcm1zKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGV2U2luay5ldmVudE5hbWUgPSBldk5hbWU7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5vbihldk5hbWUsIGV2U2luayk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldC5fcmVxdWVzdC5vbmNlKCdyZXNwb25zZScsIGZ1bmN0aW9uIChpbXNnKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoaW1zZy5zdGF0dXNDb2RlID09IDQwMSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2FsbGVuZCA9IHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdC5fY2FsbGVuZDsNCiAgICAgICAgICAgICAgICB2YXIgYXV0aCA9IGdlbmVyYXRlQXV0aEhlYWRlcnMoaW1zZywgdGhpcy5kaWdSZXF1ZXN0Lm9wdGlvbnMsIHRoaXMuZGlnUmVxdWVzdC5fZGlnZXN0KTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdCA9IHRoaXMuZGlnUmVxdWVzdC5fZGlnZXN0Lmh0dHAucmVxdWVzdCh0aGlzLmRpZ1JlcXVlc3Qub3B0aW9ucyk7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0Ll9yZXF1ZXN0LmRpZ1JlcXVlc3QgPSB0aGlzLmRpZ1JlcXVlc3Q7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0Ll9yZXF1ZXN0Lm9uY2UoJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKGltc2cpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goaW1zZy5zdGF0dXNDb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdCgnZXJyb3InLCAnRGlnZXN0IGZhaWxlZCB0b28gbWFueSB0aW1lcycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdCgncmVzcG9uc2UnLCBpbXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ3VwZ3JhZGUnKTsNCiAgICAgICAgICAgICAgICBjaGVja0V2ZW50Rm9yd2FyZGluZyh0aGlzLmRpZ1JlcXVlc3QsICdlcnJvcicpOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ2NvbnRpbnVlJyk7DQogICAgICAgICAgICAgICAgY2hlY2tFdmVudEZvcndhcmRpbmcodGhpcy5kaWdSZXF1ZXN0LCAndGltZW91dCcpOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ2RyYWluJyk7DQogICAgICAgICAgICAgICAgaWYgKGNhbGxlbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuX3JlcXVlc3QuZW5kKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpZ1JlcXVlc3QuX2J1ZmZlcmVkKSB7IHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdC53cml0ZSh0aGlzLmRpZ1JlcXVlc3QuX2J1ZmZlcmVkKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaWdSZXF1ZXN0Ll9lbmRlZCkgeyB0aGlzLmRpZ1JlcXVlc3QuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0LmVtaXQoJ3Jlc3BvbnNlJywgaW1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpZiAoY2FsbGVuZCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZXF1ZXN0Ll9jYWxsZW5kID0gdHJ1ZTsgcmV0Ll9yZXF1ZXN0LmVuZCgpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJldC5fYnVmZmVyZWQpIHsgcmV0Ll9yZXF1ZXN0LndyaXRlKHJldC5fYnVmZmVyZWQpOyB9DQogICAgICAgICAgICBpZiAocmV0Ll9lbmRlZCkgeyByZXQuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBodHRwX2RpZ2VzdCgpOw0KDQo=', 'base64').toString());"); // Clipboard. Refer to /modules/clipboard.js for a human readable version - char *_clipboard = ILibMemory_Allocate(48405, 0, NULL, NULL); - memcpy_s(_clipboard + 0, 27660, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KdmFyIEFueVByb3BlcnR5VHlwZSA9IDA7DQp2YXIgQ3VycmVudFRpbWUgPSAwOw0KdmFyIE5vbmUgPSAwOw0KdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7DQp2YXIgU2VsZWN0aW9uQ2xlYXIgPSAyOTsNCnZhciBTZWxlY3Rpb25Ob3RpZnkgPSAzMTsNCnZhciBTZWxlY3Rpb25SZXF1ZXN0ID0gMzA7DQp2YXIgWEFfUFJJTUFSWSA9IDE7DQp2YXIgQ0ZfVEVYVCA9IDE7DQp2YXIgQ0ZfVU5JQ09ERVRFWFQgPSAxMzsNCg0KZnVuY3Rpb24gbmF0aXZlQWRkTW9kdWxlKG5hbWUpDQp7DQogICAgdmFyIHZhbHVlID0gZ2V0SlNNb2R1bGUobmFtZSk7DQogICAgdmFyIHJldCA9ICJkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCwgXCJhZGRNb2R1bGUoJyIgKyBuYW1lICsgIicsIEJ1ZmZlci5mcm9tKCciICsgQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSArICInLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XCIpOyI7DQogICAgaWYgKHJldC5sZW5ndGggPiAxNjMwMCkNCiAgICB7DQogICAgICAgIC8vIE1TIFZpc3VhbCBTdHVkaW8gaGFzIGEgbWF4c2l6ZSBsaW1pdGF0aW9uDQogICAgICAgIHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQgPSAnY2hhciAqXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnID0gSUxpYk1lbW9yeV9BbGxvY2F0ZSgnICsgKHRtcC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyAyKSArICcsIDAsIE5VTEwsIE5VTEwpO1xuJzsNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICB3aGlsZSAoaSA8IHRtcC5sZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaHVuayA9IHRtcC5zdWJzdHJpbmcoaSwgaSsxNjAwMCk7DQogICAgICAgICAgICByZXQgKz0gKCdtZW1jcHlfcyhfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgaSArICcsICcgKyAodG1wLmxlbmd0aCAtIGkpICsgJywgIicgKyBjaHVuayArICciLCAnICsgY2h1bmsubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgICAgIGkgKz0gY2h1bmsubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldCArPSAoJ0lMaWJCYXNlNjREZWNvZGVFeCgodW5zaWduZWQgY2hhciopXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnLCAnICsgdG1wLmxlbmd0aCArICcsICh1bnNpZ25lZCBjaGFyKilfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgdG1wLmxlbmd0aCArICcpO1xuJyk7DQogICAgICAgIHJldCArPSAoJ2R1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTtkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJhZGRNb2R1bGUiKTtkdWtfc3dhcF90b3AoY3R4LCAtMik7ZHVrX3B1c2hfc3RyaW5nKGN0eCwgIicgKyBuYW1lICsgJyIpO2R1a19wdXNoX3N0cmluZyhjdHgsIF8nICsgbmFtZS5zcGxpdCgnLScpLmpvaW4oJycpICsgJyArICcgKyB0bXAubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZHVrX3BjYWxsX21ldGhvZChjdHgsIDIpOyBkdWtfcG9wKGN0eCk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZnJlZShfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcpO1xuJyk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzKHJldCk7DQp9DQpmdW5jdGlvbiBkaXNwYXRjaFJlYWQoc2lkKQ0Kew0KICAgIHZhciBpZCA9IDA7DQoNCiAgICBpZihzaWQ9PW51bGwpDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLkN1cnJlbnQoKS5BY3RpdmU7DQogICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWQgPSBwYXJzZUludChhY3RpdmVbMF0uU2Vzc2lvbklkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZCA9IHNpZDsNCiAgICB9DQoNCiAgICBpZihpZCA9PSAwIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cy5yZWFkKCkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5zdWNjZXNzID0gZmFsc2U7DQogICAgICAgIHJldC5tYXN0ZXIgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5DcmVhdGUoY2hpbGRQcm9wZXJ0aWVzKTsNCiAgICAgICAgcmV0Lm1hc3Rlci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQubWFzdGVyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5zdWNjZXNzID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKGQpOw0KICAgICAgICAgICAgdGhpcy5leGl0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlLnN1Y2Nlc3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ0Vycm9yIHJlYWRpbmcgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLm1hc3RlcjsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5tYXN0ZXIuRXhlY3V0ZVN0cmluZygidmFyIHBhcmVudCA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpOyByZXF1aXJlKCdjbGlwYm9hcmQnKS5yZWFkKCkudGhlbihmdW5jdGlvbih2KXtwYXJlbnQuc2VuZCh2KTt9LCBmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpO3Byb2Nlc3MuZXhpdCgpO30pOyIpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwYXRjaFdyaXRlKGRhdGEsIHNpZCkNCnsNCiAgICB2YXIgaWQgPSAwOw0KDQogICAgaWYoc2lkID09IG51bGwpDQogICAgew0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuQ3VycmVudCgpLkFjdGl2ZTsNCiAgICAgICAgICAgIGlmKGFjdGl2ZS5sZW5ndGg+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZCA9IHBhcnNlSW50KGFjdGl2ZVswXS5TZXNzaW9uSWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlkID0gc2lkOw0KICAgIH0NCg0KICAgIGlmIChpZCA9PSAwIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuKG1vZHVsZS5leHBvcnRzKGRhdGEpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdmFyIGNoaWxkUHJvcGVydGllcyA9IHsgc2Vzc2lvbklkOiBpZCB9Ow0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgICAgICB7DQogICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKGlkKTsNCiAgICAgICAgICAgIGNoaWxkUHJvcGVydGllcy5lbnYgPSB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgfHwgIXRoaXMubWFzdGVyKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLm1hc3RlciA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpLkNyZWF0ZShjaGlsZFByb3BlcnRpZXMpOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIucGFyZW50ID0gdGhpczsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgaWYgKHRoaXMucGFyZW50Lm1hc3RlcikgeyBkZWxldGUgdGhpcy5wYXJlbnQubWFzdGVyOyB9IH0pOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoZCkgeyBjb25zb2xlLmxvZyhkKTsgfSk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5FeGVjdXRlU3RyaW5nKCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJyk7IHBhcmVudC5vbignZGF0YScsIGZ1bmN0aW9uKGQpe3RyeXtyZXF1aXJlKCdjbGlwYm9hcmQnKShkKTt9Y2F0Y2goZSl7cmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZChlKTt9aWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKXtwcm9jZXNzLmV4aXQoKTt9fSk7Iik7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5tYXN0ZXIuc2VuZChkYXRhKTsNCg0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgdGhpcy5tYXN0ZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKHRoaXMubWFzdGVyLnRpbWVvdXQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubWFzdGVyLnRpbWVvdXQpOw0KICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKHNlbGYpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIuZXhpdCgpOw0KICAgICAgICAgICAgICAgIHNlbGYubWFzdGVyID0gbnVsbDsNCiAgICAgICAgICAgIH0sIDYwMDAwLCB0aGlzKTsNCiAgICAgICAgfQ0KDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBsaW5feGNsaXBfcmVhZHRleHQocmV0KQ0Kew0KICAgIHZhciBpZDsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKGlkKTsNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXAsIFsneGxjbGlwJywgJy1zZWxlY3Rpb24nLCAnYycsICctbyddLCB7IHVpZDogaWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgcmV0LmNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHRoaXMuc3RkZXJyLnN0ci50cmltKCkpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXModGhpcy5zdGRvdXQuc3RyKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQoNCmZ1bmN0aW9uIGxpbl9yZWFkdGV4dCgpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgdHJ5DQogICAgew0KICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKQ0KICAgIH0NCiAgICBjYXRjaChleGMpDQogICAgew0KICAgICAgICByZXQuX3JlaihleGMpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIFgxMSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTE7DQogICAgaWYgKCFYMTEpDQogICAgew0KICAgICAgICByZXQuX3JlaignWDExIHJlcXVpcmVkIGZvciBDbGlwYm9hcmQgTWFuaXB1bGF0aW9uJyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkNCiAgICAgICAgew0KICAgICAgICAgICAgbGluX3hjbGlwX3JlYWR0ZXh0KHJldCk7DQogICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fZ207DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCk7DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UuX21hc3RlclByb21pc2UgPSByZXQ7DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UudGhlbihmdW5jdGlvbiAobW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAobW9uLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gWDExLlhXaGl0ZVBpeGVsKG1vblswXS5kaXNwbGF5LCBtb25bMF0uc2NyZWVuSWQpLlZhbDsNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuQ0xJUElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnQ0xJUEJPQVJEJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdVVEY4X1NUUklORycpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLlBST1BJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ1hTRUxfREFUQScpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLklOQ1JJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ0lOQ1InKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOID0gWDExLlhSb290V2luZG93KG1vblswXS5kaXNwbGF5LCBtb25bMF0uc2NyZWVuSWQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiA9IFgxMS5YQ3JlYXRlU2ltcGxlV2luZG93KG1vblswXS5kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLlJPT1RXSU4sIDAsIDAsIG1vblswXS5yaWdodCwgNSwgMCwgd2hpdGUsIHdoaXRlKTsNCg0KICAgICAgICAgICAgICAgIFgxMS5YU3luYyhtb25bMF0uZGlzcGxheSwgMCk7DQogICAgICAgICAgICAgICAgWDExLlhDb252ZXJ0U2VsZWN0aW9uKG1vblswXS5kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRCwgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQsIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgQ3VycmVudFRpbWUpOw0KICAgICAgICAgICAgICAgIFgxMS5YU3luYyhtb25bMF0uZGlzcGxheSwgMCk7DQoNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50ID0gcmVxdWlyZSgnRGVzY3JpcHRvckV2ZW50cycpLmFkZERlc2NyaXB0b3IoWDExLlhDb25uZWN0aW9uTnVtYmVyKG1vblswXS5kaXNwbGF5KS5WYWwsIHsgcmVhZHNldDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5fbWFzdGVyUHJvbWlzZSA9IHRoaXMuX21hc3RlclByb21pc2U7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX2Rpc3BsYXkgPSBtb25bMF0uZGlzcGxheTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5vbigncmVhZHNldCcsIGZ1bmN0aW9uIChmZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBYRSA9IEdNLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoWDExLlhQZW5kaW5nKHRoaXMuX2Rpc3BsYXkpLlZhbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhOZXh0RXZlbnRTeW5jKHRoaXMuX2Rpc3BsYXksIFhFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKFhFLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgPT0gU2VsZWN0aW9uTm90aWZ5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IEdNLkNyZWF0ZVBvaW50ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0cyA9IEdNLkNyZWF0ZVBvaW50ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ogPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhaWwgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEdNLkNyZWF0ZVBvaW50ZXIoKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YR2V0V2luZG93UHJvcGVydHkodGhpcy5fZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCB0aGlzLl9tYXN0ZXJQcm9taXNlLlBST1BJRCwgMCwgNjU1MzUsIDAsIEFueVByb3BlcnR5VHlwZSwgaWQsIGJpdHMsIHN6LCB0YWlsLCByZXN1bHQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5fcmVzKHJlc3VsdC5EZXJlZigpLlN0cmluZyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhGcmVlKHJlc3VsdC5EZXJlZigpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWERlc3Ryb3lXaW5kb3codGhpcy5fZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRGVzY3JpcHRvcihmZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgY29uc29sZS5lcnJvcik7DQogICAgfQ0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gbGluX3hjbGlwX2NvcHkodHh0KQ0Kew0KICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgIHZhciBpZDsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICB9DQogICAgY2F0Y2goZSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCwgWyd4bGNsaXAnLCAnLXNlbGVjdGlvbicsICdjJ10sIHsgdWlkOiBpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgY29uc29sZS5sb2coYy50b1N0cmluZygpKTsgfSk7DQogICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpIHsgdGhpcy5wcm9taXNlLl9yZXMoKTsgfSk7DQogICAgcmV0LmNoaWxkLnN0ZGluLndyaXRlKHR4dCwgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHRoaXMuZW5kKCk7DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGxpbl9jb3B5dGV4dCh0eHQpDQp7DQogICAgdmFyIFgxMSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTE7DQogICAgaWYgKCFYMTEpDQogICAgew0KICAgICAgICB0aHJvdygnWDExIHJlcXVpcmVkIGZvciBDbGlwYm9hcmQgTWFuaXB1bGF0aW9uJyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIChsaW5feGNsaXBfY29weSh0eHQpKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fZ207DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQuX3R4dCA9IHR4dDsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKTsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS5fbWFzdGVyUHJvbWlzZSA9IHJldDsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChtb24pDQogICAgICAg", 16000); - memcpy_s(_clipboard + 16000, 11660, "IHsNCiAgICAgICAgICAgIGlmIChtb24ubGVuZ3RoID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBYMTEuWFdoaXRlUGl4ZWwobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCkuVmFsOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuQ0xJUElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnQ0xJUEJPQVJEJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdVVEY4X1NUUklORycpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLlJPT1RXSU4gPSBYMTEuWFJvb3RXaW5kb3cobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOID0gWDExLlhDcmVhdGVTaW1wbGVXaW5kb3cobW9uWzBdLmRpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiwgMCwgMCwgbW9uWzBdLnJpZ2h0LCA1LCAwLCB3aGl0ZSwgd2hpdGUpOw0KDQogICAgICAgICAgICAgICAgWDExLlhTZXRTZWxlY3Rpb25Pd25lcihtb25bMF0uZGlzcGxheSwgWEFfUFJJTUFSWSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCBDdXJyZW50VGltZSk7DQogICAgICAgICAgICAgICAgWDExLlhTZXRTZWxlY3Rpb25Pd25lcihtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQsIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgQ3VycmVudFRpbWUpOw0KICAgICAgICAgICAgICAgIFgxMS5YU3luYyhtb25bMF0uZGlzcGxheSwgMCk7DQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKFgxMS5YQ29ubmVjdGlvbk51bWJlcihtb25bMF0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX21hc3RlclByb21pc2UgPSB0aGlzLl9tYXN0ZXJQcm9taXNlOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbW9uWzBdLmRpc3BsYXk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgWEUgPSBHTS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFgxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFhFLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25DbGVhcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZWJvZHkgZWxzZSBvd25zIGNsaXBib2FyZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvblJlcXVlc3Q6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1NvbWVib2R5IHdhbnRzIHVzIHRvIHNlbmQgdGhlbSBkYXRhJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2ID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDcyIDogMzYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfcmVxdWVzdG9yID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDQwLCA4KSA6IFhFLkRlcmVmKDIwLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3NlbGVjdGlvbiA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig0OCwgOCkgOiBYRS5EZXJlZigyNCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9wcm9wZXJ0eSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig2NCwgOCkgOiBYRS5EZXJlZigzMiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl90YXJnZXQgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNTYsIDgpIDogWEUuRGVyZWYoMjgsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfdGltZSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig3MiwgOCkgOiBYRS5EZXJlZigzNiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9kaXNwbGF5ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDI0LCA4KSA6IFhFLkRlcmVmKDEyLCA0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldi5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoU2VsZWN0aW9uTm90aWZ5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3JlcXVlc3RvciA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZigzMiwgOCkgOiBldi5EZXJlZigxNiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl9zZWxlY3Rpb24gPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNDAsIDgpIDogZXYuRGVyZWYoMjAsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfdGFyZ2V0ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDQ4LCA4KSA6IGV2LkRlcmVmKDI0LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3RpbWUgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNjQsIDgpIDogZXYuRGVyZWYoMzIsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfcHJvcGVydHkgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNTYsIDgpIDogZXYuRGVyZWYoMjgsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcHRleHQgPSBHTS5DcmVhdGVWYXJpYWJsZSh0aGlzLl9tYXN0ZXJQcm9taXNlLl90eHQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3JlcXVlc3Rvci5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3JlcXVlc3Rvci50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnUkVRVUVTVE9SOiAnICsgc3JfcmVxdWVzdG9yLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3NlbGVjdGlvbi5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3NlbGVjdGlvbi50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnU0VMRUNUSU9OOiAnICsgc3Jfc2VsZWN0aW9uLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3RhcmdldC5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3RhcmdldC50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnVEFSR0VUOiAnICsgc3JfdGFyZ2V0LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3RpbWUuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl90aW1lLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdUSU1FOiAnICsgc3JfdGltZS5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS50b1N0cmluZygnaGV4JykpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcl90YXJnZXQuRGVyZWYoKS5WYWwgPT0gdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRC5WYWwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1VURjggUmVxdWVzdCBmb3I6ICcgKyBjbGlwdGV4dC5TdHJpbmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMShzcl9kaXNwbGF5LlZhbCwgc3JfcmVxdWVzdG9yLkRlcmVmKCkuVmFsLCBzcl9wcm9wZXJ0eS5EZXJlZigpLlZhbCwgc3JfdGFyZ2V0LkRlcmVmKCkuVmFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YQ2hhbmdlUHJvcGVydHkoc3JfZGlzcGxheS5EZXJlZigpLCBzcl9yZXF1ZXN0b3IuRGVyZWYoKSwgc3JfcHJvcGVydHkuRGVyZWYoKSwgc3JfdGFyZ2V0LkRlcmVmKCksIDgsIFByb3BNb2RlUmVwbGFjZSwgY2xpcHRleHQsIGNsaXB0ZXh0Ll9zaXplIC0gMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWFN5bmMoc3JfZGlzcGxheS5EZXJlZigpLCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3Byb3BlcnR5LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfcHJvcGVydHkudG9CdWZmZXIoKSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnVW5rbm93biBGb3JtYXQgUmVxdWVzdCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZfcHJvcGVydHkucG9pbnRlckJ1ZmZlcigpLndyaXRlVUludDMyTEUoTm9uZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWFNlbmRFdmVudChzcl9kaXNwbGF5LkRlcmVmKCksIHNyX3JlcXVlc3Rvci5EZXJlZigpLCAxLCAwLCBldik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGNvbnNvbGUubG9nKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHdpbl9yZWFkdGV4dCgpDQp7DQogICAgdmFyIGg7DQogICAgdmFyIHJldCA9ICcnOw0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCg0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdHZXRDbGlwYm9hcmREYXRhJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnT3BlbkNsaXBib2FyZCcpOw0KDQogICAgdXNlcjMyLk9wZW5DbGlwYm9hcmQoMCk7DQoNCiAgICBpZiAodXNlcjMyLklzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKENGX1VOSUNPREVURVhUKS5WYWwgIT0gMCkNCiAgICB7DQogICAgICAgIGggPSB1c2VyMzIuR2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCk7DQogICAgICAgIGlmIChoLlZhbCAhPSAwKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgaGJ1ZmZlciA9IGtlcm5lbDMyLkdsb2JhbExvY2soaCk7DQogICAgICAgICAgICBoYnVmZmVyLl9zaXplID0gLTE7DQogICAgICAgICAgICByZXQgPSBoYnVmZmVyLldpZGUyVVRGODsNCiAgICAgICAgICAgIGtlcm5lbDMyLkdsb2JhbFVubG9jayhoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHAuX3JlaignVW5rbm93biBDbGlwYm9hcmQgRGF0YScpOw0KICAgICAgICByZXR1cm4gKHApOw0KICAgIH0NCg0KDQogICAgdXNlcjMyLkNsb3NlQ2xpcGJvYXJkKCk7DQoNCiAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgcC5fcmVzKHJldCk7DQogICAgcmV0dXJuIChwKTsNCn0NCg0KZnVuY3Rpb24gd2luX2NvcHl0ZXh0KHR4dCkNCnsNCiAgICB2YXIgR01FTV9NT1ZFQUJMRSA9IDB4MDAwMjsNCiAgICB2YXIgQ0ZfVEVYVCA9IDE7DQoNCiAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICB2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICB2YXIga2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxBbGxvYycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsTG9jaycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsVW5sb2NrJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdFbXB0eUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0lzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnT3BlbkNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ1NldENsaXBib2FyZERhdGEnKTsNCg0KICAgIHZhciBtdHh0ID0gR00uQ3JlYXRlVmFyaWFibGUodHh0LCB7IHdpZGU6IHRydWUgfSk7IA0KICAgIHZhciBoID0ga2VybmVsMzIuR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgbXR4dC5fc2l6ZSk7DQogICAgaC5hdXRvRnJlZShmYWxzZSk7DQogICAgdmFyIGhidWZmZXIgPSBrZXJuZWwzMi5HbG9iYWxMb2NrKGgpOw0KICAgIGhidWZmZXIuYXV0b0ZyZWUoZmFsc2UpOw0KDQogICAgbXR4dC50b0J1ZmZlcigpLmNvcHkoaGJ1ZmZlci5EZXJlZigwLCAoMiAqIHR4dC5sZW5ndGgpICsgMikudG9CdWZmZXIoKSk7DQogICAga2VybmVsMzIuR2xvYmFsVW5sb2NrKGgpOw0KDQogICAgdXNlcjMyLk9wZW5DbGlwYm9hcmQoMCk7DQogICAgdXNlcjMyLkVtcHR5Q2xpcGJvYXJkKCk7DQogICAgdXNlcjMyLlNldENsaXBib2FyZERhdGEoQ0ZfVU5JQ09ERVRFWFQsIGgpOw0KICAgIHVzZXIzMi5DbG9zZUNsaXBib2FyZCgpOw0KfQ0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gd2luX2NvcHl0ZXh0Ow0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gd2luX3JlYWR0ZXh0Ow0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbGluX2NvcHl0ZXh0Ow0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gbGluX3JlYWR0ZXh0Ow0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICJ4Y2xpcCIsIHsNCiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB4Y2xpcCB8IGF3ayAneyBwcmludCAkMjsgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAiIiA/IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIDogbnVsbCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLm5hdGl2ZUFkZE1vZHVsZSA9IG5hdGl2ZUFkZE1vZHVsZTsNCm1vZHVsZS5leHBvcnRzLmRpc3BhdGNoV3JpdGUgPSBkaXNwYXRjaFdyaXRlOw0KbW9kdWxlLmV4cG9ydHMuZGlzcGF0Y2hSZWFkID0gZGlzcGF0Y2hSZWFkOw==", 11660); - ILibBase64DecodeEx((unsigned char*)_clipboard, 27660, (unsigned char*)_clipboard + 27660); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "clipboard"); duk_push_string(ctx, _clipboard + 27660); + char *_clipboard = ILibMemory_Allocate(49203, 0, NULL, NULL); + memcpy_s(_clipboard + 0, 28116, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KdmFyIEFueVByb3BlcnR5VHlwZSA9IDA7DQp2YXIgQ3VycmVudFRpbWUgPSAwOw0KdmFyIE5vbmUgPSAwOw0KdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7DQp2YXIgU2VsZWN0aW9uQ2xlYXIgPSAyOTsNCnZhciBTZWxlY3Rpb25Ob3RpZnkgPSAzMTsNCnZhciBTZWxlY3Rpb25SZXF1ZXN0ID0gMzA7DQp2YXIgWEFfUFJJTUFSWSA9IDE7DQp2YXIgQ0ZfVEVYVCA9IDE7DQp2YXIgQ0ZfVU5JQ09ERVRFWFQgPSAxMzsNCg0KZnVuY3Rpb24gbmF0aXZlQWRkTW9kdWxlKG5hbWUpDQp7DQogICAgdmFyIHZhbHVlID0gZ2V0SlNNb2R1bGUobmFtZSk7DQogICAgdmFyIHJldCA9ICJkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCwgXCJhZGRNb2R1bGUoJyIgKyBuYW1lICsgIicsIEJ1ZmZlci5mcm9tKCciICsgQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSArICInLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XCIpOyI7DQogICAgaWYgKHJldC5sZW5ndGggPiAxNjMwMCkNCiAgICB7DQogICAgICAgIC8vIE1TIFZpc3VhbCBTdHVkaW8gaGFzIGEgbWF4c2l6ZSBsaW1pdGF0aW9uDQogICAgICAgIHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQgPSAnY2hhciAqXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnID0gSUxpYk1lbW9yeV9BbGxvY2F0ZSgnICsgKHRtcC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyAyKSArICcsIDAsIE5VTEwsIE5VTEwpO1xuJzsNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICB3aGlsZSAoaSA8IHRtcC5sZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaHVuayA9IHRtcC5zdWJzdHJpbmcoaSwgaSsxNjAwMCk7DQogICAgICAgICAgICByZXQgKz0gKCdtZW1jcHlfcyhfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgaSArICcsICcgKyAodG1wLmxlbmd0aCAtIGkpICsgJywgIicgKyBjaHVuayArICciLCAnICsgY2h1bmsubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgICAgIGkgKz0gY2h1bmsubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldCArPSAoJ0lMaWJCYXNlNjREZWNvZGVFeCgodW5zaWduZWQgY2hhciopXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnLCAnICsgdG1wLmxlbmd0aCArICcsICh1bnNpZ25lZCBjaGFyKilfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgdG1wLmxlbmd0aCArICcpO1xuJyk7DQogICAgICAgIHJldCArPSAoJ2R1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTtkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJhZGRNb2R1bGUiKTtkdWtfc3dhcF90b3AoY3R4LCAtMik7ZHVrX3B1c2hfc3RyaW5nKGN0eCwgIicgKyBuYW1lICsgJyIpO2R1a19wdXNoX3N0cmluZyhjdHgsIF8nICsgbmFtZS5zcGxpdCgnLScpLmpvaW4oJycpICsgJyArICcgKyB0bXAubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZHVrX3BjYWxsX21ldGhvZChjdHgsIDIpOyBkdWtfcG9wKGN0eCk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZnJlZShfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcpO1xuJyk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzKHJldCk7DQp9DQpmdW5jdGlvbiBkaXNwYXRjaFJlYWQoc2lkKQ0Kew0KICAgIHZhciBpZCA9IDA7DQoNCiAgICBpZihzaWQ9PW51bGwpDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLkN1cnJlbnQoKS5BY3RpdmU7DQogICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWQgPSBwYXJzZUludChhY3RpdmVbMF0uU2Vzc2lvbklkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZCA9IHNpZDsNCiAgICB9DQoNCiAgICBpZiAoaWQgPT0gMCB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cy5yZWFkKCkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5zdWNjZXNzID0gZmFsc2U7DQogICAgICAgIHJldC5tYXN0ZXIgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5DcmVhdGUoY2hpbGRQcm9wZXJ0aWVzKTsNCiAgICAgICAgcmV0Lm1hc3Rlci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQubWFzdGVyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5zdWNjZXNzID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKGQpOw0KICAgICAgICAgICAgdGhpcy5leGl0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlLnN1Y2Nlc3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ0Vycm9yIHJlYWRpbmcgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLm1hc3RlcjsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5tYXN0ZXIuRXhlY3V0ZVN0cmluZygidmFyIHBhcmVudCA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpOyByZXF1aXJlKCdjbGlwYm9hcmQnKS5yZWFkKCkudGhlbihmdW5jdGlvbih2KXtwYXJlbnQuc2VuZCh2KTt9LCBmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpO3Byb2Nlc3MuZXhpdCgpO30pOyIpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwYXRjaFdyaXRlKGRhdGEsIHNpZCkNCnsNCiAgICB2YXIgaWQgPSAwOw0KDQogICAgaWYoc2lkID09IG51bGwpDQogICAgew0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuQ3VycmVudCgpLkFjdGl2ZTsNCiAgICAgICAgICAgIGlmKGFjdGl2ZS5sZW5ndGg+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZCA9IHBhcnNlSW50KGFjdGl2ZVswXS5TZXNzaW9uSWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlkID0gc2lkOw0KICAgIH0NCg0KICAgIGlmIChpZCA9PSAwIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicgfHwgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiByZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkpDQogICAgew0KICAgICAgICByZXR1cm4obW9kdWxlLmV4cG9ydHMoZGF0YSkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyB8fCAhdGhpcy5tYXN0ZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKGNoaWxkUHJvcGVydGllcyk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5wYXJlbnQgPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyBpZiAodGhpcy5wYXJlbnQubWFzdGVyKSB7IGRlbGV0ZSB0aGlzLnBhcmVudC5tYXN0ZXI7IH0gfSk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5vbignZGF0YScsIGZ1bmN0aW9uIChkKSB7IGNvbnNvbGUubG9nKGQpOyB9KTsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyLkV4ZWN1dGVTdHJpbmcoInZhciBwYXJlbnQgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKTsgcGFyZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24oZCl7dHJ5e3JlcXVpcmUoJ2NsaXBib2FyZCcpKGQpO31jYXRjaChlKXtyZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO31pZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpe3Byb2Nlc3MuZXhpdCgpO319KTsiKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLm1hc3Rlci5zZW5kKGRhdGEpOw0KDQogICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiB0aGlzLm1hc3RlcikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5tYXN0ZXIudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tYXN0ZXIudGltZW91dCk7DQogICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLm1hc3Rlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5leGl0KCk7DQogICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBudWxsOw0KICAgICAgICAgICAgfSwgNjAwMDAsIHRoaXMpOw0KICAgICAgICB9DQoNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpDQp7DQogICAgdmFyIGlkOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCwgWyd4bGNsaXAnLCAnLXNlbGVjdGlvbicsICdjJywgJy1vJ10sIHsgdWlkOiBpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICByZXQuY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoodGhpcy5zdGRlcnIuc3RyLnRyaW0oKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLnByb21pc2UuX3Jlcyh0aGlzLnN0ZG91dC5zdHIpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCg0KZnVuY3Rpb24gbGluX3JlYWR0ZXh0KCkNCnsNCiAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpDQogICAgfQ0KICAgIGNhdGNoKGV4YykNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGV4Yyk7DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9DQoNCiAgICB2YXIgWDExID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMTsNCiAgICBpZiAoIVgxMSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKCdYMTEgcmVxdWlyZWQgZm9yIENsaXBib2FyZCBNYW5pcHVsYXRpb24nKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2NsaXBib2FyZCcpLnhjbGlwKQ0KICAgICAgICB7DQogICAgICAgICAgICBsaW5feGNsaXBfcmVhZHRleHQocmV0KTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9nbTsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKTsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS5fbWFzdGVyUHJvbWlzZSA9IHJldDsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChtb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChtb24ubGVuZ3RoID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBYMTEuWFdoaXRlUGl4ZWwobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCkuVmFsOw0KDQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdDTElQQk9BUkQnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ1VURjhfU1RSSU5HJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUFJPUElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnWFNFTF9EQVRBJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuSU5DUklEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnSU5DUicpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLlJPT1RXSU4gPSBYMTEuWFJvb3RXaW5kb3cobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOID0gWDExLlhDcmVhdGVTaW1wbGVXaW5kb3cobW9uWzBdLmRpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiwgMCwgMCwgbW9uWzBdLnJpZ2h0LCA1LCAwLCB3aGl0ZSwgd2hpdGUpOw0KDQogICAgICAgICAgICAgICAgWDExLlhTeW5jKG1vblswXS5kaXNwbGF5LCAwKTsNCiAgICAgICAgICAgICAgICBYMTEuWENvbnZlcnRTZWxlY3Rpb24obW9uWzBdLmRpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuQ0xJUElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLlBST1BJRCwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCBDdXJyZW50VGltZSk7DQogICAgICAgICAgICAgICAgWDExLlhTeW5jKG1vblswXS5kaXNwbGF5LCAwKTsNCg0KDQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQgPSByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykuYWRkRGVzY3JpcHRvcihYMTEuWENvbm5lY3Rpb25OdW1iZXIobW9uWzBdLmRpc3BsYXkpLlZhbCwgeyByZWFkc2V0OiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9tYXN0ZXJQcm9taXNlID0gdGhpcy5fbWFzdGVyUHJvbWlzZTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5fZGlzcGxheSA9IG1vblswXS5kaXNwbGF5Ow0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Lm9uKCdyZWFkc2V0JywgZnVuY3Rpb24gKGZkKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIFhFID0gR00uQ3JlYXRlVmFyaWFibGUoMTAyNCk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChYMTEuWFBlbmRpbmcodGhpcy5fZGlzcGxheSkuVmFsKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBYMTEuWE5leHRFdmVudFN5bmModGhpcy5fZGlzcGxheSwgWEUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoWEUuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSA9PSBTZWxlY3Rpb25Ob3RpZnkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeiA9IEdNLkNyZWF0ZVBvaW50ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFpbCA9IEdNLkNyZWF0ZVBvaW50ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhHZXRXaW5kb3dQcm9wZXJ0eSh0aGlzLl9kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIHRoaXMuX21hc3RlclByb21pc2UuUFJPUElELCAwLCA2NTUzNSwgMCwgQW55UHJvcGVydHlUeXBlLCBpZCwgYml0cywgc3osIHRhaWwsIHJlc3VsdCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLl9yZXMocmVzdWx0LkRlcmVmKCkuU3RyaW5nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWEZyZWUocmVzdWx0LkRlcmVmKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YRGVzdHJveVdpbmRvdyh0aGlzLl9kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEZXNjcmlwdG9yKGZkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LCBjb25zb2xlLmVycm9yKTsNCiAgICB9DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW5feGNsaXBfY29weSh0eHQpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgdmFyIGlkOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIH0NCiAgICBjYXRjaChlKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooZSk7DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9DQoNCiAgICB2YXIgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyhpZCk7DQogICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ2NsaXBib2FyZCcpLnhjbGlwLCBbJ3hsY2xpcCcsICctc2VsZWN0aW9uJywgJ2MnXSwgeyB1aWQ6IGlkLCBlbnY6IHhpbmZvLmV4cG9ydEVudigpIH0pOw0KICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgY29uc29sZS5sb2coYy50b1N0cmluZygpKTsgfSk7DQogICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2UuX3JlcygpOyB9KTsNCiAgICByZXQuY2hpbGQuc3RkaW4ud3JpdGUodHh0LCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgdGhpcy5lbmQoKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gbGluX2NvcHl0ZXh0KHR4dCkNCnsNCiAgICB2YXIgWDExID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMTsNCiAgICBpZiAoIVgxMSkNCiAgICB7DQogICAgICAgIHRocm93KCdYMTEgcmVxdWlyZWQgZm9yIENsaXBib2FyZCBNYW5pcHVsYXRpb24nKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2NsaXBib2FyZCcpLnhjbGlwKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKGxpbl94Y2xpcF9jb3B5KHR4dCkpOw0KICAgICAgICB9DQogICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9nbTsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5fdHh0ID0gdHh0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLl9tYXN0ZXJQcm9taXNl", 16000); + memcpy_s(_clipboard + 16000, 12116, "ID0gcmV0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKG1vbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG1vbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IFgxMS5YV2hpdGVQaXhlbChtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKS5WYWw7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdDTElQQk9BUkQnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ1VURjhfU1RSSU5HJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiA9IFgxMS5YUm9vdFdpbmRvdyhtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4gPSBYMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOLCAwLCAwLCBtb25bMF0ucmlnaHQsIDUsIDAsIHdoaXRlLCB3aGl0ZSk7DQoNCiAgICAgICAgICAgICAgICBYMTEuWFNldFNlbGVjdGlvbk93bmVyKG1vblswXS5kaXNwbGF5LCBYQV9QUklNQVJZLCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFNldFNlbGVjdGlvbk93bmVyKG1vblswXS5kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCBDdXJyZW50VGltZSk7DQogICAgICAgICAgICAgICAgWDExLlhTeW5jKG1vblswXS5kaXNwbGF5LCAwKTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50ID0gcmVxdWlyZSgnRGVzY3JpcHRvckV2ZW50cycpLmFkZERlc2NyaXB0b3IoWDExLlhDb25uZWN0aW9uTnVtYmVyKG1vblswXS5kaXNwbGF5KS5WYWwsIHsgcmVhZHNldDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5fbWFzdGVyUHJvbWlzZSA9IHRoaXMuX21hc3RlclByb21pc2U7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX2Rpc3BsYXkgPSBtb25bMF0uZGlzcGxheTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5vbigncmVhZHNldCcsIGZ1bmN0aW9uIChmZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBYRSA9IEdNLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoWDExLlhQZW5kaW5nKHRoaXMuX2Rpc3BsYXkpLlZhbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhOZXh0RXZlbnRTeW5jKHRoaXMuX2Rpc3BsYXksIFhFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoWEUuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkNsZWFyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdTb21lYm9keSBlbHNlIG93bnMgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uUmVxdWVzdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZWJvZHkgd2FudHMgdXMgdG8gc2VuZCB0aGVtIGRhdGEnKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXYgPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gNzIgOiAzNik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9yZXF1ZXN0b3IgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNDAsIDgpIDogWEUuRGVyZWYoMjAsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Jfc2VsZWN0aW9uID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDQ4LCA4KSA6IFhFLkRlcmVmKDI0LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3Byb3BlcnR5ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDY0LCA4KSA6IFhFLkRlcmVmKDMyLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3RhcmdldCA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig1NiwgOCkgOiBYRS5EZXJlZigyOCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl90aW1lID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDcyLCA4KSA6IFhFLkRlcmVmKDM2LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX2Rpc3BsYXkgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoMjQsIDgpIDogWEUuRGVyZWYoMTIsIDQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShTZWxlY3Rpb25Ob3RpZnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfcmVxdWVzdG9yID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDMyLCA4KSA6IGV2LkRlcmVmKDE2LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3NlbGVjdGlvbiA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig0MCwgOCkgOiBldi5EZXJlZigyMCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl90YXJnZXQgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNDgsIDgpIDogZXYuRGVyZWYoMjQsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfdGltZSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig2NCwgOCkgOiBldi5EZXJlZigzMiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl9wcm9wZXJ0eSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig1NiwgOCkgOiBldi5EZXJlZigyOCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwdGV4dCA9IEdNLkNyZWF0ZVZhcmlhYmxlKHRoaXMuX21hc3RlclByb21pc2UuX3R4dCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfcmVxdWVzdG9yLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfcmVxdWVzdG9yLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdSRVFVRVNUT1I6ICcgKyBzcl9yZXF1ZXN0b3IuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jfc2VsZWN0aW9uLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfc2VsZWN0aW9uLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdTRUxFQ1RJT046ICcgKyBzcl9zZWxlY3Rpb24uRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfdGFyZ2V0LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfdGFyZ2V0LnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdUQVJHRVQ6ICcgKyBzcl90YXJnZXQuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfdGltZS5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3RpbWUudG9CdWZmZXIoKSk7IGNvbnNvbGUuaW5mbzEoJ1RJTUU6ICcgKyBzcl90aW1lLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyX3RhcmdldC5EZXJlZigpLlZhbCA9PSB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElELlZhbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnVVRGOCBSZXF1ZXN0IGZvcjogJyArIGNsaXB0ZXh0LlN0cmluZyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKHNyX2Rpc3BsYXkuVmFsLCBzcl9yZXF1ZXN0b3IuRGVyZWYoKS5WYWwsIHNyX3Byb3BlcnR5LkRlcmVmKCkuVmFsLCBzcl90YXJnZXQuRGVyZWYoKS5WYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhDaGFuZ2VQcm9wZXJ0eShzcl9kaXNwbGF5LkRlcmVmKCksIHNyX3JlcXVlc3Rvci5EZXJlZigpLCBzcl9wcm9wZXJ0eS5EZXJlZigpLCBzcl90YXJnZXQuRGVyZWYoKSwgOCwgUHJvcE1vZGVSZXBsYWNlLCBjbGlwdGV4dCwgY2xpcHRleHQuX3NpemUgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YU3luYyhzcl9kaXNwbGF5LkRlcmVmKCksIDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfcHJvcGVydHkuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl9wcm9wZXJ0eS50b0J1ZmZlcigpKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdVbmtub3duIEZvcm1hdCBSZXF1ZXN0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldl9wcm9wZXJ0eS5wb2ludGVyQnVmZmVyKCkud3JpdGVVSW50MzJMRShOb25lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YU2VuZEV2ZW50KHNyX2Rpc3BsYXkuRGVyZWYoKSwgc3JfcmVxdWVzdG9yLkRlcmVmKCksIDEsIDAsIGV2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgY29uc29sZS5sb2cpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gd2luX3JlYWR0ZXh0KCkNCnsNCiAgICB2YXIgaDsNCiAgICB2YXIgcmV0ID0gJyc7DQogICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7DQogICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsQWxsb2MnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbExvY2snKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbFVubG9jaycpOw0KDQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZScpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0dldENsaXBib2FyZERhdGEnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCg0KICAgIGlmICh1c2VyMzIuSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoQ0ZfVU5JQ09ERVRFWFQpLlZhbCAhPSAwKQ0KICAgIHsNCiAgICAgICAgaCA9IHVzZXIzMi5HZXRDbGlwYm9hcmREYXRhKENGX1VOSUNPREVURVhUKTsNCiAgICAgICAgaWYgKGguVmFsICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICAgICAgICAgIGhidWZmZXIuX3NpemUgPSAtMTsNCiAgICAgICAgICAgIHJldCA9IGhidWZmZXIuV2lkZTJVVEY4Ow0KICAgICAgICAgICAga2VybmVsMzIuR2xvYmFsVW5sb2NrKGgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHZhciBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgcC5fcmVqKCdVbmtub3duIENsaXBib2FyZCBEYXRhJyk7DQogICAgICAgIHJldHVybiAocCk7DQogICAgfQ0KDQoNCiAgICB1c2VyMzIuQ2xvc2VDbGlwYm9hcmQoKTsNCg0KICAgIHZhciBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICBwLl9yZXMocmV0KTsNCiAgICByZXR1cm4gKHApOw0KfQ0KDQpmdW5jdGlvbiB3aW5fY29weXRleHQodHh0KQ0Kew0KICAgIHZhciBHTUVNX01PVkVBQkxFID0gMHgwMDAyOw0KICAgIHZhciBDRl9URVhUID0gMTsNCg0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdDbG9zZUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0VtcHR5Q2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnU2V0Q2xpcGJvYXJkRGF0YScpOw0KDQogICAgdmFyIG10eHQgPSBHTS5DcmVhdGVWYXJpYWJsZSh0eHQsIHsgd2lkZTogdHJ1ZSB9KTsgDQogICAgdmFyIGggPSBrZXJuZWwzMi5HbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBtdHh0Ll9zaXplKTsNCiAgICBoLmF1dG9GcmVlKGZhbHNlKTsNCiAgICB2YXIgaGJ1ZmZlciA9IGtlcm5lbDMyLkdsb2JhbExvY2soaCk7DQogICAgaGJ1ZmZlci5hdXRvRnJlZShmYWxzZSk7DQoNCiAgICBtdHh0LnRvQnVmZmVyKCkuY29weShoYnVmZmVyLkRlcmVmKDAsICgyICogdHh0Lmxlbmd0aCkgKyAyKS50b0J1ZmZlcigpKTsNCiAgICBrZXJuZWwzMi5HbG9iYWxVbmxvY2soaCk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCiAgICB1c2VyMzIuRW1wdHlDbGlwYm9hcmQoKTsNCiAgICB1c2VyMzIuU2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCwgaCk7DQogICAgdXNlcjMyLkNsb3NlQ2xpcGJvYXJkKCk7DQp9DQpmdW5jdGlvbiBtYWNvc19jb3B5dGV4dChjbGlwVGV4dCkNCnsNCiAgICByZXR1cm4gKHJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc2V0Q2xpcGJvYXJkKGNsaXBUZXh0KSk7DQp9DQpmdW5jdGlvbiBtYWNvc19yZWFkdGV4dCgpDQp7DQogICAgcmV0dXJuIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLmdldENsaXBib2FyZCgpKTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbl9jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IHdpbl9yZWFkdGV4dDsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGxpbl9jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IGxpbl9yZWFkdGV4dDsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAieGNsaXAiLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeGNsaXAgfCBhd2sgJ3sgcHJpbnQgJDI7IH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gIiIgPyBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA6IG51bGwpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtYWNvc19jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IG1hY29zX3JlYWR0ZXh0Ow0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLm5hdGl2ZUFkZE1vZHVsZSA9IG5hdGl2ZUFkZE1vZHVsZTsNCm1vZHVsZS5leHBvcnRzLmRpc3BhdGNoV3JpdGUgPSBkaXNwYXRjaFdyaXRlOw0KbW9kdWxlLmV4cG9ydHMuZGlzcGF0Y2hSZWFkID0gZGlzcGF0Y2hSZWFkOw==", 12116); + ILibBase64DecodeEx((unsigned char*)_clipboard, 28116, (unsigned char*)_clipboard + 28116); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "clipboard"); duk_push_string(ctx, _clipboard + 28116); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_clipboard); @@ -2216,12 +2216,13 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('child-container', Buffer.from('LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGNoaWxkQ29udGFpbmVyKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdjaGlsZC1jb250YWluZXInOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubGF1bmNoIHx8ICFvcHRpb25zLmxhdW5jaC5tb2R1bGUgfHwgIW9wdGlvbnMubGF1bmNoLm1ldGhvZCB8fCAhb3B0aW9ucy5sYXVuY2guYXJncykgeyB0aHJvdyAoJ0ludmFsaWQgUGFyYW1ldGVycycpOyB9DQoNCiAgICAgICAgdmFyIGlwY0ludGVnZXI7DQoNCiAgICAgICAgdmFyIHJldCA9IHsgb3B0aW9uczogb3B0aW9ucyB9Ow0KICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ3JlYWR5JykNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgnbWVzc2FnZScpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ2V4aXQnKQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnZGlzY29ubmVjdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Rpc2Nvbm5lY3QgY2hpbGQgPT4nKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQuZW5kKCk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2UnLCB2YWx1ZTogbXNnIH0pOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC5hZGRNZXRob2QoJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoeyBjb21tYW5kOiAnZXhpdCcsIHZhbHVlOiBjb2RlIH0pOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC5hZGRNZXRob2QoJ3NlbmQnLCBmdW5jdGlvbiAob2JqKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7IHRocm93ICgnTm90IENvbm5lY3RlZCcpOyB9DQogICAgICAgICAgICAgICAgdmFyIGQsIGggPSBCdWZmZXIuYWxsb2MoNCk7DQoNCiAgICAgICAgICAgICAgICBkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkob2JqKSk7DQogICAgICAgICAgICAgICAgaC53cml0ZVVJbnQzMkxFKGQubGVuZ3RoICsgNCk7DQogICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50LndyaXRlKGgpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudC53cml0ZShkKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAiZGVzY3JpcHRvck1ldGFkYXRhIiwgew0KICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xpZW50KSB7IHRoaXMuX2NsaWVudC5kZXNjcmlwdG9yTWV0YWRhdGEgPSB2OyB9DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2MpIHsgdGhpcy5fcHJvYy5kZXNjcmlwdG9yTWV0YWRhdGEgPSB2OyB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICByZXQuX2lwYyA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOyByZXQuX2lwYy5wYXJlbnQgPSByZXQ7ICAgICAgIA0KICAgICAgICByZXQuX2lwYy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7IGNvbnNvbGUubG9nKCdDaGlsZCBDb250YWluZXIgUHJvY2VzcyBDbG9zZWQnKTsgfSk7DQoNCiAgICAgICAgd2hpbGUgKHRydWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLl9kZWJ1Z0lQQyAmJiBvcHRpb25zLl9pcGNJbnRlZ2VyICE9IG51bGwpDQogICAgICAgICAgICB7IGlwY0ludGVnZXIgPSBvcHRpb25zLl9pcGNJbnRlZ2VyOyB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaXBjSW50ZWdlciA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMTAwMCcsICc5OTk5Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuX2lwY1BhdGggPSAnXFxcXC5cXHBpcGVcXHRhc2tSZWRpcmVjdGlvbi0nICsgaXBjSW50ZWdlcjsNCg0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0Ll9pcGMubGlzdGVuKHsgcGF0aDogcmV0Ll9pcGNQYXRoLCB3cml0YWJsZUFsbDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoICh4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuX2lwY0ludGVnZXIgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWJ1Z0Vycm9yOiBVbmFibGUgdG8gYmluZCB0byBJUEMgY2hhbm5lbDogJyArIGlwY0ludGVnZXIpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBzY3JpcHQgPSBCdWZmZXIuZnJvbSgiY29uc29sZS5sb2coJ0NISUxEL1NUQVJUJyk7cmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY29ubmVjdCgnIiArIGlwY0ludGVnZXIgKyAiJyk7IikudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQuX2lwYy5vbmNlKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gb25Db25uZWN0KHMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHMuZGVzY3JpcHRvck1ldGFkYXRhID0gJ2NoaWxkLWNvbnRhaW5lcic7DQogICAgICAgICAgICB0aGlzLnBhcmVudC5fY2xpZW50ID0gczsNCiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9jbGllbnQuX3BhcmVudCA9IHRoaXM7DQogICAgICAgICAgICB2YXIgZGF0YTsNCiAgICAgICAgICAgIGZvciAodmFyIG0gaW4gdGhpcy5wYXJlbnQub3B0aW9ucy5tb2R1bGVzKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGRhdGEgPSB7IGNvbW1hbmQ6ICdhZGRNb2R1bGUnLCB2YWx1ZTogeyBuYW1lOiB0aGlzLnBhcmVudC5vcHRpb25zLm1vZHVsZXNbbV0ubmFtZSwganM6IHRoaXMucGFyZW50Lm9wdGlvbnMubW9kdWxlc1ttXS5zY3JpcHQgfSB9Ow0KICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNlbmQoZGF0YSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGRhdGEgPSB7IGNvbW1hbmQ6ICdsYXVuY2gnLCB2YWx1ZTogeyBtb2R1bGU6IHRoaXMucGFyZW50Lm9wdGlvbnMubGF1bmNoLm1vZHVsZSwgbWV0aG9kOiB0aGlzLnBhcmVudC5vcHRpb25zLmxhdW5jaC5tZXRob2QsIGFyZ3M6IHRoaXMucGFyZW50Lm9wdGlvbnMubGF1bmNoLmFyZ3MgfSB9Ow0KICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2VuZChkYXRhKTsNCiAgICAgICAgICAgIHMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY0xlbjsNCiAgICAgICAgICAgICAgICBpZiAoYy5sZW5ndGggPCA0IHx8IChjTGVuID0gYy5yZWFkVUludDMyTEUoMCkpID4gYy5sZW5ndGgpIHsgdGhpcy51bnNoaWZ0KGMpOyByZXR1cm47IH0NCiAgICAgICAgICAgICAgICB2YXIgY21kID0gSlNPTi5wYXJzZShjLnNsaWNlKDQsIGNMZW4pLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoY21kLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudC5wYXJlbnQuZW1pdCgnbWVzc2FnZScsIGNtZC52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoY0xlbiA8IGMubGVuZ3RoKSB7IHRoaXMudW5zaGlmdChjLnNsaWNlKGNMZW4pKTsgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KCdyZWFkeScpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAob3B0aW9ucy5fZGVidWdJUEMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctYjY0ZXhlYyAnICsgc2NyaXB0KTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFNwYXduIHRoZSBjaGlsZA0KICAgICAgICBpZihvcHRpb25zLnVzZXIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBVc2UgVGFzayBTY2hlZHVsZXINCiAgICAgICAgICAgIHZhciBwYXJtcyA9ICcvQyBTQ0hUQVNLUyAvQ1JFQVRFIC9GIC9UTiBNZXNoVXNlclRhc2sgL1NDIE9OQ0UgL1NUIDAwOjAwICc7DQogICAgICAgICAgICBwYXJtcyArPSAoJy9SVSAnICsgb3B0aW9ucy51c2VyICsgJyAnKTsNCiAgICAgICAgICAgIHBhcm1zICs9ICgnL1RSICJcXCInICsgcHJvY2Vzcy5leGVjUGF0aCArICdcXCIgLWI2NGV4ZWMgJyArIHNjcmlwdCArICciJyk7DQoNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxzeXN0ZW0zMlxcY21kLmV4ZScsIFtwYXJtc10pOw0KICAgICAgICAgICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXHN5c3RlbTMyXFxjbWQuZXhlJywgWydjbWQnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1NDSFRBU0tTIC9SVU4gL1ROIE1lc2hVc2VyVGFza1xyXG4nKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdTQ0hUQVNLUyAvREVMRVRFIC9GIC9UTiBNZXNoVXNlclRhc2tcclxuZXhpdFxyXG4nKTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY2hpbGRfb3B0aW9ucyA9IHt9Ow0KICAgICAgICAgICAgaWYob3B0aW9ucy51aWQgIT0gbnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgdHNpZDsNCiAgICAgICAgICAgICAgICBpZiAoKHRzaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCkgPT0gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBydW5uaW5nIGFzIExvY2FsU3lzdGVtDQogICAgICAgICAgICAgICAgICAgIGNoaWxkX29wdGlvbnMudWlkID0gb3B0aW9ucy51aWQ7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkX29wdGlvbnMudHlwZSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLlVTRVI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IGJlIGFibGUgdG8gc3dpdGNoIHNlc3Npb24gSURzLCBzbyBjaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgYXMgdGhpcyBzaWQNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lkICE9IHRzaWQpIHsgdGhyb3cgKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBydW4gYXMgdGhpcyB1c2VyJyk7IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuX3Byb2MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ1xcJyA6ICcvJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIGNoaWxkX29wdGlvbnMpOw0KICAgICAgICAgICAgcmV0Ll9wcm9jLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICJjaGlsZC1jb250YWluZXIiOw0KICAgICAgICAgICAgcmV0Ll9wcm9jLnBhcmVudCA9IHJldDsNCiAgICAgICAgICAgIHJldC5fcHJvYy5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgIHJldC5fcHJvYy5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgIHJldC5fcHJvYy5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmVtaXQoJ2V4aXQnLCBjb2RlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9DQogICAgdGhpcy5jb25uZWN0ID0gZnVuY3Rpb24gKGlwY051bWJlcikNCiAgICB7DQogICAgICAgIHZhciBpcGNQYXRoID0gJ1xcXFwuXFxwaXBlXFx0YXNrUmVkaXJlY3Rpb24tJyArIGlwY051bWJlcjsNCiAgICAgICAgdGhpcy5faXBjQ2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbih7IHBhdGg6IGlwY1BhdGggfSwgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuX2V4aXQoMCk7IH0pOw0KICAgICAgICAgICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uIChjKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjTGVuOw0KICAgICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA8IDQgfHwgKGNMZW4gPSBjLnJlYWRVSW50MzJMRSgwKSkgPiBjLmxlbmd0aCkgeyB0aGlzLnVuc2hpZnQoYyk7IHJldHVybjsgfQ0KDQogICAgICAgICAgICAgICAgdmFyIGNtZCA9IEpTT04ucGFyc2UoYy5zbGljZSg0LCBjTGVuKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtZC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkTW9kdWxlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1vZHVsZShjbWQudmFsdWUubmFtZSwgY21kLnZhbHVlLmpzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXVuY2gnOg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHJlcXVpcmUoY21kLnZhbHVlLm1vZHVsZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXN1bHQgPSBvYmpbY21kLnZhbHVlLm1ldGhvZF0uYXBwbHkob2JqLCBjbWQudmFsdWUuYXJncyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudC5lbWl0KCdtZXNzYWdlJywgY21kLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdfZGlzY29ubmVjdCc6DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRGlzY29ubmVjdGluZy4uLicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdleGl0JzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudC5lbWl0KCdleGl0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgICAgICAgICAgICAgICAgICB7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuX2V4aXQoMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoY0xlbiA8IGMubGVuZ3RoKSB7IHRoaXMudW5zaGlmdChjLnNsaWNlKGNMZW4pKTsgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLl9pcGNDbGllbnQuX3BhcmVudCA9IHRoaXM7DQoNCiAgICAgICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgnbWVzc2FnZScpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ2V4aXQnKQ0KICAgICAgICAgICAgLmFkZE1ldGhvZCgnbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2UnLCB2YWx1ZTogbXNnIH0pOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC5hZGRNZXRob2QoJ3NlbmQnLCBmdW5jdGlvbiAoZGF0YSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2lwY0NsaWVudCkgeyB0aHJvdyAoJ05vdCBDb25uZWN0ZWQnKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBkLCBoID0gQnVmZmVyLmFsbG9jKDQpOw0KDQogICAgICAgICAgICAgICAgZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsNCiAgICAgICAgICAgICAgICBoLndyaXRlVUludDMyTEUoZC5sZW5ndGggKyA0KTsNCiAgICAgICAgICAgICAgICB0aGlzLl9pcGNDbGllbnQud3JpdGUoaCk7DQogICAgICAgICAgICAgICAgdGhpcy5faXBjQ2xpZW50LndyaXRlKGQpOw0KICAgICAgICAgICAgfSk7DQogICAgfTsNCn0NCg0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBjaGlsZENvbnRhaW5lcigpOw==', 'base64').toString());"); // message-box, refer to modules/message-box.js - char *_messagebox = ILibMemory_Allocate(75664, 0, NULL, NULL); - memcpy_s(_messagebox + 0, 43236, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQpjb25zdCBNQl9TWVNURU1NT0RBTCAgICAgICAgICAgID0gMHgwMDAwMTAwMDsNCg0KY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICA9IDB4MDAwMDAwMDA7DQpjb25zdCBNQl9ERUZCVVRUT04yICAgICAgICAgICAgID0gMHgwMDAwMDEwMDsNCmNvbnN0IE1CX0RFRkJVVFRPTjMgICAgICAgICAgICAgPSAweDAwMDAwMjAwOw0KY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTA7DQpjb25zdCBNQl9JQ09OUVVFU1RJT04gICAgICAgICAgID0gMHgwMDAwMDAyMDsNCmNvbnN0IE1CX0lDT05FWENMQU1BVElPTiAgICAgICAgPSAweDAwMDAwMDMwOw0KY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICA9IDB4MDAwMDAwNDA7DQoNCmNvbnN0IElET0sgICAgID0gMTsNCmNvbnN0IElEQ0FOQ0VMID0gMjsNCmNvbnN0IElEQUJPUlQgID0gMzsNCmNvbnN0IElEUkVUUlkgID0gNDsNCmNvbnN0IElESUdOT1JFID0gNTsNCmNvbnN0IElEWUVTICAgID0gNjsNCmNvbnN0IElETk8gICAgID0gNzsNCmNvbnN0IFdNX0NMT1NFID0gMHgwMDEwOw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQsIHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQub3B0aW9ucyA9IHsgbGF1bmNoOiB7IG1vZHVsZTogJ21lc3NhZ2UtYm94JywgbWV0aG9kOiAnc2xhdmUnLCBhcmdzOiBbXSB9IH07DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOw0KICAgICAgICByZXQuY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC50aW1lb3V0ID0gdGltZW91dDsNCiAgICAgICAgcmV0LmxheW91dCA9IGxheW91dDsNCg0KICAgICAgICAvL3JldC5vcHRpb25zLl9kZWJ1Z0lQQyA9IHRydWU7DQogICAgICAgIC8vcmV0Lm9wdGlvbnMuX2lwY0ludGVnZXIgPSAxNTAwOw0KDQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQub3B0aW9ucy51aWQgPSBzaWQgPT0gbnVsbCA/IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkgOiBzaWQ7DQogICAgICAgICAgICBpZiAocmV0Lm9wdGlvbnMudWlkID09IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSB7IGRlbGV0ZSByZXQub3B0aW9ucy51aWQ7IH0NCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5faXBjID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY3JlYXRlKHJldC5vcHRpb25zKTsNCiAgICAgICAgcmV0Ll9pcGMubWFzdGVyID0gcmV0Ow0KICAgICAgICByZXQuX2lwYy5vbigncmVhZHknLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICdtZXNzYWdlLWJveCc7DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIudGltZW91dCAhPSBudWxsKSB7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAobXN0cikgeyBtc3RyLl9pcGMuZXhpdCgpOyB9LCB0aGlzLm1hc3Rlci50aW1lb3V0ICogMTAwMCwgdGhpcy5tYXN0ZXIpOyB9DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIubGF5b3V0ID09IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHsgY29tbWFuZDogJ1lFU05PJywgY2FwdGlvbjogdGhpcy5tYXN0ZXIuY2FwdGlvbiwgdGl0bGU6IHRoaXMubWFzdGVyLnRpdGxlIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh7IGNvbW1hbmQ6ICdBTEVSVCcsIGNhcHRpb246IHRoaXMubWFzdGVyLmNhcHRpb24sIHRpdGxlOiB0aGlzLm1hc3Rlci50aXRsZSB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKG1zZykNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKG1zZy5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzcG9uc2UnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFzdGVyLl90aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLm1hc3Rlci5fdGltZW91dCk7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gbnVsbDsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5yZXNwb25zZSA9PSBJRFlFUyB8fCBtc2cucmVzcG9uc2UgPT0gSURPSykNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc3Rlci5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIuX3Jlaihtc2cucmVzcG9uc2UpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChmZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdleGl0JywgZnVuY3Rpb24gKGMpIHsgdGhpcy5tYXN0ZXIuX3JlaignY2hpbGQgZXhpdGVkIHdpdGggY29kZTogJyArIGMpOyB9KTsNCiAgICAgICAgcmV0LmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX2lwYy5leGl0KCk7DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc2xhdmUgPSBmdW5jdGlvbigpDQogICAgew0KICAgICAgICB2YXIgbWFzdGVyID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJyk7DQogICAgICAgIG1hc3Rlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRjaChtc2cuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdZRVNOTyc6DQogICAgICAgICAgICAgICAgY2FzZSAnQUxFUlQnOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLkdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcjMyID0gdGhpcy5HTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5DcmVhdGVNZXRob2QoJ01lc3NhZ2VCb3hBJyk7DQogICAgICAgICAgICAgICAgICAgIGxheW91dCA9IG1zZy5jb21tYW5kID09ICdZRVNOTycgPyAoTUJfWUVTTk8gfCBNQl9ERUZCVVRUT04yIHwgTUJfSUNPTkVYQ0xBTUFUSU9OIHwgTUJfVE9QTU9TVCB8IE1CX1NZU1RFTU1PREFMKSA6IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUIHwgTUJfU1lTVEVNTU9EQUwpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5NZXNzYWdlQm94QS5hc3luYygwLCB0aGlzLkdNLkNyZWF0ZVZhcmlhYmxlKG1zZy5jYXB0aW9uKSwgdGhpcy5HTS5DcmVhdGVWYXJpYWJsZShtc2cudGl0bGUpLCBsYXlvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocikNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChyLlZhbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRE9LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRENBTkNFTDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURBQk9SVDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURSRVRSWToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURJR05PUkU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElEWUVTOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5tZXNzYWdlKHtjb21tYW5kOiAncmVzcG9uc2UnLCByZXNwb25zZTogci5WYWx9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0Lm1lc3NhZ2Uoe2NvbW1hbmQ6ICdyZXNwb25zZScsIHJlc3BvbnNlOiBJRE5PfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goZmYpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pLnBhcmVudFByb21pc2UudGhhdCA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCg0KZnVuY3Rpb24gbGludXhfbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnemVuaXR5JywNCiAgICAgICAgew0KICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgemVuaXR5IHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL3plbml0eScpKSB7IGxvY2F0aW9uID0gJy91c3IvbG9jYWwvYmluL3plbml0eSc7IH0NCiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gJycpIHsgcmV0dXJuIChudWxsKTsgfQ0KDQogICAgICAgICAgICAgICAgdmFyIHJldCA9IHsgcGF0aDogbG9jYXRpb24sIHRpbWVvdXQ6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gZmFsc2UgOiB0cnVlIH07DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgInRpbWVvdXQiLCB7DQogICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVpZCwgeGluZm87DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aW5mbyA9PSBudWxsKSB7IHJldHVybiAoZmFsc2UpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKGxvY2F0aW9uICsgJyAtLWhlbHAtYWxsIHwgZ3JlcCB0aW1lb3V0XG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChlKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidmVyc2lvbiIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoWzIsIDE2XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21p", 16000); - memcpy_s(_messagebox + 16000, 27236, "c2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCiAgICAgICAgdmFyIG1pbiA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5taW5VaWQoKTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsIHx8ICh1aWQgIT0gMCAmJiB1aWQgPCBtaW4pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVzdGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAnemVuaXR5LCBtZXNzYWdlLWJveCcNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAna2RpYWxvZywgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgIH0sIHRpbWVvdXQgKiAxMDAwLCByZXQuY2hpbGQpOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAodGhpcy54bWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gdGl0bGUsIGNhcHRpb24sIHRpbWVvdXQsIGxheW91dA0KICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMueG1lc3NhZ2UucGF0aCwgWyd4bWVzc2FnZScsICctY2VudGVyJywgJy1idXR0b25zJywgbGF5b3V0ID09IG51bGwgPyAnTm86MSxZZXM6MicgOiAnT0s6MicsICctdGltZW91dCcsIHRpbWVvdXQudG9TdHJpbmcoKSwgJy1kZWZhdWx0JywgbGF5b3V0PT1udWxsPydObyc6J09LJywgJy10aXRsZScsIHRpdGxlLCBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgIH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd4bWVzc2FnZSwgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdVbmFibGUgdG8gY3JlYXRlIGRpYWxvZyBib3gnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmtpbGwoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicpDQp7DQogICAgZnVuY3Rpb24gdHJhbnNsYXRlT2JqZWN0KG9iaikNCiAgICB7DQogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsNCiAgICAgICAgdmFyIGIgPSBCdWZmZXIuYWxsb2Moai5sZW5ndGggKyA0KTsNCiAgICAgICAgYi53cml0ZVVJbnQzMkxFKGoubGVuZ3RoICsgNCk7DQogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7DQogICAgICAgIHJldHVybiAoYik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgdGhpcy5faW5pdElQQ0Jhc2UgPSBmdW5jdGlvbiBfaW5pdElQQ0Jhc2UoKQ0KICAgIHsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5wYXRoID0gJy92YXIvdG1wLycgKyBwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCkgKyAnX2V2JzsNCiAgICAgICAgdmFyIG47DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgKytuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOw0KICAgICAgICByZXQudG1wU2VydmljZU5hbWUgPSAnbWVzaE5vdGlmaWNhdGlvblNlcnZlcicgKyBuOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyByZXQudGltZW91dCA9IHRpbWVvdXQ7DQogICAgICAgIGlmIChsYXlvdXQgPT0gbnVsbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LmxheW91dCA9IFsnWWVzJywgJ05vJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZih0eXBlb2YobGF5b3V0KSE9J29iamVjdCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5sYXlvdXQgPSBbJ09LJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQubGF5b3V0ID0gbGF5b3V0Ow0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldC5sYXlvdXQsICJ1c2VyIiwgeyB2YWx1ZTogdHJ1ZSB9KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RJTUVPVVQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b24gPT0gJ1llcycgfHwgcC5idXR0b24gPT0gJ09LJyB8fCB0aGlzLnByb21pc2UubGF5b3V0LnVzZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmJ1dHRvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLnNlcnZlci5jbG9zZSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBmb3IgKHZhciB4IGluIHRoaXMucmV0LmxheW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnJldC5sYXlvdXRbeF0gPSAnIicgKyB0aGlzLnJldC5sYXlvdXRbeF0gKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogdGhpcy5yZXQubGF5b3V0LCBidXR0b25EZWZhdWx0OiB0aGlzLnJldC5sYXlvdXRbdGhpcy5yZXQubGF5b3V0Lmxlbmd0aC0xXSwgdGltZW91dDogdGhpcy5yZXQudGltZW91dCB9KSk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQuY2xvc2UgPSBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZlcikgeyB0aGlzLnNlcnZlci5jbG9zZSgpOyB9DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMubG9jayA9IGZ1bmN0aW9uIGxvY2soKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTE9DSyc6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJyB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHRpdGxlLCBjYXB0aW9uKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyANCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ05PVElGWScsIHRpdGxlOiB0aGlzLnJl", 16000); - memcpy_s(_messagebox + 32000, 11236, "dC50aXRsZSwgY2FwdGlvbjogdGhpcy5yZXQuY2FwdGlvbiB9KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc3RhcnRDbGllbnQgPSBmdW5jdGlvbiBzdGFydENsaWVudChvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgLy8gQ3JlYXRlIHRoZSBDbGllbnQNCiAgICAgICAgb3B0aW9ucy5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgb3B0aW9ucy51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB0aGlzLmNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucyk7DQogICAgICAgIHRoaXMuY2xpZW50Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgdGhpcy5jbGllbnQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdMT0NLJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL01lbnVcXCBFeHRyYXMvVXNlci5tZW51L0NvbnRlbnRzL1Jlc291cmNlcy9DR1Nlc3Npb24gLXN1c3BlbmRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IG5vdGlmaWNhdGlvbiAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyJcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ05PVElGWScsIHN0YXR1czogMCB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBwLnRpbWVvdXQgPyAoJyBnaXZpbmcgdXAgYWZ0ZXIgJyArIHAudGltZW91dCkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGljb24gPSBwLmljb24gPyAoJ3dpdGggaWNvbiAnICsgcC5pY29uKSA6ICcnOw0KDQogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gcC5idXR0b25zID8gKCdidXR0b25zIHsnICsgcC5idXR0b25zLnRvU3RyaW5nKCkgKyAnfScpIDogJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbkRlZmF1bHQgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucyArPSAoJyBkZWZhdWx0IGJ1dHRvbiAnICsgcC5idXR0b25EZWZhdWx0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwudGhhdCA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IGRpYWxvZyAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyIgJyArIGljb24gKyAnICcgKyBidXR0b25zICsgdGltZW91dCArICdcJyB8IGF3ayBcJ3sgYz1zcGxpdCgkMCwgdG9rZW5zLCAiLCIpOyBzcGxpdCh0b2tlbnNbMV0sIHZhbCwgIjoiKTsgaWYoYz09MSkgeyBwcmludCB2YWxbMl0gfSBlbHNlIHsgc3BsaXQodG9rZW5zWzJdLCBndSwgIjoiKTsgaWYoZ3VbMl09PSJ0cnVlIikgeyBwcmludCAiX1RJTUVPVVRfIiB9IGVsc2UgeyBwcmludCB2YWxbMl0gIH0gIH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGRlcnIuc3RyICE9ICcnICYmICF0aGlzLnN0ZGVyci5zdHIuaW5jbHVkZXMoJ09wZW5HTCcpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZG91dC5zdHIudHJpbSgpID09ICdfVElNRU9VVF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgdGltZW91dDogdHJ1ZSB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIGJ1dHRvbjogdGhpcy5zdGRvdXQuc3RyLnRyaW0oKSB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0Ll9zaGVsbCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbCkgeyB0aGlzLl9zaGVsbC5raWxsKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgLy90aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICAvL2lmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnICYmICF0aGlzLl9zaGVsbC5zdGRlcnIuc3RyLmluY2x1ZGVzKCdPcGVuR0wnKSkNCiAgICAgICAgICAgICAgICAgICAgLy97DQogICAgICAgICAgICAgICAgICAgIC8vICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vfQ0KICAgICAgICAgICAgICAgICAgICAvL2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgLy97DQogICAgICAgICAgICAgICAgICAgIC8vICAgIGlmICh0aGlzLl9zaGVsbC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnX1RJTUVPVVRfJykNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgew0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpbWVvdXQ6IHRydWUgfSkpOw0KICAgICAgICAgICAgICAgICAgICAvLyAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgew0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIGJ1dHRvbjogdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgfSkpOw0KICAgICAgICAgICAgICAgICAgICAvLyAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSk7DQogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5pbnN0YWxsIG91cnNlbHZlcw0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlciA9IGZ1bmN0aW9uIHN0YXJ0TWVzc2FnZVNlcnZlcihvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhvcHRpb25zLnBhdGgpKSB7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhvcHRpb25zLnBhdGgpOyB9DQogICAgICAgIG9wdGlvbnMud3JpdGFibGVBbGwgPSB0cnVlOw0KDQogICAgICAgIHZhciByZXQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVTZXJ2ZXIoKTsNCiAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgcmV0Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgcmV0LnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAob2JqKQ0KICAgICAgICB7DQogICAgICAgICAgICBvYmouY2xvc2UoKTsNCiAgICAgICAgICAgIG9iai5fb3B0aW9ucy5fcmVqKCdDb25uZWN0aW9uIHRpbWVvdXQnKTsNCiAgICAgICAgfSwgNTAwMCwgcmV0KTsNCiAgICAgICAgcmV0Lmxpc3RlbihvcHRpb25zKTsNCiAgICAgICAgcmV0Lm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyh0aGlzLl9vcHRpb25zLnBhdGgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnRtcFNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aDogcHJvY2Vzcy5leGVjUGF0aCwgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsIHVpZDogcmV0LnVpZCwNCiAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnQXF1YSddLCBwYXJhbWV0ZXJzOiBbJy1leGVjJywgInJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc3RhcnRDbGllbnQoeyBwYXRoOiAnIiArIG9wdGlvbnMucGF0aCArICInLCBzZXJ2aWNlOiAnIiArIG9wdGlvbnMudG1wU2VydmljZU5hbWUgKyAiJyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7Il0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHJldC51aWQpLmxvYWQoKTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0KDQoNCg0KDQo=", 11236); - ILibBase64DecodeEx((unsigned char*)_messagebox, 43236, (unsigned char*)_messagebox + 43236); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 43236); + char *_messagebox = ILibMemory_Allocate(85750, 0, NULL, NULL); + memcpy_s(_messagebox + 0, 49000, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQpjb25zdCBNQl9TWVNURU1NT0RBTCAgICAgICAgICAgID0gMHgwMDAwMTAwMDsNCg0KY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICA9IDB4MDAwMDAwMDA7DQpjb25zdCBNQl9ERUZCVVRUT04yICAgICAgICAgICAgID0gMHgwMDAwMDEwMDsNCmNvbnN0IE1CX0RFRkJVVFRPTjMgICAgICAgICAgICAgPSAweDAwMDAwMjAwOw0KY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTA7DQpjb25zdCBNQl9JQ09OUVVFU1RJT04gICAgICAgICAgID0gMHgwMDAwMDAyMDsNCmNvbnN0IE1CX0lDT05FWENMQU1BVElPTiAgICAgICAgPSAweDAwMDAwMDMwOw0KY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICA9IDB4MDAwMDAwNDA7DQoNCmNvbnN0IElET0sgICAgID0gMTsNCmNvbnN0IElEQ0FOQ0VMID0gMjsNCmNvbnN0IElEQUJPUlQgID0gMzsNCmNvbnN0IElEUkVUUlkgID0gNDsNCmNvbnN0IElESUdOT1JFID0gNTsNCmNvbnN0IElEWUVTICAgID0gNjsNCmNvbnN0IElETk8gICAgID0gNzsNCmNvbnN0IFdNX0NMT1NFID0gMHgwMDEwOw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQsIHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQub3B0aW9ucyA9IHsgbGF1bmNoOiB7IG1vZHVsZTogJ21lc3NhZ2UtYm94JywgbWV0aG9kOiAnc2xhdmUnLCBhcmdzOiBbXSB9IH07DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOw0KICAgICAgICByZXQuY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC50aW1lb3V0ID0gdGltZW91dDsNCiAgICAgICAgcmV0LmxheW91dCA9IGxheW91dDsNCg0KICAgICAgICAvL3JldC5vcHRpb25zLl9kZWJ1Z0lQQyA9IHRydWU7DQogICAgICAgIC8vcmV0Lm9wdGlvbnMuX2lwY0ludGVnZXIgPSAxNTAwOw0KDQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQub3B0aW9ucy51aWQgPSBzaWQgPT0gbnVsbCA/IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkgOiBzaWQ7DQogICAgICAgICAgICBpZiAocmV0Lm9wdGlvbnMudWlkID09IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSB7IGRlbGV0ZSByZXQub3B0aW9ucy51aWQ7IH0NCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5faXBjID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJykuY3JlYXRlKHJldC5vcHRpb25zKTsNCiAgICAgICAgcmV0Ll9pcGMubWFzdGVyID0gcmV0Ow0KICAgICAgICByZXQuX2lwYy5vbigncmVhZHknLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICdtZXNzYWdlLWJveCc7DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIudGltZW91dCAhPSBudWxsKSB7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAobXN0cikgeyBtc3RyLl9pcGMuZXhpdCgpOyB9LCB0aGlzLm1hc3Rlci50aW1lb3V0ICogMTAwMCwgdGhpcy5tYXN0ZXIpOyB9DQogICAgICAgICAgICBpZiAodGhpcy5tYXN0ZXIubGF5b3V0ID09IG51bGwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHsgY29tbWFuZDogJ1lFU05PJywgY2FwdGlvbjogdGhpcy5tYXN0ZXIuY2FwdGlvbiwgdGl0bGU6IHRoaXMubWFzdGVyLnRpdGxlIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh7IGNvbW1hbmQ6ICdBTEVSVCcsIGNhcHRpb246IHRoaXMubWFzdGVyLmNhcHRpb24sIHRpdGxlOiB0aGlzLm1hc3Rlci50aXRsZSB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKG1zZykNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKG1zZy5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzcG9uc2UnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFzdGVyLl90aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLm1hc3Rlci5fdGltZW91dCk7IHRoaXMubWFzdGVyLl90aW1lb3V0ID0gbnVsbDsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5yZXNwb25zZSA9PSBJRFlFUyB8fCBtc2cucmVzcG9uc2UgPT0gSURPSykNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc3Rlci5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIuX3Jlaihtc2cucmVzcG9uc2UpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChmZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5faXBjLm9uKCdleGl0JywgZnVuY3Rpb24gKGMpIHsgdGhpcy5tYXN0ZXIuX3JlaignY2hpbGQgZXhpdGVkIHdpdGggY29kZTogJyArIGMpOyB9KTsNCiAgICAgICAgcmV0LmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX2lwYy5leGl0KCk7DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc2xhdmUgPSBmdW5jdGlvbigpDQogICAgew0KICAgICAgICB2YXIgbWFzdGVyID0gcmVxdWlyZSgnY2hpbGQtY29udGFpbmVyJyk7DQogICAgICAgIG1hc3Rlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChtc2cpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRjaChtc2cuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdZRVNOTyc6DQogICAgICAgICAgICAgICAgY2FzZSAnQUxFUlQnOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLkdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcjMyID0gdGhpcy5HTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5DcmVhdGVNZXRob2QoJ01lc3NhZ2VCb3hBJyk7DQogICAgICAgICAgICAgICAgICAgIGxheW91dCA9IG1zZy5jb21tYW5kID09ICdZRVNOTycgPyAoTUJfWUVTTk8gfCBNQl9ERUZCVVRUT04yIHwgTUJfSUNPTkVYQ0xBTUFUSU9OIHwgTUJfVE9QTU9TVCB8IE1CX1NZU1RFTU1PREFMKSA6IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUIHwgTUJfU1lTVEVNTU9EQUwpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIzMi5NZXNzYWdlQm94QS5hc3luYygwLCB0aGlzLkdNLkNyZWF0ZVZhcmlhYmxlKG1zZy5jYXB0aW9uKSwgdGhpcy5HTS5DcmVhdGVWYXJpYWJsZShtc2cudGl0bGUpLCBsYXlvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocikNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChyLlZhbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRE9LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRENBTkNFTDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURBQk9SVDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURSRVRSWToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSURJR05PUkU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElEWUVTOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhhdC5tZXNzYWdlKHtjb21tYW5kOiAncmVzcG9uc2UnLCByZXNwb25zZTogci5WYWx9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0Lm1lc3NhZ2Uoe2NvbW1hbmQ6ICdyZXNwb25zZScsIHJlc3BvbnNlOiBJRE5PfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goZmYpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pLnBhcmVudFByb21pc2UudGhhdCA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCg0KZnVuY3Rpb24gbGludXhfbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnemVuaXR5JywNCiAgICAgICAgew0KICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgemVuaXR5IHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL3plbml0eScpKSB7IGxvY2F0aW9uID0gJy91c3IvbG9jYWwvYmluL3plbml0eSc7IH0NCiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gJycpIHsgcmV0dXJuIChudWxsKTsgfQ0KDQogICAgICAgICAgICAgICAgdmFyIHJldCA9IHsgcGF0aDogbG9jYXRpb24sIHRpbWVvdXQ6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gZmFsc2UgOiB0cnVlIH07DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgInRpbWVvdXQiLCB7DQogICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVpZCwgeGluZm87DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aW5mbyA9PSBudWxsKSB7IHJldHVybiAoZmFsc2UpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKGxvY2F0aW9uICsgJyAtLWhlbHAtYWxsIHwgZ3JlcCB0aW1lb3V0XG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChlKSB7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidmVyc2lvbiIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoWzIsIDE2XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21p", 16000); + memcpy_s(_messagebox + 16000, 33000, "c2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCiAgICAgICAgdmFyIG1pbiA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5taW5VaWQoKTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsIHx8ICh1aWQgIT0gMCAmJiB1aWQgPCBtaW4pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVzdGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAnemVuaXR5LCBtZXNzYWdlLWJveCcNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5kZXNjcmlwdG9yTWV0YWRhdGEgPSAna2RpYWxvZywgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgIH0sIHRpbWVvdXQgKiAxMDAwLCByZXQuY2hpbGQpOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAodGhpcy54bWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gdGl0bGUsIGNhcHRpb24sIHRpbWVvdXQsIGxheW91dA0KICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMueG1lc3NhZ2UucGF0aCwgWyd4bWVzc2FnZScsICctY2VudGVyJywgJy1idXR0b25zJywgbGF5b3V0ID09IG51bGwgPyAnTm86MSxZZXM6MicgOiAnT0s6MicsICctdGltZW91dCcsIHRpbWVvdXQudG9TdHJpbmcoKSwgJy1kZWZhdWx0JywgbGF5b3V0PT1udWxsPydObyc6J09LJywgJy10aXRsZScsIHRpdGxlLCBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgIH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLmRlc2NyaXB0b3JNZXRhZGF0YSA9ICd4bWVzc2FnZSwgbWVzc2FnZS1ib3gnDQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdVbmFibGUgdG8gY3JlYXRlIGRpYWxvZyBib3gnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmtpbGwoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicpDQp7DQogICAgZnVuY3Rpb24gdHJhbnNsYXRlT2JqZWN0KG9iaikNCiAgICB7DQogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsNCiAgICAgICAgdmFyIGIgPSBCdWZmZXIuYWxsb2Moai5sZW5ndGggKyA0KTsNCiAgICAgICAgYi53cml0ZVVJbnQzMkxFKGoubGVuZ3RoICsgNCk7DQogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7DQogICAgICAgIHJldHVybiAoYik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgdGhpcy5faW5pdElQQ0Jhc2UgPSBmdW5jdGlvbiBfaW5pdElQQ0Jhc2UoKQ0KICAgIHsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5wYXRoID0gJy92YXIvdG1wLycgKyBwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCkgKyAnX2V2JzsNCiAgICAgICAgdmFyIG47DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgKytuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOw0KICAgICAgICByZXQudG1wU2VydmljZU5hbWUgPSAnbWVzaE5vdGlmaWNhdGlvblNlcnZlcicgKyBuOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyByZXQudGltZW91dCA9IHRpbWVvdXQ7DQogICAgICAgIGlmIChsYXlvdXQgPT0gbnVsbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LmxheW91dCA9IFsnWWVzJywgJ05vJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZih0eXBlb2YobGF5b3V0KSE9J29iamVjdCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5sYXlvdXQgPSBbJ09LJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQubGF5b3V0ID0gbGF5b3V0Ow0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldC5sYXlvdXQsICJ1c2VyIiwgeyB2YWx1ZTogdHJ1ZSB9KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RJTUVPVVQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b24gPT0gJ1llcycgfHwgcC5idXR0b24gPT0gJ09LJyB8fCB0aGlzLnByb21pc2UubGF5b3V0LnVzZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmJ1dHRvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLnNlcnZlci5jbG9zZSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBmb3IgKHZhciB4IGluIHRoaXMucmV0LmxheW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnJldC5sYXlvdXRbeF0gPSAnIicgKyB0aGlzLnJldC5sYXlvdXRbeF0gKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogdGhpcy5yZXQubGF5b3V0LCBidXR0b25EZWZhdWx0OiB0aGlzLnJldC5sYXlvdXRbdGhpcy5yZXQubGF5b3V0Lmxlbmd0aC0xXSwgdGltZW91dDogdGhpcy5yZXQudGltZW91dCB9KSk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQuY2xvc2UgPSBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZlcikgeyB0aGlzLnNlcnZlci5jbG9zZSgpOyB9DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIHRoaXMuc2V0Q2xpcGJvYXJkID0gZnVuY3Rpb24gc2V0Q2xpcGJvYXJkKGNsaXBUZXh0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIuY2xpcFRleHQgPSBjbGlwVGV4dDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dyaXRlQ2xpcCc6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5jbGlwRXJyb3IpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5jbGlwRXJyb3IpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ3dyaXRlQ2xpcCcsIGNsaXBUZXh0OiB0aGlzLmNsaXBUZXh0IH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5nZXRDbGlwYm9hcmQgPSBmdW5jdGlvbiBnZXRDbGlwYm9hcmQoKQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWFkQ2xpcCc6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5jbGlwRXJyb3IpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5jbGlwRXJyb3IpOw0KICAgICAg", 16000); + memcpy_s(_messagebox + 32000, 17000, "ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKHAuY2xpcFZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAncmVhZENsaXAnIH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5sb2NrID0gZnVuY3Rpb24gbG9jaygpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdMT0NLJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snIH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkodGl0bGUsIGNhcHRpb24pDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IA0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgdGl0bGU6IHRoaXMucmV0LnRpdGxlLCBjYXB0aW9uOiB0aGlzLnJldC5jYXB0aW9uIH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5zdGFydENsaWVudCA9IGZ1bmN0aW9uIHN0YXJ0Q2xpZW50KG9wdGlvbnMpDQogICAgew0KICAgICAgICAvLyBDcmVhdGUgdGhlIENsaWVudA0KICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICBvcHRpb25zLnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHRoaXMuY2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zKTsNCiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICB0aGlzLmNsaWVudC5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ3dyaXRlQ2xpcCc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9wYmNvcHknLCBbJ3BiY29weSddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuaXBjID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZShwLmNsaXBUZXh0LCBmdW5jdGlvbiAoKSB7IHRoaXMuZW5kKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pcGMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICd3cml0ZUNsaXAnLCBjbGlwRXJyb3I6IHRoaXMuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pcGMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICd3cml0ZUNsaXAnIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3JlYWRDbGlwJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy91c3IvYmluL3BicGFzdGUnLCBbJ3BicGFzdGUnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdyZWFkQ2xpcCcsIGNsaXBFcnJvcjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAncmVhZENsaXAnLCBjbGlwVmFsdWU6IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvTWVudVxcIEV4dHJhcy9Vc2VyLm1lbnUvQ29udGVudHMvUmVzb3VyY2VzL0NHU2Vzc2lvbiAtc3VzcGVuZFxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snLCBzdGF0dXM6IDAgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgbm90aWZpY2F0aW9uICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIlwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IHAudGltZW91dCA/ICgnIGdpdmluZyB1cCBhZnRlciAnICsgcC50aW1lb3V0KSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSBwLmJ1dHRvbnMgPyAoJ2J1dHRvbnMgeycgKyBwLmJ1dHRvbnMudG9TdHJpbmcoKSArICd9JykgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uRGVmYXVsdCAhPSBudWxsKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zICs9ICgnIGRlZmF1bHQgYnV0dG9uICcgKyBwLmJ1dHRvbkRlZmF1bHQpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC50aGF0ID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIgIT0gJycgJiYgIXRoaXMuc3RkZXJyLnN0ci5pbmNsdWRlcygnT3BlbkdMJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgYnV0dG9uOiB0aGlzLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuX3NoZWxsID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsKSB7IHRoaXMuX3NoZWxsLmtpbGwoKTsgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAvL3RoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIC8vaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycgJiYgIXRoaXMuX3NoZWxsLnN0ZGVyci5zdHIuaW5jbHVkZXMoJ09wZW5HTCcpKQ0KICAgICAgICAgICAgICAgICAgICAvL3sNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgLy99DQogICAgICAgICAgICAgICAgICAgIC8vZWxzZQ0KICAgICAgICAgICAgICAgICAgICAvL3sNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgaWYgKHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpID09ICdfVElNRU9VVF8nKQ0KICAgICAgICAgICAgICAgICAgICAvLyAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgdGltZW91dDogdHJ1ZSB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vICAgIH0NCiAgICAgICAgICAgICAgICAgICAgLy8gICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAvLyAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgYnV0dG9uOiB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyLnRyaW0oKSB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vICAgIH0NCiAgICAgICAgICAgICAgICAgICAgLy99DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy5jbGllbnQub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyB0aGlzLnVuaW5zdGFsbCgpOyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLnVuaW5zdGFsbCgpOyB9KTsNCiAgICAgICAgdGhpcy5jbGllbnQudW5pbnN0YWxsID0gZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gTmVlZCB0byB1bmluc3RhbGwgb3Vyc2VsdmVzDQogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSwgJy1leGVjJywgInZhciBzPXJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQoJyIgKyB0aGlzLl9vcHRpb25zLnNlcnZpY2UgKyAiJywgIiArIHRoaXMuX29wdGlvbnMudWlkICsgIik7IHMudW5sb2FkKCk7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhzLnBsaXN0KTtwcm9jZXNzLmV4aXQoKTsiXSwgeyBkZXRhY2hlZDogdHJ1ZSwgdHlwZTogcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLlNwYXduVHlwZXMuREVUQUNIRUQgfSk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4gKHRoaXMuY2xpZW50KTsNCiAgICB9Ow0KICAgIHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyID0gZnVuY3Rpb24gc3RhcnRNZXNzYWdlU2VydmVyKG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKG9wdGlvbnMucGF0aCkpIHsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKG9wdGlvbnMucGF0aCk7IH0NCiAgICAgICAgb3B0aW9ucy53cml0YWJsZUFsbCA9IHRydWU7DQoNCiAgICAgICAgdmFyIHJldCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOw0KICAgICAgICByZXQudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgcmV0Lm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICByZXQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICByZXQudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChvYmopDQogICAgICAgIHsNCiAgICAgICAgICAgIG9iai5jbG9zZSgpOw0KICAgICAgICAgICAgb2JqLl9vcHRpb25zLl9yZWooJ0Nvbm5lY3Rpb24gdGltZW91dCcpOw0KICAgICAgICB9LCA1MDAwLCByZXQpOw0KICAgICAgICByZXQubGlzdGVuKG9wdGlvbnMpOw0KICAgICAgICByZXQub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0Lm9uKCd+JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKHRoaXMuX29wdGlvbnMucGF0aCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuaW5zdGFsbExhdW5jaEFnZW50KA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLCBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywgdWlkOiBy", 16000); + memcpy_s(_messagebox + 48000, 1000, "ZXQudWlkLA0KICAgICAgICAgICAgICAgIHNlc3Npb25UeXBlczogWydBcXVhJ10sIHBhcmFtZXRlcnM6IFsnLWV4ZWMnLCAicmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5zdGFydENsaWVudCh7IHBhdGg6ICciICsgb3B0aW9ucy5wYXRoICsgIicsIHNlcnZpY2U6ICciICsgb3B0aW9ucy50bXBTZXJ2aWNlTmFtZSArICInIH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsiXQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQob3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgcmV0LnVpZCkubG9hZCgpOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQoNCnN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IGxpbnV4X21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWFjb3NfbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCn0NCg0KDQoNCg0KDQoNCg==", 1000); + ILibBase64DecodeEx((unsigned char*)_messagebox, 49000, (unsigned char*)_messagebox + 49000); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 49000); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_messagebox); diff --git a/modules/clipboard.js b/modules/clipboard.js index 4c8e4eb..6bf41e2 100644 --- a/modules/clipboard.js +++ b/modules/clipboard.js @@ -74,7 +74,7 @@ function dispatchRead(sid) id = sid; } - if(id == 0 || (process.platform == 'linux' && require('clipboard').xclip)) + if (id == 0 || process.platform == 'darwin' || (process.platform == 'linux' && require('clipboard').xclip)) { return (module.exports.read()); } @@ -134,7 +134,7 @@ function dispatchWrite(data, sid) id = sid; } - if (id == 0 || (process.platform == 'linux' && require('clipboard').xclip)) + if (id == 0 || process.platform == 'darwin' || (process.platform == 'linux' && require('clipboard').xclip)) { return(module.exports(data)); } @@ -486,6 +486,14 @@ function win_copytext(txt) user32.SetClipboardData(CF_UNICODETEXT, h); user32.CloseClipboard(); } +function macos_copytext(clipText) +{ + return (require('message-box').setClipboard(clipText)); +} +function macos_readtext() +{ + return (require('message-box').getClipboard()); +} switch(process.platform) { @@ -508,6 +516,8 @@ switch(process.platform) }); break; case 'darwin': + module.exports = macos_copytext; + module.exports.read = macos_readtext; break; } module.exports.nativeAddModule = nativeAddModule; diff --git a/modules/message-box.js b/modules/message-box.js index ad326ff..8c60259 100644 --- a/modules/message-box.js +++ b/modules/message-box.js @@ -548,6 +548,73 @@ function macos_messageBox() }; return (ret); }; + this.setClipboard = function setClipboard(clipText) + { + // Start Local Server + var ret = this._initIPCBase(); + ret.server = this.startMessageServer(ret); + ret.server.ret = ret; + ret.server.clipText = clipText; + ret.server.on('connection', function (c) + { + this._connection = c; + c.promise = this.ret; + c.on('data', function (buffer) + { + if (buffer.len < 4 || buffer.readUInt32LE(0) > buffer.len) { this.unshift(buffer); } + var p = JSON.parse(buffer.slice(4, buffer.readUInt32LE(0)).toString()); + switch (p.command) + { + case 'writeClip': + if (p.clipError) + { + this.promise._rej(p.clipError); + } + else + { + this.promise._res(); + } + break; + } + }); + c.write(translateObject({ command: 'writeClip', clipText: this.clipText })); + }); + + return (ret); + }; + this.getClipboard = function getClipboard() + { + // Start Local Server + var ret = this._initIPCBase(); + ret.server = this.startMessageServer(ret); + ret.server.ret = ret; + ret.server.on('connection', function (c) + { + this._connection = c; + c.promise = this.ret; + c.on('data', function (buffer) + { + if (buffer.len < 4 || buffer.readUInt32LE(0) > buffer.len) { this.unshift(buffer); } + var p = JSON.parse(buffer.slice(4, buffer.readUInt32LE(0)).toString()); + switch (p.command) + { + case 'readClip': + if (p.clipError) + { + this.promise._rej(p.clipError); + } + else + { + this.promise._res(p.clipValue); + } + break; + } + }); + c.write(translateObject({ command: 'readClip' })); + }); + + return (ret); + }; this.lock = function lock() { // Start Local Server @@ -621,6 +688,38 @@ function macos_messageBox() var p = JSON.parse(buffer.slice(4, buffer.readUInt32LE(0)).toString()); switch (p.command) { + case 'writeClip': + this._shell = require('child_process').execFile('/usr/bin/pbcopy', ['pbcopy']); + this._shell.ipc = this; + this._shell.stdout.str = ''; this._shell.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); + this._shell.stderr.str = ''; this._shell.stderr.on('data', function (chunk) { this.str += chunk.toString(); }); + this._shell.stdin.write(p.clipText, function () { this.end(); }); + this._shell.on('exit', function () + { + if (this.stderr.str != '') + { + this.ipc.end(translateObject({ command: 'writeClip', clipError: this.stderr.str })); + } + else + { + this.ipc.end(translateObject({ command: 'writeClip' })); + } + }); + break; + case 'readClip': + this._shell = require('child_process').execFile('/usr/bin/pbpaste', ['pbpaste']); + this._shell.stdout.str = ''; this._shell.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); + this._shell.stderr.str = ''; this._shell.stderr.on('data', function (chunk) { this.str += chunk.toString(); }); + this._shell.waitExit(); + if (this._shell.stderr.str != '') + { + this.end(translateObject({ command: 'readClip', clipError: this._shell.stderr.str })); + } + else + { + this.end(translateObject({ command: 'readClip', clipValue: this._shell.stdout.str })); + } + break; case 'LOCK': this._shell = require('child_process').execFile('/bin/sh', ['sh']); this._shell.stdout.str = ''; this._shell.stdout.on('data', function (chunk) { this.str += chunk.toString(); });