@aws-cdk-testing/cli-integ 3.2.4 → 3.3.0
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/process.d.ts +45 -0
- package/lib/process.js +97 -0
- package/lib/process.ts +154 -0
- package/lib/shell.d.ts +51 -0
- package/lib/shell.js +81 -20
- package/lib/shell.ts +144 -17
- package/lib/with-cdk-app.d.ts +4 -1
- package/lib/with-cdk-app.js +6 -4
- package/lib/with-cdk-app.ts +9 -2
- package/package.json +2 -1
- package/resources/cdk-apps/app/app.js +36 -25
- package/tests/cli-integ-tests/cdk-destroy-interactive.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cdk-destroy-interactive.integtest.js +32 -0
- package/tests/cli-integ-tests/cdk-destroy-interactive.integtest.ts +36 -0
- package/tests/cli-integ-tests/cdk-import-interactive.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cdk-import-interactive.integtest.js +46 -0
- package/tests/cli-integ-tests/cdk-import-interactive.integtest.ts +53 -0
- package/tests/cli-integ-tests/cli.integtest.js +2 -1
- package/tests/cli-integ-tests/cli.integtest.ts +3 -1
- package/tests/cli-integ-tests/proxy.integtest.js +1 -2
- package/tests/cli-integ-tests/proxy.integtest.ts +0 -1
|
@@ -36,6 +36,7 @@ describe('ci', () => {
|
|
|
36
36
|
JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION: 'true',
|
|
37
37
|
JSII_SILENCE_WARNING_DEPRECATED_NODE_VERSION: 'true',
|
|
38
38
|
},
|
|
39
|
+
options: ['--no-notices'],
|
|
39
40
|
};
|
|
40
41
|
const deployOutput = await fixture.cdkDeploy('test-2', execOptions);
|
|
41
42
|
const diffOutput = await fixture.cdk(['diff', fixture.fullStackName('test-2')], execOptions);
|
|
@@ -2184,4 +2185,4 @@ async function listChildDirs(parent) {
|
|
|
2184
2185
|
await proxyServer.stop();
|
|
2185
2186
|
}
|
|
2186
2187
|
}));
|
|
2187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFRd0M7QUFDeEMsb0RBQThEO0FBQzlELG9EQU02QjtBQUM3QiwwREFBdUQ7QUFDdkQsa0RBQXVFO0FBQ3ZFLG9EQUE2RTtBQUM3RSxvREFBa0Y7QUFDbEYsbUNBZW1CO0FBQ25CLDJDQUEyRTtBQUUzRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDbEIsSUFBQSxlQUFTLEVBQ1Asa0JBQWtCLEVBQ2xCLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7WUFDOUUsYUFBYSxFQUFFLElBQUk7WUFDbkIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFD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Q0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlU3RhY2tDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIExpc3RDaGFuZ2VTZXRzQ29tbWFuZCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kLFxuICB3YWl0VW50aWxTdGFja1VwZGF0ZUNvbXBsZXRlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7XG4gIENyZWF0ZVJvbGVDb21tYW5kLFxuICBEZWxldGVSb2xlQ29tbWFuZCxcbiAgRGVsZXRlUm9sZVBvbGljeUNvbW1hbmQsXG4gIExpc3RSb2xlUG9saWNpZXNDb21tYW5kLFxuICBQdXRSb2xlUG9saWN5Q29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQgeyBJbnZva2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBQdXRPYmplY3RMb2NrQ29uZmlndXJhdGlvbkNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHsgQ3JlYXRlVG9waWNDb21tYW5kLCBEZWxldGVUb3BpY0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcbmltcG9ydCB7IEFzc3VtZVJvbGVDb21tYW5kLCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7XG4gIGNsb25lRGlyZWN0b3J5LFxuICBpbnRlZ1Rlc3QsXG4gIHJhbmRvbUludGVnZXIsXG4gIHJhbmRvbVN0cmluZyxcbiAgUkVTT1VSQ0VTX0RJUixcbiAgcmV0cnksXG4gIHNoZWxsLFxuICBzbGVlcCxcbiAgd2l0aENES01pZ3JhdGVGaXh0dXJlLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUsXG4gIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlLFxuICB3aXRob3V0Qm9vdHN0cmFwLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlLFxufSBmcm9tICcuLi8uLi9saWInO1xuaW1wb3J0IHsgYXdzQWN0aW9uc0Zyb21SZXF1ZXN0cywgc3RhcnRQcm94eVNlcnZlciB9IGZyb20gJy4uLy4uL2xpYi9wcm94eSc7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmRlc2NyaWJlKCdjaScsICgpID0+IHtcbiAgaW50ZWdUZXN0KFxuICAgICdvdXRwdXQgdG8gc3RkZXJyJyxcbiAgICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7IGNhcHR1cmVTdGRlcnI6IHRydWUsIG9ubHlTdGRlcnI6IHRydWUgfSk7XG4gICAgICBjb25zdCBkaWZmT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdHJveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGRlc3Ryb3lPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkaWZmT3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgfSksXG4gICk7XG4gIGRlc2NyaWJlKCdjaT10cnVlJywgKCkgPT4ge1xuICAgIGludGVnVGVzdChcbiAgICAgICdvdXRwdXQgdG8gc3Rkb3V0JyxcbiAgICAgIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBleGVjT3B0aW9ucyA9IHtcbiAgICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfS05PV05fQlJPS0VOX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfVU5URVNURURfTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgICAgICBKU0lJX1NJTEVOQ0VfV0FSTklOR19ERVBSRUNBVEVEX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCBleGVjT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9FcXVhbCgnJyk7XG4gICAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KGRpZmZPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfSk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnVlBDIExvb2t1cCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGZpeHR1cmUubG9nKCdNYWtpbmcgc3VyZSB3ZSBhcmUgY2xlYW4gYmVmb3JlIHN0YXJ0aW5nLicpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcblxuICAgIGZpeHR1cmUubG9nKCdTZXR0aW5nIHVwOiBjcmVhdGluZyBhIFZQQyB3aXRoIGtub3duIHRhZ3MnKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG5cbiAgICBmaXh0dXJlLmxvZygnVmVyaWZ5aW5nIHdlIGNhbiBub3cgaW1wb3J0IHRoYXQgVlBDJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdJTVBPUlQnIH0gfSk7XG4gIH0pLFxuKTtcblxuLy8gdGVzdGluZyBhIGNvbnN0cnVjdCB3aXRoIGEgYnVpbHRpbiBOb2RlanMgTGFtYmRhIEZ1bmN0aW9uLlxuLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSB0ZXN0aW5nIHRoZSBzMy5CdWNrZXQgY29uc3RydWN0IHdpdGggdGhlXG4vLyBhdXRvRGVsZXRlT2JqZWN0cyBwcm9wIHNldCB0byB0cnVlLCB3aGljaCBjcmVhdGVzIGEgTGFtYmRhIGJhY2tlZFxuLy8gQ3VzdG9tUmVzb3VyY2UuIFNpbmNlIHRoZSBjb21waWxlZCBMYW1iZGEgY29kZSAoZS5nLiBfX2VudHJ5cG9pbnRfXy5qcylcbi8vIGlzIGJ1bmRsZWQgYXMgcGFydCBvZiB0aGUgQ0RLIHBhY2thZ2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0XG4vLyBpbnRyb2R1Y2UgY2hhbmdlcyB0byB0aGUgY29tcGlsZWQgY29kZSB0aGF0IGNvdWxkIHByZXZlbnQgdGhlIExhbWJkYSBmcm9tXG4vLyBleGVjdXRpbmcuIElmIHdlIGRvLCB0aGlzIHRlc3Qgd2lsbCB0aW1lb3V0IGFuZCBmYWlsLlxuaW50ZWdUZXN0KFxuICAnQ29uc3RydWN0IHdpdGggYnVpbHRpbiBMYW1iZGEgZnVuY3Rpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVpbHRpbi1sYW1iZGEtZnVuY3Rpb24nKTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xuICB9KSxcbik7XG5cbi8vIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYXNzZXQgYnVuZGxpbmcgZm9yIGFwcHMgdW5kZXIgYSBzdGFnZSBkb2VzIG5vdCBicmVha1xuaW50ZWdUZXN0KFxuICAnU3RhZ2Ugd2l0aCBidW5kbGVkIExhbWJkYSBmdW5jdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidW5kbGluZy1zdGFnZS9CdW5kbGluZ1N0YWNrJyk7XG4gICAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ1R3byB3YXlzIG9mIHNob3dpbmcgdGhlIHZlcnNpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9uMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsndmVyc2lvbiddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHZlcnNpb24yID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLXZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdCh2ZXJzaW9uMSkudG9FcXVhbCh2ZXJzaW9uMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnVGVybWluYXRpb24gcHJvdGVjdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICd0ZXJtaW5hdGlvbi1wcm90ZWN0aW9uJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUpO1xuXG4gICAgLy8gVHJ5IGEgZGVzdHJveSB0aGF0IHNob3VsZCBmYWlsXG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVzdHJveShzdGFja05hbWUpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBDYW4gdXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBzZXQgZG9lc24ndCBjb250YWluIGNoYW5nZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHsgbW9kRW52OiB7IFRFUk1JTkFUSU9OX1BST1RFQ1RJT046ICdGQUxTRScgfSB9KTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGgnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTEnKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdG9waWM2OTgzMTQ5MToge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMS90b3BpYy9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIG9wdGlvbnM6IFtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSxcbiAgICAgIH0pLFxuICAgICkubm90LnRvRXF1YWwoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhgXG5SdWxlczpcbiAgQ2hlY2tCb290c3RyYXBWZXJzaW9uOmApLFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3Rlc3QtMicpKS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0b3BpYzE1MkQ4NEEzNzoge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMi90b3BpYzEvUmVzb3VyY2VgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcGljMkE0RkI1NDdGOiB7XG4gICAgICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMi9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NzbSBwYXJhbWV0ZXIgcHJvdmlkZXIgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhcbiAgICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlzc2luZy1zc20tcGFyYW1ldGVyJyksICctYycsICd0ZXN0OnNzbS1wYXJhbWV0ZXItbmFtZT0vZG9lcy9ub3QvZXhpc3QnXSxcbiAgICAgICAge1xuICAgICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oJ1NTTSBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBpbiBhY2NvdW50Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnYXV0b21hdGljIG9yZGVyaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJyk7XG5cbiAgICAvLyBEZXN0cm95IHRoZSBwcm92aWRpbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBjb25zdW1pbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ29yZGVyLXByb3ZpZGluZycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyBvcmRlcmluZyB3aXRoIGNvbmN1cnJlbmN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJywgeyBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddIH0pO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdvcmRlci1wcm92aWRpbmcnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICctLWV4Y2x1c2l2ZWx5IHNlbGVjdHMgb25seSBzZWxlY3RlZCBzdGFjaycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSB0aGUgXCJkZXBlbmRzLW9uLWZhaWxlZFwiIHN0YWNrLCB3aXRoIC0tZXhjbHVzaXZlbHkuIEl0IHdpbGwgTk9UIGZhaWwgKGJlY2F1c2VcbiAgICAvLyBvZiAtLWV4Y2x1c2l2ZWx5KSBhbmQgaXQgV0lMTCBjcmVhdGUgYW4gb3V0cHV0IHdlIGNhbiBjaGVjayBmb3IgdG8gY29uZmlybSB0aGF0IGl0IGRpZFxuICAgIC8vIGdldCBkZXBsb3llZC5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVwZW5kcy1vbi1mYWlsZWQnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tZXhjbHVzaXZlbHknLCAnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIG91dHB1dCB0byBzZWUgdGhhdCB0aGUgc3RhY2sgZGVwbG95ZWRcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tZGVwZW5kcy1vbi1mYWlsZWRgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZE15VG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjb250ZXh0IHNldHRpbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbnRleHRrZXk6ICd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2NvbnRleHQnXSkpLnJlc29sdmVzLnRvQ29udGFpbigndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScpO1xuXG4gICAgICAvLyBUZXN0IHRoYXQgZGVsZXRpbmcgdGhlIGNvbnRleHRrZXkgd29ya3NcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG4gICAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydjb250ZXh0J10pKS5yZXNvbHZlcy5ub3QudG9Db250YWluKCd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyk7XG5cbiAgICAgIC8vIFRlc3QgdGhhdCBmb3JjZWQgZGVsZXRlIG9mIHRoZSBjb250ZXh0IGtleSBkb2VzIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydjb250ZXh0JywgJy1mJywgJy0tcmVzZXQnLCAnY29udGV4dGtleSddKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5jb250ZXh0Lmpzb24nKSk7XG4gICAgfVxuICB9KSxcbik7XG5cbi8vIGJvb3RzdHJhcHBpbmcgYWxzbyBwZXJmb3JtcyBzeW50aGVzaXMuIEFzIGl0IHR1cm5zIG91dCwgYm9vdHN0cmFwLXN0YWdlIHN5bnRoZXNpcyBzdGlsbCBjYXVzZXMgdGhlIGxvb2t1cHMgdG8gYmUgY2FjaGVkLCBtZWFuaW5nIHRoYXQgdGhlIGxvb2t1cCBuZXZlclxuLy8gaGFwcGVucyB3aGVuIHdlIGFjdHVhbGx5IGNhbGwgYGNkayBzeW50aCAtLW5vLWxvb2t1cHNgLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGVycm9yIG5ldmVyIGJlaW5nIHRocm93biwgYmVjYXVzZSBpdCBuZXZlciB0cmllcyB0byBsb29rdXAgYW55dGhpbmcuXG4vLyBGaXggdGhpcyBieSBub3QgdHJ5aW5nIHRvIGJvb3RzdHJhcDsgdGhlcmUncyBubyBuZWVkIHRvIGJvb3RzdHJhcCBhbnl3YXksIHNpbmNlIHRoZSB0ZXN0IG5ldmVyIHRyaWVzIHRvIGRlcGxveSBhbnl0aGluZy5cbmludGVnVGVzdChcbiAgJ2NvbnRleHQgaW4gc3RhZ2UgcHJvcGFnYXRlcyB0byB0b3AnLFxuICB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGl0IGVycm9yIHRvIHByb3ZlIHRoYXQgdGhlIGNvbnRleHQgYnViYmxlcyB1cCwgYW5kIGFsc28gdGhhdCB3ZSBjYW4gZmFpbCBvbiBjb21tYW5kXG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1sb29rdXBzJ10sXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbignQ29udGV4dCBsb29rdXBzIGhhdmUgYmVlbiBkaXNhYmxlZCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IC0tbWV0aG9kPWRpcmVjdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9ZGlyZWN0J10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbGwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBhcm5zID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtKicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGJvdGggc3RhY2tzICh0aGVyZSBhcmUgMiBBUk5zIGluIHRoZSBvdXRwdXQpXG4gICAgZXhwZWN0KGFybnMuc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYWxsIGNvbmN1cnJlbnRseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChhcm5zLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkb3VibHkgbmVzdGVkIHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtZG91Ymx5LW5lc3RlZC1zdGFjaycsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ25lc3RlZCBzdGFjayB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTVEFDS19OQU1FX1BSRUZJWCBpcyB1c2VkIGluIE15VG9waWNQYXJhbSB0byBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXNcbiAgICAvLyBvZiB0aGlzIHRlc3QgdG8gcnVuIGluIHBhcmFsbGVsLCBvdGhld2lzZSB0aGV5IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHNhbWUgU05TIHRvcGljLlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBNeVRvcGljUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1UaGVyZUlzTm9TcG9vbmBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gICAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRob3V0IGV4ZWN1dGUgYSBuYW1lZCBjaGFuZ2Ugc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9ICdjdXN0b20tY2hhbmdlLXNldC1uYW1lJztcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tZXhlY3V0ZScsICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWVdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy8gdmVyaWZ5IGEgY2hhbmdlIHNldCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lXG4gICAgY29uc3QgY2hhbmdlU2V0UmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IExpc3RDaGFuZ2VTZXRzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGNoYW5nZVNldHMgPSBjaGFuZ2VTZXRSZXNwb25zZS5TdW1tYXJpZXMgfHwgW107XG4gICAgZXhwZWN0KGNoYW5nZVNldHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXRzWzBdLkNoYW5nZVNldE5hbWUpLnRvRXF1YWwoY2hhbmdlU2V0TmFtZSk7XG4gICAgZXhwZWN0KGNoYW5nZVNldHNbMF0uU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzZWN1cml0eSByZWxhdGVkIGNoYW5nZXMgd2l0aG91dCBhIENMSSBhcmUgZXhwZWN0ZWQgdG8gZmFpbCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIHJlZGlyZWN0IC9kZXYvbnVsbCB0byBzdGRpbiwgd2hpY2ggbWVhbnMgdGhlcmUgd2lsbCBub3QgYmUgdHR5IGF0dGFjaGVkXG4gICAgLy8gc2luY2UgdGhpcyBzdGFjayBpbmNsdWRlcyBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMsIHRoZSBkZXBsb3ltZW50IHNob3VsZFxuICAgIC8vIGltbWVkaWF0ZWx5IGZhaWwgYmVjYXVzZSB3ZSBjYW4ndCBjb25maXJtIHRoZSBjaGFuZ2VzXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgICAgb3B0aW9uczogWyc8JywgJy9kZXYvbnVsbCddLCAvLyBINHgsIHRoaXMgb25seSB3b3JrcyBiZWNhdXNlIEkgaGFwcGVuIHRvIGtub3cgd2UgcGFzcyBzaGVsbDogdHJ1ZS5cbiAgICAgICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IGZhbHNlLFxuICAgICAgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBFbnN1cmUgc3RhY2sgd2FzIG5vdCBkZXBsb3llZFxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZG9lcyBub3QgZXhpc3QnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2lsZGNhcmQgd2l0aCBvdXRwdXRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koWydvdXRwdXRzLXRlc3QtKiddLCB7XG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICBleHBlY3Qob3V0cHV0cykudG9FcXVhbCh7XG4gICAgICBbYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LW91dHB1dHMtdGVzdC0xYF06IHtcbiAgICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFNeVRvcGljYCxcbiAgICAgIH0sXG4gICAgICBbYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LW91dHB1dHMtdGVzdC0yYF06IHtcbiAgICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJNeU90aGVyVG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgb3B0aW9uczogWyctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYF0sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdUb3BpY05hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YmF6aW5nYWAsXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBpbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzIHRydWUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1uby1leGVjdXRlJywgJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyddLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcbiAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgZXhwZWN0KHN0YWNrQXJuLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pKTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdSRVZJRVdfSU5fUFJPR1JFU1MnKTtcblxuICAvLyB2ZXJpZnkgYSBjaGFuZ2Ugc2V0IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAvLyBIZXJlLCB3ZSBkbyBub3QgdGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgYWN0dWFsbHkgaW1wb3J0ZWQsIGJlY2F1c2UgdGhhdCBpcyBhIENsb3VkRm9ybWF0aW9uIGZlYXR1cmUsIG5vdCBhIENESyBmZWF0dXJlLlxuICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IExpc3RDaGFuZ2VTZXRzQ29tbWFuZCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSkpO1xuICBjb25zdCBjaGFuZ2VTZXRzID0gY2hhbmdlU2V0UmVzcG9uc2UuU3VtbWFyaWVzIHx8IFtdO1xuICBleHBlY3QoY2hhbmdlU2V0cy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLlN0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLkltcG9ydEV4aXN0aW5nUmVzb3VyY2VzKS50b0VxdWFsKHRydWUpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRob3V0IGltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1uby1leGVjdXRlJ10sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSkpO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gIC8vIHZlcmlmeSBhIGNoYW5nZSBzZXQgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIGFuZCBJbXBvcnRFeGlzdGluZ1Jlc291cmNlcyA9IGZhbHNlXG4gIGNvbnN0IGNoYW5nZVNldFJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgTGlzdENoYW5nZVNldHNDb21tYW5kKHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KSk7XG4gIGNvbnN0IGNoYW5nZVNldHMgPSBjaGFuZ2VTZXRSZXNwb25zZS5TdW1tYXJpZXMgfHwgW107XG4gIGV4cGVjdChjaGFuZ2VTZXRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgZXhwZWN0KGNoYW5nZVNldHNbMF0uU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgZXhwZWN0KGNoYW5nZVNldHNbMF0uSW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMpLnRvRXF1YWwoZmFsc2UpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIG1ldGhvZD1kaXJlY3QgYW5kIGltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgZmFpbHMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgIG9wdGlvbnM6IFsnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJywgJy0tbWV0aG9kPWRpcmVjdCddLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gIC8vIEVuc3VyZSBzdGFjayB3YXMgbm90IGRlcGxveWVkXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSksXG4gIH0pKSkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICd1cGRhdGUgdG8gc3RhY2sgaW4gUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgd2lsbCBkZWxldGUgc3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBvbmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QGF3d2BdLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdwYXJhbS10ZXN0LTEnKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrSWQ7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdST0xMQkFDS19DT01QTEVURScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IG5ld1N0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXdTdGFja1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IG5ld1N0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2tBcm4pLm5vdC50b0VxdWFsKG5ld1N0YWNrQXJuKTsgLy8gbmV3IHN0YWNrIHdhcyBjcmVhdGVkXG4gICAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIGV4cGVjdChuZXdTdGFja1Jlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1hbGxnb29kYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzdGFjayBpbiBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgY2FuIGJlIHVwZGF0ZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9bmljZWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIGJhZCBwYXJhbWV0ZXIgbmFtZSB3aXRoIEAgd2lsbCBwdXQgc3RhY2sgaW50byBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEVcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUBhd3dgXSxcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHdpbGRjYXJkIGFuZCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtKicsIHtcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTE6VG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTI6T3RoZXJUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoYXRzTXlTcG90YCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6RGlzcGxheU5hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUhleVRoZXJlYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6T3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QW5vdGhlck9uZWAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMgbXVsdGknLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwYXJhbVZhbDEgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYDtcbiAgICBjb25zdCBwYXJhbVZhbDIgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH09amFnc2hlbWFzaGA7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwxfWAsICctLXBhcmFtZXRlcnMnLCBgT3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwyfWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnRGlzcGxheU5hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogcGFyYW1WYWwxLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdPdGhlckRpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMixcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIGZsYWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC10b3BpYy1mbGFnYDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm90aWZpY2F0aW9uLWFybnMnLCB0b3BpY0Fybl0sXG4gICAgICB9KTtcblxuICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIHN0YWNrIHdlIGRlcGxveWVkIGhhcyBvdXIgbm90aWZpY2F0aW9uIEFSTlxuICAgICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdub3RpZmljYXRpb24tYXJucycpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXS5Ob3RpZmljYXRpb25BUk5zKS50b0VxdWFsKFt0b3BpY0Fybl0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZVRvcGljQ29tbWFuZCh7XG4gICAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGggbm90aWZpY2F0aW9uIEFSTiBhcyBwcm9wJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHRvcGljTmFtZSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LXRvcGljLXByb3BgO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gIGNvbnN0IHRvcGljQXJuID0gcmVzcG9uc2UuVG9waWNBcm4hO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX05PVElGSUNBVElPTl9BUk5TOiB0b3BpY0FybixcblxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICBjb25zdCBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbdG9waWNBcm5dKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWNBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59KSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMzIxNTNcbmludGVnVGVzdCgnZGVwbG95IHByZXNlcnZlcyBleGlzdGluZyBub3RpZmljYXRpb24gYXJucyB3aGVuIG5vdCBzcGVjaWZpZWQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdG9waWNOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRvcGljYDtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKG5ldyBDcmVhdGVUb3BpY0NvbW1hbmQoeyBOYW1lOiB0b3BpY05hbWUgfSkpO1xuICBjb25zdCB0b3BpY0FybiA9IHJlc3BvbnNlLlRvcGljQXJuITtcblxuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycpO1xuXG4gICAgLy8gYWRkIG5vdGlmaWNhdGlvbiBhcm5zIGV4dGVybmFsbHkgdG8gY2RrXG4gICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBVcGRhdGVTdGFja0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgICAgVXNlUHJldmlvdXNUZW1wbGF0ZTogdHJ1ZSxcbiAgICAgICAgTm90aWZpY2F0aW9uQVJOczogW3RvcGljQXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBhd2FpdCB3YWl0VW50aWxTdGFja1VwZGF0ZUNvbXBsZXRlKFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLFxuICAgICAgICBtYXhXYWl0VGltZTogNjAwLFxuICAgICAgfSxcbiAgICAgIHsgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJykgfSxcbiAgICApO1xuXG4gICAgLy8gZGVwbG95IGFnYWluXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJyk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIG5vdGlmaWNhdGlvbiBhcm4gaXMgcHJlc2VydmVkXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJyksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBkZWxldGVzIEFMTCBub3RpZmljYXRpb24gYXJucyB3aGVuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdG9waWNgO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gIGNvbnN0IHRvcGljQXJuID0gcmVzcG9uc2UuVG9waWNBcm4hO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX05PVElGSUNBVElPTl9BUk5TOiB0b3BpY0FybixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIGFybiB3YXMgYWRkZWRcbiAgICBsZXQgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJyksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG5cbiAgICAvLyBkZXBsb3kgYWdhaW4gd2l0aCBlbXB0eSBhcnJheVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19OT1RJRklDQVRJT05fQVJOUzogJycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBhcm4gd2FzIGRlbGV0ZWRcbiAgICBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIG5vdGlmaWNhdGlvbiBBUk4gYXMgcHJvcCBhbmQgZmxhZycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCB0b3BpYzFOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRvcGljMWA7XG4gIGNvbnN0IHRvcGljMk5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdG9waWMxYDtcblxuICBjb25zdCB0b3BpYzFBcm4gPSAoYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljMU5hbWUgfSkpKS5Ub3BpY0FybiE7XG4gIGNvbnN0IHRvcGljMkFybiA9IChhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChuZXcgQ3JlYXRlVG9waWNDb21tYW5kKHsgTmFtZTogdG9waWMyTmFtZSB9KSkpLlRvcGljQXJuITtcblxuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19OT1RJRklDQVRJT05fQVJOUzogdG9waWMxQXJuLFxuXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogWyctLW5vdGlmaWNhdGlvbi1hcm5zJywgdG9waWMyQXJuXSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICBjb25zdCBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbdG9waWMxQXJuLCB0b3BpYzJBcm5dKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWMxQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWMyQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG4vLyBOT1RFOiB0aGlzIGRvZXNuJ3QgY3VycmVudGx5IHdvcmsgd2l0aCBtb2Rlcm4tc3R5bGUgc3ludGhlc2lzLCBhcyB0aGUgYm9vdHN0cmFwXG4vLyByb2xlIGJ5IGRlZmF1bHQgd2lsbCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGlhbTpQYXNzUm9sZSB0aGUgY3JlYXRlZCByb2xlLlxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHdpdGggcm9sZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGlmIChmaXh0dXJlLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpICE9PSAnMScpIHtcbiAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3Qtcm9sZWA7XG5cbiAgICBhd2FpdCBkZWxldGVSb2xlKCk7XG5cbiAgICBjb25zdCBjcmVhdGVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmlhbS5zZW5kKFxuICAgICAgbmV3IENyZWF0ZVJvbGVDb21tYW5kKHtcbiAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgUHJpbmNpcGFsOiB7IFNlcnZpY2U6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyB9LFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgICAgIFByaW5jaXBhbDogeyBBV1M6IChhd2FpdCBmaXh0dXJlLmF3cy5zdHMuc2VuZChuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KSkpLkFybiB9LFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmICghY3JlYXRlUmVzcG9uc2UuUm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb2xlIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQhIScpO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlUmVzcG9uc2UuUm9sZS5Bcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9sZSBhcm4gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCEhJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUFybiA9IGNyZWF0ZVJlc3BvbnNlLlJvbGUuQXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgICAgbmV3IFB1dFJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgICBSb2xlTmFtZTogcm9sZU5hbWUsXG4gICAgICAgICAgUG9saWN5TmFtZTogJ0RlZmF1bHRQb2xpY3knLFxuICAgICAgICAgIFBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEFjdGlvbjogJyonLFxuICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCByZXRyeShmaXh0dXJlLm91dHB1dCwgJ1RyeWluZyB0byBhc3N1bWUgZnJlc2ggcm9sZScsIHJldHJ5LmZvclNlY29uZHMoMzAwKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5zdHMuc2VuZChcbiAgICAgICAgICBuZXcgQXNzdW1lUm9sZUNvbW1hbmQoe1xuICAgICAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgICAgIFJvbGVTZXNzaW9uTmFtZTogJ3Rlc3RpbmcnLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEluIHByaW5jaXBsZSwgdGhlIHJvbGUgaGFzIHJlcGxpY2F0ZWQgZnJvbSAndXMtZWFzdC0xJyB0byB3aGVyZXZlciB3ZSdyZSB0ZXN0aW5nLlxuICAgICAgLy8gR2l2ZSBpdCBhIGxpdHRsZSBtb3JlIHNsZWVwIHRvIG1ha2Ugc3VyZSBDbG91ZEZvcm1hdGlvbiBpcyBub3QgaGl0dGluZyBhIGJveFxuICAgICAgLy8gdGhhdCBkb2Vzbid0IGhhdmUgaXQgeWV0LlxuICAgICAgYXdhaXQgc2xlZXAoNTAwMCk7XG5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1yb2xlLWFybicsIHJvbGVBcm5dLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEltbWVkaWF0ZWx5IGRlbGV0ZSB0aGUgc3RhY2sgYWdhaW4gYmVmb3JlIHdlIGRlbGV0ZSB0aGUgcm9sZS5cbiAgICAgIC8vXG4gICAgICAvLyBTaW5jZSByb2xlcyBhcmUgc3RpY2t5LCBpZiB3ZSBkZWxldGUgdGhlIHJvbGUgYmVmb3JlIHRoZSBzdGFjaywgc3Vic2VxdWVudCBEZWxldGVTdGFja1xuICAgICAgLy8gb3BlcmF0aW9ucyB3aWxsIGZhaWwgd2hlbiBDbG91ZEZvcm1hdGlvbiB0cmllcyB0byBhc3N1bWUgdGhlIHJvbGUgdGhhdCdzIGFscmVhZHkgZ29uZS5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC0yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVJvbGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBkZWxldGVSb2xlKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgTGlzdFJvbGVQb2xpY2llc0NvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UuUG9saWN5TmFtZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvbGljeSBuYW1lcyBjYW5ub3QgYmUgdW5kZWZpbmVkIGZvciBkZWxldGVSb2xlKCkgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcG9saWN5TmFtZSBvZiByZXNwb25zZS5Qb2xpY3lOYW1lcykge1xuICAgICAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmlhbS5zZW5kKFxuICAgICAgICAgICAgbmV3IERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICAgICAgICBQb2xpY3lOYW1lOiBwb2xpY3lOYW1lLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChlLm1lc3NhZ2UuaW5kZXhPZignY2Fubm90IGJlIGZvdW5kJykgPiAtMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG4vLyBUT0RPIGFkZCBtb3JlIHRlc3RpbmcgdGhhdCBlbnN1cmVzIHRoZSBzeW1tZXRyeSBvZiB0aGUgZ2VuZXJhdGVkIGNvbnN0cnVjdHMgdG8gdGhlIHJlc291cmNlcy5cblsndHlwZXNjcmlwdCcsICdweXRob24nLCAnY3NoYXJwJywgJ2phdmEnXS5mb3JFYWNoKChsYW5ndWFnZSkgPT4ge1xuICBpbnRlZ1Rlc3QoXG4gICAgYGNkayBtaWdyYXRlICR7bGFuZ3VhZ2V9IGRlcGxveXMgc3VjY2Vzc2Z1bGx5YCxcbiAgICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUobGFuZ3VhZ2UsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBpZiAobGFuZ3VhZ2UgPT09ICdweXRob24nKSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydwaXAnLCAnaW5zdGFsbCcsICctcicsICdyZXF1aXJlbWVudHMudHh0J10pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KFxuICAgICAgICBmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCxcbiAgICAgICAgeyBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSwgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCk7XG4gICAgfSksXG4gICk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIG1pZ3JhdGUgZ2VuZXJhdGVzIG1pZ3JhdGUuanNvbicsXG4gIHdpdGhDREtNaWdyYXRlRml4dHVyZSgndHlwZXNjcmlwdCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbWlncmF0ZUZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdtaWdyYXRlLmpzb24nKSwgJ3V0ZjgnKTtcbiAgICBjb25zdCBleHBlY3RlZEZpbGUgPSBge1xuICAgIFxcXCIvL1xcXCI6IFxcXCJUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBhZnRlciB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50IG9mIHRoaXMgYXBwIHRvIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgb3JpZ2luYWwgcmVzb3VyY2VzLlxcXCIsXG4gICAgXFxcIlNvdXJjZVxcXCI6IFxcXCJsb2NhbGZpbGVcXFwiXG4gIH1gO1xuICAgIGV4cGVjdChKU09OLnBhcnNlKG1pZ3JhdGVGaWxlKSkudG9FcXVhbChKU09OLnBhcnNlKGV4cGVjdGVkRmlsZSkpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCk7XG4gIH0pLFxuKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiB3aXRoIEFORC9PUiBmaWx0ZXJzIGNvcnJlY3RseSBmaWx0ZXJzIHJlc291cmNlcycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7IFNBTVBMRV9SRVNPVVJDRVM6ICcxJyB9LFxuLy8gICB9KTtcbi8vICAgYXdhaXQgZml4dHVyZS5jZGsoXG4vLyAgICAgWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIHN0YWNrTmFtZSwgJy0tZnJvbS1zY2FuJywgJ25ldycsICctLWZpbHRlcicsICd0eXBlPUFXUzo6U05TOjpUb3BpYyx0YWcta2V5PXRhZzEnLCAndHlwZT1BV1M6OlNRUzo6UXVldWUsdGFnLWtleT10YWczJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpIHtcbi8vICAgICAgICAgcmVzb3VyY2VOYW1lcy5wdXNoKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZml4dHVyZS5sb2coYFJlc291cmNlczogJHtyZXNvdXJjZU5hbWVzfWApO1xuLy8gICAgIGV4cGVjdChyZXNvdXJjZU5hbWVzLnNvbWUoZWxlID0+IGVsZSAmJiBlbGUuaW5jbHVkZXMoJ21pZ3JhdGV0b3BpYzEnKSkpLnRvQmVUcnV0aHkoKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRlcXVldWUxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiBmb3IgcmVzb3VyY2VzIHdpdGggV3JpdGUgT25seSBQcm9wZXJ0aWVzIGdlbmVyYXRlcyB3YXJuaW5ncycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7XG4vLyAgICAgICBMQU1CREFfUkVTT1VSQ0VTOiAnMScsXG4vLyAgICAgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OkxhbWJkYTo6RnVuY3Rpb24sdGFnLWtleT1sYW1iZGEtdGFnJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcblxuLy8gICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUnLCB7XG4vLyAgICAgICBHZW5lcmF0ZWRUZW1wbGF0ZU5hbWU6IHN0YWNrTmFtZSxcbi8vICAgICB9KTtcbi8vICAgICBjb25zdCByZXNvdXJjZU5hbWVzID0gW107XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNwb25zZS5SZXNvdXJjZXMgfHwgW10pIHtcbi8vICAgICAgIGlmIChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCAmJiByZXNvdXJjZS5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBjb25zdCByZWFkbWVQYXRoID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCBzdGFja05hbWUsICdSRUFETUUubWQnKTtcbi8vICAgICBjb25zdCByZWFkbWUgPSBhd2FpdCBmcy5yZWFkRmlsZShyZWFkbWVQYXRoLCAndXRmOCcpO1xuLy8gICAgIGV4cGVjdChyZWFkbWUpLnRvQ29udGFpbignIyMgV2FybmluZ3MnKTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlTmFtZSBvZiByZXNvdXJjZU5hbWVzKSB7XG4vLyAgICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oYCMjIyAke3Jlc291cmNlTmFtZX1gKTtcbi8vICAgICB9XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuWyd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdjc2hhcnAnLCAnamF2YSddLmZvckVhY2goKGxhbmd1YWdlKSA9PiB7XG4gIGludGVnVGVzdChcbiAgICBgY2RrIG1pZ3JhdGUgLS1mcm9tLXN0YWNrIGNyZWF0ZXMgZGVwbG95YWJsZSAke2xhbmd1YWdlfSBhcHBgLFxuICAgIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBjb25zdCBtaWdyYXRlU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgQ3JlYXRlU3RhY2tDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUsXG4gICAgICAgICAgVGVtcGxhdGVCb2R5OiBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdyZXNvdXJjZXMnLCAndGVtcGxhdGVzJywgJ3Nxcy10ZW1wbGF0ZS5qc29uJyksXG4gICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHN0YWNrU3RhdHVzID0gJ0NSRUFURV9JTl9QUk9HUkVTUyc7XG4gICAgICAgIHdoaWxlIChzdGFja1N0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgICAgICBzdGFja1N0YXR1cyA9IGF3YWl0IChcbiAgICAgICAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogbWlncmF0ZVN0YWNrTmFtZSB9KSlcbiAgICAgICAgICApLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzITtcbiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgbWlncmF0ZVN0YWNrTmFtZSwgJy0tZnJvbS1zdGFjayddLCB7XG4gICAgICAgICAgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sXG4gICAgICAgICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjZCcsIHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgbWlncmF0ZVN0YWNrTmFtZSldKTtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydkZXBsb3knLCBtaWdyYXRlU3RhY2tOYW1lXSwge1xuICAgICAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgICBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xufSk7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gICAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gICAgZXhwZWN0KGRpZmYyKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gICAgLy8gV2UgY2FuIG1ha2UgaXQgZmFpbCBieSBwYXNzaW5nIC0tZmFpbFxuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZW5hYmxlRGlmZk5vRmFpbCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IGZhbHNlLCBlbmFibGVEaWZmTm9GYWlsOiBmYWxzZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiBmYWxzZSwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB0cnVlLCBlbmFibGVEaWZmTm9GYWlsOiBmYWxzZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB0cnVlLCBlbmFibGVEaWZmTm9GYWlsOiB0cnVlIH0pO1xuICAgIGF3YWl0IGRpZmZTaG91bGRGYWlsV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogdW5kZWZpbmVkLCBlbmFibGVEaWZmTm9GYWlsOiB0cnVlIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHByb3BzOiBEaWZmUGFyYW1ldGVycykge1xuICAgICAgYXdhaXQgZXhwZWN0KGRpZmYocHJvcHMpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRGYWlsV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmYocHJvcHM6IERpZmZQYXJhbWV0ZXJzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHVwZGF0ZUNvbnRleHQocHJvcHMuZW5hYmxlRGlmZk5vRmFpbCk7XG4gICAgICBjb25zdCBmbGFnID0gcHJvcHMuZmFpbCAhPSBudWxsID8gKHByb3BzLmZhaWwgPyAnLS1mYWlsJyA6ICctLW5vLWZhaWwnKSA6ICcnO1xuXG4gICAgICByZXR1cm4gZml4dHVyZS5jZGsoWydkaWZmJywgZmxhZywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgICBjZGtKc29uLmNvbnRleHQgPSB7XG4gICAgICAgIC4uLmNka0pzb24uY29udGV4dCxcbiAgICAgICAgJ2F3cy1jZGs6ZW5hYmxlRGlmZk5vRmFpbCc6IGVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICB9O1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICB9XG5cbiAgICB0eXBlIERpZmZQYXJhbWV0ZXJzID0geyBmYWlsPzogYm9vbGVhbjsgZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbiB9O1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCBvbiBtdWx0aXBsZSBzdGFja3MgZXhpdHMgd2l0aCBlcnJvciBpZiBhbnkgb2YgdGhlIHN0YWNrcyBjb250YWlucyBhIGRpZmYnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInKTtcbiAgICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gICAgLy8gV0hFTiAvIFRIRU5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCB3aXRoIG11bHRpcGxlIHN0YWNrIGV4aXRzIHdpdGggaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdIRU4gLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiB3aXRoIGxhcmdlIGNoYW5nZXNldCBkb2VzIG5vdCBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU4gLSBhZGRpbmcgYW4gYWRkaXRpb25hbCByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICAgIGV4cGVjdChkaWZmKS50b01hdGNoKC9Bc3N1bWluZyByb2xlIC4qZmlsZS1wdWJsaXNoaW5nLXJvbGUvKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiBkb2VzbnQgc2hvdyByZXNvdXJjZSBtZXRhZGF0YSBjaGFuZ2VzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggZGVmYXVsdCByZXNvdXJjZSBtZXRhZGF0YVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtZXRhZGF0YScpO1xuXG4gICAgLy8gV0hFTiAtIGNoYW5naW5nIHJlc291cmNlIG1ldGFkYXRhIHZhbHVlXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWV0YWRhdGEnKV0sIHtcbiAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfTUVUQURBVEFfVkFMVUU6ICdjdXN0b20nLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFzc2VydCB0aGVyZSBhcmUgbm8gY2hhbmdlc1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiBzaG93cyByZXNvdXJjZSBtZXRhZGF0YSBjaGFuZ2VzIHdpdGggLS1uby1jaGFuZ2Utc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggZGVmYXVsdCByZXNvdXJjZSBtZXRhZGF0YVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtZXRhZGF0YScpO1xuXG4gICAgLy8gV0hFTiAtIGNoYW5naW5nIHJlc291cmNlIG1ldGFkYXRhIHZhbHVlXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZiAtLW5vLWNoYW5nZS1zZXQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ21ldGFkYXRhJyldLCB7XG4gICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX01FVEFEQVRBX1ZBTFVFOiAnY3VzdG9tJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhlcmUgYXJlIGNoYW5nZXNcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgd2l0aCBsYXJnZSBjaGFuZ2VzZXQgYW5kIGN1c3RvbSB0b29sa2l0IHN0YWNrIG5hbWUgYW5kIHF1YWxpZmllciBkb2VzIG5vdCBmYWlsJywgd2l0aG91dEJvb3RzdHJhcChhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBCb290c3RyYXBwaW5nIHdpdGggY3VzdG9tIHRvb2xraXQgc3RhY2sgbmFtZSBhbmQgcXVhbGlmaWVyXG4gIGNvbnN0IHF1YWxpZmllciA9ICdhYmMxMTExJztcbiAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZSA9ICdjdXN0b20tc3RhY2syJztcbiAgYXdhaXQgZml4dHVyZS5jZGtCb290c3RyYXBNb2Rlcm4oe1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICBxdWFsaWZpZXI6IHF1YWxpZmllcixcbiAgfSk7XG5cbiAgLy8gRGVwbG95aW5nIHNtYWxsIGluaXRpYWwgc3RhY2sgd2l0aCBvbmx5IG9uZSBJQU0gcm9sZVxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgIG1vZEVudjoge1xuICAgICAgTlVNQkVSX09GX1JPTEVTOiAnMScsXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS10b29sa2l0LXN0YWNrLW5hbWUnLCB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU4gLSBhZGRpbmcgYSByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgdG9vbGtpdFN0YWNrTmFtZSwgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgbW9kRW52OiB7XG4gICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICBleHBlY3QoZGlmZikudG9NYXRjaCgvQXNzdW1pbmcgcm9sZSAuKmZpbGUtcHVibGlzaGluZy1yb2xlLyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ3N1Y2Nlc3M6IFB1Ymxpc2hlZCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLXBlcm1pc3Npb24tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3kgaW5mb3JtYXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoW1xuICAgICAgJ2RpZmYnLFxuICAgICAgJy0tc2VjdXJpdHktb25seScsXG4gICAgICBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyksXG4gICAgXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0IG5hbWUg4pSCIFBlcm1pc3Npb25zQm91bmRhcnkgICAgICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke3Blcm1pc3Npb24tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3l9IOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgdGVzdE5hbWUgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U6IHsg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICDilIIgICBOYW1lOiB3aHksIFBhdGg6IC9ob3cvICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbmA7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0IG5hbWUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCd0ZXN0TmFtZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZTogeycpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ05hbWU6IHdoeSwgUGF0aDogL2hvdy8nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCd9Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1wZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkaWZmJyxcbiAgICAgICctLXNlY3VyaXR5LW9ubHknLFxuICAgICAgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpLFxuICAgIF0pO1xuICAgIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7cGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeX0gICAg4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiBuaWNlV29yayAgICAgICAgICAg4pSCIE1hbmFnZWRQb2xpY3lBcm46IGFybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3Mg4pSCIE5hbWU6IGZvclNTTywgUGF0aDogICAgICAgICAgICAg4pSCXG5gO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdwZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0IG5hbWUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCduaWNlV29yaycpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ01hbmFnZWRQb2xpY3lBcm46IGFybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3MnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiBmb3JTU08sIFBhdGg6Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1hc3NpZ25tZW50IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hc3NpZ25tZW50JyldKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICAgICAgICAgICAg4pSCIFBlcm1pc3Npb25TZXRBcm4gICAgICAgIOKUgiBQcmluY2lwYWxJZCAgICAgICAgICAgICAgICAgIOKUgiBQcmluY2lwYWxUeXBlIOKUgiBUYXJnZXRJZCAgICAg4pSCIFRhcmdldFR5cGUgIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7YXNzaWdubWVudH0g4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiBhcm46YXdzOnNzbzo6OnRlc3R2YWx1ZSDilIIgMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtdGVzdCDilIIgVVNFUiAgICAgICAgICDilIIgMTExMTExMTExMTExIOKUgiBBV1NfQUNDT1VOVCDilIJcbiAgIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuYDtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fzc2lnbm1lbnQnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0luc3RhbmNlQXJuJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25TZXRBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6OnRlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsSWQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCcxMTExMTExMS0yMjIyLTMzMzMtNDQ0NC10ZXN0Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQcmluY2lwYWxUeXBlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVVNFUicpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVGFyZ2V0SWQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCcxMTExMTExMTExMTEnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldFR5cGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdBV1NfQUNDT1VOVCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYWNjZXNzLWNvbnRyb2wgaW5mb3JtYXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFjY2Vzcy1jb250cm9sJyldKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgIOKUgiBBY2Nlc3NDb250cm9sQXR0cmlidXRlcyAgICAgICAgIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7aW5zdGFuY2VBY2Nlc3NDb250cm9sQ29uZmlnfSDilIIgYXJuOmF3czp0ZXN0OnRlc3R2YWx1ZSDilIIgS2V5OiBmaXJzdCwgVmFsdWVzOiBbYV0gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogc2Vjb25kLCBWYWx1ZXM6IFtiXSAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHRoaXJkLCBWYWx1ZXM6IFtjXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBmb3VydGgsIFZhbHVlczogW2RdICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogZmlmdGgsIFZhbHVlczogW2VdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHNpeHRoLCBWYWx1ZXM6IFtmXSAgICAgICAgIOKUglxuICAg4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5gO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignaW5zdGFuY2VBY2Nlc3NDb250cm9sQ29uZmlnJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdBY2Nlc3NDb250cm9sQXR0cmlidXRlcycpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogZmlyc3QsIFZhbHVlczogW2FdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBzZWNvbmQsIFZhbHVlczogW2JdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZvdXJ0aCwgVmFsdWVzOiBbZF0nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogc2l4dGgsIFZhbHVlczogW2ZdJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzbyBhY2Nlc3MgY29udHJvbCBjb25maWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFjY2Vzcy1jb250cm9sJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1hc3NpZ25tZW50JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hc3NpZ25tZW50JyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgY2hhbmdlcyBhcmUgcHJlc2VudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdpYW0tdGVzdCc7XG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSldKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgJ2V4aXRlZCB3aXRoIGVycm9yJyxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgXCJjZGsgZGlmZiAtLXF1aWV0IGRvZXMgbm90IHByaW50ICdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyBtZXNzYWdlIGZvciBzdGFja3Mgd2hpY2ggaGF2ZSBubyBkaWZmZXJlbmNlc1wiLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTEnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tcXVpZXQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGRpZmYpLm5vdC50b0NvbnRhaW4oJ1N0YWNrIHRlc3QtMScpO1xuICAgIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHN0YWNrIHdpdGggZG9ja2VyIGFzc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RvY2tlcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbmQgdGVzdCBzdGFjayB3aXRoIGxhbWJkYSBhc3NldCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhQXJuID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuICAgIGlmIChsYW1iZGFBcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgTGFtYmRhIEFSTiBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBJbnZva2VDb21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBsYW1iZGFBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG91dHB1dC5QYXlsb2FkPy50cmFuc2Zvcm1Ub1N0cmluZygpKSkudG9Db250YWluKCdkZWFyIGFzc2V0Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgc3RhY2sgd2l0aCBMYW1iZGEgQXNzZXQgdG8gT2JqZWN0IExvY2stZW5hYmxlZCBhc3NldCBidWNrZXQnLCB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEJvb3RzdHJhcHBpbmcgd2l0aCBjdXN0b20gdG9vbGtpdCBzdGFjayBuYW1lIGFuZCBxdWFsaWZpZXJcbiAgY29uc3QgcXVhbGlmaWVyID0gZml4dHVyZS5xdWFsaWZpZXI7XG4gIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSBmaXh0dXJlLmJvb3RzdHJhcFN0YWNrTmFtZTtcbiAgYXdhaXQgZml4dHVyZS5jZGtCb290c3RyYXBNb2Rlcm4oe1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICBxdWFsaWZpZXI6IHF1YWxpZmllcixcbiAgfSk7XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGBjZGstJHtxdWFsaWZpZXJ9LWFzc2V0cy0ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0tJHtmaXh0dXJlLmF3cy5yZWdpb259YDtcbiAgYXdhaXQgZml4dHVyZS5hd3MuczMuc2VuZChuZXcgUHV0T2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb246IHtcbiAgICAgIE9iamVjdExvY2tFbmFibGVkOiAnRW5hYmxlZCcsXG4gICAgICBSdWxlOiB7XG4gICAgICAgIERlZmF1bHRSZXRlbnRpb246IHtcbiAgICAgICAgICBEYXlzOiAxLFxuICAgICAgICAgIE1vZGU6ICdHT1ZFUk5BTkNFJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSkpO1xuXG4gIC8vIERlcGxveSBhIHN0YWNrIHRoYXQgZGVmaW5pdGVseSBjb250YWlucyBhIGZpbGUgYXNzZXRcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS10b29sa2l0LXN0YWNrLW5hbWUnLCB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFRIRU4gLSBzaG91bGQgbm90IGZhaWwuIE5vdyBjbGVhbiB0aGUgYnVja2V0IHdpdGggZ292ZXJuYW5jZSBieXBhc3M6IGEgcmVndWxhciBkZWxldGVcbiAgLy8gb3BlcmF0aW9uIHdpbGwgZmFpbC5cbiAgYXdhaXQgZml4dHVyZS5hd3MuZW1wdHlCdWNrZXQoYnVja2V0TmFtZSwgeyBieXBhc3NHb3Zlcm5hbmNlOiB0cnVlIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAgICAnY29uZGl0aW9uYWwtcmVzb3VyY2UnLFxuICAgICAgJ2RvY2tlcicsXG4gICAgICAnZG9ja2VyLXdpdGgtY3VzdG9tLWZpbGUnLFxuICAgICAgJ2ZhaWxlZCcsXG4gICAgICAnaWFtLXRlc3QnLFxuICAgICAgJ2xhbWJkYScsXG4gICAgICAnbWlzc2luZy1zc20tcGFyYW1ldGVyJyxcbiAgICAgICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgJ291dHB1dHMtdGVzdC0xJyxcbiAgICAgICdvdXRwdXRzLXRlc3QtMicsXG4gICAgICAncGFyYW0tdGVzdC0xJyxcbiAgICAgICdwYXJhbS10ZXN0LTInLFxuICAgICAgJ3BhcmFtLXRlc3QtMycsXG4gICAgICAndGVybWluYXRpb24tcHJvdGVjdGlvbicsXG4gICAgICAndGVzdC0xJyxcbiAgICAgICd0ZXN0LTInLFxuICAgICAgJ3dpdGgtbmVzdGVkLXN0YWNrJyxcbiAgICAgICd3aXRoLW5lc3RlZC1zdGFjay11c2luZy1wYXJhbWV0ZXJzJyxcbiAgICAgICdvcmRlci1jb25zdW1pbmcnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjaykpO1xuICAgIH1cbiAgfSksXG4pO1xuXG4vKipcbiAqIFR5cGUgdG8gc3RvcmUgc3RhY2sgZGVwZW5kZW5jaWVzIHJlY3Vyc2l2ZWx5XG4gKi9cbnR5cGUgRGVwZW5kZW5jeURldGFpbHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXTtcbn07XG5cbnR5cGUgU3RhY2tEZXRhaWxzID0ge1xuICBpZDogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lEZXRhaWxzW107XG59O1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbiddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndGVzdC0xJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd3aXRoLW5lc3RlZC1zdGFjaycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdsaXN0LXN0YWNrcy9EZXBlbmRlbnRTdGFjaycsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnbGlzdC1zdGFja3MvRGVwZW5kZW50U3RhY2svSW5uZXJEZXBlbmRlbnRTdGFjaycsXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MvRGVwZW5kZW50U3RhY2sxJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2xpc3QtbXVsdGlwbGUtZGVwZW5kZW50LXN0YWNrcy9EZXBlbmRlbnRTdGFjazInLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTdGFja0RlcGVuZGVuY2llcyhzdGFjazogU3RhY2tEZXRhaWxzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmlkKTtcblxuICAgICAgZnVuY3Rpb24gdmFsaWRhdGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGRlcGVuZGVuY3kuaWQpO1xuICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZURlcGVuZGVuY2llcyhkZXBlbmRlbmN5LmRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFjay5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWxpZGF0ZURlcGVuZGVuY2llcyhzdGFjay5kZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICAgIHZhbGlkYXRlU3RhY2tEZXBlbmRlbmNpZXMoc3RhY2spO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICBuYW1lOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgZW52aXJvbWVudDoge1xuICAgICAgICAgIGFjY291bnQ6ICd1bmtub3duLWFjY291bnQnLFxuICAgICAgICAgIHJlZ2lvbjogJ3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgICBuYW1lOiAnYXdzOi8vdW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgICAgbmFtZTogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICAgIGVudmlyb21lbnQ6IHtcbiAgICAgICAgICBhY2NvdW50OiAndW5rbm93bi1hY2NvdW50JyxcbiAgICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicsXG4gICAgICAgICAgbmFtZTogJ2F3czovL3Vua25vd24tYWNjb3VudC91bmtub3duLXJlZ2lvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrLmlkKSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjay5uYW1lKSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQuYWNjb3VudCk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQubmFtZSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQucmVnaW9uKTtcbiAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBzdGFjay5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoZGVwZW5kZW5jeS5pZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzeW50aGluZyBhIHN0YWdlIHdpdGggZXJyb3JzIGxlYWRzIHRvIGZhaWx1cmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJ10sIHtcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLWVycm9ycycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdUaGlzIGlzIGFuIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc3ludGhpbmcgYSBzdGFnZSB3aXRoIGVycm9ycyBjYW4gYmUgc3VwcHJlc3NlZCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1uby12YWxpZGF0aW9uJ10sIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLWVycm9ycycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3N5bnRoIC0tcXVpZXQgY2FuIGJlIHNwZWNpZmllZCBpbiBjZGsuanNvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBjZGtKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpLCAndXRmOCcpKTtcbiAgICBjZGtKc29uID0ge1xuICAgICAgLi4uY2RrSnNvbixcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgIH07XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICBjb25zdCBzeW50aE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gICAgZXhwZWN0KHN5bnRoT3V0cHV0KS5ub3QudG9Db250YWluKCd0b3BpYzE1MkQ4NEEzNycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBzdGFjayB3aXRob3V0IHJlc291cmNlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRob3V0IHJlc291cmNlc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdjb25kaXRpb25hbC1yZXNvdXJjZScsIHsgbW9kRW52OiB7IE5PX1JFU09VUkNFOiAnVFJVRScgfSB9KTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIGJ1dCBub3QgZGVwbG95ZWQgdGhlIHN0YWNrLlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKSB9KSxcbiAgICAgICksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2NvbmRpdGlvbmFsLXJlc291cmNlIGRvZXMgbm90IGV4aXN0Jyk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIHdpdGggcmVzb3VyY2VzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJyk7XG5cbiAgICAvLyBUaGVuIGFnYWluIFdJVEhPVVQgcmVzb3VyY2VzICh0aGlzIHNob3VsZCBkZXN0cm95IHRoZSBzdGFjaylcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnLCB7IG1vZEVudjogeyBOT19SRVNPVVJDRTogJ1RSVUUnIH0gfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2NvbmRpdGlvbmFsLXJlc291cmNlJykgfSksXG4gICAgICApLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdjb25kaXRpb25hbC1yZXNvdXJjZSBkb2VzIG5vdCBleGlzdCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBubyBzdGFja3Mgd2l0aCAtLWlnbm9yZS1uby1zdGFja3MnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBlbXB0eSBhcnJheSBmb3Igc3RhY2sgbmFtZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShbXSwge1xuICAgICAgb3B0aW9uczogWyctLWlnbm9yZS1uby1zdGFja3MnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLW5vLXN0YWNrcycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBubyBzdGFja3MgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBlbXB0eSBhcnJheSBmb3Igc3RhY2sgbmFtZXNcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveShbXSwge1xuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLW5vLXN0YWNrcycsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdJQU0gZGlmZicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaWFtLXRlc3QnKV0pO1xuXG4gICAgLy8gUm91Z2hseSBjaGVjayBmb3IgYSB0YWJsZSBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAt4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAgLy8g4pSCICAg4pSCIFJlc291cmNlICAgICAgICDilIIgRWZmZWN0IOKUgiBBY3Rpb24gICAgICAgICDilIIgUHJpbmNpcGFsICAgICAgICAgICAgICAgICAgICAg4pSCIENvbmRpdGlvbiDilIJcbiAgICAvLyDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgICAvLyDilIIgKyDilIIgJHtTb21lUm9sZS5Bcm59IOKUgiBBbGxvdyAg4pSCIHN0czpBc3N1bWVSb2xlIOKUgiBTZXJ2aWNlOmVjMi5hbWF6b25hd3MuY29tICAgICDilIIgICAgICAgICAgIOKUglxuICAgIC8vIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCcke1NvbWVSb2xlLkFybn0nKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ3N0czpBc3N1bWVSb2xlJyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdlYzIuYW1hem9uYXdzLmNvbScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2Zhc3QgZGVwbG95JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gd2UgYXJlIHVzaW5nIGEgc3RhY2sgd2l0aCBhIG5lc3RlZCBzdGFjayBiZWNhdXNlIENGTiB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvXG4gICAgLy8gdXBkYXRlIGEgbmVzdGVkIHN0YWNrLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHZlcmlmeSB0aGF0IHVwZGF0ZXMgYXJlIGFjdHVhbGx5XG4gICAgLy8gc2tpcHBlZCB1bmxlc3MgLS1mb3JjZSBpcyBzcGVjaWZpZWQuXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDEgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgc2FtZSBzdGFjayBhZ2FpbiwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBjaGFuZ2Ugc2V0IGNyZWF0ZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcbiAgICBjb25zdCBjaGFuZ2VTZXQyID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpLnRvRXF1YWwoY2hhbmdlU2V0MS5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggLS1mb3JjZSwgbm93IHdlIHNob3VsZCBjcmVhdGUgYSBjaGFuZ2VzZXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS1mb3JjZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDMgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggdGFncywgZXhwZWN0ZWQgdG8gY3JlYXRlIGEgbmV3IGNoYW5nZXNldFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSByZXNvdXJjZXMgZGlkbid0IGNoYW5nZS5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS10YWdzJywgJ2tleT12YWx1ZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDQgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0NC5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RDaGFuZ2VTZXQoKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tBcm4gfSkpO1xuICAgICAgaWYgKCFyZXNwb25zZS5TdGFja3M/LlswXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZ2V0IGEgQ2hhbmdlU2V0IGF0IGFsbCcpO1xuICAgICAgfVxuICAgICAgZml4dHVyZS5sb2coYEZvdW5kIENoYW5nZSBTZXQgJHtyZXNwb25zZS5TdGFja3M/LlswXS5DaGFuZ2VTZXRJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5TdGFja3M/LlswXTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZmFpbGVkIGRlcGxveSBkb2VzIG5vdCBoYW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gdGhpcyB3aWxsIGhhbmcgaWYgd2UgaW50cm9kdWNlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQwMyBhZ2Fpbi5cbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koJ2ZhaWxlZCcpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2FuIHN0aWxsIGxvYWQgb2xkIGFzc2VtYmxpZXMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBjeEFzbURpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1pbnRlZy1jeCcpO1xuXG4gICAgY29uc3QgdGVzdEFzc2VtYmxpZXNEaXJlY3RvcnkgPSBwYXRoLmpvaW4oUkVTT1VSQ0VTX0RJUiwgJ2Nsb3VkLWFzc2VtYmxpZXMnKTtcbiAgICBmb3IgKGNvbnN0IGFzbWRpciBvZiBhd2FpdCBsaXN0Q2hpbGREaXJzKHRlc3RBc3NlbWJsaWVzRGlyZWN0b3J5KSkge1xuICAgICAgZml4dHVyZS5sb2coYEFTU0VNQkxZICR7YXNtZGlyfWApO1xuICAgICAgYXdhaXQgY2xvbmVEaXJlY3RvcnkoYXNtZGlyLCBjeEFzbURpcik7XG5cbiAgICAgIC8vIFNvbWUgZmlsZXMgaW4gdGhlIGFzbSBkaXJlY3RvcnkgdGhhdCBoYXZlIGEgLmpzIGV4dGVuc2lvbiBhcmVcbiAgICAgIC8vIGFjdHVhbGx5IHRyZWF0ZWQgYXMgdGVtcGxhdGVzLiBFdmFsdWF0ZSB0aGVtIHVzaW5nIE5vZGVKUy5cbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGxpc3RDaGlsZHJlbihjeEFzbURpciwgKGZ1bGxQYXRoKSA9PiBQcm9taXNlLnJlc29sdmUoZnVsbFBhdGguZW5kc1dpdGgoJy5qcycpKSk7XG4gICAgICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gdGVtcGxhdGUucmVwbGFjZSgvLmpzJC8sICcnKTtcbiAgICAgICAgYXdhaXQgc2hlbGwoW3Byb2Nlc3MuZXhlY1BhdGgsIHRlbXBsYXRlLCAnPicsIHRhcmdldE5hbWVdLCB7XG4gICAgICAgICAgY3dkOiBjeEFzbURpcixcbiAgICAgICAgICBvdXRwdXRzOiBbZml4dHVyZS5vdXRwdXRdLFxuICAgICAgICAgIG1vZEVudjoge1xuICAgICAgICAgICAgVEVTVF9BQ0NPVU5UOiBhd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCksXG4gICAgICAgICAgICBURVNUX1JFR0lPTjogZml4dHVyZS5hd3MucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgdGhpcyBkaXJlY3RvcnkgYXMgYSBDbG91ZCBBc3NlbWJseVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsIGN4QXNtRGlyLCAnLXYnLCAnc3ludGgnXSk7XG5cbiAgICAgIC8vIEFzc2VydCB0aGF0IHRoZXJlIHdhcyBubyBwcm92aWRlckVycm9yIGluIENESydzIHN0ZGVyclxuICAgICAgLy8gQmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBhcHAvZnJhbWV3b3JrIHRvIGFjdHVhbGx5IGVycm9yIGluIGNhc2UgdGhlXG4gICAgICAvLyBwcm92aWRlciBmYWlscywgd2UgaW5zcGVjdCB0aGUgbG9ncyBoZXJlLlxuICAgICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignJHByb3ZpZGVyRXJyb3InKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZ2VuZXJhdGluZyBhbmQgbG9hZGluZyBhc3NlbWJseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFzbU91dHB1dERpciA9IGAke2ZpeHR1cmUuaW50ZWdUZXN0RGlyfS1jZGstaW50ZWctYXNtYDtcbiAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsncm0nLCAnLXJmJywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgICAvLyBTeW50aGVzaXplIGEgQ2xvdWQgQXNzZW1ibHkgdG90aGUgZGVmYXVsdCBkaXJlY3RvcnkgKGNkay5vdXQpIGFuZCBhIHNwZWNpZmljIGRpcmVjdG9yeS5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJ10pO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1vdXRwdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAgIC8vIGNkay5vdXQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgaW5kaWNhdGVkIC0tb3V0cHV0IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydkaWZmJywgJ2Nkay5vdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuICdscycgdGhlIHN5bnRoZXNpemVkIGFzbS5cbiAgICAvLyBDaGFuZ2UgdG8gc29tZSByYW5kb20gZGlyZWN0b3J5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgYWNjaWRlbnRhbGx5IGxvYWRpbmcgY2RrLmpzb25cbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsIGFzbU91dHB1dERpciwgJ2xzJ10sIHsgY3dkOiBvcy50bXBkaXIoKSB9KTtcbiAgICAvLyBTYW1lIHN0YWNrcyB3ZSBrbm93IGFyZSBpbiB0aGUgYXBwXG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tbGFtYmRhYCk7XG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0xYCk7XG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yYCk7XG5cbiAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiB1c2UgJy4nIGFuZCBqdXN0IHN5bnRoICx0aGUgZ2VuZXJhdGVkIGFzbVxuICAgIGNvbnN0IHN0YWNrVGVtcGxhdGUgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgJy4nLCAnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSwge1xuICAgICAgY3dkOiBhc21PdXRwdXREaXIsXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0YWNrVGVtcGxhdGUpLnRvQ29udGFpbigndG9waWMxNTJEODRBMzcnKTtcblxuICAgIC8vIERlcGxveSBhIExhbWJkYSBmcm9tIHRoZSBjb3BpZWQgYXNtXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHsgb3B0aW9uczogWyctYScsICcuJ10sIGN3ZDogYXNtT3V0cHV0RGlyIH0pO1xuXG4gICAgLy8gUmVtb3ZlIChyZW5hbWUpIHRoZSBvcmlnaW5hbCBjdXN0b20gZG9ja2VyIGZpbGUgdGhhdCB3YXMgdXNlZCBkdXJpbmcgc3ludGguXG4gICAgLy8gdGhpcyB2ZXJpZmllcyB0aGF0IHRoZSBhc3NlbWx5IGhhcyBhIGNvcHkgb2YgaXQgYW5kIHRoYXQgdGhlIG1hbmlmZXN0IHVzZXNcbiAgICAvLyByZWxhdGl2ZSBwYXRocyB0byByZWZlcmVuY2UgdG8gaXQuXG4gICAgY29uc3QgY3VzdG9tRG9ja2VyRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2RvY2tlcicsICdEb2NrZXJmaWxlLkN1c3RvbScpO1xuICAgIGF3YWl0IGZzLnJlbmFtZShjdXN0b21Eb2NrZXJGaWxlLCBgJHtjdXN0b21Eb2NrZXJGaWxlfX5gKTtcbiAgICB0cnkge1xuICAgICAgLy8gZGVwbG95IGEgZG9ja2VyIGltYWdlIHdpdGggY3VzdG9tIGZpbGUgd2l0aG91dCBzeW50aCAodXNlcyBhc3NldHMpXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZG9ja2VyLXdpdGgtY3VzdG9tLWZpbGUnLCB7IG9wdGlvbnM6IFsnLWEnLCAnLiddLCBjd2Q6IGFzbU91dHB1dERpciB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVuYW1lIGJhY2sgdG8gcmVzdG9yZSBmaXh0dXJlIHRvIG9yaWdpbmFsIHN0YXRlXG4gICAgICBhd2FpdCBmcy5yZW5hbWUoYCR7Y3VzdG9tRG9ja2VyRmlsZX1+YCwgY3VzdG9tRG9ja2VyRmlsZSk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3RlbXBsYXRlcyBvbiBkaXNrIGNvbnRhaW4gbWV0YWRhdGEgcmVzb3VyY2UsIGFsc28gaW4gbmVzdGVkIGFzc2VtYmxpZXMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTeW50aCBmaXJzdCwgYW5kIHN3aXRjaCBvbiB2ZXJzaW9uIHJlcG9ydGluZyBiZWNhdXNlIGNkay5qc29uIGlzIGRpc2FibGluZyBpdFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS12ZXJzaW9uLXJlcG9ydGluZz10cnVlJ10pO1xuXG4gICAgLy8gTG9hZCB0ZW1wbGF0ZSBmcm9tIGRpc2sgZnJvbSByb290IGFzc2VtYmx5XG4gICAgY29uc3QgdGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjYXQnLCAnY2RrLm91dC8qLWxhbWJkYS50ZW1wbGF0ZS5qc29uJ10pO1xuXG4gICAgZXhwZWN0KEpTT04ucGFyc2UodGVtcGxhdGVDb250ZW50cykuUmVzb3VyY2VzLkNES01ldGFkYXRhKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAvLyBMb2FkIHRlbXBsYXRlIGZyb20gbmVzdGVkIGFzc2VtYmx5XG4gICAgY29uc3QgbmVzdGVkVGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoW1xuICAgICAgJ2NhdCcsXG4gICAgICAnY2RrLm91dC9hc3NlbWJseS0qLXN0YWdlLypTdGFja0luU3RhZ2UqLnRlbXBsYXRlLmpzb24nLFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KEpTT04ucGFyc2UobmVzdGVkVGVtcGxhdGVDb250ZW50cykuUmVzb3VyY2VzLkNES01ldGFkYXRhKS50b0JlVHJ1dGh5KCk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnQ0RLIHN5bnRoIGFkZCB0aGUgbWV0YWRhdGEgcHJvcGVydGllcyBleHBlY3RlZCBieSBzYW0nLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gU3ludGggZmlyc3RcbiAgICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGZpeHR1cmUudGVtcGxhdGUoJ1Rlc3RTdGFjaycpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRSZXNvdXJjZXMgPSBbXG4gICAgICB7XG4gICAgICAgIC8vIFB5dGhvbiBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uMzk0OTVDRUYnLFxuICAgICAgICBjZGtJZDogJ1B5dGhvbkxheWVyVmVyc2lvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdMYXllclZlcnNpb24zODc4REEzQScsXG4gICAgICAgIGNka0lkOiAnTGF5ZXJWZXJzaW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgbGF5ZXIgdmVyc2lvblxuICAgICAgICBpZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lNkJBREJENkUnLFxuICAgICAgICBjZGtJZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnUHl0aG9uRnVuY3Rpb24wQkNGNzdGRCcsXG4gICAgICAgIGNka0lkOiAnUHl0aG9uRnVuY3Rpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBMb2cgUmV0ZW50aW9uIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGFGRDRCRkM4QScsXG4gICAgICAgIGNka0lkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGEnLFxuICAgICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUyOENCREEwNScsXG4gICAgICAgIGNka0lkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lJyxcbiAgICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdCdW5kbGVkRnVuY3Rpb25QeXRob25SdW50aW1lNEQ5QTA5MTgnLFxuICAgICAgICBjZGtJZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBOb2RlSnMgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdOb2RlanNGdW5jdGlvbjA5QzFGMjBGJyxcbiAgICAgICAgY2RrSWQ6ICdOb2RlanNGdW5jdGlvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnR29GdW5jdGlvbkNBOTVGQkFBJyxcbiAgICAgICAgY2RrSWQ6ICdHb0Z1bmN0aW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRG9ja2VyIEltYWdlIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRG9ja2VySW1hZ2VGdW5jdGlvbjI4Qjc3M0U2JyxcbiAgICAgICAgY2RrSWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uJyxcbiAgICAgICAgZG9ja2VyRmlsZVBhdGg6ICdEb2NrZXJmaWxlJyxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlLkltYWdlVXJpJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFNwZWMgUmVzdCBBcGlcbiAgICAgICAgaWQ6ICdTcGVjUmVzdEFQSTdENEIzQTM0JyxcbiAgICAgICAgY2RrSWQ6ICdTcGVjUmVzdEFQSScsXG4gICAgICAgIHByb3BlcnR5OiAnQm9keVMzTG9jYXRpb24nLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBleHBlY3RlZFJlc291cmNlcykge1xuICAgICAgZml4dHVyZS5vdXRwdXQud3JpdGUoYHZhbGlkYXRlIGFzc2V0cyBtZXRhZGF0YSBmb3IgcmVzb3VyY2UgJHtyZXNvdXJjZX1gKTtcbiAgICAgIGV4cGVjdChyZXNvdXJjZS5pZCBpbiB0ZW1wbGF0ZS5SZXNvdXJjZXMpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZS5SZXNvdXJjZXNbcmVzb3VyY2UuaWRdKS50b0VxdWFsKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ1Rlc3RTdGFjaycpfS8ke3Jlc291cmNlLmNka0lkfS9SZXNvdXJjZWAsXG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL2Fzc2V0XFwuWzAtOWEtekEtWl17NjR9LyksXG4gICAgICAgICAgICAnYXdzOmFzc2V0OmlzLWJ1bmRsZWQnOiByZXNvdXJjZS5pc0J1bmRsZWQsXG4gICAgICAgICAgICAnYXdzOmFzc2V0OmRvY2tlcmZpbGUtcGF0aCc6IHJlc291cmNlLmRvY2tlckZpbGVQYXRoLFxuICAgICAgICAgICAgJ2F3czphc3NldDpwcm9wZXJ0eSc6IHJlc291cmNlLnByb3BlcnR5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBOZXN0ZWQgU3RhY2tcbiAgICBmaXh0dXJlLm91dHB1dC53cml0ZSgndmFsaWRhdGUgYXNzZXRzIG1ldGFkYXRhIGZvciBuZXN0ZWQgc3RhY2sgcmVzb3VyY2UnKTtcbiAgICBleHBlY3QoJ05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrUmVzb3VyY2VCNzA4MzRGRCcgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHRlbXBsYXRlLlJlc291cmNlcy5OZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja1Jlc291cmNlQjcwODM0RkQpLnRvRXF1YWwoXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZShcbiAgICAgICAgICAgICdUZXN0U3RhY2snLFxuICAgICAgICAgICl9L05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrL05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrUmVzb3VyY2VgLFxuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6IGV4cGVjdC5zdHJpbmdNYXRjaGluZyhcbiAgICAgICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4LnJlcGxhY2UoLy0vLCAnJyl9VGVzdFN0YWNrTmVzdGVkU3RhY2tbMC05QS1aXXs4fVxcLm5lc3RlZFxcLnRlbXBsYXRlXFwuanNvbmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnYXdzOmFzc2V0OnByb3BlcnR5JzogJ1RlbXBsYXRlVVJMJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnQ0RLIHN5bnRoIGJ1bmRsZWQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkJyxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBmaXh0dXJlLnRlbXBsYXRlKCdUZXN0U3RhY2snKTtcblxuICAgIGNvbnN0IGV4cGVjdGVkQnVuZGxlZEFzc2V0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdQeXRob25MYXllclZlcnNpb24zOTQ5NUNFRicsXG4gICAgICAgIGZpbGVzOiBbXG4gICAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnTGF5ZXJWZXJzaW9uMzg3OERBM0EnLFxuICAgICAgICBmaWxlczogWydsYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLCAncmVxdWlyZW1lbnRzLnR4dCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBsYXllciB2ZXJzaW9uXG4gICAgICAgIGlkOiAnQnVuZGxlZExheWVyVmVyc2lvblB5dGhvblJ1bnRpbWU2QkFEQkQ2RScsXG4gICAgICAgIGZpbGVzOiBbXG4gICAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBQeXRob24gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdQeXRob25GdW5jdGlvbjBCQ0Y3N0ZEJyxcbiAgICAgICAgZmlsZXM6IFsnYXBwLnB5JywgJ2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLCAnZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lMjhDQkRBMDUnLFxuICAgICAgICBmaWxlczogWydhcHAucHknLCAncmVxdWlyZW1lbnRzLnR4dCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBGdW5jdGlvblxuICAgICAgICBpZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWU0RDlBMDkxOCcsXG4gICAgICAgIGZpbGVzOiBbJ2FwcC5weScsICdnZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JywgJ2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBOb2RlSnMgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdOb2RlanNGdW5jdGlvbjA5QzFGMjBGJyxcbiAgICAgICAgZmlsZXM6IFsnaW5kZXguanMnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnR29GdW5jdGlvbkNBOTVGQkFBJyxcbiAgICAgICAgZmlsZXM6IFsnYm9vdHN0cmFwJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBEb2NrZXIgSW1hZ2UgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uMjhCNzczRTYnLFxuICAgICAgICBmaWxlczogWydhcHAuanMnLCAnRG9ja2VyZmlsZScsICdwYWNrYWdlLmpzb24nXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZXhwZWN0ZWRCdW5kbGVkQXNzZXRzKSB7XG4gICAgICBjb25zdCBhc3NldFBhdGggPSB0ZW1wbGF0ZS5SZXNvdXJjZXNbcmVzb3VyY2UuaWRdLk1ldGFkYXRhWydhd3M6YXNzZXQ6cGF0aCddO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc291cmNlLmZpbGVzKSB7XG4gICAgICAgIGZpeHR1cmUub3V0cHV0LndyaXRlKGB2YWxpZGF0ZSBQYXRoICR7ZmlsZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2V9YCk7XG4gICAgICAgIGV4cGVjdChleGlzdHNTeW5jKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCBhc3NldFBhdGgsIGZpbGUpKSkudG9CZVRydXRoeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzYW0gY2FuIGxvY2FsbHkgdGVzdCB0aGUgc3ludGhlc2l6ZWQgY2RrIGFwcGxpY2F0aW9uJyxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZml4dHVyZS5zYW1Mb2NhbFN0YXJ0QXBpKFxuICAgICAgJ1Rlc3RTdGFjaycsXG4gICAgICBmYWxzZSxcbiAgICAgIHJhbmRvbUludGVnZXIoMzAwMDAsIDQwMDAwKSxcbiAgICAgICcvcmVzdGFwaXMvc3BlYy9weXRob25GdW5jdGlvbicsXG4gICAgKTtcbiAgICBleHBlY3QocmVzdWx0LmFjdGlvblN1Y2NlZWRlZCkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChyZXN1bHQuYWN0aW9uT3V0cHV0KS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBtZXNzYWdlOiAnSGVsbG8gV29ybGQnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdza2lwcyBub3RpY2UgcmVmcmVzaCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoe1xuICAgICAgb3B0aW9uczogWyctLW5vLW5vdGljZXMnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS11c2luZy1jb250ZXh0JyxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBOZWl0aGVyIHN1Y2NlZWRzIG5vciBmYWlscywgYnV0IHNraXBzIHRoZSByZWZyZXNoXG4gICAgYXdhaXQgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignTm90aWNlcyByZWZyZXNoZWQnKTtcbiAgICBhd2FpdCBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdOb3RpY2VzIHJlZnJlc2ggZmFpbGVkJyk7XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gUzMgYnVja2V0LCBvcnBoYW4gdGhhdCBidWNrZXQsIHRoZW4gaW1wb3J0IHRoZSBidWNrZXQsIHdpdGggYSBOb2RlSlNGdW5jdGlvbiBsYW1iZGEgYWxzbyBpbiB0aGUgc3RhY2suXG4gKlxuICogVmFsaWRhdGVzIGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8zMTk5OSAoaW1wb3J0IGZhaWxzKVxuICovXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IHJlc291cmNlIGltcG9ydCB3aXRoIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmVzIGJ1bmRsaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBGaXJzdCwgY3JlYXRlIGEgc3RhY2sgdGhhdCBpbmNsdWRlcyBhIE5vZGVKU0Z1bmN0aW9uIGxhbWJkYSBhbmQgb25lIGJ1Y2tldCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBidXQgTk9UIGRlbGV0ZWQgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgSU5DTFVERV9OT0RFSlNfRlVOQ1RJT05fTEFNQkRBOiAnMScsIElOQ0xVREVfU0lOR0xFX0JVQ0tFVDogJzEnLCBSRVRBSU5fU0lOR0xFX0JVQ0tFVDogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlY29uZCwgbm93IHRoZSBidWNrZXQgd2Ugd2lsbCByZW1vdmUgaXMgaW4gdGhlIHN0YWNrIGFuZCBoYXMgYSBsb2dpY2FsSWQuIFdlIGNhbiBub3cgbWFrZSB0aGUgcmVzb3VyY2UgbWFwcGluZyBmaWxlLlxuICAgICAgLy8gVGhpcyByZXNvdXJjZSBtYXBwaW5nIGZpbGUgd2lsbCBiZSB1c2VkIHRvIHRlbGwgdGhlIGltcG9ydCBvcGVyYXRpb24gd2hhdCBidWNrZXQgdG8gYnJpbmcgaW50byB0aGUgc3RhY2suXG4gICAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc3QgYnVja2V0TG9naWNhbElkID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXRMb2dpY2FsSWQ7XG4gICAgICBjb25zdCBidWNrZXROYW1lID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXROYW1lO1xuICAgICAgY29uc3QgYnVja2V0UmVzb3VyY2VNYXAgPSB7XG4gICAgICAgIFtidWNrZXRMb2dpY2FsSWRdOiB7XG4gICAgICAgICAgQnVja2V0TmFtZTogYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnbWFwcGluZy5qc29uJyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFwcGluZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KGJ1Y2tldFJlc291cmNlTWFwKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAgICAgLy8gVGhpcmQsIHJlbW92ZSB0aGUgYnVja2V0IGZyb20gdGhlIHN0YWNrLCBidXQgZG9uJ3QgZGVsZXRlIHRoZSBidWNrZXQgZnJvbSBBV1MuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgICAgbW9kRW52OiB7IElOQ0xVREVfTk9ERUpTX0ZVTkNUSU9OX0xBTUJEQTogJzEnLCBJTkNMVURFX1NJTkdMRV9CVUNLRVQ6ICcwJywgUkVUQUlOX1NJTkdMRV9CVUNLRVQ6ICcwJyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihidWNrZXRMb2dpY2FsSWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2ltcG9ydCcsICctLXJlc291cmNlLW1hcHBpbmcnLCBtYXBwaW5nRmlsZSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyldLCB7XG4gICAgICAgIG1vZEVudjogeyBJTkNMVURFX05PREVKU19GVU5DVElPTl9MQU1CREE6ICcxJywgSU5DTFVERV9TSU5HTEVfQlVDS0VUOiAnMScsIFJFVEFJTl9TSU5HTEVfQlVDS0VUOiAnMCcgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUFmdGVySW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIGJ1bmRsaW5nIGlzIHNraXBwZWQgZHVyaW5nIGltcG9ydCBmb3IgTm9kZUpTRnVuY3Rpb24gbGFtYmRhLCB0aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGZhaWwgYW5kIGV4aXRcbiAgICAgIGV4cGVjdChkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcyFbMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0lNUE9SVF9DT01QTEVURScpO1xuXG4gICAgICAvLyBJZiB0aGUgaW1wb3J0IG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgdGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gdGhlIGltcG9ydGVkIGJ1Y2tldFxuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4oYnVja2V0TG9naWNhbElkKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXAgdGhlIHJlc291cmNlcyB3ZSBjcmVhdGVkXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBxdWV1ZSwgb3JwaGFuIHRoYXQgcXVldWUsIHRoZW4gaW1wb3J0IHRoZSBxdWV1ZS5cbiAqXG4gKiBXZSB3YW50IHRvIHRlc3Qgd2l0aCBhIGxhcmdlIHRlbXBsYXRlIHRvIG1ha2Ugc3VyZSBsYXJnZSB0ZW1wbGF0ZXMgY2FuIHdvcmsgd2l0aCBpbXBvcnQuXG4gKi9cbmludGVnVGVzdChcbiAgJ3Rlc3QgcmVzb3VyY2UgaW1wb3J0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCByYW5kb21QcmVmaXggPSByYW5kb21TdHJpbmcoKTtcbiAgICBjb25zdCB1bmlxdWVPdXRwdXRzRmlsZU5hbWUgPSBgJHtyYW5kb21QcmVmaXh9T3V0cHV0cy5qc29uYDsgLy8gb3RoZXIgdGVzdHMgdXNlIHRoZSBvdXRwdXRzIGZpbGUuIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb2xsaWRlLlxuICAgIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsIHVuaXF1ZU91dHB1dHNGaWxlTmFtZSk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBGaXJzdCwgY3JlYXRlIGEgc3RhY2sgdGhhdCBpbmNsdWRlcyBtYW55IHF1ZXVlcywgYW5kIG9uZSBxdWV1ZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBidXQgTk9UIGRlbGV0ZWQgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcxJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlY29uZCwgbm93IHRoZSBxdWV1ZSB3ZSB3aWxsIHJlbW92ZSBpcyBpbiB0aGUgc3RhY2sgYW5kIGhhcyBhIGxvZ2ljYWxJZC4gV2UgY2FuIG5vdyBtYWtlIHRoZSByZXNvdXJjZSBtYXBwaW5nIGZpbGUuXG4gICAgICAvLyBUaGlzIHJlc291cmNlIG1hcHBpbmcgZmlsZSB3aWxsIGJlIHVzZWQgdG8gdGVsbCB0aGUgaW1wb3J0IG9wZXJhdGlvbiB3aGF0IHF1ZXVlIHRvIGJyaW5nIGludG8gdGhlIHN0YWNrLlxuICAgICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaW1wb3J0YWJsZS1zdGFjaycpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICAgIGNvbnN0IHF1ZXVlTG9naWNhbElkID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5RdWV1ZUxvZ2ljYWxJZDtcbiAgICAgIGNvbnN0IHF1ZXVlUmVzb3VyY2VNYXAgPSB7XG4gICAgICAgIFtxdWV1ZUxvZ2ljYWxJZF06IHsgUXVldWVVcmw6IG91dHB1dHNbZnVsbFN0YWNrTmFtZV0uUXVldWVVcmwgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCBgJHtyYW5kb21QcmVmaXh9TWFwcGluZy5qc29uYCk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFwcGluZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KHF1ZXVlUmVzb3VyY2VNYXApLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBUaGlyZCwgcmVtb3ZlIHRoZSBxdWV1ZSBmcm9tIHRoZSBzdGFjaywgYnV0IGRvbid0IGRlbGV0ZSB0aGUgcXVldWUgZnJvbSBBV1MuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMCcsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcwJyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihxdWV1ZUxvZ2ljYWxJZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnaW1wb3J0JywgJy0tcmVzb3VyY2UtbWFwcGluZycsIG1hcHBpbmdGaWxlLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2ltcG9ydGFibGUtc3RhY2snKV0sIHtcbiAgICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMScsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcwJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgR2V0VGVtcGxhdGVDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcyFbMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0lNUE9SVF9DT01QTEVURScpO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4ocXVldWVMb2dpY2FsSWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3Rlc3QgbWlncmF0ZSBkZXBsb3ltZW50IGZvciBhcHAgd2l0aCBsb2NhbGZpbGUgc291cmNlIGluIG1pZ3JhdGUuanNvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsICdvdXRwdXRzLmpzb24nKTtcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIEluaXRpYWwgZGVwbG95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgT1JQSEFOX1RPUElDOiAnMScgfSxcbiAgICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIGNvbnN0IHF1ZXVlTmFtZSA9IG91dHB1dHNbc3RhY2tOYW1lXS5RdWV1ZU5hbWU7XG4gICAgY29uc3QgcXVldWVVcmwgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVVcmw7XG4gICAgY29uc3QgcXVldWVMb2dpY2FsSWQgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVMb2dpY2FsSWQ7XG4gICAgZml4dHVyZS5sb2coYENyZWF0ZWQgcXVldWUgJHtxdWV1ZVVybH0gaW4gc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9YCk7XG5cbiAgICAvLyBXcml0ZSB0aGUgbWlncmF0ZSBmaWxlIGJhc2VkIG9uIHRoZSBJRCBmcm9tIHN0ZXAgb25lLCB0aGVuIGRlcGxveSB0aGUgYXBwIHdpdGggbWlncmF0ZVxuICAgIGNvbnN0IG1pZ3JhdGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnbWlncmF0ZS5qc29uJyk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgbWlncmF0ZUZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFNvdXJjZTogJ2xvY2FsZmlsZScsXG4gICAgICAgIFJlc291cmNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogcXVldWVMb2dpY2FsSWQsXG4gICAgICAgICAgICBSZXNvdXJjZUlkZW50aWZpZXI6IHsgUXVldWVVcmw6IHF1ZXVlVXJsIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9LFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICBmaXh0dXJlLmxvZyhgRGVsZXRlZCBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX0sIG9ycGhhbmluZyAke3F1ZXVlTmFtZX1gKTtcblxuICAgIC8vIENyZWF0ZSBuZXcgc3RhY2sgZnJvbSBleGlzdGluZyBxdWV1ZVxuICAgIHRyeSB7XG4gICAgICBmaXh0dXJlLmxvZyhgRGVwbG95aW5nIG5ldyBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX0sIG1pZ3JhdGluZyAke3F1ZXVlTmFtZX0gaW50byBzdGFja2ApO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW51cFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgXCJob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgTGFtYmRhIGZ1bmN0aW9uJ3MgZGVzY3JpcHRpb24gYW5kIGVudmlyb25tZW50IHZhcmlhYmxlc1wiLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgIC8vIFwiQ1JFQVRFX0NPTVBMRVRFXCJcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIC8vIFRoZSBlbnRpcmUgc3RyaW5nIGZhaWxzIGxvY2FsbHkgZHVlIHRvIGZvcm1hdHRpbmcuIE1ha2luZyB0aGlzIHRlc3QgbGVzcyBzcGVjaWZpY1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvTWF0Y2goL2hvdHN3YXBwZWQhLyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGZ1bmN0aW9uTmFtZSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIEZuOjpJbXBvcnRWYWx1ZSBpbnRyaW5zaWMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZXhwb3J0LXZhbHVlLXN0YWNrJyk7XG4gICAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnb3JpZ2luYWwgdmFsdWUnLFxuICAgICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICAgICAgVVNFX0lNUE9SVF9WQUxVRV9MQU1CREFfUFJPUEVSVFk6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgICAgLy8gVEhFTlxuXG4gICAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAgIC8vIFRoZSBlbnRpcmUgc3RyaW5nIGZhaWxzIGxvY2FsbHkgZHVlIHRvIGZvcm1hdHRpbmcuIE1ha2luZyB0aGlzIHRlc3QgbGVzcyBzcGVjaWZpY1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvaG90c3dhcHBlZCEvKTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihmdW5jdGlvbk5hbWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBFbnN1cmUgY2xlYW51cCBpbiByZXZlcnNlIG9yZGVyIGR1ZSB0byB1c2Ugb2YgaW1wb3J0L2V4cG9ydFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdsYW1iZGEtaG90c3dhcCcpO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdleHBvcnQtdmFsdWUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIGVjcyBzZXJ2aWNlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09ICdTZXJ2aWNlTmFtZScpPy5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cblxuICAgIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5zXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgLy8gVGhlIGVudGlyZSBzdHJpbmcgZmFpbHMgbG9jYWxseSBkdWUgdG8gZm9ybWF0dGluZy4gTWFraW5nIHRoaXMgdGVzdCBsZXNzIHNwZWNpZmljXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvaG90c3dhcHBlZCEvKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oc2VydmljZU5hbWUpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBmb3IgZWNzIHNlcnZpY2Ugd2FpdHMgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzY3JpYmVTdGFja3NSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgY2x1c3Rlck5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKVxuICAgICAgPy5PdXRwdXRWYWx1ZSE7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKVxuICAgICAgPy5PdXRwdXRWYWx1ZSE7XG5cbiAgICAvLyBUSEVOXG5cbiAgICBjb25zdCBkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5lY3Muc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZCh7XG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VOYW1lXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlU2VydmljZXNSZXNwb25zZS5zZXJ2aWNlcz8uWzBdLmRlcGxveW1lbnRzKS50b0hhdmVMZW5ndGgoMSk7IC8vIG9ubHkgb25lIGRlcGxveW1lbnQgcHJlc2VudFxuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvTWF0Y2goL2hvdHN3YXBwZWQhLyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSBkZXRlY3RzIGZhaWxlZCBkZXBsb3ltZW50IGFuZCBlcnJvcnMnLFxuICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywgeyB2ZXJib3NlOiB0cnVlIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgVVNFX0lOVkFMSURfRUNTX0hPVFNXQVBfSU1BR0U6ICd0cnVlJyxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB2ZXJib3NlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGV4cGVjdGVkU3Vic3RyaW5nID0gJ1Jlc291cmNlIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgc3RhdGUgZHVlIHRvIHdhaXRlciBzdGF0dXM6IFRJTUVPVVQnO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihleHBlY3RlZFN1YnN0cmluZyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdPYnNlcnZlZCByZXNwb25zZXM6Jyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCcyMDA6IE9LJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvQ29udGFpbignaG90c3dhcHBlZCEnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBBcHBTeW5jIEFQSXMgd2l0aCBtYW55IGZ1bmN0aW9ucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYXBwc3luYy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2FwcHN5bmMtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0FQUFNZTkNfUFJPUEVSVFlfVkFMVUU6ICckdXRpbC5xcigkY3R4LnN0YXNoLnB1dChcIm5ld1RlbXBsYXRlXCIsIFtdKSlcXG4kdXRpbC50b0pzb24oe30pJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIC8vIGFzc2VydCBhbGwgNTAgZnVuY3Rpb25zIHdlcmUgaG90c3dhcHBlZFxuICAgIGZvciAoY29uc3QgaSBvZiBBcnJheSg1MCkua2V5cygpKSB7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYEFXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uICdhcHBzeW5jX2Z1bmN0aW9uJHtpfScgaG90c3dhcHBlZCFgKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIEVDUyBkZXBsb3ltZW50IHJlc3BlY3RzIHByb3BlcnRpZXMgb3ZlcnJpZGUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gVXBkYXRlIHRoZSBDREsgY29udGV4dCB3aXRoIHRoZSBuZXcgRUNTIHByb3BlcnRpZXNcbiAgbGV0IGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCA9IDEwMDtcbiAgbGV0IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCA9IDIwMDtcbiAgbGV0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICBjZGtKc29uID0ge1xuICAgIC4uLmNka0pzb24sXG4gICAgaG90c3dhcDoge1xuICAgICAgZWNzOiB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5UGVyY2VudDogZWNzTWluaW11bUhlYWx0aHlQZXJjZW50LFxuICAgICAgICBtYXhpbXVtSGVhbHRoeVBlcmNlbnQ6IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbikpO1xuXG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1ob3Rzd2FwJyxcbiAgICBdLFxuICAgIG1vZEVudjoge1xuICAgICAgRFlOQU1JQ19FQ1NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBjbHVzdGVyTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuZWNzLnNlbmQoXG4gICAgbmV3IERlc2NyaWJlU2VydmljZXNDb21tYW5kKHtcbiAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gICAgfSksXG4gICk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWluaW11bUhlYWx0aHlQZXJjZW50KS50b0VxdWFsKGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWF4aW11bVBlcmNlbnQpLnRvRXF1YWwoZWNzTWF4aW11bUhlYWx0aHlQZXJjZW50KTtcbn0pKTtcblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkcmVuKHBhcmVudDogc3RyaW5nLCBwcmVkOiAoeDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgYXdhaXQgZnMucmVhZGRpcihwYXJlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwYXJlbnQsIGNoaWxkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChhd2FpdCBwcmVkKGZ1bGxQYXRoKSkge1xuICAgICAgcmV0LnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0Q2hpbGREaXJzKHBhcmVudDogc3RyaW5nKSB7XG4gIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFyZW50LCBhc3luYyAoZnVsbFBhdGg6IHN0cmluZykgPT4gKGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuaW50ZWdUZXN0KFxuICAnY2RrIG5vdGljZXMgd2l0aCAtLXVuYWNrbm93bGVkZ2VkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgbm90aWNlc1VuYWNrbm93bGVkZ2VkID0gYXdhaXQgZml4dHVyZS5jZGsoWydub3RpY2VzJywgJy0tdW5hY2tub3dsZWRnZWQnXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBub3RpY2VzVW5hY2tub3dsZWRnZWRBbGlhcyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbm90aWNlcycsICctdSddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGV4cGVjdChub3RpY2VzVW5hY2tub3dsZWRnZWQpLnRvRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9UaGVyZSBhcmUgXFxkezEsfSB1bmFja25vd2xlZGdlZCBub3RpY2VcXChzXFwpLi8pKTtcbiAgICBleHBlY3Qobm90aWNlc1VuYWNrbm93bGVkZ2VkKS50b0VxdWFsKG5vdGljZXNVbmFja25vd2xlZGdlZEFsaWFzKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IGNkayByb2xsYmFjaycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBSb2xsYmFja1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydyb2xsYmFjayddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyByb2xsYmFjayBpZiBwYXVzZWQgYW5kIGNoYW5nZSBjb250YWlucyBhIHJlcGxhY2VtZW50JyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBwaGFzZSA9ICcyYSc7XG5cbiAgICAgIC8vIFNob3VsZCBmYWlsXG4gICAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIERvIGEgZGVwbG95bWVudCB3aXRoIGEgcmVwbGFjZW1lbnQgYW5kIC0tZm9yY2U6IHRoaXMgd2lsbCByb2xsIGJhY2sgZmlyc3QgYW5kIHRoZW4gZGVwbG95IG5vcm1hbGx5XG4gICAgICBwaGFzZSA9ICczJztcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snLCAnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcGF1c2VkIGFuZCAtLW5vLXJvbGxiYWNrIGlzIHJlbW92ZWQgZnJvbSBmbGFncycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgcmVtb3ZpbmcgLS1uby1yb2xsYmFjazogdGhpcyB3aWxsIHJvbGwgYmFjayBmaXJzdCBhbmQgdGhlbiBkZXBsb3kgbm9ybWFsbHlcbiAgICAgIHBoYXNlID0gJzEnO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcmVwbGFjZW1lbnQgYW5kIC0tbm8tcm9sbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIGZsYWdzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgd2l0aCBhIHJlcGxhY2VtZW50IGFuZCByZW1vdmluZyAtLW5vLXJvbGxiYWNrOiB0aGlzIHdpbGwgZG8gYSByZWd1bGFyIHJvbGxiYWNrIGRlcGxveVxuICAgICAgcGhhc2UgPSAnMyc7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLWZvcmNlJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3Rlc3QgY2RrIHJvbGxiYWNrIC0tZm9yY2UnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyb2xsYmFjay10ZXN0LWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgbGV0IHBoYXNlID0gJzEnO1xuXG4gICAgLy8gU2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHBoYXNlID0gJzJiJzsgLy8gRmFpbCB1cGRhdGUgYW5kIGFsc28gZmFpbCByb2xsYmFja1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIFNob3VsZCBzdGlsbCBmYWlsXG4gICAgICBjb25zdCByb2xsYmFja091dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snXSwge1xuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJvbGxiYWNrT3V0cHV0KS50b0NvbnRhaW4oJ0ZhaWxpbmcgcm9sbGJhY2snKTtcblxuICAgICAgLy8gUm9sbGJhY2sgYW5kIGZvcmNlIGNsZWFudXBcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snLCAnLS1mb3JjZSddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnY2RrIG5vdGljZXMgYXJlIGRpc3BsYXllZCBjb3JyZWN0bHknLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgY2FjaGUgPSB7XG4gICAgZXhwaXJhdGlvbjogNDEyNTk2MzI2NDAwMCwgLy8geWVhciAyMTAwIHNvIHdlIG5ldmVyIG92ZXJ3cml0ZSB0aGUgY2FjaGVcbiAgICBub3RpY2VzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQm9vdHN0cmFwIDE5OTkgTm90aWNlJyxcbiAgICAgICAgaXNzdWVOdW1iZXI6IDQ0NDQsXG4gICAgICAgIG92ZXJ2aWV3OiAnT3ZlcnZpZXcgZm9yIEJvb3RzdHJhcCAxOTk5IE5vdGljZS4gQWZmZWN0ZWRFbnZpcm9ubWVudHM6PHtyZXNvbHZlOkVOVklST05NRU5UU30+JyxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdib290c3RyYXAnLFxuICAgICAgICAgICAgdmVyc2lvbjogJzwxOTk5JywgLy8gc28gd2UgaW5jbHVkZSBhbGwgcG9zc2libGUgZW52aXJvbm1lbnRzXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IGNka0NhY2hlRGlyID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2FjaGUnKTtcbiAgYXdhaXQgZnMubWtkaXIoY2RrQ2FjaGVEaXIpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGNka0NhY2hlRGlyLCAnbm90aWNlcy5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNhY2hlKSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGljZXMnLCB7XG4gICAgdmVyYm9zZTogZmFsc2UsXG4gICAgbW9kRW52OiB7XG4gICAgICBDREtfSE9NRTogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdPdmVydmlldyBmb3IgQm9vdHN0cmFwIDE5OTkgTm90aWNlJyk7XG5cbiAgLy8gYXNzZXJ0IGR5bmFtaWMgZW52aXJvbm1lbnRzIGFyZSByZXNvbHZlZFxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oYEFmZmVjdGVkRW52aXJvbm1lbnRzOjxhd3M6Ly8ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0vJHtmaXh0dXJlLmF3cy5yZWdpb259PmApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3JlcXVlc3RzIGdvIHRocm91Z2ggYSBwcm94eSB3aGVuIGNvbmZpZ3VyZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwcm94eVNlcnZlciA9IGF3YWl0IHN0YXJ0UHJveHlTZXJ2ZXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gRGVsZXRlIG5vdGljZXMgY2FjaGUgaWYgaXQgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5ybShwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSA/PyBvcy51c2VySW5mbygpLmhvbWVkaXIsICcuY2RrL2NhY2hlL25vdGljZXMuanNvbicpLCB7IGZvcmNlOiB0cnVlIH0pO1xuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgJy0tcHJveHknLCBwcm94eVNlcnZlci51cmwsXG4gICAgICAgICAgJy0tY2EtYnVuZGxlLXBhdGgnLCBwcm94eVNlcnZlci5jZXJ0UGF0aCxcbiAgICAgICAgXSxcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgQ0RLX0hPTUU6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgcHJveHlTZXJ2ZXIuZ2V0U2VlblJlcXVlc3RzKCk7XG5cbiAgICAgIGV4cGVjdChyZXF1ZXN0cy5tYXAocmVxID0+IHJlcS51cmwpKVxuICAgICAgICAudG9Db250YWluKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYvbm90aWNlcy5qc29uJyk7XG5cbiAgICAgIGNvbnN0IGFjdGlvbnNVc2VkID0gYXdzQWN0aW9uc0Zyb21SZXF1ZXN0cyhyZXF1ZXN0cyk7XG4gICAgICBleHBlY3QoYWN0aW9uc1VzZWQpLnRvQ29udGFpbignQXNzdW1lUm9sZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnNVc2VkKS50b0NvbnRhaW4oJ0NyZWF0ZUNoYW5nZVNldCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBwcm94eVNlcnZlci5zdG9wKCk7XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
|
|
2188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFRd0M7QUFDeEMsb0RBQThEO0FBQzlELG9EQU02QjtBQUM3QiwwREFBdUQ7QUFDdkQsa0RBQXVFO0FBQ3ZFLG9EQUE2RTtBQUM3RSxvREFBa0Y7QUFDbEYsbUNBZ0JtQjtBQUNuQiwyQ0FBMkU7QUFFM0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLElBQUEsZUFBUyxFQUNQLGtCQUFrQixFQUNsQixJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1lBQzlFLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FB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QUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkQsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIENyZWF0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kLFxuICBMaXN0Q2hhbmdlU2V0c0NvbW1hbmQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZCxcbiAgd2FpdFVudGlsU3RhY2tVcGRhdGVDb21wbGV0ZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlc2NyaWJlU2VydmljZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQge1xuICBDcmVhdGVSb2xlQ29tbWFuZCxcbiAgRGVsZXRlUm9sZUNvbW1hbmQsXG4gIERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kLFxuICBMaXN0Um9sZVBvbGljaWVzQ29tbWFuZCxcbiAgUHV0Um9sZVBvbGljeUNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHsgSW52b2tlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHsgUHV0T2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IENyZWF0ZVRvcGljQ29tbWFuZCwgRGVsZXRlVG9waWNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XG5pbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCwgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQge1xuICBDZGtDbGlPcHRpb25zLFxuICBjbG9uZURpcmVjdG9yeSxcbiAgaW50ZWdUZXN0LFxuICByYW5kb21JbnRlZ2VyLFxuICByYW5kb21TdHJpbmcsXG4gIFJFU09VUkNFU19ESVIsXG4gIHJldHJ5LFxuICBzaGVsbCxcbiAgc2xlZXAsXG4gIHdpdGhDREtNaWdyYXRlRml4dHVyZSxcbiAgd2l0aERlZmF1bHRGaXh0dXJlLFxuICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZSxcbiAgd2l0aG91dEJvb3RzdHJhcCxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZSxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSxcbn0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IGF3c0FjdGlvbnNGcm9tUmVxdWVzdHMsIHN0YXJ0UHJveHlTZXJ2ZXIgfSBmcm9tICcuLi8uLi9saWIvcHJveHknO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5kZXNjcmliZSgnY2knLCAoKSA9PiB7XG4gIGludGVnVGVzdChcbiAgICAnb3V0cHV0IHRvIHN0ZGVycicsXG4gICAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCB7XG4gICAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogdHJ1ZSwgb25seVN0ZGVycjogdHJ1ZSB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgICBleHBlY3QoZGlmZk91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICAgIH0pLFxuICApO1xuICBkZXNjcmliZSgnY2k9dHJ1ZScsICgpID0+IHtcbiAgICBpbnRlZ1Rlc3QoXG4gICAgICAnb3V0cHV0IHRvIHN0ZG91dCcsXG4gICAgICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgZXhlY09wdGlvbnM6IENka0NsaU9wdGlvbnMgPSB7XG4gICAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgICAgIG1vZEVudjoge1xuICAgICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgICAgIEpTSUlfU0lMRU5DRV9XQVJOSU5HX0tOT1dOX0JST0tFTl9OT0RFX1ZFUlNJT046ICd0cnVlJyxcbiAgICAgICAgICAgIEpTSUlfU0lMRU5DRV9XQVJOSU5HX1VOVEVTVEVEX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfREVQUkVDQVRFRF9OT0RFX1ZFUlNJT046ICd0cnVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnM6IFsnLS1uby1ub3RpY2VzJ10sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCBleGVjT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9FcXVhbCgnJyk7XG4gICAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KGRpZmZPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfSk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnVlBDIExvb2t1cCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGZpeHR1cmUubG9nKCdNYWtpbmcgc3VyZSB3ZSBhcmUgY2xlYW4gYmVmb3JlIHN0YXJ0aW5nLicpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcblxuICAgIGZpeHR1cmUubG9nKCdTZXR0aW5nIHVwOiBjcmVhdGluZyBhIFZQQyB3aXRoIGtub3duIHRhZ3MnKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG5cbiAgICBmaXh0dXJlLmxvZygnVmVyaWZ5aW5nIHdlIGNhbiBub3cgaW1wb3J0IHRoYXQgVlBDJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdJTVBPUlQnIH0gfSk7XG4gIH0pLFxuKTtcblxuLy8gdGVzdGluZyBhIGNvbnN0cnVjdCB3aXRoIGEgYnVpbHRpbiBOb2RlanMgTGFtYmRhIEZ1bmN0aW9uLlxuLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSB0ZXN0aW5nIHRoZSBzMy5CdWNrZXQgY29uc3RydWN0IHdpdGggdGhlXG4vLyBhdXRvRGVsZXRlT2JqZWN0cyBwcm9wIHNldCB0byB0cnVlLCB3aGljaCBjcmVhdGVzIGEgTGFtYmRhIGJhY2tlZFxuLy8gQ3VzdG9tUmVzb3VyY2UuIFNpbmNlIHRoZSBjb21waWxlZCBMYW1iZGEgY29kZSAoZS5nLiBfX2VudHJ5cG9pbnRfXy5qcylcbi8vIGlzIGJ1bmRsZWQgYXMgcGFydCBvZiB0aGUgQ0RLIHBhY2thZ2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0XG4vLyBpbnRyb2R1Y2UgY2hhbmdlcyB0byB0aGUgY29tcGlsZWQgY29kZSB0aGF0IGNvdWxkIHByZXZlbnQgdGhlIExhbWJkYSBmcm9tXG4vLyBleGVjdXRpbmcuIElmIHdlIGRvLCB0aGlzIHRlc3Qgd2lsbCB0aW1lb3V0IGFuZCBmYWlsLlxuaW50ZWdUZXN0KFxuICAnQ29uc3RydWN0IHdpdGggYnVpbHRpbiBMYW1iZGEgZnVuY3Rpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVpbHRpbi1sYW1iZGEtZnVuY3Rpb24nKTtcbiAgICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xuICB9KSxcbik7XG5cbi8vIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYXNzZXQgYnVuZGxpbmcgZm9yIGFwcHMgdW5kZXIgYSBzdGFnZSBkb2VzIG5vdCBicmVha1xuaW50ZWdUZXN0KFxuICAnU3RhZ2Ugd2l0aCBidW5kbGVkIExhbWJkYSBmdW5jdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidW5kbGluZy1zdGFnZS9CdW5kbGluZ1N0YWNrJyk7XG4gICAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ1R3byB3YXlzIG9mIHNob3dpbmcgdGhlIHZlcnNpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9uMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsndmVyc2lvbiddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHZlcnNpb24yID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLXZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICAgIGV4cGVjdCh2ZXJzaW9uMSkudG9FcXVhbCh2ZXJzaW9uMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnVGVybWluYXRpb24gcHJvdGVjdGlvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICd0ZXJtaW5hdGlvbi1wcm90ZWN0aW9uJztcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUpO1xuXG4gICAgLy8gVHJ5IGEgZGVzdHJveSB0aGF0IHNob3VsZCBmYWlsXG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVzdHJveShzdGFja05hbWUpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBDYW4gdXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBzZXQgZG9lc24ndCBjb250YWluIGNoYW5nZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHsgbW9kRW52OiB7IFRFUk1JTkFUSU9OX1BST1RFQ1RJT046ICdGQUxTRScgfSB9KTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgc3ludGgnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTEnKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdG9waWM2OTgzMTQ5MToge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMS90b3BpYy9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIG9wdGlvbnM6IFtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSxcbiAgICAgIH0pLFxuICAgICkubm90LnRvRXF1YWwoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhgXG5SdWxlczpcbiAgQ2hlY2tCb290c3RyYXBWZXJzaW9uOmApLFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3Rlc3QtMicpKS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0b3BpYzE1MkQ4NEEzNzoge1xuICAgICAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMi90b3BpYzEvUmVzb3VyY2VgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvcGljMkE0RkI1NDdGOiB7XG4gICAgICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMi9SZXNvdXJjZWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3NzbSBwYXJhbWV0ZXIgcHJvdmlkZXIgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhcbiAgICAgICAgWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlzc2luZy1zc20tcGFyYW1ldGVyJyksICctYycsICd0ZXN0OnNzbS1wYXJhbWV0ZXItbmFtZT0vZG9lcy9ub3QvZXhpc3QnXSxcbiAgICAgICAge1xuICAgICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKS5yZXNvbHZlcy50b0NvbnRhaW4oJ1NTTSBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBpbiBhY2NvdW50Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnYXV0b21hdGljIG9yZGVyaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJyk7XG5cbiAgICAvLyBEZXN0cm95IHRoZSBwcm92aWRpbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBjb25zdW1pbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ29yZGVyLXByb3ZpZGluZycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyBvcmRlcmluZyB3aXRoIGNvbmN1cnJlbmN5JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJywgeyBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddIH0pO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdvcmRlci1wcm92aWRpbmcnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICctLWV4Y2x1c2l2ZWx5IHNlbGVjdHMgb25seSBzZWxlY3RlZCBzdGFjaycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIERlcGxveSB0aGUgXCJkZXBlbmRzLW9uLWZhaWxlZFwiIHN0YWNrLCB3aXRoIC0tZXhjbHVzaXZlbHkuIEl0IHdpbGwgTk9UIGZhaWwgKGJlY2F1c2VcbiAgICAvLyBvZiAtLWV4Y2x1c2l2ZWx5KSBhbmQgaXQgV0lMTCBjcmVhdGUgYW4gb3V0cHV0IHdlIGNhbiBjaGVjayBmb3IgdG8gY29uZmlybSB0aGF0IGl0IGRpZFxuICAgIC8vIGdldCBkZXBsb3llZC5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVwZW5kcy1vbi1mYWlsZWQnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tZXhjbHVzaXZlbHknLCAnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIG91dHB1dCB0byBzZWUgdGhhdCB0aGUgc3RhY2sgZGVwbG95ZWRcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tZGVwZW5kcy1vbi1mYWlsZWRgXToge1xuICAgICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZE15VG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjb250ZXh0IHNldHRpbmcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbnRleHRrZXk6ICd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2NvbnRleHQnXSkpLnJlc29sdmVzLnRvQ29udGFpbigndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScpO1xuXG4gICAgICAvLyBUZXN0IHRoYXQgZGVsZXRpbmcgdGhlIGNvbnRleHRrZXkgd29ya3NcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG4gICAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydjb250ZXh0J10pKS5yZXNvbHZlcy5ub3QudG9Db250YWluKCd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyk7XG5cbiAgICAgIC8vIFRlc3QgdGhhdCBmb3JjZWQgZGVsZXRlIG9mIHRoZSBjb250ZXh0IGtleSBkb2VzIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydjb250ZXh0JywgJy1mJywgJy0tcmVzZXQnLCAnY29udGV4dGtleSddKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5jb250ZXh0Lmpzb24nKSk7XG4gICAgfVxuICB9KSxcbik7XG5cbi8vIGJvb3RzdHJhcHBpbmcgYWxzbyBwZXJmb3JtcyBzeW50aGVzaXMuIEFzIGl0IHR1cm5zIG91dCwgYm9vdHN0cmFwLXN0YWdlIHN5bnRoZXNpcyBzdGlsbCBjYXVzZXMgdGhlIGxvb2t1cHMgdG8gYmUgY2FjaGVkLCBtZWFuaW5nIHRoYXQgdGhlIGxvb2t1cCBuZXZlclxuLy8gaGFwcGVucyB3aGVuIHdlIGFjdHVhbGx5IGNhbGwgYGNkayBzeW50aCAtLW5vLWxvb2t1cHNgLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGVycm9yIG5ldmVyIGJlaW5nIHRocm93biwgYmVjYXVzZSBpdCBuZXZlciB0cmllcyB0byBsb29rdXAgYW55dGhpbmcuXG4vLyBGaXggdGhpcyBieSBub3QgdHJ5aW5nIHRvIGJvb3RzdHJhcDsgdGhlcmUncyBubyBuZWVkIHRvIGJvb3RzdHJhcCBhbnl3YXksIHNpbmNlIHRoZSB0ZXN0IG5ldmVyIHRyaWVzIHRvIGRlcGxveSBhbnl0aGluZy5cbmludGVnVGVzdChcbiAgJ2NvbnRleHQgaW4gc3RhZ2UgcHJvcGFnYXRlcyB0byB0b3AnLFxuICB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGl0IGVycm9yIHRvIHByb3ZlIHRoYXQgdGhlIGNvbnRleHQgYnViYmxlcyB1cCwgYW5kIGFsc28gdGhhdCB3ZSBjYW4gZmFpbCBvbiBjb21tYW5kXG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1sb29rdXBzJ10sXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgICAgICB9LFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnJlc29sdmVzLnRvQ29udGFpbignQ29udGV4dCBsb29rdXBzIGhhdmUgYmVlbiBkaXNhYmxlZCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IC0tbWV0aG9kPWRpcmVjdCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9ZGlyZWN0J10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbGwnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBhcm5zID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtKicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGJvdGggc3RhY2tzICh0aGVyZSBhcmUgMiBBUk5zIGluIHRoZSBvdXRwdXQpXG4gICAgZXhwZWN0KGFybnMuc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgYWxsIGNvbmN1cnJlbnRseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbJy0tY29uY3VycmVuY3knLCAnMiddLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChhcm5zLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkb3VibHkgbmVzdGVkIHN0YWNrJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtZG91Ymx5LW5lc3RlZC1zdGFjaycsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ25lc3RlZCBzdGFjayB3aXRoIHBhcmFtZXRlcnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTVEFDS19OQU1FX1BSRUZJWCBpcyB1c2VkIGluIE15VG9waWNQYXJhbSB0byBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXNcbiAgICAvLyBvZiB0aGlzIHRlc3QgdG8gcnVuIGluIHBhcmFsbGVsLCBvdGhld2lzZSB0aGV5IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHNhbWUgU05TIHRvcGljLlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBNeVRvcGljUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1UaGVyZUlzTm9TcG9vbmBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICAgIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gICAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRob3V0IGV4ZWN1dGUgYSBuYW1lZCBjaGFuZ2Ugc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0TmFtZSA9ICdjdXN0b20tY2hhbmdlLXNldC1uYW1lJztcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tZXhlY3V0ZScsICctLWNoYW5nZS1zZXQtbmFtZScsIGNoYW5nZVNldE5hbWVdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG4gICAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gICAgLy8gdmVyaWZ5IGEgY2hhbmdlIHNldCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lXG4gICAgY29uc3QgY2hhbmdlU2V0UmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IExpc3RDaGFuZ2VTZXRzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGNoYW5nZVNldHMgPSBjaGFuZ2VTZXRSZXNwb25zZS5TdW1tYXJpZXMgfHwgW107XG4gICAgZXhwZWN0KGNoYW5nZVNldHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChjaGFuZ2VTZXRzWzBdLkNoYW5nZVNldE5hbWUpLnRvRXF1YWwoY2hhbmdlU2V0TmFtZSk7XG4gICAgZXhwZWN0KGNoYW5nZVNldHNbMF0uU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzZWN1cml0eSByZWxhdGVkIGNoYW5nZXMgd2l0aG91dCBhIENMSSBhcmUgZXhwZWN0ZWQgdG8gZmFpbCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIHJlZGlyZWN0IC9kZXYvbnVsbCB0byBzdGRpbiwgd2hpY2ggbWVhbnMgdGhlcmUgd2lsbCBub3QgYmUgdHR5IGF0dGFjaGVkXG4gICAgLy8gc2luY2UgdGhpcyBzdGFjayBpbmNsdWRlcyBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMsIHRoZSBkZXBsb3ltZW50IHNob3VsZFxuICAgIC8vIGltbWVkaWF0ZWx5IGZhaWwgYmVjYXVzZSB3ZSBjYW4ndCBjb25maXJtIHRoZSBjaGFuZ2VzXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHtcbiAgICAgICAgb3B0aW9uczogWyc8JywgJy9kZXYvbnVsbCddLCAvLyBINHgsIHRoaXMgb25seSB3b3JrcyBiZWNhdXNlIEkgaGFwcGVuIHRvIGtub3cgd2UgcGFzcyBzaGVsbDogdHJ1ZS5cbiAgICAgICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IGZhbHNlLFxuICAgICAgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgICAvLyBFbnN1cmUgc3RhY2sgd2FzIG5vdCBkZXBsb3llZFxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZG9lcyBub3QgZXhpc3QnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2lsZGNhcmQgd2l0aCBvdXRwdXRzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koWydvdXRwdXRzLXRlc3QtKiddLCB7XG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICBleHBlY3Qob3V0cHV0cykudG9FcXVhbCh7XG4gICAgICBbYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LW91dHB1dHMtdGVzdC0xYF06IHtcbiAgICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFNeVRvcGljYCxcbiAgICAgIH0sXG4gICAgICBbYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LW91dHB1dHMtdGVzdC0yYF06IHtcbiAgICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJNeU90aGVyVG9waWNgLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgb3B0aW9uczogWyctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYF0sXG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdUb3BpY05hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YmF6aW5nYWAsXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBpbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzIHRydWUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1uby1leGVjdXRlJywgJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcyddLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcbiAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgZXhwZWN0KHN0YWNrQXJuLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pKTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdSRVZJRVdfSU5fUFJPR1JFU1MnKTtcblxuICAvLyB2ZXJpZnkgYSBjaGFuZ2Ugc2V0IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAvLyBIZXJlLCB3ZSBkbyBub3QgdGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgYWN0dWFsbHkgaW1wb3J0ZWQsIGJlY2F1c2UgdGhhdCBpcyBhIENsb3VkRm9ybWF0aW9uIGZlYXR1cmUsIG5vdCBhIENESyBmZWF0dXJlLlxuICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IExpc3RDaGFuZ2VTZXRzQ29tbWFuZCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSkpO1xuICBjb25zdCBjaGFuZ2VTZXRzID0gY2hhbmdlU2V0UmVzcG9uc2UuU3VtbWFyaWVzIHx8IFtdO1xuICBleHBlY3QoY2hhbmdlU2V0cy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLlN0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLkltcG9ydEV4aXN0aW5nUmVzb3VyY2VzKS50b0VxdWFsKHRydWUpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRob3V0IGltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1uby1leGVjdXRlJ10sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSkpO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gIC8vIHZlcmlmeSBhIGNoYW5nZSBzZXQgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIGFuZCBJbXBvcnRFeGlzdGluZ1Jlc291cmNlcyA9IGZhbHNlXG4gIGNvbnN0IGNoYW5nZVNldFJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgTGlzdENoYW5nZVNldHNDb21tYW5kKHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KSk7XG4gIGNvbnN0IGNoYW5nZVNldHMgPSBjaGFuZ2VTZXRSZXNwb25zZS5TdW1tYXJpZXMgfHwgW107XG4gIGV4cGVjdChjaGFuZ2VTZXRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgZXhwZWN0KGNoYW5nZVNldHNbMF0uU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgZXhwZWN0KGNoYW5nZVNldHNbMF0uSW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMpLnRvRXF1YWwoZmFsc2UpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIG1ldGhvZD1kaXJlY3QgYW5kIGltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMgZmFpbHMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgIG9wdGlvbnM6IFsnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJywgJy0tbWV0aG9kPWRpcmVjdCddLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gIC8vIEVuc3VyZSBzdGFjayB3YXMgbm90IGRlcGxveWVkXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSksXG4gIH0pKSkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICd1cGRhdGUgdG8gc3RhY2sgaW4gUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgd2lsbCBkZWxldGUgc3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBvbmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QGF3d2BdLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdwYXJhbS10ZXN0LTEnKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrSWQ7XG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdST0xMQkFDS19DT01QTEVURScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IG5ld1N0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXdTdGFja1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IG5ld1N0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2tBcm4pLm5vdC50b0VxdWFsKG5ld1N0YWNrQXJuKTsgLy8gbmV3IHN0YWNrIHdhcyBjcmVhdGVkXG4gICAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIGV4cGVjdChuZXdTdGFja1Jlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1hbGxnb29kYCxcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzdGFjayBpbiBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgY2FuIGJlIHVwZGF0ZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9bmljZWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAgIC8vIGJhZCBwYXJhbWV0ZXIgbmFtZSB3aXRoIEAgd2lsbCBwdXQgc3RhY2sgaW50byBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEVcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUBhd3dgXSxcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHdpbGRjYXJkIGFuZCBwYXJhbWV0ZXJzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtKicsIHtcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTE6VG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTI6T3RoZXJUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoYXRzTXlTcG90YCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6RGlzcGxheU5hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUhleVRoZXJlYCxcbiAgICAgICAgJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6T3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QW5vdGhlck9uZWAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMgbXVsdGknLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwYXJhbVZhbDEgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYDtcbiAgICBjb25zdCBwYXJhbVZhbDIgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH09amFnc2hlbWFzaGA7XG5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTMnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcGFyYW1ldGVycycsIGBEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwxfWAsICctLXBhcmFtZXRlcnMnLCBgT3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwyfWBdLFxuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoe1xuICAgICAgUGFyYW1ldGVyS2V5OiAnRGlzcGxheU5hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogcGFyYW1WYWwxLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdPdGhlckRpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMixcbiAgICB9KTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOIGFzIGZsYWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC10b3BpYy1mbGFnYDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm90aWZpY2F0aW9uLWFybnMnLCB0b3BpY0Fybl0sXG4gICAgICB9KTtcblxuICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIHN0YWNrIHdlIGRlcGxveWVkIGhhcyBvdXIgbm90aWZpY2F0aW9uIEFSTlxuICAgICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdub3RpZmljYXRpb24tYXJucycpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXS5Ob3RpZmljYXRpb25BUk5zKS50b0VxdWFsKFt0b3BpY0Fybl0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZVRvcGljQ29tbWFuZCh7XG4gICAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGggbm90aWZpY2F0aW9uIEFSTiBhcyBwcm9wJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHRvcGljTmFtZSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LXRvcGljLXByb3BgO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gIGNvbnN0IHRvcGljQXJuID0gcmVzcG9uc2UuVG9waWNBcm4hO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX05PVElGSUNBVElPTl9BUk5TOiB0b3BpY0FybixcblxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICBjb25zdCBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbdG9waWNBcm5dKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWNBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59KSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMzIxNTNcbmludGVnVGVzdCgnZGVwbG95IHByZXNlcnZlcyBleGlzdGluZyBub3RpZmljYXRpb24gYXJucyB3aGVuIG5vdCBzcGVjaWZpZWQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdG9waWNOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRvcGljYDtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLnNucy5zZW5kKG5ldyBDcmVhdGVUb3BpY0NvbW1hbmQoeyBOYW1lOiB0b3BpY05hbWUgfSkpO1xuICBjb25zdCB0b3BpY0FybiA9IHJlc3BvbnNlLlRvcGljQXJuITtcblxuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycpO1xuXG4gICAgLy8gYWRkIG5vdGlmaWNhdGlvbiBhcm5zIGV4dGVybmFsbHkgdG8gY2RrXG4gICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBVcGRhdGVTdGFja0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgICAgVXNlUHJldmlvdXNUZW1wbGF0ZTogdHJ1ZSxcbiAgICAgICAgTm90aWZpY2F0aW9uQVJOczogW3RvcGljQXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBhd2FpdCB3YWl0VW50aWxTdGFja1VwZGF0ZUNvbXBsZXRlKFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLFxuICAgICAgICBtYXhXYWl0VGltZTogNjAwLFxuICAgICAgfSxcbiAgICAgIHsgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJykgfSxcbiAgICApO1xuXG4gICAgLy8gZGVwbG95IGFnYWluXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJyk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIG5vdGlmaWNhdGlvbiBhcm4gaXMgcHJlc2VydmVkXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJyksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBkZWxldGVzIEFMTCBub3RpZmljYXRpb24gYXJucyB3aGVuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCB0b3BpY05hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdG9waWNgO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljTmFtZSB9KSk7XG4gIGNvbnN0IHRvcGljQXJuID0gcmVzcG9uc2UuVG9waWNBcm4hO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGlmaWNhdGlvbi1hcm5zJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX05PVElGSUNBVElPTl9BUk5TOiB0b3BpY0FybixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIGFybiB3YXMgYWRkZWRcbiAgICBsZXQgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ25vdGlmaWNhdGlvbi1hcm5zJyksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG5cbiAgICAvLyBkZXBsb3kgYWdhaW4gd2l0aCBlbXB0eSBhcnJheVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19OT1RJRklDQVRJT05fQVJOUzogJycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBhcm4gd2FzIGRlbGV0ZWRcbiAgICBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlVG9waWNDb21tYW5kKHtcbiAgICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIG5vdGlmaWNhdGlvbiBBUk4gYXMgcHJvcCBhbmQgZmxhZycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCB0b3BpYzFOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRvcGljMWA7XG4gIGNvbnN0IHRvcGljMk5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdG9waWMxYDtcblxuICBjb25zdCB0b3BpYzFBcm4gPSAoYXdhaXQgZml4dHVyZS5hd3Muc25zLnNlbmQobmV3IENyZWF0ZVRvcGljQ29tbWFuZCh7IE5hbWU6IHRvcGljMU5hbWUgfSkpKS5Ub3BpY0FybiE7XG4gIGNvbnN0IHRvcGljMkFybiA9IChhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChuZXcgQ3JlYXRlVG9waWNDb21tYW5kKHsgTmFtZTogdG9waWMyTmFtZSB9KSkpLlRvcGljQXJuITtcblxuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdub3RpZmljYXRpb24tYXJucycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19OT1RJRklDQVRJT05fQVJOUzogdG9waWMxQXJuLFxuXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogWyctLW5vdGlmaWNhdGlvbi1hcm5zJywgdG9waWMyQXJuXSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICBjb25zdCBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbm90aWZpY2F0aW9uLWFybnMnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbdG9waWMxQXJuLCB0b3BpYzJBcm5dKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWMxQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVUb3BpY0NvbW1hbmQoe1xuICAgICAgICBUb3BpY0FybjogdG9waWMyQXJuLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufSkpO1xuXG4vLyBOT1RFOiB0aGlzIGRvZXNuJ3QgY3VycmVudGx5IHdvcmsgd2l0aCBtb2Rlcm4tc3R5bGUgc3ludGhlc2lzLCBhcyB0aGUgYm9vdHN0cmFwXG4vLyByb2xlIGJ5IGRlZmF1bHQgd2lsbCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGlhbTpQYXNzUm9sZSB0aGUgY3JlYXRlZCByb2xlLlxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHdpdGggcm9sZScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGlmIChmaXh0dXJlLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpICE9PSAnMScpIHtcbiAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3Qtcm9sZWA7XG5cbiAgICBhd2FpdCBkZWxldGVSb2xlKCk7XG5cbiAgICBjb25zdCBjcmVhdGVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmlhbS5zZW5kKFxuICAgICAgbmV3IENyZWF0ZVJvbGVDb21tYW5kKHtcbiAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgUHJpbmNpcGFsOiB7IFNlcnZpY2U6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyB9LFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgICAgIFByaW5jaXBhbDogeyBBV1M6IChhd2FpdCBmaXh0dXJlLmF3cy5zdHMuc2VuZChuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KSkpLkFybiB9LFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmICghY3JlYXRlUmVzcG9uc2UuUm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb2xlIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQhIScpO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlUmVzcG9uc2UuUm9sZS5Bcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9sZSBhcm4gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCEhJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUFybiA9IGNyZWF0ZVJlc3BvbnNlLlJvbGUuQXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChcbiAgICAgICAgbmV3IFB1dFJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgICBSb2xlTmFtZTogcm9sZU5hbWUsXG4gICAgICAgICAgUG9saWN5TmFtZTogJ0RlZmF1bHRQb2xpY3knLFxuICAgICAgICAgIFBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEFjdGlvbjogJyonLFxuICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCByZXRyeShmaXh0dXJlLm91dHB1dCwgJ1RyeWluZyB0byBhc3N1bWUgZnJlc2ggcm9sZScsIHJldHJ5LmZvclNlY29uZHMoMzAwKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5zdHMuc2VuZChcbiAgICAgICAgICBuZXcgQXNzdW1lUm9sZUNvbW1hbmQoe1xuICAgICAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgICAgIFJvbGVTZXNzaW9uTmFtZTogJ3Rlc3RpbmcnLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEluIHByaW5jaXBsZSwgdGhlIHJvbGUgaGFzIHJlcGxpY2F0ZWQgZnJvbSAndXMtZWFzdC0xJyB0byB3aGVyZXZlciB3ZSdyZSB0ZXN0aW5nLlxuICAgICAgLy8gR2l2ZSBpdCBhIGxpdHRsZSBtb3JlIHNsZWVwIHRvIG1ha2Ugc3VyZSBDbG91ZEZvcm1hdGlvbiBpcyBub3QgaGl0dGluZyBhIGJveFxuICAgICAgLy8gdGhhdCBkb2Vzbid0IGhhdmUgaXQgeWV0LlxuICAgICAgYXdhaXQgc2xlZXAoNTAwMCk7XG5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1yb2xlLWFybicsIHJvbGVBcm5dLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEltbWVkaWF0ZWx5IGRlbGV0ZSB0aGUgc3RhY2sgYWdhaW4gYmVmb3JlIHdlIGRlbGV0ZSB0aGUgcm9sZS5cbiAgICAgIC8vXG4gICAgICAvLyBTaW5jZSByb2xlcyBhcmUgc3RpY2t5LCBpZiB3ZSBkZWxldGUgdGhlIHJvbGUgYmVmb3JlIHRoZSBzdGFjaywgc3Vic2VxdWVudCBEZWxldGVTdGFja1xuICAgICAgLy8gb3BlcmF0aW9ucyB3aWxsIGZhaWwgd2hlbiBDbG91ZEZvcm1hdGlvbiB0cmllcyB0byBhc3N1bWUgdGhlIHJvbGUgdGhhdCdzIGFscmVhZHkgZ29uZS5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC0yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVJvbGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBkZWxldGVSb2xlKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgTGlzdFJvbGVQb2xpY2llc0NvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UuUG9saWN5TmFtZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvbGljeSBuYW1lcyBjYW5ub3QgYmUgdW5kZWZpbmVkIGZvciBkZWxldGVSb2xlKCkgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcG9saWN5TmFtZSBvZiByZXNwb25zZS5Qb2xpY3lOYW1lcykge1xuICAgICAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmlhbS5zZW5kKFxuICAgICAgICAgICAgbmV3IERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgICAgICAgICBQb2xpY3lOYW1lOiBwb2xpY3lOYW1lLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChlLm1lc3NhZ2UuaW5kZXhPZignY2Fubm90IGJlIGZvdW5kJykgPiAtMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG4vLyBUT0RPIGFkZCBtb3JlIHRlc3RpbmcgdGhhdCBlbnN1cmVzIHRoZSBzeW1tZXRyeSBvZiB0aGUgZ2VuZXJhdGVkIGNvbnN0cnVjdHMgdG8gdGhlIHJlc291cmNlcy5cblsndHlwZXNjcmlwdCcsICdweXRob24nLCAnY3NoYXJwJywgJ2phdmEnXS5mb3JFYWNoKChsYW5ndWFnZSkgPT4ge1xuICBpbnRlZ1Rlc3QoXG4gICAgYGNkayBtaWdyYXRlICR7bGFuZ3VhZ2V9IGRlcGxveXMgc3VjY2Vzc2Z1bGx5YCxcbiAgICB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUobGFuZ3VhZ2UsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBpZiAobGFuZ3VhZ2UgPT09ICdweXRob24nKSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydwaXAnLCAnaW5zdGFsbCcsICctcicsICdyZXF1aXJlbWVudHMudHh0J10pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KFxuICAgICAgICBmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCxcbiAgICAgICAgeyBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSwgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCk7XG4gICAgfSksXG4gICk7XG59KTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIG1pZ3JhdGUgZ2VuZXJhdGVzIG1pZ3JhdGUuanNvbicsXG4gIHdpdGhDREtNaWdyYXRlRml4dHVyZSgndHlwZXNjcmlwdCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbWlncmF0ZUZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdtaWdyYXRlLmpzb24nKSwgJ3V0ZjgnKTtcbiAgICBjb25zdCBleHBlY3RlZEZpbGUgPSBge1xuICAgIFxcXCIvL1xcXCI6IFxcXCJUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBhZnRlciB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50IG9mIHRoaXMgYXBwIHRvIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgb3JpZ2luYWwgcmVzb3VyY2VzLlxcXCIsXG4gICAgXFxcIlNvdXJjZVxcXCI6IFxcXCJsb2NhbGZpbGVcXFwiXG4gIH1gO1xuICAgIGV4cGVjdChKU09OLnBhcnNlKG1pZ3JhdGVGaWxlKSkudG9FcXVhbChKU09OLnBhcnNlKGV4cGVjdGVkRmlsZSkpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCk7XG4gIH0pLFxuKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiB3aXRoIEFORC9PUiBmaWx0ZXJzIGNvcnJlY3RseSBmaWx0ZXJzIHJlc291cmNlcycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7IFNBTVBMRV9SRVNPVVJDRVM6ICcxJyB9LFxuLy8gICB9KTtcbi8vICAgYXdhaXQgZml4dHVyZS5jZGsoXG4vLyAgICAgWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIHN0YWNrTmFtZSwgJy0tZnJvbS1zY2FuJywgJ25ldycsICctLWZpbHRlcicsICd0eXBlPUFXUzo6U05TOjpUb3BpYyx0YWcta2V5PXRhZzEnLCAndHlwZT1BV1M6OlNRUzo6UXVldWUsdGFnLWtleT10YWczJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpIHtcbi8vICAgICAgICAgcmVzb3VyY2VOYW1lcy5wdXNoKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZml4dHVyZS5sb2coYFJlc291cmNlczogJHtyZXNvdXJjZU5hbWVzfWApO1xuLy8gICAgIGV4cGVjdChyZXNvdXJjZU5hbWVzLnNvbWUoZWxlID0+IGVsZSAmJiBlbGUuaW5jbHVkZXMoJ21pZ3JhdGV0b3BpYzEnKSkpLnRvQmVUcnV0aHkoKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRlcXVldWUxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiBmb3IgcmVzb3VyY2VzIHdpdGggV3JpdGUgT25seSBQcm9wZXJ0aWVzIGdlbmVyYXRlcyB3YXJuaW5ncycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7XG4vLyAgICAgICBMQU1CREFfUkVTT1VSQ0VTOiAnMScsXG4vLyAgICAgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OkxhbWJkYTo6RnVuY3Rpb24sdGFnLWtleT1sYW1iZGEtdGFnJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcblxuLy8gICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUnLCB7XG4vLyAgICAgICBHZW5lcmF0ZWRUZW1wbGF0ZU5hbWU6IHN0YWNrTmFtZSxcbi8vICAgICB9KTtcbi8vICAgICBjb25zdCByZXNvdXJjZU5hbWVzID0gW107XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNwb25zZS5SZXNvdXJjZXMgfHwgW10pIHtcbi8vICAgICAgIGlmIChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCAmJiByZXNvdXJjZS5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBjb25zdCByZWFkbWVQYXRoID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCBzdGFja05hbWUsICdSRUFETUUubWQnKTtcbi8vICAgICBjb25zdCByZWFkbWUgPSBhd2FpdCBmcy5yZWFkRmlsZShyZWFkbWVQYXRoLCAndXRmOCcpO1xuLy8gICAgIGV4cGVjdChyZWFkbWUpLnRvQ29udGFpbignIyMgV2FybmluZ3MnKTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlTmFtZSBvZiByZXNvdXJjZU5hbWVzKSB7XG4vLyAgICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oYCMjIyAke3Jlc291cmNlTmFtZX1gKTtcbi8vICAgICB9XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuWyd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdjc2hhcnAnLCAnamF2YSddLmZvckVhY2goKGxhbmd1YWdlKSA9PiB7XG4gIGludGVnVGVzdChcbiAgICBgY2RrIG1pZ3JhdGUgLS1mcm9tLXN0YWNrIGNyZWF0ZXMgZGVwbG95YWJsZSAke2xhbmd1YWdlfSBhcHBgLFxuICAgIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBjb25zdCBtaWdyYXRlU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgQ3JlYXRlU3RhY2tDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUsXG4gICAgICAgICAgVGVtcGxhdGVCb2R5OiBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdyZXNvdXJjZXMnLCAndGVtcGxhdGVzJywgJ3Nxcy10ZW1wbGF0ZS5qc29uJyksXG4gICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHN0YWNrU3RhdHVzID0gJ0NSRUFURV9JTl9QUk9HUkVTUyc7XG4gICAgICAgIHdoaWxlIChzdGFja1N0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgICAgICBzdGFja1N0YXR1cyA9IGF3YWl0IChcbiAgICAgICAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogbWlncmF0ZVN0YWNrTmFtZSB9KSlcbiAgICAgICAgICApLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzITtcbiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgbWlncmF0ZVN0YWNrTmFtZSwgJy0tZnJvbS1zdGFjayddLCB7XG4gICAgICAgICAgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sXG4gICAgICAgICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsXG4gICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjZCcsIHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgbWlncmF0ZVN0YWNrTmFtZSldKTtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydkZXBsb3knLCBtaWdyYXRlU3RhY2tOYW1lXSwge1xuICAgICAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgICBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xufSk7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gICAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gICAgZXhwZWN0KGRpZmYyKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gICAgLy8gV2UgY2FuIG1ha2UgaXQgZmFpbCBieSBwYXNzaW5nIC0tZmFpbFxuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZW5hYmxlRGlmZk5vRmFpbCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IGZhbHNlLCBlbmFibGVEaWZmTm9GYWlsOiBmYWxzZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiBmYWxzZSwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB0cnVlLCBlbmFibGVEaWZmTm9GYWlsOiBmYWxzZSB9KTtcbiAgICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB0cnVlLCBlbmFibGVEaWZmTm9GYWlsOiB0cnVlIH0pO1xuICAgIGF3YWl0IGRpZmZTaG91bGRGYWlsV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gICAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogdW5kZWZpbmVkLCBlbmFibGVEaWZmTm9GYWlsOiB0cnVlIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHByb3BzOiBEaWZmUGFyYW1ldGVycykge1xuICAgICAgYXdhaXQgZXhwZWN0KGRpZmYocHJvcHMpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmZTaG91bGRGYWlsV2l0aChwcm9wczogRGlmZlBhcmFtZXRlcnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpZmYocHJvcHM6IERpZmZQYXJhbWV0ZXJzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGF3YWl0IHVwZGF0ZUNvbnRleHQocHJvcHMuZW5hYmxlRGlmZk5vRmFpbCk7XG4gICAgICBjb25zdCBmbGFnID0gcHJvcHMuZmFpbCAhPSBudWxsID8gKHByb3BzLmZhaWwgPyAnLS1mYWlsJyA6ICctLW5vLWZhaWwnKSA6ICcnO1xuXG4gICAgICByZXR1cm4gZml4dHVyZS5jZGsoWydkaWZmJywgZmxhZywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgICBjZGtKc29uLmNvbnRleHQgPSB7XG4gICAgICAgIC4uLmNka0pzb24uY29udGV4dCxcbiAgICAgICAgJ2F3cy1jZGs6ZW5hYmxlRGlmZk5vRmFpbCc6IGVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICB9O1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICB9XG5cbiAgICB0eXBlIERpZmZQYXJhbWV0ZXJzID0geyBmYWlsPzogYm9vbGVhbjsgZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbiB9O1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCBvbiBtdWx0aXBsZSBzdGFja3MgZXhpdHMgd2l0aCBlcnJvciBpZiBhbnkgb2YgdGhlIHN0YWNrcyBjb250YWlucyBhIGRpZmYnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICAgIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInKTtcbiAgICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gICAgLy8gV0hFTiAvIFRIRU5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tZmFpbCB3aXRoIG11bHRpcGxlIHN0YWNrIGV4aXRzIHdpdGggaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG4gICAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gICAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcblxuICAgIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICAgIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAgIC8vIFdIRU4gLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiB3aXRoIGxhcmdlIGNoYW5nZXNldCBkb2VzIG5vdCBmYWlsJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggb25seSBvbmUgSUFNIHJvbGVcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIE5VTUJFUl9PRl9ST0xFUzogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU4gLSBhZGRpbmcgYW4gYWRkaXRpb25hbCByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICAgIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICAgIGV4cGVjdChkaWZmKS50b01hdGNoKC9Bc3N1bWluZyByb2xlIC4qZmlsZS1wdWJsaXNoaW5nLXJvbGUvKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdzdWNjZXNzOiBQdWJsaXNoZWQnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiBkb2VzbnQgc2hvdyByZXNvdXJjZSBtZXRhZGF0YSBjaGFuZ2VzJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggZGVmYXVsdCByZXNvdXJjZSBtZXRhZGF0YVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtZXRhZGF0YScpO1xuXG4gICAgLy8gV0hFTiAtIGNoYW5naW5nIHJlc291cmNlIG1ldGFkYXRhIHZhbHVlXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWV0YWRhdGEnKV0sIHtcbiAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgSU5URUdfTUVUQURBVEFfVkFMVUU6ICdjdXN0b20nLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFzc2VydCB0aGVyZSBhcmUgbm8gY2hhbmdlc1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiBzaG93cyByZXNvdXJjZSBtZXRhZGF0YSBjaGFuZ2VzIHdpdGggLS1uby1jaGFuZ2Utc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU4gLSBzbWFsbCBpbml0aWFsIHN0YWNrIHdpdGggZGVmYXVsdCByZXNvdXJjZSBtZXRhZGF0YVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtZXRhZGF0YScpO1xuXG4gICAgLy8gV0hFTiAtIGNoYW5naW5nIHJlc291cmNlIG1ldGFkYXRhIHZhbHVlXG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZiAtLW5vLWNoYW5nZS1zZXQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ21ldGFkYXRhJyldLCB7XG4gICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIElOVEVHX01FVEFEQVRBX1ZBTFVFOiAnY3VzdG9tJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBc3NlcnQgdGhlcmUgYXJlIGNoYW5nZXNcbiAgICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgd2l0aCBsYXJnZSBjaGFuZ2VzZXQgYW5kIGN1c3RvbSB0b29sa2l0IHN0YWNrIG5hbWUgYW5kIHF1YWxpZmllciBkb2VzIG5vdCBmYWlsJywgd2l0aG91dEJvb3RzdHJhcChhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBCb290c3RyYXBwaW5nIHdpdGggY3VzdG9tIHRvb2xraXQgc3RhY2sgbmFtZSBhbmQgcXVhbGlmaWVyXG4gIGNvbnN0IHF1YWxpZmllciA9ICdhYmMxMTExJztcbiAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZSA9ICdjdXN0b20tc3RhY2syJztcbiAgYXdhaXQgZml4dHVyZS5jZGtCb290c3RyYXBNb2Rlcm4oe1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICBxdWFsaWZpZXI6IHF1YWxpZmllcixcbiAgfSk7XG5cbiAgLy8gRGVwbG95aW5nIHNtYWxsIGluaXRpYWwgc3RhY2sgd2l0aCBvbmx5IG9uZSBJQU0gcm9sZVxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaWFtLXJvbGVzJywge1xuICAgIG1vZEVudjoge1xuICAgICAgTlVNQkVSX09GX1JPTEVTOiAnMScsXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS10b29sa2l0LXN0YWNrLW5hbWUnLCB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU4gLSBhZGRpbmcgYSByb2xlIHdpdGggYSB0b24gb2YgbWV0YWRhdGEgdG8gY3JlYXRlIGEgbGFyZ2UgZGlmZlxuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgdG9vbGtpdFN0YWNrTmFtZSwgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2lhbS1yb2xlcycpXSwge1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgbW9kRW52OiB7XG4gICAgICBOVU1CRVJfT0ZfUk9MRVM6ICcyJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBBc3NlcnQgdGhhdCB0aGUgQ0xJIGFzc3VtZXMgdGhlIGZpbGUgcHVibGlzaGluZyByb2xlOlxuICBleHBlY3QoZGlmZikudG9NYXRjaCgvQXNzdW1pbmcgcm9sZSAuKmZpbGUtcHVibGlzaGluZy1yb2xlLyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ3N1Y2Nlc3M6IFB1Ymxpc2hlZCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLXBlcm1pc3Npb24tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3kgaW5mb3JtYXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoW1xuICAgICAgJ2RpZmYnLFxuICAgICAgJy0tc2VjdXJpdHktb25seScsXG4gICAgICBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyksXG4gICAgXSk7XG4gICAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0IG5hbWUg4pSCIFBlcm1pc3Npb25zQm91bmRhcnkgICAgICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke3Blcm1pc3Npb24tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3l9IOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgdGVzdE5hbWUgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U6IHsg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICDilIIgICBOYW1lOiB3aHksIFBhdGg6IC9ob3cvICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbmA7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0IG5hbWUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCd0ZXN0TmFtZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZTogeycpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ05hbWU6IHdoeSwgUGF0aDogL2hvdy8nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCd9Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1wZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICdkaWZmJyxcbiAgICAgICctLXNlY3VyaXR5LW9ubHknLFxuICAgICAgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpLFxuICAgIF0pO1xuICAgIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7cGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeX0gICAg4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiBuaWNlV29yayAgICAgICAgICAg4pSCIE1hbmFnZWRQb2xpY3lBcm46IGFybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3Mg4pSCIE5hbWU6IGZvclNTTywgUGF0aDogICAgICAgICAgICAg4pSCXG5gO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdwZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0IG5hbWUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCduaWNlV29yaycpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ01hbmFnZWRQb2xpY3lBcm46IGFybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3MnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiBmb3JTU08sIFBhdGg6Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1hc3NpZ25tZW50IGluZm9ybWF0aW9uJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hc3NpZ25tZW50JyldKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICAgICAgICAgICAg4pSCIFBlcm1pc3Npb25TZXRBcm4gICAgICAgIOKUgiBQcmluY2lwYWxJZCAgICAgICAgICAgICAgICAgIOKUgiBQcmluY2lwYWxUeXBlIOKUgiBUYXJnZXRJZCAgICAg4pSCIFRhcmdldFR5cGUgIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7YXNzaWdubWVudH0g4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiBhcm46YXdzOnNzbzo6OnRlc3R2YWx1ZSDilIIgMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtdGVzdCDilIIgVVNFUiAgICAgICAgICDilIIgMTExMTExMTExMTExIOKUgiBBV1NfQUNDT1VOVCDilIJcbiAgIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuYDtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fzc2lnbm1lbnQnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0luc3RhbmNlQXJuJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25TZXRBcm4nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6OnRlc3R2YWx1ZScpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsSWQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCcxMTExMTExMS0yMjIyLTMzMzMtNDQ0NC10ZXN0Jyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdQcmluY2lwYWxUeXBlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVVNFUicpO1xuXG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVGFyZ2V0SWQnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCcxMTExMTExMTExMTEnKTtcblxuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldFR5cGUnKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdBV1NfQUNDT1VOVCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYWNjZXNzLWNvbnRyb2wgaW5mb3JtYXRpb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFjY2Vzcy1jb250cm9sJyldKTtcbiAgICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgIOKUgiBBY2Nlc3NDb250cm9sQXR0cmlidXRlcyAgICAgICAgIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7aW5zdGFuY2VBY2Nlc3NDb250cm9sQ29uZmlnfSDilIIgYXJuOmF3czp0ZXN0OnRlc3R2YWx1ZSDilIIgS2V5OiBmaXJzdCwgVmFsdWVzOiBbYV0gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogc2Vjb25kLCBWYWx1ZXM6IFtiXSAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHRoaXJkLCBWYWx1ZXM6IFtjXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBmb3VydGgsIFZhbHVlczogW2RdICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogZmlmdGgsIFZhbHVlczogW2VdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHNpeHRoLCBWYWx1ZXM6IFtmXSAgICAgICAgIOKUglxuICAg4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5gO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignaW5zdGFuY2VBY2Nlc3NDb250cm9sQ29uZmlnJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdBY2Nlc3NDb250cm9sQXR0cmlidXRlcycpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogZmlyc3QsIFZhbHVlczogW2FdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBzZWNvbmQsIFZhbHVlczogW2JdJyk7XG4gICAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZvdXJ0aCwgVmFsdWVzOiBbZF0nKTtcbiAgICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXScpO1xuICAgIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogc2l4dGgsIFZhbHVlczogW2ZdJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzbyBhY2Nlc3MgY29udHJvbCBjb25maWcnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFjY2Vzcy1jb250cm9sJyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knKV0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpXSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1hc3NpZ25tZW50JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hc3NpZ25tZW50JyldKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgY2hhbmdlcyBhcmUgcHJlc2VudCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9ICdpYW0tdGVzdCc7XG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSldKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgJ2V4aXRlZCB3aXRoIGVycm9yJyxcbiAgICApO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgXCJjZGsgZGlmZiAtLXF1aWV0IGRvZXMgbm90IHByaW50ICdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyBtZXNzYWdlIGZvciBzdGFja3Mgd2hpY2ggaGF2ZSBubyBkaWZmZXJlbmNlc1wiLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTEnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tcXVpZXQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGRpZmYpLm5vdC50b0NvbnRhaW4oJ1N0YWNrIHRlc3QtMScpO1xuICAgIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHN0YWNrIHdpdGggZG9ja2VyIGFzc2V0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RvY2tlcicpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBhbmQgdGVzdCBzdGFjayB3aXRoIGxhbWJkYSBhc3NldCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhQXJuID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuICAgIGlmIChsYW1iZGFBcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgTGFtYmRhIEFSTiBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBJbnZva2VDb21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBsYW1iZGFBcm4sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG91dHB1dC5QYXlsb2FkPy50cmFuc2Zvcm1Ub1N0cmluZygpKSkudG9Db250YWluKCdkZWFyIGFzc2V0Jyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgc3RhY2sgd2l0aCBMYW1iZGEgQXNzZXQgdG8gT2JqZWN0IExvY2stZW5hYmxlZCBhc3NldCBidWNrZXQnLCB3aXRob3V0Qm9vdHN0cmFwKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEJvb3RzdHJhcHBpbmcgd2l0aCBjdXN0b20gdG9vbGtpdCBzdGFjayBuYW1lIGFuZCBxdWFsaWZpZXJcbiAgY29uc3QgcXVhbGlmaWVyID0gZml4dHVyZS5xdWFsaWZpZXI7XG4gIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSBmaXh0dXJlLmJvb3RzdHJhcFN0YWNrTmFtZTtcbiAgYXdhaXQgZml4dHVyZS5jZGtCb290c3RyYXBNb2Rlcm4oe1xuICAgIHZlcmJvc2U6IHRydWUsXG4gICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICBxdWFsaWZpZXI6IHF1YWxpZmllcixcbiAgfSk7XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGBjZGstJHtxdWFsaWZpZXJ9LWFzc2V0cy0ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0tJHtmaXh0dXJlLmF3cy5yZWdpb259YDtcbiAgYXdhaXQgZml4dHVyZS5hd3MuczMuc2VuZChuZXcgUHV0T2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb246IHtcbiAgICAgIE9iamVjdExvY2tFbmFibGVkOiAnRW5hYmxlZCcsXG4gICAgICBSdWxlOiB7XG4gICAgICAgIERlZmF1bHRSZXRlbnRpb246IHtcbiAgICAgICAgICBEYXlzOiAxLFxuICAgICAgICAgIE1vZGU6ICdHT1ZFUk5BTkNFJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSkpO1xuXG4gIC8vIERlcGxveSBhIHN0YWNrIHRoYXQgZGVmaW5pdGVseSBjb250YWlucyBhIGZpbGUgYXNzZXRcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS10b29sa2l0LXN0YWNrLW5hbWUnLCB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgJy0tY29udGV4dCcsIGBAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllcj0ke3F1YWxpZmllcn1gLFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFRIRU4gLSBzaG91bGQgbm90IGZhaWwuIE5vdyBjbGVhbiB0aGUgYnVja2V0IHdpdGggZ292ZXJuYW5jZSBieXBhc3M6IGEgcmVndWxhciBkZWxldGVcbiAgLy8gb3BlcmF0aW9uIHdpbGwgZmFpbC5cbiAgYXdhaXQgZml4dHVyZS5hd3MuZW1wdHlCdWNrZXQoYnVja2V0TmFtZSwgeyBieXBhc3NHb3Zlcm5hbmNlOiB0cnVlIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAgICAnY29uZGl0aW9uYWwtcmVzb3VyY2UnLFxuICAgICAgJ2RvY2tlcicsXG4gICAgICAnZG9ja2VyLXdpdGgtY3VzdG9tLWZpbGUnLFxuICAgICAgJ2ZhaWxlZCcsXG4gICAgICAnaWFtLXRlc3QnLFxuICAgICAgJ2xhbWJkYScsXG4gICAgICAnbWlzc2luZy1zc20tcGFyYW1ldGVyJyxcbiAgICAgICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgJ291dHB1dHMtdGVzdC0xJyxcbiAgICAgICdvdXRwdXRzLXRlc3QtMicsXG4gICAgICAncGFyYW0tdGVzdC0xJyxcbiAgICAgICdwYXJhbS10ZXN0LTInLFxuICAgICAgJ3BhcmFtLXRlc3QtMycsXG4gICAgICAndGVybWluYXRpb24tcHJvdGVjdGlvbicsXG4gICAgICAndGVzdC0xJyxcbiAgICAgICd0ZXN0LTInLFxuICAgICAgJ3dpdGgtbmVzdGVkLXN0YWNrJyxcbiAgICAgICd3aXRoLW5lc3RlZC1zdGFjay11c2luZy1wYXJhbWV0ZXJzJyxcbiAgICAgICdvcmRlci1jb25zdW1pbmcnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjaykpO1xuICAgIH1cbiAgfSksXG4pO1xuXG4vKipcbiAqIFR5cGUgdG8gc3RvcmUgc3RhY2sgZGVwZW5kZW5jaWVzIHJlY3Vyc2l2ZWx5XG4gKi9cbnR5cGUgRGVwZW5kZW5jeURldGFpbHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXTtcbn07XG5cbnR5cGUgU3RhY2tEZXRhaWxzID0ge1xuICBpZDogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lEZXRhaWxzW107XG59O1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbiddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndGVzdC0xJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd3aXRoLW5lc3RlZC1zdGFjaycsXG4gICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdsaXN0LXN0YWNrcy9EZXBlbmRlbnRTdGFjaycsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnbGlzdC1zdGFja3MvRGVwZW5kZW50U3RhY2svSW5uZXJEZXBlbmRlbnRTdGFjaycsXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MvRGVwZW5kZW50U3RhY2sxJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2xpc3QtbXVsdGlwbGUtZGVwZW5kZW50LXN0YWNrcy9EZXBlbmRlbnRTdGFjazInLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTdGFja0RlcGVuZGVuY2llcyhzdGFjazogU3RhY2tEZXRhaWxzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmlkKTtcblxuICAgICAgZnVuY3Rpb24gdmFsaWRhdGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGRlcGVuZGVuY3kuaWQpO1xuICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZURlcGVuZGVuY2llcyhkZXBlbmRlbmN5LmRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFjay5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWxpZGF0ZURlcGVuZGVuY2llcyhzdGFjay5kZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICAgIHZhbGlkYXRlU3RhY2tEZXBlbmRlbmNpZXMoc3RhY2spO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICBuYW1lOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgZW52aXJvbWVudDoge1xuICAgICAgICAgIGFjY291bnQ6ICd1bmtub3duLWFjY291bnQnLFxuICAgICAgICAgIHJlZ2lvbjogJ3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgICBuYW1lOiAnYXdzOi8vdW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgICAgbmFtZTogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICAgIGVudmlyb21lbnQ6IHtcbiAgICAgICAgICBhY2NvdW50OiAndW5rbm93bi1hY2NvdW50JyxcbiAgICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicsXG4gICAgICAgICAgbmFtZTogJ2F3czovL3Vua25vd24tYWNjb3VudC91bmtub3duLXJlZ2lvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrLmlkKSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjay5uYW1lKSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQuYWNjb3VudCk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQubmFtZSk7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQucmVnaW9uKTtcbiAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBzdGFjay5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoZGVwZW5kZW5jeS5pZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzeW50aGluZyBhIHN0YWdlIHdpdGggZXJyb3JzIGxlYWRzIHRvIGZhaWx1cmUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJ10sIHtcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLWVycm9ycycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdUaGlzIGlzIGFuIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnc3ludGhpbmcgYSBzdGFnZSB3aXRoIGVycm9ycyBjYW4gYmUgc3VwcHJlc3NlZCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1uby12YWxpZGF0aW9uJ10sIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLWVycm9ycycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3N5bnRoIC0tcXVpZXQgY2FuIGJlIHNwZWNpZmllZCBpbiBjZGsuanNvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBjZGtKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpLCAndXRmOCcpKTtcbiAgICBjZGtKc29uID0ge1xuICAgICAgLi4uY2RrSnNvbixcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgIH07XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgICBjb25zdCBzeW50aE91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gICAgZXhwZWN0KHN5bnRoT3V0cHV0KS5ub3QudG9Db250YWluKCd0b3BpYzE1MkQ4NEEzNycpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBzdGFjayB3aXRob3V0IHJlc291cmNlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRob3V0IHJlc291cmNlc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdjb25kaXRpb25hbC1yZXNvdXJjZScsIHsgbW9kRW52OiB7IE5PX1JFU09VUkNFOiAnVFJVRScgfSB9KTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIGJ1dCBub3QgZGVwbG95ZWQgdGhlIHN0YWNrLlxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKSB9KSxcbiAgICAgICksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ2NvbmRpdGlvbmFsLXJlc291cmNlIGRvZXMgbm90IGV4aXN0Jyk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIHdpdGggcmVzb3VyY2VzXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJyk7XG5cbiAgICAvLyBUaGVuIGFnYWluIFdJVEhPVVQgcmVzb3VyY2VzICh0aGlzIHNob3VsZCBkZXN0cm95IHRoZSBzdGFjaylcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnLCB7IG1vZEVudjogeyBOT19SRVNPVVJDRTogJ1RSVUUnIH0gfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2NvbmRpdGlvbmFsLXJlc291cmNlJykgfSksXG4gICAgICApLFxuICAgICkucmVqZWN0cy50b1Rocm93KCdjb25kaXRpb25hbC1yZXNvdXJjZSBkb2VzIG5vdCBleGlzdCcpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBubyBzdGFja3Mgd2l0aCAtLWlnbm9yZS1uby1zdGFja3MnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBlbXB0eSBhcnJheSBmb3Igc3RhY2sgbmFtZXNcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShbXSwge1xuICAgICAgb3B0aW9uczogWyctLWlnbm9yZS1uby1zdGFja3MnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLW5vLXN0YWNrcycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2RlcGxveSBubyBzdGFja3MgZXJyb3InLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBlbXB0eSBhcnJheSBmb3Igc3RhY2sgbmFtZXNcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmaXh0dXJlLmNka0RlcGxveShbXSwge1xuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS13aXRoLW5vLXN0YWNrcycsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdJQU0gZGlmZicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaWFtLXRlc3QnKV0pO1xuXG4gICAgLy8gUm91Z2hseSBjaGVjayBmb3IgYSB0YWJsZSBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAt4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAgLy8g4pSCICAg4pSCIFJlc291cmNlICAgICAgICDilIIgRWZmZWN0IOKUgiBBY3Rpb24gICAgICAgICDilIIgUHJpbmNpcGFsICAgICAgICAgICAgICAgICAgICAg4pSCIENvbmRpdGlvbiDilIJcbiAgICAvLyDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgICAvLyDilIIgKyDilIIgJHtTb21lUm9sZS5Bcm59IOKUgiBBbGxvdyAg4pSCIHN0czpBc3N1bWVSb2xlIOKUgiBTZXJ2aWNlOmVjMi5hbWF6b25hd3MuY29tICAgICDilIIgICAgICAgICAgIOKUglxuICAgIC8vIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuXG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCcke1NvbWVSb2xlLkFybn0nKTtcbiAgICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ3N0czpBc3N1bWVSb2xlJyk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdlYzIuYW1hem9uYXdzLmNvbScpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2Zhc3QgZGVwbG95JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gd2UgYXJlIHVzaW5nIGEgc3RhY2sgd2l0aCBhIG5lc3RlZCBzdGFjayBiZWNhdXNlIENGTiB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvXG4gICAgLy8gdXBkYXRlIGEgbmVzdGVkIHN0YWNrLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHZlcmlmeSB0aGF0IHVwZGF0ZXMgYXJlIGFjdHVhbGx5XG4gICAgLy8gc2tpcHBlZCB1bmxlc3MgLS1mb3JjZSBpcyBzcGVjaWZpZWQuXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDEgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcblxuICAgIC8vIERlcGxveSB0aGUgc2FtZSBzdGFjayBhZ2FpbiwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBjaGFuZ2Ugc2V0IGNyZWF0ZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snKTtcbiAgICBjb25zdCBjaGFuZ2VTZXQyID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gICAgZXhwZWN0KGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpLnRvRXF1YWwoY2hhbmdlU2V0MS5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggLS1mb3JjZSwgbm93IHdlIHNob3VsZCBjcmVhdGUgYSBjaGFuZ2VzZXRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS1mb3JjZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDMgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0Mi5DaGFuZ2VTZXRJZCk7XG5cbiAgICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggdGFncywgZXhwZWN0ZWQgdG8gY3JlYXRlIGEgbmV3IGNoYW5nZXNldFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSByZXNvdXJjZXMgZGlkbid0IGNoYW5nZS5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS10YWdzJywgJ2tleT12YWx1ZSddIH0pO1xuICAgIGNvbnN0IGNoYW5nZVNldDQgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0NC5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RDaGFuZ2VTZXQoKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tBcm4gfSkpO1xuICAgICAgaWYgKCFyZXNwb25zZS5TdGFja3M/LlswXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZ2V0IGEgQ2hhbmdlU2V0IGF0IGFsbCcpO1xuICAgICAgfVxuICAgICAgZml4dHVyZS5sb2coYEZvdW5kIENoYW5nZSBTZXQgJHtyZXNwb25zZS5TdGFja3M/LlswXS5DaGFuZ2VTZXRJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5TdGFja3M/LlswXTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZmFpbGVkIGRlcGxveSBkb2VzIG5vdCBoYW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gdGhpcyB3aWxsIGhhbmcgaWYgd2UgaW50cm9kdWNlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQwMyBhZ2Fpbi5cbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koJ2ZhaWxlZCcpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnY2FuIHN0aWxsIGxvYWQgb2xkIGFzc2VtYmxpZXMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBjeEFzbURpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1pbnRlZy1jeCcpO1xuXG4gICAgY29uc3QgdGVzdEFzc2VtYmxpZXNEaXJlY3RvcnkgPSBwYXRoLmpvaW4oUkVTT1VSQ0VTX0RJUiwgJ2Nsb3VkLWFzc2VtYmxpZXMnKTtcbiAgICBmb3IgKGNvbnN0IGFzbWRpciBvZiBhd2FpdCBsaXN0Q2hpbGREaXJzKHRlc3RBc3NlbWJsaWVzRGlyZWN0b3J5KSkge1xuICAgICAgZml4dHVyZS5sb2coYEFTU0VNQkxZICR7YXNtZGlyfWApO1xuICAgICAgYXdhaXQgY2xvbmVEaXJlY3RvcnkoYXNtZGlyLCBjeEFzbURpcik7XG5cbiAgICAgIC8vIFNvbWUgZmlsZXMgaW4gdGhlIGFzbSBkaXJlY3RvcnkgdGhhdCBoYXZlIGEgLmpzIGV4dGVuc2lvbiBhcmVcbiAgICAgIC8vIGFjdHVhbGx5IHRyZWF0ZWQgYXMgdGVtcGxhdGVzLiBFdmFsdWF0ZSB0aGVtIHVzaW5nIE5vZGVKUy5cbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGxpc3RDaGlsZHJlbihjeEFzbURpciwgKGZ1bGxQYXRoKSA9PiBQcm9taXNlLnJlc29sdmUoZnVsbFBhdGguZW5kc1dpdGgoJy5qcycpKSk7XG4gICAgICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gdGVtcGxhdGUucmVwbGFjZSgvLmpzJC8sICcnKTtcbiAgICAgICAgYXdhaXQgc2hlbGwoW3Byb2Nlc3MuZXhlY1BhdGgsIHRlbXBsYXRlLCAnPicsIHRhcmdldE5hbWVdLCB7XG4gICAgICAgICAgY3dkOiBjeEFzbURpcixcbiAgICAgICAgICBvdXRwdXRzOiBbZml4dHVyZS5vdXRwdXRdLFxuICAgICAgICAgIG1vZEVudjoge1xuICAgICAgICAgICAgVEVTVF9BQ0NPVU5UOiBhd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCksXG4gICAgICAgICAgICBURVNUX1JFR0lPTjogZml4dHVyZS5hd3MucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgdGhpcyBkaXJlY3RvcnkgYXMgYSBDbG91ZCBBc3NlbWJseVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsIGN4QXNtRGlyLCAnLXYnLCAnc3ludGgnXSk7XG5cbiAgICAgIC8vIEFzc2VydCB0aGF0IHRoZXJlIHdhcyBubyBwcm92aWRlckVycm9yIGluIENESydzIHN0ZGVyclxuICAgICAgLy8gQmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBhcHAvZnJhbWV3b3JrIHRvIGFjdHVhbGx5IGVycm9yIGluIGNhc2UgdGhlXG4gICAgICAvLyBwcm92aWRlciBmYWlscywgd2UgaW5zcGVjdCB0aGUgbG9ncyBoZXJlLlxuICAgICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignJHByb3ZpZGVyRXJyb3InKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnZ2VuZXJhdGluZyBhbmQgbG9hZGluZyBhc3NlbWJseScsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGFzbU91dHB1dERpciA9IGAke2ZpeHR1cmUuaW50ZWdUZXN0RGlyfS1jZGstaW50ZWctYXNtYDtcbiAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsncm0nLCAnLXJmJywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgICAvLyBTeW50aGVzaXplIGEgQ2xvdWQgQXNzZW1ibHkgdG90aGUgZGVmYXVsdCBkaXJlY3RvcnkgKGNkay5vdXQpIGFuZCBhIHNwZWNpZmljIGRpcmVjdG9yeS5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJ10pO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1vdXRwdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAgIC8vIGNkay5vdXQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgaW5kaWNhdGVkIC0tb3V0cHV0IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydkaWZmJywgJ2Nkay5vdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuICdscycgdGhlIHN5bnRoZXNpemVkIGFzbS5cbiAgICAvLyBDaGFuZ2UgdG8gc29tZSByYW5kb20gZGlyZWN0b3J5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgYWNjaWRlbnRhbGx5IGxvYWRpbmcgY2RrLmpzb25cbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsIGFzbU91dHB1dERpciwgJ2xzJ10sIHsgY3dkOiBvcy50bXBkaXIoKSB9KTtcbiAgICAvLyBTYW1lIHN0YWNrcyB3ZSBrbm93IGFyZSBpbiB0aGUgYXBwXG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tbGFtYmRhYCk7XG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0xYCk7XG4gICAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yYCk7XG5cbiAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiB1c2UgJy4nIGFuZCBqdXN0IHN5bnRoICx0aGUgZ2VuZXJhdGVkIGFzbVxuICAgIGNvbnN0IHN0YWNrVGVtcGxhdGUgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgJy4nLCAnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSwge1xuICAgICAgY3dkOiBhc21PdXRwdXREaXIsXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0YWNrVGVtcGxhdGUpLnRvQ29udGFpbigndG9waWMxNTJEODRBMzcnKTtcblxuICAgIC8vIERlcGxveSBhIExhbWJkYSBmcm9tIHRoZSBjb3BpZWQgYXNtXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHsgb3B0aW9uczogWyctYScsICcuJ10sIGN3ZDogYXNtT3V0cHV0RGlyIH0pO1xuXG4gICAgLy8gUmVtb3ZlIChyZW5hbWUpIHRoZSBvcmlnaW5hbCBjdXN0b20gZG9ja2VyIGZpbGUgdGhhdCB3YXMgdXNlZCBkdXJpbmcgc3ludGguXG4gICAgLy8gdGhpcyB2ZXJpZmllcyB0aGF0IHRoZSBhc3NlbWx5IGhhcyBhIGNvcHkgb2YgaXQgYW5kIHRoYXQgdGhlIG1hbmlmZXN0IHVzZXNcbiAgICAvLyByZWxhdGl2ZSBwYXRocyB0byByZWZlcmVuY2UgdG8gaXQuXG4gICAgY29uc3QgY3VzdG9tRG9ja2VyRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2RvY2tlcicsICdEb2NrZXJmaWxlLkN1c3RvbScpO1xuICAgIGF3YWl0IGZzLnJlbmFtZShjdXN0b21Eb2NrZXJGaWxlLCBgJHtjdXN0b21Eb2NrZXJGaWxlfX5gKTtcbiAgICB0cnkge1xuICAgICAgLy8gZGVwbG95IGEgZG9ja2VyIGltYWdlIHdpdGggY3VzdG9tIGZpbGUgd2l0aG91dCBzeW50aCAodXNlcyBhc3NldHMpXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZG9ja2VyLXdpdGgtY3VzdG9tLWZpbGUnLCB7IG9wdGlvbnM6IFsnLWEnLCAnLiddLCBjd2Q6IGFzbU91dHB1dERpciB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVuYW1lIGJhY2sgdG8gcmVzdG9yZSBmaXh0dXJlIHRvIG9yaWdpbmFsIHN0YXRlXG4gICAgICBhd2FpdCBmcy5yZW5hbWUoYCR7Y3VzdG9tRG9ja2VyRmlsZX1+YCwgY3VzdG9tRG9ja2VyRmlsZSk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3RlbXBsYXRlcyBvbiBkaXNrIGNvbnRhaW4gbWV0YWRhdGEgcmVzb3VyY2UsIGFsc28gaW4gbmVzdGVkIGFzc2VtYmxpZXMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBTeW50aCBmaXJzdCwgYW5kIHN3aXRjaCBvbiB2ZXJzaW9uIHJlcG9ydGluZyBiZWNhdXNlIGNkay5qc29uIGlzIGRpc2FibGluZyBpdFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS12ZXJzaW9uLXJlcG9ydGluZz10cnVlJ10pO1xuXG4gICAgLy8gTG9hZCB0ZW1wbGF0ZSBmcm9tIGRpc2sgZnJvbSByb290IGFzc2VtYmx5XG4gICAgY29uc3QgdGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjYXQnLCAnY2RrLm91dC8qLWxhbWJkYS50ZW1wbGF0ZS5qc29uJ10pO1xuXG4gICAgZXhwZWN0KEpTT04ucGFyc2UodGVtcGxhdGVDb250ZW50cykuUmVzb3VyY2VzLkNES01ldGFkYXRhKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAvLyBMb2FkIHRlbXBsYXRlIGZyb20gbmVzdGVkIGFzc2VtYmx5XG4gICAgY29uc3QgbmVzdGVkVGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoW1xuICAgICAgJ2NhdCcsXG4gICAgICAnY2RrLm91dC9hc3NlbWJseS0qLXN0YWdlLypTdGFja0luU3RhZ2UqLnRlbXBsYXRlLmpzb24nLFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KEpTT04ucGFyc2UobmVzdGVkVGVtcGxhdGVDb250ZW50cykuUmVzb3VyY2VzLkNES01ldGFkYXRhKS50b0JlVHJ1dGh5KCk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnQ0RLIHN5bnRoIGFkZCB0aGUgbWV0YWRhdGEgcHJvcGVydGllcyBleHBlY3RlZCBieSBzYW0nLFxuICB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gU3ludGggZmlyc3RcbiAgICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGZpeHR1cmUudGVtcGxhdGUoJ1Rlc3RTdGFjaycpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRSZXNvdXJjZXMgPSBbXG4gICAgICB7XG4gICAgICAgIC8vIFB5dGhvbiBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uMzk0OTVDRUYnLFxuICAgICAgICBjZGtJZDogJ1B5dGhvbkxheWVyVmVyc2lvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdMYXllclZlcnNpb24zODc4REEzQScsXG4gICAgICAgIGNka0lkOiAnTGF5ZXJWZXJzaW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgbGF5ZXIgdmVyc2lvblxuICAgICAgICBpZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lNkJBREJENkUnLFxuICAgICAgICBjZGtJZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnUHl0aG9uRnVuY3Rpb24wQkNGNzdGRCcsXG4gICAgICAgIGNka0lkOiAnUHl0aG9uRnVuY3Rpb24nLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBMb2cgUmV0ZW50aW9uIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGFGRDRCRkM4QScsXG4gICAgICAgIGNka0lkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGEnLFxuICAgICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUyOENCREEwNScsXG4gICAgICAgIGNka0lkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lJyxcbiAgICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEJ1bmRsZWQgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdCdW5kbGVkRnVuY3Rpb25QeXRob25SdW50aW1lNEQ5QTA5MTgnLFxuICAgICAgICBjZGtJZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBOb2RlSnMgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdOb2RlanNGdW5jdGlvbjA5QzFGMjBGJyxcbiAgICAgICAgY2RrSWQ6ICdOb2RlanNGdW5jdGlvbicsXG4gICAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnR29GdW5jdGlvbkNBOTVGQkFBJyxcbiAgICAgICAgY2RrSWQ6ICdHb0Z1bmN0aW9uJyxcbiAgICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gRG9ja2VyIEltYWdlIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRG9ja2VySW1hZ2VGdW5jdGlvbjI4Qjc3M0U2JyxcbiAgICAgICAgY2RrSWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uJyxcbiAgICAgICAgZG9ja2VyRmlsZVBhdGg6ICdEb2NrZXJmaWxlJyxcbiAgICAgICAgcHJvcGVydHk6ICdDb2RlLkltYWdlVXJpJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFNwZWMgUmVzdCBBcGlcbiAgICAgICAgaWQ6ICdTcGVjUmVzdEFQSTdENEIzQTM0JyxcbiAgICAgICAgY2RrSWQ6ICdTcGVjUmVzdEFQSScsXG4gICAgICAgIHByb3BlcnR5OiAnQm9keVMzTG9jYXRpb24nLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBleHBlY3RlZFJlc291cmNlcykge1xuICAgICAgZml4dHVyZS5vdXRwdXQud3JpdGUoYHZhbGlkYXRlIGFzc2V0cyBtZXRhZGF0YSBmb3IgcmVzb3VyY2UgJHtyZXNvdXJjZX1gKTtcbiAgICAgIGV4cGVjdChyZXNvdXJjZS5pZCBpbiB0ZW1wbGF0ZS5SZXNvdXJjZXMpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZS5SZXNvdXJjZXNbcmVzb3VyY2UuaWRdKS50b0VxdWFsKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ1Rlc3RTdGFjaycpfS8ke3Jlc291cmNlLmNka0lkfS9SZXNvdXJjZWAsXG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL2Fzc2V0XFwuWzAtOWEtekEtWl17NjR9LyksXG4gICAgICAgICAgICAnYXdzOmFzc2V0OmlzLWJ1bmRsZWQnOiByZXNvdXJjZS5pc0J1bmRsZWQsXG4gICAgICAgICAgICAnYXdzOmFzc2V0OmRvY2tlcmZpbGUtcGF0aCc6IHJlc291cmNlLmRvY2tlckZpbGVQYXRoLFxuICAgICAgICAgICAgJ2F3czphc3NldDpwcm9wZXJ0eSc6IHJlc291cmNlLnByb3BlcnR5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBOZXN0ZWQgU3RhY2tcbiAgICBmaXh0dXJlLm91dHB1dC53cml0ZSgndmFsaWRhdGUgYXNzZXRzIG1ldGFkYXRhIGZvciBuZXN0ZWQgc3RhY2sgcmVzb3VyY2UnKTtcbiAgICBleHBlY3QoJ05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrUmVzb3VyY2VCNzA4MzRGRCcgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHRlbXBsYXRlLlJlc291cmNlcy5OZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja1Jlc291cmNlQjcwODM0RkQpLnRvRXF1YWwoXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZShcbiAgICAgICAgICAgICdUZXN0U3RhY2snLFxuICAgICAgICAgICl9L05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrL05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrUmVzb3VyY2VgLFxuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6IGV4cGVjdC5zdHJpbmdNYXRjaGluZyhcbiAgICAgICAgICAgIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4LnJlcGxhY2UoLy0vLCAnJyl9VGVzdFN0YWNrTmVzdGVkU3RhY2tbMC05QS1aXXs4fVxcLm5lc3RlZFxcLnRlbXBsYXRlXFwuanNvbmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnYXdzOmFzc2V0OnByb3BlcnR5JzogJ1RlbXBsYXRlVVJMJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnQ0RLIHN5bnRoIGJ1bmRsZWQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkJyxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBmaXh0dXJlLnRlbXBsYXRlKCdUZXN0U3RhY2snKTtcblxuICAgIGNvbnN0IGV4cGVjdGVkQnVuZGxlZEFzc2V0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgLy8gUHl0aG9uIExheWVyIFZlcnNpb25cbiAgICAgICAgaWQ6ICdQeXRob25MYXllclZlcnNpb24zOTQ5NUNFRicsXG4gICAgICAgIGZpbGVzOiBbXG4gICAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBMYXllciBWZXJzaW9uXG4gICAgICAgIGlkOiAnTGF5ZXJWZXJzaW9uMzg3OERBM0EnLFxuICAgICAgICBmaWxlczogWydsYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLCAncmVxdWlyZW1lbnRzLnR4dCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBsYXllciB2ZXJzaW9uXG4gICAgICAgIGlkOiAnQnVuZGxlZExheWVyVmVyc2lvblB5dGhvblJ1bnRpbWU2QkFEQkQ2RScsXG4gICAgICAgIGZpbGVzOiBbXG4gICAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAgICdweXRob24vZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsXG4gICAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBQeXRob24gRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdQeXRob25GdW5jdGlvbjBCQ0Y3N0ZEJyxcbiAgICAgICAgZmlsZXM6IFsnYXBwLnB5JywgJ2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLCAnZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lMjhDQkRBMDUnLFxuICAgICAgICBmaWxlczogWydhcHAucHknLCAncmVxdWlyZW1lbnRzLnR4dCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gQnVuZGxlZCBGdW5jdGlvblxuICAgICAgICBpZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWU0RDlBMDkxOCcsXG4gICAgICAgIGZpbGVzOiBbJ2FwcC5weScsICdnZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JywgJ2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBOb2RlSnMgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdOb2RlanNGdW5jdGlvbjA5QzFGMjBGJyxcbiAgICAgICAgZmlsZXM6IFsnaW5kZXguanMnXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICAgIGlkOiAnR29GdW5jdGlvbkNBOTVGQkFBJyxcbiAgICAgICAgZmlsZXM6IFsnYm9vdHN0cmFwJ10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBEb2NrZXIgSW1hZ2UgRnVuY3Rpb25cbiAgICAgICAgaWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uMjhCNzczRTYnLFxuICAgICAgICBmaWxlczogWydhcHAuanMnLCAnRG9ja2VyZmlsZScsICdwYWNrYWdlLmpzb24nXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZXhwZWN0ZWRCdW5kbGVkQXNzZXRzKSB7XG4gICAgICBjb25zdCBhc3NldFBhdGggPSB0ZW1wbGF0ZS5SZXNvdXJjZXNbcmVzb3VyY2UuaWRdLk1ldGFkYXRhWydhd3M6YXNzZXQ6cGF0aCddO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc291cmNlLmZpbGVzKSB7XG4gICAgICAgIGZpeHR1cmUub3V0cHV0LndyaXRlKGB2YWxpZGF0ZSBQYXRoICR7ZmlsZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2V9YCk7XG4gICAgICAgIGV4cGVjdChleGlzdHNTeW5jKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5vdXQnLCBhc3NldFBhdGgsIGZpbGUpKSkudG9CZVRydXRoeSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdzYW0gY2FuIGxvY2FsbHkgdGVzdCB0aGUgc3ludGhlc2l6ZWQgY2RrIGFwcGxpY2F0aW9uJyxcbiAgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIFN5bnRoIGZpcnN0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZml4dHVyZS5zYW1Mb2NhbFN0YXJ0QXBpKFxuICAgICAgJ1Rlc3RTdGFjaycsXG4gICAgICBmYWxzZSxcbiAgICAgIHJhbmRvbUludGVnZXIoMzAwMDAsIDQwMDAwKSxcbiAgICAgICcvcmVzdGFwaXMvc3BlYy9weXRob25GdW5jdGlvbicsXG4gICAgKTtcbiAgICBleHBlY3QocmVzdWx0LmFjdGlvblN1Y2NlZWRlZCkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChyZXN1bHQuYWN0aW9uT3V0cHV0KS50b0VxdWFsKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBtZXNzYWdlOiAnSGVsbG8gV29ybGQnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdza2lwcyBub3RpY2UgcmVmcmVzaCcsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoe1xuICAgICAgb3B0aW9uczogWyctLW5vLW5vdGljZXMnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBJTlRFR19TVEFDS19TRVQ6ICdzdGFnZS11c2luZy1jb250ZXh0JyxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBOZWl0aGVyIHN1Y2NlZWRzIG5vciBmYWlscywgYnV0IHNraXBzIHRoZSByZWZyZXNoXG4gICAgYXdhaXQgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignTm90aWNlcyByZWZyZXNoZWQnKTtcbiAgICBhd2FpdCBleHBlY3Qob3V0cHV0KS5ub3QudG9Db250YWluKCdOb3RpY2VzIHJlZnJlc2ggZmFpbGVkJyk7XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gUzMgYnVja2V0LCBvcnBoYW4gdGhhdCBidWNrZXQsIHRoZW4gaW1wb3J0IHRoZSBidWNrZXQsIHdpdGggYSBOb2RlSlNGdW5jdGlvbiBsYW1iZGEgYWxzbyBpbiB0aGUgc3RhY2suXG4gKlxuICogVmFsaWRhdGVzIGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8zMTk5OSAoaW1wb3J0IGZhaWxzKVxuICovXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IHJlc291cmNlIGltcG9ydCB3aXRoIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmVzIGJ1bmRsaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBGaXJzdCwgY3JlYXRlIGEgc3RhY2sgdGhhdCBpbmNsdWRlcyBhIE5vZGVKU0Z1bmN0aW9uIGxhbWJkYSBhbmQgb25lIGJ1Y2tldCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBidXQgTk9UIGRlbGV0ZWQgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgSU5DTFVERV9OT0RFSlNfRlVOQ1RJT05fTEFNQkRBOiAnMScsIElOQ0xVREVfU0lOR0xFX0JVQ0tFVDogJzEnLCBSRVRBSU5fU0lOR0xFX0JVQ0tFVDogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlY29uZCwgbm93IHRoZSBidWNrZXQgd2Ugd2lsbCByZW1vdmUgaXMgaW4gdGhlIHN0YWNrIGFuZCBoYXMgYSBsb2dpY2FsSWQuIFdlIGNhbiBub3cgbWFrZSB0aGUgcmVzb3VyY2UgbWFwcGluZyBmaWxlLlxuICAgICAgLy8gVGhpcyByZXNvdXJjZSBtYXBwaW5nIGZpbGUgd2lsbCBiZSB1c2VkIHRvIHRlbGwgdGhlIGltcG9ydCBvcGVyYXRpb24gd2hhdCBidWNrZXQgdG8gYnJpbmcgaW50byB0aGUgc3RhY2suXG4gICAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc3QgYnVja2V0TG9naWNhbElkID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXRMb2dpY2FsSWQ7XG4gICAgICBjb25zdCBidWNrZXROYW1lID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXROYW1lO1xuICAgICAgY29uc3QgYnVja2V0UmVzb3VyY2VNYXAgPSB7XG4gICAgICAgIFtidWNrZXRMb2dpY2FsSWRdOiB7XG4gICAgICAgICAgQnVja2V0TmFtZTogYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnbWFwcGluZy5qc29uJyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFwcGluZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KGJ1Y2tldFJlc291cmNlTWFwKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAgICAgLy8gVGhpcmQsIHJlbW92ZSB0aGUgYnVja2V0IGZyb20gdGhlIHN0YWNrLCBidXQgZG9uJ3QgZGVsZXRlIHRoZSBidWNrZXQgZnJvbSBBV1MuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgICAgbW9kRW52OiB7IElOQ0xVREVfTk9ERUpTX0ZVTkNUSU9OX0xBTUJEQTogJzEnLCBJTkNMVURFX1NJTkdMRV9CVUNLRVQ6ICcwJywgUkVUQUlOX1NJTkdMRV9CVUNLRVQ6ICcwJyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihidWNrZXRMb2dpY2FsSWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2ltcG9ydCcsICctLXJlc291cmNlLW1hcHBpbmcnLCBtYXBwaW5nRmlsZSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyldLCB7XG4gICAgICAgIG1vZEVudjogeyBJTkNMVURFX05PREVKU19GVU5DVElPTl9MQU1CREE6ICcxJywgSU5DTFVERV9TSU5HTEVfQlVDS0VUOiAnMScsIFJFVEFJTl9TSU5HTEVfQlVDS0VUOiAnMCcgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUFmdGVySW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIGJ1bmRsaW5nIGlzIHNraXBwZWQgZHVyaW5nIGltcG9ydCBmb3IgTm9kZUpTRnVuY3Rpb24gbGFtYmRhLCB0aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGZhaWwgYW5kIGV4aXRcbiAgICAgIGV4cGVjdChkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcyFbMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0lNUE9SVF9DT01QTEVURScpO1xuXG4gICAgICAvLyBJZiB0aGUgaW1wb3J0IG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgdGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gdGhlIGltcG9ydGVkIGJ1Y2tldFxuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4oYnVja2V0TG9naWNhbElkKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXAgdGhlIHJlc291cmNlcyB3ZSBjcmVhdGVkXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBxdWV1ZSwgb3JwaGFuIHRoYXQgcXVldWUsIHRoZW4gaW1wb3J0IHRoZSBxdWV1ZS5cbiAqXG4gKiBXZSB3YW50IHRvIHRlc3Qgd2l0aCBhIGxhcmdlIHRlbXBsYXRlIHRvIG1ha2Ugc3VyZSBsYXJnZSB0ZW1wbGF0ZXMgY2FuIHdvcmsgd2l0aCBpbXBvcnQuXG4gKi9cbmludGVnVGVzdChcbiAgJ3Rlc3QgcmVzb3VyY2UgaW1wb3J0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCByYW5kb21QcmVmaXggPSByYW5kb21TdHJpbmcoKTtcbiAgICBjb25zdCB1bmlxdWVPdXRwdXRzRmlsZU5hbWUgPSBgJHtyYW5kb21QcmVmaXh9T3V0cHV0cy5qc29uYDsgLy8gb3RoZXIgdGVzdHMgdXNlIHRoZSBvdXRwdXRzIGZpbGUuIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb2xsaWRlLlxuICAgIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsIHVuaXF1ZU91dHB1dHNGaWxlTmFtZSk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBGaXJzdCwgY3JlYXRlIGEgc3RhY2sgdGhhdCBpbmNsdWRlcyBtYW55IHF1ZXVlcywgYW5kIG9uZSBxdWV1ZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBidXQgTk9UIGRlbGV0ZWQgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcxJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlY29uZCwgbm93IHRoZSBxdWV1ZSB3ZSB3aWxsIHJlbW92ZSBpcyBpbiB0aGUgc3RhY2sgYW5kIGhhcyBhIGxvZ2ljYWxJZC4gV2UgY2FuIG5vdyBtYWtlIHRoZSByZXNvdXJjZSBtYXBwaW5nIGZpbGUuXG4gICAgICAvLyBUaGlzIHJlc291cmNlIG1hcHBpbmcgZmlsZSB3aWxsIGJlIHVzZWQgdG8gdGVsbCB0aGUgaW1wb3J0IG9wZXJhdGlvbiB3aGF0IHF1ZXVlIHRvIGJyaW5nIGludG8gdGhlIHN0YWNrLlxuICAgICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaW1wb3J0YWJsZS1zdGFjaycpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICAgIGNvbnN0IHF1ZXVlTG9naWNhbElkID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5RdWV1ZUxvZ2ljYWxJZDtcbiAgICAgIGNvbnN0IHF1ZXVlUmVzb3VyY2VNYXAgPSB7XG4gICAgICAgIFtxdWV1ZUxvZ2ljYWxJZF06IHsgUXVldWVVcmw6IG91dHB1dHNbZnVsbFN0YWNrTmFtZV0uUXVldWVVcmwgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCBgJHtyYW5kb21QcmVmaXh9TWFwcGluZy5qc29uYCk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFwcGluZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KHF1ZXVlUmVzb3VyY2VNYXApLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBUaGlyZCwgcmVtb3ZlIHRoZSBxdWV1ZSBmcm9tIHRoZSBzdGFjaywgYnV0IGRvbid0IGRlbGV0ZSB0aGUgcXVldWUgZnJvbSBBV1MuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMCcsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcwJyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihxdWV1ZUxvZ2ljYWxJZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnaW1wb3J0JywgJy0tcmVzb3VyY2UtbWFwcGluZycsIG1hcHBpbmdGaWxlLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2ltcG9ydGFibGUtc3RhY2snKV0sIHtcbiAgICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMScsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcwJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgR2V0VGVtcGxhdGVDb21tYW5kKHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcyFbMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0lNUE9SVF9DT01QTEVURScpO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4ocXVldWVMb2dpY2FsSWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3Rlc3QgbWlncmF0ZSBkZXBsb3ltZW50IGZvciBhcHAgd2l0aCBsb2NhbGZpbGUgc291cmNlIGluIG1pZ3JhdGUuanNvbicsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsICdvdXRwdXRzLmpzb24nKTtcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIEluaXRpYWwgZGVwbG95XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgT1JQSEFOX1RPUElDOiAnMScgfSxcbiAgICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIGNvbnN0IHF1ZXVlTmFtZSA9IG91dHB1dHNbc3RhY2tOYW1lXS5RdWV1ZU5hbWU7XG4gICAgY29uc3QgcXVldWVVcmwgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVVcmw7XG4gICAgY29uc3QgcXVldWVMb2dpY2FsSWQgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVMb2dpY2FsSWQ7XG4gICAgZml4dHVyZS5sb2coYENyZWF0ZWQgcXVldWUgJHtxdWV1ZVVybH0gaW4gc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9YCk7XG5cbiAgICAvLyBXcml0ZSB0aGUgbWlncmF0ZSBmaWxlIGJhc2VkIG9uIHRoZSBJRCBmcm9tIHN0ZXAgb25lLCB0aGVuIGRlcGxveSB0aGUgYXBwIHdpdGggbWlncmF0ZVxuICAgIGNvbnN0IG1pZ3JhdGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnbWlncmF0ZS5qc29uJyk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgbWlncmF0ZUZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFNvdXJjZTogJ2xvY2FsZmlsZScsXG4gICAgICAgIFJlc291cmNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogcXVldWVMb2dpY2FsSWQsXG4gICAgICAgICAgICBSZXNvdXJjZUlkZW50aWZpZXI6IHsgUXVldWVVcmw6IHF1ZXVlVXJsIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9LFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICBmaXh0dXJlLmxvZyhgRGVsZXRlZCBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX0sIG9ycGhhbmluZyAke3F1ZXVlTmFtZX1gKTtcblxuICAgIC8vIENyZWF0ZSBuZXcgc3RhY2sgZnJvbSBleGlzdGluZyBxdWV1ZVxuICAgIHRyeSB7XG4gICAgICBmaXh0dXJlLmxvZyhgRGVwbG95aW5nIG5ldyBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX0sIG1pZ3JhdGluZyAke3F1ZXVlTmFtZX0gaW50byBzdGFja2ApO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW51cFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgXCJob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgTGFtYmRhIGZ1bmN0aW9uJ3MgZGVzY3JpcHRpb24gYW5kIGVudmlyb25tZW50IHZhcmlhYmxlc1wiLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cbiAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgIC8vIFwiQ1JFQVRFX0NPTVBMRVRFXCJcbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIC8vIFRoZSBlbnRpcmUgc3RyaW5nIGZhaWxzIGxvY2FsbHkgZHVlIHRvIGZvcm1hdHRpbmcuIE1ha2luZyB0aGlzIHRlc3QgbGVzcyBzcGVjaWZpY1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvTWF0Y2goL2hvdHN3YXBwZWQhLyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGZ1bmN0aW9uTmFtZSk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIEZuOjpJbXBvcnRWYWx1ZSBpbnRyaW5zaWMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZXhwb3J0LXZhbHVlLXN0YWNrJyk7XG4gICAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnb3JpZ2luYWwgdmFsdWUnLFxuICAgICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgICBtb2RFbnY6IHtcbiAgICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICAgICAgVVNFX0lNUE9SVF9WQUxVRV9MQU1CREFfUFJPUEVSVFk6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgICAgLy8gVEhFTlxuXG4gICAgICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAgICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICAgIC8vIFRoZSBlbnRpcmUgc3RyaW5nIGZhaWxzIGxvY2FsbHkgZHVlIHRvIGZvcm1hdHRpbmcuIE1ha2luZyB0aGlzIHRlc3QgbGVzcyBzcGVjaWZpY1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvaG90c3dhcHBlZCEvKTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihmdW5jdGlvbk5hbWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBFbnN1cmUgY2xlYW51cCBpbiByZXZlcnNlIG9yZGVyIGR1ZSB0byB1c2Ugb2YgaW1wb3J0L2V4cG9ydFxuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdsYW1iZGEtaG90c3dhcCcpO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdleHBvcnQtdmFsdWUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIGVjcyBzZXJ2aWNlJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZCgob3V0cHV0KSA9PiBvdXRwdXQuT3V0cHV0S2V5ID09ICdTZXJ2aWNlTmFtZScpPy5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cblxuICAgIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5zXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgLy8gVGhlIGVudGlyZSBzdHJpbmcgZmFpbHMgbG9jYWxseSBkdWUgdG8gZm9ybWF0dGluZy4gTWFraW5nIHRoaXMgdGVzdCBsZXNzIHNwZWNpZmljXG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9NYXRjaCgvaG90c3dhcHBlZCEvKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oc2VydmljZU5hbWUpO1xuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2hvdHN3YXAgZGVwbG95bWVudCBmb3IgZWNzIHNlcnZpY2Ugd2FpdHMgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzY3JpYmVTdGFja3NSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgY2x1c3Rlck5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKVxuICAgICAgPy5PdXRwdXRWYWx1ZSE7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKVxuICAgICAgPy5PdXRwdXRWYWx1ZSE7XG5cbiAgICAvLyBUSEVOXG5cbiAgICBjb25zdCBkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5lY3Muc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZCh7XG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VOYW1lXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGRlc2NyaWJlU2VydmljZXNSZXNwb25zZS5zZXJ2aWNlcz8uWzBdLmRlcGxveW1lbnRzKS50b0hhdmVMZW5ndGgoMSk7IC8vIG9ubHkgb25lIGRlcGxveW1lbnQgcHJlc2VudFxuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvTWF0Y2goL2hvdHN3YXBwZWQhLyk7XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KFxuICAnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSBkZXRlY3RzIGZhaWxlZCBkZXBsb3ltZW50IGFuZCBlcnJvcnMnLFxuICB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywgeyB2ZXJib3NlOiB0cnVlIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgVVNFX0lOVkFMSURfRUNTX0hPVFNXQVBfSU1BR0U6ICd0cnVlJyxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB2ZXJib3NlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGV4cGVjdGVkU3Vic3RyaW5nID0gJ1Jlc291cmNlIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgc3RhdGUgZHVlIHRvIHdhaXRlciBzdGF0dXM6IFRJTUVPVVQnO1xuICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihleHBlY3RlZFN1YnN0cmluZyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdPYnNlcnZlZCByZXNwb25zZXM6Jyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCcyMDA6IE9LJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvQ29udGFpbignaG90c3dhcHBlZCEnKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBBcHBTeW5jIEFQSXMgd2l0aCBtYW55IGZ1bmN0aW9ucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYXBwc3luYy1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2FwcHN5bmMtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0FQUFNZTkNfUFJPUEVSVFlfVkFMVUU6ICckdXRpbC5xcigkY3R4LnN0YXNoLnB1dChcIm5ld1RlbXBsYXRlXCIsIFtdKSlcXG4kdXRpbC50b0pzb24oe30pJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICAgIC8vIGFzc2VydCBhbGwgNTAgZnVuY3Rpb25zIHdlcmUgaG90c3dhcHBlZFxuICAgIGZvciAoY29uc3QgaSBvZiBBcnJheSg1MCkua2V5cygpKSB7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYEFXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uICdhcHBzeW5jX2Z1bmN0aW9uJHtpfScgaG90c3dhcHBlZCFgKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIEVDUyBkZXBsb3ltZW50IHJlc3BlY3RzIHByb3BlcnRpZXMgb3ZlcnJpZGUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gVXBkYXRlIHRoZSBDREsgY29udGV4dCB3aXRoIHRoZSBuZXcgRUNTIHByb3BlcnRpZXNcbiAgbGV0IGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCA9IDEwMDtcbiAgbGV0IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCA9IDIwMDtcbiAgbGV0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICBjZGtKc29uID0ge1xuICAgIC4uLmNka0pzb24sXG4gICAgaG90c3dhcDoge1xuICAgICAgZWNzOiB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5UGVyY2VudDogZWNzTWluaW11bUhlYWx0aHlQZXJjZW50LFxuICAgICAgICBtYXhpbXVtSGVhbHRoeVBlcmNlbnQ6IGVjc01heGltdW1IZWFsdGh5UGVyY2VudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbikpO1xuXG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1ob3Rzd2FwJyxcbiAgICBdLFxuICAgIG1vZEVudjoge1xuICAgICAgRFlOQU1JQ19FQ1NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zdCBjbHVzdGVyTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuZWNzLnNlbmQoXG4gICAgbmV3IERlc2NyaWJlU2VydmljZXNDb21tYW5kKHtcbiAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gICAgfSksXG4gICk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWluaW11bUhlYWx0aHlQZXJjZW50KS50b0VxdWFsKGVjc01pbmltdW1IZWFsdGh5UGVyY2VudCk7XG4gIGV4cGVjdChkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2Uuc2VydmljZXM/LlswXS5kZXBsb3ltZW50Q29uZmlndXJhdGlvbj8ubWF4aW11bVBlcmNlbnQpLnRvRXF1YWwoZWNzTWF4aW11bUhlYWx0aHlQZXJjZW50KTtcbn0pKTtcblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkcmVuKHBhcmVudDogc3RyaW5nLCBwcmVkOiAoeDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgYXdhaXQgZnMucmVhZGRpcihwYXJlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwYXJlbnQsIGNoaWxkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChhd2FpdCBwcmVkKGZ1bGxQYXRoKSkge1xuICAgICAgcmV0LnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0Q2hpbGREaXJzKHBhcmVudDogc3RyaW5nKSB7XG4gIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFyZW50LCBhc3luYyAoZnVsbFBhdGg6IHN0cmluZykgPT4gKGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuaW50ZWdUZXN0KFxuICAnY2RrIG5vdGljZXMgd2l0aCAtLXVuYWNrbm93bGVkZ2VkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgbm90aWNlc1VuYWNrbm93bGVkZ2VkID0gYXdhaXQgZml4dHVyZS5jZGsoWydub3RpY2VzJywgJy0tdW5hY2tub3dsZWRnZWQnXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBub3RpY2VzVW5hY2tub3dsZWRnZWRBbGlhcyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbm90aWNlcycsICctdSddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuICAgIGV4cGVjdChub3RpY2VzVW5hY2tub3dsZWRnZWQpLnRvRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9UaGVyZSBhcmUgXFxkezEsfSB1bmFja25vd2xlZGdlZCBub3RpY2VcXChzXFwpLi8pKTtcbiAgICBleHBlY3Qobm90aWNlc1VuYWNrbm93bGVkZ2VkKS50b0VxdWFsKG5vdGljZXNVbmFja25vd2xlZGdlZEFsaWFzKTtcbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IGNkayByb2xsYmFjaycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBSb2xsYmFja1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydyb2xsYmFjayddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ2F1dG9tYXRpYyByb2xsYmFjayBpZiBwYXVzZWQgYW5kIGNoYW5nZSBjb250YWlucyBhIHJlcGxhY2VtZW50JyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBwaGFzZSA9ICcyYSc7XG5cbiAgICAgIC8vIFNob3VsZCBmYWlsXG4gICAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIERvIGEgZGVwbG95bWVudCB3aXRoIGEgcmVwbGFjZW1lbnQgYW5kIC0tZm9yY2U6IHRoaXMgd2lsbCByb2xsIGJhY2sgZmlyc3QgYW5kIHRoZW4gZGVwbG95IG5vcm1hbGx5XG4gICAgICBwaGFzZSA9ICczJztcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snLCAnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcGF1c2VkIGFuZCAtLW5vLXJvbGxiYWNrIGlzIHJlbW92ZWQgZnJvbSBmbGFncycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JvbGxiYWNrLXRlc3QtYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBsZXQgcGhhc2UgPSAnMSc7XG5cbiAgICAvLyBTaG91bGQgc3VjY2VlZFxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LXJvbGxiYWNrJywge1xuICAgICAgb3B0aW9uczogWyctLW5vLXJvbGxiYWNrJ10sXG4gICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcGhhc2UgPSAnMmEnO1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbignVVBEQVRFX0ZBSUxFRCcpO1xuXG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgcmVtb3ZpbmcgLS1uby1yb2xsYmFjazogdGhpcyB3aWxsIHJvbGwgYmFjayBmaXJzdCBhbmQgdGhlbiBkZXBsb3kgbm9ybWFsbHlcbiAgICAgIHBoYXNlID0gJzEnO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1mb3JjZSddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgndGVzdC1yb2xsYmFjaycpO1xuICAgIH1cbiAgfSksXG4pO1xuXG5pbnRlZ1Rlc3QoXG4gICdhdXRvbWF0aWMgcm9sbGJhY2sgaWYgcmVwbGFjZW1lbnQgYW5kIC0tbm8tcm9sbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIGZsYWdzJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncm9sbGJhY2stdGVzdC1hcHAnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGxldCBwaGFzZSA9ICcxJztcblxuICAgIC8vIFNob3VsZCBzdWNjZWVkXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICAvLyBEbyBhIGRlcGxveW1lbnQgd2l0aCBhIHJlcGxhY2VtZW50IGFuZCByZW1vdmluZyAtLW5vLXJvbGxiYWNrOiB0aGlzIHdpbGwgZG8gYSByZWd1bGFyIHJvbGxiYWNrIGRlcGxveVxuICAgICAgcGhhc2UgPSAnMyc7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgICAgb3B0aW9uczogWyctLWZvcmNlJ10sXG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdChcbiAgJ3Rlc3QgY2RrIHJvbGxiYWNrIC0tZm9yY2UnLFxuICB3aXRoU3BlY2lmaWNGaXh0dXJlKCdyb2xsYmFjay10ZXN0LWFwcCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgbGV0IHBoYXNlID0gJzEnO1xuXG4gICAgLy8gU2hvdWxkIHN1Y2NlZWRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC1yb2xsYmFjaycsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgbW9kRW52OiB7IFBIQVNFOiBwaGFzZSB9LFxuICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHBoYXNlID0gJzJiJzsgLy8gRmFpbCB1cGRhdGUgYW5kIGFsc28gZmFpbCByb2xsYmFja1xuXG4gICAgICAvLyBTaG91bGQgZmFpbFxuICAgICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3Qtcm9sbGJhY2snLCB7XG4gICAgICAgIG9wdGlvbnM6IFsnLS1uby1yb2xsYmFjayddLFxuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdVUERBVEVfRkFJTEVEJyk7XG5cbiAgICAgIC8vIFNob3VsZCBzdGlsbCBmYWlsXG4gICAgICBjb25zdCByb2xsYmFja091dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snXSwge1xuICAgICAgICBtb2RFbnY6IHsgUEhBU0U6IHBoYXNlIH0sXG4gICAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJvbGxiYWNrT3V0cHV0KS50b0NvbnRhaW4oJ0ZhaWxpbmcgcm9sbGJhY2snKTtcblxuICAgICAgLy8gUm9sbGJhY2sgYW5kIGZvcmNlIGNsZWFudXBcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsncm9sbGJhY2snLCAnLS1mb3JjZSddLCB7XG4gICAgICAgIG1vZEVudjogeyBQSEFTRTogcGhhc2UgfSxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LXJvbGxiYWNrJyk7XG4gICAgfVxuICB9KSxcbik7XG5cbmludGVnVGVzdCgnY2RrIG5vdGljZXMgYXJlIGRpc3BsYXllZCBjb3JyZWN0bHknLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgY2FjaGUgPSB7XG4gICAgZXhwaXJhdGlvbjogNDEyNTk2MzI2NDAwMCwgLy8geWVhciAyMTAwIHNvIHdlIG5ldmVyIG92ZXJ3cml0ZSB0aGUgY2FjaGVcbiAgICBub3RpY2VzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQm9vdHN0cmFwIDE5OTkgTm90aWNlJyxcbiAgICAgICAgaXNzdWVOdW1iZXI6IDQ0NDQsXG4gICAgICAgIG92ZXJ2aWV3OiAnT3ZlcnZpZXcgZm9yIEJvb3RzdHJhcCAxOTk5IE5vdGljZS4gQWZmZWN0ZWRFbnZpcm9ubWVudHM6PHtyZXNvbHZlOkVOVklST05NRU5UU30+JyxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdib290c3RyYXAnLFxuICAgICAgICAgICAgdmVyc2lvbjogJzwxOTk5JywgLy8gc28gd2UgaW5jbHVkZSBhbGwgcG9zc2libGUgZW52aXJvbm1lbnRzXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IGNka0NhY2hlRGlyID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2FjaGUnKTtcbiAgYXdhaXQgZnMubWtkaXIoY2RrQ2FjaGVEaXIpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGNka0NhY2hlRGlyLCAnbm90aWNlcy5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNhY2hlKSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ25vdGljZXMnLCB7XG4gICAgdmVyYm9zZTogZmFsc2UsXG4gICAgbW9kRW52OiB7XG4gICAgICBDREtfSE9NRTogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdPdmVydmlldyBmb3IgQm9vdHN0cmFwIDE5OTkgTm90aWNlJyk7XG5cbiAgLy8gYXNzZXJ0IGR5bmFtaWMgZW52aXJvbm1lbnRzIGFyZSByZXNvbHZlZFxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oYEFmZmVjdGVkRW52aXJvbm1lbnRzOjxhd3M6Ly8ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0vJHtmaXh0dXJlLmF3cy5yZWdpb259PmApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3JlcXVlc3RzIGdvIHRocm91Z2ggYSBwcm94eSB3aGVuIGNvbmZpZ3VyZWQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBwcm94eVNlcnZlciA9IGF3YWl0IHN0YXJ0UHJveHlTZXJ2ZXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gRGVsZXRlIG5vdGljZXMgY2FjaGUgaWYgaXQgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5ybShwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSA/PyBvcy51c2VySW5mbygpLmhvbWVkaXIsICcuY2RrL2NhY2hlL25vdGljZXMuanNvbicpLCB7IGZvcmNlOiB0cnVlIH0pO1xuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgJy0tcHJveHknLCBwcm94eVNlcnZlci51cmwsXG4gICAgICAgICAgJy0tY2EtYnVuZGxlLXBhdGgnLCBwcm94eVNlcnZlci5jZXJ0UGF0aCxcbiAgICAgICAgXSxcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgQ0RLX0hPTUU6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgcHJveHlTZXJ2ZXIuZ2V0U2VlblJlcXVlc3RzKCk7XG5cbiAgICAgIGV4cGVjdChyZXF1ZXN0cy5tYXAocmVxID0+IHJlcS51cmwpKVxuICAgICAgICAudG9Db250YWluKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYvbm90aWNlcy5qc29uJyk7XG5cbiAgICAgIGNvbnN0IGFjdGlvbnNVc2VkID0gYXdzQWN0aW9uc0Zyb21SZXF1ZXN0cyhyZXF1ZXN0cyk7XG4gICAgICBleHBlY3QoYWN0aW9uc1VzZWQpLnRvQ29udGFpbignQXNzdW1lUm9sZScpO1xuICAgICAgZXhwZWN0KGFjdGlvbnNVc2VkKS50b0NvbnRhaW4oJ0NyZWF0ZUNoYW5nZVNldCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBwcm94eVNlcnZlci5zdG9wKCk7XG4gICAgfVxuICB9KSxcbik7XG4iXX0=
|