dcl-npc-toolkit 1.5.2-20250415203310.commit-be60b9e → 1.5.2-20251229114921.commit-4a0a155

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/npc.js CHANGED
@@ -1,12 +1,13 @@
1
- import * as utils from '@dcl-sdk/utils';
2
- import { Animator, AvatarShape, engine, GltfContainer, MeshCollider, MeshRenderer, pointerEventsSystem, Transform } from '@dcl/sdk/ecs';
3
- import { Color3, Quaternion, Vector3 } from '@dcl/sdk/math';
1
+ import { Animator, AvatarShape, engine, GltfContainer, MeshCollider, MeshRenderer, pointerEventsSystem, Transform, TriggerArea, triggerAreaEventsSystem } from '@dcl/sdk/ecs';
2
+ import { Quaternion, Vector3 } from '@dcl/sdk/math';
4
3
  import { bubbles, closeBubble, createDialogBubble, openBubble } from './bubble';
5
4
  import { IsFollowingPath, TrackUserFlag } from './components';
6
5
  import { addDialog, closeDialog, findDialogByName, npcDialogComponent, openDialog } from './dialog';
7
6
  import { faceUserSystem, handleBubbletyping, handleDialogTyping, handlePathTimes, inputListenerSystem } from './systems';
8
7
  import { NPCPathType, NPCState, NPCType } from './types';
9
8
  import { darkTheme, lightTheme } from './ui';
9
+ import { debugTriggers, delayedFunction, clearDelayedFunction } from './utils/utils';
10
+ import { paths } from './utils/path';
10
11
  export const walkingTimers = new Map();
11
12
  export const npcDataComponent = new Map();
12
13
  export let NULL_NPC = 0;
@@ -24,7 +25,9 @@ const animTimers = new Map();
24
25
  const pointReachedCallbacks = new Map();
25
26
  const onFinishCallbacks = new Map();
26
27
  export function showDebug(debug) {
27
- utils.triggers.enableDebugDraw(debug);
28
+ if (debug) {
29
+ debugTriggers();
30
+ }
28
31
  }
29
32
  export function getData(npc) {
30
33
  return npcDataComponent.get(npc);
@@ -56,7 +59,8 @@ export function create(transform, data) {
56
59
  turnSpeed: data && data.turningSpeed ? data.turningSpeed : 2,
57
60
  theme: data.darkUI ? darkTheme : lightTheme,
58
61
  bubbleXOffset: data.bubbleXOffset ? data.bubbleXOffset : 0,
59
- bubbleYOffset: data.bubbleYOffset ? data.bubbleYOffset : 0
62
+ bubbleYOffset: data.bubbleYOffset ? data.bubbleYOffset : 0,
63
+ volume: data && data.volume ? data.volume : 0.5
60
64
  });
61
65
  if (data && data.noUI) {
62
66
  }
@@ -105,6 +109,84 @@ export function create(transform, data) {
105
109
  }
106
110
  return npc;
107
111
  }
112
+ export function createFromEntity(entity, data) {
113
+ const npc = entity;
114
+ const resolvedType = (data && data.type !== undefined ? data.type : NPCType.CUSTOM);
115
+ if (!Transform.has(npc)) {
116
+ console.log('createFromEntity: Provided entity is missing Transform component');
117
+ }
118
+ if (resolvedType === NPCType.CUSTOM && !GltfContainer.has(npc)) {
119
+ console.log('createFromEntity: Expected a GltfContainer on CUSTOM NPC entity');
120
+ }
121
+ npcDataComponent.set(npc, {
122
+ introduced: false,
123
+ inCooldown: false,
124
+ coolDownDuration: data && data.coolDownDuration ? data.coolDownDuration : 5,
125
+ faceUser: data && data.faceUser ? data.faceUser : undefined,
126
+ walkingSpeed: 2,
127
+ walkingAnim: data && data.walkingAnim ? data.walkingAnim : undefined,
128
+ pathData: data.pathData ? data.pathData : undefined,
129
+ currentPathData: [],
130
+ manualStop: false,
131
+ pathIndex: 0,
132
+ state: NPCState.STANDING,
133
+ idleAnim: data && data.idleAnim ? data.idleAnim : 'Idle',
134
+ bubbleHeight: data && data.textBubble && data.bubbleHeight ? data.bubbleHeight : undefined,
135
+ bubbleSound: data.dialogSound ? data.dialogSound : undefined,
136
+ hasBubble: data && data.textBubble ? true : false,
137
+ turnSpeed: data && data.turningSpeed ? data.turningSpeed : 2,
138
+ theme: data.darkUI ? darkTheme : lightTheme,
139
+ bubbleXOffset: data.bubbleXOffset ? data.bubbleXOffset : 0,
140
+ bubbleYOffset: data.bubbleYOffset ? data.bubbleYOffset : 0
141
+ });
142
+ if (data && data.noUI) {
143
+ }
144
+ else if (data && data.portrait) {
145
+ addDialog(npc, data && data.dialogSound ? data.dialogSound : undefined, typeof data.portrait === `string` ? { path: data.portrait } : data.portrait);
146
+ }
147
+ else {
148
+ addDialog(npc, data && data.dialogSound ? data.dialogSound : undefined);
149
+ }
150
+ if (data && data.textBubble) {
151
+ createDialogBubble(npc, npcDataComponent.get(npc).bubbleHeight);
152
+ }
153
+ onActivateCbs.set(npc, (other) => {
154
+ data.onActivate(other);
155
+ });
156
+ if (data && data.hasOwnProperty('onWalkAway')) {
157
+ onWalkAwayCbs.set(npc, (other) => {
158
+ if (!data || !data.continueOnWalkAway) {
159
+ if (npcDialogComponent.has(npc)) {
160
+ npcDialogComponent.get(npc).visible = false;
161
+ }
162
+ }
163
+ else {
164
+ if (npcDialogComponent.has(npc)) {
165
+ npcDialogComponent.get(npc).visible = false;
166
+ }
167
+ }
168
+ data.onWalkAway(other);
169
+ });
170
+ }
171
+ const dataWithType = { ...data, type: resolvedType };
172
+ seedAnimatorForExisting(npc, dataWithType);
173
+ addClickReactions(npc, dataWithType);
174
+ addTriggerArea(npc, dataWithType);
175
+ if (data && data.pathData && data.pathData.speed) {
176
+ let npcData = npcDataComponent.get(npc);
177
+ npcData.walkingSpeed = data.pathData.speed;
178
+ }
179
+ if (data && data.coolDownDuration) {
180
+ let npcData = npcDataComponent.get(npc);
181
+ npcData.coolDownDuration = data.coolDownDuration;
182
+ }
183
+ if (data && data.pathData) {
184
+ let npcData = npcDataComponent.get(npc);
185
+ npcData.pathData.loop = true;
186
+ followPath(npc, npcData.pathData);
187
+ }
188
+ return npc;
189
+ }
108
190
  function addNPCBones(npc, data) {
109
191
  const modelIsString = data && data.model && typeof data.model === `string`;
110
192
  const modelAvatarData = modelIsString
@@ -162,6 +244,42 @@ function addNPCBones(npc, data) {
162
244
  break;
163
245
  }
164
246
  }
247
+ function seedAnimatorForExisting(npc, data) {
248
+ if (data.type !== NPCType.CUSTOM)
249
+ return;
250
+ const idleClip = data && data.idleAnim ? data.idleAnim : 'Idle';
251
+ if (!Animator.has(npc)) {
252
+ Animator.create(npc, {
253
+ states: [
254
+ {
255
+ clip: idleClip,
256
+ loop: true
257
+ }
258
+ ]
259
+ });
260
+ }
261
+ else {
262
+ const animations = Animator.getMutable(npc);
263
+ if (animations.states.filter((animation) => animation.clip === idleClip).length === 0) {
264
+ animations.states.push({ clip: idleClip, loop: true });
265
+ }
266
+ }
267
+ let npcData = npcDataComponent.get(npc);
268
+ npcData.idleAnim = idleClip;
269
+ npcData.lastPlayedAnim = idleClip;
270
+ if (typeof idleClip === 'string' && idleClip.length > 0) {
271
+ Animator.playSingleAnimation(npc, idleClip);
272
+ }
273
+ if (data && data.walkingAnim) {
274
+ const animations = Animator.getMutable(npc);
275
+ if (typeof data.walkingAnim === 'string' && data.walkingAnim.length > 0 && animations.states.filter((animation) => animation.clip === data.walkingAnim).length === 0) {
276
+ animations.states.push({ clip: data.walkingAnim, loop: true });
277
+ }
278
+ if (typeof data.walkingAnim === 'string') {
279
+ npcData.walkingAnim = data.walkingAnim;
280
+ }
281
+ }
282
+ }
165
283
  function addClickReactions(npc, data) {
166
284
  let activateButton = data && data.onlyClickTrigger ? 0 : 1;
167
285
  pointerEventsSystem.onPointerDown(npc, function () {
@@ -170,7 +288,7 @@ function addClickReactions(npc, data) {
170
288
  activate(npc, engine.PlayerEntity);
171
289
  }, {
172
290
  button: activateButton,
173
- hoverText: data && data.hoverText ? data.hoverText : 'Talk',
291
+ hoverText: data && data.hoverText ? String(data.hoverText) : 'Talk',
174
292
  showFeedback: data && data.onlyExternalTrigger ? false : true
175
293
  });
176
294
  if (data && data.onlyExternalTrigger) {
@@ -209,13 +327,31 @@ function addTriggerArea(npc, data) {
209
327
  };
210
328
  }
211
329
  if (triggerData.onCameraEnter || triggerData.onCameraExit) {
212
- utils.triggers.addTrigger(npc, triggerData.layer != undefined ? triggerData.layer : utils.NO_LAYERS, triggerData.triggeredByLayer != undefined ? triggerData.triggeredByLayer : utils.LAYER_1, [{ type: 'sphere', position: Vector3.Zero(), radius: data.reactDistance != undefined ? data.reactDistance : 6 }], (other) => {
213
- if (triggerData.onCameraEnter)
214
- triggerData.onCameraEnter(other);
215
- }, (other) => {
216
- if (triggerData.onCameraExit)
217
- triggerData.onCameraExit(other);
218
- }, Color3.Red());
330
+ let sphereScale = {
331
+ x: data.reactDistance != undefined ? data.reactDistance : 6,
332
+ y: data.reactDistance != undefined ? data.reactDistance : 6,
333
+ z: data.reactDistance != undefined ? data.reactDistance : 6
334
+ };
335
+ let triggerSphere = engine.addEntity();
336
+ Transform.create(triggerSphere, {
337
+ position: Vector3.Zero(),
338
+ rotation: Quaternion.Zero(),
339
+ scale: sphereScale,
340
+ parent: npc
341
+ });
342
+ TriggerArea.setSphere(triggerSphere);
343
+ triggerAreaEventsSystem.onTriggerEnter(triggerSphere, function (result) {
344
+ if (triggerData.onCameraEnter) {
345
+ const entity = (result?.trigger?.entity ?? engine.PlayerEntity);
346
+ triggerData.onCameraEnter(entity);
347
+ }
348
+ });
349
+ triggerAreaEventsSystem.onTriggerExit(triggerSphere, function (result) {
350
+ if (triggerData.onCameraExit) {
351
+ const entity = (result?.trigger?.entity ?? engine.PlayerEntity);
352
+ triggerData.onCameraExit(entity);
353
+ }
354
+ });
219
355
  }
220
356
  }
221
357
  export function followPath(npc, data) {
@@ -286,14 +422,14 @@ function walkNPC(npc, npcData, type, duration, path, pointReachedCallback, finis
286
422
  IsFollowingPath.create(npc);
287
423
  if (type) {
288
424
  if (type == NPCPathType.RIGID_PATH) {
289
- utils.paths.startStraightPath(npc, path, duration, true, () => {
425
+ paths.startStraightPath(npc, path, duration, true, () => {
290
426
  finishedCallback();
291
427
  }, () => {
292
428
  pointReachedCallback();
293
429
  });
294
430
  }
295
431
  else {
296
- utils.paths.startSmoothPath(npc, path, duration, 30, true, () => {
432
+ paths.startSmoothPath(npc, path, duration, 30, true, () => {
297
433
  finishedCallback();
298
434
  }, () => {
299
435
  pointReachedCallback();
@@ -301,7 +437,7 @@ function walkNPC(npc, npcData, type, duration, path, pointReachedCallback, finis
301
437
  }
302
438
  }
303
439
  else {
304
- utils.paths.startSmoothPath(npc, path, duration, 20, true, () => {
440
+ paths.startSmoothPath(npc, path, duration, 20, true, () => {
305
441
  finishedCallback();
306
442
  }, () => {
307
443
  pointReachedCallback();
@@ -321,7 +457,7 @@ export function stopWalking(npc, duration, finished) {
321
457
  npcData.manualStop = true;
322
458
  stopPath(npc);
323
459
  if (duration) {
324
- utils.timers.setTimeout(() => {
460
+ delayedFunction(() => {
325
461
  if (npcData.path) {
326
462
  Animator.stopAllAnimations(npc, true);
327
463
  if (npcDataComponent.get(npc).walkingAnim) {
@@ -348,7 +484,7 @@ export function stopWalking(npc, duration, finished) {
348
484
  }
349
485
  }
350
486
  export function stopPath(npc) {
351
- utils.paths.stopPath(npc);
487
+ paths.stopPath(npc);
352
488
  IsFollowingPath.deleteFrom(npc);
353
489
  let npcData = npcDataComponent.get(npc);
354
490
  if (npcData.walkingAnim) {
@@ -395,11 +531,12 @@ export function activate(npc, other) {
395
531
  }
396
532
  isCooldown.set(npc, true);
397
533
  npcData.inCooldown = true;
398
- utils.timers.setTimeout(function () {
534
+ delayedFunction(() => {
399
535
  isCooldown.delete(npc);
400
536
  npcDataComponent.get(npc).inCooldown = false;
537
+ console.log("cooldown deleted");
401
538
  }, 1000 * npcData.coolDownDuration);
402
- console.log('activated npc,', npcDataComponent.get(npc));
539
+ console.log('activated npc,', npcDataComponent.get(npc), "cooldown duration: ", npcData.coolDownDuration);
403
540
  }
404
541
  function endInteraction(npc) {
405
542
  let npcData = npcDataComponent.get(npc);
@@ -436,7 +573,7 @@ export function playAnimation(npc, anim, noLoop, duration) {
436
573
  animations.states.push({ clip: anim, loop: noLoop ? false : true });
437
574
  }
438
575
  if (npcData.state == NPCState.FOLLOWPATH) {
439
- utils.paths.stopPath(npc);
576
+ paths.stopPath(npc);
440
577
  }
441
578
  clearAnimationTimer(npc);
442
579
  Animator.stopAllAnimations(npc, true);
@@ -444,7 +581,7 @@ export function playAnimation(npc, anim, noLoop, duration) {
444
581
  if (duration) {
445
582
  console.log('have a duration to play animation');
446
583
  clearAnimationTimer(npc);
447
- animTimers.set(npc, utils.timers.setTimeout(() => {
584
+ animTimers.set(npc, delayedFunction(() => {
448
585
  clearAnimationTimer(npc);
449
586
  Animator.stopAllAnimations(npc, true);
450
587
  if (npcData.idleAnim) {
@@ -499,10 +636,10 @@ export function closeDialogWindow(window) {
499
636
  }
500
637
  function clearAnimationTimer(npc) {
501
638
  if (animTimers.has(npc)) {
502
- utils.timers.clearTimeout(animTimers.get(npc));
639
+ clearDelayedFunction(animTimers.get(npc));
503
640
  animTimers.delete(npc);
504
641
  return true;
505
642
  }
506
643
  return false;
507
644
  }
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25wYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFFTixhQUFhLEVBRWIsWUFBWSxFQUNaLFlBQVksRUFHWixtQkFBbUIsRUFDbkIsU0FBUyxFQUdWLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3hILE9BQU8sRUFBOEMsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQWUsTUFBTSxTQUFTLENBQUE7QUFDakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFNUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQzNELE1BQU0sQ0FBQyxJQUFJLFFBQVEsR0FBVyxDQUFXLENBQUE7QUFDekMsTUFBTSxDQUFDLElBQUksU0FBUyxHQUFXLFFBQVEs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YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDaEMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYztJQUM5QyxJQUFJLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBVztJQUN0QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBVyxDQUFDLENBQUE7UUFDeEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAZGNsLXNkay91dGlscydcbmltcG9ydCB7XG4gIEFuaW1hdG9yLFxuICBBdmF0YXJTaGFwZSxcbiAgZW5naW5lLFxuICBFbnRpdHksXG4gIEdsdGZDb250YWluZXIsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIE1lc2hSZW5kZXJlcixcbiAgUEJBdmF0YXJTaGFwZSxcbiAgUEJHbHRmQ29udGFpbmVyLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICBUcmFuc2Zvcm0sXG4gIFRyYW5zZm9ybVR5cGUsXG4gIFBCQW5pbWF0aW9uU3RhdGVcbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgQ29sb3IzLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IGJ1YmJsZXMsIGNsb3NlQnViYmxlLCBjcmVhdGVEaWFsb2dCdWJibGUsIG9wZW5CdWJibGUgfSBmcm9tICcuL2J1YmJsZSdcbmltcG9ydCB7IElzRm9sbG93aW5nUGF0aCwgVHJhY2tVc2VyRmxhZyB9IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IGFkZERpYWxvZywgY2xvc2VEaWFsb2csIGZpbmREaWFsb2dCeU5hbWUsIG5wY0RpYWxvZ0NvbXBvbmVudCwgb3BlbkRpYWxvZyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgZmFjZVVzZXJTeXN0ZW0sIGhhbmRsZUJ1YmJsZXR5cGluZywgaGFuZGxlRGlhbG9nVHlwaW5nLCBoYW5kbGVQYXRoVGltZXMsIGlucHV0TGlzdGVuZXJTeXN0ZW0gfSBmcm9tICcuL3N5c3RlbXMnXG5pbXBvcnQgeyBEaWFsb2csIEZvbGxvd1BhdGhEYXRhLCBJbWFnZURhdGEsIE5QQ0RhdGEsIE5QQ1BhdGhUeXBlLCBOUENTdGF0ZSwgTlBDVHlwZSwgVHJpZ2dlckRhdGEgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgZGFya1RoZW1lLCBsaWdodFRoZW1lIH0gZnJvbSAnLi91aSdcblxuZXhwb3J0IGNvbnN0IHdhbGtpbmdUaW1lcnM6IE1hcDxFbnRpdHksIG51bWJlcj4gPSBuZXcgTWFwKClcbmV4cG9ydCBjb25zdCBucGNEYXRhQ29tcG9uZW50OiBNYXA8RW50aXR5LCBhbnk+ID0gbmV3IE1hcCgpXG5leHBvcnQgbGV0IE5VTExfTlBDOiBFbnRpdHkgPSAwIGFzIEVudGl0eVxuZXhwb3J0IGxldCBhY3RpdmVOUEM6IEVudGl0eSA9IE5VTExfTlBDXG5leHBvcnQgbGV0IGJsYW5rRGlhbG9nOiBudW1iZXIgPSAwXG5cbmVuZ2luZS5hZGRTeXN0ZW0oaGFuZGxlUGF0aFRpbWVzKVxuZW5naW5lLmFkZFN5c3RlbShoYW5kbGVEaWFsb2dUeXBpbmcpXG5lbmdpbmUuYWRkU3lzdGVtKGhhbmRsZUJ1YmJsZXR5cGluZylcbmVuZ2luZS5hZGRTeXN0ZW0oZmFjZVVzZXJTeXN0ZW0pXG5lbmdpbmUuYWRkU3lzdGVtKGlucHV0TGlzdGVuZXJTeXN0ZW0pXG5cbi8vVE9ETyBNQUtFIGlzQ29vbGRvd24gYW5kIG5vIGxvbmdlciBoYXZlIHRvIHRyYWNrIHdpdGggbWFwIHRvIHJlbW92ZSBtZW1vcnkgbGVhayBpc3N1ZXNcbmNvbnN0IGlzQ29vbGRvd246IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uQWN0aXZhdGVDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uV2Fsa0F3YXlDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IGFuaW1UaW1lcnM6IE1hcDxFbnRpdHksIG51bWJlcj4gPSBuZXcgTWFwKClcbmNvbnN0IHBvaW50UmVhY2hlZENhbGxiYWNrczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuY29uc3Qgb25GaW5pc2hDYWxsYmFja3M6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dEZWJ1ZyhkZWJ1ZzogYm9vbGVhbikge1xuICB1dGlscy50cmlnZ2Vycy5lbmFibGVEZWJ1Z0RyYXcoZGVidWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhKG5wYzogRW50aXR5KSB7XG4gIHJldHVybiBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUodHJhbnNmb3JtOiBhbnksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgbGV0IG5wYyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gIGxldCB0OiBUcmFuc2Zvcm1UeXBlID0ge1xuICAgIHBvc2l0aW9uOiB0cmFuc2Zvcm0ucG9zaXRpb24gPyB0cmFuc2Zvcm0ucG9zaXRpb24gOiBWZWN0b3IzLmNyZWF0ZSgwLCAwLCAwKSxcbiAgICByb3RhdGlvbjogdHJhbnNmb3JtLnJvdGF0aW9uID8gdHJhbnNmb3JtLnJvdGF0aW9uIDogUXVhdGVybmlvbi5aZXJvKCksXG4gICAgc2NhbGU6IHRyYW5zZm9ybS5zY2FsZSA/IHRyYW5zZm9ybS5zY2FsZSA6IFZlY3RvcjMuT25lKClcbiAgfVxuICBUcmFuc2Zvcm0uY3JlYXRlKG5wYywgdClcblxuICBucGNEYXRhQ29tcG9uZW50LnNldChucGMsIHtcbiAgICBpbnRyb2R1Y2VkOiBmYWxzZSxcbiAgICBpbkNvb2xkb3duOiBmYWxzZSxcbiAgICBjb29sRG93bkR1cmF0aW9uOiBkYXRhICYmIGRhdGEuY29vbERvd25EdXJhdGlvbiA/IGRhdGEuY29vbERvd25EdXJhdGlvbiA6IDUsXG4gICAgZmFjZVVzZXI6IGRhdGEgJiYgZGF0YS5mYWNlVXNlciA/IGRhdGEuZmFjZVVzZXIgOiB1bmRlZmluZWQsXG4gICAgd2Fsa2luZ1NwZWVkOiAyLFxuICAgIHdhbGtpbmdBbmltOiBkYXRhICYmIGRhdGEud2Fsa2luZ0FuaW0gPyBkYXRhLndhbGtpbmdBbmltIDogdW5kZWZpbmVkLFxuICAgIHBhdGhEYXRhOiBkYXRhLnBhdGhEYXRhID8gZGF0YS5wYXRoRGF0YSA6IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGF0aERhdGE6IFtdLFxuICAgIG1hbnVhbFN0b3A6IGZhbHNlLFxuICAgIHBhdGhJbmRleDogMCxcbiAgICBzdGF0ZTogTlBDU3RhdGUuU1RBTkRJTkcsXG4gICAgaWRsZUFuaW06IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZScsXG4gICAgYnViYmxlSGVpZ2h0OiBkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSAmJiBkYXRhLmJ1YmJsZUhlaWdodCA/IGRhdGEuYnViYmxlSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgIGJ1YmJsZVNvdW5kOiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZCxcbiAgICBoYXNCdWJibGU6IGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHR1cm5TcGVlZDogZGF0YSAmJiBkYXRhLnR1cm5pbmdTcGVlZCA/IGRhdGEudHVybmluZ1NwZWVkIDogMixcbiAgICB0aGVtZTogZGF0YS5kYXJrVUkgPyBkYXJrVGhlbWUgOiBsaWdodFRoZW1lLFxuICAgIGJ1YmJsZVhPZmZzZXQ6IGRhdGEuYnViYmxlWE9mZnNldCA/IGRhdGEuYnViYmxlWE9mZnNldCA6IDAsXG4gICAgYnViYmxlWU9mZnNldDogZGF0YS5idWJibGVZT2Zmc2V0ID8gZGF0YS5idWJibGVZT2Zmc2V0IDogMFxuICB9KVxuXG4gIGlmIChkYXRhICYmIGRhdGEubm9VSSkge1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5wb3J0cmFpdCkge1xuICAgIGFkZERpYWxvZyhcbiAgICAgIG5wYyxcbiAgICAgIGRhdGEgJiYgZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlb2YgZGF0YS5wb3J0cmFpdCA9PT0gYHN0cmluZ2AgPyB7IHBhdGg6IGRhdGEucG9ydHJhaXQgfSA6IGRhdGEucG9ydHJhaXRcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgYWRkRGlhbG9nKG5wYywgZGF0YSAmJiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSkge1xuICAgIGNyZWF0ZURpYWxvZ0J1YmJsZShucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuYnViYmxlSGVpZ2h0KVxuICB9XG5cbiAgb25BY3RpdmF0ZUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgIGRhdGEub25BY3RpdmF0ZShvdGhlcilcbiAgfSlcblxuICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KCdvbldhbGtBd2F5JykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuY29udGludWVPbldhbGtBd2F5KSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGEub25XYWxrQXdheSEob3RoZXIpXG4gICAgfSlcbiAgfVxuXG4gIGFkZE5QQ0JvbmVzKG5wYywgZGF0YSlcbiAgYWRkQ2xpY2tSZWFjdGlvbnMobnBjLCBkYXRhKVxuICBhZGRUcmlnZ2VyQXJlYShucGMsIGRhdGEpXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5wYXRoRGF0YSAmJiBkYXRhLnBhdGhEYXRhLnNwZWVkKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS53YWxraW5nU3BlZWQgPSBkYXRhLnBhdGhEYXRhLnNwZWVkXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLmNvb2xEb3duRHVyYXRpb24pIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24gPSBkYXRhLmNvb2xEb3duRHVyYXRpb25cbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEpIHtcbiAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICBucGNEYXRhLnBhdGhEYXRhLmxvb3AgPSB0cnVlXG4gICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gIH1cblxuICByZXR1cm4gbnBjXG59XG5cbmZ1bmN0aW9uIGFkZE5QQ0JvbmVzKG5wYzogRW50aXR5LCBkYXRhOiBOUENEYXRhKSB7XG4gIGNvbnN0IG1vZGVsSXNTdHJpbmcgPSBkYXRhICYmIGRhdGEubW9kZWwgJiYgdHlwZW9mIGRhdGEubW9kZWwgPT09IGBzdHJpbmdgXG4gIGNvbnN0IG1vZGVsQXZhdGFyRGF0YTogUEJBdmF0YXJTaGFwZSB8IHVuZGVmaW5lZCA9IG1vZGVsSXNTdHJpbmdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogZGF0YS5tb2RlbCAmJiAoZGF0YS5tb2RlbCBhcyBhbnkpLmJvZHlTaGFwZVxuICAgICAgPyAoZGF0YS5tb2RlbCBhcyBQQkF2YXRhclNoYXBlKVxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbW9kZWxHTFRGRGF0YTogUEJHbHRmQ29udGFpbmVyIHwgdW5kZWZpbmVkID0gbW9kZWxJc1N0cmluZ1xuICAgID8gdW5kZWZpbmVkXG4gICAgOiBkYXRhLm1vZGVsICYmIChkYXRhLm1vZGVsIGFzIGFueSkuc3JjXG4gICAgICA/IChkYXRhLm1vZGVsIGFzIFBCR2x0ZkNvbnRhaW5lcilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICBjYXNlIE5QQ1R5cGUuQVZBVEFSOlxuICAgICAgQXZhdGFyU2hhcGUuY3JlYXRlKFxuICAgICAgICBucGMsXG4gICAgICAgICFkYXRhIHx8ICFkYXRhLm1vZGVsIHx8ICFtb2RlbEF2YXRhckRhdGFcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGlkOiAnbnBjJyxcbiAgICAgICAgICAgIG5hbWU6ICdOUEMnLFxuICAgICAgICAgICAgYm9keVNoYXBlOiAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VNYWxlJyxcbiAgICAgICAgICAgIGVtb3RlczogW10sXG4gICAgICAgICAgICB3ZWFyYWJsZXM6IFtcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZXNfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfZXllYnJvd3NfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfbW91dGhfMDAnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmNvbWZ5X3Nwb3J0X3NhbmRhbHMnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnNvY2Nlcl9wYW50cycsXG4gICAgICAgICAgICAgICd1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6ZWxlZ2FudF9zd2VhdGVyJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG1vZGVsQXZhdGFyRGF0YVxuICAgICAgKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgTlBDVHlwZS5DVVNUT006XG4gICAgICBHbHRmQ29udGFpbmVyLmNyZWF0ZShcbiAgICAgICAgbnBjLFxuICAgICAgICBtb2RlbElzU3RyaW5nICYmIHR5cGVvZiBkYXRhLm1vZGVsID09PSBgc3RyaW5nYCA/IHsgc3JjOiBkYXRhICYmIGRhdGEubW9kZWwgPyBkYXRhLm1vZGVsIDogJycgfSA6IG1vZGVsR0xURkRhdGFcbiAgICAgIClcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShucGMsIHtcbiAgICAgICAgc3RhdGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpcDogZGF0YSAmJiBkYXRhLmlkbGVBbmltID8gZGF0YS5pZGxlQW5pbSA6ICdJZGxlJyxcbiAgICAgICAgICAgIGxvb3A6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgICAgbnBjRGF0YS5pZGxlQW5pbSA9IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZSdcbiAgICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltXG5cbiAgICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLndhbGtpbmdBbmltKSB7XG4gICAgICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0gPSBkYXRhLndhbGtpbmdBbmltXG4gICAgICAgIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gICAgICAgIGFuaW1hdGlvbnMuc3RhdGVzLnB1c2goeyBjbGlwOiBkYXRhLndhbGtpbmdBbmltLCBsb29wOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIE5QQ1R5cGUuQkxBTks6XG4gICAgICBNZXNoUmVuZGVyZXIuc2V0Qm94KG5wYylcbiAgICAgIE1lc2hDb2xsaWRlci5zZXRCb3gobnBjKVxuICAgICAgYnJlYWtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGlja1JlYWN0aW9ucyhucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBsZXQgYWN0aXZhdGVCdXR0b24gPSBkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlciA/IElucHV0QWN0aW9uLklBX1BPSU5URVIgOiBJbnB1dEFjdGlvbi5JQV9QUklNQVJZXG5cbiAgLypcbiAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgICAge1xuICAgICAgICAgIGVudGl0eTogbnBjLFxuICAgICAgICAgIG9wdHM6IHtcbiAgICAgICAgICAgICAgYnV0dG9uOiBhY3RpdmF0ZUJ1dHRvbixcbiAgICAgICAgICAgICAgaG92ZXJUZXh0OiBkYXRhICYmIGRhdGEuaG92ZXJUZXh0ID8gZGF0YS5ob3ZlclRleHQgOiAnVGFsaycsXG4gICAgICAgICAgICAgIHNob3dGZWVkYmFjazogZGF0YSAmJiBkYXRhLm9ubHlFeHRlcm5hbFRyaWdnZXIgPyBmYWxzZSA6IHRydWVcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmIChpc0Nvb2xkb3duLmhhcyhucGMpIHx8IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSByZXR1cm5cbiAgICAgICAgICBhY3RpdmF0ZShucGMsIGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgICB9LFxuICApXG4gICovXG5cbiAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgIG5wYyxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSB8fCBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSkgcmV0dXJuXG4gICAgICBhY3RpdmF0ZShucGMsIGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgfSxcbiAgICB7XG4gICAgICBidXR0b246IGFjdGl2YXRlQnV0dG9uLFxuICAgICAgaG92ZXJUZXh0OiBkYXRhICYmIGRhdGEuaG92ZXJUZXh0ID8gZGF0YS5ob3ZlclRleHQgOiAnVGFsaycsXG4gICAgICBzaG93RmVlZGJhY2s6IGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuICApXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB7XG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5yZW1vdmVPblBvaW50ZXJEb3duKG5wYylcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmlnZ2VyQXJlYShucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBsZXQgdHJpZ2dlckRhdGE6IFRyaWdnZXJEYXRhID0ge31cblxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICBvbkFjdGl2YXRlQ2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykgJiYgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUpIHx8XG4gICAgICAgIChkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlcikgfHxcbiAgICAgICAgKGRhdGEgJiYgZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZGF0YS5vbkFjdGl2YXRlKG90aGVyKVxuICAgIH0pXG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciA9IG9uQWN0aXZhdGVDYnMuZ2V0KG5wYylcbiAgfVxuXG4gIC8vIHdoZW4gZXhpdGluZyB0cmlnZ2VyXG4gIGlmICghZGF0YSB8fCAoZGF0YSAmJiAhZGF0YS5jb250aW51ZU9uV2Fsa0F3YXkpKSB7XG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0ID0gKG90aGVyKSA9PiB7XG4gICAgICBoYW5kbGVXYWxrQXdheShucGMsIG90aGVyKVxuICAgIH1cbiAgfVxuXG4gIC8vIHdoZW4gZW50ZXJpbmcgdHJpZ2dlclxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEub25seUV4dGVybmFsVHJpZ2dlciAmJiAhZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyICYmICFkYXRhLm9ubHlFVHJpZ2dlcikpIHtcbiAgICB0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyID0gKG90aGVyKSA9PiB7XG4gICAgICBpZiAoaXNDb29sZG93bi5oYXMobnBjKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhucGMsICcgaW4gY29vbGRvd24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKFxuICAgICAgLy8gICAgICh0aGlzLmRpYWxvZyAmJiB0aGlzLmRpYWxvZy5pc0RpYWxvZ09wZW4pIHx8XG4gICAgICAvLyAgICAgKGRhdGEgJiYgZGF0YS5vbmx5RXh0ZXJuYWxUcmlnZ2VyKSB8fFxuICAgICAgLy8gICAgIChkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlcilcbiAgICAgIC8vICkge1xuICAgICAgLy8gICAgIHJldHVyblxuICAgICAgLy8gfVxuICAgICAgYWN0aXZhdGUobnBjLCBvdGhlcilcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgdHJpZ2dlclxuICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciB8fCB0cmlnZ2VyRGF0YS5vbkNhbWVyYUV4aXQpIHtcbiAgICB1dGlscy50cmlnZ2Vycy5hZGRUcmlnZ2VyKFxuICAgICAgbnBjLFxuICAgICAgdHJpZ2dlckRhdGEubGF5ZXIgIT0gdW5kZWZpbmVkID8gdHJpZ2dlckRhdGEubGF5ZXIgOiB1dGlscy5OT19MQVlFUlMsXG4gICAgICB0cmlnZ2VyRGF0YS50cmlnZ2VyZWRCeUxheWVyICE9IHVuZGVmaW5lZCA/IHRyaWdnZXJEYXRhLnRyaWdnZXJlZEJ5TGF5ZXIgOiB1dGlscy5MQVlFUl8xLFxuICAgICAgW3sgdHlwZTogJ3NwaGVyZScsIHBvc2l0aW9uOiBWZWN0b3IzLlplcm8oKSwgcmFkaXVzOiBkYXRhLnJlYWN0RGlzdGFuY2UgIT0gdW5kZWZpbmVkID8gZGF0YS5yZWFjdERpc3RhbmNlIDogNiB9XSxcbiAgICAgIChvdGhlcikgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFbnRlcikgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlcihvdGhlcilcbiAgICAgIH0sXG4gICAgICAob3RoZXIpID0+IHtcbiAgICAgICAgaWYgKHRyaWdnZXJEYXRhLm9uQ2FtZXJhRXhpdCkgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0KG90aGVyKVxuICAgICAgfSxcbiAgICAgIENvbG9yMy5SZWQoKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9sbG93UGF0aChucGM6IEVudGl0eSwgZGF0YT86IEZvbGxvd1BhdGhEYXRhKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBsZXQgcGF0aDogYW55W10gPSBbXVxuXG4gIGlmIChucGNEYXRhLmZhY2VVc2VyKSB7XG4gICAgaWYgKFRyYWNrVXNlckZsYWcuaGFzKG5wYykpIHtcbiAgICAgIFRyYWNrVXNlckZsYWcuZGVsZXRlRnJvbShucGMpXG4gICAgfVxuICB9XG5cbiAgaWYgKG5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgIGxldCBkdXJhdGlvbiA9IG5wY0RhdGEucGF0aERhdGEudG90YWxEdXJhdGlvblxuICAgIGxldCBjdXJyZW50VGltZXI6IG51bWJlciA9IHdhbGtpbmdUaW1lcnMuZ2V0KG5wYykhXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnQgdGltZSBpcycsIGN1cnJlbnRUaW1lcilcbiAgICBpZiAoY3VycmVudFRpbWVyKSB7XG4gICAgICBkdXJhdGlvbiAtPSBjdXJyZW50VGltZXJcbiAgICB9XG5cbiAgICBsZXQgcGF0aDogYW55W10gPSBbXVxuICAgIG5wY0RhdGEucGF0aERhdGEucGF0aC5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgIHBhdGgucHVzaChwKVxuICAgIH0pXG4gICAgcGF0aC5zcGxpY2UoMCwgbnBjRGF0YS5wYXRoSW5kZXgpXG5cbiAgICBsZXQgcG9zID0gVHJhbnNmb3JtLmdldChucGMpLnBvc2l0aW9uXG4gICAgcGF0aC51bnNoaWZ0KFZlY3RvcjMuY3JlYXRlKHBvcy54LCBwb3MueSwgcG9zLnopKVxuICAgIHdhbGtOUEMoXG4gICAgICBucGMsXG4gICAgICBucGNEYXRhLFxuICAgICAgbnBjRGF0YS5wYXRoRGF0YS5wYXRoVHlwZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgcGF0aCxcbiAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5nZXQobnBjKSxcbiAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBucGNEYXRhLnBhdGhEYXRhID0gZGF0YVxuXG4gICAgICBpZiAoZGF0YS5zdGFydGluZ1BvaW50KSB7XG4gICAgICAgIGRhdGEucGF0aD8uc3BsaWNlKDAsIGRhdGEuc3RhcnRpbmdQb2ludCAtIDEpXG4gICAgICB9XG5cbiAgICAgIGxldCBwb3MgPSBUcmFuc2Zvcm0uZ2V0KG5wYykucG9zaXRpb25cbiAgICAgIHBhdGgucHVzaChWZWN0b3IzLmNyZWF0ZShwb3MueCwgcG9zLnksIHBvcy56KSlcbiAgICAgIGRhdGEucGF0aD8uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBwYXRoLnB1c2gocClcbiAgICAgIH0pXG5cbiAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLnNldChucGMsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ29uIGZpbmlzaGVkIGNhbGxiYWNrJylcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5vbkZpbmlzaENhbGxiYWNrICYmICFkYXRhLmxvb3ApIHtcbiAgICAgICAgICBkYXRhLm9uRmluaXNoQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICAgIHN0b3BQYXRoKG5wYylcbiAgICAgIH0pXG5cbiAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5zZXQobnBjLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBwb2ludCByZWFjaGVkIGNhbGxiYWNrJylcbiAgICAgICAgbGV0IGRhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgICAgIGRhdGEucGF0aEluZGV4ICs9IDFcbiAgICAgICAgZGF0YS5vblJlYWNoZWRQb2ludENhbGxiYWNrID8gZGF0YS5vblJlYWNoZWRQb2ludENhbGxiYWNrIDogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgd2Fsa05QQyhcbiAgICAgICAgbnBjLFxuICAgICAgICBucGNEYXRhLFxuICAgICAgICBkYXRhLnBhdGhUeXBlISxcbiAgICAgICAgZGF0YS50b3RhbER1cmF0aW9uLFxuICAgICAgICBwYXRoLFxuICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFja3MuZ2V0KG5wYyksXG4gICAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChucGNEYXRhLm1hbnVhbFN0b3ApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3dlIGhhdmUgbWFudWFsIHN0b3AsIG5lZWQgdG8gcGljayBiYWNrIHVwIHdoZXJlIHdlIGxlZnQgb2ZmJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3ZSBhcmUgdHJ5aW5nIHRvIGZvbGxvdyBhIHBhdGggd2l0b3V0IHN0YXJ0aW5nIG9uZSBwcmlvcicpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhbGtOUEMoXG4gIG5wYzogRW50aXR5LFxuICBucGNEYXRhOiBhbnksXG4gIHR5cGU6IE5QQ1BhdGhUeXBlLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBwYXRoOiBWZWN0b3IzW10sXG4gIHBvaW50UmVhY2hlZENhbGxiYWNrPzogYW55LFxuICBmaW5pc2hlZENhbGxiYWNrPzogYW55XG4pIHtcbiAgaWYgKElzRm9sbG93aW5nUGF0aC5oYXMobnBjKSkge1xuICAgIElzRm9sbG93aW5nUGF0aC5kZWxldGVGcm9tKG5wYylcbiAgICB3YWxraW5nVGltZXJzLmRlbGV0ZShucGMpXG4gIH1cbiAgSXNGb2xsb3dpbmdQYXRoLmNyZWF0ZShucGMpXG5cbiAgaWYgKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBOUENQYXRoVHlwZS5SSUdJRF9QQVRIKSB7XG4gICAgICB1dGlscy5wYXRocy5zdGFydFN0cmFpZ2h0UGF0aChcbiAgICAgICAgbnBjLFxuICAgICAgICBwYXRoLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2soKVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWxzLnBhdGhzLnN0YXJ0U21vb3RoUGF0aChcbiAgICAgICAgbnBjLFxuICAgICAgICBwYXRoLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgMzAsXG4gICAgICAgIHRydWUsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmaW5pc2hlZENhbGxiYWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB1dGlscy5wYXRocy5zdGFydFNtb290aFBhdGgoXG4gICAgICBucGMsXG4gICAgICBwYXRoLFxuICAgICAgZHVyYXRpb24sXG4gICAgICAyMCxcbiAgICAgIHRydWUsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGZpbmlzaGVkQ2FsbGJhY2soKVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2soKVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIGlmIChucGNEYXRhLndhbGtpbmdBbmltKSB7XG4gICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0sIHRydWUpXG4gICAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW1cbiAgfVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuRk9MTE9XUEFUSFxuICBucGNEYXRhLm1hbnVhbFN0b3AgPSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFdhbGtpbmcobnBjOiBFbnRpdHksIGR1cmF0aW9uPzogbnVtYmVyLCBmaW5pc2hlZD86IGJvb2xlYW4pIHtcbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIG5wY0RhdGEuc3RhdGUgPSBOUENTdGF0ZS5TVEFORElOR1xuICBucGNEYXRhLm1hbnVhbFN0b3AgPSB0cnVlXG5cbiAgc3RvcFBhdGgobnBjKVxuXG4gIGlmIChkdXJhdGlvbikge1xuICAgIHV0aWxzLnRpbWVycy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vaWYgKHRoaXMuZGlhbG9nICYmIHRoaXMuZGlhbG9nLmlzRGlhbG9nT3BlbikgcmV0dXJuXG4gICAgICBpZiAobnBjRGF0YS5wYXRoKSB7XG4gICAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKG5wYywgdHJ1ZSlcbiAgICAgICAgaWYgKG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykud2Fsa2luZ0FuaW0pIHtcbiAgICAgICAgICBjbGVhckFuaW1hdGlvblRpbWVyKG5wYylcbiAgICAgICAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbSwgdHJ1ZSlcbiAgICAgICAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbVxuICAgICAgICB9XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IG5wY0RhdGEucGF0aERhdGEudG90YWxEdXJhdGlvblxuICAgICAgICBsZXQgY3VycmVudFRpbWVyOiBudW1iZXIgPSB3YWxraW5nVGltZXJzLmdldChucGMpIVxuICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudCB0aW1lIGlzJywgY3VycmVudFRpbWVyKVxuICAgICAgICBpZiAoY3VycmVudFRpbWVyKSB7XG4gICAgICAgICAgZHVyYXRpb24gLT0gY3VycmVudFRpbWVyXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGF0aDogYW55W10gPSBbXVxuICAgICAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGguZm9yRWFjaCgocDogYW55KSA9PiB7XG4gICAgICAgICAgcGF0aC5wdXNoKHApXG4gICAgICAgIH0pXG4gICAgICAgIHBhdGguc3BsaWNlKDAsIG5wY0RhdGEucGF0aEluZGV4KVxuXG4gICAgICAgIGxldCBwb3MgPSBUcmFuc2Zvcm0uZ2V0KG5wYykucG9zaXRpb25cbiAgICAgICAgcGF0aC51bnNoaWZ0KFZlY3RvcjMuY3JlYXRlKHBvcy54LCBwb3MueSwgcG9zLnopKVxuXG4gICAgICAgIC8vbnBjRGF0YS5tYW51YWxTdG9wID0gZmFsc2VcbiAgICAgICAgd2Fsa05QQyhcbiAgICAgICAgICBucGMsXG4gICAgICAgICAgbnBjRGF0YSxcbiAgICAgICAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGhUeXBlLFxuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2tzLmdldChucGMpLFxuICAgICAgICAgIG9uRmluaXNoQ2FsbGJhY2tzLmdldChucGMpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbiAqIDEwMDApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQYXRoKG5wYzogRW50aXR5KSB7XG4gIHV0aWxzLnBhdGhzLnN0b3BQYXRoKG5wYylcbiAgSXNGb2xsb3dpbmdQYXRoLmRlbGV0ZUZyb20obnBjKVxuXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS53YWxraW5nQW5pbSkge1xuICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmlkbGVBbmltKVxuICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhLmlkbGVBbmltXG4gIH1cblxuICBpZiAoIW5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgIGlmIChucGNEYXRhLnBhdGhEYXRhLmxvb3ApIHtcbiAgICAgIG5wY0RhdGEucGF0aEluZGV4ID0gMFxuICAgICAgd2Fsa2luZ1RpbWVycy5kZWxldGUobnBjKVxuICAgICAgY29uc29sZS5sb2coJ3dlIGFyZSBsb29waW5nIHBhdGgnLCBucGNEYXRhKVxuICAgICAgZm9sbG93UGF0aChucGMsIG5wY0RhdGEucGF0aERhdGEpXG4gICAgICBjb25zb2xlLmxvZyhucGNEYXRhKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJOUEMoKSB7XG4gIGFjdGl2ZU5QQyA9IE5VTExfTlBDXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY3RpdmVOUEMobnBjOiBFbnRpdHkpIHtcbiAgYWN0aXZlTlBDID0gbnBjXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZU5wY1NldCgpIHtcbiAgcmV0dXJuIGFjdGl2ZU5QQyAmJiBucGNEaWFsb2dDb21wb25lbnQuaGFzKGFjdGl2ZU5QQylcbn1cblxuLyoqXG4gKiBDYWxscyB0aGUgTlBDJ3MgYWN0aXZhdGlvbiBmdW5jdGlvbiAoc2V0IG9uIE5QQyBkZWZpbml0aW9uKS4gSWYgTlBDIGhhcyBgZmFjZVVzZXJgID0gdHJ1ZSwgaXQgd2lsbCByb3RhdGUgdG8gZmFjZSB0aGUgcGxheWVyLiBJdCBzdGFydHMgYSBjb29sZG93biBjb3VudGVyIHRvIGF2b2lkIHJlYWN0aXZhdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2YXRlKG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGlmIChhY3RpdmVOUEMgIT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCd3ZSBoYXZlIGEgY3VycmVudCBucGMsIG5lZWR0byByZW1vdmUnKVxuICAgIGVuZEludGVyYWN0aW9uKGFjdGl2ZU5QQylcbiAgICAvLyBjbG9zZURpYWxvZyhhY3RpdmVOUEMpXG4gIH1cblxuICBhY3RpdmVOUEMgPSBucGNcbiAgb25BY3RpdmF0ZUNicy5nZXQobnBjKShvdGhlcilcblxuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG5cbiAgICBUcmFja1VzZXJGbGFnLmNyZWF0ZShucGMsIHtcbiAgICAgIGxvY2tYWlJvdGF0aW9uOiB0cnVlLFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgcm90U3BlZWQ6IG5wY0RhdGEudHVyblNwZWVkXG4gICAgfSlcbiAgfVxuICBpc0Nvb2xkb3duLnNldChucGMsIHRydWUpXG4gIG5wY0RhdGEuaW5Db29sZG93biA9IHRydWVcblxuICB1dGlscy50aW1lcnMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaXNDb29sZG93bi5kZWxldGUobnBjKVxuICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuaW5Db29sZG93biA9IGZhbHNlXG4gIH0sIDEwMDAgKiBucGNEYXRhLmNvb2xEb3duRHVyYXRpb24pXG4gIGNvbnNvbGUubG9nKCdhY3RpdmF0ZWQgbnBjLCcsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykpXG59XG5cbmZ1bmN0aW9uIGVuZEludGVyYWN0aW9uKG5wYzogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLnN0YXRlID0gTlBDU3RhdGUuU1RBTkRJTkdcblxuICBpZiAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpKSB7XG4gICAgLy99ICYmIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSB7XG4gICAgY2xvc2VEaWFsb2cobnBjKVxuICB9XG5cbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnZW5kaW5nIGludGVyYWN0aW9uJywgbnBjRGF0YSwgYnViYmxlcy5nZXQobnBjKSlcbiAgaWYgKG5wY0RhdGEuaGFzQnViYmxlICYmIGJ1YmJsZXMuZ2V0KG5wYykuaXNCdWJibGVPcGVuKSB7XG4gICAgY2xvc2VCdWJibGUobnBjKVxuICB9XG59XG5cbi8qKlxuICogRW5kcyBpbnRlcmFjdGlvbiBhbmQgY2FsbHMgdGhlIG9uV2Fsa0F3YXkgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVdhbGtBd2F5KG5wYzogRW50aXR5LCBvdGhlcjogRW50aXR5KSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBlbmRJbnRlcmFjdGlvbihucGMpXG5cbiAgaWYgKG9uV2Fsa0F3YXlDYnMuZ2V0KG5wYykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLmdldChucGMpKG90aGVyKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5QW5pbWF0aW9uKG5wYzogRW50aXR5LCBhbmltOiBzdHJpbmcsIG5vTG9vcD86IGJvb2xlYW4sIGR1cmF0aW9uPzogbnVtYmVyKSB7XG4gIGxldCBhbmltYXRpb25zID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShucGMpXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuXG4gIGlmICghYW5pbWF0aW9ucyB8fCAhbnBjRGF0YSkgcmV0dXJuXG5cbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzICYmIGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbWF0aW9uOiBQQkFuaW1hdGlvblN0YXRlKSA9PiBhbmltYXRpb24uY2xpcCA9PT0gYW5pbSkubGVuZ3RoID09IDApIHtcbiAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogYW5pbSwgbG9vcDogbm9Mb29wID8gZmFsc2UgOiB0cnVlIH0pXG4gIH1cblxuICBpZiAobnBjRGF0YS5zdGF0ZSA9PSBOUENTdGF0ZS5GT0xMT1dQQVRIKSB7XG4gICAgdXRpbHMucGF0aHMuc3RvcFBhdGgobnBjKVxuICB9XG5cbiAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG5cbiAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMobnBjLCB0cnVlKVxuICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgYW5pbSwgdHJ1ZSlcbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgY29uc29sZS5sb2coJ2hhdmUgYSBkdXJhdGlvbiB0byBwbGF5IGFuaW1hdGlvbicpXG4gICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgYW5pbVRpbWVycy5zZXQoXG4gICAgICBucGMsXG4gICAgICB1dGlscy50aW1lcnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhucGMsIHRydWUpXG4gICAgICAgIGlmIChucGNEYXRhLmlkbGVBbmltKSB7XG4gICAgICAgICAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIG5wY0RhdGEuaWRsZUFuaW0pXG4gICAgICAgICAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IG5wY0RhdGEuaWRsZUFuaW1cbiAgICAgICAgfVxuICAgICAgfSwgMTAwMCAqIGR1cmF0aW9uKVxuICAgICkgLy9cbiAgfVxuXG4gIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBhbmltXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VJZGxlQW5pbShucGM6IEVudGl0eSwgYW5pbWF0aW9uOiBzdHJpbmcsIHBsYXk/OiBib29sZWFuKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLmlkbGVBbmltID0gYW5pbWF0aW9uXG5cbiAgbGV0IGFuaW1hdGlvbnMgPSBBbmltYXRvci5nZXRNdXRhYmxlKG5wYylcbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbSkgPT4gYW5pbS5jbGlwID09PSBhbmltYXRpb24pLmxlbmd0aCA9PSAwKSB7XG4gICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGFuaW1hdGlvbiwgbG9vcDogdHJ1ZSB9KVxuICB9XG5cbiAgaWYgKHBsYXkpIHtcbiAgICBwbGF5QW5pbWF0aW9uKG5wYywgYW5pbWF0aW9uLCB0cnVlKVxuICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykubGFzdFBsYXllZEFuaW0gPSBhbmltYXRpb25cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFsa0J1YmJsZShucGM6IEVudGl0eSwgc2NyaXB0OiBEaWFsb2dbXSwgc3RhcnRJbmRleD86IG51bWJlciB8IHN0cmluZykge1xuICBvcGVuQnViYmxlKG5wYywgc2NyaXB0LCBzdGFydEluZGV4KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nV2luZG93KGRlZmF1bHRQb3J0cmFpdD86IEltYWdlRGF0YSwgc291bmQ/OiBzdHJpbmcpIHtcbiAgbGV0IGRpYWxvZyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICBhZGREaWFsb2coZGlhbG9nLCBzb3VuZCwgZGVmYXVsdFBvcnRyYWl0KVxuICByZXR1cm4gZGlhbG9nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGlhbG9nV2luZG93KG5wYzogRW50aXR5LCBkaWFsb2c6IERpYWxvZ1tdLCBzdGFydEluZGV4PzogbnVtYmVyIHwgc3RyaW5nKSB7XG4gIGFjdGl2ZU5QQyA9IG5wY1xuXG4gIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICBsZXQgaW5kZXg6IGFueVxuICAgIGlmICghc3RhcnRJbmRleCkge1xuICAgICAgaW5kZXggPSAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhcnRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gc3RhcnRJbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IGZpbmREaWFsb2dCeU5hbWUoZGlhbG9nLCBzdGFydEluZGV4KVxuICAgIH1cbiAgICBvcGVuRGlhbG9nKG5wYywgZGlhbG9nLCBpbmRleClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VEaWFsb2dXaW5kb3cod2luZG93OiBFbnRpdHkpIHtcbiAgbGV0IGRpYWxvZyA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQod2luZG93KVxuICBpZiAod2luZG93KSB7XG4gICAgY2xvc2VEaWFsb2coZGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjOiBFbnRpdHkpOiBib29sZWFuIHtcbiAgaWYgKGFuaW1UaW1lcnMuaGFzKG5wYykpIHtcbiAgICB1dGlscy50aW1lcnMuY2xlYXJUaW1lb3V0KGFuaW1UaW1lcnMuZ2V0KG5wYykgYXMgbnVtYmVyKVxuICAgIGFuaW1UaW1lcnMuZGVsZXRlKG5wYylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuIl19
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25wYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBRU4sYUFBYSxFQUViLFlBQVksRUFDWixZQUFZLEVBR1osbUJBQW1CLEVBQ25CLFNBQVMsRUFHVCxXQUFXLEVBQ1gsdUJBQXVCLEVBQ3hCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBVSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEgsT0FBTyxFQUE4QyxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZSxNQUFNLFNBQVMsQ0FBQTtBQUNqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBaUIsTUFBTSxlQUFlLENBQUE7QUFDbkcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUtwQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUE7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQXFCLElBQUksR0FBRyxFQUFFLENB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RUFBRSxRQUFRLENBQUMsUUFBUTtRQUN4QixRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEQsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDMUYsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUQsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDakQsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFDM0MsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHO0tBQ2hELENBQUMsQ0FBQTtJQUVGLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFD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QUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbmltYXRvcixcbiAgQXZhdGFyU2hhcGUsXG4gIGVuZ2luZSxcbiAgRW50aXR5LFxuICBHbHRmQ29udGFpbmVyLFxuICBJbnB1dEFjdGlvbixcbiAgTWVzaENvbGxpZGVyLFxuICBNZXNoUmVuZGVyZXIsXG4gIFBCQXZhdGFyU2hhcGUsXG4gIFBCR2x0ZkNvbnRhaW5lcixcbiAgcG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgVHJhbnNmb3JtLFxuICBUcmFuc2Zvcm1UeXBlLFxuICBQQkFuaW1hdGlvblN0YXRlLFxuICBUcmlnZ2VyQXJlYSwgXG4gIHRyaWdnZXJBcmVhRXZlbnRzU3lzdGVtXG59IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IENvbG9yMywgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyBidWJibGVzLCBjbG9zZUJ1YmJsZSwgY3JlYXRlRGlhbG9nQnViYmxlLCBvcGVuQnViYmxlIH0gZnJvbSAnLi9idWJibGUnXG5pbXBvcnQgeyBJc0ZvbGxvd2luZ1BhdGgsIFRyYWNrVXNlckZsYWcgfSBmcm9tICcuL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBhZGREaWFsb2csIGNsb3NlRGlhbG9nLCBmaW5kRGlhbG9nQnlOYW1lLCBucGNEaWFsb2dDb21wb25lbnQsIG9wZW5EaWFsb2cgfSBmcm9tICcuL2RpYWxvZydcbmltcG9ydCB7IGZhY2VVc2VyU3lzdGVtLCBoYW5kbGVCdWJibGV0eXBpbmcsIGhhbmRsZURpYWxvZ1R5cGluZywgaGFuZGxlUGF0aFRpbWVzLCBpbnB1dExpc3RlbmVyU3lzdGVtIH0gZnJvbSAnLi9zeXN0ZW1zJ1xuaW1wb3J0IHsgRGlhbG9nLCBGb2xsb3dQYXRoRGF0YSwgSW1hZ2VEYXRhLCBOUENEYXRhLCBOUENQYXRoVHlwZSwgTlBDU3RhdGUsIE5QQ1R5cGUsIFRyaWdnZXJEYXRhIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGRhcmtUaGVtZSwgbGlnaHRUaGVtZSB9IGZyb20gJy4vdWknXG5pbXBvcnQgeyBkZWJ1Z1RyaWdnZXJzLCBkZWxheWVkRnVuY3Rpb24sIGNsZWFyRGVsYXllZEZ1bmN0aW9uLCBEZWxheWVkSGFuZGxlIH0gZnJvbSAnLi91dGlscy91dGlscydcbmltcG9ydCB7IHBhdGhzIH0gZnJvbSAnLi91dGlscy9wYXRoJ1xuXG5cbnR5cGUgTlBDRGF0YUZyb21FbnRpdHkgPSBPbWl0PE5QQ0RhdGEsICd0eXBlJz4gJiB7IHR5cGU/OiBOUENUeXBlIH1cblxuZXhwb3J0IGNvbnN0IHdhbGtpbmdUaW1lcnM6IE1hcDxFbnRpdHksIG51bWJlcj4gPSBuZXcgTWFwKClcbmV4cG9ydCBjb25zdCBucGNEYXRhQ29tcG9uZW50OiBNYXA8RW50aXR5LCBhbnk+ID0gbmV3IE1hcCgpXG5leHBvcnQgbGV0IE5VTExfTlBDOiBFbnRpdHkgPSAwIGFzIEVudGl0eVxuZXhwb3J0IGxldCBhY3RpdmVOUEM6IEVudGl0eSA9IE5VTExfTlBDXG5leHBvcnQgbGV0IGJsYW5rRGlhbG9nOiBudW1iZXIgPSAwXG5cbmVuZ2luZS5hZGRTeXN0ZW0oaGFuZGxlUGF0aFRpbWVzKVxuZW5naW5lLmFkZFN5c3RlbShoYW5kbGVEaWFsb2dUeXBpbmcpXG5lbmdpbmUuYWRkU3lzdGVtKGhhbmRsZUJ1YmJsZXR5cGluZylcbmVuZ2luZS5hZGRTeXN0ZW0oZmFjZVVzZXJTeXN0ZW0pXG5lbmdpbmUuYWRkU3lzdGVtKGlucHV0TGlzdGVuZXJTeXN0ZW0pXG5cbi8vVE9ETyBNQUtFIGlzQ29vbGRvd24gYW5kIG5vIGxvbmdlciBoYXZlIHRvIHRyYWNrIHdpdGggbWFwIHRvIHJlbW92ZSBtZW1vcnkgbGVhayBpc3N1ZXNcbmNvbnN0IGlzQ29vbGRvd246IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uQWN0aXZhdGVDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uV2Fsa0F3YXlDYnM6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IGFuaW1UaW1lcnM6IE1hcDxFbnRpdHksIERlbGF5ZWRIYW5kbGU+ID0gbmV3IE1hcCgpXG5jb25zdCBwb2ludFJlYWNoZWRDYWxsYmFja3M6IE1hcDxFbnRpdHksIGFueT4gPSBuZXcgTWFwKClcbmNvbnN0IG9uRmluaXNoQ2FsbGJhY2tzOiBNYXA8RW50aXR5LCBhbnk+ID0gbmV3IE1hcCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93RGVidWcoZGVidWc6IGJvb2xlYW4pIHtcbiAgaWYoZGVidWcpIHtcbiAgICBkZWJ1Z1RyaWdnZXJzKClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YShucGM6IEVudGl0eSkge1xuICByZXR1cm4gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKHRyYW5zZm9ybTogYW55LCBkYXRhOiBOUENEYXRhKSB7XG4gIGxldCBucGMgPSBlbmdpbmUuYWRkRW50aXR5KClcblxuICBsZXQgdDogVHJhbnNmb3JtVHlwZSA9IHtcbiAgICBwb3NpdGlvbjogdHJhbnNmb3JtLnBvc2l0aW9uID8gdHJhbnNmb3JtLnBvc2l0aW9uIDogVmVjdG9yMy5jcmVhdGUoMCwgMCwgMCksXG4gICAgcm90YXRpb246IHRyYW5zZm9ybS5yb3RhdGlvbiA/IHRyYW5zZm9ybS5yb3RhdGlvbiA6IFF1YXRlcm5pb24uWmVybygpLFxuICAgIHNjYWxlOiB0cmFuc2Zvcm0uc2NhbGUgPyB0cmFuc2Zvcm0uc2NhbGUgOiBWZWN0b3IzLk9uZSgpXG4gIH1cbiAgVHJhbnNmb3JtLmNyZWF0ZShucGMsIHQpXG5cbiAgbnBjRGF0YUNvbXBvbmVudC5zZXQobnBjLCB7XG4gICAgaW50cm9kdWNlZDogZmFsc2UsXG4gICAgaW5Db29sZG93bjogZmFsc2UsXG4gICAgY29vbERvd25EdXJhdGlvbjogZGF0YSAmJiBkYXRhLmNvb2xEb3duRHVyYXRpb24gPyBkYXRhLmNvb2xEb3duRHVyYXRpb24gOiA1LFxuICAgIGZhY2VVc2VyOiBkYXRhICYmIGRhdGEuZmFjZVVzZXIgPyBkYXRhLmZhY2VVc2VyIDogdW5kZWZpbmVkLFxuICAgIHdhbGtpbmdTcGVlZDogMixcbiAgICB3YWxraW5nQW5pbTogZGF0YSAmJiBkYXRhLndhbGtpbmdBbmltID8gZGF0YS53YWxraW5nQW5pbSA6IHVuZGVmaW5lZCxcbiAgICBwYXRoRGF0YTogZGF0YS5wYXRoRGF0YSA/IGRhdGEucGF0aERhdGEgOiB1bmRlZmluZWQsXG4gICAgY3VycmVudFBhdGhEYXRhOiBbXSxcbiAgICBtYW51YWxTdG9wOiBmYWxzZSxcbiAgICBwYXRoSW5kZXg6IDAsXG4gICAgc3RhdGU6IE5QQ1N0YXRlLlNUQU5ESU5HLFxuICAgIGlkbGVBbmltOiBkYXRhICYmIGRhdGEuaWRsZUFuaW0gPyBkYXRhLmlkbGVBbmltIDogJ0lkbGUnLFxuICAgIGJ1YmJsZUhlaWdodDogZGF0YSAmJiBkYXRhLnRleHRCdWJibGUgJiYgZGF0YS5idWJibGVIZWlnaHQgPyBkYXRhLmJ1YmJsZUhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICBidWJibGVTb3VuZDogZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQsXG4gICAgaGFzQnViYmxlOiBkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSA/IHRydWUgOiBmYWxzZSxcbiAgICB0dXJuU3BlZWQ6IGRhdGEgJiYgZGF0YS50dXJuaW5nU3BlZWQgPyBkYXRhLnR1cm5pbmdTcGVlZCA6IDIsXG4gICAgdGhlbWU6IGRhdGEuZGFya1VJID8gZGFya1RoZW1lIDogbGlnaHRUaGVtZSxcbiAgICBidWJibGVYT2Zmc2V0OiBkYXRhLmJ1YmJsZVhPZmZzZXQgPyBkYXRhLmJ1YmJsZVhPZmZzZXQgOiAwLFxuICAgIGJ1YmJsZVlPZmZzZXQ6IGRhdGEuYnViYmxlWU9mZnNldCA/IGRhdGEuYnViYmxlWU9mZnNldCA6IDAsXG4gICAgdm9sdW1lOiBkYXRhICYmIGRhdGEudm9sdW1lID8gZGF0YS52b2x1bWUgOiAwLjVcbiAgfSlcblxuICBpZiAoZGF0YSAmJiBkYXRhLm5vVUkpIHtcbiAgfSBlbHNlIGlmIChkYXRhICYmIGRhdGEucG9ydHJhaXQpIHtcbiAgICBhZGREaWFsb2coXG4gICAgICBucGMsXG4gICAgICBkYXRhICYmIGRhdGEuZGlhbG9nU291bmQgPyBkYXRhLmRpYWxvZ1NvdW5kIDogdW5kZWZpbmVkLFxuICAgICAgdHlwZW9mIGRhdGEucG9ydHJhaXQgPT09IGBzdHJpbmdgID8geyBwYXRoOiBkYXRhLnBvcnRyYWl0IH0gOiBkYXRhLnBvcnRyYWl0XG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGFkZERpYWxvZyhucGMsIGRhdGEgJiYgZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQpXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLnRleHRCdWJibGUpIHtcbiAgICBjcmVhdGVEaWFsb2dCdWJibGUobnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLmJ1YmJsZUhlaWdodClcbiAgfVxuXG4gIG9uQWN0aXZhdGVDYnMuc2V0KG5wYywgKG90aGVyOiBFbnRpdHkpID0+IHtcbiAgICBkYXRhLm9uQWN0aXZhdGUob3RoZXIpXG4gIH0pXG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eSgnb25XYWxrQXdheScpKSB7XG4gICAgb25XYWxrQXdheUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmNvbnRpbnVlT25XYWxrQXdheSkge1xuICAgICAgICBpZiAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpKSB7XG4gICAgICAgICAgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpKSB7XG4gICAgICAgICAgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkYXRhLm9uV2Fsa0F3YXkhKG90aGVyKVxuICAgIH0pXG4gIH1cblxuICBhZGROUENCb25lcyhucGMsIGRhdGEpXG4gIGFkZENsaWNrUmVhY3Rpb25zKG5wYywgZGF0YSlcbiAgYWRkVHJpZ2dlckFyZWEobnBjLCBkYXRhKVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEgJiYgZGF0YS5wYXRoRGF0YS5zcGVlZCkge1xuICAgIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgIG5wY0RhdGEud2Fsa2luZ1NwZWVkID0gZGF0YS5wYXRoRGF0YS5zcGVlZFxuICB9XG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5jb29sRG93bkR1cmF0aW9uKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS5jb29sRG93bkR1cmF0aW9uID0gZGF0YS5jb29sRG93bkR1cmF0aW9uXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLnBhdGhEYXRhKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS5wYXRoRGF0YS5sb29wID0gdHJ1ZVxuICAgIGZvbGxvd1BhdGgobnBjLCBucGNEYXRhLnBhdGhEYXRhKVxuICB9XG5cbiAgcmV0dXJuIG5wY1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbUVudGl0eShlbnRpdHk6IEVudGl0eSwgZGF0YTogTlBDRGF0YUZyb21FbnRpdHkpIHtcbiAgY29uc3QgbnBjID0gZW50aXR5XG5cbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gKGRhdGEgJiYgZGF0YS50eXBlICE9PSB1bmRlZmluZWQgPyBkYXRhLnR5cGUgOiBOUENUeXBlLkNVU1RPTSlcblxuICBpZiAoIVRyYW5zZm9ybS5oYXMobnBjKSkge1xuICAgIGNvbnNvbGUubG9nKCdjcmVhdGVGcm9tRW50aXR5OiBQcm92aWRlZCBlbnRpdHkgaXMgbWlzc2luZyBUcmFuc2Zvcm0gY29tcG9uZW50JylcbiAgfVxuXG4gIGlmIChyZXNvbHZlZFR5cGUgPT09IE5QQ1R5cGUuQ1VTVE9NICYmICFHbHRmQ29udGFpbmVyLmhhcyhucGMpKSB7XG4gICAgY29uc29sZS5sb2coJ2NyZWF0ZUZyb21FbnRpdHk6IEV4cGVjdGVkIGEgR2x0ZkNvbnRhaW5lciBvbiBDVVNUT00gTlBDIGVudGl0eScpXG4gIH1cblxuICBucGNEYXRhQ29tcG9uZW50LnNldChucGMsIHtcbiAgICBpbnRyb2R1Y2VkOiBmYWxzZSxcbiAgICBpbkNvb2xkb3duOiBmYWxzZSxcbiAgICBjb29sRG93bkR1cmF0aW9uOiBkYXRhICYmIGRhdGEuY29vbERvd25EdXJhdGlvbiA/IGRhdGEuY29vbERvd25EdXJhdGlvbiA6IDUsXG4gICAgZmFjZVVzZXI6IGRhdGEgJiYgZGF0YS5mYWNlVXNlciA/IGRhdGEuZmFjZVVzZXIgOiB1bmRlZmluZWQsXG4gICAgd2Fsa2luZ1NwZWVkOiAyLFxuICAgIHdhbGtpbmdBbmltOiBkYXRhICYmIGRhdGEud2Fsa2luZ0FuaW0gPyBkYXRhLndhbGtpbmdBbmltIDogdW5kZWZpbmVkLFxuICAgIHBhdGhEYXRhOiBkYXRhLnBhdGhEYXRhID8gZGF0YS5wYXRoRGF0YSA6IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGF0aERhdGE6IFtdLFxuICAgIG1hbnVhbFN0b3A6IGZhbHNlLFxuICAgIHBhdGhJbmRleDogMCxcbiAgICBzdGF0ZTogTlBDU3RhdGUuU1RBTkRJTkcsXG4gICAgaWRsZUFuaW06IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZScsXG4gICAgYnViYmxlSGVpZ2h0OiBkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSAmJiBkYXRhLmJ1YmJsZUhlaWdodCA/IGRhdGEuYnViYmxlSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgIGJ1YmJsZVNvdW5kOiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZCxcbiAgICBoYXNCdWJibGU6IGRhdGEgJiYgZGF0YS50ZXh0QnViYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHR1cm5TcGVlZDogZGF0YSAmJiBkYXRhLnR1cm5pbmdTcGVlZCA/IGRhdGEudHVybmluZ1NwZWVkIDogMixcbiAgICB0aGVtZTogZGF0YS5kYXJrVUkgPyBkYXJrVGhlbWUgOiBsaWdodFRoZW1lLFxuICAgIGJ1YmJsZVhPZmZzZXQ6IGRhdGEuYnViYmxlWE9mZnNldCA/IGRhdGEuYnViYmxlWE9mZnNldCA6IDAsXG4gICAgYnViYmxlWU9mZnNldDogZGF0YS5idWJibGVZT2Zmc2V0ID8gZGF0YS5idWJibGVZT2Zmc2V0IDogMFxuICB9KVxuXG4gIGlmIChkYXRhICYmIGRhdGEubm9VSSkge1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5wb3J0cmFpdCkge1xuICAgIGFkZERpYWxvZyhcbiAgICAgIG5wYyxcbiAgICAgIGRhdGEgJiYgZGF0YS5kaWFsb2dTb3VuZCA/IGRhdGEuZGlhbG9nU291bmQgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlb2YgZGF0YS5wb3J0cmFpdCA9PT0gYHN0cmluZ2AgPyB7IHBhdGg6IGRhdGEucG9ydHJhaXQgfSA6IGRhdGEucG9ydHJhaXRcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgYWRkRGlhbG9nKG5wYywgZGF0YSAmJiBkYXRhLmRpYWxvZ1NvdW5kID8gZGF0YS5kaWFsb2dTb3VuZCA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEudGV4dEJ1YmJsZSkge1xuICAgIGNyZWF0ZURpYWxvZ0J1YmJsZShucGMsIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuYnViYmxlSGVpZ2h0KVxuICB9XG5cbiAgb25BY3RpdmF0ZUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgIGRhdGEub25BY3RpdmF0ZShvdGhlcilcbiAgfSlcblxuICBpZiAoZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KCdvbldhbGtBd2F5JykpIHtcbiAgICBvbldhbGtBd2F5Q2JzLnNldChucGMsIChvdGhlcjogRW50aXR5KSA9PiB7XG4gICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuY29udGludWVPbldhbGtBd2F5KSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICAgICAgICBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGEub25XYWxrQXdheSEob3RoZXIpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGRhdGFXaXRoVHlwZSA9IHsgLi4uZGF0YSwgdHlwZTogcmVzb2x2ZWRUeXBlIH0gYXMgTlBDRGF0YVxuICBzZWVkQW5pbWF0b3JGb3JFeGlzdGluZyhucGMsIGRhdGFXaXRoVHlwZSlcbiAgYWRkQ2xpY2tSZWFjdGlvbnMobnBjLCBkYXRhV2l0aFR5cGUpXG4gIGFkZFRyaWdnZXJBcmVhKG5wYywgZGF0YVdpdGhUeXBlKVxuXG4gIGlmIChkYXRhICYmIGRhdGEucGF0aERhdGEgJiYgZGF0YS5wYXRoRGF0YS5zcGVlZCkge1xuICAgIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICAgIG5wY0RhdGEud2Fsa2luZ1NwZWVkID0gZGF0YS5wYXRoRGF0YS5zcGVlZFxuICB9XG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5jb29sRG93bkR1cmF0aW9uKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS5jb29sRG93bkR1cmF0aW9uID0gZGF0YS5jb29sRG93bkR1cmF0aW9uXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLnBhdGhEYXRhKSB7XG4gICAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gICAgbnBjRGF0YS5wYXRoRGF0YS5sb29wID0gdHJ1ZVxuICAgIGZvbGxvd1BhdGgobnBjLCBucGNEYXRhLnBhdGhEYXRhKVxuICB9XG5cbiAgcmV0dXJuIG5wY1xufVxuXG5mdW5jdGlvbiBhZGROUENCb25lcyhucGM6IEVudGl0eSwgZGF0YTogTlBDRGF0YSkge1xuICBjb25zdCBtb2RlbElzU3RyaW5nID0gZGF0YSAmJiBkYXRhLm1vZGVsICYmIHR5cGVvZiBkYXRhLm1vZGVsID09PSBgc3RyaW5nYFxuICBjb25zdCBtb2RlbEF2YXRhckRhdGE6IFBCQXZhdGFyU2hhcGUgfCB1bmRlZmluZWQgPSBtb2RlbElzU3RyaW5nXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IGRhdGEubW9kZWwgJiYgKGRhdGEubW9kZWwgYXMgYW55KS5ib2R5U2hhcGVcbiAgICAgID8gKGRhdGEubW9kZWwgYXMgUEJBdmF0YXJTaGFwZSlcbiAgICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IG1vZGVsR0xURkRhdGE6IFBCR2x0ZkNvbnRhaW5lciB8IHVuZGVmaW5lZCA9IG1vZGVsSXNTdHJpbmdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogZGF0YS5tb2RlbCAmJiAoZGF0YS5tb2RlbCBhcyBhbnkpLnNyY1xuICAgICAgPyAoZGF0YS5tb2RlbCBhcyBQQkdsdGZDb250YWluZXIpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgY2FzZSBOUENUeXBlLkFWQVRBUjpcbiAgICAgIEF2YXRhclNoYXBlLmNyZWF0ZShcbiAgICAgICAgbnBjLFxuICAgICAgICAhZGF0YSB8fCAhZGF0YS5tb2RlbCB8fCAhbW9kZWxBdmF0YXJEYXRhXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBpZDogJ25wYycsXG4gICAgICAgICAgICBuYW1lOiAnTlBDJyxcbiAgICAgICAgICAgIGJvZHlTaGFwZTogJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpCYXNlTWFsZScsXG4gICAgICAgICAgICBlbW90ZXM6IFtdLFxuICAgICAgICAgICAgd2VhcmFibGVzOiBbXG4gICAgICAgICAgICAgICd1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9leWVzXzAwJyxcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZWJyb3dzXzAwJyxcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX21vdXRoXzAwJyxcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpjb21meV9zcG9ydF9zYW5kYWxzJyxcbiAgICAgICAgICAgICAgJ3VybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpzb2NjZXJfcGFudHMnLFxuICAgICAgICAgICAgICAndXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmVsZWdhbnRfc3dlYXRlcidcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICAgOiBtb2RlbEF2YXRhckRhdGFcbiAgICAgIClcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIE5QQ1R5cGUuQ1VTVE9NOlxuICAgICAgR2x0ZkNvbnRhaW5lci5jcmVhdGUoXG4gICAgICAgIG5wYyxcbiAgICAgICAgbW9kZWxJc1N0cmluZyAmJiB0eXBlb2YgZGF0YS5tb2RlbCA9PT0gYHN0cmluZ2AgPyB7IHNyYzogZGF0YSAmJiBkYXRhLm1vZGVsID8gZGF0YS5tb2RlbCA6ICcnIH0gOiBtb2RlbEdMVEZEYXRhXG4gICAgICApXG4gICAgICBBbmltYXRvci5jcmVhdGUobnBjLCB7XG4gICAgICAgIHN0YXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaXA6IGRhdGEgJiYgZGF0YS5pZGxlQW5pbSA/IGRhdGEuaWRsZUFuaW0gOiAnSWRsZScsXG4gICAgICAgICAgICBsb29wOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICAgIG5wY0RhdGEuaWRsZUFuaW0gPSBkYXRhICYmIGRhdGEuaWRsZUFuaW0gPyBkYXRhLmlkbGVBbmltIDogJ0lkbGUnXG4gICAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5pZGxlQW5pbVxuXG4gICAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5pZGxlQW5pbSlcblxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS53YWxraW5nQW5pbSkge1xuICAgICAgICBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltID0gZGF0YS53YWxraW5nQW5pbVxuICAgICAgICBsZXQgYW5pbWF0aW9ucyA9IEFuaW1hdG9yLmdldE11dGFibGUobnBjKVxuICAgICAgICBhbmltYXRpb25zLnN0YXRlcy5wdXNoKHsgY2xpcDogZGF0YS53YWxraW5nQW5pbSwgbG9vcDogdHJ1ZSB9KVxuICAgICAgfVxuXG4gICAgICBicmVha1xuXG4gICAgY2FzZSBOUENUeXBlLkJMQU5LOlxuICAgICAgTWVzaFJlbmRlcmVyLnNldEJveChucGMpXG4gICAgICBNZXNoQ29sbGlkZXIuc2V0Qm94KG5wYylcbiAgICAgIGJyZWFrXG4gIH1cbn1cblxuZnVuY3Rpb24gc2VlZEFuaW1hdG9yRm9yRXhpc3RpbmcobnBjOiBFbnRpdHksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgaWYgKGRhdGEudHlwZSAhPT0gTlBDVHlwZS5DVVNUT00pIHJldHVyblxuXG4gIGNvbnN0IGlkbGVDbGlwID0gZGF0YSAmJiBkYXRhLmlkbGVBbmltID8gZGF0YS5pZGxlQW5pbSA6ICdJZGxlJ1xuXG4gIGlmICghQW5pbWF0b3IuaGFzKG5wYykpIHtcbiAgICBBbmltYXRvci5jcmVhdGUobnBjLCB7XG4gICAgICBzdGF0ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsaXA6IGlkbGVDbGlwLFxuICAgICAgICAgIGxvb3A6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYW5pbWF0aW9ucyA9IEFuaW1hdG9yLmdldE11dGFibGUobnBjKVxuICAgIGlmIChhbmltYXRpb25zLnN0YXRlcy5maWx0ZXIoKGFuaW1hdGlvbjogUEJBbmltYXRpb25TdGF0ZSkgPT4gYW5pbWF0aW9uLmNsaXAgPT09IGlkbGVDbGlwKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGFuaW1hdGlvbnMuc3RhdGVzLnB1c2goeyBjbGlwOiBpZGxlQ2xpcCwgbG9vcDogdHJ1ZSB9KVxuICAgIH1cbiAgfVxuXG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLmlkbGVBbmltID0gaWRsZUNsaXBcbiAgbnBjRGF0YS5sYXN0UGxheWVkQW5pbSA9IGlkbGVDbGlwXG4gIGlmICh0eXBlb2YgaWRsZUNsaXAgPT09ICdzdHJpbmcnICYmIGlkbGVDbGlwLmxlbmd0aCA+IDApIHtcbiAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgaWRsZUNsaXApXG4gIH1cblxuICBpZiAoZGF0YSAmJiBkYXRhLndhbGtpbmdBbmltKSB7XG4gICAgY29uc3QgYW5pbWF0aW9ucyA9IEFuaW1hdG9yLmdldE11dGFibGUobnBjKVxuICAgIGlmICh0eXBlb2YgZGF0YS53YWxraW5nQW5pbSA9PT0gJ3N0cmluZycgJiYgZGF0YS53YWxraW5nQW5pbS5sZW5ndGggPiAwICYmIGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbWF0aW9uOiBQQkFuaW1hdGlvblN0YXRlKSA9PiBhbmltYXRpb24uY2xpcCA9PT0gZGF0YS53YWxraW5nQW5pbSEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGRhdGEud2Fsa2luZ0FuaW0hLCBsb29wOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS53YWxraW5nQW5pbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5wY0RhdGEud2Fsa2luZ0FuaW0gPSBkYXRhLndhbGtpbmdBbmltXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENsaWNrUmVhY3Rpb25zKG5wYzogRW50aXR5LCBkYXRhOiBOUENEYXRhKSB7XG4gIGxldCBhY3RpdmF0ZUJ1dHRvbiA9IGRhdGEgJiYgZGF0YS5vbmx5Q2xpY2tUcmlnZ2VyID8gSW5wdXRBY3Rpb24uSUFfUE9JTlRFUiA6IElucHV0QWN0aW9uLklBX1BSSU1BUllcblxuICAvKlxuICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgICB7XG4gICAgICAgICAgZW50aXR5OiBucGMsXG4gICAgICAgICAgb3B0czoge1xuICAgICAgICAgICAgICBidXR0b246IGFjdGl2YXRlQnV0dG9uLFxuICAgICAgICAgICAgICBob3ZlclRleHQ6IGRhdGEgJiYgZGF0YS5ob3ZlclRleHQgPyBkYXRhLmhvdmVyVGV4dCA6ICdUYWxrJyxcbiAgICAgICAgICAgICAgc2hvd0ZlZWRiYWNrOiBkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlciA/IGZhbHNlIDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKGlzQ29vbGRvd24uaGFzKG5wYykgfHwgbnBjRGlhbG9nQ29tcG9uZW50LmdldChucGMpLnZpc2libGUpIHJldHVyblxuICAgICAgICAgIGFjdGl2YXRlKG5wYywgZW5naW5lLlBsYXllckVudGl0eSlcbiAgICAgIH0sXG4gIClcbiAgKi9cblxuICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgbnBjLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0Nvb2xkb3duLmhhcyhucGMpIHx8IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSByZXR1cm5cbiAgICAgIGFjdGl2YXRlKG5wYywgZW5naW5lLlBsYXllckVudGl0eSlcbiAgICB9LFxuICAgIHtcbiAgICAgIGJ1dHRvbjogYWN0aXZhdGVCdXR0b24sXG4gICAgICBob3ZlclRleHQ6IGRhdGEgJiYgZGF0YS5ob3ZlclRleHQgPyBTdHJpbmcoZGF0YS5ob3ZlclRleHQpIDogJ1RhbGsnLFxuICAgICAgc2hvd0ZlZWRiYWNrOiBkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlciA/IGZhbHNlIDogdHJ1ZVxuICAgIH1cbiAgKVxuXG4gIGlmIChkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlcikge1xuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ucmVtb3ZlT25Qb2ludGVyRG93bihucGMpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJpZ2dlckFyZWEobnBjOiBFbnRpdHksIGRhdGE6IE5QQ0RhdGEpIHtcbiAgbGV0IHRyaWdnZXJEYXRhOiBUcmlnZ2VyRGF0YSA9IHt9XG5cbiAgaWYgKCFkYXRhIHx8IChkYXRhICYmICFkYXRhLm9ubHlFeHRlcm5hbFRyaWdnZXIgJiYgIWRhdGEub25seUNsaWNrVHJpZ2dlciAmJiAhZGF0YS5vbmx5RVRyaWdnZXIpKSB7XG4gICAgb25BY3RpdmF0ZUNicy5zZXQobnBjLCAob3RoZXI6IEVudGl0eSkgPT4ge1xuICAgICAgaWYgKGlzQ29vbGRvd24uaGFzKG5wYykpIHtcbiAgICAgICAgY29uc29sZS5sb2cobnBjLCAnIGluIGNvb2xkb3duJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAobnBjRGlhbG9nQ29tcG9uZW50LmhhcyhucGMpICYmIG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQobnBjKS52aXNpYmxlKSB8fFxuICAgICAgICAoZGF0YSAmJiBkYXRhLm9ubHlFeHRlcm5hbFRyaWdnZXIpIHx8XG4gICAgICAgIChkYXRhICYmIGRhdGEub25seUNsaWNrVHJpZ2dlcilcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGRhdGEub25BY3RpdmF0ZShvdGhlcilcbiAgICB9KVxuICAgIHRyaWdnZXJEYXRhLm9uQ2FtZXJhRW50ZXIgPSBvbkFjdGl2YXRlQ2JzLmdldChucGMpXG4gIH1cblxuICAvLyB3aGVuIGV4aXRpbmcgdHJpZ2dlclxuICBpZiAoIWRhdGEgfHwgKGRhdGEgJiYgIWRhdGEuY29udGludWVPbldhbGtBd2F5KSkge1xuICAgIHRyaWdnZXJEYXRhLm9uQ2FtZXJhRXhpdCA9IChvdGhlcikgPT4ge1xuICAgICAgaGFuZGxlV2Fsa0F3YXkobnBjLCBvdGhlcilcbiAgICB9XG4gIH1cblxuICAvLyB3aGVuIGVudGVyaW5nIHRyaWdnZXJcbiAgaWYgKCFkYXRhIHx8IChkYXRhICYmICFkYXRhLm9ubHlFeHRlcm5hbFRyaWdnZXIgJiYgIWRhdGEub25seUNsaWNrVHJpZ2dlciAmJiAhZGF0YS5vbmx5RVRyaWdnZXIpKSB7XG4gICAgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciA9IChvdGhlcikgPT4ge1xuICAgICAgaWYgKGlzQ29vbGRvd24uaGFzKG5wYykpIHtcbiAgICAgICAgY29uc29sZS5sb2cobnBjLCAnIGluIGNvb2xkb3duJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBlbHNlIGlmIChcbiAgICAgIC8vICAgICAodGhpcy5kaWFsb2cgJiYgdGhpcy5kaWFsb2cuaXNEaWFsb2dPcGVuKSB8fFxuICAgICAgLy8gICAgIChkYXRhICYmIGRhdGEub25seUV4dGVybmFsVHJpZ2dlcikgfHxcbiAgICAgIC8vICAgICAoZGF0YSAmJiBkYXRhLm9ubHlDbGlja1RyaWdnZXIpXG4gICAgICAvLyApIHtcbiAgICAgIC8vICAgICByZXR1cm5cbiAgICAgIC8vIH1cbiAgICAgIGFjdGl2YXRlKG5wYywgb3RoZXIpXG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIHRyaWdnZXJcblxuICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFbnRlciB8fCB0cmlnZ2VyRGF0YS5vbkNhbWVyYUV4aXQpIHtcblxuXG4gICAgbGV0IHNwaGVyZVNjYWxlID0ge1xuICAgICAgeDogZGF0YS5yZWFjdERpc3RhbmNlICE9IHVuZGVmaW5lZCA/IGRhdGEucmVhY3REaXN0YW5jZSA6IDYsXG4gICAgICB5OiBkYXRhLnJlYWN0RGlzdGFuY2UgIT0gdW5kZWZpbmVkID8gZGF0YS5yZWFjdERpc3RhbmNlIDogNixcbiAgICAgIHo6IGRhdGEucmVhY3REaXN0YW5jZSAhPSB1bmRlZmluZWQgPyBkYXRhLnJlYWN0RGlzdGFuY2UgOiA2XG4gICAgfVxuXG4gICBsZXQgdHJpZ2dlclNwaGVyZSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gICBUcmFuc2Zvcm0uY3JlYXRlKHRyaWdnZXJTcGhlcmUsIHtcbiAgICBwb3NpdGlvbjogVmVjdG9yMy5aZXJvKCksXG4gICAgcm90YXRpb246IFF1YXRlcm5pb24uWmVybygpLFxuICAgIHNjYWxlOiBzcGhlcmVTY2FsZSxcbiAgICBwYXJlbnQ6IG5wY1xuICAgfSlcblxuICAgVHJpZ2dlckFyZWEuc2V0U3BoZXJlKHRyaWdnZXJTcGhlcmUpXG5cbiAgICB0cmlnZ2VyQXJlYUV2ZW50c1N5c3RlbS5vblRyaWdnZXJFbnRlcih0cmlnZ2VyU3BoZXJlLCBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIGlmICh0cmlnZ2VyRGF0YS5vbkNhbWVyYUVudGVyKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IChyZXN1bHQ/LnRyaWdnZXI/LmVudGl0eSA/PyBlbmdpbmUuUGxheWVyRW50aXR5KSBhcyBFbnRpdHlcbiAgICAgICAgdHJpZ2dlckRhdGEub25DYW1lcmFFbnRlcihlbnRpdHkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRyaWdnZXJBcmVhRXZlbnRzU3lzdGVtLm9uVHJpZ2dlckV4aXQodHJpZ2dlclNwaGVyZSwgZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICBpZiAodHJpZ2dlckRhdGEub25DYW1lcmFFeGl0KSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IChyZXN1bHQ/LnRyaWdnZXI/LmVudGl0eSA/PyBlbmdpbmUuUGxheWVyRW50aXR5KSBhcyBFbnRpdHlcbiAgICAgICAgdHJpZ2dlckRhdGEub25DYW1lcmFFeGl0KGVudGl0eSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2xsb3dQYXRoKG5wYzogRW50aXR5LCBkYXRhPzogRm9sbG93UGF0aERhdGEpIHtcbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIGxldCBwYXRoOiBhbnlbXSA9IFtdXG5cbiAgaWYgKG5wY0RhdGEuZmFjZVVzZXIpIHtcbiAgICBpZiAoVHJhY2tVc2VyRmxhZy5oYXMobnBjKSkge1xuICAgICAgVHJhY2tVc2VyRmxhZy5kZWxldGVGcm9tKG5wYylcbiAgICB9XG4gIH1cblxuICBpZiAobnBjRGF0YS5tYW51YWxTdG9wKSB7XG4gICAgbGV0IGR1cmF0aW9uID0gbnBjRGF0YS5wYXRoRGF0YS50b3RhbER1cmF0aW9uXG4gICAgbGV0IGN1cnJlbnRUaW1lcjogbnVtYmVyID0gd2Fsa2luZ1RpbWVycy5nZXQobnBjKSFcbiAgICBjb25zb2xlLmxvZygnY3VycmVudCB0aW1lIGlzJywgY3VycmVudFRpbWVyKVxuICAgIGlmIChjdXJyZW50VGltZXIpIHtcbiAgICAgIGR1cmF0aW9uIC09IGN1cnJlbnRUaW1lclxuICAgIH1cblxuICAgIGxldCBwYXRoOiBhbnlbXSA9IFtdXG4gICAgbnBjRGF0YS5wYXRoRGF0YS5wYXRoLmZvckVhY2goKHA6IGFueSkgPT4ge1xuICAgICAgcGF0aC5wdXNoKHApXG4gICAgfSlcbiAgICBwYXRoLnNwbGljZSgwLCBucGNEYXRhLnBhdGhJbmRleClcblxuICAgIGxldCBwb3MgPSBUcmFuc2Zvcm0uZ2V0KG5wYykucG9zaXRpb25cbiAgICBwYXRoLnVuc2hpZnQoVmVjdG9yMy5jcmVhdGUocG9zLngsIHBvcy55LCBwb3MueikpXG4gICAgd2Fsa05QQyhcbiAgICAgIG5wYyxcbiAgICAgIG5wY0RhdGEsXG4gICAgICBucGNEYXRhLnBhdGhEYXRhLnBhdGhUeXBlLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBwYXRoLFxuICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2tzLmdldChucGMpLFxuICAgICAgb25GaW5pc2hDYWxsYmFja3MuZ2V0KG5wYylcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIG5wY0RhdGEucGF0aERhdGEgPSBkYXRhXG5cbiAgICAgIGlmIChkYXRhLnN0YXJ0aW5nUG9pbnQpIHtcbiAgICAgICAgZGF0YS5wYXRoPy5zcGxpY2UoMCwgZGF0YS5zdGFydGluZ1BvaW50IC0gMSlcbiAgICAgIH1cblxuICAgICAgbGV0IHBvcyA9IFRyYW5zZm9ybS5nZXQobnBjKS5wb3NpdGlvblxuICAgICAgcGF0aC5wdXNoKFZlY3RvcjMuY3JlYXRlKHBvcy54LCBwb3MueSwgcG9zLnopKVxuICAgICAgZGF0YS5wYXRoPy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIHBhdGgucHVzaChwKVxuICAgICAgfSlcblxuICAgICAgb25GaW5pc2hDYWxsYmFja3Muc2V0KG5wYywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb24gZmluaXNoZWQgY2FsbGJhY2snKVxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLm9uRmluaXNoQ2FsbGJhY2sgJiYgIWRhdGEubG9vcCkge1xuICAgICAgICAgIGRhdGEub25GaW5pc2hDYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgICAgc3RvcFBhdGgobnBjKVxuICAgICAgfSlcblxuICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2tzLnNldChucGMsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ29uIHBvaW50IHJlYWNoZWQgY2FsbGJhY2snKVxuICAgICAgICBsZXQgZGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgICAgICAgZGF0YS5wYXRoSW5kZXggKz0gMVxuICAgICAgICBkYXRhLm9uUmVhY2hlZFBvaW50Q2FsbGJhY2sgPyBkYXRhLm9uUmVhY2hlZFBvaW50Q2FsbGJhY2sgOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgICB3YWxrTlBDKFxuICAgICAgICBucGMsXG4gICAgICAgIG5wY0RhdGEsXG4gICAgICAgIGRhdGEucGF0aFR5cGUhLFxuICAgICAgICBkYXRhLnRvdGFsRHVyYXRpb24sXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHBvaW50UmVhY2hlZENhbGxiYWNrcy5nZXQobnBjKSxcbiAgICAgICAgb25GaW5pc2hDYWxsYmFja3MuZ2V0KG5wYylcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5wY0RhdGEubWFudWFsU3RvcCkge1xuICAgICAgICBjb25zb2xlLmxvZygnd2UgaGF2ZSBtYW51YWwgc3RvcCwgbmVlZCB0byBwaWNrIGJhY2sgdXAgd2hlcmUgd2UgbGVmdCBvZmYnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3dlIGFyZSB0cnlpbmcgdG8gZm9sbG93IGEgcGF0aCB3aXRvdXQgc3RhcnRpbmcgb25lIHByaW9yJylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fsa05QQyhcbiAgbnBjOiBFbnRpdHksXG4gIG5wY0RhdGE6IGFueSxcbiAgdHlwZTogTlBDUGF0aFR5cGUsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIHBhdGg6IFZlY3RvcjNbXSxcbiAgcG9pbnRSZWFjaGVkQ2FsbGJhY2s/OiBhbnksXG4gIGZpbmlzaGVkQ2FsbGJhY2s/OiBhbnlcbikge1xuICBpZiAoSXNGb2xsb3dpbmdQYXRoLmhhcyhucGMpKSB7XG4gICAgSXNGb2xsb3dpbmdQYXRoLmRlbGV0ZUZyb20obnBjKVxuICAgIHdhbGtpbmdUaW1lcnMuZGVsZXRlKG5wYylcbiAgfVxuICBJc0ZvbGxvd2luZ1BhdGguY3JlYXRlKG5wYylcblxuICBpZiAodHlwZSkge1xuICAgIGlmICh0eXBlID09IE5QQ1BhdGhUeXBlLlJJR0lEX1BBVEgpIHtcbiAgICAgIHBhdGhzLnN0YXJ0U3RyYWlnaHRQYXRoKFxuICAgICAgICBucGMsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZmluaXNoZWRDYWxsYmFjaygpXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aHMuc3RhcnRTbW9vdGhQYXRoKFxuICAgICAgICBucGMsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAzMCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2soKVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgcG9pbnRSZWFjaGVkQ2FsbGJhY2soKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhdGhzLnN0YXJ0U21vb3RoUGF0aChcbiAgICAgIG5wYyxcbiAgICAgIHBhdGgsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIDIwLFxuICAgICAgdHJ1ZSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgZmluaXNoZWRDYWxsYmFjaygpXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgaWYgKG5wY0RhdGEud2Fsa2luZ0FuaW0pIHtcbiAgICBjbGVhckFuaW1hdGlvblRpbWVyKG5wYylcbiAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbSwgdHJ1ZSlcbiAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbVxuICB9XG4gIG5wY0RhdGEuc3RhdGUgPSBOUENTdGF0ZS5GT0xMT1dQQVRIXG4gIG5wY0RhdGEubWFudWFsU3RvcCA9IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wV2Fsa2luZyhucGM6IEVudGl0eSwgZHVyYXRpb24/OiBudW1iZXIsIGZpbmlzaGVkPzogYm9vbGVhbikge1xuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgbnBjRGF0YS5zdGF0ZSA9IE5QQ1N0YXRlLlNUQU5ESU5HXG4gIG5wY0RhdGEubWFudWFsU3RvcCA9IHRydWVcblxuICBzdG9wUGF0aChucGMpXG5cbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgZGVsYXllZEZ1bmN0aW9uKCgpID0+IHtcbiAgICAgIGlmIChucGNEYXRhLnBhdGgpIHtcbiAgICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMobnBjLCB0cnVlKVxuICAgICAgICBpZiAobnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS53YWxraW5nQW5pbSkge1xuICAgICAgICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgICAgICAgIEFuaW1hdG9yLnBsYXlTaW5nbGVBbmltYXRpb24obnBjLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltLCB0cnVlKVxuICAgICAgICAgIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLndhbGtpbmdBbmltXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGR1cmF0aW9uID0gbnBjRGF0YS5wYXRoRGF0YS50b3RhbER1cmF0aW9uXG4gICAgICAgIGxldCBjdXJyZW50VGltZXI6IG51bWJlciA9IHdhbGtpbmdUaW1lcnMuZ2V0KG5wYykhXG4gICAgICAgIGNvbnNvbGUubG9nKCdjdXJyZW50IHRpbWUgaXMnLCBjdXJyZW50VGltZXIpXG4gICAgICAgIGlmIChjdXJyZW50VGltZXIpIHtcbiAgICAgICAgICBkdXJhdGlvbiAtPSBjdXJyZW50VGltZXJcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXRoOiBhbnlbXSA9IFtdXG4gICAgICAgIG5wY0RhdGEucGF0aERhdGEucGF0aC5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgICAgICBwYXRoLnB1c2gocClcbiAgICAgICAgfSlcbiAgICAgICAgcGF0aC5zcGxpY2UoMCwgbnBjRGF0YS5wYXRoSW5kZXgpXG5cbiAgICAgICAgbGV0IHBvcyA9IFRyYW5zZm9ybS5nZXQobnBjKS5wb3NpdGlvblxuICAgICAgICBwYXRoLnVuc2hpZnQoVmVjdG9yMy5jcmVhdGUocG9zLngsIHBvcy55LCBwb3MueikpXG5cbiAgICAgICAgLy9ucGNEYXRhLm1hbnVhbFN0b3AgPSBmYWxzZVxuICAgICAgICB3YWxrTlBDKFxuICAgICAgICAgIG5wYyxcbiAgICAgICAgICBucGNEYXRhLFxuICAgICAgICAgIG5wY0RhdGEucGF0aERhdGEucGF0aFR5cGUsXG4gICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBwb2ludFJlYWNoZWRDYWxsYmFja3MuZ2V0KG5wYyksXG4gICAgICAgICAgb25GaW5pc2hDYWxsYmFja3MuZ2V0KG5wYylcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgfSwgZHVyYXRpb24gKiAxMDAwKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUGF0aChucGM6IEVudGl0eSkge1xuICBwYXRocy5zdG9wUGF0aChucGMpXG4gIElzRm9sbG93aW5nUGF0aC5kZWxldGVGcm9tKG5wYylcblxuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgaWYgKG5wY0RhdGEud2Fsa2luZ0FuaW0pIHtcbiAgICBjbGVhckFuaW1hdGlvblRpbWVyKG5wYylcbiAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKS5pZGxlQW5pbSlcbiAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YS5pZGxlQW5pbVxuICB9XG5cbiAgaWYgKCFucGNEYXRhLm1hbnVhbFN0b3ApIHtcbiAgICBpZiAobnBjRGF0YS5wYXRoRGF0YS5sb29wKSB7XG4gICAgICBucGNEYXRhLnBhdGhJbmRleCA9IDBcbiAgICAgIHdhbGtpbmdUaW1lcnMuZGVsZXRlKG5wYylcbiAgICAgIGNvbnNvbGUubG9nKCd3ZSBhcmUgbG9vcGluZyBwYXRoJywgbnBjRGF0YSlcbiAgICAgIGZvbGxvd1BhdGgobnBjLCBucGNEYXRhLnBhdGhEYXRhKVxuICAgICAgY29uc29sZS5sb2cobnBjRGF0YSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTlBDKCkge1xuICBhY3RpdmVOUEMgPSBOVUxMX05QQ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWN0aXZlTlBDKG5wYzogRW50aXR5KSB7XG4gIGFjdGl2ZU5QQyA9IG5wY1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBY3RpdmVOcGNTZXQoKSB7XG4gIHJldHVybiBhY3RpdmVOUEMgJiYgbnBjRGlhbG9nQ29tcG9uZW50LmhhcyhhY3RpdmVOUEMpXG59XG5cbi8qKlxuICogQ2FsbHMgdGhlIE5QQydzIGFjdGl2YXRpb24gZnVuY3Rpb24gKHNldCBvbiBOUEMgZGVmaW5pdGlvbikuIElmIE5QQyBoYXMgYGZhY2VVc2VyYCA9IHRydWUsIGl0IHdpbGwgcm90YXRlIHRvIGZhY2UgdGhlIHBsYXllci4gSXQgc3RhcnRzIGEgY29vbGRvd24gY291bnRlciB0byBhdm9pZCByZWFjdGl2YXRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3RpdmF0ZShucGM6IEVudGl0eSwgb3RoZXI6IEVudGl0eSkge1xuICBpZiAoYWN0aXZlTlBDICE9IDApIHtcbiAgICBjb25zb2xlLmxvZygnd2UgaGF2ZSBhIGN1cnJlbnQgbnBjLCBuZWVkdG8gcmVtb3ZlJylcbiAgICBlbmRJbnRlcmFjdGlvbihhY3RpdmVOUEMpXG4gICAgLy8gY2xvc2VEaWFsb2coYWN0aXZlTlBDKVxuICB9XG5cbiAgYWN0aXZlTlBDID0gbnBjXG4gIG9uQWN0aXZhdGVDYnMuZ2V0KG5wYykob3RoZXIpXG5cbiAgbGV0IG5wY0RhdGEgPSBucGNEYXRhQ29tcG9uZW50LmdldChucGMpXG4gIGlmIChucGNEYXRhLmZhY2VVc2VyKSB7XG4gICAgaWYgKFRyYWNrVXNlckZsYWcuaGFzKG5wYykpIHtcbiAgICAgIFRyYWNrVXNlckZsYWcuZGVsZXRlRnJvbShucGMpXG4gICAgfVxuXG4gICAgVHJhY2tVc2VyRmxhZy5jcmVhdGUobnBjLCB7XG4gICAgICBsb2NrWFpSb3RhdGlvbjogdHJ1ZSxcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIHJvdFNwZWVkOiBucGNEYXRhLnR1cm5TcGVlZFxuICAgIH0pXG4gIH1cbiAgaXNDb29sZG93bi5zZXQobnBjLCB0cnVlKVxuICBucGNEYXRhLmluQ29vbGRvd24gPSB0cnVlXG5cbiAgZGVsYXllZEZ1bmN0aW9uKCgpID0+IFxuICAgIHtcbiAgICAgIGlzQ29vbGRvd24uZGVsZXRlKG5wYylcbiAgICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykuaW5Db29sZG93biA9IGZhbHNlXG4gICAgICBjb25zb2xlLmxvZyhcImNvb2xkb3duIGRlbGV0ZWRcIilcbiAgICB9LCAxMDAwICogbnBjRGF0YS5jb29sRG93bkR1cmF0aW9uXG4gIClcblxuICBjb25zb2xlLmxvZygnYWN0aXZhdGVkIG5wYywnLCBucGNEYXRhQ29tcG9uZW50LmdldChucGMpLCBcImNvb2xkb3duIGR1cmF0aW9uOiBcIiwgbnBjRGF0YS5jb29sRG93bkR1cmF0aW9uKVxufVxuXG5mdW5jdGlvbiBlbmRJbnRlcmFjdGlvbihucGM6IEVudGl0eSkge1xuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgbnBjRGF0YS5zdGF0ZSA9IE5QQ1N0YXRlLlNUQU5ESU5HXG5cbiAgaWYgKG5wY0RpYWxvZ0NvbXBvbmVudC5oYXMobnBjKSkge1xuICAgIC8vfSAmJiBucGNEaWFsb2dDb21wb25lbnQuZ2V0KG5wYykudmlzaWJsZSkge1xuICAgIGNsb3NlRGlhbG9nKG5wYylcbiAgfVxuXG4gIGlmIChucGNEYXRhLmZhY2VVc2VyKSB7XG4gICAgaWYgKFRyYWNrVXNlckZsYWcuaGFzKG5wYykpIHtcbiAgICAgIFRyYWNrVXNlckZsYWcuZGVsZXRlRnJvbShucGMpXG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ2VuZGluZyBpbnRlcmFjdGlvbicsIG5wY0RhdGEsIGJ1YmJsZXMuZ2V0KG5wYykpXG4gIGlmIChucGNEYXRhLmhhc0J1YmJsZSAmJiBidWJibGVzLmdldChucGMpLmlzQnViYmxlT3Blbikge1xuICAgIGNsb3NlQnViYmxlKG5wYylcbiAgfVxufVxuXG4vKipcbiAqIEVuZHMgaW50ZXJhY3Rpb24gYW5kIGNhbGxzIHRoZSBvbldhbGtBd2F5IGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVXYWxrQXdheShucGM6IEVudGl0eSwgb3RoZXI6IEVudGl0eSkge1xuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcbiAgaWYgKG5wY0RhdGEuc3RhdGUgPT0gTlBDU3RhdGUuRk9MTE9XUEFUSCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZW5kSW50ZXJhY3Rpb24obnBjKVxuXG4gIGlmIChvbldhbGtBd2F5Q2JzLmdldChucGMpKSB7XG4gICAgb25XYWxrQXdheUNicy5nZXQobnBjKShvdGhlcilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheUFuaW1hdGlvbihucGM6IEVudGl0eSwgYW5pbTogc3RyaW5nLCBub0xvb3A/OiBib29sZWFuLCBkdXJhdGlvbj86IG51bWJlcikge1xuICBsZXQgYW5pbWF0aW9ucyA9IEFuaW1hdG9yLmdldE11dGFibGUobnBjKVxuICBsZXQgbnBjRGF0YSA9IG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYylcblxuICBpZiAoIWFuaW1hdGlvbnMgfHwgIW5wY0RhdGEpIHJldHVyblxuXG4gIGlmIChhbmltYXRpb25zLnN0YXRlcyAmJiBhbmltYXRpb25zLnN0YXRlcy5maWx0ZXIoKGFuaW1hdGlvbjogUEJBbmltYXRpb25TdGF0ZSkgPT4gYW5pbWF0aW9uLmNsaXAgPT09IGFuaW0pLmxlbmd0aCA9PSAwKSB7XG4gICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGFuaW0sIGxvb3A6IG5vTG9vcCA/IGZhbHNlIDogdHJ1ZSB9KVxuICB9XG5cbiAgaWYgKG5wY0RhdGEuc3RhdGUgPT0gTlBDU3RhdGUuRk9MTE9XUEFUSCkge1xuICAgIHBhdGhzLnN0b3BQYXRoKG5wYylcbiAgfVxuXG4gIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuXG4gIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKG5wYywgdHJ1ZSlcbiAgQW5pbWF0b3IucGxheVNpbmdsZUFuaW1hdGlvbihucGMsIGFuaW0sIHRydWUpXG4gIGlmIChkdXJhdGlvbikge1xuICAgIGNvbnNvbGUubG9nKCdoYXZlIGEgZHVyYXRpb24gdG8gcGxheSBhbmltYXRpb24nKVxuICAgIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjKVxuICAgIGFuaW1UaW1lcnMuc2V0KFxuICAgICAgbnBjLFxuICAgICAgZGVsYXllZEZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgY2xlYXJBbmltYXRpb25UaW1lcihucGMpXG4gICAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKG5wYywgdHJ1ZSlcbiAgICAgICAgaWYgKG5wY0RhdGEuaWRsZUFuaW0pIHtcbiAgICAgICAgICBBbmltYXRvci5wbGF5U2luZ2xlQW5pbWF0aW9uKG5wYywgbnBjRGF0YS5pZGxlQW5pbSlcbiAgICAgICAgICBucGNEYXRhLmxhc3RQbGF5ZWRBbmltID0gbnBjRGF0YS5pZGxlQW5pbVxuICAgICAgICB9XG4gICAgICB9LCAxMDAwICogZHVyYXRpb24pXG4gICAgKVxuICB9XG4gIFxuXG4gIG5wY0RhdGEubGFzdFBsYXllZEFuaW0gPSBhbmltXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VJZGxlQW5pbShucGM6IEVudGl0eSwgYW5pbWF0aW9uOiBzdHJpbmcsIHBsYXk/OiBib29sZWFuKSB7XG4gIGxldCBucGNEYXRhID0gbnBjRGF0YUNvbXBvbmVudC5nZXQobnBjKVxuICBucGNEYXRhLmlkbGVBbmltID0gYW5pbWF0aW9uXG5cbiAgbGV0IGFuaW1hdGlvbnMgPSBBbmltYXRvci5nZXRNdXRhYmxlKG5wYylcbiAgaWYgKGFuaW1hdGlvbnMuc3RhdGVzLmZpbHRlcigoYW5pbSkgPT4gYW5pbS5jbGlwID09PSBhbmltYXRpb24pLmxlbmd0aCA9PSAwKSB7XG4gICAgYW5pbWF0aW9ucy5zdGF0ZXMucHVzaCh7IGNsaXA6IGFuaW1hdGlvbiwgbG9vcDogdHJ1ZSB9KVxuICB9XG5cbiAgaWYgKHBsYXkpIHtcbiAgICBwbGF5QW5pbWF0aW9uKG5wYywgYW5pbWF0aW9uLCB0cnVlKVxuICAgIG5wY0RhdGFDb21wb25lbnQuZ2V0KG5wYykubGFzdFBsYXllZEFuaW0gPSBhbmltYXRpb25cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFsa0J1YmJsZShucGM6IEVudGl0eSwgc2NyaXB0OiBEaWFsb2dbXSwgc3RhcnRJbmRleD86IG51bWJlciB8IHN0cmluZykge1xuICBvcGVuQnViYmxlKG5wYywgc2NyaXB0LCBzdGFydEluZGV4KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nV2luZG93KGRlZmF1bHRQb3J0cmFpdD86IEltYWdlRGF0YSwgc291bmQ/OiBzdHJpbmcpIHtcbiAgbGV0IGRpYWxvZyA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICBhZGREaWFsb2coZGlhbG9nLCBzb3VuZCwgZGVmYXVsdFBvcnRyYWl0KVxuICByZXR1cm4gZGlhbG9nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGlhbG9nV2luZG93KG5wYzogRW50aXR5LCBkaWFsb2c6IERpYWxvZ1tdLCBzdGFydEluZGV4PzogbnVtYmVyIHwgc3RyaW5nKSB7XG4gIGFjdGl2ZU5QQyA9IG5wY1xuXG4gIGlmIChucGNEaWFsb2dDb21wb25lbnQuaGFzKG5wYykpIHtcbiAgICBsZXQgaW5kZXg6IGFueVxuICAgIGlmICghc3RhcnRJbmRleCkge1xuICAgICAgaW5kZXggPSAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhcnRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gc3RhcnRJbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IGZpbmREaWFsb2dCeU5hbWUoZGlhbG9nLCBzdGFydEluZGV4KVxuICAgIH1cbiAgICBvcGVuRGlhbG9nKG5wYywgZGlhbG9nLCBpbmRleClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VEaWFsb2dXaW5kb3cod2luZG93OiBFbnRpdHkpIHtcbiAgbGV0IGRpYWxvZyA9IG5wY0RpYWxvZ0NvbXBvbmVudC5nZXQod2luZG93KVxuICBpZiAod2luZG93KSB7XG4gICAgY2xvc2VEaWFsb2coZGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyQW5pbWF0aW9uVGltZXIobnBjOiBFbnRpdHkpOiBib29sZWFuIHtcbiAgaWYgKGFuaW1UaW1lcnMuaGFzKG5wYykpIHtcbiAgICBjbGVhckRlbGF5ZWRGdW5jdGlvbihhbmltVGltZXJzLmdldChucGMpKVxuICAgIGFuaW1UaW1lcnMuZGVsZXRlKG5wYylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuIl19
package/dist/npcData.d.ts CHANGED
@@ -10,4 +10,5 @@ export declare const NPCDataComponent: import("@dcl/sdk/ecs").MapComponentDefini
10
10
  idleAnim: import("@dcl/sdk/ecs").ISchema<string>;
11
11
  lastPlayedAnim: import("@dcl/sdk/ecs").ISchema<string>;
12
12
  path: import("@dcl/sdk/ecs").ISchema<import("@dcl/sdk/ecs").Vector3Type[]>;
13
+ volume: import("@dcl/sdk/ecs").ISchema<number>;
13
14
  }>>;
package/dist/npcData.js CHANGED
@@ -10,6 +10,7 @@ export const NPCDataComponent = engine.defineComponent('npcdatacomponent', {
10
10
  walkingAnim: Schemas.String,
11
11
  idleAnim: Schemas.String,
12
12
  lastPlayedAnim: Schemas.String,
13
- path: Schemas.Array(Schemas.Vector3)
13
+ path: Schemas.Array(Schemas.Vector3),
14
+ volume: Schemas.Number
14
15
  });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ucGNEYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7SUFDekUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0lBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTztJQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTTtJQUNoQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDekIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTTtJQUM1QixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDckIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQzNCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTTtJQUN4QixjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDOUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNyQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWFzLCBlbmdpbmUgfSBmcm9tICdAZGNsL3Nkay9lY3MnXG5leHBvcnQgY29uc3QgTlBDRGF0YUNvbXBvbmVudCA9IGVuZ2luZS5kZWZpbmVDb21wb25lbnQoJ25wY2RhdGFjb21wb25lbnQnLCB7XG4gIGludHJvZHVjZWQ6IFNjaGVtYXMuQm9vbGVhbixcbiAgaW5Db29sZG93bjogU2NoZW1hcy5Cb29sZWFuLFxuICBjb29sRG93bkR1cmF0aW9uOiBTY2hlbWFzLk51bWJlcixcbiAgZmFjZVVzZXI6IFNjaGVtYXMuQm9vbGVhbixcbiAgd2Fsa2luZ1NwZWVkOiBTY2hlbWFzLk51bWJlcixcbiAgYnViYmxlSGVpZ2h0OiBTY2hlbWFzLk51bWJlcixcbiAgc3RhdGU6IFNjaGVtYXMuU3RyaW5nLFxuICB3YWxraW5nQW5pbTogU2NoZW1hcy5TdHJpbmcsXG4gIGlkbGVBbmltOiBTY2hlbWFzLlN0cmluZyxcbiAgbGFzdFBsYXllZEFuaW06IFNjaGVtYXMuU3RyaW5nLFxuICBwYXRoOiBTY2hlbWFzLkFycmF5KFNjaGVtYXMuVmVjdG9yMylcbn0pXG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ucGNEYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7SUFDekUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0lBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTztJQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTTtJQUNoQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDekIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTTtJQUM1QixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDckIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQzNCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTTtJQUN4QixjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDOUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Q0FDdkIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hcywgZW5naW5lIH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuZXhwb3J0IGNvbnN0IE5QQ0RhdGFDb21wb25lbnQgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KCducGNkYXRhY29tcG9uZW50Jywge1xuICBpbnRyb2R1Y2VkOiBTY2hlbWFzLkJvb2xlYW4sXG4gIGluQ29vbGRvd246IFNjaGVtYXMuQm9vbGVhbixcbiAgY29vbERvd25EdXJhdGlvbjogU2NoZW1hcy5OdW1iZXIsXG4gIGZhY2VVc2VyOiBTY2hlbWFzLkJvb2xlYW4sXG4gIHdhbGtpbmdTcGVlZDogU2NoZW1hcy5OdW1iZXIsXG4gIGJ1YmJsZUhlaWdodDogU2NoZW1hcy5OdW1iZXIsXG4gIHN0YXRlOiBTY2hlbWFzLlN0cmluZyxcbiAgd2Fsa2luZ0FuaW06IFNjaGVtYXMuU3RyaW5nLFxuICBpZGxlQW5pbTogU2NoZW1hcy5TdHJpbmcsXG4gIGxhc3RQbGF5ZWRBbmltOiBTY2hlbWFzLlN0cmluZyxcbiAgcGF0aDogU2NoZW1hcy5BcnJheShTY2hlbWFzLlZlY3RvcjMpLFxuICB2b2x1bWU6IFNjaGVtYXMuTnVtYmVyXG59KVxuIl19
package/dist/types.d.ts CHANGED
@@ -78,6 +78,7 @@ export type NPCData = {
78
78
  pathData?: FollowPathData;
79
79
  bubbleXOffset?: number;
80
80
  bubbleYOffset?: number;
81
+ volume: any;
81
82
  };
82
83
  export type FollowPathData = {
83
84
  startingPoint?: number;