@datagrok/eda 1.1.27 → 1.1.28

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/111.js +2 -0
  3. package/dist/111.js.map +1 -0
  4. package/dist/153.js +2 -0
  5. package/dist/153.js.map +1 -0
  6. package/dist/23.js +2 -2
  7. package/dist/23.js.map +1 -0
  8. package/dist/234.js +2 -0
  9. package/dist/234.js.map +1 -0
  10. package/dist/242.js +2 -0
  11. package/dist/242.js.map +1 -0
  12. package/dist/260.js +2 -0
  13. package/dist/260.js.map +1 -0
  14. package/dist/317.js +2 -0
  15. package/dist/317.js.map +1 -0
  16. package/dist/33.js +2 -0
  17. package/dist/33.js.map +1 -0
  18. package/dist/348.js +2 -0
  19. package/dist/348.js.map +1 -0
  20. package/dist/377.js +2 -0
  21. package/dist/377.js.map +1 -0
  22. package/dist/412.js +2 -0
  23. package/dist/412.js.map +1 -0
  24. package/dist/415.js +2 -0
  25. package/dist/415.js.map +1 -0
  26. package/dist/531.js +2 -0
  27. package/dist/531.js.map +1 -0
  28. package/dist/583.js +2 -0
  29. package/dist/583.js.map +1 -0
  30. package/dist/589.js +2 -0
  31. package/dist/589.js.map +1 -0
  32. package/dist/603.js +2 -0
  33. package/dist/603.js.map +1 -0
  34. package/dist/656.js +2 -0
  35. package/dist/656.js.map +1 -0
  36. package/dist/682.js +2 -0
  37. package/dist/682.js.map +1 -0
  38. package/dist/705.js +2 -0
  39. package/dist/705.js.map +1 -0
  40. package/dist/731.js +2 -0
  41. package/dist/731.js.map +1 -0
  42. package/dist/738.js +3 -0
  43. package/dist/738.js.map +1 -0
  44. package/dist/763.js +2 -0
  45. package/dist/763.js.map +1 -0
  46. package/dist/778.js +2 -0
  47. package/dist/778.js.map +1 -0
  48. package/dist/783.js +2 -0
  49. package/dist/783.js.map +1 -0
  50. package/dist/793.js +2 -0
  51. package/dist/793.js.map +1 -0
  52. package/dist/907.js +2 -0
  53. package/dist/907.js.map +1 -0
  54. package/dist/91.js +2 -0
  55. package/dist/91.js.map +1 -0
  56. package/dist/950.js +2 -0
  57. package/dist/950.js.map +1 -0
  58. package/dist/package-test.js +2 -2
  59. package/dist/package-test.js.map +1 -0
  60. package/dist/package.js +2 -2
  61. package/dist/package.js.map +1 -0
  62. package/package.json +3 -3
  63. package/src/missing-values-imputation/ui.ts +80 -66
  64. package/src/package.ts +104 -46
  65. package/src/pls/pls-tools.ts +5 -6
  66. package/src/svm.ts +19 -17
  67. package/tsconfig.json +4 -4
  68. package/webpack.config.js +1 -1
  69. package/dist/208.js +0 -2
  70. package/dist/221.js +0 -2
  71. package/dist/231.js +0 -2
  72. package/dist/261.js +0 -2
  73. package/dist/282.js +0 -2
  74. package/dist/334.js +0 -2
  75. package/dist/356.js +0 -2
  76. package/dist/36.js +0 -2
  77. package/dist/367.js +0 -2
  78. package/dist/374.js +0 -2
  79. package/dist/40.js +0 -2
  80. package/dist/413.js +0 -2
  81. package/dist/42.js +0 -2
  82. package/dist/427.js +0 -2
  83. package/dist/445.js +0 -2
  84. package/dist/467.js +0 -2
  85. package/dist/523.js +0 -3
  86. package/dist/533.js +0 -2
  87. package/dist/590.js +0 -2
  88. package/dist/65.js +0 -2
  89. package/dist/694.js +0 -2
  90. package/dist/729.js +0 -2
  91. package/dist/796.js +0 -2
  92. package/dist/901.js +0 -2
  93. package/dist/902.js +0 -2
  94. package/dist/910.js +0 -2
  95. package/dist/972.js +0 -2
  96. /package/dist/{523.js.LICENSE.txt → 738.js.LICENSE.txt} +0 -0
package/src/svm.ts CHANGED
@@ -66,14 +66,14 @@ const MEAN = 'mean';
66
66
  const STD_DEV = 'std dev';
67
67
  const MODEL_PARAMS_NAME = 'alpha';
68
68
  const MODEL_WEIGHTS_NAME = 'weight';
69
- const GAMMA = 'gamma';
70
- const KERNEL = 'kernel';
71
- const KERNEL_PARAMS = 'kernel params';
72
- const KERNEL_PARAM_1 = 'kernel param 1';
73
- const KERNEL_PARAM_2 = 'kernel param 2';
74
- const FEATURES_COUNT_NAME = 'features count';
75
- const TRAIN_SAMPLES_COUNT_NAME = 'train samples count';
76
- const TRAIN_ERROR = 'Train error,%';
69
+ const GAMMA = 'Gamma';
70
+ const KERNEL = 'Kernel';
71
+ const KERNEL_PARAMS = 'Kernel params';
72
+ const KERNEL_PARAM_1 = 'Kernel parameter 1';
73
+ const KERNEL_PARAM_2 = 'Kernel parameter 2';
74
+ const FEATURES_COUNT_NAME = 'Features count';
75
+ const TRAIN_SAMPLES_COUNT_NAME = 'Train samples count';
76
+ const TRAIN_ERROR = 'Train error, %';
77
77
  const KERNEL_TYPE_TO_NAME_MAP = ['linear', 'polynomial', 'RBF', 'sigmoid'];
78
78
  const POSITIVE_NAME = 'positive (P)';
79
79
  const NEGATIVE_NAME = 'negative (N)';
@@ -272,10 +272,8 @@ async function trainAndAnalyzeModel(hyperparameters: any, dataset: DG.ColumnList
272
272
  } // trainAndAnalyzeModel
273
273
 
274
274
  // Wrapper for combining the function "trainAndAnalyzeModel" with Datagrok predicitve tools
275
- export async function getTrainedModel(hyperparameters: any, df: DG.DataFrame, predictColumn: string): Promise<any> {
275
+ export async function getTrainedModel(hyperparameters: any, df: DG.DataFrame, labels: DG.Column): Promise<any> {
276
276
  const columns = df.columns;
277
- const labels = columns.byName(predictColumn);
278
- columns.remove(predictColumn);
279
277
 
280
278
  if (labels.categories.length != 2)
281
279
  throw new Error(WRONG_LABELS_MESSAGE);
@@ -324,7 +322,7 @@ function getConfusionMatrixDF(model: any): DG.DataFrame {
324
322
  // Show training report
325
323
  export function showTrainReport(df: DG.DataFrame, packedModel: any): HTMLElement {
326
324
  const model = getUnpackedModel(packedModel);
327
- return DG.Viewer.form(model.modelInfo).root;
325
+ return DG.Viewer.form(model.modelInfo, {showNavigation: false}).root;
328
326
  } // showTrainReport
329
327
 
330
328
  // Returns trained model packed into UInt8Array
@@ -505,12 +503,16 @@ export async function getPrediction(df: DG.DataFrame, packedModel: any): Promise
505
503
  } // getPrediction
506
504
 
507
505
 
508
- export function isApplicableSVM(df: DG.DataFrame, predictColumn: string): boolean {
506
+ export function isApplicableSVM(df: DG.DataFrame, labels: DG.Column): boolean {
509
507
  const columns = df.columns;
510
- const labels = columns.byName(predictColumn);
511
- columns.remove(predictColumn);
512
- var res: boolean = labels.type == 'string';
508
+ if (!labels.matches('categorical') || labels.categories.length > 2)
509
+ return false;
510
+ var res: boolean = true;
513
511
  for (var i = 0; i < columns.length; i++)
514
- res = res && (columns.byIndex(i).type == 'double' || columns.byIndex(i).type == 'int');
512
+ res = res && (columns.byIndex(i).matches('numerical'));
515
513
  return res;
514
+ }
515
+
516
+ export function isInteractiveSVM(df: DG.DataFrame, labels: DG.Column): boolean {
517
+ return df.rowCount <= 1000;
516
518
  }
package/tsconfig.json CHANGED
@@ -12,7 +12,7 @@
12
12
  // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
13
13
  // "declaration": true, /* Generates corresponding '.d.ts' file. */
14
14
  // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15
- // "sourceMap": true, /* Generates corresponding '.map' file. */
15
+ "sourceMap": true, /* Generates corresponding '.map' file. */
16
16
  // "outFile": "./", /* Concatenate and emit output to single file. */
17
17
  // "outDir": "./", /* Redirect output structure to the directory. */
18
18
  // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
@@ -56,8 +56,8 @@
56
56
  // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
57
57
 
58
58
  /* Source Map Options */
59
- // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
60
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
59
+ "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
60
+ "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
61
61
  // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
62
62
  // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
63
63
 
@@ -66,7 +66,7 @@
66
66
  // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
67
67
 
68
68
  /* Advanced Options */
69
- "skipLibCheck": false, /* Skip type checking of declaration files. */
69
+ "skipLibCheck": true, /* Skip type checking of declaration files. */
70
70
  "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
71
71
  }
72
72
  }
package/webpack.config.js CHANGED
@@ -23,7 +23,7 @@ module.exports = {
23
23
  },
24
24
  ],
25
25
  },
26
- devtool: 'inline-source-map',
26
+ devtool: 'source-map',
27
27
  externals: {
28
28
  'datagrok-api/dg': 'DG',
29
29
  'datagrok-api/grok': 'grok',
package/dist/208.js DELETED
@@ -1,2 +0,0 @@
1
- var eda;(()=>{"use strict";var e,r,t={1208:(e,r,t)=>{var o=t(6845),a=t(2086);onmessage=async function(e){(0,o.P)().then((r=>{let t=e.data,o=(0,a.Gz)(r,t,"normalizeDataset","number");postMessage({callResult:o,args:t})}))}}},o={};function a(e){var r=o[e];if(void 0!==r)return r.exports;var n=o[e]={id:e,loaded:!1,exports:{}};return t[e](n,n.exports,a),n.loaded=!0,n.exports}a.m=t,a.x=()=>{var e=a.O(void 0,[902],(()=>a(1208)));return a.O(e)},a.amdO={},e=[],a.O=(r,t,o,n)=>{if(!t){var i=1/0;for(p=0;p<e.length;p++){for(var[t,o,n]=e[p],s=!0,c=0;c<t.length;c++)(!1&n||i>=n)&&Object.keys(a.O).every((e=>a.O[e](t[c])))?t.splice(c--,1):(s=!1,n<i&&(i=n));if(s){e.splice(p--,1);var l=o();void 0!==l&&(r=l)}}return r}n=n||0;for(var p=e.length;p>0&&e[p-1][2]>n;p--)e[p]=e[p-1];e[p]=[t,o,n]},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>e+".js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var r=a.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&!e;)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{a.b=self.location+"";var e={208:1};a.f.i=(r,t)=>{e[r]||importScripts(a.p+a.u(r))};var r=self.webpackChunkeda=self.webpackChunkeda||[],t=r.push.bind(r);r.push=r=>{var[o,n,i]=r;for(var s in n)a.o(n,s)&&(a.m[s]=n[s]);for(i&&i(a);o.length;)e[o.pop()]=1;t(r)}})(),r=a.x,a.x=()=>a.e(902).then(r);var n=a.x();eda=n})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFtQkUsS0FBS0MsS0FBS0gsR0FDOURBLEVBQW1CRSxLQXZCQzVFLElBQ25CLElBQUtpQixFQUFVNkQsRUFBYUMsR0FBVy9FLEVBQ3ZDLElBQUksSUFBSUssS0FBWXlFLEVBQ2hCMUUsRUFBb0I4QixFQUFFNEMsRUFBYXpFLEtBQ3JDRCxFQUFvQlEsRUFBRVAsR0FBWXlFLEVBQVl6RSxJQUloRCxJQURHMEUsR0FBU0EsRUFBUTNFLEdBQ2RhLEVBQVNNLFFBQ2RrRCxFQUFnQnhELEVBQVMrRCxPQUFTLEVBQ25DTCxFQUEyQjNFLEVBQUssQyxLWG5CN0JQLEVBQU9XLEVBQW9CUyxFQUMvQlQsRUFBb0JTLEVBQUksSUFDaEJULEVBQW9CbUMsRUFBRSxLQUFLMUMsS0FBS0osR1lEeEMsSUFBSXFCLEVBQXNCVixFQUFvQlMsSSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvc3RhcnR1cCBjaHVuayBkZXBlbmRlbmNpZXMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS93b3JrZXJzL25vcm1hbGl6ZURhdGFzZXRXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2Vuc3VyZSBjaHVuayIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFybW9ueSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWZlcnJlZCA9IFtdO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuXHRpZihjaHVua0lkcykge1xuXHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgfHwgMDtcblx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuXHRcdGRlZmVycmVkW2ldID0gW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldO1xuXHRcdHJldHVybjtcblx0fVxuXHR2YXIgbm90RnVsZmlsbGVkID0gSW5maW5pdHk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWQubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG5cdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjaHVua0lkcy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuXHRcdFx0XHRjaHVua0lkcy5zcGxpY2Uoai0tLCAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZihwcmlvcml0eSA8IG5vdEZ1bGZpbGxlZCkgbm90RnVsZmlsbGVkID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGZ1bGZpbGxlZCkge1xuXHRcdFx0ZGVmZXJyZWQuc3BsaWNlKGktLSwgMSlcblx0XHRcdHZhciByID0gZm4oKTtcblx0XHRcdGlmIChyICE9PSB1bmRlZmluZWQpIHJlc3VsdCA9IHI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59OyIsInZhciBuZXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy54O1xuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5lKDkwMikudGhlbihuZXh0KTtcbn07IiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuXG5pbXBvcnQge2V4cG9ydEVEQX0gZnJvbSAnLi4vLi4vd2FzbS9FREFGb3JXZWJXb3JrZXInO1xuaW1wb3J0IHtjcHBXcmFwcGVyfSBmcm9tICcuLi8uLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyLmpzJztcblxub25tZXNzYWdlID0gYXN5bmMgZnVuY3Rpb24gKGV2dCkge1xuICBleHBvcnRFREEoKS50aGVuKG1vZHVsZSA9PiBcbiAgICB7XG4gICAgICBsZXQgYXJncyA9IGV2dC5kYXRhO1xuICAgICAgbGV0IHJlc3VsdCA9IGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCAnbm9ybWFsaXplRGF0YXNldCcsICdudW1iZXInKTtcbiAgICAgIHBvc3RNZXNzYWdlKHsnY2FsbFJlc3VsdCc6IHJlc3VsdCwgJ2FyZ3MnOiBhcmdzfSk7XG4gICAgfSApXG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbi8vIHRoZSBzdGFydHVwIGZ1bmN0aW9uXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuXHQvLyBUaGlzIGVudHJ5IG1vZHVsZSBkZXBlbmRzIG9uIG90aGVyIGxvYWRlZCBjaHVua3MgYW5kIGV4ZWN1dGlvbiBuZWVkIHRvIGJlIGRlbGF5ZWRcblx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbOTAyXSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oMTIwOCkpKVxuXHRfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKF9fd2VicGFja19leHBvcnRzX18pO1xuXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbn07XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uYW1kTyA9IHt9OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZiA9IHt9O1xuLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuLy8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmUgPSAoY2h1bmtJZCkgPT4ge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoKHByb21pc2VzLCBrZXkpID0+IHtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmZba2V5XShjaHVua0lkLCBwcm9taXNlcyk7XG5cdFx0cmV0dXJuIHByb21pc2VzO1xuXHR9LCBbXSkpO1xufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3MgYW5kIHNpYmxpbmcgY2h1bmtzIGZvciB0aGUgZW50cnlwb2ludFxuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZSA9IE9iamVjdC5jcmVhdGUobW9kdWxlKTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdHNldDogKCkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFUyBNb2R1bGVzIG1heSBub3QgYXNzaWduIG1vZHVsZS5leHBvcnRzIG9yIGV4cG9ydHMuKiwgVXNlIEVTTSBleHBvcnQgc3ludGF4LCBpbnN0ZWFkOiAnICsgbW9kdWxlLmlkKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gc2VsZi5sb2NhdGlvbiArIFwiXCI7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDIwODogMVxufTtcblxuLy8gaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nXG52YXIgaW5zdGFsbENodW5rID0gKGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdH1cblx0fVxuXHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR3aGlsZShjaHVua0lkcy5sZW5ndGgpXG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRzLnBvcCgpXSA9IDE7XG5cdHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xufTtcbl9fd2VicGFja19yZXF1aXJlX18uZi5pID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdGltcG9ydFNjcmlwdHMoX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rZWRhXCJdID0gc2VsZltcIndlYnBhY2tDaHVua2VkYVwiXSB8fCBbXTtcbnZhciBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiA9IGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gaW5zdGFsbENodW5rO1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiLy8gcnVuIHN0YXJ0dXBcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy54KCk7XG4iXSwibmFtZXMiOlsiZGVmZXJyZWQiLCJuZXh0Iiwib25tZXNzYWdlIiwiYXN5bmMiLCJldnQiLCJ0aGVuIiwibW9kdWxlIiwiYXJncyIsImRhdGEiLCJyZXN1bHQiLCJwb3N0TWVzc2FnZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJpZCIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwieCIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwiYW1kTyIsImNodW5rSWRzIiwiZm4iLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiaSIsImxlbmd0aCIsImZ1bGZpbGxlZCIsImoiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJrZXkiLCJzcGxpY2UiLCJyIiwiZCIsImRlZmluaXRpb24iLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZiIsImUiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInJlZHVjZSIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJzZXQiLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZXBsYWNlIiwicCIsImIiLCJzZWxmIiwiaW5zdGFsbGVkQ2h1bmtzIiwiY2h1bmtMb2FkaW5nR2xvYmFsIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJwdXNoIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInBvcCJdLCJzb3VyY2VSb290IjoiIn0=