@rian8337/osu-strain-graph-generator 2.0.0-alpha.2 → 2.0.0-alpha.6
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 +6 -6
- package/dist/Chart.js +0 -283
- package/dist/Chart.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rian8337/osu-strain-graph-generator",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.6",
|
|
4
4
|
"description": "A module for generating strain graph of an osu!standard beatmap.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"osu",
|
|
@@ -23,20 +23,20 @@
|
|
|
23
23
|
"scripts": {
|
|
24
24
|
"build": "rollup -c ../../rollup.config.js",
|
|
25
25
|
"lint": "eslint --ext ts",
|
|
26
|
-
"
|
|
26
|
+
"prepublishOnly": "npm run build",
|
|
27
27
|
"test": "echo \"No tests for this module\""
|
|
28
28
|
},
|
|
29
29
|
"bugs": {
|
|
30
30
|
"url": "https://github.com/Rian8337/osu-droid-module/issues"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@rian8337/osu-base": "^2.0.0-alpha.
|
|
34
|
-
"@rian8337/osu-difficulty-calculator": "^2.0.0-alpha.
|
|
35
|
-
"@rian8337/osu-rebalance-difficulty-calculator": "^2.0.0-alpha.
|
|
33
|
+
"@rian8337/osu-base": "^2.0.0-alpha.6",
|
|
34
|
+
"@rian8337/osu-difficulty-calculator": "^2.0.0-alpha.6",
|
|
35
|
+
"@rian8337/osu-rebalance-difficulty-calculator": "^2.0.0-alpha.6",
|
|
36
36
|
"canvas": "^2.9.0"
|
|
37
37
|
},
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "1500caca0de5b36cd9f1a746be5f3f76b343a3ab"
|
|
42
42
|
}
|
package/dist/Chart.js
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Chart = void 0;
|
|
4
|
-
const canvas_1 = require("canvas");
|
|
5
|
-
/**
|
|
6
|
-
* Utility to draw a graph with only node-canvas.
|
|
7
|
-
*
|
|
8
|
-
* Used for creating strain graph of beatmaps.
|
|
9
|
-
*/
|
|
10
|
-
class Chart {
|
|
11
|
-
/**
|
|
12
|
-
* @param values Initializer options for the graph.
|
|
13
|
-
*/
|
|
14
|
-
constructor(values) {
|
|
15
|
-
this.padding = 10;
|
|
16
|
-
this.tickSize = 10;
|
|
17
|
-
this.axisColor = "#555";
|
|
18
|
-
this.font = "12pt Calibri";
|
|
19
|
-
this.axisLabelFont = "bold 11pt Calibri";
|
|
20
|
-
this.fontHeight = 12;
|
|
21
|
-
this.baseLabelOffset = 15;
|
|
22
|
-
this.graphWidth = values.graphWidth;
|
|
23
|
-
this.graphHeight = values.graphHeight;
|
|
24
|
-
this.canvas = (0, canvas_1.createCanvas)(this.graphWidth, this.graphHeight);
|
|
25
|
-
this.context = this.canvas.getContext("2d");
|
|
26
|
-
this.minX = values.minX;
|
|
27
|
-
this.minY = values.minY;
|
|
28
|
-
this.maxX = values.maxX;
|
|
29
|
-
this.maxY = values.maxY;
|
|
30
|
-
this.unitsPerTickX = values.unitsPerTickX;
|
|
31
|
-
this.unitsPerTickY = values.unitsPerTickY;
|
|
32
|
-
this.background = values.background;
|
|
33
|
-
this.xLabel = values.xLabel;
|
|
34
|
-
this.yLabel = values.yLabel;
|
|
35
|
-
this.xValueType = values.xValueType;
|
|
36
|
-
this.yValueType = values.yValueType;
|
|
37
|
-
this.pointRadius = Math.max(0, values.pointRadius ?? 1);
|
|
38
|
-
// Relationships
|
|
39
|
-
this.rangeX = this.maxX - this.minX;
|
|
40
|
-
this.rangeY = this.maxY - this.minY;
|
|
41
|
-
this.numXTicks = Math.round(this.rangeX / this.unitsPerTickX);
|
|
42
|
-
this.numYTicks = Math.round(this.rangeY / this.unitsPerTickY);
|
|
43
|
-
this.x = this.getLongestValueWidth() + this.padding * 2;
|
|
44
|
-
this.y = this.padding * 2;
|
|
45
|
-
this.width = this.canvas.width - this.x - this.padding * 2;
|
|
46
|
-
this.height =
|
|
47
|
-
this.canvas.height - this.y - this.padding - this.fontHeight;
|
|
48
|
-
this.scaleX =
|
|
49
|
-
(this.width - (this.xLabel ? this.baseLabelOffset : 0)) /
|
|
50
|
-
this.rangeX;
|
|
51
|
-
this.scaleY =
|
|
52
|
-
(this.height - (this.yLabel ? this.baseLabelOffset : 0)) /
|
|
53
|
-
this.rangeY;
|
|
54
|
-
// Draw background and X and Y axis tick marks
|
|
55
|
-
this.setBackground();
|
|
56
|
-
this.drawXAxis(true);
|
|
57
|
-
this.drawYAxis(true);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Draws a line graph with specified data, color, and line width.
|
|
61
|
-
*
|
|
62
|
-
* @param data The data to make the graph.
|
|
63
|
-
* @param color The color of the line.
|
|
64
|
-
* @param width The width of the line.
|
|
65
|
-
*/
|
|
66
|
-
drawLine(data, color, width) {
|
|
67
|
-
const c = this.context;
|
|
68
|
-
c.save();
|
|
69
|
-
this.transformContext();
|
|
70
|
-
c.lineWidth = width;
|
|
71
|
-
c.strokeStyle = c.fillStyle = color;
|
|
72
|
-
c.beginPath();
|
|
73
|
-
c.moveTo(data[0].x * this.scaleX, data[0].y * this.scaleY);
|
|
74
|
-
for (let n = 0; n < data.length; ++n) {
|
|
75
|
-
const point = data[n];
|
|
76
|
-
// Data segment
|
|
77
|
-
c.lineTo(point.x * this.scaleX, point.y * this.scaleY);
|
|
78
|
-
c.stroke();
|
|
79
|
-
c.closePath();
|
|
80
|
-
if (this.pointRadius) {
|
|
81
|
-
c.beginPath();
|
|
82
|
-
c.arc(point.x * this.scaleX, point.y * this.scaleY, this.pointRadius, 0, 2 * Math.PI, false);
|
|
83
|
-
c.fill();
|
|
84
|
-
c.closePath();
|
|
85
|
-
}
|
|
86
|
-
// Position for next segment
|
|
87
|
-
c.beginPath();
|
|
88
|
-
c.moveTo(point.x * this.scaleX, point.y * this.scaleY);
|
|
89
|
-
}
|
|
90
|
-
c.restore();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Draws an area graph with specified data and color.
|
|
94
|
-
*
|
|
95
|
-
* @param data The data to make the graph.
|
|
96
|
-
* @param color The color of the area.
|
|
97
|
-
*/
|
|
98
|
-
drawArea(data, color) {
|
|
99
|
-
const c = this.context;
|
|
100
|
-
c.save();
|
|
101
|
-
this.transformContext();
|
|
102
|
-
c.strokeStyle = c.fillStyle = color;
|
|
103
|
-
c.beginPath();
|
|
104
|
-
data.forEach((d) => c.lineTo(d.x * this.scaleX, d.y * this.scaleY));
|
|
105
|
-
c.stroke();
|
|
106
|
-
c.lineTo(data.at(-1).x * this.scaleX, 0);
|
|
107
|
-
c.lineTo(0, 0);
|
|
108
|
-
c.fill();
|
|
109
|
-
c.restore();
|
|
110
|
-
// Redraw axes since it gets
|
|
111
|
-
// overlapped by chart area
|
|
112
|
-
if (color !== this.axisColor) {
|
|
113
|
-
this.drawXAxis();
|
|
114
|
-
this.drawYAxis();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Returns a Buffer that represents the graph.
|
|
119
|
-
*/
|
|
120
|
-
getBuffer() {
|
|
121
|
-
return this.canvas.toBuffer();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Draws the X axis of the graph.
|
|
125
|
-
*
|
|
126
|
-
* @param drawLabel Whether or not to draw the axis label.
|
|
127
|
-
*/
|
|
128
|
-
drawXAxis(drawLabel) {
|
|
129
|
-
const c = this.context;
|
|
130
|
-
const labelOffset = this.xLabel ? this.baseLabelOffset : 0;
|
|
131
|
-
const yLabelOffset = this.yLabel ? this.baseLabelOffset : 0;
|
|
132
|
-
c.save();
|
|
133
|
-
if (this.xLabel && drawLabel) {
|
|
134
|
-
c.textAlign = "center";
|
|
135
|
-
c.font = this.axisLabelFont;
|
|
136
|
-
c.fillText(this.xLabel, this.x + this.width / 2, this.y + this.height + labelOffset);
|
|
137
|
-
c.restore();
|
|
138
|
-
}
|
|
139
|
-
c.beginPath();
|
|
140
|
-
c.moveTo(this.x + yLabelOffset, this.y + this.height - labelOffset);
|
|
141
|
-
c.lineTo(this.x + this.width, this.y + this.height - labelOffset);
|
|
142
|
-
c.strokeStyle = this.axisColor;
|
|
143
|
-
c.lineWidth = 2;
|
|
144
|
-
c.stroke();
|
|
145
|
-
// Draw tick marks
|
|
146
|
-
for (let n = 0; n < this.numXTicks; ++n) {
|
|
147
|
-
c.beginPath();
|
|
148
|
-
c.moveTo(((n + 1) * (this.width - yLabelOffset)) / this.numXTicks +
|
|
149
|
-
this.x +
|
|
150
|
-
yLabelOffset, this.y + this.height - labelOffset);
|
|
151
|
-
c.lineTo(((n + 1) * (this.width - yLabelOffset)) / this.numXTicks +
|
|
152
|
-
this.x +
|
|
153
|
-
yLabelOffset, this.y + this.height - labelOffset - this.tickSize);
|
|
154
|
-
c.stroke();
|
|
155
|
-
}
|
|
156
|
-
// Draw labels
|
|
157
|
-
c.font = this.font;
|
|
158
|
-
c.fillStyle = "black";
|
|
159
|
-
c.textAlign = "center";
|
|
160
|
-
c.textBaseline = "middle";
|
|
161
|
-
for (let n = 0; n < this.numXTicks; ++n) {
|
|
162
|
-
const label = Math.round(((n + 1) * this.maxX) / this.numXTicks);
|
|
163
|
-
let stringLabel = label.toString();
|
|
164
|
-
switch (this.xValueType) {
|
|
165
|
-
case "time":
|
|
166
|
-
stringLabel = this.timeString(label);
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
c.save();
|
|
170
|
-
c.translate(((n + 1) * (this.width - yLabelOffset)) / this.numXTicks +
|
|
171
|
-
this.x +
|
|
172
|
-
yLabelOffset, this.y + this.height + this.padding - labelOffset);
|
|
173
|
-
c.fillText(stringLabel, 0, 0);
|
|
174
|
-
c.restore();
|
|
175
|
-
}
|
|
176
|
-
c.restore();
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Draws the Y axis of the graph.
|
|
180
|
-
*
|
|
181
|
-
* @param drawLabel Whether or not to draw the axis label.
|
|
182
|
-
*/
|
|
183
|
-
drawYAxis(drawLabel) {
|
|
184
|
-
const c = this.context;
|
|
185
|
-
const labelOffset = this.yLabel ? this.baseLabelOffset : 0;
|
|
186
|
-
const xLabelOffset = this.xLabel ? this.baseLabelOffset : 0;
|
|
187
|
-
c.save();
|
|
188
|
-
if (this.yLabel && drawLabel) {
|
|
189
|
-
c.textAlign = "center";
|
|
190
|
-
c.font = this.axisLabelFont;
|
|
191
|
-
c.translate(0, this.graphHeight);
|
|
192
|
-
c.rotate(-Math.PI / 2);
|
|
193
|
-
c.fillText(this.yLabel, this.y + xLabelOffset + this.height / 2, this.x - labelOffset * 2.5);
|
|
194
|
-
c.restore();
|
|
195
|
-
}
|
|
196
|
-
c.beginPath();
|
|
197
|
-
c.moveTo(this.x + labelOffset, this.y);
|
|
198
|
-
c.lineTo(this.x + labelOffset, this.y + this.height - xLabelOffset);
|
|
199
|
-
c.strokeStyle = this.axisColor;
|
|
200
|
-
c.lineWidth = 2;
|
|
201
|
-
c.stroke();
|
|
202
|
-
c.restore();
|
|
203
|
-
// Draw tick marks
|
|
204
|
-
for (let n = 0; n < this.numYTicks; ++n) {
|
|
205
|
-
c.beginPath();
|
|
206
|
-
c.moveTo(this.x + labelOffset, (n * (this.height - xLabelOffset)) / this.numYTicks + this.y);
|
|
207
|
-
c.lineTo(this.x + labelOffset + this.tickSize, (n * (this.height - xLabelOffset)) / this.numYTicks + this.y);
|
|
208
|
-
c.stroke();
|
|
209
|
-
}
|
|
210
|
-
// Draw values
|
|
211
|
-
c.font = this.font;
|
|
212
|
-
c.fillStyle = "black";
|
|
213
|
-
c.textAlign = "right";
|
|
214
|
-
c.textBaseline = "middle";
|
|
215
|
-
for (let n = 0; n < this.numYTicks; ++n) {
|
|
216
|
-
const value = Math.round(this.maxY - (n * this.maxY) / this.numYTicks);
|
|
217
|
-
c.save();
|
|
218
|
-
c.translate(this.x + labelOffset - this.padding, (n * (this.height - xLabelOffset)) / this.numYTicks + this.y);
|
|
219
|
-
c.fillText(value.toString(), 0, 0);
|
|
220
|
-
c.restore();
|
|
221
|
-
}
|
|
222
|
-
c.restore();
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Transforms the context and move it to the center of the graph.
|
|
226
|
-
*/
|
|
227
|
-
transformContext() {
|
|
228
|
-
const c = this.context;
|
|
229
|
-
// Move context to point (0, 0) in graph
|
|
230
|
-
c.translate(this.x + (this.yLabel ? this.baseLabelOffset : 0), this.y + this.height - (this.xLabel ? this.baseLabelOffset : 0));
|
|
231
|
-
// Invert the Y scale so that it
|
|
232
|
-
// increments as we go upwards
|
|
233
|
-
c.scale(1, -1);
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Gets the longest width from each label text in Y axis.
|
|
237
|
-
*/
|
|
238
|
-
getLongestValueWidth() {
|
|
239
|
-
this.context.font = this.font;
|
|
240
|
-
let longestValueWidth = 0;
|
|
241
|
-
for (let n = 0; n < this.numYTicks; ++n) {
|
|
242
|
-
const value = this.maxY - n * this.unitsPerTickY;
|
|
243
|
-
let stringValue = value.toString();
|
|
244
|
-
switch (this.yValueType) {
|
|
245
|
-
case "time":
|
|
246
|
-
stringValue = this.timeString(value);
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
longestValueWidth = Math.max(longestValueWidth, this.context.measureText(stringValue).width);
|
|
250
|
-
}
|
|
251
|
-
return longestValueWidth;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Sets the background of the graph.
|
|
255
|
-
*/
|
|
256
|
-
setBackground() {
|
|
257
|
-
if (!this.background) {
|
|
258
|
-
this.context.globalAlpha = 0.7;
|
|
259
|
-
this.context.fillStyle = "#ffffff";
|
|
260
|
-
this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
261
|
-
this.context.fillStyle = "#000000";
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
this.context.globalAlpha = 1;
|
|
265
|
-
this.context.drawImage(this.background, 0, 0, this.canvas.width, this.canvas.height);
|
|
266
|
-
this.context.globalAlpha = 0.8;
|
|
267
|
-
this.context.fillStyle = "#bbbbbb";
|
|
268
|
-
this.context.fillRect(0, 0, 900, 250);
|
|
269
|
-
this.context.globalAlpha = 1;
|
|
270
|
-
this.context.fillStyle = "#000000";
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Time string parsing function for axis labels.
|
|
274
|
-
*/
|
|
275
|
-
timeString(second) {
|
|
276
|
-
return new Date(1000 * Math.ceil(second))
|
|
277
|
-
.toISOString()
|
|
278
|
-
.substr(11, 8)
|
|
279
|
-
.replace(/^[0:]+/, "");
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
exports.Chart = Chart;
|
|
283
|
-
//# sourceMappingURL=Chart.js.map
|
package/dist/Chart.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","sourceRoot":"","sources":["../src/Chart.ts"],"names":[],"mappings":";;;AAAA,mCAA+E;AA6E/E;;;;GAIG;AACH,MAAa,KAAK;IA6Cd;;OAEG;IACH,YAAY,MAAwB;QAtBnB,YAAO,GAAW,EAAE,CAAC;QACrB,aAAQ,GAAW,EAAE,CAAC;QACtB,cAAS,GAAW,MAAM,CAAC;QAC3B,SAAI,GAAW,cAAc,CAAC;QAC9B,kBAAa,GAAW,mBAAmB,CAAC;QAC5C,eAAU,GAAW,EAAE,CAAC;QACxB,oBAAe,GAAW,EAAE,CAAC;QAiB1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,MAAM,GAAG,IAAA,qBAAY,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAExD,gBAAgB;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM;YACP,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QACjE,IAAI,CAAC,MAAM;YACP,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,CAAC,MAAM,CAAC;QAChB,IAAI,CAAC,MAAM;YACP,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC;QAEhB,8CAA8C;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,IAAe,EAAE,KAAa,EAAE,KAAa;QAClD,MAAM,CAAC,GAA6B,IAAI,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClC,MAAM,KAAK,GAAY,IAAI,CAAC,CAAC,CAAC,CAAC;YAE/B,eAAe;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,MAAM,EAAE,CAAC;YACX,CAAC,CAAC,SAAS,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,CAAC,CAAC,GAAG,CACD,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EACrB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EACrB,IAAI,CAAC,WAAW,EAChB,CAAC,EACD,CAAC,GAAG,IAAI,CAAC,EAAE,EACX,KAAK,CACR,CAAC;gBACF,CAAC,CAAC,IAAI,EAAE,CAAC;gBACT,CAAC,CAAC,SAAS,EAAE,CAAC;aACjB;YAED,4BAA4B;YAC5B,CAAC,CAAC,SAAS,EAAE,CAAC;YACd,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1D;QAED,CAAC,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAe,EAAE,KAAa;QACnC,MAAM,CAAC,GAA6B,IAAI,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QAEpC,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,IAAI,EAAE,CAAC;QAET,CAAC,CAAC,OAAO,EAAE,CAAC;QAEZ,4BAA4B;QAC5B,2BAA2B;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;SACpB;IACL,CAAC;IAED;;OAEG;IACH,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,SAAmB;QACjC,MAAM,CAAC,GAA6B,IAAI,CAAC,OAAO,CAAC;QACjD,MAAM,WAAW,GAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;YAC1B,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;YACvB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC,CAAC,QAAQ,CACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EACvB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CACrC,CAAC;YACF,CAAC,CAAC,OAAO,EAAE,CAAC;SACf;QACD,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QAClE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,MAAM,EAAE,CAAC;QAEX,kBAAkB;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACrC,CAAC,CAAC,SAAS,EAAE,CAAC;YACd,CAAC,CAAC,MAAM,CACJ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;gBACpD,IAAI,CAAC,CAAC;gBACN,YAAY,EAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CACrC,CAAC;YACF,CAAC,CAAC,MAAM,CACJ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;gBACpD,IAAI,CAAC,CAAC;gBACN,YAAY,EAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,QAAQ,CACrD,CAAC;YACF,CAAC,CAAC,MAAM,EAAE,CAAC;SACd;QAED,cAAc;QACd,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACrC,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CACzC,CAAC;YACF,IAAI,WAAW,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3C,QAAQ,IAAI,CAAC,UAAU,EAAE;gBACrB,KAAK,MAAM;oBACP,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM;aACb;YACD,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,SAAS,CACP,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;gBACpD,IAAI,CAAC,CAAC;gBACN,YAAY,EAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,WAAW,CACpD,CAAC;YACF,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,OAAO,EAAE,CAAC;SACf;QAED,CAAC,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,SAAmB;QACjC,MAAM,CAAC,GAA6B,IAAI,CAAC,OAAO,CAAC;QACjD,MAAM,WAAW,GAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;YAC1B,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;YACvB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,QAAQ,CACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EACvC,IAAI,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,CAC7B,CAAC;YACF,CAAC,CAAC,OAAO,EAAE,CAAC;SACf;QACD,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;QACpE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,OAAO,EAAE,CAAC;QAEZ,kBAAkB;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACrC,CAAC,CAAC,SAAS,EAAE,CAAC;YACd,CAAC,CAAC,MAAM,CACJ,IAAI,CAAC,CAAC,GAAG,WAAW,EACpB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAC/D,CAAC;YACF,CAAC,CAAC,MAAM,CACJ,IAAI,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,QAAQ,EACpC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAC/D,CAAC;YACF,CAAC,CAAC,MAAM,EAAE,CAAC;SACd;QAED,cAAc;QACd,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACrC,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAC/C,CAAC;YACF,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,SAAS,CACP,IAAI,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,EACnC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAC/D,CAAC;YACF,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,OAAO,EAAE,CAAC;SACf;QAED,CAAC,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB;QACpB,MAAM,CAAC,GAA6B,IAAI,CAAC,OAAO,CAAC;QAEjD,wCAAwC;QACxC,CAAC,CAAC,SAAS,CACP,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;QAEF,gCAAgC;QAChC,8BAA8B;QAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,oBAAoB;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,iBAAiB,GAAW,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACrC,MAAM,KAAK,GAAW,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACzD,IAAI,WAAW,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3C,QAAQ,IAAI,CAAC,UAAU,EAAE;gBACrB,KAAK,MAAM;oBACP,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM;aACb;YACD,iBAAiB,GAAG,IAAI,CAAC,GAAG,CACxB,iBAAiB,EACjB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAC9C,CAAC;SACL;QACD,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YACnC,OAAO;SACV;QACD,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,CAClB,IAAI,CAAC,UAAU,EACf,CAAC,EACD,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CACrB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACpC,WAAW,EAAE;aACb,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;aACb,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;CACJ;AAlYD,sBAkYC"}
|