dcl-npc-toolkit 1.0.7 → 1.0.8-20230518180318.commit-964a61e

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/README.md CHANGED
@@ -27,107 +27,9 @@ Capabilities of the NPCs in this library:
27
27
 
28
28
  The dialog messages can also require that the player chooses options, and any action can be triggered when the player picks an option or advances past a message.
29
29
 
30
- ## Using the UI utils library
31
-
32
-
33
-
34
- To use any of the helpers provided by the utils library you must install it in your Decentrland project.
35
-
36
-
37
-
38
- ### Via the Decentraland Editor
39
-
40
-
41
-
42
- Make sure you've [installed the Decentraland editor](https://docs.decentraland.org/creator/development-guide/sdk7/installation-guide/#the-decentraland-editor).
43
-
44
-
45
-
46
- 1) Open your scene's folder using Visual Studio Code.
47
-
48
-
49
-
50
- > **📔 Note**: The Visual Studio window must be at the root folder of the scene project.
51
-
52
- 2) Open the Decentraland Editor tab on Visual Studio. Note that the bottom section lists all of your project's currently installed dependencies.
53
-
54
-
55
-
56
- 3) Click the `+` icon on the header of the **Dependencies** view.
57
-
58
-
59
-
60
- 4) Visual Studio opens an input box at the top of the screen. Write `@dcl-sdk/npc-utils` and hit enter. The dependency is then installed to your scene.
61
-
62
-
63
-
64
-
65
- 5. Import the library into the scene's script. Add this line at the start of your `index.ts` file, or any other TypeScript files that require it:
66
-
67
-
68
-
69
- ```ts
70
-
71
- import * as npc from '@dcl-sdk/npc-utils'
72
-
73
- ```
74
-
75
-
76
-
77
- 6. In your TypeScript file, call the `create` function passing it a `TransformType` and a `NPCData` object. The `NPCData` object requires a minimum of a `NPCType` and a function to trigger when the NPC is activated:
78
-
79
-
80
-
81
- ```ts
82
-
83
- export let myNPC = npc.create({position: Vector3.create(8,0,8),rotation:Quaternion.Zero(), scale: Vector3.create(1,1,1)},
84
-
85
- //NPC Data Object
86
-
87
- {
88
-
89
- type: npc.NPCType.CUSTOM,
90
-
91
- model: 'models/npc.glb',
92
-
93
- onActivate:()=>{console.log('npc activated');}
94
-
95
- }
96
-
97
- )
98
-
99
- ```
100
-
101
-
102
-
103
- 7. Write a dialog script for your character, preferably on a separate file, making it of type `Dialog[]`.
104
-
105
-
106
-
107
- ```ts
108
-
109
- import { Dialog } from '@dcl-sdk/npc-utils'
110
-
111
-
112
-
113
- export let ILoveCats: Dialog[] = [
114
-
115
- {
116
-
117
- text: `I really lo-ove cats`,
118
-
119
- isEndOfDialog: true
120
-
121
- }
122
-
123
- ]
124
-
125
- ```
126
-
127
-
128
30
 
129
31
 
130
- ### Via the CLI
32
+ To use NPCs in your scene:
131
33
 
132
34
 
133
35
 
@@ -137,23 +39,23 @@ isEndOfDialog: true
137
39
 
138
40
  ```
139
41
 
140
- npm i @dcl-sdk/npc-utils
42
+ npm i dcl-npc-toolkit -B
141
43
 
142
44
  ```
143
45
 
144
46
 
145
47
 
146
- 2. Run `npm run start` or `npm run build` so the dependencies are correctly installed.
48
+ 2. Run `dcl start` or `dcl build` so the dependencies are correctly installed.
147
49
 
148
50
 
149
51
 
150
- 3. Import the library into the scene's script. Add this line at the start of your `index.ts` file, or any other TypeScript files that require it:
52
+ 3. Import the library into the scene's script. Add this line at the start of your `game.ts` file, or any other TypeScript files that require it:
151
53
 
152
54
 
153
55
 
154
56
  ```ts
155
57
 
156
- import * as npc from '@dcl-sdk/npc-utils'
58
+ import * as npc from 'dcl-npc-toolkit'
157
59
 
158
60
  ```
159
61
 
@@ -191,7 +93,7 @@ onActivate:()=>{console.log('npc activated');}
191
93
 
192
94
  ```ts
193
95
 
194
- import { Dialog } from '@dcl-sdk/npc-utils'
96
+ import { Dialog } from 'dcl-npc-toolkit'
195
97
 
196
98
 
197
99
 
@@ -316,8 +218,6 @@ To configure other properties of an NPC, add a fourth argument as an `NPCData` o
316
218
  - `walkingSpeed`: _(number)_ Speed of the NPC when walking. By default _2_.
317
219
 
318
220
  - `path`: _(Vector3)_ Default path to walk. If a value is provided for this field on NPC initialization, the NPC will walk over this path in loop from the start.
319
- - `bubbleHeight`: _(number)_ The height at which to display the speech bubble above the head of the NPC.
320
- - `textBubble`: _(boolean)_ If true, NPC starts with a speech bubble object ready to be accessed from the start. Otherwise, they text bubble is only built on the first call to `talkBubble()` on the NPC.
321
221
 
322
222
  - `noUI`: _(boolean)_ If true, no UI object is built for UI dialogs for this NPC. This may help optimize the scene if this feature is not used.
323
223
 
@@ -433,33 +333,6 @@ npc.talk(myNPC,myScript, 0)
433
333
 
434
334
  Learn how to build a script object for NPCs in a section below.
435
335
 
436
- ### Speech Bubbles
437
-
438
- Besides the UI dialog window, NPCs can show speech bubbles over their heads. This alternative is less invasive to the player, but also non-interactive. Players can't alter the pace of the conversation or provide answers to questions.
439
-
440
- For an NPC to talk with bubbles:
441
-
442
- ```ts
443
- npc.talkBubble(myNPC, myScript, 0)
444
- ```
445
-
446
- The function takes the following **required** parameter:
447
- - `npc`: _(Entity)_ The NPC you would like to talk.
448
-
449
- - `script`: _(Dialog[])_ This array contains the information to manage the conversation, including events that may be triggered, options to choose, etc.
450
-
451
- It can also take the following optional parameters:
452
-
453
- - `startIndex`: _(number | string)_ The _Dialog_ object from the `script` array to open first. By default this is _0_, the first element of the array. Pass a number to open the entry on a given array position, or pass a string to open the entry with a `name` property matching that string.
454
-
455
- To interrupt the flow of an NPC's dialog windows, you can either:
456
-
457
- - Run `npc.endInteraction(myNPC)` on the NPC
458
- - Run `npc.closeBubble(myNPC)` on the NPC's `bubble` object
459
- - Run `npc.closeBubbleEndAll(myNPC)` on the NPC's `bubble` object
460
-
461
- The first two options keep running any `triggeredByNext()` functions associated to the dialogs being shown on the bubble, the third option prevents running these.
462
-
463
336
 
464
337
 
465
338
  ### Play Animations
@@ -1208,8 +1081,91 @@ isEndOfDialog: true
1208
1081
  ```
1209
1082
 
1210
1083
 
1084
+ ## No-NPC Dialogs
1085
+
1086
+
1087
+
1088
+ You can open a Dialog window that isn't associated with any `NPC` object in the scene. The `openDialogWindow()` function has all the same functionality as calling the `talk()` function on an NPC, but may be more practical in scenarios where a character isn't physically there, or where the conversation isn't with a particular character.
1089
+
1090
+
1091
+
1092
+ ### The Dialog window
1093
+
1094
+
1095
+
1096
+ To create a new dialog window, call `createDialogWindow()` and store as a variable. This will instantiate the window but keep it hidden until you open it.
1097
+
1098
+ ```ts
1099
+
1100
+ let dialogWindow = npc.createDialogWindow()
1101
+
1102
+ ```
1103
+
1104
+
1105
+ <img src="screenshots/NPC1.png" width="500">
1106
+
1107
+
1108
+ When instantiating a new blank dialog, you can pass the following optional parameters:
1109
+
1110
+
1111
+ - `defaultPortrait`: Sets a default portrait image to use on the left of all dialogs that don't specify an image. If a dialog has no portrait and no default is provided, no image is shown on the left. This field expects a `Portrait` object, that may include the following fields: - `path`: Path to the image file - `xOffset`: Offset on X, relative to the normal position of the portrait. - `yOffset`: Offset on Y, relative to the normal position of the portrait. - `section`: Use only a section of the image file, useful when arranging multiple icons into an image atlas. This field takes an `ImageSection` object, specifying `sourceWidth` and `sourceHeight`, and optionally also `sourceLeft` and `sourceTop`.
1112
+
1113
+ - `useDarkTheme`: Switch the style of the window to the dark theme.
1114
+
1115
+ - `sound`: Path to a sound file that will be played once for every dialog entry shown, as long as the dialog entry doesn't have its own `audio` property.
1116
+
1117
+
1118
+
1119
+ Once you have created a dialog window, you can open a dialog window with the `openDialogWindow()` function.
1120
+
1121
+
1122
+
1123
+ ```ts
1124
+
1125
+ npc.openDialogWindow(dialogWindow, NPCTalk, 0)
1126
+
1127
+ ```
1128
+
1129
+
1130
+
1131
+ When calling this function, you must specify:
1132
+
1133
+
1134
+
1135
+ - `NPCScript`: A JSON object composed of an array of `Dialog` objects, that includes all the dialog tree.
1136
+
1137
+
1138
+
1139
+ A second optional parameter is also available:
1140
+
1141
+
1142
+
1143
+ - `textId`: The index or `name` property of the entry to show first from the script. The first entry is 0.
1144
+
1145
+
1146
+
1147
+ > TIP: It's always better to refer to an entry by name, since the array index might shift if you add more entries and it can get hard to keep track of these references.
1148
+
1149
+
1150
+
1151
+ Close a dialog window at any time by calling the `closeDialogWindow()` function.
1152
+
1153
+
1154
+
1155
+ ```ts
1156
+
1157
+ npc.closeDialogWindow(dialogWindow)
1158
+
1159
+ ```
1160
+
1161
+
1162
+
1163
+ For details on how to construct the dialog tree, see the sections above. The required `NPCScript` by the `DialogWindow` has exactly the same characteristics as the one used on the `NPC` object when calling the `talk()` function.
1164
+
1211
1165
 
1212
1166
 
1167
+ ---
1168
+
1213
1169
  ## Contribute
1214
1170
 
1215
1171
 
@@ -1224,7 +1180,7 @@ In order to test changes made to this repository in active scenes, do the follow
1224
1180
 
1225
1181
  3. On a new Decentraland scene, import this library as you normally would and include the tests you need
1226
1182
 
1227
- 4. On the scene directory, run `npm link @dcl-sdk/npc-utils`
1183
+ 4. On the scene directory, run `npm link dcl-npc-toolkit`
1228
1184
 
1229
1185
 
1230
1186
 
package/dist/bubble.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AudioSource, Billboard, engine, Material, MeshRenderer, TextShape, Transform, VisibilityComponent } from '@dcl/sdk/ecs';
2
2
  import { Color4, Vector3 } from '@dcl/sdk/math';
3
- import { addLineBreaks } from './dialog';
3
+ import { addLineBreak } from './dialog';
4
4
  import { IsTypingBubble } from './components';
5
5
  export let bubblesTexture = 'https://decentraland.org/images/ui/dialog-bubbles.png';
6
6
  export let bubbles = new Map();
@@ -90,7 +90,7 @@ export function createDialogBubble(npc, height, sound) {
90
90
  }
91
91
  export function openBubble(npc, dialog, start) {
92
92
  let bubble = bubbles.get(npc);
93
- bubble.script = addLineBreaks(dialog, true);
93
+ bubble.script = dialog.slice();
94
94
  bubble.index = start ? start : 0;
95
95
  let currentText = dialog[bubble.index] ? dialog[bubble.index] : { text: '' };
96
96
  bubble.currentText = currentText;
@@ -129,22 +129,20 @@ export function openBubble(npc, dialog, start) {
129
129
  }
130
130
  export function closeBubble(npc) {
131
131
  let bubble = bubbles.get(npc);
132
- if (bubble.isBubbleOpen) {
133
- bubble.isBubbleOpen = false;
134
- bubble.typing = false;
135
- bubble.visibleText = "";
136
- bubble.visibleChars = 0;
137
- bubble.fullText = "";
138
- bubble.timer = 0;
139
- bubble.index = 0;
140
- bubble.script = [];
141
- bubble.buttons = 0;
142
- bubble.margin = 0;
143
- bubble.currentText = null;
144
- TextShape.getMutable(bubble.text).text = "";
145
- VisibilityComponent.getMutable(bubble.text).visible = false;
146
- VisibilityComponent.getMutable(bubble.panel).visible = false;
147
- }
132
+ bubble.isBubbleOpen = false;
133
+ bubble.typing = false;
134
+ bubble.visibleText = "";
135
+ bubble.visibleChars = 0;
136
+ bubble.fullText = "";
137
+ bubble.timer = 0;
138
+ bubble.index = 0;
139
+ bubble.script = [];
140
+ bubble.buttons = 0;
141
+ bubble.margin = 0;
142
+ bubble.currentText = null;
143
+ TextShape.getMutable(bubble.text).text = "";
144
+ VisibilityComponent.getMutable(bubble.text).visible = false;
145
+ VisibilityComponent.getMutable(bubble.panel).visible = false;
148
146
  }
149
147
  export function closeBubbleEndAll(npc) {
150
148
  let bubble = bubbles.get(npc);
@@ -157,7 +155,7 @@ const DEFAULT_SPEED = 45;
157
155
  const DEFAULT_TIME_ON = 3;
158
156
  function beginTyping(npc, text, textId, timeOn, speed) {
159
157
  let dialogData = bubbles.get(npc);
160
- dialogData.fullText = dialogData.script[dialogData.index].text;
158
+ dialogData.fullText = addLineBreak(dialogData.script[dialogData.index].text, true);
161
159
  dialogData.typing = true;
162
160
  dialogData.done = false;
163
161
  dialogData.visibleText = "";
@@ -258,28 +256,29 @@ function layoutDialogWindow(npc, textId) {
258
256
  }
259
257
  }
260
258
  export function next(npc) {
261
- console.log('next text');
262
259
  let bubble = bubbles.get(npc);
263
- let currentText = bubble.script[bubble.index];
264
- if (!currentText) {
265
- currentText = bubble.script[bubble.index - 1];
266
- }
267
- if (currentText.triggeredByNext) {
268
- currentText.triggeredByNext();
269
- }
270
- if (currentText.isEndOfDialog) {
271
- closeBubble(npc);
272
- return;
273
- }
274
- bubble.index++;
275
- currentText = bubble.script[bubble.index];
276
- if (currentText.text.length < maxLengthHugeBubble) {
277
- currentText.text.slice(0, maxLengthHugeBubble);
260
+ if (bubble.isBubbleOpen) {
261
+ let currentText = bubble.script[bubble.index];
262
+ if (!currentText) {
263
+ currentText = bubble.script[bubble.index - 1];
264
+ }
265
+ if (currentText.triggeredByNext) {
266
+ currentText.triggeredByNext();
267
+ }
268
+ if (currentText.isEndOfDialog) {
269
+ closeBubble(npc);
270
+ return;
271
+ }
272
+ bubble.index++;
273
+ currentText = bubble.script[bubble.index];
274
+ if (currentText.text.length < maxLengthHugeBubble) {
275
+ currentText.text.slice(0, maxLengthHugeBubble);
276
+ }
277
+ TextShape.getMutable(bubble.text).text = "";
278
+ adjustBubble(npc, currentText.text.length);
279
+ beginTyping(npc, currentText.text, bubble.index, currentText.timeOn ? currentText.timeOn : undefined, currentText.typeSpeed ? currentText.typeSpeed : undefined);
280
+ layoutDialogWindow(npc, bubble.index);
278
281
  }
279
- TextShape.getMutable(bubble.text).text = "";
280
- adjustBubble(npc, currentText.text.length);
281
- beginTyping(npc, currentText.text, bubble.index, currentText.timeOn ? currentText.timeOn : undefined, currentText.typeSpeed ? currentText.typeSpeed : undefined);
282
- layoutDialogWindow(npc, bubble.index);
283
282
  }
284
283
  function setUVSection(section, sizeX, sizeY) {
285
284
  return setUVs({ x: section.sourceLeft / sizeX, y: (sizeY - section.sourceTop - section.sourceHeight) / sizeY }, { x: (section.sourceLeft + section.sourceWidth) / sizeX, y: (sizeY - section.sourceTop - section.sourceHeight) / sizeY }, { x: (section.sourceLeft + section.sourceWidth) / sizeX, y: (sizeY - section.sourceTop) / sizeY }, { x: section.sourceLeft / sizeX, y: (sizeY - section.sourceTop) / sizeY });
@@ -344,24 +343,4 @@ export function getBubbleTextLength(text) {
344
343
  return 40;
345
344
  }
346
345
  }
347
- function setUVs2(rows, cols) {
348
- return [
349
- 0,
350
- 0,
351
- cols,
352
- 0,
353
- cols,
354
- rows,
355
- 0,
356
- rows,
357
- cols,
358
- 0,
359
- 0,
360
- 0,
361
- 0,
362
- rows,
363
- cols,
364
- rows,
365
- ];
366
- }
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1YmJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVksV0FBVyxFQUFlLFNBQVMsRUFBaUIsTUFBTSxFQUEyQyxRQUFRLEVBQWMsWUFBWSxFQUFtQyxTQUFTLEVBQUMsU0FBUyxFQUFpQixtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxUSxPQUFPLEVBQVMsTUFBTSxFQUFjLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFN0MsTUFBTSxDQUFDLElBQUksY0FBYyxHQUFHLHVEQUF1RCxDQUFBO0FBRW5GLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUVoRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDaEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO0FBRWhCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO0FBQzVCLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFBO0FBQzlCLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFBO0FBQzVCLElBQUksbUJBQW1CLEdBQUcsR0FBRyxDQUFBO0FBRTdCLElBQUksa0JBQWtCLEdBQUcsR0FBRyxDQUFBO0FBQzVCLElBQUksbUJBQW1CLEdBQUcsR0FBRyxDQUFBO0FBQzdCLElBQUksaUJBQWlCLEdBQUcsR0FBRyxDQUFBO0FBQzNCLElBQUksaUJBQWlCLEdBQUcsR0FBRyxDQUFBO0FBRTNCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUE7QUFDN0IsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsQ0FBQTtBQUM5QixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUN6QixJQUFJLGlCQUFpQixH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STtRQUNKLElBQUk7UUFFSixDQUFDO1FBQ0QsSUFBSTtRQUdKLElBQUk7UUFDSixDQUFDO1FBRUQsQ0FBQztRQUNELENBQUM7UUFFRCxDQUFDO1FBQ0QsSUFBSTtRQUVKLElBQUk7UUFDSixJQUFJO0tBQ0wsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFuaW1hdG9yLCBBdWRpb1NvdXJjZSwgQXZhdGFyU2hhcGUsIEJpbGxib2FyZCwgQmlsbGJvYXJkTW9kZSwgZW5naW5lLCBFbnRpdHksIEZvbnQsIEdsdGZDb250YWluZXIsIElucHV0QWN0aW9uLE1hdGVyaWFsLE1lc2hDb2xsaWRlcixNZXNoUmVuZGVyZXIscG9pbnRlckV2ZW50c1N5c3RlbSxUZXh0QWxpZ25Nb2RlLFRleHRTaGFwZSxUcmFuc2Zvcm0sIFRyYW5zZm9ybVR5cGUsIFZpc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICdAZGNsL3Nkay9lY3MnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAZGNsLXNkay91dGlscydcbmltcG9ydCB7IERpYWxvZywgSW1hZ2VTZWN0aW9uIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IENvbG9yMyxDb2xvcjQsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgYWRkTGluZUJyZWFrcyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgSXNUeXBpbmdCdWJibGUgfSBmcm9tICcuL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBsZXQgYnViYmxlc1RleHR1cmUgPSAnaHR0cHM6Ly9kZWNlbnRyYWxhbmQub3JnL2ltYWdlcy91aS9kaWFsb2ctYnViYmxlcy5wbmcnXG5cbmV4cG9ydCBsZXQgYnViYmxlczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuXG5sZXQgdGV4dFNpemUgPSAxXG5sZXQgdGV4dFlQb3MgPSAwICAgIFxuXG5sZXQgbWF4TGVuZ3RoU2hvcnRCdWJibGUgPSA4XG5sZXQgbWF4TGVuZ3RoTm9ybWFsQnViYmxlID0gMjVcbmxldCBtYXhMZW5ndGhMb25nQnViYmxlID0gNTBcbmxldCBtYXhMZW5ndGhIdWdlQnViYmxlID0gMTAwXG5cbmxldCBzaG9ydEJ1YmJsZVhPZmZzZXQgPSAwLjFcbmxldCBub3JtYWxCdWJibGVYT2Zmc2V0ID0gMC41XG5sZXQgbG9uZ0J1YmJsZVhPZmZzZXQgPSAwLjhcbmxldCBodWdlQnViYmxlWE9mZnNldCA9IDAuOFxuXG5sZXQgc2hvcnRCdWJibGVZT2Zmc2V0ID0gLTAuMlxubGV0IG5vcm1hbEJ1YmJsZVlPZmZzZXQgPSAtMC4yXG5sZXQgbG9uZ0J1YmJsZVlPZmZzZXQgPSAwXG5sZXQgaHVnZUJ1YmJsZVlPZmZzZXQgPSAwLjJcblxubGV0IHNob3J0QnViYmxlVGV4dFdpZHRoID0gMC43XG5sZXQgbm9ybWFsQnViYmxlVGV4dFdpZHRoID0gMS41XG5sZXQgbG9uZ0J1YmJsZVRleHRXaWR0aCA9IDJcbmxldCBodWdlQnViYmxlVGV4dFdpZHRoID0gMS41XG5cbmxldCBzaG9ydEJ1YmJsZVggPSAxMTYgKiAwLjAwNVxubGV0IHNob3J0QnViYmxlWSA9IDg0ICogMC4wMDVcblxubGV0IG5vcm1hbEJ1YmJsZVggPSAyODYgKiAwLjAwNVxubGV0IG5vcm1hbEJ1YmJsZVkgPSA4NCAqIDAuMDA1XG5cbmxldCBsb25nQnViYmxlWCA9IDQ5NyAqIDAuMDA1XG5sZXQgbG9uZ0J1YmJsZVkgPSAxNTMgKiAwLjAwNVxuXG5sZXQgaHVnZUJ1YmJsZVggPSA0OTcgKiAwLjAwNVxubGV0IGh1Z2VCdWJibGVZID0gMjM5ICogMC4wMDVcblxubGV0IGRlZmF1bHRZT2Zmc2V0ID0gMi41XG5cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nQnViYmxlKG5wYzpFbnRpdHksIGhlaWdodD86bnVtYmVyLCBzb3VuZD86c3RyaW5nKXtcbiAgICBsZXQgYmFzZVlPZmZzZXQgPSBoZWlnaHQgPyBoZWlnaHQgOiBkZWZhdWx0WU9mZnNldFxuXG4gICAgbGV0IHJvb3QgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBCaWxsYm9hcmQuY3JlYXRlKHJvb3Qse1xuICAgICAgICBiaWxsYm9hcmRNb2RlOkJpbGxib2FyZE1vZGUuQk1fWVxuICAgIH0pXG5cbiAgICBUcmFuc2Zvcm0uY3JlYXRlKHJvb3Qse1xuICAgICAgICBwYXJlbnQ6bnBjXG4gICAgfSlcblxuICAgIGxldCBjb250YWluZXIgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBUcmFuc2Zvcm0uY3JlYXRlKGNvbnRhaW5lcix7XG4gICAgICAgIHBhcmVudDpyb290LFxuICAgICAgICBwb3NpdGlvbjpWZWN0b3IzLmNyZWF0ZShzaG9ydEJ1YmJsZVhPZmZzZXQsYmFzZVlPZmZzZXQsMClcbiAgICB9KVxuXG4gICAgbGV0IHBhbmVsID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZShwYW5lbCx7XG4gICAgICAgIHBhcmVudDpjb250YWluZXIsXG4gICAgICAgIHNjYWxlOiBWZWN0b3IzLmNyZWF0ZSgyLDEsMSksXG4gICAgICAgIC8vcm90YXRpb246UXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKDAsMCw5MClcbiAgICB9KVxuICAgIE1lc2hSZW5kZXJlci5zZXRQbGFuZShwYW5lbCxcbiAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICBidWJibGVPcHRpb25zLm5vcm1hbCxcbiAgICAgICAgMTAyNCxcbiAgICAgICAgMTAyNFxuICAgICAgKSlcblxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHBhbmVsLCB7dmlzaWJsZTogZmFsc2V9KVxuXG4gICAgTWF0ZXJpYWwuc2V0QmFzaWNNYXRlcmlhbChwYW5lbCwge1xuICAgICAgICB0ZXh0dXJlOiBNYXRlcmlhbC5UZXh0dXJlLkNvbW1vbih7XG4gICAgICAgICAgc3JjOiBidWJibGVzVGV4dHVyZVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgIGxldCB0ZXh0ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZSh0ZXh0LHtcbiAgICAgICAgcG9zaXRpb246VmVjdG9yMy5jcmVhdGUoMCx0ZXh0WVBvcywgLS4wNSksXG4gICAgICAgIHBhcmVudDpjb250YWluZXJcbiAgICB9KVxuICAgIFRleHRTaGFwZS5jcmVhdGUodGV4dCwge1xuICAgICAgICB0ZXh0OlwiXCIsIFxuICAgICAgICBmb250U2l6ZTp0ZXh0U2l6ZSxcbiAgICAgICAgZm9udDogRm9udC5GX1NBTlNfU0VSSUYsXG4gICAgICAgIHRleHRDb2xvcjogQ29sb3I0LmNyZWF0ZSgwLDAsMCwxKSxcbiAgICAgICAgdGV4dEFsaWduOlRleHRBbGlnbk1vZGUuVEFNX01JRERMRV9DRU5URVJcbiAgICB9KVxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHRleHQsIHt2aXNpYmxlOiBmYWxzZX0pXG5cbiAgICBidWJibGVzLnNldChucGMsIHtcbiAgICAgICAgY29udGFpbmVyOmNvbnRhaW5lcixcbiAgICAgICAgcGFuZWw6cGFuZWwsXG4gICAgICAgIHRleHQ6dGV4dCxcbiAgICAgICAgYmFzZVlPZmZzZXQ6IGJhc2VZT2Zmc2V0LFxuICAgICAgICBpc0J1YmJsZU9wZW46ZmFsc2UsXG4gICAgICAgIHR5cGluZzpmYWxzZSxcbiAgICAgICAgdmlzaWJsZVRleHQ6XCJcIixcbiAgICAgICAgdmlzaWJsZUNoYXJzOjAsXG4gICAgICAgIGZ1bGxUZXh0OlwiXCIsXG4gICAgICAgIHRpbWVyOjAsXG4gICAgICAgIHNwZWVkOjMwLFxuICAgICAgICBzY3JpcHQ6W10sXG4gICAgICAgIGluZGV4OjAsXG4gICAgICAgIHNvdW5kOiBzb3VuZCA/IHNvdW5kIDogdW5kZWZpbmVkLFxuICAgICAgICBzb3VuZFBsYXllcjogc291bmQgPyBlbmdpbmUuYWRkRW50aXR5KCkgOiB1bmRlZmluZWQsXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5CdWJibGUobnBjOkVudGl0eSwgZGlhbG9nOkRpYWxvZ1tdLCBzdGFydD86bnVtYmVyKXtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuXG4gICAgYnViYmxlLnNjcmlwdCA9IGFkZExpbmVCcmVha3MoZGlhbG9nLCB0cnVlKVxuICAgIGJ1YmJsZS5pbmRleCA9IHN0YXJ0ID8gc3RhcnQgOiAwXG4gICAgXG4gICAgbGV0IGN1cnJlbnRUZXh0OiBEaWFsb2cgPSBkaWFsb2dbYnViYmxlLmluZGV4XSA/IGRpYWxvZ1tidWJibGUuaW5kZXhdIDogeyB0ZXh0OiAnJyB9XG4gICAgYnViYmxlLmN1cnJlbnRUZXh0ID0gY3VycmVudFRleHRcblxuICAgIGlmIChjdXJyZW50VGV4dC5hdWRpbykge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGJ1YmJsZS5zb3VuZFBsYXllcilcbiAgICAgICAgYXVkaW8udm9sdW1lID0gMC41XG4gICAgICAgIGF1ZGlvLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChidWJibGUuc291bmQpIHtcbiAgICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGJ1YmJsZS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBidWJibGUuc291bmQsXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9XG5cbiAgICBsZXQgdGV4dCA9IGJ1YmJsZS50ZXh0XG4gICAgVGV4dFNoYXBlLmdldE11dGFibGUodGV4dCkuZm9udFNpemUgPSBjdXJyZW50VGV4dC5mb250U2l6ZSA/IGN1cnJlbnRUZXh0LmZvbnRTaXplIDogdGV4dFNpemVcbiAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZSh0ZXh0KS5wb3NpdGlvbi55ID0gY3VycmVudFRleHQub2Zmc2V0WSA/IGN1cnJlbnRUZXh0Lm9mZnNldFkgKyB0ZXh0WVBvcyA6IHRleHRZUG9zXG4gICAgVHJhbnNmb3JtLmdldE11dGFibGUodGV4dCkucG9zaXRpb24ueCA9IGN1cnJlbnRUZXh0Lm9mZnNldFggPyBjdXJyZW50VGV4dC5vZmZzZXRYIDogMFxuXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkudmlzaWJsZSA9IHRydWVcblxuICAgIGlmIChjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aCA8IG1heExlbmd0aEh1Z2VCdWJibGUpIHtcbiAgICAgICAgY3VycmVudFRleHQudGV4dC5zbGljZSgwLCBtYXhMZW5ndGhIdWdlQnViYmxlKVxuICAgICAgfVxuXG4gICAgYmVnaW5UeXBpbmcoXG4gICAgICAgIG5wYyxcbiAgICAgICAgY3VycmVudFRleHQudGV4dCxcbiAgICAgICAgYnViYmxlLmluZGV4LFxuICAgICAgICBjdXJyZW50VGV4dC50aW1lT24gPyBjdXJyZW50VGV4dC50aW1lT24gOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA/IGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA6IHVuZGVmaW5lZCBcbiAgICApXG5cbiAgICBhZGp1c3RCdWJibGUobnBjLCBjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aClcbiAgICBsYXlvdXREaWFsb2dXaW5kb3cobnBjLCBidWJibGUuaW5kZXgpXG4gICAgYnViYmxlLmlzQnViYmxlT3BlbiA9IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQnViYmxlKG5wYzpFbnRpdHkpe1xuICAgIGxldCBidWJibGUgPSBidWJibGVzLmdldChucGMpXG4gICAgaWYoYnViYmxlLmlzQnViYmxlT3Blbil7XG4gICAgICAgIGJ1YmJsZS5pc0J1YmJsZU9wZW4gPSBmYWxzZVxuICAgICAgICBidWJibGUudHlwaW5nID0gZmFsc2VcbiAgICAgICAgYnViYmxlLnZpc2libGVUZXh0ID0gXCJcIlxuICAgICAgICBidWJibGUudmlzaWJsZUNoYXJzID0gMFxuICAgICAgICBidWJibGUuZnVsbFRleHQgPSBcIlwiXG4gICAgICAgIGJ1YmJsZS50aW1lciA9IDBcbiAgICAgICAgYnViYmxlLmluZGV4ID0gMFxuICAgICAgICBidWJibGUuc2NyaXB0ID0gW11cbiAgICAgICAgYnViYmxlLmJ1dHRvbnMgPSAwXG4gICAgICAgIGJ1YmJsZS5tYXJnaW4gPSAwXG4gICAgICAgIGJ1YmJsZS5jdXJyZW50VGV4dCA9IG51bGxcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLnRleHQgPSBcIlwiXG4gICAgICAgIFZpc2liaWxpdHlDb21wb25lbnQuZ2V0TXV0YWJsZShidWJibGUudGV4dCkudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIFZpc2liaWxpdHlDb21wb25lbnQuZ2V0TXV0YWJsZShidWJibGUucGFuZWwpLnZpc2libGUgPSBmYWxzZVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQnViYmxlRW5kQWxsKG5wYzpFbnRpdHkpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGlmIChidWJibGUuaXNCdWJibGVPcGVuKSB7XG4gICAgICAgIGJ1YmJsZS5kb25lID0gdHJ1ZVxuICAgICAgICBjbG9zZUJ1YmJsZShucGMpXG4gICAgfVxuICB9XG5cbmNvbnN0IERFRkFVTFRfU1BFRUQgPSA0NVxuXG5jb25zdCBERUZBVUxUX1RJTUVfT04gPSAzXG5cbmZ1bmN0aW9uIGJlZ2luVHlwaW5nKG5wYzpFbnRpdHksIHRleHQ6c3RyaW5nLCB0ZXh0SWQ6bnVtYmVyLCB0aW1lT24/Om51bWJlciwgc3BlZWQ/Om51bWJlcil7XG4gICAgbGV0IGRpYWxvZ0RhdGEgPSBidWJibGVzLmdldChucGMpXG4gICAgZGlhbG9nRGF0YS5mdWxsVGV4dCA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLnRleHRcbiAgICBkaWFsb2dEYXRhLnR5cGluZyA9IHRydWVcbiAgICBkaWFsb2dEYXRhLmRvbmUgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBcIlwiXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lciA9IDBcbiAgICBkaWFsb2dEYXRhLmJ1dHRvbnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lT24gPSB0aW1lT24gPyB0aW1lT24gOiBERUZBVUxUX1RJTUVfT05cbiAgICBkaWFsb2dEYXRhLnNwZWVkID0gc3BlZWQgPyBzcGVlZCA6IERFRkFVTFRfU1BFRURcblxuICAgIGRpYWxvZ0RhdGEub3BlblRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkpXG5cbiAgICBpZihkaWFsb2dEYXRhLnNwZWVkIDw9IDApe1xuICAgICAgICBydXNoVGV4dChucGMpXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGlmKCFJc1R5cGluZ0J1YmJsZS5oYXMobnBjKSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3JlYXRpbmcgdHlwdWluZyBidWJibGUnKVxuICAgICAgICAgICAgSXNUeXBpbmdCdWJibGUuY3JlYXRlKG5wYylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcnVzaFRleHQobnBjOkVudGl0eSl7XG4gICAgbGV0IGRpYWxvZ0RhdGEgPSBidWJibGVzLmdldChucGMpXG4gICAgZGlhbG9nRGF0YS50eXBpbmcgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudGltZXIgPSAwXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0Lmxlbmd0aFxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0XG59XG5cbmZ1bmN0aW9uIGFkanVzdEJ1YmJsZShucGM6RW50aXR5LCB0ZXh0TGVuZ3RoOm51bWJlcil7XG4gICAgbGV0IGJ1YmJsZSA9IGJ1YmJsZXMuZ2V0KG5wYylcblxuICAgIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoU2hvcnRCdWJibGUpIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuc2hvcnQsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gc2hvcnRCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IHNob3J0QnViYmxlWVxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi54ID0gc2hvcnRCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBzaG9ydEJ1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gc2hvcnRCdWJibGVUZXh0V2lkdGhcbiAgICAgIH0gZWxzZSBpZiAodGV4dExlbmd0aCA8IG1heExlbmd0aE5vcm1hbEJ1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5ub3JtYWwsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gbm9ybWFsQnViYmxlWFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUucGFuZWwpLnNjYWxlLnkgPSBub3JtYWxCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBub3JtYWxCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBub3JtYWxCdWJibGVZT2Zmc2V0XG4gICAgICAgIFRleHRTaGFwZS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS53aWR0aCA9IG5vcm1hbEJ1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoTG9uZ0J1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5sb25nLFxuICAgICAgICAgICAgMTAyNCxcbiAgICAgICAgICAgIDEwMjRcbiAgICAgICAgICApKVxuXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueCA9IGxvbmdCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IGxvbmdCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBsb25nQnViYmxlWE9mZnNldFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi55ID0gYnViYmxlLmJhc2VZT2Zmc2V0ICsgbG9uZ0J1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gbG9uZ0J1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuaHVnZSxcbiAgICAgICAgICAgIDEwMjQsXG4gICAgICAgICAgICAxMDI0XG4gICAgICAgICAgKSlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gaHVnZUJ1YmJsZVhcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS55ID0gaHVnZUJ1YmJsZVlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLmNvbnRhaW5lcikucG9zaXRpb24ueCA9IGh1Z2VCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBodWdlQnViYmxlWU9mZnNldFxuICAgICAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkud2lkdGggPSBodWdlQnViYmxlVGV4dFdpZHRoXG4gICAgICB9XG59XG5cbi8vIEFkZHMgdGhlIGJ1dHRvbnMgb3IgbW91c2UgaWNvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2Ygd2luZG93XG5mdW5jdGlvbiBsYXlvdXREaWFsb2dXaW5kb3cobnBjOkVudGl0eSwgdGV4dElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGxldCBjdXJyZW50VGV4dDogRGlhbG9nID0gYnViYmxlLnNjcmlwdFt0ZXh0SWRdXG4gICAgICA/IGJ1YmJsZS5zY3JpcHRbdGV4dElkXVxuICAgICAgOiB7IHRleHQ6ICcnIH1cblxuICAgIC8vIFVwZGF0ZSB0ZXh0XG4gICAgbGV0IHRleHRZID0gY3VycmVudFRleHQub2Zmc2V0WSA/IGN1cnJlbnRUZXh0Lm9mZnNldFkgKyB0ZXh0WVBvcyA6IHRleHRZUG9zXG5cbiAgICBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAzKSB7XG4gICAgICB0ZXh0WSArPSA1MFxuICAgIH0gZWxzZSBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICB0ZXh0WSArPSAyNFxuICAgIH1cbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkuZm9udFNpemUgPSBjdXJyZW50VGV4dC5mb250U2l6ZVxuICAgID8gY3VycmVudFRleHQuZm9udFNpemVcbiAgICA6IHRleHRTaXplXG4gICAgXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS52aXNpYmxlID0gdHJ1ZVxuICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS5wb3NpdGlvbi55ID0gdGV4dFlcblxuICAgIGlmIChjdXJyZW50VGV4dC5hdWRpbykge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGJ1YmJsZS5zb3VuZFBsYXllcilcbiAgICAgICAgYXVkaW8udm9sdW1lID0gMC41XG4gICAgICAgIGF1ZGlvLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChidWJibGUuc291bmQpIHtcbiAgICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGJ1YmJsZS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBidWJibGUuc291bmQsXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9XG5cbiAgfVxuXG4vLyBQcm9ncmVzc2VzIHRleHRcbmV4cG9ydCBmdW5jdGlvbiBuZXh0KG5wYzpFbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbmV4dCB0ZXh0JylcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGxldCBjdXJyZW50VGV4dCA9IGJ1YmJsZS5zY3JpcHRbYnViYmxlLmluZGV4XVxuXG5cdGlmKCFjdXJyZW50VGV4dCl7XG5cdFx0Y3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleC0xXVxuXHR9XG5cbiAgICBpZiAoY3VycmVudFRleHQudHJpZ2dlcmVkQnlOZXh0KSB7XG4gICAgICBjdXJyZW50VGV4dC50cmlnZ2VyZWRCeU5leHQoKVxuICAgIH1cblxuXHRpZiAoY3VycmVudFRleHQuaXNFbmRPZkRpYWxvZykge1xuXHRcdGNsb3NlQnViYmxlKG5wYylcblx0XHRyZXR1cm5cblx0ICB9XG4gICBcblx0IC8vIFVwZGF0ZSBhY3RpdmUgdGV4dFxuICAgICBidWJibGUuaW5kZXgrK1xuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSB0ZXh0IHdpdGggbmV3IGFjdGl2ZSB0ZXh0XG4gICAgY3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleF1cblxuICAgIGlmIChjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aCA8IG1heExlbmd0aEh1Z2VCdWJibGUpIHtcbiAgICAgIGN1cnJlbnRUZXh0LnRleHQuc2xpY2UoMCwgbWF4TGVuZ3RoSHVnZUJ1YmJsZSlcbiAgICB9XG5cbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkudGV4dCA9IFwiXCJcblxuICAgIGFkanVzdEJ1YmJsZShucGMsIGN1cnJlbnRUZXh0LnRleHQubGVuZ3RoKVxuXG4gICAgYmVnaW5UeXBpbmcoXG4gICAgICAgIG5wYyxcbiAgICAgICAgY3VycmVudFRleHQudGV4dCxcbiAgICAgICAgYnViYmxlLmluZGV4LFxuICAgICAgICBjdXJyZW50VGV4dC50aW1lT24gPyBjdXJyZW50VGV4dC50aW1lT24gOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA/IGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA6IHVuZGVmaW5lZCBcbiAgICApXG5cdGxheW91dERpYWxvZ1dpbmRvdyhucGMsIGJ1YmJsZS5pbmRleClcbiAgfVxuXG5mdW5jdGlvbiBzZXRVVlNlY3Rpb24oXG5cdHNlY3Rpb246IEltYWdlU2VjdGlvbixcblx0c2l6ZVg6IG51bWJlcixcblx0c2l6ZVk6IG51bWJlclxuICApIHtcblx0cmV0dXJuIHNldFVWcyhcbiAgICAgICAge3g6ICBzZWN0aW9uLnNvdXJjZUxlZnQhIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6ICAoc2l6ZVkgLSBzZWN0aW9uLnNvdXJjZVRvcCEpIC8gc2l6ZVl9LFxuICAgICAgICB7eDogIHNlY3Rpb24uc291cmNlTGVmdCEgLyBzaXplWCwgeTogKHNpemVZIC0gc2VjdGlvbi5zb3VyY2VUb3AhKSAvIHNpemVZfSxcblx0KVxuICB9XG5cbmZ1bmN0aW9uIHNldFVWcyhcblx0X3V2MDA6IGFueSxcblx0X3V2MTA6IGFueSxcblx0X3V2MTE6IGFueSxcblx0X3V2MDE6IGFueVxuICApIHtcblxuXHRyZXR1cm4gW1xuXHQgIF91djAwLngsXG5cdCAgX3V2MDAueSxcbiAgXG5cdCAgX3V2MTAueCxcblx0ICBfdXYxMC55LFxuICBcblx0ICBfdXYxMS54LFxuXHQgIF91djExLnksXG4gIFxuXHQgIF91djAxLngsXG5cdCAgX3V2MDEueSxcblx0ICAvLy0tLS1cblx0ICBfdXYwMC54LFxuXHQgIF91djAwLnksXG4gIFxuXHQgIF91djEwLngsXG5cdCAgX3V2MTAueSxcbiAgXG5cdCAgX3V2MTEueCxcblx0ICBfdXYxMS55LFxuICBcblx0ICBfdXYwMS54LFxuXHQgIF91djAxLnksXG5cdF1cbiAgfVxuXG4gIGxldCBidWJibGVPcHRpb25zOmFueSA9IHtcbiAgICBzaG9ydDoge1xuICAgICAgc291cmNlV2lkdGg6IDExNiAqIDIsXG4gICAgICBzb3VyY2VIZWlnaHQ6IDg0ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDMwNSAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDQxNyAqIDIsXG4gICAgfSxcbiAgICBub3JtYWw6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiAyODYgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiA4NCAqIDIsXG4gICAgICBzb3VyY2VMZWZ0OiA4ICogMixcbiAgICAgIHNvdXJjZVRvcDogNDE3ICogMixcbiAgICB9LFxuICAgIGxvbmc6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiA0OTcgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiAxNTMgKiAyLFxuICAgICAgc291cmNlTGVmdDogNiAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDI1NCAqIDIsXG4gICAgfSxcbiAgICBodWdlOiB7XG4gICAgICBzb3VyY2VXaWR0aDogNDk3ICogMixcbiAgICAgIHNvdXJjZUhlaWdodDogMjM5ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDYgKiAyLFxuICAgICAgc291cmNlVG9wOiA3ICogMixcbiAgICB9LFxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWJibGVUZXh0TGVuZ3RoKHRleHQ6c3RyaW5nKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+PSBtYXhMZW5ndGhIdWdlQnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICAgIGVsc2UgaWYodGV4dC5sZW5ndGggPj0gbWF4TGVuZ3RoTG9uZ0J1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aE5vcm1hbEJ1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aFNob3J0QnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0VVZzMihyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcikge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBOb3J0aCBzaWRlIG9mIHVucm9ydGF0ZWQgcGxhbmVcbiAgICAgIDAsIC8vbG93ZXItbGVmdCBjb3JuZXJcbiAgICAgIDAsXG4gIFxuICAgICAgY29scywgLy9sb3dlci1yaWdodCBjb3JuZXJcbiAgICAgIDAsXG4gIFxuICAgICAgY29scywgLy91cHBlci1yaWdodCBjb3JuZXJcbiAgICAgIHJvd3MsXG4gIFxuICAgICAgMCwgLy91cHBlciBsZWZ0LWNvcm5lclxuICAgICAgcm93cyxcbiAgXG4gICAgICAvLyBTb3V0aCBzaWRlIG9mIHVucm9ydGF0ZWQgcGxhbmVcbiAgICAgIGNvbHMsIC8vIGxvd2VyLXJpZ2h0IGNvcm5lclxuICAgICAgMCxcbiAgXG4gICAgICAwLCAvLyBsb3dlci1sZWZ0IGNvcm5lclxuICAgICAgMCxcbiAgXG4gICAgICAwLCAvLyB1cHBlci1sZWZ0IGNvcm5lclxuICAgICAgcm93cyxcbiAgXG4gICAgICBjb2xzLCAvLyB1cHBlci1yaWdodCBjb3JuZXJcbiAgICAgIHJvd3MsXG4gICAgXVxuICB9Il19
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1YmJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVksV0FBVyxFQUFlLFNBQVMsRUFBaUIsTUFBTSxFQUEyQyxRQUFRLEVBQWMsWUFBWSxFQUFtQyxTQUFTLEVBQUMsU0FBUyxFQUFpQixtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxUSxPQUFPLEVBQVMsTUFBTSxFQUFjLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFpQixNQUFNLFVBQVUsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTdDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsR0FBRyx1REFBdUQsQ0FBQTtBQUVuRixNQUFNLENBQUMsSUFBSSxPQUFPLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUE7QUFFaEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO0FBQ2hCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtBQUVoQixJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQTtBQUM1QixJQUFJLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtBQUM5QixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQTtBQUM1QixJQUFJLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUU3QixJQUFJLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtBQUM1QixJQUFJLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUM3QixJQUFJLGlCQUFpQixHQUFHLEdBQUcsQ0FBQTtBQUMzQixJQUFJLGlCQUFpQixHQUFHLEdBQUcsQ0FBQTtBQUUzQixJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFBO0FBQzdCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLENBQUE7QUFDOUIsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUE7QUFDekIsSUFBSSxpQkFBaUIs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QUUsR0FBRyxHQUFHLENBQUM7S0FDbkI7SUFDRCxNQUFNLEVBQUU7UUFDTixXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDcEIsWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ3BCLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNqQixTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7S0FDbkI7SUFDRCxJQUFJLEVBQUU7UUFDSixXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDcEIsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNqQixTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7S0FDbkI7SUFDRCxJQUFJLEVBQUU7UUFDSixXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDcEIsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNqQixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7S0FDakI7Q0FDSixDQUFBO0FBR0QsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVc7SUFDM0MsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLG1CQUFtQixFQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFBO0tBQ1o7U0FDSSxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksbUJBQW1CLEVBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUE7S0FDWjtTQUNJLElBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxxQkFBcUIsRUFBQztRQUN6QyxPQUFPLEVBQUUsQ0FBQTtLQUNaO1NBQ0ksSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLG9CQUFvQixFQUFDO1FBQ3hDLE9BQU8sRUFBRSxDQUFBO0tBQ1o7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBBbmltYXRvciwgQXVkaW9Tb3VyY2UsIEF2YXRhclNoYXBlLCBCaWxsYm9hcmQsIEJpbGxib2FyZE1vZGUsIGVuZ2luZSwgRW50aXR5LCBGb250LCBHbHRmQ29udGFpbmVyLCBJbnB1dEFjdGlvbixNYXRlcmlhbCxNZXNoQ29sbGlkZXIsTWVzaFJlbmRlcmVyLHBvaW50ZXJFdmVudHNTeXN0ZW0sVGV4dEFsaWduTW9kZSxUZXh0U2hhcGUsVHJhbnNmb3JtLCBUcmFuc2Zvcm1UeXBlLCBWaXNpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGRjbC1zZGsvdXRpbHMnXG5pbXBvcnQgeyBEaWFsb2csIEltYWdlU2VjdGlvbiB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBDb2xvcjMsQ29sb3I0LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IGFkZExpbmVCcmVhaywgYWRkTGluZUJyZWFrcyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgSXNUeXBpbmdCdWJibGUgfSBmcm9tICcuL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBsZXQgYnViYmxlc1RleHR1cmUgPSAnaHR0cHM6Ly9kZWNlbnRyYWxhbmQub3JnL2ltYWdlcy91aS9kaWFsb2ctYnViYmxlcy5wbmcnXG5cbmV4cG9ydCBsZXQgYnViYmxlczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuXG5sZXQgdGV4dFNpemUgPSAxXG5sZXQgdGV4dFlQb3MgPSAwICAgIFxuXG5sZXQgbWF4TGVuZ3RoU2hvcnRCdWJibGUgPSA4XG5sZXQgbWF4TGVuZ3RoTm9ybWFsQnViYmxlID0gMjVcbmxldCBtYXhMZW5ndGhMb25nQnViYmxlID0gNTBcbmxldCBtYXhMZW5ndGhIdWdlQnViYmxlID0gMTAwXG5cbmxldCBzaG9ydEJ1YmJsZVhPZmZzZXQgPSAwLjFcbmxldCBub3JtYWxCdWJibGVYT2Zmc2V0ID0gMC41XG5sZXQgbG9uZ0J1YmJsZVhPZmZzZXQgPSAwLjhcbmxldCBodWdlQnViYmxlWE9mZnNldCA9IDAuOFxuXG5sZXQgc2hvcnRCdWJibGVZT2Zmc2V0ID0gLTAuMlxubGV0IG5vcm1hbEJ1YmJsZVlPZmZzZXQgPSAtMC4yXG5sZXQgbG9uZ0J1YmJsZVlPZmZzZXQgPSAwXG5sZXQgaHVnZUJ1YmJsZVlPZmZzZXQgPSAwLjJcblxubGV0IHNob3J0QnViYmxlVGV4dFdpZHRoID0gMC43XG5sZXQgbm9ybWFsQnViYmxlVGV4dFdpZHRoID0gMS41XG5sZXQgbG9uZ0J1YmJsZVRleHRXaWR0aCA9IDJcbmxldCBodWdlQnViYmxlVGV4dFdpZHRoID0gMS41XG5cbmxldCBzaG9ydEJ1YmJsZVggPSAxMTYgKiAwLjAwNVxubGV0IHNob3J0QnViYmxlWSA9IDg0ICogMC4wMDVcblxubGV0IG5vcm1hbEJ1YmJsZVggPSAyODYgKiAwLjAwNVxubGV0IG5vcm1hbEJ1YmJsZVkgPSA4NCAqIDAuMDA1XG5cbmxldCBsb25nQnViYmxlWCA9IDQ5NyAqIDAuMDA1XG5sZXQgbG9uZ0J1YmJsZVkgPSAxNTMgKiAwLjAwNVxuXG5sZXQgaHVnZUJ1YmJsZVggPSA0OTcgKiAwLjAwNVxubGV0IGh1Z2VCdWJibGVZID0gMjM5ICogMC4wMDVcblxubGV0IGRlZmF1bHRZT2Zmc2V0ID0gMi41XG5cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nQnViYmxlKG5wYzpFbnRpdHksIGhlaWdodD86bnVtYmVyLCBzb3VuZD86c3RyaW5nKXtcbiAgICBsZXQgYmFzZVlPZmZzZXQgPSBoZWlnaHQgPyBoZWlnaHQgOiBkZWZhdWx0WU9mZnNldFxuXG4gICAgbGV0IHJvb3QgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBCaWxsYm9hcmQuY3JlYXRlKHJvb3Qse1xuICAgICAgICBiaWxsYm9hcmRNb2RlOkJpbGxib2FyZE1vZGUuQk1fWVxuICAgIH0pXG5cbiAgICBUcmFuc2Zvcm0uY3JlYXRlKHJvb3Qse1xuICAgICAgICBwYXJlbnQ6bnBjXG4gICAgfSlcblxuICAgIGxldCBjb250YWluZXIgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBUcmFuc2Zvcm0uY3JlYXRlKGNvbnRhaW5lcix7XG4gICAgICAgIHBhcmVudDpyb290LFxuICAgICAgICBwb3NpdGlvbjpWZWN0b3IzLmNyZWF0ZShzaG9ydEJ1YmJsZVhPZmZzZXQsYmFzZVlPZmZzZXQsMClcbiAgICB9KVxuXG4gICAgbGV0IHBhbmVsID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZShwYW5lbCx7XG4gICAgICAgIHBhcmVudDpjb250YWluZXIsXG4gICAgICAgIHNjYWxlOiBWZWN0b3IzLmNyZWF0ZSgyLDEsMSksXG4gICAgICAgIC8vcm90YXRpb246UXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKDAsMCw5MClcbiAgICB9KVxuICAgIE1lc2hSZW5kZXJlci5zZXRQbGFuZShwYW5lbCxcbiAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICBidWJibGVPcHRpb25zLm5vcm1hbCxcbiAgICAgICAgMTAyNCxcbiAgICAgICAgMTAyNFxuICAgICAgKSlcblxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHBhbmVsLCB7dmlzaWJsZTogZmFsc2V9KVxuXG4gICAgTWF0ZXJpYWwuc2V0QmFzaWNNYXRlcmlhbChwYW5lbCwge1xuICAgICAgICB0ZXh0dXJlOiBNYXRlcmlhbC5UZXh0dXJlLkNvbW1vbih7XG4gICAgICAgICAgc3JjOiBidWJibGVzVGV4dHVyZVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgIGxldCB0ZXh0ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZSh0ZXh0LHtcbiAgICAgICAgcG9zaXRpb246VmVjdG9yMy5jcmVhdGUoMCx0ZXh0WVBvcywgLS4wNSksXG4gICAgICAgIHBhcmVudDpjb250YWluZXJcbiAgICB9KVxuICAgIFRleHRTaGFwZS5jcmVhdGUodGV4dCwge1xuICAgICAgICB0ZXh0OlwiXCIsIFxuICAgICAgICBmb250U2l6ZTp0ZXh0U2l6ZSxcbiAgICAgICAgZm9udDogRm9udC5GX1NBTlNfU0VSSUYsXG4gICAgICAgIHRleHRDb2xvcjogQ29sb3I0LmNyZWF0ZSgwLDAsMCwxKSxcbiAgICAgICAgdGV4dEFsaWduOlRleHRBbGlnbk1vZGUuVEFNX01JRERMRV9DRU5URVJcbiAgICB9KVxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHRleHQsIHt2aXNpYmxlOiBmYWxzZX0pXG5cbiAgICBidWJibGVzLnNldChucGMsIHtcbiAgICAgICAgY29udGFpbmVyOmNvbnRhaW5lcixcbiAgICAgICAgcGFuZWw6cGFuZWwsXG4gICAgICAgIHRleHQ6dGV4dCxcbiAgICAgICAgYmFzZVlPZmZzZXQ6IGJhc2VZT2Zmc2V0LFxuICAgICAgICBpc0J1YmJsZU9wZW46ZmFsc2UsXG4gICAgICAgIHR5cGluZzpmYWxzZSxcbiAgICAgICAgdmlzaWJsZVRleHQ6XCJcIixcbiAgICAgICAgdmlzaWJsZUNoYXJzOjAsXG4gICAgICAgIGZ1bGxUZXh0OlwiXCIsXG4gICAgICAgIHRpbWVyOjAsXG4gICAgICAgIHNwZWVkOjMwLFxuICAgICAgICBzY3JpcHQ6W10sXG4gICAgICAgIGluZGV4OjAsXG4gICAgICAgIHNvdW5kOiBzb3VuZCA/IHNvdW5kIDogdW5kZWZpbmVkLFxuICAgICAgICBzb3VuZFBsYXllcjogc291bmQgPyBlbmdpbmUuYWRkRW50aXR5KCkgOiB1bmRlZmluZWQsXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5CdWJibGUobnBjOkVudGl0eSwgZGlhbG9nOkRpYWxvZ1tdLCBzdGFydD86bnVtYmVyKXtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuXG4gICAgYnViYmxlLnNjcmlwdCA9IGRpYWxvZy5zbGljZSgpXG4gICAgYnViYmxlLmluZGV4ID0gc3RhcnQgPyBzdGFydCA6IDBcbiAgICBcbiAgICBsZXQgY3VycmVudFRleHQ6IERpYWxvZyA9IGRpYWxvZ1tidWJibGUuaW5kZXhdID8gZGlhbG9nW2J1YmJsZS5pbmRleF0gOiB7IHRleHQ6ICcnIH1cbiAgICBidWJibGUuY3VycmVudFRleHQgPSBjdXJyZW50VGV4dFxuXG4gICAgaWYgKGN1cnJlbnRUZXh0LmF1ZGlvKSB7XG4gICAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZU9yUmVwbGFjZShidWJibGUuc291bmRQbGF5ZXIsIHtcbiAgICAgICAgICAgIGF1ZGlvQ2xpcFVybDogY3VycmVudFRleHQuYXVkaW8sXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGJ1YmJsZS5zb3VuZCkge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGJ1YmJsZS5zb3VuZCxcbiAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICAgICAgcGxheWluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IGF1ZGlvID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZShidWJibGUuc291bmRQbGF5ZXIpXG4gICAgICAgIGF1ZGlvLnZvbHVtZSA9IDAuNVxuICAgICAgICBhdWRpby5wbGF5aW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCB0ZXh0ID0gYnViYmxlLnRleHRcbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZSh0ZXh0KS5mb250U2l6ZSA9IGN1cnJlbnRUZXh0LmZvbnRTaXplID8gY3VycmVudFRleHQuZm9udFNpemUgOiB0ZXh0U2l6ZVxuICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKHRleHQpLnBvc2l0aW9uLnkgPSBjdXJyZW50VGV4dC5vZmZzZXRZID8gY3VycmVudFRleHQub2Zmc2V0WSArIHRleHRZUG9zIDogdGV4dFlQb3NcbiAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZSh0ZXh0KS5wb3NpdGlvbi54ID0gY3VycmVudFRleHQub2Zmc2V0WCA/IGN1cnJlbnRUZXh0Lm9mZnNldFggOiAwXG5cbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LmdldE11dGFibGUoYnViYmxlLnBhbmVsKS52aXNpYmxlID0gdHJ1ZVxuXG4gICAgaWYgKGN1cnJlbnRUZXh0LnRleHQubGVuZ3RoIDwgbWF4TGVuZ3RoSHVnZUJ1YmJsZSkge1xuICAgICAgICBjdXJyZW50VGV4dC50ZXh0LnNsaWNlKDAsIG1heExlbmd0aEh1Z2VCdWJibGUpXG4gICAgICB9XG5cbiAgICBiZWdpblR5cGluZyhcbiAgICAgICAgbnBjLFxuICAgICAgICBjdXJyZW50VGV4dC50ZXh0LFxuICAgICAgICBidWJibGUuaW5kZXgsXG4gICAgICAgIGN1cnJlbnRUZXh0LnRpbWVPbiA/IGN1cnJlbnRUZXh0LnRpbWVPbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3VycmVudFRleHQudHlwZVNwZWVkID8gY3VycmVudFRleHQudHlwZVNwZWVkIDogdW5kZWZpbmVkIFxuICAgIClcblxuICAgIGFkanVzdEJ1YmJsZShucGMsIGN1cnJlbnRUZXh0LnRleHQubGVuZ3RoKVxuICAgIGxheW91dERpYWxvZ1dpbmRvdyhucGMsIGJ1YmJsZS5pbmRleClcbiAgICBidWJibGUuaXNCdWJibGVPcGVuID0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VCdWJibGUobnBjOkVudGl0eSl7XG4gICAgbGV0IGJ1YmJsZSA9IGJ1YmJsZXMuZ2V0KG5wYylcbiAgICAgICAgYnViYmxlLmlzQnViYmxlT3BlbiA9IGZhbHNlXG4gICAgICAgIGJ1YmJsZS50eXBpbmcgPSBmYWxzZVxuICAgICAgICBidWJibGUudmlzaWJsZVRleHQgPSBcIlwiXG4gICAgICAgIGJ1YmJsZS52aXNpYmxlQ2hhcnMgPSAwXG4gICAgICAgIGJ1YmJsZS5mdWxsVGV4dCA9IFwiXCJcbiAgICAgICAgYnViYmxlLnRpbWVyID0gMFxuICAgICAgICBidWJibGUuaW5kZXggPSAwXG4gICAgICAgIGJ1YmJsZS5zY3JpcHQgPSBbXVxuICAgICAgICBidWJibGUuYnV0dG9ucyA9IDBcbiAgICAgICAgYnViYmxlLm1hcmdpbiA9IDBcbiAgICAgICAgYnViYmxlLmN1cnJlbnRUZXh0ID0gbnVsbFxuICAgICAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkudGV4dCA9IFwiXCJcbiAgICAgICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkudmlzaWJsZSA9IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZUJ1YmJsZUVuZEFsbChucGM6RW50aXR5KTogdm9pZCB7XG4gICAgbGV0IGJ1YmJsZSA9IGJ1YmJsZXMuZ2V0KG5wYylcbiAgICBpZiAoYnViYmxlLmlzQnViYmxlT3Blbikge1xuICAgICAgICBidWJibGUuZG9uZSA9IHRydWVcbiAgICAgICAgY2xvc2VCdWJibGUobnBjKVxuICAgIH1cbiAgfVxuXG5jb25zdCBERUZBVUxUX1NQRUVEID0gNDVcblxuY29uc3QgREVGQVVMVF9USU1FX09OID0gM1xuXG5mdW5jdGlvbiBiZWdpblR5cGluZyhucGM6RW50aXR5LCB0ZXh0OnN0cmluZywgdGV4dElkOm51bWJlciwgdGltZU9uPzpudW1iZXIsIHNwZWVkPzpudW1iZXIpe1xuICAgIGxldCBkaWFsb2dEYXRhID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGRpYWxvZ0RhdGEuZnVsbFRleHQgPSBhZGRMaW5lQnJlYWsoZGlhbG9nRGF0YS5zY3JpcHRbZGlhbG9nRGF0YS5pbmRleF0udGV4dCwgdHJ1ZSlcbiAgICBkaWFsb2dEYXRhLnR5cGluZyA9IHRydWVcbiAgICBkaWFsb2dEYXRhLmRvbmUgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBcIlwiXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lciA9IDBcbiAgICBkaWFsb2dEYXRhLmJ1dHRvbnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lT24gPSB0aW1lT24gPyB0aW1lT24gOiBERUZBVUxUX1RJTUVfT05cbiAgICBkaWFsb2dEYXRhLnNwZWVkID0gc3BlZWQgPyBzcGVlZCA6IERFRkFVTFRfU1BFRURcblxuICAgIGRpYWxvZ0RhdGEub3BlblRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkpXG5cbiAgICBpZihkaWFsb2dEYXRhLnNwZWVkIDw9IDApe1xuICAgICAgICBydXNoVGV4dChucGMpXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGlmKCFJc1R5cGluZ0J1YmJsZS5oYXMobnBjKSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3JlYXRpbmcgdHlwdWluZyBidWJibGUnKVxuICAgICAgICAgICAgSXNUeXBpbmdCdWJibGUuY3JlYXRlKG5wYylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcnVzaFRleHQobnBjOkVudGl0eSl7XG4gICAgbGV0IGRpYWxvZ0RhdGEgPSBidWJibGVzLmdldChucGMpXG4gICAgZGlhbG9nRGF0YS50eXBpbmcgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudGltZXIgPSAwXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0Lmxlbmd0aFxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0XG59XG5cbmZ1bmN0aW9uIGFkanVzdEJ1YmJsZShucGM6RW50aXR5LCB0ZXh0TGVuZ3RoOm51bWJlcil7XG4gICAgbGV0IGJ1YmJsZSA9IGJ1YmJsZXMuZ2V0KG5wYylcblxuICAgIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoU2hvcnRCdWJibGUpIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuc2hvcnQsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gc2hvcnRCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IHNob3J0QnViYmxlWVxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi54ID0gc2hvcnRCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBzaG9ydEJ1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gc2hvcnRCdWJibGVUZXh0V2lkdGhcbiAgICAgIH0gZWxzZSBpZiAodGV4dExlbmd0aCA8IG1heExlbmd0aE5vcm1hbEJ1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5ub3JtYWwsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gbm9ybWFsQnViYmxlWFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUucGFuZWwpLnNjYWxlLnkgPSBub3JtYWxCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBub3JtYWxCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBub3JtYWxCdWJibGVZT2Zmc2V0XG4gICAgICAgIFRleHRTaGFwZS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS53aWR0aCA9IG5vcm1hbEJ1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoTG9uZ0J1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5sb25nLFxuICAgICAgICAgICAgMTAyNCxcbiAgICAgICAgICAgIDEwMjRcbiAgICAgICAgICApKVxuXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueCA9IGxvbmdCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IGxvbmdCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBsb25nQnViYmxlWE9mZnNldFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi55ID0gYnViYmxlLmJhc2VZT2Zmc2V0ICsgbG9uZ0J1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gbG9uZ0J1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuaHVnZSxcbiAgICAgICAgICAgIDEwMjQsXG4gICAgICAgICAgICAxMDI0XG4gICAgICAgICAgKSlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gaHVnZUJ1YmJsZVhcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS55ID0gaHVnZUJ1YmJsZVlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLmNvbnRhaW5lcikucG9zaXRpb24ueCA9IGh1Z2VCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBodWdlQnViYmxlWU9mZnNldFxuICAgICAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkud2lkdGggPSBodWdlQnViYmxlVGV4dFdpZHRoXG4gICAgICB9XG59XG5cbi8vIEFkZHMgdGhlIGJ1dHRvbnMgb3IgbW91c2UgaWNvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2Ygd2luZG93XG5mdW5jdGlvbiBsYXlvdXREaWFsb2dXaW5kb3cobnBjOkVudGl0eSwgdGV4dElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGxldCBjdXJyZW50VGV4dDogRGlhbG9nID0gYnViYmxlLnNjcmlwdFt0ZXh0SWRdXG4gICAgICA/IGJ1YmJsZS5zY3JpcHRbdGV4dElkXVxuICAgICAgOiB7IHRleHQ6ICcnIH1cblxuICAgIC8vIFVwZGF0ZSB0ZXh0XG4gICAgbGV0IHRleHRZID0gY3VycmVudFRleHQub2Zmc2V0WSA/IGN1cnJlbnRUZXh0Lm9mZnNldFkgKyB0ZXh0WVBvcyA6IHRleHRZUG9zXG5cbiAgICBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAzKSB7XG4gICAgICB0ZXh0WSArPSA1MFxuICAgIH0gZWxzZSBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICB0ZXh0WSArPSAyNFxuICAgIH1cbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkuZm9udFNpemUgPSBjdXJyZW50VGV4dC5mb250U2l6ZVxuICAgID8gY3VycmVudFRleHQuZm9udFNpemVcbiAgICA6IHRleHRTaXplXG4gICAgXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS52aXNpYmxlID0gdHJ1ZVxuICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS5wb3NpdGlvbi55ID0gdGV4dFlcblxuICAgIGlmIChjdXJyZW50VGV4dC5hdWRpbykge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGJ1YmJsZS5zb3VuZFBsYXllcilcbiAgICAgICAgYXVkaW8udm9sdW1lID0gMC41XG4gICAgICAgIGF1ZGlvLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChidWJibGUuc291bmQpIHtcbiAgICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGJ1YmJsZS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBidWJibGUuc291bmQsXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9XG5cbiAgfVxuXG4vLyBQcm9ncmVzc2VzIHRleHRcbmV4cG9ydCBmdW5jdGlvbiBuZXh0KG5wYzpFbnRpdHkpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuXG4gICAgaWYoYnViYmxlLmlzQnViYmxlT3Blbil7XG4gICAgICBsZXQgY3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleF1cblxuICAgICAgaWYoIWN1cnJlbnRUZXh0KXtcbiAgICAgICAgY3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleC0xXVxuICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoY3VycmVudFRleHQudHJpZ2dlcmVkQnlOZXh0KSB7XG4gICAgICAgICAgY3VycmVudFRleHQudHJpZ2dlcmVkQnlOZXh0KClcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoY3VycmVudFRleHQuaXNFbmRPZkRpYWxvZykge1xuICAgICAgICAgIGNsb3NlQnViYmxlKG5wYylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgIFxuICAgICAgIC8vIFVwZGF0ZSBhY3RpdmUgdGV4dFxuICAgICAgICAgYnViYmxlLmluZGV4KytcbiAgICBcbiAgICAgICAgLy8gVXBkYXRlIGFjdGl2ZSB0ZXh0IHdpdGggbmV3IGFjdGl2ZSB0ZXh0XG4gICAgICAgIGN1cnJlbnRUZXh0ID0gYnViYmxlLnNjcmlwdFtidWJibGUuaW5kZXhdXG4gICAgXG4gICAgICAgIGlmIChjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aCA8IG1heExlbmd0aEh1Z2VCdWJibGUpIHtcbiAgICAgICAgICBjdXJyZW50VGV4dC50ZXh0LnNsaWNlKDAsIG1heExlbmd0aEh1Z2VCdWJibGUpXG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLnRleHQgPSBcIlwiXG4gICAgXG4gICAgICAgIGFkanVzdEJ1YmJsZShucGMsIGN1cnJlbnRUZXh0LnRleHQubGVuZ3RoKVxuICAgIFxuICAgICAgICBiZWdpblR5cGluZyhcbiAgICAgICAgICAgIG5wYyxcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LnRleHQsXG4gICAgICAgICAgICBidWJibGUuaW5kZXgsXG4gICAgICAgICAgICBjdXJyZW50VGV4dC50aW1lT24gPyBjdXJyZW50VGV4dC50aW1lT24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdXJyZW50VGV4dC50eXBlU3BlZWQgPyBjdXJyZW50VGV4dC50eXBlU3BlZWQgOiB1bmRlZmluZWQgXG4gICAgICAgIClcbiAgICAgIGxheW91dERpYWxvZ1dpbmRvdyhucGMsIGJ1YmJsZS5pbmRleClcbiAgICB9XG5cbiAgICBcbiAgfVxuXG5mdW5jdGlvbiBzZXRVVlNlY3Rpb24oXG5cdHNlY3Rpb246IEltYWdlU2VjdGlvbixcblx0c2l6ZVg6IG51bWJlcixcblx0c2l6ZVk6IG51bWJlclxuICApIHtcblx0cmV0dXJuIHNldFVWcyhcbiAgICAgICAge3g6ICBzZWN0aW9uLnNvdXJjZUxlZnQhIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6ICAoc2l6ZVkgLSBzZWN0aW9uLnNvdXJjZVRvcCEpIC8gc2l6ZVl9LFxuICAgICAgICB7eDogIHNlY3Rpb24uc291cmNlTGVmdCEgLyBzaXplWCwgeTogKHNpemVZIC0gc2VjdGlvbi5zb3VyY2VUb3AhKSAvIHNpemVZfSxcblx0KVxuICB9XG5cbmZ1bmN0aW9uIHNldFVWcyhcblx0X3V2MDA6IGFueSxcblx0X3V2MTA6IGFueSxcblx0X3V2MTE6IGFueSxcblx0X3V2MDE6IGFueVxuICApIHtcblxuXHRyZXR1cm4gW1xuXHQgIF91djAwLngsXG5cdCAgX3V2MDAueSxcbiAgXG5cdCAgX3V2MTAueCxcblx0ICBfdXYxMC55LFxuICBcblx0ICBfdXYxMS54LFxuXHQgIF91djExLnksXG4gIFxuXHQgIF91djAxLngsXG5cdCAgX3V2MDEueSxcblx0ICAvLy0tLS1cblx0ICBfdXYwMC54LFxuXHQgIF91djAwLnksXG4gIFxuXHQgIF91djEwLngsXG5cdCAgX3V2MTAueSxcbiAgXG5cdCAgX3V2MTEueCxcblx0ICBfdXYxMS55LFxuICBcblx0ICBfdXYwMS54LFxuXHQgIF91djAxLnksXG5cdF1cbiAgfVxuXG4gIGxldCBidWJibGVPcHRpb25zOmFueSA9IHtcbiAgICBzaG9ydDoge1xuICAgICAgc291cmNlV2lkdGg6IDExNiAqIDIsXG4gICAgICBzb3VyY2VIZWlnaHQ6IDg0ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDMwNSAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDQxNyAqIDIsXG4gICAgfSxcbiAgICBub3JtYWw6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiAyODYgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiA4NCAqIDIsXG4gICAgICBzb3VyY2VMZWZ0OiA4ICogMixcbiAgICAgIHNvdXJjZVRvcDogNDE3ICogMixcbiAgICB9LFxuICAgIGxvbmc6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiA0OTcgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiAxNTMgKiAyLFxuICAgICAgc291cmNlTGVmdDogNiAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDI1NCAqIDIsXG4gICAgfSxcbiAgICBodWdlOiB7XG4gICAgICBzb3VyY2VXaWR0aDogNDk3ICogMixcbiAgICAgIHNvdXJjZUhlaWdodDogMjM5ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDYgKiAyLFxuICAgICAgc291cmNlVG9wOiA3ICogMixcbiAgICB9LFxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWJibGVUZXh0TGVuZ3RoKHRleHQ6c3RyaW5nKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+PSBtYXhMZW5ndGhIdWdlQnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICAgIGVsc2UgaWYodGV4dC5sZW5ndGggPj0gbWF4TGVuZ3RoTG9uZ0J1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aE5vcm1hbEJ1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aFNob3J0QnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICB9Il19
package/dist/dialog.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Entity } from "@dcl/sdk/ecs";
2
- import { Dialog } from "./types";
2
+ import { Dialog, ImageData } from "./types";
3
3
  export declare const npcDialogComponent: Map<Entity, any>;
4
4
  export declare const npcDialogTypingSystems: Map<Entity, any>;
5
5
  export declare enum ConfirmMode {
@@ -9,7 +9,14 @@ export declare enum ConfirmMode {
9
9
  Button3 = 3,
10
10
  Button4 = 4
11
11
  }
12
- export declare function addDialog(npc: Entity, sound?: string): void;
12
+ export declare let UIscaleMultiplier: number;
13
+ export declare function addDialog(npc: Entity, sound?: string, defaultPortrait?: ImageData): void;
14
+ export declare function displayPortrait(): any;
15
+ export declare function positionPortaitX(): any;
16
+ export declare function positionPortaitY(): any;
17
+ export declare function portraitWidth(): any;
18
+ export declare function portraitHeight(): any;
19
+ export declare function getPortrait(): any;
13
20
  export declare function getText(): any;
14
21
  export declare function getButtonText(button: number): string;
15
22
  export declare function getFontSize(): any;
@@ -22,7 +29,9 @@ export declare function getTextPosition(): {
22
29
  };
23
30
  export declare function buttonClick(button: number): void;
24
31
  export declare function closeDialog(npc: Entity): void;
25
- export declare function talk(npc: Entity, dialog: Dialog[], startIndex?: number, duration?: number): void;
32
+ export declare function talk(npc: Entity, dialog: Dialog[], startIndex?: number | string, duration?: number): void;
33
+ export declare function openDialog(npc: Entity, dialog: Dialog[], startIndex: number): void;
34
+ export declare function addLineBreak(text: string, bubble?: boolean): string;
26
35
  export declare function addLineBreaks(dialog: Dialog[], bubble?: boolean): Dialog[];
27
36
  export declare function handleDialogClick(): void;
28
37
  export declare function confirmText(npc: Entity, mode: ConfirmMode): void;
@@ -37,3 +46,4 @@ export type ImageAtlasData = {
37
46
  export declare function getImageAtlasMapping(data?: ImageAtlasData): number[];
38
47
  export declare function realWidth(width?: number): number;
39
48
  export declare function realHeight(height?: number): number;
49
+ export declare function findDialogByName(dialogs: Dialog[], name: string): number;