@datagrok-libraries/utils 2.4.3 → 3.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,aAAK,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5I,aAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAyBF,yBAAiB,YAAY,CAAC;IAI5B,SAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,UAAQ,GACjB,OAAO,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAA;KAAC,CAAC,CAiC7D;IAGD,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,UAAQ,wBAyBnE;IAGD,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAapD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;IAED;;;;;;;;;;KAUC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAa,EAAO,EACnC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,EAC3F,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAyDxB;CACF"}
1
+ {"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,aAAK,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5I,aAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAyBF,yBAAiB,YAAY,CAAC;IAI5B,SAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAA;KAAC,CAAC,CAiB7D;IAGD,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,UAAQ,wBAyBnE;IAGD,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAapD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;IAED;;;;;;;;;;KAUC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAa,EAAO,EACnC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,EAC3F,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAyDxB;CACF"}
@@ -38,32 +38,20 @@ export var historyUtils;
38
38
  (function (historyUtils) {
39
39
  const scriptsCache = {};
40
40
  // TO DO: add users and groups cache
41
- function loadChildRuns(funcCallId, skipDfLoad = false) {
41
+ function loadChildRuns(funcCallId) {
42
42
  return __awaiter(this, void 0, void 0, function* () {
43
43
  const parentRun = yield grok.dapi.functions.calls.allPackageVersions().find(funcCallId);
44
+ parentRun.options['isHistorical'] = true;
44
45
  const childRuns = yield grok.dapi.functions.calls.allPackageVersions()
45
- // EXPLAIN WHY func.params
46
- .include('func.params').filter(`options.parentCallId="${funcCallId}"`).list();
47
- yield Promise.all(childRuns.map((pulledRun) => __awaiter(this, void 0, void 0, function* () {
46
+ .filter(`options.parentCallId="${funcCallId}"`).list();
47
+ yield Promise.all(childRuns.map((childRun) => __awaiter(this, void 0, void 0, function* () {
48
48
  var _a;
49
- const id = pulledRun.func.id;
49
+ const id = childRun.func.id;
50
50
  // FIX ME: manually get script since pulledRun contains empty Func
51
51
  const script = (_a = scriptsCache[id]) !== null && _a !== void 0 ? _a : yield grok.dapi.functions.allPackageVersions().find(id);
52
52
  if (!scriptsCache[id])
53
53
  scriptsCache[id] = script;
54
- pulledRun.func = script;
55
- pulledRun.options['isHistorical'] = true;
56
- if (!skipDfLoad) {
57
- const dfOutputs = wu(pulledRun.outputParams.values())
58
- .filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
59
- for (const output of dfOutputs)
60
- pulledRun.outputs[output.name] = yield grok.dapi.tables.getTable(pulledRun.outputs[output.name]);
61
- const dfInputs = wu(pulledRun.inputParams.values())
62
- .filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
63
- for (const input of dfInputs)
64
- pulledRun.inputs[input.name] = yield grok.dapi.tables.getTable(pulledRun.inputs[input.name]);
65
- }
66
- return Promise.resolve();
54
+ childRun.func = script;
67
55
  })));
68
56
  return { parentRun, childRuns };
69
57
  });
@@ -208,4 +196,4 @@ export var historyUtils;
208
196
  }
209
197
  historyUtils.pullRunsByName = pullRunsByName;
210
198
  })(historyUtils || (historyUtils = {}));
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBRTFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBV3BCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7SUFDNUQsUUFBUSxXQUFXLEVBQUU7UUFDckIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFVBQVU7WUFDYixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssV0FBVztZQUNkLE9BQU8saUNBQWlDLENBQUM7UUFDM0MsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFlBQVk7WUFDZixPQUFPLGVBQWUsQ0FBQztRQUN6QixLQUFLLFdBQVc7WUFDZCxPQUFPLGlDQUFpQyxDQUFDO1FBQzNDLEtBQUssV0FBVztZQUNkLE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxLQUFXLFlBQVksQ0E0TDVCO0FBNUxELFdBQWlCLFlBQVk7SUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBK0IsQ0FBQztJQUNyRCxvQ0FBb0M7SUFFcEMsU0FBc0IsYUFBYSxDQUNqQyxVQUFrQixFQUNsQixVQUFVLEdBQUcsS0FBSzs7WUFFbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMs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QUM7aUJBQ2hHO2FBQ0Y7WUFFRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDaEYsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLEVBQUU7b0JBQzlCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBd0IsQ0FBQzt5QkFDeEUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMzRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFNBQVM7d0JBQzVCLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3BHO2FBQ0Y7WUFFRCxPQUFPLE1BQU0sQ0FBQzs7S0FDZjtJQTlEcUIsMkJBQWMsaUJBOERuQyxDQUFBO0FBQ0gsQ0FBQyxFQTVMZ0IsWUFBWSxLQUFaLFlBQVksUUE0TDVCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuXG50eXBlIERhdGVPcHRpb25zID0gJ0FueSB0aW1lJyB8ICdUb2RheScgfCAnWWVzdGVyZGF5JyB8ICdUaGlzIHdlZWsnIHwgJ0xhc3Qgd2VlaycgfCAnVGhpcyBtb250aCcgfCAnTGFzdCBtb250aCcgfCAnVGhpcyB5ZWFyJyB8ICdMYXN0IHllYXInO1xuXG50eXBlIEZpbHRlck9wdGlvbnMgPSB7XG4gIHRleHQ/OiBzdHJpbmcsXG4gIGRhdGU/OiBEYXRlT3B0aW9ucyxcbiAgYXV0aG9yPzogREcuVXNlcixcbiAgaXNTaGFyZWQ/OiBib29sZWFuLFxufTtcblxuY29uc3QgZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuID0gKGRhdGVQYXR0ZXJuOiBEYXRlT3B0aW9ucykgPT4ge1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gIGNhc2UgJ1RvZGF5JzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMWRgO1xuICBjYXNlICdZZXN0ZXJkYXknOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0yZCBhbmQgc3RhcnRlZCA8IC0xZGA7XG4gIGNhc2UgJ0FueSB0aW1lJzpcbiAgICByZXR1cm4gYGA7XG4gIGNhc2UgJ0xhc3QgeWVhcic6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTJ5IGFuZCBzdGFydGVkIDwgLTF5YDtcbiAgY2FzZSAnVGhpcyB5ZWFyJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMXlgO1xuICBjYXNlICdMYXN0IG1vbnRoJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMm0gYW5kIHN0YXJ0ZWQgPCAtMW1gO1xuICBjYXNlICdUaGlzIG1vbnRoJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMW1gO1xuICBjYXNlICdMYXN0IHdlZWsnOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0ydyBhbmQgc3RhcnRlZCA8IC0xd2A7XG4gIGNhc2UgJ1RoaXMgd2Vlayc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTF3YDtcbiAgfVxufTtcblxuZXhwb3J0IG5hbWVzcGFjZSBoaXN0b3J5VXRpbHMge1xuICBjb25zdCBzY3JpcHRzQ2FjaGUgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBERy5TY3JpcHQ+O1xuICAvLyBUTyBETzogYWRkIHVzZXJzIGFuZCBncm91cHMgY2FjaGVcblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENoaWxkUnVucyhcbiAgICBmdW5jQ2FsbElkOiBzdHJpbmcsXG4gICAgc2tpcERmTG9hZCA9IGZhbHNlXG4gICk6IFByb21pc2U8e3BhcmVudFJ1bjogREcuRnVuY0NhbGwsIGNoaWxkUnVuczogREcuRnVuY0NhbGxbXX0+IHtcbiAgICBjb25zdCBwYXJlbnRSdW4gPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLmZpbmQoZnVuY0NhbGxJZCk7XG5cbiAgICBjb25zdCBjaGlsZFJ1bnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpXG4gICAgLy8gRVhQTEFJTiBXSFkgZnVuYy5wYXJhbXNcbiAgICAgIC5pbmNsdWRlKCdmdW5jLnBhcmFtcycpLmZpbHRlcihgb3B0aW9ucy5wYXJlbnRDYWxsSWQ9XCIke2Z1bmNDYWxsSWR9XCJgKS5saXN0KCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChjaGlsZFJ1bnMubWFwKGFzeW5jIChwdWxsZWRSdW4pID0+IHtcbiAgICAgIGNvbnN0IGlkID0gcHVsbGVkUnVuLmZ1bmMuaWQ7XG4gICAgICAvLyBGSVggTUU6IG1hbnVhbGx5IGdldCBzY3JpcHQgc2luY2UgcHVsbGVkUnVuIGNvbnRhaW5zIGVtcHR5IEZ1bmNcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgICAgaWYgKCFzY3JpcHRzQ2FjaGVbaWRdKSBzY3JpcHRzQ2FjaGVbaWRdID0gc2NyaXB0O1xuXG4gICAgICBwdWxsZWRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICAgIHB1bGxlZFJ1bi5vcHRpb25zWydpc0hpc3RvcmljYWwnXSA9IHRydWU7XG5cbiAgICAgIGlmICghc2tpcERmTG9hZCkge1xuICAgICAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cylcbiAgICAgICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICAgICAgY29uc3QgZGZJbnB1dHMgPSB3dShwdWxsZWRSdW4uaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICAgICAgcHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge3BhcmVudFJ1biwgY2hpbGRSdW5zfTtcbiAgfVxuXG4gIC8vIEVYUExBSU46IFdIWSBERiBMT0FEIFNLSVBQSU5HIElTIFVTRUZVTFxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcsIHNraXBEZkxvYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgIC5pbmNsdWRlKCdpbnB1dHMsIG91dHB1dHMsIHNlc3Npb24udXNlcicpLmZpbmQoZnVuY0NhbGxJZCk7XG5cbiAgICBjb25zdCBpZCA9IHB1bGxlZFJ1bi5mdW5jLmlkO1xuICAgIC8vIEZJWCBNRTogbWFudWFsbHkgZ2V0IHNjcmlwdCBzaW5jZSBwdWxsZWRSdW4gY29udGFpbnMgZW1wdHkgRnVuY1xuICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgIGlmICghc2NyaXB0c0NhY2hlW2lkXSkgc2NyaXB0c0NhY2hlW2lkXSA9IHNjcmlwdDtcbiAgICBwdWxsZWRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICBwdWxsZWRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuXG4gICAgaWYgKCFza2lwRGZMb2FkKSB7XG4gICAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICAgIGNvbnN0IGRmSW5wdXRzID0gd3UocHVsbGVkUnVuLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICAgIHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICAvLyBFWFBMQUlOIFdIWSBSRVBMQ0UgREYtc1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cblxuICAgIHJldHVybiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvU2F2ZSk7XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHtcbiAgICBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLmRlbGV0ZShjYWxsVG9EZWxldGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAcGFyYW0gZnVuY0lkIElEIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMuaWR9IGZpZWxkXG4gICAqIEByZXR1cm4gUHJvbWlzZSBvbiBhcnJheSBvZiBGdW5jQ2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIEZ1bmMgSURcbiAgICogQHN0YWJpbGl0eSBEZXByZWNhdGVkLiBTY3JpcHQgSUQgY2hhbmdlcyB3aXRoIGV2ZXJ5IHBhY2thZ2UgcmVsZWFzZSwgc28gc2VhcmNoaW5nIGJ5IElEIGlzIHVzZWxlc3MgaW4gcHJhY3RpY2UuXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zKFxuICAgIGZ1bmNJZDogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9XG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgZnVuYy5pZD1cIiR7ZnVuY0lkfVwiYDtcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5hdXRob3IgPyBgIGFuZCBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbnMuYXV0aG9yLmlkfVwiYDonJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5kYXRlID8gZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuKGZpbHRlck9wdGlvbnMuZGF0ZSk6ICcnO1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHNcbiAgICAgIC5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgLmZpbHRlcihmaWx0ZXJpbmdTdHJpbmcpXG4gICAgICAuaW5jbHVkZSgnc2Vzc2lvbi51c2VyLCBvcHRpb25zJyk7XG4gICAgY29uc3QgbGlzdCA9IGZpbHRlci5saXN0KGxpc3RPcHRpb25zKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4gVXNlIHtAbGluayBpbmNsdWRlZEZpZWxkc30gdG8gc3BlY2lmeSBmaWVsZHMgdG8gbG9hZC5cbiAgICogQHBhcmFtIGZ1bmNOYW1lIE5hbWUgb2YgRnVuYyB3aGljaCBjYWxscyB3ZSBhcmUgbG9va2luZyBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuYy5uYW1lfSBmaWVsZFxuICAgKiBAcGFyYW0gZmlsdGVyT3B0aW9ucyBTdHJ1Y3QgY29udGFpbmluZyBmaWx0ZXJpbmcgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCBhcyB2YWxpZCBmaWx0ZXJpbmcgc3RyaW5nIHRvIGEgcmVxdWVzdC5cbiAgICogQHBhcmFtIGxpc3RPcHRpb25zIFN0cnVjdCBjb250YWluaW5nIGxpc3Rpbmcgb3B0aW9ucy5cbiAgICogQHBhcmFtIGluY2x1ZGVkRmllbGRzIExpc3Qgb2YgZmllbGRzIHRvIGluY2x1ZGUgaW50byByZXNwb25zZS4gU2VlIHtAbGluayBERy5GdW5jQ2FsbH0gc3RydWN0IHRvIHNlZSBwb3NzaWJsZSB2YWx1ZXMuIEUuZy4sICdpbnB1dHMnIG9yICdvdXRwdXRzJ1xuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zQnlOYW1lKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9uc1tdID0gW10sXG4gICAgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fSxcbiAgICBpbmNsdWRlZEZpZWxkczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBsZXQgZmlsdGVyaW5nU3RyaW5nID0gYGA7XG4gICAgZm9yIChjb25zdCBmaWx0ZXJPcHRpb24gb2YgZmlsdGVyT3B0aW9ucykge1xuICAgICAgY29uc3QgZmlsdGVyT3B0aW9uQ3JpdGVyaWEgPSBbXSBhcyBzdHJpbmdbXTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uYXV0aG9yKSBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKGBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbi5hdXRob3IuaWR9XCJgKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uZGF0ZSkgZmlsdGVyT3B0aW9uQ3JpdGVyaWEucHVzaChnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4oZmlsdGVyT3B0aW9uLmRhdGUpKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uaXNTaGFyZWQpIGZpbHRlck9wdGlvbkNyaXRlcmlhLnB1c2goYG9wdGlvbnMuaXNTaGFyZWQ9XCJ0cnVlXCJgKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24udGV4dCkge1xuICAgICAgICBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKFxuICAgICAgICAgIGAoKG9wdGlvbnMudGl0bGUgbGlrZSBcIiR7ZmlsdGVyT3B0aW9uLnRleHR9XCIpIG9yIChvcHRpb25zLmFubm90YXRpb24gbGlrZSBcIiR7ZmlsdGVyT3B0aW9uLnRleHR9XCIpKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlck9wdGlvblN0cmluZyA9IGZpbHRlck9wdGlvbkNyaXRlcmlhLmpvaW4oJyBhbmQgJyk7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uU3RyaW5nICE9PSAnJykge1xuICAgICAgICBpZiAoZmlsdGVyaW5nU3RyaW5nID09PSAnJylcbiAgICAgICAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gYCgke2ZpbHRlck9wdGlvblN0cmluZ30pYDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZpbHRlcmluZ1N0cmluZyArPSBgIG9yICgke2ZpbHRlck9wdGlvblN0cmluZ30pYDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbHRlcmluZ1N0cmluZyAhPT0gJycpXG4gICAgICBmaWx0ZXJpbmdTdHJpbmcgPSBgIGFuZCAoJHtmaWx0ZXJpbmdTdHJpbmd9KWA7XG5cbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxsc1xuICAgICAgICAuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgICAgLmZpbHRlcihgZnVuYy5uYW1lPVwiJHtmdW5jTmFtZX1cIiR7ZmlsdGVyaW5nU3RyaW5nfWApXG4gICAgICAgIC5pbmNsdWRlKGAke2luY2x1ZGVkRmllbGRzLmpvaW4oJywnKX1gKVxuICAgICAgICAubGlzdChsaXN0T3B0aW9ucyk7XG5cbiAgICBmb3IgKGNvbnN0IHB1bGxlZFJ1biBvZiByZXN1bHQpIHtcbiAgICAgIGNvbnN0IGlkID0gcHVsbGVkUnVuLmZ1bmMuaWQ7XG4gICAgICBjb25zdCBzY3JpcHQgPSBzY3JpcHRzQ2FjaGVbaWRdID8/IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuYWxsUGFja2FnZVZlcnNpb25zKCkuZmluZChpZCk7XG5cbiAgICAgIGlmICghc2NyaXB0c0NhY2hlW2lkXSkgc2NyaXB0c0NhY2hlW2lkXSA9IHNjcmlwdDtcbiAgICAgIHB1bGxlZFJ1bi5mdW5jID0gc2NyaXB0O1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnaW5wdXRzJykgfHwgaW5jbHVkZWRGaWVsZHMuaW5jbHVkZXMoJ2Z1bmMucGFyYW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgcHVsbGVkUnVuIG9mIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZWRGaWVsZHMuaW5jbHVkZXMoJ291dHB1dHMnKSB8fCBpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnZnVuYy5wYXJhbXMnKSkge1xuICAgICAgZm9yIChjb25zdCBwdWxsZWRSdW4gb2YgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KHB1bGxlZFJ1bi5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgICAgIHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBRTFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBV3BCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7SUFDNUQsUUFBUSxXQUFXLEVBQUU7UUFDckIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFVBQVU7WUFDYixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssV0FBVztZQUNkLE9BQU8saUNBQWlDLENBQUM7UUFDM0MsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFlBQVk7WUFDZixPQUFPLGVBQWUsQ0FBQztRQUN6QixLQUFLLFdBQVc7WUFDZCxPQUFPLGlDQUFpQyxDQUFDO1FBQzNDLEtBQUssV0FBVztZQUNkLE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxLQUFXLFlBQVksQ0EySzVCO0FBM0tELFdBQWlCLFlBQVk7SUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBK0IsQ0FBQztJQUNyRCxvQ0FBb0M7SUFFcEMsU0FBc0IsYUFBYSxDQUNqQyxVQUFrQjs7WUFFbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEYs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Q0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDaEc7YUFDRjtZQUVELElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNoRixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRTtvQkFDOUIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUF3QixDQUFDO3lCQUN4RSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzNFLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUzt3QkFDNUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDcEc7YUFDRjtZQUVELE9BQU8sTUFBTSxDQUFDOztLQUNmO0lBOURxQiwyQkFBYyxpQkE4RG5DLENBQUE7QUFDSCxDQUFDLEVBM0tnQixZQUFZLEtBQVosWUFBWSxRQTJLNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5cbnR5cGUgRGF0ZU9wdGlvbnMgPSAnQW55IHRpbWUnIHwgJ1RvZGF5JyB8ICdZZXN0ZXJkYXknIHwgJ1RoaXMgd2VlaycgfCAnTGFzdCB3ZWVrJyB8ICdUaGlzIG1vbnRoJyB8ICdMYXN0IG1vbnRoJyB8ICdUaGlzIHllYXInIHwgJ0xhc3QgeWVhcic7XG5cbnR5cGUgRmlsdGVyT3B0aW9ucyA9IHtcbiAgdGV4dD86IHN0cmluZyxcbiAgZGF0ZT86IERhdGVPcHRpb25zLFxuICBhdXRob3I/OiBERy5Vc2VyLFxuICBpc1NoYXJlZD86IGJvb2xlYW4sXG59O1xuXG5jb25zdCBnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4gPSAoZGF0ZVBhdHRlcm46IERhdGVPcHRpb25zKSA9PiB7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgY2FzZSAnVG9kYXknOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0xZGA7XG4gIGNhc2UgJ1llc3RlcmRheSc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTJkIGFuZCBzdGFydGVkIDwgLTFkYDtcbiAgY2FzZSAnQW55IHRpbWUnOlxuICAgIHJldHVybiBgYDtcbiAgY2FzZSAnTGFzdCB5ZWFyJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMnkgYW5kIHN0YXJ0ZWQgPCAtMXlgO1xuICBjYXNlICdUaGlzIHllYXInOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0xeWA7XG4gIGNhc2UgJ0xhc3QgbW9udGgnOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0ybSBhbmQgc3RhcnRlZCA8IC0xbWA7XG4gIGNhc2UgJ1RoaXMgbW9udGgnOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0xbWA7XG4gIGNhc2UgJ0xhc3Qgd2Vlayc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTJ3IGFuZCBzdGFydGVkIDwgLTF3YDtcbiAgY2FzZSAnVGhpcyB3ZWVrJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMXdgO1xuICB9XG59O1xuXG5leHBvcnQgbmFtZXNwYWNlIGhpc3RvcnlVdGlscyB7XG4gIGNvbnN0IHNjcmlwdHNDYWNoZSA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIERHLlNjcmlwdD47XG4gIC8vIFRPIERPOiBhZGQgdXNlcnMgYW5kIGdyb3VwcyBjYWNoZVxuXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ2hpbGRSdW5zKFxuICAgIGZ1bmNDYWxsSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHtwYXJlbnRSdW46IERHLkZ1bmNDYWxsLCBjaGlsZFJ1bnM6IERHLkZ1bmNDYWxsW119PiB7XG4gICAgY29uc3QgcGFyZW50UnVuID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGZ1bmNDYWxsSWQpO1xuICAgIHBhcmVudFJ1bi5vcHRpb25zWydpc0hpc3RvcmljYWwnXSA9IHRydWU7XG5cbiAgICBjb25zdCBjaGlsZFJ1bnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpXG4gICAgICAuZmlsdGVyKGBvcHRpb25zLnBhcmVudENhbGxJZD1cIiR7ZnVuY0NhbGxJZH1cImApLmxpc3QoKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNoaWxkUnVucy5tYXAoYXN5bmMgKGNoaWxkUnVuKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNoaWxkUnVuLmZ1bmMuaWQ7XG4gICAgICAvLyBGSVggTUU6IG1hbnVhbGx5IGdldCBzY3JpcHQgc2luY2UgcHVsbGVkUnVuIGNvbnRhaW5zIGVtcHR5IEZ1bmNcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgICAgaWYgKCFzY3JpcHRzQ2FjaGVbaWRdKSBzY3JpcHRzQ2FjaGVbaWRdID0gc2NyaXB0O1xuICAgICAgY2hpbGRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge3BhcmVudFJ1biwgY2hpbGRSdW5zfTtcbiAgfVxuXG4gIC8vIEVYUExBSU46IFdIWSBERiBMT0FEIFNLSVBQSU5HIElTIFVTRUZVTFxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcsIHNraXBEZkxvYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgIC5pbmNsdWRlKCdpbnB1dHMsIG91dHB1dHMsIHNlc3Npb24udXNlcicpLmZpbmQoZnVuY0NhbGxJZCk7XG5cbiAgICBjb25zdCBpZCA9IHB1bGxlZFJ1bi5mdW5jLmlkO1xuICAgIC8vIEZJWCBNRTogbWFudWFsbHkgZ2V0IHNjcmlwdCBzaW5jZSBwdWxsZWRSdW4gY29udGFpbnMgZW1wdHkgRnVuY1xuICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgIGlmICghc2NyaXB0c0NhY2hlW2lkXSkgc2NyaXB0c0NhY2hlW2lkXSA9IHNjcmlwdDtcbiAgICBwdWxsZWRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICBwdWxsZWRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuXG4gICAgaWYgKCFza2lwRGZMb2FkKSB7XG4gICAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICAgIGNvbnN0IGRmSW5wdXRzID0gd3UocHVsbGVkUnVuLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICAgIHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICAvLyBFWFBMQUlOIFdIWSBSRVBMQ0UgREYtc1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cblxuICAgIHJldHVybiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvU2F2ZSk7XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHtcbiAgICBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLmRlbGV0ZShjYWxsVG9EZWxldGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAcGFyYW0gZnVuY0lkIElEIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMuaWR9IGZpZWxkXG4gICAqIEByZXR1cm4gUHJvbWlzZSBvbiBhcnJheSBvZiBGdW5jQ2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIEZ1bmMgSURcbiAgICogQHN0YWJpbGl0eSBEZXByZWNhdGVkLiBTY3JpcHQgSUQgY2hhbmdlcyB3aXRoIGV2ZXJ5IHBhY2thZ2UgcmVsZWFzZSwgc28gc2VhcmNoaW5nIGJ5IElEIGlzIHVzZWxlc3MgaW4gcHJhY3RpY2UuXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zKFxuICAgIGZ1bmNJZDogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9XG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgZnVuYy5pZD1cIiR7ZnVuY0lkfVwiYDtcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5hdXRob3IgPyBgIGFuZCBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbnMuYXV0aG9yLmlkfVwiYDonJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5kYXRlID8gZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuKGZpbHRlck9wdGlvbnMuZGF0ZSk6ICcnO1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHNcbiAgICAgIC5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgLmZpbHRlcihmaWx0ZXJpbmdTdHJpbmcpXG4gICAgICAuaW5jbHVkZSgnc2Vzc2lvbi51c2VyLCBvcHRpb25zJyk7XG4gICAgY29uc3QgbGlzdCA9IGZpbHRlci5saXN0KGxpc3RPcHRpb25zKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4gVXNlIHtAbGluayBpbmNsdWRlZEZpZWxkc30gdG8gc3BlY2lmeSBmaWVsZHMgdG8gbG9hZC5cbiAgICogQHBhcmFtIGZ1bmNOYW1lIE5hbWUgb2YgRnVuYyB3aGljaCBjYWxscyB3ZSBhcmUgbG9va2luZyBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuYy5uYW1lfSBmaWVsZFxuICAgKiBAcGFyYW0gZmlsdGVyT3B0aW9ucyBTdHJ1Y3QgY29udGFpbmluZyBmaWx0ZXJpbmcgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCBhcyB2YWxpZCBmaWx0ZXJpbmcgc3RyaW5nIHRvIGEgcmVxdWVzdC5cbiAgICogQHBhcmFtIGxpc3RPcHRpb25zIFN0cnVjdCBjb250YWluaW5nIGxpc3Rpbmcgb3B0aW9ucy5cbiAgICogQHBhcmFtIGluY2x1ZGVkRmllbGRzIExpc3Qgb2YgZmllbGRzIHRvIGluY2x1ZGUgaW50byByZXNwb25zZS4gU2VlIHtAbGluayBERy5GdW5jQ2FsbH0gc3RydWN0IHRvIHNlZSBwb3NzaWJsZSB2YWx1ZXMuIEUuZy4sICdpbnB1dHMnIG9yICdvdXRwdXRzJ1xuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zQnlOYW1lKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9uc1tdID0gW10sXG4gICAgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fSxcbiAgICBpbmNsdWRlZEZpZWxkczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBsZXQgZmlsdGVyaW5nU3RyaW5nID0gYGA7XG4gICAgZm9yIChjb25zdCBmaWx0ZXJPcHRpb24gb2YgZmlsdGVyT3B0aW9ucykge1xuICAgICAgY29uc3QgZmlsdGVyT3B0aW9uQ3JpdGVyaWEgPSBbXSBhcyBzdHJpbmdbXTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uYXV0aG9yKSBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKGBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbi5hdXRob3IuaWR9XCJgKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uZGF0ZSkgZmlsdGVyT3B0aW9uQ3JpdGVyaWEucHVzaChnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4oZmlsdGVyT3B0aW9uLmRhdGUpKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24uaXNTaGFyZWQpIGZpbHRlck9wdGlvbkNyaXRlcmlhLnB1c2goYG9wdGlvbnMuaXNTaGFyZWQ9XCJ0cnVlXCJgKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb24udGV4dCkge1xuICAgICAgICBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKFxuICAgICAgICAgIGAoKG9wdGlvbnMudGl0bGUgbGlrZSBcIiR7ZmlsdGVyT3B0aW9uLnRleHR9XCIpIG9yIChvcHRpb25zLmFubm90YXRpb24gbGlrZSBcIiR7ZmlsdGVyT3B0aW9uLnRleHR9XCIpKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlck9wdGlvblN0cmluZyA9IGZpbHRlck9wdGlvbkNyaXRlcmlhLmpvaW4oJyBhbmQgJyk7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uU3RyaW5nICE9PSAnJykge1xuICAgICAgICBpZiAoZmlsdGVyaW5nU3RyaW5nID09PSAnJylcbiAgICAgICAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gYCgke2ZpbHRlck9wdGlvblN0cmluZ30pYDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZpbHRlcmluZ1N0cmluZyArPSBgIG9yICgke2ZpbHRlck9wdGlvblN0cmluZ30pYDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbHRlcmluZ1N0cmluZyAhPT0gJycpXG4gICAgICBmaWx0ZXJpbmdTdHJpbmcgPSBgIGFuZCAoJHtmaWx0ZXJpbmdTdHJpbmd9KWA7XG5cbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxsc1xuICAgICAgICAuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgICAgLmZpbHRlcihgZnVuYy5uYW1lPVwiJHtmdW5jTmFtZX1cIiR7ZmlsdGVyaW5nU3RyaW5nfWApXG4gICAgICAgIC5pbmNsdWRlKGAke2luY2x1ZGVkRmllbGRzLmpvaW4oJywnKX1gKVxuICAgICAgICAubGlzdChsaXN0T3B0aW9ucyk7XG5cbiAgICBmb3IgKGNvbnN0IHB1bGxlZFJ1biBvZiByZXN1bHQpIHtcbiAgICAgIGNvbnN0IGlkID0gcHVsbGVkUnVuLmZ1bmMuaWQ7XG4gICAgICBjb25zdCBzY3JpcHQgPSBzY3JpcHRzQ2FjaGVbaWRdID8/IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuYWxsUGFja2FnZVZlcnNpb25zKCkuZmluZChpZCk7XG5cbiAgICAgIGlmICghc2NyaXB0c0NhY2hlW2lkXSkgc2NyaXB0c0NhY2hlW2lkXSA9IHNjcmlwdDtcbiAgICAgIHB1bGxlZFJ1bi5mdW5jID0gc2NyaXB0O1xuICAgIH1cblxuICAgIGlmIChpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnaW5wdXRzJykgfHwgaW5jbHVkZWRGaWVsZHMuaW5jbHVkZXMoJ2Z1bmMucGFyYW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgcHVsbGVkUnVuIG9mIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZWRGaWVsZHMuaW5jbHVkZXMoJ291dHB1dHMnKSB8fCBpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnZnVuYy5wYXJhbXMnKSkge1xuICAgICAgZm9yIChjb25zdCBwdWxsZWRSdW4gb2YgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KHB1bGxlZFJ1bi5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgICAgIHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
@@ -1,30 +1,29 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
+ import { Subject } from 'rxjs';
2
3
  import { FunctionView } from './function-view';
3
4
  import { ComputationView } from './computation-view';
4
5
  export declare class PipelineView extends ComputationView {
5
- private scriptStepNames;
6
- stepViews: {
7
- [nqName: string]: FunctionView;
6
+ private stepsConfig;
7
+ steps: {
8
+ [scriptNqName: string]: {
9
+ editor: string;
10
+ view: FunctionView;
11
+ };
8
12
  };
9
- stepTabs: DG.TabControl | null;
10
- protected defaultExportFilename: (format: string) => string;
11
- protected defaultSupportedExportExtensions: () => Record<string, string>;
12
- protected defaultSupportedExportFormats: () => string[];
13
- protected defaultExport: (format: string) => Promise<Blob>;
14
- scriptCalls: {
15
- [scriptNqName: string]: DG.FuncCall;
13
+ onStepCompleted: Subject<DG.FuncCall>;
14
+ private stepTabs;
15
+ protected pipelineViewExportExtensions: () => Record<string, string>;
16
+ protected pipelineViewExportFormats: () => string[];
17
+ protected pipelineViewExport: (format: string) => Promise<Blob>;
18
+ exportConfig: {
19
+ supportedExtensions: Record<string, string>;
20
+ supportedFormats: string[];
21
+ export: (format: string) => Promise<Blob>;
22
+ filename: (format: string) => string;
16
23
  };
17
- editorFuncs: {
18
- [editor: string]: DG.Func;
19
- };
20
- scriptEditors: {
21
- [scriptName: string]: string;
22
- };
23
- views: {
24
- [script: string]: HTMLElement;
25
- };
26
- scripts: DG.Script[];
27
- constructor(funcName: string, scriptStepNames: string[]);
24
+ constructor(funcName: string, stepsConfig: {
25
+ funcName: string;
26
+ }[]);
28
27
  init(): Promise<void>;
29
28
  buildIO(): HTMLDivElement;
30
29
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-view.d.ts","sourceRoot":"","sources":["pipeline-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEnD,qBAAa,YAAa,SAAQ,eAAe;IAgD7C,OAAO,CAAC,eAAe;IA/ClB,SAAS,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAM;IACnD,QAAQ,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAQ;IAE7C,SAAS,CAAC,qBAAqB,WAAY,MAAM,YAI/C;IAEF,SAAS,CAAC,gCAAgC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAItE;IAEF,SAAS,CAAC,6BAA6B,iBAErC;IAEF,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAkB7C;IAEF,WAAW;;MAA+C;IAC1D,WAAW;;MAAqC;IAChD,aAAa;;MAAwC;IACrD,KAAK;;MAAyC;IAC9C,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAM;gBAGxB,QAAQ,EAAE,MAAM,EACR,eAAe,EAAE,MAAM,EAAE;IAYb,IAAI;IAmDV,OAAO;IAcD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB1C;;;;;KAKC;IACY,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;CAY/D"}
1
+ {"version":3,"file":"pipeline-view.d.ts","sourceRoot":"","sources":["pipeline-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,YAAa,SAAQ,eAAe;IA8C7C,OAAO,CAAC,WAAW;IA7Cd,KAAK;;oBAA4C,MAAM;kBAAQ,YAAY;;MAAI;IAC/E,eAAe,uBAA8B;IAEpD,OAAO,CAAC,QAAQ,CAA8B;IAE9C,SAAS,CAAC,4BAA4B,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlE;IAEF,SAAS,CAAC,yBAAyB,iBAEjC;IAEF,SAAS,CAAC,kBAAkB,WAAkB,MAAM,mBAmBlD;IAEF,YAAY;;;yBArBkC,MAAM;;MA0BlD;gBAGA,QAAQ,EAAE,MAAM,EACR,WAAW,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,EAAE;IAQrB,IAAI;IAwEV,OAAO;IAqBD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB1C;;;;;KAKC;IACY,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;CAgB/D"}
@@ -12,35 +12,34 @@ import * as grok from 'datagrok-api/grok';
12
12
  import * as ui from 'datagrok-api/ui';
13
13
  import * as DG from 'datagrok-api/dg';
14
14
  import JSZip from 'jszip';
15
+ import { Subject } from 'rxjs';
15
16
  import { historyUtils } from './history-utils';
16
17
  import { ComputationView } from './computation-view';
18
+ import { filter } from 'rxjs/operators';
17
19
  export class PipelineView extends ComputationView {
18
- constructor(funcName, scriptStepNames) {
19
- super(funcName);
20
- this.scriptStepNames = scriptStepNames;
21
- this.stepViews = {};
20
+ constructor(funcName, stepsConfig) {
21
+ super(funcName, { historyEnabled: true, isTabbed: false });
22
+ this.stepsConfig = stepsConfig;
23
+ this.steps = {};
24
+ this.onStepCompleted = new Subject();
22
25
  this.stepTabs = null;
23
- this.defaultExportFilename = (format) => {
24
- return `${this.name} - ${new Date()
25
- .toLocaleString('en-US')
26
- .replaceAll(/:|\//g, '-')}.${this.exportConfig.supportedExtensions[format]}`;
27
- };
28
- this.defaultSupportedExportExtensions = () => {
26
+ this.pipelineViewExportExtensions = () => {
29
27
  return {
30
28
  'Archive': 'zip'
31
29
  };
32
30
  };
33
- this.defaultSupportedExportFormats = () => {
31
+ this.pipelineViewExportFormats = () => {
34
32
  return ['Archive'];
35
33
  };
36
- this.defaultExport = (format) => __awaiter(this, void 0, void 0, function* () {
34
+ this.pipelineViewExport = (format) => __awaiter(this, void 0, void 0, function* () {
37
35
  var _a;
38
36
  if (format !== 'Archive')
39
37
  throw new Error('This export format is not supported');
40
38
  if (!this.stepTabs)
41
39
  throw new Error('Set step tabs please for export');
42
40
  const zip = new JSZip();
43
- for (const [nqName, stepView] of Object.entries(this.stepViews)) {
41
+ for (const { nqName, stepView } of Object.entries(this.steps)
42
+ .map(([nqName, step]) => ({ nqName, stepView: step.view }))) {
44
43
  this.stepTabs.currentPane = (_a = this.stepTabs) === null || _a === void 0 ? void 0 : _a.getPane(nqName);
45
44
  yield new Promise((r) => setTimeout(r, 100));
46
45
  const stepBlob = yield stepView.exportConfig.export('Excel');
@@ -49,61 +48,74 @@ export class PipelineView extends ComputationView {
49
48
  ;
50
49
  return yield zip.generateAsync({ type: 'blob' });
51
50
  });
52
- this.scriptCalls = {};
53
- this.editorFuncs = {};
54
- this.scriptEditors = {};
55
- this.views = {};
56
- this.scripts = [];
57
51
  this.exportConfig = {
58
- supportedExtensions: this.defaultSupportedExportExtensions(),
59
- supportedFormats: this.defaultSupportedExportFormats(),
60
- export: this.defaultExport,
52
+ supportedExtensions: this.pipelineViewExportExtensions(),
53
+ supportedFormats: this.pipelineViewExportFormats(),
54
+ export: this.pipelineViewExport,
61
55
  filename: this.defaultExportFilename,
62
56
  };
63
57
  }
64
58
  init() {
65
59
  return __awaiter(this, void 0, void 0, function* () {
66
- const scriptStepNames = this.scriptStepNames;
67
- const stepScripts = scriptStepNames.map((stepScriptName) => {
68
- const stepScript = grok.functions.eval(stepScriptName);
60
+ yield this.loadFuncCallById();
61
+ this.stepsConfig.forEach((stepConfig) => {
62
+ //@ts-ignore
63
+ this.steps[stepConfig.funcName] = {};
64
+ });
65
+ grok.functions.onAfterRunAction.pipe(filter((run) => Object.keys(this.steps).includes(run.func.nqName))).subscribe((run) => {
66
+ this.onStepCompleted.next(run);
67
+ if (run.func.nqName === this.stepsConfig[this.stepsConfig.length - 1].funcName)
68
+ this.run();
69
+ });
70
+ const stepScripts = Object.keys(this.steps).map((stepNqName) => {
71
+ const stepScript = grok.functions.eval(stepNqName);
69
72
  return stepScript;
70
73
  });
71
- const allStepsLoaded = Promise.all(stepScripts);
74
+ const allStepsLoading = Promise.all(stepScripts);
72
75
  this.root.classList.remove('ui-panel');
73
- this.scripts = yield allStepsLoaded;
74
- const editorTag = 'editor:';
75
- const newlineSymbol = '\n';
76
- const defaultEditor = 'Compute:PipelineStepEditor';
76
+ const loadedScripts = yield allStepsLoading;
77
+ const editorFuncs = {};
78
+ const EDITOR_TAG = 'editor:';
79
+ const NEWLINE = '\n';
80
+ const DEFAULT_EDITOR = 'Compute:PipelineStepEditor';
77
81
  const extractEditor = (script) => {
78
82
  const scriptCode = script.script;
79
- const editorTagIndex = scriptCode.indexOf(editorTag);
83
+ const editorTagIndex = scriptCode.indexOf(EDITOR_TAG);
80
84
  if (editorTagIndex < 0)
81
- return defaultEditor;
82
- const newlineIndex = scriptCode.indexOf(newlineSymbol, editorTagIndex);
83
- const editorFuncName = scriptCode.substring(editorTagIndex + editorTag.length, newlineIndex).trim();
85
+ return DEFAULT_EDITOR;
86
+ const newlineIndex = scriptCode.indexOf(NEWLINE, editorTagIndex);
87
+ const editorFuncName = scriptCode.substring(editorTagIndex + EDITOR_TAG.length, newlineIndex).trim();
84
88
  return editorFuncName;
85
89
  };
86
- for (const script of this.scripts) {
90
+ const editorsLoading = loadedScripts.map((loadedScript) => __awaiter(this, void 0, void 0, function* () {
87
91
  // TO DO: replace for type guard
88
- const editorName = (script.script) ? extractEditor(script) : defaultEditor;
89
- if (!this.editorFuncs[editorName])
90
- this.editorFuncs[editorName] = yield grok.functions.eval(editorName.split(' ').join(''));
91
- this.scriptEditors[script.nqName] = editorName;
92
- }
93
- ;
94
- for (const script of this.scripts) {
95
- const scriptCall = script.prepare();
96
- const view = yield this.editorFuncs[this.scriptEditors[script.nqName]].apply({ 'call': scriptCall });
97
- // scriptCall.options['parentCallId'] = wrapperCall.id;
98
- this.scriptCalls[script.nqName] = scriptCall;
99
- this.views[script.nqName] = view.root;
100
- // TEMP WAY TO DEAL WITH IT
101
- this.stepViews[script.nqName] = view;
102
- }
92
+ const editorName = (loadedScript.script) ? extractEditor(loadedScript) : DEFAULT_EDITOR;
93
+ if (!editorFuncs[editorName])
94
+ editorFuncs[editorName] = yield grok.functions.eval(editorName.split(' ').join(''));
95
+ this.steps[loadedScript.nqName].editor = editorName;
96
+ return Promise.resolve();
97
+ }));
98
+ yield Promise.all(editorsLoading);
99
+ const viewsLoading = loadedScripts.map((loadedScript) => __awaiter(this, void 0, void 0, function* () {
100
+ const scriptCall = loadedScript.prepare();
101
+ this.steps[loadedScript.nqName].view =
102
+ (yield editorFuncs[this.steps[loadedScript.nqName].editor].apply({ 'call': scriptCall }));
103
+ if (!this.steps[loadedScript.nqName].view.onFuncCallReady.value) {
104
+ const prom = this.steps[loadedScript.nqName].view.onFuncCallReady.toPromise();
105
+ return prom;
106
+ }
107
+ else {
108
+ return Promise.resolve();
109
+ }
110
+ }));
111
+ yield Promise.all(viewsLoading);
112
+ this.onFuncCallReady.complete();
103
113
  });
104
114
  }
105
115
  buildIO() {
106
- const pipelineTabs = ui.tabControl(this.views);
116
+ const tabs = Object.entries(this.steps)
117
+ .reduce((prev, [funcName, step]) => (Object.assign(Object.assign({}, prev), { [funcName]: step.view.root })), {});
118
+ const pipelineTabs = ui.tabControl(tabs);
107
119
  for (let i = 0; i < pipelineTabs.panes.length - 1; i++) {
108
120
  pipelineTabs.panes[i].header.classList.add('arrow-tab');
109
121
  pipelineTabs.panes[i].header.insertAdjacentElement('afterend', ui.div(undefined, 'empty-box'));
@@ -122,9 +134,12 @@ export class PipelineView extends ComputationView {
122
134
  this.funcCall.newId();
123
135
  yield this.funcCall.call(); // mutates the funcCall field
124
136
  pi.close();
125
- Object.values(this.scriptCalls).forEach((scriptCall) => __awaiter(this, void 0, void 0, function* () {
137
+ Object.values(this.steps)
138
+ .forEach((step) => __awaiter(this, void 0, void 0, function* () {
139
+ const scriptCall = step.view.funcCall;
126
140
  scriptCall.options['parentCallId'] = this.funcCall.id;
127
- yield this.stepViews[scriptCall.func.nqName].saveRun(scriptCall);
141
+ this.steps[scriptCall.func.nqName].view.lastCall =
142
+ yield this.steps[scriptCall.func.nqName].view.saveRun(scriptCall);
128
143
  }));
129
144
  yield this.onAfterRun(this.funcCall);
130
145
  this.lastCall = yield this.saveRun(this.funcCall);
@@ -138,15 +153,18 @@ export class PipelineView extends ComputationView {
138
153
  */
139
154
  loadRun(funcCallId) {
140
155
  return __awaiter(this, void 0, void 0, function* () {
141
- yield this.onBeforeLoadRun();
142
156
  const { parentRun: pulledParentRun, childRuns: pulledChildRuns } = yield historyUtils.loadChildRuns(funcCallId);
143
- pulledChildRuns.forEach((pulledChildRun) => __awaiter(this, void 0, void 0, function* () {
144
- yield this.stepViews[pulledChildRun.func.nqName].onAfterLoadRun(pulledChildRun);
145
- this.stepViews[pulledChildRun.func.nqName].linkFunccall(pulledChildRun);
146
- }));
147
- yield this.onAfterLoadRun(pulledParentRun);
157
+ this.onFuncCallReady.subscribe({
158
+ complete: () => __awaiter(this, void 0, void 0, function* () {
159
+ yield this.onBeforeLoadRun();
160
+ pulledChildRuns.forEach((pulledChildRun) => __awaiter(this, void 0, void 0, function* () {
161
+ this.steps[pulledChildRun.func.nqName].view.loadRun(pulledChildRun.id);
162
+ }));
163
+ yield this.onAfterLoadRun(pulledParentRun);
164
+ })
165
+ });
148
166
  return pulledParentRun;
149
167
  });
150
168
  }
151
169
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBpcGVsaW5lLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxZQUFhLFNBQVEsZUFBZTtJQThDL0MsWUFDRSxRQUFnQixFQUNSLGVBQXlCO1FBRWpDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUZSLG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBL0M1QixjQUFTLEdBQXVDLEVBQUUsQ0FBQztRQUNuRCxhQUFRLEdBQXlCLElBQUksQ0FBQztRQUVuQywwQkFBcUIsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ25ELE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2lCQUNoQyxjQUFjLENBQUMsT0FBTyxDQUFDO2lCQUN2QixVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFhLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNsRixDQUFDLENBQUM7UUFFUSxxQ0FBZ0MsR0FBaUMsR0FBRyxFQUFFO1lBQzlFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVRLGtDQUE2QixHQUFHLEdBQUcsRUFBRTtZQUM3QyxPQUFPLENBQUMsU0FBUyxDQUFDLENB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LEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUEsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge2Zyb219IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBKU1ppcCBmcm9tICdqc3ppcCc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7RnVuY3Rpb25WaWV3fSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuaW1wb3J0IHtDb21wdXRhdGlvblZpZXd9IGZyb20gJy4vY29tcHV0YXRpb24tdmlldyc7XG5cbmV4cG9ydCBjbGFzcyBQaXBlbGluZVZpZXcgZXh0ZW5kcyBDb21wdXRhdGlvblZpZXcge1xuICBwdWJsaWMgc3RlcFZpZXdzOiB7IFtucU5hbWU6IHN0cmluZ106IEZ1bmN0aW9uVmlldyB9ID0ge307XG4gIHB1YmxpYyBzdGVwVGFiczogREcuVGFiQ29udHJvbCB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0RmlsZW5hbWUgPSAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSAtICR7bmV3IERhdGUoKVxuICAgICAgLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpXG4gICAgICAucmVwbGFjZUFsbCgvOnxcXC8vZywgJy0nKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnQXJjaGl2ZSc6ICd6aXAnXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnQXJjaGl2ZSddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGZvcm1hdCAhPT0gJ0FyY2hpdmUnKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGV4cG9ydCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCcpO1xuXG4gICAgaWYgKCF0aGlzLnN0ZXBUYWJzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXQgc3RlcCB0YWJzIHBsZWFzZSBmb3IgZXhwb3J0Jyk7XG5cbiAgICBjb25zdCB6aXAgPSBuZXcgSlNaaXAoKTtcblxuICAgIGZvciAoY29uc3QgW25xTmFtZSwgc3RlcFZpZXddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RlcFZpZXdzKSkge1xuICAgICAgdGhpcy5zdGVwVGFicy5jdXJyZW50UGFuZSA9IHRoaXMuc3RlcFRhYnM/LmdldFBhbmUobnFOYW1lKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgY29uc3Qgc3RlcEJsb2IgPSBhd2FpdCBzdGVwVmlldy5leHBvcnRDb25maWchLmV4cG9ydCgnRXhjZWwnKTtcblxuICAgICAgemlwLmZpbGUoc3RlcFZpZXcuZXhwb3J0Q29uZmlnIS5maWxlbmFtZSgnRXhjZWwnKSwgc3RlcEJsb2IsIHtiaW5hcnk6IHRydWUsIGNyZWF0ZUZvbGRlcnM6IGZhbHNlfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB6aXAuZ2VuZXJhdGVBc3luYyh7dHlwZTogJ2Jsb2InfSk7XG4gIH07XG5cbiAgc2NyaXB0Q2FsbHMgPSB7fSBhcyB7W3NjcmlwdE5xTmFtZTogc3RyaW5nXTogREcuRnVuY0NhbGx9O1xuICBlZGl0b3JGdW5jcyA9IHt9IGFzIHtbZWRpdG9yOiBzdHJpbmddOiBERy5GdW5jfTtcbiAgc2NyaXB0RWRpdG9ycyA9IHt9IGFzIHtbc2NyaXB0TmFtZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgdmlld3MgPSB7fSBhcyB7W3NjcmlwdDogc3RyaW5nXTogSFRNTEVsZW1lbnR9O1xuICBzY3JpcHRzOiBERy5TY3JpcHRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBzY3JpcHRTdGVwTmFtZXM6IHN0cmluZ1tdXG4gICkge1xuICAgIHN1cGVyKGZ1bmNOYW1lKTtcblxuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgICAgZXhwb3J0OiB0aGlzLmRlZmF1bHRFeHBvcnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBpbml0KCkge1xuICAgIGNvbnN0IHNjcmlwdFN0ZXBOYW1lcyA9IHRoaXMuc2NyaXB0U3RlcE5hbWVzO1xuXG4gICAgY29uc3Qgc3RlcFNjcmlwdHMgPSBzY3JpcHRTdGVwTmFtZXMubWFwKChzdGVwU2NyaXB0TmFtZSkgPT4ge1xuICAgICAgY29uc3Qgc3RlcFNjcmlwdCA9IChncm9rLmZ1bmN0aW9ucy5ldmFsKHN0ZXBTY3JpcHROYW1lKSBhcyBQcm9taXNlPERHLkZ1bmM+KTtcbiAgICAgIHJldHVybiBzdGVwU2NyaXB0O1xuICAgIH0pO1xuICAgIGNvbnN0IGFsbFN0ZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoc3RlcFNjcmlwdHMpIGFzIFByb21pc2U8REcuU2NyaXB0W10+O1xuXG4gICAgdGhpcy5yb290LmNsYXNzTGlzdC5yZW1vdmUoJ3VpLXBhbmVsJyk7XG5cbiAgICB0aGlzLnNjcmlwdHMgPSBhd2FpdCBhbGxTdGVwc0xvYWRlZDtcblxuICAgIGNvbnN0IGVkaXRvclRhZyA9ICdlZGl0b3I6JyBhcyBjb25zdDtcbiAgICBjb25zdCBuZXdsaW5lU3ltYm9sID0gJ1xcbicgYXMgY29uc3Q7XG4gICAgY29uc3QgZGVmYXVsdEVkaXRvciA9ICdDb21wdXRlOlBpcGVsaW5lU3RlcEVkaXRvcic7XG4gICAgY29uc3QgZXh0cmFjdEVkaXRvciA9IChzY3JpcHQ6IERHLlNjcmlwdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0Q29kZSA9IHNjcmlwdC5zY3JpcHQ7XG4gICAgICBjb25zdCBlZGl0b3JUYWdJbmRleCA9IHNjcmlwdENvZGUuaW5kZXhPZihlZGl0b3JUYWcpO1xuICAgICAgaWYgKGVkaXRvclRhZ0luZGV4IDwgMClcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRFZGl0b3I7XG5cbiAgICAgIGNvbnN0IG5ld2xpbmVJbmRleCA9IHNjcmlwdENvZGUuaW5kZXhPZihuZXdsaW5lU3ltYm9sLCBlZGl0b3JUYWdJbmRleCk7XG4gICAgICBjb25zdCBlZGl0b3JGdW5jTmFtZSA9IHNjcmlwdENvZGUuc3Vic3RyaW5nKGVkaXRvclRhZ0luZGV4ICsgZWRpdG9yVGFnLmxlbmd0aCwgbmV3bGluZUluZGV4KS50cmltKCk7XG5cbiAgICAgIHJldHVybiBlZGl0b3JGdW5jTmFtZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBzY3JpcHQgb2YgdGhpcy5zY3JpcHRzKSB7XG4gICAgICAvLyBUTyBETzogcmVwbGFjZSBmb3IgdHlwZSBndWFyZFxuICAgICAgY29uc3QgZWRpdG9yTmFtZSA9IChzY3JpcHQuc2NyaXB0KSA/IGV4dHJhY3RFZGl0b3Ioc2NyaXB0KTogZGVmYXVsdEVkaXRvcjtcblxuICAgICAgaWYgKCF0aGlzLmVkaXRvckZ1bmNzW2VkaXRvck5hbWVdKVxuICAgICAgICB0aGlzLmVkaXRvckZ1bmNzW2VkaXRvck5hbWVdID0gYXdhaXQoZ3Jvay5mdW5jdGlvbnMuZXZhbChlZGl0b3JOYW1lLnNwbGl0KCcgJykuam9pbignJykpIGFzIFByb21pc2U8REcuRnVuYz4pO1xuXG4gICAgICB0aGlzLnNjcmlwdEVkaXRvcnNbc2NyaXB0Lm5xTmFtZV0gPSBlZGl0b3JOYW1lO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHNjcmlwdCBvZiB0aGlzLnNjcmlwdHMpIHtcbiAgICAgIGNvbnN0IHNjcmlwdENhbGwgPSBzY3JpcHQucHJlcGFyZSgpO1xuICAgICAgY29uc3QgdmlldzogRnVuY3Rpb25WaWV3ID0gYXdhaXQgdGhpcy5lZGl0b3JGdW5jc1t0aGlzLnNjcmlwdEVkaXRvcnNbc2NyaXB0Lm5xTmFtZV1dLmFwcGx5KHsnY2FsbCc6IHNjcmlwdENhbGx9KTtcblxuICAgICAgLy8gc2NyaXB0Q2FsbC5vcHRpb25zWydwYXJlbnRDYWxsSWQnXSA9IHdyYXBwZXJDYWxsLmlkO1xuICAgICAgdGhpcy5zY3JpcHRDYWxsc1tzY3JpcHQubnFOYW1lXSA9IHNjcmlwdENhbGw7XG4gICAgICB0aGlzLnZpZXdzW3NjcmlwdC5ucU5hbWVdID0gdmlldy5yb290O1xuXG4gICAgICAvLyBURU1QIFdBWSBUTyBERUFMIFdJVEggSVRcbiAgICAgIHRoaXMuc3RlcFZpZXdzW3NjcmlwdC5ucU5hbWVdID0gdmlldztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYnVpbGRJTygpIHtcbiAgICBjb25zdCBwaXBlbGluZVRhYnMgPSB1aS50YWJDb250cm9sKHRoaXMudmlld3MpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGlwZWxpbmVUYWJzLnBhbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcGlwZWxpbmVUYWJzLnBhbmVzW2ldLmhlYWRlci5jbGFzc0xpc3QuYWRkKCdhcnJvdy10YWInKTtcbiAgICAgIHBpcGVsaW5lVGFicy5wYW5lc1tpXS5oZWFkZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIHVpLmRpdih1bmRlZmluZWQsICdlbXB0eS1ib3gnKSk7XG4gICAgfVxuICAgIHBpcGVsaW5lVGFicy5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICBwaXBlbGluZVRhYnMucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcblxuICAgIHRoaXMuc3RlcFRhYnMgPSBwaXBlbGluZVRhYnM7XG5cbiAgICByZXR1cm4gcGlwZWxpbmVUYWJzLnJvb3Q7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNjcmlwdENhbGxzKS5mb3JFYWNoKGFzeW5jIChzY3JpcHRDYWxsKSA9PiB7XG4gICAgICBzY3JpcHRDYWxsLm9wdGlvbnNbJ3BhcmVudENhbGxJZCddID0gdGhpcy5mdW5jQ2FsbCEuaWQ7XG4gICAgICBhd2FpdCB0aGlzLnN0ZXBWaWV3c1tzY3JpcHRDYWxsLmZ1bmMubnFOYW1lXS5zYXZlUnVuKHNjcmlwdENhbGwpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUnVuKHRoaXMuZnVuY0NhbGwpO1xuXG4gICAgdGhpcy5sYXN0Q2FsbCA9IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUxvYWRSdW4oKTtcbiAgICBjb25zdCB7cGFyZW50UnVuOiBwdWxsZWRQYXJlbnRSdW4sIGNoaWxkUnVuczogcHVsbGVkQ2hpbGRSdW5zfSA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkQ2hpbGRSdW5zKGZ1bmNDYWxsSWQpO1xuXG4gICAgcHVsbGVkQ2hpbGRSdW5zLmZvckVhY2goYXN5bmMgKHB1bGxlZENoaWxkUnVuKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0ZXBWaWV3c1twdWxsZWRDaGlsZFJ1bi5mdW5jLm5xTmFtZV0ub25BZnRlckxvYWRSdW4ocHVsbGVkQ2hpbGRSdW4pO1xuICAgICAgdGhpcy5zdGVwVmlld3NbcHVsbGVkQ2hpbGRSdW4uZnVuYy5ucU5hbWVdLmxpbmtGdW5jY2FsbChwdWxsZWRDaGlsZFJ1bik7XG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHB1bGxlZFBhcmVudFJ1bik7XG4gICAgcmV0dXJuIHB1bGxlZFBhcmVudFJ1bjtcbiAgfVxufVxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBpcGVsaW5lLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sT0FBTyxZQUFhLFNBQVEsZUFBZTtJQTRDL0MsWUFDRSxRQUFnQixFQUNSLFdBQWlDO1FBRXpDLEtBQUssQ0FDSCxRQUFRLEVBQ1IsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FDeEMsQ0FBQztRQUxNLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQTdDcEMsVUFBSyxHQUFHLEVBQXNFLENBQUM7UUFDL0Usb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBRTVDLGFBQVEsR0FBeUIsSUFBSSxDQUFDO1FBRXBDLGlDQUE0QixHQUFpQyxHQUFHLEVBQUU7WUFDMUUsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRVEsOEJBQXlCLEdBQUcsR0FBRyxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFFUSx1QkFBa0IsR0FBRyxDQUFPLE1BQWMsRUFBRSxF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QUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7S0FBQTtJQUVEOzs7OztLQUtDO0lBQ1ksT0FBTyxDQUFDLFVBQWtCOztZQUNyQyxNQUFNLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFDLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUM3QixRQUFRLEVBQUUsR0FBUyxFQUFFO29CQUNuQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFFN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFPLGNBQWMsRUFBRSxFQUFFO3dCQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pFLENBQUMsQ0FBQSxDQUFDLENBQUM7b0JBRUgsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUE7YUFDRixDQUFDLENBQUM7WUFDSCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7RnVuY3Rpb25WaWV3fSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuaW1wb3J0IHtDb21wdXRhdGlvblZpZXd9IGZyb20gJy4vY29tcHV0YXRpb24tdmlldyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVWaWV3IGV4dGVuZHMgQ29tcHV0YXRpb25WaWV3IHtcbiAgcHVibGljIHN0ZXBzID0ge30gYXMge1tzY3JpcHROcU5hbWU6IHN0cmluZ106IHsgZWRpdG9yOiBzdHJpbmcsIHZpZXc6IEZ1bmN0aW9uVmlldyB9fTtcbiAgcHVibGljIG9uU3RlcENvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIHByaXZhdGUgc3RlcFRhYnM6IERHLlRhYkNvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgcGlwZWxpbmVWaWV3RXhwb3J0RXh0ZW5zaW9uczogKCkgPT4gUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0FyY2hpdmUnOiAnemlwJ1xuICAgIH07XG4gIH07XG5cbiAgcHJvdGVjdGVkIHBpcGVsaW5lVmlld0V4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnQXJjaGl2ZSddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBwaXBlbGluZVZpZXdFeHBvcnQgPSBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZm9ybWF0ICE9PSAnQXJjaGl2ZScpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZXhwb3J0IGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cbiAgICBpZiAoIXRoaXMuc3RlcFRhYnMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBzdGVwIHRhYnMgcGxlYXNlIGZvciBleHBvcnQnKTtcblxuICAgIGNvbnN0IHppcCA9IG5ldyBKU1ppcCgpO1xuXG4gICAgZm9yIChjb25zdCB7bnFOYW1lLCBzdGVwVmlld30gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zdGVwcylcbiAgICAgIC5tYXAoKFtucU5hbWUsIHN0ZXBdKSA9PiAoe25xTmFtZSwgc3RlcFZpZXc6IHN0ZXAudmlld30pKSkge1xuICAgICAgdGhpcy5zdGVwVGFicy5jdXJyZW50UGFuZSA9IHRoaXMuc3RlcFRhYnM/LmdldFBhbmUobnFOYW1lKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgY29uc3Qgc3RlcEJsb2IgPSBhd2FpdCBzdGVwVmlldy5leHBvcnRDb25maWchLmV4cG9ydCgnRXhjZWwnKTtcblxuICAgICAgemlwLmZpbGUoc3RlcFZpZXcuZXhwb3J0Q29uZmlnIS5maWxlbmFtZSgnRXhjZWwnKSwgc3RlcEJsb2IsIHtiaW5hcnk6IHRydWUsIGNyZWF0ZUZvbGRlcnM6IGZhbHNlfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB6aXAuZ2VuZXJhdGVBc3luYyh7dHlwZTogJ2Jsb2InfSk7XG4gIH07XG5cbiAgZXhwb3J0Q29uZmlnID0ge1xuICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHRoaXMucGlwZWxpbmVWaWV3RXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMucGlwZWxpbmVWaWV3RXhwb3J0Rm9ybWF0cygpLFxuICAgIGV4cG9ydDogdGhpcy5waXBlbGluZVZpZXdFeHBvcnQsXG4gICAgZmlsZW5hbWU6IHRoaXMuZGVmYXVsdEV4cG9ydEZpbGVuYW1lLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBzdGVwc0NvbmZpZzoge2Z1bmNOYW1lOiBzdHJpbmd9W11cbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHtoaXN0b3J5RW5hYmxlZDogdHJ1ZSwgaXNUYWJiZWQ6IGZhbHNlfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgaW5pdCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGdW5jQ2FsbEJ5SWQoKTtcblxuICAgIHRoaXMuc3RlcHNDb25maWcuZm9yRWFjaCgoc3RlcENvbmZpZykgPT4ge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLnN0ZXBzW3N0ZXBDb25maWcuZnVuY05hbWVdID0ge307XG4gICAgfSk7XG5cbiAgICBncm9rLmZ1bmN0aW9ucy5vbkFmdGVyUnVuQWN0aW9uLnBpcGUoXG4gICAgICBmaWx0ZXIoKHJ1bikgPT4gT2JqZWN0LmtleXModGhpcy5zdGVwcykuaW5jbHVkZXMocnVuLmZ1bmMubnFOYW1lKSlcbiAgICApLnN1YnNjcmliZSgocnVuKSA9PiB7XG4gICAgICB0aGlzLm9uU3RlcENvbXBsZXRlZC5uZXh0KHJ1bik7XG5cbiAgICAgIGlmIChydW4uZnVuYy5ucU5hbWUgPT09IHRoaXMuc3RlcHNDb25maWdbdGhpcy5zdGVwc0NvbmZpZy5sZW5ndGgtMV0uZnVuY05hbWUpIHRoaXMucnVuKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGVwU2NyaXB0cyA9IE9iamVjdC5rZXlzKHRoaXMuc3RlcHMpLm1hcCgoc3RlcE5xTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgc3RlcFNjcmlwdCA9IChncm9rLmZ1bmN0aW9ucy5ldmFsKHN0ZXBOcU5hbWUpIGFzIFByb21pc2U8REcuRnVuYz4pO1xuICAgICAgcmV0dXJuIHN0ZXBTY3JpcHQ7XG4gICAgfSk7XG4gICAgY29uc3QgYWxsU3RlcHNMb2FkaW5nID0gUHJvbWlzZS5hbGwoc3RlcFNjcmlwdHMpIGFzIFByb21pc2U8REcuU2NyaXB0W10+O1xuICAgIHRoaXMucm9vdC5jbGFzc0xpc3QucmVtb3ZlKCd1aS1wYW5lbCcpO1xuXG4gICAgY29uc3QgbG9hZGVkU2NyaXB0cyA9IGF3YWl0IGFsbFN0ZXBzTG9hZGluZztcblxuICAgIGNvbnN0IGVkaXRvckZ1bmNzID0ge30gYXMge1tlZGl0b3I6IHN0cmluZ106IERHLkZ1bmN9O1xuXG4gICAgY29uc3QgRURJVE9SX1RBRyA9ICdlZGl0b3I6JyBhcyBjb25zdDtcbiAgICBjb25zdCBORVdMSU5FID0gJ1xcbicgYXMgY29uc3Q7XG4gICAgY29uc3QgREVGQVVMVF9FRElUT1IgPSAnQ29tcHV0ZTpQaXBlbGluZVN0ZXBFZGl0b3InO1xuXG4gICAgY29uc3QgZXh0cmFjdEVkaXRvciA9IChzY3JpcHQ6IERHLlNjcmlwdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0Q29kZSA9IHNjcmlwdC5zY3JpcHQ7XG4gICAgICBjb25zdCBlZGl0b3JUYWdJbmRleCA9IHNjcmlwdENvZGUuaW5kZXhPZihFRElUT1JfVEFHKTtcbiAgICAgIGlmIChlZGl0b3JUYWdJbmRleCA8IDApXG4gICAgICAgIHJldHVybiBERUZBVUxUX0VESVRPUjtcblxuICAgICAgY29uc3QgbmV3bGluZUluZGV4ID0gc2NyaXB0Q29kZS5pbmRleE9mKE5FV0xJTkUsIGVkaXRvclRhZ0luZGV4KTtcbiAgICAgIGNvbnN0IGVkaXRvckZ1bmNOYW1lID0gc2NyaXB0Q29kZS5zdWJzdHJpbmcoZWRpdG9yVGFnSW5kZXggKyBFRElUT1JfVEFHLmxlbmd0aCwgbmV3bGluZUluZGV4KS50cmltKCk7XG5cbiAgICAgIHJldHVybiBlZGl0b3JGdW5jTmFtZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZWRpdG9yc0xvYWRpbmcgPSBsb2FkZWRTY3JpcHRzLm1hcChhc3luYyAobG9hZGVkU2NyaXB0KSA9PiB7XG4gICAgICAvLyBUTyBETzogcmVwbGFjZSBmb3IgdHlwZSBndWFyZFxuICAgICAgY29uc3QgZWRpdG9yTmFtZSA9IChsb2FkZWRTY3JpcHQuc2NyaXB0KSA/IGV4dHJhY3RFZGl0b3IobG9hZGVkU2NyaXB0KTogREVGQVVMVF9FRElUT1I7XG4gICAgICBpZiAoIWVkaXRvckZ1bmNzW2VkaXRvck5hbWVdKVxuICAgICAgICBlZGl0b3JGdW5jc1tlZGl0b3JOYW1lXSA9IGF3YWl0KGdyb2suZnVuY3Rpb25zLmV2YWwoZWRpdG9yTmFtZS5zcGxpdCgnICcpLmpvaW4oJycpKSBhcyBQcm9taXNlPERHLkZ1bmM+KTtcbiAgICAgIHRoaXMuc3RlcHNbbG9hZGVkU2NyaXB0Lm5xTmFtZV0uZWRpdG9yID0gZWRpdG9yTmFtZTtcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZWRpdG9yc0xvYWRpbmcpO1xuXG4gICAgY29uc3Qgdmlld3NMb2FkaW5nID0gbG9hZGVkU2NyaXB0cy5tYXAoYXN5bmMgKGxvYWRlZFNjcmlwdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0Q2FsbDogREcuRnVuY0NhbGwgPSBsb2FkZWRTY3JpcHQucHJlcGFyZSgpO1xuXG4gICAgICB0aGlzLnN0ZXBzW2xvYWRlZFNjcmlwdC5ucU5hbWVdLnZpZXcgPVxuICAgICAgICBhd2FpdCBlZGl0b3JGdW5jc1t0aGlzLnN0ZXBzW2xvYWRlZFNjcmlwdC5ucU5hbWVdLmVkaXRvcl0uYXBwbHkoeydjYWxsJzogc2NyaXB0Q2FsbH0pIGFzIEZ1bmN0aW9uVmlldztcblxuICAgICAgaWYgKCF0aGlzLnN0ZXBzW2xvYWRlZFNjcmlwdC5ucU5hbWVdLnZpZXcub25GdW5jQ2FsbFJlYWR5LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHByb20gPSB0aGlzLnN0ZXBzW2xvYWRlZFNjcmlwdC5ucU5hbWVdLnZpZXcub25GdW5jQ2FsbFJlYWR5LnRvUHJvbWlzZSgpO1xuICAgICAgICByZXR1cm4gcHJvbTtcbiAgICAgIH0gZWxzZSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgfVxuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodmlld3NMb2FkaW5nKTtcblxuICAgIHRoaXMub25GdW5jQ2FsbFJlYWR5LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYnVpbGRJTygpIHtcbiAgICBjb25zdCB0YWJzID0gT2JqZWN0LmVudHJpZXModGhpcy5zdGVwcylcbiAgICAgIC5yZWR1Y2UoKHByZXYsIFtmdW5jTmFtZSwgc3RlcF0pID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtmdW5jTmFtZV06IHN0ZXAudmlldy5yb290XG4gICAgICB9KSwge30gYXMgUmVjb3JkPHN0cmluZywgSFRNTEVsZW1lbnQ+KTtcblxuICAgIGNvbnN0IHBpcGVsaW5lVGFicyA9IHVpLnRhYkNvbnRyb2wodGFicyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpcGVsaW5lVGFicy5wYW5lcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIHBpcGVsaW5lVGFicy5wYW5lc1tpXS5oZWFkZXIuY2xhc3NMaXN0LmFkZCgnYXJyb3ctdGFiJyk7XG4gICAgICBwaXBlbGluZVRhYnMucGFuZXNbaV0uaGVhZGVyLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCB1aS5kaXYodW5kZWZpbmVkLCAnZW1wdHktYm94JykpO1xuICAgIH1cbiAgICBwaXBlbGluZVRhYnMucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgcGlwZWxpbmVUYWJzLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnN0ZXBUYWJzID0gcGlwZWxpbmVUYWJzO1xuXG4gICAgcmV0dXJuIHBpcGVsaW5lVGFicy5yb290O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdGVwcylcbiAgICAgIC5mb3JFYWNoKGFzeW5jIChzdGVwKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcmlwdENhbGwgPSBzdGVwLnZpZXcuZnVuY0NhbGw7XG5cbiAgICAgICAgc2NyaXB0Q2FsbC5vcHRpb25zWydwYXJlbnRDYWxsSWQnXSA9IHRoaXMuZnVuY0NhbGwhLmlkO1xuXG4gICAgICAgIHRoaXMuc3RlcHNbc2NyaXB0Q2FsbC5mdW5jLm5xTmFtZV0udmlldy5sYXN0Q2FsbCA9XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGVwc1tzY3JpcHRDYWxsLmZ1bmMubnFOYW1lXS52aWV3LnNhdmVSdW4oc2NyaXB0Q2FsbCk7XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcblxuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCB0aGlzLnNhdmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHNwZWNpZmllZCBoaXN0b3JpY2FsIHJ1bi4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gZnVuY0NhbGxJZCBJRCBvZiBGdW5jQ2FsbCB0byBsb29rIGZvci4gR2V0IGl0IHVzaW5nIHtAc2VlIGZ1bmNDYWxsLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBGdW5jQ2FsbCBhdWdlbWVudGVkIHdpdGggaW5wdXRzJyBhbmQgb3V0cHV0cycgdmFsdWVzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIGxvYWRSdW4oZnVuY0NhbGxJZDogc3RyaW5nKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNvbnN0IHtwYXJlbnRSdW46IHB1bGxlZFBhcmVudFJ1biwgY2hpbGRSdW5zOiBwdWxsZWRDaGlsZFJ1bnN9ID0gYXdhaXQgaGlzdG9yeVV0aWxzLmxvYWRDaGlsZFJ1bnMoZnVuY0NhbGxJZCk7XG5cbiAgICB0aGlzLm9uRnVuY0NhbGxSZWFkeS5zdWJzY3JpYmUoe1xuICAgICAgY29tcGxldGU6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkJlZm9yZUxvYWRSdW4oKTtcblxuICAgICAgICBwdWxsZWRDaGlsZFJ1bnMuZm9yRWFjaChhc3luYyAocHVsbGVkQ2hpbGRSdW4pID0+IHtcbiAgICAgICAgICB0aGlzLnN0ZXBzW3B1bGxlZENoaWxkUnVuLmZ1bmMubnFOYW1lXS52aWV3LmxvYWRSdW4ocHVsbGVkQ2hpbGRSdW4uaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHB1bGxlZFBhcmVudFJ1bik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHB1bGxlZFBhcmVudFJ1bjtcbiAgfVxufVxuIl19
@@ -3,21 +3,19 @@ import { FunctionView } from './function-view';
3
3
  import '../css/rich-function-view.css';
4
4
  export declare class RichFunctionView extends FunctionView {
5
5
  options: {
6
- exportEnabled: boolean;
7
6
  historyEnabled: boolean;
8
7
  isTabbed: boolean;
9
8
  };
10
- private funcCallReplaced;
11
9
  private checkDisability;
12
10
  private isRunning;
13
- constructor(funcCall: DG.FuncCall, options?: {
14
- exportEnabled: boolean;
11
+ static fromFuncCall(funcCall: DG.FuncCall, options?: {
12
+ historyEnabled: boolean;
13
+ isTabbed: boolean;
14
+ }): RichFunctionView;
15
+ constructor(funcName: string, options?: {
15
16
  historyEnabled: boolean;
16
17
  isTabbed: boolean;
17
18
  });
18
- linkFunccall(funcCall: DG.FuncCall): void;
19
- saveRun(callToSave: DG.FuncCall): Promise<DG.FuncCall>;
20
- build(): void;
21
19
  onAfterRun(runFunc: DG.FuncCall): Promise<void>;
22
20
  buildIO(): HTMLElement;
23
21
  buildInputBlock(): HTMLElement;
@@ -33,7 +31,14 @@ export declare class RichFunctionView extends FunctionView {
33
31
  protected get tabsLabels(): string[];
34
32
  protected get categoryToParamMap(): Record<string, DG.Property[]>;
35
33
  run(): Promise<void>;
34
+ private doRun;
36
35
  private renderRunSection;
37
36
  protected defaultExport: (format: string) => Promise<Blob>;
37
+ exportConfig: {
38
+ supportedExtensions: Record<string, string>;
39
+ supportedFormats: string[];
40
+ export: (format: string) => Promise<Blob>;
41
+ filename: (format: string) => string;
42
+ };
38
43
  }
39
44
  //# sourceMappingURL=rich-function-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAQ7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAYvC,OAAO,EAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAVvF,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;gBAGxB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACd,OAAO,GAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACxB;IAsB9C,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IAOrC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;IAYnD,KAAK,IAAI,IAAI;IASb,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IAuIzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAelD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,QAAQ,kBAKrB;IAED,SAAS,KAAK,cAAc,kBAE3B;IAED,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,wBAAwB,aAIrC;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;IAEqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAY1C,OAAO,CAAC,gBAAgB;IAkHxB,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAkI7C;CACH"}
1
+ {"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAOzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IA+IzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAelD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,QAAQ,kBAKrB;IAED,SAAS,KAAK,cAAc,kBAE3B;IAED,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,wBAAwB,aAIrC;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;IAEqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAY5B,KAAK;IAanB,OAAO,CAAC,gBAAgB;IAiHxB,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAoI7C;IAEF,YAAY;;;yBAtI6B,MAAM;;MA2I7C;CACH"}