@decohere/create 0.0.1-dev.24 → 0.0.1-dev.26
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/commonjs/src/cli.js +54 -2
- package/commonjs/src/domain/prompt.js +12 -3
- package/commonjs/src/models/docker-image.model.js +11 -2
- package/commonjs/src/models/gitignore.model.js +1 -2
- package/commonjs/src/models/project.model.js +8 -3
- package/commonjs/src/runner.js +43 -10
- package/commonjs/src/webapi/create-api.js +16 -13
- package/commonjs/src/webapi/features/auth.feature.js +5 -4
- package/commonjs/src/webapi/features/auth0-cli.js +135 -19
- package/commonjs/src/webapi/features/biome-format.js +47 -0
- package/commonjs/src/webapi/features/finalize.feature.js +6 -1
- package/commonjs/src/webapi/features/postman.feature.js +5 -5
- package/commonjs/src/webapi/models/controller-source-file.model.js +2 -2
- package/es6/src/cli.js +13 -2
- package/es6/src/domain/prompt.js +9 -3
- package/es6/src/models/docker-image.model.js +11 -2
- package/es6/src/models/gitignore.model.js +1 -2
- package/es6/src/models/project.model.js +8 -3
- package/es6/src/runner.js +46 -13
- package/es6/src/webapi/create-api.js +17 -14
- package/es6/src/webapi/features/auth.feature.js +5 -4
- package/es6/src/webapi/features/auth0-cli.js +128 -20
- package/es6/src/webapi/features/biome-format.js +40 -0
- package/es6/src/webapi/features/finalize.feature.js +7 -2
- package/es6/src/webapi/features/postman.feature.js +5 -5
- package/es6/src/webapi/models/controller-source-file.model.js +2 -2
- package/package.json +2 -2
- package/types/src/domain/prompt.d.ts +2 -0
- package/types/src/models/project.model.d.ts +3 -1
- package/types/src/runner.d.ts +2 -2
- package/types/src/webapi/create-api.d.ts +2 -0
- package/types/src/webapi/features/auth0-cli.d.ts +26 -1
- package/types/src/webapi/features/biome-format.d.ts +5 -0
|
@@ -313,9 +313,10 @@ function createAuth0AdminUser(workspace, options, authConfig) {
|
|
|
313
313
|
const username = options.adminUsername ?? "admin";
|
|
314
314
|
const password = options.adminPassword;
|
|
315
315
|
if (!password) return;
|
|
316
|
+
const email = adminEmail(workspace.name, username);
|
|
316
317
|
try {
|
|
317
318
|
const admin = _auth0cli.createAdminDatabaseUser({
|
|
318
|
-
email
|
|
319
|
+
email,
|
|
319
320
|
password,
|
|
320
321
|
username
|
|
321
322
|
});
|
|
@@ -326,11 +327,11 @@ function createAuth0AdminUser(workspace, options, authConfig) {
|
|
|
326
327
|
username: admin.username
|
|
327
328
|
});
|
|
328
329
|
workspace.getModel(_const.WELL_KNOWN_FILES.ENV_FILE)?.addEntry("AUTH0_ADMIN_USER_SUB", admin.user_id).addEntry("AUTH0_ADMIN_USER_EMAIL", admin.email).addEntry("AUTH0_ADMIN_USER_PASSWORD", admin.password).addEntry("AUTH0_ADMIN_USERNAME", admin.username);
|
|
329
|
-
console.log(` ✓ Auth0 admin user
|
|
330
|
+
console.log(` ✓ Auth0 admin user ready: ${admin.email} (role: ${ADMIN_ROLE})`);
|
|
330
331
|
console.log(` Login with EMAIL (not username): ${admin.email}`);
|
|
331
332
|
console.log(` Password: see AUTH0_ADMIN_USER_PASSWORD in .env`);
|
|
332
333
|
} catch (err) {
|
|
333
|
-
console.error(` ✗ Failed to
|
|
334
|
+
console.error(` ✗ Failed to ensure Auth0 admin user (${email}): ${err instanceof Error ? err.message : err}`);
|
|
334
335
|
}
|
|
335
336
|
}
|
|
336
337
|
function scaffoldLocalUserProfile(workspace) {
|
|
@@ -443,4 +444,4 @@ const AuthFeature = {
|
|
|
443
444
|
scaffold
|
|
444
445
|
};
|
|
445
446
|
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc2ssIHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiB9IGZyb20gXCIuLi9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4uL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBDb250cm9sbGVyU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNYWluU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0ICogYXMgYXV0aDBDbGkgZnJvbSBcIi4vYXV0aDAtY2xpLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEF1dGhPcHRpb25zID0ge1xuXHRhdXRoUHJvdmlkZXI/OiBcImF1dGgwXCIgfCBcIm5vbmVcIjtcblx0aXNzdWVyQmFzZVVybD86IHN0cmluZztcblx0YXVkaWVuY2U/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXHRhZG1pblVzZXJuYW1lPzogc3RyaW5nO1xuXHRhZG1pblBhc3N3b3JkPzogc3RyaW5nO1xufTtcblxuY29uc3QgQURNSU5fUk9MRSA9IFwiYWRtaW5cIjtcblxuY29uc3QgVVNFUl9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgVXNlckVudGl0eSBpbXBsZW1lbnRzIElFbnRpdHkge1xuXFx0QFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuXFx0cHVibGljIGlkITogbnVtYmVyO1xuXG5cXHRAQ29sdW1uKHsgdW5pcXVlOiB0cnVlIH0pXG5cXHRwdWJsaWMgc3ViITogc3RyaW5nO1xuXG5cXHRAQ29sdW1uKHsgdHlwZTogXCJ2YXJjaGFyXCIsIG51bGxhYmxlOiB0cnVlIH0pXG5cXHRwdWJsaWMgZW1haWwhOiBzdHJpbmcgfCBudWxsO1xuXG5cXHRAQ29sdW1uKClcblxcdHB1YmxpYyBkaXNwbGF5TmFtZSE6IHN0cmluZztcblxuXFx0LyoqIEFwcC1vd25lZCByb2xlcy4gVGhlIFxcYGFkbWluXFxgIHJvbGUgZ3JhbnRzIENBU0wgXFxgbWFuYWdlXFxgL1xcYGFsbFxcYCAod2lsZGNhcmQpLiAqL1xuXFx0QENvbHVtbih7IHR5cGU6IFwic2ltcGxlLWpzb25cIiwgZGVmYXVsdDogXCJbXVwiIH0pXG5cXHRwdWJsaWMgcm9sZXMhOiBzdHJpbmdbXTtcbn1cbmA7XG5cbmNvbnN0IFVTRVJfUkVQT1NJVE9SWV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBpbmplY3RVbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuaW1wb3J0IHsgVHlwZU9ybVJlcG9zaXRvcnksIFR5cGVPcm1Vbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3VzZXIuZW50aXR5LmpzXCI7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyRW50aXR5UmVwb3NpdG9yeSBleHRlbmRzIFR5cGVPcm1SZXBvc2l0b3J5PFVzZXJFbnRpdHk+IHtcblxcdHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0VW5pdE9mV29yaygpIHVuaXRPZldvcms6IFR5cGVPcm1Vbml0T2ZXb3JrKSB7XG5cXHRcXHRzdXBlcih1bml0T2ZXb3JrLCBVc2VyRW50aXR5KTtcblxcdH1cblxuXFx0cHVibGljIGZpbmRCeVN1YihzdWI6IHN0cmluZyk6IFByb21pc2U8VXNlckVudGl0eSB8IG51bGw+IHtcblxcdFxcdHJldHVybiB0aGlzLmZpcnN0T3JEZWZhdWx0KHsgd2hlcmU6IHsgc3ViIH0gfSk7XG5cXHR9XG59XG5gO1xuXG5jb25zdCBVU0VSX1NFUlZJQ0VfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcmluY2lwYWwgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgVXNlckVudGl0eSB9IGZyb20gXCIuLi9lbnRpdGllcy91c2VyLmVudGl0eS5qc1wiO1xuaW1wb3J0IHsgVXNlckVudGl0eVJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS5qc1wiO1xuXG5mdW5jdGlvbiBjbGFpbVN0cmluZyhwcmluY2lwYWw6IFByaW5jaXBhbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXFx0Y29uc3QgdmFsdWUgPSBwcmluY2lwYWw/LltrZXldO1xuXFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XG5cXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB1c2VyczogVXNlckVudGl0eVJlcG9zaXRvcnkpIHt9XG5cblxcdC8qKlxuXFx0ICogVXBzZXJ0IGEgbG9jYWwgcHJvZmlsZSBrZXllZCBieSBKV1QgXFxgc3ViXFxgLlxuXFx0ICogUHJvZmlsZSBmaWVsZHMgZnJvbSB0aGUgdG9rZW4gZmlsbCBnYXBzOyBzZWVkZWQgcm93cyBrZWVwIGRpc3BsYXlOYW1lL2VtYWlsL3JvbGVzLlxuXFx0ICovXG5cXHRwdWJsaWMgYXN5bmMgZW5zdXJlRnJvbVByaW5jaXBhbChwcmluY2lwYWw6IFByaW5jaXBhbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VXNlckVudGl0eT4ge1xuXFx0XFx0Y29uc3Qgc3ViID0gcHJpbmNpcGFsPy5zdWI7XG5cXHRcXHRpZiAoIXN1Yikge1xuXFx0XFx0XFx0dGhyb3cgbmV3IEVycm9yKFwiQXV0aGVudGljYXRlZCByZXF1ZXN0IGlzIG1pc3NpbmcgcHJpbmNpcGFsLnN1YlwiKTtcblxcdFxcdH1cblxuXFx0XFx0Y29uc3QgZW1haWwgPVxuXFx0XFx0XFx0Y2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcImVtYWlsXCIpID8/IGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJwcmVmZXJyZWRfdXNlcm5hbWVcIik7XG5cXHRcXHRjb25zdCBkaXNwbGF5RnJvbVRva2VuID1cblxcdFxcdFxcdGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJuYW1lXCIpID8/XG5cXHRcXHRcXHRjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwibmlja25hbWVcIikgPz9cblxcdFxcdFxcdGVtYWlsO1xuXG5cXHRcXHRjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMudXNlcnMuZmluZEJ5U3ViKHN1Yik7XG5cXHRcXHRpZiAoZXhpc3RpbmcpIHtcblxcdFxcdFxcdGxldCBkaXJ0eSA9IGZhbHNlO1xuXFx0XFx0XFx0aWYgKCFleGlzdGluZy5lbWFpbCAmJiBlbWFpbCkge1xuXFx0XFx0XFx0XFx0ZXhpc3RpbmcuZW1haWwgPSBlbWFpbDtcblxcdFxcdFxcdFxcdGRpcnR5ID0gdHJ1ZTtcblxcdFxcdFxcdH1cblxcdFxcdFxcdGlmIChleGlzdGluZy5kaXNwbGF5TmFtZSA9PT0gZXhpc3Rpbmcuc3ViICYmIGRpc3BsYXlGcm9tVG9rZW4pIHtcblxcdFxcdFxcdFxcdGV4aXN0aW5nLmRpc3BsYXlOYW1lID0gZGlzcGxheUZyb21Ub2tlbjtcblxcdFxcdFxcdFxcdGRpcnR5ID0gdHJ1ZTtcblxcdFxcdFxcdH1cblxcdFxcdFxcdHJldHVybiBkaXJ0eSA/IHRoaXMudXNlcnMuc2F2ZShleGlzdGluZykgOiBleGlzdGluZztcblxcdFxcdH1cblxuXFx0XFx0Y29uc3QgY3JlYXRlZCA9IG5ldyBVc2VyRW50aXR5KCk7XG5cXHRcXHRjcmVhdGVkLnN1YiA9IHN1YjtcblxcdFxcdGNyZWF0ZWQuZW1haWwgPSBlbWFpbCA/PyBudWxsO1xuXFx0XFx0Y3JlYXRlZC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlGcm9tVG9rZW4gPz8gc3ViO1xuXFx0XFx0Y3JlYXRlZC5yb2xlcyA9IEFycmF5LmlzQXJyYXkocHJpbmNpcGFsLnJvbGVzKVxuXFx0XFx0XFx0PyBwcmluY2lwYWwucm9sZXMuZmlsdGVyKChyKTogciBpcyBzdHJpbmcgPT4gdHlwZW9mIHIgPT09IFwic3RyaW5nXCIpXG5cXHRcXHRcXHQ6IFtdO1xuXFx0XFx0cmV0dXJuIHRoaXMudXNlcnMuc2F2ZShjcmVhdGVkKTtcblxcdH1cbn1cbmA7XG5cbmNvbnN0IEFCSUxJVFlfRkFDVE9SWV9UUyA9IGBpbXBvcnQgeyBBYmlsaXR5QnVpbGRlciwgY3JlYXRlTW9uZ29BYmlsaXR5IH0gZnJvbSBcIkBjYXNsL2FiaWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgUHJpbmNpcGFsIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjtcblxuLyoqIFJvb3Qgcm9sZSDigJQgZXhwYW5kcyB0byBDQVNMIFxcYG1hbmFnZVxcYC9cXGBhbGxcXGAgKGNvdmVycyBldmVyeSBmdXR1cmUgYWJpbGl0eSkuICovXG5leHBvcnQgY29uc3QgQURNSU5fUk9MRSA9IFwiYWRtaW5cIjtcblxuLyoqXG4gKiBSb2xlcyBhcmUgY29sbGVjdGlvbnMgb2YgYWJpbGl0aWVzLiBBZG1pbiBpcyBhIHdpbGRjYXJkLCBub3QgYW4gZW51bWVyYXRlZCBsaXN0LlxuICogTm9uLWFkbWluIHByaW5jaXBhbHMga2VlcCB0aGUgZGVmYXVsdCBBdXRoMCBzY29wZSDihpIgYWJpbGl0eSBtYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJpbGl0eUZhY3RvcnkocHJpbmNpcGFsOiBQcmluY2lwYWwpIHtcblxcdGNvbnN0IHsgY2FuLCBidWlsZCB9ID0gbmV3IEFiaWxpdHlCdWlsZGVyKGNyZWF0ZU1vbmdvQWJpbGl0eSk7XG5cXHRpZiAocHJpbmNpcGFsLnJvbGVzPy5pbmNsdWRlcyhBRE1JTl9ST0xFKSkge1xuXFx0XFx0Y2FuKFwibWFuYWdlXCIsIFwiYWxsXCIpO1xuXFx0XFx0cmV0dXJuIGJ1aWxkKCk7XG5cXHR9XG5cXHRmb3IgKGNvbnN0IHNjb3BlIG9mIHByaW5jaXBhbC5zY29wZXMgPz8gW10pIHtcblxcdFxcdGNvbnN0IFthY3Rpb24sIHN1YmplY3RdID0gc2NvcGUuc3BsaXQoXCI6XCIpO1xuXFx0XFx0aWYgKGFjdGlvbiAmJiBzdWJqZWN0KSBjYW4oYWN0aW9uLCBzdWJqZWN0KTtcblxcdH1cblxcdHJldHVybiBidWlsZCgpO1xufVxuXG4vKipcbiAqIE1hcCBKV1QgcGF5bG9hZCDihpIgUHJpbmNpcGFsLiBCb290c3RyYXBzIHRoZSBzZWVkZWQgQXV0aDAgYWRtaW4gXFxgc3ViXFxgIHdpdGhcbiAqIHRoZSBhZG1pbiByb2xlIHNvIGF1dGhvcml6YXRpb24gd29ya3MgYmVmb3JlL3dpdGhvdXQgcm9sZXMgaW4gdGhlIGFjY2VzcyB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFByaW5jaXBhbChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByaW5jaXBhbCB7XG5cXHRjb25zdCBzdWIgPSB0eXBlb2YgcGF5bG9hZC5zdWIgPT09IFwic3RyaW5nXCIgPyBwYXlsb2FkLnN1YiA6IFwiXCI7XG5cXHRjb25zdCBzY29wZXMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuc2NvcGVzKVxuXFx0XFx0PyAocGF5bG9hZC5zY29wZXMgYXMgc3RyaW5nW10pXG5cXHRcXHQ6IHR5cGVvZiBwYXlsb2FkLnNjb3BlID09PSBcInN0cmluZ1wiXG5cXHRcXHRcXHQ/IHBheWxvYWQuc2NvcGUuc3BsaXQoXCIgXCIpXG5cXHRcXHRcXHQ6IHVuZGVmaW5lZDtcblxcdGNvbnN0IGZyb21Ub2tlbiA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5yb2xlcylcblxcdFxcdD8gKHBheWxvYWQucm9sZXMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHIpOiByIGlzIHN0cmluZyA9PiB0eXBlb2YgciA9PT0gXCJzdHJpbmdcIilcblxcdFxcdDogW107XG5cXHRjb25zdCByb2xlcyA9XG5cXHRcXHRzdWIgJiYgc3ViID09PSBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX1NVQlxuXFx0XFx0XFx0PyBbLi4ubmV3IFNldChbQURNSU5fUk9MRSwgLi4uZnJvbVRva2VuXSldXG5cXHRcXHRcXHQ6IGZyb21Ub2tlbi5sZW5ndGggPiAwXG5cXHRcXHRcXHRcXHQ/IGZyb21Ub2tlblxuXFx0XFx0XFx0XFx0OiB1bmRlZmluZWQ7XG5cXHRyZXR1cm4geyAuLi5wYXlsb2FkLCBzdWIsIHJvbGVzLCBzY29wZXMgfTtcbn1cbmA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8QXV0aE9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPEF1dGhPcHRpb25zPj4ge1xuXHRpZiAoY2xpT3B0aW9ucy5hdXRoUHJvdmlkZXIgPT09IFwiYXV0aDBcIiAmJiAhY2xpT3B0aW9ucy5pc3N1ZXJCYXNlVXJsKSB7XG5cdFx0cmV0dXJuIGdldEF1dGgwT3B0aW9ucyh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMpO1xuXHR9XG5cdGlmIChjbGlPcHRpb25zLmF1dGhQcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFt7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCB9LCB7IGxhYmVsOiBcImF1dGgwXCIgYXMgY29uc3QgfV07XG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcIlxcbiAgQXV0aCBwcm92aWRlcjogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyICE9PSBcImF1dGgwXCIpIHJldHVybiB7IGF1dGhQcm92aWRlcjogXCJub25lXCIgfTtcblxuXHRyZXR1cm4gZ2V0QXV0aDBPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dGgwT3B0aW9ucyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8QXV0aE9wdGlvbnM+PiB7XG5cdGlmICghYXV0aDBDbGkuaXNJbnN0YWxsZWQoKSkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgVGhlIEF1dGgwIENMSSBpcyByZXF1aXJlZCBmb3IgYXV0b21hdGVkIHNldHVwLlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGw6IGJyZXcgaW5zdGFsbCBhdXRoMC9hdXRoMC1jbGkvYXV0aDBcXG5cIiArXG5cdFx0XHRcdFwiICBPciB2aXNpdDogaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2F1dGgwLWNsaVxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIENoZWNraW5nIEF1dGgwIGNyZWRlbnRpYWxzLi4uXCIpO1xuXHRsZXQgdGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdGlmICh0ZW5hbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG5vdCBsb2dnZWQgaW4uXFxuXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiICBMb2dnaW5nIGluIHRvIEF1dGgwICh5b3VyIGJyb3dzZXIgd2lsbCBvcGVuKS4uLlwiKTtcblx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIEF1dGgwIGxvZ2luIGZhaWxlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRhdXRoMENsaS5saXN0QXBpcygpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZSA9IHRlbmFudHMuZmluZCgodCkgPT4gdC5hY3RpdmUpID8/IHRlbmFudHNbMF07XG5cdGNvbnN0IGlzc3VlckJhc2VVcmwgPSBgaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWA7XG5cdGNvbnNvbGUubG9nKGBcXG4gIOKckyBBdXRoMCB0ZW5hbnQ6ICR7aXNzdWVyQmFzZVVybH1gKTtcblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRmV0Y2hpbmcgQXV0aDAgQVBJcy4uLlwiKTtcblx0Y29uc3QgdXNlckFwaXMgPSBhdXRoMENsaS5saXN0QXBpcygpLmZpbHRlcigoYSkgPT4gIWEubmFtZS5pbmNsdWRlcyhcIk1hbmFnZW1lbnQgQVBJXCIpKTtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYCBmb3VuZCAke3VzZXJBcGlzLmxlbmd0aH0uXFxuYCk7XG5cblx0dHlwZSBBcGlDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGV4aXN0aW5nOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGFwaUNob2ljZXM6IEFwaUNob2ljZVtdID0gW1xuXHRcdHsgbGFiZWw6IGA8bmV3PiBodHRwczovL2FwaS4ke3Byb2plY3ROYW1lfWAsIGV4aXN0aW5nOiBudWxsIH0sXG5cdFx0Li4udXNlckFwaXMubWFwKChhKSA9PiAoeyBsYWJlbDogYCR7YS5uYW1lfSDigJQgJHthLmlkZW50aWZpZXJ9YCwgZXhpc3Rpbmc6IGEuaWRlbnRpZmllciB9KSksXG5cdF07XG5cblx0Y29uc3QgYXBpU2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBTZWxlY3QgQXV0aDAgQVBJOiBcIiwgYXBpQ2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXG5cdGxldCBhdWRpZW5jZTogc3RyaW5nO1xuXHRpZiAoIWFwaVNlbGVjdGVkIHx8IGFwaVNlbGVjdGVkLmV4aXN0aW5nID09PSBudWxsKSB7XG5cdFx0Y29uc3QgZGVmYXVsdElkID0gYGh0dHBzOi8vYXBpLiR7cHJvamVjdE5hbWV9YDtcblx0XHRhdWRpZW5jZSA9IGF3YWl0IGFzayhgICBBUEkgSWRlbnRpZmllciBbJHtkZWZhdWx0SWR9XTogYCwgZGVmYXVsdElkKTtcblx0XHRjb25zb2xlLmxvZyhcIlxcbiAgQ3JlYXRpbmcgQXV0aDAgQVBJLi4uXCIpO1xuXHRcdGF1ZGllbmNlID0gYXV0aDBDbGkuY3JlYXRlQXBpKGAke3Byb2plY3ROYW1lfSBBUElgLCBhdWRpZW5jZSkuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIEFQSSBjcmVhdGVkOiAke2F1ZGllbmNlfWApO1xuXHR9IGVsc2Uge1xuXHRcdGF1ZGllbmNlID0gYXBpU2VsZWN0ZWQuZXhpc3Rpbmc7XG5cdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBTZWxlY3RlZDogJHthdWRpZW5jZX1gKTtcblx0XHR0cnkge1xuXHRcdFx0YXV0aDBDbGkudXBkYXRlQXBpU2NvcGVzKGF1ZGllbmNlKTtcblx0XHRcdGNvbnNvbGUubG9nKGAgIFxcdTI3MTMgQVBJIHNjb3BlcyBlbnN1cmVkICgke2F1dGgwQ2xpLkhFTExPX0FQSV9TQ09QRVMuam9pbihcIiwgXCIpfSlgKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFwiICDinJcgRmFpbGVkIHRvIHVwZGF0ZSBBUEkgc2NvcGVzIOKAlCBhZGQgSGVsbG8gc2NvcGVzIGluIHRoZSBBdXRoMCBkYXNoYm9hcmQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHdpdGhMb2NhbFVzZXJzID0gY2xpT3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyID09PSBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0bGV0IGFkbWluVXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IGFkbWluUGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0YWRtaW5Vc2VybmFtZSA9XG5cdFx0XHRjbGlPcHRpb25zLmFkbWluVXNlcm5hbWUgPz8gKGF3YWl0IGFzayhcIlxcbiAgQWRtaW4gdXNlcm5hbWUgW2FkbWluXTogXCIsIFwiYWRtaW5cIikpO1xuXHRcdGFkbWluUGFzc3dvcmQgPSBjbGlPcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdFx0aWYgKGFkbWluUGFzc3dvcmQgPT0gbnVsbCkge1xuXHRcdFx0YWRtaW5QYXNzd29yZCA9IGF3YWl0IGFzayhcIiAgQWRtaW4gcGFzc3dvcmQgKGxlYXZlIGJsYW5rIHRvIGdlbmVyYXRlKTogXCIpO1xuXHRcdFx0aWYgKCFhZG1pblBhc3N3b3JkKSB7XG5cdFx0XHRcdGFkbWluUGFzc3dvcmQgPSBhdXRoMENsaS5nZW5lcmF0ZUFkbWluUGFzc3dvcmQoKTtcblx0XHRcdFx0Y29uc29sZS5sb2coYCAg4pyTIEdlbmVyYXRlZCBhZG1pbiBwYXNzd29yZCAod3JpdHRlbiB0byAuZW52KTogJHthZG1pblBhc3N3b3JkfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YXV0aFByb3ZpZGVyOiBcImF1dGgwXCIsXG5cdFx0aXNzdWVyQmFzZVVybCxcblx0XHRhdWRpZW5jZSxcblx0XHQuLi4od2l0aExvY2FsVXNlcnMgPyB7IGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQgfSA6IHt9KSxcblx0fTtcbn1cblxuZnVuY3Rpb24gYWRtaW5FbWFpbCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAodXNlcm5hbWUuaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gdXNlcm5hbWU7XG5cdGNvbnN0IHNsdWcgPSB3b3Jrc3BhY2VOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIi1cIik7XG5cdHJldHVybiBgJHt1c2VybmFtZX1AJHtzbHVnfS5leGFtcGxlLmNvbWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dGgwQWRtaW5Vc2VyKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBBdXRoT3B0aW9ucyxcblx0YXV0aENvbmZpZzogQXV0aENvbmZpZ01vZGVsLFxuKTogdm9pZCB7XG5cdGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy5hZG1pblVzZXJuYW1lID8/IFwiYWRtaW5cIjtcblx0Y29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdGlmICghcGFzc3dvcmQpIHJldHVybjtcblxuXHR0cnkge1xuXHRcdGNvbnN0IGFkbWluID0gYXV0aDBDbGkuY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIoe1xuXHRcdFx0ZW1haWw6IGFkbWluRW1haWwod29ya3NwYWNlLm5hbWUsIHVzZXJuYW1lKSxcblx0XHRcdHBhc3N3b3JkLFxuXHRcdFx0dXNlcm5hbWUsXG5cdFx0fSk7XG5cdFx0YXV0aENvbmZpZy5zZXRBZG1pblVzZXIoe1xuXHRcdFx0c3ViOiBhZG1pbi51c2VyX2lkLFxuXHRcdFx0ZW1haWw6IGFkbWluLmVtYWlsLFxuXHRcdFx0cGFzc3dvcmQ6IGFkbWluLnBhc3N3b3JkLFxuXHRcdFx0dXNlcm5hbWU6IGFkbWluLnVzZXJuYW1lLFxuXHRcdH0pO1xuXHRcdHdvcmtzcGFjZVxuXHRcdFx0LmdldE1vZGVsPEVudkZpbGU+KFdFTExfS05PV05fRklMRVMuRU5WX0ZJTEUpXG5cdFx0XHQ/LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUl9TVUJcIiwgYWRtaW4udXNlcl9pZClcblx0XHRcdC5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJfRU1BSUxcIiwgYWRtaW4uZW1haWwpXG5cdFx0XHQuYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSX1BBU1NXT1JEXCIsIGFkbWluLnBhc3N3b3JkKVxuXHRcdFx0LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUk5BTUVcIiwgYWRtaW4udXNlcm5hbWUpO1xuXHRcdGNvbnNvbGUubG9nKGAgIOKckyBBdXRoMCBhZG1pbiB1c2VyIGNyZWF0ZWQ6ICR7YWRtaW4uZW1haWx9IChyb2xlOiAke0FETUlOX1JPTEV9KWApO1xuXHRcdGNvbnNvbGUubG9nKGAgICAgTG9naW4gd2l0aCBFTUFJTCAobm90IHVzZXJuYW1lKTogJHthZG1pbi5lbWFpbH1gKTtcblx0XHRjb25zb2xlLmxvZyhgICAgIFBhc3N3b3JkOiBzZWUgQVVUSDBfQURNSU5fVVNFUl9QQVNTV09SRCBpbiAuZW52YCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRgICDinJcgRmFpbGVkIHRvIGNyZWF0ZSBBdXRoMCBhZG1pbiB1c2VyOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnJ9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkKTogdm9pZCB7XG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxQYWNrYWdlSnNvbj4oV0VMTF9LTk9XTl9GSUxFUy5QQUNLQUdFX0pTT04pXG5cdFx0Py5hZGREZXBlbmRlbmN5KFwiQGNhc2wvYWJpbGl0eVwiLCBcIl42LjguMVwiKTtcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPEFwaVBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLkFQSV9QQUNLQUdFX0pTT04pXG5cdFx0Py5hZGREZXBlbmRlbmN5KFwiQGNhc2wvYWJpbGl0eVwiLCBcIl42LjguMVwiKTtcblxuXHRjb25zdCBtYWluID0gd29ya3NwYWNlLmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpO1xuXHRtYWluXG5cdFx0Py5hZGRFbnRpdHkoeyBjbGFzc05hbWU6IFwiVXNlckVudGl0eVwiLCBpbXBvcnRQYXRoOiBcIi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIiB9KVxuXHRcdC5hZGRSZXBvc2l0b3J5KHtcblx0XHRcdGNsYXNzTmFtZTogXCJVc2VyRW50aXR5UmVwb3NpdG9yeVwiLFxuXHRcdFx0aW1wb3J0UGF0aDogXCIuL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkuanNcIixcblx0XHR9KVxuXHRcdC5hZGRTZXJ2aWNlKHtcblx0XHRcdGNsYXNzTmFtZTogXCJVc2VyU2VydmljZVwiLFxuXHRcdFx0aW1wb3J0UGF0aDogXCIuL3NlcnZpY2VzL3VzZXIuc2VydmljZS5qc1wiLFxuXHRcdFx0c2NvcGU6IFwicmVxdWVzdFwiLFxuXHRcdH0pXG5cdFx0LmFkZEltcG9ydChcImNyZWF0ZUFiaWxpdHlGYWN0b3J5XCIsIFwiLi9hdXRoL2FiaWxpdHkuZmFjdG9yeS5qc1wiKVxuXHRcdC5hZGRJbXBvcnQoXCJtYXBQcmluY2lwYWxcIiwgXCIuL2F1dGgvYWJpbGl0eS5mYWN0b3J5LmpzXCIpXG5cdFx0LnNldFR5cGVPcm1TZWVkKFxuXHRcdFx0W1xuXHRcdFx0XHRcImNvbnN0IHN1YiA9IHByb2Nlc3MuZW52LkFVVEgwX0FETUlOX1VTRVJfU1VCO1wiLFxuXHRcdFx0XHRcImlmICghc3ViKSByZXR1cm47XCIsXG5cdFx0XHRcdFwiY29uc3QgcmVwbyA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShVc2VyRW50aXR5KTtcIixcblx0XHRcdFx0XCJjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlcG8uZmluZE9uZSh7IHdoZXJlOiB7IHN1YiB9IH0pO1wiLFxuXHRcdFx0XHRcImlmIChleGlzdGluZykgcmV0dXJuO1wiLFxuXHRcdFx0XHRcImF3YWl0IHJlcG8uc2F2ZShyZXBvLmNyZWF0ZSh7XCIsXG5cdFx0XHRcdFwiICBzdWIsXCIsXG5cdFx0XHRcdFwiICBlbWFpbDogcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUl9FTUFJTCA/PyBudWxsLFwiLFxuXHRcdFx0XHQnICBkaXNwbGF5TmFtZTogcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUk5BTUUgPz8gXCJhZG1pblwiLCcsXG5cdFx0XHRcdCcgIHJvbGVzOiBbXCJhZG1pblwiXSwnLFxuXHRcdFx0XHRcIn0pKTtcIixcblx0XHRcdF0uam9pbihcIiBcIiksXG5cdFx0KTtcblxuXHR3b3Jrc3BhY2UuZ2V0UHJvamVjdChXRUJBUElfUFJPSkVDVF9ESVIpPy5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvZW50aXRpZXMvdXNlci5lbnRpdHkudHNcIiwgY29udGVudDogVVNFUl9FTlRJVFlfVFMgfSxcblx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkudHNcIiwgY29udGVudDogVVNFUl9SRVBPU0lUT1JZX1RTIH0sXG5cdFx0XHR7IGZpbGVQYXRoOiBcInNyYy9zZXJ2aWNlcy91c2VyLnNlcnZpY2UudHNcIiwgY29udGVudDogVVNFUl9TRVJWSUNFX1RTIH0sXG5cdFx0XHR7IGZpbGVQYXRoOiBcInNyYy9hdXRoL2FiaWxpdHkuZmFjdG9yeS50c1wiLCBjb250ZW50OiBBQklMSVRZX0ZBQ1RPUllfVFMgfSxcblx0XHRdLFxuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2Ygd29ya3NwYWNlLmdldE1vZGVscyhDb250cm9sbGVyU291cmNlRmlsZSkpIHtcblx0XHRjb250cm9sbGVyXG5cdFx0XHQuYWRkSW1wb3J0KFwiVXNlclNlcnZpY2VcIiwgXCIuLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UuanNcIilcblx0XHRcdC5hZGRDb25zdHJ1Y3RvclBhcmFtKFwicHJpdmF0ZSByZWFkb25seSB1c2VyczogVXNlclNlcnZpY2VcIik7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJnZXRPbmVcIikuc2V0QXN5bmModHJ1ZSkuc2V0Qm9keShbXG5cdFx0XHRcImNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJzLmVuc3VyZUZyb21QcmluY2lwYWwodGhpcy5wcmluY2lwYWxQcm92aWRlci5jdXJyZW50UHJpbmNpcGFsKTtcIixcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFwicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke3VzZXIuZGlzcGxheU5hbWV9IWAsIHVzZXJuYW1lOiB1c2VyLmRpc3BsYXlOYW1lIH07XCIsXG5cdFx0XSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NhZmZvbGQod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgb3B0aW9uczogQXV0aE9wdGlvbnMpOiB2b2lkIHtcblx0aWYgKG9wdGlvbnMuYXV0aFByb3ZpZGVyICE9PSBcImF1dGgwXCIpIHJldHVybjtcblxuXHRjb25zdCByZXNvdXJjZSA9IFwiSGVsbG9cIjtcblx0Y29uc3Qgd2l0aExvY2FsVXNlcnMgPSBvcHRpb25zLmRhdGFiYXNlUHJvdmlkZXIgPT09IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXG5cdGZvciAoY29uc3QgY29udHJvbGxlciBvZiB3b3Jrc3BhY2UuZ2V0TW9kZWxzKENvbnRyb2xsZXJTb3VyY2VGaWxlKSkge1xuXHRcdGNvbnRyb2xsZXJcblx0XHRcdC5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJyZWFkXCIsIFwiJHtyZXNvdXJjZX1cIilgKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIkFsbG93QW5vbnltb3VzXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiQXV0aG9yaXplXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiSVByaW5jaXBhbFByb3ZpZGVyVG9rZW5cIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJJUHJpbmNpcGFsUHJvdmlkZXJcIiwgdHJ1ZSlcblx0XHRcdC5hZGRJbXBvcnQoXCJpbmplY3RcIiwgXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiKVxuXHRcdFx0LmFkZENvbnN0cnVjdG9yUGFyYW0oXG5cdFx0XHRcdGBAaW5qZWN0KElQcmluY2lwYWxQcm92aWRlclRva2VuKSBwcml2YXRlIHJlYWRvbmx5IHByaW5jaXBhbFByb3ZpZGVyOiBJUHJpbmNpcGFsUHJvdmlkZXJgLFxuXHRcdFx0KTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldEFsbFwiKS5hZGREZWNvcmF0b3IoXCJAQWxsb3dBbm9ueW1vdXMoKVwiKTtcblx0XHRpZiAoIXdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldE9uZVwiKS5zZXRCb2R5KFtcblx0XHRcdFx0XCJjb25zdCBwcmluY2lwYWwgPSB0aGlzLnByaW5jaXBhbFByb3ZpZGVyLmN1cnJlbnRQcmluY2lwYWw7XCIsXG5cdFx0XHRcdFwiY29uc3QgdXNlcm5hbWUgPVwiLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/Lm5hbWUgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLm5hbWUpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5uaWNrbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwubmlja25hbWUpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5lbWFpbCA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwuZW1haWwpIHx8Jyxcblx0XHRcdFx0J1xcdCh0eXBlb2YgcHJpbmNpcGFsPy5wcmVmZXJyZWRfdXNlcm5hbWUgPT09IFwic3RyaW5nXCIgJiYgcHJpbmNpcGFsLnByZWZlcnJlZF91c2VybmFtZSkgfHwnLFxuXHRcdFx0XHRcIlxcdHByaW5jaXBhbD8uc3ViIHx8XCIsXG5cdFx0XHRcdCdcXHRcInVua25vd25cIjsnLFxuXHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiB0ZW1wbGF0ZSBsaXRlcmFsIGluIGdlbmVyYXRlZCBjb2RlXG5cdFx0XHRcdFwicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke3VzZXJuYW1lfSFgLCB1c2VybmFtZSB9O1wiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiY3JlYXRlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcImNyZWF0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJ1cGRhdGVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwidXBkYXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcInJlbW92ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJkZWxldGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHR9XG5cblx0Y29uc3QgbWFpbiA9IHdvcmtzcGFjZS5nZXRNb2RlbDxNYWluU291cmNlRmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTKTtcblx0bWFpbj8uYWRkU2lkZUVmZmVjdEltcG9ydChcIkBkZWNvaGVyZS9jb3J0ZXgvYXV0aFwiKTtcblxuXHRpZiAod2l0aExvY2FsVXNlcnMpIHtcblx0XHRzY2FmZm9sZExvY2FsVXNlclByb2ZpbGUod29ya3NwYWNlKTtcblx0XHRtYWluPy5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aChjcmVhdGVBYmlsaXR5RmFjdG9yeSwgeyBwcmluY2lwYWxNYXBwZXI6IG1hcFByaW5jaXBhbCB9KVwiKTtcblx0fSBlbHNlIHtcblx0XHRtYWluPy5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aCgpXCIpO1xuXHR9XG5cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogaW50ZW50aW9uYWwgWUFNTCBlbnYtdmFyIHBsYWNlaG9sZGVyc1xuXHRjb25zdCBpc3N1ZXJQbGFjZWhvbGRlciA9IFwiJHtBVVRIMF9JU1NVRVJfQkFTRV9VUkx9XCI7XG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgYXVkUGxhY2Vob2xkZXIgPSBcIiR7QVVUSDBfQVVESUVOQ0V9XCI7XG5cblx0Y29uc3QgY29uZmlnU2VjdGlvbiA9IGBhdXRoOlxcbiAgZGlzY292ZXJ5VXJsOiAke2lzc3VlclBsYWNlaG9sZGVyfVxcbiAgYXVkaWVuY2U6ICR7YXVkUGxhY2Vob2xkZXJ9XFxuYDtcblxuXHR3b3Jrc3BhY2UuZ2V0TW9kZWw8Q29uZmlnWWFtbD4oV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCk/LmFkZFNlY3Rpb24oY29uZmlnU2VjdGlvbik7XG5cblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPEVudkZpbGU+KFdFTExfS05PV05fRklMRVMuRU5WX0ZJTEUpXG5cdFx0Py5hZGRFbnRyeShcIkFVVEgwX0lTU1VFUl9CQVNFX1VSTFwiLCBvcHRpb25zLmlzc3VlckJhc2VVcmwgPz8gXCJcIilcblx0XHQuYWRkRW50cnkoXCJBVVRIMF9BVURJRU5DRVwiLCBvcHRpb25zLmF1ZGllbmNlID8/IFwiXCIpO1xuXG5cdGNvbnN0IGF1dGhDb25maWcgPSBuZXcgQXV0aENvbmZpZ01vZGVsKHtcblx0XHRpc3N1ZXJCYXNlVXJsOiBvcHRpb25zLmlzc3VlckJhc2VVcmwgPz8gXCJcIixcblx0XHRhdWRpZW5jZTogb3B0aW9ucy5hdWRpZW5jZSA/PyBcIlwiLFxuXHR9KTtcblx0d29ya3NwYWNlLmFkZE1vZGVsKGF1dGhDb25maWcpO1xuXG5cdGlmICh3aXRoTG9jYWxVc2VycyAmJiBvcHRpb25zLmFkbWluUGFzc3dvcmQpIHtcblx0XHRjcmVhdGVBdXRoMEFkbWluVXNlcih3b3Jrc3BhY2UsIG9wdGlvbnMsIGF1dGhDb25maWcpO1xuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBBdXRoRmVhdHVyZTogRmVhdHVyZTxBdXRoT3B0aW9ucz4gPSB7IGdldE9wdGlvbnMsIHNjYWZmb2xkIH07XG4iXSwibmFtZXMiOlsiQXV0aEZlYXR1cmUiLCJBRE1JTl9ST0xFIiwiVVNFUl9FTlRJVFlfVFMiLCJVU0VSX1JFUE9TSVRPUllfVFMiLCJVU0VSX1NFUlZJQ0VfVFMiLCJBQklMSVRZX0ZBQ1RPUllfVFMiLCJnZXRPcHRpb25zIiwid29ya3NwYWNlIiwiY2xpT3B0aW9ucyIsImF1dGhQcm92aWRlciIsImlzc3VlckJhc2VVcmwiLCJnZXRBdXRoME9wdGlvbnMiLCJjaG9pY2VzIiwibGFiZWwiLCJzZWxlY3RlZCIsInBpY2siLCJjIiwicHJvdmlkZXIiLCJhdXRoMENsaSIsImlzSW5zdGFsbGVkIiwiY29uc29sZSIsImVycm9yIiwicHJvY2VzcyIsImV4aXQiLCJzdGRvdXQiLCJ3cml0ZSIsInRlbmFudHMiLCJsaXN0VGVuYW50cyIsImxlbmd0aCIsImxvZyIsImxvZ2luIiwibGlzdEFwaXMiLCJlcnIiLCJBdXRoMEF1dGhFcnJvciIsImFjdGl2ZSIsImZpbmQiLCJ0IiwibmFtZSIsInVzZXJBcGlzIiwiZmlsdGVyIiwiYSIsImluY2x1ZGVzIiwicHJvamVjdE5hbWUiLCJhcGlDaG9pY2VzIiwiZXhpc3RpbmciLCJtYXAiLCJpZGVudGlmaWVyIiwiYXBpU2VsZWN0ZWQiLCJhdWRpZW5jZSIsImRlZmF1bHRJZCIsImFzayIsImNyZWF0ZUFwaSIsInVwZGF0ZUFwaVNjb3BlcyIsIkhFTExPX0FQSV9TQ09QRVMiLCJqb2luIiwid2l0aExvY2FsVXNlcnMiLCJkYXRhYmFzZVByb3ZpZGVyIiwiYWRtaW5Vc2VybmFtZSIsImFkbWluUGFzc3dvcmQiLCJnZW5lcmF0ZUFkbWluUGFzc3dvcmQiLCJhZG1pbkVtYWlsIiwid29ya3NwYWNlTmFtZSIsInVzZXJuYW1lIiwic2x1ZyIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImNyZWF0ZUF1dGgwQWRtaW5Vc2VyIiwib3B0aW9ucyIsImF1dGhDb25maWciLCJwYXNzd29yZCIsImFkbWluIiwiY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIiLCJlbWFpbCIsInNldEFkbWluVXNlciIsInN1YiIsInVzZXJfaWQiLCJnZXRNb2RlbCIsIldFTExfS05PV05fRklMRVMiLCJFTlZfRklMRSIsImFkZEVudHJ5IiwiRXJyb3IiLCJtZXNzYWdlIiwic2NhZmZvbGRMb2NhbFVzZXJQcm9maWxlIiwiUEFDS0FHRV9KU09OIiwiYWRkRGVwZW5kZW5jeSIsIkFQSV9QQUNLQUdFX0pTT04iLCJtYWluIiwiTUFJTl9UUyIsImFkZEVudGl0eSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJhZGRSZXBvc2l0b3J5IiwiYWRkU2VydmljZSIsInNjb3BlIiwiYWRkSW1wb3J0Iiwic2V0VHlwZU9ybVNlZWQiLCJnZXRQcm9qZWN0IiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiY29udHJvbGxlciIsImdldE1vZGVscyIsIkNvbnRyb2xsZXJTb3VyY2VGaWxlIiwiYWRkQ29uc3RydWN0b3JQYXJhbSIsImdldE1ldGhvZCIsInNldEFzeW5jIiwic2V0Qm9keSIsInNjYWZmb2xkIiwicmVzb3VyY2UiLCJhZGREZWNvcmF0b3IiLCJhZGRDb3J0ZXhJbXBvcnQiLCJhZGRTaWRlRWZmZWN0SW1wb3J0IiwiYWRkQnVpbGRlckNhbGwiLCJpc3N1ZXJQbGFjZWhvbGRlciIsImF1ZFBsYWNlaG9sZGVyIiwiY29uZmlnU2VjdGlvbiIsIkNPTkZJR19ZQU1MIiwiYWRkU2VjdGlvbiIsIkF1dGhDb25maWdNb2RlbCIsImFkZE1vZGVsIl0sIm1hcHBpbmdzIjoiOzs7OytCQTZjYUE7OztlQUFBQTs7O3dCQTdjYTt1QkFFTzsyQkFLRTtpQ0FFSDsyQ0FDSztrRUFFWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzFCLE1BQU1DLGFBQWE7QUFFbkIsTUFBTUMsaUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCeEIsQ0FBQztBQUVELE1BQU1DLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlNUIsQ0FBQztBQUVELE1BQU1DLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUR6QixDQUFDO0FBRUQsTUFBTUMscUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDNUIsQ0FBQztBQUVELGVBQWVDLFdBQ2RDLFNBQTRCLEVBQzVCQyxVQUFnQztJQUVoQyxJQUFJQSxXQUFXQyxZQUFZLEtBQUssV0FBVyxDQUFDRCxXQUFXRSxhQUFhLEVBQUU7UUFDckUsT0FBT0MsZ0JBQWdCSixXQUFXQztJQUNuQztJQUNBLElBQUlBLFdBQVdDLFlBQVksSUFBSSxNQUFNLE9BQU8sQ0FBQztJQUU3QyxNQUFNRyxVQUFVO1FBQUM7WUFBRUMsT0FBTztRQUFnQjtRQUFHO1lBQUVBLE9BQU87UUFBaUI7S0FBRTtJQUN6RSxNQUFNQyxXQUFXLE1BQU1DLElBQUFBLFlBQUksRUFBQyx1QkFBdUJILFNBQVMsQ0FBQ0ksSUFBTUEsRUFBRUgsS0FBSztJQUMxRSxNQUFNSSxXQUFXSCxVQUFVRCxTQUFTO0lBRXBDLElBQUlJLGFBQWEsU0FBUyxPQUFPO1FBQUVSLGNBQWM7SUFBTztJQUV4RCxPQUFPRSxnQkFBZ0JKLFdBQVdDO0FBQ25DO0FBRUEsZUFBZUcsZ0JBQ2RKLFNBQTRCLEVBQzVCQyxVQUFnQztJQUVoQyxJQUFJLENBQUNVLFVBQVNDLFdBQVcsSUFBSTtRQUM1QkMsUUFBUUMsS0FBSyxDQUNaLHlEQUNDLG9EQUNBO1FBRUZDLFFBQVFDLElBQUksQ0FBQztJQUNkO0lBRUFELFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ3JCLElBQUlDLFVBQVVSLFVBQVNTLFdBQVc7SUFDbEMsSUFBSUQsUUFBUUUsTUFBTSxLQUFLLEdBQUc7UUFDekJOLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO1FBQ3JCTCxRQUFRUyxHQUFHLENBQUM7UUFDWixJQUFJLENBQUNYLFVBQVNZLEtBQUssSUFBSTtZQUN0QlYsUUFBUUMsS0FBSyxDQUFDO1lBQ2RDLFFBQVFDLElBQUksQ0FBQztRQUNkO1FBQ0FHLFVBQVVSLFVBQVNTLFdBQVc7SUFDL0I7SUFFQSxJQUFJO1FBQ0hULFVBQVNhLFFBQVE7UUFDakJULFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ3RCLEVBQUUsT0FBT08sS0FBSztRQUNiLElBQUlBLGVBQWVkLFVBQVNlLGNBQWMsRUFBRTtZQUMzQ1gsUUFBUUUsTUFBTSxDQUFDQyxLQUFLLENBQUM7WUFDckJMLFFBQVFTLEdBQUcsQ0FBQztZQUNaLElBQUksQ0FBQ1gsVUFBU1ksS0FBSyxJQUFJO2dCQUN0QlYsUUFBUUMsS0FBSyxDQUFDO2dCQUNkQyxRQUFRQyxJQUFJLENBQUM7WUFDZDtRQUNEO0lBQ0Q7SUFFQSxNQUFNVyxTQUFTUixRQUFRUyxJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUYsTUFBTSxLQUFLUixPQUFPLENBQUMsRUFBRTtJQUMxRCxNQUFNaEIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFd0IsT0FBT0csSUFBSSxFQUFFO0lBQzlDakIsUUFBUVMsR0FBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUVuQixlQUFlO0lBRWxEWSxRQUFRRSxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNyQixNQUFNYSxXQUFXcEIsVUFBU2EsUUFBUSxHQUFHUSxNQUFNLENBQUMsQ0FBQ0MsSUFBTSxDQUFDQSxFQUFFSCxJQUFJLENBQUNJLFFBQVEsQ0FBQztJQUNwRW5CLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFYSxTQUFTVixNQUFNLENBQUMsR0FBRyxDQUFDO0lBR25ELE1BQU1jLGNBQWNuQyxVQUFVOEIsSUFBSTtJQUNsQyxNQUFNTSxhQUEwQjtRQUMvQjtZQUFFOUIsT0FBTyxDQUFDLGtCQUFrQixFQUFFNkIsYUFBYTtZQUFFRSxVQUFVO1FBQUs7V0FDekROLFNBQVNPLEdBQUcsQ0FBQyxDQUFDTCxJQUFPLENBQUE7Z0JBQUUzQixPQUFPLEdBQUcyQixFQUFFSCxJQUFJLENBQUMsR0FBRyxFQUFFRyxFQUFFTSxVQUFVLEVBQUU7Z0JBQUVGLFVBQVVKLEVBQUVNLFVBQVU7WUFBQyxDQUFBO0tBQ3ZGO0lBRUQsTUFBTUMsY0FBYyxNQUFNaEMsSUFBQUEsWUFBSSxFQUFDLDBCQUEwQjRCLFlBQVksQ0FBQzNCLElBQU1BLEVBQUVILEtBQUs7SUFFbkYsSUFBSW1DO0lBQ0osSUFBSSxDQUFDRCxlQUFlQSxZQUFZSCxRQUFRLEtBQUssTUFBTTtRQUNsRCxNQUFNSyxZQUFZLENBQUMsWUFBWSxFQUFFUCxhQUFhO1FBQzlDTSxXQUFXLE1BQU1FLElBQUFBLFdBQUcsRUFBQyxDQUFDLGtCQUFrQixFQUFFRCxVQUFVLEdBQUcsQ0FBQyxFQUFFQTtRQUMxRDdCLFFBQVFTLEdBQUcsQ0FBQztRQUNabUIsV0FBVzlCLFVBQVNpQyxTQUFTLENBQUMsR0FBR1QsWUFBWSxJQUFJLENBQUMsRUFBRU0sVUFBVUYsVUFBVTtRQUN4RTFCLFFBQVFTLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQixFQUFFbUIsVUFBVTtJQUNoRCxPQUFPO1FBQ05BLFdBQVdELFlBQVlILFFBQVE7UUFDL0J4QixRQUFRUyxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsRUFBRW1CLFVBQVU7UUFDNUMsSUFBSTtZQUNIOUIsVUFBU2tDLGVBQWUsQ0FBQ0o7WUFDekI1QixRQUFRUyxHQUFHLENBQUMsQ0FBQyw2QkFBNkIsRUFBRVgsVUFBU21DLGdCQUFnQixDQUFDQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEYsRUFBRSxPQUFNO1lBQ1BsQyxRQUFRQyxLQUFLLENBQ1o7UUFFRjtJQUNEO0lBRUEsTUFBTWtDLGlCQUFpQi9DLFdBQVdnRCxnQkFBZ0IsS0FBSztJQUN2RCxJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUgsZ0JBQWdCO1FBQ25CRSxnQkFDQ2pELFdBQVdpRCxhQUFhLElBQUssTUFBTVAsSUFBQUEsV0FBRyxFQUFDLGdDQUFnQztRQUN4RVEsZ0JBQWdCbEQsV0FBV2tELGFBQWE7UUFDeEMsSUFBSUEsaUJBQWlCLE1BQU07WUFDMUJBLGdCQUFnQixNQUFNUixJQUFBQSxXQUFHLEVBQUM7WUFDMUIsSUFBSSxDQUFDUSxlQUFlO2dCQUNuQkEsZ0JBQWdCeEMsVUFBU3lDLHFCQUFxQjtnQkFDOUN2QyxRQUFRUyxHQUFHLENBQUMsQ0FBQyxnREFBZ0QsRUFBRTZCLGVBQWU7WUFDL0U7UUFDRDtJQUNEO0lBRUEsT0FBTztRQUNOakQsY0FBYztRQUNkQztRQUNBc0M7UUFDQSxHQUFJTyxpQkFBaUI7WUFBRUU7WUFBZUM7UUFBYyxJQUFJLENBQUMsQ0FBQztJQUMzRDtBQUNEO0FBRUEsU0FBU0UsV0FBV0MsYUFBcUIsRUFBRUMsUUFBZ0I7SUFDMUQsSUFBSUEsU0FBU3JCLFFBQVEsQ0FBQyxNQUFNLE9BQU9xQjtJQUNuQyxNQUFNQyxPQUFPRixjQUFjRyxXQUFXLEdBQUdDLE9BQU8sQ0FBQyxlQUFlO0lBQ2hFLE9BQU8sR0FBR0gsU0FBUyxDQUFDLEVBQUVDLEtBQUssWUFBWSxDQUFDO0FBQ3pDO0FBRUEsU0FBU0cscUJBQ1IzRCxTQUE0QixFQUM1QjRELE9BQW9CLEVBQ3BCQyxVQUEyQjtJQUUzQixNQUFNTixXQUFXSyxRQUFRVixhQUFhLElBQUk7SUFDMUMsTUFBTVksV0FBV0YsUUFBUVQsYUFBYTtJQUN0QyxJQUFJLENBQUNXLFVBQVU7SUFFZixJQUFJO1FBQ0gsTUFBTUMsUUFBUXBELFVBQVNxRCx1QkFBdUIsQ0FBQztZQUM5Q0MsT0FBT1osV0FBV3JELFVBQVU4QixJQUFJLEVBQUV5QjtZQUNsQ087WUFDQVA7UUFDRDtRQUNBTSxXQUFXSyxZQUFZLENBQUM7WUFDdkJDLEtBQUtKLE1BQU1LLE9BQU87WUFDbEJILE9BQU9GLE1BQU1FLEtBQUs7WUFDbEJILFVBQVVDLE1BQU1ELFFBQVE7WUFDeEJQLFVBQVVRLE1BQU1SLFFBQVE7UUFDekI7UUFDQXZELFVBQ0VxRSxRQUFRLENBQVVDLHVCQUFnQixDQUFDQyxRQUFRLEdBQzFDQyxTQUFTLHdCQUF3QlQsTUFBTUssT0FBTyxFQUMvQ0ksU0FBUywwQkFBMEJULE1BQU1FLEtBQUssRUFDOUNPLFNBQVMsNkJBQTZCVCxNQUFNRCxRQUFRLEVBQ3BEVSxTQUFTLHdCQUF3QlQsTUFBTVIsUUFBUTtRQUNqRDFDLFFBQVFTLEdBQUcsQ0FBQyxDQUFDLDhCQUE4QixFQUFFeUMsTUFBTUUsS0FBSyxDQUFDLFFBQVEsRUFBRXZFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hGbUIsUUFBUVMsR0FBRyxDQUFDLENBQUMscUNBQXFDLEVBQUV5QyxNQUFNRSxLQUFLLEVBQUU7UUFDakVwRCxRQUFRUyxHQUFHLENBQUMsQ0FBQyxtREFBbUQsQ0FBQztJQUNsRSxFQUFFLE9BQU9HLEtBQUs7UUFDYlosUUFBUUMsS0FBSyxDQUNaLENBQUMsdUNBQXVDLEVBQUVXLGVBQWVnRCxRQUFRaEQsSUFBSWlELE9BQU8sR0FBR2pELEtBQUs7SUFFdEY7QUFDRDtBQUVBLFNBQVNrRCx5QkFBeUIzRSxTQUE0QjtJQUM3REEsVUFDRXFFLFFBQVEsQ0FBY0MsdUJBQWdCLENBQUNNLFlBQVksR0FDbERDLGNBQWMsaUJBQWlCO0lBQ2xDN0UsVUFDRXFFLFFBQVEsQ0FBaUJDLHVCQUFnQixDQUFDUSxnQkFBZ0IsR0FDekRELGNBQWMsaUJBQWlCO0lBRWxDLE1BQU1FLE9BQU8vRSxVQUFVcUUsUUFBUSxDQUFpQkMsdUJBQWdCLENBQUNVLE9BQU87SUFDeEVELE1BQ0dFLFVBQVU7UUFBRUMsV0FBVztRQUFjQyxZQUFZO0lBQTRCLEdBQzlFQyxjQUFjO1FBQ2RGLFdBQVc7UUFDWEMsWUFBWTtJQUNiLEdBQ0NFLFdBQVc7UUFDWEgsV0FBVztRQUNYQyxZQUFZO1FBQ1pHLE9BQU87SUFDUixHQUNDQyxVQUFVLHdCQUF3Qiw2QkFDbENBLFVBQVUsZ0JBQWdCLDZCQUMxQkMsZUFDQTtRQUNDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDQSxDQUFDekMsSUFBSSxDQUFDO0lBR1QvQyxVQUFVeUYsVUFBVSxDQUFDQyw2QkFBa0IsR0FBR0MsUUFBUTtRQUNqREMsT0FBTyxJQUFNO2dCQUNaO29CQUFFQyxVQUFVO29CQUErQkMsU0FBU25HO2dCQUFlO2dCQUNuRTtvQkFBRWtHLFVBQVU7b0JBQXVDQyxTQUFTbEc7Z0JBQW1CO2dCQUMvRTtvQkFBRWlHLFVBQVU7b0JBQWdDQyxTQUFTakc7Z0JBQWdCO2dCQUNyRTtvQkFBRWdHLFVBQVU7b0JBQStCQyxTQUFTaEc7Z0JBQW1CO2FBQ3ZFO0lBQ0Y7SUFFQSxLQUFLLE1BQU1pRyxjQUFjL0YsVUFBVWdHLFNBQVMsQ0FBQ0MsK0NBQW9CLEVBQUc7UUFDbkVGLFdBQ0VSLFNBQVMsQ0FBQyxlQUFlLCtCQUN6QlcsbUJBQW1CLENBQUM7UUFDdEJILFdBQVdJLFNBQVMsQ0FBQyxVQUFVQyxRQUFRLENBQUMsTUFBTUMsT0FBTyxDQUFDO1lBQ3JEO1lBQ0EsMkZBQTJGO1lBQzNGO1NBQ0E7SUFDRjtBQUNEO0FBRUEsU0FBU0MsU0FBU3RHLFNBQTRCLEVBQUU0RCxPQUFvQjtJQUNuRSxJQUFJQSxRQUFRMUQsWUFBWSxLQUFLLFNBQVM7SUFFdEMsTUFBTXFHLFdBQVc7SUFDakIsTUFBTXZELGlCQUFpQlksUUFBUVgsZ0JBQWdCLEtBQUs7SUFFcEQsS0FBSyxNQUFNOEMsY0FBYy9GLFVBQVVnRyxTQUFTLENBQUNDLCtDQUFvQixFQUFHO1FBQ25FRixXQUNFUyxZQUFZLENBQUMsQ0FBQyxvQkFBb0IsRUFBRUQsU0FBUyxFQUFFLENBQUMsRUFDaERFLGVBQWUsQ0FBQyxrQkFDaEJBLGVBQWUsQ0FBQyxhQUNoQkEsZUFBZSxDQUFDLDJCQUNoQkEsZUFBZSxDQUFDLHNCQUFzQixNQUN0Q2xCLFNBQVMsQ0FBQyxVQUFVLGlDQUNwQlcsbUJBQW1CLENBQ25CLENBQUMsdUZBQXVGLENBQUM7UUFFM0ZILFdBQVdJLFNBQVMsQ0FBQyxVQUFVSyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDeEQsZ0JBQWdCO1lBQ3BCK0MsV0FBV0ksU0FBUyxDQUFDLFVBQVVFLE9BQU8sQ0FBQztnQkFDdEM7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0EsMkZBQTJGO2dCQUMzRjthQUNBO1FBQ0Y7UUFDQU4sV0FBV0ksU0FBUyxDQUFDLFVBQVVLLFlBQVksQ0FBQyxDQUFDLHNCQUFzQixFQUFFRCxTQUFTLEVBQUUsQ0FBQztRQUNqRlIsV0FBV0ksU0FBUyxDQUFDLFVBQVVLLFlBQVksQ0FBQyxDQUFDLHNCQUFzQixFQUFFRCxTQUFTLEVBQUUsQ0FBQztRQUNqRlIsV0FBV0ksU0FBUyxDQUFDLFVBQVVLLFlBQVksQ0FBQyxDQUFDLHNCQUFzQixFQUFFRCxTQUFTLEVBQUUsQ0FBQztJQUNsRjtJQUVBLE1BQU14QixPQUFPL0UsVUFBVXFFLFFBQVEsQ0FBaUJDLHVCQUFnQixDQUFDVSxPQUFPO0lBQ3hFRCxNQUFNMkIsb0JBQW9CO0lBRTFCLElBQUkxRCxnQkFBZ0I7UUFDbkIyQix5QkFBeUIzRTtRQUN6QitFLE1BQU00QixlQUFlO0lBQ3RCLE9BQU87UUFDTjVCLE1BQU00QixlQUFlO0lBQ3RCO0lBRUEsOEZBQThGO0lBQzlGLE1BQU1DLG9CQUFvQjtJQUMxQiw4RkFBOEY7SUFDOUYsTUFBTUMsaUJBQWlCO0lBRXZCLE1BQU1DLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFRixrQkFBa0IsY0FBYyxFQUFFQyxlQUFlLEVBQUUsQ0FBQztJQUVwRzdHLFVBQVVxRSxRQUFRLENBQWFDLHVCQUFnQixDQUFDeUMsV0FBVyxHQUFHQyxXQUFXRjtJQUV6RTlHLFVBQ0VxRSxRQUFRLENBQVVDLHVCQUFnQixDQUFDQyxRQUFRLEdBQzFDQyxTQUFTLHlCQUF5QlosUUFBUXpELGFBQWEsSUFBSSxJQUM1RHFFLFNBQVMsa0JBQWtCWixRQUFRbkIsUUFBUSxJQUFJO0lBRWpELE1BQU1vQixhQUFhLElBQUlvRCxnQ0FBZSxDQUFDO1FBQ3RDOUcsZUFBZXlELFFBQVF6RCxhQUFhLElBQUk7UUFDeENzQyxVQUFVbUIsUUFBUW5CLFFBQVEsSUFBSTtJQUMvQjtJQUNBekMsVUFBVWtILFFBQVEsQ0FBQ3JEO0lBRW5CLElBQUliLGtCQUFrQlksUUFBUVQsYUFBYSxFQUFFO1FBQzVDUSxxQkFBcUIzRCxXQUFXNEQsU0FBU0M7SUFDMUM7QUFDRDtBQUVPLE1BQU1wRSxjQUFvQztJQUFFTTtJQUFZdUc7QUFBUyJ9
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc2ssIHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiB9IGZyb20gXCIuLi9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4uL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBDb250cm9sbGVyU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNYWluU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0ICogYXMgYXV0aDBDbGkgZnJvbSBcIi4vYXV0aDAtY2xpLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEF1dGhPcHRpb25zID0ge1xuXHRhdXRoUHJvdmlkZXI/OiBcImF1dGgwXCIgfCBcIm5vbmVcIjtcblx0aXNzdWVyQmFzZVVybD86IHN0cmluZztcblx0YXVkaWVuY2U/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXHRhZG1pblVzZXJuYW1lPzogc3RyaW5nO1xuXHRhZG1pblBhc3N3b3JkPzogc3RyaW5nO1xufTtcblxuY29uc3QgQURNSU5fUk9MRSA9IFwiYWRtaW5cIjtcblxuY29uc3QgVVNFUl9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgVXNlckVudGl0eSBpbXBsZW1lbnRzIElFbnRpdHkge1xuXFx0QFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuXFx0cHVibGljIGlkITogbnVtYmVyO1xuXG5cXHRAQ29sdW1uKHsgdW5pcXVlOiB0cnVlIH0pXG5cXHRwdWJsaWMgc3ViITogc3RyaW5nO1xuXG5cXHRAQ29sdW1uKHsgdHlwZTogXCJ2YXJjaGFyXCIsIG51bGxhYmxlOiB0cnVlIH0pXG5cXHRwdWJsaWMgZW1haWwhOiBzdHJpbmcgfCBudWxsO1xuXG5cXHRAQ29sdW1uKClcblxcdHB1YmxpYyBkaXNwbGF5TmFtZSE6IHN0cmluZztcblxuXFx0LyoqIEFwcC1vd25lZCByb2xlcy4gVGhlIFxcYGFkbWluXFxgIHJvbGUgZ3JhbnRzIENBU0wgXFxgbWFuYWdlXFxgL1xcYGFsbFxcYCAod2lsZGNhcmQpLiAqL1xuXFx0QENvbHVtbih7IHR5cGU6IFwic2ltcGxlLWpzb25cIiwgZGVmYXVsdDogXCJbXVwiIH0pXG5cXHRwdWJsaWMgcm9sZXMhOiBzdHJpbmdbXTtcbn1cbmA7XG5cbmNvbnN0IFVTRVJfUkVQT1NJVE9SWV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBpbmplY3RVbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuaW1wb3J0IHsgVHlwZU9ybVJlcG9zaXRvcnksIFR5cGVPcm1Vbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3VzZXIuZW50aXR5LmpzXCI7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyRW50aXR5UmVwb3NpdG9yeSBleHRlbmRzIFR5cGVPcm1SZXBvc2l0b3J5PFVzZXJFbnRpdHk+IHtcblxcdHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0VW5pdE9mV29yaygpIHVuaXRPZldvcms6IFR5cGVPcm1Vbml0T2ZXb3JrKSB7XG5cXHRcXHRzdXBlcih1bml0T2ZXb3JrLCBVc2VyRW50aXR5KTtcblxcdH1cblxuXFx0cHVibGljIGZpbmRCeVN1YihzdWI6IHN0cmluZyk6IFByb21pc2U8VXNlckVudGl0eSB8IG51bGw+IHtcblxcdFxcdHJldHVybiB0aGlzLmZpcnN0T3JEZWZhdWx0KHsgd2hlcmU6IHsgc3ViIH0gfSk7XG5cXHR9XG59XG5gO1xuXG5jb25zdCBVU0VSX1NFUlZJQ0VfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBQcmluY2lwYWwgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgVXNlckVudGl0eSB9IGZyb20gXCIuLi9lbnRpdGllcy91c2VyLmVudGl0eS5qc1wiO1xuaW1wb3J0IHsgVXNlckVudGl0eVJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS5qc1wiO1xuXG5mdW5jdGlvbiBjbGFpbVN0cmluZyhwcmluY2lwYWw6IFByaW5jaXBhbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXFx0Y29uc3QgdmFsdWUgPSBwcmluY2lwYWw/LltrZXldO1xuXFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XG5cXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB1c2VyczogVXNlckVudGl0eVJlcG9zaXRvcnkpIHt9XG5cblxcdC8qKlxuXFx0ICogVXBzZXJ0IGEgbG9jYWwgcHJvZmlsZSBrZXllZCBieSBKV1QgXFxgc3ViXFxgLlxuXFx0ICogUHJvZmlsZSBmaWVsZHMgZnJvbSB0aGUgdG9rZW4gZmlsbCBnYXBzOyBzZWVkZWQgcm93cyBrZWVwIGRpc3BsYXlOYW1lL2VtYWlsL3JvbGVzLlxuXFx0ICovXG5cXHRwdWJsaWMgYXN5bmMgZW5zdXJlRnJvbVByaW5jaXBhbChwcmluY2lwYWw6IFByaW5jaXBhbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VXNlckVudGl0eT4ge1xuXFx0XFx0Y29uc3Qgc3ViID0gcHJpbmNpcGFsPy5zdWI7XG5cXHRcXHRpZiAoIXN1Yikge1xuXFx0XFx0XFx0dGhyb3cgbmV3IEVycm9yKFwiQXV0aGVudGljYXRlZCByZXF1ZXN0IGlzIG1pc3NpbmcgcHJpbmNpcGFsLnN1YlwiKTtcblxcdFxcdH1cblxuXFx0XFx0Y29uc3QgZW1haWwgPVxuXFx0XFx0XFx0Y2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcImVtYWlsXCIpID8/IGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJwcmVmZXJyZWRfdXNlcm5hbWVcIik7XG5cXHRcXHRjb25zdCBkaXNwbGF5RnJvbVRva2VuID1cblxcdFxcdFxcdGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJuYW1lXCIpID8/XG5cXHRcXHRcXHRjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwibmlja25hbWVcIikgPz9cblxcdFxcdFxcdGVtYWlsO1xuXG5cXHRcXHRjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMudXNlcnMuZmluZEJ5U3ViKHN1Yik7XG5cXHRcXHRpZiAoZXhpc3RpbmcpIHtcblxcdFxcdFxcdGxldCBkaXJ0eSA9IGZhbHNlO1xuXFx0XFx0XFx0aWYgKCFleGlzdGluZy5lbWFpbCAmJiBlbWFpbCkge1xuXFx0XFx0XFx0XFx0ZXhpc3RpbmcuZW1haWwgPSBlbWFpbDtcblxcdFxcdFxcdFxcdGRpcnR5ID0gdHJ1ZTtcblxcdFxcdFxcdH1cblxcdFxcdFxcdGlmIChleGlzdGluZy5kaXNwbGF5TmFtZSA9PT0gZXhpc3Rpbmcuc3ViICYmIGRpc3BsYXlGcm9tVG9rZW4pIHtcblxcdFxcdFxcdFxcdGV4aXN0aW5nLmRpc3BsYXlOYW1lID0gZGlzcGxheUZyb21Ub2tlbjtcblxcdFxcdFxcdFxcdGRpcnR5ID0gdHJ1ZTtcblxcdFxcdFxcdH1cblxcdFxcdFxcdHJldHVybiBkaXJ0eSA/IHRoaXMudXNlcnMuc2F2ZShleGlzdGluZykgOiBleGlzdGluZztcblxcdFxcdH1cblxuXFx0XFx0Y29uc3QgY3JlYXRlZCA9IG5ldyBVc2VyRW50aXR5KCk7XG5cXHRcXHRjcmVhdGVkLnN1YiA9IHN1YjtcblxcdFxcdGNyZWF0ZWQuZW1haWwgPSBlbWFpbCA/PyBudWxsO1xuXFx0XFx0Y3JlYXRlZC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlGcm9tVG9rZW4gPz8gc3ViO1xuXFx0XFx0Y3JlYXRlZC5yb2xlcyA9IEFycmF5LmlzQXJyYXkocHJpbmNpcGFsLnJvbGVzKVxuXFx0XFx0XFx0PyBwcmluY2lwYWwucm9sZXMuZmlsdGVyKChyKTogciBpcyBzdHJpbmcgPT4gdHlwZW9mIHIgPT09IFwic3RyaW5nXCIpXG5cXHRcXHRcXHQ6IFtdO1xuXFx0XFx0cmV0dXJuIHRoaXMudXNlcnMuc2F2ZShjcmVhdGVkKTtcblxcdH1cbn1cbmA7XG5cbmNvbnN0IEFCSUxJVFlfRkFDVE9SWV9UUyA9IGBpbXBvcnQgeyBBYmlsaXR5QnVpbGRlciwgY3JlYXRlTW9uZ29BYmlsaXR5IH0gZnJvbSBcIkBjYXNsL2FiaWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgUHJpbmNpcGFsIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjtcblxuLyoqIFJvb3Qgcm9sZSDigJQgZXhwYW5kcyB0byBDQVNMIFxcYG1hbmFnZVxcYC9cXGBhbGxcXGAgKGNvdmVycyBldmVyeSBmdXR1cmUgYWJpbGl0eSkuICovXG5leHBvcnQgY29uc3QgQURNSU5fUk9MRSA9IFwiYWRtaW5cIjtcblxuLyoqXG4gKiBSb2xlcyBhcmUgY29sbGVjdGlvbnMgb2YgYWJpbGl0aWVzLiBBZG1pbiBpcyBhIHdpbGRjYXJkLCBub3QgYW4gZW51bWVyYXRlZCBsaXN0LlxuICogTm9uLWFkbWluIHByaW5jaXBhbHMga2VlcCB0aGUgZGVmYXVsdCBBdXRoMCBzY29wZSDihpIgYWJpbGl0eSBtYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJpbGl0eUZhY3RvcnkocHJpbmNpcGFsOiBQcmluY2lwYWwpIHtcblxcdGNvbnN0IHsgY2FuLCBidWlsZCB9ID0gbmV3IEFiaWxpdHlCdWlsZGVyKGNyZWF0ZU1vbmdvQWJpbGl0eSk7XG5cXHRpZiAocHJpbmNpcGFsLnJvbGVzPy5pbmNsdWRlcyhBRE1JTl9ST0xFKSkge1xuXFx0XFx0Y2FuKFwibWFuYWdlXCIsIFwiYWxsXCIpO1xuXFx0XFx0cmV0dXJuIGJ1aWxkKCk7XG5cXHR9XG5cXHRmb3IgKGNvbnN0IHNjb3BlIG9mIHByaW5jaXBhbC5zY29wZXMgPz8gW10pIHtcblxcdFxcdGNvbnN0IFthY3Rpb24sIHN1YmplY3RdID0gc2NvcGUuc3BsaXQoXCI6XCIpO1xuXFx0XFx0aWYgKGFjdGlvbiAmJiBzdWJqZWN0KSBjYW4oYWN0aW9uLCBzdWJqZWN0KTtcblxcdH1cblxcdHJldHVybiBidWlsZCgpO1xufVxuXG4vKipcbiAqIE1hcCBKV1QgcGF5bG9hZCDihpIgUHJpbmNpcGFsLiBCb290c3RyYXBzIHRoZSBzZWVkZWQgQXV0aDAgYWRtaW4gXFxgc3ViXFxgIHdpdGhcbiAqIHRoZSBhZG1pbiByb2xlIHNvIGF1dGhvcml6YXRpb24gd29ya3MgYmVmb3JlL3dpdGhvdXQgcm9sZXMgaW4gdGhlIGFjY2VzcyB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFByaW5jaXBhbChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByaW5jaXBhbCB7XG5cXHRjb25zdCBzdWIgPSB0eXBlb2YgcGF5bG9hZC5zdWIgPT09IFwic3RyaW5nXCIgPyBwYXlsb2FkLnN1YiA6IFwiXCI7XG5cXHRjb25zdCBzY29wZXMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuc2NvcGVzKVxuXFx0XFx0PyAocGF5bG9hZC5zY29wZXMgYXMgc3RyaW5nW10pXG5cXHRcXHQ6IHR5cGVvZiBwYXlsb2FkLnNjb3BlID09PSBcInN0cmluZ1wiXG5cXHRcXHRcXHQ/IHBheWxvYWQuc2NvcGUuc3BsaXQoXCIgXCIpXG5cXHRcXHRcXHQ6IHVuZGVmaW5lZDtcblxcdGNvbnN0IGZyb21Ub2tlbiA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5yb2xlcylcblxcdFxcdD8gKHBheWxvYWQucm9sZXMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHIpOiByIGlzIHN0cmluZyA9PiB0eXBlb2YgciA9PT0gXCJzdHJpbmdcIilcblxcdFxcdDogW107XG5cXHRjb25zdCByb2xlcyA9XG5cXHRcXHRzdWIgJiYgc3ViID09PSBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX1NVQlxuXFx0XFx0XFx0PyBbLi4ubmV3IFNldChbQURNSU5fUk9MRSwgLi4uZnJvbVRva2VuXSldXG5cXHRcXHRcXHQ6IGZyb21Ub2tlbi5sZW5ndGggPiAwXG5cXHRcXHRcXHRcXHQ/IGZyb21Ub2tlblxuXFx0XFx0XFx0XFx0OiB1bmRlZmluZWQ7XG5cXHRyZXR1cm4geyAuLi5wYXlsb2FkLCBzdWIsIHJvbGVzLCBzY29wZXMgfTtcbn1cbmA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8QXV0aE9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPEF1dGhPcHRpb25zPj4ge1xuXHRpZiAoY2xpT3B0aW9ucy5hdXRoUHJvdmlkZXIgPT09IFwiYXV0aDBcIiAmJiAhY2xpT3B0aW9ucy5pc3N1ZXJCYXNlVXJsKSB7XG5cdFx0cmV0dXJuIGdldEF1dGgwT3B0aW9ucyh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMpO1xuXHR9XG5cdGlmIChjbGlPcHRpb25zLmF1dGhQcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFt7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCB9LCB7IGxhYmVsOiBcImF1dGgwXCIgYXMgY29uc3QgfV07XG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcIlxcbiAgQXV0aCBwcm92aWRlcjogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyICE9PSBcImF1dGgwXCIpIHJldHVybiB7IGF1dGhQcm92aWRlcjogXCJub25lXCIgfTtcblxuXHRyZXR1cm4gZ2V0QXV0aDBPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dGgwT3B0aW9ucyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8QXV0aE9wdGlvbnM+PiB7XG5cdGlmICghYXV0aDBDbGkuaXNJbnN0YWxsZWQoKSkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgVGhlIEF1dGgwIENMSSBpcyByZXF1aXJlZCBmb3IgYXV0b21hdGVkIHNldHVwLlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGw6IGJyZXcgaW5zdGFsbCBhdXRoMC9hdXRoMC1jbGkvYXV0aDBcXG5cIiArXG5cdFx0XHRcdFwiICBPciB2aXNpdDogaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2F1dGgwLWNsaVxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIENoZWNraW5nIEF1dGgwIGNyZWRlbnRpYWxzLi4uXCIpO1xuXHRsZXQgdGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdGlmICh0ZW5hbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG5vdCBsb2dnZWQgaW4uXFxuXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiICBMb2dnaW5nIGluIHRvIEF1dGgwICh5b3VyIGJyb3dzZXIgd2lsbCBvcGVuKS4uLlwiKTtcblx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIEF1dGgwIGxvZ2luIGZhaWxlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRhdXRoMENsaS5saXN0QXBpcygpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZSA9IHRlbmFudHMuZmluZCgodCkgPT4gdC5hY3RpdmUpID8/IHRlbmFudHNbMF07XG5cdGNvbnN0IGlzc3VlckJhc2VVcmwgPSBgaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWA7XG5cdGNvbnNvbGUubG9nKGBcXG4gIOKckyBBdXRoMCB0ZW5hbnQ6ICR7aXNzdWVyQmFzZVVybH1gKTtcblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRmV0Y2hpbmcgQXV0aDAgQVBJcy4uLlwiKTtcblx0Y29uc3QgdXNlckFwaXMgPSBhdXRoMENsaS5saXN0QXBpcygpLmZpbHRlcigoYSkgPT4gIWEubmFtZS5pbmNsdWRlcyhcIk1hbmFnZW1lbnQgQVBJXCIpKTtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYCBmb3VuZCAke3VzZXJBcGlzLmxlbmd0aH0uXFxuYCk7XG5cblx0dHlwZSBBcGlDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGV4aXN0aW5nOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGFwaUNob2ljZXM6IEFwaUNob2ljZVtdID0gW1xuXHRcdHsgbGFiZWw6IGA8bmV3PiBodHRwczovL2FwaS4ke3Byb2plY3ROYW1lfWAsIGV4aXN0aW5nOiBudWxsIH0sXG5cdFx0Li4udXNlckFwaXMubWFwKChhKSA9PiAoeyBsYWJlbDogYCR7YS5uYW1lfSDigJQgJHthLmlkZW50aWZpZXJ9YCwgZXhpc3Rpbmc6IGEuaWRlbnRpZmllciB9KSksXG5cdF07XG5cblx0Y29uc3QgYXBpU2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBTZWxlY3QgQXV0aDAgQVBJOiBcIiwgYXBpQ2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXG5cdGxldCBhdWRpZW5jZTogc3RyaW5nO1xuXHRpZiAoIWFwaVNlbGVjdGVkIHx8IGFwaVNlbGVjdGVkLmV4aXN0aW5nID09PSBudWxsKSB7XG5cdFx0Y29uc3QgZGVmYXVsdElkID0gYGh0dHBzOi8vYXBpLiR7cHJvamVjdE5hbWV9YDtcblx0XHRhdWRpZW5jZSA9IGF3YWl0IGFzayhgICBBUEkgSWRlbnRpZmllciBbJHtkZWZhdWx0SWR9XTogYCwgZGVmYXVsdElkKTtcblx0XHRjb25zb2xlLmxvZyhcIlxcbiAgQ3JlYXRpbmcgQXV0aDAgQVBJLi4uXCIpO1xuXHRcdGF1ZGllbmNlID0gYXV0aDBDbGkuY3JlYXRlQXBpKGAke3Byb2plY3ROYW1lfSBBUElgLCBhdWRpZW5jZSkuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIEFQSSBjcmVhdGVkOiAke2F1ZGllbmNlfWApO1xuXHR9IGVsc2Uge1xuXHRcdGF1ZGllbmNlID0gYXBpU2VsZWN0ZWQuZXhpc3Rpbmc7XG5cdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBTZWxlY3RlZDogJHthdWRpZW5jZX1gKTtcblx0XHR0cnkge1xuXHRcdFx0YXV0aDBDbGkudXBkYXRlQXBpU2NvcGVzKGF1ZGllbmNlKTtcblx0XHRcdGNvbnNvbGUubG9nKGAgIFxcdTI3MTMgQVBJIHNjb3BlcyBlbnN1cmVkICgke2F1dGgwQ2xpLkhFTExPX0FQSV9TQ09QRVMuam9pbihcIiwgXCIpfSlgKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFwiICDinJcgRmFpbGVkIHRvIHVwZGF0ZSBBUEkgc2NvcGVzIOKAlCBhZGQgSGVsbG8gc2NvcGVzIGluIHRoZSBBdXRoMCBkYXNoYm9hcmQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHdpdGhMb2NhbFVzZXJzID0gY2xpT3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyID09PSBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0bGV0IGFkbWluVXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IGFkbWluUGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHdpdGhMb2NhbFVzZXJzKSB7XG5cdFx0YWRtaW5Vc2VybmFtZSA9XG5cdFx0XHRjbGlPcHRpb25zLmFkbWluVXNlcm5hbWUgPz8gKGF3YWl0IGFzayhcIlxcbiAgQWRtaW4gdXNlcm5hbWUgW2FkbWluXTogXCIsIFwiYWRtaW5cIikpO1xuXHRcdGFkbWluUGFzc3dvcmQgPSBjbGlPcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdFx0aWYgKGFkbWluUGFzc3dvcmQgPT0gbnVsbCkge1xuXHRcdFx0YWRtaW5QYXNzd29yZCA9IGF3YWl0IGFzayhcIiAgQWRtaW4gcGFzc3dvcmQgKGxlYXZlIGJsYW5rIHRvIGdlbmVyYXRlKTogXCIpO1xuXHRcdFx0aWYgKCFhZG1pblBhc3N3b3JkKSB7XG5cdFx0XHRcdGFkbWluUGFzc3dvcmQgPSBhdXRoMENsaS5nZW5lcmF0ZUFkbWluUGFzc3dvcmQoKTtcblx0XHRcdFx0Y29uc29sZS5sb2coYCAg4pyTIEdlbmVyYXRlZCBhZG1pbiBwYXNzd29yZCAod3JpdHRlbiB0byAuZW52KTogJHthZG1pblBhc3N3b3JkfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YXV0aFByb3ZpZGVyOiBcImF1dGgwXCIsXG5cdFx0aXNzdWVyQmFzZVVybCxcblx0XHRhdWRpZW5jZSxcblx0XHQuLi4od2l0aExvY2FsVXNlcnMgPyB7IGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQgfSA6IHt9KSxcblx0fTtcbn1cblxuZnVuY3Rpb24gYWRtaW5FbWFpbCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAodXNlcm5hbWUuaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gdXNlcm5hbWU7XG5cdGNvbnN0IHNsdWcgPSB3b3Jrc3BhY2VOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIi1cIik7XG5cdHJldHVybiBgJHt1c2VybmFtZX1AJHtzbHVnfS5leGFtcGxlLmNvbWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dGgwQWRtaW5Vc2VyKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBBdXRoT3B0aW9ucyxcblx0YXV0aENvbmZpZzogQXV0aENvbmZpZ01vZGVsLFxuKTogdm9pZCB7XG5cdGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy5hZG1pblVzZXJuYW1lID8/IFwiYWRtaW5cIjtcblx0Y29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cdGlmICghcGFzc3dvcmQpIHJldHVybjtcblxuXHRjb25zdCBlbWFpbCA9IGFkbWluRW1haWwod29ya3NwYWNlLm5hbWUsIHVzZXJuYW1lKTtcblx0dHJ5IHtcblx0XHRjb25zdCBhZG1pbiA9IGF1dGgwQ2xpLmNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyKHsgZW1haWwsIHBhc3N3b3JkLCB1c2VybmFtZSB9KTtcblx0XHRhdXRoQ29uZmlnLnNldEFkbWluVXNlcih7XG5cdFx0XHRzdWI6IGFkbWluLnVzZXJfaWQsXG5cdFx0XHRlbWFpbDogYWRtaW4uZW1haWwsXG5cdFx0XHRwYXNzd29yZDogYWRtaW4ucGFzc3dvcmQsXG5cdFx0XHR1c2VybmFtZTogYWRtaW4udXNlcm5hbWUsXG5cdFx0fSk7XG5cdFx0d29ya3NwYWNlXG5cdFx0XHQuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSlcblx0XHRcdD8uYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSX1NVQlwiLCBhZG1pbi51c2VyX2lkKVxuXHRcdFx0LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUl9FTUFJTFwiLCBhZG1pbi5lbWFpbClcblx0XHRcdC5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJfUEFTU1dPUkRcIiwgYWRtaW4ucGFzc3dvcmQpXG5cdFx0XHQuYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSTkFNRVwiLCBhZG1pbi51c2VybmFtZSk7XG5cdFx0Y29uc29sZS5sb2coYCAg4pyTIEF1dGgwIGFkbWluIHVzZXIgcmVhZHk6ICR7YWRtaW4uZW1haWx9IChyb2xlOiAke0FETUlOX1JPTEV9KWApO1xuXHRcdGNvbnNvbGUubG9nKGAgICAgTG9naW4gd2l0aCBFTUFJTCAobm90IHVzZXJuYW1lKTogJHthZG1pbi5lbWFpbH1gKTtcblx0XHRjb25zb2xlLmxvZyhgICAgIFBhc3N3b3JkOiBzZWUgQVVUSDBfQURNSU5fVVNFUl9QQVNTV09SRCBpbiAuZW52YCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRgICDinJcgRmFpbGVkIHRvIGVuc3VyZSBBdXRoMCBhZG1pbiB1c2VyICgke2VtYWlsfSk6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NhZmZvbGRMb2NhbFVzZXJQcm9maWxlKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQpOiB2b2lkIHtcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPFBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLlBBQ0tBR0VfSlNPTilcblx0XHQ/LmFkZERlcGVuZGVuY3koXCJAY2FzbC9hYmlsaXR5XCIsIFwiXjYuOC4xXCIpO1xuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8QXBpUGFja2FnZUpzb24+KFdFTExfS05PV05fRklMRVMuQVBJX1BBQ0tBR0VfSlNPTilcblx0XHQ/LmFkZERlcGVuZGVuY3koXCJAY2FzbC9hYmlsaXR5XCIsIFwiXjYuOC4xXCIpO1xuXG5cdGNvbnN0IG1haW4gPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUyk7XG5cdG1haW5cblx0XHQ/LmFkZEVudGl0eSh7IGNsYXNzTmFtZTogXCJVc2VyRW50aXR5XCIsIGltcG9ydFBhdGg6IFwiLi9lbnRpdGllcy91c2VyLmVudGl0eS5qc1wiIH0pXG5cdFx0LmFkZFJlcG9zaXRvcnkoe1xuXHRcdFx0Y2xhc3NOYW1lOiBcIlVzZXJFbnRpdHlSZXBvc2l0b3J5XCIsXG5cdFx0XHRpbXBvcnRQYXRoOiBcIi4vcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS5qc1wiLFxuXHRcdH0pXG5cdFx0LmFkZFNlcnZpY2Uoe1xuXHRcdFx0Y2xhc3NOYW1lOiBcIlVzZXJTZXJ2aWNlXCIsXG5cdFx0XHRpbXBvcnRQYXRoOiBcIi4vc2VydmljZXMvdXNlci5zZXJ2aWNlLmpzXCIsXG5cdFx0XHRzY29wZTogXCJyZXF1ZXN0XCIsXG5cdFx0fSlcblx0XHQuYWRkSW1wb3J0KFwiY3JlYXRlQWJpbGl0eUZhY3RvcnlcIiwgXCIuL2F1dGgvYWJpbGl0eS5mYWN0b3J5LmpzXCIpXG5cdFx0LmFkZEltcG9ydChcIm1hcFByaW5jaXBhbFwiLCBcIi4vYXV0aC9hYmlsaXR5LmZhY3RvcnkuanNcIilcblx0XHQuc2V0VHlwZU9ybVNlZWQoXG5cdFx0XHRbXG5cdFx0XHRcdFwiY29uc3Qgc3ViID0gcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUl9TVUI7XCIsXG5cdFx0XHRcdFwiaWYgKCFzdWIpIHJldHVybjtcIixcblx0XHRcdFx0XCJjb25zdCByZXBvID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KFVzZXJFbnRpdHkpO1wiLFxuXHRcdFx0XHRcImNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVwby5maW5kT25lKHsgd2hlcmU6IHsgc3ViIH0gfSk7XCIsXG5cdFx0XHRcdFwiaWYgKGV4aXN0aW5nKSByZXR1cm47XCIsXG5cdFx0XHRcdFwiYXdhaXQgcmVwby5zYXZlKHJlcG8uY3JlYXRlKHtcIixcblx0XHRcdFx0XCIgIHN1YixcIixcblx0XHRcdFx0XCIgIGVtYWlsOiBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSX0VNQUlMID8/IG51bGwsXCIsXG5cdFx0XHRcdCcgIGRpc3BsYXlOYW1lOiBwcm9jZXNzLmVudi5BVVRIMF9BRE1JTl9VU0VSTkFNRSA/PyBcImFkbWluXCIsJyxcblx0XHRcdFx0JyAgcm9sZXM6IFtcImFkbWluXCJdLCcsXG5cdFx0XHRcdFwifSkpO1wiLFxuXHRcdFx0XS5qb2luKFwiIFwiKSxcblx0XHQpO1xuXG5cdHdvcmtzcGFjZS5nZXRQcm9qZWN0KFdFQkFQSV9QUk9KRUNUX0RJUik/LmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7IGZpbGVQYXRoOiBcInNyYy9lbnRpdGllcy91c2VyLmVudGl0eS50c1wiLCBjb250ZW50OiBVU0VSX0VOVElUWV9UUyB9LFxuXHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS50c1wiLCBjb250ZW50OiBVU0VSX1JFUE9TSVRPUllfVFMgfSxcblx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL3NlcnZpY2VzL3VzZXIuc2VydmljZS50c1wiLCBjb250ZW50OiBVU0VSX1NFUlZJQ0VfVFMgfSxcblx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL2F1dGgvYWJpbGl0eS5mYWN0b3J5LnRzXCIsIGNvbnRlbnQ6IEFCSUxJVFlfRkFDVE9SWV9UUyB9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdGZvciAoY29uc3QgY29udHJvbGxlciBvZiB3b3Jrc3BhY2UuZ2V0TW9kZWxzKENvbnRyb2xsZXJTb3VyY2VGaWxlKSkge1xuXHRcdGNvbnRyb2xsZXJcblx0XHRcdC5hZGRJbXBvcnQoXCJVc2VyU2VydmljZVwiLCBcIi4uL3NlcnZpY2VzL3VzZXIuc2VydmljZS5qc1wiKVxuXHRcdFx0LmFkZENvbnN0cnVjdG9yUGFyYW0oXCJwcml2YXRlIHJlYWRvbmx5IHVzZXJzOiBVc2VyU2VydmljZVwiKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldE9uZVwiKS5zZXRBc3luYyh0cnVlKS5zZXRCb2R5KFtcblx0XHRcdFwiY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcnMuZW5zdXJlRnJvbVByaW5jaXBhbCh0aGlzLnByaW5jaXBhbFByb3ZpZGVyLmN1cnJlbnRQcmluY2lwYWwpO1wiLFxuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogdGVtcGxhdGUgbGl0ZXJhbCBpbiBnZW5lcmF0ZWQgY29kZVxuXHRcdFx0XCJyZXR1cm4geyBpZCwgbWVzc2FnZTogYEhlbGxvICR7dXNlci5kaXNwbGF5TmFtZX0hYCwgdXNlcm5hbWU6IHVzZXIuZGlzcGxheU5hbWUgfTtcIixcblx0XHRdKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBBdXRoT3B0aW9ucyk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5hdXRoUHJvdmlkZXIgIT09IFwiYXV0aDBcIikgcmV0dXJuO1xuXG5cdGNvbnN0IHJlc291cmNlID0gXCJIZWxsb1wiO1xuXHRjb25zdCB3aXRoTG9jYWxVc2VycyA9IG9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciA9PT0gXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cblx0Zm9yIChjb25zdCBjb250cm9sbGVyIG9mIHdvcmtzcGFjZS5nZXRNb2RlbHMoQ29udHJvbGxlclNvdXJjZUZpbGUpKSB7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcInJlYWRcIiwgXCIke3Jlc291cmNlfVwiKWApXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiQWxsb3dBbm9ueW1vdXNcIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJBdXRob3JpemVcIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJJUHJpbmNpcGFsUHJvdmlkZXJUb2tlblwiKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIklQcmluY2lwYWxQcm92aWRlclwiLCB0cnVlKVxuXHRcdFx0LmFkZEltcG9ydChcImluamVjdFwiLCBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCIpXG5cdFx0XHQuYWRkQ29uc3RydWN0b3JQYXJhbShcblx0XHRcdFx0YEBpbmplY3QoSVByaW5jaXBhbFByb3ZpZGVyVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgcHJpbmNpcGFsUHJvdmlkZXI6IElQcmluY2lwYWxQcm92aWRlcmAsXG5cdFx0XHQpO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiZ2V0QWxsXCIpLmFkZERlY29yYXRvcihcIkBBbGxvd0Fub255bW91cygpXCIpO1xuXHRcdGlmICghd2l0aExvY2FsVXNlcnMpIHtcblx0XHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiZ2V0T25lXCIpLnNldEJvZHkoW1xuXHRcdFx0XHRcImNvbnN0IHByaW5jaXBhbCA9IHRoaXMucHJpbmNpcGFsUHJvdmlkZXIuY3VycmVudFByaW5jaXBhbDtcIixcblx0XHRcdFx0XCJjb25zdCB1c2VybmFtZSA9XCIsXG5cdFx0XHRcdCdcXHQodHlwZW9mIHByaW5jaXBhbD8ubmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwubmFtZSkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/Lm5pY2tuYW1lID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5uaWNrbmFtZSkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/LmVtYWlsID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5lbWFpbCkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/LnByZWZlcnJlZF91c2VybmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwucHJlZmVycmVkX3VzZXJuYW1lKSB8fCcsXG5cdFx0XHRcdFwiXFx0cHJpbmNpcGFsPy5zdWIgfHxcIixcblx0XHRcdFx0J1xcdFwidW5rbm93blwiOycsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFx0XCJyZXR1cm4geyBpZCwgbWVzc2FnZTogYEhlbGxvICR7dXNlcm5hbWV9IWAsIHVzZXJuYW1lIH07XCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJjcmVhdGVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwiY3JlYXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcInVwZGF0ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJ1cGRhdGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwicmVtb3ZlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcImRlbGV0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdH1cblxuXHRjb25zdCBtYWluID0gd29ya3NwYWNlLmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpO1xuXHRtYWluPy5hZGRTaWRlRWZmZWN0SW1wb3J0KFwiQGRlY29oZXJlL2NvcnRleC9hdXRoXCIpO1xuXG5cdGlmICh3aXRoTG9jYWxVc2Vycykge1xuXHRcdHNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSh3b3Jrc3BhY2UpO1xuXHRcdG1haW4/LmFkZEJ1aWxkZXJDYWxsKFwiLndpdGhBdXRoKGNyZWF0ZUFiaWxpdHlGYWN0b3J5LCB7IHByaW5jaXBhbE1hcHBlcjogbWFwUHJpbmNpcGFsIH0pXCIpO1xuXHR9IGVsc2Uge1xuXHRcdG1haW4/LmFkZEJ1aWxkZXJDYWxsKFwiLndpdGhBdXRoKClcIik7XG5cdH1cblxuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiBpbnRlbnRpb25hbCBZQU1MIGVudi12YXIgcGxhY2Vob2xkZXJzXG5cdGNvbnN0IGlzc3VlclBsYWNlaG9sZGVyID0gXCIke0FVVEgwX0lTU1VFUl9CQVNFX1VSTH1cIjtcblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogaW50ZW50aW9uYWwgWUFNTCBlbnYtdmFyIHBsYWNlaG9sZGVyc1xuXHRjb25zdCBhdWRQbGFjZWhvbGRlciA9IFwiJHtBVVRIMF9BVURJRU5DRX1cIjtcblxuXHRjb25zdCBjb25maWdTZWN0aW9uID0gYGF1dGg6XFxuICBkaXNjb3ZlcnlVcmw6ICR7aXNzdWVyUGxhY2Vob2xkZXJ9XFxuICBhdWRpZW5jZTogJHthdWRQbGFjZWhvbGRlcn1cXG5gO1xuXG5cdHdvcmtzcGFjZS5nZXRNb2RlbDxDb25maWdZYW1sPihXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MKT8uYWRkU2VjdGlvbihjb25maWdTZWN0aW9uKTtcblxuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSlcblx0XHQ/LmFkZEVudHJ5KFwiQVVUSDBfSVNTVUVSX0JBU0VfVVJMXCIsIG9wdGlvbnMuaXNzdWVyQmFzZVVybCA/PyBcIlwiKVxuXHRcdC5hZGRFbnRyeShcIkFVVEgwX0FVRElFTkNFXCIsIG9wdGlvbnMuYXVkaWVuY2UgPz8gXCJcIik7XG5cblx0Y29uc3QgYXV0aENvbmZpZyA9IG5ldyBBdXRoQ29uZmlnTW9kZWwoe1xuXHRcdGlzc3VlckJhc2VVcmw6IG9wdGlvbnMuaXNzdWVyQmFzZVVybCA/PyBcIlwiLFxuXHRcdGF1ZGllbmNlOiBvcHRpb25zLmF1ZGllbmNlID8/IFwiXCIsXG5cdH0pO1xuXHR3b3Jrc3BhY2UuYWRkTW9kZWwoYXV0aENvbmZpZyk7XG5cblx0aWYgKHdpdGhMb2NhbFVzZXJzICYmIG9wdGlvbnMuYWRtaW5QYXNzd29yZCkge1xuXHRcdGNyZWF0ZUF1dGgwQWRtaW5Vc2VyKHdvcmtzcGFjZSwgb3B0aW9ucywgYXV0aENvbmZpZyk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IEF1dGhGZWF0dXJlOiBGZWF0dXJlPEF1dGhPcHRpb25zPiA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQgfTtcbiJdLCJuYW1lcyI6WyJBdXRoRmVhdHVyZSIsIkFETUlOX1JPTEUiLCJVU0VSX0VOVElUWV9UUyIsIlVTRVJfUkVQT1NJVE9SWV9UUyIsIlVTRVJfU0VSVklDRV9UUyIsIkFCSUxJVFlfRkFDVE9SWV9UUyIsImdldE9wdGlvbnMiLCJ3b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiYXV0aFByb3ZpZGVyIiwiaXNzdWVyQmFzZVVybCIsImdldEF1dGgwT3B0aW9ucyIsImNob2ljZXMiLCJsYWJlbCIsInNlbGVjdGVkIiwicGljayIsImMiLCJwcm92aWRlciIsImF1dGgwQ2xpIiwiaXNJbnN0YWxsZWQiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInN0ZG91dCIsIndyaXRlIiwidGVuYW50cyIsImxpc3RUZW5hbnRzIiwibGVuZ3RoIiwibG9nIiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsIkF1dGgwQXV0aEVycm9yIiwiYWN0aXZlIiwiZmluZCIsInQiLCJuYW1lIiwidXNlckFwaXMiLCJmaWx0ZXIiLCJhIiwiaW5jbHVkZXMiLCJwcm9qZWN0TmFtZSIsImFwaUNob2ljZXMiLCJleGlzdGluZyIsIm1hcCIsImlkZW50aWZpZXIiLCJhcGlTZWxlY3RlZCIsImF1ZGllbmNlIiwiZGVmYXVsdElkIiwiYXNrIiwiY3JlYXRlQXBpIiwidXBkYXRlQXBpU2NvcGVzIiwiSEVMTE9fQVBJX1NDT1BFUyIsImpvaW4iLCJ3aXRoTG9jYWxVc2VycyIsImRhdGFiYXNlUHJvdmlkZXIiLCJhZG1pblVzZXJuYW1lIiwiYWRtaW5QYXNzd29yZCIsImdlbmVyYXRlQWRtaW5QYXNzd29yZCIsImFkbWluRW1haWwiLCJ3b3Jrc3BhY2VOYW1lIiwidXNlcm5hbWUiLCJzbHVnIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiY3JlYXRlQXV0aDBBZG1pblVzZXIiLCJvcHRpb25zIiwiYXV0aENvbmZpZyIsInBhc3N3b3JkIiwiZW1haWwiLCJhZG1pbiIsImNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyIiwic2V0QWRtaW5Vc2VyIiwic3ViIiwidXNlcl9pZCIsImdldE1vZGVsIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkVOVl9GSUxFIiwiYWRkRW50cnkiLCJFcnJvciIsIm1lc3NhZ2UiLCJzY2FmZm9sZExvY2FsVXNlclByb2ZpbGUiLCJQQUNLQUdFX0pTT04iLCJhZGREZXBlbmRlbmN5IiwiQVBJX1BBQ0tBR0VfSlNPTiIsIm1haW4iLCJNQUlOX1RTIiwiYWRkRW50aXR5IiwiY2xhc3NOYW1lIiwiaW1wb3J0UGF0aCIsImFkZFJlcG9zaXRvcnkiLCJhZGRTZXJ2aWNlIiwic2NvcGUiLCJhZGRJbXBvcnQiLCJzZXRUeXBlT3JtU2VlZCIsImdldFByb2plY3QiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJjb250cm9sbGVyIiwiZ2V0TW9kZWxzIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJhZGRDb25zdHJ1Y3RvclBhcmFtIiwiZ2V0TWV0aG9kIiwic2V0QXN5bmMiLCJzZXRCb2R5Iiwic2NhZmZvbGQiLCJyZXNvdXJjZSIsImFkZERlY29yYXRvciIsImFkZENvcnRleEltcG9ydCIsImFkZFNpZGVFZmZlY3RJbXBvcnQiLCJhZGRCdWlsZGVyQ2FsbCIsImlzc3VlclBsYWNlaG9sZGVyIiwiYXVkUGxhY2Vob2xkZXIiLCJjb25maWdTZWN0aW9uIiwiQ09ORklHX1lBTUwiLCJhZGRTZWN0aW9uIiwiQXV0aENvbmZpZ01vZGVsIiwiYWRkTW9kZWwiXSwibWFwcGluZ3MiOiI7Ozs7K0JBMGNhQTs7O2VBQUFBOzs7d0JBMWNhO3VCQUVPOzJCQUtFO2lDQUVIOzJDQUNLO2tFQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXMUIsTUFBTUMsYUFBYTtBQUVuQixNQUFNQyxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJ4QixDQUFDO0FBRUQsTUFBTUMscUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWU1QixDQUFDO0FBRUQsTUFBTUMsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1RHpCLENBQUM7QUFFRCxNQUFNQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkM1QixDQUFDO0FBRUQsZUFBZUMsV0FDZEMsU0FBNEIsRUFDNUJDLFVBQWdDO0lBRWhDLElBQUlBLFdBQVdDLFlBQVksS0FBSyxXQUFXLENBQUNELFdBQVdFLGFBQWEsRUFBRTtRQUNyRSxPQUFPQyxnQkFBZ0JKLFdBQVdDO0lBQ25DO0lBQ0EsSUFBSUEsV0FBV0MsWUFBWSxJQUFJLE1BQU0sT0FBTyxDQUFDO0lBRTdDLE1BQU1HLFVBQVU7UUFBQztZQUFFQyxPQUFPO1FBQWdCO1FBQUc7WUFBRUEsT0FBTztRQUFpQjtLQUFFO0lBQ3pFLE1BQU1DLFdBQVcsTUFBTUMsSUFBQUEsWUFBSSxFQUFDLHVCQUF1QkgsU0FBUyxDQUFDSSxJQUFNQSxFQUFFSCxLQUFLO0lBQzFFLE1BQU1JLFdBQVdILFVBQVVELFNBQVM7SUFFcEMsSUFBSUksYUFBYSxTQUFTLE9BQU87UUFBRVIsY0FBYztJQUFPO0lBRXhELE9BQU9FLGdCQUFnQkosV0FBV0M7QUFDbkM7QUFFQSxlQUFlRyxnQkFDZEosU0FBNEIsRUFDNUJDLFVBQWdD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
|
|
@@ -33,6 +33,12 @@ _export(exports, {
|
|
|
33
33
|
get enableConnectionForClient () {
|
|
34
34
|
return enableConnectionForClient;
|
|
35
35
|
},
|
|
36
|
+
get ensureSpaApp () {
|
|
37
|
+
return ensureSpaApp;
|
|
38
|
+
},
|
|
39
|
+
get findUserByEmail () {
|
|
40
|
+
return findUserByEmail;
|
|
41
|
+
},
|
|
36
42
|
get generateAdminPassword () {
|
|
37
43
|
return generateAdminPassword;
|
|
38
44
|
},
|
|
@@ -42,6 +48,9 @@ _export(exports, {
|
|
|
42
48
|
get listApis () {
|
|
43
49
|
return listApis;
|
|
44
50
|
},
|
|
51
|
+
get listApps () {
|
|
52
|
+
return listApps;
|
|
53
|
+
},
|
|
45
54
|
get listTenants () {
|
|
46
55
|
return listTenants;
|
|
47
56
|
},
|
|
@@ -50,6 +59,12 @@ _export(exports, {
|
|
|
50
59
|
},
|
|
51
60
|
get updateApiScopes () {
|
|
52
61
|
return updateApiScopes;
|
|
62
|
+
},
|
|
63
|
+
get updateSpaCallbacks () {
|
|
64
|
+
return updateSpaCallbacks;
|
|
65
|
+
},
|
|
66
|
+
get updateUserPassword () {
|
|
67
|
+
return updateUserPassword;
|
|
53
68
|
}
|
|
54
69
|
});
|
|
55
70
|
const _nodechild_process = require("node:child_process");
|
|
@@ -205,7 +220,61 @@ function createSpaApp(name, callbackUrls) {
|
|
|
205
220
|
"--json",
|
|
206
221
|
"--no-input"
|
|
207
222
|
]);
|
|
208
|
-
|
|
223
|
+
const app = parseJsonOutput(out);
|
|
224
|
+
const clientId = app.client_id ?? app.clientId;
|
|
225
|
+
if (!clientId) {
|
|
226
|
+
throw new Error(`Auth0 create SPA response missing client_id. stdout: ${out.slice(0, 300)}`);
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
client_id: clientId
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function listApps() {
|
|
233
|
+
try {
|
|
234
|
+
const out = runAuth0([
|
|
235
|
+
"apps",
|
|
236
|
+
"list",
|
|
237
|
+
"--json",
|
|
238
|
+
"--no-input"
|
|
239
|
+
]);
|
|
240
|
+
const apps = parseJsonOutput(out);
|
|
241
|
+
return apps.map((a)=>({
|
|
242
|
+
client_id: a.client_id ?? a.clientId ?? "",
|
|
243
|
+
name: a.name ?? ""
|
|
244
|
+
})).filter((a)=>a.client_id && a.name);
|
|
245
|
+
} catch (err) {
|
|
246
|
+
if (err instanceof Auth0AuthError) throw err;
|
|
247
|
+
return [];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function updateSpaCallbacks(clientId, callbackUrls) {
|
|
251
|
+
const callbacks = typeof callbackUrls === "string" ? callbackUrls : callbackUrls.join(",");
|
|
252
|
+
runAuth0([
|
|
253
|
+
"apps",
|
|
254
|
+
"update",
|
|
255
|
+
clientId,
|
|
256
|
+
"--callbacks",
|
|
257
|
+
callbacks,
|
|
258
|
+
"--no-input"
|
|
259
|
+
]);
|
|
260
|
+
}
|
|
261
|
+
function ensureSpaApp(name, callbackUrls) {
|
|
262
|
+
const existing = listApps().find((a)=>a.name === name);
|
|
263
|
+
if (existing) {
|
|
264
|
+
try {
|
|
265
|
+
updateSpaCallbacks(existing.client_id, callbackUrls);
|
|
266
|
+
} catch {
|
|
267
|
+
// Callbacks may already match; still usable for Postman.
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
client_id: existing.client_id,
|
|
271
|
+
reused: true
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
...createSpaApp(name, callbackUrls),
|
|
276
|
+
reused: false
|
|
277
|
+
};
|
|
209
278
|
}
|
|
210
279
|
function enableConnectionForClient(connectionName, clientId) {
|
|
211
280
|
const listOut = runAuth0([
|
|
@@ -245,6 +314,38 @@ function enableConnectionForClient(connectionName, clientId) {
|
|
|
245
314
|
function generateAdminPassword() {
|
|
246
315
|
return `${(0, _nodecrypto.randomBytes)(12).toString("base64url")}aA1!`;
|
|
247
316
|
}
|
|
317
|
+
function isUserAlreadyExistsError(err) {
|
|
318
|
+
const text = err instanceof Error ? err.message : String(err);
|
|
319
|
+
return /already exists|user exists|Conflict|409/i.test(text);
|
|
320
|
+
}
|
|
321
|
+
function findUserByEmail(email) {
|
|
322
|
+
const out = runAuth0([
|
|
323
|
+
"api",
|
|
324
|
+
"get",
|
|
325
|
+
`users-by-email?email=${encodeURIComponent(email)}`,
|
|
326
|
+
"--no-input"
|
|
327
|
+
]);
|
|
328
|
+
const users = parseJsonOutput(out);
|
|
329
|
+
const user = users.find((u)=>u.user_id && u.email);
|
|
330
|
+
if (!user?.user_id || !user.email) return null;
|
|
331
|
+
return {
|
|
332
|
+
user_id: user.user_id,
|
|
333
|
+
email: user.email
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
function updateUserPassword(userId, password) {
|
|
337
|
+
runAuth0([
|
|
338
|
+
"api",
|
|
339
|
+
"patch",
|
|
340
|
+
`users/${encodeURIComponent(userId)}`,
|
|
341
|
+
"--data",
|
|
342
|
+
JSON.stringify({
|
|
343
|
+
password,
|
|
344
|
+
connection: DB_CONNECTION_NAME
|
|
345
|
+
}),
|
|
346
|
+
"--no-input"
|
|
347
|
+
]);
|
|
348
|
+
}
|
|
248
349
|
function createAdminDatabaseUser(input) {
|
|
249
350
|
const body = {
|
|
250
351
|
email: input.email,
|
|
@@ -259,24 +360,39 @@ function createAdminDatabaseUser(input) {
|
|
|
259
360
|
]
|
|
260
361
|
}
|
|
261
362
|
};
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
363
|
+
try {
|
|
364
|
+
const out = runAuth0([
|
|
365
|
+
"api",
|
|
366
|
+
"post",
|
|
367
|
+
"users",
|
|
368
|
+
"--data",
|
|
369
|
+
JSON.stringify(body),
|
|
370
|
+
"--no-input"
|
|
371
|
+
]);
|
|
372
|
+
const user = parseJsonOutput(out);
|
|
373
|
+
if (!user.user_id || !user.email) {
|
|
374
|
+
throw new Error(`Auth0 create user response missing user_id/email. stdout: ${out.slice(0, 300)}`);
|
|
375
|
+
}
|
|
376
|
+
return {
|
|
377
|
+
user_id: user.user_id,
|
|
378
|
+
email: user.email,
|
|
379
|
+
password: input.password,
|
|
380
|
+
username: input.username
|
|
381
|
+
};
|
|
382
|
+
} catch (err) {
|
|
383
|
+
if (!isUserAlreadyExistsError(err)) throw err;
|
|
384
|
+
const existing = findUserByEmail(input.email);
|
|
385
|
+
if (!existing) {
|
|
386
|
+
throw new Error(`Auth0 user already exists for ${input.email}, but lookup by email returned no user.`);
|
|
387
|
+
}
|
|
388
|
+
updateUserPassword(existing.user_id, input.password);
|
|
389
|
+
return {
|
|
390
|
+
user_id: existing.user_id,
|
|
391
|
+
email: existing.email,
|
|
392
|
+
password: input.password,
|
|
393
|
+
username: input.username
|
|
394
|
+
};
|
|
273
395
|
}
|
|
274
|
-
return {
|
|
275
|
-
user_id: user.user_id,
|
|
276
|
-
email: user.email,
|
|
277
|
-
password: input.password,
|
|
278
|
-
username: input.username
|
|
279
|
-
};
|
|
280
396
|
}
|
|
281
397
|
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGgwLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMsIHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbi8qKiBNYW5hZ2VtZW50IEFQSSBzY29wZXMgbmVlZGVkIGZvciBBUEksIFNQQSwgY29ubmVjdGlvbnMsIGFuZCBhZG1pbiB1c2Vycy4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFtcblx0XCJjcmVhdGU6Y2xpZW50c1wiLFxuXHRcInJlYWQ6Y2xpZW50c1wiLFxuXHRcInVwZGF0ZTpjbGllbnRzXCIsXG5cdFwiY3JlYXRlOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJyZWFkOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJ1cGRhdGU6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInJlYWQ6Y29ubmVjdGlvbnNcIixcblx0XCJ1cGRhdGU6Y29ubmVjdGlvbnNcIixcblx0XCJjcmVhdGU6dXNlcnNcIixcblx0XCJyZWFkOnVzZXJzXCIsXG5cdFwidXBkYXRlOnVzZXJzXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG4vKiogSGFyZCB0aW1lb3V0IGZvciBhbnkgTWFuYWdlbWVudCBBUEkgY2FsbC4gUHJldmVudHMgaW5kZWZpbml0ZSBoYW5ncyBvbiB0b2tlbiByZS1hdXRoLiAqL1xuY29uc3QgQVBJX1RJTUVPVVRfTVMgPSA4XzAwMDtcblxuLyoqIERlZmF1bHQgQVBJIHNjb3BlcyBtYXRjaGluZyBIZWxsbyBDQVNMIEF1dGhvcml6ZSBkZWNvcmF0b3JzLiAqL1xuZXhwb3J0IGNvbnN0IEhFTExPX0FQSV9TQ09QRVMgPSBbXG5cdFwicmVhZDpIZWxsb1wiLFxuXHRcImNyZWF0ZTpIZWxsb1wiLFxuXHRcInVwZGF0ZTpIZWxsb1wiLFxuXHRcImRlbGV0ZTpIZWxsb1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERCX0NPTk5FQ1RJT05fTkFNRSA9IFwiVXNlcm5hbWUtUGFzc3dvcmQtQXV0aGVudGljYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEF1dGgwQXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gXCJBdXRoMEF1dGhFcnJvclwiO1xuXHR9XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb3Igc3RkZXJyIG91dHB1dCBsb29rcyBsaWtlIGFuIGV4cGlyZWQvbWlzc2luZyB0b2tlbi4gKi9cbmZ1bmN0aW9uIGlzQXV0aEVycm9yKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHRleHQuaW5jbHVkZXMoXCJyZW5ldyBhY2Nlc3MgdG9rZW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwibG9nIGluXCIpIHx8XG5cdFx0dGV4dC5pbmNsdWRlcyhcIlVuYXV0aG9yaXplZFwiKVxuXHQpO1xufVxuXG4vKiogU3RyaXAgQXV0aDAgQ0xJIGJhbm5lciBsaW5lcyBiZWZvcmUgSlNPTi4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbk91dHB1dDxUPihzdGRvdXQ6IHN0cmluZyk6IFQge1xuXHRjb25zdCBzdGFydCA9IHN0ZG91dC5pbmRleE9mKFwie1wiKTtcblx0Y29uc3QgYXJyYXlTdGFydCA9IHN0ZG91dC5pbmRleE9mKFwiW1wiKTtcblx0bGV0IGlkeCA9IC0xO1xuXHRpZiAoc3RhcnQgPT09IC0xKSBpZHggPSBhcnJheVN0YXJ0O1xuXHRlbHNlIGlmIChhcnJheVN0YXJ0ID09PSAtMSkgaWR4ID0gc3RhcnQ7XG5cdGVsc2UgaWR4ID0gTWF0aC5taW4oc3RhcnQsIGFycmF5U3RhcnQpO1xuXHRpZiAoaWR4IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OIGZyb20gYXV0aDAgQ0xJLCBnb3Q6ICR7c3Rkb3V0LnNsaWNlKDAsIDIwMCl9YCk7XG5cdHJldHVybiBKU09OLnBhcnNlKHN0ZG91dC5zbGljZShpZHgpKSBhcyBUO1xufVxuXG4vKiogUnVuIGFuIGF1dGgwIENMSSBjb21tYW5kIHdpdGggYSBoYXJkIHRpbWVvdXQuIFJldHVybnMgc3Rkb3V0IG9uIHN1Y2Nlc3MsIHRocm93cyBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcnVuQXV0aDAoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBhcmdzLCB7XG5cdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdHRpbWVvdXQ6IEFQSV9USU1FT1VUX01TLFxuXHRcdGlucHV0OiBcIlwiLFxuXHRcdHN0ZGlvOiBcInBpcGVcIixcblx0fSk7XG5cblx0aWYgKHJlc3VsdC5lcnJvcikge1xuXHRcdGNvbnN0IG1zZyA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuXHRcdGlmIChpc0F1dGhFcnJvcihtc2cpIHx8IChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVUSU1FRE9VVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3IobXNnKTtcblx0XHR9XG5cdFx0dGhyb3cgcmVzdWx0LmVycm9yO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcblx0XHRjb25zdCBzdGRlcnIgPSByZXN1bHQuc3RkZXJyID8/IFwiXCI7XG5cdFx0aWYgKGlzQXV0aEVycm9yKHN0ZGVycikpIHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihzdGRlcnIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgYGF1dGgwIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5zdGRvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBUZW5hbnQge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCItLXZlcnNpb25cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUZW5hbnRzKCk6IEF1dGgwVGVuYW50W10ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcInRlbmFudHNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG5cdFx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBdXRoMFRlbmFudFtdO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKCk6IGJvb2xlYW4ge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBbXCJsb2dpblwiLCBcIi0tc2NvcGVzXCIsIFJFUVVJUkVEX1NDT1BFU10sIHtcblx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0LnN0YXR1cyA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBcGlzKCk6IEFycmF5PHsgaWRlbnRpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcImFwaXNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdFx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaShcblx0bmFtZTogc3RyaW5nLFxuXHRpZGVudGlmaWVyOiBzdHJpbmcsXG5cdHNjb3BlczogcmVhZG9ubHkgc3RyaW5nW10gPSBIRUxMT19BUElfU0NPUEVTLFxuKTogeyBpZGVudGlmaWVyOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaXNcIixcblx0XHRcImNyZWF0ZVwiLFxuXHRcdFwiLS1uYW1lXCIsXG5cdFx0bmFtZSxcblx0XHRcIi0taWRlbnRpZmllclwiLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0XCItLXNjb3Blc1wiLFxuXHRcdHNjb3Blcy5qb2luKFwiLFwiKSxcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xufVxuXG4vKiogUmVwbGFjZSBhbiBBUEkncyBzY29wZXMgKEF1dGgwIENMSSB1cGRhdGUgLS1zY29wZXMgcmVwbGFjZXMgdGhlIGZ1bGwgc2V0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBcGlTY29wZXMoXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB2b2lkIHtcblx0cnVuQXV0aDAoW1wiYXBpc1wiLCBcInVwZGF0ZVwiLCBpZGVudGlmaWVyLCBcIi0tc2NvcGVzXCIsIHNjb3Blcy5qb2luKFwiLFwiKSwgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdHlwZW9mIGNhbGxiYWNrVXJscyA9PT0gXCJzdHJpbmdcIiA/IGNhbGxiYWNrVXJscyA6IGNhbGxiYWNrVXJscy5qb2luKFwiLFwiKTtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tzLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRyZXR1cm4gcGFyc2VKc29uT3V0cHV0KG91dCk7XG59XG5cbnR5cGUgQXV0aDBDb25uZWN0aW9uID0geyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHN0cmF0ZWd5OiBzdHJpbmcgfTtcblxuLyoqIEVuYWJsZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZm9yIGFuIGFwcGxpY2F0aW9uIChyZXF1aXJlZCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoY29ubmVjdGlvbk5hbWU6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBsaXN0T3V0ID0gcnVuQXV0aDAoW1wiYXBpXCIsIFwiZ2V0XCIsIFwiY29ubmVjdGlvbnNcIiwgXCItLW5vLWlucHV0XCJdKTtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSBwYXJzZUpzb25PdXRwdXQ8QXV0aDBDb25uZWN0aW9uW10+KGxpc3RPdXQpO1xuXHRjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdGlvbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb25uZWN0aW9uTmFtZSk7XG5cdGlmICghY29ubmVjdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQXV0aDAgY29ubmVjdGlvbiBub3QgZm91bmQ6ICR7Y29ubmVjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHRjb25zdCBjbGllbnRzT3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgY29ubmVjdGlvbnMvJHtjb25uZWN0aW9uLmlkfS9jbGllbnRzYCxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG5cdGNvbnN0IHsgY2xpZW50cyB9ID0gcGFyc2VKc29uT3V0cHV0PHsgY2xpZW50czogQXJyYXk8eyBjbGllbnRfaWQ6IHN0cmluZyB9PiB9PihjbGllbnRzT3V0KTtcblx0aWYgKGNsaWVudHMuc29tZSgoYykgPT4gYy5jbGllbnRfaWQgPT09IGNsaWVudElkKSkgcmV0dXJuO1xuXG5cdC8vIERlZGljYXRlZCBlbmFibGVkLWNsaWVudHMgZW5kcG9pbnQgKGVuYWJsZWRfY2xpZW50cyBvbiBjb25uZWN0aW9uIFBBVENIIGlzIGRlcHJlY2F0ZWQpLlxuXHRydW5BdXRoMChbXG5cdFx0XCJhcGlcIixcblx0XHRcInBhdGNoXCIsXG5cdFx0YGNvbm5lY3Rpb25zLyR7Y29ubmVjdGlvbi5pZH0vY2xpZW50c2AsXG5cdFx0XCItLWRhdGFcIixcblx0XHRKU09OLnN0cmluZ2lmeShbeyBjbGllbnRfaWQ6IGNsaWVudElkLCBzdGF0dXM6IHRydWUgfV0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuZXhwb3J0IHR5cGUgQWRtaW5EYXRhYmFzZVVzZXIgPSB7XG5cdHVzZXJfaWQ6IHN0cmluZztcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn07XG5cbi8qKiBTdHJvbmcgZGVmYXVsdCBwYXNzd29yZCB3aGVuIHRoZSBzY2FmZm9sZGVyIGNhbGxlciBsZWF2ZXMgcGFzc3dvcmQgYmxhbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBZG1pblBhc3N3b3JkKCk6IHN0cmluZyB7XG5cdHJldHVybiBgJHtyYW5kb21CeXRlcygxMikudG9TdHJpbmcoXCJiYXNlNjR1cmxcIil9YUExIWA7XG59XG5cbi8qKiBDcmVhdGUgYSBEQiBjb25uZWN0aW9uIHJvb3QtYWRtaW4gdXNlciBmb3IgbG9jYWwgLyBQb3N0bWFuIGxvZ2luLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyKGlucHV0OiB7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHVzZXJuYW1lOiBzdHJpbmc7XG59KTogQWRtaW5EYXRhYmFzZVVzZXIge1xuXHRjb25zdCBib2R5ID0ge1xuXHRcdGVtYWlsOiBpbnB1dC5lbWFpbCxcblx0XHRjb25uZWN0aW9uOiBEQl9DT05ORUNUSU9OX05BTUUsXG5cdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdG5hbWU6IGlucHV0LnVzZXJuYW1lLFxuXHRcdGVtYWlsX3ZlcmlmaWVkOiB0cnVlLFxuXHRcdHZlcmlmeV9lbWFpbDogZmFsc2UsXG5cdFx0YXBwX21ldGFkYXRhOiB7IHJvbGVzOiBbXCJhZG1pblwiXSB9LFxuXHR9O1xuXHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcGlcIiwgXCJwb3N0XCIsIFwidXNlcnNcIiwgXCItLWRhdGFcIiwgSlNPTi5zdHJpbmdpZnkoYm9keSksIFwiLS1uby1pbnB1dFwiXSk7XG5cdGNvbnN0IHVzZXIgPSBwYXJzZUpzb25PdXRwdXQ8eyB1c2VyX2lkPzogc3RyaW5nOyBlbWFpbD86IHN0cmluZyB9PihvdXQpO1xuXHRpZiAoIXVzZXIudXNlcl9pZCB8fCAhdXNlci5lbWFpbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBBdXRoMCBjcmVhdGUgdXNlciByZXNwb25zZSBtaXNzaW5nIHVzZXJfaWQvZW1haWwuIHN0ZG91dDogJHtvdXQuc2xpY2UoMCwgMzAwKX1gLFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR1c2VyX2lkOiB1c2VyLnVzZXJfaWQsXG5cdFx0ZW1haWw6IHVzZXIuZW1haWwsXG5cdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdHVzZXJuYW1lOiBpbnB1dC51c2VybmFtZSxcblx0fTtcbn1cblxuZXhwb3J0IHsgUkVRVUlSRURfU0NPUEVTIH07XG4iXSwibmFtZXMiOlsiQXV0aDBBdXRoRXJyb3IiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJIRUxMT19BUElfU0NPUEVTIiwiUkVRVUlSRURfU0NPUEVTIiwiY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIiLCJjcmVhdGVBcGkiLCJjcmVhdGVTcGFBcHAiLCJlbmFibGVDb25uZWN0aW9uRm9yQ2xpZW50IiwiZ2VuZXJhdGVBZG1pblBhc3N3b3JkIiwiaXNJbnN0YWxsZWQiLCJsaXN0QXBpcyIsImxpc3RUZW5hbnRzIiwibG9naW4iLCJ1cGRhdGVBcGlTY29wZXMiLCJqb2luIiwiQVBJX1RJTUVPVVRfTVMiLCJFcnJvciIsIm1lc3NhZ2UiLCJuYW1lIiwiaXNBdXRoRXJyb3IiLCJ0ZXh0IiwiaW5jbHVkZXMiLCJwYXJzZUpzb25PdXRwdXQiLCJzdGRvdXQiLCJzdGFydCIsImluZGV4T2YiLCJhcnJheVN0YXJ0IiwiaWR4IiwiTWF0aCIsIm1pbiIsInNsaWNlIiwiSlNPTiIsInBhcnNlIiwicnVuQXV0aDAiLCJhcmdzIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJ0aW1lb3V0IiwiaW5wdXQiLCJzdGRpbyIsImVycm9yIiwibXNnIiwiY29kZSIsInN0YXR1cyIsInN0ZGVyciIsImV4ZWNGaWxlU3luYyIsIm91dCIsImVyciIsImlkZW50aWZpZXIiLCJzY29wZXMiLCJjYWxsYmFja1VybHMiLCJjYWxsYmFja3MiLCJjb25uZWN0aW9uTmFtZSIsImNsaWVudElkIiwibGlzdE91dCIsImNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbiIsImZpbmQiLCJjIiwiY2xpZW50c091dCIsImlkIiwiY2xpZW50cyIsInNvbWUiLCJjbGllbnRfaWQiLCJzdHJpbmdpZnkiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiYm9keSIsImVtYWlsIiwicGFzc3dvcmQiLCJ1c2VybmFtZSIsImVtYWlsX3ZlcmlmaWVkIiwidmVyaWZ5X2VtYWlsIiwiYXBwX21ldGFkYXRhIiwicm9sZXMiLCJ1c2VyIiwidXNlcl9pZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUErQmFBO2VBQUFBOztRQUZBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBbU9KQztlQUFBQTs7UUE3Qk9DO2VBQUFBOztRQTVGQUM7ZUFBQUE7O1FBNEJBQztlQUFBQTs7UUF1QkFDO2VBQUFBOztRQW9DQUM7ZUFBQUE7O1FBN0hBQztlQUFBQTs7UUE0QkFDO2VBQUFBOztRQW5CQUM7ZUFBQUE7O1FBWUFDO2VBQUFBOztRQXNDQUM7ZUFBQUE7OzttQ0FySndCOzRCQUNaO0FBRTVCLDZFQUE2RSxHQUM3RSxNQUFNVixrQkFBa0I7SUFDdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBLENBQUNXLElBQUksQ0FBQztBQUVQLDBGQUEwRixHQUMxRixNQUFNQyxpQkFBaUI7QUFHaEIsTUFBTWIsbUJBQW1CO0lBQy9CO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFTSxNQUFNRCxxQkFBcUI7QUFFM0IsTUFBTUQsdUJBQXVCZ0I7SUFDbkMsWUFBbUJDLE9BQWUsQ0FBRTtRQUNuQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDYjtBQUNEO0FBRUEsbUZBQW1GLEdBQ25GLFNBQVNDLFlBQVlDLElBQVk7SUFDaEMsT0FDQ0EsS0FBS0MsUUFBUSxDQUFDLHlCQUNkRCxLQUFLQyxRQUFRLENBQUMsYUFDZEQsS0FBS0MsUUFBUSxDQUFDO0FBRWhCO0FBRUEsOENBQThDLEdBQzlDLFNBQVNDLGdCQUFtQkMsTUFBYztJQUN6QyxNQUFNQyxRQUFRRCxPQUFPRSxPQUFPLENBQUM7SUFDN0IsTUFBTUMsYUFBYUgsT0FBT0UsT0FB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
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGgwLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMsIHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbi8qKiBNYW5hZ2VtZW50IEFQSSBzY29wZXMgbmVlZGVkIGZvciBBUEksIFNQQSwgY29ubmVjdGlvbnMsIGFuZCBhZG1pbiB1c2Vycy4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFtcblx0XCJjcmVhdGU6Y2xpZW50c1wiLFxuXHRcInJlYWQ6Y2xpZW50c1wiLFxuXHRcInVwZGF0ZTpjbGllbnRzXCIsXG5cdFwiY3JlYXRlOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJyZWFkOnJlc291cmNlX3NlcnZlcnNcIixcblx0XCJ1cGRhdGU6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInJlYWQ6Y29ubmVjdGlvbnNcIixcblx0XCJ1cGRhdGU6Y29ubmVjdGlvbnNcIixcblx0XCJjcmVhdGU6dXNlcnNcIixcblx0XCJyZWFkOnVzZXJzXCIsXG5cdFwidXBkYXRlOnVzZXJzXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG4vKiogSGFyZCB0aW1lb3V0IGZvciBhbnkgTWFuYWdlbWVudCBBUEkgY2FsbC4gUHJldmVudHMgaW5kZWZpbml0ZSBoYW5ncyBvbiB0b2tlbiByZS1hdXRoLiAqL1xuY29uc3QgQVBJX1RJTUVPVVRfTVMgPSA4XzAwMDtcblxuLyoqIERlZmF1bHQgQVBJIHNjb3BlcyBtYXRjaGluZyBIZWxsbyBDQVNMIEF1dGhvcml6ZSBkZWNvcmF0b3JzLiAqL1xuZXhwb3J0IGNvbnN0IEhFTExPX0FQSV9TQ09QRVMgPSBbXG5cdFwicmVhZDpIZWxsb1wiLFxuXHRcImNyZWF0ZTpIZWxsb1wiLFxuXHRcInVwZGF0ZTpIZWxsb1wiLFxuXHRcImRlbGV0ZTpIZWxsb1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERCX0NPTk5FQ1RJT05fTkFNRSA9IFwiVXNlcm5hbWUtUGFzc3dvcmQtQXV0aGVudGljYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEF1dGgwQXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gXCJBdXRoMEF1dGhFcnJvclwiO1xuXHR9XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb3Igc3RkZXJyIG91dHB1dCBsb29rcyBsaWtlIGFuIGV4cGlyZWQvbWlzc2luZyB0b2tlbi4gKi9cbmZ1bmN0aW9uIGlzQXV0aEVycm9yKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHRleHQuaW5jbHVkZXMoXCJyZW5ldyBhY2Nlc3MgdG9rZW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwibG9nIGluXCIpIHx8XG5cdFx0dGV4dC5pbmNsdWRlcyhcIlVuYXV0aG9yaXplZFwiKVxuXHQpO1xufVxuXG4vKiogU3RyaXAgQXV0aDAgQ0xJIGJhbm5lciBsaW5lcyBiZWZvcmUgSlNPTi4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbk91dHB1dDxUPihzdGRvdXQ6IHN0cmluZyk6IFQge1xuXHRjb25zdCBzdGFydCA9IHN0ZG91dC5pbmRleE9mKFwie1wiKTtcblx0Y29uc3QgYXJyYXlTdGFydCA9IHN0ZG91dC5pbmRleE9mKFwiW1wiKTtcblx0bGV0IGlkeCA9IC0xO1xuXHRpZiAoc3RhcnQgPT09IC0xKSBpZHggPSBhcnJheVN0YXJ0O1xuXHRlbHNlIGlmIChhcnJheVN0YXJ0ID09PSAtMSkgaWR4ID0gc3RhcnQ7XG5cdGVsc2UgaWR4ID0gTWF0aC5taW4oc3RhcnQsIGFycmF5U3RhcnQpO1xuXHRpZiAoaWR4IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OIGZyb20gYXV0aDAgQ0xJLCBnb3Q6ICR7c3Rkb3V0LnNsaWNlKDAsIDIwMCl9YCk7XG5cdHJldHVybiBKU09OLnBhcnNlKHN0ZG91dC5zbGljZShpZHgpKSBhcyBUO1xufVxuXG4vKiogUnVuIGFuIGF1dGgwIENMSSBjb21tYW5kIHdpdGggYSBoYXJkIHRpbWVvdXQuIFJldHVybnMgc3Rkb3V0IG9uIHN1Y2Nlc3MsIHRocm93cyBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcnVuQXV0aDAoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBhcmdzLCB7XG5cdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdHRpbWVvdXQ6IEFQSV9USU1FT1VUX01TLFxuXHRcdGlucHV0OiBcIlwiLFxuXHRcdHN0ZGlvOiBcInBpcGVcIixcblx0fSk7XG5cblx0aWYgKHJlc3VsdC5lcnJvcikge1xuXHRcdGNvbnN0IG1zZyA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuXHRcdGlmIChpc0F1dGhFcnJvcihtc2cpIHx8IChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVUSU1FRE9VVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3IobXNnKTtcblx0XHR9XG5cdFx0dGhyb3cgcmVzdWx0LmVycm9yO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcblx0XHRjb25zdCBzdGRlcnIgPSByZXN1bHQuc3RkZXJyID8/IFwiXCI7XG5cdFx0aWYgKGlzQXV0aEVycm9yKHN0ZGVycikpIHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihzdGRlcnIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgYGF1dGgwIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5zdGRvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBUZW5hbnQge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCItLXZlcnNpb25cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUZW5hbnRzKCk6IEF1dGgwVGVuYW50W10ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcInRlbmFudHNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG5cdFx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBdXRoMFRlbmFudFtdO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKCk6IGJvb2xlYW4ge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBbXCJsb2dpblwiLCBcIi0tc2NvcGVzXCIsIFJFUVVJUkVEX1NDT1BFU10sIHtcblx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0LnN0YXR1cyA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBcGlzKCk6IEFycmF5PHsgaWRlbnRpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcImFwaXNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdFx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaShcblx0bmFtZTogc3RyaW5nLFxuXHRpZGVudGlmaWVyOiBzdHJpbmcsXG5cdHNjb3BlczogcmVhZG9ubHkgc3RyaW5nW10gPSBIRUxMT19BUElfU0NPUEVTLFxuKTogeyBpZGVudGlmaWVyOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaXNcIixcblx0XHRcImNyZWF0ZVwiLFxuXHRcdFwiLS1uYW1lXCIsXG5cdFx0bmFtZSxcblx0XHRcIi0taWRlbnRpZmllclwiLFxuXHRcdGlkZW50aWZpZXIsXG5cdFx0XCItLXNjb3Blc1wiLFxuXHRcdHNjb3Blcy5qb2luKFwiLFwiKSxcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xufVxuXG4vKiogUmVwbGFjZSBhbiBBUEkncyBzY29wZXMgKEF1dGgwIENMSSB1cGRhdGUgLS1zY29wZXMgcmVwbGFjZXMgdGhlIGZ1bGwgc2V0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBcGlTY29wZXMoXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB2b2lkIHtcblx0cnVuQXV0aDAoW1wiYXBpc1wiLCBcInVwZGF0ZVwiLCBpZGVudGlmaWVyLCBcIi0tc2NvcGVzXCIsIHNjb3Blcy5qb2luKFwiLFwiKSwgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdHlwZW9mIGNhbGxiYWNrVXJscyA9PT0gXCJzdHJpbmdcIiA/IGNhbGxiYWNrVXJscyA6IGNhbGxiYWNrVXJscy5qb2luKFwiLFwiKTtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tzLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCBhcHAgPSBwYXJzZUpzb25PdXRwdXQ8eyBjbGllbnRfaWQ/OiBzdHJpbmc7IGNsaWVudElkPzogc3RyaW5nIH0+KG91dCk7XG5cdGNvbnN0IGNsaWVudElkID0gYXBwLmNsaWVudF9pZCA/PyBhcHAuY2xpZW50SWQ7XG5cdGlmICghY2xpZW50SWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgQXV0aDAgY3JlYXRlIFNQQSByZXNwb25zZSBtaXNzaW5nIGNsaWVudF9pZC4gc3Rkb3V0OiAke291dC5zbGljZSgwLCAzMDApfWAsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4geyBjbGllbnRfaWQ6IGNsaWVudElkIH07XG59XG5cbmV4cG9ydCB0eXBlIEF1dGgwQXBwID0geyBjbGllbnRfaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXBwcygpOiBBdXRoMEFwcFtdIHtcblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcHBzXCIsIFwibGlzdFwiLCBcIi0tanNvblwiLCBcIi0tbm8taW5wdXRcIl0pO1xuXHRcdGNvbnN0IGFwcHMgPVxuXHRcdFx0cGFyc2VKc29uT3V0cHV0PEFycmF5PHsgY2xpZW50X2lkPzogc3RyaW5nOyBjbGllbnRJZD86IHN0cmluZzsgbmFtZT86IHN0cmluZyB9Pj4ob3V0KTtcblx0XHRyZXR1cm4gYXBwc1xuXHRcdFx0Lm1hcCgoYSkgPT4gKHtcblx0XHRcdFx0Y2xpZW50X2lkOiBhLmNsaWVudF9pZCA/PyBhLmNsaWVudElkID8/IFwiXCIsXG5cdFx0XHRcdG5hbWU6IGEubmFtZSA/PyBcIlwiLFxuXHRcdFx0fSkpXG5cdFx0XHQuZmlsdGVyKChhKSA9PiBhLmNsaWVudF9pZCAmJiBhLm5hbWUpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNwYUNhbGxiYWNrcyhcblx0Y2xpZW50SWQ6IHN0cmluZyxcblx0Y2FsbGJhY2tVcmxzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0eXBlb2YgY2FsbGJhY2tVcmxzID09PSBcInN0cmluZ1wiID8gY2FsbGJhY2tVcmxzIDogY2FsbGJhY2tVcmxzLmpvaW4oXCIsXCIpO1xuXHRydW5BdXRoMChbXCJhcHBzXCIsIFwidXBkYXRlXCIsIGNsaWVudElkLCBcIi0tY2FsbGJhY2tzXCIsIGNhbGxiYWNrcywgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBQb3N0bWFuIFNQQSwgb3IgcmV1c2UgYW4gZXhpc3RpbmcgYXBwIHdpdGggdGhlIHNhbWUgbmFtZSAocmUtc2NhZmZvbGQpLlxuICogQWx3YXlzIHJldHVybnMgYSBjbGllbnRfaWQgc3VpdGFibGUgZm9yIFBvc3RtYW4gYXV0aDBDbGllbnRJZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZzsgcmV1c2VkOiBib29sZWFuIH0ge1xuXHRjb25zdCBleGlzdGluZyA9IGxpc3RBcHBzKCkuZmluZCgoYSkgPT4gYS5uYW1lID09PSBuYW1lKTtcblx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVNwYUNhbGxiYWNrcyhleGlzdGluZy5jbGllbnRfaWQsIGNhbGxiYWNrVXJscyk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBDYWxsYmFja3MgbWF5IGFscmVhZHkgbWF0Y2g7IHN0aWxsIHVzYWJsZSBmb3IgUG9zdG1hbi5cblx0XHR9XG5cdFx0cmV0dXJuIHsgY2xpZW50X2lkOiBleGlzdGluZy5jbGllbnRfaWQsIHJldXNlZDogdHJ1ZSB9O1xuXHR9XG5cdHJldHVybiB7IC4uLmNyZWF0ZVNwYUFwcChuYW1lLCBjYWxsYmFja1VybHMpLCByZXVzZWQ6IGZhbHNlIH07XG59XG5cbnR5cGUgQXV0aDBDb25uZWN0aW9uID0geyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHN0cmF0ZWd5OiBzdHJpbmcgfTtcblxuLyoqIEVuYWJsZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gZm9yIGFuIGFwcGxpY2F0aW9uIChyZXF1aXJlZCBmb3IgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoY29ubmVjdGlvbk5hbWU6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBsaXN0T3V0ID0gcnVuQXV0aDAoW1wiYXBpXCIsIFwiZ2V0XCIsIFwiY29ubmVjdGlvbnNcIiwgXCItLW5vLWlucHV0XCJdKTtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSBwYXJzZUpzb25PdXRwdXQ8QXV0aDBDb25uZWN0aW9uW10+KGxpc3RPdXQpO1xuXHRjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdGlvbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb25uZWN0aW9uTmFtZSk7XG5cdGlmICghY29ubmVjdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQXV0aDAgY29ubmVjdGlvbiBub3QgZm91bmQ6ICR7Y29ubmVjdGlvbk5hbWV9YCk7XG5cdH1cblxuXHRjb25zdCBjbGllbnRzT3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgY29ubmVjdGlvbnMvJHtjb25uZWN0aW9uLmlkfS9jbGllbnRzYCxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG5cdGNvbnN0IHsgY2xpZW50cyB9ID0gcGFyc2VKc29uT3V0cHV0PHsgY2xpZW50czogQXJyYXk8eyBjbGllbnRfaWQ6IHN0cmluZyB9PiB9PihjbGllbnRzT3V0KTtcblx0aWYgKGNsaWVudHMuc29tZSgoYykgPT4gYy5jbGllbnRfaWQgPT09IGNsaWVudElkKSkgcmV0dXJuO1xuXG5cdC8vIERlZGljYXRlZCBlbmFibGVkLWNsaWVudHMgZW5kcG9pbnQgKGVuYWJsZWRfY2xpZW50cyBvbiBjb25uZWN0aW9uIFBBVENIIGlzIGRlcHJlY2F0ZWQpLlxuXHRydW5BdXRoMChbXG5cdFx0XCJhcGlcIixcblx0XHRcInBhdGNoXCIsXG5cdFx0YGNvbm5lY3Rpb25zLyR7Y29ubmVjdGlvbi5pZH0vY2xpZW50c2AsXG5cdFx0XCItLWRhdGFcIixcblx0XHRKU09OLnN0cmluZ2lmeShbeyBjbGllbnRfaWQ6IGNsaWVudElkLCBzdGF0dXM6IHRydWUgfV0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuZXhwb3J0IHR5cGUgQWRtaW5EYXRhYmFzZVVzZXIgPSB7XG5cdHVzZXJfaWQ6IHN0cmluZztcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn07XG5cbi8qKiBTdHJvbmcgZGVmYXVsdCBwYXNzd29yZCB3aGVuIHRoZSBzY2FmZm9sZGVyIGNhbGxlciBsZWF2ZXMgcGFzc3dvcmQgYmxhbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBZG1pblBhc3N3b3JkKCk6IHN0cmluZyB7XG5cdHJldHVybiBgJHtyYW5kb21CeXRlcygxMikudG9TdHJpbmcoXCJiYXNlNjR1cmxcIil9YUExIWA7XG59XG5cbmZ1bmN0aW9uIGlzVXNlckFscmVhZHlFeGlzdHNFcnJvcihlcnI6IHVua25vd24pOiBib29sZWFuIHtcblx0Y29uc3QgdGV4dCA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0cmV0dXJuIC9hbHJlYWR5IGV4aXN0c3x1c2VyIGV4aXN0c3xDb25mbGljdHw0MDkvaS50ZXN0KHRleHQpO1xufVxuXG4vKiogTG9vayB1cCBhIHVzZXIgYnkgZW1haWwgKE1hbmFnZW1lbnQgQVBJIHVzZXJzLWJ5LWVtYWlsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IHsgdXNlcl9pZDogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0gfCBudWxsIHtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJnZXRcIixcblx0XHRgdXNlcnMtYnktZW1haWw/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWAsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCB1c2VycyA9IHBhcnNlSnNvbk91dHB1dDxBcnJheTx7IHVzZXJfaWQ/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH0+PihvdXQpO1xuXHRjb25zdCB1c2VyID0gdXNlcnMuZmluZCgodSkgPT4gdS51c2VyX2lkICYmIHUuZW1haWwpO1xuXHRpZiAoIXVzZXI/LnVzZXJfaWQgfHwgIXVzZXIuZW1haWwpIHJldHVybiBudWxsO1xuXHRyZXR1cm4geyB1c2VyX2lkOiB1c2VyLnVzZXJfaWQsIGVtYWlsOiB1c2VyLmVtYWlsIH07XG59XG5cbi8qKiBSZXNldCBwYXNzd29yZCBzbyBhIHJlLXNjYWZmb2xkIGNhbiB3cml0ZSBhIGtub3duIHBhc3N3b3JkIHRvIC5lbnYuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXJJZDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogdm9pZCB7XG5cdHJ1bkF1dGgwKFtcblx0XHRcImFwaVwiLFxuXHRcdFwicGF0Y2hcIixcblx0XHRgdXNlcnMvJHtlbmNvZGVVUklDb21wb25lbnQodXNlcklkKX1gLFxuXHRcdFwiLS1kYXRhXCIsXG5cdFx0SlNPTi5zdHJpbmdpZnkoeyBwYXNzd29yZCwgY29ubmVjdGlvbjogREJfQ09OTkVDVElPTl9OQU1FIH0pLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBEQiBjb25uZWN0aW9uIHJvb3QtYWRtaW4gdXNlciBmb3IgbG9jYWwgLyBQb3N0bWFuIGxvZ2luLlxuICogSWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMsIGxvb2sgdGhlbSB1cCwgcmVzZXQgcGFzc3dvcmQgdG8gYGlucHV0LnBhc3N3b3JkYCxcbiAqIGFuZCByZXR1cm4gdGhhdCBpZGVudGl0eSBzbyBjYWxsZXJzIGNhbiBzdGlsbCB3cml0ZSAuZW52IGNyZWRlbnRpYWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIoaW5wdXQ6IHtcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dXNlcm5hbWU6IHN0cmluZztcbn0pOiBBZG1pbkRhdGFiYXNlVXNlciB7XG5cdGNvbnN0IGJvZHkgPSB7XG5cdFx0ZW1haWw6IGlucHV0LmVtYWlsLFxuXHRcdGNvbm5lY3Rpb246IERCX0NPTk5FQ1RJT05fTkFNRSxcblx0XHRwYXNzd29yZDogaW5wdXQucGFzc3dvcmQsXG5cdFx0bmFtZTogaW5wdXQudXNlcm5hbWUsXG5cdFx0ZW1haWxfdmVyaWZpZWQ6IHRydWUsXG5cdFx0dmVyaWZ5X2VtYWlsOiBmYWxzZSxcblx0XHRhcHBfbWV0YWRhdGE6IHsgcm9sZXM6IFtcImFkbWluXCJdIH0sXG5cdH07XG5cblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXG5cdFx0XHRcImFwaVwiLFxuXHRcdFx0XCJwb3N0XCIsXG5cdFx0XHRcInVzZXJzXCIsXG5cdFx0XHRcIi0tZGF0YVwiLFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoYm9keSksXG5cdFx0XHRcIi0tbm8taW5wdXRcIixcblx0XHRdKTtcblx0XHRjb25zdCB1c2VyID0gcGFyc2VKc29uT3V0cHV0PHsgdXNlcl9pZD86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfT4ob3V0KTtcblx0XHRpZiAoIXVzZXIudXNlcl9pZCB8fCAhdXNlci5lbWFpbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgQXV0aDAgY3JlYXRlIHVzZXIgcmVzcG9uc2UgbWlzc2luZyB1c2VyX2lkL2VtYWlsLiBzdGRvdXQ6ICR7b3V0LnNsaWNlKDAsIDMwMCl9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR1c2VyX2lkOiB1c2VyLnVzZXJfaWQsXG5cdFx0XHRlbWFpbDogdXNlci5lbWFpbCxcblx0XHRcdHBhc3N3b3JkOiBpbnB1dC5wYXNzd29yZCxcblx0XHRcdHVzZXJuYW1lOiBpbnB1dC51c2VybmFtZSxcblx0XHR9O1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoIWlzVXNlckFscmVhZHlFeGlzdHNFcnJvcihlcnIpKSB0aHJvdyBlcnI7XG5cblx0XHRjb25zdCBleGlzdGluZyA9IGZpbmRVc2VyQnlFbWFpbChpbnB1dC5lbWFpbCk7XG5cdFx0aWYgKCFleGlzdGluZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgQXV0aDAgdXNlciBhbHJlYWR5IGV4aXN0cyBmb3IgJHtpbnB1dC5lbWFpbH0sIGJ1dCBsb29rdXAgYnkgZW1haWwgcmV0dXJuZWQgbm8gdXNlci5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR1cGRhdGVVc2VyUGFzc3dvcmQoZXhpc3RpbmcudXNlcl9pZCwgaW5wdXQucGFzc3dvcmQpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR1c2VyX2lkOiBleGlzdGluZy51c2VyX2lkLFxuXHRcdFx0ZW1haWw6IGV4aXN0aW5nLmVtYWlsLFxuXHRcdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdFx0dXNlcm5hbWU6IGlucHV0LnVzZXJuYW1lLFxuXHRcdH07XG5cdH1cbn1cblxuZXhwb3J0IHsgUkVRVUlSRURfU0NPUEVTIH07XG4iXSwibmFtZXMiOlsiQXV0aDBBdXRoRXJyb3IiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJIRUxMT19BUElfU0NPUEVTIiwiUkVRVUlSRURfU0NPUEVTIiwiY3JlYXRlQWRtaW5EYXRhYmFzZVVzZXIiLCJjcmVhdGVBcGkiLCJjcmVhdGVTcGFBcHAiLCJlbmFibGVDb25uZWN0aW9uRm9yQ2xpZW50IiwiZW5zdXJlU3BhQXBwIiwiZmluZFVzZXJCeUVtYWlsIiwiZ2VuZXJhdGVBZG1pblBhc3N3b3JkIiwiaXNJbnN0YWxsZWQiLCJsaXN0QXBpcyIsImxpc3RBcHBzIiwibGlzdFRlbmFudHMiLCJsb2dpbiIsInVwZGF0ZUFwaVNjb3BlcyIsInVwZGF0ZVNwYUNhbGxiYWNrcyIsInVwZGF0ZVVzZXJQYXNzd29yZCIsImpvaW4iLCJBUElfVElNRU9VVF9NUyIsIkVycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJpc0F1dGhFcnJvciIsInRleHQiLCJpbmNsdWRlcyIsInBhcnNlSnNvbk91dHB1dCIsInN0ZG91dCIsInN0YXJ0IiwiaW5kZXhPZiIsImFycmF5U3RhcnQiLCJpZHgiLCJNYXRoIiwibWluIiwic2xpY2UiLCJKU09OIiwicGFyc2UiLCJydW5BdXRoMCIsImFyZ3MiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsInRpbWVvdXQiLCJpbnB1dCIsInN0ZGlvIiwiZXJyb3IiLCJtc2ciLCJjb2RlIiwic3RhdHVzIiwic3RkZXJyIiwiZXhlY0ZpbGVTeW5jIiwib3V0IiwiZXJyIiwiaWRlbnRpZmllciIsInNjb3BlcyIsImNhbGxiYWNrVXJscyIsImNhbGxiYWNrcyIsImFwcCIsImNsaWVudElkIiwiY2xpZW50X2lkIiwiYXBwcyIsIm1hcCIsImEiLCJmaWx0ZXIiLCJleGlzdGluZyIsImZpbmQiLCJyZXVzZWQiLCJjb25uZWN0aW9uTmFtZSIsImxpc3RPdXQiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb24iLCJjIiwiY2xpZW50c091dCIsImlkIiwiY2xpZW50cyIsInNvbWUiLCJzdHJpbmdpZnkiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiaXNVc2VyQWxyZWFkeUV4aXN0c0Vycm9yIiwiU3RyaW5nIiwidGVzdCIsImVtYWlsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXNlcnMiLCJ1c2VyIiwidSIsInVzZXJfaWQiLCJ1c2VySWQiLCJwYXNzd29yZCIsImJvZHkiLCJ1c2VybmFtZSIsImVtYWlsX3ZlcmlmaWVkIiwidmVyaWZ5X2VtYWlsIiwiYXBwX21ldGFkYXRhIiwicm9sZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBK0JhQTtlQUFBQTs7UUFGQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQXVWSkM7ZUFBQUE7O1FBeERPQztlQUFBQTs7UUFyTEFDO2VBQUFBOztRQTRCQUM7ZUFBQUE7O1FBNkVBQztlQUFBQTs7UUFuQkFDO2VBQUFBOztRQWlFQUM7ZUFBQUE7O1FBVkFDO2VBQUFBOztRQW5MQUM7ZUFBQUE7O1FBNEJBQztlQUFBQTs7UUFtRUFDO2VBQUFBOztRQXRGQUM7ZUFBQUE7O1FBWUFDO2VBQUFBOztRQXNDQUM7ZUFBQUE7O1FBcURBQztlQUFBQTs7UUEyRkFDO2VBQUFBOzs7bUNBclN3Qjs0QkFDWjtBQUU1Qiw2RUFBNkUsR0FDN0UsTUFBTWYsa0JBQWtCO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQSxDQUFDZ0IsSUFBSSxDQUFDO0FBRVAsMEZBQTBGLEdB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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "formatScaffoldedFiles", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return formatScaffoldedFiles;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _nodechild_process = require("node:child_process");
|
|
12
|
+
function formatScaffoldedFiles(targetDir) {
|
|
13
|
+
process.stdout.write("\n Formatting scaffolded files with Biome...");
|
|
14
|
+
let result = (0, _nodechild_process.spawnSync)("biome", [
|
|
15
|
+
"check",
|
|
16
|
+
"--write",
|
|
17
|
+
"."
|
|
18
|
+
], {
|
|
19
|
+
cwd: targetDir,
|
|
20
|
+
encoding: "utf8",
|
|
21
|
+
stdio: "pipe"
|
|
22
|
+
});
|
|
23
|
+
if (result.error && result.error.code === "ENOENT") {
|
|
24
|
+
result = (0, _nodechild_process.spawnSync)("npx", [
|
|
25
|
+
"--yes",
|
|
26
|
+
"@biomejs/biome",
|
|
27
|
+
"check",
|
|
28
|
+
"--write",
|
|
29
|
+
"."
|
|
30
|
+
], {
|
|
31
|
+
cwd: targetDir,
|
|
32
|
+
encoding: "utf8",
|
|
33
|
+
stdio: "pipe"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (result.status === 0) {
|
|
37
|
+
process.stdout.write(" done.\n");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const detail = (result.stderr || result.stdout || result.error?.message || "").trim();
|
|
41
|
+
process.stdout.write(" failed.\n");
|
|
42
|
+
if (detail) {
|
|
43
|
+
console.error(` ✗ Biome: ${detail.slice(0, 400)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2Jpb21lLWZvcm1hdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5cbi8qKlxuICogRm9ybWF0L2xpbnQtZml4IGFsbCBmaWxlcyBpbiB0aGUgc2NhZmZvbGRlZCB3b3Jrc3BhY2Ugd2l0aCBCaW9tZS5cbiAqIFByZWZlciBhIGdsb2JhbCBgYmlvbWVgIGJpbmFyeSAoYnVpbGRlciBpbWFnZSk7IGZhbGwgYmFjayB0byBgbnB4YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNjYWZmb2xkZWRGaWxlcyh0YXJnZXREaXI6IHN0cmluZyk6IHZvaWQge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRm9ybWF0dGluZyBzY2FmZm9sZGVkIGZpbGVzIHdpdGggQmlvbWUuLi5cIik7XG5cblx0bGV0IHJlc3VsdCA9IHNwYXduU3luYyhcImJpb21lXCIsIFtcImNoZWNrXCIsIFwiLS13cml0ZVwiLCBcIi5cIl0sIHtcblx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0c3RkaW86IFwicGlwZVwiLFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LmVycm9yICYmIChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG5cdFx0cmVzdWx0ID0gc3Bhd25TeW5jKFwibnB4XCIsIFtcIi0teWVzXCIsIFwiQGJpb21lanMvYmlvbWVcIiwgXCJjaGVja1wiLCBcIi0td3JpdGVcIiwgXCIuXCJdLCB7XG5cdFx0XHRjd2Q6IHRhcmdldERpcixcblx0XHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHRcdHN0ZGlvOiBcInBpcGVcIixcblx0XHR9KTtcblx0fVxuXG5cdGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgZG9uZS5cXG5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZGV0YWlsID0gKHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgfHwgXCJcIikudHJpbSgpO1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBmYWlsZWQuXFxuXCIpO1xuXHRpZiAoZGV0YWlsKSB7XG5cdFx0Y29uc29sZS5lcnJvcihgICDinJcgQmlvbWU6ICR7ZGV0YWlsLnNsaWNlKDAsIDQwMCl9YCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJmb3JtYXRTY2FmZm9sZGVkRmlsZXMiLCJ0YXJnZXREaXIiLCJwcm9jZXNzIiwic3Rkb3V0Iiwid3JpdGUiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJjd2QiLCJlbmNvZGluZyIsInN0ZGlvIiwiZXJyb3IiLCJjb2RlIiwic3RhdHVzIiwiZGV0YWlsIiwic3RkZXJyIiwibWVzc2FnZSIsInRyaW0iLCJjb25zb2xlIiwic2xpY2UiXSwibWFwcGluZ3MiOiI7Ozs7K0JBTWdCQTs7O2VBQUFBOzs7bUNBTlU7QUFNbkIsU0FBU0Esc0JBQXNCQyxTQUFpQjtJQUN0REMsUUFBUUMsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFFckIsSUFBSUMsU0FBU0MsSUFBQUEsNEJBQVMsRUFBQyxTQUFTO1FBQUM7UUFBUztRQUFXO0tBQUksRUFBRTtRQUMxREMsS0FBS047UUFDTE8sVUFBVTtRQUNWQyxPQUFPO0lBQ1I7SUFFQSxJQUFJSixPQUFPSyxLQUFLLElBQUksQUFBQ0wsT0FBT0ssS0FBSyxDQUEyQkMsSUFBSSxLQUFLLFVBQVU7UUFDOUVOLFNBQVNDLElBQUFBLDRCQUFTLEVBQUMsT0FBTztZQUFDO1lBQVM7WUFBa0I7WUFBUztZQUFXO1NBQUksRUFBRTtZQUMvRUMsS0FBS047WUFDTE8sVUFBVTtZQUNWQyxPQUFPO1FBQ1I7SUFDRDtJQUVBLElBQUlKLE9BQU9PLE1BQU0sS0FBSyxHQUFHO1FBQ3hCVixRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQztRQUNyQjtJQUNEO0lBRUEsTUFBTVMsU0FBUyxBQUFDUixDQUFBQSxPQUFPUyxNQUFNLElBQUlULE9BQU9GLE1BQU0sSUFBSUUsT0FBT0ssS0FBSyxFQUFFSyxXQUFXLEVBQUMsRUFBR0MsSUFBSTtJQUNuRmQsUUFBUUMsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFDckIsSUFBSVMsUUFBUTtRQUNYSSxRQUFRUCxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUVHLE9BQU9LLEtBQUssQ0FBQyxHQUFHLE1BQU07SUFDbkQ7QUFDRCJ9
|
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "FinalizeFeature", {
|
|
|
10
10
|
});
|
|
11
11
|
const _interop = require("@decohere/nexus/interop");
|
|
12
12
|
const _prompt = require("../../domain/prompt.js");
|
|
13
|
+
const _biomeformat = require("./biome-format.js");
|
|
13
14
|
// State resolved during scaffold(), consumed by finalize().
|
|
14
15
|
let _pm = null;
|
|
15
16
|
let _shouldInstall = true;
|
|
@@ -33,6 +34,8 @@ async function scaffold(workspace, options) {
|
|
|
33
34
|
_shouldInstall = answer.toLowerCase() !== "no";
|
|
34
35
|
}
|
|
35
36
|
async function finalize(workspace, _options) {
|
|
37
|
+
// Last scaffold write step: normalize generated sources before install / handoff.
|
|
38
|
+
(0, _biomeformat.formatScaffoldedFiles)(workspace.targetDir);
|
|
36
39
|
if (_shouldInstall) {
|
|
37
40
|
const pm = _pm;
|
|
38
41
|
console.log(`\nScaffolded ${workspace.name}. Installing dependencies...\n`);
|
|
@@ -48,6 +51,8 @@ async function finalize(workspace, _options) {
|
|
|
48
51
|
}
|
|
49
52
|
console.log(" code . # open in VS Code");
|
|
50
53
|
console.log(" # then: Reopen in Container\n");
|
|
54
|
+
// Drop readline's stdin hold so the CLI / container can exit.
|
|
55
|
+
(0, _prompt.closePrompt)();
|
|
51
56
|
}
|
|
52
57
|
const FinalizeFeature = {
|
|
53
58
|
getOptions,
|
|
@@ -55,4 +60,4 @@ const FinalizeFeature = {
|
|
|
55
60
|
finalize
|
|
56
61
|
};
|
|
57
62
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2ssIGNsb3NlUHJvbXB0IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU2NhZmZvbGQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgRmVhdHVyZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRTY2FmZm9sZGVkRmlsZXMgfSBmcm9tIFwiLi9iaW9tZS1mb3JtYXQuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxudHlwZSBGaW5hbGl6ZU9wdGlvbnMgPSB7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8RmluYWxpemVPcHRpb25zPixcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGlmIChjbGlPcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gY2xpT3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEZpbmFsaXplT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiA9PT0gXCIxXCIpIHtcblx0XHRfc2hvdWxkSW5zdGFsbCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRfcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih3b3Jrc3BhY2UudGFyZ2V0RGlyKSA/PyAoYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKSk7XG5cdGlmIChvcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhcIlxcbkluc3RhbGwgZGVwZW5kZW5jaWVzIG5vdz8gW3llcy9ub10gKHllcyk6IFwiLCBcInllc1wiKTtcblx0X3Nob3VsZEluc3RhbGwgPSBhbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gXCJub1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBfb3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIExhc3Qgc2NhZmZvbGQgd3JpdGUgc3RlcDogbm9ybWFsaXplIGdlbmVyYXRlZCBzb3VyY2VzIGJlZm9yZSBpbnN0YWxsIC8gaGFuZG9mZi5cblx0Zm9ybWF0U2NhZmZvbGRlZEZpbGVzKHdvcmtzcGFjZS50YXJnZXREaXIpO1xuXG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtID0gX3BtITtcblx0XHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke3dvcmtzcGFjZS5uYW1lfS4gSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cXG5gKTtcblx0XHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB3b3Jrc3BhY2UudGFyZ2V0RGlyIH0pO1xuXHR9XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhICR7X3Nob3VsZEluc3RhbGwgPyBcIk5leHRcIiA6IFwiVG8gZ2V0IHN0YXJ0ZWQ6XCJ9IHN0ZXBzOlxcbmApO1xuXHRjb25zb2xlLmxvZyhgICBjZCAke3dvcmtzcGFjZS5uYW1lfWApO1xuXHRpZiAoIV9zaG91bGRJbnN0YWxsKSB7XG5cdFx0Y29uc3QgcG1OYW1lID0gX3BtPy5uYW1lID8/IFwicG5wbVwiO1xuXHRcdGNvbnNvbGUubG9nKGAgICR7cG1OYW1lfSBpbnN0YWxsYCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIGNvZGUgLiAgICAgICAgICMgb3BlbiBpbiBWUyBDb2RlXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgICAgICAgICAgICAgICAgIyB0aGVuOiBSZW9wZW4gaW4gQ29udGFpbmVyXFxuXCIpO1xuXG5cdC8vIERyb3AgcmVhZGxpbmUncyBzdGRpbiBob2xkIHNvIHRoZSBDTEkgLyBjb250YWluZXIgY2FuIGV4aXQuXG5cdGNsb3NlUHJvbXB0KCk7XG59XG5cbmV4cG9ydCBjb25zdCBGaW5hbGl6ZUZlYXR1cmU6IEZlYXR1cmUgPSB7IGdldE9wdGlvbnMsIHNjYWZmb2xkLCBmaW5hbGl6ZSB9O1xuIl0sIm5hbWVzIjpbIkZpbmFsaXplRmVhdHVyZSIsIl9wbSIsIl9zaG91bGRJbnN0YWxsIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwib3B0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9CVUlMREVSIiwiZGV0ZWN0UGFja2FnZU1hbmFnZXIiLCJ0YXJnZXREaXIiLCJwcm9tcHRGb3JQYWNrYWdlTWFuYWdlciIsImFuc3dlciIsImFzayIsInRvTG93ZXJDYXNlIiwiZmluYWxpemUiLCJfb3B0aW9ucyIsImZvcm1hdFNjYWZmb2xkZWRGaWxlcyIsInBtIiwiY29uc29sZSIsImxvZyIsIm5hbWUiLCJpbnN0YWxsIiwiY3dkIiwicG1OYW1lIiwiY2xvc2VQcm9tcHQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBa0VhQTs7O2VBQUFBOzs7eUJBakVpRDt3QkFDN0I7NkJBR0s7QUFFdEMsNERBQTREO0FBQzVELElBQUlDLE1BQTZCO0FBQ2pDLElBQUlDLGlCQUFpQjtBQU1yQixlQUFlQyxXQUNkQyxVQUE2QixFQUM3QkMsVUFBb0M7SUFFcEMsSUFBSUEsV0FBV0MsbUJBQW1CLElBQUksTUFBTTtRQUMzQ0osaUJBQWlCRyxXQUFXQyxtQkFBbUIsS0FBSztJQUNyRDtJQUNBLE9BQU8sQ0FBQztBQUNUO0FBRUEsZUFBZUMsU0FDZEMsU0FBNEIsRUFDNUJDLE9BQXdCO0lBRXhCLElBQUlDLFFBQVFDLEdBQUcsQ0FBQ0MsZ0JBQWdCLEtBQUssS0FBSztRQUN6Q1YsaUJBQWlCO1FBQ2pCO0lBQ0Q7SUFDQUQsTUFBTVksSUFBQUEsNkJBQW9CLEVBQUNMLFVBQVVNLFNBQVMsS0FBTSxNQUFNQyxJQUFBQSxnQ0FBdUI7SUFDakYsSUFBSU4sUUFBUUgsbUJBQW1CLElBQUksTUFBTTtRQUN4Q0osaUJBQWlCTyxRQUFRSCxtQkFBbUIsS0FBSztRQUNqRDtJQUNEO0lBRUEsTUFBTVUsU0FBUyxNQUFNQyxJQUFBQSxXQUFHLEVBQUMsZ0RBQWdEO0lBQ3pFZixpQkFBaUJjLE9BQU9FLFdBQVcsT0FBTztBQUMzQztBQUVBLGVBQWVDLFNBQVNYLFNBQTRCLEVBQUVZLFFBQWdCO0lBQ3JFLGtGQUFrRjtJQUNsRkMsSUFBQUEsa0NBQXFCLEVBQUNiLFVBQVVNLFNBQVM7SUFFekMsSUFBSVosZ0JBQWdCO1FBQ25CLE1BQU1vQixLQUFLckI7UUFDWHNCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRWhCLFVBQVVpQixJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDMUUsTUFBTUgsR0FBR0ksT0FBTyxDQUFDO1lBQUVDLEtBQUtuQixVQUFVTSxTQUFTO1FBQUM7SUFDN0M7SUFFQVMsUUFBUUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFdEIsaUJBQWlCLFNBQVMsa0JBQWtCLFNBQVMsQ0FBQztJQUM3RXFCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRWhCLFVBQVVpQixJQUFJLEVBQUU7SUFDcEMsSUFBSSxDQUFDdkIsZ0JBQWdCO1FBQ3BCLE1BQU0wQixTQUFTM0IsS0FBS3dCLFFBQVE7UUFDNUJGLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRUksT0FBTyxRQUFRLENBQUM7SUFDbEM7SUFDQUwsUUFBUUMsR0FBRyxDQUFDO0lBQ1pELFFBQVFDLEdBQUcsQ0FBQztJQUVaLDhEQUE4RDtJQUM5REssSUFBQUEsbUJBQVc7QUFDWjtBQUVPLE1BQU03QixrQkFBMkI7SUFBRUc7SUFBWUk7SUFBVVk7QUFBUyJ9
|