@datagrok-libraries/statistics
Advanced tools
Comparing version 1.2.4 to 1.2.5
# statistics changelog | ||
## 1.2.5 (2023-08-25) | ||
### Features | ||
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Added lineStyle to the IFitSeriesOptions interface | ||
* [#2106](https://github.com/datagrok-ai/public/issues/2106): Added code comments about line style | ||
### Bug Fixes | ||
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Improved curves properties and rendering: | ||
* Fixed the curve fitting algorithm | ||
* Fixed axes scales | ||
## 1.2.4 (2023-08-23) | ||
@@ -4,0 +17,0 @@ |
@@ -7,3 +7,3 @@ { | ||
"friendlyName": "statistics", | ||
"version": "1.2.4", | ||
"version": "1.2.5", | ||
"description": "", | ||
@@ -10,0 +10,0 @@ "dependencies": { |
@@ -72,2 +72,3 @@ import { Property } from 'datagrok-api/src/entities'; | ||
export declare type FitMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top'; | ||
export declare type FitLineStyle = 'solid' | 'dotted' | 'dashed' | 'dashdotted'; | ||
/** A point in the fit series. Only x and y are required. Can override some fields defined in IFitSeriesOptions. */ | ||
@@ -127,2 +128,3 @@ export interface IFitPoint { | ||
markerType?: FitMarkerType; | ||
lineStyle?: FitLineStyle; | ||
pointColor?: string; | ||
@@ -129,0 +131,0 @@ fitLineColor?: string; |
@@ -37,2 +37,53 @@ /* eslint-disable valid-jsdoc */ | ||
} | ||
/** Returns median points from within multiple points with the same x. */ | ||
function getMedianPoints(data) { | ||
const medianPoints = { x: [], y: [] }; | ||
const currentPoints = { x: [data.x[0]], y: [data.y[0]] }; | ||
for (let i = 1; i < data.x.length; i++) { | ||
if (data.x[i] === currentPoints.x[0]) { | ||
currentPoints.x[currentPoints.x.length] = data.x[i]; | ||
currentPoints.y[currentPoints.y.length] = data.y[i]; | ||
continue; | ||
} | ||
const mid = Math.floor(currentPoints.y.length / 2); | ||
const sortedPoints = currentPoints.y.sort((a, b) => a - b); | ||
const median = sortedPoints.length % 2 === 0 ? (sortedPoints[mid - 1] + sortedPoints[mid]) / 2 : sortedPoints[mid]; | ||
medianPoints.x[medianPoints.x.length] = currentPoints.x[0]; | ||
medianPoints.y[medianPoints.y.length] = median; | ||
currentPoints.x = [data.x[i]]; | ||
currentPoints.y = [data.y[i]]; | ||
} | ||
return medianPoints; | ||
} | ||
/** Returns logarithmic IC50 parameter bounds. */ | ||
function logIC50ParameterBounds(ic50Bounds) { | ||
if (ic50Bounds) { | ||
if (ic50Bounds.max !== undefined) | ||
ic50Bounds.max = Math.log10(ic50Bounds.max); | ||
if (ic50Bounds.min !== undefined) { | ||
ic50Bounds.min = ic50Bounds.min === 0 ? | ||
-Number.MAX_VALUE : Math.log10(ic50Bounds.min); | ||
} | ||
} | ||
return ic50Bounds; | ||
} | ||
function changeBounds(bounds, chartOptions) { | ||
let x = bounds.x; | ||
let y = bounds.y; | ||
let width = bounds.width; | ||
let height = bounds.height; | ||
if (chartOptions.minX !== undefined && chartOptions.minX > 0) { | ||
width += x - chartOptions.minX; | ||
x = chartOptions.minX; | ||
} | ||
if (chartOptions.maxX !== undefined && chartOptions.maxX > 0) | ||
width += chartOptions.maxX - (x + width); | ||
if (chartOptions.minY !== undefined) { | ||
height += y - chartOptions.minY; | ||
y = chartOptions.minY; | ||
} | ||
if (chartOptions.maxY !== undefined) | ||
height += chartOptions.maxY - (y + height); | ||
return new DG.Rect(x, y, width, height); | ||
} | ||
/** Returns the bounds of an {@link IFitChartData} object */ | ||
@@ -42,4 +93,2 @@ export function getChartBounds(chartData) { | ||
const o = chartData.chartOptions; | ||
if ((o === null || o === void 0 ? void 0 : o.minX) && o.minY && o.maxX && o.maxY) | ||
return new DG.Rect(o.minX, o.minY, o.maxX - o.minX, o.maxY - o.minY); | ||
if (!((_a = chartData.series) === null || _a === void 0 ? void 0 : _a.length) || chartData.series.length === 0) | ||
@@ -54,3 +103,3 @@ return new DG.Rect(0, 0, 1, 1); | ||
} | ||
return bounds; | ||
return o ? changeBounds(bounds, o) : bounds; | ||
} | ||
@@ -70,3 +119,5 @@ } | ||
y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) }; | ||
return fitData(data, fitFunc, FitErrorModel.Constant, series.parameterBounds); | ||
if (series.parameterBounds && (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX)) | ||
series.parameterBounds[2] = logIC50ParameterBounds(series.parameterBounds[2]); | ||
return fitData(getMedianPoints(data), fitFunc, FitErrorModel.Constant, series.parameterBounds); | ||
} | ||
@@ -90,2 +141,2 @@ /** Returns series confidence interval functions */ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBQ1IsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxNQUFNLFVBQVUscUJBQXFCLENBQUMsVUFBeUI7OztJQUM3RCxtQkFBTyxVQUFVLENBQUMsSUFBSSxFQUFDLE9BQU8sd0NBQVAsT0FBTyxJQUFNLHNCQUFzQixFQUFFLEVBQUM7QUFDL0QsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQW1CO0lBQ2pELE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVB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QVU7UUFDcEIsTUFBTSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM1RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtcbiAgRml0RXJyb3JNb2RlbCxcbiAgZml0RGF0YSxcbiAgZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzLFxuICBnZXRTdGF0aXN0aWNzLFxuICBGaXRGdW5jdGlvbixcbiAgZ2V0Rml0dGVkQ3VydmUsXG4gIEZpdFN0YXRpc3RpY3MsXG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIEZpdEN1cnZlLFxuICBnZXRPckNyZWF0ZUZpdEZ1bmN0aW9uLFxuICBJRml0UG9pbnQsXG4gIElGaXRDaGFydERhdGEsXG4gIElGaXRTZXJpZXMsXG4gIGZpdFNlcmllc1Byb3BlcnRpZXMsXG4gIGZpdENoYXJ0RGF0YVByb3BlcnRpZXMsXG4gIFRBR19GSVQsXG59IGZyb20gJy4vZml0LWN1cnZlJztcblxuZXhwb3J0IHR5cGUgTG9nT3B0aW9ucyA9IHtcbiAgbG9nWDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgbG9nWTogYm9vbGVhbiB8IHVuZGVmaW5lZFxufTtcblxuXG4vKiogQ3JlYXRlcyBuZXcgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbiB7QGxpbmsgcHJvcGVydGllc30gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IERHLlByb3BlcnR5W10pOiBhbnkge1xuICBjb25zdCBvOiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBwIG9mIHByb3BlcnRpZXMpIHtcbiAgICBpZiAocC5kZWZhdWx0VmFsdWUgIT09IG51bGwpXG4gICAgICBvW3AubmFtZV0gPSBwLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICByZXR1cm4gbztcbn1cblxuLy8gVE9ETzogc2V0IGNvbHVtbiB3aXRoIGZpdCByZWFkb25seSB2YWx1ZSAoaW4gZGV0ZWN0b3JzKSAtIHRyeSB0byBvbmx5IHNob3cgY2hhcnQgLSByZW1vdmUgZWRpdGFibGUgb3IgcHJldmVudCBpdD8/XG4vKiogQ3JlYXRlcyBkZWZhdWx0IHtAbGluayBJRml0Q2hhcnREYXRhfSBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4ge1xuICAgIGNoYXJ0T3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0Q2hhcnREYXRhUHJvcGVydGllcyksXG4gICAgc2VyaWVzT3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0U2VyaWVzUHJvcGVydGllcyksXG4gIH07XG59XG5cbi8qKiBSZXR1cm5zIGV4aXN0aW5nLCBvciBjcmVhdGVzIG5ldyBjb2x1bW4gZGVmYXVsdCBjaGFydCBvcHRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNoYXJ0T3B0aW9ucyhncmlkQ29sdW1uOiBERy5HcmlkQ29sdW1uKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiBncmlkQ29sdW1uLnRlbXBbVEFHX0ZJVF0gPz89IGNyZWF0ZURlZmF1bHRDaGFydERhdGEoKTtcbn1cblxuLyoqIFJldHVybnMgcG9pbnRzIGFycmF5cyBmcm9tIHtAbGluayBJRml0UG9pbnR9IGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRzQXJyYXlzKHBvaW50czogSUZpdFBvaW50W10pOiB7eHM6IG51bWJlcltdLCB5czogbnVtYmVyW119IHtcbiAgY29uc3QgeHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHlzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHhzW2ldID0gcG9pbnRzW2ldLng7XG4gICAgeXNbaV0gPSBwb2ludHNbaV0ueTtcbiAgfVxuICByZXR1cm4ge3hzOiB4cywgeXM6IHlzfTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAobz8ubWluWCAmJiBvLm1pblkgJiYgby5tYXhYICYmIG8ubWF4WSlcbiAgICByZXR1cm4gbmV3IERHLlJlY3Qoby5taW5YLCBvLm1pblksIG8ubWF4WCAtIG8ubWluWCwgby5tYXhZIC0gby5taW5ZKTtcbiAgaWYgKCFjaGFydERhdGEuc2VyaWVzPy5sZW5ndGggfHwgY2hhcnREYXRhLnNlcmllcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG5ldyBERy5SZWN0KDAsIDAsIDEsIDEpO1xuICBlbHNlIHtcbiAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzWzBdLnBvaW50cyk7XG4gICAgbGV0IGJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHhzLCB5cyk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFydERhdGEuc2VyaWVzIS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qge3hzLCB5c30gPSBnZXRQb2ludHNBcnJheXMoY2hhcnREYXRhLnNlcmllc1tpXS5wb2ludHMpO1xuICAgICAgYm91bmRzID0gYm91bmRzLnVuaW9uKERHLlJlY3QuZnJvbVhZQXJyYXlzKHhzLCB5cykpO1xuICAgIH1cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBmaXQgZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNGaXRGdW5jdGlvbihzZXJpZXM6IElGaXRTZXJpZXMpOiBGaXRGdW5jdGlvbiB7XG4gIHJldHVybiBnZXRPckNyZWF0ZUZpdEZ1bmN0aW9uKHNlcmllcy5maXRGdW5jdGlvbiEpO1xufVxuXG4vKiogUmV0dXJucyBhIGN1cnZlIGZ1bmN0aW9uLCBlaXRoZXIgdXNpbmcgdGhlIHByZS1jb21wdXRlZCBwYXJhbWV0ZXJzIG9yIGJ5IGZpdHRpbmcgb24tdGhlLWZseSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24pOiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICByZXR1cm4gZ2V0Rml0dGVkQ3VydmUoZml0RnVuYy55LCBzZXJpZXMucGFyYW1ldGVycyEpO1xufVxuXG4vKiogRml0cyB0aGUgc2VyaWVzIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBzZXJpZXMgZml0dGluZyBzZXR0aW5ncyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpdFNlcmllcyhzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uLCBsb2dPcHRpb25zPzogTG9nT3B0aW9ucyk6IEZpdEN1cnZlIHtcbiAgY29uc3QgZGF0YSA9IHt4OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dZID8gTWF0aC5sb2cxMChwLnkpIDogcC55KX07XG4gIHJldHVybiBmaXREYXRhKGRhdGEsIGZpdEZ1bmMsIEZpdEVycm9yTW9kZWwuQ29uc3RhbnQsIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNDb25maWRlbmNlSW50ZXJ2YWwoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbixcbiAgdXNlclBhcmFtc0ZsYWc6IGJvb2xlYW4pOiBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3QgZGF0YSA9IHVzZXJQYXJhbXNGbGFnID8ge3g6IHNlcmllcy5wb2ludHMubWFwKChwKSA9PiBwLngpLCB5OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gcC55KX0gOlxuICAgIHt4OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBwLngpLFxuICAgICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGEsIHNlcmllcy5wYXJhbWV0ZXJzLCBmaXRGdW5jLnksIDAuMDUsIEZpdEVycm9yTW9kZWwuQ29uc3RhbnQpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc1N0YXRpc3RpY3Moc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0U3RhdGlzdGljcyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBR1IsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxNQUFNLFVBQVUscUJBQXFCLENBQUMsVUFBeUI7OztJQUM3RCxtQkFBTyxVQUFVLENBQUMsSUFBSSxFQUFDLE9BQU8sd0NBQVAsT0FBTyxJQUFNLHNCQUFzQixFQUFFLEVBQUM7QUFDL0QsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQW1CO0lBQ2pELE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVB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Q0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7XG4gIEZpdEVycm9yTW9kZWwsXG4gIGZpdERhdGEsXG4gIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyxcbiAgZ2V0U3RhdGlzdGljcyxcbiAgRml0RnVuY3Rpb24sXG4gIGdldEZpdHRlZEN1cnZlLFxuICBGaXRTdGF0aXN0aWNzLFxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzLFxuICBGaXRDdXJ2ZSxcbiAgZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbixcbiAgSUZpdFBvaW50LFxuICBJRml0Q2hhcnREYXRhLFxuICBJRml0U2VyaWVzLFxuICBmaXRTZXJpZXNQcm9wZXJ0aWVzLFxuICBmaXRDaGFydERhdGFQcm9wZXJ0aWVzLFxuICBUQUdfRklULFxuICBGaXRQYXJhbUJvdW5kcyxcbiAgSUZpdENoYXJ0T3B0aW9ucyxcbn0gZnJvbSAnLi9maXQtY3VydmUnO1xuXG5leHBvcnQgdHlwZSBMb2dPcHRpb25zID0ge1xuICBsb2dYOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBsb2dZOiBib29sZWFuIHwgdW5kZWZpbmVkXG59O1xuXG5cbi8qKiBDcmVhdGVzIG5ldyBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgc3BlY2lmaWVkIGluIHtAbGluayBwcm9wZXJ0aWVzfSAqL1xuZnVuY3Rpb24gY3JlYXRlRnJvbVByb3BlcnRpZXMocHJvcGVydGllczogREcuUHJvcGVydHlbXSk6IGFueSB7XG4gIGNvbnN0IG86IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IHAgb2YgcHJvcGVydGllcykge1xuICAgIGlmIChwLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbClcbiAgICAgIG9bcC5uYW1lXSA9IHAuZGVmYXVsdFZhbHVlO1xuICB9XG4gIHJldHVybiBvO1xufVxuXG4vLyBUT0RPOiBzZXQgY29sdW1uIHdpdGggZml0IHJlYWRvbmx5IHZhbHVlIChpbiBkZXRlY3RvcnMpIC0gdHJ5IHRvIG9ubHkgc2hvdyBjaGFydCAtIHJlbW92ZSBlZGl0YWJsZSBvciBwcmV2ZW50IGl0Pz9cbi8qKiBDcmVhdGVzIGRlZmF1bHQge0BsaW5rIElGaXRDaGFydERhdGF9IG9iamVjdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRDaGFydERhdGEoKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiB7XG4gICAgY2hhcnRPcHRpb25zOiBjcmVhdGVGcm9tUHJvcGVydGllcyhmaXRDaGFydERhdGFQcm9wZXJ0aWVzKSxcbiAgICBzZXJpZXNPcHRpb25zOiBjcmVhdGVGcm9tUHJvcGVydGllcyhmaXRTZXJpZXNQcm9wZXJ0aWVzKSxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgZXhpc3RpbmcsIG9yIGNyZWF0ZXMgbmV3IGNvbHVtbiBkZWZhdWx0IGNoYXJ0IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ2hhcnRPcHRpb25zKGdyaWRDb2x1bW46IERHLkdyaWRDb2x1bW4pOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIGdyaWRDb2x1bW4udGVtcFtUQUdfRklUXSA/Pz0gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpO1xufVxuXG4vKiogUmV0dXJucyBwb2ludHMgYXJyYXlzIGZyb20ge0BsaW5rIElGaXRQb2ludH0gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludHNBcnJheXMocG9pbnRzOiBJRml0UG9pbnRbXSk6IHt4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXX0ge1xuICBjb25zdCB4czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgeXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgeHNbaV0gPSBwb2ludHNbaV0ueDtcbiAgICB5c1tpXSA9IHBvaW50c1tpXS55O1xuICB9XG4gIHJldHVybiB7eHM6IHhzLCB5czogeXN9O1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gcG9pbnRzIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyB3aXRoIHRoZSBzYW1lIHguICovXG5mdW5jdGlvbiBnZXRNZWRpYW5Qb2ludHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSB7XG4gIGNvbnN0IG1lZGlhblBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW10sIHk6IFtdfTtcbiAgY29uc3QgY3VycmVudFBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW2RhdGEueFswXV0sIHk6IFtkYXRhLnlbMF1dfTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YS54W2ldID09PSBjdXJyZW50UG9pbnRzLnhbMF0pIHtcbiAgICAgIGN1cnJlbnRQb2ludHMueFtjdXJyZW50UG9pbnRzLngubGVuZ3RoXSA9IGRhdGEueFtpXTtcbiAgICAgIGN1cnJlbnRQb2ludHMueVtjdXJyZW50UG9pbnRzLnkubGVuZ3RoXSA9IGRhdGEueVtpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKGN1cnJlbnRQb2ludHMueS5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBzb3J0ZWRQb2ludHMgPSBjdXJyZW50UG9pbnRzLnkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGNvbnN0IG1lZGlhbiA9IHNvcnRlZFBvaW50cy5sZW5ndGggJSAyID09PSAwID8gKHNvcnRlZFBvaW50c1ttaWQgLSAxXSArIHNvcnRlZFBvaW50c1ttaWRdKSAvIDIgOiBzb3J0ZWRQb2ludHNbbWlkXTtcblxuICAgIG1lZGlhblBvaW50cy54W21lZGlhblBvaW50cy54Lmxlbmd0aF0gPSBjdXJyZW50UG9pbnRzLnhbMF07XG4gICAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcbiAgICBjdXJyZW50UG9pbnRzLnggPSBbZGF0YS54W2ldXTtcbiAgICBjdXJyZW50UG9pbnRzLnkgPSBbZGF0YS55W2ldXTtcbiAgfVxuXG4gIHJldHVybiBtZWRpYW5Qb2ludHM7XG59XG5cbi8qKiBSZXR1cm5zIGxvZ2FyaXRobWljIElDNTAgcGFyYW1ldGVyIGJvdW5kcy4gKi9cbmZ1bmN0aW9uIGxvZ0lDNTBQYXJhbWV0ZXJCb3VuZHMoaWM1MEJvdW5kczogRml0UGFyYW1Cb3VuZHMpOiBGaXRQYXJhbUJvdW5kcyB7XG4gIGlmIChpYzUwQm91bmRzKSB7XG4gICAgaWYgKGljNTBCb3VuZHMubWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICBpYzUwQm91bmRzLm1heCA9IE1hdGgubG9nMTAoaWM1MEJvdW5kcy5tYXgpO1xuICAgIGlmIChpYzUwQm91bmRzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpYzUwQm91bmRzLm1pbiA9IGljNTBCb3VuZHMubWluID09PSAwID9cbiAgICAgICAgLU51bWJlci5NQVhfVkFMVUUgOiBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGljNTBCb3VuZHM7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUJvdW5kcyhib3VuZHM6IERHLlJlY3QsIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyk6IERHLlJlY3Qge1xuICBsZXQgeCA9IGJvdW5kcy54O1xuICBsZXQgeSA9IGJvdW5kcy55O1xuICBsZXQgd2lkdGggPSBib3VuZHMud2lkdGg7XG4gIGxldCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gIGlmIChjaGFydE9wdGlvbnMubWluWCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5YID4gMCkge1xuICAgIHdpZHRoICs9IHggLSBjaGFydE9wdGlvbnMubWluWDtcbiAgICB4ID0gY2hhcnRPcHRpb25zLm1pblg7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhYICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1heFggPiAwKVxuICAgIHdpZHRoICs9IGNoYXJ0T3B0aW9ucy5tYXhYIC0gKHggKyB3aWR0aCk7XG4gIGlmIChjaGFydE9wdGlvbnMubWluWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaGVpZ2h0ICs9IHkgLSBjaGFydE9wdGlvbnMubWluWTtcbiAgICB5ID0gY2hhcnRPcHRpb25zLm1pblk7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhZICE9PSB1bmRlZmluZWQpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBib3VuZHMgPSBib3VuZHMudW5pb24oREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvID8gY2hhbmdlQm91bmRzKGJvdW5kcywgbyEpOiBib3VuZHM7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGZpdCBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0ZpdEZ1bmN0aW9uKHNlcmllczogSUZpdFNlcmllcyk6IEZpdEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzLmZpdEZ1bmN0aW9uISk7XG59XG5cbi8qKiBSZXR1cm5zIGEgY3VydmUgZnVuY3Rpb24sIGVpdGhlciB1c2luZyB0aGUgcHJlLWNvbXB1dGVkIHBhcmFtZXRlcnMgb3IgYnkgZml0dGluZyBvbi10aGUtZmx5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmUoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6ICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBnZXRGaXR0ZWRDdXJ2ZShmaXRGdW5jLnksIHNlcmllcy5wYXJhbWV0ZXJzISk7XG59XG5cbi8qKiBGaXRzIHRoZSBzZXJpZXMgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcmllcyBmaXR0aW5nIHNldHRpbmdzICovXG5leHBvcnQgZnVuY3Rpb24gZml0U2VyaWVzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q3VydmUge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGEpLCBmaXRGdW5jLCBGaXRFcnJvck1vZGVsLkNvbnN0YW50LCBzZXJpZXMucGFyYW1ldGVyQm91bmRzKTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZnVuY3Rpb25zICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzQ29uZmlkZW5jZUludGVydmFsKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sXG4gIHVzZXJQYXJhbXNGbGFnOiBib29sZWFuKTogRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGRhdGEgPSB1c2VyUGFyYW1zRmxhZyA/IHt4OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gcC54KSwgeTogc2VyaWVzLnBvaW50cy5tYXAoKHApID0+IHAueSl9IDpcbiAgICB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC54KSxcbiAgICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCAwLjA1LCBGaXRFcnJvck1vZGVsLkNvbnN0YW50KTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIHN0YXRpc3RpY3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNTdGF0aXN0aWNzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24pOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZGF0YSA9IHt4OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldFN0YXRpc3RpY3MoZGF0YSwgc2VyaWVzLnBhcmFtZXRlcnMsIGZpdEZ1bmMueSwgdHJ1ZSk7XG59XG4iXX0= |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
301923
1952