@esotericsoftware/spine-canvaskit 4.2.87 → 4.2.89
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/dist/esm/spine-canvaskit.min.mjs +2 -2
- package/dist/esm/spine-canvaskit.mjs +64 -91
- package/dist/esm/spine-canvaskit.mjs.map +2 -2
- package/dist/iife/spine-canvaskit.js +64 -91
- package/dist/iife/spine-canvaskit.js.map +2 -2
- package/dist/iife/spine-canvaskit.min.js +2 -2
- package/dist/index.d.ts +5 -7
- package/dist/index.js +58 -74
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -27,18 +27,18 @@
|
|
|
27
27
|
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
export * from "@esotericsoftware/spine-core";
|
|
30
|
-
import { AnimationState, Physics, Skeleton, SkeletonData, TextureAtlas } from "@esotericsoftware/spine-core";
|
|
31
|
-
import { Canvas, CanvasKit } from "canvaskit-wasm";
|
|
30
|
+
import { AnimationState, Physics, Skeleton, type SkeletonData, TextureAtlas } from "@esotericsoftware/spine-core";
|
|
31
|
+
import type { Canvas, CanvasKit } from "canvaskit-wasm";
|
|
32
32
|
/**
|
|
33
33
|
* Loads a {@link TextureAtlas} and its atlas page images from the given file path using the `readFile(path: string): Promise<Buffer>` function.
|
|
34
34
|
* Throws an `Error` if the file or one of the atlas page images could not be loaded.
|
|
35
35
|
*/
|
|
36
|
-
export declare function loadTextureAtlas(ck: CanvasKit, atlasFile: string, readFile: (path: string) => Promise<Buffer>): Promise<TextureAtlas>;
|
|
36
|
+
export declare function loadTextureAtlas(ck: CanvasKit, atlasFile: string, readFile: (path: string) => Promise<ArrayBuffer | Buffer>): Promise<TextureAtlas>;
|
|
37
37
|
/**
|
|
38
38
|
* Loads a {@link SkeletonData} from the given file path (`.json` or `.skel`) using the `readFile(path: string): Promise<Buffer>` function.
|
|
39
39
|
* Attachments will be looked up in the provided atlas.
|
|
40
40
|
*/
|
|
41
|
-
export declare function loadSkeletonData(skeletonFile: string, atlas: TextureAtlas, readFile: (path: string) => Promise<Buffer>, scale?: number): Promise<SkeletonData>;
|
|
41
|
+
export declare function loadSkeletonData(skeletonFile: string, atlas: TextureAtlas, readFile: (path: string) => Promise<ArrayBuffer | Buffer>, scale?: number): Promise<SkeletonData>;
|
|
42
42
|
/**
|
|
43
43
|
* Manages a {@link Skeleton} and its associated {@link AnimationState}. A drawable is constructed from a {@link SkeletonData}, which can
|
|
44
44
|
* be shared by any number of drawables.
|
|
@@ -65,12 +65,10 @@ export declare class SkeletonDrawable {
|
|
|
65
65
|
export declare class SkeletonRenderer {
|
|
66
66
|
private ck;
|
|
67
67
|
private clipper;
|
|
68
|
-
private tempColor;
|
|
69
|
-
private tempColor2;
|
|
70
68
|
private static QUAD_TRIANGLES;
|
|
71
69
|
private scratchPositions;
|
|
72
|
-
private scratchColors;
|
|
73
70
|
private scratchUVs;
|
|
71
|
+
private scratchColors;
|
|
74
72
|
/**
|
|
75
73
|
* Creates a new skeleton renderer.
|
|
76
74
|
* @param ck the {@link CanvasKit} instance returned by `CanvasKitInit()`.
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
export * from "@esotericsoftware/spine-core";
|
|
30
|
-
import { AnimationState, AnimationStateData, AtlasAttachmentLoader, BlendMode, ClippingAttachment,
|
|
30
|
+
import { AnimationState, AnimationStateData, AtlasAttachmentLoader, BlendMode, ClippingAttachment, MathUtils, MeshAttachment, Physics, RegionAttachment, Skeleton, SkeletonBinary, SkeletonClipping, SkeletonJson, Texture, TextureAtlas, Utils, } from "@esotericsoftware/spine-core";
|
|
31
31
|
Skeleton.yDown = true;
|
|
32
32
|
// CanvasKit blend modes for premultiplied alpha
|
|
33
33
|
function toCkBlendMode(ck, blendMode) {
|
|
@@ -59,8 +59,8 @@ class CanvasKitTexture extends Texture {
|
|
|
59
59
|
getImage() {
|
|
60
60
|
return this._image;
|
|
61
61
|
}
|
|
62
|
-
setFilters(
|
|
63
|
-
setWraps(
|
|
62
|
+
setFilters() { }
|
|
63
|
+
setWraps() { }
|
|
64
64
|
dispose() {
|
|
65
65
|
const data = this._image;
|
|
66
66
|
for (const paint of data.paintPerBlendMode.values()) {
|
|
@@ -121,12 +121,11 @@ export async function loadSkeletonData(skeletonFile, atlas, readFile, scale = 1)
|
|
|
121
121
|
? new SkeletonJson(attachmentLoader)
|
|
122
122
|
: new SkeletonBinary(attachmentLoader);
|
|
123
123
|
loader.scale = scale;
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
|
|
124
|
+
const data = await readFile(skeletonFile);
|
|
125
|
+
if (loader instanceof SkeletonJson) {
|
|
126
|
+
return loader.readSkeletonData(bufferToUtf8String(data));
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
return skeletonData;
|
|
128
|
+
return loader.readSkeletonData(data);
|
|
130
129
|
}
|
|
131
130
|
/**
|
|
132
131
|
* Manages a {@link Skeleton} and its associated {@link AnimationState}. A drawable is constructed from a {@link SkeletonData}, which can
|
|
@@ -162,12 +161,10 @@ export class SkeletonDrawable {
|
|
|
162
161
|
export class SkeletonRenderer {
|
|
163
162
|
ck;
|
|
164
163
|
clipper = new SkeletonClipping();
|
|
165
|
-
tempColor = new Color();
|
|
166
|
-
tempColor2 = new Color();
|
|
167
164
|
static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
|
|
168
165
|
scratchPositions = Utils.newFloatArray(100);
|
|
169
|
-
scratchColors = Utils.newFloatArray(100);
|
|
170
166
|
scratchUVs = Utils.newFloatArray(100);
|
|
167
|
+
scratchColors = new Uint32Array(100 / 4);
|
|
171
168
|
/**
|
|
172
169
|
* Creates a new skeleton renderer.
|
|
173
170
|
* @param ck the {@link CanvasKit} instance returned by `CanvasKitInit()`.
|
|
@@ -183,100 +180,87 @@ export class SkeletonRenderer {
|
|
|
183
180
|
render(canvas, skeleton) {
|
|
184
181
|
if (skeleton instanceof SkeletonDrawable)
|
|
185
182
|
skeleton = skeleton.skeleton;
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
183
|
+
const clipper = this.clipper;
|
|
184
|
+
const drawOrder = skeleton.drawOrder;
|
|
185
|
+
const skeletonColor = skeleton.color;
|
|
189
186
|
for (let i = 0, n = drawOrder.length; i < n; i++) {
|
|
190
|
-
|
|
187
|
+
const slot = drawOrder[i];
|
|
191
188
|
if (!slot.bone.active) {
|
|
192
189
|
clipper.clipEndWithSlot(slot);
|
|
193
190
|
continue;
|
|
194
191
|
}
|
|
195
|
-
|
|
192
|
+
const attachment = slot.getAttachment();
|
|
196
193
|
let positions = this.scratchPositions;
|
|
197
|
-
let colors = this.scratchColors;
|
|
198
|
-
let uvs;
|
|
199
|
-
let texture;
|
|
200
194
|
let triangles;
|
|
201
|
-
let
|
|
202
|
-
let numVertices = 0;
|
|
195
|
+
let numVertices = 4;
|
|
203
196
|
if (attachment instanceof RegionAttachment) {
|
|
204
|
-
|
|
205
|
-
if (positions.length < 8)
|
|
206
|
-
this.scratchPositions = positions = Utils.newFloatArray(8);
|
|
207
|
-
numVertices = 4;
|
|
208
|
-
region.computeWorldVertices(slot, positions, 0, 2);
|
|
197
|
+
attachment.computeWorldVertices(slot, positions, 0, 2);
|
|
209
198
|
triangles = SkeletonRenderer.QUAD_TRIANGLES;
|
|
210
|
-
uvs = region.uvs;
|
|
211
|
-
texture = region.region?.texture;
|
|
212
|
-
attachmentColor = region.color;
|
|
213
199
|
}
|
|
214
200
|
else if (attachment instanceof MeshAttachment) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
uvs = mesh.uvs;
|
|
223
|
-
attachmentColor = mesh.color;
|
|
201
|
+
if (positions.length < attachment.worldVerticesLength) {
|
|
202
|
+
this.scratchPositions = Utils.newFloatArray(attachment.worldVerticesLength);
|
|
203
|
+
positions = this.scratchPositions;
|
|
204
|
+
}
|
|
205
|
+
numVertices = attachment.worldVerticesLength >> 1;
|
|
206
|
+
attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, positions, 0, 2);
|
|
207
|
+
triangles = attachment.triangles;
|
|
224
208
|
}
|
|
225
209
|
else if (attachment instanceof ClippingAttachment) {
|
|
226
|
-
|
|
227
|
-
clipper.clipStart(slot, clip);
|
|
210
|
+
clipper.clipStart(slot, attachment);
|
|
228
211
|
continue;
|
|
229
212
|
}
|
|
230
213
|
else {
|
|
231
214
|
clipper.clipEndWithSlot(slot);
|
|
232
215
|
continue;
|
|
233
216
|
}
|
|
217
|
+
const texture = attachment.region?.texture;
|
|
234
218
|
if (texture) {
|
|
219
|
+
let uvs = attachment.uvs;
|
|
220
|
+
let scaledUvs;
|
|
221
|
+
let colors = this.scratchColors;
|
|
235
222
|
if (clipper.isClipping()) {
|
|
236
223
|
clipper.clipTrianglesUnpacked(positions, triangles, triangles.length, uvs);
|
|
237
|
-
if (clipper.clippedVertices.length
|
|
238
|
-
// clipping eventually "erases" clippedVertices array (set length to 0 at next clip)
|
|
239
|
-
// it's necessary to keep the array alive until canvaskit paints,
|
|
240
|
-
// otherwise a memory access occurs
|
|
241
|
-
if (positions.length < clipper.clippedVertices.length)
|
|
242
|
-
this.scratchPositions = positions = Utils.newFloatArray(clipper.clippedVertices.length);
|
|
243
|
-
numVertices = clipper.clippedVertices.length / 2;
|
|
244
|
-
for (let i = 0; i < clipper.clippedVertices.length; i++)
|
|
245
|
-
positions[i] = clipper.clippedVertices[i];
|
|
246
|
-
uvs = clipper.clippedUVs;
|
|
247
|
-
triangles = clipper.clippedTriangles;
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
224
|
+
if (clipper.clippedVertices.length <= 0) {
|
|
250
225
|
clipper.clipEndWithSlot(slot);
|
|
251
226
|
continue;
|
|
252
227
|
}
|
|
228
|
+
positions = clipper.clippedVertices;
|
|
229
|
+
uvs = scaledUvs = clipper.clippedUVs;
|
|
230
|
+
triangles = clipper.clippedTriangles;
|
|
231
|
+
numVertices = clipper.clippedVertices.length / 2;
|
|
232
|
+
colors = new Uint32Array(numVertices);
|
|
253
233
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (colors.length / 4 < numVertices)
|
|
261
|
-
this.scratchColors = colors = Utils.newFloatArray(numVertices * 4);
|
|
262
|
-
for (let i = 0, n = numVertices * 4; i < n; i += 4) {
|
|
263
|
-
colors[i] = finalColor.r;
|
|
264
|
-
colors[i + 1] = finalColor.g;
|
|
265
|
-
colors[i + 2] = finalColor.b;
|
|
266
|
-
colors[i + 3] = finalColor.a;
|
|
234
|
+
else {
|
|
235
|
+
scaledUvs = this.scratchUVs;
|
|
236
|
+
if (this.scratchUVs.length < uvs.length)
|
|
237
|
+
scaledUvs = this.scratchUVs = Utils.newFloatArray(uvs.length);
|
|
238
|
+
if (colors.length < numVertices)
|
|
239
|
+
colors = this.scratchColors = new Uint32Array(numVertices);
|
|
267
240
|
}
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const
|
|
272
|
-
const height = texture.getImage().image.height();
|
|
241
|
+
const ckImage = texture.getImage();
|
|
242
|
+
const image = ckImage.image;
|
|
243
|
+
const width = image.width();
|
|
244
|
+
const height = image.height();
|
|
273
245
|
for (let i = 0; i < uvs.length; i += 2) {
|
|
274
246
|
scaledUvs[i] = uvs[i] * width;
|
|
275
247
|
scaledUvs[i + 1] = uvs[i + 1] * height;
|
|
276
248
|
}
|
|
277
|
-
const
|
|
249
|
+
const attachmentColor = attachment.color;
|
|
250
|
+
const slotColor = slot.color;
|
|
251
|
+
// using Uint32Array for colors allows to avoid canvaskit to allocate one each time
|
|
252
|
+
// but colors need to be in canvaskit format.
|
|
253
|
+
// See: https://github.com/google/skia/blob/bb8c36fdf7b915a8c096e35e2f08109e477fe1b8/modules/canvaskit/color.js#L163
|
|
254
|
+
const finalColor = (MathUtils.clamp(skeletonColor.a * slotColor.a * attachmentColor.a * 255, 0, 255) << 24 |
|
|
255
|
+
MathUtils.clamp(skeletonColor.r * slotColor.r * attachmentColor.r * 255, 0, 255) << 16 |
|
|
256
|
+
MathUtils.clamp(skeletonColor.g * slotColor.g * attachmentColor.g * 255, 0, 255) << 8 |
|
|
257
|
+
MathUtils.clamp(skeletonColor.b * slotColor.b * attachmentColor.b * 255, 0, 255) << 0) >>> 0;
|
|
258
|
+
for (let i = 0, n = numVertices; i < n; i++)
|
|
259
|
+
colors[i] = finalColor;
|
|
278
260
|
const vertices = this.ck.MakeVertices(this.ck.VertexMode.Triangles, positions, scaledUvs, colors, triangles, false);
|
|
279
|
-
|
|
261
|
+
const ckPaint = ckImage.paintPerBlendMode.get(slot.data.blendMode);
|
|
262
|
+
if (ckPaint)
|
|
263
|
+
canvas.drawVertices(vertices, this.ck.BlendMode.Modulate, ckPaint);
|
|
280
264
|
vertices.delete();
|
|
281
265
|
}
|
|
282
266
|
clipper.clipEndWithSlot(slot);
|
|
@@ -284,4 +268,4 @@ export class SkeletonRenderer {
|
|
|
284
268
|
clipper.clipEnd();
|
|
285
269
|
}
|
|
286
270
|
}
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsT0FBTyxFQUNOLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsS0FBSyxFQUNMLGNBQWMsRUFFZCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixjQUFjLEVBQ2QsZ0JBQWdCLEVBRWhCLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUdaLEtBQUssR0FDTCxNQUFNLDhCQUE4QixDQUFDO0FBU3RDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBUXRCLGdEQUFnRDtBQUNoRCxTQUFTLGFBQWEsQ0FBRSxFQUFhLEVBQUUsU0FBb0I7SUFDMUQsUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUNuQixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDN0IsS0FBSyxTQUFTLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFCLEtBQUssU0FBUyxDQUFDLFFBQVE7WUFDdEIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUM3QixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDNUI7WUFDQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBRSxNQUFXO0lBQ3ZDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDbkMsT0FBTyxNQUFN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QVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ3hDLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNwQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQzVCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLENBQ0wsQ0FBQztnQkFDRixNQUFNLENBQUMsWUFBWSxDQUNsQixRQUFRLEVBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUMxQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUNwRCxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixDQUFDO1lBRUQsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEp1bHkgMjgsIDIwMjMuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMywgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvclxuICogb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRIRVxuICogU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCAqIGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmltcG9ydCB7XG5cdEFuaW1hdGlvblN0YXRlLFxuXHRBbmltYXRpb25TdGF0ZURhdGEsXG5cdEF0bGFzQXR0YWNobWVudExvYWRlcixcblx0QmxlbmRNb2RlLFxuXHRDbGlwcGluZ0F0dGFjaG1lbnQsXG5cdENvbG9yLFxuXHRNZXNoQXR0YWNobWVudCxcblx0TnVtYmVyQXJyYXlMaWtlLFxuXHRQaHlzaWNzLFxuXHRSZWdpb25BdHRhY2htZW50LFxuXHRTa2VsZXRvbixcblx0U2tlbGV0b25CaW5hcnksXG5cdFNrZWxldG9uQ2xpcHBpbmcsXG5cdFNrZWxldG9uRGF0YSxcblx0U2tlbGV0b25Kc29uLFxuXHRUZXh0dXJlLFxuXHRUZXh0dXJlQXRsYXMsXG5cdFRleHR1cmVGaWx0ZXIsXG5cdFRleHR1cmVXcmFwLFxuXHRVdGlscyxcbn0gZnJvbSBcIkBlc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmVcIjtcbmltcG9ydCB7XG5cdENhbnZhcyxcblx0Q2FudmFzS2l0LFxuXHRJbWFnZSxcblx0UGFpbnQsXG5cdFNoYWRlcixcbn0gZnJvbSBcImNhbnZhc2tpdC13YXNtXCI7XG5cblNrZWxldG9uLnlEb3duID0gdHJ1ZTtcblxudHlwZSBDYW52YXNLaXRJbWFnZSA9IHtcblx0c2hhZGVyczogU2hhZGVyW107XG5cdHBhaW50UGVyQmxlbmRNb2RlOiBNYXA8QmxlbmRNb2RlLCBQYWludD47XG5cdGltYWdlOiBJbWFnZTtcbn07XG5cbi8vIENhbnZhc0tpdCBibGVuZCBtb2RlcyBmb3IgcHJlbXVsdGlwbGllZCBhbHBoYVxuZnVuY3Rpb24gdG9Da0JsZW5kTW9kZSAoY2s6IENhbnZhc0tpdCwgYmxlbmRNb2RlOiBCbGVuZE1vZGUpIHtcblx0c3dpdGNoIChibGVuZE1vZGUpIHtcblx0XHRjYXNlIEJsZW5kTW9kZS5Ob3JtYWw6XG5cdFx0XHRyZXR1cm4gY2suQmxlbmRNb2RlLlNyY092ZXI7XG5cdFx0Y2FzZSBCbGVuZE1vZGUuQWRkaXRpdmU6XG5cdFx0XHRyZXR1cm4gY2suQmxlbmRNb2RlLlBsdXM7XG5cdFx0Y2FzZSBCbGVuZE1vZGUuTXVsdGlwbHk6XG5cdFx0XHRyZXR1cm4gY2suQmxlbmRNb2RlLlNyY092ZXI7XG5cdFx0Y2FzZSBCbGVuZE1vZGUuU2NyZWVuOlxuXHRcdFx0cmV0dXJuIGNrLkJsZW5kTW9kZS5TY3JlZW47XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBjay5CbGVuZE1vZGUuU3JjT3Zlcjtcblx0fVxufVxuXG5mdW5jdGlvbiBidWZmZXJUb1V0ZjhTdHJpbmcgKGJ1ZmZlcjogYW55KSB7XG5cdGlmICh0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuIGJ1ZmZlci50b1N0cmluZyhcInV0Zi04XCIpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoYnVmZmVyKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxufVxuXG5jbGFzcyBDYW52YXNLaXRUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGdldEltYWdlICgpOiBDYW52YXNLaXRJbWFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ltYWdlO1xuXHR9XG5cblx0c2V0RmlsdGVycyAobWluRmlsdGVyOiBUZXh0dXJlRmlsdGVyLCBtYWdGaWx0ZXI6IFRleHR1cmVGaWx0ZXIpOiB2b2lkIHsgfVxuXG5cdHNldFdyYXBzICh1V3JhcDogVGV4dHVyZVdyYXAsIHZXcmFwOiBUZXh0dXJlV3JhcCk6IHZvaWQgeyB9XG5cblx0ZGlzcG9zZSAoKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0YTogQ2FudmFzS2l0SW1hZ2UgPSB0aGlzLl9pbWFnZTtcblx0XHRmb3IgKGNvbnN0IHBhaW50IG9mIGRhdGEucGFpbnRQZXJCbGVuZE1vZGUudmFsdWVzKCkpIHtcblx0XHRcdHBhaW50LmRlbGV0ZSgpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHNoYWRlciBvZiBkYXRhLnNoYWRlcnMpIHtcblx0XHRcdHNoYWRlci5kZWxldGUoKTtcblx0XHR9XG5cdFx0ZGF0YS5pbWFnZS5kZWxldGUoKTtcblx0XHR0aGlzLl9pbWFnZSA9IG51bGw7XG5cdH1cblxuXHRzdGF0aWMgYXN5bmMgZnJvbUZpbGUgKFxuXHRcdGNrOiBDYW52YXNLaXQsXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdHJlYWRGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPGFueT5cblx0KTogUHJvbWlzZTxDYW52YXNLaXRUZXh0dXJlPiB7XG5cdFx0Y29uc3QgaW1nRGF0YSA9IGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuXHRcdGlmICghaW1nRGF0YSkgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgbG9hZCBpbWFnZSAke3BhdGh9YCk7XG5cdFx0Y29uc3QgaW1hZ2UgPSBjay5NYWtlSW1hZ2VGcm9tRW5jb2RlZChpbWdEYXRhKTtcblx0XHRpZiAoIWltYWdlKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBsb2FkIGltYWdlICR7cGF0aH1gKTtcblx0XHRjb25zdCBwYWludFBlckJsZW5kTW9kZSA9IG5ldyBNYXA8QmxlbmRNb2RlLCBQYWludD4oKTtcblx0XHRjb25zdCBzaGFkZXJzOiBTaGFkZXJbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgYmxlbmRNb2RlIG9mIFtcblx0XHRcdEJsZW5kTW9kZS5Ob3JtYWwsXG5cdFx0XHRCbGVuZE1vZGUuQWRkaXRpdmUsXG5cdFx0XHRCbGVuZE1vZGUuTXVsdGlwbHksXG5cdFx0XHRCbGVuZE1vZGUuU2NyZWVuLFxuXHRcdF0pIHtcblx0XHRcdGNvbnN0IHBhaW50ID0gbmV3IGNrLlBhaW50KCk7XG5cdFx0XHRjb25zdCBzaGFkZXIgPSBpbWFnZS5tYWtlU2hhZGVyT3B0aW9ucyhcblx0XHRcdFx0Y2suVGlsZU1vZGUuQ2xhbXAsXG5cdFx0XHRcdGNrLlRpbGVNb2RlLkNsYW1wLFxuXHRcdFx0XHRjay5GaWx0ZXJNb2RlLkxpbmVhcixcblx0XHRcdFx0Y2suTWlwbWFwTW9kZS5MaW5lYXJcblx0XHRcdCk7XG5cdFx0XHRwYWludC5zZXRTaGFkZXIoc2hhZGVyKTtcblx0XHRcdHBhaW50LnNldEJsZW5kTW9kZSh0b0NrQmxlbmRNb2RlKGNrLCBibGVuZE1vZGUpKTtcblx0XHRcdHBhaW50UGVyQmxlbmRNb2RlLnNldChibGVuZE1vZGUsIHBhaW50KTtcblx0XHRcdHNoYWRlcnMucHVzaChzaGFkZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IENhbnZhc0tpdFRleHR1cmUoeyBzaGFkZXJzLCBwYWludFBlckJsZW5kTW9kZSwgaW1hZ2UgfSk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkcyBhIHtAbGluayBUZXh0dXJlQXRsYXN9IGFuZCBpdHMgYXRsYXMgcGFnZSBpbWFnZXMgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoIHVzaW5nIHRoZSBgcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+YCBmdW5jdGlvbi5cbiAqIFRocm93cyBhbiBgRXJyb3JgIGlmIHRoZSBmaWxlIG9yIG9uZSBvZiB0aGUgYXRsYXMgcGFnZSBpbWFnZXMgY291bGQgbm90IGJlIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUZXh0dXJlQXRsYXMgKFxuXHRjazogQ2FudmFzS2l0LFxuXHRhdGxhc0ZpbGU6IHN0cmluZyxcblx0cmVhZEZpbGU6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8QnVmZmVyPlxuKTogUHJvbWlzZTxUZXh0dXJlQXRsYXM+IHtcblx0Y29uc3QgYXRsYXMgPSBuZXcgVGV4dHVyZUF0bGFzKGJ1ZmZlclRvVXRmOFN0cmluZyhhd2FpdCByZWFkRmlsZShhdGxhc0ZpbGUpKSk7XG5cdGNvbnN0IHNsYXNoSW5kZXggPSBhdGxhc0ZpbGUubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRjb25zdCBwYXJlbnREaXIgPVxuXHRcdHNsYXNoSW5kZXggPj0gMCA/IGF0bGFzRmlsZS5zdWJzdHJpbmcoMCwgc2xhc2hJbmRleCArIDEpIDogXCJcIjtcblx0Zm9yIChjb25zdCBwYWdlIG9mIGF0bGFzLnBhZ2VzKSB7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IGF3YWl0IENhbnZhc0tpdFRleHR1cmUuZnJvbUZpbGUoXG5cdFx0XHRjayxcblx0XHRcdHBhcmVudERpciArIHBhZ2UubmFtZSxcblx0XHRcdHJlYWRGaWxlXG5cdFx0KTtcblx0XHRwYWdlLnNldFRleHR1cmUodGV4dHVyZSk7XG5cdH1cblx0cmV0dXJuIGF0bGFzO1xufVxuXG4vKipcbiAqIExvYWRzIGEge0BsaW5rIFNrZWxldG9uRGF0YX3CoGZyb20gdGhlIGdpdmVuIGZpbGUgcGF0aCAoYC5qc29uYCBvciBgLnNrZWxgKSB1c2luZyB0aGUgYHJlYWRGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPmAgZnVuY3Rpb24uXG4gKiBBdHRhY2htZW50cyB3aWxsIGJlIGxvb2tlZCB1cCBpbiB0aGUgcHJvdmlkZWQgYXRsYXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU2tlbGV0b25EYXRhIChcblx0c2tlbGV0b25GaWxlOiBzdHJpbmcsXG5cdGF0bGFzOiBUZXh0dXJlQXRsYXMsXG5cdHJlYWRGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPEJ1ZmZlcj4sXG5cdHNjYWxlID0gMVxuKTogUHJvbWlzZTxTa2VsZXRvbkRhdGE+IHtcblx0Y29uc3QgYXR0YWNobWVudExvYWRlciA9IG5ldyBBdGxhc0F0dGFjaG1lbnRMb2FkZXIoYXRsYXMpO1xuXHRjb25zdCBsb2FkZXIgPSBza2VsZXRvbkZpbGUuZW5kc1dpdGgoXCIuanNvblwiKVxuXHRcdD8gbmV3IFNrZWxldG9uSnNvbihhdHRhY2htZW50TG9hZGVyKVxuXHRcdDogbmV3IFNrZWxldG9uQmluYXJ5KGF0dGFjaG1lbnRMb2FkZXIpO1xuXHRsb2FkZXIuc2NhbGUgPSBzY2FsZTtcblx0bGV0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShza2VsZXRvbkZpbGUpO1xuXHRpZiAoc2tlbGV0b25GaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcblx0XHRkYXRhID0gYnVmZmVyVG9VdGY4U3RyaW5nKGRhdGEpO1xuXHR9XG5cdGNvbnN0IHNrZWxldG9uRGF0YSA9IGxvYWRlci5yZWFkU2tlbGV0b25EYXRhKGRhdGEpO1xuXHRyZXR1cm4gc2tlbGV0b25EYXRhO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgYSB7QGxpbmsgU2tlbGV0b259IGFuZCBpdHMgYXNzb2NpYXRlZCB7QGxpbmsgQW5pbWF0aW9uU3RhdGV9LiBBIGRyYXdhYmxlIGlzIGNvbnN0cnVjdGVkIGZyb20gYSB7QGxpbmsgU2tlbGV0b25EYXRhfSwgd2hpY2ggY2FuXG4gKiBiZSBzaGFyZWQgYnkgYW55IG51bWJlciBvZiBkcmF3YWJsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkRyYXdhYmxlIHtcblx0cHVibGljIHJlYWRvbmx5IHNrZWxldG9uOiBTa2VsZXRvbjtcblx0cHVibGljIHJlYWRvbmx5IGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBkcmF3YmxlIGZyb20gdGhlIHNrZWxldG9uIGRhdGEuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAoc2tlbGV0b25EYXRhOiBTa2VsZXRvbkRhdGEpIHtcblx0XHR0aGlzLnNrZWxldG9uID0gbmV3IFNrZWxldG9uKHNrZWxldG9uRGF0YSk7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IG5ldyBBbmltYXRpb25TdGF0ZShcblx0XHRcdG5ldyBBbmltYXRpb25TdGF0ZURhdGEoc2tlbGV0b25EYXRhKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYW5pbWF0aW9uIHN0YXRlIGFuZCBza2VsZXRvbiB0aW1lIGJ5IHRoZSBkZWx0YSB0aW1lLiBBcHBsaWVzIHRoZVxuXHQgKiBhbmltYXRpb25zIHRvIHRoZSBza2VsZXRvbiBhbmQgY2FsY3VsYXRlcyB0aGUgZmluYWwgcG9zZSBvZiB0aGUgc2tlbGV0b24uXG5cdCAqXG5cdCAqIEBwYXJhbSBkZWx0YVRpbWUgdGhlIHRpbWUgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGluIHNlY29uZHNcblx0ICogQHBhcmFtIHBoeXNpY3NVcGRhdGUgb3B0aW9uYWwge0BsaW5rIFBoeXNpY3N9IHVwZGF0ZSBtb2RlLlxuXHQgKi9cblx0dXBkYXRlIChkZWx0YVRpbWU6IG51bWJlciwgcGh5c2ljc1VwZGF0ZTogUGh5c2ljcyA9IFBoeXNpY3MudXBkYXRlKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGFUaW1lKTtcblx0XHR0aGlzLnNrZWxldG9uLnVwZGF0ZShkZWx0YVRpbWUpO1xuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUuYXBwbHkodGhpcy5za2VsZXRvbik7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShwaHlzaWNzVXBkYXRlKTtcblx0fVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB7QGxpbmsgU2tlbGV0b259IG9yIHtAbGluayBTa2VsZXRvbkRyYXdhYmxlfSB0byBhIENhbnZhc0tpdCB7QGxpbmsgQ2FudmFzfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uUmVuZGVyZXIge1xuXHRwcml2YXRlIGNsaXBwZXIgPSBuZXcgU2tlbGV0b25DbGlwcGluZygpO1xuXHRwcml2YXRlIHRlbXBDb2xvciA9IG5ldyBDb2xvcigpO1xuXHRwcml2YXRlIHRlbXBDb2xvcjIgPSBuZXcgQ29sb3IoKTtcblx0cHJpdmF0ZSBzdGF0aWMgUVVBRF9UUklBTkdMRVMgPSBbMCwgMSwgMiwgMiwgMywgMF07XG5cdHByaXZhdGUgc2NyYXRjaFBvc2l0aW9ucyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoMTAwKTtcblx0cHJpdmF0ZSBzY3JhdGNoQ29sb3JzID0gVXRpbHMubmV3RmxvYXRBcnJheSgxMDApO1xuXHRwcml2YXRlIHNjcmF0Y2hVVnMgPSBVdGlscy5uZXdGbG9hdEFycmF5KDEwMCk7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24gcmVuZGVyZXIuXG5cdCAqIEBwYXJhbSBjayB0aGUge0BsaW5rIENhbnZhc0tpdH0gaW5zdGFuY2UgcmV0dXJuZWQgYnkgYENhbnZhc0tpdEluaXQoKWAuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBjazogQ2FudmFzS2l0KSB7IH1cblxuXHQvKipcblx0ICogUmVuZGVycyBhIHNrZWxldG9uIG9yIHNrZWxldG9uIGRyYXdhYmxlIGluIGl0cyBjdXJyZW50IHBvc2UgdG8gdGhlIGNhbnZhcy5cblx0ICogQHBhcmFtIGNhbnZhcyB0aGUgY2FudmFzIHRvIHJlbmRlciB0by5cblx0ICogQHBhcmFtIHNrZWxldG9uIHRoZSBza2VsZXRvbiBvciBkcmF3YWJsZSB0byByZW5kZXIuXG5cdCAqL1xuXHRyZW5kZXIgKGNhbnZhczogQ2FudmFzLCBza2VsZXRvbjogU2tlbGV0b24gfCBTa2VsZXRvbkRyYXdhYmxlKSB7XG5cdFx0aWYgKHNrZWxldG9uIGluc3RhbmNlb2YgU2tlbGV0b25EcmF3YWJsZSkgc2tlbGV0b24gPSBza2VsZXRvbi5za2VsZXRvbjtcblx0XHRsZXQgY2xpcHBlciA9IHRoaXMuY2xpcHBlcjtcblx0XHRsZXQgZHJhd09yZGVyID0gc2tlbGV0b24uZHJhd09yZGVyO1xuXHRcdGxldCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0aWYgKCFzbG90LmJvbmUuYWN0aXZlKSB7XG5cdFx0XHRcdGNsaXBwZXIuY2xpcEVuZFdpdGhTbG90KHNsb3QpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGxldCBwb3NpdGlvbnMgPSB0aGlzLnNjcmF0Y2hQb3NpdGlvbnM7XG5cdFx0XHRsZXQgY29sb3JzID0gdGhpcy5zY3JhdGNoQ29sb3JzO1xuXHRcdFx0bGV0IHV2czogTnVtYmVyQXJyYXlMaWtlO1xuXHRcdFx0bGV0IHRleHR1cmU6IENhbnZhc0tpdFRleHR1cmU7XG5cdFx0XHRsZXQgdHJpYW5nbGVzOiBBcnJheTxudW1iZXI+O1xuXHRcdFx0bGV0IGF0dGFjaG1lbnRDb2xvcjogQ29sb3I7XG5cdFx0XHRsZXQgbnVtVmVydGljZXMgPSAwO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdGxldCByZWdpb24gPSBhdHRhY2htZW50IGFzIFJlZ2lvbkF0dGFjaG1lbnQ7XG5cdFx0XHRcdGlmIChwb3NpdGlvbnMubGVuZ3RoIDwgOCkgdGhpcy5zY3JhdGNoUG9zaXRpb25zID0gcG9zaXRpb25zID0gVXRpbHMubmV3RmxvYXRBcnJheSg4KTtcblx0XHRcdFx0bnVtVmVydGljZXMgPSA0O1xuXHRcdFx0XHRyZWdpb24uY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgcG9zaXRpb25zLCAwLCAyKTtcblx0XHRcdFx0dHJpYW5nbGVzID0gU2tlbGV0b25SZW5kZXJlci5RVUFEX1RSSUFOR0xFUztcblx0XHRcdFx0dXZzID0gcmVnaW9uLnV2cyBhcyBGbG9hdDMyQXJyYXk7XG5cdFx0XHRcdHRleHR1cmUgPSByZWdpb24ucmVnaW9uPy50ZXh0dXJlIGFzIENhbnZhc0tpdFRleHR1cmU7XG5cdFx0XHRcdGF0dGFjaG1lbnRDb2xvciA9IHJlZ2lvbi5jb2xvcjtcblx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGxldCBtZXNoID0gYXR0YWNobWVudCBhcyBNZXNoQXR0YWNobWVudDtcblx0XHRcdFx0aWYgKHBvc2l0aW9ucy5sZW5ndGggPCBtZXNoLndvcmxkVmVydGljZXNMZW5ndGgpXG5cdFx0XHRcdFx0dGhpcy5zY3JhdGNoUG9zaXRpb25zID0gcG9zaXRpb25zID0gVXRpbHMubmV3RmxvYXRBcnJheShtZXNoLndvcmxkVmVydGljZXNMZW5ndGgpO1xuXHRcdFx0XHRudW1WZXJ0aWNlcyA9IG1lc2gud29ybGRWZXJ0aWNlc0xlbmd0aCA+PiAxO1xuXHRcdFx0XHRtZXNoLmNvbXB1dGVXb3JsZFZlcnRpY2VzKFxuXHRcdFx0XHRcdHNsb3QsXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRtZXNoLndvcmxkVmVydGljZXNMZW5ndGgsXG5cdFx0XHRcdFx0cG9zaXRpb25zLFxuXHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0MlxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0cmlhbmdsZXMgPSBtZXNoLnRyaWFuZ2xlcztcblx0XHRcdFx0dGV4dHVyZSA9IG1lc2gucmVnaW9uPy50ZXh0dXJlIGFzIENhbnZhc0tpdFRleHR1cmU7XG5cdFx0XHRcdHV2cyA9IG1lc2gudXZzIGFzIEZsb2F0MzJBcnJheTtcblx0XHRcdFx0YXR0YWNobWVudENvbG9yID0gbWVzaC5jb2xvcjtcblx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkge1xuXHRcdFx0XHRsZXQgY2xpcCA9IGF0dGFjaG1lbnQgYXMgQ2xpcHBpbmdBdHRhY2htZW50O1xuXHRcdFx0XHRjbGlwcGVyLmNsaXBTdGFydChzbG90LCBjbGlwKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0dXJlKSB7XG5cdFx0XHRcdGlmIChjbGlwcGVyLmlzQ2xpcHBpbmcoKSkge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFRyaWFuZ2xlc1VucGFja2VkKFxuXHRcdFx0XHRcdFx0cG9zaXRpb25zLFxuXHRcdFx0XHRcdFx0dHJpYW5nbGVzLFxuXHRcdFx0XHRcdFx0dHJpYW5nbGVzLmxlbmd0aCxcblx0XHRcdFx0XHRcdHV2c1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoY2xpcHBlci5jbGlwcGVkVmVydGljZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gY2xpcHBpbmcgZXZlbnR1YWxseSBcImVyYXNlc1wiIGNsaXBwZWRWZXJ0aWNlcyBhcnJheSAoc2V0IGxlbmd0aCB0byAwIGF0IG5leHQgY2xpcClcblx0XHRcdFx0XHRcdC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIGFycmF5IGFsaXZlIHVudGlsIGNhbnZhc2tpdCBwYWludHMsXG5cdFx0XHRcdFx0XHQvLyBvdGhlcndpc2UgYSBtZW1vcnkgYWNjZXNzIG9jY3Vyc1xuXHRcdFx0XHRcdFx0aWYgKHBvc2l0aW9ucy5sZW5ndGggPCBjbGlwcGVyLmNsaXBwZWRWZXJ0aWNlcy5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2NyYXRjaFBvc2l0aW9ucyA9IHBvc2l0aW9ucyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkoY2xpcHBlci5jbGlwcGVkVmVydGljZXMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdG51bVZlcnRpY2VzID0gY2xpcHBlci5jbGlwcGVkVmVydGljZXMubGVuZ3RoIC8gMjtcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xpcHBlci5jbGlwcGVkVmVydGljZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uc1tpXSA9IGNsaXBwZXIuY2xpcHBlZFZlcnRpY2VzW2ldO1xuXG5cdFx0XHRcdFx0XHR1dnMgPSBjbGlwcGVyLmNsaXBwZWRVVnM7XG5cdFx0XHRcdFx0XHR0cmlhbmdsZXMgPSBjbGlwcGVyLmNsaXBwZWRUcmlhbmdsZXM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsaXBwZXIuY2xpcEVuZFdpdGhTbG90KHNsb3QpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHNsb3RDb2xvciA9IHNsb3QuY29sb3I7XG5cdFx0XHRcdGxldCBmaW5hbENvbG9yID0gdGhpcy50ZW1wQ29sb3I7XG5cdFx0XHRcdGZpbmFsQ29sb3IuciA9IHNrZWxldG9uQ29sb3IuciAqIHNsb3RDb2xvci5yICogYXR0YWNobWVudENvbG9yLnI7XG5cdFx0XHRcdGZpbmFsQ29sb3IuZyA9IHNrZWxldG9uQ29sb3IuZyAqIHNsb3RDb2xvci5nICogYXR0YWNobWVudENvbG9yLmc7XG5cdFx0XHRcdGZpbmFsQ29sb3IuYiA9IHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogYXR0YWNobWVudENvbG9yLmI7XG5cdFx0XHRcdGZpbmFsQ29sb3IuYSA9IHNrZWxldG9uQ29sb3IuYSAqIHNsb3RDb2xvci5hICogYXR0YWNobWVudENvbG9yLmE7XG5cblx0XHRcdFx0aWYgKGNvbG9ycy5sZW5ndGggLyA0IDwgbnVtVmVydGljZXMpXG5cdFx0XHRcdFx0dGhpcy5zY3JhdGNoQ29sb3JzID0gY29sb3JzID0gVXRpbHMubmV3RmxvYXRBcnJheShudW1WZXJ0aWNlcyAqIDQpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IG51bVZlcnRpY2VzICogNDsgaSA8IG47IGkgKz0gNCkge1xuXHRcdFx0XHRcdGNvbG9yc1tpXSA9IGZpbmFsQ29sb3Iucjtcblx0XHRcdFx0XHRjb2xvcnNbaSArIDFdID0gZmluYWxDb2xvci5nO1xuXHRcdFx0XHRcdGNvbG9yc1tpICsgMl0gPSBmaW5hbENvbG9yLmI7XG5cdFx0XHRcdFx0Y29sb3JzW2kgKyAzXSA9IGZpbmFsQ29sb3IuYTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNjYWxlZFV2cyA9IHRoaXMuc2NyYXRjaFVWcy5sZW5ndGggPCB1dnMubGVuZ3RoXG5cdFx0XHRcdFx0PyAodGhpcy5zY3JhdGNoVVZzID0gVXRpbHMubmV3RmxvYXRBcnJheSh1dnMubGVuZ3RoKSlcblx0XHRcdFx0XHQ6IHRoaXMuc2NyYXRjaFVWcztcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSB0ZXh0dXJlLmdldEltYWdlKCkuaW1hZ2Uud2lkdGgoKTtcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gdGV4dHVyZS5nZXRJbWFnZSgpLmltYWdlLmhlaWdodCgpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHV2cy5sZW5ndGg7IGkgKz0gMikge1xuXHRcdFx0XHRcdHNjYWxlZFV2c1tpXSA9IHV2c1tpXSAqIHdpZHRoO1xuXHRcdFx0XHRcdHNjYWxlZFV2c1tpICsgMV0gPSB1dnNbaSArIDFdICogaGVpZ2h0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYmxlbmRNb2RlID0gc2xvdC5kYXRhLmJsZW5kTW9kZTtcblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLmNrLk1ha2VWZXJ0aWNlcyhcblx0XHRcdFx0XHR0aGlzLmNrLlZlcnRleE1vZGUuVHJpYW5nbGVzLFxuXHRcdFx0XHRcdHBvc2l0aW9ucyxcblx0XHRcdFx0XHRzY2FsZWRVdnMsXG5cdFx0XHRcdFx0Y29sb3JzLFxuXHRcdFx0XHRcdHRyaWFuZ2xlcyxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjYW52YXMuZHJhd1ZlcnRpY2VzKFxuXHRcdFx0XHRcdHZlcnRpY2VzLFxuXHRcdFx0XHRcdHRoaXMuY2suQmxlbmRNb2RlLk1vZHVsYXRlLFxuXHRcdFx0XHRcdHRleHR1cmUuZ2V0SW1hZ2UoKS5wYWludFBlckJsZW5kTW9kZS5nZXQoYmxlbmRNb2RlKSFcblx0XHRcdFx0KTtcblx0XHRcdFx0dmVydGljZXMuZGVsZXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNsaXBwZXIuY2xpcEVuZFdpdGhTbG90KHNsb3QpO1xuXHRcdH1cblx0XHRjbGlwcGVyLmNsaXBFbmQoKTtcblx0fVxufVxuIl19
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsT0FBTyxFQUNOLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFNBQVMsRUFDVCxrQkFBa0IsRUFFbEIsU0FBUyxFQUNULGNBQWMsRUFFZCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixjQUFjLEVBQ2QsZ0JBQWdCLEVBRWhCLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLEtBQUssR0FDTCxNQUFNLDhCQUE4QixDQUFDO0FBSXRDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBUXRCLGdEQUFnRDtBQUNoRCxTQUFTLGFBQWEsQ0FBRSxFQUFhLEVBQUUsU0FBb0I7SUFDMUQsUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUNuQixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDN0IsS0FBSyxTQUFTLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFCLEtBQUssU0FBUyxDQUFDLFFBQVE7WUFDdEIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUM3QixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDNUI7WUFDQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBRSxNQUE0QjtJQUN4RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ25DLE9BQU8sTUFB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RyxTQUFTLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ3JGLEtBQUssQ0FBQyxDQUFDO2dCQUNSLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFFcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3BDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFDNUIsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULEtBQUssQ0FDTCxDQUFDO2dCQUNGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxPQUFPO29CQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDaEYsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgSnVseSAyOCwgMjAyMy4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDIzLCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yXG4gKiBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFXG4gKiBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0ICogZnJvbSBcIkBlc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmVcIjtcblxuaW1wb3J0IHtcblx0QW5pbWF0aW9uU3RhdGUsXG5cdEFuaW1hdGlvblN0YXRlRGF0YSxcblx0QXRsYXNBdHRhY2htZW50TG9hZGVyLFxuXHRCbGVuZE1vZGUsXG5cdENsaXBwaW5nQXR0YWNobWVudCxcblx0dHlwZSBDb2xvcixcblx0TWF0aFV0aWxzLFxuXHRNZXNoQXR0YWNobWVudCxcblx0dHlwZSBOdW1iZXJBcnJheUxpa2UsXG5cdFBoeXNpY3MsXG5cdFJlZ2lvbkF0dGFjaG1lbnQsXG5cdFNrZWxldG9uLFxuXHRTa2VsZXRvbkJpbmFyeSxcblx0U2tlbGV0b25DbGlwcGluZyxcblx0dHlwZSBTa2VsZXRvbkRhdGEsXG5cdFNrZWxldG9uSnNvbixcblx0VGV4dHVyZSxcblx0VGV4dHVyZUF0bGFzLFxuXHRVdGlscyxcbn0gZnJvbSBcIkBlc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmVcIjtcblxuaW1wb3J0IHR5cGUgeyBDYW52YXMsIENhbnZhc0tpdCwgSW1hZ2UsIFBhaW50LCBTaGFkZXIgfSBmcm9tIFwiY2FudmFza2l0LXdhc21cIjtcblxuU2tlbGV0b24ueURvd24gPSB0cnVlO1xuXG50eXBlIENhbnZhc0tpdEltYWdlID0ge1xuXHRzaGFkZXJzOiBTaGFkZXJbXTtcblx0cGFpbnRQZXJCbGVuZE1vZGU6IE1hcDxCbGVuZE1vZGUsIFBhaW50Pjtcblx0aW1hZ2U6IEltYWdlO1xufTtcblxuLy8gQ2FudmFzS2l0IGJsZW5kIG1vZGVzIGZvciBwcmVtdWx0aXBsaWVkIGFscGhhXG5mdW5jdGlvbiB0b0NrQmxlbmRNb2RlIChjazogQ2FudmFzS2l0LCBibGVuZE1vZGU6IEJsZW5kTW9kZSkge1xuXHRzd2l0Y2ggKGJsZW5kTW9kZSkge1xuXHRcdGNhc2UgQmxlbmRNb2RlLk5vcm1hbDpcblx0XHRcdHJldHVybiBjay5CbGVuZE1vZGUuU3JjT3Zlcjtcblx0XHRjYXNlIEJsZW5kTW9kZS5BZGRpdGl2ZTpcblx0XHRcdHJldHVybiBjay5CbGVuZE1vZGUuUGx1cztcblx0XHRjYXNlIEJsZW5kTW9kZS5NdWx0aXBseTpcblx0XHRcdHJldHVybiBjay5CbGVuZE1vZGUuU3JjT3Zlcjtcblx0XHRjYXNlIEJsZW5kTW9kZS5TY3JlZW46XG5cdFx0XHRyZXR1cm4gY2suQmxlbmRNb2RlLlNjcmVlbjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGNrLkJsZW5kTW9kZS5TcmNPdmVyO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlclRvVXRmOFN0cmluZyAoYnVmZmVyOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcikge1xuXHRpZiAodHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJ1dGYtOFwiKTtcblx0fSBlbHNlIGlmICh0eXBlb2YgVGV4dERlY29kZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm4gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIikuZGVjb2RlKGJ1ZmZlcik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cbn1cblxuY2xhc3MgQ2FudmFzS2l0VGV4dHVyZSBleHRlbmRzIFRleHR1cmUge1xuXHRnZXRJbWFnZSAoKTogQ2FudmFzS2l0SW1hZ2Uge1xuXHRcdHJldHVybiB0aGlzLl9pbWFnZTtcblx0fVxuXG5cdHNldEZpbHRlcnMgKCk6IHZvaWQgeyB9XG5cblx0c2V0V3JhcHMgKCk6IHZvaWQgeyB9XG5cblx0ZGlzcG9zZSAoKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0YTogQ2FudmFzS2l0SW1hZ2UgPSB0aGlzLl9pbWFnZTtcblx0XHRmb3IgKGNvbnN0IHBhaW50IG9mIGRhdGEucGFpbnRQZXJCbGVuZE1vZGUudmFsdWVzKCkpIHtcblx0XHRcdHBhaW50LmRlbGV0ZSgpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHNoYWRlciBvZiBkYXRhLnNoYWRlcnMpIHtcblx0XHRcdHNoYWRlci5kZWxldGUoKTtcblx0XHR9XG5cdFx0ZGF0YS5pbWFnZS5kZWxldGUoKTtcblx0XHR0aGlzLl9pbWFnZSA9IG51bGw7XG5cdH1cblxuXHRzdGF0aWMgYXN5bmMgZnJvbUZpbGUgKFxuXHRcdGNrOiBDYW52YXNLaXQsXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdHJlYWRGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPEFycmF5QnVmZmVyIHwgQnVmZmVyPlxuXHQpOiBQcm9taXNlPENhbnZhc0tpdFRleHR1cmU+IHtcblx0XHRjb25zdCBpbWdEYXRhID0gYXdhaXQgcmVhZEZpbGUocGF0aCk7XG5cdFx0aWYgKCFpbWdEYXRhKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBsb2FkIGltYWdlICR7cGF0aH1gKTtcblx0XHRjb25zdCBpbWFnZSA9IGNrLk1ha2VJbWFnZUZyb21FbmNvZGVkKGltZ0RhdGEpO1xuXHRcdGlmICghaW1hZ2UpIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgaW1hZ2UgJHtwYXRofWApO1xuXHRcdGNvbnN0IHBhaW50UGVyQmxlbmRNb2RlID0gbmV3IE1hcDxCbGVuZE1vZGUsIFBhaW50PigpO1xuXHRcdGNvbnN0IHNoYWRlcnM6IFNoYWRlcltdID0gW107XG5cdFx0Zm9yIChjb25zdCBibGVuZE1vZGUgb2YgW1xuXHRcdFx0QmxlbmRNb2RlLk5vcm1hbCxcblx0XHRcdEJsZW5kTW9kZS5BZGRpdGl2ZSxcblx0XHRcdEJsZW5kTW9kZS5NdWx0aXBseSxcblx0XHRcdEJsZW5kTW9kZS5TY3JlZW4sXG5cdFx0XSkge1xuXHRcdFx0Y29uc3QgcGFpbnQgPSBuZXcgY2suUGFpbnQoKTtcblx0XHRcdGNvbnN0IHNoYWRlciA9IGltYWdlLm1ha2VTaGFkZXJPcHRpb25zKFxuXHRcdFx0XHRjay5UaWxlTW9kZS5DbGFtcCxcblx0XHRcdFx0Y2suVGlsZU1vZGUuQ2xhbXAsXG5cdFx0XHRcdGNrLkZpbHRlck1vZGUuTGluZWFyLFxuXHRcdFx0XHRjay5NaXBtYXBNb2RlLkxpbmVhclxuXHRcdFx0KTtcblx0XHRcdHBhaW50LnNldFNoYWRlcihzaGFkZXIpO1xuXHRcdFx0cGFpbnQuc2V0QmxlbmRNb2RlKHRvQ2tCbGVuZE1vZGUoY2ssIGJsZW5kTW9kZSkpO1xuXHRcdFx0cGFpbnRQZXJCbGVuZE1vZGUuc2V0KGJsZW5kTW9kZSwgcGFpbnQpO1xuXHRcdFx0c2hhZGVycy5wdXNoKHNoYWRlcik7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQ2FudmFzS2l0VGV4dHVyZSh7IHNoYWRlcnMsIHBhaW50UGVyQmxlbmRNb2RlLCBpbWFnZSB9KTtcblx0fVxufVxuXG4vKipcbiAqIExvYWRzIGEge0BsaW5rIFRleHR1cmVBdGxhc30gYW5kIGl0cyBhdGxhcyBwYWdlIGltYWdlcyBmcm9tIHRoZSBnaXZlbiBmaWxlIHBhdGggdXNpbmcgdGhlIGByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj5gIGZ1bmN0aW9uLlxuICogVGhyb3dzIGFuIGBFcnJvcmAgaWYgdGhlIGZpbGUgb3Igb25lIG9mIHRoZSBhdGxhcyBwYWdlIGltYWdlcyBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFRleHR1cmVBdGxhcyAoXG5cdGNrOiBDYW52YXNLaXQsXG5cdGF0bGFzRmlsZTogc3RyaW5nLFxuXHRyZWFkRmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlciB8IEJ1ZmZlcj5cbik6IFByb21pc2U8VGV4dHVyZUF0bGFzPiB7XG5cdGNvbnN0IGF0bGFzID0gbmV3IFRleHR1cmVBdGxhcyhidWZmZXJUb1V0ZjhTdHJpbmcoYXdhaXQgcmVhZEZpbGUoYXRsYXNGaWxlKSkpO1xuXHRjb25zdCBzbGFzaEluZGV4ID0gYXRsYXNGaWxlLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0Y29uc3QgcGFyZW50RGlyID1cblx0XHRzbGFzaEluZGV4ID49IDAgPyBhdGxhc0ZpbGUuc3Vic3RyaW5nKDAsIHNsYXNoSW5kZXggKyAxKSA6IFwiXCI7XG5cdGZvciAoY29uc3QgcGFnZSBvZiBhdGxhcy5wYWdlcykge1xuXHRcdGNvbnN0IHRleHR1cmUgPSBhd2FpdCBDYW52YXNLaXRUZXh0dXJlLmZyb21GaWxlKFxuXHRcdFx0Y2ssXG5cdFx0XHRwYXJlbnREaXIgKyBwYWdlLm5hbWUsXG5cdFx0XHRyZWFkRmlsZVxuXHRcdCk7XG5cdFx0cGFnZS5zZXRUZXh0dXJlKHRleHR1cmUpO1xuXHR9XG5cdHJldHVybiBhdGxhcztcbn1cblxuLyoqXG4gKiBMb2FkcyBhIHtAbGluayBTa2VsZXRvbkRhdGF9wqBmcm9tIHRoZSBnaXZlbiBmaWxlIHBhdGggKGAuanNvbmAgb3IgYC5za2VsYCkgdXNpbmcgdGhlIGByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj5gIGZ1bmN0aW9uLlxuICogQXR0YWNobWVudHMgd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhlIHByb3ZpZGVkIGF0bGFzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFNrZWxldG9uRGF0YSAoXG5cdHNrZWxldG9uRmlsZTogc3RyaW5nLFxuXHRhdGxhczogVGV4dHVyZUF0bGFzLFxuXHRyZWFkRmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlciB8IEJ1ZmZlcj4sXG5cdHNjYWxlID0gMVxuKTogUHJvbWlzZTxTa2VsZXRvbkRhdGE+IHtcblx0Y29uc3QgYXR0YWNobWVudExvYWRlciA9IG5ldyBBdGxhc0F0dGFjaG1lbnRMb2FkZXIoYXRsYXMpO1xuXHRjb25zdCBsb2FkZXIgPSBza2VsZXRvbkZpbGUuZW5kc1dpdGgoXCIuanNvblwiKVxuXHRcdD8gbmV3IFNrZWxldG9uSnNvbihhdHRhY2htZW50TG9hZGVyKVxuXHRcdDogbmV3IFNrZWxldG9uQmluYXJ5KGF0dGFjaG1lbnRMb2FkZXIpO1xuXHRsb2FkZXIuc2NhbGUgPSBzY2FsZTtcblx0Y29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHNrZWxldG9uRmlsZSk7XG5cdGlmIChsb2FkZXIgaW5zdGFuY2VvZiBTa2VsZXRvbkpzb24pIHtcblx0XHRyZXR1cm4gbG9hZGVyLnJlYWRTa2VsZXRvbkRhdGEoYnVmZmVyVG9VdGY4U3RyaW5nKGRhdGEpKVxuXHR9XG5cdHJldHVybiBsb2FkZXIucmVhZFNrZWxldG9uRGF0YShkYXRhKTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGEge0BsaW5rIFNrZWxldG9ufSBhbmQgaXRzIGFzc29jaWF0ZWQge0BsaW5rIEFuaW1hdGlvblN0YXRlfS4gQSBkcmF3YWJsZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEge0BsaW5rIFNrZWxldG9uRGF0YX0sIHdoaWNoIGNhblxuICogYmUgc2hhcmVkIGJ5IGFueSBudW1iZXIgb2YgZHJhd2FibGVzLlxuICovXG5leHBvcnQgY2xhc3MgU2tlbGV0b25EcmF3YWJsZSB7XG5cdHB1YmxpYyByZWFkb25seSBza2VsZXRvbjogU2tlbGV0b247XG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25TdGF0ZTogQW5pbWF0aW9uU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGRyYXdibGUgZnJvbSB0aGUgc2tlbGV0b24gZGF0YS5cbiAgICAgKi9cblx0Y29uc3RydWN0b3IgKHNrZWxldG9uRGF0YTogU2tlbGV0b25EYXRhKSB7XG5cdFx0dGhpcy5za2VsZXRvbiA9IG5ldyBTa2VsZXRvbihza2VsZXRvbkRhdGEpO1xuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBuZXcgQW5pbWF0aW9uU3RhdGUoXG5cdFx0XHRuZXcgQW5pbWF0aW9uU3RhdGVEYXRhKHNrZWxldG9uRGF0YSlcblx0XHQpO1xuXHR9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBhbmltYXRpb24gc3RhdGUgYW5kIHNrZWxldG9uIHRpbWUgYnkgdGhlIGRlbHRhIHRpbWUuIEFwcGxpZXMgdGhlXG4gICAgICogYW5pbWF0aW9ucyB0byB0aGUgc2tlbGV0b24gYW5kIGNhbGN1bGF0ZXMgdGhlIGZpbmFsIHBvc2Ugb2YgdGhlIHNrZWxldG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbHRhVGltZSB0aGUgdGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgaW4gc2Vjb25kc1xuICAgICAqIEBwYXJhbSBwaHlzaWNzVXBkYXRlIG9wdGlvbmFsIHtAbGluayBQaHlzaWNzfSB1cGRhdGUgbW9kZS5cbiAgICAgKi9cblx0dXBkYXRlIChkZWx0YVRpbWU6IG51bWJlciwgcGh5c2ljc1VwZGF0ZTogUGh5c2ljcyA9IFBoeXNpY3MudXBkYXRlKSB7XG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZS51cGRhdGUoZGVsdGFUaW1lKTtcblx0XHR0aGlzLnNrZWxldG9uLnVwZGF0ZShkZWx0YVRpbWUpO1xuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUuYXBwbHkodGhpcy5za2VsZXRvbik7XG5cdFx0dGhpcy5za2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybShwaHlzaWNzVXBkYXRlKTtcblx0fVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB7QGxpbmsgU2tlbGV0b259IG9yIHtAbGluayBTa2VsZXRvbkRyYXdhYmxlfSB0byBhIENhbnZhc0tpdCB7QGxpbmsgQ2FudmFzfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uUmVuZGVyZXIge1xuXHRwcml2YXRlIGNsaXBwZXIgPSBuZXcgU2tlbGV0b25DbGlwcGluZygpO1xuXHRwcml2YXRlIHN0YXRpYyBRVUFEX1RSSUFOR0xFUyA9IFswLCAxLCAyLCAyLCAzLCAwXTtcblx0cHJpdmF0ZSBzY3JhdGNoUG9zaXRpb25zID0gVXRpbHMubmV3RmxvYXRBcnJheSgxMDApO1xuXHRwcml2YXRlIHNjcmF0Y2hVVnMgPSBVdGlscy5uZXdGbG9hdEFycmF5KDEwMCk7XG5cdHByaXZhdGUgc2NyYXRjaENvbG9ycyA9IG5ldyBVaW50MzJBcnJheSgxMDAgLyA0KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24gcmVuZGVyZXIuXG4gICAgICogQHBhcmFtIGNrIHRoZSB7QGxpbmsgQ2FudmFzS2l0fSBpbnN0YW5jZSByZXR1cm5lZCBieSBgQ2FudmFzS2l0SW5pdCgpYC5cbiAgICAgKi9cblx0Y29uc3RydWN0b3IgKHByaXZhdGUgY2s6IENhbnZhc0tpdCkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXJzIGEgc2tlbGV0b24gb3Igc2tlbGV0b24gZHJhd2FibGUgaW4gaXRzIGN1cnJlbnQgcG9zZSB0byB0aGUgY2FudmFzLlxuICAgICAqIEBwYXJhbSBjYW52YXMgdGhlIGNhbnZhcyB0byByZW5kZXIgdG8uXG4gICAgICogQHBhcmFtIHNrZWxldG9uIHRoZSBza2VsZXRvbiBvciBkcmF3YWJsZSB0byByZW5kZXIuXG4gICAgICovXG5cdHJlbmRlciAoY2FudmFzOiBDYW52YXMsIHNrZWxldG9uOiBTa2VsZXRvbiB8IFNrZWxldG9uRHJhd2FibGUpIHtcblx0XHRpZiAoc2tlbGV0b24gaW5zdGFuY2VvZiBTa2VsZXRvbkRyYXdhYmxlKSBza2VsZXRvbiA9IHNrZWxldG9uLnNrZWxldG9uO1xuXHRcdGNvbnN0IGNsaXBwZXIgPSB0aGlzLmNsaXBwZXI7XG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc2tlbGV0b24uZHJhd09yZGVyO1xuXHRcdGNvbnN0IHNrZWxldG9uQ29sb3IgPSBza2VsZXRvbi5jb2xvcjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblx0XHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkge1xuXHRcdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGxldCBwb3NpdGlvbnMgPSB0aGlzLnNjcmF0Y2hQb3NpdGlvbnM7XG5cdFx0XHRsZXQgdHJpYW5nbGVzOiBBcnJheTxudW1iZXI+O1xuXHRcdFx0bGV0IG51bVZlcnRpY2VzID0gNDtcblxuXHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgcG9zaXRpb25zLCAwLCAyKTtcblx0XHRcdFx0dHJpYW5nbGVzID0gU2tlbGV0b25SZW5kZXJlci5RVUFEX1RSSUFOR0xFUztcblx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGlmIChwb3NpdGlvbnMubGVuZ3RoIDwgYXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JhdGNoUG9zaXRpb25zID0gVXRpbHMubmV3RmxvYXRBcnJheShhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGgpO1xuXHRcdFx0XHRcdHBvc2l0aW9ucyA9IHRoaXMuc2NyYXRjaFBvc2l0aW9ucztcblx0XHRcdFx0fVxuXHRcdFx0XHRudW1WZXJ0aWNlcyA9IGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aCA+PiAxO1xuXHRcdFx0XHRhdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzKFxuXHRcdFx0XHRcdHNsb3QsXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGgsXG5cdFx0XHRcdFx0cG9zaXRpb25zLFxuXHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0MlxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0cmlhbmdsZXMgPSBhdHRhY2htZW50LnRyaWFuZ2xlcztcblx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCkge1xuXHRcdFx0XHRjbGlwcGVyLmNsaXBTdGFydChzbG90LCBhdHRhY2htZW50KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRleHR1cmUgPSBhdHRhY2htZW50LnJlZ2lvbj8udGV4dHVyZSBhcyBDYW52YXNLaXRUZXh0dXJlO1xuXHRcdFx0aWYgKHRleHR1cmUpIHtcblx0XHRcdFx0bGV0IHV2cyA9IGF0dGFjaG1lbnQudXZzO1xuXHRcdFx0XHRsZXQgc2NhbGVkVXZzOiBOdW1iZXJBcnJheUxpa2U7XG5cdFx0XHRcdGxldCBjb2xvcnMgPSB0aGlzLnNjcmF0Y2hDb2xvcnM7XG5cdFx0XHRcdGlmIChjbGlwcGVyLmlzQ2xpcHBpbmcoKSkge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFRyaWFuZ2xlc1VucGFja2VkKHBvc2l0aW9ucywgdHJpYW5nbGVzLCB0cmlhbmdsZXMubGVuZ3RoLCB1dnMpO1xuXHRcdFx0XHRcdGlmIChjbGlwcGVyLmNsaXBwZWRWZXJ0aWNlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0XHRcdFx0Y2xpcHBlci5jbGlwRW5kV2l0aFNsb3Qoc2xvdCk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zaXRpb25zID0gY2xpcHBlci5jbGlwcGVkVmVydGljZXM7XG5cdFx0XHRcdFx0dXZzID0gc2NhbGVkVXZzID0gY2xpcHBlci5jbGlwcGVkVVZzO1xuXHRcdFx0XHRcdHRyaWFuZ2xlcyA9IGNsaXBwZXIuY2xpcHBlZFRyaWFuZ2xlcztcblx0XHRcdFx0XHRudW1WZXJ0aWNlcyA9IGNsaXBwZXIuY2xpcHBlZFZlcnRpY2VzLmxlbmd0aCAvIDI7XG5cdFx0XHRcdFx0Y29sb3JzID0gbmV3IFVpbnQzMkFycmF5KG51bVZlcnRpY2VzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzY2FsZWRVdnMgPSB0aGlzLnNjcmF0Y2hVVnM7XG5cdFx0XHRcdFx0aWYgKHRoaXMuc2NyYXRjaFVWcy5sZW5ndGggPCB1dnMubGVuZ3RoKVxuXHRcdFx0XHRcdFx0c2NhbGVkVXZzID0gdGhpcy5zY3JhdGNoVVZzID0gVXRpbHMubmV3RmxvYXRBcnJheSh1dnMubGVuZ3RoKTtcblx0XHRcdFx0XHRpZiAoY29sb3JzLmxlbmd0aCA8IG51bVZlcnRpY2VzKVxuXHRcdFx0XHRcdFx0Y29sb3JzID0gdGhpcy5zY3JhdGNoQ29sb3JzID0gbmV3IFVpbnQzMkFycmF5KG51bVZlcnRpY2VzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNrSW1hZ2UgPSB0ZXh0dXJlLmdldEltYWdlKCk7XG5cdFx0XHRcdGNvbnN0IGltYWdlID0gY2tJbWFnZS5pbWFnZTtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSBpbWFnZS53aWR0aCgpO1xuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQoKTtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB1dnMubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdFx0XHRzY2FsZWRVdnNbaV0gPSB1dnNbaV0gKiB3aWR0aDtcblx0XHRcdFx0XHRzY2FsZWRVdnNbaSArIDFdID0gdXZzW2kgKyAxXSAqIGhlaWdodDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnRDb2xvciA9IGF0dGFjaG1lbnQuY29sb3I7XG5cdFx0XHRcdGNvbnN0IHNsb3RDb2xvciA9IHNsb3QuY29sb3I7XG5cblx0XHRcdFx0Ly8gdXNpbmcgVWludDMyQXJyYXkgZm9yIGNvbG9ycyBhbGxvd3MgdG8gYXZvaWQgY2FudmFza2l0IHRvIGFsbG9jYXRlIG9uZSBlYWNoIHRpbWVcblx0XHRcdFx0Ly8gYnV0IGNvbG9ycyBuZWVkIHRvIGJlIGluIGNhbnZhc2tpdCBmb3JtYXQuXG5cdFx0XHRcdC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9za2lhL2Jsb2IvYmI4YzM2ZmRmN2I5MTVhOGMwOTZlMzVlMmYwODEwOWU0NzdmZTFiOC9tb2R1bGVzL2NhbnZhc2tpdC9jb2xvci5qcyNMMTYzXG5cdFx0XHRcdGNvbnN0IGZpbmFsQ29sb3IgPSAoXG5cdFx0XHRcdFx0TWF0aFV0aWxzLmNsYW1wKHNrZWxldG9uQ29sb3IuYSAqIHNsb3RDb2xvci5hICogYXR0YWNobWVudENvbG9yLmEgKiAyNTUsIDAsIDI1NSkgPDwgMjQgfFxuXHRcdFx0XHRcdE1hdGhVdGlscy5jbGFtcChza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIGF0dGFjaG1lbnRDb2xvci5yICogMjU1LCAwLCAyNTUpIDw8IDE2IHxcblx0XHRcdFx0XHRNYXRoVXRpbHMuY2xhbXAoc2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiBhdHRhY2htZW50Q29sb3IuZyAqIDI1NSwgMCwgMjU1KSA8PCA4IHxcblx0XHRcdFx0XHRNYXRoVXRpbHMuY2xhbXAoc2tlbGV0b25Db2xvci5iICogc2xvdENvbG9yLmIgKiBhdHRhY2htZW50Q29sb3IuYiAqIDI1NSwgMCwgMjU1KSA8PCAwXG5cdFx0XHRcdCkgPj4+IDA7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gbnVtVmVydGljZXM7IGkgPCBuOyBpKyspIGNvbG9yc1tpXSA9IGZpbmFsQ29sb3I7XG5cblx0XHRcdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLmNrLk1ha2VWZXJ0aWNlcyhcblx0XHRcdFx0XHR0aGlzLmNrLlZlcnRleE1vZGUuVHJpYW5nbGVzLFxuXHRcdFx0XHRcdHBvc2l0aW9ucyxcblx0XHRcdFx0XHRzY2FsZWRVdnMsXG5cdFx0XHRcdFx0Y29sb3JzLFxuXHRcdFx0XHRcdHRyaWFuZ2xlcyxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBja1BhaW50ID0gY2tJbWFnZS5wYWludFBlckJsZW5kTW9kZS5nZXQoc2xvdC5kYXRhLmJsZW5kTW9kZSk7XG5cdFx0XHRcdGlmIChja1BhaW50KSBjYW52YXMuZHJhd1ZlcnRpY2VzKHZlcnRpY2VzLCB0aGlzLmNrLkJsZW5kTW9kZS5Nb2R1bGF0ZSwgY2tQYWludCk7XG5cdFx0XHRcdHZlcnRpY2VzLmRlbGV0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjbGlwcGVyLmNsaXBFbmRXaXRoU2xvdChzbG90KTtcblx0XHR9XG5cdFx0Y2xpcHBlci5jbGlwRW5kKCk7XG5cdH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esotericsoftware/spine-canvaskit",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.89",
|
|
4
4
|
"description": "The official Spine Runtimes for CanvasKit for NodeJS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/esotericsoftware/spine-runtimes#readme",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@esotericsoftware/spine-core": "4.2.
|
|
34
|
+
"@esotericsoftware/spine-core": "4.2.89",
|
|
35
35
|
"canvaskit-wasm": "0.39.1"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|