@dbx-tools/appkit-mastra 0.9.161 → 0.9.165
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/telemetry.js +15 -2
- package/package.json +16 -16
- package/src/telemetry.ts +15 -0
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.165";
|
|
7
7
|
export * as agents from "./src/agents.ts";
|
|
8
8
|
export * as chart from "./src/chart.ts";
|
|
9
9
|
export * as chat from "./src/chat.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.165";
|
|
3
3
|
export * as agents from "./src/agents.ts";
|
|
4
4
|
export * as chart from "./src/chart.ts";
|
|
5
5
|
export * as chat from "./src/chat.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.165";
|
|
6
6
|
export * as agents from "./src/agents.js";
|
|
7
7
|
export * as chart from "./src/chart.js";
|
|
8
8
|
export * as chat from "./src/chat.js";
|
|
@@ -72,4 +72,4 @@ export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO
|
|
|
72
72
|
export { invalidFields } from "./src/validation.js";
|
|
73
73
|
export { DEFAULT_DATABRICKS_WORKSPACE_PATHS, databricksWorkspaceConfig, databricksWorkspace, bindDatabricksWorkspaceContext, resolveDatabricksWorkspacePaths, inlineSkillsFromLocalMounts, requestWorkspaceClient } from "./src/workspaces.js";
|
|
74
74
|
export { safeWriteProgress } from "./src/writer.js";
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FB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QUFFOW9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pULE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE2MVwiO1xuZXhwb3J0ICogYXMgYWdlbnRzIGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXJ0IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZXZhbHVhdGlvbiBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2tNb2RlIGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBmb2xsb3dVcFN1Z2dlc3Rpb25zIGZyb20gXCIuL3NyYy9mb2xsb3ctdXAtc3VnZ2VzdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ2hhdCBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0Q29udGV4dCBmcm9tIFwiLi9zcmMvcmVxdWVzdC1jb250ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IHRvb2wsIGNyZWF0ZUFnZW50LCBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfVE9PTF9XT1JLRkxPV19JTlNUUlVDVElPTlMsIENPREVfTU9ERV9ST1VUSU5HX0lOU1RSVUNUSU9OUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMsIGJ1aWxkQWdlbnRzLCBhcHByb3ZhbEdhdGVkVG9vbElkcyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhVG9vbHMsIEFwcEtpdFRvb2xPcHRpb25zLCBUb29sa2l0T3B0aW9ucywgTWFzdHJhUGx1Z2luVG9vbGtpdFByb3ZpZGVyLCBNYXN0cmFQbHVnaW5zLCBNYXN0cmFUb29sc0ZuLCBNYXN0cmFBZ2VudFdvcmtzcGFjZVJlc29sdmVyLCBNYXN0cmFBZ2VudERlZmluaXRpb24sIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhU3RvcmFnZUNvbmZpZ092ZXJyaWRlLCBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSwgQWdlbnREZWZhdWx0TW9kZWwsIEJ1aWx0QWdlbnRzLCBNYXN0cmFPdXRwdXRQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHsgY2hhcnRQbGFuU2NoZW1hLCBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hLCBjaGFydFRvb2xPdXRwdXRTY2hlbWEsIHByZXBhcmVDaGFydCwgZmV0Y2hDaGFydCwgcGxhblRvRWNoYXJ0c09wdGlvbiwgYnVpbGRSZW5kZXJEYXRhVG9vbCB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBhZ2VudEFib3J0U2lnbmFsLCBhZ2VudENoYXRSb3V0ZXMgfSBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQsIGF0dHJpYnV0ZWRVc2VySWQsIHJlc29sdmVVc2VyS2V5LCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWcsIE1hc3RyYUNvZGVNb2RlVHJhbnNwb3J0LCBNYXN0cmFDb2RlTW9kZUNvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgZ2VuaWVDb252ZXJzYXRpb25SZWFkRGVmYXVsdHMsIGdlbmllQ29udmVyc2F0aW9uV3JpdGVEZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHsgY3JlYXRlTWFzdHJhRXZhbERyaXZlciB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IHJlc29sdmVGZWVkYmFja01vZGUgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2stbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBGZWVkYmFja0F2YWlsYWJpbGl0eSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgeyBmaWxlc3lzdGVtcywgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIsIE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtLCBzY3JhdGNoRmlsZXN5c3RlbSB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IEZPTExPV19VUF9VU0VSX1RFWFRfS0VZLCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksIEZPTExPV19VUF9SVU5fSURfS0VZLCByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgc3VnZ2VzdEZvbGxvd1VwcywgYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zUHJvY2Vzc29yLCBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0sIGJ1aWxkU3VnZ2VzdEZvbGxvd1Vwc1Rvb2wgfSBmcm9tIFwiLi9zcmMvZm9sbG93LXVwLXN1Z2dlc3Rpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgU3VnZ2VzdEZvbGxvd1Vwc09wdGlvbnMsIEZvbGxvd1VwU3VnZ2VzdGVyIH0gZnJvbSBcIi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50c1wiO1xuZXhwb3J0IHsgZ2VuaWVBbnN3ZXJUZXh0LCB2aXNpYmxlR2VuaWVRdWVzdGlvbiwgZ2VuaWVNZXNzYWdlVG9VaU1lc3NhZ2VzLCBsaXN0R2VuaWVUaHJlYWRzLCBsaXN0R2VuaWVUaHJlYWRNZXNzYWdlcywgZ2VuaWVDaGF0U3RyZWFtLCBkZWxldGVHZW5pZVRocmVhZCwgZGVsZXRlR2VuaWVUaHJlYWRNZXNzYWdlIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDaGF0U3BhY2UgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9HRU5JRV9BTElBUywgYXNrR2VuaWVUb29sSWQsIEdFTklFX0lOU1RSVUNUSU9OUywgbm9ybWFsaXplR2VuaWVTcGFjZXMsIHJlc29sdmVHZW5pZVNwYWNlcywgYnVpbGRHZW5pZVRvb2xzLCBidWlsZEdlbmllVG9vbGtpdFByb3ZpZGVyLCBjb2xsZWN0U3BhY2VTdWdnZXN0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZVNwYWNlQ29uZmlnLCBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfRU5WLCByZXNvbHZlSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgeyBidWlsZE1jcFNlcnZlciB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRNY3AgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgeyByZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhSZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhTb2Z0U3RvcmFnZUluaXQsIG5lZWRzTGFrZWJhc2UsIGNyZWF0ZU1lbW9yeUJ1aWxkZXIsIGNyZWF0ZU1hc3RyYUxha2ViYXNlUG9vbCwgTWVtb3J5QnVpbGRlciB9IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCB7IEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yLCB1Y1RyYWNlUHJlZml4RnJvbUV4cGVyaW1lbnRUYWdzLCByZXNldFVjVHJhY2VQcmVmaXhDYWNoZSwgbWxmbG93QXNzZXNzbWVudFRyYWNlSWQsIGRpcmVjdE1sZmxvd1RyYWNraW5nVXJpLCBkaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uLCBkaXJlY3RNbGZsb3dUcmFjaW5nQ29uZmlndXJlZCwgYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCwgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbywgaW5pdGlhbGl6ZVJlcXVlc3RNbGZsb3dUcmFjZUluZm8sIHBlcnNpc3RBcHBNbGZsb3dUcmFjZUluZm8sIHJlc2V0QXBwTWxmbG93VHJhY2VJbmZvLCBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZywgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2UsIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlVGFncywgZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSwgZmx1c2hEaXJlY3RNbGZsb3dUcmFjaW5nLCBtbGZsb3dFbmFibGVkLCBtbGZsb3dFeHBlcmltZW50TWFuYWdlclVybCwgbG9nRmVlZGJhY2sgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcE1sZmxvd1RyYWNlSW5mbywgTG9nRmVlZGJhY2tQYXJhbXMgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgeyBSRVNQT05TRVNfUFJPVklERVJfT1BUSU9OUywgc2VydmluZ0FwaSwgcmVzb2x2ZU1vZGVsV29ya3NwYWNlQ2xpZW50LCByZXNvbHZlRGVmYXVsdE1vZGVsSWQsIGJ1aWxkTW9kZWwgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgbW9udHlNYXhQcm9jZXNzZXMsIE1vbnR5U2FuZGJveCB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vbnR5U2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHsgaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQsIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbiwgYnVpbGRPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIi4vc3JjL29ic2VydmFiaWxpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFQbHVnaW4sIG1hc3RyYSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IHN0cmlwU3RhbGVDaGFydHNQcm9jZXNzb3IgfSBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0IHsgQUlUT09MU19TS0lMTFNfTU9VTlQsIFJFTU9URV9TS0lMTFNfTU9VTlQsIEFJVE9PTFNfUkVGUkVTSF9UVExfTVMsIEFJVE9PTFNfU09VUkNFLCBub3JtYWxpemVSZW1vdGVTa2lsbHNPcHRpb24sIHByb3Zpc2lvblJlbW90ZVNraWxscyB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpVG9vbHNTb3VyY2UsIFJlbW90ZVNraWxsU291cmNlT3B0aW9ucywgUmVtb3RlU2tpbGxTb3VyY2UsIFJlbW90ZVNraWxsc09wdGlvbiwgTG9jYWxTa2lsbERpcmVjdG9yeU1vdW50LCBNZW1vcnlTa2lsbE1vdW50LCBMb2NhbFNraWxsTW91bnQsIFByb3Zpc2lvblJlbW90ZVNraWxsc09wdGlvbnMsIFByb3Zpc2lvbmVkUmVtb3RlU2tpbGxzLCBSZW1vdGVTa2lsbENhY2hlRW50cnksIFJlbW90ZVNraWxsc01ldGFkYXRhIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9PUklHSU5fS0VZIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtY29udGV4dC50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc0ZldGNoLCByZWFkUmVzcG9uc2VUZXh0LCByZWFkUmVzcG9uc2VKc29uIH0gZnJvbSBcIi4vc3JjL3Jlc3QudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc0ZldGNoSW5pdCB9IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgeyBjbGVhclRydXN0ZWRSZXF1ZXN0Q29udGV4dCwgcmVxdWVzdE9yaWdpbiwgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXIsIGNyZWF0ZVJlcXVlc3RDb250ZXh0LCBNYXN0cmFTZXJ2ZXIsIGlzTWFzdHJhUmVxdWVzdEFsbG93ZWQsIGF0dGFjaFJvdXRlUGF0Y2hNaWRkbGV3YXJlLCBhdHRhY2hTdGFsZVJlc3VtZVJlY292ZXJ5IH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdHRyaWJ1dGVkSWRlbnRpdHksIE1hc3RyYUFwaUdhdGVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSwgZXh0cmFjdE1vZGVsT3ZlcnJpZGUsIHJlc29sdmVTZXJ2aW5nQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgT1JHQU5JWkFUSU9OX0FTU0lTVEFOVF9QQVRILCBPUkdBTklaQVRJT05fU0tJTExTX1BBVEgsIHBlcnNvbmFsV29ya3NwYWNlUGF0aCwgcGVyc29uYWxTa2lsbHNQYXRoIH0gZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgeyBTVEFURU1FTlRfUk9XX0NBUCwgZmV0Y2hTdGF0ZW1lbnREYXRhLCBmZXRjaFN0YXRlbWVudEVtYmVkRGF0YSB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3RhdGVtZW50RW1iZWREYXRhIH0gZnJvbSBcIi4vc3JjL3N0YXRlbWVudC50c1wiO1xuZXhwb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgVFlQT0dSQVBIWV9SVUxFIH0gZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgeyBUSVRMRV9JTlNUUlVDVElPTlMsIHN1bW1hcnlNb2RlbCwgc3VtbWFyaXplVGV4dCwgYnVpbGRTdW1tYXJpemVUb29sIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdW1tYXJpemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHsgVFJBQ0VfSU9fTElNSVQsIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLCBNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIENIQVRfTUVTU0FHRVNfQVRUUiwgQ0hBVF9SRVNQT05TRV9BVFRSLCBDSEFUX0lERU5USVRZX0FUVFIsIENIQVRfR0VOSUVfVVNFRF9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FUVFIsIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBNTEZMT1dfU0VTU0lPTl9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFLCBzdGFtcEdlbmllVG9vbFNwYW4sIGFjdGl2ZUNoYXRUcmFjaW5nT3B0aW9ucywgcmVjb3JkQWN0aXZlVHJhY2VUYWcsIHJlY29yZEFjdGl2ZVRyYWNlVGFncywgcmVjb3JkQWN0aXZlVHJhY2VNb2RlbCwgcmVjb3JkQWN0aXZlVHJhY2VVc2VyLCByZWNvcmRBY3RpdmVUcmFjZUF1dGgsIHRleHRPbmx5Q2hhdElucHV0LCBhc3Npc3RhbnRUZXh0RnJvbVNzZSwgYXNzaXN0YW50VGV4dEZyb21Kc29uLCBBcHBNbGZsb3dUcmFjZUluZm9TcGFuUHJvY2Vzc29yLCByZWdpc3RlckFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvciwgY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlLCBhdHRhY2hDaGF0VHVyblRlbGVtZXRyeSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zLCBDaGF0VHJhY2VUYWdWYWx1ZSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLCBNTEZMT1dfQUdFTlRfVEFHLCBNTEZMT1dfR0VOSUVfVEFHLCBNTEZMT1dfT0JPX0FVVEhfVEFHLCBNTEZMT1dfU1BfQVVUSF9UQUcsIE1MRkxPV19MT0NBTF9UQUcsIE1MRkxPV19BR0VOVF9UQUdfQVRUUiwgTUxGTE9XX0dFTklFX1RBR19BVFRSLCBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLCBNTEZMT1dfT0JPX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19TUF9BVVRIX1RBR19BVFRSLCBNTEZMT1dfTE9DQUxfVEFHX0FUVFIgfSBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0IHsgaW52YWxpZEZpZWxkcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0RBVEFCUklDS1NfV09SS1NQQUNFX1BBVEhTLCBkYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnLCBkYXRhYnJpY2tzV29ya3NwYWNlLCBiaW5kRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsIHJlc29sdmVEYXRhYnJpY2tzV29ya3NwYWNlUGF0aHMsIGlubGluZVNraWxsc0Zyb21Mb2NhbE1vdW50cywgcmVxdWVzdFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VQYXRoLCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlLCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXIsIERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSwgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiwgRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHsgc2FmZVdyaXRlUHJvZ3Jlc3MgfSBmcm9tIFwiLi9zcmMvd3JpdGVyLnRzXCI7XG4iXX0=
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FB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QUFFOW9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pULE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE2NVwiO1xuZXhwb3J0ICogYXMgYWdlbnRzIGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXJ0IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZXZhbHVhdGlvbiBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2tNb2RlIGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBmb2xsb3dVcFN1Z2dlc3Rpb25zIGZyb20gXCIuL3NyYy9mb2xsb3ctdXAtc3VnZ2VzdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ2hhdCBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0Q29udGV4dCBmcm9tIFwiLi9zcmMvcmVxdWVzdC1jb250ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IHRvb2wsIGNyZWF0ZUFnZW50LCBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfVE9PTF9XT1JLRkxPV19JTlNUUlVDVElPTlMsIENPREVfTU9ERV9ST1VUSU5HX0lOU1RSVUNUSU9OUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMsIGJ1aWxkQWdlbnRzLCBhcHByb3ZhbEdhdGVkVG9vbElkcyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhVG9vbHMsIEFwcEtpdFRvb2xPcHRpb25zLCBUb29sa2l0T3B0aW9ucywgTWFzdHJhUGx1Z2luVG9vbGtpdFByb3ZpZGVyLCBNYXN0cmFQbHVnaW5zLCBNYXN0cmFUb29sc0ZuLCBNYXN0cmFBZ2VudFdvcmtzcGFjZVJlc29sdmVyLCBNYXN0cmFBZ2VudERlZmluaXRpb24sIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhU3RvcmFnZUNvbmZpZ092ZXJyaWRlLCBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSwgQWdlbnREZWZhdWx0TW9kZWwsIEJ1aWx0QWdlbnRzLCBNYXN0cmFPdXRwdXRQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHsgY2hhcnRQbGFuU2NoZW1hLCBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hLCBjaGFydFRvb2xPdXRwdXRTY2hlbWEsIHByZXBhcmVDaGFydCwgZmV0Y2hDaGFydCwgcGxhblRvRWNoYXJ0c09wdGlvbiwgYnVpbGRSZW5kZXJEYXRhVG9vbCB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBhZ2VudEFib3J0U2lnbmFsLCBhZ2VudENoYXRSb3V0ZXMgfSBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQsIGF0dHJpYnV0ZWRVc2VySWQsIHJlc29sdmVVc2VyS2V5LCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWcsIE1hc3RyYUNvZGVNb2RlVHJhbnNwb3J0LCBNYXN0cmFDb2RlTW9kZUNvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgZ2VuaWVDb252ZXJzYXRpb25SZWFkRGVmYXVsdHMsIGdlbmllQ29udmVyc2F0aW9uV3JpdGVEZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHsgY3JlYXRlTWFzdHJhRXZhbERyaXZlciB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IHJlc29sdmVGZWVkYmFja01vZGUgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2stbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBGZWVkYmFja0F2YWlsYWJpbGl0eSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgeyBmaWxlc3lzdGVtcywgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIsIE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtLCBzY3JhdGNoRmlsZXN5c3RlbSB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IEZPTExPV19VUF9VU0VSX1RFWFRfS0VZLCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksIEZPTExPV19VUF9SVU5fSURfS0VZLCByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgc3VnZ2VzdEZvbGxvd1VwcywgYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zUHJvY2Vzc29yLCBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0sIGJ1aWxkU3VnZ2VzdEZvbGxvd1Vwc1Rvb2wgfSBmcm9tIFwiLi9zcmMvZm9sbG93LXVwLXN1Z2dlc3Rpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgU3VnZ2VzdEZvbGxvd1Vwc09wdGlvbnMsIEZvbGxvd1VwU3VnZ2VzdGVyIH0gZnJvbSBcIi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50c1wiO1xuZXhwb3J0IHsgZ2VuaWVBbnN3ZXJUZXh0LCB2aXNpYmxlR2VuaWVRdWVzdGlvbiwgZ2VuaWVNZXNzYWdlVG9VaU1lc3NhZ2VzLCBsaXN0R2VuaWVUaHJlYWRzLCBsaXN0R2VuaWVUaHJlYWRNZXNzYWdlcywgZ2VuaWVDaGF0U3RyZWFtLCBkZWxldGVHZW5pZVRocmVhZCwgZGVsZXRlR2VuaWVUaHJlYWRNZXNzYWdlIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDaGF0U3BhY2UgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9HRU5JRV9BTElBUywgYXNrR2VuaWVUb29sSWQsIEdFTklFX0lOU1RSVUNUSU9OUywgbm9ybWFsaXplR2VuaWVTcGFjZXMsIHJlc29sdmVHZW5pZVNwYWNlcywgYnVpbGRHZW5pZVRvb2xzLCBidWlsZEdlbmllVG9vbGtpdFByb3ZpZGVyLCBjb2xsZWN0U3BhY2VTdWdnZXN0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZVNwYWNlQ29uZmlnLCBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfRU5WLCByZXNvbHZlSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgeyBidWlsZE1jcFNlcnZlciB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRNY3AgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgeyByZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhSZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhTb2Z0U3RvcmFnZUluaXQsIG5lZWRzTGFrZWJhc2UsIGNyZWF0ZU1lbW9yeUJ1aWxkZXIsIGNyZWF0ZU1hc3RyYUxha2ViYXNlUG9vbCwgTWVtb3J5QnVpbGRlciB9IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCB7IEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yLCB1Y1RyYWNlUHJlZml4RnJvbUV4cGVyaW1lbnRUYWdzLCByZXNldFVjVHJhY2VQcmVmaXhDYWNoZSwgbWxmbG93QXNzZXNzbWVudFRyYWNlSWQsIGRpcmVjdE1sZmxvd1RyYWNraW5nVXJpLCBkaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uLCBkaXJlY3RNbGZsb3dUcmFjaW5nQ29uZmlndXJlZCwgYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCwgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbywgaW5pdGlhbGl6ZVJlcXVlc3RNbGZsb3dUcmFjZUluZm8sIHBlcnNpc3RBcHBNbGZsb3dUcmFjZUluZm8sIHJlc2V0QXBwTWxmbG93VHJhY2VJbmZvLCBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZywgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2UsIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlVGFncywgZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSwgZmx1c2hEaXJlY3RNbGZsb3dUcmFjaW5nLCBtbGZsb3dFbmFibGVkLCBtbGZsb3dFeHBlcmltZW50TWFuYWdlclVybCwgbG9nRmVlZGJhY2sgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcE1sZmxvd1RyYWNlSW5mbywgTG9nRmVlZGJhY2tQYXJhbXMgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgeyBSRVNQT05TRVNfUFJPVklERVJfT1BUSU9OUywgc2VydmluZ0FwaSwgcmVzb2x2ZU1vZGVsV29ya3NwYWNlQ2xpZW50LCByZXNvbHZlRGVmYXVsdE1vZGVsSWQsIGJ1aWxkTW9kZWwgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgbW9udHlNYXhQcm9jZXNzZXMsIE1vbnR5U2FuZGJveCB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vbnR5U2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHsgaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQsIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbiwgYnVpbGRPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIi4vc3JjL29ic2VydmFiaWxpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFQbHVnaW4sIG1hc3RyYSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IHN0cmlwU3RhbGVDaGFydHNQcm9jZXNzb3IgfSBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0IHsgQUlUT09MU19TS0lMTFNfTU9VTlQsIFJFTU9URV9TS0lMTFNfTU9VTlQsIEFJVE9PTFNfUkVGUkVTSF9UVExfTVMsIEFJVE9PTFNfU09VUkNFLCBub3JtYWxpemVSZW1vdGVTa2lsbHNPcHRpb24sIHByb3Zpc2lvblJlbW90ZVNraWxscyB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpVG9vbHNTb3VyY2UsIFJlbW90ZVNraWxsU291cmNlT3B0aW9ucywgUmVtb3RlU2tpbGxTb3VyY2UsIFJlbW90ZVNraWxsc09wdGlvbiwgTG9jYWxTa2lsbERpcmVjdG9yeU1vdW50LCBNZW1vcnlTa2lsbE1vdW50LCBMb2NhbFNraWxsTW91bnQsIFByb3Zpc2lvblJlbW90ZVNraWxsc09wdGlvbnMsIFByb3Zpc2lvbmVkUmVtb3RlU2tpbGxzLCBSZW1vdGVTa2lsbENhY2hlRW50cnksIFJlbW90ZVNraWxsc01ldGFkYXRhIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9PUklHSU5fS0VZIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtY29udGV4dC50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc0ZldGNoLCByZWFkUmVzcG9uc2VUZXh0LCByZWFkUmVzcG9uc2VKc29uIH0gZnJvbSBcIi4vc3JjL3Jlc3QudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc0ZldGNoSW5pdCB9IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgeyBjbGVhclRydXN0ZWRSZXF1ZXN0Q29udGV4dCwgcmVxdWVzdE9yaWdpbiwgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXIsIGNyZWF0ZVJlcXVlc3RDb250ZXh0LCBNYXN0cmFTZXJ2ZXIsIGlzTWFzdHJhUmVxdWVzdEFsbG93ZWQsIGF0dGFjaFJvdXRlUGF0Y2hNaWRkbGV3YXJlLCBhdHRhY2hTdGFsZVJlc3VtZVJlY292ZXJ5IH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdHRyaWJ1dGVkSWRlbnRpdHksIE1hc3RyYUFwaUdhdGVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSwgZXh0cmFjdE1vZGVsT3ZlcnJpZGUsIHJlc29sdmVTZXJ2aW5nQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgT1JHQU5JWkFUSU9OX0FTU0lTVEFOVF9QQVRILCBPUkdBTklaQVRJT05fU0tJTExTX1BBVEgsIHBlcnNvbmFsV29ya3NwYWNlUGF0aCwgcGVyc29uYWxTa2lsbHNQYXRoIH0gZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgeyBTVEFURU1FTlRfUk9XX0NBUCwgZmV0Y2hTdGF0ZW1lbnREYXRhLCBmZXRjaFN0YXRlbWVudEVtYmVkRGF0YSB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3RhdGVtZW50RW1iZWREYXRhIH0gZnJvbSBcIi4vc3JjL3N0YXRlbWVudC50c1wiO1xuZXhwb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgVFlQT0dSQVBIWV9SVUxFIH0gZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgeyBUSVRMRV9JTlNUUlVDVElPTlMsIHN1bW1hcnlNb2RlbCwgc3VtbWFyaXplVGV4dCwgYnVpbGRTdW1tYXJpemVUb29sIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdW1tYXJpemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHsgVFJBQ0VfSU9fTElNSVQsIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLCBNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIENIQVRfTUVTU0FHRVNfQVRUUiwgQ0hBVF9SRVNQT05TRV9BVFRSLCBDSEFUX0lERU5USVRZX0FUVFIsIENIQVRfR0VOSUVfVVNFRF9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FUVFIsIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBNTEZMT1dfU0VTU0lPTl9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFLCBzdGFtcEdlbmllVG9vbFNwYW4sIGFjdGl2ZUNoYXRUcmFjaW5nT3B0aW9ucywgcmVjb3JkQWN0aXZlVHJhY2VUYWcsIHJlY29yZEFjdGl2ZVRyYWNlVGFncywgcmVjb3JkQWN0aXZlVHJhY2VNb2RlbCwgcmVjb3JkQWN0aXZlVHJhY2VVc2VyLCByZWNvcmRBY3RpdmVUcmFjZUF1dGgsIHRleHRPbmx5Q2hhdElucHV0LCBhc3Npc3RhbnRUZXh0RnJvbVNzZSwgYXNzaXN0YW50VGV4dEZyb21Kc29uLCBBcHBNbGZsb3dUcmFjZUluZm9TcGFuUHJvY2Vzc29yLCByZWdpc3RlckFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvciwgY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlLCBhdHRhY2hDaGF0VHVyblRlbGVtZXRyeSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zLCBDaGF0VHJhY2VUYWdWYWx1ZSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLCBNTEZMT1dfQUdFTlRfVEFHLCBNTEZMT1dfR0VOSUVfVEFHLCBNTEZMT1dfT0JPX0FVVEhfVEFHLCBNTEZMT1dfU1BfQVVUSF9UQUcsIE1MRkxPV19MT0NBTF9UQUcsIE1MRkxPV19BR0VOVF9UQUdfQVRUUiwgTUxGTE9XX0dFTklFX1RBR19BVFRSLCBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLCBNTEZMT1dfT0JPX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19TUF9BVVRIX1RBR19BVFRSLCBNTEZMT1dfTE9DQUxfVEFHX0FUVFIgfSBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0IHsgaW52YWxpZEZpZWxkcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0RBVEFCUklDS1NfV09SS1NQQUNFX1BBVEhTLCBkYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnLCBkYXRhYnJpY2tzV29ya3NwYWNlLCBiaW5kRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsIHJlc29sdmVEYXRhYnJpY2tzV29ya3NwYWNlUGF0aHMsIGlubGluZVNraWxsc0Zyb21Mb2NhbE1vdW50cywgcmVxdWVzdFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VQYXRoLCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlLCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXIsIERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSwgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiwgRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHsgc2FmZVdyaXRlUHJvZ3Jlc3MgfSBmcm9tIFwiLi9zcmMvd3JpdGVyLnRzXCI7XG4iXX0=
|
package/lib/src/telemetry.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
import { StringDecoder } from "node:string_decoder";
|
|
21
21
|
import { USER_TRACE_ATTRIBUTE, registerNativeSpanProcessor, getRequestTags, } from "@dbx-tools/appkit";
|
|
22
22
|
import { log, isDatabricksAppEnv, parse, isRecord, trimToNull, USER_EMAIL_HEADER, USER_ID_HEADER, } from "@dbx-tools/shared-core";
|
|
23
|
-
import { MLFLOW_TRACE_ID_HEADER, THREAD_ID_HEADER, THREAD_ID_QUERY, } from "@dbx-tools/shared-mastra";
|
|
23
|
+
import { MLFLOW_TRACE_ID_HEADER, MLFLOW_TRACE_PART_TYPE, THREAD_ID_HEADER, THREAD_ID_QUERY, } from "@dbx-tools/shared-mastra";
|
|
24
24
|
import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from "@mastra/core/request-context";
|
|
25
25
|
import { context, createContextKey, SpanKind, SpanStatusCode, trace, } from "@opentelemetry/api";
|
|
26
26
|
import { getRPCMetadata, RPCType } from "@opentelemetry/core";
|
|
@@ -186,6 +186,14 @@ function stampMlflowTraceId(res, traceId) {
|
|
|
186
186
|
return;
|
|
187
187
|
res.setHeader(MLFLOW_TRACE_ID_HEADER, `tr-${traceId}`);
|
|
188
188
|
}
|
|
189
|
+
/** Serialize a transient trace-id part for proxies that remove custom headers. */
|
|
190
|
+
function mlflowTracePart(traceId) {
|
|
191
|
+
return `data: ${JSON.stringify({
|
|
192
|
+
type: MLFLOW_TRACE_PART_TYPE,
|
|
193
|
+
data: { traceId: `tr-${traceId}` },
|
|
194
|
+
transient: true,
|
|
195
|
+
})}\n\n`;
|
|
196
|
+
}
|
|
189
197
|
/** Return one raw prompt when the request is exactly one text-only user message. */
|
|
190
198
|
export function textOnlyChatInput(messages) {
|
|
191
199
|
if (typeof messages === "string")
|
|
@@ -583,6 +591,7 @@ export function chatTurnTelemetryMiddleware(req, res, next, options = {}) {
|
|
|
583
591
|
let genieRecorded = false;
|
|
584
592
|
let ownedSpanEnded = false;
|
|
585
593
|
let traceFinalized = false;
|
|
594
|
+
let tracePartWritten = false;
|
|
586
595
|
const passThroughWrite = res.write.bind(res);
|
|
587
596
|
const passThroughEnd = res.end.bind(res);
|
|
588
597
|
const passThroughJson = res.json.bind(res);
|
|
@@ -647,6 +656,10 @@ export function chatTurnTelemetryMiddleware(req, res, next, options = {}) {
|
|
|
647
656
|
target.span.end();
|
|
648
657
|
};
|
|
649
658
|
res.write = ((chunk, ...rest) => {
|
|
659
|
+
if (!tracePartWritten) {
|
|
660
|
+
tracePartWritten = true;
|
|
661
|
+
passThroughWrite(mlflowTracePart(traceState.traceId));
|
|
662
|
+
}
|
|
650
663
|
collector.write(chunk);
|
|
651
664
|
return passThroughWrite(chunk, ...rest);
|
|
652
665
|
});
|
|
@@ -694,4 +707,4 @@ export function attachChatTurnTelemetry(app, options = {}) {
|
|
|
694
707
|
app.use((req, res, next) => chatTurnTelemetryMiddleware(req, res, next, options));
|
|
695
708
|
logger.info("chat turn telemetry middleware attached", options);
|
|
696
709
|
}
|
|
697
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FDZixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxHQUFHLEVBQ0gsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUYsT0FBTyxFQUNMLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGNBQWMsRUFDZCxLQUFLLEdBR04sTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSTlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QiwyQkFBMkIsR0FDNUIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLG1CQUFt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Q0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztTQUN0QyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQzdCLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxHQUFvQixFQUNwQixVQUFvQyxFQUFFO0lBRXRDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHkgZWFjaCBNYXN0cmEgY2hhdCB0dXJuJ3MgcmVxdWVzdC9yZXNwb25zZSBvbnRvIGl0cyBPVGVsIHJvb3Qgc3BhblxuICogc28gRGF0YWJyaWNrcy1tYW5hZ2VkIE1MZmxvdyBjYW4gZGlzcGxheSB0aGVtLlxuICpcbiAqIFdoeSB0aGlzIGV4aXN0czogTUxmbG93J3MgVUMgYDx0YXJnZXQ+X3RyYWNlX3VuaWZpZWRgIHZpZXcgcGlja3MgdGhlXG4gKiBvbmUgc3BhbiB3aG9zZSBgcGFyZW50X3NwYW5faWRgIGlzIGVtcHR5IGFuZCByZWFkcyByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBmcm9tIGBtbGZsb3cuc3BhbklucHV0c2AgLyBgbWxmbG93LnNwYW5PdXRwdXRzYCAob3IgdGhlIGBnZW5fYWkuKmBcbiAqIGVxdWl2YWxlbnRzKSBvbiBUSEFUIHNwYW4gb25seS4gTWFzdHJhIHJlY29yZHMgdGhlIHR1cm4gb24gaXRzXG4gKiBgaW52b2tlX2FnZW50YCBjaGlsZCB1bmRlciBgbWFzdHJhLmFnZW50X3J1bi5pbnB1dGAgLyBgLm91dHB1dGAsIGtleXNcbiAqIHRoZSB2aWV3IG5ldmVyIHJlYWRzLCBzbyBjaGF0IHRyYWNlcyBhcnJpdmUgd2l0aCBib3RoIGNvbHVtbnMgbnVsbFxuICogZXZlbiB3aGVuIHRoZSBzcGFucyB0aGVtc2VsdmVzIGxvb2sgaGVhbHRoeS5cbiAqXG4gKiBBcHBLaXQncyBIVFRQIGluc3RydW1lbnRhdGlvbiByZWNvcmRzIHRoZSBzZXJ2ZXIgc3BhbiBpbiBPVGVsIFJQQyBtZXRhZGF0YSxcbiAqIHdoaWNoIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gd2hlbiBFeHByZXNzIG1ha2VzIGEgbWlkZGxld2FyZS1sYXllciBjaGlsZFxuICogYWN0aXZlLiBXaGVuIGluc3RydW1lbnRhdGlvbiBpcyB1bmF2YWlsYWJsZSwgdGhpcyBtb2R1bGUgY3JlYXRlcyBvbmVcbiAqIHJlcXVlc3QtbGlmZXRpbWUgc2VydmVyIHNwYW4gYW5kIHJ1bnMgTWFzdHJhIHVuZGVyIGl0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSBcIm5vZGU6c3RyaW5nX2RlY29kZXJcIjtcblxuaW1wb3J0IHtcbiAgVVNFUl9UUkFDRV9BVFRSSUJVVEUsXG4gIHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvcixcbiAgZ2V0UmVxdWVzdFRhZ3MsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgbG9nLFxuICBpc0RhdGFicmlja3NBcHBFbnYsXG4gIHBhcnNlLFxuICBpc1JlY29yZCxcbiAgdHJpbVRvTnVsbCxcbiAgVVNFUl9FTUFJTF9IRUFERVIsXG4gIFVTRVJfSURfSEVBREVSLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTUxGTE9XX1RSQUNFX0lEX0hFQURFUixcbiAgVEhSRUFEX0lEX0hFQURFUixcbiAgVEhSRUFEX0lEX1FVRVJZLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5pbXBvcnQgdHlwZSB7IFRyYWNpbmdPcHRpb25zIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9vYnNlcnZhYmlsaXR5XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICBjb250ZXh0LFxuICBjcmVhdGVDb250ZXh0S2V5LFxuICBTcGFuS2luZCxcbiAgU3BhblN0YXR1c0NvZGUsXG4gIHRyYWNlLFxuICB0eXBlIENvbnRleHQsXG4gIHR5cGUgU3Bhbixcbn0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgZ2V0UlBDTWV0YWRhdGEsIFJQQ1R5cGUgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZVNwYW4sIFNwYW4gYXMgU2RrU3BhbiwgU3BhblByb2Nlc3NvciB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQgeyBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCxcbiAgZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSxcbiAgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbyxcbiAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyxcbiAgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2UsXG4gIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlVGFncyxcbn0gZnJvbSBcIi4vbWxmbG93LnRzXCI7XG5pbXBvcnQge1xuICBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLFxuICBNTEZMT1dfQUdFTlRfVEFHLFxuICBNTEZMT1dfQUdFTlRfVEFHX0FUVFIsXG4gIE1MRkxPV19HRU5JRV9UQUcsXG4gIE1MRkxPV19HRU5JRV9UQUdfQVRUUixcbiAgTUxGTE9XX0xPQ0FMX1RBRyxcbiAgTUxGTE9XX09CT19BVVRIX1RBRyxcbiAgTUxGTE9XX1NQX0FVVEhfVEFHLFxuICBNTEZMT1dfVFJBQ0VfVEFHX1BSRUZJWCxcbn0gZnJvbSBcIi4vdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL3RlbGVtZXRyeVwiKTtcblxuLyoqIENhcCBvbiBlYWNoIHBheWxvYWQgY29waWVkIG9udG8gYSBzcGFuLCBzbyBvbmUgdHVybiBjYW5ub3QgYmxvYXQgdGhlIGV4cG9ydC4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9JT19MSU1JVCA9IDhfMDAwO1xuXG4vKiogQm91bmQgZm9yIGEgbm9uLXN0cmVhbWluZyBib2R5IGNhcHR1cmVkIHRocm91Z2ggYHJlcy5lbmRgIGluc3RlYWQgb2YgYHJlcy5qc29uYC4gKi9cbmNvbnN0IFJFU1BPTlNFX0JPRFlfTElNSVQgPSBUUkFDRV9JT19MSU1JVCAqIDQ7XG5cbi8qKiBUcmFjZXIgc2NvcGUgdXNlZCBvbmx5IHdoZW4gQXBwS2l0IGRpZCBub3QgY3JlYXRlIGEgcmVjb3JkaW5nIEhUVFAgc3Bhbi4gKi9cbmNvbnN0IENIQVRfVFVSTl9UUkFDRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIE1hc3RyYSBhZ2VudCBpbnZva2UgcGF0aHMgdGhhdCBjYXJyeSBhIGNoYXQgdHVybiBib2R5XG4gKiAoYG1lc3NhZ2VzYCkgYW5kIHN0cmVhbSBhbiBhc3Npc3RhbnQgYW5zd2VyLiBSZXN1bWUgLyBhcHByb3ZlIHZlcmJzXG4gKiBhcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZDogdGhlaXIgYm9kaWVzIGFyZSB0b29sIGRlY2lzaW9ucywgbm90IHRoZVxuICogdXNlciBwcm9tcHQsIGFuZCB0aGV5IHJhcmVseSBwcm9kdWNlIGEgZnJlc2ggYW5zd2VyIHdvcnRoIHN1cmZhY2luZy5cbiAqL1xuY29uc3QgQUdFTlRfVFVSTl9ST1VURSA9IC8oPzpefFxcLykoPzphZ2VudHNcXC9bXi9dK1xcLyg/OnN0cmVhbXxnZW5lcmF0ZSl8Y2hhdFxcL1teL10rKVxcLz8kL2k7XG5cbi8qKiBBdHRyaWJ1dGUga2V5cyB0aGUgTUxmbG93IFVDIGAqX3RyYWNlX3VuaWZpZWRgIHZpZXcgcmVhZHMgZnJvbSB0aGUgcm9vdCBzcGFuLiAqL1xuZXhwb3J0IGNvbnN0IE1MRkxPV19TUEFOX0lOUFVUU19BVFRSID0gXCJtbGZsb3cuc3BhbklucHV0c1wiO1xuLyoqIFJvb3Qtc3BhbiBhdHRyaWJ1dGUgY29uc3VtZWQgYXMgY2hhdCBvdXRwdXQgYnkgTUxmbG93IHVuaWZpZWQgdHJhY2Ugdmlld3MuICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSID0gXCJtbGZsb3cuc3Bhbk91dHB1dHNcIjtcbi8qKiBGdWxsIHNlcmlhbGl6ZWQgcmVxdWVzdCBtZXNzYWdlcyByZXRhaW5lZCB3aGVuIHRoZSBNTGZsb3cgcHJldmlldyBpcyBwbGFpbiB0ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IENIQVRfTUVTU0FHRVNfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5jaGF0Lm1lc3NhZ2VzXCI7XG4vKiogRnVsbCBzZXJpYWxpemVkIHJlc3BvbnNlIHJldGFpbmVkIHdoZW4gdGhlIE1MZmxvdyBwcmV2aWV3IGlzIHBsYWluIHRleHQuICovXG5leHBvcnQgY29uc3QgQ0hBVF9SRVNQT05TRV9BVFRSID0gXCJhcHBraXQubWFzdHJhLmNoYXQucmVzcG9uc2VcIjtcbi8qKiBDcmVkZW50aWFsIG1vZGUgdXNlZCBieSBEYXRhYnJpY2tzIGNhbGxzIGluIHRoaXMgY2hhdCB0dXJuLiAqL1xuZXhwb3J0IGNvbnN0IENIQVRfSURFTlRJVFlfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5pZGVudGl0eS5tb2RlXCI7XG4vKiogV2hldGhlciB0aGUgc3RyZWFtZWQgdHVybiBlbWl0dGVkIGEgR2VuaWUgdG9vbCBvciBwcm9ncmVzcyBldmVudC4gKi9cbmV4cG9ydCBjb25zdCBDSEFUX0dFTklFX1VTRURfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5nZW5pZS51c2VkXCI7XG4vKipcbiAqIE1MZmxvdyBzcGFuLXR5cGUgYXR0cmlidXRlLiBEYXRhYnJpY2tzIG1hcHMgdGhpcyAob3IgYGdlbl9haS5vcGVyYXRpb24ubmFtZWApXG4gKiBvbnRvIHRoZSB0eXBlIGNoaXAgaW4gdGhlIGV4cGVyaW1lbnQgVUkuIEN1c3RvbSB2YWx1ZXMgc3VjaCBhcyBgR0VOSUVgIGFyZVxuICogYWxsb3dlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1MRkxPV19TUEFOX1RZUEVfQVRUUiA9IFwibWxmbG93LnNwYW5UeXBlXCI7XG4vKiogR2VuQUkgc2VtYW50aWMtY29udmVudGlvbiBvcGVyYXRpb24gbmFtZSwgYW4gYWx0ZXJuYXRlIHNwYW4tdHlwZSBzb3VyY2UuICovXG5leHBvcnQgY29uc3QgR0VOX0FJX09QRVJBVElPTl9OQU1FX0FUVFIgPSBcImdlbl9haS5vcGVyYXRpb24ubmFtZVwiO1xuLyoqIFJvb3Qtc3BhbiBzZXNzaW9uIGlkIHRoYXQgZW5hYmxlcyB0aGUgTUxmbG93IFNlc3Npb25zIHRhYi4gKi9cbmV4cG9ydCBjb25zdCBNTEZMT1dfU0VTU0lPTl9BVFRSID0gXCJzZXNzaW9uLmlkXCI7XG4vKiogUm9vdC1zcGFuIHR5cGUgZm9yIGEgTWFzdHJhIGFnZW50IHR1cm4uICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fVFlQRV9BR0VOVCA9IFwiQUdFTlRcIjtcbi8qKiBTcGFuIHR5cGUgZm9yIGFuIGBhc2tfZ2VuaWVgIHRvb2wgY2FsbC4gKi9cbmV4cG9ydCBjb25zdCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFID0gXCJHRU5JRVwiO1xuXG4vKiogUm9vdC1zcGFuIG1ldGFkYXRhIGtub3duIGJlZm9yZSBhIGNoYXQgcmVxdWVzdCBpcyBkaXNwYXRjaGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0VHVyblRlbGVtZXRyeU9wdGlvbnMge1xuICByZWFkb25seSBpZGVudGl0eT86XG4gICAgXCJvYm9cIiB8IFwic2VydmljZS1wcmluY2lwYWxcIiB8ICgocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0KSA9PiBcIm9ib1wiIHwgXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcbiAgLyoqIEluaXRpYWwgdHJhY2UgdGFncyBkZXJpdmVkIGZyb20gdGhlIGluYm91bmQgcmVxdWVzdC4gKi9cbiAgcmVhZG9ubHkgdGFncz86XG4gICAgfCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDaGF0VHJhY2VUYWdWYWx1ZSB8IHVuZGVmaW5lZD4+XG4gICAgfCAoKHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCkgPT4gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgQ2hhdFRyYWNlVGFnVmFsdWUgfCB1bmRlZmluZWQ+Pik7XG59XG5cbmludGVyZmFjZSBUcmFjZVRhcmdldCB7XG4gIHNwYW46IFNwYW47XG4gIG93bmVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQ2hhdFRyYWNlU3RhdGUge1xuICByZWFkb25seSB0YWdzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSB0cmFjZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFNwYW5JZD86IHN0cmluZztcbiAgZmlyc3RNb2RlbD86IHN0cmluZztcbiAgdXNlcj86IHN0cmluZztcbn1cblxuLyoqIFZhbHVlcyBhY2NlcHRlZCBieSByZXF1ZXN0LXNjb3BlZCB0cmFjZS10YWcgaW5qZWN0aW9uIGhlbHBlcnMuICovXG5leHBvcnQgdHlwZSBDaGF0VHJhY2VUYWdWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbmNvbnN0IENIQVRfVFJBQ0VfU1RBVEVfS0VZID0gY3JlYXRlQ29udGV4dEtleShcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYS9jaGF0LXRyYWNlLXN0YXRlXCIpO1xuXG4vKiogT3BlblRlbGVtZXRyeSdzIHNlbnRpbmVsIGZvciBcIm5vIHZhbGlkIHRyYWNlXCIgLSAzMiB6ZXJvIGhleCBjaGFycy4gKi9cbmNvbnN0IElOVkFMSURfVFJBQ0VfSUQgPSBcIjBcIi5yZXBlYXQoMzIpO1xuXG4vKipcbiAqIE1hcmsgdGhlIGFjdGl2ZSBzcGFuIGFzIGEgR2VuaWUgY2FsbCBzbyB0aGUgZXhwZXJpbWVudCBVSSB0eXBlcyBpdCBgR0VOSUVgXG4gKiBhbmQgdGFncyB0aGUgdHJhY2UgYGdlbmllPXRydWVgLiBTYWZlIG5vLW9wIHdoZW4gbm8gcmVjb3JkaW5nIHNwYW4gaXMgYWN0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbXBHZW5pZVRvb2xTcGFuKHNwYW46IFNwYW4gfCB1bmRlZmluZWQgPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCkpOiB2b2lkIHtcbiAgaWYgKCFzcGFuPy5pc1JlY29yZGluZygpKSByZXR1cm47XG4gIHNwYW4uc2V0QXR0cmlidXRlKE1MRkxPV19TUEFOX1RZUEVfQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9HRU5JRSk7XG4gIHNwYW4uc2V0QXR0cmlidXRlKEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBcImV4ZWN1dGVfdG9vbFwiKTtcbiAgc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX0dFTklFX1RBR19BVFRSLCBcInRydWVcIik7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIZWFkZXIocmVxOiBleHByZXNzLlJlcXVlc3QsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZyb21NZXRob2QgPSB0eXBlb2YgcmVxLmhlYWRlciA9PT0gXCJmdW5jdGlvblwiID8gdHJpbVRvTnVsbChyZXEuaGVhZGVyKG5hbWUpKSA6IHVuZGVmaW5lZDtcbiAgaWYgKGZyb21NZXRob2QpIHJldHVybiBmcm9tTWV0aG9kO1xuICBjb25zdCByYXcgPSByZXEuaGVhZGVycz8uW25hbWUudG9Mb3dlckNhc2UoKV07XG4gIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3WzBdIDogcmF3O1xuICByZXR1cm4gdHJpbVRvTnVsbCh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHVuZGVmaW5lZCkgPz8gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UXVlcnkocmVxOiBleHByZXNzLlJlcXVlc3QsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IHJlcS5xdWVyeT8uW25hbWVdO1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbiAgcmV0dXJuIHRyaW1Ub051bGwodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB1bmRlZmluZWQpID8/IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RhbXBNbGZsb3dBY3RvcihzcGFuOiBTcGFuLCByZXE6IGV4cHJlc3MuUmVxdWVzdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0SGVhZGVyKHJlcSwgVVNFUl9FTUFJTF9IRUFERVIpID8/IHJlcXVlc3RIZWFkZXIocmVxLCBVU0VSX0lEX0hFQURFUik7XG4gIGlmICh1c2VyKSBzcGFuLnNldEF0dHJpYnV0ZShVU0VSX1RSQUNFX0FUVFJJQlVURSwgdXNlcik7XG4gIGNvbnN0IHNlc3Npb24gPSByZXF1ZXN0SGVhZGVyKHJlcSwgVEhSRUFEX0lEX0hFQURFUikgPz8gcmVxdWVzdFF1ZXJ5KHJlcSwgVEhSRUFEX0lEX1FVRVJZKTtcbiAgaWYgKHNlc3Npb24pIHNwYW4uc2V0QXR0cmlidXRlKE1MRkxPV19TRVNTSU9OX0FUVFIsIHNlc3Npb24pO1xuICByZXR1cm4gdXNlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2VJZChzcGFuOiBTcGFuIHwgdW5kZWZpbmVkID0gdHJhY2UuZ2V0QWN0aXZlU3BhbigpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFsdWUgPSBzcGFuPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZSAhPT0gSU5WQUxJRF9UUkFDRV9JRCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpOiBDaGF0VHJhY2VTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb250ZXh0LmFjdGl2ZSgpLmdldFZhbHVlKENIQVRfVFJBQ0VfU1RBVEVfS0VZKSBhcyBDaGF0VHJhY2VTdGF0ZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCaW5kIGEgTWFzdHJhIGFnZW50IHJ1biB0byB0aGUgdHJhY2Ugc2VsZWN0ZWQgYnkgY2hhdCB0ZWxlbWV0cnkuXG4gKlxuICogRGF0YWJyaWNrcyBBcHBzIHVzZXMgYSBkZWRpY2F0ZWQgYWdlbnQgdHJhY2UgYmVjYXVzZSBldmVudGVkIGFnZW50cyBmaW5pc2hcbiAqIGJlZm9yZSB0aGUgSFRUUCBzZXJ2ZXIgc3Bhbi4gUHJvbW90aW5nIE1MZmxvdyB0cmFjZSBpbmZvIGFmdGVyIHRoZSBhZ2VudCByb290XG4gKiBjbG9zZXMgYXZvaWRzIHRoZSBzaWRlY2FyIHJlcGxhY2luZyBjbGVhbiBwcmV2aWV3cyBhbmQgdGFncyB3aXRoIGVtcHR5IEhUVFBcbiAqIHRyYWNlIG1ldGFkYXRhLiBPdGhlciBydW50aW1lcyByZXRhaW4gdGhlIGV4aXN0aW5nIEhUVFAvbG9jYWwgcGFyZW50YWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWN0aXZlQ2hhdFRyYWNpbmdPcHRpb25zKFxuICBvcHRpb25zOiBUcmFjaW5nT3B0aW9ucyB8IHVuZGVmaW5lZCxcbik6IFRyYWNpbmdPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhdGUgPSBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpO1xuICBpZiAoIXN0YXRlKSByZXR1cm4gb3B0aW9ucztcbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHRyYWNlSWQ6IHN0YXRlLnRyYWNlSWQsXG4gICAgLi4uKHN0YXRlLnBhcmVudFNwYW5JZCA/IHsgcGFyZW50U3BhbklkOiBzdGF0ZS5wYXJlbnRTcGFuSWQgfSA6IHsgcGFyZW50U3BhbklkOiB1bmRlZmluZWQgfSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNldENoYXRUcmFjZVRhZyhzdGF0ZTogQ2hhdFRyYWNlU3RhdGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IENoYXRUcmFjZVRhZ1ZhbHVlKTogdm9pZCB7XG4gIGNvbnN0IHRhZyA9IHRyaW1Ub051bGwobmFtZSk7XG4gIGlmICghdGFnKSByZXR1cm47XG4gIHN0YXRlLnRhZ3Muc2V0KHRhZywgU3RyaW5nKHZhbHVlKSk7XG59XG5cbi8qKiBJbmplY3Qgb25lIE1MZmxvdyB0cmFjZSB0YWcgaW50byB0aGUgYWN0aXZlIGNoYXQgcmVxdWVzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRBY3RpdmVUcmFjZVRhZyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBDaGF0VHJhY2VUYWdWYWx1ZSA9IHRydWUpOiB2b2lkIHtcbiAgY29uc3Qgc3RhdGUgPSBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpO1xuICBpZiAoc3RhdGUpIHNldENoYXRUcmFjZVRhZyhzdGF0ZSwgbmFtZSwgdmFsdWUpO1xufVxuXG4vKiogSW5qZWN0IG11bHRpcGxlIE1MZmxvdyB0cmFjZSB0YWdzIGludG8gdGhlIGFjdGl2ZSBjaGF0IHJlcXVlc3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VUYWdzKFxuICB0YWdzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDaGF0VHJhY2VUYWdWYWx1ZSB8IHVuZGVmaW5lZD4+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2V0Q2hhdFRyYWNlVGFnKHN0YXRlLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqIFJlY29yZCB0aGUgZmlyc3Qgc2VsZWN0ZWQgbW9kZWwgYXMgdGhlIGFjdGl2ZSBjaGF0IHRyYWNlJ3MgYGFnZW50YCB0YWcuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VNb2RlbChtb2RlbElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgdmFsdWUgPSB0cmltVG9OdWxsKG1vZGVsSWQpO1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5maXJzdE1vZGVsKSByZXR1cm47XG4gIHN0YXRlLmZpcnN0TW9kZWwgPSB2YWx1ZTtcbiAgc2V0Q2hhdFRyYWNlVGFnKHN0YXRlLCBNTEZMT1dfQUdFTlRfVEFHLCB2YWx1ZSk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCk7XG4gIGlmIChzcGFuPy5pc1JlY29yZGluZygpKSBzcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfQUdFTlRfVEFHX0FUVFIsIHZhbHVlKTtcbiAgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2VUYWdzKHsgW01MRkxPV19BR0VOVF9UQUddOiB2YWx1ZSB9KTtcbn1cblxuLyoqIFJlY29yZCB0aGUgYmVzdCByZXNvbHZlZCB1c2VyIGlkZW50aWZpZXIgb24gdGhlIGFjdGl2ZSBjaGF0IHRyYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZEFjdGl2ZVRyYWNlVXNlcih1c2VyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgY29uc3QgdmFsdWUgPSB0cmltVG9OdWxsKHVzZXIpO1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKHN0YXRlKSBzdGF0ZS51c2VyID0gdmFsdWU7XG59XG5cbi8qKiBSZWNvcmQgb25lIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gbW9kZSB1c2VkIGR1cmluZyB0aGUgYWN0aXZlIGNoYXQgdHJhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VBdXRoKGF1dGg6IFwib2JvXCIgfCBcInNlcnZpY2UtcHJpbmNpcGFsXCIpOiB2b2lkIHtcbiAgcmVjb3JkQWN0aXZlVHJhY2VUYWcoYXV0aCA9PT0gXCJvYm9cIiA/IE1MRkxPV19PQk9fQVVUSF9UQUcgOiBNTEZMT1dfU1BfQVVUSF9UQUcpO1xufVxuXG4vKiogUHVibGlzaCB0aGUgdHVybidzIE1MZmxvdyB0cmFjZSBpZCBiZWZvcmUgdGhlIGhhbmRsZXIgd3JpdGVzIHRoZSBib2R5LiAqL1xuZnVuY3Rpb24gc3RhbXBNbGZsb3dUcmFjZUlkKHJlczogZXhwcmVzcy5SZXNwb25zZSwgdHJhY2VJZDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcbiAgaWYgKCF0cmFjZUlkIHx8IHRyYWNlSWQgPT09IElOVkFMSURfVFJBQ0VfSUQpIHJldHVybjtcbiAgcmVzLnNldEhlYWRlcihNTEZMT1dfVFJBQ0VfSURfSEVBREVSLCBgdHItJHt0cmFjZUlkfWApO1xufVxuXG4vKiogUmV0dXJuIG9uZSByYXcgcHJvbXB0IHdoZW4gdGhlIHJlcXVlc3QgaXMgZXhhY3RseSBvbmUgdGV4dC1vbmx5IHVzZXIgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0T25seUNoYXRJbnB1dChtZXNzYWdlczogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZXMgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXNzYWdlcyB8fCB1bmRlZmluZWQ7XG4gIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlcykgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSAxKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbMF07XG4gIGlmICghaXNSZWNvcmQobWVzc2FnZSkgfHwgbWVzc2FnZS5yb2xlICE9PSBcInVzZXJcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXNzYWdlLmNvbnRlbnQgfHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdGV4dEZyb21QYXJ0cyhtZXNzYWdlLnBhcnRzKSA/PyB0ZXh0RnJvbVBhcnRzKG1lc3NhZ2UuY29udGVudCk7XG59XG5cbmZ1bmN0aW9uIHRleHRGcm9tUGFydHModmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHZhbHVlKSB7XG4gICAgaWYgKCFpc1JlY29yZChwYXJ0KSB8fCBwYXJ0LnR5cGUgIT09IFwidGV4dFwiIHx8IHR5cGVvZiBwYXJ0LnRleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRleHQucHVzaChwYXJ0LnRleHQpO1xuICB9XG4gIGNvbnN0IGpvaW5lZCA9IHRleHQuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZCB8fCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZWQodmFsdWU6IHVua25vd24sIGxpbWl0ID0gVFJBQ0VfSU9fTElNSVQpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpPy5zbGljZSgwLCBsaW1pdCkgPz8gU3RyaW5nKHZhbHVlKS5zbGljZSgwLCBsaW1pdCk7XG59XG5cbmZ1bmN0aW9uIHNzZUZyYW1lKGxpbmU6IHN0cmluZyk6IHVua25vd24ge1xuICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcImRhdGE6XCIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gcGFyc2UobGluZS5zbGljZSg1KSk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlVXNlc0dlbmllKHZhbHVlOiB1bmtub3duLCBkZXB0aCA9IDApOiBib29sZWFuIHtcbiAgaWYgKGRlcHRoID4gMykgcmV0dXJuIGZhbHNlO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5zb21lKChpdGVtKSA9PiB2YWx1ZVVzZXNHZW5pZShpdGVtLCBkZXB0aCArIDEpKTtcbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKFxuICAgIHZhbHVlLnR5cGUgPT09IFwiZGF0YS1nZW5pZS1wcm9ncmVzc1wiIHx8XG4gICAgdmFsdWUudHlwZSA9PT0gXCJhc2tfZ2VuaWVfZG9uZVwiIHx8XG4gICAgdmFsdWUudG9vbE5hbWUgPT09IFwiYXNrX2dlbmllXCIgfHxcbiAgICB2YWx1ZS50b29sX25hbWUgPT09IFwiYXNrX2dlbmllXCIgfHxcbiAgICB2YWx1ZS5uYW1lID09PSBcImFza19nZW5pZVwiXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBbXCJkYXRhXCIsIFwiZXZlbnRcIiwgXCJwYXlsb2FkXCJdLnNvbWUoKGtleSkgPT4gdmFsdWVVc2VzR2VuaWUodmFsdWVba2V5XSwgZGVwdGggKyAxKSk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFzc2lzdGFudCB0ZXh0IGZyb20gb25lIFNTRSBsaW5lLCBvciBhbiBlbXB0eSBzdHJpbmcuICovXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFzc2lzdGFudFRleHRGcm9tU3NlRnJhbWUoc3NlRnJhbWUobGluZSkpO1xufVxuXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUZyYW1lKGZyYW1lOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCFpc1JlY29yZChmcmFtZSkgfHwgZnJhbWUudHlwZSAhPT0gXCJ0ZXh0LWRlbHRhXCIpIHJldHVybiBcIlwiO1xuICBjb25zdCB0ZXh0ID1cbiAgICB0eXBlb2YgZnJhbWUuZGVsdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZnJhbWUuZGVsdGFcbiAgICAgIDogaXNSZWNvcmQoZnJhbWUucGF5bG9hZClcbiAgICAgICAgPyBmcmFtZS5wYXlsb2FkLnRleHRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiA/IHRleHQgOiBcIlwiO1xufVxuXG4vKipcbiAqIENvbmNhdGVuYXRlIHRoZSBhc3Npc3RhbnQncyBhbnN3ZXIgb3V0IG9mIGFuIEFJIFNESyBTU0UgdHJhbnNjcmlwdC5cbiAqXG4gKiBUaGUgYWdlbnQgc3RyZWFtcyBpdHMgcmVwbHkgYXMgYHRleHQtZGVsdGFgIGZyYW1lc1xuICogKGBkYXRhOiB7XCJ0eXBlXCI6XCJ0ZXh0LWRlbHRhXCIsXCJwYXlsb2FkXCI6e1widGV4dFwiOlwiLi4uXCJ9fWApLCBzbyB0aGUgZnVsbFxuICogYW5zd2VyIG9ubHkgZXZlciBleGlzdHMgYXMgZGVsdGFzIG9uIHRoZSB3aXJlIGFuZCBoYXMgdG8gYmVcbiAqIHJlYXNzZW1ibGVkIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGJvZHkuc3BsaXQoXCJcXG5cIikpIHtcbiAgICBjb25zdCB0ZXh0ID0gYXNzaXN0YW50VGV4dEZyb21Tc2VMaW5lKGxpbmUpO1xuICAgIGlmICh0ZXh0KSBwYXJ0cy5wdXNoKHRleHQpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpLnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKTtcbn1cblxuLyoqIFJlYWQgdGhlIGZpbmFsIGFzc2lzdGFudCB0ZXh0IGZyb20gYSBub24tc3RyZWFtaW5nIE1hc3RyYSByZXNwb25zZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbUpzb24oYm9keTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghaXNSZWNvcmQoYm9keSkgfHwgdHlwZW9mIGJvZHkudGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBib2R5LnRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG5jb25zdCBNQVNUUkFfQUdFTlRfSU5QVVRfQVRUUiA9IFwibWFzdHJhLmFnZW50X3J1bi5pbnB1dFwiO1xuY29uc3QgTUFTVFJBX0FHRU5UX09VVFBVVF9BVFRSID0gXCJtYXN0cmEuYWdlbnRfcnVuLm91dHB1dFwiO1xuY29uc3QgR0VOX0FJX1JFUVVFU1RfTU9ERUxfQVRUUiA9IFwiZ2VuX2FpLnJlcXVlc3QubW9kZWxcIjtcbmNvbnN0IEdFTl9BSV9BR0VOVF9JRF9BVFRSID0gXCJnZW5fYWkuYWdlbnQuaWRcIjtcbmNvbnN0IEdFTl9BSV9BR0VOVF9OQU1FX0FUVFIgPSBcImdlbl9haS5hZ2VudC5uYW1lXCI7XG5jb25zdCBNQVNUUkFfTU9ERUxfTUVUQURBVEFfQVRUUiA9IFwibWFzdHJhLm1ldGFkYXRhLm1vZGVsTWV0YWRhdGFcIjtcbmNvbnN0IE1BU1RSQV9NRVRBREFUQV9QUkVGSVggPSBcIm1hc3RyYS5tZXRhZGF0YS5cIjtcblxuaW50ZXJmYWNlIEFwcE1sZmxvd1RyYWNlU3RhdGUge1xuICByZWFkb25seSB0YWdzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBnZW5pZTogYm9vbGVhbjtcbiAgbW9kZWw/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZVN0cmluZyhzcGFuOiBSZWFkYWJsZVNwYW4sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gc3Bhbi5hdHRyaWJ1dGVzW25hbWVdO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gKHRyaW1Ub051bGwodmFsdWUpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1ldGFkYXRhQXR0cmlidXRlKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke01BU1RSQV9NRVRBREFUQV9QUkVGSVh9JHtrZXl9YDtcbn1cblxuZnVuY3Rpb24gbW9kZWxGcm9tU3BhbihzcGFuOiBSZWFkYWJsZVNwYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkaXJlY3QgPSBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgR0VOX0FJX1JFUVVFU1RfTU9ERUxfQVRUUik7XG4gIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Q7XG4gIGNvbnN0IG1ldGFkYXRhID0gcGFyc2UoYXR0cmlidXRlU3RyaW5nKHNwYW4sIE1BU1RSQV9NT0RFTF9NRVRBREFUQV9BVFRSKSk7XG4gIHJldHVybiBpc1JlY29yZChtZXRhZGF0YSkgJiYgdHlwZW9mIG1ldGFkYXRhLm1vZGVsSWQgPT09IFwic3RyaW5nXCJcbiAgICA/ICh0cmltVG9OdWxsKG1ldGFkYXRhLm1vZGVsSWQpID8/IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3BhblVzZXNHZW5pZShzcGFuOiBSZWFkYWJsZVNwYW4pOiBib29sZWFuIHtcbiAgaWYgKHNwYW4uYXR0cmlidXRlc1tNTEZMT1dfR0VOSUVfVEFHX0FUVFJdID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gIGlmICgvXFxiYXNrX2dlbmllKD86X3xcXGIpL2kudGVzdChzcGFuLm5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIFtcImdlbl9haS50b29sLm5hbWVcIiwgXCJtYXN0cmEudG9vbF9jYWxsLm5hbWVcIl0uc29tZSgobmFtZSkgPT5cbiAgICAvXmFza19nZW5pZSg/Ol98JCkvaS50ZXN0KGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBuYW1lKSA/PyBcIlwiKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFRyYWNlVGFncyhzcGFuOiBSZWFkYWJsZVNwYW4sIHN0YXRlOiBBcHBNbGZsb3dUcmFjZVN0YXRlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzcGFuLmF0dHJpYnV0ZXMpKSB7XG4gICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoTUxGTE9XX1RSQUNFX1RBR19QUkVGSVgpKSBjb250aW51ZTtcbiAgICBjb25zdCB0YWcgPSBuYW1lLnNsaWNlKE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLmxlbmd0aCk7XG4gICAgaWYgKFxuICAgICAgdGFnICYmXG4gICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKVxuICAgICkge1xuICAgICAgc3RhdGUudGFncy5zZXQodGFnLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaHJUaW1lTWlsbGlzZWNvbmRzKHZhbHVlOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlWzBdICogMV8wMDAgKyB2YWx1ZVsxXSAvIDFfMDAwXzAwMDtcbn1cblxuZnVuY3Rpb24gcHJldmlld0lucHV0KHNwYW46IFJlYWRhYmxlU3Bhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBNQVNUUkFfQUdFTlRfSU5QVVRfQVRUUik7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKHRleHRPbmx5Q2hhdElucHV0KHBhcnNlKHJhdykpID8/IHJhdykuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG5mdW5jdGlvbiBwcmV2aWV3T3V0cHV0KHNwYW46IFJlYWRhYmxlU3Bhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBNQVNUUkFfQUdFTlRfT1VUUFVUX0FUVFIpO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UocmF3KTtcbiAgY29uc3QgdGV4dCA9IGFzc2lzdGFudFRleHRGcm9tSnNvbihwYXJzZWQpIHx8ICh0eXBlb2YgcGFyc2VkID09PSBcInN0cmluZ1wiID8gcGFyc2VkIDogcmF3KTtcbiAgcmV0dXJuIHRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogUHJvbW90ZSB0aGUgYWN0dWFsIE1hc3RyYSBgaW52b2tlX2FnZW50YCB0cmFjZSBleHBvcnRlZCBieSBBcHBLaXQncyBwcm92aWRlci4gKi9cbmV4cG9ydCBjbGFzcyBBcHBNbGZsb3dUcmFjZUluZm9TcGFuUHJvY2Vzc29yIGltcGxlbWVudHMgU3BhblByb2Nlc3NvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2VzID0gbmV3IE1hcDxzdHJpbmcsIEFwcE1sZmxvd1RyYWNlU3RhdGU+KCk7XG5cbiAgb25TdGFydChzcGFuOiBTZGtTcGFuLCBfcGFyZW50Q29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHRyYWNlSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBpZiAoIXRoaXMudHJhY2VzLmhhcyh0cmFjZUlkKSkge1xuICAgICAgdGhpcy50cmFjZXMuc2V0KHRyYWNlSWQsIHsgdGFnczogbmV3IE1hcCgpLCBnZW5pZTogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25FbmQoc3BhbjogUmVhZGFibGVTcGFuKTogdm9pZCB7XG4gICAgY29uc3QgdHJhY2VJZCA9IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkO1xuICAgIGNvbnN0IHN0YXRlOiBBcHBNbGZsb3dUcmFjZVN0YXRlID0gdGhpcy50cmFjZXMuZ2V0KHRyYWNlSWQpID8/IHtcbiAgICAgIHRhZ3M6IG5ldyBNYXAoKSxcbiAgICAgIGdlbmllOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMudHJhY2VzLnNldCh0cmFjZUlkLCBzdGF0ZSk7XG4gICAgY29sbGVjdFRyYWNlVGFncyhzcGFuLCBzdGF0ZSk7XG4gICAgc3RhdGUubW9kZWwgPz89IG1vZGVsRnJvbVNwYW4oc3Bhbik7XG4gICAgc3RhdGUuZ2VuaWUgfHw9IHNwYW5Vc2VzR2VuaWUoc3Bhbik7XG5cbiAgICBpZiAoYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSKSAhPT0gXCJpbnZva2VfYWdlbnRcIikge1xuICAgICAgaWYgKCFzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWQpIHRoaXMudHJhY2VzLmRlbGV0ZSh0cmFjZUlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudCA9XG4gICAgICBzdGF0ZS5tb2RlbCA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9BR0VOVF9JRF9BVFRSKSA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9BR0VOVF9OQU1FX0FUVFIpO1xuICAgIGlmIChhZ2VudCkgc3RhdGUudGFncy5zZXQoTUxGTE9XX0FHRU5UX1RBRywgYWdlbnQpO1xuICAgIGlmIChzdGF0ZS5nZW5pZSkgc3RhdGUudGFncy5zZXQoTUxGTE9XX0dFTklFX1RBRywgXCJ0cnVlXCIpO1xuICAgIGNvbnN0IGF1dGggPSBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgbWV0YWRhdGFBdHRyaWJ1dGUoTUFTVFJBX0FVVEhfTU9ERV9LRVkpKTtcbiAgICBpZiAoYXV0aCA9PT0gXCJvYm9cIikgc3RhdGUudGFncy5zZXQoTUxGTE9XX09CT19BVVRIX1RBRywgXCJ0cnVlXCIpO1xuICAgIGVsc2UgaWYgKGF1dGggPT09IFwic2VydmljZS1wcmluY2lwYWxcIikgc3RhdGUudGFncy5zZXQoTUxGTE9XX1NQX0FVVEhfVEFHLCBcInRydWVcIik7XG5cbiAgICBjb25zdCB1c2VyID1cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfVVNFUl9FTUFJTF9LRVkpKSA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIG1ldGFkYXRhQXR0cmlidXRlKE1BU1RSQV9VU0VSX05BTUVfS0VZKSkgPz9cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfUkVTT1VSQ0VfSURfS0VZKSk7XG4gICAgY29uc3Qgc2Vzc2lvbklkID1cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfVEhSRUFEX0lEX0tFWSkpID8/XG4gICAgICBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgXCJnZW5fYWkuY29udmVyc2F0aW9uLmlkXCIpO1xuICAgIGNvbnN0IHJlcXVlc3RQcmV2aWV3ID0gcHJldmlld0lucHV0KHNwYW4pO1xuICAgIGNvbnN0IHJlc3BvbnNlUHJldmlldyA9IHByZXZpZXdPdXRwdXQoc3Bhbik7XG4gICAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyh7XG4gICAgICB0cmFjZUlkLFxuICAgICAgcmVxdWVzdFRpbWU6IGhyVGltZU1pbGxpc2Vjb25kcyhzcGFuLnN0YXJ0VGltZSksXG4gICAgICBleGVjdXRpb25EdXJhdGlvbjogaHJUaW1lTWlsbGlzZWNvbmRzKHNwYW4uZHVyYXRpb24pLFxuICAgICAgZXJyb3I6IHNwYW4uc3RhdHVzLmNvZGUgPT09IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgdGFnczogT2JqZWN0LmZyb21FbnRyaWVzKHN0YXRlLnRhZ3MpLFxuICAgICAgLi4uKHVzZXIgPyB7IHVzZXIgfSA6IHt9KSxcbiAgICAgIC4uLihzZXNzaW9uSWQgPyB7IHNlc3Npb25JZCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3RQcmV2aWV3ID8geyByZXF1ZXN0UHJldmlldyB9IDoge30pLFxuICAgICAgLi4uKHJlc3BvbnNlUHJldmlldyA/IHsgcmVzcG9uc2VQcmV2aWV3IH0gOiB7fSksXG4gICAgfSk7XG4gICAgdGhpcy50cmFjZXMuZGVsZXRlKHRyYWNlSWQpO1xuICB9XG5cbiAgYXN5bmMgZm9yY2VGbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50cmFjZXMuY2xlYXIoKTtcbiAgfVxufVxuXG5sZXQgYXBwTWxmbG93VHJhY2VJbmZvUHJvY2Vzc29yUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG4vKiogUmVnaXN0ZXIgdHJhY2UgZW5yaWNobWVudCBiZWZvcmUgQXBwS2l0IGNvbnN0cnVjdHMgaXRzIG5hdGl2ZSBwcm92aWRlci4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvcigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvclJlZ2lzdGVyZWQpIHJldHVybiB0cnVlO1xuICBpZiAoIWFwcE1sZmxvd1RyYWNlSW5mb0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBhd2FpdCBpbml0aWFsaXplQXBwTWxmbG93VHJhY2VJbmZvKCk7XG4gIGF3YWl0IHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvcihuZXcgQXBwTWxmbG93VHJhY2VJbmZvU3BhblByb2Nlc3NvcigpKTtcbiAgYXBwTWxmbG93VHJhY2VJbmZvUHJvY2Vzc29yUmVnaXN0ZXJlZCA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogSW5jcmVtZW50YWxseSBhc3NlbWJsZSBVVEYtOCBTU0UgdGV4dCB3aGlsZSByZXRhaW5pbmcgYSBib3VuZGVkIEpTT04gZmFsbGJhY2suICovXG5jbGFzcyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFwidXRmOFwiKTtcbiAgcHJpdmF0ZSBhbnN3ZXIgPSBcIlwiO1xuICBwcml2YXRlIGJvZHkgPSBcIlwiO1xuICBwcml2YXRlIHBlbmRpbmdMaW5lID0gXCJcIjtcbiAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIGdlbmllID0gZmFsc2U7XG5cbiAgd3JpdGUoY2h1bms6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZShjaHVuayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoXG4gICAgICAgIHRoaXMuZGVjb2Rlci53cml0ZShCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZmluaXNoKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmluaXNoZWQpIHJldHVybiB0aGlzLmFuc3dlciB8fCB0aGlzLmpzb25BbnN3ZXIoKTtcbiAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbnN1bWUodGhpcy5kZWNvZGVyLmVuZCgpKTtcbiAgICB0aGlzLmNvbnN1bWVTc2VMaW5lKHRoaXMucGVuZGluZ0xpbmUpO1xuICAgIHRoaXMucGVuZGluZ0xpbmUgPSBcIlwiO1xuICAgIHJldHVybiB0aGlzLmFuc3dlciB8fCB0aGlzLmpzb25BbnN3ZXIoKTtcbiAgfVxuXG4gIHJhd0JvZHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5LnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKTtcbiAgfVxuXG4gIHVzZWRHZW5pZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZW5pZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5ib2R5Lmxlbmd0aCA8IFJFU1BPTlNFX0JPRFlfTElNSVQpIHtcbiAgICAgIHRoaXMuYm9keSArPSB0ZXh0LnNsaWNlKDAsIFJFU1BPTlNFX0JPRFlfTElNSVQgLSB0aGlzLmJvZHkubGVuZ3RoKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nTGluZSArPSB0ZXh0O1xuICAgIGxldCBuZXdsaW5lID0gdGhpcy5wZW5kaW5nTGluZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgIHdoaWxlIChuZXdsaW5lID49IDApIHtcbiAgICAgIHRoaXMuY29uc3VtZVNzZUxpbmUodGhpcy5wZW5kaW5nTGluZS5zbGljZSgwLCBuZXdsaW5lKS5yZXBsYWNlKC9cXHIkLywgXCJcIikpO1xuICAgICAgdGhpcy5wZW5kaW5nTGluZSA9IHRoaXMucGVuZGluZ0xpbmUuc2xpY2UobmV3bGluZSArIDEpO1xuICAgICAgbmV3bGluZSA9IHRoaXMucGVuZGluZ0xpbmUuaW5kZXhPZihcIlxcblwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVuZGluZ0xpbmUubGVuZ3RoID4gUkVTUE9OU0VfQk9EWV9MSU1JVCkge1xuICAgICAgdGhpcy5wZW5kaW5nTGluZSA9IHRoaXMucGVuZGluZ0xpbmUuc2xpY2UoLVJFU1BPTlNFX0JPRFlfTElNSVQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVNzZUxpbmUobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWUgPSBzc2VGcmFtZShsaW5lKTtcbiAgICB0aGlzLmdlbmllIHx8PSB2YWx1ZVVzZXNHZW5pZShmcmFtZSk7XG4gICAgaWYgKHRoaXMuYW5zd2VyLmxlbmd0aCA+PSBUUkFDRV9JT19MSU1JVCkgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSBhc3Npc3RhbnRUZXh0RnJvbVNzZUZyYW1lKGZyYW1lKTtcbiAgICB0aGlzLmFuc3dlciArPSB0ZXh0LnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUIC0gdGhpcy5hbnN3ZXIubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUganNvbkFuc3dlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBhc3Npc3RhbnRUZXh0RnJvbUpzb24ocGFyc2UodGhpcy5ib2R5KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWxlY3QgdGhlIHNwYW4gTUxmbG93IHRyZWF0cyBhcyB0aGUgcmVxdWVzdCByb290LlxuICpcbiAqIE9UZWwgSFRUUCBpbnN0cnVtZW50YXRpb24gc3RvcmVzIGl0cyBzZXJ2ZXIgc3BhbiBpbiBSUEMgbWV0YWRhdGEuIFRoYXQgc3BhblxuICogd2lucyBvdmVyIGFuIGFjdGl2ZSBFeHByZXNzIGNoaWxkLiBJZiBubyByZWNvcmRpbmcgbG9jYWwgc3BhbiBleGlzdHMsIGNyZWF0ZVxuICogb25lIHVuZGVyIHRoZSBjdXJyZW50IGNvbnRleHQgc28gZW5hYmxlZCBXM0MgcHJvcGFnYXRpb24gcmVtYWlucyBpbnRhY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUcmFjZVRhcmdldCgpOiBUcmFjZVRhcmdldCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBpZiAoZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSgpKSB7XG4gICAgY29uc3Qgc3BhbiA9IHRyYWNlLmdldFRyYWNlcihDSEFUX1RVUk5fVFJBQ0VSKS5zdGFydFNwYW4oXG4gICAgICBcIm1hc3RyYS5jaGF0X3R1cm5cIixcbiAgICAgIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgW0FQUEtJVF9BR0VOVF9UUkFDRV9ST09UX0FUVFJdOiB0cnVlLFxuICAgICAgICAgIFtNTEZMT1dfU1BBTl9UWVBFX0FUVFJdOiBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULFxuICAgICAgICAgIFtHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUl06IFwiaW52b2tlX2FnZW50XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJhY2UuZGVsZXRlU3BhbihhY3RpdmVDb250ZXh0KSxcbiAgICApO1xuICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IHJwYyA9IGdldFJQQ01ldGFkYXRhKGFjdGl2ZUNvbnRleHQpO1xuICBpZiAocnBjPy50eXBlID09PSBSUENUeXBlLkhUVFAgJiYgcnBjLnNwYW4uaXNSZWNvcmRpbmcoKSkge1xuICAgIHJldHVybiB7IHNwYW46IHJwYy5zcGFuLCBvd25lZDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZSA9IHRyYWNlLmdldEFjdGl2ZVNwYW4oKTtcbiAgaWYgKGFjdGl2ZT8uaXNSZWNvcmRpbmcoKSkgcmV0dXJuIHsgc3BhbjogYWN0aXZlLCBvd25lZDogZmFsc2UgfTtcblxuICBjb25zdCBzcGFuID0gdHJhY2UuZ2V0VHJhY2VyKENIQVRfVFVSTl9UUkFDRVIpLnN0YXJ0U3BhbihcbiAgICBcIm1hc3RyYS5jaGF0X3R1cm5cIixcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5TRVJWRVIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFtBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSXTogdHJ1ZSxcbiAgICAgICAgW01MRkxPV19TUEFOX1RZUEVfQVRUUl06IE1MRkxPV19TUEFOX1RZUEVfQUdFTlQsXG4gICAgICAgIFtHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUl06IFwiaW52b2tlX2FnZW50XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYWN0aXZlQ29udGV4dCxcbiAgKTtcbiAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICBzcGFuLmVuZCgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmUgdGhhdCBzdGFtcHMgY2hhdCB0dXJuIEkvTyBvbnRvIHRoZSBleHBvcnRlZCBPVGVsIHJvb3QuXG4gKlxuICogVGVlIGByZXMud3JpdGVgLCBgcmVzLmpzb25gLCBhbmQgYHJlcy5lbmRgIGluc3RlYWQgb2YgbGlzdGVuaW5nIGZvciBgZmluaXNoYDpcbiAqIEhUVFAgaW5zdHJ1bWVudGF0aW9uIGVuZHMgaXRzIHNlcnZlciBzcGFuIG9uIGZpbmlzaCwgYW5kIGF0dHJpYnV0ZXMgc2V0XG4gKiBhZnRlciBhIHNwYW4gZW5kcyBuZXZlciByZWFjaCB0aGUgZXhwb3J0ZXIuXG4gKlxuICogYHBhdGhgIGlzIG1vdW50LXJlbGF0aXZlICh3aGF0IHRoZSBNYXN0cmEgc3ViLWFwcCBzZWVzKSwgZS5nLlxuICogYC9hZ2VudHMvc3VwcG9ydC9zdHJlYW1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlKFxuICByZXE6IGV4cHJlc3MuUmVxdWVzdCxcbiAgcmVzOiBleHByZXNzLlJlc3BvbnNlLFxuICBuZXh0OiBleHByZXNzLk5leHRGdW5jdGlvbixcbiAgb3B0aW9uczogQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcS5tZXRob2QgIT09IFwiUE9TVFwiIHx8ICFBR0VOVF9UVVJOX1JPVVRFLnRlc3QocmVxLnBhdGgpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSByZXNvbHZlVHJhY2VUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRhcmdldFRyYWNlSWQgPSB0cmFjZUlkKHRhcmdldC5zcGFuKTtcbiAgaWYgKCF0YXJnZXRUcmFjZUlkKSB7XG4gICAgaWYgKHRhcmdldC5vd25lZCkgdGFyZ2V0LnNwYW4uZW5kKCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0cmFjZVN0YXRlOiBDaGF0VHJhY2VTdGF0ZSA9IHtcbiAgICB0YWdzOiBuZXcgTWFwKCksXG4gICAgdHJhY2VJZDogdGFyZ2V0VHJhY2VJZCxcbiAgICBwYXJlbnRTcGFuSWQ6IHRhcmdldC5zcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICB9O1xuICBjb25zdCB0cmFjZVJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgaWYgKCFpc0RhdGFicmlja3NBcHBFbnYoKSkge1xuICAgIHNldENoYXRUcmFjZVRhZyh0cmFjZVN0YXRlLCBNTEZMT1dfTE9DQUxfVEFHLCB0cnVlKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZ2V0UmVxdWVzdFRhZ3MocmVxKSkpIHtcbiAgICBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgbmFtZSwgdmFsdWUpO1xuICB9XG4gIGNvbnN0IGluaXRpYWxUYWdzID0gdHlwZW9mIG9wdGlvbnMudGFncyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy50YWdzKHJlcSkgOiBvcHRpb25zLnRhZ3M7XG4gIGlmIChpbml0aWFsVGFncykge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVGFncykpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBzdGFtcE1sZmxvd1RyYWNlSWQocmVzLCB0cmFjZVN0YXRlLnRyYWNlSWQpO1xuICB0cmFjZVN0YXRlLnVzZXIgPSBzdGFtcE1sZmxvd0FjdG9yKHRhcmdldC5zcGFuLCByZXEpO1xuICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX1NQQU5fVFlQRV9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5UKTtcbiAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBcImludm9rZV9hZ2VudFwiKTtcbiAgY29uc3QgaWRlbnRpdHkgPVxuICAgIHR5cGVvZiBvcHRpb25zLmlkZW50aXR5ID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmlkZW50aXR5KHJlcSkgOiBvcHRpb25zLmlkZW50aXR5O1xuICBpZiAoaWRlbnRpdHkpIHtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9JREVOVElUWV9BVFRSLCBpZGVudGl0eSk7XG4gICAgc2V0Q2hhdFRyYWNlVGFnKFxuICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgIGlkZW50aXR5ID09PSBcIm9ib1wiID8gTUxGTE9XX09CT19BVVRIX1RBRyA6IE1MRkxPV19TUF9BVVRIX1RBRyxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9HRU5JRV9VU0VEX0FUVFIsIGZhbHNlKTtcblxuICBjb25zdCBtZXNzYWdlcyA9IChyZXEuYm9keSBhcyB7IG1lc3NhZ2VzPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ubWVzc2FnZXM7XG4gIGxldCByZXF1ZXN0UHJldmlldzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAobWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZ1bGxJbnB1dCA9IHNlcmlhbGl6ZWQobWVzc2FnZXMpO1xuICAgIHJlcXVlc3RQcmV2aWV3ID0gdGV4dE9ubHlDaGF0SW5wdXQobWVzc2FnZXMpID8/IGZ1bGxJbnB1dDtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9NRVNTQUdFU19BVFRSLCBmdWxsSW5wdXQpO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgcmVxdWVzdFByZXZpZXcuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgfVxuXG4gIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvcigpO1xuICBsZXQgcmVzcG9uc2VQcmV2aWV3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBvdXRwdXRSZWNvcmRlZCA9IGZhbHNlO1xuICBsZXQgZnVsbE91dHB1dFJlY29yZGVkID0gZmFsc2U7XG4gIGxldCBnZW5pZVJlY29yZGVkID0gZmFsc2U7XG4gIGxldCBvd25lZFNwYW5FbmRlZCA9IGZhbHNlO1xuICBsZXQgdHJhY2VGaW5hbGl6ZWQgPSBmYWxzZTtcbiAgY29uc3QgcGFzc1Rocm91Z2hXcml0ZSA9IHJlcy53cml0ZS5iaW5kKHJlcykgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYm9vbGVhbjtcbiAgY29uc3QgcGFzc1Rocm91Z2hFbmQgPSByZXMuZW5kLmJpbmQocmVzKSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICBjb25zdCBwYXNzVGhyb3VnaEpzb24gPSByZXMuanNvbi5iaW5kKHJlcykgYXMgKGJvZHk/OiB1bmtub3duKSA9PiBleHByZXNzLlJlc3BvbnNlO1xuICBjb25zdCByZWNvcmRPdXRwdXQgPSAoYW5zd2VyOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpZiAob3V0cHV0UmVjb3JkZWQgfHwgIWFuc3dlcikgcmV0dXJuO1xuICAgIHJlc3BvbnNlUHJldmlldyA9IGFuc3dlcjtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBhbnN3ZXIuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgICBvdXRwdXRSZWNvcmRlZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IHJlY29yZEZ1bGxPdXRwdXQgPSAocmVzcG9uc2U6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmIChmdWxsT3V0cHV0UmVjb3JkZWQgfHwgIXJlc3BvbnNlKSByZXR1cm47XG4gICAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKENIQVRfUkVTUE9OU0VfQVRUUiwgcmVzcG9uc2Uuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgICBmdWxsT3V0cHV0UmVjb3JkZWQgPSB0cnVlO1xuICB9O1xuICBjb25zdCByZWNvcmRHZW5pZSA9ICh1c2VkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgaWYgKCF1c2VkIHx8IGdlbmllUmVjb3JkZWQpIHJldHVybjtcbiAgICBnZW5pZVJlY29yZGVkID0gdHJ1ZTtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9HRU5JRV9VU0VEX0FUVFIsIHRydWUpO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfR0VOSUVfVEFHX0FUVFIsIFwidHJ1ZVwiKTtcbiAgICBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgTUxGTE9XX0dFTklFX1RBRywgdHJ1ZSk7XG4gICAgY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdGFyZ2V0LnNwYW4pLCAoKSA9PiB7XG4gICAgICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZVRhZ3MoeyBbTUxGTE9XX0dFTklFX1RBR106IFwidHJ1ZVwiIH0pO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBmaW5hbGl6ZVRyYWNlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0cmFjZUZpbmFsaXplZCkgcmV0dXJuO1xuICAgIHRyYWNlRmluYWxpemVkID0gdHJ1ZTtcbiAgICBjb25zdCB0YWdzID0gT2JqZWN0LmZyb21FbnRyaWVzKHRyYWNlU3RhdGUudGFncyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRyYWNlU3RhdGUudGFncykge1xuICAgICAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKGAke01MRkxPV19UUkFDRV9UQUdfUFJFRklYfSR7bmFtZX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0cmFjZVN0YXRlLnVzZXIpIHtcbiAgICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShVU0VSX1RSQUNFX0FUVFJJQlVURSwgdHJhY2VTdGF0ZS51c2VyKTtcbiAgICB9XG4gICAgY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdGFyZ2V0LnNwYW4pLCAoKSA9PiB7XG4gICAgICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZSh7XG4gICAgICAgIC4uLihPYmplY3Qua2V5cyh0YWdzKS5sZW5ndGggPiAwID8geyB0YWdzIH0gOiB7fSksXG4gICAgICAgIC4uLih0cmFjZVN0YXRlLnVzZXIgPyB7IHVzZXI6IHRyYWNlU3RhdGUudXNlciB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFpc0RhdGFicmlja3NBcHBFbnYoKSkge1xuICAgICAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyh7XG4gICAgICAgIHRyYWNlSWQ6IHRyYWNlU3RhdGUudHJhY2VJZCxcbiAgICAgICAgcmVxdWVzdFRpbWU6IHRyYWNlUmVxdWVzdFRpbWUsXG4gICAgICAgIGV4ZWN1dGlvbkR1cmF0aW9uOiBEYXRlLm5vdygpIC0gdHJhY2VSZXF1ZXN0VGltZSxcbiAgICAgICAgZXJyb3I6IHJlcy5zdGF0dXNDb2RlID49IDUwMCxcbiAgICAgICAgdGFncyxcbiAgICAgICAgLi4uKHRyYWNlU3RhdGUudXNlciA/IHsgdXNlcjogdHJhY2VTdGF0ZS51c2VyIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0UHJldmlldyA/IHsgcmVxdWVzdFByZXZpZXcgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlc3BvbnNlUHJldmlldyA/IHsgcmVzcG9uc2VQcmV2aWV3IH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGVuZE93bmVkU3BhbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRhcmdldC5vd25lZCB8fCBvd25lZFNwYW5FbmRlZCkgcmV0dXJuO1xuICAgIG93bmVkU3BhbkVuZGVkID0gdHJ1ZTtcbiAgICB0YXJnZXQuc3Bhbi5lbmQoKTtcbiAgfTtcblxuICByZXMud3JpdGUgPSAoKGNodW5rOiB1bmtub3duLCAuLi5yZXN0OiB1bmtub3duW10pID0+IHtcbiAgICBjb2xsZWN0b3Iud3JpdGUoY2h1bmspO1xuICAgIHJldHVybiBwYXNzVGhyb3VnaFdyaXRlKGNodW5rLCAuLi5yZXN0KTtcbiAgfSkgYXMgdHlwZW9mIHJlcy53cml0ZTtcblxuICByZXMuanNvbiA9ICgoYm9keT86IHVua25vd24pID0+IHtcbiAgICByZWNvcmRGdWxsT3V0cHV0KHNlcmlhbGl6ZWQoYm9keSkpO1xuICAgIHJlY29yZEdlbmllKHZhbHVlVXNlc0dlbmllKGJvZHkpKTtcbiAgICByZWNvcmRPdXRwdXQoYXNzaXN0YW50VGV4dEZyb21Kc29uKGJvZHkpKTtcbiAgICByZXR1cm4gcGFzc1Rocm91Z2hKc29uKGJvZHkpO1xuICB9KSBhcyB0eXBlb2YgcmVzLmpzb247XG5cbiAgcmVzLmVuZCA9ICgoY2h1bms/OiB1bmtub3duLCAuLi5yZXN0OiB1bmtub3duW10pID0+IHtcbiAgICBjb2xsZWN0b3Iud3JpdGUoY2h1bmspO1xuICAgIHJlY29yZE91dHB1dChjb2xsZWN0b3IuZmluaXNoKCkpO1xuICAgIHJlY29yZEZ1bGxPdXRwdXQoY29sbGVjdG9yLnJhd0JvZHkoKSk7XG4gICAgcmVjb3JkR2VuaWUoY29sbGVjdG9yLnVzZWRHZW5pZSgpKTtcbiAgICBmaW5hbGl6ZVRyYWNlKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXNzVGhyb3VnaEVuZChjaHVuaywgLi4ucmVzdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuZE93bmVkU3BhbigpO1xuICAgIH1cbiAgfSkgYXMgdHlwZW9mIHJlcy5lbmQ7XG5cbiAgcmVzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgcmVjb3JkRnVsbE91dHB1dChjb2xsZWN0b3IucmF3Qm9keSgpKTtcbiAgICByZWNvcmRHZW5pZShjb2xsZWN0b3IudXNlZEdlbmllKCkpO1xuICAgIGZpbmFsaXplVHJhY2UoKTtcbiAgICBlbmRPd25lZFNwYW4oKTtcbiAgfSk7XG5cbiAgY29uc3QgY2hhdENvbnRleHQgPSB0cmFjZVxuICAgIC5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHRhcmdldC5zcGFuKVxuICAgIC5zZXRWYWx1ZShDSEFUX1RSQUNFX1NUQVRFX0tFWSwgdHJhY2VTdGF0ZSk7XG4gIGNvbnRleHQud2l0aChjaGF0Q29udGV4dCwgKCkgPT4ge1xuICAgIG5leHQoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zdGFsbCB7QGxpbmsgY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlfSBvbiBhIE1hc3RyYSBFeHByZXNzIHN1Yi1hcHAuXG4gKlxuICogQ2FsbCBiZWZvcmUgYE1hc3RyYVNlcnZlci5pbml0KClgIHNvIHRoZSBsYXllciBzaXRzIGFoZWFkIG9mIHRoZSBhZ2VudFxuICogcm91dGVzLiBTYWZlIHRvIGNhbGwgdW5jb25kaXRpb25hbGx5OiB3aGVuIG5vIHJlY29yZGluZyB0cmFjZXIgaXMgcmVnaXN0ZXJlZCxcbiAqIHRoZSBtaWRkbGV3YXJlIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hDaGF0VHVyblRlbGVtZXRyeShcbiAgYXBwOiBleHByZXNzLkV4cHJlc3MsXG4gIG9wdGlvbnM6IENoYXRUdXJuVGVsZW1ldHJ5T3B0aW9ucyA9IHt9LFxuKTogdm9pZCB7XG4gIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiBjaGF0VHVyblRlbGVtZXRyeU1pZGRsZXdhcmUocmVxLCByZXMsIG5leHQsIG9wdGlvbnMpKTtcbiAgbG9nZ2VyLmluZm8oXCJjaGF0IHR1cm4gdGVsZW1ldHJ5IG1pZGRsZXdhcmUgYXR0YWNoZWRcIiwgb3B0aW9ucyk7XG59XG4iXX0=
|
|
710
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FDZixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxHQUFHLEVBQ0gsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVGLE9BQU8sRUFDTCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixjQUFjLEVBQ2QsS0FBSyxHQUdOLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUk5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEcsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEdBQzVCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGdCQUFn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LElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7Z0JBQVMsQ0FBQztZQUNULFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDLENBQW1CLENBQUM7SUFFckIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0QyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkMsYUFBYSxFQUFFLENBQUM7UUFDaEIsWUFBWSxFQUFFLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxLQUFLO1NBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztTQUN0QyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQzdCLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxHQUFvQixFQUNwQixVQUFvQyxFQUFFO0lBRXRDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHkgZWFjaCBNYXN0cmEgY2hhdCB0dXJuJ3MgcmVxdWVzdC9yZXNwb25zZSBvbnRvIGl0cyBPVGVsIHJvb3Qgc3BhblxuICogc28gRGF0YWJyaWNrcy1tYW5hZ2VkIE1MZmxvdyBjYW4gZGlzcGxheSB0aGVtLlxuICpcbiAqIFdoeSB0aGlzIGV4aXN0czogTUxmbG93J3MgVUMgYDx0YXJnZXQ+X3RyYWNlX3VuaWZpZWRgIHZpZXcgcGlja3MgdGhlXG4gKiBvbmUgc3BhbiB3aG9zZSBgcGFyZW50X3NwYW5faWRgIGlzIGVtcHR5IGFuZCByZWFkcyByZXF1ZXN0L3Jlc3BvbnNlXG4gKiBmcm9tIGBtbGZsb3cuc3BhbklucHV0c2AgLyBgbWxmbG93LnNwYW5PdXRwdXRzYCAob3IgdGhlIGBnZW5fYWkuKmBcbiAqIGVxdWl2YWxlbnRzKSBvbiBUSEFUIHNwYW4gb25seS4gTWFzdHJhIHJlY29yZHMgdGhlIHR1cm4gb24gaXRzXG4gKiBgaW52b2tlX2FnZW50YCBjaGlsZCB1bmRlciBgbWFzdHJhLmFnZW50X3J1bi5pbnB1dGAgLyBgLm91dHB1dGAsIGtleXNcbiAqIHRoZSB2aWV3IG5ldmVyIHJlYWRzLCBzbyBjaGF0IHRyYWNlcyBhcnJpdmUgd2l0aCBib3RoIGNvbHVtbnMgbnVsbFxuICogZXZlbiB3aGVuIHRoZSBzcGFucyB0aGVtc2VsdmVzIGxvb2sgaGVhbHRoeS5cbiAqXG4gKiBBcHBLaXQncyBIVFRQIGluc3RydW1lbnRhdGlvbiByZWNvcmRzIHRoZSBzZXJ2ZXIgc3BhbiBpbiBPVGVsIFJQQyBtZXRhZGF0YSxcbiAqIHdoaWNoIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gd2hlbiBFeHByZXNzIG1ha2VzIGEgbWlkZGxld2FyZS1sYXllciBjaGlsZFxuICogYWN0aXZlLiBXaGVuIGluc3RydW1lbnRhdGlvbiBpcyB1bmF2YWlsYWJsZSwgdGhpcyBtb2R1bGUgY3JlYXRlcyBvbmVcbiAqIHJlcXVlc3QtbGlmZXRpbWUgc2VydmVyIHNwYW4gYW5kIHJ1bnMgTWFzdHJhIHVuZGVyIGl0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSBcIm5vZGU6c3RyaW5nX2RlY29kZXJcIjtcblxuaW1wb3J0IHtcbiAgVVNFUl9UUkFDRV9BVFRSSUJVVEUsXG4gIHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvcixcbiAgZ2V0UmVxdWVzdFRhZ3MsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgbG9nLFxuICBpc0RhdGFicmlja3NBcHBFbnYsXG4gIHBhcnNlLFxuICBpc1JlY29yZCxcbiAgdHJpbVRvTnVsbCxcbiAgVVNFUl9FTUFJTF9IRUFERVIsXG4gIFVTRVJfSURfSEVBREVSLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTUxGTE9XX1RSQUNFX0lEX0hFQURFUixcbiAgTUxGTE9XX1RSQUNFX1BBUlRfVFlQRSxcbiAgVEhSRUFEX0lEX0hFQURFUixcbiAgVEhSRUFEX0lEX1FVRVJZLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5pbXBvcnQgdHlwZSB7IFRyYWNpbmdPcHRpb25zIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9vYnNlcnZhYmlsaXR5XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICBjb250ZXh0LFxuICBjcmVhdGVDb250ZXh0S2V5LFxuICBTcGFuS2luZCxcbiAgU3BhblN0YXR1c0NvZGUsXG4gIHRyYWNlLFxuICB0eXBlIENvbnRleHQsXG4gIHR5cGUgU3Bhbixcbn0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgZ2V0UlBDTWV0YWRhdGEsIFJQQ1R5cGUgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZVNwYW4sIFNwYW4gYXMgU2RrU3BhbiwgU3BhblByb2Nlc3NvciB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQgeyBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCxcbiAgZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSxcbiAgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbyxcbiAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyxcbiAgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2UsXG4gIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlVGFncyxcbn0gZnJvbSBcIi4vbWxmbG93LnRzXCI7XG5pbXBvcnQge1xuICBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLFxuICBNTEZMT1dfQUdFTlRfVEFHLFxuICBNTEZMT1dfQUdFTlRfVEFHX0FUVFIsXG4gIE1MRkxPV19HRU5JRV9UQUcsXG4gIE1MRkxPV19HRU5JRV9UQUdfQVRUUixcbiAgTUxGTE9XX0xPQ0FMX1RBRyxcbiAgTUxGTE9XX09CT19BVVRIX1RBRyxcbiAgTUxGTE9XX1NQX0FVVEhfVEFHLFxuICBNTEZMT1dfVFJBQ0VfVEFHX1BSRUZJWCxcbn0gZnJvbSBcIi4vdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL3RlbGVtZXRyeVwiKTtcblxuLyoqIENhcCBvbiBlYWNoIHBheWxvYWQgY29waWVkIG9udG8gYSBzcGFuLCBzbyBvbmUgdHVybiBjYW5ub3QgYmxvYXQgdGhlIGV4cG9ydC4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9JT19MSU1JVCA9IDhfMDAwO1xuXG4vKiogQm91bmQgZm9yIGEgbm9uLXN0cmVhbWluZyBib2R5IGNhcHR1cmVkIHRocm91Z2ggYHJlcy5lbmRgIGluc3RlYWQgb2YgYHJlcy5qc29uYC4gKi9cbmNvbnN0IFJFU1BPTlNFX0JPRFlfTElNSVQgPSBUUkFDRV9JT19MSU1JVCAqIDQ7XG5cbi8qKiBUcmFjZXIgc2NvcGUgdXNlZCBvbmx5IHdoZW4gQXBwS2l0IGRpZCBub3QgY3JlYXRlIGEgcmVjb3JkaW5nIEhUVFAgc3Bhbi4gKi9cbmNvbnN0IENIQVRfVFVSTl9UUkFDRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIE1hc3RyYSBhZ2VudCBpbnZva2UgcGF0aHMgdGhhdCBjYXJyeSBhIGNoYXQgdHVybiBib2R5XG4gKiAoYG1lc3NhZ2VzYCkgYW5kIHN0cmVhbSBhbiBhc3Npc3RhbnQgYW5zd2VyLiBSZXN1bWUgLyBhcHByb3ZlIHZlcmJzXG4gKiBhcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZDogdGhlaXIgYm9kaWVzIGFyZSB0b29sIGRlY2lzaW9ucywgbm90IHRoZVxuICogdXNlciBwcm9tcHQsIGFuZCB0aGV5IHJhcmVseSBwcm9kdWNlIGEgZnJlc2ggYW5zd2VyIHdvcnRoIHN1cmZhY2luZy5cbiAqL1xuY29uc3QgQUdFTlRfVFVSTl9ST1VURSA9IC8oPzpefFxcLykoPzphZ2VudHNcXC9bXi9dK1xcLyg/OnN0cmVhbXxnZW5lcmF0ZSl8Y2hhdFxcL1teL10rKVxcLz8kL2k7XG5cbi8qKiBBdHRyaWJ1dGUga2V5cyB0aGUgTUxmbG93IFVDIGAqX3RyYWNlX3VuaWZpZWRgIHZpZXcgcmVhZHMgZnJvbSB0aGUgcm9vdCBzcGFuLiAqL1xuZXhwb3J0IGNvbnN0IE1MRkxPV19TUEFOX0lOUFVUU19BVFRSID0gXCJtbGZsb3cuc3BhbklucHV0c1wiO1xuLyoqIFJvb3Qtc3BhbiBhdHRyaWJ1dGUgY29uc3VtZWQgYXMgY2hhdCBvdXRwdXQgYnkgTUxmbG93IHVuaWZpZWQgdHJhY2Ugdmlld3MuICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSID0gXCJtbGZsb3cuc3Bhbk91dHB1dHNcIjtcbi8qKiBGdWxsIHNlcmlhbGl6ZWQgcmVxdWVzdCBtZXNzYWdlcyByZXRhaW5lZCB3aGVuIHRoZSBNTGZsb3cgcHJldmlldyBpcyBwbGFpbiB0ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IENIQVRfTUVTU0FHRVNfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5jaGF0Lm1lc3NhZ2VzXCI7XG4vKiogRnVsbCBzZXJpYWxpemVkIHJlc3BvbnNlIHJldGFpbmVkIHdoZW4gdGhlIE1MZmxvdyBwcmV2aWV3IGlzIHBsYWluIHRleHQuICovXG5leHBvcnQgY29uc3QgQ0hBVF9SRVNQT05TRV9BVFRSID0gXCJhcHBraXQubWFzdHJhLmNoYXQucmVzcG9uc2VcIjtcbi8qKiBDcmVkZW50aWFsIG1vZGUgdXNlZCBieSBEYXRhYnJpY2tzIGNhbGxzIGluIHRoaXMgY2hhdCB0dXJuLiAqL1xuZXhwb3J0IGNvbnN0IENIQVRfSURFTlRJVFlfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5pZGVudGl0eS5tb2RlXCI7XG4vKiogV2hldGhlciB0aGUgc3RyZWFtZWQgdHVybiBlbWl0dGVkIGEgR2VuaWUgdG9vbCBvciBwcm9ncmVzcyBldmVudC4gKi9cbmV4cG9ydCBjb25zdCBDSEFUX0dFTklFX1VTRURfQVRUUiA9IFwiYXBwa2l0Lm1hc3RyYS5nZW5pZS51c2VkXCI7XG4vKipcbiAqIE1MZmxvdyBzcGFuLXR5cGUgYXR0cmlidXRlLiBEYXRhYnJpY2tzIG1hcHMgdGhpcyAob3IgYGdlbl9haS5vcGVyYXRpb24ubmFtZWApXG4gKiBvbnRvIHRoZSB0eXBlIGNoaXAgaW4gdGhlIGV4cGVyaW1lbnQgVUkuIEN1c3RvbSB2YWx1ZXMgc3VjaCBhcyBgR0VOSUVgIGFyZVxuICogYWxsb3dlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1MRkxPV19TUEFOX1RZUEVfQVRUUiA9IFwibWxmbG93LnNwYW5UeXBlXCI7XG4vKiogR2VuQUkgc2VtYW50aWMtY29udmVudGlvbiBvcGVyYXRpb24gbmFtZSwgYW4gYWx0ZXJuYXRlIHNwYW4tdHlwZSBzb3VyY2UuICovXG5leHBvcnQgY29uc3QgR0VOX0FJX09QRVJBVElPTl9OQU1FX0FUVFIgPSBcImdlbl9haS5vcGVyYXRpb24ubmFtZVwiO1xuLyoqIFJvb3Qtc3BhbiBzZXNzaW9uIGlkIHRoYXQgZW5hYmxlcyB0aGUgTUxmbG93IFNlc3Npb25zIHRhYi4gKi9cbmV4cG9ydCBjb25zdCBNTEZMT1dfU0VTU0lPTl9BVFRSID0gXCJzZXNzaW9uLmlkXCI7XG4vKiogUm9vdC1zcGFuIHR5cGUgZm9yIGEgTWFzdHJhIGFnZW50IHR1cm4uICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fVFlQRV9BR0VOVCA9IFwiQUdFTlRcIjtcbi8qKiBTcGFuIHR5cGUgZm9yIGFuIGBhc2tfZ2VuaWVgIHRvb2wgY2FsbC4gKi9cbmV4cG9ydCBjb25zdCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFID0gXCJHRU5JRVwiO1xuXG4vKiogUm9vdC1zcGFuIG1ldGFkYXRhIGtub3duIGJlZm9yZSBhIGNoYXQgcmVxdWVzdCBpcyBkaXNwYXRjaGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0VHVyblRlbGVtZXRyeU9wdGlvbnMge1xuICByZWFkb25seSBpZGVudGl0eT86XG4gICAgXCJvYm9cIiB8IFwic2VydmljZS1wcmluY2lwYWxcIiB8ICgocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0KSA9PiBcIm9ib1wiIHwgXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcbiAgLyoqIEluaXRpYWwgdHJhY2UgdGFncyBkZXJpdmVkIGZyb20gdGhlIGluYm91bmQgcmVxdWVzdC4gKi9cbiAgcmVhZG9ubHkgdGFncz86XG4gICAgfCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDaGF0VHJhY2VUYWdWYWx1ZSB8IHVuZGVmaW5lZD4+XG4gICAgfCAoKHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCkgPT4gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgQ2hhdFRyYWNlVGFnVmFsdWUgfCB1bmRlZmluZWQ+Pik7XG59XG5cbmludGVyZmFjZSBUcmFjZVRhcmdldCB7XG4gIHNwYW46IFNwYW47XG4gIG93bmVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQ2hhdFRyYWNlU3RhdGUge1xuICByZWFkb25seSB0YWdzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSB0cmFjZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFNwYW5JZD86IHN0cmluZztcbiAgZmlyc3RNb2RlbD86IHN0cmluZztcbiAgdXNlcj86IHN0cmluZztcbn1cblxuLyoqIFZhbHVlcyBhY2NlcHRlZCBieSByZXF1ZXN0LXNjb3BlZCB0cmFjZS10YWcgaW5qZWN0aW9uIGhlbHBlcnMuICovXG5leHBvcnQgdHlwZSBDaGF0VHJhY2VUYWdWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbmNvbnN0IENIQVRfVFJBQ0VfU1RBVEVfS0VZID0gY3JlYXRlQ29udGV4dEtleShcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYS9jaGF0LXRyYWNlLXN0YXRlXCIpO1xuXG4vKiogT3BlblRlbGVtZXRyeSdzIHNlbnRpbmVsIGZvciBcIm5vIHZhbGlkIHRyYWNlXCIgLSAzMiB6ZXJvIGhleCBjaGFycy4gKi9cbmNvbnN0IElOVkFMSURfVFJBQ0VfSUQgPSBcIjBcIi5yZXBlYXQoMzIpO1xuXG4vKipcbiAqIE1hcmsgdGhlIGFjdGl2ZSBzcGFuIGFzIGEgR2VuaWUgY2FsbCBzbyB0aGUgZXhwZXJpbWVudCBVSSB0eXBlcyBpdCBgR0VOSUVgXG4gKiBhbmQgdGFncyB0aGUgdHJhY2UgYGdlbmllPXRydWVgLiBTYWZlIG5vLW9wIHdoZW4gbm8gcmVjb3JkaW5nIHNwYW4gaXMgYWN0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbXBHZW5pZVRvb2xTcGFuKHNwYW46IFNwYW4gfCB1bmRlZmluZWQgPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCkpOiB2b2lkIHtcbiAgaWYgKCFzcGFuPy5pc1JlY29yZGluZygpKSByZXR1cm47XG4gIHNwYW4uc2V0QXR0cmlidXRlKE1MRkxPV19TUEFOX1RZUEVfQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9HRU5JRSk7XG4gIHNwYW4uc2V0QXR0cmlidXRlKEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBcImV4ZWN1dGVfdG9vbFwiKTtcbiAgc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX0dFTklFX1RBR19BVFRSLCBcInRydWVcIik7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIZWFkZXIocmVxOiBleHByZXNzLlJlcXVlc3QsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZyb21NZXRob2QgPSB0eXBlb2YgcmVxLmhlYWRlciA9PT0gXCJmdW5jdGlvblwiID8gdHJpbVRvTnVsbChyZXEuaGVhZGVyKG5hbWUpKSA6IHVuZGVmaW5lZDtcbiAgaWYgKGZyb21NZXRob2QpIHJldHVybiBmcm9tTWV0aG9kO1xuICBjb25zdCByYXcgPSByZXEuaGVhZGVycz8uW25hbWUudG9Mb3dlckNhc2UoKV07XG4gIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3WzBdIDogcmF3O1xuICByZXR1cm4gdHJpbVRvTnVsbCh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHVuZGVmaW5lZCkgPz8gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UXVlcnkocmVxOiBleHByZXNzLlJlcXVlc3QsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IHJlcS5xdWVyeT8uW25hbWVdO1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbiAgcmV0dXJuIHRyaW1Ub051bGwodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB1bmRlZmluZWQpID8/IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RhbXBNbGZsb3dBY3RvcihzcGFuOiBTcGFuLCByZXE6IGV4cHJlc3MuUmVxdWVzdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0SGVhZGVyKHJlcSwgVVNFUl9FTUFJTF9IRUFERVIpID8/IHJlcXVlc3RIZWFkZXIocmVxLCBVU0VSX0lEX0hFQURFUik7XG4gIGlmICh1c2VyKSBzcGFuLnNldEF0dHJpYnV0ZShVU0VSX1RSQUNFX0FUVFJJQlVURSwgdXNlcik7XG4gIGNvbnN0IHNlc3Npb24gPSByZXF1ZXN0SGVhZGVyKHJlcSwgVEhSRUFEX0lEX0hFQURFUikgPz8gcmVxdWVzdFF1ZXJ5KHJlcSwgVEhSRUFEX0lEX1FVRVJZKTtcbiAgaWYgKHNlc3Npb24pIHNwYW4uc2V0QXR0cmlidXRlKE1MRkxPV19TRVNTSU9OX0FUVFIsIHNlc3Npb24pO1xuICByZXR1cm4gdXNlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2VJZChzcGFuOiBTcGFuIHwgdW5kZWZpbmVkID0gdHJhY2UuZ2V0QWN0aXZlU3BhbigpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFsdWUgPSBzcGFuPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZSAhPT0gSU5WQUxJRF9UUkFDRV9JRCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpOiBDaGF0VHJhY2VTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb250ZXh0LmFjdGl2ZSgpLmdldFZhbHVlKENIQVRfVFJBQ0VfU1RBVEVfS0VZKSBhcyBDaGF0VHJhY2VTdGF0ZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCaW5kIGEgTWFzdHJhIGFnZW50IHJ1biB0byB0aGUgdHJhY2Ugc2VsZWN0ZWQgYnkgY2hhdCB0ZWxlbWV0cnkuXG4gKlxuICogRGF0YWJyaWNrcyBBcHBzIHVzZXMgYSBkZWRpY2F0ZWQgYWdlbnQgdHJhY2UgYmVjYXVzZSBldmVudGVkIGFnZW50cyBmaW5pc2hcbiAqIGJlZm9yZSB0aGUgSFRUUCBzZXJ2ZXIgc3Bhbi4gUHJvbW90aW5nIE1MZmxvdyB0cmFjZSBpbmZvIGFmdGVyIHRoZSBhZ2VudCByb290XG4gKiBjbG9zZXMgYXZvaWRzIHRoZSBzaWRlY2FyIHJlcGxhY2luZyBjbGVhbiBwcmV2aWV3cyBhbmQgdGFncyB3aXRoIGVtcHR5IEhUVFBcbiAqIHRyYWNlIG1ldGFkYXRhLiBPdGhlciBydW50aW1lcyByZXRhaW4gdGhlIGV4aXN0aW5nIEhUVFAvbG9jYWwgcGFyZW50YWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWN0aXZlQ2hhdFRyYWNpbmdPcHRpb25zKFxuICBvcHRpb25zOiBUcmFjaW5nT3B0aW9ucyB8IHVuZGVmaW5lZCxcbik6IFRyYWNpbmdPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhdGUgPSBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpO1xuICBpZiAoIXN0YXRlKSByZXR1cm4gb3B0aW9ucztcbiAgcmV0dXJuIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHRyYWNlSWQ6IHN0YXRlLnRyYWNlSWQsXG4gICAgLi4uKHN0YXRlLnBhcmVudFNwYW5JZCA/IHsgcGFyZW50U3BhbklkOiBzdGF0ZS5wYXJlbnRTcGFuSWQgfSA6IHsgcGFyZW50U3BhbklkOiB1bmRlZmluZWQgfSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNldENoYXRUcmFjZVRhZyhzdGF0ZTogQ2hhdFRyYWNlU3RhdGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IENoYXRUcmFjZVRhZ1ZhbHVlKTogdm9pZCB7XG4gIGNvbnN0IHRhZyA9IHRyaW1Ub051bGwobmFtZSk7XG4gIGlmICghdGFnKSByZXR1cm47XG4gIHN0YXRlLnRhZ3Muc2V0KHRhZywgU3RyaW5nKHZhbHVlKSk7XG59XG5cbi8qKiBJbmplY3Qgb25lIE1MZmxvdyB0cmFjZSB0YWcgaW50byB0aGUgYWN0aXZlIGNoYXQgcmVxdWVzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRBY3RpdmVUcmFjZVRhZyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBDaGF0VHJhY2VUYWdWYWx1ZSA9IHRydWUpOiB2b2lkIHtcbiAgY29uc3Qgc3RhdGUgPSBhY3RpdmVDaGF0VHJhY2VTdGF0ZSgpO1xuICBpZiAoc3RhdGUpIHNldENoYXRUcmFjZVRhZyhzdGF0ZSwgbmFtZSwgdmFsdWUpO1xufVxuXG4vKiogSW5qZWN0IG11bHRpcGxlIE1MZmxvdyB0cmFjZSB0YWdzIGludG8gdGhlIGFjdGl2ZSBjaGF0IHJlcXVlc3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VUYWdzKFxuICB0YWdzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDaGF0VHJhY2VUYWdWYWx1ZSB8IHVuZGVmaW5lZD4+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2V0Q2hhdFRyYWNlVGFnKHN0YXRlLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqIFJlY29yZCB0aGUgZmlyc3Qgc2VsZWN0ZWQgbW9kZWwgYXMgdGhlIGFjdGl2ZSBjaGF0IHRyYWNlJ3MgYGFnZW50YCB0YWcuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VNb2RlbChtb2RlbElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgdmFsdWUgPSB0cmltVG9OdWxsKG1vZGVsSWQpO1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5maXJzdE1vZGVsKSByZXR1cm47XG4gIHN0YXRlLmZpcnN0TW9kZWwgPSB2YWx1ZTtcbiAgc2V0Q2hhdFRyYWNlVGFnKHN0YXRlLCBNTEZMT1dfQUdFTlRfVEFHLCB2YWx1ZSk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCk7XG4gIGlmIChzcGFuPy5pc1JlY29yZGluZygpKSBzcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfQUdFTlRfVEFHX0FUVFIsIHZhbHVlKTtcbiAgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2VUYWdzKHsgW01MRkxPV19BR0VOVF9UQUddOiB2YWx1ZSB9KTtcbn1cblxuLyoqIFJlY29yZCB0aGUgYmVzdCByZXNvbHZlZCB1c2VyIGlkZW50aWZpZXIgb24gdGhlIGFjdGl2ZSBjaGF0IHRyYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZEFjdGl2ZVRyYWNlVXNlcih1c2VyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgY29uc3QgdmFsdWUgPSB0cmltVG9OdWxsKHVzZXIpO1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gYWN0aXZlQ2hhdFRyYWNlU3RhdGUoKTtcbiAgaWYgKHN0YXRlKSBzdGF0ZS51c2VyID0gdmFsdWU7XG59XG5cbi8qKiBSZWNvcmQgb25lIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gbW9kZSB1c2VkIGR1cmluZyB0aGUgYWN0aXZlIGNoYXQgdHJhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQWN0aXZlVHJhY2VBdXRoKGF1dGg6IFwib2JvXCIgfCBcInNlcnZpY2UtcHJpbmNpcGFsXCIpOiB2b2lkIHtcbiAgcmVjb3JkQWN0aXZlVHJhY2VUYWcoYXV0aCA9PT0gXCJvYm9cIiA/IE1MRkxPV19PQk9fQVVUSF9UQUcgOiBNTEZMT1dfU1BfQVVUSF9UQUcpO1xufVxuXG4vKiogUHVibGlzaCB0aGUgdHVybidzIE1MZmxvdyB0cmFjZSBpZCBiZWZvcmUgdGhlIGhhbmRsZXIgd3JpdGVzIHRoZSBib2R5LiAqL1xuZnVuY3Rpb24gc3RhbXBNbGZsb3dUcmFjZUlkKHJlczogZXhwcmVzcy5SZXNwb25zZSwgdHJhY2VJZDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcbiAgaWYgKCF0cmFjZUlkIHx8IHRyYWNlSWQgPT09IElOVkFMSURfVFJBQ0VfSUQpIHJldHVybjtcbiAgcmVzLnNldEhlYWRlcihNTEZMT1dfVFJBQ0VfSURfSEVBREVSLCBgdHItJHt0cmFjZUlkfWApO1xufVxuXG4vKiogU2VyaWFsaXplIGEgdHJhbnNpZW50IHRyYWNlLWlkIHBhcnQgZm9yIHByb3hpZXMgdGhhdCByZW1vdmUgY3VzdG9tIGhlYWRlcnMuICovXG5mdW5jdGlvbiBtbGZsb3dUcmFjZVBhcnQodHJhY2VJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBkYXRhOiAke0pTT04uc3RyaW5naWZ5KHtcbiAgICB0eXBlOiBNTEZMT1dfVFJBQ0VfUEFSVF9UWVBFLFxuICAgIGRhdGE6IHsgdHJhY2VJZDogYHRyLSR7dHJhY2VJZH1gIH0sXG4gICAgdHJhbnNpZW50OiB0cnVlLFxuICB9KX1cXG5cXG5gO1xufVxuXG4vKiogUmV0dXJuIG9uZSByYXcgcHJvbXB0IHdoZW4gdGhlIHJlcXVlc3QgaXMgZXhhY3RseSBvbmUgdGV4dC1vbmx5IHVzZXIgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0T25seUNoYXRJbnB1dChtZXNzYWdlczogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZXMgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXNzYWdlcyB8fCB1bmRlZmluZWQ7XG4gIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlcykgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSAxKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbMF07XG4gIGlmICghaXNSZWNvcmQobWVzc2FnZSkgfHwgbWVzc2FnZS5yb2xlICE9PSBcInVzZXJcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXNzYWdlLmNvbnRlbnQgfHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdGV4dEZyb21QYXJ0cyhtZXNzYWdlLnBhcnRzKSA/PyB0ZXh0RnJvbVBhcnRzKG1lc3NhZ2UuY29udGVudCk7XG59XG5cbmZ1bmN0aW9uIHRleHRGcm9tUGFydHModmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHZhbHVlKSB7XG4gICAgaWYgKCFpc1JlY29yZChwYXJ0KSB8fCBwYXJ0LnR5cGUgIT09IFwidGV4dFwiIHx8IHR5cGVvZiBwYXJ0LnRleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRleHQucHVzaChwYXJ0LnRleHQpO1xuICB9XG4gIGNvbnN0IGpvaW5lZCA9IHRleHQuam9pbihcIlwiKTtcbiAgcmV0dXJuIGpvaW5lZCB8fCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZWQodmFsdWU6IHVua25vd24sIGxpbWl0ID0gVFJBQ0VfSU9fTElNSVQpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpPy5zbGljZSgwLCBsaW1pdCkgPz8gU3RyaW5nKHZhbHVlKS5zbGljZSgwLCBsaW1pdCk7XG59XG5cbmZ1bmN0aW9uIHNzZUZyYW1lKGxpbmU6IHN0cmluZyk6IHVua25vd24ge1xuICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcImRhdGE6XCIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gcGFyc2UobGluZS5zbGljZSg1KSk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlVXNlc0dlbmllKHZhbHVlOiB1bmtub3duLCBkZXB0aCA9IDApOiBib29sZWFuIHtcbiAgaWYgKGRlcHRoID4gMykgcmV0dXJuIGZhbHNlO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5zb21lKChpdGVtKSA9PiB2YWx1ZVVzZXNHZW5pZShpdGVtLCBkZXB0aCArIDEpKTtcbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKFxuICAgIHZhbHVlLnR5cGUgPT09IFwiZGF0YS1nZW5pZS1wcm9ncmVzc1wiIHx8XG4gICAgdmFsdWUudHlwZSA9PT0gXCJhc2tfZ2VuaWVfZG9uZVwiIHx8XG4gICAgdmFsdWUudG9vbE5hbWUgPT09IFwiYXNrX2dlbmllXCIgfHxcbiAgICB2YWx1ZS50b29sX25hbWUgPT09IFwiYXNrX2dlbmllXCIgfHxcbiAgICB2YWx1ZS5uYW1lID09PSBcImFza19nZW5pZVwiXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBbXCJkYXRhXCIsIFwiZXZlbnRcIiwgXCJwYXlsb2FkXCJdLnNvbWUoKGtleSkgPT4gdmFsdWVVc2VzR2VuaWUodmFsdWVba2V5XSwgZGVwdGggKyAxKSk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFzc2lzdGFudCB0ZXh0IGZyb20gb25lIFNTRSBsaW5lLCBvciBhbiBlbXB0eSBzdHJpbmcuICovXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFzc2lzdGFudFRleHRGcm9tU3NlRnJhbWUoc3NlRnJhbWUobGluZSkpO1xufVxuXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUZyYW1lKGZyYW1lOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCFpc1JlY29yZChmcmFtZSkgfHwgZnJhbWUudHlwZSAhPT0gXCJ0ZXh0LWRlbHRhXCIpIHJldHVybiBcIlwiO1xuICBjb25zdCB0ZXh0ID1cbiAgICB0eXBlb2YgZnJhbWUuZGVsdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZnJhbWUuZGVsdGFcbiAgICAgIDogaXNSZWNvcmQoZnJhbWUucGF5bG9hZClcbiAgICAgICAgPyBmcmFtZS5wYXlsb2FkLnRleHRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiA/IHRleHQgOiBcIlwiO1xufVxuXG4vKipcbiAqIENvbmNhdGVuYXRlIHRoZSBhc3Npc3RhbnQncyBhbnN3ZXIgb3V0IG9mIGFuIEFJIFNESyBTU0UgdHJhbnNjcmlwdC5cbiAqXG4gKiBUaGUgYWdlbnQgc3RyZWFtcyBpdHMgcmVwbHkgYXMgYHRleHQtZGVsdGFgIGZyYW1lc1xuICogKGBkYXRhOiB7XCJ0eXBlXCI6XCJ0ZXh0LWRlbHRhXCIsXCJwYXlsb2FkXCI6e1widGV4dFwiOlwiLi4uXCJ9fWApLCBzbyB0aGUgZnVsbFxuICogYW5zd2VyIG9ubHkgZXZlciBleGlzdHMgYXMgZGVsdGFzIG9uIHRoZSB3aXJlIGFuZCBoYXMgdG8gYmVcbiAqIHJlYXNzZW1ibGVkIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGJvZHkuc3BsaXQoXCJcXG5cIikpIHtcbiAgICBjb25zdCB0ZXh0ID0gYXNzaXN0YW50VGV4dEZyb21Tc2VMaW5lKGxpbmUpO1xuICAgIGlmICh0ZXh0KSBwYXJ0cy5wdXNoKHRleHQpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpLnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKTtcbn1cblxuLyoqIFJlYWQgdGhlIGZpbmFsIGFzc2lzdGFudCB0ZXh0IGZyb20gYSBub24tc3RyZWFtaW5nIE1hc3RyYSByZXNwb25zZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbUpzb24oYm9keTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghaXNSZWNvcmQoYm9keSkgfHwgdHlwZW9mIGJvZHkudGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBib2R5LnRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG5jb25zdCBNQVNUUkFfQUdFTlRfSU5QVVRfQVRUUiA9IFwibWFzdHJhLmFnZW50X3J1bi5pbnB1dFwiO1xuY29uc3QgTUFTVFJBX0FHRU5UX09VVFBVVF9BVFRSID0gXCJtYXN0cmEuYWdlbnRfcnVuLm91dHB1dFwiO1xuY29uc3QgR0VOX0FJX1JFUVVFU1RfTU9ERUxfQVRUUiA9IFwiZ2VuX2FpLnJlcXVlc3QubW9kZWxcIjtcbmNvbnN0IEdFTl9BSV9BR0VOVF9JRF9BVFRSID0gXCJnZW5fYWkuYWdlbnQuaWRcIjtcbmNvbnN0IEdFTl9BSV9BR0VOVF9OQU1FX0FUVFIgPSBcImdlbl9haS5hZ2VudC5uYW1lXCI7XG5jb25zdCBNQVNUUkFfTU9ERUxfTUVUQURBVEFfQVRUUiA9IFwibWFzdHJhLm1ldGFkYXRhLm1vZGVsTWV0YWRhdGFcIjtcbmNvbnN0IE1BU1RSQV9NRVRBREFUQV9QUkVGSVggPSBcIm1hc3RyYS5tZXRhZGF0YS5cIjtcblxuaW50ZXJmYWNlIEFwcE1sZmxvd1RyYWNlU3RhdGUge1xuICByZWFkb25seSB0YWdzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBnZW5pZTogYm9vbGVhbjtcbiAgbW9kZWw/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZVN0cmluZyhzcGFuOiBSZWFkYWJsZVNwYW4sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gc3Bhbi5hdHRyaWJ1dGVzW25hbWVdO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gKHRyaW1Ub051bGwodmFsdWUpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1ldGFkYXRhQXR0cmlidXRlKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke01BU1RSQV9NRVRBREFUQV9QUkVGSVh9JHtrZXl9YDtcbn1cblxuZnVuY3Rpb24gbW9kZWxGcm9tU3BhbihzcGFuOiBSZWFkYWJsZVNwYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkaXJlY3QgPSBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgR0VOX0FJX1JFUVVFU1RfTU9ERUxfQVRUUik7XG4gIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Q7XG4gIGNvbnN0IG1ldGFkYXRhID0gcGFyc2UoYXR0cmlidXRlU3RyaW5nKHNwYW4sIE1BU1RSQV9NT0RFTF9NRVRBREFUQV9BVFRSKSk7XG4gIHJldHVybiBpc1JlY29yZChtZXRhZGF0YSkgJiYgdHlwZW9mIG1ldGFkYXRhLm1vZGVsSWQgPT09IFwic3RyaW5nXCJcbiAgICA/ICh0cmltVG9OdWxsKG1ldGFkYXRhLm1vZGVsSWQpID8/IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3BhblVzZXNHZW5pZShzcGFuOiBSZWFkYWJsZVNwYW4pOiBib29sZWFuIHtcbiAgaWYgKHNwYW4uYXR0cmlidXRlc1tNTEZMT1dfR0VOSUVfVEFHX0FUVFJdID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gIGlmICgvXFxiYXNrX2dlbmllKD86X3xcXGIpL2kudGVzdChzcGFuLm5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIFtcImdlbl9haS50b29sLm5hbWVcIiwgXCJtYXN0cmEudG9vbF9jYWxsLm5hbWVcIl0uc29tZSgobmFtZSkgPT5cbiAgICAvXmFza19nZW5pZSg/Ol98JCkvaS50ZXN0KGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBuYW1lKSA/PyBcIlwiKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFRyYWNlVGFncyhzcGFuOiBSZWFkYWJsZVNwYW4sIHN0YXRlOiBBcHBNbGZsb3dUcmFjZVN0YXRlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzcGFuLmF0dHJpYnV0ZXMpKSB7XG4gICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoTUxGTE9XX1RSQUNFX1RBR19QUkVGSVgpKSBjb250aW51ZTtcbiAgICBjb25zdCB0YWcgPSBuYW1lLnNsaWNlKE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLmxlbmd0aCk7XG4gICAgaWYgKFxuICAgICAgdGFnICYmXG4gICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKVxuICAgICkge1xuICAgICAgc3RhdGUudGFncy5zZXQodGFnLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaHJUaW1lTWlsbGlzZWNvbmRzKHZhbHVlOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlWzBdICogMV8wMDAgKyB2YWx1ZVsxXSAvIDFfMDAwXzAwMDtcbn1cblxuZnVuY3Rpb24gcHJldmlld0lucHV0KHNwYW46IFJlYWRhYmxlU3Bhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBNQVNUUkFfQUdFTlRfSU5QVVRfQVRUUik7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKHRleHRPbmx5Q2hhdElucHV0KHBhcnNlKHJhdykpID8/IHJhdykuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG5mdW5jdGlvbiBwcmV2aWV3T3V0cHV0KHNwYW46IFJlYWRhYmxlU3Bhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBNQVNUUkFfQUdFTlRfT1VUUFVUX0FUVFIpO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UocmF3KTtcbiAgY29uc3QgdGV4dCA9IGFzc2lzdGFudFRleHRGcm9tSnNvbihwYXJzZWQpIHx8ICh0eXBlb2YgcGFyc2VkID09PSBcInN0cmluZ1wiID8gcGFyc2VkIDogcmF3KTtcbiAgcmV0dXJuIHRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogUHJvbW90ZSB0aGUgYWN0dWFsIE1hc3RyYSBgaW52b2tlX2FnZW50YCB0cmFjZSBleHBvcnRlZCBieSBBcHBLaXQncyBwcm92aWRlci4gKi9cbmV4cG9ydCBjbGFzcyBBcHBNbGZsb3dUcmFjZUluZm9TcGFuUHJvY2Vzc29yIGltcGxlbWVudHMgU3BhblByb2Nlc3NvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2VzID0gbmV3IE1hcDxzdHJpbmcsIEFwcE1sZmxvd1RyYWNlU3RhdGU+KCk7XG5cbiAgb25TdGFydChzcGFuOiBTZGtTcGFuLCBfcGFyZW50Q29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHRyYWNlSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBpZiAoIXRoaXMudHJhY2VzLmhhcyh0cmFjZUlkKSkge1xuICAgICAgdGhpcy50cmFjZXMuc2V0KHRyYWNlSWQsIHsgdGFnczogbmV3IE1hcCgpLCBnZW5pZTogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25FbmQoc3BhbjogUmVhZGFibGVTcGFuKTogdm9pZCB7XG4gICAgY29uc3QgdHJhY2VJZCA9IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkO1xuICAgIGNvbnN0IHN0YXRlOiBBcHBNbGZsb3dUcmFjZVN0YXRlID0gdGhpcy50cmFjZXMuZ2V0KHRyYWNlSWQpID8/IHtcbiAgICAgIHRhZ3M6IG5ldyBNYXAoKSxcbiAgICAgIGdlbmllOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMudHJhY2VzLnNldCh0cmFjZUlkLCBzdGF0ZSk7XG4gICAgY29sbGVjdFRyYWNlVGFncyhzcGFuLCBzdGF0ZSk7XG4gICAgc3RhdGUubW9kZWwgPz89IG1vZGVsRnJvbVNwYW4oc3Bhbik7XG4gICAgc3RhdGUuZ2VuaWUgfHw9IHNwYW5Vc2VzR2VuaWUoc3Bhbik7XG5cbiAgICBpZiAoYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSKSAhPT0gXCJpbnZva2VfYWdlbnRcIikge1xuICAgICAgaWYgKCFzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWQpIHRoaXMudHJhY2VzLmRlbGV0ZSh0cmFjZUlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudCA9XG4gICAgICBzdGF0ZS5tb2RlbCA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9BR0VOVF9JRF9BVFRSKSA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIEdFTl9BSV9BR0VOVF9OQU1FX0FUVFIpO1xuICAgIGlmIChhZ2VudCkgc3RhdGUudGFncy5zZXQoTUxGTE9XX0FHRU5UX1RBRywgYWdlbnQpO1xuICAgIGlmIChzdGF0ZS5nZW5pZSkgc3RhdGUudGFncy5zZXQoTUxGTE9XX0dFTklFX1RBRywgXCJ0cnVlXCIpO1xuICAgIGNvbnN0IGF1dGggPSBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgbWV0YWRhdGFBdHRyaWJ1dGUoTUFTVFJBX0FVVEhfTU9ERV9LRVkpKTtcbiAgICBpZiAoYXV0aCA9PT0gXCJvYm9cIikgc3RhdGUudGFncy5zZXQoTUxGTE9XX09CT19BVVRIX1RBRywgXCJ0cnVlXCIpO1xuICAgIGVsc2UgaWYgKGF1dGggPT09IFwic2VydmljZS1wcmluY2lwYWxcIikgc3RhdGUudGFncy5zZXQoTUxGTE9XX1NQX0FVVEhfVEFHLCBcInRydWVcIik7XG5cbiAgICBjb25zdCB1c2VyID1cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfVVNFUl9FTUFJTF9LRVkpKSA/P1xuICAgICAgYXR0cmlidXRlU3RyaW5nKHNwYW4sIG1ldGFkYXRhQXR0cmlidXRlKE1BU1RSQV9VU0VSX05BTUVfS0VZKSkgPz9cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfUkVTT1VSQ0VfSURfS0VZKSk7XG4gICAgY29uc3Qgc2Vzc2lvbklkID1cbiAgICAgIGF0dHJpYnV0ZVN0cmluZyhzcGFuLCBtZXRhZGF0YUF0dHJpYnV0ZShNQVNUUkFfVEhSRUFEX0lEX0tFWSkpID8/XG4gICAgICBhdHRyaWJ1dGVTdHJpbmcoc3BhbiwgXCJnZW5fYWkuY29udmVyc2F0aW9uLmlkXCIpO1xuICAgIGNvbnN0IHJlcXVlc3RQcmV2aWV3ID0gcHJldmlld0lucHV0KHNwYW4pO1xuICAgIGNvbnN0IHJlc3BvbnNlUHJldmlldyA9IHByZXZpZXdPdXRwdXQoc3Bhbik7XG4gICAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyh7XG4gICAgICB0cmFjZUlkLFxuICAgICAgcmVxdWVzdFRpbWU6IGhyVGltZU1pbGxpc2Vjb25kcyhzcGFuLnN0YXJ0VGltZSksXG4gICAgICBleGVjdXRpb25EdXJhdGlvbjogaHJUaW1lTWlsbGlzZWNvbmRzKHNwYW4uZHVyYXRpb24pLFxuICAgICAgZXJyb3I6IHNwYW4uc3RhdHVzLmNvZGUgPT09IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgdGFnczogT2JqZWN0LmZyb21FbnRyaWVzKHN0YXRlLnRhZ3MpLFxuICAgICAgLi4uKHVzZXIgPyB7IHVzZXIgfSA6IHt9KSxcbiAgICAgIC4uLihzZXNzaW9uSWQgPyB7IHNlc3Npb25JZCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3RQcmV2aWV3ID8geyByZXF1ZXN0UHJldmlldyB9IDoge30pLFxuICAgICAgLi4uKHJlc3BvbnNlUHJldmlldyA/IHsgcmVzcG9uc2VQcmV2aWV3IH0gOiB7fSksXG4gICAgfSk7XG4gICAgdGhpcy50cmFjZXMuZGVsZXRlKHRyYWNlSWQpO1xuICB9XG5cbiAgYXN5bmMgZm9yY2VGbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50cmFjZXMuY2xlYXIoKTtcbiAgfVxufVxuXG5sZXQgYXBwTWxmbG93VHJhY2VJbmZvUHJvY2Vzc29yUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG4vKiogUmVnaXN0ZXIgdHJhY2UgZW5yaWNobWVudCBiZWZvcmUgQXBwS2l0IGNvbnN0cnVjdHMgaXRzIG5hdGl2ZSBwcm92aWRlci4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvcigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvclJlZ2lzdGVyZWQpIHJldHVybiB0cnVlO1xuICBpZiAoIWFwcE1sZmxvd1RyYWNlSW5mb0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBhd2FpdCBpbml0aWFsaXplQXBwTWxmbG93VHJhY2VJbmZvKCk7XG4gIGF3YWl0IHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvcihuZXcgQXBwTWxmbG93VHJhY2VJbmZvU3BhblByb2Nlc3NvcigpKTtcbiAgYXBwTWxmbG93VHJhY2VJbmZvUHJvY2Vzc29yUmVnaXN0ZXJlZCA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogSW5jcmVtZW50YWxseSBhc3NlbWJsZSBVVEYtOCBTU0UgdGV4dCB3aGlsZSByZXRhaW5pbmcgYSBib3VuZGVkIEpTT04gZmFsbGJhY2suICovXG5jbGFzcyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFwidXRmOFwiKTtcbiAgcHJpdmF0ZSBhbnN3ZXIgPSBcIlwiO1xuICBwcml2YXRlIGJvZHkgPSBcIlwiO1xuICBwcml2YXRlIHBlbmRpbmdMaW5lID0gXCJcIjtcbiAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIGdlbmllID0gZmFsc2U7XG5cbiAgd3JpdGUoY2h1bms6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZShjaHVuayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoXG4gICAgICAgIHRoaXMuZGVjb2Rlci53cml0ZShCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZmluaXNoKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmluaXNoZWQpIHJldHVybiB0aGlzLmFuc3dlciB8fCB0aGlzLmpzb25BbnN3ZXIoKTtcbiAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbnN1bWUodGhpcy5kZWNvZGVyLmVuZCgpKTtcbiAgICB0aGlzLmNvbnN1bWVTc2VMaW5lKHRoaXMucGVuZGluZ0xpbmUpO1xuICAgIHRoaXMucGVuZGluZ0xpbmUgPSBcIlwiO1xuICAgIHJldHVybiB0aGlzLmFuc3dlciB8fCB0aGlzLmpzb25BbnN3ZXIoKTtcbiAgfVxuXG4gIHJhd0JvZHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5LnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKTtcbiAgfVxuXG4gIHVzZWRHZW5pZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZW5pZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5ib2R5Lmxlbmd0aCA8IFJFU1BPTlNFX0JPRFlfTElNSVQpIHtcbiAgICAgIHRoaXMuYm9keSArPSB0ZXh0LnNsaWNlKDAsIFJFU1BPTlNFX0JPRFlfTElNSVQgLSB0aGlzLmJvZHkubGVuZ3RoKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nTGluZSArPSB0ZXh0O1xuICAgIGxldCBuZXdsaW5lID0gdGhpcy5wZW5kaW5nTGluZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgIHdoaWxlIChuZXdsaW5lID49IDApIHtcbiAgICAgIHRoaXMuY29uc3VtZVNzZUxpbmUodGhpcy5wZW5kaW5nTGluZS5zbGljZSgwLCBuZXdsaW5lKS5yZXBsYWNlKC9cXHIkLywgXCJcIikpO1xuICAgICAgdGhpcy5wZW5kaW5nTGluZSA9IHRoaXMucGVuZGluZ0xpbmUuc2xpY2UobmV3bGluZSArIDEpO1xuICAgICAgbmV3bGluZSA9IHRoaXMucGVuZGluZ0xpbmUuaW5kZXhPZihcIlxcblwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVuZGluZ0xpbmUubGVuZ3RoID4gUkVTUE9OU0VfQk9EWV9MSU1JVCkge1xuICAgICAgdGhpcy5wZW5kaW5nTGluZSA9IHRoaXMucGVuZGluZ0xpbmUuc2xpY2UoLVJFU1BPTlNFX0JPRFlfTElNSVQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVNzZUxpbmUobGluZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWUgPSBzc2VGcmFtZShsaW5lKTtcbiAgICB0aGlzLmdlbmllIHx8PSB2YWx1ZVVzZXNHZW5pZShmcmFtZSk7XG4gICAgaWYgKHRoaXMuYW5zd2VyLmxlbmd0aCA+PSBUUkFDRV9JT19MSU1JVCkgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSBhc3Npc3RhbnRUZXh0RnJvbVNzZUZyYW1lKGZyYW1lKTtcbiAgICB0aGlzLmFuc3dlciArPSB0ZXh0LnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUIC0gdGhpcy5hbnN3ZXIubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUganNvbkFuc3dlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBhc3Npc3RhbnRUZXh0RnJvbUpzb24ocGFyc2UodGhpcy5ib2R5KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWxlY3QgdGhlIHNwYW4gTUxmbG93IHRyZWF0cyBhcyB0aGUgcmVxdWVzdCByb290LlxuICpcbiAqIE9UZWwgSFRUUCBpbnN0cnVtZW50YXRpb24gc3RvcmVzIGl0cyBzZXJ2ZXIgc3BhbiBpbiBSUEMgbWV0YWRhdGEuIFRoYXQgc3BhblxuICogd2lucyBvdmVyIGFuIGFjdGl2ZSBFeHByZXNzIGNoaWxkLiBJZiBubyByZWNvcmRpbmcgbG9jYWwgc3BhbiBleGlzdHMsIGNyZWF0ZVxuICogb25lIHVuZGVyIHRoZSBjdXJyZW50IGNvbnRleHQgc28gZW5hYmxlZCBXM0MgcHJvcGFnYXRpb24gcmVtYWlucyBpbnRhY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUcmFjZVRhcmdldCgpOiBUcmFjZVRhcmdldCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBpZiAoZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSgpKSB7XG4gICAgY29uc3Qgc3BhbiA9IHRyYWNlLmdldFRyYWNlcihDSEFUX1RVUk5fVFJBQ0VSKS5zdGFydFNwYW4oXG4gICAgICBcIm1hc3RyYS5jaGF0X3R1cm5cIixcbiAgICAgIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgW0FQUEtJVF9BR0VOVF9UUkFDRV9ST09UX0FUVFJdOiB0cnVlLFxuICAgICAgICAgIFtNTEZMT1dfU1BBTl9UWVBFX0FUVFJdOiBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULFxuICAgICAgICAgIFtHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUl06IFwiaW52b2tlX2FnZW50XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJhY2UuZGVsZXRlU3BhbihhY3RpdmVDb250ZXh0KSxcbiAgICApO1xuICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IHJwYyA9IGdldFJQQ01ldGFkYXRhKGFjdGl2ZUNvbnRleHQpO1xuICBpZiAocnBjPy50eXBlID09PSBSUENUeXBlLkhUVFAgJiYgcnBjLnNwYW4uaXNSZWNvcmRpbmcoKSkge1xuICAgIHJldHVybiB7IHNwYW46IHJwYy5zcGFuLCBvd25lZDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZSA9IHRyYWNlLmdldEFjdGl2ZVNwYW4oKTtcbiAgaWYgKGFjdGl2ZT8uaXNSZWNvcmRpbmcoKSkgcmV0dXJuIHsgc3BhbjogYWN0aXZlLCBvd25lZDogZmFsc2UgfTtcblxuICBjb25zdCBzcGFuID0gdHJhY2UuZ2V0VHJhY2VyKENIQVRfVFVSTl9UUkFDRVIpLnN0YXJ0U3BhbihcbiAgICBcIm1hc3RyYS5jaGF0X3R1cm5cIixcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5TRVJWRVIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFtBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSXTogdHJ1ZSxcbiAgICAgICAgW01MRkxPV19TUEFOX1RZUEVfQVRUUl06IE1MRkxPV19TUEFOX1RZUEVfQUdFTlQsXG4gICAgICAgIFtHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUl06IFwiaW52b2tlX2FnZW50XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYWN0aXZlQ29udGV4dCxcbiAgKTtcbiAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICBzcGFuLmVuZCgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmUgdGhhdCBzdGFtcHMgY2hhdCB0dXJuIEkvTyBvbnRvIHRoZSBleHBvcnRlZCBPVGVsIHJvb3QuXG4gKlxuICogVGVlIGByZXMud3JpdGVgLCBgcmVzLmpzb25gLCBhbmQgYHJlcy5lbmRgIGluc3RlYWQgb2YgbGlzdGVuaW5nIGZvciBgZmluaXNoYDpcbiAqIEhUVFAgaW5zdHJ1bWVudGF0aW9uIGVuZHMgaXRzIHNlcnZlciBzcGFuIG9uIGZpbmlzaCwgYW5kIGF0dHJpYnV0ZXMgc2V0XG4gKiBhZnRlciBhIHNwYW4gZW5kcyBuZXZlciByZWFjaCB0aGUgZXhwb3J0ZXIuXG4gKlxuICogYHBhdGhgIGlzIG1vdW50LXJlbGF0aXZlICh3aGF0IHRoZSBNYXN0cmEgc3ViLWFwcCBzZWVzKSwgZS5nLlxuICogYC9hZ2VudHMvc3VwcG9ydC9zdHJlYW1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlKFxuICByZXE6IGV4cHJlc3MuUmVxdWVzdCxcbiAgcmVzOiBleHByZXNzLlJlc3BvbnNlLFxuICBuZXh0OiBleHByZXNzLk5leHRGdW5jdGlvbixcbiAgb3B0aW9uczogQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcS5tZXRob2QgIT09IFwiUE9TVFwiIHx8ICFBR0VOVF9UVVJOX1JPVVRFLnRlc3QocmVxLnBhdGgpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSByZXNvbHZlVHJhY2VUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRhcmdldFRyYWNlSWQgPSB0cmFjZUlkKHRhcmdldC5zcGFuKTtcbiAgaWYgKCF0YXJnZXRUcmFjZUlkKSB7XG4gICAgaWYgKHRhcmdldC5vd25lZCkgdGFyZ2V0LnNwYW4uZW5kKCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0cmFjZVN0YXRlOiBDaGF0VHJhY2VTdGF0ZSA9IHtcbiAgICB0YWdzOiBuZXcgTWFwKCksXG4gICAgdHJhY2VJZDogdGFyZ2V0VHJhY2VJZCxcbiAgICBwYXJlbnRTcGFuSWQ6IHRhcmdldC5zcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICB9O1xuICBjb25zdCB0cmFjZVJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgaWYgKCFpc0RhdGFicmlja3NBcHBFbnYoKSkge1xuICAgIHNldENoYXRUcmFjZVRhZyh0cmFjZVN0YXRlLCBNTEZMT1dfTE9DQUxfVEFHLCB0cnVlKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZ2V0UmVxdWVzdFRhZ3MocmVxKSkpIHtcbiAgICBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgbmFtZSwgdmFsdWUpO1xuICB9XG4gIGNvbnN0IGluaXRpYWxUYWdzID0gdHlwZW9mIG9wdGlvbnMudGFncyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy50YWdzKHJlcSkgOiBvcHRpb25zLnRhZ3M7XG4gIGlmIChpbml0aWFsVGFncykge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVGFncykpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBzdGFtcE1sZmxvd1RyYWNlSWQocmVzLCB0cmFjZVN0YXRlLnRyYWNlSWQpO1xuICB0cmFjZVN0YXRlLnVzZXIgPSBzdGFtcE1sZmxvd0FjdG9yKHRhcmdldC5zcGFuLCByZXEpO1xuICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX1NQQU5fVFlQRV9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5UKTtcbiAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBcImludm9rZV9hZ2VudFwiKTtcbiAgY29uc3QgaWRlbnRpdHkgPVxuICAgIHR5cGVvZiBvcHRpb25zLmlkZW50aXR5ID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmlkZW50aXR5KHJlcSkgOiBvcHRpb25zLmlkZW50aXR5O1xuICBpZiAoaWRlbnRpdHkpIHtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9JREVOVElUWV9BVFRSLCBpZGVudGl0eSk7XG4gICAgc2V0Q2hhdFRyYWNlVGFnKFxuICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgIGlkZW50aXR5ID09PSBcIm9ib1wiID8gTUxGTE9XX09CT19BVVRIX1RBRyA6IE1MRkxPV19TUF9BVVRIX1RBRyxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9HRU5JRV9VU0VEX0FUVFIsIGZhbHNlKTtcblxuICBjb25zdCBtZXNzYWdlcyA9IChyZXEuYm9keSBhcyB7IG1lc3NhZ2VzPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ubWVzc2FnZXM7XG4gIGxldCByZXF1ZXN0UHJldmlldzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAobWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZ1bGxJbnB1dCA9IHNlcmlhbGl6ZWQobWVzc2FnZXMpO1xuICAgIHJlcXVlc3RQcmV2aWV3ID0gdGV4dE9ubHlDaGF0SW5wdXQobWVzc2FnZXMpID8/IGZ1bGxJbnB1dDtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9NRVNTQUdFU19BVFRSLCBmdWxsSW5wdXQpO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgcmVxdWVzdFByZXZpZXcuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgfVxuXG4gIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvcigpO1xuICBsZXQgcmVzcG9uc2VQcmV2aWV3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBvdXRwdXRSZWNvcmRlZCA9IGZhbHNlO1xuICBsZXQgZnVsbE91dHB1dFJlY29yZGVkID0gZmFsc2U7XG4gIGxldCBnZW5pZVJlY29yZGVkID0gZmFsc2U7XG4gIGxldCBvd25lZFNwYW5FbmRlZCA9IGZhbHNlO1xuICBsZXQgdHJhY2VGaW5hbGl6ZWQgPSBmYWxzZTtcbiAgbGV0IHRyYWNlUGFydFdyaXR0ZW4gPSBmYWxzZTtcbiAgY29uc3QgcGFzc1Rocm91Z2hXcml0ZSA9IHJlcy53cml0ZS5iaW5kKHJlcykgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYm9vbGVhbjtcbiAgY29uc3QgcGFzc1Rocm91Z2hFbmQgPSByZXMuZW5kLmJpbmQocmVzKSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICBjb25zdCBwYXNzVGhyb3VnaEpzb24gPSByZXMuanNvbi5iaW5kKHJlcykgYXMgKGJvZHk/OiB1bmtub3duKSA9PiBleHByZXNzLlJlc3BvbnNlO1xuICBjb25zdCByZWNvcmRPdXRwdXQgPSAoYW5zd2VyOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpZiAob3V0cHV0UmVjb3JkZWQgfHwgIWFuc3dlcikgcmV0dXJuO1xuICAgIHJlc3BvbnNlUHJldmlldyA9IGFuc3dlcjtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBhbnN3ZXIuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgICBvdXRwdXRSZWNvcmRlZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IHJlY29yZEZ1bGxPdXRwdXQgPSAocmVzcG9uc2U6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmIChmdWxsT3V0cHV0UmVjb3JkZWQgfHwgIXJlc3BvbnNlKSByZXR1cm47XG4gICAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKENIQVRfUkVTUE9OU0VfQVRUUiwgcmVzcG9uc2Uuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpKTtcbiAgICBmdWxsT3V0cHV0UmVjb3JkZWQgPSB0cnVlO1xuICB9O1xuICBjb25zdCByZWNvcmRHZW5pZSA9ICh1c2VkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgaWYgKCF1c2VkIHx8IGdlbmllUmVjb3JkZWQpIHJldHVybjtcbiAgICBnZW5pZVJlY29yZGVkID0gdHJ1ZTtcbiAgICB0YXJnZXQuc3Bhbi5zZXRBdHRyaWJ1dGUoQ0hBVF9HRU5JRV9VU0VEX0FUVFIsIHRydWUpO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfR0VOSUVfVEFHX0FUVFIsIFwidHJ1ZVwiKTtcbiAgICBzZXRDaGF0VHJhY2VUYWcodHJhY2VTdGF0ZSwgTUxGTE9XX0dFTklFX1RBRywgdHJ1ZSk7XG4gICAgY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdGFyZ2V0LnNwYW4pLCAoKSA9PiB7XG4gICAgICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZVRhZ3MoeyBbTUxGTE9XX0dFTklFX1RBR106IFwidHJ1ZVwiIH0pO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBmaW5hbGl6ZVRyYWNlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0cmFjZUZpbmFsaXplZCkgcmV0dXJuO1xuICAgIHRyYWNlRmluYWxpemVkID0gdHJ1ZTtcbiAgICBjb25zdCB0YWdzID0gT2JqZWN0LmZyb21FbnRyaWVzKHRyYWNlU3RhdGUudGFncyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRyYWNlU3RhdGUudGFncykge1xuICAgICAgdGFyZ2V0LnNwYW4uc2V0QXR0cmlidXRlKGAke01MRkxPV19UUkFDRV9UQUdfUFJFRklYfSR7bmFtZX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0cmFjZVN0YXRlLnVzZXIpIHtcbiAgICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShVU0VSX1RSQUNFX0FUVFJJQlVURSwgdHJhY2VTdGF0ZS51c2VyKTtcbiAgICB9XG4gICAgY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdGFyZ2V0LnNwYW4pLCAoKSA9PiB7XG4gICAgICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZSh7XG4gICAgICAgIC4uLihPYmplY3Qua2V5cyh0YWdzKS5sZW5ndGggPiAwID8geyB0YWdzIH0gOiB7fSksXG4gICAgICAgIC4uLih0cmFjZVN0YXRlLnVzZXIgPyB7IHVzZXI6IHRyYWNlU3RhdGUudXNlciB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFpc0RhdGFicmlja3NBcHBFbnYoKSkge1xuICAgICAgcGVyc2lzdEFwcE1sZmxvd1RyYWNlSW5mbyh7XG4gICAgICAgIHRyYWNlSWQ6IHRyYWNlU3RhdGUudHJhY2VJZCxcbiAgICAgICAgcmVxdWVzdFRpbWU6IHRyYWNlUmVxdWVzdFRpbWUsXG4gICAgICAgIGV4ZWN1dGlvbkR1cmF0aW9uOiBEYXRlLm5vdygpIC0gdHJhY2VSZXF1ZXN0VGltZSxcbiAgICAgICAgZXJyb3I6IHJlcy5zdGF0dXNDb2RlID49IDUwMCxcbiAgICAgICAgdGFncyxcbiAgICAgICAgLi4uKHRyYWNlU3RhdGUudXNlciA/IHsgdXNlcjogdHJhY2VTdGF0ZS51c2VyIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0UHJldmlldyA/IHsgcmVxdWVzdFByZXZpZXcgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlc3BvbnNlUHJldmlldyA/IHsgcmVzcG9uc2VQcmV2aWV3IH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGVuZE93bmVkU3BhbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRhcmdldC5vd25lZCB8fCBvd25lZFNwYW5FbmRlZCkgcmV0dXJuO1xuICAgIG93bmVkU3BhbkVuZGVkID0gdHJ1ZTtcbiAgICB0YXJnZXQuc3Bhbi5lbmQoKTtcbiAgfTtcblxuICByZXMud3JpdGUgPSAoKGNodW5rOiB1bmtub3duLCAuLi5yZXN0OiB1bmtub3duW10pID0+IHtcbiAgICBpZiAoIXRyYWNlUGFydFdyaXR0ZW4pIHtcbiAgICAgIHRyYWNlUGFydFdyaXR0ZW4gPSB0cnVlO1xuICAgICAgcGFzc1Rocm91Z2hXcml0ZShtbGZsb3dUcmFjZVBhcnQodHJhY2VTdGF0ZS50cmFjZUlkKSk7XG4gICAgfVxuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmV0dXJuIHBhc3NUaHJvdWdoV3JpdGUoY2h1bmssIC4uLnJlc3QpO1xuICB9KSBhcyB0eXBlb2YgcmVzLndyaXRlO1xuXG4gIHJlcy5qc29uID0gKChib2R5PzogdW5rbm93bikgPT4ge1xuICAgIHJlY29yZEZ1bGxPdXRwdXQoc2VyaWFsaXplZChib2R5KSk7XG4gICAgcmVjb3JkR2VuaWUodmFsdWVVc2VzR2VuaWUoYm9keSkpO1xuICAgIHJlY29yZE91dHB1dChhc3Npc3RhbnRUZXh0RnJvbUpzb24oYm9keSkpO1xuICAgIHJldHVybiBwYXNzVGhyb3VnaEpzb24oYm9keSk7XG4gIH0pIGFzIHR5cGVvZiByZXMuanNvbjtcblxuICByZXMuZW5kID0gKChjaHVuaz86IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgcmVjb3JkRnVsbE91dHB1dChjb2xsZWN0b3IucmF3Qm9keSgpKTtcbiAgICByZWNvcmRHZW5pZShjb2xsZWN0b3IudXNlZEdlbmllKCkpO1xuICAgIGZpbmFsaXplVHJhY2UoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhc3NUaHJvdWdoRW5kKGNodW5rLCAuLi5yZXN0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW5kT3duZWRTcGFuKCk7XG4gICAgfVxuICB9KSBhcyB0eXBlb2YgcmVzLmVuZDtcblxuICByZXMub25jZShcImNsb3NlXCIsICgpID0+IHtcbiAgICByZWNvcmRPdXRwdXQoY29sbGVjdG9yLmZpbmlzaCgpKTtcbiAgICByZWNvcmRGdWxsT3V0cHV0KGNvbGxlY3Rvci5yYXdCb2R5KCkpO1xuICAgIHJlY29yZEdlbmllKGNvbGxlY3Rvci51c2VkR2VuaWUoKSk7XG4gICAgZmluYWxpemVUcmFjZSgpO1xuICAgIGVuZE93bmVkU3BhbigpO1xuICB9KTtcblxuICBjb25zdCBjaGF0Q29udGV4dCA9IHRyYWNlXG4gICAgLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdGFyZ2V0LnNwYW4pXG4gICAgLnNldFZhbHVlKENIQVRfVFJBQ0VfU1RBVEVfS0VZLCB0cmFjZVN0YXRlKTtcbiAgY29udGV4dC53aXRoKGNoYXRDb250ZXh0LCAoKSA9PiB7XG4gICAgbmV4dCgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHtAbGluayBjaGF0VHVyblRlbGVtZXRyeU1pZGRsZXdhcmV9IG9uIGEgTWFzdHJhIEV4cHJlc3Mgc3ViLWFwcC5cbiAqXG4gKiBDYWxsIGJlZm9yZSBgTWFzdHJhU2VydmVyLmluaXQoKWAgc28gdGhlIGxheWVyIHNpdHMgYWhlYWQgb2YgdGhlIGFnZW50XG4gKiByb3V0ZXMuIFNhZmUgdG8gY2FsbCB1bmNvbmRpdGlvbmFsbHk6IHdoZW4gbm8gcmVjb3JkaW5nIHRyYWNlciBpcyByZWdpc3RlcmVkLFxuICogdGhlIG1pZGRsZXdhcmUgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaENoYXRUdXJuVGVsZW1ldHJ5KFxuICBhcHA6IGV4cHJlc3MuRXhwcmVzcyxcbiAgb3B0aW9uczogQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zID0ge30sXG4pOiB2b2lkIHtcbiAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IGNoYXRUdXJuVGVsZW1ldHJ5TWlkZGxld2FyZShyZXEsIHJlcywgbmV4dCwgb3B0aW9ucykpO1xuICBsb2dnZXIuaW5mbyhcImNoYXQgdHVybiB0ZWxlbWV0cnkgbWlkZGxld2FyZSBhdHRhY2hlZFwiLCBvcHRpb25zKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -36,21 +36,21 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@databricks/appkit": "0.81.0",
|
|
39
|
-
"@dbx-tools/appkit": "^0.9.
|
|
40
|
-
"@dbx-tools/cache": "^0.9.
|
|
41
|
-
"@dbx-tools/core": "^0.9.
|
|
42
|
-
"@dbx-tools/databricks": "^0.9.
|
|
43
|
-
"@dbx-tools/fs": "^0.9.
|
|
44
|
-
"@dbx-tools/genie": "^0.9.
|
|
45
|
-
"@dbx-tools/model": "^0.9.
|
|
46
|
-
"@dbx-tools/model-protocol": "^0.9.
|
|
47
|
-
"@dbx-tools/path": "^0.9.
|
|
48
|
-
"@dbx-tools/postgres": "^0.9.
|
|
49
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
50
|
-
"@dbx-tools/shared-fs": "^0.9.
|
|
51
|
-
"@dbx-tools/shared-genie": "^0.9.
|
|
52
|
-
"@dbx-tools/shared-mastra": "^0.9.
|
|
53
|
-
"@dbx-tools/shared-model": "^0.9.
|
|
39
|
+
"@dbx-tools/appkit": "^0.9.165",
|
|
40
|
+
"@dbx-tools/cache": "^0.9.165",
|
|
41
|
+
"@dbx-tools/core": "^0.9.165",
|
|
42
|
+
"@dbx-tools/databricks": "^0.9.165",
|
|
43
|
+
"@dbx-tools/fs": "^0.9.165",
|
|
44
|
+
"@dbx-tools/genie": "^0.9.165",
|
|
45
|
+
"@dbx-tools/model": "^0.9.165",
|
|
46
|
+
"@dbx-tools/model-protocol": "^0.9.165",
|
|
47
|
+
"@dbx-tools/path": "^0.9.165",
|
|
48
|
+
"@dbx-tools/postgres": "^0.9.165",
|
|
49
|
+
"@dbx-tools/shared-core": "^0.9.165",
|
|
50
|
+
"@dbx-tools/shared-fs": "^0.9.165",
|
|
51
|
+
"@dbx-tools/shared-genie": "^0.9.165",
|
|
52
|
+
"@dbx-tools/shared-mastra": "^0.9.165",
|
|
53
|
+
"@dbx-tools/shared-model": "^0.9.165",
|
|
54
54
|
"@mastra/ai-sdk": "1.10.5",
|
|
55
55
|
"@mastra/core": "1.71.0",
|
|
56
56
|
"@mastra/express": "1.5.15",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"./package.json": "./package.json"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
|
-
"version": "0.9.
|
|
90
|
+
"version": "0.9.165",
|
|
91
91
|
"types": "./lib/index.d.ts",
|
|
92
92
|
"dbxToolsConfig": {
|
|
93
93
|
"tags": [
|
package/src/telemetry.ts
CHANGED
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
} from "@dbx-tools/shared-core";
|
|
37
37
|
import {
|
|
38
38
|
MLFLOW_TRACE_ID_HEADER,
|
|
39
|
+
MLFLOW_TRACE_PART_TYPE,
|
|
39
40
|
THREAD_ID_HEADER,
|
|
40
41
|
THREAD_ID_QUERY,
|
|
41
42
|
} from "@dbx-tools/shared-mastra";
|
|
@@ -270,6 +271,15 @@ function stampMlflowTraceId(res: express.Response, traceId: string): void {
|
|
|
270
271
|
res.setHeader(MLFLOW_TRACE_ID_HEADER, `tr-${traceId}`);
|
|
271
272
|
}
|
|
272
273
|
|
|
274
|
+
/** Serialize a transient trace-id part for proxies that remove custom headers. */
|
|
275
|
+
function mlflowTracePart(traceId: string): string {
|
|
276
|
+
return `data: ${JSON.stringify({
|
|
277
|
+
type: MLFLOW_TRACE_PART_TYPE,
|
|
278
|
+
data: { traceId: `tr-${traceId}` },
|
|
279
|
+
transient: true,
|
|
280
|
+
})}\n\n`;
|
|
281
|
+
}
|
|
282
|
+
|
|
273
283
|
/** Return one raw prompt when the request is exactly one text-only user message. */
|
|
274
284
|
export function textOnlyChatInput(messages: unknown): string | undefined {
|
|
275
285
|
if (typeof messages === "string") return messages || undefined;
|
|
@@ -713,6 +723,7 @@ export function chatTurnTelemetryMiddleware(
|
|
|
713
723
|
let genieRecorded = false;
|
|
714
724
|
let ownedSpanEnded = false;
|
|
715
725
|
let traceFinalized = false;
|
|
726
|
+
let tracePartWritten = false;
|
|
716
727
|
const passThroughWrite = res.write.bind(res) as (...args: unknown[]) => boolean;
|
|
717
728
|
const passThroughEnd = res.end.bind(res) as (...args: unknown[]) => unknown;
|
|
718
729
|
const passThroughJson = res.json.bind(res) as (body?: unknown) => express.Response;
|
|
@@ -773,6 +784,10 @@ export function chatTurnTelemetryMiddleware(
|
|
|
773
784
|
};
|
|
774
785
|
|
|
775
786
|
res.write = ((chunk: unknown, ...rest: unknown[]) => {
|
|
787
|
+
if (!tracePartWritten) {
|
|
788
|
+
tracePartWritten = true;
|
|
789
|
+
passThroughWrite(mlflowTracePart(traceState.traceId));
|
|
790
|
+
}
|
|
776
791
|
collector.write(chunk);
|
|
777
792
|
return passThroughWrite(chunk, ...rest);
|
|
778
793
|
}) as typeof res.write;
|