@taimos/radball-digital-api 0.0.0 → 0.0.1

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.
Files changed (2) hide show
  1. package/lib/validation.js +60 -60
  2. package/package.json +1 -1
package/lib/validation.js CHANGED
@@ -58,28 +58,28 @@ exports.ValidationCheckResult = ValidationCheckResult;
58
58
  function checkAddress(address) {
59
59
  const result = new ValidationCheckResult();
60
60
  if (address?.city?.trim().length === 0) {
61
- result.addError('city', 'City is required');
61
+ result.addError('city', 'Stadt ist erforderlich');
62
62
  }
63
63
  else if (address.city.length > 200) {
64
- result.addError('city', 'City cannot exceed 200 characters');
64
+ result.addError('city', 'Stadt darf 200 Zeichen nicht überschreiten');
65
65
  }
66
66
  if (address?.country?.trim().length === 0) {
67
- result.addError('country', 'Country is required');
67
+ result.addError('country', 'Land ist erforderlich');
68
68
  }
69
69
  else if (address.country.length > 20) {
70
- result.addError('country', 'Country cannot exceed 20 characters');
70
+ result.addError('country', 'Land darf 20 Zeichen nicht überschreiten');
71
71
  }
72
72
  if (address?.street?.trim().length === 0) {
73
- result.addError('street', 'Street is required');
73
+ result.addError('street', 'Straße ist erforderlich');
74
74
  }
75
75
  else if (address.street.length > 200) {
76
- result.addError('street', 'Street cannot exceed 200 characters');
76
+ result.addError('street', 'Straße darf 200 Zeichen nicht überschreiten');
77
77
  }
78
78
  if (address?.zip?.trim().length === 0) {
79
- result.addError('zip', 'Zip code is required');
79
+ result.addError('zip', 'PLZ ist erforderlich');
80
80
  }
81
81
  else if (address.zip.length > 20) {
82
- result.addError('zip', 'Zip code cannot exceed 20 characters');
82
+ result.addError('zip', 'PLZ darf 20 Zeichen nicht überschreiten');
83
83
  }
84
84
  return result;
85
85
  }
@@ -92,36 +92,36 @@ function checkLeague(league) {
92
92
  // Age range validations
93
93
  if (league.minAge != undefined && league.maxAge != undefined) {
94
94
  if (league.minAge < 0) {
95
- result.addError('minAge', 'Minimum age cannot be negative');
95
+ result.addError('minAge', 'Mindestalter darf nicht negativ sein');
96
96
  }
97
97
  if (league.maxAge < 0) {
98
- result.addError('maxAge', 'Maximum age cannot be negative');
98
+ result.addError('maxAge', 'Maximalalter darf nicht negativ sein');
99
99
  }
100
100
  if (league.maxAge < league.minAge) {
101
- result.addError('maxAge', 'Maximum age must be greater than or equal to minimum age');
101
+ result.addError('maxAge', 'Maximalalter muss größer oder gleich dem Mindestalter sein');
102
102
  }
103
103
  if (league.maxAge > 100) { // adjust as needed
104
- result.addError('maxAge', 'Maximum age exceeds reasonable limit');
104
+ result.addError('maxAge', 'Maximalalter überschreitet das vernünftige Limit');
105
105
  }
106
106
  }
107
107
  // Name validations
108
108
  if (!league.name || league.name.trim().length === 0) {
109
- result.addError('name', 'League name is required');
109
+ result.addError('name', 'Liganame ist erforderlich');
110
110
  }
111
111
  else if (league.name.length > 100) { // adjust max length as needed
112
- result.addError('name', 'League name cannot exceed 100 characters');
112
+ result.addError('name', 'Liganame darf 100 Zeichen nicht überschreiten');
113
113
  }
114
114
  // Description validation (if required)
115
115
  if (league.description && league.description.length > 500) {
116
- result.addError('description', 'Description cannot exceed 500 characters');
116
+ result.addError('description', 'Beschreibung darf 500 Zeichen nicht überschreiten');
117
117
  }
118
118
  // Short name validation
119
119
  if (league.shortName) {
120
120
  if (league.shortName.length > 10) {
121
- result.addError('shortName', 'Short name cannot exceed 10 characters');
121
+ result.addError('shortName', 'Kurzname darf 10 Zeichen nicht überschreiten');
122
122
  }
123
123
  if (!/^[A-Za-z0-9]+$/.test(league.shortName)) {
124
- result.addError('shortName', 'Short name can only contain alphanumeric characters');
124
+ result.addError('shortName', 'Kurzname darf nur alphanumerische Zeichen enthalten');
125
125
  }
126
126
  }
127
127
  return result;
@@ -134,15 +134,15 @@ function checkClub(club) {
134
134
  const result = new ValidationCheckResult();
135
135
  // Full name validations
136
136
  if (!club.name || club.name.trim().length === 0) {
137
- result.addError('name', 'Club name is required');
137
+ result.addError('name', 'Vereinsname ist erforderlich');
138
138
  }
139
139
  else if (club.name.length > 100) {
140
- result.addError('name', 'Club name cannot exceed 100 characters');
140
+ result.addError('name', 'Vereinsname darf 100 Zeichen nicht überschreiten');
141
141
  }
142
142
  // Short name validations
143
143
  if (club.shortName) {
144
144
  if (club.shortName.length > 30) {
145
- result.addError('shortName', 'Short name cannot exceed 30 characters');
145
+ result.addError('shortName', 'Kurzname darf 30 Zeichen nicht überschreiten');
146
146
  }
147
147
  }
148
148
  // Website validation
@@ -150,11 +150,11 @@ function checkClub(club) {
150
150
  try {
151
151
  new URL(club.website);
152
152
  if (!club.website.startsWith('http://') && !club.website.startsWith('https://')) {
153
- result.addError('website', 'Website must start with http:// or https://');
153
+ result.addError('website', 'Website muss mit http:// oder https:// beginnen');
154
154
  }
155
155
  }
156
156
  catch {
157
- result.addError('website', 'Invalid website URL');
157
+ result.addError('website', 'Ungültige Website-URL');
158
158
  }
159
159
  }
160
160
  // Address validation
@@ -178,14 +178,14 @@ function checkGym(gym) {
178
178
  const result = new ValidationCheckResult();
179
179
  // Name validations
180
180
  if (!gym.name || gym.name.trim().length === 0) {
181
- result.addError('name', 'Gym name is required');
181
+ result.addError('name', 'Hallenname ist erforderlich');
182
182
  }
183
183
  else if (gym.name.length > 100) {
184
- result.addError('name', 'Gym name cannot exceed 100 characters');
184
+ result.addError('name', 'Hallenname darf 100 Zeichen nicht überschreiten');
185
185
  }
186
186
  // available fields validation
187
187
  if (!gym.availableFields || gym.availableFields.trim().length === 0) {
188
- result.addError('availableFields', 'Available fields are required');
188
+ result.addError('availableFields', 'Verfügbare Felder sind erforderlich');
189
189
  }
190
190
  // Address validations
191
191
  const addressResult = checkAddress(gym.address);
@@ -206,47 +206,47 @@ function checkSeason(season) {
206
206
  const result = new ValidationCheckResult();
207
207
  // Name validations
208
208
  if (!season.name || season.name.trim().length === 0) {
209
- result.addError('name', 'Season name is required');
209
+ result.addError('name', 'Saisonname ist erforderlich');
210
210
  }
211
211
  else if (season.name.length > 100) {
212
- result.addError('name', 'Season name cannot exceed 100 characters');
212
+ result.addError('name', 'Saisonname darf 100 Zeichen nicht überschreiten');
213
213
  }
214
214
  // Check for valid dates
215
215
  const startDate = new Date(season.startDate);
216
216
  const endDate = new Date(season.endDate);
217
217
  const registrationEnd = new Date(season.registrationEnd);
218
218
  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime()) || isNaN(registrationEnd.getTime())) {
219
- result.addError('dates', 'Invalid date format');
219
+ result.addError('dates', 'Ungültiges Datumsformat');
220
220
  }
221
221
  if (season.registrationStart) {
222
222
  const registrationStart = new Date(season.registrationStart);
223
223
  if (isNaN(registrationStart.getTime())) {
224
- result.addError('registrationStart', 'Invalid date format');
224
+ result.addError('registrationStart', 'Ungültiges Datumsformat');
225
225
  }
226
226
  }
227
227
  // Season date validations
228
228
  if (endDate <= startDate) {
229
- result.addError('endDate', 'Season end date must be after start date');
229
+ result.addError('endDate', 'Saison-Enddatum muss nach dem Startdatum liegen');
230
230
  }
231
231
  // Registration period validations
232
232
  if (season.registrationStart) {
233
233
  const registrationStart = new Date(season.registrationStart);
234
234
  if (registrationStart) {
235
235
  if (registrationEnd <= registrationStart) {
236
- result.addError('registrationEnd', 'Registration end date must be after registration start date');
236
+ result.addError('registrationEnd', 'Anmeldungsende muss nach dem Anmeldungsstart liegen');
237
237
  }
238
238
  if (registrationStart >= startDate) {
239
- result.addError('registrationStart', 'Registration must start before season start date');
239
+ result.addError('registrationStart', 'Anmeldung muss vor dem Saisonstart beginnen');
240
240
  }
241
241
  }
242
242
  }
243
243
  if (registrationEnd > startDate) {
244
- result.addError('registrationEnd', 'Registration must end before season start date');
244
+ result.addError('registrationEnd', 'Anmeldung muss vor dem Saisonstart enden');
245
245
  }
246
246
  // Future date validation
247
247
  const now = new Date();
248
248
  if (startDate < now) {
249
- result.addError('startDate', 'Season start date cannot be in the past');
249
+ result.addError('startDate', 'Saison-Startdatum darf nicht in der Vergangenheit liegen');
250
250
  }
251
251
  return result;
252
252
  }
@@ -258,33 +258,33 @@ function checkPerson(person) {
258
258
  const result = new ValidationCheckResult();
259
259
  // Name validations
260
260
  if (!person.firstName?.trim()) {
261
- result.addError('firstName', 'First name is required');
261
+ result.addError('firstName', 'Vorname ist erforderlich');
262
262
  }
263
263
  if (!person.lastName?.trim()) {
264
- result.addError('lastName', 'Last name is required');
264
+ result.addError('lastName', 'Nachname ist erforderlich');
265
265
  }
266
266
  // Email validation
267
267
  if (person.email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(person.email)) {
268
- result.addError('email', 'Invalid email format');
268
+ result.addError('email', 'Ungültiges E-Mail-Format');
269
269
  }
270
270
  // Phone number validation
271
271
  if (person.phone) {
272
272
  // Allow digits, spaces, +, -, and ()
273
273
  const phoneRegex = /^[\d\s+()-]{8,20}$/;
274
274
  if (!phoneRegex.test(person.phone)) {
275
- result.addError('phone', 'Invalid phone number format');
275
+ result.addError('phone', 'Ungültiges Telefonnummer-Format (+49 1234 567890)');
276
276
  }
277
277
  }
278
278
  // Date of birth validation
279
279
  if (person.dateOfBirth) {
280
280
  const date = new Date(person.dateOfBirth);
281
281
  if (isNaN(date.getTime())) {
282
- result.addError('dateOfBirth', 'Invalid date of birth format');
282
+ result.addError('dateOfBirth', 'Ungültiges Geburtsdatumsformat');
283
283
  }
284
284
  // Add age restrictions if needed
285
285
  const today = new Date();
286
286
  if (date > today) {
287
- result.addError('dateOfBirth', 'Date of birth cannot be in the future');
287
+ result.addError('dateOfBirth', 'Geburtsdatum darf nicht in der Zukunft liegen');
288
288
  }
289
289
  }
290
290
  // Address validation
@@ -308,21 +308,21 @@ function checkAssociation(association) {
308
308
  const result = new ValidationCheckResult();
309
309
  // Name validation
310
310
  if (!association.name?.trim()) {
311
- result.addError('name', 'Association name is required');
311
+ result.addError('name', 'Verbandsname ist erforderlich');
312
312
  }
313
313
  else if (association.name.length > 100) { // adjust max length as needed
314
- result.addError('name', 'Association name cannot exceed 100 characters');
314
+ result.addError('name', 'Verbandsname darf 100 Zeichen nicht überschreiten');
315
315
  }
316
316
  // Contact Email validation
317
317
  if (!association.contactEmail?.trim()) {
318
- result.addError('contactEmail', 'Contact email is required');
318
+ result.addError('contactEmail', 'Kontakt-E-Mail ist erforderlich');
319
319
  }
320
320
  else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(association.contactEmail)) {
321
- result.addError('contactEmail', 'Invalid contact email format');
321
+ result.addError('contactEmail', 'Ungültiges Kontakt-E-Mail-Format');
322
322
  }
323
323
  // Contact Name validation
324
324
  if (!association.contactName?.trim()) {
325
- result.addError('contactName', 'Contact name is required');
325
+ result.addError('contactName', 'Kontaktname ist erforderlich');
326
326
  }
327
327
  // Address validation
328
328
  const addressResult = checkAddress(association.address);
@@ -343,28 +343,28 @@ function checkLeagueGroup(leagueGroup) {
343
343
  const result = new ValidationCheckResult();
344
344
  // Name validations
345
345
  if (!leagueGroup.name || leagueGroup.name.trim().length === 0) {
346
- result.addError('name', 'League group name is required');
346
+ result.addError('name', 'Staffelname ist erforderlich');
347
347
  }
348
348
  else if (leagueGroup.name.length > 100) {
349
- result.addError('name', 'League group name cannot exceed 100 characters');
349
+ result.addError('name', 'Staffelname darf 100 Zeichen nicht überschreiten');
350
350
  }
351
351
  // Number validation
352
352
  if (leagueGroup.number < 1) {
353
- result.addError('number', 'League group number must be positive');
353
+ result.addError('number', 'Staffelnummer muss positiv sein');
354
354
  }
355
355
  // Short name validations
356
356
  if (!leagueGroup.shortName || leagueGroup.shortName.trim().length === 0) {
357
- result.addError('shortName', 'League group short name is required');
357
+ result.addError('shortName', 'Staffel-Kurzname ist erforderlich');
358
358
  }
359
359
  else if (leagueGroup.shortName.length > 10) {
360
- result.addError('shortName', 'League group short name cannot exceed 10 characters');
360
+ result.addError('shortName', 'Staffel-Kurzname darf 10 Zeichen nicht überschreiten');
361
361
  }
362
362
  else if (!/^[A-Za-z0-9]+$/.test(leagueGroup.shortName)) {
363
- result.addError('shortName', 'League group short name can only contain alphanumeric characters');
363
+ result.addError('shortName', 'Staffel-Kurzname darf nur alphanumerische Zeichen enthalten');
364
364
  }
365
365
  // Regulation validation
366
366
  if (!leagueGroup.regulation || leagueGroup.regulation.trim().length === 0) {
367
- result.addError('regulation', 'League group regulation is required');
367
+ result.addError('regulation', 'Staffel-Regelungen sind erforderlich');
368
368
  }
369
369
  return result;
370
370
  }
@@ -377,31 +377,31 @@ function checkTeam(team) {
377
377
  // Name validation
378
378
  if ('name' in team && team.name !== undefined) {
379
379
  if (team.name.trim().length === 0) {
380
- result.addError('name', 'Team name cannot be empty');
380
+ result.addError('name', 'Teamname darf nicht leer sein');
381
381
  }
382
382
  else if (team.name.length > 100) {
383
- result.addError('name', 'Team name cannot exceed 100 characters');
383
+ result.addError('name', 'Teamname darf 100 Zeichen nicht überschreiten');
384
384
  }
385
385
  }
386
386
  else if (!('id' in team)) { // if id is not in team, then it is a new team
387
- result.addError('name', 'Team name is required');
387
+ result.addError('name', 'Teamname ist erforderlich');
388
388
  }
389
389
  // League ID validation
390
390
  if ('leagueId' in team && team.leagueId !== undefined) {
391
391
  if (team.leagueId.trim().length === 0) {
392
- result.addError('leagueId', 'League ID cannot be empty');
392
+ result.addError('leagueId', 'Liga-ID darf nicht leer sein');
393
393
  }
394
394
  else if (team.leagueId.length > 100) {
395
- result.addError('leagueId', 'League ID cannot exceed 100 characters');
395
+ result.addError('leagueId', 'Liga-ID darf 100 Zeichen nicht überschreiten');
396
396
  }
397
397
  }
398
398
  else if (!('id' in team)) { // if id is not in team, then it is a new team
399
- result.addError('leagueId', 'League ID is required');
399
+ result.addError('leagueId', 'Liga-ID ist erforderlich');
400
400
  }
401
401
  // Exemption request validation
402
402
  if (team.exemptionRequest) {
403
403
  if (team.exemptionRequest.trim().length > 1000) {
404
- result.addError('exemptionRequest', 'Exemption request cannot exceed 1000 characters');
404
+ result.addError('exemptionRequest', 'Freistellungsantrag darf 1000 Zeichen nicht überschreiten');
405
405
  }
406
406
  }
407
407
  return result;
@@ -410,4 +410,4 @@ function validateTeam(team) {
410
410
  const result = checkTeam(team);
411
411
  result.validate();
412
412
  }
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRDQSxvQ0E0QkM7QUFFRCwwQ0FHQztBQUVELGtDQTBDQztBQUVELHdDQUdDO0FBRUQsOEJBMENDO0FBRUQsb0NBR0M7QUFFRCw0QkEwQkM7QUFFRCxrQ0FHQztBQUVELGtDQXVEQztBQUVELHdDQUdDO0FBRUQsa0NBb0RDO0FBRUQsd0NBR0M7QUFFRCw0Q0FpQ0M7QUFFRCxrREFHQztBQUVELDRDQThCQztBQUVELGtEQUdDO0FBRUQsOEJBaUNDO0FBRUQsb0NBR0M7QUE1YkQsTUFBYSxxQkFBcUI7SUFBbEM7UUFFa0IsYUFBUSxHQUFrQyxFQUFFLENBQUM7UUFDN0MsV0FBTSxHQUFrQyxFQUFFLENBQUM7SUFxQzdELENBQUM7SUFuQ1EsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENB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QUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDhDQUE4QztRQUMxRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxJQUF5RDtJQUNwRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzLCBNb2RpZnlBc3NvY2lhdGlvbklucHV0LCBNb2RpZnlDbHViSW5wdXQsIE1vZGlmeUd5bUlucHV0LCBNb2RpZnlMZWFndWVJbnB1dCwgTW9kaWZ5UGVyc29uSW5wdXQsIE1vZGlmeVNlYXNvbklucHV0LCBTYXZlQXNzb2NpYXRpb25JbnB1dCwgU2F2ZUNsdWJJbnB1dCwgU2F2ZUd5bUlucHV0LCBTYXZlTGVhZ3VlR3JvdXBJbnB1dCwgU2F2ZUxlYWd1ZUlucHV0LCBTYXZlUGVyc29uSW5wdXQsIFNhdmVTZWFzb25JbnB1dCwgTW9kaWZ5TGVhZ3VlR3JvdXBJbnB1dCwgU2F2ZVRlYW1JbnB1dCwgTW9kaWZ5VGVhbUlucHV0LCBSZWdpc3RlclRlYW1JbnB1dCB9IGZyb20gJ0BnZW5lcmF0ZWQvZ3JhcGhxbC5tb2RlbC5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ3M6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG5cbiAgcHVibGljIGFkZFdhcm5pbmcoZmllbGQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLndhcm5pbmdzW2ZpZWxkXSkge1xuICAgICAgdGhpcy53YXJuaW5nc1tmaWVsZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy53YXJuaW5nc1tmaWVsZF0ucHVzaChtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFcnJvcihmaWVsZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXJyb3JzW2ZpZWxkXSkge1xuICAgICAgdGhpcy5lcnJvcnNbZmllbGRdID0gW107XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzW2ZpZWxkXS5wdXNoKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZXJyb3JzKS5mbGF0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FybmluZ01lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLndhcm5pbmdzKS5mbGF0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlc1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZXMoKS5qb2luKCc7ICcpO1xuICB9XG5cbiAgcHVibGljIGdldFdhcm5pbmdNZXNzYWdlc1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFdhcm5pbmdNZXNzYWdlcygpLmpvaW4oJzsgJyk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2VzU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgaWYgKGFkZHJlc3M/LmNpdHk/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NpdHknLCAnQ2l0eSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGFkZHJlc3MuY2l0eSEubGVuZ3RoID4gMjAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjaXR5JywgJ0NpdHkgY2Fubm90IGV4Y2VlZCAyMDAgY2hhcmFjdGVycycpO1xuICB9XG5cbiAgaWYgKGFkZHJlc3M/LmNvdW50cnk/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvdW50cnknLCAnQ291bnRyeSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGFkZHJlc3MuY291bnRyeSEubGVuZ3RoID4gMjApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvdW50cnknLCAnQ291bnRyeSBjYW5ub3QgZXhjZWVkIDIwIGNoYXJhY3RlcnMnKTtcbiAgfVxuXG4gIGlmIChhZGRyZXNzPy5zdHJlZXQ/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3N0cmVldCcsICdTdHJlZXQgaXMgcmVxdWlyZWQnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLnN0cmVldCEubGVuZ3RoID4gMjAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdHJlZXQnLCAnU3RyZWV0IGNhbm5vdCBleGNlZWQgMjAwIGNoYXJhY3RlcnMnKTtcbiAgfVxuXG4gIGlmIChhZGRyZXNzPy56aXA/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3ppcCcsICdaaXAgY29kZSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGFkZHJlc3MuemlwIS5sZW5ndGggPiAyMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignemlwJywgJ1ppcCBjb2RlIGNhbm5vdCBleGNlZWQgMjAgY2hhcmFjdGVycycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0xlYWd1ZShsZWFndWU6IFNhdmVMZWFndWVJbnB1dCB8IE1vZGlmeUxlYWd1ZUlucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIEFnZSByYW5nZSB2YWxpZGF0aW9uc1xuICBpZiAobGVhZ3VlLm1pbkFnZSAhPSB1bmRlZmluZWQgJiYgbGVhZ3VlLm1heEFnZSAhPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGVhZ3VlLm1pbkFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWluQWdlJywgJ01pbmltdW0gYWdlIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltdW0gYWdlIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IGxlYWd1ZS5taW5BZ2UpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltdW0gYWdlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pbmltdW0gYWdlJyk7XG4gICAgfVxuICAgIGlmIChsZWFndWUubWF4QWdlID4gMTAwKSB7IC8vIGFkanVzdCBhcyBuZWVkZWRcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltdW0gYWdlIGV4Y2VlZHMgcmVhc29uYWJsZSBsaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFsZWFndWUubmFtZSB8fCBsZWFndWUubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0xlYWd1ZSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAobGVhZ3VlLm5hbWUubGVuZ3RoID4gMTAwKSB7IC8vIGFkanVzdCBtYXggbGVuZ3RoIGFzIG5lZWRlZFxuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdMZWFndWUgbmFtZSBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBEZXNjcmlwdGlvbiB2YWxpZGF0aW9uIChpZiByZXF1aXJlZClcbiAgaWYgKGxlYWd1ZS5kZXNjcmlwdGlvbiAmJiBsZWFndWUuZGVzY3JpcHRpb24ubGVuZ3RoID4gNTAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbiBjYW5ub3QgZXhjZWVkIDUwMCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25cbiAgaWYgKGxlYWd1ZS5zaG9ydE5hbWUpIHtcbiAgICBpZiAobGVhZ3VlLnNob3J0TmFtZS5sZW5ndGggPiAxMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnU2hvcnQgbmFtZSBjYW5ub3QgZXhjZWVkIDEwIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgaWYgKCEvXltBLVphLXowLTldKyQvLnRlc3QobGVhZ3VlLnNob3J0TmFtZSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ1Nob3J0IG5hbWUgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxlYWd1ZShsZWFndWU6IFNhdmVMZWFndWVJbnB1dCB8IE1vZGlmeUxlYWd1ZUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrTGVhZ3VlKGxlYWd1ZSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDbHViKGNsdWI6IFNhdmVDbHViSW5wdXQgfCBNb2RpZnlDbHViSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gRnVsbCBuYW1lIHZhbGlkYXRpb25zXG4gIGlmICghY2x1Yi5uYW1lIHx8IGNsdWIubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0NsdWIgbmFtZSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGNsdWIubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnQ2x1YiBuYW1lIGNhbm5vdCBleGNlZWQgMTAwIGNoYXJhY3RlcnMnKTtcbiAgfVxuXG4gIC8vIFNob3J0IG5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKGNsdWIuc2hvcnROYW1lKSB7XG4gICAgaWYgKGNsdWIuc2hvcnROYW1lLmxlbmd0aCA+IDMwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdTaG9ydCBuYW1lIGNhbm5vdCBleGNlZWQgMzAgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlYnNpdGUgdmFsaWRhdGlvblxuICBpZiAoY2x1Yi53ZWJzaXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBVUkwoY2x1Yi53ZWJzaXRlKTtcbiAgICAgIGlmICghY2x1Yi53ZWJzaXRlLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhY2x1Yi53ZWJzaXRlLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmVzdWx0LmFkZEVycm9yKCd3ZWJzaXRlJywgJ1dlYnNpdGUgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignd2Vic2l0ZScsICdJbnZhbGlkIHdlYnNpdGUgVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uXG4gIGlmIChjbHViLmFkZHJlc3MgJiYgKGNsdWIuYWRkcmVzcy5jaXR5IHx8IGNsdWIuYWRkcmVzcy5zdHJlZXQgfHwgY2x1Yi5hZGRyZXNzLnppcCkpIHtcbiAgICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGNsdWIuYWRkcmVzcyk7XG4gICAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsdWIoY2x1YjogU2F2ZUNsdWJJbnB1dCB8IE1vZGlmeUNsdWJJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0NsdWIoY2x1Yik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHeW0oZ3ltOiBTYXZlR3ltSW5wdXQgfCBNb2RpZnlHeW1JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghZ3ltLm5hbWUgfHwgZ3ltLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdHeW0gbmFtZSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKGd5bS5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdHeW0gbmFtZSBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBhdmFpbGFibGUgZmllbGRzIHZhbGlkYXRpb25cbiAgaWYgKCFneW0uYXZhaWxhYmxlRmllbGRzIHx8IGd5bS5hdmFpbGFibGVGaWVsZHMudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignYXZhaWxhYmxlRmllbGRzJywgJ0F2YWlsYWJsZSBmaWVsZHMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25zXG4gIGNvbnN0IGFkZHJlc3NSZXN1bHQgPSBjaGVja0FkZHJlc3MoZ3ltLmFkZHJlc3MpO1xuICAvLyBNZXJnZSBhZGRyZXNzIGVycm9ycyBpbnRvIHRoZSBtYWluIHJlc3VsdFxuICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZEVycm9yKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZFdhcm5pbmcoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUd5bShneW06IFNhdmVHeW1JbnB1dCB8IE1vZGlmeUd5bUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrR3ltKGd5bSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTZWFzb24oc2Vhc29uOiBTYXZlU2Vhc29uSW5wdXQgfCBNb2RpZnlTZWFzb25JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghc2Vhc29uLm5hbWUgfHwgc2Vhc29uLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdTZWFzb24gbmFtZSBpcyByZXF1aXJlZCcpO1xuICB9IGVsc2UgaWYgKHNlYXNvbi5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdTZWFzb24gbmFtZSBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdmFsaWQgZGF0ZXNcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc2Vhc29uLnN0YXJ0RGF0ZSk7XG4gIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzZWFzb24uZW5kRGF0ZSk7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvbkVuZCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25FbmQpO1xuXG4gIGlmIChpc05hTihzdGFydERhdGUuZ2V0VGltZSgpKSB8fCBpc05hTihlbmREYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4ocmVnaXN0cmF0aW9uRW5kLmdldFRpbWUoKSkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2RhdGVzJywgJ0ludmFsaWQgZGF0ZSBmb3JtYXQnKTtcbiAgfVxuXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKGlzTmFOKHJlZ2lzdHJhdGlvblN0YXJ0LmdldFRpbWUoKSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uU3RhcnQnLCAnSW52YWxpZCBkYXRlIGZvcm1hdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlYXNvbiBkYXRlIHZhbGlkYXRpb25zXG4gIGlmIChlbmREYXRlIDw9IHN0YXJ0RGF0ZSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignZW5kRGF0ZScsICdTZWFzb24gZW5kIGRhdGUgbXVzdCBiZSBhZnRlciBzdGFydCBkYXRlJyk7XG4gIH1cblxuICAvLyBSZWdpc3RyYXRpb24gcGVyaW9kIHZhbGlkYXRpb25zXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICBpZiAocmVnaXN0cmF0aW9uRW5kIDw9IHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uRW5kJywgJ1JlZ2lzdHJhdGlvbiBlbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHJlZ2lzdHJhdGlvbiBzdGFydCBkYXRlJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVnaXN0cmF0aW9uU3RhcnQgPj0gc3RhcnREYXRlKSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uU3RhcnQnLCAnUmVnaXN0cmF0aW9uIG11c3Qgc3RhcnQgYmVmb3JlIHNlYXNvbiBzdGFydCBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlZ2lzdHJhdGlvbkVuZCA+IHN0YXJ0RGF0ZSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uRW5kJywgJ1JlZ2lzdHJhdGlvbiBtdXN0IGVuZCBiZWZvcmUgc2Vhc29uIHN0YXJ0IGRhdGUnKTtcbiAgfVxuXG4gIC8vIEZ1dHVyZSBkYXRlIHZhbGlkYXRpb25cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgaWYgKHN0YXJ0RGF0ZSA8IG5vdykge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc3RhcnREYXRlJywgJ1NlYXNvbiBzdGFydCBkYXRlIGNhbm5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vhc29uKHNlYXNvbjogU2F2ZVNlYXNvbklucHV0IHwgTW9kaWZ5U2Vhc29uSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tTZWFzb24oc2Vhc29uKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BlcnNvbihwZXJzb246IFNhdmVQZXJzb25JbnB1dCB8IE1vZGlmeVBlcnNvbklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFwZXJzb24uZmlyc3ROYW1lPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2ZpcnN0TmFtZScsICdGaXJzdCBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIXBlcnNvbi5sYXN0TmFtZT8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdsYXN0TmFtZScsICdMYXN0IG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIEVtYWlsIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5lbWFpbCAmJiAhL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdChwZXJzb24uZW1haWwpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdlbWFpbCcsICdJbnZhbGlkIGVtYWlsIGZvcm1hdCcpO1xuICB9XG5cbiAgLy8gUGhvbmUgbnVtYmVyIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5waG9uZSkge1xuICAgIC8vIEFsbG93IGRpZ2l0cywgc3BhY2VzLCArLCAtLCBhbmQgKClcbiAgICBjb25zdCBwaG9uZVJlZ2V4ID0gL15bXFxkXFxzKygpLV17OCwyMH0kLztcbiAgICBpZiAoIXBob25lUmVnZXgudGVzdChwZXJzb24ucGhvbmUpKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Bob25lJywgJ0ludmFsaWQgcGhvbmUgbnVtYmVyIGZvcm1hdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERhdGUgb2YgYmlydGggdmFsaWRhdGlvblxuICBpZiAocGVyc29uLmRhdGVPZkJpcnRoKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHBlcnNvbi5kYXRlT2ZCaXJ0aCk7XG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdkYXRlT2ZCaXJ0aCcsICdJbnZhbGlkIGRhdGUgb2YgYmlydGggZm9ybWF0Jyk7XG4gICAgfVxuICAgIC8vIEFkZCBhZ2UgcmVzdHJpY3Rpb25zIGlmIG5lZWRlZFxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoZGF0ZSA+IHRvZGF5KSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2RhdGVPZkJpcnRoJywgJ0RhdGUgb2YgYmlydGggY2Fubm90IGJlIGluIHRoZSBmdXR1cmUnKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5hZGRyZXNzICYmIChwZXJzb24uYWRkcmVzcy5jaXR5IHx8IHBlcnNvbi5hZGRyZXNzLnN0cmVldCB8fCBwZXJzb24uYWRkcmVzcy56aXApKSB7XG4gICAgY29uc3QgYWRkcmVzc1Jlc3VsdCA9IGNoZWNrQWRkcmVzcyhwZXJzb24uYWRkcmVzcyk7XG4gICAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBlcnNvbihwZXJzb246IFNhdmVQZXJzb25JbnB1dCB8IE1vZGlmeVBlcnNvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrUGVyc29uKHBlcnNvbik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBc3NvY2lhdGlvbihhc3NvY2lhdGlvbjogU2F2ZUFzc29jaWF0aW9uSW5wdXQgfCBNb2RpZnlBc3NvY2lhdGlvbklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvblxuICBpZiAoIWFzc29jaWF0aW9uLm5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdBc3NvY2lhdGlvbiBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoYXNzb2NpYXRpb24ubmFtZS5sZW5ndGggPiAxMDApIHsgLy8gYWRqdXN0IG1heCBsZW5ndGggYXMgbmVlZGVkXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0Fzc29jaWF0aW9uIG5hbWUgY2Fubm90IGV4Y2VlZCAxMDAgY2hhcmFjdGVycycpO1xuICB9XG5cbiAgLy8gQ29udGFjdCBFbWFpbCB2YWxpZGF0aW9uXG4gIGlmICghYXNzb2NpYXRpb24uY29udGFjdEVtYWlsPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvbnRhY3RFbWFpbCcsICdDb250YWN0IGVtYWlsIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAoIS9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QoYXNzb2NpYXRpb24uY29udGFjdEVtYWlsKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY29udGFjdEVtYWlsJywgJ0ludmFsaWQgY29udGFjdCBlbWFpbCBmb3JtYXQnKTtcbiAgfVxuXG4gIC8vIENvbnRhY3QgTmFtZSB2YWxpZGF0aW9uXG4gIGlmICghYXNzb2NpYXRpb24uY29udGFjdE5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY29udGFjdE5hbWUnLCAnQ29udGFjdCBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25cbiAgY29uc3QgYWRkcmVzc1Jlc3VsdCA9IGNoZWNrQWRkcmVzcyhhc3NvY2lhdGlvbi5hZGRyZXNzKTtcbiAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC5lcnJvcnMpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgfSk7XG4gIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQud2FybmluZ3MpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBc3NvY2lhdGlvbihhc3NvY2lhdGlvbjogU2F2ZUFzc29jaWF0aW9uSW5wdXQgfCBNb2RpZnlBc3NvY2lhdGlvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQXNzb2NpYXRpb24oYXNzb2NpYXRpb24pO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTGVhZ3VlR3JvdXAobGVhZ3VlR3JvdXA6IFNhdmVMZWFndWVHcm91cElucHV0IHwgTW9kaWZ5TGVhZ3VlR3JvdXBJbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghbGVhZ3VlR3JvdXAubmFtZSB8fCBsZWFndWVHcm91cC5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnTGVhZ3VlIGdyb3VwIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgfSBlbHNlIGlmIChsZWFndWVHcm91cC5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdMZWFndWUgZ3JvdXAgbmFtZSBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBOdW1iZXIgdmFsaWRhdGlvblxuICBpZiAobGVhZ3VlR3JvdXAubnVtYmVyIDwgMSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbnVtYmVyJywgJ0xlYWd1ZSBncm91cCBudW1iZXIgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICB9XG5cbiAgLy8gU2hvcnQgbmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWxlYWd1ZUdyb3VwLnNob3J0TmFtZSB8fCBsZWFndWVHcm91cC5zaG9ydE5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ0xlYWd1ZSBncm91cCBzaG9ydCBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gIH0gZWxzZSBpZiAobGVhZ3VlR3JvdXAuc2hvcnROYW1lLmxlbmd0aCA+IDEwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnTGVhZ3VlIGdyb3VwIHNob3J0IG5hbWUgY2Fubm90IGV4Y2VlZCAxMCBjaGFyYWN0ZXJzJyk7XG4gIH0gZWxzZSBpZiAoIS9eW0EtWmEtejAtOV0rJC8udGVzdChsZWFndWVHcm91cC5zaG9ydE5hbWUpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnTGVhZ3VlIGdyb3VwIHNob3J0IG5hbWUgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycycpO1xuICB9XG5cbiAgLy8gUmVndWxhdGlvbiB2YWxpZGF0aW9uXG4gIGlmICghbGVhZ3VlR3JvdXAucmVndWxhdGlvbiB8fCBsZWFndWVHcm91cC5yZWd1bGF0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3JlZ3VsYXRpb24nLCAnTGVhZ3VlIGdyb3VwIHJlZ3VsYXRpb24gaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxlYWd1ZUdyb3VwKGxlYWd1ZUdyb3VwOiBTYXZlTGVhZ3VlR3JvdXBJbnB1dCB8IE1vZGlmeUxlYWd1ZUdyb3VwSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tMZWFndWVHcm91cChsZWFndWVHcm91cCk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tUZWFtKHRlYW06IFNhdmVUZWFtSW5wdXQgfCBNb2RpZnlUZWFtSW5wdXQgfCBSZWdpc3RlclRlYW1JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25cbiAgaWYgKCduYW1lJyBpbiB0ZWFtICYmIHRlYW0ubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRlYW0ubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVGVhbSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH0gZWxzZSBpZiAodGVhbS5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1RlYW0gbmFtZSBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEoJ2lkJyBpbiB0ZWFtKSkgeyAvLyBpZiBpZCBpcyBub3QgaW4gdGVhbSwgdGhlbiBpdCBpcyBhIG5ldyB0ZWFtXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1RlYW0gbmFtZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gTGVhZ3VlIElEIHZhbGlkYXRpb25cbiAgaWYgKCdsZWFndWVJZCcgaW4gdGVhbSAmJiB0ZWFtLmxlYWd1ZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGVhbS5sZWFndWVJZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2xlYWd1ZUlkJywgJ0xlYWd1ZSBJRCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9IGVsc2UgaWYgKHRlYW0ubGVhZ3VlSWQubGVuZ3RoID4gMTAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2xlYWd1ZUlkJywgJ0xlYWd1ZSBJRCBjYW5ub3QgZXhjZWVkIDEwMCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEoJ2lkJyBpbiB0ZWFtKSkgeyAvLyBpZiBpZCBpcyBub3QgaW4gdGVhbSwgdGhlbiBpdCBpcyBhIG5ldyB0ZWFtXG4gICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVJZCcsICdMZWFndWUgSUQgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIEV4ZW1wdGlvbiByZXF1ZXN0IHZhbGlkYXRpb25cbiAgaWYgKHRlYW0uZXhlbXB0aW9uUmVxdWVzdCkge1xuICAgIGlmICh0ZWFtLmV4ZW1wdGlvblJlcXVlc3QudHJpbSgpLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignZXhlbXB0aW9uUmVxdWVzdCcsICdFeGVtcHRpb24gcmVxdWVzdCBjYW5ub3QgZXhjZWVkIDEwMDAgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlYW0odGVhbTogU2F2ZVRlYW1JbnB1dCB8IE1vZGlmeVRlYW1JbnB1dCB8IFJlZ2lzdGVyVGVhbUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrVGVhbSh0ZWFtKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG4iXX0=
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRDQSxvQ0E0QkM7QUFFRCwwQ0FHQztBQUVELGtDQTBDQztBQUVELHdDQUdDO0FBRUQsOEJBMENDO0FBRUQsb0NBR0M7QUFFRCw0QkEwQkM7QUFFRCxrQ0FHQztBQUVELGtDQXVEQztBQUVELHdDQUdDO0FBRUQsa0NBb0RDO0FBRUQsd0NBR0M7QUFFRCw0Q0FpQ0M7QUFFRCxrREFHQztBQUVELDRDQThCQztBQUVELGtEQUdDO0FBRUQsOEJBaUNDO0FBRUQsb0NBR0M7QUE1YkQsTUFBYSxxQkFBcUI7SUFBbEM7UUFFa0IsYUFBUSxHQUFrQyxFQUFFLENBQUM7UUFDN0MsV0FBTSxHQUFrQyxFQUFFLENBQUM7SUFxQzdELENBQUM7SUFuQ1EsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENB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QUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDhDQUE4QztRQUMxRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSwyREFBMkQsQ0FBQyxDQUFDO1FBQ25HLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxJQUF5RDtJQUNwRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzLCBNb2RpZnlBc3NvY2lhdGlvbklucHV0LCBNb2RpZnlDbHViSW5wdXQsIE1vZGlmeUd5bUlucHV0LCBNb2RpZnlMZWFndWVJbnB1dCwgTW9kaWZ5UGVyc29uSW5wdXQsIE1vZGlmeVNlYXNvbklucHV0LCBTYXZlQXNzb2NpYXRpb25JbnB1dCwgU2F2ZUNsdWJJbnB1dCwgU2F2ZUd5bUlucHV0LCBTYXZlTGVhZ3VlR3JvdXBJbnB1dCwgU2F2ZUxlYWd1ZUlucHV0LCBTYXZlUGVyc29uSW5wdXQsIFNhdmVTZWFzb25JbnB1dCwgTW9kaWZ5TGVhZ3VlR3JvdXBJbnB1dCwgU2F2ZVRlYW1JbnB1dCwgTW9kaWZ5VGVhbUlucHV0LCBSZWdpc3RlclRlYW1JbnB1dCB9IGZyb20gJ0BnZW5lcmF0ZWQvZ3JhcGhxbC5tb2RlbC5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ3M6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG5cbiAgcHVibGljIGFkZFdhcm5pbmcoZmllbGQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLndhcm5pbmdzW2ZpZWxkXSkge1xuICAgICAgdGhpcy53YXJuaW5nc1tmaWVsZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy53YXJuaW5nc1tmaWVsZF0ucHVzaChtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFcnJvcihmaWVsZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXJyb3JzW2ZpZWxkXSkge1xuICAgICAgdGhpcy5lcnJvcnNbZmllbGRdID0gW107XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzW2ZpZWxkXS5wdXNoKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZXJyb3JzKS5mbGF0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FybmluZ01lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLndhcm5pbmdzKS5mbGF0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlc1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZXMoKS5qb2luKCc7ICcpO1xuICB9XG5cbiAgcHVibGljIGdldFdhcm5pbmdNZXNzYWdlc1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFdhcm5pbmdNZXNzYWdlcygpLmpvaW4oJzsgJyk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2VzU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgaWYgKGFkZHJlc3M/LmNpdHk/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NpdHknLCAnU3RhZHQgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGFkZHJlc3MuY2l0eSEubGVuZ3RoID4gMjAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjaXR5JywgJ1N0YWR0IGRhcmYgMjAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIGlmIChhZGRyZXNzPy5jb3VudHJ5Py50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb3VudHJ5JywgJ0xhbmQgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGFkZHJlc3MuY291bnRyeSEubGVuZ3RoID4gMjApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvdW50cnknLCAnTGFuZCBkYXJmIDIwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIGlmIChhZGRyZXNzPy5zdHJlZXQ/LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3N0cmVldCcsICdTdHJhw59lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLnN0cmVldCEubGVuZ3RoID4gMjAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdHJlZXQnLCAnU3RyYcOfZSBkYXJmIDIwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICBpZiAoYWRkcmVzcz8uemlwPy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCd6aXAnLCAnUExaIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLnppcCEubGVuZ3RoID4gMjApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3ppcCcsICdQTFogZGFyZiAyMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tBZGRyZXNzKGFkZHJlc3MpO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTGVhZ3VlKGxlYWd1ZTogU2F2ZUxlYWd1ZUlucHV0IHwgTW9kaWZ5TGVhZ3VlSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gQWdlIHJhbmdlIHZhbGlkYXRpb25zXG4gIGlmIChsZWFndWUubWluQWdlICE9IHVuZGVmaW5lZCAmJiBsZWFndWUubWF4QWdlICE9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZWFndWUubWluQWdlIDwgMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdtaW5BZ2UnLCAnTWluZGVzdGFsdGVyIGRhcmYgbmljaHQgbmVnYXRpdiBzZWluJyk7XG4gICAgfVxuICAgIGlmIChsZWFndWUubWF4QWdlIDwgMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdtYXhBZ2UnLCAnTWF4aW1hbGFsdGVyIGRhcmYgbmljaHQgbmVnYXRpdiBzZWluJyk7XG4gICAgfVxuICAgIGlmIChsZWFndWUubWF4QWdlIDwgbGVhZ3VlLm1pbkFnZSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdtYXhBZ2UnLCAnTWF4aW1hbGFsdGVyIG11c3MgZ3LDtsOfZXIgb2RlciBnbGVpY2ggZGVtIE1pbmRlc3RhbHRlciBzZWluJyk7XG4gICAgfVxuICAgIGlmIChsZWFndWUubWF4QWdlID4gMTAwKSB7IC8vIGFkanVzdCBhcyBuZWVkZWRcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltYWxhbHRlciDDvGJlcnNjaHJlaXRldCBkYXMgdmVybsO8bmZ0aWdlIExpbWl0Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWxlYWd1ZS5uYW1lIHx8IGxlYWd1ZS5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnTGlnYW5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGxlYWd1ZS5uYW1lLmxlbmd0aCA+IDEwMCkgeyAvLyBhZGp1c3QgbWF4IGxlbmd0aCBhcyBuZWVkZWRcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnTGlnYW5hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgLy8gRGVzY3JpcHRpb24gdmFsaWRhdGlvbiAoaWYgcmVxdWlyZWQpXG4gIGlmIChsZWFndWUuZGVzY3JpcHRpb24gJiYgbGVhZ3VlLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDUwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignZGVzY3JpcHRpb24nLCAnQmVzY2hyZWlidW5nIGRhcmYgNTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIFNob3J0IG5hbWUgdmFsaWRhdGlvblxuICBpZiAobGVhZ3VlLnNob3J0TmFtZSkge1xuICAgIGlmIChsZWFndWUuc2hvcnROYW1lLmxlbmd0aCA+IDEwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdLdXJ6bmFtZSBkYXJmIDEwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgICB9XG4gICAgaWYgKCEvXltBLVphLXowLTldKyQvLnRlc3QobGVhZ3VlLnNob3J0TmFtZSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ0t1cnpuYW1lIGRhcmYgbnVyIGFscGhhbnVtZXJpc2NoZSBaZWljaGVuIGVudGhhbHRlbicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxlYWd1ZShsZWFndWU6IFNhdmVMZWFndWVJbnB1dCB8IE1vZGlmeUxlYWd1ZUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrTGVhZ3VlKGxlYWd1ZSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDbHViKGNsdWI6IFNhdmVDbHViSW5wdXQgfCBNb2RpZnlDbHViSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gRnVsbCBuYW1lIHZhbGlkYXRpb25zXG4gIGlmICghY2x1Yi5uYW1lIHx8IGNsdWIubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1ZlcmVpbnNuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChjbHViLm5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1ZlcmVpbnNuYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIFNob3J0IG5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKGNsdWIuc2hvcnROYW1lKSB7XG4gICAgaWYgKGNsdWIuc2hvcnROYW1lLmxlbmd0aCA+IDMwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdLdXJ6bmFtZSBkYXJmIDMwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZWJzaXRlIHZhbGlkYXRpb25cbiAgaWYgKGNsdWIud2Vic2l0ZSkge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKGNsdWIud2Vic2l0ZSk7XG4gICAgICBpZiAoIWNsdWIud2Vic2l0ZS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIWNsdWIud2Vic2l0ZS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcignd2Vic2l0ZScsICdXZWJzaXRlIG11c3MgbWl0IGh0dHA6Ly8gb2RlciBodHRwczovLyBiZWdpbm5lbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCd3ZWJzaXRlJywgJ1VuZ8O8bHRpZ2UgV2Vic2l0ZS1VUkwnKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25cbiAgaWYgKGNsdWIuYWRkcmVzcyAmJiAoY2x1Yi5hZGRyZXNzLmNpdHkgfHwgY2x1Yi5hZGRyZXNzLnN0cmVldCB8fCBjbHViLmFkZHJlc3MuemlwKSkge1xuICAgIGNvbnN0IGFkZHJlc3NSZXN1bHQgPSBjaGVja0FkZHJlc3MoY2x1Yi5hZGRyZXNzKTtcbiAgICAvLyBNZXJnZSBhZGRyZXNzIGVycm9ycyBpbnRvIHRoZSBtYWluIHJlc3VsdFxuICAgIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQuZXJyb3JzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0Lndhcm5pbmdzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2x1YihjbHViOiBTYXZlQ2x1YklucHV0IHwgTW9kaWZ5Q2x1YklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQ2x1YihjbHViKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0d5bShneW06IFNhdmVHeW1JbnB1dCB8IE1vZGlmeUd5bUlucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFneW0ubmFtZSB8fCBneW0ubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0hhbGxlbm5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGd5bS5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdIYWxsZW5uYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIGF2YWlsYWJsZSBmaWVsZHMgdmFsaWRhdGlvblxuICBpZiAoIWd5bS5hdmFpbGFibGVGaWVsZHMgfHwgZ3ltLmF2YWlsYWJsZUZpZWxkcy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdhdmFpbGFibGVGaWVsZHMnLCAnVmVyZsO8Z2JhcmUgRmVsZGVyIHNpbmQgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25zXG4gIGNvbnN0IGFkZHJlc3NSZXN1bHQgPSBjaGVja0FkZHJlc3MoZ3ltLmFkZHJlc3MpO1xuICAvLyBNZXJnZSBhZGRyZXNzIGVycm9ycyBpbnRvIHRoZSBtYWluIHJlc3VsdFxuICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZEVycm9yKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZFdhcm5pbmcoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUd5bShneW06IFNhdmVHeW1JbnB1dCB8IE1vZGlmeUd5bUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrR3ltKGd5bSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTZWFzb24oc2Vhc29uOiBTYXZlU2Vhc29uSW5wdXQgfCBNb2RpZnlTZWFzb25JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghc2Vhc29uLm5hbWUgfHwgc2Vhc29uLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdTYWlzb25uYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChzZWFzb24ubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnU2Fpc29ubmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdmFsaWQgZGF0ZXNcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc2Vhc29uLnN0YXJ0RGF0ZSk7XG4gIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzZWFzb24uZW5kRGF0ZSk7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvbkVuZCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25FbmQpO1xuXG4gIGlmIChpc05hTihzdGFydERhdGUuZ2V0VGltZSgpKSB8fCBpc05hTihlbmREYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4ocmVnaXN0cmF0aW9uRW5kLmdldFRpbWUoKSkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2RhdGVzJywgJ1VuZ8O8bHRpZ2VzIERhdHVtc2Zvcm1hdCcpO1xuICB9XG5cbiAgaWYgKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvblN0YXJ0ID0gbmV3IERhdGUoc2Vhc29uLnJlZ2lzdHJhdGlvblN0YXJ0KTtcbiAgICBpZiAoaXNOYU4ocmVnaXN0cmF0aW9uU3RhcnQuZ2V0VGltZSgpKSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdyZWdpc3RyYXRpb25TdGFydCcsICdVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZWFzb24gZGF0ZSB2YWxpZGF0aW9uc1xuICBpZiAoZW5kRGF0ZSA8PSBzdGFydERhdGUpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2VuZERhdGUnLCAnU2Fpc29uLUVuZGRhdHVtIG11c3MgbmFjaCBkZW0gU3RhcnRkYXR1bSBsaWVnZW4nKTtcbiAgfVxuXG4gIC8vIFJlZ2lzdHJhdGlvbiBwZXJpb2QgdmFsaWRhdGlvbnNcbiAgaWYgKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvblN0YXJ0ID0gbmV3IERhdGUoc2Vhc29uLnJlZ2lzdHJhdGlvblN0YXJ0KTtcbiAgICBpZiAocmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25FbmQgPD0gcmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICAgICAgcmVzdWx0LmFkZEVycm9yKCdyZWdpc3RyYXRpb25FbmQnLCAnQW5tZWxkdW5nc2VuZGUgbXVzcyBuYWNoIGRlbSBBbm1lbGR1bmdzc3RhcnQgbGllZ2VuJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVnaXN0cmF0aW9uU3RhcnQgPj0gc3RhcnREYXRlKSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uU3RhcnQnLCAnQW5tZWxkdW5nIG11c3Mgdm9yIGRlbSBTYWlzb25zdGFydCBiZWdpbm5lbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZWdpc3RyYXRpb25FbmQgPiBzdGFydERhdGUpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3JlZ2lzdHJhdGlvbkVuZCcsICdBbm1lbGR1bmcgbXVzcyB2b3IgZGVtIFNhaXNvbnN0YXJ0IGVuZGVuJyk7XG4gIH1cblxuICAvLyBGdXR1cmUgZGF0ZSB2YWxpZGF0aW9uXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGlmIChzdGFydERhdGUgPCBub3cpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3N0YXJ0RGF0ZScsICdTYWlzb24tU3RhcnRkYXR1bSBkYXJmIG5pY2h0IGluIGRlciBWZXJnYW5nZW5oZWl0IGxpZWdlbicpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vhc29uKHNlYXNvbjogU2F2ZVNlYXNvbklucHV0IHwgTW9kaWZ5U2Vhc29uSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tTZWFzb24oc2Vhc29uKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BlcnNvbihwZXJzb246IFNhdmVQZXJzb25JbnB1dCB8IE1vZGlmeVBlcnNvbklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFwZXJzb24uZmlyc3ROYW1lPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2ZpcnN0TmFtZScsICdWb3JuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIGlmICghcGVyc29uLmxhc3ROYW1lPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2xhc3ROYW1lJywgJ05hY2huYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIC8vIEVtYWlsIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5lbWFpbCAmJiAhL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdChwZXJzb24uZW1haWwpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdlbWFpbCcsICdVbmfDvGx0aWdlcyBFLU1haWwtRm9ybWF0Jyk7XG4gIH1cblxuICAvLyBQaG9uZSBudW1iZXIgdmFsaWRhdGlvblxuICBpZiAocGVyc29uLnBob25lKSB7XG4gICAgLy8gQWxsb3cgZGlnaXRzLCBzcGFjZXMsICssIC0sIGFuZCAoKVxuICAgIGNvbnN0IHBob25lUmVnZXggPSAvXltcXGRcXHMrKCktXXs4LDIwfSQvO1xuICAgIGlmICghcGhvbmVSZWdleC50ZXN0KHBlcnNvbi5waG9uZSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcigncGhvbmUnLCAnVW5nw7xsdGlnZXMgVGVsZWZvbm51bW1lci1Gb3JtYXQgKCs0OSAxMjM0IDU2Nzg5MCknKTtcbiAgICB9XG4gIH1cblxuICAvLyBEYXRlIG9mIGJpcnRoIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5kYXRlT2ZCaXJ0aCkge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwZXJzb24uZGF0ZU9mQmlydGgpO1xuICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignZGF0ZU9mQmlydGgnLCAnVW5nw7xsdGlnZXMgR2VidXJ0c2RhdHVtc2Zvcm1hdCcpO1xuICAgIH1cbiAgICAvLyBBZGQgYWdlIHJlc3RyaWN0aW9ucyBpZiBuZWVkZWRcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKGRhdGUgPiB0b2RheSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdkYXRlT2ZCaXJ0aCcsICdHZWJ1cnRzZGF0dW0gZGFyZiBuaWNodCBpbiBkZXIgWnVrdW5mdCBsaWVnZW4nKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5hZGRyZXNzICYmIChwZXJzb24uYWRkcmVzcy5jaXR5IHx8IHBlcnNvbi5hZGRyZXNzLnN0cmVldCB8fCBwZXJzb24uYWRkcmVzcy56aXApKSB7XG4gICAgY29uc3QgYWRkcmVzc1Jlc3VsdCA9IGNoZWNrQWRkcmVzcyhwZXJzb24uYWRkcmVzcyk7XG4gICAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBlcnNvbihwZXJzb246IFNhdmVQZXJzb25JbnB1dCB8IE1vZGlmeVBlcnNvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrUGVyc29uKHBlcnNvbik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBc3NvY2lhdGlvbihhc3NvY2lhdGlvbjogU2F2ZUFzc29jaWF0aW9uSW5wdXQgfCBNb2RpZnlBc3NvY2lhdGlvbklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvblxuICBpZiAoIWFzc29jaWF0aW9uLm5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJiYW5kc25hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGFzc29jaWF0aW9uLm5hbWUubGVuZ3RoID4gMTAwKSB7IC8vIGFkanVzdCBtYXggbGVuZ3RoIGFzIG5lZWRlZFxuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJiYW5kc25hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgLy8gQ29udGFjdCBFbWFpbCB2YWxpZGF0aW9uXG4gIGlmICghYXNzb2NpYXRpb24uY29udGFjdEVtYWlsPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvbnRhY3RFbWFpbCcsICdLb250YWt0LUUtTWFpbCBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoIS9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QoYXNzb2NpYXRpb24uY29udGFjdEVtYWlsKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY29udGFjdEVtYWlsJywgJ1VuZ8O8bHRpZ2VzIEtvbnRha3QtRS1NYWlsLUZvcm1hdCcpO1xuICB9XG5cbiAgLy8gQ29udGFjdCBOYW1lIHZhbGlkYXRpb25cbiAgaWYgKCFhc3NvY2lhdGlvbi5jb250YWN0TmFtZT8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb250YWN0TmFtZScsICdLb250YWt0bmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICAvLyBBZGRyZXNzIHZhbGlkYXRpb25cbiAgY29uc3QgYWRkcmVzc1Jlc3VsdCA9IGNoZWNrQWRkcmVzcyhhc3NvY2lhdGlvbi5hZGRyZXNzKTtcbiAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC5lcnJvcnMpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgfSk7XG4gIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQud2FybmluZ3MpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBc3NvY2lhdGlvbihhc3NvY2lhdGlvbjogU2F2ZUFzc29jaWF0aW9uSW5wdXQgfCBNb2RpZnlBc3NvY2lhdGlvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQXNzb2NpYXRpb24oYXNzb2NpYXRpb24pO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTGVhZ3VlR3JvdXAobGVhZ3VlR3JvdXA6IFNhdmVMZWFndWVHcm91cElucHV0IHwgTW9kaWZ5TGVhZ3VlR3JvdXBJbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghbGVhZ3VlR3JvdXAubmFtZSB8fCBsZWFndWVHcm91cC5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnU3RhZmZlbG5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGxlYWd1ZUdyb3VwLm5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1N0YWZmZWxuYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIE51bWJlciB2YWxpZGF0aW9uXG4gIGlmIChsZWFndWVHcm91cC5udW1iZXIgPCAxKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdudW1iZXInLCAnU3RhZmZlbG51bW1lciBtdXNzIHBvc2l0aXYgc2VpbicpO1xuICB9XG5cbiAgLy8gU2hvcnQgbmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWxlYWd1ZUdyb3VwLnNob3J0TmFtZSB8fCBsZWFndWVHcm91cC5zaG9ydE5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ1N0YWZmZWwtS3Vyem5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKGxlYWd1ZUdyb3VwLnNob3J0TmFtZS5sZW5ndGggPiAxMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ1N0YWZmZWwtS3Vyem5hbWUgZGFyZiAxMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH0gZWxzZSBpZiAoIS9eW0EtWmEtejAtOV0rJC8udGVzdChsZWFndWVHcm91cC5zaG9ydE5hbWUpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnU3RhZmZlbC1LdXJ6bmFtZSBkYXJmIG51ciBhbHBoYW51bWVyaXNjaGUgWmVpY2hlbiBlbnRoYWx0ZW4nKTtcbiAgfVxuXG4gIC8vIFJlZ3VsYXRpb24gdmFsaWRhdGlvblxuICBpZiAoIWxlYWd1ZUdyb3VwLnJlZ3VsYXRpb24gfHwgbGVhZ3VlR3JvdXAucmVndWxhdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdyZWd1bGF0aW9uJywgJ1N0YWZmZWwtUmVnZWx1bmdlbiBzaW5kIGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGVhZ3VlR3JvdXAobGVhZ3VlR3JvdXA6IFNhdmVMZWFndWVHcm91cElucHV0IHwgTW9kaWZ5TGVhZ3VlR3JvdXBJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0xlYWd1ZUdyb3VwKGxlYWd1ZUdyb3VwKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1RlYW0odGVhbTogU2F2ZVRlYW1JbnB1dCB8IE1vZGlmeVRlYW1JbnB1dCB8IFJlZ2lzdGVyVGVhbUlucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvblxuICBpZiAoJ25hbWUnIGluIHRlYW0gJiYgdGVhbS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGVhbS5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdUZWFtbmFtZSBkYXJmIG5pY2h0IGxlZXIgc2VpbicpO1xuICAgIH0gZWxzZSBpZiAodGVhbS5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1RlYW1uYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoISgnaWQnIGluIHRlYW0pKSB7IC8vIGlmIGlkIGlzIG5vdCBpbiB0ZWFtLCB0aGVuIGl0IGlzIGEgbmV3IHRlYW1cbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVGVhbW5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gTGVhZ3VlIElEIHZhbGlkYXRpb25cbiAgaWYgKCdsZWFndWVJZCcgaW4gdGVhbSAmJiB0ZWFtLmxlYWd1ZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGVhbS5sZWFndWVJZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2xlYWd1ZUlkJywgJ0xpZ2EtSUQgZGFyZiBuaWNodCBsZWVyIHNlaW4nKTtcbiAgICB9IGVsc2UgaWYgKHRlYW0ubGVhZ3VlSWQubGVuZ3RoID4gMTAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2xlYWd1ZUlkJywgJ0xpZ2EtSUQgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghKCdpZCcgaW4gdGVhbSkpIHsgLy8gaWYgaWQgaXMgbm90IGluIHRlYW0sIHRoZW4gaXQgaXMgYSBuZXcgdGVhbVxuICAgIHJlc3VsdC5hZGRFcnJvcignbGVhZ3VlSWQnLCAnTGlnYS1JRCBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICAvLyBFeGVtcHRpb24gcmVxdWVzdCB2YWxpZGF0aW9uXG4gIGlmICh0ZWFtLmV4ZW1wdGlvblJlcXVlc3QpIHtcbiAgICBpZiAodGVhbS5leGVtcHRpb25SZXF1ZXN0LnRyaW0oKS5sZW5ndGggPiAxMDAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2V4ZW1wdGlvblJlcXVlc3QnLCAnRnJlaXN0ZWxsdW5nc2FudHJhZyBkYXJmIDEwMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlYW0odGVhbTogU2F2ZVRlYW1JbnB1dCB8IE1vZGlmeVRlYW1JbnB1dCB8IFJlZ2lzdGVyVGVhbUlucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrVGVhbSh0ZWFtKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG4iXX0=
package/package.json CHANGED
@@ -73,7 +73,7 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "version": "0.0.0",
76
+ "version": "0.0.1",
77
77
  "jest": {
78
78
  "coverageProvider": "v8",
79
79
  "moduleNameMapper": {