@datagrok-libraries/bio 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export declare enum DrawStyle {
|
|
2
|
+
MSA = "MSA",
|
|
3
|
+
classic = "classic"
|
|
4
|
+
}
|
|
1
5
|
/**
|
|
2
6
|
* A function that prints a string aligned to left or centered.
|
|
3
7
|
*
|
|
@@ -13,7 +17,13 @@
|
|
|
13
17
|
* @param {number} [transparencyRate=0.0] Transparency rate where 1.0 is fully transparent
|
|
14
18
|
* @param {string} [separator=''] Is separator for sequence.
|
|
15
19
|
* @param {boolean} [last=false] Is checker if element last or not.
|
|
20
|
+
* @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
|
|
21
|
+
* @param maxWord Is array of max words for each line.
|
|
22
|
+
* @param maxWordIdx Is index of word we currently draw.
|
|
23
|
+
* @param gridCell Is grid cell, new for updating data in maxWord while rendering.
|
|
16
24
|
* @return {number} x coordinate to start printing at.
|
|
17
25
|
*/
|
|
18
|
-
export declare function printLeftOrCentered(x: number, y: number, w: number, h: number, g: CanvasRenderingContext2D, s: string, color?: string, pivot?: number, left?: boolean, transparencyRate?: number, separator?: string, last?: boolean, drawStyle?:
|
|
26
|
+
export declare function printLeftOrCentered(x: number, y: number, w: number, h: number, g: CanvasRenderingContext2D, s: string, color?: string, pivot?: number, left?: boolean, transparencyRate?: number, separator?: string, last?: boolean, drawStyle?: DrawStyle, maxWord?: {
|
|
27
|
+
[index: string]: number;
|
|
28
|
+
}, maxWordIdx?: number, gridCell?: any): number;
|
|
19
29
|
//# sourceMappingURL=cell-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell-renderer.d.ts","sourceRoot":"","sources":["cell-renderer.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"cell-renderer.d.ts","sourceRoot":"","sources":["cell-renderer.ts"],"names":[],"mappings":"AAGA,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAC1C,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,SAAiB,EAC9D,KAAK,GAAE,MAAU,EAAE,IAAI,UAAQ,EAAE,gBAAgB,GAAE,MAAY,EAC/D,SAAS,GAAE,MAAW,EAAE,IAAI,GAAE,OAAe,EAAE,SAAS,GAAE,SAA6B,EAAE,OAAO,GAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,EAAE,UAAU,GAAE,MAAU,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CA+CxL"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
const undefinedColor = 'rgb(100,100,100)';
|
|
2
2
|
const grayColor = '#808080';
|
|
3
|
+
export var DrawStyle;
|
|
4
|
+
(function (DrawStyle) {
|
|
5
|
+
DrawStyle["MSA"] = "MSA";
|
|
6
|
+
DrawStyle["classic"] = "classic";
|
|
7
|
+
})(DrawStyle || (DrawStyle = {}));
|
|
3
8
|
/**
|
|
4
9
|
* A function that prints a string aligned to left or centered.
|
|
5
10
|
*
|
|
@@ -15,14 +20,18 @@ const grayColor = '#808080';
|
|
|
15
20
|
* @param {number} [transparencyRate=0.0] Transparency rate where 1.0 is fully transparent
|
|
16
21
|
* @param {string} [separator=''] Is separator for sequence.
|
|
17
22
|
* @param {boolean} [last=false] Is checker if element last or not.
|
|
23
|
+
* @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
|
|
24
|
+
* @param maxWord Is array of max words for each line.
|
|
25
|
+
* @param maxWordIdx Is index of word we currently draw.
|
|
26
|
+
* @param gridCell Is grid cell, new for updating data in maxWord while rendering.
|
|
18
27
|
* @return {number} x coordinate to start printing at.
|
|
19
28
|
*/
|
|
20
|
-
export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pivot = 0, left = false, transparencyRate = 1.0, separator = '', last = false, drawStyle =
|
|
29
|
+
export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pivot = 0, left = false, transparencyRate = 1.0, separator = '', last = false, drawStyle = DrawStyle.classic, maxWord = {}, maxWordIdx = 0, gridCell = {}) {
|
|
21
30
|
var _a;
|
|
22
31
|
g.textAlign = 'start';
|
|
23
32
|
const colorPart = s.substring(0);
|
|
24
33
|
let grayPart = last ? '' : separator;
|
|
25
|
-
if (drawStyle ===
|
|
34
|
+
if (drawStyle === DrawStyle.MSA) {
|
|
26
35
|
grayPart = '';
|
|
27
36
|
}
|
|
28
37
|
let textSize = g.measureText(colorPart + grayPart);
|
|
@@ -31,7 +40,7 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
|
|
|
31
40
|
let colorTextSize = g.measureText(colorPart).width;
|
|
32
41
|
const dy = (textSize.fontBoundingBoxAscent + textSize.fontBoundingBoxDescent) / 2;
|
|
33
42
|
textSize = textSize.width;
|
|
34
|
-
if (drawStyle ===
|
|
43
|
+
if (drawStyle === DrawStyle.MSA) {
|
|
35
44
|
maxColorTextSize = maxWord[maxWordIdx];
|
|
36
45
|
textSize = maxWord[maxWordIdx];
|
|
37
46
|
if (maxWordIdx > ((_a = maxWord['bio-maxIndex']) !== null && _a !== void 0 ? _a : 0)) {
|
|
@@ -42,12 +51,12 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
|
|
|
42
51
|
function draw(dx1, dx2) {
|
|
43
52
|
g.fillStyle = color;
|
|
44
53
|
g.globalAlpha = transparencyRate;
|
|
45
|
-
if (drawStyle ===
|
|
54
|
+
if (drawStyle === DrawStyle.classic) {
|
|
46
55
|
g.fillText(colorPart, x + dx1, y + dy);
|
|
47
56
|
g.fillStyle = grayColor;
|
|
48
57
|
g.fillText(grayPart, x + dx2, y + dy);
|
|
49
58
|
}
|
|
50
|
-
if (drawStyle ===
|
|
59
|
+
if (drawStyle === DrawStyle.MSA) {
|
|
51
60
|
g.fillStyle = color;
|
|
52
61
|
g.fillText(colorPart, x + dx1 + ((maxWord[maxWordIdx] - colorTextSize) / 2), y + dy);
|
|
53
62
|
}
|
|
@@ -62,4 +71,4 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
|
|
|
62
71
|
return x + dx + maxColorTextSize;
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNlbGwtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTVCLE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDbkIsd0JBQVcsQ0FBQTtJQUNYLGdDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUMxQyxDQUEyQixFQUFFLENBQVMsRUFBRSxLQUFLLEdBQUcsY0FBYyxFQUM5RCxRQUFnQixDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxtQkFBMkIsR0FBRyxFQUMvRCxZQUFvQixFQUFFLEVBQUUsT0FBZ0IsS0FBSyxFQUFFLFlBQXVCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBdUMsRUFBRSxFQUFFLGFBQXFCLENBQUMsRUFBRSxXQUFnQixFQUFFOztJQUM5SyxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLFFBQVEsR0FBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFakIsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDMUIsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBRyxDQUFDLE1BQUEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsRUFBRTtZQUMvQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDckM7S0FDRjtJQUVELFNBQVMsSUFBSSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3BDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRCxJQUFJLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FFN0Q7U0FBTTtRQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztLQUNsQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB1bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbmNvbnN0IGdyYXlDb2xvciA9ICcjODA4MDgwJztcblxuZXhwb3J0IGVudW0gRHJhd1N0eWxlIHtcbiAgTVNBID0gJ01TQScsXG4gIGNsYXNzaWMgPSAnY2xhc3NpYycsXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHN0cmluZyBhbGlnbmVkIHRvIGxlZnQgb3IgY2VudGVyZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgeSBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHcgV2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gaCBIZWlnaHQuXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZyBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBTdHJpbmcgdG8gcHJpbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPXVuZGVmaW5lZENvbG9yXSBTdHJpbmcgY29sb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bpdm90PTBdIFBpcnZvdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9ZmFsc2VdIElzIGxlZnQgYWxpZ25lZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdHJhbnNwYXJlbmN5UmF0ZT0wLjBdIFRyYW5zcGFyZW5jeSByYXRlIHdoZXJlIDEuMCBpcyBmdWxseSB0cmFuc3BhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JyddIElzIHNlcGFyYXRvciBmb3Igc2VxdWVuY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsYXN0PWZhbHNlXSBJcyBjaGVja2VyIGlmIGVsZW1lbnQgbGFzdCBvciBub3QuXG4gKiBAcGFyYW0gZHJhd1N0eWxlIElzIGRyYXcgc3R5bGUuIE1TQSAtIGZvciBtdWx0aWNoYXJTZXEsIGNsYXNzaWMgLSBmb3Igb3RoZXIgc2VxLlxuICogQHBhcmFtIG1heFdvcmQgSXMgYXJyYXkgb2YgbWF4IHdvcmRzIGZvciBlYWNoIGxpbmUuXG4gKiBAcGFyYW0gbWF4V29yZElkeCBJcyBpbmRleCBvZiB3b3JkIHdlIGN1cnJlbnRseSBkcmF3LlxuICogQHBhcmFtIGdyaWRDZWxsIElzIGdyaWQgY2VsbCwgbmV3IGZvciB1cGRhdGluZyBkYXRhIGluIG1heFdvcmQgd2hpbGUgcmVuZGVyaW5nLlxuICogQHJldHVybiB7bnVtYmVyfSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgcHJpbnRpbmcgYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludExlZnRPckNlbnRlcmVkKFxuICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gIGc6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgczogc3RyaW5nLCBjb2xvciA9IHVuZGVmaW5lZENvbG9yLFxuICBwaXZvdDogbnVtYmVyID0gMCwgbGVmdCA9IGZhbHNlLCB0cmFuc3BhcmVuY3lSYXRlOiBudW1iZXIgPSAxLjAsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gJycsIGxhc3Q6IGJvb2xlYW4gPSBmYWxzZSwgZHJhd1N0eWxlOiBEcmF3U3R5bGUgPSBEcmF3U3R5bGUuY2xhc3NpYywgbWF4V29yZDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9ID0ge30sIG1heFdvcmRJZHg6IG51bWJlciA9IDAsIGdyaWRDZWxsOiBhbnkgPSB7fSk6IG51bWJlciB7XG4gIGcudGV4dEFsaWduID0gJ3N0YXJ0JztcbiAgY29uc3QgY29sb3JQYXJ0ID0gcy5zdWJzdHJpbmcoMCk7XG4gIGxldCBncmF5UGFydCA9IGxhc3QgPyAnJyA6IHNlcGFyYXRvcjtcbiAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLk1TQSkge1xuICAgIGdyYXlQYXJ0ID0gJyc7XG4gIH1cblxuICBsZXQgdGV4dFNpemU6IGFueSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0ICsgZ3JheVBhcnQpO1xuICBjb25zdCBpbmRlbnQgPSA1O1xuXG4gIGxldCBtYXhDb2xvclRleHRTaXplID0gZy5tZWFzdXJlVGV4dChjb2xvclBhcnQpLndpZHRoO1xuICBsZXQgY29sb3JUZXh0U2l6ZSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0KS53aWR0aDtcbiAgY29uc3QgZHkgPSAodGV4dFNpemUuZm9udEJvdW5kaW5nQm94QXNjZW50ICsgdGV4dFNpemUuZm9udEJvdW5kaW5nQm94RGVzY2VudCkgLyAyO1xuICB0ZXh0U2l6ZSA9IHRleHRTaXplLndpZHRoO1xuICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgbWF4Q29sb3JUZXh0U2l6ZSA9IG1heFdvcmRbbWF4V29yZElkeF07XG4gICAgdGV4dFNpemUgPSBtYXhXb3JkW21heFdvcmRJZHhdO1xuICAgIGlmIChtYXhXb3JkSWR4ID4gKG1heFdvcmRbJ2Jpby1tYXhJbmRleCddID8/IDApKSB7XG4gICAgICBtYXhXb3JkWydiaW8tbWF4SW5kZXgnXSA9IG1heFdvcmRJZHg7XG4gICAgICBncmlkQ2VsbC5jZWxsLmNvbHVtbi50ZW1wID0gbWF4V29yZDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3KGR4MTogbnVtYmVyLCBkeDI6IG51bWJlcik6IHZvaWQge1xuICAgIGcuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgZy5nbG9iYWxBbHBoYSA9IHRyYW5zcGFyZW5jeVJhdGU7XG4gICAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLmNsYXNzaWMpIHtcbiAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxLCB5ICsgZHkpO1xuICAgICAgZy5maWxsU3R5bGUgPSBncmF5Q29sb3I7XG4gICAgICBnLmZpbGxUZXh0KGdyYXlQYXJ0LCB4ICsgZHgyLCB5ICsgZHkpO1xuICAgIH1cbiAgICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgICBnLmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEgKyAoKG1heFdvcmRbbWF4V29yZElkeF0gLSBjb2xvclRleHRTaXplKSAvIDIpLCB5ICsgZHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZWZ0IHx8IHRleHRTaXplID4gdykge1xuICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICByZXR1cm4geCArIG1heENvbG9yVGV4dFNpemUgKyBnLm1lYXN1cmVUZXh0KGdyYXlQYXJ0KS53aWR0aDtcblxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZSkgLyAyO1xuICAgIGRyYXcoZHgsIGR4ICsgbWF4Q29sb3JUZXh0U2l6ZSk7XG4gICAgcmV0dXJuIHggKyBkeCArIG1heENvbG9yVGV4dFNpemU7XG4gIH1cbn1cblxuIl19
|