testcafe 1.17.2-alpha.1 → 1.17.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/test-run/index.js
CHANGED
|
@@ -346,8 +346,9 @@ class TestRun extends async_event_emitter_1.default {
|
|
|
346
346
|
else
|
|
347
347
|
this.fileDownloadingHandled = true;
|
|
348
348
|
}
|
|
349
|
-
|
|
350
|
-
|
|
349
|
+
handleAttachment(data) {
|
|
350
|
+
if (data.isOpenedInNewWindow)
|
|
351
|
+
this.attachmentDownloadingHandled = true;
|
|
351
352
|
}
|
|
352
353
|
handlePageError(ctx, err) {
|
|
353
354
|
this.pendingPageError = new test_run_1.PageLoadError(err, ctx.reqOpts.url);
|
|
@@ -1046,4 +1047,4 @@ class TestRun extends async_event_emitter_1.default {
|
|
|
1046
1047
|
}
|
|
1047
1048
|
exports.default = TestRun;
|
|
1048
1049
|
module.exports = exports.default;
|
|
1049
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1ydW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBSWdCO0FBRWhCLG9EQUE0QjtBQUM1QiwyREFBc0Q7QUFDdEQsc0VBQTZDO0FBQzdDLHdEQUFnQztBQUNoQyx1RkFBNkQ7QUFDN0QsNERBQTBDO0FBQzFDLGlHQUFvRjtBQUNwRixzRUFBcUQ7QUFDckQsK0NBQWlEO0FBRWpELGtEQVU2QjtBQUU3Qix3RUFBZ0Q7QUFDaEQsMkRBQTJDO0FBQzNDLDJEQUFtQztBQUNuQyxtRkFBeUQ7QUFDekQsb0VBQTRDO0FBQzVDLCtFQUFxRDtBQUNyRCwwREFBdUM7QUFDdkMsMEVBQXlEO0FBQ3pELDBGQUFnRTtBQUNoRSwrRUFBc0Q7QUFDdEQsdUZBQStEO0FBRS9ELDZEQVU2QjtBQUU3QixtRUFBcUQ7QUFDckQsMERBQXdFO0FBQ3hFLCtFQUF3RTtBQUN4RSw0Q0FBK0U7QUFFL0UsNENBUTBCO0FBRTFCLGdEQU00QjtBQUU1QiwyQ0FBa0U7QUFDbEUsNEZBQWlFO0FBQ2pFLCtGQUE0RTtBQUM1RSwrREFBeUY7QUFLekYsOEVBQXFEO0FBRXJELDhGQUFvRTtBQUNwRSw4RkFBb0U7QUFNcEUsZ0RBQW9FO0FBS3BFLHVHQUE2RTtBQU03RSxvREFBbUM7QUFFbkMsd0RBSWdDO0FBRWhDLG1IQUFrSjtBQUNsSiwyRkFBaUU7QUFDakUsaUdBQXVFO0FBQ3ZFLHVFQUE4QztBQUM5QyxzRUFBdUQ7QUFDdkQseUVBQWdEO0FBQ2hELDhGQUE4RDtBQUc5RCwrRkFBb0U7QUFFcEUsTUFBTSxXQUFXLEdBQW1CLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRSxNQUFNLHFCQUFxQixHQUFTLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0FBQy9GLE1BQU0sZUFBZSxHQUFlLFdBQVcsQ0FB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Q0FBQyxDQUFDLHlCQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBRSxHQUFrQjtRQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUM3QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7O2dCQUVHLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxPQUFPLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUF0ekNELDBCQXN6Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIHB1bGwsXG4gICAgcmVtb3ZlLFxuICAgIGNoYWluLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgbmFub2lkIGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgeyByZWFkU3luYyBhcyByZWFkIH0gZnJvbSAncmVhZC1maWxlLXJlbGF0aXZlJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IE11c3RhY2hlIGZyb20gJ211c3RhY2hlJztcbmltcG9ydCBBc3luY0V2ZW50RW1pdHRlciBmcm9tICcuLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0UnVuRGVidWdMb2cgZnJvbSAnLi9kZWJ1Zy1sb2cnO1xuaW1wb3J0IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlcic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuXG5pbXBvcnQge1xuICAgIFJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IsXG4gICAgUGFnZUxvYWRFcnJvcixcbiAgICBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcixcbiAgICBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yLFxuICAgIFdpbmRvd05vdEZvdW5kRXJyb3IsXG4gICAgUmVxdWVzdEhvb2tCYXNlRXJyb3IsXG4gICAgVGVzdFRpbWVvdXRFcnJvcixcbiAgICBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcixcbiAgICBSdW5UaW1lb3V0RXJyb3IsXG59IGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi8nO1xuXG5pbXBvcnQgQ0xJRU5UX01FU1NBR0VTIGZyb20gJy4vY2xpZW50LW1lc3NhZ2VzJztcbmltcG9ydCBDT01NQU5EX1RZUEUgZnJvbSAnLi9jb21tYW5kcy90eXBlJztcbmltcG9ydCBkZWxheSBmcm9tICcuLi91dGlscy9kZWxheSc7XG5pbXBvcnQgaXNQYXNzd29yZElucHV0IGZyb20gJy4uL3V0aWxzL2lzLXBhc3N3b3JkLWlucHV0JztcbmltcG9ydCB0ZXN0UnVuTWFya2VyIGZyb20gJy4vbWFya2VyLXN5bWJvbCc7XG5pbXBvcnQgdGVzdFJ1blRyYWNrZXIgZnJvbSAnLi4vYXBpL3Rlc3QtcnVuLXRyYWNrZXInO1xuaW1wb3J0IFJPTEVfUEhBU0UgZnJvbSAnLi4vcm9sZS9waGFzZSc7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5Ib3N0IGZyb20gJy4uL3JlcG9ydGVyL3BsdWdpbi1ob3N0JztcbmltcG9ydCBCcm93c2VyQ29uc29sZU1lc3NhZ2VzIGZyb20gJy4vYnJvd3Nlci1jb25zb2xlLW1lc3NhZ2VzJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRSBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5cbmltcG9ydCB7XG4gICAgU3RhdGVTbmFwc2hvdCxcbiAgICBTUEVDSUFMX0VSUk9SX1BBR0UsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgSW5qZWN0YWJsZVJlc291cmNlcyxcbiAgICBSZXF1ZXN0RXZlbnQsXG4gICAgQ29uZmlndXJlUmVzcG9uc2VFdmVudCxcbiAgICBSZXNwb25zZUV2ZW50LFxuICAgIFJlcXVlc3RIb29rTWV0aG9kRXJyb3IsXG4gICAgU3RvcmFnZXNTbmFwc2hvdCxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmltcG9ydCAqIGFzIElOSkVDVEFCTEVTIGZyb20gJy4uL2Fzc2V0cy9pbmplY3RhYmxlcyc7XG5pbXBvcnQgeyBmaW5kUHJvYmxlbWF0aWNTY3JpcHRzIH0gZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL3V0aWxzJztcbmltcG9ydCBnZXRDdXN0b21DbGllbnRTY3JpcHRVcmwgZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2dldC11cmwnO1xuaW1wb3J0IHsgZ2V0UGx1cmFsU3VmZml4LCBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuXG5pbXBvcnQge1xuICAgIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcixcbiAgICBpc0Jyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kLFxuICAgIGlzU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgaXNTZXJ2aWNlQ29tbWFuZCxcbiAgICBjYW5TZXREZWJ1Z2dlckJyZWFrcG9pbnRCZWZvcmVDb21tYW5kLFxuICAgIGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZCxcbiAgICBpc1Jlc2l6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICAgIEV4ZWN1dGVBc3luY0V4cHJlc3Npb25Db21tYW5kLFxuICAgIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCxcbiAgICBHZXRDdXJyZW50V2luZG93c0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dDb21tYW5kLFxufSBmcm9tICcuL2NvbW1hbmRzL2FjdGlvbnMnO1xuXG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUywgVEVTVF9SVU5fRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBwcm9jZXNzVGVzdEZuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL3Byb2Nlc3MtdGVzdC1mbi1lcnJvcic7XG5pbXBvcnQgUmVxdWVzdEhvb2tNZXRob2ROYW1lcyBmcm9tICcuLi9hcGkvcmVxdWVzdC1ob29rcy9ob29rLW1ldGhvZC1uYW1lcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXBsaWNhdG9yLCBTZWxlY3Rvck5vZGVUcmFuc2Zvcm0gfSBmcm9tICcuLi9jbGllbnQtZnVuY3Rpb25zL3JlcGxpY2F0b3InO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCBDYXB0dXJlciBmcm9tICcuLi9zY3JlZW5zaG90cy9jYXB0dXJlcic7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5pbXBvcnQgU2Vzc2lvbkNvbnRyb2xsZXIgZnJvbSAnLi9zZXNzaW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IFRlc3RDb250cm9sbGVyIGZyb20gJy4uL2FwaS90ZXN0LWNvbnRyb2xsZXInO1xuaW1wb3J0IEJyb3dzZXJNYW5pcHVsYXRpb25RdWV1ZSBmcm9tICcuL2Jyb3dzZXItbWFuaXB1bGF0aW9uLXF1ZXVlJztcbmltcG9ydCBPYnNlcnZlZENhbGxzaXRlc1N0b3JhZ2UgZnJvbSAnLi9vYnNlcnZlZC1jYWxsc2l0ZXMtc3RvcmFnZSc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0JztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgUXVhcmFudGluZSB9IGZyb20gJy4uL3V0aWxzL2dldC1vcHRpb25zL3F1YXJhbnRpbmUnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IERyaXZlclN0YXR1cyBmcm9tICcuLi9jbGllbnQvZHJpdmVyL3N0YXR1cyc7XG5pbXBvcnQgeyBDb21tYW5kQmFzZSwgQWN0aW9uQ29tbWFuZEJhc2UgfSBmcm9tICcuL2NvbW1hbmRzL2Jhc2UuanMnO1xuaW1wb3J0IFJvbGUgZnJvbSAnLi4vcm9sZS9yb2xlJztcbmltcG9ydCB7IFRlc3RSdW5FcnJvckJhc2UgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3JzJztcbmltcG9ydCB7IENhbGxzaXRlUmVjb3JkIH0gZnJvbSAnY2FsbHNpdGUtcmVjb3JkJztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBnZXRBc3NlcnRpb25UaW1lb3V0IGZyb20gJy4uL3V0aWxzL2dldC1vcHRpb25zL2dldC1hc3NlcnRpb24tdGltZW91dCc7XG5pbXBvcnQgeyBBc3NlcnRpb25Db21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24nO1xuLy9AdHMtaWdub3JlXG5pbXBvcnQgeyBUZXN0UnVuIGFzIExlZ2FjeVRlc3RSdW4gfSBmcm9tICd0ZXN0Y2FmZS1sZWdhY3ktYXBpJztcbmltcG9ydCB7IEF1dGhDcmVkZW50aWFscyB9IGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgVGVzdFJ1blBoYXNlIGZyb20gJy4vcGhhc2UnO1xuXG5pbXBvcnQge1xuICAgIEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQsXG4gICAgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZEJhc2UsXG4gICAgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCxcbn0gZnJvbSAnLi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5cbmltcG9ydCB7IFJFX0VYRUNVVEFCTEVfUFJPTUlTRV9NQVJLRVJfREVTQ1JJUFRJT04gfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXJpYWxpemF0aW9uL3JlcGxpY2F0b3IvdHJhbnNmb3Jtcy9yZS1leGVjdXRhYmxlLXByb21pc2UtdHJhbnNmb3JtL21hcmtlcic7XG5pbXBvcnQgUmVFeGVjdXRhYmxlUHJvbWlzZSBmcm9tICcuLi91dGlscy9yZS1leGVjdXRhYmxlLXByb21pc2UnO1xuaW1wb3J0IGFkZFJlbmRlcmVkV2FybmluZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL2FkZC1yZW5kZXJlZC13YXJuaW5nJztcbmltcG9ydCBnZXRCcm93c2VyIGZyb20gJy4uL3V0aWxzL2dldC1icm93c2VyJztcbmltcG9ydCBBc3NlcnRpb25FeGVjdXRvciBmcm9tICcuLi9hc3NlcnRpb25zL2V4ZWN1dG9yJztcbmltcG9ydCBhc3luY0ZpbHRlciBmcm9tICcuLi91dGlscy9hc3luYy1maWx0ZXInO1xuaW1wb3J0IFBST1hZTEVTU19DT01NQU5EUyBmcm9tICcuL3Byb3h5bGVzcy1jb21tYW5kcy1zdXBwb3J0JztcbmltcG9ydCBGaXh0dXJlIGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvZml4dHVyZSc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgZXhlY3V0ZUZuV2l0aFRpbWVvdXQgZnJvbSAnLi4vdXRpbHMvZXhlY3V0ZS1mbi13aXRoLXRpbWVvdXQnO1xuXG5jb25zdCBsYXp5UmVxdWlyZSAgICAgICAgICAgICAgICAgPSByZXF1aXJlKCdpbXBvcnQtbGF6eScpKHJlcXVpcmUpO1xuY29uc3QgQ2xpZW50RnVuY3Rpb25CdWlsZGVyICAgICAgID0gbGF6eVJlcXVpcmUoJy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInKTtcbmNvbnN0IFRlc3RSdW5Cb29rbWFyayAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2Jvb2ttYXJrJyk7XG5jb25zdCBhY3Rpb25Db21tYW5kcyAgICAgICAgICAgICAgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9hY3Rpb25zJyk7XG5jb25zdCBicm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZHMgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9icm93c2VyLW1hbmlwdWxhdGlvbicpO1xuY29uc3Qgc2VydmljZUNvbW1hbmRzICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvc2VydmljZScpO1xuY29uc3Qgb2JzZXJ2YXRpb25Db21tYW5kcyAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvb2JzZXJ2YXRpb24nKTtcblxuY29uc3QgeyBleGVjdXRlSnNFeHByZXNzaW9uLCBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24gfSA9IGxhenlSZXF1aXJlKCcuL2V4ZWN1dGUtanMtZXhwcmVzc2lvbicpO1xuXG5jb25zdCBURVNUX1JVTl9URU1QTEFURSAgICAgICAgICAgICAgID0gcmVhZCgnLi4vY2xpZW50L3Rlc3QtcnVuL2luZGV4LmpzLm11c3RhY2hlJykgYXMgc3RyaW5nO1xuY29uc3QgSUZSQU1FX1RFU1RfUlVOX1RFTVBMQVRFICAgICAgICA9IHJlYWQoJy4uL2NsaWVudC90ZXN0LXJ1bi9pZnJhbWUuanMubXVzdGFjaGUnKSBhcyBzdHJpbmc7XG5jb25zdCBURVNUX0RPTkVfQ09ORklSTUFUSU9OX1JFU1BPTlNFID0gJ3Rlc3QtZG9uZS1jb25maXJtYXRpb24nO1xuY29uc3QgTUFYX1JFU1BPTlNFX0RFTEFZICAgICAgICAgICAgICA9IDMwMDA7XG5jb25zdCBDSElMRF9XSU5ET1dfUkVBRFlfVElNRU9VVCAgICAgID0gMzAgKiAxMDAwO1xuXG5jb25zdCBBTExfRFJJVkVSX1RBU0tTX0FEREVEX1RPX1FVRVVFX0VWRU5UID0gJ2FsbC1kcml2ZXItdGFza3MtYWRkZWQtdG8tcXVldWUnO1xuXG5jb25zdCBDT01QSUxFUl9TRVJWSUNFX0VWRU5UUyA9IFtcbiAgICAnc2V0TW9jaycsXG4gICAgJ3NldENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRPcHRpb25zJyxcbiAgICAnc2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50JyxcbiAgICAncmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50Jyxcbl07XG5cblxuaW50ZXJmYWNlIFRlc3RSdW5Jbml0IHtcbiAgICB0ZXN0OiBUZXN0O1xuICAgIGJyb3dzZXJDb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICBzY3JlZW5zaG90Q2FwdHVyZXI6IENhcHR1cmVyO1xuICAgIGdsb2JhbFdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgY29tcGlsZXJTZXJ2aWNlPzogQ29tcGlsZXJTZXJ2aWNlO1xuICAgIG1lc3NhZ2VCdXM/OiBNZXNzYWdlQnVzO1xuICAgIHN0YXJ0UnVuRXhlY3V0aW9uVGltZT86IERhdGU7XG59XG5cbmludGVyZmFjZSBEcml2ZXJUYXNrIHtcbiAgICBjb21tYW5kOiBDb21tYW5kQmFzZTtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbiAgICByZWplY3Q6IEZ1bmN0aW9uO1xuICAgIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZDtcbn1cblxuaW50ZXJmYWNlIERyaXZlck1lc3NhZ2Uge1xuICAgIHN0YXR1czogRHJpdmVyU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdFRpbWVvdXQge1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgYWpheD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEV4ZWN1dGlvblRpbWVvdXQge1xuICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICByZWplY3RXaXRoOiBUZXN0VGltZW91dEVycm9yIHwgUnVuVGltZW91dEVycm9yO1xufVxuXG5pbnRlcmZhY2UgUGVuZGluZ1JlcXVlc3Qge1xuICAgIHJlc3BvbnNlVGltZW91dDogTm9kZUpTLlRpbWVvdXQ7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb247XG4gICAgcmVqZWN0OiBGdW5jdGlvbjtcbn1cblxuaW50ZXJmYWNlIEJyb3dzZXJNYW5pcHVsYXRpb25SZXN1bHQge1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICBlcnJvcjogRXJyb3I7XG59XG5cbmludGVyZmFjZSBPcGVuZWRXaW5kb3dJbmZvcm1hdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0UnVuIGV4dGVuZHMgQXN5bmNFdmVudEVtaXR0ZXIge1xuICAgIHByaXZhdGUgW3Rlc3RSdW5NYXJrZXJdOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSB3YXJuaW5nTG9nOiBXYXJuaW5nTG9nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgcHVibGljIHJlYWRvbmx5IHRlc3Q6IFRlc3Q7XG4gICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJDb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICBwdWJsaWMgdW5zdGFibGU6IGJvb2xlYW47XG4gICAgcHVibGljIHBoYXNlOiBUZXN0UnVuUGhhc2U7XG4gICAgcHJpdmF0ZSBkcml2ZXJUYXNrUXVldWU6IERyaXZlclRhc2tbXTtcbiAgICBwcml2YXRlIHRlc3REb25lQ29tbWFuZFF1ZXVlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgYWN0aXZlRGlhbG9nSGFuZGxlcjogRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB8IG51bGw7XG4gICAgcHVibGljIGFjdGl2ZUlmcmFtZVNlbGVjdG9yOiBFeGVjdXRlU2VsZWN0b3JDb21tYW5kIHwgbnVsbDtcbiAgICBwdWJsaWMgc3BlZWQ6IG51bWJlcjtcbiAgICBwdWJsaWMgcGFnZUxvYWRUaW1lb3V0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXN0RXhlY3V0aW9uVGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBydW5FeGVjdXRpb25UaW1lb3V0OiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbDtcbiAgICBwcml2YXRlIGRpc2FibGVQYWdlUmVsb2FkczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRpc2FibGVQYWdlQ2FjaGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRpc2FibGVNdWx0aXBsZVdpbmRvd3M6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZXF1ZXN0VGltZW91dDogUmVxdWVzdFRpbWVvdXQ7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlc3Npb246IFNlc3Npb25Db250cm9sbGVyO1xuICAgIHB1YmxpYyBjb25zb2xlTWVzc2FnZXM6IEJyb3dzZXJDb25zb2xlTWVzc2FnZXM7XG4gICAgcHJpdmF0ZSBwZW5kaW5nUmVxdWVzdDogUGVuZGluZ1JlcXVlc3QgfCBudWxsO1xuICAgIHByaXZhdGUgcGVuZGluZ1BhZ2VFcnJvcjogUGFnZUxvYWRFcnJvciB8IEVycm9yIHwgbnVsbDtcbiAgICBwdWJsaWMgY29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIgfCBudWxsO1xuICAgIHB1YmxpYyBjdHg6IG9iamVjdDtcbiAgICBwdWJsaWMgZml4dHVyZUN0eDogb2JqZWN0IHwgbnVsbDtcbiAgICBwcml2YXRlIGN1cnJlbnRSb2xlSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VkUm9sZVN0YXRlczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwdWJsaWMgZXJyczogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyW107XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U6IENvbW1hbmRCYXNlIHwgbnVsbCB8IHN0cmluZztcbiAgICBwcml2YXRlIGZpbGVEb3dubG9hZGluZ0hhbmRsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHJpdmF0ZSBhZGRpbmdEcml2ZXJUYXNrc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGRlYnVnZ2luZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnT25GYWlsOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZURlYnVnQnJlYWtwb2ludHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdDogUmVwb3J0ZXJQbHVnaW5Ib3N0O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlOiBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWU7XG4gICAgcHJpdmF0ZSBkZWJ1Z0xvZzogVGVzdFJ1bkRlYnVnTG9nO1xuICAgIHB1YmxpYyBxdWFyYW50aW5lOiBRdWFyYW50aW5lIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBhbnk7XG4gICAgcHVibGljIG9ic2VydmVkQ2FsbHNpdGVzOiBPYnNlcnZlZENhbGxzaXRlc1N0b3JhZ2U7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcGxpY2F0b3I6IGFueTtcbiAgICBwcml2YXRlIGRpc2Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGVyclNjcmVlbnNob3RQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHByaXZhdGUgYXN5bmNKc0V4cHJlc3Npb25DYWxsc2l0ZXM6IE1hcDxzdHJpbmcsIENhbGxzaXRlUmVjb3JkPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJvd3NlcjogQnJvd3NlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlQnVzPzogTWVzc2FnZUJ1cztcbiAgICBwcml2YXRlIF9jbGllbnRFbnZpcm9ubWVudFByZXBhcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXJ0UnVuRXhlY3V0aW9uVGltZT86IERhdGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHsgdGVzdCwgYnJvd3NlckNvbm5lY3Rpb24sIHNjcmVlbnNob3RDYXB0dXJlciwgZ2xvYmFsV2FybmluZ0xvZywgb3B0cywgY29tcGlsZXJTZXJ2aWNlLCBtZXNzYWdlQnVzLCBzdGFydFJ1bkV4ZWN1dGlvblRpbWUgfTogVGVzdFJ1bkluaXQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzW3Rlc3RSdW5NYXJrZXJdICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cyAgICAgICA9IG1lc3NhZ2VCdXM7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgICAgPSBuZXcgV2FybmluZ0xvZyhnbG9iYWxXYXJuaW5nTG9nLCBXYXJuaW5nTG9nLmNyZWF0ZUFkZFdhcm5pbmdDYWxsYmFjayhtZXNzYWdlQnVzLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0cyAgICAgICAgICAgICAgPSBvcHRzO1xuICAgICAgICB0aGlzLnRlc3QgICAgICAgICAgICAgID0gdGVzdDtcbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbiA9IGJyb3dzZXJDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLnVuc3RhYmxlICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnJvd3NlciAgICAgICAgICAgPSBnZXRCcm93c2VyKGJyb3dzZXJDb25uZWN0aW9uKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluaXRpYWw7XG5cbiAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIgID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVTZWxlY3RvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc3BlZWQgICAgICAgICAgICAgICAgPSB0aGlzLm9wdHMuc3BlZWQgYXMgbnVtYmVyO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkVGltZW91dCAgICAgID0gdGhpcy5fZ2V0UGFnZUxvYWRUaW1lb3V0KHRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnRlc3RFeGVjdXRpb25UaW1lb3V0ID0gdGhpcy5fZ2V0VGVzdEV4ZWN1dGlvblRpbWVvdXQob3B0cyk7XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgICA9IHRlc3QuZGlzYWJsZVBhZ2VSZWxvYWRzIHx8IG9wdHMuZGlzYWJsZVBhZ2VSZWxvYWRzIGFzIGJvb2xlYW4gJiYgdGVzdC5kaXNhYmxlUGFnZVJlbG9hZHMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlQ2FjaGluZyAgID0gdGVzdC5kaXNhYmxlUGFnZUNhY2hpbmcgfHwgb3B0cy5kaXNhYmxlUGFnZUNhY2hpbmcgYXMgYm9vbGVhbjtcblxuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVdpbmRvd3MgPSBvcHRzLmRpc2FibGVNdWx0aXBsZVdpbmRvd3MgYXMgYm9vbGVhbjtcblxuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0ID0gdGhpcy5fZ2V0UmVxdWVzdFRpbWVvdXQodGVzdCwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gU2Vzc2lvbkNvbnRyb2xsZXIuZ2V0U2Vzc2lvbih0aGlzKTtcblxuICAgICAgICB0aGlzLmNvbnNvbGVNZXNzYWdlcyA9IG5ldyBCcm93c2VyQ29uc29sZU1lc3NhZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbnVsbDtcblxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmN0eCAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmZpeHR1cmVDdHggPSBudWxsO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCAgPSBudWxsO1xuICAgICAgICB0aGlzLnVzZWRSb2xlU3RhdGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB0aGlzLmVycnMgPSBbXTtcblxuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNJZCAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50ID0gMDtcblxuICAgICAgICB0aGlzLmRlYnVnZ2luZyAgICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnTW9kZSBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmRlYnVnT25GYWlsICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnT25GYWlsIGFzIGJvb2xlYW47XG4gICAgICAgIHRoaXMuZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdCA9IG5ldyBSZXBvcnRlclBsdWdpbkhvc3QoeyBub0NvbG9yczogZmFsc2UgfSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUgPSBuZXcgQnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlKGJyb3dzZXJDb25uZWN0aW9uLCBzY3JlZW5zaG90Q2FwdHVyZXIsIHRoaXMud2FybmluZ0xvZyk7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyA9IG5ldyBUZXN0UnVuRGVidWdMb2codGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpO1xuXG4gICAgICAgIHRoaXMucXVhcmFudGluZSAgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgPSB0aGlzLm9wdHMuZGVidWdMb2dnZXI7XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlZENhbGxzaXRlcyAgICAgICAgICA9IG5ldyBPYnNlcnZlZENhbGxzaXRlc1N0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgICAgICAgICA9IGNvbXBpbGVyU2VydmljZTtcbiAgICAgICAgdGhpcy5hc3luY0pzRXhwcmVzc2lvbkNhbGxzaXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBDYWxsc2l0ZVJlY29yZD4oKTtcblxuICAgICAgICB0aGlzLnJlcGxpY2F0b3IgPSBjcmVhdGVSZXBsaWNhdG9yKFsgbmV3IFNlbGVjdG9yTm9kZVRyYW5zZm9ybSgpIF0pO1xuXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGVkICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJTY3JlZW5zaG90UGF0aCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zdGFydFJ1bkV4ZWN1dGlvblRpbWUgPSBzdGFydFJ1bkV4ZWN1dGlvblRpbWU7XG4gICAgICAgIHRoaXMucnVuRXhlY3V0aW9uVGltZW91dCAgID0gdGhpcy5fZ2V0UnVuRXhlY3V0aW9uVGltZW91dChvcHRzKTtcblxuICAgICAgICB0aGlzLl9hZGRJbmplY3RhYmxlcygpO1xuICAgICAgICB0aGlzLl9pbml0UmVxdWVzdEhvb2tzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UGFnZUxvYWRUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IG51bWJlciB7XG4gICAgICAgIGlmICh0ZXN0LnRpbWVvdXRzPy5wYWdlTG9hZFRpbWVvdXQgIT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybiB0ZXN0LnRpbWVvdXRzLnBhZ2VMb2FkVGltZW91dDtcblxuICAgICAgICByZXR1cm4gb3B0cy5wYWdlTG9hZFRpbWVvdXQgYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlcXVlc3RUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IFJlcXVlc3RUaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2U6IHRlc3QudGltZW91dHM/LnBhZ2VSZXF1ZXN0VGltZW91dCB8fCBvcHRzLnBhZ2VSZXF1ZXN0VGltZW91dCBhcyBudW1iZXIsXG4gICAgICAgICAgICBhamF4OiB0ZXN0LnRpbWVvdXRzPy5hamF4UmVxdWVzdFRpbWVvdXQgfHwgb3B0cy5hamF4UmVxdWVzdFRpbWVvdXQgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV4ZWN1dGlvblRpbWVvdXQgKHRpbWVvdXQ6IG51bWJlciwgZXJyb3I6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3IpOiBFeGVjdXRpb25UaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICByZWplY3RXaXRoOiBlcnJvcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUZXN0RXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHRlc3RFeGVjdXRpb25UaW1lb3V0ID0gb3B0cy50ZXN0RXhlY3V0aW9uVGltZW91dCBhcyBudW1iZXIgfHwgMDtcblxuICAgICAgICBpZiAoIXRlc3RFeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQodGVzdEV4ZWN1dGlvblRpbWVvdXQsIG5ldyBUZXN0VGltZW91dEVycm9yKHRlc3RFeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UnVuRXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJ1bkV4ZWN1dGlvblRpbWVvdXQgPSBvcHRzLnJ1bkV4ZWN1dGlvblRpbWVvdXQgYXMgbnVtYmVyIHx8IDA7XG5cbiAgICAgICAgaWYgKCFydW5FeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQocnVuRXhlY3V0aW9uVGltZW91dCwgbmV3IFJ1blRpbWVvdXRFcnJvcihydW5FeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN0UnVuRXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRSdW5FeGVjdXRpb25UaW1lIHx8ICF0aGlzLnJ1bkV4ZWN1dGlvblRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBjdXJyZW50VGltZW91dCA9IE1hdGgubWF4KHRoaXMucnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IC0gKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZS5nZXRUaW1lKCkpLCAwKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RXhlY3V0aW9uVGltZW91dChjdXJyZW50VGltZW91dCwgdGhpcy5ydW5FeGVjdXRpb25UaW1lb3V0LnJlamVjdFdpdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dCAmJiAoIXRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IDwgdGhpcy50ZXN0RXhlY3V0aW9uVGltZW91dC50aW1lb3V0KVxuICAgICAgICAgICAgPyB0aGlzLnJlc3RSdW5FeGVjdXRpb25UaW1lb3V0XG4gICAgICAgICAgICA6IHRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGRDbGllbnRTY3JpcHRDb250ZW50V2FybmluZ3NJZk5lY2Vzc2FyeSAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZW1wdHksIGR1cGxpY2F0ZWRDb250ZW50IH0gPSBmaW5kUHJvYmxlbWF0aWNTY3JpcHRzKHRoaXMudGVzdC5jbGllbnRTY3JpcHRzIGFzIENsaWVudFNjcmlwdFtdKTtcblxuICAgICAgICBpZiAoZW1wdHkubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFLmNsaWVudFNjcmlwdHNXaXRoRW1wdHlDb250ZW50KTtcblxuICAgICAgICBpZiAoZHVwbGljYXRlZENvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRQbHVyYWxTdWZmaXgoZHVwbGljYXRlZENvbnRlbnQpO1xuICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlZENvbnRlbnRDbGllbnRTY3JpcHRzU3RyID0gZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKGR1cGxpY2F0ZWRDb250ZW50LCAnXFxuJyk7XG5cbiAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKFdBUk5JTkdfTUVTU0FHRS5jbGllbnRTY3JpcHRzV2l0aER1cGxpY2F0ZWRDb250ZW50LCBzdWZmaXgsIGR1cGxpY2F0ZWRDb250ZW50Q2xpZW50U2NyaXB0c1N0cik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGRJbmplY3RhYmxlcyAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZENsaWVudFNjcmlwdENvbnRlbnRXYXJuaW5nc0lmTmVjZXNzYXJ5KCk7XG4gICAgICAgIHRoaXMuaW5qZWN0YWJsZS5zY3JpcHRzLnB1c2goLi4uSU5KRUNUQUJMRVMuU0NSSVBUUyk7XG4gICAgICAgIHRoaXMuaW5qZWN0YWJsZS51c2VyU2NyaXB0cy5wdXNoKC4uLnRoaXMudGVzdC5jbGllbnRTY3JpcHRzLm1hcChzY3JpcHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6ICBnZXRDdXN0b21DbGllbnRTY3JpcHRVcmwoc2NyaXB0IGFzIENsaWVudFNjcmlwdCksXG4gICAgICAgICAgICAgICAgcGFnZTogc2NyaXB0LnBhZ2UgYXMgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuaW5qZWN0YWJsZS5zdHlsZXMucHVzaChJTkpFQ1RBQkxFUy5URVNUQ0FGRV9VSV9TVFlMRVMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWQgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbmplY3RhYmxlICgpOiBJbmplY3RhYmxlUmVzb3VyY2VzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5pbmplY3RhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRRdWFyYW50aW5lSW5mbyAocXVhcmFudGluZTogUXVhcmFudGluZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1YXJhbnRpbmUgPSBxdWFyYW50aW5lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSZXF1ZXN0SG9vayAoaG9vazogUmVxdWVzdEhvb2spOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MuaW5jbHVkZXMoaG9vaykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5wdXNoKGhvb2spO1xuICAgICAgICB0aGlzLl9pbml0UmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGVzdC5yZXF1ZXN0SG9va3MuaW5jbHVkZXMoaG9vaykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgcHVsbCh0aGlzLnRlc3QucmVxdWVzdEhvb2tzLCBob29rKTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZVJlcXVlc3RIb29rKGhvb2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRSZXF1ZXN0SG9vayAoaG9vazogUmVxdWVzdEhvb2spOiB2b2lkIHtcbiAgICAgICAgaG9vay5fd2FybmluZ0xvZyA9IHRoaXMud2FybmluZ0xvZztcblxuICAgICAgICBob29rLl9yZXF1ZXN0RmlsdGVyUnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMocnVsZSwge1xuICAgICAgICAgICAgICAgIG9uUmVxdWVzdDogICAgICAgICAgIGhvb2sub25SZXF1ZXN0LmJpbmQoaG9vayksXG4gICAgICAgICAgICAgICAgb25Db25maWd1cmVSZXNwb25zZTogaG9vay5fb25Db25maWd1cmVSZXNwb25zZS5iaW5kKGhvb2spLFxuICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6ICAgICAgICAgIGhvb2sub25SZXNwb25zZS5iaW5kKGhvb2spLFxuICAgICAgICAgICAgfSwgKGVycjogUmVxdWVzdEhvb2tNZXRob2RFcnJvcikgPT4gdGhpcy5fb25SZXF1ZXN0SG9va01ldGhvZEVycm9yKGVyciwgaG9vay5fY2xhc3NOYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRSZXF1ZXN0SG9va0ZvckNvbXBpbGVyU2VydmljZSAoaG9va0lkOiBzdHJpbmcsIGhvb2tDbGFzc05hbWU6IHN0cmluZywgcnVsZXM6IFJlcXVlc3RGaWx0ZXJSdWxlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGVzdElkID0gdGhpcy50ZXN0LmlkO1xuXG4gICAgICAgIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzKHJ1bGUsIHtcbiAgICAgICAgICAgICAgICBvblJlcXVlc3Q6ICAgICAgICAgICAoZXZlbnQ6IFJlcXVlc3RFdmVudCkgPT4gdGhpcy5jb21waWxlclNlcnZpY2U/Lm9uUmVxdWVzdEhvb2tFdmVudCh7IHRlc3RJZCwgaG9va0lkLCBuYW1lOiBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLm9uUmVxdWVzdCwgZXZlbnREYXRhOiBldmVudCB9KSxcbiAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyZVJlc3BvbnNlOiAoZXZlbnQ6IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQpID0+IHRoaXMuY29tcGlsZXJTZXJ2aWNlPy5vblJlcXVlc3RIb29rRXZlbnQoeyB0ZXN0SWQsIGhvb2tJZCwgbmFtZTogUmVxdWVzdEhvb2tNZXRob2ROYW1lcy5fb25Db25maWd1cmVSZXNwb25zZSwgZXZlbnREYXRhOiBldmVudCB9KSxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlOiAgICAgICAgICAoZXZlbnQ6IFJlc3BvbnNlRXZlbnQpID0+IHRoaXMuY29tcGlsZXJTZXJ2aWNlPy5vblJlcXVlc3RIb29rRXZlbnQoeyB0ZXN0SWQsIGhvb2tJZCwgbmFtZTogUmVxdWVzdEhvb2tNZXRob2ROYW1lcy5vblJlc3BvbnNlLCBldmVudERhdGE6IGV2ZW50IH0pLFxuICAgICAgICAgICAgfSwgZXJyID0+IHRoaXMuX29uUmVxdWVzdEhvb2tNZXRob2RFcnJvcihlcnIsIGhvb2tDbGFzc05hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25SZXF1ZXN0SG9va01ldGhvZEVycm9yIChldmVudDogUmVxdWVzdEhvb2tNZXRob2RFcnJvciwgaG9va0NsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBlcnI6IEVycm9yIHwgVGVzdFJ1bkVycm9yQmFzZSAgICAgICAgICAgID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGNvbnN0IGlzUmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZE1ldGhvZEVycm9yID0gKGVyciBhcyB1bmtub3duIGFzIFRlc3RSdW5FcnJvckJhc2UpPy5jb2RlID09PSBURVNUX1JVTl9FUlJPUlMucmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZEVycm9yO1xuXG4gICAgICAgIGlmICghaXNSZXF1ZXN0SG9va05vdEltcGxlbWVudGVkTWV0aG9kRXJyb3IpXG4gICAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEhvb2tVbmhhbmRsZWRFcnJvcihlcnIsIGhvb2tDbGFzc05hbWUsIGV2ZW50Lm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNwb3NlUmVxdWVzdEhvb2sgKGhvb2s6IFJlcXVlc3RIb29rKTogdm9pZCB7XG4gICAgICAgIGhvb2suX3dhcm5pbmdMb2cgPSBudWxsO1xuXG4gICAgICAgIGhvb2suX3JlcXVlc3RGaWx0ZXJSdWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0YWNoUmVxdWVzdEV2ZW50TGlzdGVuZXJzIChydWxlczogUmVxdWVzdEZpbHRlclJ1bGVbXSk6IHZvaWQge1xuICAgICAgICBydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlT25Db21waWxlclNlcnZpY2VFdmVudHMgKCk6IHZvaWQge1xuICAgICAgICBDT01QSUxFUl9TRVJWSUNFX0VWRU5UUy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21waWxlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVyU2VydmljZS5vbihldmVudE5hbWUsIGFzeW5jIGFyZ3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Vzc2lvbltldmVudE5hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb21waWxlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZXJTZXJ2aWNlLm9uKCdhZGRSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMnLCBhc3luYyAoeyBob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0UmVxdWVzdEhvb2tGb3JDb21waWxlclNlcnZpY2UoaG9va0lkLCBob29rQ2xhc3NOYW1lLCBydWxlcyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2Uub24oJ3JlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycycsIGFzeW5jICh7IHJ1bGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXRhY2hSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMocnVsZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0UmVxdWVzdEhvb2tzICgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVPbkNvbXBpbGVyU2VydmljZUV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5mb3JFYWNoKGhvb2sgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRSZXF1ZXN0SG9va0ZvckNvbXBpbGVyU2VydmljZShob29rLmlkLCBob29rLl9jbGFzc05hbWUsIGhvb2suX3JlcXVlc3RGaWx0ZXJSdWxlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnRlc3QucmVxdWVzdEhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLl9pbml0UmVxdWVzdEhvb2soaG9vaykpO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgcGF5bG9hZFxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXlsb2FkU2NyaXB0ICgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcihURVNUX1JVTl9URU1QTEFURSwge1xuICAgICAgICAgICAgdGVzdFJ1bklkOiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXNzaW9uLmlkKSxcbiAgICAgICAgICAgIGJyb3dzZXJJZDogICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaWQpLFxuICAgICAgICAgICAgYnJvd3NlckhlYXJ0YmVhdFJlbGF0aXZlVXJsOiAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5oZWFydGJlYXRSZWxhdGl2ZVVybCksXG4gICAgICAgICAgICBicm93c2VyU3RhdHVzUmVsYXRpdmVVcmw6ICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnN0YXR1c1JlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJTdGF0dXNEb25lUmVsYXRpdmVVcmw6IEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uc3RhdHVzRG9uZVJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJBY3RpdmVXaW5kb3dJZFVybDogICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWRVcmwpLFxuICAgICAgICAgICAgdXNlckFnZW50OiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpLFxuICAgICAgICAgICAgdGVzdE5hbWU6ICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50ZXN0Lm5hbWUpLFxuICAgICAgICAgICAgZml4dHVyZU5hbWU6ICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKHRoaXMudGVzdC5maXh0dXJlIGFzIEZpeHR1cmUpLm5hbWUpLFxuICAgICAgICAgICAgc2VsZWN0b3JUaW1lb3V0OiAgICAgICAgICAgICAgdGhpcy5vcHRzLnNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgICAgIHBhZ2VMb2FkVGltZW91dDogICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0LFxuICAgICAgICAgICAgY2hpbGRXaW5kb3dSZWFkeVRpbWVvdXQ6ICAgICAgQ0hJTERfV0lORE9XX1JFQURZX1RJTUVPVVQsXG4gICAgICAgICAgICBza2lwSnNFcnJvcnM6ICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuc2tpcEpzRXJyb3JzLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICAgICAgc3BlZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVlZCxcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6ICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciksXG4gICAgICAgICAgICBjYW5Vc2VEZWZhdWx0V2luZG93QWN0aW9uczogICBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SWZyYW1lUGF5bG9hZFNjcmlwdCAoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcihJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUsIHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXNzaW9uLmlkKSxcbiAgICAgICAgICAgIHNlbGVjdG9yVGltZW91dDogdGhpcy5vcHRzLnNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgICAgIHBhZ2VMb2FkVGltZW91dDogdGhpcy5wYWdlTG9hZFRpbWVvdXQsXG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogICEhdGhpcy5vcHRzLnJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICAgICAgc3BlZWQ6ICAgICAgICAgICB0aGlzLnNwZWVkLFxuICAgICAgICAgICAgZGlhbG9nSGFuZGxlcjogICBKU09OLnN0cmluZ2lmeSh0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW1tZXJoZWFkIGhhbmRsZXJzXG4gICAgcHVibGljIGdldEF1dGhDcmVkZW50aWFscyAoKTogbnVsbCB8IEF1dGhDcmVkZW50aWFscyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3QuYXV0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWxlRG93bmxvYWQgKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZmlsZURvd25sb2FkaW5nSGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUF0dGFjaG1lbnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVQYWdlRXJyb3IgKGN0eDogYW55LCBlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IG5ldyBQYWdlTG9hZEVycm9yKGVyciwgY3R4LnJlcU9wdHMudXJsKTtcblxuICAgICAgICBjdHgucmVkaXJlY3QoY3R4LnRvUHJveHlVcmwoU1BFQ0lBTF9FUlJPUl9QQUdFKSk7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBmdW5jdGlvbiBleGVjdXRpb25cbiAgICBwcml2YXRlIGFzeW5jIF9leGVjdXRlVGVzdEZuIChwaGFzZTogVGVzdFJ1blBoYXNlLCBmbjogRnVuY3Rpb24sIHRpbWVvdXQ6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMucGhhc2UgPSBwaGFzZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUZuV2l0aFRpbWVvdXQoZm4sIHRpbWVvdXQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX21ha2VTY3JlZW5zaG90T25GYWlsKCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5lcnJTY3JlZW5zaG90UGF0aCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXRoaXMuX2FkZFBlbmRpbmdQYWdlRXJyb3JJZkFueSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3J1bkJlZm9yZUhvb2sgKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy50ZXN0Lmdsb2JhbEJlZm9yZUZuKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QmVmb3JlSG9vaywgdGhpcy50ZXN0Lmdsb2JhbEJlZm9yZUZuLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3QuYmVmb3JlRm4pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QmVmb3JlSG9vaywgdGhpcy50ZXN0LmJlZm9yZUZuLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3QuZml4dHVyZT8uYmVmb3JlRWFjaEZuKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluRml4dHVyZUJlZm9yZUVhY2hIb29rLCB0aGlzLnRlc3QuZml4dHVyZT8uYmVmb3JlRWFjaEZuLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3J1bkFmdGVySG9vayAoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICh0aGlzLnRlc3QuZ2xvYmFsQWZ0ZXJGbilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEFmdGVySG9vaywgdGhpcy50ZXN0Lmdsb2JhbEFmdGVyRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5hZnRlckZuKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEFmdGVySG9vaywgdGhpcy50ZXN0LmFmdGVyRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5maXh0dXJlPy5hZnRlckVhY2hGbilcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pbkZpeHR1cmVBZnRlckVhY2hIb29rLCB0aGlzLnRlc3QuZml4dHVyZT8uYWZ0ZXJFYWNoRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZmluYWxpemVUZXN0UnVuIChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5nZXRXYXJuaW5nTWVzc2FnZXMoeyB0ZXN0UnVuSWQ6IGlkIH0pO1xuXG4gICAgICAgICAgICB3YXJuaW5ncy5mb3JFYWNoKHdhcm5pbmcgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHdhcm5pbmcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXJTZXJ2aWNlLnJlbW92ZVRlc3RSdW5Gcm9tU3RhdGUoeyB0ZXN0UnVuSWQ6IGlkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVzdFJ1blRyYWNrZXIucmVtb3ZlQWN0aXZlVGVzdFJ1bihpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGVzdFJ1blRyYWNrZXIuYWRkQWN0aXZlVGVzdFJ1bih0aGlzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG5cbiAgICAgICAgY29uc3Qgb25EaXNjb25uZWN0ZWQgPSAoZXJyOiBFcnJvcik6IHZvaWQgPT4gdGhpcy5fZGlzY29ubmVjdChlcnIpO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ub25jZSgnZGlzY29ubmVjdGVkJywgb25EaXNjb25uZWN0ZWQpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMub25jZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyZWFkeScpO1xuXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLl9ydW5CZWZvcmVIb29rKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdCwgdGhpcy50ZXN0LmZuIGFzIEZ1bmN0aW9uLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcnVuQWZ0ZXJIb29rKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNjb25uZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5waGFzZSA9IFRlc3RSdW5QaGFzZS5wZW5kaW5nRmluYWxpemF0aW9uO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucmVtb3ZlTGlzdGVuZXIoJ2Rpc2Nvbm5lY3RlZCcsIG9uRGlzY29ubmVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5lcnJzLmxlbmd0aCAmJiB0aGlzLmRlYnVnT25GYWlsKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSB0aGlzLmRlYnVnUmVwb3J0ZXJQbHVnaW5Ib3N0LmZvcm1hdEVycm9yKHRoaXMuZXJyc1swXSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZCh2b2lkIDAsIGVyclN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZS1kb25lJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlRlc3REb25lQ29tbWFuZCgpKTtcblxuICAgICAgICB0aGlzLl9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkoKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyUmVxdWVzdEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMubm9ybWFsaXplUmVxdWVzdEhvb2tFcnJvcnMoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9maW5hbGl6ZVRlc3RSdW4odGhpcy5zZXNzaW9uLmlkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvcnNcbiAgICBwcml2YXRlIF9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkgKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUGFnZUVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKHRoaXMucGVuZGluZ1BhZ2VFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVFcnJvcklkIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmlkID0gZXJyLmlkIHx8IG5hbm9pZCg3KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVFcnJvckFkYXB0ZXIgKGVycjogRXJyb3IpOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIge1xuICAgICAgICB0aGlzLl9lbnN1cmVFcnJvcklkKGVycik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIoZXJyLCB7XG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQsXG4gICAgICAgICAgICBzY3JlZW5zaG90UGF0aDogdGhpcy5lcnJTY3JlZW5zaG90UGF0aCB8fCAnJyxcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgdGVzdFJ1blBoYXNlOiAgIHRoaXMucGhhc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFcnJvciAoZXJyOiBFcnJvciB8IFRlc3RDYWZlRXJyb3JMaXN0IHwgVGVzdFJ1bkVycm9yQmFzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJMaXN0ID0gKGVyciBpbnN0YW5jZW9mIFRlc3RDYWZlRXJyb3JMaXN0ID8gZXJyLml0ZW1zIDogW2Vycl0pIGFzIEVycm9yW107XG5cbiAgICAgICAgZXJyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2NyZWF0ZUVycm9yQWRhcHRlcihpdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5lcnJzLnB1c2goYWRhcHRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemVSZXF1ZXN0SG9va0Vycm9ycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIb29rRXJyb3JzID0gcmVtb3ZlKHRoaXMuZXJycywgZSA9PlxuICAgICAgICAgICAgKGUgYXMgdW5rbm93biBhcyBUZXN0UnVuRXJyb3JCYXNlKS5jb2RlID09PSBURVNUX1JVTl9FUlJPUlMucmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZEVycm9yIHx8XG4gICAgICAgICAgICAoZSBhcyB1bmtub3duIGFzIFRlc3RSdW5FcnJvckJhc2UpLmNvZGUgPT09IFRFU1RfUlVOX0VSUk9SUy5yZXF1ZXN0SG9va1VuaGFuZGxlZEVycm9yKTtcblxuICAgICAgICBpZiAoIXJlcXVlc3RIb29rRXJyb3JzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB1bmlxUmVxdWVzdEhvb2tFcnJvcnMgPSBjaGFpbihyZXF1ZXN0SG9va0Vycm9ycylcbiAgICAgICAgICAgIC51bmlxQnkoZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gZSBhcyB1bmtub3duIGFzIFJlcXVlc3RIb29rQmFzZUVycm9yO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyci5ob29rQ2xhc3NOYW1lICsgZXJyLm1ldGhvZE5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNvcnRCeShbJ2hvb2tDbGFzc05hbWUnLCAnbWV0aG9kTmFtZSddKVxuICAgICAgICAgICAgLnZhbHVlKCk7XG5cbiAgICAgICAgdGhpcy5lcnJzID0gdGhpcy5lcnJzLmNvbmNhdCh1bmlxUmVxdWVzdEhvb2tFcnJvcnMpO1xuICAgIH1cblxuICAgIC8vIFRhc2sgcXVldWVcbiAgICBwcml2YXRlIF9lbnF1ZXVlQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdClcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVQZW5kaW5nUmVxdWVzdChjb21tYW5kKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50LS07XG4gICAgICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZS5wdXNoKHsgY29tbWFuZCwgcmVzb2x2ZSwgcmVqZWN0LCBjYWxsc2l0ZSB9KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmFkZGluZ0RyaXZlclRhc2tzQ291bnQpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQsIHRoaXMuZHJpdmVyVGFza1F1ZXVlLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZHJpdmVyVGFza1F1ZXVlTGVuZ3RoICgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50ID8gcHJvbWlzaWZ5RXZlbnQodGhpcyBhcyB1bmtub3duIGFzIEV2ZW50RW1pdHRlciwgQUxMX0RSSVZFUl9UQVNLU19BRERFRF9UT19RVUVVRV9FVkVOVCkgOiBQcm9taXNlLnJlc29sdmUodGhpcy5kcml2ZXJUYXNrUXVldWUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2VucXVldWVCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgY29uc3QgY29uc29sZU1lc3NhZ2VDb3B5ID0gdGhpcy5jb25zb2xlTWVzc2FnZXMuZ2V0Q29weSgpO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIGNvbnNvbGVNZXNzYWdlQ29weVtTdHJpbmcodGhpcy5hY3RpdmVXaW5kb3dJZCldO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZCAoY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkIHwgdW5kZWZpbmVkLCBlcnJvcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Z0xvZ2dlcilcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIuc2hvd0JyZWFrcG9pbnQodGhpcy5zZXNzaW9uLmlkLCB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnVzZXJBZ2VudCwgY2FsbHNpdGUsIGVycm9yKTtcblxuICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IHNlcnZpY2VDb21tYW5kcy5TZXRCcmVha3BvaW50Q29tbWFuZCghIWVycm9yLCAhIXRoaXMuY29tcGlsZXJTZXJ2aWNlKSwgY2FsbHNpdGUpIGFzIGJvb2xlYW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsTm9uU2VydmljZVRhc2tzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUgPSB0aGlzLmRyaXZlclRhc2tRdWV1ZS5maWx0ZXIoZHJpdmVyVGFzayA9PiBpc1NlcnZpY2VDb21tYW5kKGRyaXZlclRhc2suY29tbWFuZCkpO1xuXG4gICAgICAgIHRoaXMuYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlLnJlbW92ZUFsbE5vblNlcnZpY2VNYW5pcHVsYXRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlRGVidWdTdGF0ZSAoZHJpdmVyU3RhdHVzOiBEcml2ZXJTdGF0dXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRyaXZlclN0YXR1cy5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZW1pdChkcml2ZXJTdGF0dXMuZGVidWcpO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgZHJpdmVyIHRhc2tcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnREcml2ZXJUYXNrICgpOiBEcml2ZXJUYXNrIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyVGFza1F1ZXVlWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVDdXJyZW50RHJpdmVyVGFzayAocmVzdWx0PzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUuc2hpZnQoKTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxOb25TZXJ2aWNlVGFza3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWplY3RDdXJyZW50RHJpdmVyVGFzayAoZXJyOiBFcnJvcik6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGVyci5jYWxsc2l0ZSA9IGVyci5jYWxsc2l0ZSB8fCB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNhbGxzaXRlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudERyaXZlclRhc2sucmVqZWN0KGVycik7XG4gICAgICAgIHRoaXMuX3JlbW92ZUFsbE5vblNlcnZpY2VUYXNrcygpO1xuICAgIH1cblxuICAgIC8vIFBlbmRpbmcgcmVxdWVzdFxuICAgIHByaXZhdGUgX2NsZWFyUGVuZGluZ1JlcXVlc3QgKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ1JlcXVlc3QucmVzcG9uc2VUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZVBlbmRpbmdSZXF1ZXN0IChjb21tYW5kOiBDb21tYW5kQmFzZSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2UgPSBjb21tYW5kO1xuXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0KVxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdC5yZXNvbHZlKGNvbW1hbmQpO1xuXG4gICAgICAgIHRoaXMuX2NsZWFyUGVuZGluZ1JlcXVlc3QoKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZHJpdmVyIHJlcXVlc3RcbiAgICBwcml2YXRlIF9zaG91bGRSZXNvbHZlQ3VycmVudERyaXZlclRhc2sgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb21tYW5kID0gdGhpcy5jdXJyZW50RHJpdmVyVGFzay5jb21tYW5kO1xuXG4gICAgICAgIGNvbnN0IGlzRXhlY3V0aW5nT2JzZXJ2YXRpb25Db21tYW5kID0gY3VycmVudENvbW1hbmQgaW5zdGFuY2VvZiBvYnNlcnZhdGlvbkNvbW1hbmRzLkV4ZWN1dGVTZWxlY3RvckNvbW1hbmQgfHxcbiAgICAgICAgICAgIGN1cnJlbnRDb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZDtcblxuICAgICAgICBjb25zdCBpc0RlYnVnQWN0aXZlID0gY3VycmVudENvbW1hbmQgaW5zdGFuY2VvZiBzZXJ2aWNlQ29tbWFuZHMuU2V0QnJlYWtwb2ludENvbW1hbmQ7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRXhlY3V0ZUN1cnJlbnRDb21tYW5kID1cbiAgICAgICAgICAgIGRyaXZlclN0YXR1cy5pc0ZpcnN0UmVxdWVzdEFmdGVyV2luZG93U3dpdGNoaW5nICYmIChpc0V4ZWN1dGluZ09ic2VydmF0aW9uQ29tbWFuZCB8fCBpc0RlYnVnQWN0aXZlKTtcblxuICAgICAgICByZXR1cm4gIXNob3VsZEV4ZWN1dGVDdXJyZW50Q29tbWFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mdWxmaWxsQ3VycmVudERyaXZlclRhc2sgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RHJpdmVyVGFzaylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoZHJpdmVyU3RhdHVzLmV4ZWN1dGlvbkVycm9yKVxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0Q3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzLmV4ZWN1dGlvbkVycm9yKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2hvdWxkUmVzb2x2ZUN1cnJlbnREcml2ZXJUYXNrKGRyaXZlclN0YXR1cykpXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFnZUVycm9yU3RhdHVzIChwYWdlRXJyb3I6IEVycm9yKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREcml2ZXJUYXNrICYmIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcih0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhwYWdlRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgfHwgcGFnZUVycm9yO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVEcml2ZXJSZXF1ZXN0IChkcml2ZXJTdGF0dXM6IERyaXZlclN0YXR1cyk6IENvbW1hbmRCYXNlIHwgbnVsbCB8IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzVGVzdERvbmUgICAgICAgICAgICAgICAgID0gdGhpcy5jdXJyZW50RHJpdmVyVGFzayAmJiB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQudHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX1RZUEUudGVzdERvbmU7XG4gICAgICAgIGNvbnN0IHBhZ2VFcnJvciAgICAgICAgICAgICAgICAgID0gdGhpcy5wZW5kaW5nUGFnZUVycm9yIHx8IGRyaXZlclN0YXR1cy5wYWdlRXJyb3I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXNrUmVqZWN0ZWRCeUVycm9yID0gcGFnZUVycm9yICYmIHRoaXMuX2hhbmRsZVBhZ2VFcnJvclN0YXR1cyhwYWdlRXJyb3IpO1xuXG4gICAgICAgIHRoaXMuY29uc29sZU1lc3NhZ2VzLmNvbmNhdChkcml2ZXJTdGF0dXMuY29uc29sZU1lc3NhZ2VzKTtcblxuICAgICAgICB0aGlzLl9oYW5kbGVEZWJ1Z1N0YXRlKGRyaXZlclN0YXR1cyk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VGFza1JlamVjdGVkQnlFcnJvciAmJiBkcml2ZXJTdGF0dXMuaXNDb21tYW5kUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoaXNUZXN0RG9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVDdXJyZW50RHJpdmVyVGFzaygpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRFU1RfRE9ORV9DT05GSVJNQVRJT05fUkVTUE9OU0U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2Z1bGZpbGxDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMpO1xuXG4gICAgICAgICAgICBpZiAoZHJpdmVyU3RhdHVzLmlzUGVuZGluZ1dpbmRvd1N3aXRjaGluZylcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXJyZW50RHJpdmVyVGFza0NvbW1hbmQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRDdXJyZW50RHJpdmVyVGFza0NvbW1hbmQgKCk6IENvbW1hbmRCYXNlIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RHJpdmVyVGFzaylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLm5hdmlnYXRlVG8gJiYgKGNvbW1hbmQgYXMgYW55KS5zdGF0ZVNuYXBzaG90KVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnVzZVN0YXRlU25hcHNob3QoSlNPTi5wYXJzZSgoY29tbWFuZCBhcyBhbnkpLnN0YXRlU25hcHNob3QpKTtcblxuICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGNvbW1hbmRcbiAgICBwcml2YXRlIGFzeW5jIF9leGVjdXRlSnNFeHByZXNzaW9uIChjb21tYW5kOiBFeGVjdXRlRXhwcmVzc2lvbkNvbW1hbmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0VmFyaWFibGVOYW1lID0gY29tbWFuZC5yZXN1bHRWYXJpYWJsZU5hbWU7XG4gICAgICAgIGxldCBleHByZXNzaW9uICAgICAgICAgICA9IGNvbW1hbmQuZXhwcmVzc2lvbjtcblxuICAgICAgICBpZiAocmVzdWx0VmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGAke3Jlc3VsdFZhcmlhYmxlTmFtZX0gPSAke2V4cHJlc3Npb259LCAke3Jlc3VsdFZhcmlhYmxlTmFtZX1gO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZXJTZXJ2aWNlLmV4ZWN1dGVKc0V4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgdGVzdFJ1bklkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6ICAgeyBza2lwVmlzaWJpbGl0eUNoZWNrOiBmYWxzZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUpzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0aGlzLCB7IHNraXBWaXNpYmlsaXR5Q2hlY2s6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiAoY29tbWFuZDogRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlPzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5hc3luY0pzRXhwcmVzc2lvbkNhbGxzaXRlcy5jbGVhcigpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlclNlcnZpY2UuZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBjb21tYW5kLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgdGVzdFJ1bklkOiAgdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBjYWxsc2l0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbihjb21tYW5kLmV4cHJlc3Npb24sIHRoaXMsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWRpcmVjdFJlRXhlY3V0YWJsZVByb21pc2VFeGVjdXRpb25Ub0NvbXBpbGVyU2VydmljZSAoY29tbWFuZDogQXNzZXJ0aW9uQ29tbWFuZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGlsZXJTZXJ2aWNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbW1hbmQuYWN0dWFsID0gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tcGlsZXJTZXJ2aWNlPy5nZXRBc3NlcnRpb25BY3R1YWxWYWx1ZSh7XG4gICAgICAgICAgICAgICAgdGVzdFJ1bklkOiBzZWxmLmlkLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRJZDogY29tbWFuZC5pZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWRpcmVjdEFzc2VydGlvbkZuRXhlY3V0aW9uVG9Db21waWxlclNlcnZpY2UgKGV4ZWN1dG9yOiBBc3NlcnRpb25FeGVjdXRvcik6IHZvaWQge1xuICAgICAgICBleGVjdXRvci5mbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVyU2VydmljZT8uZXhlY3V0ZUFzc2VydGlvbkZuKHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgY29tbWFuZElkOiBleGVjdXRvci5jb21tYW5kLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUFzc2VydGlvbiAoY29tbWFuZDogQXNzZXJ0aW9uQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChjb21tYW5kLmFjdHVhbCA9PT0gU3ltYm9sLmZvcihSRV9FWEVDVVRBQkxFX1BST01JU0VfTUFSS0VSX0RFU0NSSVBUSU9OKSlcbiAgICAgICAgICAgIHRoaXMuX3JlZGlyZWN0UmVFeGVjdXRhYmxlUHJvbWlzZUV4ZWN1dGlvblRvQ29tcGlsZXJTZXJ2aWNlKGNvbW1hbmQpO1xuXG4gICAgICAgIGNvbnN0IGFzc2VydGlvblRpbWVvdXQgPSBnZXRBc3NlcnRpb25UaW1lb3V0KGNvbW1hbmQsIHRoaXMub3B0cyk7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yICAgICAgICAgPSBuZXcgQXNzZXJ0aW9uRXhlY3V0b3IoY29tbWFuZCwgYXNzZXJ0aW9uVGltZW91dCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4ZWN1dG9yLm9uY2UoJ3N0YXJ0LWFzc2VydGlvbi1yZXRyaWVzJywgKHRpbWVvdXQ6IG51bWJlcikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlNob3dBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZCh0aW1lb3V0KSkpO1xuICAgICAgICBleGVjdXRvci5vbmNlKCdlbmQtYXNzZXJ0aW9uLXJldHJpZXMnLCAoc3VjY2VzczogYm9vbGVhbikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZChzdWNjZXNzKSkpO1xuICAgICAgICBleGVjdXRvci5vbmNlKCdub24tc2VyaWFsaXphYmxlLWFjdHVhbC12YWx1ZScsIHRoaXMuX3JlZGlyZWN0QXNzZXJ0aW9uRm5FeGVjdXRpb25Ub0NvbXBpbGVyU2VydmljZSk7XG5cbiAgICAgICAgY29uc3QgZXhlY3V0ZUZuID0gdGhpcy5kZWNvcmF0ZVByZXZlbnRFbWl0QWN0aW9uRXZlbnRzKCgpID0+IGV4ZWN1dG9yLnJ1bigpLCB7IHByZXZlbnQ6IHRydWUgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGVGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkanVzdENvbmZpZ3VyYXRpb25XaXRoQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnRlc3REb25lKSB7XG4gICAgICAgICAgICB0aGlzLnRlc3REb25lQ29tbWFuZFF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Z0xvZ2dlcilcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyLmhpZGVCcmVha3BvaW50KHRoaXMuc2Vzc2lvbi5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXROYXRpdmVEaWFsb2dIYW5kbGVyKVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2dIYW5kbGVyID0gKGNvbW1hbmQgYXMgYW55KS5kaWFsb2dIYW5kbGVyO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvSWZyYW1lKVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVTZWxlY3RvciA9IChjb21tYW5kIGFzIGFueSkuc2VsZWN0b3I7XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9NYWluV2luZG93KVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVTZWxlY3RvciA9IG51bGw7XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0VGVzdFNwZWVkKVxuICAgICAgICAgICAgdGhpcy5zcGVlZCA9IChjb21tYW5kIGFzIGFueSkuc3BlZWQ7XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0UGFnZUxvYWRUaW1lb3V0KVxuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZFRpbWVvdXQgPSAoY29tbWFuZCBhcyBhbnkpLmR1cmF0aW9uO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1Z2dpbmcgPSB0cnVlO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmRpc2FibGVEZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5oaWRlQnJlYWtwb2ludCh0aGlzLnNlc3Npb24uaWQpO1xuXG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9hZGp1c3RTY3JlZW5zaG90Q29tbWFuZCAoY29tbWFuZDogVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBicm93c2VySWQgICAgICAgICAgICAgICAgICAgID0gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5pZDtcbiAgICAgICAgY29uc3QgeyBoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHMgfSA9IGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucHJvdmlkZXIuaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3Nlcihicm93c2VySWQpO1xuXG4gICAgICAgIGlmICghaGFzQ2hyb21lbGVzc1NjcmVlbnNob3RzKVxuICAgICAgICAgICAgY29tbWFuZC5nZW5lcmF0ZVNjcmVlbnNob3RNYXJrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9hZGp1c3RDb21tYW5kT3B0aW9uc0FuZEVudmlyb25tZW50IChjb21tYW5kOiBDb21tYW5kQmFzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zPy5jb25maWRlbnRpYWwgIT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUudHlwZVRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoKGNvbW1hbmQgYXMgYW55KS5zZWxlY3Rvcik7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnByZXNzS2V5KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuR2V0QWN0aXZlRWxlbWVudENvbW1hbmQoKSk7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZEJhc2UgJiYgISF0aGlzLmNvbXBpbGVyU2VydmljZSAmJiAhdGhpcy5fY2xpZW50RW52aXJvbm1lbnRQcmVwYXJlZCkge1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50RW52aXJvbm1lbnRQcmVwYXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IHNlcnZpY2VDb21tYW5kcy5QcmVwYXJlQ2xpZW50RW52aXJvbm1lbnRJbkRlYnVnTW9kZShjb21tYW5kLmVzbVJ1bnRpbWUpKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9zZXRCcmVha3BvaW50SWZOZWNlc3NhcnkgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlRGVidWdCcmVha3BvaW50cyAmJiB0aGlzLmRlYnVnZ2luZyAmJiBjYW5TZXREZWJ1Z2dlckJyZWFrcG9pbnRCZWZvcmVDb21tYW5kKGNvbW1hbmQpKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kKGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlIHwgQWN0aW9uQ29tbWFuZEJhc2UsIGNhbGxzaXRlPzogc3RyaW5nIHwgQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmQgaW5zdGFuY2VvZiBBY3Rpb25Db21tYW5kQmFzZVxuICAgICAgICAgICAgPyB0aGlzLl9leGVjdXRlQWN0aW9uQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZClcbiAgICAgICAgICAgIDogdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9leGVjdXRlQWN0aW9uQ29tbWFuZCAoY29tbWFuZDogQWN0aW9uQ29tbWFuZEJhc2UsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCBhY3Rpb25BcmdzID0geyBhcGlBY3Rpb25OYW1lOiBjb21tYW5kLm1ldGhvZE5hbWUsIGNvbW1hbmQgfTtcblxuICAgICAgICBsZXQgZXJyb3JBZGFwdGVyID0gbnVsbDtcbiAgICAgICAgbGV0IGVycm9yICAgICAgICA9IG51bGw7XG4gICAgICAgIGxldCByZXN1bHQgICAgICAgPSBudWxsO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2FkanVzdENvbW1hbmRPcHRpb25zQW5kRW52aXJvbm1lbnQoY29tbWFuZCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QWN0aW9uRXZlbnQoJ2FjdGlvbi1zdGFydCcsIGFjdGlvbkFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBoYXNlID09PSBUZXN0UnVuUGhhc2UucGVuZGluZ0ZpbmFsaXphdGlvbiAmJiBlcnIgaW5zdGFuY2VvZiBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcilcbiAgICAgICAgICAgICAgICBhZGRSZW5kZXJlZFdhcm5pbmcodGhpcy53YXJuaW5nTG9nLCB7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS51bmF3YWl0ZWRNZXRob2RXaXRoQXNzZXJ0aW9uLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBjaGVjayBpZiBlcnJvciBpcyBUZXN0Q2FmZUVycm9yTGlzdCBpcyBzcGVjaWZpYyBmb3IgdGhlIGB1c2VSb2xlYCBhY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGlzIFRlc3RDYWZlRXJyb3JMaXN0IHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhbiBhZGFwdGVyLFxuICAgICAgICAgICAgLy8gc2luY2UgZXJyb3IgaXMgYWxyZWFkeSB3YXMgcHJvY2Vzc2VkIGluIHJvbGUgaW5pdGlhbGl6ZXJcbiAgICAgICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgVGVzdENhZmVFcnJvckxpc3QpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWFrZVNjcmVlbnNob3RPbkZhaWwoKTtcblxuICAgICAgICAgICAgICAgIGVycm9yQWRhcHRlciA9IHRoaXMuX2NyZWF0ZUVycm9yQWRhcHRlcihwcm9jZXNzVGVzdEZuRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnJvckFkYXB0ZXIgPSBlcnJvci5hZGFwdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb25BcmdzLCB7XG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIGVycjogZXJyb3JBZGFwdGVyLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRBY3Rpb25FdmVudCgnYWN0aW9uLWRvbmUnLCBhY3Rpb25BcmdzKTtcblxuICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NhbkV4ZWN1dGVDb21tYW5kVGhyb3VnaENEUCAoY29tbWFuZDogQ29tbWFuZEJhc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMucHJveHlsZXNzIHx8ICFQUk9YWUxFU1NfQ09NTUFORFMuaGFzKGNvbW1hbmQudHlwZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgYnJvd3NlcklkICAgICAgICAgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmlkO1xuICAgICAgICBjb25zdCBjdXN0b21BY3Rpb25zSW5mbyA9IGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucHJvdmlkZXIuaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3Nlcihicm93c2VySWQpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHJldHVybiBjdXN0b21BY3Rpb25zSW5mb1tQUk9YWUxFU1NfQ09NTUFORFMuZ2V0KGNvbW1hbmQudHlwZSkhXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IENhbGxzaXRlUmVjb3JkIHwgc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuY29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUGFnZUVycm9yICYmIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcihjb21tYW5kKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvcihjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZChjb21tYW5kKSlcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudCsrO1xuXG4gICAgICAgIHRoaXMuX2FkanVzdENvbmZpZ3VyYXRpb25XaXRoQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zZXRCcmVha3BvaW50SWZOZWNlc3NhcnkoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpO1xuXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLl9jYW5FeGVjdXRlQ29tbWFuZFRocm91Z2hDRFAoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaWQ7XG5cbiAgICAgICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5leGVjdXRlQ2xpZW50RnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucHJvdmlkZXIuZXhlY3V0ZUNsaWVudEZ1bmN0aW9uKGJyb3dzZXJJZCwgY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9JZnJhbWUpXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmV0dXJuIHRoZSBzd2l0Y2hUb0lmcmFtZSBjYWxsIHJlc3VsdCB3aGVuIGFueSBjb21tYW5kIHdpbGwgbm90IG5lZWQgdGhlIHN3aXRjaGluZyB0aHJvdWdoIHRoZSBwcm94eVxuICAgICAgICAgICAgICAgIC8qcmV0dXJuICovdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5zd2l0Y2hUb0lmcmFtZShicm93c2VySWQsIGNvbW1hbmQsIGNhbGxzaXRlLCB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvTWFpbldpbmRvdylcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiByZXR1cm4gdGhlIHN3aXRjaFRvTWFpbldpbmRvdyBjYWxsIHJlc3VsdCB3aGVuIGFueSBjb21tYW5kIHdpbGwgbm90IG5lZWQgdGhlIHN3aXRjaGluZyB0aHJvdWdoIHRoZSBwcm94eVxuICAgICAgICAgICAgICAgIC8qcmV0dXJuICovdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5zd2l0Y2hUb01haW5XaW5kb3coYnJvd3NlcklkKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVTZWxlY3RvcilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5leGVjdXRlU2VsZWN0b3IoYnJvd3NlcklkLCBjb21tYW5kLCBjYWxsc2l0ZSwgdGhpcy5vcHRzLnNlbGVjdG9yVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTY3JlZW5zaG90Q29tbWFuZChjb21tYW5kKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlU2NyZWVuc2hvdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5zY3JlZW5zaG90c0Rpc2FibGVkLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hZGp1c3RTY3JlZW5zaG90Q29tbWFuZChjb21tYW5kIGFzIFRha2VTY3JlZW5zaG90QmFzZUNvbW1hbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlLnB1c2goY29tbWFuZCk7XG5cbiAgICAgICAgICAgIGlmIChpc1Jlc2l6ZVdpbmRvd0NvbW1hbmQoY29tbWFuZCkgJiYgdGhpcy5vcHRzLnZpZGVvUGF0aClcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS52aWRlb0Jyb3dzZXJSZXNpemluZywgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSwgdGhpcy50ZXN0Lm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLndhaXQpXG4gICAgICAgICAgICByZXR1cm4gZGVsYXkoKGNvbW1hbmQgYXMgYW55KS50aW1lb3V0KTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0UGFnZUxvYWRUaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmRlYnVnKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBJbiByZWd1bGFyIG1vZGUsIGl0J3MgcG9zc2libGUgdG8gZGVidWcgdGVzdHMgb25seSB1c2luZyBUZXN0Q2FmZSBVSSAoJ1Jlc3VtZScgYW5kICdOZXh0IHN0ZXAnIGJ1dHRvbnMpLlxuICAgICAgICAgICAgLy8gU28sIHdlIHNob3VsZCB3YXJuIG9uIHRyeWluZyB0byBkZWJ1ZyBpbiBoZWFkbGVzcyBtb2RlLlxuICAgICAgICAgICAgLy8gSW4gY29tcGlsZXIgc2VydmljZSBtb2RlLCB3ZSBjYW4gZGVidWcgZXZlbiBpbiBoZWFkbGVzcyBtb2RlIHVzaW5nIGFueSBkZWJ1Z2dpbmcgdG9vbHMuIFNvLCBpbiB0aGlzIGNhc2UsIHRoZSB3YXJuaW5nIGlzIGV4Y2Vzc2l2ZS5cbiAgICAgICAgICAgIGNvbnN0IGNhbkRlYnVnID0gISF0aGlzLmNvbXBpbGVyU2VydmljZSB8fCAhdGhpcy5icm93c2VyQ29ubmVjdGlvbi5pc0hlYWRsZXNzQnJvd3NlcigpO1xuXG4gICAgICAgICAgICBpZiAoY2FuRGVidWcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZChjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCwgdm9pZCAwKTtcblxuICAgICAgICAgICAgdGhpcy5kZWJ1Z2dpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoeyBtZXNzYWdlOiBXQVJOSU5HX01FU1NBR0UuZGVidWdJbkhlYWRsZXNzRXJyb3IsIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS51c2VSb2xlKSB7XG4gICAgICAgICAgICBsZXQgZm4gPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLl91c2VSb2xlKChjb21tYW5kIGFzIGFueSkucm9sZSwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpO1xuXG4gICAgICAgICAgICBmbiA9IHRoaXMuZGVjb3JhdGVQcmV2ZW50RW1pdEFjdGlvbkV2ZW50cyhmbiwgeyBwcmV2ZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgZm4gPSB0aGlzLmRlY29yYXRlRGlzYWJsZURlYnVnQnJlYWtwb2ludHMoZm4sIHsgZGlzYWJsZTogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuYXNzZXJ0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVBc3NlcnRpb24oY29tbWFuZCBhcyBBc3NlcnRpb25Db21tYW5kLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVFeHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVKc0V4cHJlc3Npb24oY29tbWFuZCBhcyBFeGVjdXRlRXhwcmVzc2lvbkNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5leGVjdXRlQXN5bmNFeHByZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbihjb21tYW5kIGFzIEV4ZWN1dGVBc3luY0V4cHJlc3Npb25Db21tYW5kLCBjYWxsc2l0ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5nZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvUHJldmlvdXNXaW5kb3cpXG4gICAgICAgICAgICAoY29tbWFuZCBhcyBhbnkpLndpbmRvd0lkID0gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcmV2aW91c0FjdGl2ZVdpbmRvd0lkO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aXRjaFRvV2luZG93QnlQcmVkaWNhdGUoY29tbWFuZCBhcyBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvciAoY2FsbHNpdGU/OiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8RXJyb3I+IHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5wZW5kaW5nUGFnZUVycm9yO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlICAgICAgICAgID0gY2FsbHNpdGU7XG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VuZENsb3NlQ2hpbGRXaW5kb3dPbkZpbGVEb3dubG9hZGluZ0NvbW1hbmQgKCk6IENvbW1hbmRCYXNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhY3Rpb25Db21tYW5kcy5DbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX21ha2VTY3JlZW5zaG90T25GYWlsICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBzY3JlZW5zaG90cyB9ID0gdGhpcy5vcHRzO1xuXG4gICAgICAgIGlmICghdGhpcy5lcnJTY3JlZW5zaG90UGF0aCAmJiAoc2NyZWVuc2hvdHMgYXMgU2NyZWVuc2hvdE9wdGlvblZhbHVlKT8udGFrZU9uRmFpbHMpXG4gICAgICAgICAgICB0aGlzLmVyclNjcmVlbnNob3RQYXRoID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgYnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmRzLlRha2VTY3JlZW5zaG90T25GYWlsQ29tbWFuZCgpKSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVjb3JhdGVXaXRoRmxhZyAoZm46IEZ1bmN0aW9uLCBmbGFnTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6ICgpID0+IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tmbGFnTmFtZV0gPSB2YWx1ZTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpc1tmbGFnTmFtZV0gPSAhdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMgKGZuOiBGdW5jdGlvbiwgeyBwcmV2ZW50IH06IHsgcHJldmVudDogYm9vbGVhbiB9KTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcmF0ZVdpdGhGbGFnKGZuLCAncHJldmVudEVtaXRBY3Rpb25FdmVudHMnLCBwcmV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyAoZm46IEZ1bmN0aW9uLCB7IGRpc2FibGUgfTogeyBkaXNhYmxlOiBib29sZWFuIH0pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlV2l0aEZsYWcoZm4sICdkaXNhYmxlRGVidWdCcmVha3BvaW50cycsIGRpc2FibGUpO1xuICAgIH1cblxuICAgIC8vIFJvbGUgbWFuYWdlbWVudFxuICAgIHB1YmxpYyBhc3luYyBnZXRTdGF0ZVNuYXBzaG90ICgpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNlc3Npb24uZ2V0U3RhdGVTbmFwc2hvdCgpO1xuXG4gICAgICAgIHN0YXRlLnN0b3JhZ2VzID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkJhY2t1cFN0b3JhZ2VzQ29tbWFuZCgpKSBhcyBTdG9yYWdlc1NuYXBzaG90O1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jbGVhblVwQ3R4cyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2Uuc2V0Q3R4KHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICAgICBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5zZXRGaXh0dXJlQ3R4KHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICAgICBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN0eCAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5maXh0dXJlQ3R4ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzd2l0Y2hUb0NsZWFuUnVuICh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9jbGVhblVwQ3R4cygpO1xuXG4gICAgICAgIHRoaXMuY29uc29sZU1lc3NhZ2VzID0gbmV3IEJyb3dzZXJDb25zb2xlTWVzc2FnZXMoKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24udXNlU3RhdGVTbmFwc2hvdChTdGF0ZVNuYXBzaG90LmVtcHR5KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLnNwZWVkICE9PSB0aGlzLm9wdHMuc3BlZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldFNwZWVkQ29tbWFuZCA9IG5ldyBhY3Rpb25Db21tYW5kcy5TZXRUZXN0U3BlZWRDb21tYW5kKHsgc3BlZWQ6IHRoaXMub3B0cy5zcGVlZCB9KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChzZXRTcGVlZENvbW1hbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnZUxvYWRUaW1lb3V0ICE9PSB0aGlzLm9wdHMucGFnZUxvYWRUaW1lb3V0KSB7XG4gICAgICAgICAgICBjb25zdCBzZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLlNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQoeyBkdXJhdGlvbjogdGhpcy5vcHRzLnBhZ2VMb2FkVGltZW91dCB9KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChzZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUb1VybCh1cmwsIHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZURpYWxvZ0hhbmRsZXJDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLlNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kKHsgZGlhbG9nSGFuZGxlcjogeyBmbjogbnVsbCB9IH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHJlbW92ZURpYWxvZ0hhbmRsZXJDb21tYW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBuYXZpZ2F0ZVRvVXJsICh1cmw6IHN0cmluZywgZm9yY2VSZWxvYWQ6IGJvb2xlYW4sIHN0YXRlU25hcHNob3Q/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGVDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLk5hdmlnYXRlVG9Db21tYW5kKHsgdXJsLCBmb3JjZVJlbG9hZCwgc3RhdGVTbmFwc2hvdCB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5hdmlnYXRlQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0U3RhdGVTbmFwc2hvdEZyb21Sb2xlIChyb2xlOiBSb2xlKTogUHJvbWlzZTxTdGF0ZVNuYXBzaG90PiB7XG4gICAgICAgIGNvbnN0IHByZXZQaGFzZSA9IHRoaXMucGhhc2U7XG5cbiAgICAgICAgaWYgKHJvbGUucGhhc2UgPT09IFJPTEVfUEhBU0UuaW5pdGlhbGl6ZWQgJiYgcm9sZS5pbml0RXJyIGluc3RhbmNlb2YgVGVzdENhZmVFcnJvckxpc3QgJiYgcm9sZS5pbml0RXJyLmhhc0Vycm9ycylcbiAgICAgICAgICAgIHJvbGUuaW5pdEVyci5hZGFwdGVyID0gdGhpcy5fY3JlYXRlRXJyb3JBZGFwdGVyKHJvbGUuaW5pdEVyci5pdGVtc1swXSk7XG5cbiAgICAgICAgdGhpcy5waGFzZSA9IFRlc3RSdW5QaGFzZS5pblJvbGVJbml0aWFsaXplcjtcblxuICAgICAgICBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS51bmluaXRpYWxpemVkKVxuICAgICAgICAgICAgYXdhaXQgcm9sZS5pbml0aWFsaXplKHRoaXMpO1xuXG4gICAgICAgIGVsc2UgaWYgKHJvbGUucGhhc2UgPT09IFJPTEVfUEhBU0UucGVuZGluZ0luaXRpYWxpemF0aW9uKVxuICAgICAgICAgICAgYXdhaXQgcHJvbWlzaWZ5RXZlbnQocm9sZSwgJ2luaXRpYWxpemVkJyk7XG5cbiAgICAgICAgaWYgKHJvbGUuaW5pdEVycilcbiAgICAgICAgICAgIHRocm93IHJvbGUuaW5pdEVycjtcblxuICAgICAgICB0aGlzLnBoYXNlID0gcHJldlBoYXNlO1xuXG4gICAgICAgIHJldHVybiByb2xlLnN0YXRlU25hcHNob3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdXNlUm9sZSAocm9sZTogUm9sZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnBoYXNlID09PSBUZXN0UnVuUGhhc2UuaW5Sb2xlSW5pdGlhbGl6ZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUm9sZVN3aXRjaEluUm9sZUluaXRpYWxpemVyRXJyb3IoY2FsbHNpdGUpO1xuXG4gICAgICAgIGNvbnN0IGJvb2ttYXJrID0gbmV3IFRlc3RSdW5Cb29rbWFyayh0aGlzLCByb2xlKTtcblxuICAgICAgICBhd2FpdCBib29rbWFyay5pbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvbGVJZClcbiAgICAgICAgICAgIHRoaXMudXNlZFJvbGVTdGF0ZXNbdGhpcy5jdXJyZW50Um9sZUlkXSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGVTbmFwc2hvdCgpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlU25hcHNob3QgPSB0aGlzLnVzZWRSb2xlU3RhdGVzW3JvbGUuaWRdIHx8IGF3YWl0IHRoaXMuX2dldFN0YXRlU25hcHNob3RGcm9tUm9sZShyb2xlKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24udXNlU3RhdGVTbmFwc2hvdChzdGF0ZVNuYXBzaG90KTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRSb2xlSWQgPSByb2xlLmlkO1xuXG4gICAgICAgIGF3YWl0IGJvb2ttYXJrLnJlc3RvcmUoY2FsbHNpdGUsIHN0YXRlU25hcHNob3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50VXJsICgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgICAgfSwgeyBib3VuZFRlc3RSdW46IHRoaXMgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0TG9jYXRpb24gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldExvY2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZSAoY29tbWFuZDogU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd3MgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBHZXRDdXJyZW50V2luZG93c0NvbW1hbmQoe30sIHRoaXMpIGFzIENvbW1hbmRCYXNlKSBhcyBPcGVuZWRXaW5kb3dJbmZvcm1hdGlvbltdO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd3MgPSBhd2FpdCBhc3luY0ZpbHRlcjxPcGVuZWRXaW5kb3dJbmZvcm1hdGlvbj4oY3VycmVudFdpbmRvd3MsIGFzeW5jIHduZCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZURhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogICBuZXcgVVJMKHduZC51cmwpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogd25kLnRpdGxlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21waWxlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGlsZXJTZXJ2aWNlUHJlZGljYXRlRGF0YSA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlRGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZElkOiBjb21tYW5kLmlkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlclNlcnZpY2UuY2hlY2tXaW5kb3coY29tcGlsZXJTZXJ2aWNlUHJlZGljYXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQuY2hlY2tXaW5kb3cocHJlZGljYXRlRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yKGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghd2luZG93cy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2luZG93Tm90Rm91bmRFcnJvcigpO1xuXG4gICAgICAgIGlmICh3aW5kb3dzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5tdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQoeyB3aW5kb3dJZDogd2luZG93c1swXS5pZCB9LCB0aGlzKSBhcyBDb21tYW5kQmFzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzY29ubmVjdCAoZXJyOiBFcnJvcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERyaXZlclRhc2spXG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhlcnIpO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnZGlzY29ubmVjdGVkJywgZXJyKTtcblxuICAgICAgICB0ZXN0UnVuVHJhY2tlci5yZW1vdmVBY3RpdmVUZXN0UnVuKHRoaXMuc2Vzc2lvbi5pZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlRmlsZURvd25sb2FkaW5nSW5OZXdXaW5kb3dSZXF1ZXN0ICgpOiBDb21tYW5kQmFzZSB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbmRDbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmdDb21tYW5kKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW1pdEFjdGlvbkV2ZW50IChldmVudE5hbWU6IHN0cmluZywgYXJnczogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICghdGhpcy5wcmV2ZW50RW1pdEFjdGlvbkV2ZW50cylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aXBsZVdpbmRvd3NBbGxvd2VkICh0ZXN0UnVuOiBUZXN0UnVuKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgZGlzYWJsZU11bHRpcGxlV2luZG93cywgdGVzdCB9ID0gdGVzdFJ1bjtcblxuICAgICAgICByZXR1cm4gIWRpc2FibGVNdWx0aXBsZVdpbmRvd3MgJiYgISh0ZXN0IGFzIExlZ2FjeVRlc3RSdW4pLmlzTGVnYWN5ICYmICEhdGVzdFJ1bi5hY3RpdmVXaW5kb3dJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlclNlcnZpY2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2UuaW5pdGlhbGl6ZVRlc3RSdW5EYXRhKHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgdGVzdElkOiAgICAgICAgIHRoaXMudGVzdC5pZCxcbiAgICAgICAgICAgIGJyb3dzZXI6ICAgICAgICB0aGlzLmJyb3dzZXIsXG4gICAgICAgICAgICBhY3RpdmVXaW5kb3dJZDogdGhpcy5hY3RpdmVXaW5kb3dJZCxcbiAgICAgICAgICAgIG1lc3NhZ2VCdXM6ICAgICB0aGlzLl9tZXNzYWdlQnVzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZVdpbmRvd0lkICgpOiBudWxsIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQ7XG4gICAgfVxuXG4gICAgLy8gTk9URTogdGhpcyBmdW5jdGlvbiBpcyB0aW1lLWNyaXRpY2FsIGFuZCBtdXN0IHJldHVybiBBU0FQIHRvIGF2b2lkIGNsaWVudCBkaXNjb25uZWN0aW9uXG4gICAgcHJpdmF0ZSBhc3luYyBbQ0xJRU5UX01FU1NBR0VTLnJlYWR5XSAobXNnOiBEcml2ZXJNZXNzYWdlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGlmIChtc2cuc3RhdHVzLmlzT2JzZXJ2aW5nRmlsZURvd25sb2FkaW5nSW5OZXdXaW5kb3cpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZURvd25sb2FkaW5nSW5OZXdXaW5kb3dSZXF1ZXN0KCk7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZy5kcml2ZXJNZXNzYWdlKG1zZyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzY29ubmVjdGVkKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMudGVzdFJ1blJlcXVlc3RJbkRpc2Nvbm5lY3RlZEJyb3dzZXIsIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uYnJvd3NlckluZm8uYWxpYXMpKTtcblxuICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICAgIHRoaXMuX2NsZWFyUGVuZGluZ1JlcXVlc3QoKTtcblxuICAgICAgICAvLyBOT1RFOiB0aGUgZHJpdmVyIHNlbmRzIHRoZSBzdGF0dXMgZm9yIHRoZSBzZWNvbmQgdGltZSBpZiBpdCBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UgYXQgdGhlXG4gICAgICAgIC8vIGZpcnN0IHRyeS4gVGhpcyBpcyBwb3NzaWJsZSB3aGVuIHRoZSBwYWdlIHdhcyB1bmxvYWRlZCBhZnRlciB0aGUgZHJpdmVyIHNlbnQgdGhlIHN0YXR1cy5cbiAgICAgICAgaWYgKG1zZy5zdGF0dXMuaWQgPT09IHRoaXMubGFzdERyaXZlclN0YXR1c0lkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlO1xuXG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c0lkICAgICAgID0gbXNnLnN0YXR1cy5pZDtcbiAgICAgICAgdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2UgPSB0aGlzLl9oYW5kbGVEcml2ZXJSZXF1ZXN0KG1zZy5zdGF0dXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSB8fCBtc2cuc3RhdHVzLmlzUGVuZGluZ1dpbmRvd1N3aXRjaGluZylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZTtcblxuICAgICAgICAvLyBOT1RFOiB3ZSBzZW5kIGFuIGVtcHR5IHJlc3BvbnNlIGFmdGVyIHRoZSBNQVhfUkVTUE9OU0VfREVMQVkgdGltZW91dCBpcyBleGNlZWRlZCB0byBrZWVwIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gd2l0aCB0aGUgY2xpZW50IGFuZCBwcmV2ZW50IHRoZSByZXNwb25zZSB0aW1lb3V0IGV4Y2VwdGlvbiBvbiB0aGUgY2xpZW50IHNpZGVcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9yZXNvbHZlUGVuZGluZ1JlcXVlc3QobnVsbCksIE1BWF9SRVNQT05TRV9ERUxBWSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3QgPSB7IHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2VUaW1lb3V0IH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgW0NMSUVOVF9NRVNTQUdFUy5yZWFkeUZvckJyb3dzZXJNYW5pcHVsYXRpb25dIChtc2c6IERyaXZlck1lc3NhZ2UpOiBQcm9taXNlPEJyb3dzZXJNYW5pcHVsYXRpb25SZXN1bHQ+IHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZy5kcml2ZXJNZXNzYWdlKG1zZyk7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGxldCBlcnJvciAgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXJNYW5pcHVsYXRpb25RdWV1ZS5leGVjdXRlUGVuZGluZ01hbmlwdWxhdGlvbihtc2csIHRoaXMuX21lc3NhZ2VCdXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0LCBlcnJvciB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgW0NMSUVOVF9NRVNTQUdFUy53YWl0Rm9yRmlsZURvd25sb2FkXSAobXNnOiBEcml2ZXJNZXNzYWdlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuZHJpdmVyTWVzc2FnZShtc2cpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
1050
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1ydW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBSWdCO0FBRWhCLG9EQUE0QjtBQUM1QiwyREFBc0Q7QUFDdEQsc0VBQTZDO0FBQzdDLHdEQUFnQztBQUNoQyx1RkFBNkQ7QUFDN0QsNERBQTBDO0FBQzFDLGlHQUFvRjtBQUNwRixzRUFBcUQ7QUFDckQsK0NBQWlEO0FBRWpELGtEQVU2QjtBQUU3Qix3RUFBZ0Q7QUFDaEQsMkRBQTJDO0FBQzNDLDJEQUFtQztBQUNuQyxtRkFBeUQ7QUFDekQsb0VBQTRDO0FBQzVDLCtFQUFxRDtBQUNyRCwwREFBdUM7QUFDdkMsMEVBQXlEO0FBQ3pELDBGQUFnRTtBQUNoRSwrRUFBc0Q7QUFDdEQsdUZBQStEO0FBRS9ELDZEQVU2QjtBQUU3QixtRUFBcUQ7QUFDckQsMERBQXdFO0FBQ3hFLCtFQUF3RTtBQUN4RSw0Q0FBK0U7QUFFL0UsNENBUTBCO0FBRTFCLGdEQU00QjtBQUU1QiwyQ0FBa0U7QUFDbEUsNEZBQWlFO0FBQ2pFLCtGQUE0RTtBQUM1RSwrREFBeUY7QUFLekYsOEVBQXFEO0FBRXJELDhGQUFvRTtBQUNwRSw4RkFBb0U7QUFNcEUsZ0RBQW9FO0FBS3BFLHVHQUE2RTtBQU03RSxvREFBbUM7QUFFbkMsd0RBSWdDO0FBRWhDLG1IQUFrSjtBQUNsSiwyRkFBaUU7QUFDakUsaUdBQXVFO0FBQ3ZFLHVFQUE4QztBQUM5QyxzRUFBdUQ7QUFDdkQseUVBQWdEO0FBQ2hELDhGQUE4RDtBQUc5RCwrRkFBb0U7QUFFcEUsTUFBTSxXQUFXLEdBQW1CLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRSxNQUFNLHFCQUFxQixHQUFTLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0FBQy9GLE1BQU0sZUFBZSxHQUFlLFdBQVcsQ0FB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QUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLENBQUMseUJBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFFLEdBQWtCO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjs7Z0JBRUcsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLE9BQU8sQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQXZ6Q0QsMEJBdXpDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgcHVsbCxcbiAgICByZW1vdmUsXG4gICAgY2hhaW4sXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCBuYW5vaWQgZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IHJlYWRTeW5jIGFzIHJlYWQgfSBmcm9tICdyZWFkLWZpbGUtcmVsYXRpdmUnO1xuaW1wb3J0IHByb21pc2lmeUV2ZW50IGZyb20gJ3Byb21pc2lmeS1ldmVudCc7XG5pbXBvcnQgTXVzdGFjaGUgZnJvbSAnbXVzdGFjaGUnO1xuaW1wb3J0IEFzeW5jRXZlbnRFbWl0dGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWV2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IFRlc3RSdW5EZWJ1Z0xvZyBmcm9tICcuL2RlYnVnLWxvZyc7XG5pbXBvcnQgVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyIGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi9mb3JtYXR0YWJsZS1hZGFwdGVyJztcbmltcG9ydCBUZXN0Q2FmZUVycm9yTGlzdCBmcm9tICcuLi9lcnJvcnMvZXJyb3ItbGlzdCc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZSc7XG5cbmltcG9ydCB7XG4gICAgUmVxdWVzdEhvb2tVbmhhbmRsZWRFcnJvcixcbiAgICBQYWdlTG9hZEVycm9yLFxuICAgIFJvbGVTd2l0Y2hJblJvbGVJbml0aWFsaXplckVycm9yLFxuICAgIFN3aXRjaFRvV2luZG93UHJlZGljYXRlRXJyb3IsXG4gICAgV2luZG93Tm90Rm91bmRFcnJvcixcbiAgICBSZXF1ZXN0SG9va0Jhc2VFcnJvcixcbiAgICBUZXN0VGltZW91dEVycm9yLFxuICAgIEV4dGVybmFsQXNzZXJ0aW9uTGlicmFyeUVycm9yLFxuICAgIFJ1blRpbWVvdXRFcnJvcixcbn0gZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuLyc7XG5cbmltcG9ydCBDTElFTlRfTUVTU0FHRVMgZnJvbSAnLi9jbGllbnQtbWVzc2FnZXMnO1xuaW1wb3J0IENPTU1BTkRfVFlQRSBmcm9tICcuL2NvbW1hbmRzL3R5cGUnO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4uL3V0aWxzL2RlbGF5JztcbmltcG9ydCBpc1Bhc3N3b3JkSW5wdXQgZnJvbSAnLi4vdXRpbHMvaXMtcGFzc3dvcmQtaW5wdXQnO1xuaW1wb3J0IHRlc3RSdW5NYXJrZXIgZnJvbSAnLi9tYXJrZXItc3ltYm9sJztcbmltcG9ydCB0ZXN0UnVuVHJhY2tlciBmcm9tICcuLi9hcGkvdGVzdC1ydW4tdHJhY2tlcic7XG5pbXBvcnQgUk9MRV9QSEFTRSBmcm9tICcuLi9yb2xlL3BoYXNlJztcbmltcG9ydCBSZXBvcnRlclBsdWdpbkhvc3QgZnJvbSAnLi4vcmVwb3J0ZXIvcGx1Z2luLWhvc3QnO1xuaW1wb3J0IEJyb3dzZXJDb25zb2xlTWVzc2FnZXMgZnJvbSAnLi9icm93c2VyLWNvbnNvbGUtbWVzc2FnZXMnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcblxuaW1wb3J0IHtcbiAgICBTdGF0ZVNuYXBzaG90LFxuICAgIFNQRUNJQUxfRVJST1JfUEFHRSxcbiAgICBSZXF1ZXN0RmlsdGVyUnVsZSxcbiAgICBJbmplY3RhYmxlUmVzb3VyY2VzLFxuICAgIFJlcXVlc3RFdmVudCxcbiAgICBDb25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgIFJlc3BvbnNlRXZlbnQsXG4gICAgUmVxdWVzdEhvb2tNZXRob2RFcnJvcixcbiAgICBTdG9yYWdlc1NuYXBzaG90LFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0ICogYXMgSU5KRUNUQUJMRVMgZnJvbSAnLi4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCB7IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHMgfSBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvdXRpbHMnO1xuaW1wb3J0IGdldEN1c3RvbUNsaWVudFNjcmlwdFVybCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvZ2V0LXVybCc7XG5pbXBvcnQgeyBnZXRQbHVyYWxTdWZmaXgsIGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5cbmltcG9ydCB7XG4gICAgaXNDb21tYW5kUmVqZWN0YWJsZUJ5UGFnZUVycm9yLFxuICAgIGlzQnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmQsXG4gICAgaXNTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBpc1NlcnZpY2VDb21tYW5kLFxuICAgIGNhblNldERlYnVnZ2VyQnJlYWtwb2ludEJlZm9yZUNvbW1hbmQsXG4gICAgaXNFeGVjdXRhYmxlT25DbGllbnRDb21tYW5kLFxuICAgIGlzUmVzaXplV2luZG93Q29tbWFuZCxcbn0gZnJvbSAnLi9jb21tYW5kcy91dGlscyc7XG5cbmltcG9ydCB7XG4gICAgRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsXG4gICAgRXhlY3V0ZUV4cHJlc3Npb25Db21tYW5kLFxuICAgIEdldEN1cnJlbnRXaW5kb3dzQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvYWN0aW9ucyc7XG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTLCBURVNUX1JVTl9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHByb2Nlc3NUZXN0Rm5FcnJvciBmcm9tICcuLi9lcnJvcnMvcHJvY2Vzcy10ZXN0LWZuLWVycm9yJztcbmltcG9ydCBSZXF1ZXN0SG9va01ldGhvZE5hbWVzIGZyb20gJy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2hvb2stbWV0aG9kLW5hbWVzJztcbmltcG9ydCB7IGNyZWF0ZVJlcGxpY2F0b3IsIFNlbGVjdG9yTm9kZVRyYW5zZm9ybSB9IGZyb20gJy4uL2NsaWVudC1mdW5jdGlvbnMvcmVwbGljYXRvcic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IENhcHR1cmVyIGZyb20gJy4uL3NjcmVlbnNob3RzL2NhcHR1cmVyJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IENvbXBpbGVyU2VydmljZSBmcm9tICcuLi9zZXJ2aWNlcy9jb21waWxlci9ob3N0JztcbmltcG9ydCBTZXNzaW9uQ29udHJvbGxlciBmcm9tICcuL3Nlc3Npb24tY29udHJvbGxlcic7XG5pbXBvcnQgVGVzdENvbnRyb2xsZXIgZnJvbSAnLi4vYXBpL3Rlc3QtY29udHJvbGxlcic7XG5pbXBvcnQgQnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlIGZyb20gJy4vYnJvd3Nlci1tYW5pcHVsYXRpb24tcXVldWUnO1xuaW1wb3J0IE9ic2VydmVkQ2FsbHNpdGVzU3RvcmFnZSBmcm9tICcuL29ic2VydmVkLWNhbGxzaXRlcy1zdG9yYWdlJztcbmltcG9ydCBDbGllbnRTY3JpcHQgZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBRdWFyYW50aW5lIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LW9wdGlvbnMvcXVhcmFudGluZSc7XG5pbXBvcnQgUmVxdWVzdEhvb2sgZnJvbSAnLi4vYXBpL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgRHJpdmVyU3RhdHVzIGZyb20gJy4uL2NsaWVudC9kcml2ZXIvc3RhdHVzJztcbmltcG9ydCB7IENvbW1hbmRCYXNlLCBBY3Rpb25Db21tYW5kQmFzZSB9IGZyb20gJy4vY29tbWFuZHMvYmFzZS5qcyc7XG5pbXBvcnQgUm9sZSBmcm9tICcuLi9yb2xlL3JvbGUnO1xuaW1wb3J0IHsgVGVzdFJ1bkVycm9yQmFzZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvcnMnO1xuaW1wb3J0IHsgQ2FsbHNpdGVSZWNvcmQgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudHMnO1xuaW1wb3J0IGdldEFzc2VydGlvblRpbWVvdXQgZnJvbSAnLi4vdXRpbHMvZ2V0LW9wdGlvbnMvZ2V0LWFzc2VydGlvbi10aW1lb3V0JztcbmltcG9ydCB7IEFzc2VydGlvbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBUYWtlU2NyZWVuc2hvdEJhc2VDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9icm93c2VyLW1hbmlwdWxhdGlvbic7XG4vL0B0cy1pZ25vcmVcbmltcG9ydCB7IFRlc3RSdW4gYXMgTGVnYWN5VGVzdFJ1biB9IGZyb20gJ3Rlc3RjYWZlLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgQXV0aENyZWRlbnRpYWxzIH0gZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9pbnRlcmZhY2VzJztcbmltcG9ydCBUZXN0UnVuUGhhc2UgZnJvbSAnLi9waGFzZSc7XG5cbmltcG9ydCB7XG4gICAgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCxcbiAgICBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kQmFzZSxcbiAgICBFeGVjdXRlU2VsZWN0b3JDb21tYW5kLFxufSBmcm9tICcuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcblxuaW1wb3J0IHsgUkVfRVhFQ1VUQUJMRV9QUk9NSVNFX01BUktFUl9ERVNDUklQVElPTiB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcmlhbGl6YXRpb24vcmVwbGljYXRvci90cmFuc2Zvcm1zL3JlLWV4ZWN1dGFibGUtcHJvbWlzZS10cmFuc2Zvcm0vbWFya2VyJztcbmltcG9ydCBSZUV4ZWN1dGFibGVQcm9taXNlIGZyb20gJy4uL3V0aWxzL3JlLWV4ZWN1dGFibGUtcHJvbWlzZSc7XG5pbXBvcnQgYWRkUmVuZGVyZWRXYXJuaW5nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IGdldEJyb3dzZXIgZnJvbSAnLi4vdXRpbHMvZ2V0LWJyb3dzZXInO1xuaW1wb3J0IEFzc2VydGlvbkV4ZWN1dG9yIGZyb20gJy4uL2Fzc2VydGlvbnMvZXhlY3V0b3InO1xuaW1wb3J0IGFzeW5jRmlsdGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWZpbHRlcic7XG5pbXBvcnQgUFJPWFlMRVNTX0NPTU1BTkRTIGZyb20gJy4vcHJveHlsZXNzLWNvbW1hbmRzLXN1cHBvcnQnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCBleGVjdXRlRm5XaXRoVGltZW91dCBmcm9tICcuLi91dGlscy9leGVjdXRlLWZuLXdpdGgtdGltZW91dCc7XG5cbmNvbnN0IGxhenlSZXF1aXJlICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJ2ltcG9ydC1sYXp5JykocmVxdWlyZSk7XG5jb25zdCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgICAgICAgPSBsYXp5UmVxdWlyZSgnLi4vY2xpZW50LWZ1bmN0aW9ucy9jbGllbnQtZnVuY3Rpb24tYnVpbGRlcicpO1xuY29uc3QgVGVzdFJ1bkJvb2ttYXJrICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vYm9va21hcmsnKTtcbmNvbnN0IGFjdGlvbkNvbW1hbmRzICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2NvbW1hbmRzL2FjdGlvbnMnKTtcbmNvbnN0IGJyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kcyA9IGxhenlSZXF1aXJlKCcuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJyk7XG5jb25zdCBzZXJ2aWNlQ29tbWFuZHMgICAgICAgICAgICAgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9zZXJ2aWNlJyk7XG5jb25zdCBvYnNlcnZhdGlvbkNvbW1hbmRzICAgICAgICAgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9vYnNlcnZhdGlvbicpO1xuXG5jb25zdCB7IGV4ZWN1dGVKc0V4cHJlc3Npb24sIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiB9ID0gbGF6eVJlcXVpcmUoJy4vZXhlY3V0ZS1qcy1leHByZXNzaW9uJyk7XG5cbmNvbnN0IFRFU1RfUlVOX1RFTVBMQVRFICAgICAgICAgICAgICAgPSByZWFkKCcuLi9jbGllbnQvdGVzdC1ydW4vaW5kZXguanMubXVzdGFjaGUnKSBhcyBzdHJpbmc7XG5jb25zdCBJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUgICAgICAgID0gcmVhZCgnLi4vY2xpZW50L3Rlc3QtcnVuL2lmcmFtZS5qcy5tdXN0YWNoZScpIGFzIHN0cmluZztcbmNvbnN0IFRFU1RfRE9ORV9DT05GSVJNQVRJT05fUkVTUE9OU0UgPSAndGVzdC1kb25lLWNvbmZpcm1hdGlvbic7XG5jb25zdCBNQVhfUkVTUE9OU0VfREVMQVkgICAgICAgICAgICAgID0gMzAwMDtcbmNvbnN0IENISUxEX1dJTkRPV19SRUFEWV9USU1FT1VUICAgICAgPSAzMCAqIDEwMDA7XG5cbmNvbnN0IEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQgPSAnYWxsLWRyaXZlci10YXNrcy1hZGRlZC10by1xdWV1ZSc7XG5cbmNvbnN0IENPTVBJTEVSX1NFUlZJQ0VfRVZFTlRTID0gW1xuICAgICdzZXRNb2NrJyxcbiAgICAnc2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMnLFxuICAgICdzZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQnLFxuICAgICdyZW1vdmVIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQnLFxuXTtcblxuXG5pbnRlcmZhY2UgVGVzdFJ1bkluaXQge1xuICAgIHRlc3Q6IFRlc3Q7XG4gICAgYnJvd3NlckNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uO1xuICAgIHNjcmVlbnNob3RDYXB0dXJlcjogQ2FwdHVyZXI7XG4gICAgZ2xvYmFsV2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICBjb21waWxlclNlcnZpY2U/OiBDb21waWxlclNlcnZpY2U7XG4gICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG4gICAgc3RhcnRSdW5FeGVjdXRpb25UaW1lPzogRGF0ZTtcbn1cblxuaW50ZXJmYWNlIERyaXZlclRhc2sge1xuICAgIGNvbW1hbmQ6IENvbW1hbmRCYXNlO1xuICAgIHJlc29sdmU6IEZ1bmN0aW9uO1xuICAgIHJlamVjdDogRnVuY3Rpb247XG4gICAgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkO1xufVxuXG5pbnRlcmZhY2UgRHJpdmVyTWVzc2FnZSB7XG4gICAgc3RhdHVzOiBEcml2ZXJTdGF0dXM7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0VGltZW91dCB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBhamF4PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRXhlY3V0aW9uVGltZW91dCB7XG4gICAgdGltZW91dDogbnVtYmVyO1xuICAgIHJlamVjdFdpdGg6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3I7XG59XG5cbmludGVyZmFjZSBQZW5kaW5nUmVxdWVzdCB7XG4gICAgcmVzcG9uc2VUaW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbiAgICByZWplY3Q6IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgQnJvd3Nlck1hbmlwdWxhdGlvblJlc3VsdCB7XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGVycm9yOiBFcnJvcjtcbn1cblxuaW50ZXJmYWNlIE9wZW5lZFdpbmRvd0luZm9ybWF0aW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RSdW4gZXh0ZW5kcyBBc3luY0V2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBbdGVzdFJ1bk1hcmtlcl06IGJvb2xlYW47XG4gICAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVzdDogVGVzdDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJvd3NlckNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uO1xuICAgIHB1YmxpYyB1bnN0YWJsZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgcGhhc2U6IFRlc3RSdW5QaGFzZTtcbiAgICBwcml2YXRlIGRyaXZlclRhc2tRdWV1ZTogRHJpdmVyVGFza1tdO1xuICAgIHByaXZhdGUgdGVzdERvbmVDb21tYW5kUXVldWVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBhY3RpdmVEaWFsb2dIYW5kbGVyOiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kIHwgbnVsbDtcbiAgICBwdWJsaWMgYWN0aXZlSWZyYW1lU2VsZWN0b3I6IEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQgfCBudWxsO1xuICAgIHB1YmxpYyBzcGVlZDogbnVtYmVyO1xuICAgIHB1YmxpYyBwYWdlTG9hZFRpbWVvdXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlc3RFeGVjdXRpb25UaW1lb3V0OiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bkV4ZWN1dGlvblRpbWVvdXQ6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsO1xuICAgIHByaXZhdGUgZGlzYWJsZVBhZ2VSZWxvYWRzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGlzYWJsZVBhZ2VDYWNoaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGlzYWJsZU11bHRpcGxlV2luZG93czogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlcXVlc3RUaW1lb3V0OiBSZXF1ZXN0VGltZW91dDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbjogU2Vzc2lvbkNvbnRyb2xsZXI7XG4gICAgcHVibGljIGNvbnNvbGVNZXNzYWdlczogQnJvd3NlckNvbnNvbGVNZXNzYWdlcztcbiAgICBwcml2YXRlIHBlbmRpbmdSZXF1ZXN0OiBQZW5kaW5nUmVxdWVzdCB8IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nUGFnZUVycm9yOiBQYWdlTG9hZEVycm9yIHwgRXJyb3IgfCBudWxsO1xuICAgIHB1YmxpYyBjb250cm9sbGVyOiBUZXN0Q29udHJvbGxlciB8IG51bGw7XG4gICAgcHVibGljIGN0eDogb2JqZWN0O1xuICAgIHB1YmxpYyBmaXh0dXJlQ3R4OiBvYmplY3QgfCBudWxsO1xuICAgIHByaXZhdGUgY3VycmVudFJvbGVJZDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZWRSb2xlU3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHB1YmxpYyBlcnJzOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXJbXTtcbiAgICBwcml2YXRlIGxhc3REcml2ZXJTdGF0dXNJZDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIGxhc3REcml2ZXJTdGF0dXNSZXNwb25zZTogQ29tbWFuZEJhc2UgfCBudWxsIHwgc3RyaW5nO1xuICAgIHByaXZhdGUgZmlsZURvd25sb2FkaW5nSGFuZGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2U6IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwcml2YXRlIGFkZGluZ0RyaXZlclRhc2tzQ291bnQ6IG51bWJlcjtcbiAgICBwdWJsaWMgZGVidWdnaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVidWdPbkZhaWw6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlRGVidWdCcmVha3BvaW50czogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnUmVwb3J0ZXJQbHVnaW5Ib3N0OiBSZXBvcnRlclBsdWdpbkhvc3Q7XG4gICAgcHJpdmF0ZSByZWFkb25seSBicm93c2VyTWFuaXB1bGF0aW9uUXVldWU6IEJyb3dzZXJNYW5pcHVsYXRpb25RdWV1ZTtcbiAgICBwcml2YXRlIGRlYnVnTG9nOiBUZXN0UnVuRGVidWdMb2c7XG4gICAgcHVibGljIHF1YXJhbnRpbmU6IFF1YXJhbnRpbmUgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVidWdMb2dnZXI6IGFueTtcbiAgICBwdWJsaWMgb2JzZXJ2ZWRDYWxsc2l0ZXM6IE9ic2VydmVkQ2FsbHNpdGVzU3RvcmFnZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZXJTZXJ2aWNlPzogQ29tcGlsZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwbGljYXRvcjogYW55O1xuICAgIHByaXZhdGUgZGlzY29ubmVjdGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgZXJyU2NyZWVuc2hvdFBhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSBhc3luY0pzRXhwcmVzc2lvbkNhbGxzaXRlczogTWFwPHN0cmluZywgQ2FsbHNpdGVSZWNvcmQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBicm93c2VyOiBCcm93c2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VCdXM/OiBNZXNzYWdlQnVzO1xuICAgIHByaXZhdGUgX2NsaWVudEVudmlyb25tZW50UHJlcGFyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRSdW5FeGVjdXRpb25UaW1lPzogRGF0ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoeyB0ZXN0LCBicm93c2VyQ29ubmVjdGlvbiwgc2NyZWVuc2hvdENhcHR1cmVyLCBnbG9iYWxXYXJuaW5nTG9nLCBvcHRzLCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMsIHN0YXJ0UnVuRXhlY3V0aW9uVGltZSB9OiBUZXN0UnVuSW5pdCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXNbdGVzdFJ1bk1hcmtlcl0gICAgPSB0cnVlO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKGdsb2JhbFdhcm5pbmdMb2csIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMsIHRoaXMpKTtcbiAgICAgICAgdGhpcy5vcHRzICAgICAgICAgICAgICA9IG9wdHM7XG4gICAgICAgIHRoaXMudGVzdCAgICAgICAgICAgICAgPSB0ZXN0O1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uID0gYnJvd3NlckNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMudW5zdGFibGUgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5icm93c2VyICAgICAgICAgICA9IGdldEJyb3dzZXIoYnJvd3NlckNvbm5lY3Rpb24pO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBUZXN0UnVuUGhhc2UuaW5pdGlhbDtcblxuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZSAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnRlc3REb25lQ29tbWFuZFF1ZXVlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciAgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUlmcmFtZVNlbGVjdG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5zcGVlZCAgICAgICAgICAgICAgICA9IHRoaXMub3B0cy5zcGVlZCBhcyBudW1iZXI7XG4gICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0ICAgICAgPSB0aGlzLl9nZXRQYWdlTG9hZFRpbWVvdXQodGVzdCwgb3B0cyk7XG4gICAgICAgIHRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgPSB0aGlzLl9nZXRUZXN0RXhlY3V0aW9uVGltZW91dChvcHRzKTtcblxuICAgICAgICB0aGlzLmRpc2FibGVQYWdlUmVsb2FkcyAgID0gdGVzdC5kaXNhYmxlUGFnZVJlbG9hZHMgfHwgb3B0cy5kaXNhYmxlUGFnZVJlbG9hZHMgYXMgYm9vbGVhbiAmJiB0ZXN0LmRpc2FibGVQYWdlUmVsb2FkcyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VDYWNoaW5nICAgPSB0ZXN0LmRpc2FibGVQYWdlQ2FjaGluZyB8fCBvcHRzLmRpc2FibGVQYWdlQ2FjaGluZyBhcyBib29sZWFuO1xuXG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlV2luZG93cyA9IG9wdHMuZGlzYWJsZU11bHRpcGxlV2luZG93cyBhcyBib29sZWFuO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVvdXQgPSB0aGlzLl9nZXRSZXF1ZXN0VGltZW91dCh0ZXN0LCBvcHRzKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24gPSBTZXNzaW9uQ29udHJvbGxlci5nZXRTZXNzaW9uKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuY29uc29sZU1lc3NhZ2VzID0gbmV3IEJyb3dzZXJDb25zb2xlTWVzc2FnZXMoKTtcblxuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ICAgPSBudWxsO1xuICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IG51bGw7XG4gICAgICAgIHRoaXMuY3R4ICAgICAgICA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuZml4dHVyZUN0eCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50Um9sZUlkICA9IG51bGw7XG4gICAgICAgIHRoaXMudXNlZFJvbGVTdGF0ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIHRoaXMuZXJycyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c0lkICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuZmlsZURvd25sb2FkaW5nSGFuZGxlZCAgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFkZGluZ0RyaXZlclRhc2tzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMuZGVidWdnaW5nICAgICAgICAgICAgICAgPSB0aGlzLm9wdHMuZGVidWdNb2RlIGFzIGJvb2xlYW47XG4gICAgICAgIHRoaXMuZGVidWdPbkZhaWwgICAgICAgICAgICAgPSB0aGlzLm9wdHMuZGVidWdPbkZhaWwgYXMgYm9vbGVhbjtcbiAgICAgICAgdGhpcy5kaXNhYmxlRGVidWdCcmVha3BvaW50cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlYnVnUmVwb3J0ZXJQbHVnaW5Ib3N0ID0gbmV3IFJlcG9ydGVyUGx1Z2luSG9zdCh7IG5vQ29sb3JzOiBmYWxzZSB9KTtcblxuICAgICAgICB0aGlzLmJyb3dzZXJNYW5pcHVsYXRpb25RdWV1ZSA9IG5ldyBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWUoYnJvd3NlckNvbm5lY3Rpb24sIHNjcmVlbnNob3RDYXB0dXJlciwgdGhpcy53YXJuaW5nTG9nKTtcblxuICAgICAgICB0aGlzLmRlYnVnTG9nID0gbmV3IFRlc3RSdW5EZWJ1Z0xvZyh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnVzZXJBZ2VudCk7XG5cbiAgICAgICAgdGhpcy5xdWFyYW50aW5lICA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IHRoaXMub3B0cy5kZWJ1Z0xvZ2dlcjtcblxuICAgICAgICB0aGlzLm9ic2VydmVkQ2FsbHNpdGVzICAgICAgICAgID0gbmV3IE9ic2VydmVkQ2FsbHNpdGVzU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLmNvbXBpbGVyU2VydmljZSAgICAgICAgICAgID0gY29tcGlsZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLmFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzID0gbmV3IE1hcDxzdHJpbmcsIENhbGxzaXRlUmVjb3JkPigpO1xuXG4gICAgICAgIHRoaXMucmVwbGljYXRvciA9IGNyZWF0ZVJlcGxpY2F0b3IoWyBuZXcgU2VsZWN0b3JOb2RlVHJhbnNmb3JtKCkgXSk7XG5cbiAgICAgICAgdGhpcy5kaXNjb25uZWN0ZWQgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVyclNjcmVlbnNob3RQYXRoID0gbnVsbDtcblxuICAgICAgICB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZSA9IHN0YXJ0UnVuRXhlY3V0aW9uVGltZTtcbiAgICAgICAgdGhpcy5ydW5FeGVjdXRpb25UaW1lb3V0ICAgPSB0aGlzLl9nZXRSdW5FeGVjdXRpb25UaW1lb3V0KG9wdHMpO1xuXG4gICAgICAgIHRoaXMuX2FkZEluamVjdGFibGVzKCk7XG4gICAgICAgIHRoaXMuX2luaXRSZXF1ZXN0SG9va3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRQYWdlTG9hZFRpbWVvdXQgKHRlc3Q6IFRlc3QsIG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRlc3QudGltZW91dHM/LnBhZ2VMb2FkVGltZW91dCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRlc3QudGltZW91dHMucGFnZUxvYWRUaW1lb3V0O1xuXG4gICAgICAgIHJldHVybiBvcHRzLnBhZ2VMb2FkVGltZW91dCBhcyBudW1iZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UmVxdWVzdFRpbWVvdXQgKHRlc3Q6IFRlc3QsIG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+KTogUmVxdWVzdFRpbWVvdXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZTogdGVzdC50aW1lb3V0cz8ucGFnZVJlcXVlc3RUaW1lb3V0IHx8IG9wdHMucGFnZVJlcXVlc3RUaW1lb3V0IGFzIG51bWJlcixcbiAgICAgICAgICAgIGFqYXg6IHRlc3QudGltZW91dHM/LmFqYXhSZXF1ZXN0VGltZW91dCB8fCBvcHRzLmFqYXhSZXF1ZXN0VGltZW91dCBhcyBudW1iZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RXhlY3V0aW9uVGltZW91dCAodGltZW91dDogbnVtYmVyLCBlcnJvcjogVGVzdFRpbWVvdXRFcnJvciB8IFJ1blRpbWVvdXRFcnJvcik6IEV4ZWN1dGlvblRpbWVvdXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgIHJlamVjdFdpdGg6IGVycm9yLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRlc3RFeGVjdXRpb25UaW1lb3V0IChvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGVzdEV4ZWN1dGlvblRpbWVvdXQgPSBvcHRzLnRlc3RFeGVjdXRpb25UaW1lb3V0IGFzIG51bWJlciB8fCAwO1xuXG4gICAgICAgIGlmICghdGVzdEV4ZWN1dGlvblRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RXhlY3V0aW9uVGltZW91dCh0ZXN0RXhlY3V0aW9uVGltZW91dCwgbmV3IFRlc3RUaW1lb3V0RXJyb3IodGVzdEV4ZWN1dGlvblRpbWVvdXQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSdW5FeGVjdXRpb25UaW1lb3V0IChvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcnVuRXhlY3V0aW9uVGltZW91dCA9IG9wdHMucnVuRXhlY3V0aW9uVGltZW91dCBhcyBudW1iZXIgfHwgMDtcblxuICAgICAgICBpZiAoIXJ1bkV4ZWN1dGlvblRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RXhlY3V0aW9uVGltZW91dChydW5FeGVjdXRpb25UaW1lb3V0LCBuZXcgUnVuVGltZW91dEVycm9yKHJ1bkV4ZWN1dGlvblRpbWVvdXQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3RSdW5FeGVjdXRpb25UaW1lb3V0ICgpOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydFJ1bkV4ZWN1dGlvblRpbWUgfHwgIXRoaXMucnVuRXhlY3V0aW9uVGltZW91dClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lb3V0ID0gTWF0aC5tYXgodGhpcy5ydW5FeGVjdXRpb25UaW1lb3V0LnRpbWVvdXQgLSAoRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRSdW5FeGVjdXRpb25UaW1lLmdldFRpbWUoKSksIDApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRFeGVjdXRpb25UaW1lb3V0KGN1cnJlbnRUaW1lb3V0LCB0aGlzLnJ1bkV4ZWN1dGlvblRpbWVvdXQucmVqZWN0V2l0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25UaW1lb3V0ICgpOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RSdW5FeGVjdXRpb25UaW1lb3V0ICYmICghdGhpcy50ZXN0RXhlY3V0aW9uVGltZW91dCB8fCB0aGlzLnJlc3RSdW5FeGVjdXRpb25UaW1lb3V0LnRpbWVvdXQgPCB0aGlzLnRlc3RFeGVjdXRpb25UaW1lb3V0LnRpbWVvdXQpXG4gICAgICAgICAgICA/IHRoaXMucmVzdFJ1bkV4ZWN1dGlvblRpbWVvdXRcbiAgICAgICAgICAgIDogdGhpcy50ZXN0RXhlY3V0aW9uVGltZW91dCB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZENsaWVudFNjcmlwdENvbnRlbnRXYXJuaW5nc0lmTmVjZXNzYXJ5ICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBlbXB0eSwgZHVwbGljYXRlZENvbnRlbnQgfSA9IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHModGhpcy50ZXN0LmNsaWVudFNjcmlwdHMgYXMgQ2xpZW50U2NyaXB0W10pO1xuXG4gICAgICAgIGlmIChlbXB0eS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhXQVJOSU5HX01FU1NBR0UuY2xpZW50U2NyaXB0c1dpdGhFbXB0eUNvbnRlbnQpO1xuXG4gICAgICAgIGlmIChkdXBsaWNhdGVkQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFBsdXJhbFN1ZmZpeChkdXBsaWNhdGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCBkdXBsaWNhdGVkQ29udGVudENsaWVudFNjcmlwdHNTdHIgPSBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcoZHVwbGljYXRlZENvbnRlbnQsICdcXG4nKTtcblxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFLmNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQsIHN1ZmZpeCwgZHVwbGljYXRlZENvbnRlbnRDbGllbnRTY3JpcHRzU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZEluamVjdGFibGVzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkQ2xpZW50U2NyaXB0Q29udGVudFdhcm5pbmdzSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgdGhpcy5pbmplY3RhYmxlLnNjcmlwdHMucHVzaCguLi5JTkpFQ1RBQkxFUy5TQ1JJUFRTKTtcbiAgICAgICAgdGhpcy5pbmplY3RhYmxlLnVzZXJTY3JpcHRzLnB1c2goLi4udGhpcy50ZXN0LmNsaWVudFNjcmlwdHMubWFwKHNjcmlwdCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogIGdldEN1c3RvbUNsaWVudFNjcmlwdFVybChzY3JpcHQgYXMgQ2xpZW50U2NyaXB0KSxcbiAgICAgICAgICAgICAgICBwYWdlOiBzY3JpcHQucGFnZSBhcyBSZXF1ZXN0RmlsdGVyUnVsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5pbmplY3RhYmxlLnN0eWxlcy5wdXNoKElOSkVDVEFCTEVTLlRFU1RDQUZFX1VJX1NUWUxFUyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpZCAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGluamVjdGFibGUgKCk6IEluamVjdGFibGVSZXNvdXJjZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmluamVjdGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFF1YXJhbnRpbmVJbmZvIChxdWFyYW50aW5lOiBRdWFyYW50aW5lKTogdm9pZCB7XG4gICAgICAgIHRoaXMucXVhcmFudGluZSA9IHF1YXJhbnRpbmU7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50ZXN0LnJlcXVlc3RIb29rcy5pbmNsdWRlcyhob29rKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLnRlc3QucmVxdWVzdEhvb2tzLnB1c2goaG9vayk7XG4gICAgICAgIHRoaXMuX2luaXRSZXF1ZXN0SG9vayhob29rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUmVxdWVzdEhvb2sgKGhvb2s6IFJlcXVlc3RIb29rKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5pbmNsdWRlcyhob29rKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBwdWxsKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MsIGhvb2spO1xuICAgICAgICB0aGlzLl9kaXNwb3NlUmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IHZvaWQge1xuICAgICAgICBob29rLl93YXJuaW5nTG9nID0gdGhpcy53YXJuaW5nTG9nO1xuXG4gICAgICAgIGhvb2suX3JlcXVlc3RGaWx0ZXJSdWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFkZFJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlLCB7XG4gICAgICAgICAgICAgICAgb25SZXF1ZXN0OiAgICAgICAgICAgaG9vay5vblJlcXVlc3QuYmluZChob29rKSxcbiAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyZVJlc3BvbnNlOiBob29rLl9vbkNvbmZpZ3VyZVJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZTogICAgICAgICAgaG9vay5vblJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICB9LCAoZXJyOiBSZXF1ZXN0SG9va01ldGhvZEVycm9yKSA9PiB0aGlzLl9vblJlcXVlc3RIb29rTWV0aG9kRXJyb3IoZXJyLCBob29rLl9jbGFzc05hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFJlcXVlc3RIb29rRm9yQ29tcGlsZXJTZXJ2aWNlIChob29rSWQ6IHN0cmluZywgaG9va0NsYXNzTmFtZTogc3RyaW5nLCBydWxlczogUmVxdWVzdEZpbHRlclJ1bGVbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXN0SWQgPSB0aGlzLnRlc3QuaWQ7XG5cbiAgICAgICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMocnVsZSwge1xuICAgICAgICAgICAgICAgIG9uUmVxdWVzdDogICAgICAgICAgIChldmVudDogUmVxdWVzdEV2ZW50KSA9PiB0aGlzLmNvbXBpbGVyU2VydmljZT8ub25SZXF1ZXN0SG9va0V2ZW50KHsgdGVzdElkLCBob29rSWQsIG5hbWU6IFJlcXVlc3RIb29rTWV0aG9kTmFtZXMub25SZXF1ZXN0LCBldmVudERhdGE6IGV2ZW50IH0pLFxuICAgICAgICAgICAgICAgIG9uQ29uZmlndXJlUmVzcG9uc2U6IChldmVudDogQ29uZmlndXJlUmVzcG9uc2VFdmVudCkgPT4gdGhpcy5jb21waWxlclNlcnZpY2U/Lm9uUmVxdWVzdEhvb2tFdmVudCh7IHRlc3RJZCwgaG9va0lkLCBuYW1lOiBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLl9vbkNvbmZpZ3VyZVJlc3BvbnNlLCBldmVudERhdGE6IGV2ZW50IH0pLFxuICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6ICAgICAgICAgIChldmVudDogUmVzcG9uc2VFdmVudCkgPT4gdGhpcy5jb21waWxlclNlcnZpY2U/Lm9uUmVxdWVzdEhvb2tFdmVudCh7IHRlc3RJZCwgaG9va0lkLCBuYW1lOiBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLm9uUmVzcG9uc2UsIGV2ZW50RGF0YTogZXZlbnQgfSksXG4gICAgICAgICAgICB9LCBlcnIgPT4gdGhpcy5fb25SZXF1ZXN0SG9va01ldGhvZEVycm9yKGVyciwgaG9va0NsYXNzTmFtZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vblJlcXVlc3RIb29rTWV0aG9kRXJyb3IgKGV2ZW50OiBSZXF1ZXN0SG9va01ldGhvZEVycm9yLCBob29rQ2xhc3NOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGVycjogRXJyb3IgfCBUZXN0UnVuRXJyb3JCYXNlICAgICAgICAgICAgPSBldmVudC5lcnJvcjtcbiAgICAgICAgY29uc3QgaXNSZXF1ZXN0SG9va05vdEltcGxlbWVudGVkTWV0aG9kRXJyb3IgPSAoZXJyIGFzIHVua25vd24gYXMgVGVzdFJ1bkVycm9yQmFzZSk/LmNvZGUgPT09IFRFU1RfUlVOX0VSUk9SUy5yZXF1ZXN0SG9va05vdEltcGxlbWVudGVkRXJyb3I7XG5cbiAgICAgICAgaWYgKCFpc1JlcXVlc3RIb29rTm90SW1wbGVtZW50ZWRNZXRob2RFcnJvcilcbiAgICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0SG9va1VuaGFuZGxlZEVycm9yKGVyciwgaG9va0NsYXNzTmFtZSwgZXZlbnQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc3Bvc2VSZXF1ZXN0SG9vayAoaG9vazogUmVxdWVzdEhvb2spOiB2b2lkIHtcbiAgICAgICAgaG9vay5fd2FybmluZ0xvZyA9IG51bGw7XG5cbiAgICAgICAgaG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXRhY2hSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMgKHJ1bGVzOiBSZXF1ZXN0RmlsdGVyUnVsZVtdKTogdm9pZCB7XG4gICAgICAgIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVPbkNvbXBpbGVyU2VydmljZUV2ZW50cyAoKTogdm9pZCB7XG4gICAgICAgIENPTVBJTEVSX1NFUlZJQ0VfRVZFTlRTLmZvckVhY2goZXZlbnROYW1lID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZXJTZXJ2aWNlLm9uKGV2ZW50TmFtZSwgYXN5bmMgYXJncyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXNzaW9uW2V2ZW50TmFtZV0oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2Uub24oJ2FkZFJlcXVlc3RFdmVudExpc3RlbmVycycsIGFzeW5jICh7IGhvb2tJZCwgaG9va0NsYXNzTmFtZSwgcnVsZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRSZXF1ZXN0SG9va0ZvckNvbXBpbGVyU2VydmljZShob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVyU2VydmljZS5vbigncmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzJywgYXN5bmMgKHsgcnVsZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGFjaFJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRSZXF1ZXN0SG9va3MgKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21waWxlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZU9uQ29tcGlsZXJTZXJ2aWNlRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLnRlc3QucmVxdWVzdEhvb2tzLmZvckVhY2goaG9vayA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdFJlcXVlc3RIb29rRm9yQ29tcGlsZXJTZXJ2aWNlKGhvb2suaWQsIGhvb2suX2NsYXNzTmFtZSwgaG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMudGVzdC5yZXF1ZXN0SG9va3MuZm9yRWFjaChob29rID0+IHRoaXMuX2luaXRSZXF1ZXN0SG9vayhob29rKSk7XG4gICAgfVxuXG4gICAgLy8gSGFtbWVyaGVhZCBwYXlsb2FkXG4gICAgcHVibGljIGFzeW5jIGdldFBheWxvYWRTY3JpcHQgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRoaXMuZmlsZURvd25sb2FkaW5nSGFuZGxlZCAgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gTXVzdGFjaGUucmVuZGVyKFRFU1RfUlVOX1RFTVBMQVRFLCB7XG4gICAgICAgICAgICB0ZXN0UnVuSWQ6ICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlc3Npb24uaWQpLFxuICAgICAgICAgICAgYnJvd3NlcklkOiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5pZCksXG4gICAgICAgICAgICBicm93c2VySGVhcnRiZWF0UmVsYXRpdmVVcmw6ICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmhlYXJ0YmVhdFJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJTdGF0dXNSZWxhdGl2ZVVybDogICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uc3RhdHVzUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlclN0YXR1c0RvbmVSZWxhdGl2ZVVybDogSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5zdGF0dXNEb25lUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlckFjdGl2ZVdpbmRvd0lkVXJsOiAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5hY3RpdmVXaW5kb3dJZFVybCksXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnVzZXJBZ2VudCksXG4gICAgICAgICAgICB0ZXN0TmFtZTogICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnRlc3QubmFtZSksXG4gICAgICAgICAgICBmaXh0dXJlTmFtZTogICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSgodGhpcy50ZXN0LmZpeHR1cmUgYXMgRml4dHVyZSkubmFtZSksXG4gICAgICAgICAgICBzZWxlY3RvclRpbWVvdXQ6ICAgICAgICAgICAgICB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0LFxuICAgICAgICAgICAgcGFnZUxvYWRUaW1lb3V0OiAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZFRpbWVvdXQsXG4gICAgICAgICAgICBjaGlsZFdpbmRvd1JlYWR5VGltZW91dDogICAgICBDSElMRF9XSU5ET1dfUkVBRFlfVElNRU9VVCxcbiAgICAgICAgICAgIHNraXBKc0Vycm9yczogICAgICAgICAgICAgICAgIHRoaXMub3B0cy5za2lwSnNFcnJvcnMsXG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogICAgICAgICAgICAgICB0aGlzLm9wdHMucmV0cnlUZXN0UGFnZXMsXG4gICAgICAgICAgICBzcGVlZDogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWVkLFxuICAgICAgICAgICAgZGlhbG9nSGFuZGxlcjogICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5hY3RpdmVEaWFsb2dIYW5kbGVyKSxcbiAgICAgICAgICAgIGNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zOiAgIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uY2FuVXNlRGVmYXVsdFdpbmRvd0FjdGlvbnMoKSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJZnJhbWVQYXlsb2FkU2NyaXB0ICgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gTXVzdGFjaGUucmVuZGVyKElGUkFNRV9URVNUX1JVTl9URU1QTEFURSwge1xuICAgICAgICAgICAgdGVzdFJ1bklkOiAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlc3Npb24uaWQpLFxuICAgICAgICAgICAgc2VsZWN0b3JUaW1lb3V0OiB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0LFxuICAgICAgICAgICAgcGFnZUxvYWRUaW1lb3V0OiB0aGlzLnBhZ2VMb2FkVGltZW91dCxcbiAgICAgICAgICAgIHJldHJ5VGVzdFBhZ2VzOiAgISF0aGlzLm9wdHMucmV0cnlUZXN0UGFnZXMsXG4gICAgICAgICAgICBzcGVlZDogICAgICAgICAgIHRoaXMuc3BlZWQsXG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgaGFuZGxlcnNcbiAgICBwdWJsaWMgZ2V0QXV0aENyZWRlbnRpYWxzICgpOiBudWxsIHwgQXV0aENyZWRlbnRpYWxzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdC5hdXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVEb3dubG9hZCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRpbmdIYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQXR0YWNobWVudCAoZGF0YTogeyBpc09wZW5lZEluTmV3V2luZG93OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGEuaXNPcGVuZWRJbk5ld1dpbmRvdylcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERvd25sb2FkaW5nSGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVBhZ2VFcnJvciAoY3R4OiBhbnksIGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbmV3IFBhZ2VMb2FkRXJyb3IoZXJyLCBjdHgucmVxT3B0cy51cmwpO1xuXG4gICAgICAgIGN0eC5yZWRpcmVjdChjdHgudG9Qcm94eVVybChTUEVDSUFMX0VSUk9SX1BBR0UpKTtcbiAgICB9XG5cbiAgICAvLyBUZXN0IGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVUZXN0Rm4gKHBoYXNlOiBUZXN0UnVuUGhhc2UsIGZuOiBGdW5jdGlvbiwgdGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5waGFzZSA9IHBoYXNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlRm5XaXRoVGltZW91dChmbiwgdGltZW91dCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWFrZVNjcmVlbnNob3RPbkZhaWwoKTtcblxuICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnIpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmVyclNjcmVlbnNob3RQYXRoID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhdGhpcy5fYWRkUGVuZGluZ1BhZ2VFcnJvcklmQW55KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcnVuQmVmb3JlSG9vayAoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICh0aGlzLnRlc3QuZ2xvYmFsQmVmb3JlRm4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pblRlc3RCZWZvcmVIb29rLCB0aGlzLnRlc3QuZ2xvYmFsQmVmb3JlRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5iZWZvcmVGbilcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pblRlc3RCZWZvcmVIb29rLCB0aGlzLnRlc3QuYmVmb3JlRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5maXh0dXJlPy5iZWZvcmVFYWNoRm4pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5GaXh0dXJlQmVmb3JlRWFjaEhvb2ssIHRoaXMudGVzdC5maXh0dXJlPy5iZWZvcmVFYWNoRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcnVuQWZ0ZXJIb29rICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5nbG9iYWxBZnRlckZuKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QWZ0ZXJIb29rLCB0aGlzLnRlc3QuZ2xvYmFsQWZ0ZXJGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmFmdGVyRm4pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QWZ0ZXJIb29rLCB0aGlzLnRlc3QuYWZ0ZXJGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmZpeHR1cmU/LmFmdGVyRWFjaEZuKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluRml4dHVyZUFmdGVyRWFjaEhvb2ssIHRoaXMudGVzdC5maXh0dXJlPy5hZnRlckVhY2hGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9maW5hbGl6ZVRlc3RSdW4gKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICBjb25zdCB3YXJuaW5ncyA9IGF3YWl0IHRoaXMuY29tcGlsZXJTZXJ2aWNlLmdldFdhcm5pbmdNZXNzYWdlcyh7IHRlc3RSdW5JZDogaWQgfSk7XG5cbiAgICAgICAgICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcod2FybmluZyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2UucmVtb3ZlVGVzdFJ1bkZyb21TdGF0ZSh7IHRlc3RSdW5JZDogaWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXN0UnVuVHJhY2tlci5yZW1vdmVBY3RpdmVUZXN0UnVuKGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0ZXN0UnVuVHJhY2tlci5hZGRBY3RpdmVUZXN0UnVuKHRoaXMpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnc3RhcnQnKTtcblxuICAgICAgICBjb25zdCBvbkRpc2Nvbm5lY3RlZCA9IChlcnI6IEVycm9yKTogdm9pZCA9PiB0aGlzLl9kaXNjb25uZWN0KGVycik7XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5vbmNlKCdkaXNjb25uZWN0ZWQnLCBvbkRpc2Nvbm5lY3RlZCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5vbmNlKCdjb25uZWN0ZWQnKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3JlYWR5Jyk7XG5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX3J1bkJlZm9yZUhvb2soKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0LCB0aGlzLnRlc3QuZm4gYXMgRnVuY3Rpb24sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ydW5BZnRlckhvb2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc2Nvbm5lY3RlZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLnBlbmRpbmdGaW5hbGl6YXRpb247XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5yZW1vdmVMaXN0ZW5lcignZGlzY29ubmVjdGVkJywgb25EaXNjb25uZWN0ZWQpO1xuXG4gICAgICAgIGlmICh0aGlzLmVycnMubGVuZ3RoICYmIHRoaXMuZGVidWdPbkZhaWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyclN0ciA9IHRoaXMuZGVidWdSZXBvcnRlclBsdWdpbkhvc3QuZm9ybWF0RXJyb3IodGhpcy5lcnJzWzBdKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kKHZvaWQgMCwgZXJyU3RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlLWRvbmUnKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuVGVzdERvbmVDb21tYW5kKCkpO1xuXG4gICAgICAgIHRoaXMuX2FkZFBlbmRpbmdQYWdlRXJyb3JJZkFueSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXJSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVSZXF1ZXN0SG9va0Vycm9ycygpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ZpbmFsaXplVGVzdFJ1bih0aGlzLnNlc3Npb24uaWQpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnZG9uZScpO1xuICAgIH1cblxuICAgIC8vIEVycm9yc1xuICAgIHByaXZhdGUgX2FkZFBlbmRpbmdQYWdlRXJyb3JJZkFueSAoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdQYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IodGhpcy5wZW5kaW5nUGFnZUVycm9yKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZUVycm9ySWQgKGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBlcnIuaWQgPSBlcnIuaWQgfHwgbmFub2lkKDcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUVycm9yQWRhcHRlciAoZXJyOiBFcnJvcik6IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUVycm9ySWQoZXJyKTtcblxuICAgICAgICByZXR1cm4gbmV3IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlcihlcnIsIHtcbiAgICAgICAgICAgIHVzZXJBZ2VudDogICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnVzZXJBZ2VudCxcbiAgICAgICAgICAgIHNjcmVlbnNob3RQYXRoOiB0aGlzLmVyclNjcmVlbnNob3RQYXRoIHx8ICcnLFxuICAgICAgICAgICAgdGVzdFJ1bklkOiAgICAgIHRoaXMuaWQsXG4gICAgICAgICAgICB0ZXN0UnVuUGhhc2U6ICAgdGhpcy5waGFzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEVycm9yIChlcnI6IEVycm9yIHwgVGVzdENhZmVFcnJvckxpc3QgfCBUZXN0UnVuRXJyb3JCYXNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVyckxpc3QgPSAoZXJyIGluc3RhbmNlb2YgVGVzdENhZmVFcnJvckxpc3QgPyBlcnIuaXRlbXMgOiBbZXJyXSkgYXMgRXJyb3JbXTtcblxuICAgICAgICBlcnJMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fY3JlYXRlRXJyb3JBZGFwdGVyKGl0ZW0pO1xuXG4gICAgICAgICAgICB0aGlzLmVycnMucHVzaChhZGFwdGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vcm1hbGl6ZVJlcXVlc3RIb29rRXJyb3JzICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhvb2tFcnJvcnMgPSByZW1vdmUodGhpcy5lcnJzLCBlID0+XG4gICAgICAgICAgICAoZSBhcyB1bmtub3duIGFzIFRlc3RSdW5FcnJvckJhc2UpLmNvZGUgPT09IFRFU1RfUlVOX0VSUk9SUy5yZXF1ZXN0SG9va05vdEltcGxlbWVudGVkRXJyb3IgfHxcbiAgICAgICAgICAgIChlIGFzIHVua25vd24gYXMgVGVzdFJ1bkVycm9yQmFzZSkuY29kZSA9PT0gVEVTVF9SVU5fRVJST1JTLnJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IpO1xuXG4gICAgICAgIGlmICghcmVxdWVzdEhvb2tFcnJvcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHVuaXFSZXF1ZXN0SG9va0Vycm9ycyA9IGNoYWluKHJlcXVlc3RIb29rRXJyb3JzKVxuICAgICAgICAgICAgLnVuaXFCeShlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBlIGFzIHVua25vd24gYXMgUmVxdWVzdEhvb2tCYXNlRXJyb3I7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyLmhvb2tDbGFzc05hbWUgKyBlcnIubWV0aG9kTmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydEJ5KFsnaG9va0NsYXNzTmFtZScsICdtZXRob2ROYW1lJ10pXG4gICAgICAgICAgICAudmFsdWUoKTtcblxuICAgICAgICB0aGlzLmVycnMgPSB0aGlzLmVycnMuY29uY2F0KHVuaXFSZXF1ZXN0SG9va0Vycm9ycyk7XG4gICAgfVxuXG4gICAgLy8gVGFzayBxdWV1ZVxuICAgIHByaXZhdGUgX2VucXVldWVDb21tYW5kIChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0KVxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVBlbmRpbmdSZXF1ZXN0KGNvbW1hbmQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ0RyaXZlclRhc2tzQ291bnQtLTtcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyVGFza1F1ZXVlLnB1c2goeyBjb21tYW5kLCByZXNvbHZlLCByZWplY3QsIGNhbGxzaXRlIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudClcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoQUxMX0RSSVZFUl9UQVNLU19BRERFRF9UT19RVUVVRV9FVkVOVCwgdGhpcy5kcml2ZXJUYXNrUXVldWUubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcml2ZXJUYXNrUXVldWVMZW5ndGggKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZGluZ0RyaXZlclRhc2tzQ291bnQgPyBwcm9taXNpZnlFdmVudCh0aGlzIGFzIHVua25vd24gYXMgRXZlbnRFbWl0dGVyLCBBTExfRFJJVkVSX1RBU0tTX0FEREVEX1RPX1FVRVVFX0VWRU5UKSA6IFByb21pc2UucmVzb2x2ZSh0aGlzLmRyaXZlclRhc2tRdWV1ZS5sZW5ndGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZW5xdWV1ZUJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kIChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKTtcblxuICAgICAgICBjb25zdCBjb25zb2xlTWVzc2FnZUNvcHkgPSB0aGlzLmNvbnNvbGVNZXNzYWdlcy5nZXRDb3B5KCk7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gY29uc29sZU1lc3NhZ2VDb3B5W1N0cmluZyh0aGlzLmFjdGl2ZVdpbmRvd0lkKV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kIChjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCB1bmRlZmluZWQsIGVycm9yPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnTG9nZ2VyKVxuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5zaG93QnJlYWtwb2ludCh0aGlzLnNlc3Npb24uaWQsIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24udXNlckFnZW50LCBjYWxsc2l0ZSwgZXJyb3IpO1xuXG4gICAgICAgIHRoaXMuZGVidWdnaW5nID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlNldEJyZWFrcG9pbnRDb21tYW5kKCEhZXJyb3IsICEhdGhpcy5jb21waWxlclNlcnZpY2UpLCBjYWxsc2l0ZSkgYXMgYm9vbGVhbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxOb25TZXJ2aWNlVGFza3MgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZSA9IHRoaXMuZHJpdmVyVGFza1F1ZXVlLmZpbHRlcihkcml2ZXJUYXNrID0+IGlzU2VydmljZUNvbW1hbmQoZHJpdmVyVGFzay5jb21tYW5kKSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucmVtb3ZlQWxsTm9uU2VydmljZU1hbmlwdWxhdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVEZWJ1Z1N0YXRlIChkcml2ZXJTdGF0dXM6IERyaXZlclN0YXR1cyk6IHZvaWQge1xuICAgICAgICBpZiAoZHJpdmVyU3RhdHVzLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5lbWl0KGRyaXZlclN0YXR1cy5kZWJ1Zyk7XG4gICAgfVxuXG4gICAgLy8gQ3VycmVudCBkcml2ZXIgdGFza1xuICAgIHB1YmxpYyBnZXQgY3VycmVudERyaXZlclRhc2sgKCk6IERyaXZlclRhc2sge1xuICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXJUYXNrUXVldWVbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZUN1cnJlbnREcml2ZXJUYXNrIChyZXN1bHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudERyaXZlclRhc2sucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3REb25lQ29tbWFuZFF1ZXVlZClcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbE5vblNlcnZpY2VUYXNrcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlID0gZXJyLmNhbGxzaXRlIHx8IHRoaXMuY3VycmVudERyaXZlclRhc2suY2FsbHNpdGU7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50RHJpdmVyVGFzay5yZWplY3QoZXJyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTm9uU2VydmljZVRhc2tzKCk7XG4gICAgfVxuXG4gICAgLy8gUGVuZGluZyByZXF1ZXN0XG4gICAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nUmVxdWVzdCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nUmVxdWVzdC5yZXNwb25zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUGVuZGluZ1JlcXVlc3QgKGNvbW1hbmQ6IENvbW1hbmRCYXNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSA9IGNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1JlcXVlc3QpXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0LnJlc29sdmUoY29tbWFuZCk7XG5cbiAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcml2ZXIgcmVxdWVzdFxuICAgIHByaXZhdGUgX3Nob3VsZFJlc29sdmVDdXJyZW50RHJpdmVyVGFzayAoZHJpdmVyU3RhdHVzOiBEcml2ZXJTdGF0dXMpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbW1hbmQgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQ7XG5cbiAgICAgICAgY29uc3QgaXNFeGVjdXRpbmdPYnNlcnZhdGlvbkNvbW1hbmQgPSBjdXJyZW50Q29tbWFuZCBpbnN0YW5jZW9mIG9ic2VydmF0aW9uQ29tbWFuZHMuRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCB8fFxuICAgICAgICAgICAgY3VycmVudENvbW1hbmQgaW5zdGFuY2VvZiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kO1xuXG4gICAgICAgIGNvbnN0IGlzRGVidWdBY3RpdmUgPSBjdXJyZW50Q29tbWFuZCBpbnN0YW5jZW9mIHNlcnZpY2VDb21tYW5kcy5TZXRCcmVha3BvaW50Q29tbWFuZDtcblxuICAgICAgICBjb25zdCBzaG91bGRFeGVjdXRlQ3VycmVudENvbW1hbmQgPVxuICAgICAgICAgICAgZHJpdmVyU3RhdHVzLmlzRmlyc3RSZXF1ZXN0QWZ0ZXJXaW5kb3dTd2l0Y2hpbmcgJiYgKGlzRXhlY3V0aW5nT2JzZXJ2YXRpb25Db21tYW5kIHx8IGlzRGVidWdBY3RpdmUpO1xuXG4gICAgICAgIHJldHVybiAhc2hvdWxkRXhlY3V0ZUN1cnJlbnRDb21tYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Z1bGZpbGxDdXJyZW50RHJpdmVyVGFzayAoZHJpdmVyU3RhdHVzOiBEcml2ZXJTdGF0dXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREcml2ZXJUYXNrKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpXG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9zaG91bGRSZXNvbHZlQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzKSlcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVQYWdlRXJyb3JTdGF0dXMgKHBhZ2VFcnJvcjogRXJyb3IpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERyaXZlclRhc2sgJiYgaXNDb21tYW5kUmVqZWN0YWJsZUJ5UGFnZUVycm9yKHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrKHBhZ2VFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IHRoaXMucGVuZGluZ1BhZ2VFcnJvciB8fCBwYWdlRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZURyaXZlclJlcXVlc3QgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogQ29tbWFuZEJhc2UgfCBudWxsIHwgc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaXNUZXN0RG9uZSAgICAgICAgICAgICAgICAgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrICYmIHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZC50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfVFlQRS50ZXN0RG9uZTtcbiAgICAgICAgY29uc3QgcGFnZUVycm9yICAgICAgICAgICAgICAgICAgPSB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgfHwgZHJpdmVyU3RhdHVzLnBhZ2VFcnJvcjtcbiAgICAgICAgY29uc3QgY3VycmVudFRhc2tSZWplY3RlZEJ5RXJyb3IgPSBwYWdlRXJyb3IgJiYgdGhpcy5faGFuZGxlUGFnZUVycm9yU3RhdHVzKHBhZ2VFcnJvcik7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMuY29uY2F0KGRyaXZlclN0YXR1cy5jb25zb2xlTWVzc2FnZXMpO1xuXG4gICAgICAgIHRoaXMuX2hhbmRsZURlYnVnU3RhdGUoZHJpdmVyU3RhdHVzKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRUYXNrUmVqZWN0ZWRCeUVycm9yICYmIGRyaXZlclN0YXR1cy5pc0NvbW1hbmRSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChpc1Rlc3REb25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUN1cnJlbnREcml2ZXJUYXNrKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gVEVTVF9ET05FX0NPTkZJUk1BVElPTl9SRVNQT05TRTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZnVsZmlsbEN1cnJlbnREcml2ZXJUYXNrKGRyaXZlclN0YXR1cyk7XG5cbiAgICAgICAgICAgIGlmIChkcml2ZXJTdGF0dXMuaXNQZW5kaW5nV2luZG93U3dpdGNoaW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEN1cnJlbnREcml2ZXJUYXNrQ29tbWFuZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEN1cnJlbnREcml2ZXJUYXNrQ29tbWFuZCAoKTogQ29tbWFuZEJhc2UgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREcml2ZXJUYXNrKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZDtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUubmF2aWdhdGVUbyAmJiAoY29tbWFuZCBhcyBhbnkpLnN0YXRlU25hcHNob3QpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24udXNlU3RhdGVTbmFwc2hvdChKU09OLnBhcnNlKChjb21tYW5kIGFzIGFueSkuc3RhdGVTbmFwc2hvdCkpO1xuXG4gICAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgY29tbWFuZFxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVKc0V4cHJlc3Npb24gKGNvbW1hbmQ6IEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCByZXN1bHRWYXJpYWJsZU5hbWUgPSBjb21tYW5kLnJlc3VsdFZhcmlhYmxlTmFtZTtcbiAgICAgICAgbGV0IGV4cHJlc3Npb24gICAgICAgICAgID0gY29tbWFuZC5leHByZXNzaW9uO1xuXG4gICAgICAgIGlmIChyZXN1bHRWYXJpYWJsZU5hbWUpXG4gICAgICAgICAgICBleHByZXNzaW9uID0gYCR7cmVzdWx0VmFyaWFibGVOYW1lfSA9ICR7ZXhwcmVzc2lvbn0sICR7cmVzdWx0VmFyaWFibGVOYW1lfWA7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlclNlcnZpY2UuZXhlY3V0ZUpzRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogICB7IHNraXBWaXNpYmlsaXR5Q2hlY2s6IGZhbHNlIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGVjdXRlSnNFeHByZXNzaW9uKGV4cHJlc3Npb24sIHRoaXMsIHsgc2tpcFZpc2liaWxpdHlDaGVjazogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uIChjb21tYW5kOiBFeGVjdXRlQXN5bmNFeHByZXNzaW9uQ29tbWFuZCwgY2FsbHNpdGU/OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVyU2VydmljZS5leGVjdXRlQXN5bmNKc0V4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGNvbW1hbmQuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6ICB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIGNhbGxzaXRlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uKGNvbW1hbmQuZXhwcmVzc2lvbiwgdGhpcywgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZGlyZWN0UmVFeGVjdXRhYmxlUHJvbWlzZUV4ZWN1dGlvblRvQ29tcGlsZXJTZXJ2aWNlIChjb21tYW5kOiBBc3NlcnRpb25Db21tYW5kKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlclNlcnZpY2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgY29tbWFuZC5hY3R1YWwgPSBSZUV4ZWN1dGFibGVQcm9taXNlLmZyb21Gbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jb21waWxlclNlcnZpY2U/LmdldEFzc2VydGlvbkFjdHVhbFZhbHVlKHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHNlbGYuaWQsXG4gICAgICAgICAgICAgICAgY29tbWFuZElkOiBjb21tYW5kLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZGlyZWN0QXNzZXJ0aW9uRm5FeGVjdXRpb25Ub0NvbXBpbGVyU2VydmljZSAoZXhlY3V0b3I6IEFzc2VydGlvbkV4ZWN1dG9yKTogdm9pZCB7XG4gICAgICAgIGV4ZWN1dG9yLmZuID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZXJTZXJ2aWNlPy5leGVjdXRlQXNzZXJ0aW9uRm4oe1xuICAgICAgICAgICAgICAgIHRlc3RSdW5JZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBjb21tYW5kSWQ6IGV4ZWN1dG9yLmNvbW1hbmQuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leGVjdXRlQXNzZXJ0aW9uIChjb21tYW5kOiBBc3NlcnRpb25Db21tYW5kLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGNvbW1hbmQuYWN0dWFsID09PSBTeW1ib2wuZm9yKFJFX0VYRUNVVEFCTEVfUFJPTUlTRV9NQVJLRVJfREVTQ1JJUFRJT04pKVxuICAgICAgICAgICAgdGhpcy5fcmVkaXJlY3RSZUV4ZWN1dGFibGVQcm9taXNlRXhlY3V0aW9uVG9Db21waWxlclNlcnZpY2UoY29tbWFuZCk7XG5cbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uVGltZW91dCA9IGdldEFzc2VydGlvblRpbWVvdXQoY29tbWFuZCwgdGhpcy5vcHRzKTtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgICAgICAgICA9IG5ldyBBc3NlcnRpb25FeGVjdXRvcihjb21tYW5kLCBhc3NlcnRpb25UaW1lb3V0LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgZXhlY3V0b3Iub25jZSgnc3RhcnQtYXNzZXJ0aW9uLXJldHJpZXMnLCAodGltZW91dDogbnVtYmVyKSA9PiB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuU2hvd0Fzc2VydGlvblJldHJpZXNTdGF0dXNDb21tYW5kKHRpbWVvdXQpKSk7XG4gICAgICAgIGV4ZWN1dG9yLm9uY2UoJ2VuZC1hc3NlcnRpb24tcmV0cmllcycsIChzdWNjZXNzOiBib29sZWFuKSA9PiB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuSGlkZUFzc2VydGlvblJldHJpZXNTdGF0dXNDb21tYW5kKHN1Y2Nlc3MpKSk7XG4gICAgICAgIGV4ZWN1dG9yLm9uY2UoJ25vbi1zZXJpYWxpemFibGUtYWN0dWFsLXZhbHVlJywgdGhpcy5fcmVkaXJlY3RBc3NlcnRpb25GbkV4ZWN1dGlvblRvQ29tcGlsZXJTZXJ2aWNlKTtcblxuICAgICAgICBjb25zdCBleGVjdXRlRm4gPSB0aGlzLmRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMoKCkgPT4gZXhlY3V0b3IucnVuKCksIHsgcHJldmVudDogdHJ1ZSB9KTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZUZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWRqdXN0Q29uZmlndXJhdGlvbldpdGhDb21tYW5kIChjb21tYW5kOiBDb21tYW5kQmFzZSk6IHZvaWQge1xuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUudGVzdERvbmUpIHtcbiAgICAgICAgICAgIHRoaXMudGVzdERvbmVDb21tYW5kUXVldWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnTG9nZ2VyKVxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIuaGlkZUJyZWFrcG9pbnQodGhpcy5zZXNzaW9uLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnNldE5hdGl2ZURpYWxvZ0hhbmRsZXIpXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIgPSAoY29tbWFuZCBhcyBhbnkpLmRpYWxvZ0hhbmRsZXI7XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9JZnJhbWUpXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlmcmFtZVNlbGVjdG9yID0gKGNvbW1hbmQgYXMgYW55KS5zZWxlY3RvcjtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zd2l0Y2hUb01haW5XaW5kb3cpXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlmcmFtZVNlbGVjdG9yID0gbnVsbDtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXRUZXN0U3BlZWQpXG4gICAgICAgICAgICB0aGlzLnNwZWVkID0gKGNvbW1hbmQgYXMgYW55KS5zcGVlZDtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQpXG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkVGltZW91dCA9IChjb21tYW5kIGFzIGFueSkuZHVyYXRpb247XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVidWcpXG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IHRydWU7XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGlzYWJsZURlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyLmhpZGVCcmVha3BvaW50KHRoaXMuc2Vzc2lvbi5pZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGVidWdnaW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2FkanVzdFNjcmVlbnNob3RDb21tYW5kIChjb21tYW5kOiBUYWtlU2NyZWVuc2hvdEJhc2VDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJJZCAgICAgICAgICAgICAgICAgICAgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmlkO1xuICAgICAgICBjb25zdCB7IGhhc0Nocm9tZWxlc3NTY3JlZW5zaG90cyB9ID0gYXdhaXQgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5oYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyKGJyb3dzZXJJZCk7XG5cbiAgICAgICAgaWYgKCFoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHMpXG4gICAgICAgICAgICBjb21tYW5kLmdlbmVyYXRlU2NyZWVuc2hvdE1hcmsoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2FkanVzdENvbW1hbmRPcHRpb25zQW5kRW52aXJvbm1lbnQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICgoY29tbWFuZCBhcyBhbnkpLm9wdGlvbnM/LmNvbmZpZGVudGlhbCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS50eXBlVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZCgoY29tbWFuZCBhcyBhbnkpLnNlbGVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5yZXBsaWNhdG9yLmRlY29kZShyZXN1bHQpO1xuXG4gICAgICAgICAgICAoY29tbWFuZCBhcyBhbnkpLm9wdGlvbnMuY29uZmlkZW50aWFsID0gaXNQYXNzd29yZElucHV0KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUucHJlc3NLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IHNlcnZpY2VDb21tYW5kcy5HZXRBY3RpdmVFbGVtZW50Q29tbWFuZCgpKTtcblxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5yZXBsaWNhdG9yLmRlY29kZShyZXN1bHQpO1xuXG4gICAgICAgICAgICAoY29tbWFuZCBhcyBhbnkpLm9wdGlvbnMuY29uZmlkZW50aWFsID0gaXNQYXNzd29yZElucHV0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kQmFzZSAmJiAhIXRoaXMuY29tcGlsZXJTZXJ2aWNlICYmICF0aGlzLl9jbGllbnRFbnZpcm9ubWVudFByZXBhcmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGllbnRFbnZpcm9ubWVudFByZXBhcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlByZXBhcmVDbGllbnRFbnZpcm9ubWVudEluRGVidWdNb2RlKGNvbW1hbmQuZXNtUnVudGltZSkpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX3NldEJyZWFrcG9pbnRJZk5lY2Vzc2FyeSAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlPzogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVEZWJ1Z0JyZWFrcG9pbnRzICYmIHRoaXMuZGVidWdnaW5nICYmIGNhblNldERlYnVnZ2VyQnJlYWtwb2ludEJlZm9yZUNvbW1hbmQoY29tbWFuZCkpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9lbnF1ZXVlU2V0QnJlYWtwb2ludENvbW1hbmQoY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UgfCBBY3Rpb25Db21tYW5kQmFzZSwgY2FsbHNpdGU/OiBzdHJpbmcgfCBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZCBpbnN0YW5jZW9mIEFjdGlvbkNvbW1hbmRCYXNlXG4gICAgICAgICAgICA/IHRoaXMuX2V4ZWN1dGVBY3Rpb25Db21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKVxuICAgICAgICAgICAgOiB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2V4ZWN1dGVBY3Rpb25Db21tYW5kIChjb21tYW5kOiBBY3Rpb25Db21tYW5kQmFzZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSB7IGFwaUFjdGlvbk5hbWU6IGNvbW1hbmQubWV0aG9kTmFtZSwgY29tbWFuZCB9O1xuXG4gICAgICAgIGxldCBlcnJvckFkYXB0ZXIgPSBudWxsO1xuICAgICAgICBsZXQgZXJyb3IgICAgICAgID0gbnVsbDtcbiAgICAgICAgbGV0IHJlc3VsdCAgICAgICA9IG51bGw7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fYWRqdXN0Q29tbWFuZE9wdGlvbnNBbmRFbnZpcm9ubWVudChjb21tYW5kKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRBY3Rpb25FdmVudCgnYWN0aW9uLXN0YXJ0JywgYWN0aW9uQXJncyk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGhhc2UgPT09IFRlc3RSdW5QaGFzZS5wZW5kaW5nRmluYWxpemF0aW9uICYmIGVyciBpbnN0YW5jZW9mIEV4dGVybmFsQXNzZXJ0aW9uTGlicmFyeUVycm9yKVxuICAgICAgICAgICAgICAgIGFkZFJlbmRlcmVkV2FybmluZyh0aGlzLndhcm5pbmdMb2csIHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnVuYXdhaXRlZE1ldGhvZFdpdGhBc3NlcnRpb24sIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0sIGNhbGxzaXRlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IGNoZWNrIGlmIGVycm9yIGlzIFRlc3RDYWZlRXJyb3JMaXN0IGlzIHNwZWNpZmljIGZvciB0aGUgYHVzZVJvbGVgIGFjdGlvblxuICAgICAgICAgICAgLy8gaWYgZXJyb3IgaXMgVGVzdENhZmVFcnJvckxpc3Qgd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGFuIGFkYXB0ZXIsXG4gICAgICAgICAgICAvLyBzaW5jZSBlcnJvciBpcyBhbHJlYWR5IHdhcyBwcm9jZXNzZWQgaW4gcm9sZSBpbml0aWFsaXplclxuICAgICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBUZXN0Q2FmZUVycm9yTGlzdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9tYWtlU2NyZWVuc2hvdE9uRmFpbCgpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3JBZGFwdGVyID0gdGhpcy5fY3JlYXRlRXJyb3JBZGFwdGVyKHByb2Nlc3NUZXN0Rm5FcnJvcihlcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycm9yQWRhcHRlciA9IGVycm9yLmFkYXB0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuYXNzaWduKGFjdGlvbkFyZ3MsIHtcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgZXJyOiBlcnJvckFkYXB0ZXIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEFjdGlvbkV2ZW50KCdhY3Rpb24tZG9uZScsIGFjdGlvbkFyZ3MpO1xuXG4gICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2FuRXhlY3V0ZUNvbW1hbmRUaHJvdWdoQ0RQIChjb21tYW5kOiBDb21tYW5kQmFzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5wcm94eWxlc3MgfHwgIVBST1hZTEVTU19DT01NQU5EUy5oYXMoY29tbWFuZC50eXBlKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCBicm93c2VySWQgICAgICAgICA9IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaWQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUFjdGlvbnNJbmZvID0gYXdhaXQgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5oYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyKGJyb3dzZXJJZCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgcmV0dXJuIGN1c3RvbUFjdGlvbnNJbmZvW1BST1hZTEVTU19DT01NQU5EUy5nZXQoY29tbWFuZC50eXBlKSFdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfaW50ZXJuYWxFeGVjdXRlQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlPzogQ2FsbHNpdGVSZWNvcmQgfCBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZy5jb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdQYWdlRXJyb3IgJiYgaXNDb21tYW5kUmVqZWN0YWJsZUJ5UGFnZUVycm9yKGNvbW1hbmQpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdENvbW1hbmRXaXRoUGFnZUVycm9yKGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoaXNFeGVjdXRhYmxlT25DbGllbnRDb21tYW5kKGNvbW1hbmQpKVxuICAgICAgICAgICAgdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50Kys7XG5cbiAgICAgICAgdGhpcy5fYWRqdXN0Q29uZmlndXJhdGlvbldpdGhDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldEJyZWFrcG9pbnRJZk5lY2Vzc2FyeShjb21tYW5kLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2NhbkV4ZWN1dGVDb21tYW5kVGhyb3VnaENEUChjb21tYW5kKSkge1xuICAgICAgICAgICAgY29uc3QgYnJvd3NlcklkID0gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5pZDtcblxuICAgICAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVDbGllbnRGdW5jdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5wcm92aWRlci5leGVjdXRlQ2xpZW50RnVuY3Rpb24oYnJvd3NlcklkLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zd2l0Y2hUb0lmcmFtZSlcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiByZXR1cm4gdGhlIHN3aXRjaFRvSWZyYW1lIGNhbGwgcmVzdWx0IHdoZW4gYW55IGNvbW1hbmQgd2lsbCBub3QgbmVlZCB0aGUgc3dpdGNoaW5nIHRocm91Z2ggdGhlIHByb3h5XG4gICAgICAgICAgICAgICAgLypyZXR1cm4gKi90aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByb3ZpZGVyLnN3aXRjaFRvSWZyYW1lKGJyb3dzZXJJZCwgY29tbWFuZCwgY2FsbHNpdGUsIHRoaXMub3B0cy5zZWxlY3RvclRpbWVvdXQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9NYWluV2luZG93KVxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJldHVybiB0aGUgc3dpdGNoVG9NYWluV2luZG93IGNhbGwgcmVzdWx0IHdoZW4gYW55IGNvbW1hbmQgd2lsbCBub3QgbmVlZCB0aGUgc3dpdGNoaW5nIHRocm91Z2ggdGhlIHByb3h5XG4gICAgICAgICAgICAgICAgLypyZXR1cm4gKi90aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByb3ZpZGVyLnN3aXRjaFRvTWFpbldpbmRvdyhicm93c2VySWQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZXhlY3V0ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByb3ZpZGVyLmV4ZWN1dGVTZWxlY3Rvcihicm93c2VySWQsIGNvbW1hbmQsIGNhbGxzaXRlLCB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90cykge1xuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnNjcmVlbnNob3RzRGlzYWJsZWQsIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkanVzdFNjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQgYXMgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCcm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucHVzaChjb21tYW5kKTtcblxuICAgICAgICAgICAgaWYgKGlzUmVzaXplV2luZG93Q29tbWFuZChjb21tYW5kKSAmJiB0aGlzLm9wdHMudmlkZW9QYXRoKVxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnZpZGVvQnJvd3NlclJlc2l6aW5nLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCB0aGlzLnRlc3QubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUud2FpdClcbiAgICAgICAgICAgIHJldHVybiBkZWxheSgoY29tbWFuZCBhcyBhbnkpLnRpbWVvdXQpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IEluIHJlZ3VsYXIgbW9kZSwgaXQncyBwb3NzaWJsZSB0byBkZWJ1ZyB0ZXN0cyBvbmx5IHVzaW5nIFRlc3RDYWZlIFVJICgnUmVzdW1lJyBhbmQgJ05leHQgc3RlcCcgYnV0dG9ucykuXG4gICAgICAgICAgICAvLyBTbywgd2Ugc2hvdWxkIHdhcm4gb24gdHJ5aW5nIHRvIGRlYnVnIGluIGhlYWRsZXNzIG1vZGUuXG4gICAgICAgICAgICAvLyBJbiBjb21waWxlciBzZXJ2aWNlIG1vZGUsIHdlIGNhbiBkZWJ1ZyBldmVuIGluIGhlYWRsZXNzIG1vZGUgdXNpbmcgYW55IGRlYnVnZ2luZyB0b29scy4gU28sIGluIHRoaXMgY2FzZSwgdGhlIHdhcm5pbmcgaXMgZXhjZXNzaXZlLlxuICAgICAgICAgICAgY29uc3QgY2FuRGVidWcgPSAhIXRoaXMuY29tcGlsZXJTZXJ2aWNlIHx8ICF0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmlzSGVhZGxlc3NCcm93c2VyKCk7XG5cbiAgICAgICAgICAgIGlmIChjYW5EZWJ1ZylcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kKGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkLCB2b2lkIDApO1xuXG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5kZWJ1Z0luSGVhZGxlc3NFcnJvciwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnVzZVJvbGUpIHtcbiAgICAgICAgICAgIGxldCBmbiA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuX3VzZVJvbGUoKGNvbW1hbmQgYXMgYW55KS5yb2xlLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgICAgIGZuID0gdGhpcy5kZWNvcmF0ZVByZXZlbnRFbWl0QWN0aW9uRXZlbnRzKGZuLCB7IHByZXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICBmbiA9IHRoaXMuZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyhmbiwgeyBkaXNhYmxlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5hc3NlcnRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzc2VydGlvbihjb21tYW5kIGFzIEFzc2VydGlvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZXhlY3V0ZUV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZUpzRXhwcmVzc2lvbihjb21tYW5kIGFzIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVBc3luY0V4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uKGNvbW1hbmQgYXMgRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXMpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9QcmV2aW91c1dpbmRvdylcbiAgICAgICAgICAgIChjb21tYW5kIGFzIGFueSkud2luZG93SWQgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByZXZpb3VzQWN0aXZlV2luZG93SWQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZShjb21tYW5kIGFzIFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlamVjdENvbW1hbmRXaXRoUGFnZUVycm9yIChjYWxsc2l0ZT86IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTxFcnJvcj4ge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLnBlbmRpbmdQYWdlRXJyb3I7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBlcnIuY2FsbHNpdGUgICAgICAgICAgPSBjYWxsc2l0ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZW5kQ2xvc2VDaGlsZFdpbmRvd09uRmlsZURvd25sb2FkaW5nQ29tbWFuZCAoKTogQ29tbWFuZEJhc2Uge1xuICAgICAgICByZXR1cm4gbmV3IGFjdGlvbkNvbW1hbmRzLkNsb3NlQ2hpbGRXaW5kb3dPbkZpbGVEb3dubG9hZGluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfbWFrZVNjcmVlbnNob3RPbkZhaWwgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHNjcmVlbnNob3RzIH0gPSB0aGlzLm9wdHM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmVyclNjcmVlbnNob3RQYXRoICYmIChzY3JlZW5zaG90cyBhcyBTY3JlZW5zaG90T3B0aW9uVmFsdWUpPy50YWtlT25GYWlscylcbiAgICAgICAgICAgIHRoaXMuZXJyU2NyZWVuc2hvdFBhdGggPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBicm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZHMuVGFrZVNjcmVlbnNob3RPbkZhaWxDb21tYW5kKCkpIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZWNvcmF0ZVdpdGhGbGFnIChmbjogRnVuY3Rpb24sIGZsYWdOYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzW2ZsYWdOYW1lXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzW2ZsYWdOYW1lXSA9ICF2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb3JhdGVQcmV2ZW50RW1pdEFjdGlvbkV2ZW50cyAoZm46IEZ1bmN0aW9uLCB7IHByZXZlbnQgfTogeyBwcmV2ZW50OiBib29sZWFuIH0pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlV2l0aEZsYWcoZm4sICdwcmV2ZW50RW1pdEFjdGlvbkV2ZW50cycsIHByZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvcmF0ZURpc2FibGVEZWJ1Z0JyZWFrcG9pbnRzIChmbjogRnVuY3Rpb24sIHsgZGlzYWJsZSB9OiB7IGRpc2FibGU6IGJvb2xlYW4gfSk6ICgpID0+IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb3JhdGVXaXRoRmxhZyhmbiwgJ2Rpc2FibGVEZWJ1Z0JyZWFrcG9pbnRzJywgZGlzYWJsZSk7XG4gICAgfVxuXG4gICAgLy8gUm9sZSBtYW5hZ2VtZW50XG4gICAgcHVibGljIGFzeW5jIGdldFN0YXRlU25hcHNob3QgKCk6IFByb21pc2U8U3RhdGVTbmFwc2hvdD4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgc3RhdGUuc3RvcmFnZXMgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuQmFja3VwU3RvcmFnZXNDb21tYW5kKCkpIGFzIFN0b3JhZ2VzU25hcHNob3Q7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NsZWFuVXBDdHhzICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5zZXRDdHgoe1xuICAgICAgICAgICAgICAgIHRlc3RSdW5JZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXJTZXJ2aWNlLnNldEZpeHR1cmVDdHgoe1xuICAgICAgICAgICAgICAgIHRlc3RSdW5JZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3R4ICAgICAgICA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVDdHggPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN3aXRjaFRvQ2xlYW5SdW4gKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NsZWFuVXBDdHhzKCk7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMgPSBuZXcgQnJvd3NlckNvbnNvbGVNZXNzYWdlcygpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi51c2VTdGF0ZVNuYXBzaG90KFN0YXRlU25hcHNob3QuZW1wdHkoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlZWQgIT09IHRoaXMub3B0cy5zcGVlZCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0U3BlZWRDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLlNldFRlc3RTcGVlZENvbW1hbmQoeyBzcGVlZDogdGhpcy5vcHRzLnNwZWVkIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFNwZWVkQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdlTG9hZFRpbWVvdXQgIT09IHRoaXMub3B0cy5wYWdlTG9hZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCh7IGR1cmF0aW9uOiB0aGlzLm9wdHMucGFnZUxvYWRUaW1lb3V0IH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvVXJsKHVybCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQoeyBkaWFsb2dIYW5kbGVyOiB7IGZuOiBudWxsIH0gfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQocmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5hdmlnYXRlVG9VcmwgKHVybDogc3RyaW5nLCBmb3JjZVJlbG9hZDogYm9vbGVhbiwgc3RhdGVTbmFwc2hvdD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0ZUNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuTmF2aWdhdGVUb0NvbW1hbmQoeyB1cmwsIGZvcmNlUmVsb2FkLCBzdGF0ZVNuYXBzaG90IH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmF2aWdhdGVDb21tYW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRTdGF0ZVNuYXBzaG90RnJvbVJvbGUgKHJvbGU6IFJvbGUpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3QgcHJldlBoYXNlID0gdGhpcy5waGFzZTtcblxuICAgICAgICBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5pbml0aWFsaXplZCAmJiByb2xlLmluaXRFcnIgaW5zdGFuY2VvZiBUZXN0Q2FmZUVycm9yTGlzdCAmJiByb2xlLmluaXRFcnIuaGFzRXJyb3JzKVxuICAgICAgICAgICAgcm9sZS5pbml0RXJyLmFkYXB0ZXIgPSB0aGlzLl9jcmVhdGVFcnJvckFkYXB0ZXIocm9sZS5pbml0RXJyLml0ZW1zWzBdKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluUm9sZUluaXRpYWxpemVyO1xuXG4gICAgICAgIGlmIChyb2xlLnBoYXNlID09PSBST0xFX1BIQVNFLnVuaW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICBhd2FpdCByb2xlLmluaXRpYWxpemUodGhpcyk7XG5cbiAgICAgICAgZWxzZSBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5wZW5kaW5nSW5pdGlhbGl6YXRpb24pXG4gICAgICAgICAgICBhd2FpdCBwcm9taXNpZnlFdmVudChyb2xlLCAnaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICBpZiAocm9sZS5pbml0RXJyKVxuICAgICAgICAgICAgdGhyb3cgcm9sZS5pbml0RXJyO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBwcmV2UGhhc2U7XG5cbiAgICAgICAgcmV0dXJuIHJvbGUuc3RhdGVTbmFwc2hvdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91c2VSb2xlIChyb2xlOiBSb2xlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGhhc2UgPT09IFRlc3RSdW5QaGFzZS5pblJvbGVJbml0aWFsaXplcilcbiAgICAgICAgICAgIHRocm93IG5ldyBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcihjYWxsc2l0ZSk7XG5cbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBuZXcgVGVzdFJ1bkJvb2ttYXJrKHRoaXMsIHJvbGUpO1xuXG4gICAgICAgIGF3YWl0IGJvb2ttYXJrLmluaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Um9sZUlkKVxuICAgICAgICAgICAgdGhpcy51c2VkUm9sZVN0YXRlc1t0aGlzLmN1cnJlbnRSb2xlSWRdID0gYXdhaXQgdGhpcy5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGVTbmFwc2hvdCA9IHRoaXMudXNlZFJvbGVTdGF0ZXNbcm9sZS5pZF0gfHwgYXdhaXQgdGhpcy5fZ2V0U3RhdGVTbmFwc2hvdEZyb21Sb2xlKHJvbGUpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi51c2VTdGF0ZVNuYXBzaG90KHN0YXRlU25hcHNob3QpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCA9IHJvbGUuaWQ7XG5cbiAgICAgICAgYXdhaXQgYm9va21hcmsucmVzdG9yZShjYWxsc2l0ZSwgc3RhdGVTbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVcmwgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ2xpZW50RnVuY3Rpb25CdWlsZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgICAgICB9LCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBnZXRMb2NhdGlvbiA9IGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0TG9jYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlIChjb21tYW5kOiBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjdXJyZW50V2luZG93cyA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IEdldEN1cnJlbnRXaW5kb3dzQ29tbWFuZCh7fSwgdGhpcykgYXMgQ29tbWFuZEJhc2UpIGFzIE9wZW5lZFdpbmRvd0luZm9ybWF0aW9uW107XG5cbiAgICAgICAgY29uc3Qgd2luZG93cyA9IGF3YWl0IGFzeW5jRmlsdGVyPE9wZW5lZFdpbmRvd0luZm9ybWF0aW9uPihjdXJyZW50V2luZG93cywgYXN5bmMgd25kID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgIG5ldyBVUkwod25kLnVybCksXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3bmQudGl0bGUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21waWxlclNlcnZpY2VQcmVkaWNhdGVEYXRhID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVEYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ6IGNvbW1hbmQuaWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVyU2VydmljZS5jaGVja1dpbmRvdyhjb21waWxlclNlcnZpY2VQcmVkaWNhdGVEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5jaGVja1dpbmRvdyhwcmVkaWNhdGVEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN3aXRjaFRvV2luZG93UHJlZGljYXRlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF3aW5kb3dzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBXaW5kb3dOb3RGb3VuZEVycm9yKCk7XG5cbiAgICAgICAgaWYgKHdpbmRvd3MubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLm11bHRpcGxlV2luZG93c0ZvdW5kQnlQcmVkaWNhdGUsIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IFN3aXRjaFRvV2luZG93Q29tbWFuZCh7IHdpbmRvd0lkOiB3aW5kb3dzWzBdLmlkIH0sIHRoaXMpIGFzIENvbW1hbmRCYXNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNjb25uZWN0IChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RHJpdmVyVGFzaylcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrKGVycik7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0ZWQnLCBlcnIpO1xuXG4gICAgICAgIHRlc3RSdW5UcmFja2VyLnJlbW92ZUFjdGl2ZVRlc3RSdW4odGhpcy5zZXNzaW9uLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVGaWxlRG93bmxvYWRpbmdJbk5ld1dpbmRvd1JlcXVlc3QgKCk6IENvbW1hbmRCYXNlIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERvd25sb2FkaW5nSGFuZGxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VuZENsb3NlQ2hpbGRXaW5kb3dPbkZpbGVEb3dubG9hZGluZ0NvbW1hbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbWl0QWN0aW9uRXZlbnQgKGV2ZW50TmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRFbWl0QWN0aW9uRXZlbnRzKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KGV2ZW50TmFtZSwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc011bHRpcGxlV2luZG93c0FsbG93ZWQgKHRlc3RSdW46IFRlc3RSdW4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCB0ZXN0IH0gPSB0ZXN0UnVuO1xuXG4gICAgICAgIHJldHVybiAhZGlzYWJsZU11bHRpcGxlV2luZG93cyAmJiAhKHRlc3QgYXMgTGVnYWN5VGVzdFJ1bikuaXNMZWdhY3kgJiYgISF0ZXN0UnVuLmFjdGl2ZVdpbmRvd0lkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0aWFsaXplICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVyU2VydmljZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5pbml0aWFsaXplVGVzdFJ1bkRhdGEoe1xuICAgICAgICAgICAgdGVzdFJ1bklkOiAgICAgIHRoaXMuaWQsXG4gICAgICAgICAgICB0ZXN0SWQ6ICAgICAgICAgdGhpcy50ZXN0LmlkLFxuICAgICAgICAgICAgYnJvd3NlcjogICAgICAgIHRoaXMuYnJvd3NlcixcbiAgICAgICAgICAgIGFjdGl2ZVdpbmRvd0lkOiB0aGlzLmFjdGl2ZVdpbmRvd0lkLFxuICAgICAgICAgICAgbWVzc2FnZUJ1czogICAgIHRoaXMuX21lc3NhZ2VCdXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlV2luZG93SWQgKCk6IG51bGwgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5hY3RpdmVXaW5kb3dJZDtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIGlzIHRpbWUtY3JpdGljYWwgYW5kIG11c3QgcmV0dXJuIEFTQVAgdG8gYXZvaWQgY2xpZW50IGRpc2Nvbm5lY3Rpb25cbiAgICBwcml2YXRlIGFzeW5jIFtDTElFTlRfTUVTU0FHRVMucmVhZHldIChtc2c6IERyaXZlck1lc3NhZ2UpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKG1zZy5zdGF0dXMuaXNPYnNlcnZpbmdGaWxlRG93bmxvYWRpbmdJbk5ld1dpbmRvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlRG93bmxvYWRpbmdJbk5ld1dpbmRvd1JlcXVlc3QoKTtcblxuICAgICAgICB0aGlzLmRlYnVnTG9nLmRyaXZlck1lc3NhZ2UobXNnKTtcblxuICAgICAgICBpZiAodGhpcy5kaXNjb25uZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy50ZXN0UnVuUmVxdWVzdEluRGlzY29ubmVjdGVkQnJvd3NlciwgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VySW5mby5hbGlhcykpO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nUmVxdWVzdCgpO1xuXG4gICAgICAgIC8vIE5PVEU6IHRoZSBkcml2ZXIgc2VuZHMgdGhlIHN0YXR1cyBmb3IgdGhlIHNlY29uZCB0aW1lIGlmIGl0IGRpZG4ndCBnZXQgYSByZXNwb25zZSBhdCB0aGVcbiAgICAgICAgLy8gZmlyc3QgdHJ5LiBUaGlzIGlzIHBvc3NpYmxlIHdoZW4gdGhlIHBhZ2Ugd2FzIHVubG9hZGVkIGFmdGVyIHRoZSBkcml2ZXIgc2VudCB0aGUgc3RhdHVzLlxuICAgICAgICBpZiAobXNnLnN0YXR1cy5pZCA9PT0gdGhpcy5sYXN0RHJpdmVyU3RhdHVzSWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5sYXN0RHJpdmVyU3RhdHVzSWQgICAgICAgPSBtc2cuc3RhdHVzLmlkO1xuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSA9IHRoaXMuX2hhbmRsZURyaXZlclJlcXVlc3QobXNnLnN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlIHx8IG1zZy5zdGF0dXMuaXNQZW5kaW5nV2luZG93U3dpdGNoaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlO1xuXG4gICAgICAgIC8vIE5PVEU6IHdlIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UgYWZ0ZXIgdGhlIE1BWF9SRVNQT05TRV9ERUxBWSB0aW1lb3V0IGlzIGV4Y2VlZGVkIHRvIGtlZXAgY29ubmVjdGlvblxuICAgICAgICAvLyB3aXRoIHRoZSBjbGllbnQgYW5kIHByZXZlbnQgdGhlIHJlc3BvbnNlIHRpbWVvdXQgZXhjZXB0aW9uIG9uIHRoZSBjbGllbnQgc2lkZVxuICAgICAgICBjb25zdCByZXNwb25zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3Jlc29sdmVQZW5kaW5nUmVxdWVzdChudWxsKSwgTUFYX1JFU1BPTlNFX0RFTEFZKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHsgcmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZVRpbWVvdXQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBbQ0xJRU5UX01FU1NBR0VTLnJlYWR5Rm9yQnJvd3Nlck1hbmlwdWxhdGlvbl0gKG1zZzogRHJpdmVyTWVzc2FnZSk6IFByb21pc2U8QnJvd3Nlck1hbmlwdWxhdGlvblJlc3VsdD4ge1xuICAgICAgICB0aGlzLmRlYnVnTG9nLmRyaXZlck1lc3NhZ2UobXNnKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgbGV0IGVycm9yICA9IG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlLmV4ZWN1dGVQZW5kaW5nTWFuaXB1bGF0aW9uKG1zZywgdGhpcy5fbWVzc2FnZUJ1cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyByZXN1bHQsIGVycm9yIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBbQ0xJRU5UX01FU1NBR0VTLndhaXRGb3JGaWxlRG93bmxvYWRdIChtc2c6IERyaXZlck1lc3NhZ2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZy5kcml2ZXJNZXNzYWdlKG1zZyk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZURvd25sb2FkaW5nSGFuZGxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZURvd25sb2FkaW5nSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UgPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -32,8 +32,8 @@ class SessionController extends testcafe_hammerhead_1.Session {
|
|
|
32
32
|
handleFileDownload() {
|
|
33
33
|
return this.currentTestRun.handleFileDownload();
|
|
34
34
|
}
|
|
35
|
-
handleAttachment() {
|
|
36
|
-
return this.currentTestRun.handleAttachment();
|
|
35
|
+
handleAttachment(data) {
|
|
36
|
+
return this.currentTestRun.handleAttachment(data);
|
|
37
37
|
}
|
|
38
38
|
handlePageError(ctx, err) {
|
|
39
39
|
return this.currentTestRun.handlePageError(ctx, err);
|
|
@@ -106,4 +106,4 @@ class SessionController extends testcafe_hammerhead_1.Session {
|
|
|
106
106
|
}
|
|
107
107
|
exports.default = SessionController;
|
|
108
108
|
module.exports = exports.default;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtcnVuL3Nlc3Npb24tY29udHJvbGxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4Qiw2REFBOEM7QUFDOUMsMENBQXlCO0FBR3pCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0FBRXJDLE1BQXFCLGlCQUFrQixTQUFRLDZCQUFPO0lBQ2xELFlBQWEsV0FBVyxFQUFFLE9BQU87UUFDN0IsS0FBSyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUdELHNCQUFzQjtJQUN0QixvQkFBb0IsQ0FBRSxHQUFHLEVBQUUsVUFBVTtRQUNqQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFakYsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxrQkFBa0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0JBQWtC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QUFNLGlCQUFpQixHQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQy9DLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBRWpDLElBQUksaUJBQWlCLEVBQUU7Z0JBQ25CLHFCQUFxQixHQUFHO29CQUNwQixHQUFHLEVBQVUsaUJBQWlCO29CQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXO2lCQUN4QyxDQUFDO2FBQ0w7WUFFRCxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMxQixXQUFXLENBQUMsR0FBRyxHQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBRSxPQUFPO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ3RELE9BQU87UUFFWCxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEQsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNKO0FBaElELG9DQWdJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi8nO1xuXG5cbmNvbnN0IEFDVElWRV9TRVNTSU9OU19NQVAgPSB7fTtcbmNvbnN0IFVQTE9BRFNfRElSX05BTUUgPSAnX3VwbG9hZHNfJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvbkNvbnRyb2xsZXIgZXh0ZW5kcyBTZXNzaW9uIHtcbiAgICBjb25zdHJ1Y3RvciAodXBsb2FkUm9vdHMsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIodXBsb2FkUm9vdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFRlc3RSdW4gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgcGF5bG9hZFxuICAgIGFzeW5jIGdldFBheWxvYWRTY3JpcHQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5nZXRQYXlsb2FkU2NyaXB0KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SWZyYW1lUGF5bG9hZFNjcmlwdCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUZXN0UnVuLmdldElmcmFtZVBheWxvYWRTY3JpcHQoKTtcbiAgICB9XG5cblxuICAgIC8vIEhhbW1lcmhlYWQgaGFuZGxlcnNcbiAgICBoYW5kbGVTZXJ2aWNlTWVzc2FnZSAobXNnLCBzZXJ2ZXJJbmZvKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUZXN0UnVuW21zZy5jbWRdKVxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmhhbmRsZVNlcnZpY2VNZXNzYWdlLmNhbGwodGhpcy5jdXJyZW50VGVzdFJ1biwgbXNnLCBzZXJ2ZXJJbmZvKTtcblxuICAgICAgICByZXR1cm4gc3VwZXIuaGFuZGxlU2VydmljZU1lc3NhZ2UobXNnLCBzZXJ2ZXJJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRBdXRoQ3JlZGVudGlhbHMgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5nZXRBdXRoQ3JlZGVudGlhbHMoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWxlRG93bmxvYWQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5oYW5kbGVGaWxlRG93bmxvYWQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVBdHRhY2htZW50ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlc3RSdW4uaGFuZGxlQXR0YWNobWVudCgpO1xuICAgIH1cblxuICAgIGhhbmRsZVBhZ2VFcnJvciAoY3R4LCBlcnIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlc3RSdW4uaGFuZGxlUGFnZUVycm9yKGN0eCwgZXJyKTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBzdGF0aWMgZ2V0U2Vzc2lvbiAodGVzdFJ1bikge1xuICAgICAgICBsZXQgc2Vzc2lvbkluZm8gPSBBQ1RJVkVfU0VTU0lPTlNfTUFQW3Rlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb24uaWRdO1xuXG4gICAgICAgIGlmICghc2Vzc2lvbkluZm8gfHwgIXRlc3RSdW4uZGlzYWJsZVBhZ2VSZWxvYWRzKSB7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbkluZm8gJiYgc2Vzc2lvbkluZm8udXJsKVxuICAgICAgICAgICAgICAgIFNlc3Npb25Db250cm9sbGVyLmNsb3NlU2Vzc2lvbih0ZXN0UnVuKTtcblxuICAgICAgICAgICAgbGV0IHNlc3Npb24gPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGVzdFJ1bi50ZXN0LmlzTGVnYWN5KVxuICAgICAgICAgICAgICAgIHNlc3Npb24gPSB0ZXN0UnVuO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZURpciA9IHBhdGguZGlybmFtZSh0ZXN0UnVuLnRlc3QuZml4dHVyZS5wYXRoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFJvb3RzID0gW1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnJlc29sdmUoVVBMT0FEU19ESVJfTkFNRSksXG4gICAgICAgICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShmaXh0dXJlRGlyLCBVUExPQURTX0RJUl9OQU1FKSxcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZURpcixcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVBhZ2VDYWNoaW5nOiAgIHRlc3RSdW4uZGlzYWJsZVBhZ2VDYWNoaW5nLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd011bHRpcGxlV2luZG93czogVGVzdFJ1bi5pc011bHRpcGxlV2luZG93c0FsbG93ZWQodGVzdFJ1biksXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RUaW1lb3V0OiAgICAgICB0ZXN0UnVuLnJlcXVlc3RUaW1lb3V0LFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd011bHRpcGxlV2luZG93cylcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dJZCA9IHRlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQ7XG5cbiAgICAgICAgICAgICAgICBzZXNzaW9uID0gbmV3IFNlc3Npb25Db250cm9sbGVyKHVwbG9hZFJvb3RzLCBvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHNlc3Npb24uY3VycmVudFRlc3RSdW4gPSB0ZXN0UnVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgICAgICAgICAgIHByb3h5OiAgIG51bGwsXG4gICAgICAgICAgICAgICAgdXJsOiAgICAgbnVsbCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF0gPSBzZXNzaW9uSW5mbztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGVzdFJ1bi50ZXN0LmlzTGVnYWN5KVxuICAgICAgICAgICAgc2Vzc2lvbkluZm8uc2Vzc2lvbi5jdXJyZW50VGVzdFJ1biA9IHRlc3RSdW47XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb25JbmZvLnNlc3Npb247XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFNlc3Npb25VcmwgKHRlc3RSdW4sIHByb3h5KSB7XG4gICAgICAgIGxldCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCB0ZXN0UnVuLnRlc3QuaXNMZWdhY3kpIHtcbiAgICAgICAgICAgIFNlc3Npb25Db250cm9sbGVyLmdldFNlc3Npb24odGVzdFJ1bik7XG5cbiAgICAgICAgICAgIHNlc3Npb25JbmZvID0gQUNUSVZFX1NFU1NJT05TX01BUFt0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2Vzc2lvbkluZm8udXJsKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlVXJsICAgICAgICAgICAgID0gdGVzdFJ1bi50ZXN0LnBhZ2VVcmw7XG4gICAgICAgICAgICBjb25zdCBleHRlcm5hbFByb3h5SG9zdCAgID0gdGVzdFJ1bi5vcHRzLnByb3h5O1xuICAgICAgICAgICAgbGV0IGV4dGVybmFsUHJveHlTZXR0aW5ncyA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChleHRlcm5hbFByb3h5SG9zdCkge1xuICAgICAgICAgICAgICAgIGV4dGVybmFsUHJveHlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgIGV4dGVybmFsUHJveHlIb3N0LFxuICAgICAgICAgICAgICAgICAgICBieXBhc3NSdWxlczogdGVzdFJ1bi5vcHRzLnByb3h5QnlwYXNzLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlc3Npb25JbmZvLnByb3h5ID0gcHJveHk7XG4gICAgICAgICAgICBzZXNzaW9uSW5mby51cmwgICA9IHByb3h5Lm9wZW5TZXNzaW9uKHBhZ2VVcmwsIHNlc3Npb25JbmZvLnNlc3Npb24sIGV4dGVybmFsUHJveHlTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2Vzc2lvbkluZm8udXJsO1xuICAgIH1cblxuICAgIHN0YXRpYyBjbG9zZVNlc3Npb24gKHRlc3RSdW4pIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkluZm8gPSBBQ1RJVkVfU0VTU0lPTlNfTUFQW3Rlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb24uaWRdO1xuXG4gICAgICAgIGlmICghc2Vzc2lvbkluZm8gfHwgIXNlc3Npb25JbmZvLnVybCB8fCAhc2Vzc2lvbkluZm8ucHJveHkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgc2Vzc2lvbkluZm8ucHJveHkuY2xvc2VTZXNzaW9uKHNlc3Npb25JbmZvLnNlc3Npb24pO1xuXG4gICAgICAgIGRlbGV0ZSBBQ1RJVkVfU0VTU0lPTlNfTUFQW3Rlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb24uaWRdO1xuICAgIH1cbn1cblxuIl19
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtcnVuL3Nlc3Npb24tY29udHJvbGxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4Qiw2REFBOEM7QUFDOUMsMENBQXlCO0FBR3pCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0FBRXJDLE1BQXFCLGlCQUFrQixTQUFRLDZCQUFPO0lBQ2xELFlBQWEsV0FBVyxFQUFFLE9BQU87UUFDN0IsS0FBSyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUdELHNCQUFzQjtJQUN0QixvQkFBb0IsQ0FBRSxHQUFHLEVBQUUsVUFBVTtRQUNqQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFakYsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxrQkFBa0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0JBQWtC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QUFDLE9BQU8sQ0FBQztZQUNqRCxNQUFNLGlCQUFpQixHQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQy9DLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBRWpDLElBQUksaUJBQWlCLEVBQUU7Z0JBQ25CLHFCQUFxQixHQUFHO29CQUNwQixHQUFHLEVBQVUsaUJBQWlCO29CQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXO2lCQUN4QyxDQUFDO2FBQ0w7WUFFRCxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMxQixXQUFXLENBQUMsR0FBRyxHQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBRSxPQUFPO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ3RELE9BQU87UUFFWCxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEQsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNKO0FBaElELG9DQWdJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi8nO1xuXG5cbmNvbnN0IEFDVElWRV9TRVNTSU9OU19NQVAgPSB7fTtcbmNvbnN0IFVQTE9BRFNfRElSX05BTUUgPSAnX3VwbG9hZHNfJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvbkNvbnRyb2xsZXIgZXh0ZW5kcyBTZXNzaW9uIHtcbiAgICBjb25zdHJ1Y3RvciAodXBsb2FkUm9vdHMsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIodXBsb2FkUm9vdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFRlc3RSdW4gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgcGF5bG9hZFxuICAgIGFzeW5jIGdldFBheWxvYWRTY3JpcHQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5nZXRQYXlsb2FkU2NyaXB0KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SWZyYW1lUGF5bG9hZFNjcmlwdCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUZXN0UnVuLmdldElmcmFtZVBheWxvYWRTY3JpcHQoKTtcbiAgICB9XG5cblxuICAgIC8vIEhhbW1lcmhlYWQgaGFuZGxlcnNcbiAgICBoYW5kbGVTZXJ2aWNlTWVzc2FnZSAobXNnLCBzZXJ2ZXJJbmZvKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUZXN0UnVuW21zZy5jbWRdKVxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmhhbmRsZVNlcnZpY2VNZXNzYWdlLmNhbGwodGhpcy5jdXJyZW50VGVzdFJ1biwgbXNnLCBzZXJ2ZXJJbmZvKTtcblxuICAgICAgICByZXR1cm4gc3VwZXIuaGFuZGxlU2VydmljZU1lc3NhZ2UobXNnLCBzZXJ2ZXJJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRBdXRoQ3JlZGVudGlhbHMgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5nZXRBdXRoQ3JlZGVudGlhbHMoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWxlRG93bmxvYWQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5oYW5kbGVGaWxlRG93bmxvYWQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVBdHRhY2htZW50IChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUZXN0UnVuLmhhbmRsZUF0dGFjaG1lbnQoZGF0YSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUGFnZUVycm9yIChjdHgsIGVycikge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5oYW5kbGVQYWdlRXJyb3IoY3R4LCBlcnIpO1xuICAgIH1cblxuICAgIC8vIEFQSVxuICAgIHN0YXRpYyBnZXRTZXNzaW9uICh0ZXN0UnVuKSB7XG4gICAgICAgIGxldCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCAhdGVzdFJ1bi5kaXNhYmxlUGFnZVJlbG9hZHMpIHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uSW5mbyAmJiBzZXNzaW9uSW5mby51cmwpXG4gICAgICAgICAgICAgICAgU2Vzc2lvbkNvbnRyb2xsZXIuY2xvc2VTZXNzaW9uKHRlc3RSdW4pO1xuXG4gICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLnRlc3QuaXNMZWdhY3kpXG4gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IHRlc3RSdW47XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlRGlyID0gcGF0aC5kaXJuYW1lKHRlc3RSdW4udGVzdC5maXh0dXJlLnBhdGgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkUm9vdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShVUExPQURTX0RJUl9OQU1FKSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5yZXNvbHZlKGZpeHR1cmVEaXIsIFVQTE9BRFNfRElSX05BTUUpLFxuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlRGlyLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUGFnZUNhY2hpbmc6ICAgdGVzdFJ1bi5kaXNhYmxlUGFnZUNhY2hpbmcsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93TXVsdGlwbGVXaW5kb3dzOiBUZXN0UnVuLmlzTXVsdGlwbGVXaW5kb3dzQWxsb3dlZCh0ZXN0UnVuKSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFRpbWVvdXQ6ICAgICAgIHRlc3RSdW4ucmVxdWVzdFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbG93TXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndpbmRvd0lkID0gdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5hY3RpdmVXaW5kb3dJZDtcblxuICAgICAgICAgICAgICAgIHNlc3Npb24gPSBuZXcgU2Vzc2lvbkNvbnRyb2xsZXIodXBsb2FkUm9vdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5jdXJyZW50VGVzdFJ1biA9IHRlc3RSdW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlc3Npb25JbmZvID0ge1xuICAgICAgICAgICAgICAgIHNlc3Npb246IHNlc3Npb24sXG4gICAgICAgICAgICAgICAgcHJveHk6ICAgbnVsbCxcbiAgICAgICAgICAgICAgICB1cmw6ICAgICBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgQUNUSVZFX1NFU1NJT05TX01BUFt0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkXSA9IHNlc3Npb25JbmZvO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0ZXN0UnVuLnRlc3QuaXNMZWdhY3kpXG4gICAgICAgICAgICBzZXNzaW9uSW5mby5zZXNzaW9uLmN1cnJlbnRUZXN0UnVuID0gdGVzdFJ1bjtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbkluZm8uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U2Vzc2lvblVybCAodGVzdFJ1biwgcHJveHkpIHtcbiAgICAgICAgbGV0IHNlc3Npb25JbmZvID0gQUNUSVZFX1NFU1NJT05TX01BUFt0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkXTtcblxuICAgICAgICBpZiAoIXNlc3Npb25JbmZvIHx8IHRlc3RSdW4udGVzdC5pc0xlZ2FjeSkge1xuICAgICAgICAgICAgU2Vzc2lvbkNvbnRyb2xsZXIuZ2V0U2Vzc2lvbih0ZXN0UnVuKTtcblxuICAgICAgICAgICAgc2Vzc2lvbkluZm8gPSBBQ1RJVkVfU0VTU0lPTlNfTUFQW3Rlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb24uaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mby51cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VVcmwgICAgICAgICAgICAgPSB0ZXN0UnVuLnRlc3QucGFnZVVybDtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsUHJveHlIb3N0ICAgPSB0ZXN0UnVuLm9wdHMucHJveHk7XG4gICAgICAgICAgICBsZXQgZXh0ZXJuYWxQcm94eVNldHRpbmdzID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGV4dGVybmFsUHJveHlIb3N0KSB7XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxQcm94eVNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICB1cmw6ICAgICAgICAgZXh0ZXJuYWxQcm94eUhvc3QsXG4gICAgICAgICAgICAgICAgICAgIGJ5cGFzc1J1bGVzOiB0ZXN0UnVuLm9wdHMucHJveHlCeXBhc3MsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vzc2lvbkluZm8ucHJveHkgPSBwcm94eTtcbiAgICAgICAgICAgIHNlc3Npb25JbmZvLnVybCAgID0gcHJveHkub3BlblNlc3Npb24ocGFnZVVybCwgc2Vzc2lvbkluZm8uc2Vzc2lvbiwgZXh0ZXJuYWxQcm94eVNldHRpbmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXNzaW9uSW5mby51cmw7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsb3NlU2Vzc2lvbiAodGVzdFJ1bikge1xuICAgICAgICBjb25zdCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCAhc2Vzc2lvbkluZm8udXJsIHx8ICFzZXNzaW9uSW5mby5wcm94eSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzZXNzaW9uSW5mby5wcm94eS5jbG9zZVNlc3Npb24oc2Vzc2lvbkluZm8uc2Vzc2lvbik7XG5cbiAgICAgICAgZGVsZXRlIEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG4gICAgfVxufVxuXG4iXX0=
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "testcafe",
|
|
3
3
|
"description": "Automated browser testing for the modern web development stack.",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "1.17.2-alpha.
|
|
5
|
+
"version": "1.17.2-alpha.2",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Developer Express Inc.",
|
|
8
8
|
"url": "https://www.devexpress.com/"
|