ember-scoped-css 0.19.1 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/classic-app-support/helpers/scoped-class.js +1 -0
- package/declarations/lib/path/utils.d.ts +5 -2
- package/declarations/lib/path/utils.d.ts.map +1 -1
- package/dist/cjs/app-css-loader.cjs +5 -14
- package/dist/cjs/babel-plugin.cjs +17 -21
- package/dist/cjs/ember-classic-support.cjs +1 -1
- package/dist/cjs/index.cjs +9 -17
- package/dist/cjs/template-plugin.cjs +12 -17
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/package.json +7 -3
- package/src/build/babel-plugin.js +8 -5
- package/src/build/scoped-css-unplugin.js +1 -0
- package/src/build/template-plugin.js +4 -1
- package/src/lib/path/utils.isRelevantFile.test.ts +7 -19
- package/src/lib/path/utils.js +11 -26
- package/src/runtime/index.ts +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { scopedClass as default } from 'ember-scoped-css';
|
|
@@ -62,10 +62,13 @@ export function withoutExtension(filePath: string): string;
|
|
|
62
62
|
* - URL-absolute path, starting with /
|
|
63
63
|
*
|
|
64
64
|
* @param {string} fileName
|
|
65
|
-
* @param {string[]}
|
|
65
|
+
* @param {{ additionalRoots?: string[]; cwd: string }} options
|
|
66
66
|
* @returns
|
|
67
67
|
*/
|
|
68
|
-
export function isRelevantFile(fileName: string, additionalRoots
|
|
68
|
+
export function isRelevantFile(fileName: string, { additionalRoots, cwd }: {
|
|
69
|
+
additionalRoots?: string[];
|
|
70
|
+
cwd: string;
|
|
71
|
+
}): boolean | undefined;
|
|
69
72
|
export function packageScopedPathToModulePath(packageScopedPath: any): string;
|
|
70
73
|
/**
|
|
71
74
|
* returns the app-module path of the source file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/path/utils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/path/utils.js"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,mCAHW,MAAM,UAShB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qCAHW,MAAM,GACJ,MAAM,CAalB;AAED;;;;;GAKG;AACH,wCAFW,MAAM,WAQhB;AAED;;;;;;;;;;GAUG;AACH,gCAFW,MAAM,WAYhB;AAED;;;;GAIG;AACH,2CAHW,MAAM,UAOhB;AAMD;;;;;;;;;GASG;AACH,yCAJW,MAAM,4BACN;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,uBAkErD;AAED,8EAsCC;AAED;;;;;;GAMG;AACH,iDA4BC;AAED;;;GAGG;AACH,wDAgBC"}
|
|
@@ -98,25 +98,16 @@ function appPath(sourcePath) {
|
|
|
98
98
|
let localPackagerStylePath = packageScopedPathToModulePath(packageRelative);
|
|
99
99
|
return `${name}${localPackagerStylePath}`;
|
|
100
100
|
}
|
|
101
|
-
var CACHE = /* @__PURE__ */ new Set();
|
|
102
|
-
function hasSeen(sourcePath) {
|
|
103
|
-
for (let entry of CACHE) {
|
|
104
|
-
if (sourcePath.startsWith(entry)) {
|
|
105
|
-
return entry;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
101
|
function findWorkspacePath(sourcePath) {
|
|
111
|
-
let
|
|
112
|
-
|
|
113
|
-
|
|
102
|
+
let candidatePath = import_node_path.default.join(sourcePath, "package.json");
|
|
103
|
+
const isWorkspace = import_node_fs.default.existsSync(candidatePath);
|
|
104
|
+
if (isWorkspace) {
|
|
105
|
+
return sourcePath;
|
|
114
106
|
}
|
|
115
107
|
const packageJsonPath = import_find_up.default.sync("package.json", {
|
|
116
108
|
cwd: import_node_path.default.dirname(sourcePath)
|
|
117
109
|
});
|
|
118
110
|
const workspacePath = import_node_path.default.dirname(packageJsonPath);
|
|
119
|
-
CACHE.add(workspacePath);
|
|
120
111
|
return workspacePath;
|
|
121
112
|
}
|
|
122
113
|
var MANIFEST_CACHE = /* @__PURE__ */ new Map();
|
|
@@ -217,4 +208,4 @@ async function app_css_loader_default(code) {
|
|
|
217
208
|
}
|
|
218
209
|
return code;
|
|
219
210
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20gfSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgcmV3cml0ZUNzcyBmcm9tICcuLi9saWIvcmV3cml0ZUNzcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChjb2RlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgY3NzUGF0aCA9IHRoaXMucmVzb3VyY2VQYXRoO1xuXG4gIGlmICghY3NzUGF0aC5zdGFydHNXaXRoKHRoaXMucm9vdENvbnRleHQpKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBjb25zdCBjc3NGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgY29uc3QgaGJzUGF0aCA9IGNzc1BhdGgucmVwbGFjZSgnLmNzcycsICcuaGJzJyk7XG4gIGNvbnN0IGdqc1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmpzJyk7XG4gIGNvbnN0IGhic0V4aXN0cyA9IGV4aXN0c1N5bmMoaGJzUGF0aCk7XG4gIGNvbnN0IGdqc0V4aXN0cyA9IGV4aXN0c1N5bmMoZ2pzUGF0aCk7XG5cbiAgaWYgKGhic0V4aXN0cyB8fCBnanNFeGlzdHMpIHtcbiAgICBjb25zdCBwb3N0Zml4ID0gaGFzaEZyb20oY3NzUGF0aCk7XG4gICAgY29uc3QgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhcbiAgICAgIGNvZGUsXG4gICAgICBwb3N0Zml4LFxuICAgICAgY3NzRmlsZU5hbWUsXG4gICAgICBvcHRpb25zLmxheWVyTmFtZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbkNzcztcbiAgfVxuXG4gIHJldHVybiBjb2RlO1xufVxuIiwgImltcG9ydCBmc1N5bmMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgZmluZFVwIGZyb20gJ2ZpbmQtdXAnO1xuXG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuZXhwb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG4vKipcbiAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgZmlsZVBhdGggZm9ybWF0IGlzLFxuICogdGhpcyB3aWxsIHRyeSB0byByZXR1cm4gdGhlIGNvcnJlY3QgcG9zdGZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIGVtYmVyJ3MgY29tcG9uZW50IGxvY2F0aW9uIGNvbnZlbnRpb25zLFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBwYXRoIGZvciB3aGVyZSB3ZVxuICogZXhwZWN0IHRoZSBDU1MgdG8gbGl2ZS5cbiAqXG4gKiBGb3IgY28tbG9jYXRlZCBzdHJ1Y3R1cmU6XG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKlxuICogRm9yIG5lc3RlZCBjby1sb2NhdGVkIHN0cnVjdHVyZVxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uY3NzXG4gKlxuICogRm9yIFBvZHMgcm91dGVzIHN0cnVjdHVyZVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS90ZW1wbGF0ZS57aGJzLGpzfVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS9zdHlsZXMuY3NzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG5vdCBzdXBwb3J0ZWQ6XG4gKiAgIC0gY29tcG9uZW50cyB3LyBwb2RzIC0tIHRoaXMgaXMgZGVwcmVjYXRlZCBpbiA1LjEwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lIC0gdGhlIGhicywganMsIGdqcywgZ3RzIG9yIHdoYXRldmVyIGNvLWxvY2F0ZWQgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gZXhwZWN0ZWQgY3NzIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1BhdGhGb3IoZmlsZU5hbWUpIHtcbiAgbGV0IHdpdGhvdXRFeHQgPSB3aXRob3V0RXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgbGV0IGNzc1BhdGggPSB3aXRob3V0RXh0ICsgJy5jc3MnO1xuXG4gIGlmIChpc1BvZChmaWxlTmFtZSkpIHtcbiAgICBjc3NQYXRoID0gZmlsZU5hbWVcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmpzJC8sICdzdHlsZXMuY3NzJylcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmhicy8sICdzdHlsZXMuY3NzJyk7XG4gIH1cblxuICByZXR1cm4gY3NzUGF0aDtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHwgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGVuZHMgd2l0aFxuICogLSB0ZW1wbGF0ZS5qc1xuICogLSB0ZW1wbGF0ZS5oYnNcbiAqIC0gc3R5bGVzLmNzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2QoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJyk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMgdGhlIHNhbWUgcGF0aCwgYnV0IHdpdGhvdXQgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEV4dGVuc2lvbihmaWxlUGF0aCkge1xuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG59XG5cbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbSddO1xuXG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbYWRkaXRpb25hbFJvb3RzXVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCBhZGRpdGlvbmFsUm9vdHMpIHtcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8uZW1icm9pZGVyLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLXBhY2thZ2VzLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9hc3NldHMvJykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChcbiAgICAgICAgZmlsZU5hbWUuZW5kc1dpdGgoXG4gICAgICAgICAgJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwL2Fzc2V0cy90ZXN0cy5qcycsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgbGV0IG91cldvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGN3ZCk7XG5cbiAgaWYgKHdvcmtzcGFjZSAhPT0gb3VyV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGxvY2FsID0gZmlsZU5hbWUucmVwbGFjZSh3b3Jrc3BhY2UsICcnKTtcbiAgbGV0IFssIC4uLnBhcnRzXSA9IGxvY2FsLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFsnL2NvbXBvbmVudHMvJywgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSldO1xuXG4gIGlmICghcm9vdHMuc29tZSgocm9vdCkgPT4gZmlsZU5hbWUuaW5jbHVkZXMocm9vdCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICBpZiAoaXNQb2QocGFja2FnZVJlbGF0aXZlKSkge1xuICAgIC8qKlxuICAgICAqIEZvciBwb2RzLCB3ZSBjaG9wIG9mZiB0aGUgd2hvbGUgZmlsZSwgYW5kIHVzZSB0aGUgZGlyIG5hbWUgYXMgdGhlIFwibW9kdWxlUGF0aFwiXG4gICAgICovXG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShgL2FwcC9gLCBgL2ApO1xuXG4gIC8qKlxuICAgKiBhbHNvIGFsc28sIHdlIGtub3cgdGhhdCB0aGUgcmUtd3JpdHRlbiBhcHAgc3RydWN0dXJlIGluIGVtYnJvaWRlckB2M1xuICAgKiBpcyBleHRyYW5lb3VzLCBhbmQgd2UgY2FuIGNvbGxhcHNlIGl0XG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShcbiAgICBgL25vZGVfbW9kdWxlcy8uZW1icm9pZGVyL3Jld3JpdHRlbi1hcHAvYCxcbiAgICAnLycsXG4gICk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgc2VlbiA9IGhhc1NlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7XG4gICAgY3dkOiBwYXRoLmRpcm5hbWUoc291cmNlUGF0aCksXG4gIH0pO1xuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBDQUNIRS5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHBhY2thZ2UuanNvbiNuYW1lIGZvciBhIGdpdmVuIHNvdXJjZVBhdGhcbiAqL1xuZnVuY3Rpb24gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcblxuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3RpbmcubmFtZTtcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbi5uYW1lO1xufVxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5cbmV4cG9ydCBjb25zdCBoYXNoRnJvbU1vZHVsZVBhdGggPSBoYXNoO1xuIiwgImltcG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBhcHBQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbUFic29sdXRlUGF0aChhYnNvbHV0ZVBhdGgpIHtcbiAgLyoqXG4gICAqIFRoZSB3aG9sZSBvZiBgYXBwUGF0aGAgdWx0aW1hdGVseSB0cmFuc2Zvcm1zIHRoZSBgYWJzb2x1dGVQYXRoYFxuICAgKiBpbnRvIHRoZSBleGFjdCBzdHJpbmcgdGhhdCBmb2xrcyB3aWxsIHBhc3MgdG8gYHJlbGF0aXZlUGF0aGBcbiAgICogYXQgcnVudGltZS5cbiAgICovXG4gIGNvbnN0IG1vZHVsZVBhdGggPSBhcHBQYXRoKGFic29sdXRlUGF0aCk7XG4gIGNvbnN0IHBvc3RmaXggPSBoYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBwb3N0Zml4O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLGtCQUEyQjtBQUMzQixJQUFBQyxvQkFBaUI7OztBQ0ZqQixxQkFBbUI7QUFDbkIsdUJBQWlCO0FBRWpCLHFCQUFtQjs7O0FDSG5CLHlCQUFnQjtBQWdCVCxTQUFTLEtBQUssWUFBWTtBQUMvQixTQUFPLFVBQU0sbUJBQUFDLFNBQUksVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDO0FBQzdDO0FBR08sSUFBTSxxQkFBcUI7OztBQ2hCM0IsU0FBUyxxQkFBcUIsY0FBYztBQU1qRCxRQUFNLGFBQWEsUUFBUSxZQUFZO0FBQ3ZDLFFBQU0sVUFBVSxLQUFLLFVBQVU7QUFFL0IsU0FBTztBQUNUOzs7QUZHTyxTQUFTLFNBQVMsVUFBVTtBQUNqQyxNQUFJLFNBQVMsV0FBVyxHQUFHLEdBQUc7QUFDNUIsV0FBTyxxQkFBcUIsUUFBUTtBQUFBLEVBQ3RDO0FBRUEsU0FBTyxtQkFBbUIsUUFBUTtBQUNwQztBQTRDTyxTQUFTLGNBQWMsVUFBVTtBQUN0QyxNQUFJLFNBQVMsU0FBUyxjQUFjLEdBQUc7QUFDckMsV0FBTztBQUFBLEVBQ1Q7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QU07QUFDbkMsUUFBTSxVQUFVLEtBQUssV0FBVztBQUNoQyxRQUFNLFVBQVUsS0FBSztBQUVyQixNQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLGtCQUFBQyxRQUFLLFNBQVMsT0FBTztBQUV6QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUM5QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUM3QyxRQUFNLGdCQUFZLDRCQUFXLE9BQU87QUFDcEMsUUFBTSxnQkFBWSw0QkFBVyxPQUFPO0FBRXBDLE1BQUksYUFBYSxXQUFXO0FBQzFCLFVBQU0sVUFBVSxTQUFTLE9BQU87QUFDaEMsVUFBTSxlQUFlO0FBQUEsTUFDbkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBUTtBQUFBLElBQ1Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25vZGVfZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJtZDUiLCAicGF0aCIsICJmaW5kVXAiLCAiZnNTeW5jIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiXQp9Cg==
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20gfSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgcmV3cml0ZUNzcyBmcm9tICcuLi9saWIvcmV3cml0ZUNzcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChjb2RlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgY3NzUGF0aCA9IHRoaXMucmVzb3VyY2VQYXRoO1xuXG4gIGlmICghY3NzUGF0aC5zdGFydHNXaXRoKHRoaXMucm9vdENvbnRleHQpKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBjb25zdCBjc3NGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgY29uc3QgaGJzUGF0aCA9IGNzc1BhdGgucmVwbGFjZSgnLmNzcycsICcuaGJzJyk7XG4gIGNvbnN0IGdqc1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmpzJyk7XG4gIGNvbnN0IGhic0V4aXN0cyA9IGV4aXN0c1N5bmMoaGJzUGF0aCk7XG4gIGNvbnN0IGdqc0V4aXN0cyA9IGV4aXN0c1N5bmMoZ2pzUGF0aCk7XG5cbiAgaWYgKGhic0V4aXN0cyB8fCBnanNFeGlzdHMpIHtcbiAgICBjb25zdCBwb3N0Zml4ID0gaGFzaEZyb20oY3NzUGF0aCk7XG4gICAgY29uc3QgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhcbiAgICAgIGNvZGUsXG4gICAgICBwb3N0Zml4LFxuICAgICAgY3NzRmlsZU5hbWUsXG4gICAgICBvcHRpb25zLmxheWVyTmFtZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbkNzcztcbiAgfVxuXG4gIHJldHVybiBjb2RlO1xufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5cbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8uZW1icm9pZGVyLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLXBhY2thZ2VzLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9hc3NldHMvJykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChcbiAgICAgICAgZmlsZU5hbWUuZW5kc1dpdGgoXG4gICAgICAgICAgJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwL2Fzc2V0cy90ZXN0cy5qcycsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7XG4gICAgY3dkOiBwYXRoLmRpcm5hbWUoc291cmNlUGF0aCksXG4gIH0pO1xuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcbmltcG9ydCB7IGFwcFBhdGggfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgY29uc3QgcG9zdGZpeCA9IGhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBvc3RmaXg7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiByZXdyaXRlU2VsZWN0b3Ioc2VsLCBwb3N0Zml4KSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzZWxlY3RvcnMpID0+IHtcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IudmFsdWUgKz0gJ18nICsgcG9zdGZpeDtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aChcbiAgICAgICAgICBwYXJzZXIudGFnKHsgdmFsdWU6IHNlbGVjdG9yLnZhbHVlIH0pLFxuICAgICAgICAgIHBhcnNlci5jbGFzc05hbWUoeyB2YWx1ZTogcG9zdGZpeCB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSA6Z2xvYmFsXG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3BzZXVkbycgJiYgc2VsZWN0b3IudmFsdWUgPT09ICc6Z2xvYmFsJykge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aCguLi5zZWxlY3Rvci5ub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUsIGxheWVyTmFtZSkge1xuICBjb25zdCBsYXllck5hbWVXaXRoRGVmYXVsdCA9IGxheWVyTmFtZSA/PyAnY29tcG9uZW50cyc7XG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJyAmJiAhaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHtcbiAgICAgIG5vZGUuc2VsZWN0b3IgPSByZXdyaXRlU2VsZWN0b3Iobm9kZS5zZWxlY3RvciwgcG9zdGZpeCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCByZXdyaXR0ZW5Dc3MgPSBhc3QudG9TdHJpbmcoKTtcblxuICBpZiAoIWxheWVyTmFtZVdpdGhEZWZhdWx0KSB7XG4gICAgcmV0dXJuIGAvKiAke2ZpbGVOYW1lfSAqL1xcbiR7cmV3cml0dGVuQ3NzfVxcbmA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGAvKiAke2ZpbGVOYW1lfSAqL1xcbkBsYXllciAke2xheWVyTmFtZVdpdGhEZWZhdWx0fSB7XFxuXFxuYCArXG4gICAgcmV3cml0dGVuQ3NzICtcbiAgICAnXFxufVxcbidcbiAgKTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsSUFBQUEsa0JBQTJCO0FBQzNCLElBQUFDLG9CQUFpQjs7O0FDRGpCLHFCQUFtQjtBQUNuQix1QkFBaUI7QUFFakIscUJBQW1COzs7QUNKbkIseUJBQWdCO0FBZ0JULFNBQVMsS0FBSyxZQUFZO0FBQy9CLFNBQU8sVUFBTSxtQkFBQUMsU0FBSSxVQUFVLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFDN0M7QUFHTyxJQUFNLHFCQUFxQjs7O0FDaEIzQixTQUFTLHFCQUFxQixjQUFjO0FBTWpELFFBQU0sYUFBYSxRQUFRLFlBQVk7QUFDdkMsUUFBTSxVQUFVLEtBQUssVUFBVTtBQUUvQixTQUFPO0FBQ1Q7OztBRklPLFNBQVMsU0FBUyxVQUFVO0FBQ2pDLE1BQUksU0FBUyxXQUFXLEdBQUcsR0FBRztBQUM1QixXQUFPLHFCQUFxQixRQUFRO0FBQUEsRUFDdEM7QUFFQSxTQUFPLG1CQUFtQixRQUFRO0FBQ3BDO0FBNENPLFNBQVMsY0FBYyxVQUFVO0FBQ3RDLE1BQUksU0FBUyxTQUFTLGNBQWMsR0FBRztBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sU0FBUyxTQUFTLGFBQWEsS0FBSyxTQUFTLFNBQVMsY0FBYztBQUM3RTtBQWFPLFNBQVMsTUFBTSxVQUFVO0FBQzlCLE1BQUksU0FBUyxTQUFTLGNBQWMsR0FBRztBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksY0FBYyxRQUFRLEdBQUc7QUFDM0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFNBQVMsU0FBUyxZQUFZO0FBQ3ZDO0FBNEZPLFNBQVMs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R0FBRztBQUVyRCxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGtCQUFrQixNQUFNO0FBQy9CLFFBQU0sU0FBUyxLQUFLO0FBRXBCLE1BQUksQ0FBQyxPQUFRLFFBQU87QUFDcEIsTUFBSSxPQUFPLFNBQVMsWUFBWSxPQUFPLFNBQVMsWUFBYSxRQUFPO0FBRXBFLFNBQU8sa0JBQWtCLE1BQU07QUFDakM7QUFFZSxTQUFSLFdBQTRCLEtBQUssU0FBUyxVQUFVLFdBQVc7QUFDcEUsUUFBTSx1QkFBdUIsYUFBYTtBQUMxQyxRQUFNLE1BQU0sZUFBQUMsUUFBUSxNQUFNLEdBQUc7QUFFN0IsTUFBSSxLQUFLLENBQUMsU0FBUztBQUNqQixRQUFJLEtBQUssU0FBUyxVQUFVLENBQUMsa0JBQWtCLElBQUksR0FBRztBQUNwRCxXQUFLLFdBQVcsZ0JBQWdCLEtBQUssVUFBVSxPQUFPO0FBQUEsSUFDeEQ7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLGVBQWUsSUFBSSxTQUFTO0FBRWxDLE1BQUksQ0FBQyxzQkFBc0I7QUFDekIsV0FBTyxNQUFNLFFBQVE7QUFBQSxFQUFRLFlBQVk7QUFBQTtBQUFBLEVBQzNDO0FBRUEsU0FDRSxNQUFNLFFBQVE7QUFBQSxTQUFlLG9CQUFvQjtBQUFBO0FBQUEsSUFDakQsZUFDQTtBQUVKOzs7QUpyREEsZUFBTyx1QkFBd0IsTUFBTTtBQUNuQyxRQUFNLFVBQVUsS0FBSyxXQUFXO0FBQ2hDLFFBQU0sVUFBVSxLQUFLO0FBRXJCLE1BQUksQ0FBQyxRQUFRLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQWMsa0JBQUFDLFFBQUssU0FBUyxPQUFPO0FBRXpDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxNQUFNO0FBQzlDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxLQUFLO0FBQzdDLFFBQU0sZ0JBQVksNEJBQVcsT0FBTztBQUNwQyxRQUFNLGdCQUFZLDRCQUFXLE9BQU87QUFFcEMsTUFBSSxhQUFhLFdBQVc7QUFDMUIsVUFBTSxVQUFVLFNBQVMsT0FBTztBQUNoQyxVQUFNLGVBQWU7QUFBQSxNQUNuQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbm9kZV9mcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm1kNSIsICJwYXRoIiwgImZzU3luYyIsICJmaW5kVXAiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCJdCn0K
|
|
@@ -74,6 +74,8 @@ function getClassesTagsFromCss(css) {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// src/lib/path/utils.js
|
|
77
|
+
var import_node_assert = __toESM(require("node:assert"), 1);
|
|
78
|
+
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
77
79
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
78
80
|
var import_find_up = __toESM(require("find-up"), 1);
|
|
79
81
|
|
|
@@ -114,7 +116,7 @@ function withoutExtension(filePath) {
|
|
|
114
116
|
}
|
|
115
117
|
var IRRELEVANT_PATHS = ["node_modules/.pnpm"];
|
|
116
118
|
var UNSUPPORTED_DIRECTORIES = /* @__PURE__ */ new Set(["tests"]);
|
|
117
|
-
function isRelevantFile(fileName, additionalRoots) {
|
|
119
|
+
function isRelevantFile(fileName, { additionalRoots, cwd }) {
|
|
118
120
|
if (fileName.startsWith("/@embroider")) return false;
|
|
119
121
|
if (IRRELEVANT_PATHS.some((i) => fileName.includes(i))) return false;
|
|
120
122
|
if (fileName.includes("/node_modules/")) {
|
|
@@ -134,7 +136,7 @@ function isRelevantFile(fileName, additionalRoots) {
|
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
let workspace = findWorkspacePath(fileName);
|
|
137
|
-
|
|
139
|
+
(0, import_node_assert.default)(cwd, `cwd was not passed to isRelevantFile`);
|
|
138
140
|
let ourWorkspace = findWorkspacePath(cwd);
|
|
139
141
|
if (workspace !== ourWorkspace) {
|
|
140
142
|
return false;
|
|
@@ -159,25 +161,16 @@ function packageScopedPathToModulePath(packageScopedPath) {
|
|
|
159
161
|
let localPackagerStylePath = import_node_path.default.join(parsed.dir, parsed.name);
|
|
160
162
|
return localPackagerStylePath;
|
|
161
163
|
}
|
|
162
|
-
var CACHE = /* @__PURE__ */ new Set();
|
|
163
|
-
function hasSeen(sourcePath) {
|
|
164
|
-
for (let entry of CACHE) {
|
|
165
|
-
if (sourcePath.startsWith(entry)) {
|
|
166
|
-
return entry;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
164
|
function findWorkspacePath(sourcePath) {
|
|
172
|
-
let
|
|
173
|
-
|
|
174
|
-
|
|
165
|
+
let candidatePath = import_node_path.default.join(sourcePath, "package.json");
|
|
166
|
+
const isWorkspace = import_node_fs.default.existsSync(candidatePath);
|
|
167
|
+
if (isWorkspace) {
|
|
168
|
+
return sourcePath;
|
|
175
169
|
}
|
|
176
170
|
const packageJsonPath = import_find_up.default.sync("package.json", {
|
|
177
171
|
cwd: import_node_path.default.dirname(sourcePath)
|
|
178
172
|
});
|
|
179
173
|
const workspacePath = import_node_path.default.dirname(packageJsonPath);
|
|
180
|
-
CACHE.add(workspacePath);
|
|
181
174
|
return workspacePath;
|
|
182
175
|
}
|
|
183
176
|
|
|
@@ -293,16 +286,19 @@ function rewriteHbs(hbs, classes, tags, postfix) {
|
|
|
293
286
|
}
|
|
294
287
|
|
|
295
288
|
// src/build/babel-plugin.js
|
|
296
|
-
function _isRelevantFile(state) {
|
|
289
|
+
function _isRelevantFile(state, cwd) {
|
|
297
290
|
let fileName = state.file.opts.filename;
|
|
298
291
|
let additionalRoots = state.opts?.additionalRoots;
|
|
299
|
-
return isRelevantFile(fileName,
|
|
292
|
+
return isRelevantFile(fileName, {
|
|
293
|
+
additionalRoots,
|
|
294
|
+
cwd
|
|
295
|
+
});
|
|
300
296
|
}
|
|
301
|
-
var babel_plugin_default = () => {
|
|
297
|
+
var babel_plugin_default = (env, options, workingDirectory) => {
|
|
302
298
|
return {
|
|
303
299
|
visitor: {
|
|
304
300
|
ImportDeclaration(path2, state) {
|
|
305
|
-
if (!_isRelevantFile(state)) {
|
|
301
|
+
if (!_isRelevantFile(state, workingDirectory)) {
|
|
306
302
|
return;
|
|
307
303
|
}
|
|
308
304
|
if (path2.node.source.value === "ember-scoped-css") {
|
|
@@ -330,7 +326,7 @@ var babel_plugin_default = () => {
|
|
|
330
326
|
}
|
|
331
327
|
},
|
|
332
328
|
CallExpression(path2, state) {
|
|
333
|
-
if (!_isRelevantFile(state)) {
|
|
329
|
+
if (!_isRelevantFile(state, workingDirectory)) {
|
|
334
330
|
return;
|
|
335
331
|
}
|
|
336
332
|
const node = path2.node;
|
|
@@ -372,4 +368,4 @@ var babel_plugin_default = () => {
|
|
|
372
368
|
}
|
|
373
369
|
};
|
|
374
370
|
};
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQge1xuICBjc3NQYXRoRm9yLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxuICBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aCxcbn0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVIYnMgZnJvbSAnLi4vbGliL3Jld3JpdGVIYnMuanMnO1xuXG5mdW5jdGlvbiBfaXNSZWxldmFudEZpbGUoc3RhdGUpIHtcbiAgbGV0IGZpbGVOYW1lID0gc3RhdGUuZmlsZS5vcHRzLmZpbGVuYW1lO1xuICBsZXQgYWRkaXRpb25hbFJvb3RzID0gc3RhdGUub3B0cz8uYWRkaXRpb25hbFJvb3RzO1xuXG4gIHJldHVybiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgYWRkaXRpb25hbFJvb3RzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gZW52IC0gYmFiZWwgcGx1Z2luIGVudiwgZW52LnR5cGVzIGlzIG1vc3QgY29tbW9ubHkgdXNlZCAoZXNwIGluIFRTKVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSB0aGUgb3B0aW9ucyBmb3Igc2NvcGVkLWNzcyAtLSB0aGlzIGlzIGFsc28gYXZhaWxhYmxlIGluIGVhY2ggdmlzaXRvcidzIHN0YXRlLm9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JraW5nRGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0ICgvKiBlbnYsIG9wdGlvbnMsIHdvcmtpbmdEaXJlY3RvcnkgKi8pID0+IHtcbiAgLyoqXG4gICAqIC0gVGhpcyBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJtZWRpYXRlIG91dHB1dCBvZiB0aGUgb2xkIFJFR0VYLWJhc2VkIDx0ZW1wbGF0ZT4gdHJhbnNmb3JtOlxuICAgKiAgIGBgYFxuICAgKiAgIGltcG9ydCB7IHNjb3BlZENsYXNzIH0gZnJvbSAnZW1iZXItc2NvcGVkLWNzcyc7XG4gICAqXG4gICAqICAgX19HTElNTUVSX1RFTVBMQVRFKGBcbiAgICogICAgIG9yaWdpbmFsIDx0ZW1wbGF0ZT4gaW5uYXJkcyBoZXJlXG4gICAqICAgYCk7XG4gICAqICAgYGBgXG4gICAqICAgLSB0aGUgaW1wb3J0IGlzIG9wdGlvbmFsLCB0aG91Z2gsIHJlcXVpcmVkIGZvciB0eXBlLWNoZWNraW5nIGluIGd0cyAoc28gd2UgZG9uJ3QgbWVzcyB3aXRoIGdsb2JhbHMpXG4gICAqICAgLSB0aGUgYmFiZWwtcGx1Z2luLWVtYmVyLXRlbXBsYXRlLWNvbXBpbGF0aW9uIHN0ZXAgaGFzIG5vdCBydW4geWV0LFxuICAgKiAgICAgZWxzZSB3ZSdkIHNlZSBwcmVjb21waWxlVGVtcGxhdGUgYW5kIHNldENvbXBvbmVudFRlbXBsYXRlIChhbmQgbW9yZSBpbXBvcnRzKVxuICAgKlxuICAgKiAgIC0gbm90ZSB0aGF0IGluIGVtYmVyLXRlbXBsYXRlLWltcG9ydHMnIGltcGxlbWVudGF0aW9uLCB0aGUgZmlsZSBjaGFuZ2VzXG4gICAqICAgICBhZnRlciBgSW1wb3J0RGVjbGFyYXRpb25gIHZpc2l0b3JzIGhhdmUgcmFuLCBhbmQgYnkgdGhlIHRpbWUgd2Ugc2VlXG4gICAqICAgICBDYWxsRXhwcmVzc2lvbnMsIHdlIGhhdmUgdGhlIGZhbWlsaWFyIGBzZXRDb21wb25lbnRUZW1wbGF0ZWBcbiAgICovXG4gIHJldHVybiB7XG4gICAgdmlzaXRvcjoge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb24ocGF0aCwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFfaXNSZWxldmFudEZpbGUoc3RhdGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09ICdlbWJlci1zY29wZWQtY3NzJykge1xuICAgICAgICAgIGxldCBzcGVjaWZpZXIgPSBwYXRoLm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguaW1wb3J0ZWQubmFtZSA9PT0gJ3Njb3BlZENsYXNzJyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcikge1xuICAgICAgICAgICAgc3RhdGUuZmlsZS5vcHRzLmltcG9ydGVkU2NvcGVkQ2xhc3MgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmxvY2FsLm5hbWUgIT09ICdzY29wZWRDbGFzcycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBzY29wZWRDbGFzcyBpbXBvcnQgaXMgYSBwc3VlZG8taGVscGVyLCBhbmQgbWF5IG5vdCBiZSByZW5hbWVkIGFzIGl0IGlzIHJlbW92ZWQgYXQgYnVpbGQgdGltZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDYWxsRXhwcmVzc2lvbihwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIV9pc1JlbGV2YW50RmlsZShzdGF0ZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlID0gcGF0aC5ub2RlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAncHJlY29tcGlsZVRlbXBsYXRlJyB8fFxuICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdoYnMnXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGNoZWNrIGlmIGNzcyBleGlzdHNcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZUZpbGVOYW1lID1cbiAgICAgICAgICAgICdhcHAnICtcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZS5pbmRleE9mKCcvJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gbm9kZVBhdGguam9pbihcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5yb290LFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgbGV0IGNzc1BhdGggPSBjc3NQYXRoRm9yKGZpbGVOYW1lKTtcblxuICAgICAgICAgIGlmIChleGlzdHNTeW5jKGNzc1BhdGgpKSB7XG4gICAgICAgICAgICBjb25zdCBjc3MgPSByZWFkRmlsZVN5bmMoY3NzUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY2xhc3NlcywgdGFncyB9ID0gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcyk7XG5cbiAgICAgICAgICAgIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgoXG4gICAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gaGFzaEZyb21Nb2R1bGVQYXRoKGxvY2FsUGFja2FnZXJTdHlsZVBhdGgpO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ1RlbXBsYXRlTGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdyA9IHJld3JpdGVIYnMoXG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLmNvb2tlZCA9XG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJyB8fFxuICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS52YWx1ZSA9IHJld3JpdGVIYnMoXG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgIHBvc3RmaXgsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHRhZ3MgPSBuZXcgU2V0KCk7XG5cbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhub2RlLnNlbGVjdG9yLCBjbGFzc2VzLCB0YWdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNsYXNzZXMsIHRhZ3MgfTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iLCAiaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5cbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nW119IFthZGRpdGlvbmFsUm9vdHNdXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIGFkZGl0aW9uYWxSb290cykge1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnL0BlbWJyb2lkZXInKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoSVJSRUxFVkFOVF9QQVRIUy5zb21lKChpKSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhpKSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAvLyBpZiBhIGZpbGUgaXMgbm90IHRoZSBlbWJyb2lkZXIgY2FjaGUgZGlyZWN0b3J5XG4gICAgLy8gYW5kIGlzIGluIG5vZGVfbW9kdWxlcywgc2tpcCBpdC5cbiAgICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tcGFja2FnZXMvJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSB0aGUgYnVuZGxlZCBmaWxlcy5cbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwL2Fzc2V0cy8nKSkge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZCwgbmV2ZXIgd2lsbCBiZVxuICAgICAgaWYgKFxuICAgICAgICBmaWxlTmFtZS5lbmRzV2l0aChcbiAgICAgICAgICAnL25vZGVfbW9kdWxlcy8uZW1icm9pZGVyL3Jld3JpdHRlbi1hcHAvYXNzZXRzL3Rlc3RzLmpzJyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlYWxseSwgd2UgbmV2ZXIgZ2V0IGhlcmUgLS0gaW5kaWNhdGVzIHdlJ3JlIG5vdCBmaWx0ZXJpbmcgZWZmZWN0aXZlbHkgaW4gYmFiZWxcbiAgICAgIC8vIE5PVEU6IGlmIHdlIGdldCBoZXJlLCB3ZSdyZSB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBhIGZpbGUgdG9vIGxhdGUuXG4gICAgICAvLyAgICAgICB3ZSBuZWVkIFNjb3BlZENTUyB0byBvcGVyYXRlIGFzIGNsb3NlIHRvIG9yaWdpbmFsIHNvdXJjZSBhcyBwb3NzaWJsZSAtLSBub3Qgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG4gIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbmNvbnN0IENBQ0hFID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEZvciBhIGdpdmVuIHNvdXJjZSBwYXRoLCBpZiB3ZSBoYXZlIHNlZW4gYVxuICogc291cmNlIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LFxuICogZmluZCB0aGF0IHdvcmtzcGFjZSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC5cbiAqL1xuZnVuY3Rpb24gaGFzU2Vlbihzb3VyY2VQYXRoKSB7XG4gIGZvciAobGV0IGVudHJ5IG9mIENBQ0hFKSB7XG4gICAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChlbnRyeSkpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgc291cmNlIHBhdGggeWV0XG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIFwic2VlblwiIHdvcmtzcGFjZSBjYWNoZSxcbiAqIHNvIHRoYXQgd2UgZG9uJ3QgaGl0IHRoZSBmaWxlIHN5c3RlbSB0b28gb2Z0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pIHtcbiAgbGV0IHN0YWNrID0gW107XG4gIC8vIHNjb3BlZC1jbGFzcyBpcyBhIGdsb2JhbCB3ZSBhbGxvdyBpbiBoYnNcbiAgLy8gc2NvcGVkQ2xhc3MgaXMgaW1wb3J0YWJsZSwgYW5kIHdlJ2xsIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVuYW1lIGl0XG4gIGxldCBzY29wZWRDbGFzc0NhbmRpZGF0ZXMgPSBbJ3Njb3BlZC1jbGFzcycsICdzY29wZWRDbGFzcyddO1xuXG4gIGZ1bmN0aW9uIGlzU2NvcGVkQ2xhc3Moc3RyKSB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzY29wZWRDbGFzc0NhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IHN0cik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdBdHRyTm9kZScpIHtcbiAgICAgICAgICBwYXJlbnQucXVvdGVUeXBlID0gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgU3ViRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzU2NvcGVkQ2xhc3Mobm9kZS5wYXRoPy5vcmlnaW5hbCkgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4KSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcblxuICByZWNhc3QudHJhdmVyc2UoYXN0LCB0ZW1wbGF0ZVBsdWdpbih7IGNsYXNzZXMsIHRhZ3MsIHBvc3RmaXggfSkpO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbY2xhc3Nlc0luQ3NzXVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKGNsYXNzTmFtZSwgcG9zdGZpeCwgY2xhc3Nlc0luQ3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgY29uc3QgcmVuYW1lZENsYXNzZXMgPSBjbGFzc2VzXG4gICAgLmZpbHRlcigoYykgPT4gYylcbiAgICAubWFwKChjKSA9PiBjLnRyaW0oKSlcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBpZiAoIWNsYXNzZXNJbkNzcyB8fCBjbGFzc2VzSW5Dc3MuaGFzKGMpKSB7XG4gICAgICAgIGlmIChjLmVuZHNXaXRoKHBvc3RmaXgpKSByZXR1cm4gYztcblxuICAgICAgICByZXR1cm4gYyArICdfJyArIHBvc3RmaXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcblxuICBjb25zdCByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcyA9IGNsYXNzTmFtZS5yZXBsYWNlKFxuICAgIGNsYXNzTmFtZS50cmltU3RhcnQoKS50cmltRW5kKCksXG4gICAgcmVuYW1lZENsYXNzZXMsXG4gICk7XG5cbiAgcmV0dXJuIHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUF5QztBQUN6QyxrQkFBcUI7OztBQ0RyQixxQkFBb0I7QUFDcEIscUNBQW1COzs7QUNESixTQUFSLGVBQWdDLE1BQU0sTUFBTTtBQUNqRCxRQUFNLFNBQVMsS0FBSztBQUVwQixNQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLE1BQUksT0FBTyxT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
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQge1xuICBjc3NQYXRoRm9yLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxuICBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aCxcbn0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVIYnMgZnJvbSAnLi4vbGliL3Jld3JpdGVIYnMuanMnO1xuXG5mdW5jdGlvbiBfaXNSZWxldmFudEZpbGUoc3RhdGUsIGN3ZCkge1xuICBsZXQgZmlsZU5hbWUgPSBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG4gIGxldCBhZGRpdGlvbmFsUm9vdHMgPSBzdGF0ZS5vcHRzPy5hZGRpdGlvbmFsUm9vdHM7XG5cbiAgcmV0dXJuIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7XG4gICAgYWRkaXRpb25hbFJvb3RzLFxuICAgIGN3ZCxcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGVudiAtIGJhYmVsIHBsdWdpbiBlbnYsIGVudi50eXBlcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgKGVzcCBpbiBUUylcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gdGhlIG9wdGlvbnMgZm9yIHNjb3BlZC1jc3MgLS0gdGhpcyBpcyBhbHNvIGF2YWlsYWJsZSBpbiBlYWNoIHZpc2l0b3IncyBzdGF0ZS5vcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya2luZ0RpcmVjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8qKlxuICAgKiAtIFRoaXMgY2FuIHJlY2VpdmUgdGhlIGludGVybWVkaWF0ZSBvdXRwdXQgb2YgdGhlIG9sZCBSRUdFWC1iYXNlZCA8dGVtcGxhdGU+IHRyYW5zZm9ybTpcbiAgICogICBgYGBcbiAgICogICBpbXBvcnQgeyBzY29wZWRDbGFzcyB9IGZyb20gJ2VtYmVyLXNjb3BlZC1jc3MnO1xuICAgKlxuICAgKiAgIF9fR0xJTU1FUl9URU1QTEFURShgXG4gICAqICAgICBvcmlnaW5hbCA8dGVtcGxhdGU+IGlubmFyZHMgaGVyZVxuICAgKiAgIGApO1xuICAgKiAgIGBgYFxuICAgKiAgIC0gdGhlIGltcG9ydCBpcyBvcHRpb25hbCwgdGhvdWdoLCByZXF1aXJlZCBmb3IgdHlwZS1jaGVja2luZyBpbiBndHMgKHNvIHdlIGRvbid0IG1lc3Mgd2l0aCBnbG9iYWxzKVxuICAgKiAgIC0gdGhlIGJhYmVsLXBsdWdpbi1lbWJlci10ZW1wbGF0ZS1jb21waWxhdGlvbiBzdGVwIGhhcyBub3QgcnVuIHlldCxcbiAgICogICAgIGVsc2Ugd2UnZCBzZWUgcHJlY29tcGlsZVRlbXBsYXRlIGFuZCBzZXRDb21wb25lbnRUZW1wbGF0ZSAoYW5kIG1vcmUgaW1wb3J0cylcbiAgICpcbiAgICogICAtIG5vdGUgdGhhdCBpbiBlbWJlci10ZW1wbGF0ZS1pbXBvcnRzJyBpbXBsZW1lbnRhdGlvbiwgdGhlIGZpbGUgY2hhbmdlc1xuICAgKiAgICAgYWZ0ZXIgYEltcG9ydERlY2xhcmF0aW9uYCB2aXNpdG9ycyBoYXZlIHJhbiwgYW5kIGJ5IHRoZSB0aW1lIHdlIHNlZVxuICAgKiAgICAgQ2FsbEV4cHJlc3Npb25zLCB3ZSBoYXZlIHRoZSBmYW1pbGlhciBgc2V0Q29tcG9uZW50VGVtcGxhdGVgXG4gICAqL1xuICByZXR1cm4ge1xuICAgIHZpc2l0b3I6IHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghX2lzUmVsZXZhbnRGaWxlKHN0YXRlLCB3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoLm5vZGUuc291cmNlLnZhbHVlID09PSAnZW1iZXItc2NvcGVkLWNzcycpIHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyID0gcGF0aC5ub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmltcG9ydGVkLm5hbWUgPT09ICdzY29wZWRDbGFzcycsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpZXIpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5pbXBvcnRlZFNjb3BlZENsYXNzID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNwZWNpZmllci5sb2NhbC5uYW1lICE9PSAnc2NvcGVkQ2xhc3MnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgc2NvcGVkQ2xhc3MgaW1wb3J0IGlzIGEgcHN1ZWRvLWhlbHBlciwgYW5kIG1heSBub3QgYmUgcmVuYW1lZCBhcyBpdCBpcyByZW1vdmVkIGF0IGJ1aWxkIHRpbWUuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogT25seSBpbiBzdHJpY3QgbW9kZSwgZG8gd2UgY2FyZSBhYm91dCByZW1vbmluZyB0aGUgc2NvcGUgYmFnIHJlZmVyZW5jZVxuICAgICAgICovXG4gICAgICBPYmplY3RQcm9wZXJ0eShwYXRoLCBzdGF0ZSkge1xuICAgICAgICBpZiAoIXN0YXRlLmZpbGUub3B0cz8uaW1wb3J0ZWRTY29wZWRDbGFzcykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgcGF0aC5ub2RlLnZhbHVlLm5hbWUgPT09IHN0YXRlLmZpbGUub3B0cz8uaW1wb3J0ZWRTY29wZWRDbGFzc1xuICAgICAgICApIHtcbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ2FsbEV4cHJlc3Npb24ocGF0aCwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFfaXNSZWxldmFudEZpbGUoc3RhdGUsIHdvcmtpbmdEaXJlY3RvcnkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3ByZWNvbXBpbGVUZW1wbGF0ZScgfHxcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnaGJzJ1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBjaGVjayBpZiBjc3MgZXhpc3RzXG4gICAgICAgICAgY29uc3QgcmVsYXRpdmVGaWxlTmFtZSA9XG4gICAgICAgICAgICAnYXBwJyArXG4gICAgICAgICAgICBzdGF0ZS5maWxlLm9wdHMuc291cmNlRmlsZU5hbWUuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICBzdGF0ZS5maWxlLm9wdHMuc291cmNlRmlsZU5hbWUuaW5kZXhPZignLycpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IG5vZGVQYXRoLmpvaW4oXG4gICAgICAgICAgICBzdGF0ZS5maWxlLm9wdHMucm9vdCxcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZU5hbWUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGxldCBjc3NQYXRoID0gY3NzUGF0aEZvcihmaWxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RzU3luYyhjc3NQYXRoKSkge1xuICAgICAgICAgICAgY29uc3QgY3NzID0gcmVhZEZpbGVTeW5jKGNzc1BhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpO1xuXG4gICAgICAgICAgICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKFxuICAgICAgICAgICAgICBzdGF0ZS5maWxlLm9wdHMuc291cmNlRmlsZU5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcG9zdGZpeCA9IGhhc2hGcm9tTW9kdWxlUGF0aChsb2NhbFBhY2thZ2VyU3R5bGVQYXRoKTtcblxuICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcgPSByZXdyaXRlSGJzKFxuICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcsXG4gICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgIHBvc3RmaXgsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5jb29rZWQgPVxuICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcgfHxcbiAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ0xpdGVyYWwnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPSByZXdyaXRlSGJzKFxuICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgdGFncyxcbiAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNBbmRUYWdzKHNlbCwgY2xhc3NlcywgdGFncykge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2xzKSA9PiB7XG4gICAgc2xzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNsYXNzZXMuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICB0YWdzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgZ2V0Q2xhc3Nlc0FuZFRhZ3Mobm9kZS5zZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjbGFzc2VzLCB0YWdzIH07XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5cbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8uZW1icm9pZGVyLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLXBhY2thZ2VzLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9hc3NldHMvJykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChcbiAgICAgICAgZmlsZU5hbWUuZW5kc1dpdGgoXG4gICAgICAgICAgJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwL2Fzc2V0cy90ZXN0cy5qcycsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7XG4gICAgY3dkOiBwYXRoLmRpcm5hbWUoc291cmNlUGF0aCksXG4gIH0pO1xuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pIHtcbiAgbGV0IHN0YWNrID0gW107XG4gIC8vIHNjb3BlZC1jbGFzcyBpcyBhIGdsb2JhbCB3ZSBhbGxvdyBpbiBoYnNcbiAgLy8gc2NvcGVkQ2xhc3MgaXMgaW1wb3J0YWJsZSwgYW5kIHdlJ2xsIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVuYW1lIGl0XG4gIGxldCBzY29wZWRDbGFzc0NhbmRpZGF0ZXMgPSBbJ3Njb3BlZC1jbGFzcycsICdzY29wZWRDbGFzcyddO1xuXG4gIGZ1bmN0aW9uIGlzU2NvcGVkQ2xhc3Moc3RyKSB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzY29wZWRDbGFzc0NhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IHN0cik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdBdHRyTm9kZScpIHtcbiAgICAgICAgICBwYXJlbnQucXVvdGVUeXBlID0gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgU3ViRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzU2NvcGVkQ2xhc3Mobm9kZS5wYXRoPy5vcmlnaW5hbCkgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4KSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcblxuICByZWNhc3QudHJhdmVyc2UoYXN0LCB0ZW1wbGF0ZVBsdWdpbih7IGNsYXNzZXMsIHRhZ3MsIHBvc3RmaXggfSkpO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbY2xhc3Nlc0luQ3NzXVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKGNsYXNzTmFtZSwgcG9zdGZpeCwgY2xhc3Nlc0luQ3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgY29uc3QgcmVuYW1lZENsYXNzZXMgPSBjbGFzc2VzXG4gICAgLmZpbHRlcigoYykgPT4gYylcbiAgICAubWFwKChjKSA9PiBjLnRyaW0oKSlcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBpZiAoIWNsYXNzZXNJbkNzcyB8fCBjbGFzc2VzSW5Dc3MuaGFzKGMpKSB7XG4gICAgICAgIGlmIChjLmVuZHNXaXRoKHBvc3RmaXgpKSByZXR1cm4gYztcblxuICAgICAgICByZXR1cm4gYyArICdfJyArIHBvc3RmaXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcblxuICBjb25zdCByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcyA9IGNsYXNzTmFtZS5yZXBsYWNlKFxuICAgIGNsYXNzTmFtZS50cmltU3RhcnQoKS50cmltRW5kKCksXG4gICAgcmVuYW1lZENsYXNzZXMsXG4gICk7XG5cbiAgcmV0dXJuIHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUF5QztBQUN6QyxrQkFBcUI7OztBQ0RyQixxQkFBb0I7QUFDcEIscUNBQW1COzs7QUNESixTQUFSLGVBQWdDLE1BQU0sTUFBTTtBQUNqRCxRQUFNLFNBQVMsS0FBSztBQUVwQixNQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLE1BQUksT0FBTyxTQUFTLFlBQVksT0FBTyxVQUFVLFVBQVcsUUFBTztBQUVuRSxTQUFPLGVBQWUsUUFBUSxJQUFJO0FBQ3BDOzs7QURGQSxTQUFTLGtCQUFrQixLQUFLLFNBQVMsTUFBTTtBQUM3QyxRQUFNLFlBQVksQ0FBQyxRQUFRO0FBQ3pCLFFBQUksS0FBSyxDQUFDLGFBQWE7QUFDckIs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QUFBQSxZQUN4QixNQUFNLEtBQUssS0FBSztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUVBLGNBQUksVUFBVSxXQUFXLFFBQVE7QUFFakMsa0JBQUksc0JBQVcsT0FBTyxHQUFHO0FBQ3ZCLGtCQUFNLFVBQU0sd0JBQWEsU0FBUyxNQUFNO0FBQ3hDLGtCQUFNLEVBQUUsU0FBUyxLQUFLLElBQUksc0JBQXNCLEdBQUc7QUFFbkQsZ0JBQUkseUJBQXlCO0FBQUEsY0FDM0IsTUFBTSxLQUFLLEtBQUs7QUFBQSxZQUNsQjtBQUNBLGtCQUFNLFVBQVUsbUJBQW1CLHNCQUFzQjtBQUV6RCxnQkFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLFNBQVMsbUJBQW1CO0FBQ2hELG1CQUFLLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLGdCQUN0QyxLQUFLLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU07QUFBQSxnQkFDbEM7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUNBLG1CQUFLLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sU0FDaEMsS0FBSyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNO0FBQUEsWUFDdEMsV0FDRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLFNBQVMsbUJBQzNCLEtBQUssVUFBVSxDQUFDLEVBQUUsU0FBUyxXQUMzQjtBQUNBLG1CQUFLLFVBQVUsQ0FBQyxFQUFFLFFBQVE7QUFBQSxnQkFDeEIsS0FBSyxVQUFVLENBQUMsRUFBRTtBQUFBLGdCQUNsQjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBhcnNlciIsICJwb3N0Y3NzIiwgIm1kNSIsICJwYXRoIiwgImFzc2VydCIsICJwYXRoIiwgImZzU3luYyIsICJmaW5kVXAiLCAicmVjYXN0IiwgIm5vZGUiLCAicGF0aCIsICJub2RlUGF0aCJdCn0K
|