@awesome-cordova-plugins/urbanairship 7.0.1 → 8.0.2

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/index.js CHANGED
@@ -13,19 +13,11 @@ var __extends = (this && this.__extends) || (function () {
13
13
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
14
  };
15
15
  })();
16
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
19
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
- return c > 3 && r && Object.defineProperty(target, key, r), r;
21
- };
22
- var __metadata = (this && this.__metadata) || function (k, v) {
23
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24
- };
25
16
  import { AwesomeCordovaNativePlugin, cordova } from '@awesome-cordova-plugins/core';
26
17
  import { Observable } from 'rxjs';
27
18
  /**
28
19
  * Enum for notification types.
20
+ *
29
21
  * @readonly
30
22
  * @enum {number}
31
23
  */
@@ -38,6 +30,7 @@ export var NotificationType;
38
30
  })(NotificationType || (NotificationType = {}));
39
31
  /**
40
32
  * Enum for presentation options.
33
+ *
41
34
  * @readonly
42
35
  * @enum {number}
43
36
  */
@@ -48,1374 +41,109 @@ export var PresentationOptions;
48
41
  PresentationOptions[PresentationOptions["sound"] = 2] = "sound";
49
42
  PresentationOptions[PresentationOptions["alert"] = 4] = "alert";
50
43
  })(PresentationOptions || (PresentationOptions = {}));
51
- var UrbanAirShip = /** @class */ (function (_super) {
52
- __extends(UrbanAirShip, _super);
53
- function UrbanAirShip() {
44
+ var UrbanAirShipOriginal = /** @class */ (function (_super) {
45
+ __extends(UrbanAirShipOriginal, _super);
46
+ function UrbanAirShipOriginal() {
54
47
  return _super !== null && _super.apply(this, arguments) || this;
55
48
  }
56
- /**
57
- * Event fired when a new deep link is received.
58
- * @event deep_link
59
- * @type {object}
60
- * @param {string} [deepLink] The deep link.
61
- */
62
- UrbanAirShip.prototype.onDeepLink = function () {
63
- return;
64
- };
65
- /**
66
- * Event fired when a channel registration occurs.
67
- * @event registration
68
- * @type {object}
69
- * @param {string} [channelID] The channel ID.
70
- * @param {string} [registrationToken] The deviceToken on iOS, and the FCM/ADM token on Android.
71
- * @param {string} [error] Error message if an error occurred.
72
- */
73
- UrbanAirShip.prototype.onRegistration = function () {
74
- return;
75
- };
76
- /**
77
- * Event fired when the inbox is updated.
78
- * @event inbox_updated
79
- */
80
- UrbanAirShip.prototype.onInboxUpdated = function () {
81
- return;
82
- };
83
- /**
84
- * Event fired when the inbox needs to be displayed. This event is only emitted if auto
85
- * launch message center is disabled.
86
- * @event show_inbox
87
- * @type {object}
88
- * @param {string} [messageId] The optional message ID.
89
- */
90
- UrbanAirShip.prototype.onShowInbox = function () {
91
- return;
92
- };
93
- /**
94
- * Event fired when a push is received.
95
- * @event push
96
- * @type {object}
97
- * @param {string} message The push alert message.
98
- * @param {string} title The push title.
99
- * @param {string} subtitle The push subtitle.
100
- * @param {object} extras Any push extras.
101
- * @param {object} aps The raw aps dictionary (iOS only)
102
- * @param {number} [notification_id] The Android notification ID. Deprecated in favor of notificationId.
103
- * @param {string} [notificationId] The notification ID.
104
- */
105
- UrbanAirShip.prototype.onPushReceived = function () {
106
- return;
107
- };
108
- /**
109
- * Event fired when notification opened.
110
- * @event notification_opened
111
- * @type {object}
112
- * @param {string} message The push alert message.
113
- * @param {object} extras Any push extras.
114
- * @param {number} [notification_id] The Android notification ID. Deprecated in favor of notificationId.
115
- * @param {string} [notificationId] The notification ID.
116
- * @param {string} [actionID] The ID of the notification action button if available.
117
- * @param {boolean} isForeground Will always be true if the user taps the main notification. Otherwise its defined by the notification action button.
118
- */
119
- UrbanAirShip.prototype.onNotificationOpened = function () {
120
- return;
121
- };
122
- /**
123
- * Event fired when the user notification opt-in status changes.
124
- * @event notification_opt_in_status
125
- * @type {object}
126
- * @param {boolean} optIn If the user is opted in or not to user notifications.
127
- * @param {object} [authorizedNotificationSettings] iOS only. A map of authorized settings.
128
- * @param {boolean} authorizedNotificationSettings.alert If alerts are authorized.
129
- * @param {boolean} authorizedNotificationSettings.sound If sounds are authorized.
130
- * @param {boolean} authorizedNotificationSettings.badge If badges are authorized.
131
- * @param {boolean} authorizedNotificationSettings.carPlay If car play is authorized.
132
- * @param {boolean} authorizedNotificationSettings.lockScreen If the lock screen is authorized.
133
- * @param {boolean} authorizedNotificationSettings.notificationCenter If the notification center is authorized.
134
- */
135
- UrbanAirShip.prototype.onNotificationOptInStatus = function () {
136
- return;
137
- };
138
- /**
139
- * Re-attaches document event listeners in this webview
140
- */
141
- UrbanAirShip.prototype.reattach = function () {
142
- return;
143
- };
144
- /**
145
- * Initailizes Urban Airship.
146
- *
147
- * The plugin will automatically call takeOff during the next app init in
148
- * order to properly handle incoming push. If takeOff is called multiple times
149
- * in a session, or if the config is different than the previous sesssion, the
150
- * new config will not be used until the next app start.
151
- * @param {object} config The Urban Airship config.
152
- * @param {string} config.site Sets the cloud site, must be either EU or US.
153
- * @param {object} config.development The Urban Airship development config.
154
- * @param {string} config.development.appKey The development appKey.
155
- * @param {string} config.development.appSecret The development appSecret.
156
- * @param {object} config.production The Urban Airship production config.
157
- * @param {string} config.production.appKey The production appKey.
158
- * @param {string} config.production.appSecret The production appSecret.
159
- */
160
- UrbanAirShip.prototype.takeOff = function (config) {
161
- return;
162
- };
163
- /**
164
- * Sets the Android notification config. Values not set will fallback to any values set in the config.xml.
165
- * @param {object} config The notification config.
166
- * @param {string} [config.icon] The name of the drawable resource to use as the notification icon.
167
- * @param {string} [config.largeIcon] The name of the drawable resource to use as the notification large icon.
168
- * @param {string} [config.accentColor] The notification accent color. Format is #AARRGGBB.
169
- */
170
- UrbanAirShip.prototype.setAndroidNotificationConfig = function (config) {
171
- return;
172
- };
173
- /**
174
- * Sets the default behavior when the message center is launched from a push
175
- * notification. If set to false the message center must be manually launched.
176
- * @param {boolean} enabled true to automatically launch the default message center, false to disable.
177
- * @param {Function} [success] Success callback.
178
- * @param {function(message)} [failure] Failure callback.
179
- * @param {string} failure.message The error message.
180
- */
181
- UrbanAirShip.prototype.setAutoLaunchDefaultMessageCenter = function (enabled) {
182
- return;
183
- };
184
- /**
185
- * Enables or disables user notifications.
186
- * @param {boolean} enabled true to enable notifications, false to disable.
187
- * @param {Function} [success] Success callback.
188
- * @param {function(message)} [failure] Failure callback.
189
- * @param {string} failure.message The error message.
190
- */
191
- UrbanAirShip.prototype.setUserNotificationsEnabled = function (enabled) {
192
- return;
193
- };
194
- /**
195
- * Checks if user notifications are enabled or not.
196
- * @param {function(enabled)} success Success callback.
197
- * @param {boolean} success.enabled Flag indicating if user notifications is enabled or not.
198
- * @param {function(message)} [failure] Failure callback.
199
- * @param {string} failure.message The error message.
200
- */
201
- UrbanAirShip.prototype.isUserNotificationsEnabled = function () {
202
- return;
203
- };
204
- /**
205
- * Checks if app notifications are enabled or not. Its possible to have `userNotificationsEnabled`
206
- * but app notifications being disabled if the user opted out of notifications.
207
- * @param {function(enabled)} success Success callback.
208
- * @param {boolean} success.enabled Flag indicating if app notifications is enabled or not.
209
- * @param {function(message)} [failure] Failure callback.
210
- * @param {string} failure.message The error message.
211
- */
212
- UrbanAirShip.prototype.isAppNotificationsEnabled = function () {
213
- return;
214
- };
215
- /**
216
- * Returns the channel ID.
217
- * @param {function(ID)} success The function to call on success.
218
- * @param {string} success.ID The channel ID string
219
- * @param {failureCallback} [failure] The function to call on failure.
220
- * @param {string} failure.message The error message.
221
- */
222
- UrbanAirShip.prototype.getChannelID = function () {
223
- return;
224
- };
225
- /**
226
- * Returns the last notification that launched the application.
227
- * @param {boolean} clear true to clear the notification.
228
- * @param {function(push)} success The function to call on success.
229
- * @param {object} success.push The push message object containing data associated with a push notification.
230
- * @param {string} success.push.message The push alert message.
231
- * @param {object} success.push.extras Any push extras.
232
- * @param {number} [success.push.notification_id] The Android notification ID.
233
- * @param {failureCallback} [failure] The function to call on failure.
234
- * @param {string} failure.message The error message.
235
- */
236
- UrbanAirShip.prototype.getLaunchNotification = function (clear) {
237
- return;
238
- };
239
- /**
240
- * Returns the last received deep link.
241
- * @param {boolean} clear true to clear the deep link.
242
- * @param {function(push)} success The function to call on success.
243
- * @param {string} success.deepLink The deep link.
244
- * @param {failureCallback} [failure] The function to call on failure.
245
- * @param {string} failure.message The error message.
246
- */
247
- UrbanAirShip.prototype.getDeepLink = function (clear) {
248
- return;
249
- };
250
- /**
251
- * Returns the tags as an array.
252
- * @param {function(tags)} success The function to call on success.
253
- * @param {Array} success.tags The tags as an array.
254
- * @param {failureCallback} [failure] The function to call on failure.
255
- * @param {string} failure.message The error message.
256
- */
257
- UrbanAirShip.prototype.getTags = function () {
258
- return;
259
- };
260
- /**
261
- * Sets the tags.
262
- * @param {Array} tags an array of strings.
263
- * @param {Function} [success] Success callback.
264
- * @param {function(message)} [failure] Failure callback.
265
- * @param {string} failure.message The error message.
266
- */
267
- UrbanAirShip.prototype.setTags = function (tags) {
268
- return;
269
- };
270
- /**
271
- * Returns the alias.
272
- * @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use getNamedUser
273
- * @param {function(currentAlias)} success The function to call on success.
274
- * @param {string} success.currentAlias The alias as a string.
275
- * @param {function(message)} [failure] Failure callback.
276
- * @param {string} failure.message The error message.
277
- */
278
- UrbanAirShip.prototype.getAlias = function () {
279
- return;
280
- };
281
- /**
282
- * Sets the alias.
283
- * @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use setNamedUser
284
- * @param {string} alias string
285
- * @param {Function} [success] Success callback.
286
- * @param {function(message)} [failure] Failure callback.
287
- * @param {string} failure.message The error message.
288
- */
289
- UrbanAirShip.prototype.setAlias = function (alias) {
290
- return;
291
- };
292
- /**
293
- * Checks if quiet time is enabled or not.
294
- * @param {function(enabled)} success Success callback.
295
- * @param {boolean} success.enabled Flag indicating if quiet time is enabled or not.
296
- * @param {function(message)} [failure] Failure callback.
297
- * @param {string} failure.message The error message.
298
- */
299
- UrbanAirShip.prototype.isQuietTimeEnabled = function () {
300
- return;
301
- };
302
- /**
303
- * Enables or disables quiet time.
304
- * @param {boolean} enabled true to enable quiet time, false to disable.
305
- * @param {Function} [success] Success callback.
306
- * @param {function(message)} [failure] Failure callback.
307
- * @param {string} failure.message The error message.
308
- */
309
- UrbanAirShip.prototype.setQuietTimeEnabled = function (enabled) {
310
- return;
311
- };
312
- /**
313
- * Checks if the device is currently in quiet time.
314
- * @param {function(inQuietTime)} success Success callback.
315
- * @param {boolean} success.inQuietTime Flag indicating if quiet time is currently in effect.
316
- * @param {function(message)} [failure] Failure callback.
317
- * @param {string} failure.message The error message.
318
- */
319
- UrbanAirShip.prototype.isInQuietTime = function () {
320
- return;
321
- };
322
- /**
323
- * Returns the quiet time as an object with the following:
324
- * "startHour": Number,
325
- * "startMinute": Number,
326
- * "endHour": Number,
327
- * "endMinute": Number
328
- * @param {function(quietTime)} success The function to call on success.
329
- * @param {object} success.quietTime The quietTime object represents a timespan during
330
- * which notifications should be silenced.
331
- * @param {function(message)} [failure] Failure callback.
332
- * @param {string} failure.message The error message.
333
- */
334
- UrbanAirShip.prototype.getQuietTime = function () {
335
- return;
336
- };
337
- /**
338
- * Sets the quiet time.
339
- * @param {number} startHour for quiet time.
340
- * @param {number} startMinute for quiet time.
341
- * @param {number} endHour for quiet time.
342
- * @param {number} endMinute for quiet time.
343
- * @param {Function} [success] Success callback.
344
- * @param {function(message)} [failure] Failure callback.
345
- * @param {string} failure.message The error message.
346
- */
347
- UrbanAirShip.prototype.setQuietTime = function (startHour, startMinute, endHour, endMinute) {
348
- return;
349
- };
350
- /**
351
- * Enables or disables analytics.
352
- *
353
- * Disabling analytics will delete any locally stored events
354
- * and prevent any events from uploading. Features that depend on analytics being
355
- * enabled may not work properly if it's disabled (reports, region triggers,
356
- * location segmentation, push to local time).
357
- * @param {boolean} enabled true to enable analytics, false to disable.
358
- * @param {Function} [success] Success callback.
359
- * @param {function(message)} [failure] Failure callback.
360
- * @param {string} failure.message The error message.
361
- */
362
- UrbanAirShip.prototype.setAnalyticsEnabled = function (enabled) {
363
- return;
364
- };
365
- /**
366
- * Checks if analytics is enabled or not.
367
- * @param {function(enabled)} success Success callback.
368
- * @param {boolean} success.enabled Flag indicating if analytics is enabled or not.
369
- * @param {function(message)} [failure] Failure callback.
370
- * @param {string} failure.message The error message.
371
- */
372
- UrbanAirShip.prototype.isAnalyticsEnabled = function () {
373
- return;
374
- };
375
- /**
376
- * Returns the named user ID.
377
- * @param {function(namedUser)} success The function to call on success.
378
- * @param {string} success.namedUser The named user ID as a string.
379
- * @param {function(message)} [failure] Failure callback.
380
- * @param {string} failure.message The error message.
381
- */
382
- UrbanAirShip.prototype.getNamedUser = function () {
383
- return;
384
- };
385
- /**
386
- * Sets the named user ID.
387
- * @param {string} namedUser identifier string.
388
- * @param {Function} [success] Success callback.
389
- * @param {function(message)} [failure] Failure callback.
390
- * @param {string} failure.message The error message.
391
- */
392
- UrbanAirShip.prototype.setNamedUser = function (namedUser) {
393
- return;
394
- };
395
- /**
396
- * Runs an Urban Airship action.
397
- * @param {string} actionName action as a string.
398
- * @param {*} actionValue
399
- * @param {function(result)} [success] The function to call on success.
400
- * @param {object} success.result The result's value.
401
- * @param {function(message)} [failure] Failure callback.
402
- * @param {string} failure.message The error message.
403
- */
404
- UrbanAirShip.prototype.runAction = function (actionName, actionValue) {
405
- return;
406
- };
407
- /**
408
- * Creates an editor to modify the named user tag groups.
409
- */
410
- UrbanAirShip.prototype.editNamedUserTagGroups = function () {
411
- return;
412
- };
413
- /**
414
- * Creates an editor to modify the channel tag groups.
415
- */
416
- UrbanAirShip.prototype.editChannelTagGroups = function () {
417
- return;
418
- };
419
- /**
420
- * Creates an editor to modify the channel attributes.
421
- */
422
- UrbanAirShip.prototype.editChannelAttributes = function () {
423
- return;
424
- };
425
- /**
426
- * Creates an editor to modify the named user attributes.
427
- */
428
- UrbanAirShip.prototype.editNamedUserAttributes = function () {
429
- return;
430
- };
431
- /**
432
- * Creates an editor to modify the channel subscription lists.
433
- * @returns {ChannelSubscriptionListEditor} A subscription list editor instance.
434
- * @since 13.3.0
435
- */
436
- UrbanAirShip.prototype.editChannelSubscriptionLists = function () {
437
- return;
438
- };
439
- /**
440
- * Creates an editor to modify the contact subscription lists.
441
- * @returns {ContactSubscriptionListEditor} A subscription list editor instance.
442
- * @since 13.3.0
443
- */
444
- UrbanAirShip.prototype.editContactSubscriptionLists = function () {
445
- return;
446
- };
447
- /**
448
- * Returns the current set of subscription lists for the current channel,
449
- * optionally applying pending subscription list changes that will be applied during the next channel update.
450
- * An empty set indicates that this contact is not subscribed to any lists.
451
- * @param {Function} [success] Success callback.
452
- * @param {string} failure.message The error message.
453
- */
454
- UrbanAirShip.prototype.getChannelSubscriptionLists = function () {
455
- return;
456
- };
457
- /**
458
- * Returns the current set of subscription lists for the current contact,
459
- * optionally applying pending subscription list changes that will be applied during the next contact update.
460
- * An empty set indicates that this contact is not subscribed to any lists.
461
- * @param {Function} [success] Success callback.
462
- * @param {string} failure.message The error message.
463
- */
464
- UrbanAirShip.prototype.getContactSubscriptionLists = function () {
465
- return;
466
- };
467
- /**
468
- * Sets an associated identifier for the Connect data stream.
469
- * @param key Custom key for identifier.
470
- * @param identifier The identifier value.
471
- * @param {Function} [success] Success callback.
472
- * @param {function(message)} [failure] Failure callback.
473
- * @param {string} failure.message The error message.
474
- */
475
- UrbanAirShip.prototype.setAssociatedIdentifier = function (key, identifier) {
476
- return;
477
- };
478
- // Location
479
- /**
480
- * Enables or disables Urban Airship location services.
481
- * @param {boolean} enabled true to enable location, false to disable.
482
- * @param {Function} [success] Success callback.
483
- * @param {function(message)} [failure] Failure callback.
484
- * @param {string} failure.message The error message.
485
- */
486
- UrbanAirShip.prototype.setLocationEnabled = function (enabled) {
487
- return;
488
- };
489
- /**
490
- * Checks if location is enabled or not.
491
- * @param {function(enabled)} success Success callback.
492
- * @param {boolean} success.enabled Flag indicating if location is enabled or not.
493
- * @param {function(message)} [failure] Failure callback.
494
- * @param {string} failure.message The error message.
495
- * @deprecated removed in version 8.0
496
- */
497
- UrbanAirShip.prototype.isLocationEnabled = function () {
498
- return;
499
- };
500
- /**
501
- * Enables or disables background location.
502
- * @param {boolean} enabled true to enable background location, false to disable.
503
- * @param {Function} [success] Success callback.
504
- * @param {function(message)} [failure] Failure callback.
505
- * @param {string} failure.message The error message.
506
- * @deprecated removed in version 8.0
507
- */
508
- UrbanAirShip.prototype.setBackgroundLocationEnabled = function (enabled) {
509
- return;
510
- };
511
- /**
512
- * Checks if background location is enabled or not.
513
- * @param {function(enabled)} success Success callback.
514
- * @param {boolean} success.enabled Flag indicating if background location updates are enabled or not.
515
- * @param {function(message)} [failure] Failure callback.
516
- * @param {string} failure.message The error message.
517
- * @deprecated removed in version 8.0
518
- */
519
- UrbanAirShip.prototype.isBackgroundLocationEnabled = function () {
520
- return;
521
- };
522
- /**
523
- * Displays the message center.
524
- * @param {Function} [success] Success callback.
525
- * @param {function(message)} [failure] Failure callback.
526
- * @param {string} failure.message The error message.
527
- */
528
- UrbanAirShip.prototype.displayMessageCenter = function () {
529
- return;
530
- };
531
- /**
532
- * Dismiss the message center.
533
- * @param {Function} [success] Success callback.
534
- * @param {function(message)} [failure] Failure callback.
535
- * @param {string} failure.message The error message.
536
- */
537
- UrbanAirShip.prototype.dismissMessageCenter = function () {
538
- return;
539
- };
540
- /**
541
- * Dismiss the inbox message.
542
- * @param {Function} [success] Success callback.
543
- * @param {function(message)} [failure] Failure callback.
544
- * @param {string} failure.message The error message.
545
- */
546
- UrbanAirShip.prototype.dismissInboxMessage = function () {
547
- return;
548
- };
549
- /**
550
- * Dismiss the inbox message in the overlay.
551
- * @param {Function} [success] Success callback.
552
- * @param {function(message)} [failure] Failure callback.
553
- * @param {string} failure.message The error message.
554
- * @deprecated removed in version 10.0
555
- */
556
- UrbanAirShip.prototype.dismissOverlayInboxMessage = function () {
557
- return;
558
- };
559
- /**
560
- * Gets the array of inbox messages. Each message will have the following properties:
561
- * "id": string - The messages ID. Needed to display, mark as read, or delete the message.
562
- * "title": string - The message title.
563
- * "sentDate": number - The message sent date in milliseconds.
564
- * "listIconUrl": string, optional - The icon url for the message.
565
- * "isRead": boolean - The unread/read status of the message.
566
- * "extras": object - String to String map of any message extras.
567
- * @param {function(messages)} success The function to call on success.
568
- * @param {Array} success.messages The array of inbox messages.
569
- * @param {function(message)} [failure] Failure callback.
570
- * @param {string} failure.message The error message.
571
- */
572
- UrbanAirShip.prototype.getInboxMessages = function () {
573
- return;
574
- };
575
- /**
576
- * Marks an inbox message read.
577
- * @param {string} messageId The ID of the message to mark as read.
578
- * @param {Function} [success] Success callback.
579
- * @param {function(message)} [failure] Failure callback.
580
- * @param {string} failure.message The error message.
581
- */
582
- UrbanAirShip.prototype.markInboxMessageRead = function (messageId) {
583
- return;
584
- };
585
- /**
586
- * Deletes an inbox message.
587
- * @param {string} messageId The ID of the message to delete.
588
- * @param {Function} [success] Success callback.
589
- * @param {function(message)} [failure] Failure callback.
590
- * @param {string} failure.message The error message.
591
- */
592
- UrbanAirShip.prototype.deleteInboxMessage = function (messageId) {
593
- return;
594
- };
595
- /**
596
- * Displays the inbox message using a full screen view.
597
- * @param {string} messageId The ID of the message to display.
598
- * @param {Function} [success] Success callback.
599
- * @param {function(message)} [failure] Failure callback.
600
- * @param {string} failure.message The error message.
601
- */
602
- UrbanAirShip.prototype.displayInboxMessage = function (messageId) {
603
- return;
604
- };
605
- /**
606
- * Forces the inbox to refresh. This is normally not needed as the inbox
607
- * will automatically refresh on foreground or when a push arrives thats
608
- * associated with a message, but it can be useful when providing a refresh
609
- * button for the message listing.
610
- * @param {Function} [success] Success callback.
611
- * @param {function(message)} [failure] Failure callback.
612
- * @param {string} failure.message The error message.
613
- */
614
- UrbanAirShip.prototype.refreshInbox = function () {
615
- return;
616
- };
617
- /**
618
- * Displays the inbox message using an overlay display.
619
- * @param {string} messageId The ID of the message to display.
620
- * @param {Function} [success] Success callback.
621
- * @param {function(message)} [failure] Failure callback.
622
- * @param {string} failure.message The error message.
623
- * @deprecated removed in version 10.0
624
- */
625
- UrbanAirShip.prototype.overlayInboxMessage = function (messageId) {
626
- return;
627
- };
628
- /**
629
- * Clears a notification by identifier.
630
- * @param {string} identifier The notification identifier.
631
- * @param {Function} [success] Success callback.
632
- * @param {function(message)} [failure] Failure callback.
633
- */
634
- UrbanAirShip.prototype.clearNotification = function (identifier) {
635
- return;
636
- };
637
- /**
638
- * Clears all notifications posted by the application.
639
- * @param {Function} [success] Success callback.
640
- * @param {function(message)} [failure] Failure callback.
641
- * @param {string} failure.message The error message.
642
- */
643
- UrbanAirShip.prototype.clearNotifications = function () {
644
- return;
645
- };
646
- /**
647
- * Gets currently active notifications.
648
- *
649
- * Note: On Android this functionality is only supported on Android M or higher.
650
- * @param {function(messages)} [success] Success callback.
651
- * @param {function(message)} [failure] Failure callback.
652
- */
653
- UrbanAirShip.prototype.getActiveNotifications = function () {
654
- return;
655
- };
656
- // iOS only
657
- /**
658
- * Enables or disables auto badge. Defaults to `NO`.
659
- * @param {boolean} enabled true to enable auto badge, false to disable.
660
- * @param {Function} [success] Success callback.
661
- * @param {function(message)} [failure] Failure callback.
662
- * @param {string} failure.message The error message.
663
- */
664
- UrbanAirShip.prototype.setAutobadgeEnabled = function (enabled) {
665
- return;
666
- };
667
- /**
668
- * Sets the badge number.
669
- * @param count number specified badge to set.
670
- * @param {Function} [success] Success callback.
671
- * @param {function(message)} [failure] Failure callback.
672
- * @param {string} failure.message The error message.
673
- */
674
- UrbanAirShip.prototype.setBadgeNumber = function (count) {
675
- return;
676
- };
677
- /**
678
- * Returns the current badge number.
679
- * @param {function(badgeNumber)} success The function to call on success.
680
- * @param {int} success.badgeNumber The current application badge number.
681
- * @param {function(message)} [failure] Failure callback.
682
- * @param {string} failure.message The error message.
683
- */
684
- UrbanAirShip.prototype.getBadgeNumber = function () {
685
- return;
686
- };
687
- /**
688
- * Clears the badge.
689
- * @param {Function} [success] Success callback.
690
- * @param {function(message)} [failure] Failure callback.
691
- * @param {string} failure.message The error message.
692
- */
693
- UrbanAirShip.prototype.resetBadge = function () {
694
- return;
695
- };
696
- /**
697
- * Sets the iOS notification types. Specify the combination of
698
- * badges, sound and alerts that are desired.
699
- * @param types specified notification types.
700
- * @param {Function} [success] Success callback.
701
- * @param {function(message)} [failure] Failure callback.
702
- * @param {string} failure.message The error message.
703
- */
704
- UrbanAirShip.prototype.setNotificationTypes = function (types) {
705
- return;
706
- };
707
- /**
708
- * Sets the iOS presentation options. Specify the combination of
709
- * badges, sound and alerts that are desired.
710
- * @param options types specified presentation options.
711
- * @param {Function} [success] Success callback.
712
- * @param {function(message)} [failure] Failure callback.
713
- * @param {string} failure.message The error message.
714
- */
715
- UrbanAirShip.prototype.setPresentationOptions = function (options) {
716
- return;
717
- };
718
- // Android only
719
- /**
720
- * Checks if notification sound is enabled or not.
721
- * @param {function(enabled)} success Success callback.
722
- * @param {boolean} success.enabled Flag indicating if sound is enabled or not.
723
- * @param {function(message)} [failure] Failure callback.
724
- * @param {string} failure.message The error message.
725
- */
726
- UrbanAirShip.prototype.isSoundEnabled = function () {
727
- return;
728
- };
729
- /**
730
- * Enables or disables notification sound.
731
- * @param {boolean} enabled true to enable sound, false to disable.
732
- * @param {Function} [success] Success callback.
733
- * @param {function(message)} [failure] Failure callback.
734
- * @param {string} failure.message The error message.
735
- */
736
- UrbanAirShip.prototype.setSoundEnabled = function (enabled) {
737
- return;
738
- };
739
- /**
740
- * Checks if notification vibration is enabled or not.
741
- * @param {function(enabled)} success Success callback.
742
- * @param {boolean} success.enabled Flag indicating if vibration is enabled or not.
743
- * @param {function(message)} [failure] Failure callback.
744
- * @param {string} failure.message The error message.
745
- */
746
- UrbanAirShip.prototype.isVibrateEnabled = function () {
747
- return;
748
- };
749
- /**
750
- * Enables or disables notification vibration.
751
- * @param {boolean} enabled true to enable vibration, false to disable.
752
- * @param {Function} [success] Success callback.
753
- * @param {function(message)} [failure] Failure callback.
754
- * @param {string} failure.message The error message.
755
- */
756
- UrbanAirShip.prototype.setVibrateEnabled = function (enabled) {
757
- return;
758
- };
759
- /**
760
- * Adds a custom event.
761
- * @param {object} event The custom event object.
762
- * @param {string} event.name The event's name.
763
- * @param {number} [event.value] The event's value.
764
- * @param {string} [event.transactionId] The event's transaction ID.
765
- * @param {object} [event.properties] The event's properties. Only numbers, booleans, strings, and array of strings are supported.
766
- * @param {Function} [success] Success callback.
767
- * @param {function(message)} [failure] Failure callback.
768
- * @param {string} failure.message The error message.
769
- */
770
- UrbanAirShip.prototype.addCustomEvent = function (event) {
771
- return;
772
- };
773
- /**
774
- * Initiates screen tracking for a specific app screen, must be called once per tracked screen.
775
- * @param {string} screen The screen's string identifier.
776
- * @param {Function} [success] Success callback.
777
- * @param {function(message)} [failure] Failure callback.
778
- * @param {string} failure.message The error message.
779
- * @since 11.0.0
780
- */
781
- UrbanAirShip.prototype.trackScreen = function (screen) {
782
- return;
783
- };
784
- /**
785
- * Enables features, adding them to the set of currently enabled features.
786
- * @param {Array<string>} features The features to enable.
787
- * @param {Function} [success] Success callback.
788
- * @param {function(message)} [failure] Failure callback.
789
- * @param {string} failure.message The error message.
790
- * @since 13.0.0
791
- */
792
- UrbanAirShip.prototype.enableFeature = function (features) {
793
- return;
794
- };
795
- /**
796
- * Disables features, removing them from the set of currently enabled features.
797
- * @param {Array<string>} features The features to disable.
798
- * @param {Function} [success] Success callback.
799
- * @param {function(message)} [failure] Failure callback.
800
- * @param {string} failure.message The error message.
801
- * @since 13.0.0
802
- */
803
- UrbanAirShip.prototype.disableFeature = function (features) {
804
- return;
805
- };
49
+ UrbanAirShipOriginal.prototype.onDeepLink = function () { return cordova(this, "onDeepLink", { "eventObservable": true, "event": "urbanairship.deep_link", "element": "document" }, arguments); };
50
+ UrbanAirShipOriginal.prototype.onRegistration = function () { return cordova(this, "onRegistration", { "eventObservable": true, "event": "urbanairship.registration", "element": "document" }, arguments); };
51
+ UrbanAirShipOriginal.prototype.onInboxUpdated = function () { return cordova(this, "onInboxUpdated", { "eventObservable": true, "event": "urbanairship.inbox_updated", "element": "document" }, arguments); };
52
+ UrbanAirShipOriginal.prototype.onShowInbox = function () { return cordova(this, "onShowInbox", { "eventObservable": true, "event": "urbanairship.show_inbox", "element": "document" }, arguments); };
53
+ UrbanAirShipOriginal.prototype.onPushReceived = function () { return cordova(this, "onPushReceived", { "eventObservable": true, "event": "urbanairship.push", "element": "document" }, arguments); };
54
+ UrbanAirShipOriginal.prototype.onNotificationOpened = function () { return cordova(this, "onNotificationOpened", { "eventObservable": true, "event": "urbanairship.notification_opened", "element": "document" }, arguments); };
55
+ UrbanAirShipOriginal.prototype.onNotificationOptInStatus = function () { return cordova(this, "onNotificationOptInStatus", { "eventObservable": true, "event": "urbanairship.notification_opt_in_status", "element": "document" }, arguments); };
56
+ UrbanAirShipOriginal.prototype.reattach = function () { return cordova(this, "reattach", { "sync": true }, arguments); };
57
+ UrbanAirShipOriginal.prototype.takeOff = function (config) { return cordova(this, "takeOff", {}, arguments); };
58
+ UrbanAirShipOriginal.prototype.setAndroidNotificationConfig = function (config) { return cordova(this, "setAndroidNotificationConfig", {}, arguments); };
59
+ UrbanAirShipOriginal.prototype.setAutoLaunchDefaultMessageCenter = function (enabled) { return cordova(this, "setAutoLaunchDefaultMessageCenter", {}, arguments); };
60
+ UrbanAirShipOriginal.prototype.setUserNotificationsEnabled = function (enabled) { return cordova(this, "setUserNotificationsEnabled", {}, arguments); };
61
+ UrbanAirShipOriginal.prototype.isUserNotificationsEnabled = function () { return cordova(this, "isUserNotificationsEnabled", {}, arguments); };
62
+ UrbanAirShipOriginal.prototype.isAppNotificationsEnabled = function () { return cordova(this, "isAppNotificationsEnabled", {}, arguments); };
63
+ UrbanAirShipOriginal.prototype.getChannelID = function () { return cordova(this, "getChannelID", {}, arguments); };
64
+ UrbanAirShipOriginal.prototype.getLaunchNotification = function (clear) { return cordova(this, "getLaunchNotification", {}, arguments); };
65
+ UrbanAirShipOriginal.prototype.getDeepLink = function (clear) { return cordova(this, "getDeepLink", {}, arguments); };
66
+ UrbanAirShipOriginal.prototype.getTags = function () { return cordova(this, "getTags", {}, arguments); };
67
+ UrbanAirShipOriginal.prototype.setTags = function (tags) { return cordova(this, "setTags", {}, arguments); };
68
+ UrbanAirShipOriginal.prototype.getAlias = function () { return cordova(this, "getAlias", {}, arguments); };
69
+ UrbanAirShipOriginal.prototype.setAlias = function (alias) { return cordova(this, "setAlias", {}, arguments); };
70
+ UrbanAirShipOriginal.prototype.isQuietTimeEnabled = function () { return cordova(this, "isQuietTimeEnabled", {}, arguments); };
71
+ UrbanAirShipOriginal.prototype.setQuietTimeEnabled = function (enabled) { return cordova(this, "setQuietTimeEnabled", {}, arguments); };
72
+ UrbanAirShipOriginal.prototype.isInQuietTime = function () { return cordova(this, "isInQuietTime", {}, arguments); };
73
+ UrbanAirShipOriginal.prototype.getQuietTime = function () { return cordova(this, "getQuietTime", {}, arguments); };
74
+ UrbanAirShipOriginal.prototype.setQuietTime = function (startHour, startMinute, endHour, endMinute) { return cordova(this, "setQuietTime", {}, arguments); };
75
+ UrbanAirShipOriginal.prototype.setAnalyticsEnabled = function (enabled) { return cordova(this, "setAnalyticsEnabled", {}, arguments); };
76
+ UrbanAirShipOriginal.prototype.isAnalyticsEnabled = function () { return cordova(this, "isAnalyticsEnabled", {}, arguments); };
77
+ UrbanAirShipOriginal.prototype.getNamedUser = function () { return cordova(this, "getNamedUser", {}, arguments); };
78
+ UrbanAirShipOriginal.prototype.setNamedUser = function (namedUser) { return cordova(this, "setNamedUser", {}, arguments); };
79
+ UrbanAirShipOriginal.prototype.runAction = function (actionName, actionValue) { return cordova(this, "runAction", {}, arguments); };
80
+ UrbanAirShipOriginal.prototype.editNamedUserTagGroups = function () { return cordova(this, "editNamedUserTagGroups", { "sync": true }, arguments); };
81
+ UrbanAirShipOriginal.prototype.editChannelTagGroups = function () { return cordova(this, "editChannelTagGroups", { "sync": true }, arguments); };
82
+ UrbanAirShipOriginal.prototype.editChannelAttributes = function () { return cordova(this, "editChannelAttributes", { "sync": true }, arguments); };
83
+ UrbanAirShipOriginal.prototype.editNamedUserAttributes = function () { return cordova(this, "editNamedUserAttributes", { "sync": true }, arguments); };
84
+ UrbanAirShipOriginal.prototype.editChannelSubscriptionLists = function () { return cordova(this, "editChannelSubscriptionLists", { "sync": true }, arguments); };
85
+ UrbanAirShipOriginal.prototype.editContactSubscriptionLists = function () { return cordova(this, "editContactSubscriptionLists", { "sync": true }, arguments); };
86
+ UrbanAirShipOriginal.prototype.getChannelSubscriptionLists = function () { return cordova(this, "getChannelSubscriptionLists", { "successIndex": 0, "errorIndex": 1 }, arguments); };
87
+ UrbanAirShipOriginal.prototype.getContactSubscriptionLists = function () { return cordova(this, "getContactSubscriptionLists", { "successIndex": 0, "errorIndex": 1 }, arguments); };
88
+ UrbanAirShipOriginal.prototype.setAssociatedIdentifier = function (key, identifier) { return cordova(this, "setAssociatedIdentifier", {}, arguments); };
89
+ UrbanAirShipOriginal.prototype.setLocationEnabled = function (enabled) { return cordova(this, "setLocationEnabled", {}, arguments); };
90
+ UrbanAirShipOriginal.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", {}, arguments); };
91
+ UrbanAirShipOriginal.prototype.setBackgroundLocationEnabled = function (enabled) { return cordova(this, "setBackgroundLocationEnabled", {}, arguments); };
92
+ UrbanAirShipOriginal.prototype.isBackgroundLocationEnabled = function () { return cordova(this, "isBackgroundLocationEnabled", {}, arguments); };
93
+ UrbanAirShipOriginal.prototype.displayMessageCenter = function () { return cordova(this, "displayMessageCenter", {}, arguments); };
94
+ UrbanAirShipOriginal.prototype.dismissMessageCenter = function () { return cordova(this, "dismissMessageCenter", {}, arguments); };
95
+ UrbanAirShipOriginal.prototype.dismissInboxMessage = function () { return cordova(this, "dismissInboxMessage", {}, arguments); };
96
+ UrbanAirShipOriginal.prototype.dismissOverlayInboxMessage = function () { return cordova(this, "dismissOverlayInboxMessage", {}, arguments); };
97
+ UrbanAirShipOriginal.prototype.getInboxMessages = function () { return cordova(this, "getInboxMessages", {}, arguments); };
98
+ UrbanAirShipOriginal.prototype.markInboxMessageRead = function (messageId) { return cordova(this, "markInboxMessageRead", {}, arguments); };
99
+ UrbanAirShipOriginal.prototype.deleteInboxMessage = function (messageId) { return cordova(this, "deleteInboxMessage", {}, arguments); };
100
+ UrbanAirShipOriginal.prototype.displayInboxMessage = function (messageId) { return cordova(this, "displayInboxMessage", {}, arguments); };
101
+ UrbanAirShipOriginal.prototype.refreshInbox = function () { return cordova(this, "refreshInbox", {}, arguments); };
102
+ UrbanAirShipOriginal.prototype.overlayInboxMessage = function (messageId) { return cordova(this, "overlayInboxMessage", {}, arguments); };
103
+ UrbanAirShipOriginal.prototype.clearNotification = function (identifier) { return cordova(this, "clearNotification", {}, arguments); };
104
+ UrbanAirShipOriginal.prototype.clearNotifications = function () { return cordova(this, "clearNotifications", {}, arguments); };
105
+ UrbanAirShipOriginal.prototype.getActiveNotifications = function () { return cordova(this, "getActiveNotifications", {}, arguments); };
106
+ UrbanAirShipOriginal.prototype.setAutobadgeEnabled = function (enabled) { return cordova(this, "setAutobadgeEnabled", {}, arguments); };
107
+ UrbanAirShipOriginal.prototype.setBadgeNumber = function (count) { return cordova(this, "setBadgeNumber", {}, arguments); };
108
+ UrbanAirShipOriginal.prototype.getBadgeNumber = function () { return cordova(this, "getBadgeNumber", {}, arguments); };
109
+ UrbanAirShipOriginal.prototype.resetBadge = function () { return cordova(this, "resetBadge", {}, arguments); };
110
+ UrbanAirShipOriginal.prototype.setNotificationTypes = function (types) { return cordova(this, "setNotificationTypes", {}, arguments); };
111
+ UrbanAirShipOriginal.prototype.setPresentationOptions = function (options) { return cordova(this, "setPresentationOptions", {}, arguments); };
112
+ UrbanAirShipOriginal.prototype.isSoundEnabled = function () { return cordova(this, "isSoundEnabled", {}, arguments); };
113
+ UrbanAirShipOriginal.prototype.setSoundEnabled = function (enabled) { return cordova(this, "setSoundEnabled", {}, arguments); };
114
+ UrbanAirShipOriginal.prototype.isVibrateEnabled = function () { return cordova(this, "isVibrateEnabled", {}, arguments); };
115
+ UrbanAirShipOriginal.prototype.setVibrateEnabled = function (enabled) { return cordova(this, "setVibrateEnabled", {}, arguments); };
116
+ UrbanAirShipOriginal.prototype.addCustomEvent = function (event) { return cordova(this, "addCustomEvent", {}, arguments); };
117
+ UrbanAirShipOriginal.prototype.trackScreen = function (screen) { return cordova(this, "trackScreen", { "successIndex": 1, "errorIndex": 2 }, arguments); };
118
+ UrbanAirShipOriginal.prototype.enableFeature = function (features) { return cordova(this, "enableFeature", { "successIndex": 1, "errorIndex": 2 }, arguments); };
119
+ UrbanAirShipOriginal.prototype.disableFeature = function (features) { return cordova(this, "disableFeature", { "successIndex": 1, "errorIndex": 2 }, arguments); };
806
120
  /**
807
121
  * Sets the current enabled features, replacing any currently enabled features with the given set.
122
+ *
808
123
  * @param {Array<string>} features The features to set as enabled.
809
124
  * @param {Function} [success] Success callback.
810
125
  * @param {function(message)} [failure] Failure callback.
811
126
  * @param {string} failure.message The error message.
812
127
  * @since 13.0.0
813
128
  */
814
- UrbanAirShip.prototype.setEnabledFeatures = function (features) {
815
- return;
816
- };
817
- /**
818
- * Gets the current enabled features.
819
- * @param {Function} [success] Success callback.
820
- * @param {function(message)} [failure] Failure callback.
821
- * @param {string} failure.message The error message.
822
- * @since 13.0.0
823
- */
824
- UrbanAirShip.prototype.getEnabledFeatures = function () {
825
- return;
826
- };
827
- /**
828
- * Checks if all of the given features are enabled.
829
- * @param {Array<string>} features The features to check.
830
- * @param {Function} [success] Success callback.
831
- * @param {function(message)} [failure] Failure callback.
832
- * @param {string} failure.message The error message.
833
- * @since 13.0.0
834
- */
835
- UrbanAirShip.prototype.isFeatureEnabled = function (features) {
836
- return;
837
- };
838
- /**
839
- * Returns the configuration of the Preference Center with the given ID trough a callback method.
840
- * @param {string} preferenceCenterId The preference center ID.
841
- * @param {Function} [success] Success callback.
842
- * @param {function(message)} [failure] Failure callback.
843
- * @param {string} failure.message The error message.
844
- * @since 13.3.0
845
- */
846
- UrbanAirShip.prototype.getPreferenceCenterConfig = function (preferenceCenterId) {
847
- return;
848
- };
849
- /**
850
- * Opens the Preference Center with the given preferenceCenterId.
851
- * @param {string} prenferenceCenterId The preference center ID.
852
- * @param {Function} [success] Success callback.
853
- * @param {function(message)} [failure] Failure callback.
854
- * @param {string} failure.message The error message.
855
- * @since 13.0.0
856
- */
857
- UrbanAirShip.prototype.openPreferenceCenter = function (prenferenceCenterId) {
858
- return;
859
- };
860
- /**
861
- * Overrides the locale setting.
862
- * @param {string} locale language and optional country code.
863
- * @param {function} [success] Success callback.
864
- * @param {function(message)} [failure] Failure callback.
865
- * @param {string} failure.message The error message.
866
- * @since 14.3.0
867
- */
868
- UrbanAirShip.prototype.setCurrentLocale = function (locale) {
869
- return;
870
- };
871
- /**
872
- * Returns the currently set locale.
873
- * @param {function(locale)} [success] Success callback.
874
- * @param {string} success.locale The locale as a string.
875
- * @param {function(message)} [failure] Failure callback.
876
- * @param {string} failure.message The error message.
877
- * @since 14.3.0
878
- */
879
- UrbanAirShip.prototype.getCurrentLocale = function () {
880
- return;
881
- };
882
- /**
883
- * Resets the current locale.
884
- * @param {function} [success] Success callback.
885
- * @param {function(message)} [failure] Failure callback.
886
- * @param {string} failure.message The error message.
887
- * @since 14.3.0
888
- */
889
- UrbanAirShip.prototype.clearLocale = function () {
890
- return;
891
- };
892
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54;
893
- __decorate([
894
- Cordova({
895
- eventObservable: true,
896
- event: 'urbanairship.deep_link',
897
- element: 'document',
898
- }),
899
- __metadata("design:type", Function),
900
- __metadata("design:paramtypes", []),
901
- __metadata("design:returntype", typeof (_a = typeof Observable !== "undefined" && Observable) === "function" ? _a : Object)
902
- ], UrbanAirShip.prototype, "onDeepLink", null);
903
- __decorate([
904
- Cordova({
905
- eventObservable: true,
906
- event: 'urbanairship.registration',
907
- element: 'document',
908
- }),
909
- __metadata("design:type", Function),
910
- __metadata("design:paramtypes", []),
911
- __metadata("design:returntype", typeof (_b = typeof Observable !== "undefined" && Observable) === "function" ? _b : Object)
912
- ], UrbanAirShip.prototype, "onRegistration", null);
913
- __decorate([
914
- Cordova({
915
- eventObservable: true,
916
- event: 'urbanairship.inbox_updated',
917
- element: 'document',
918
- }),
919
- __metadata("design:type", Function),
920
- __metadata("design:paramtypes", []),
921
- __metadata("design:returntype", typeof (_c = typeof Observable !== "undefined" && Observable) === "function" ? _c : Object)
922
- ], UrbanAirShip.prototype, "onInboxUpdated", null);
923
- __decorate([
924
- Cordova({
925
- eventObservable: true,
926
- event: 'urbanairship.show_inbox',
927
- element: 'document',
928
- }),
929
- __metadata("design:type", Function),
930
- __metadata("design:paramtypes", []),
931
- __metadata("design:returntype", typeof (_d = typeof Observable !== "undefined" && Observable) === "function" ? _d : Object)
932
- ], UrbanAirShip.prototype, "onShowInbox", null);
933
- __decorate([
934
- Cordova({
935
- eventObservable: true,
936
- event: 'urbanairship.push',
937
- element: 'document',
938
- }),
939
- __metadata("design:type", Function),
940
- __metadata("design:paramtypes", []),
941
- __metadata("design:returntype", typeof (_e = typeof Observable !== "undefined" && Observable) === "function" ? _e : Object)
942
- ], UrbanAirShip.prototype, "onPushReceived", null);
943
- __decorate([
944
- Cordova({
945
- eventObservable: true,
946
- event: 'urbanairship.notification_opened',
947
- element: 'document',
948
- }),
949
- __metadata("design:type", Function),
950
- __metadata("design:paramtypes", []),
951
- __metadata("design:returntype", typeof (_f = typeof Observable !== "undefined" && Observable) === "function" ? _f : Object)
952
- ], UrbanAirShip.prototype, "onNotificationOpened", null);
953
- __decorate([
954
- Cordova({
955
- eventObservable: true,
956
- event: 'urbanairship.notification_opt_in_status',
957
- element: 'document',
958
- }),
959
- __metadata("design:type", Function),
960
- __metadata("design:paramtypes", []),
961
- __metadata("design:returntype", typeof (_g = typeof Observable !== "undefined" && Observable) === "function" ? _g : Object)
962
- ], UrbanAirShip.prototype, "onNotificationOptInStatus", null);
963
- __decorate([
964
- Cordova({
965
- sync: true,
966
- }),
967
- __metadata("design:type", Function),
968
- __metadata("design:paramtypes", []),
969
- __metadata("design:returntype", void 0)
970
- ], UrbanAirShip.prototype, "reattach", null);
971
- __decorate([
972
- Cordova(),
973
- __metadata("design:type", Function),
974
- __metadata("design:paramtypes", [Object]),
975
- __metadata("design:returntype", typeof (_h = typeof Promise !== "undefined" && Promise) === "function" ? _h : Object)
976
- ], UrbanAirShip.prototype, "takeOff", null);
977
- __decorate([
978
- Cordova(),
979
- __metadata("design:type", Function),
980
- __metadata("design:paramtypes", [Object]),
981
- __metadata("design:returntype", typeof (_j = typeof Promise !== "undefined" && Promise) === "function" ? _j : Object)
982
- ], UrbanAirShip.prototype, "setAndroidNotificationConfig", null);
983
- __decorate([
984
- Cordova(),
985
- __metadata("design:type", Function),
986
- __metadata("design:paramtypes", [Boolean]),
987
- __metadata("design:returntype", typeof (_k = typeof Promise !== "undefined" && Promise) === "function" ? _k : Object)
988
- ], UrbanAirShip.prototype, "setAutoLaunchDefaultMessageCenter", null);
989
- __decorate([
990
- Cordova(),
991
- __metadata("design:type", Function),
992
- __metadata("design:paramtypes", [Boolean]),
993
- __metadata("design:returntype", typeof (_l = typeof Promise !== "undefined" && Promise) === "function" ? _l : Object)
994
- ], UrbanAirShip.prototype, "setUserNotificationsEnabled", null);
995
- __decorate([
996
- Cordova(),
997
- __metadata("design:type", Function),
998
- __metadata("design:paramtypes", []),
999
- __metadata("design:returntype", typeof (_m = typeof Promise !== "undefined" && Promise) === "function" ? _m : Object)
1000
- ], UrbanAirShip.prototype, "isUserNotificationsEnabled", null);
1001
- __decorate([
1002
- Cordova(),
1003
- __metadata("design:type", Function),
1004
- __metadata("design:paramtypes", []),
1005
- __metadata("design:returntype", typeof (_o = typeof Promise !== "undefined" && Promise) === "function" ? _o : Object)
1006
- ], UrbanAirShip.prototype, "isAppNotificationsEnabled", null);
1007
- __decorate([
1008
- Cordova(),
1009
- __metadata("design:type", Function),
1010
- __metadata("design:paramtypes", []),
1011
- __metadata("design:returntype", typeof (_p = typeof Promise !== "undefined" && Promise) === "function" ? _p : Object)
1012
- ], UrbanAirShip.prototype, "getChannelID", null);
1013
- __decorate([
1014
- Cordova(),
1015
- __metadata("design:type", Function),
1016
- __metadata("design:paramtypes", [Boolean]),
1017
- __metadata("design:returntype", typeof (_q = typeof Promise !== "undefined" && Promise) === "function" ? _q : Object)
1018
- ], UrbanAirShip.prototype, "getLaunchNotification", null);
1019
- __decorate([
1020
- Cordova(),
1021
- __metadata("design:type", Function),
1022
- __metadata("design:paramtypes", [Boolean]),
1023
- __metadata("design:returntype", typeof (_r = typeof Promise !== "undefined" && Promise) === "function" ? _r : Object)
1024
- ], UrbanAirShip.prototype, "getDeepLink", null);
1025
- __decorate([
1026
- Cordova(),
1027
- __metadata("design:type", Function),
1028
- __metadata("design:paramtypes", []),
1029
- __metadata("design:returntype", typeof (_s = typeof Promise !== "undefined" && Promise) === "function" ? _s : Object)
1030
- ], UrbanAirShip.prototype, "getTags", null);
1031
- __decorate([
1032
- Cordova(),
1033
- __metadata("design:type", Function),
1034
- __metadata("design:paramtypes", [Array]),
1035
- __metadata("design:returntype", typeof (_t = typeof Promise !== "undefined" && Promise) === "function" ? _t : Object)
1036
- ], UrbanAirShip.prototype, "setTags", null);
1037
- __decorate([
1038
- Cordova(),
1039
- __metadata("design:type", Function),
1040
- __metadata("design:paramtypes", []),
1041
- __metadata("design:returntype", typeof (_u = typeof Promise !== "undefined" && Promise) === "function" ? _u : Object)
1042
- ], UrbanAirShip.prototype, "getAlias", null);
1043
- __decorate([
1044
- Cordova(),
1045
- __metadata("design:type", Function),
1046
- __metadata("design:paramtypes", [String]),
1047
- __metadata("design:returntype", typeof (_v = typeof Promise !== "undefined" && Promise) === "function" ? _v : Object)
1048
- ], UrbanAirShip.prototype, "setAlias", null);
1049
- __decorate([
1050
- Cordova(),
1051
- __metadata("design:type", Function),
1052
- __metadata("design:paramtypes", []),
1053
- __metadata("design:returntype", typeof (_w = typeof Promise !== "undefined" && Promise) === "function" ? _w : Object)
1054
- ], UrbanAirShip.prototype, "isQuietTimeEnabled", null);
1055
- __decorate([
1056
- Cordova(),
1057
- __metadata("design:type", Function),
1058
- __metadata("design:paramtypes", [Boolean]),
1059
- __metadata("design:returntype", typeof (_x = typeof Promise !== "undefined" && Promise) === "function" ? _x : Object)
1060
- ], UrbanAirShip.prototype, "setQuietTimeEnabled", null);
1061
- __decorate([
1062
- Cordova(),
1063
- __metadata("design:type", Function),
1064
- __metadata("design:paramtypes", []),
1065
- __metadata("design:returntype", typeof (_y = typeof Promise !== "undefined" && Promise) === "function" ? _y : Object)
1066
- ], UrbanAirShip.prototype, "isInQuietTime", null);
1067
- __decorate([
1068
- Cordova(),
1069
- __metadata("design:type", Function),
1070
- __metadata("design:paramtypes", []),
1071
- __metadata("design:returntype", typeof (_z = typeof Promise !== "undefined" && Promise) === "function" ? _z : Object)
1072
- ], UrbanAirShip.prototype, "getQuietTime", null);
1073
- __decorate([
1074
- Cordova(),
1075
- __metadata("design:type", Function),
1076
- __metadata("design:paramtypes", [Number, Number, Number, Number]),
1077
- __metadata("design:returntype", typeof (_0 = typeof Promise !== "undefined" && Promise) === "function" ? _0 : Object)
1078
- ], UrbanAirShip.prototype, "setQuietTime", null);
1079
- __decorate([
1080
- Cordova(),
1081
- __metadata("design:type", Function),
1082
- __metadata("design:paramtypes", [Boolean]),
1083
- __metadata("design:returntype", typeof (_1 = typeof Promise !== "undefined" && Promise) === "function" ? _1 : Object)
1084
- ], UrbanAirShip.prototype, "setAnalyticsEnabled", null);
1085
- __decorate([
1086
- Cordova(),
1087
- __metadata("design:type", Function),
1088
- __metadata("design:paramtypes", []),
1089
- __metadata("design:returntype", typeof (_2 = typeof Promise !== "undefined" && Promise) === "function" ? _2 : Object)
1090
- ], UrbanAirShip.prototype, "isAnalyticsEnabled", null);
1091
- __decorate([
1092
- Cordova(),
1093
- __metadata("design:type", Function),
1094
- __metadata("design:paramtypes", []),
1095
- __metadata("design:returntype", typeof (_3 = typeof Promise !== "undefined" && Promise) === "function" ? _3 : Object)
1096
- ], UrbanAirShip.prototype, "getNamedUser", null);
1097
- __decorate([
1098
- Cordova(),
1099
- __metadata("design:type", Function),
1100
- __metadata("design:paramtypes", [String]),
1101
- __metadata("design:returntype", typeof (_4 = typeof Promise !== "undefined" && Promise) === "function" ? _4 : Object)
1102
- ], UrbanAirShip.prototype, "setNamedUser", null);
1103
- __decorate([
1104
- Cordova(),
1105
- __metadata("design:type", Function),
1106
- __metadata("design:paramtypes", [String, Object]),
1107
- __metadata("design:returntype", typeof (_5 = typeof Promise !== "undefined" && Promise) === "function" ? _5 : Object)
1108
- ], UrbanAirShip.prototype, "runAction", null);
1109
- __decorate([
1110
- Cordova({ sync: true }),
1111
- __metadata("design:type", Function),
1112
- __metadata("design:paramtypes", []),
1113
- __metadata("design:returntype", typeof (_6 = typeof TagGroupEditor !== "undefined" && TagGroupEditor) === "function" ? _6 : Object)
1114
- ], UrbanAirShip.prototype, "editNamedUserTagGroups", null);
1115
- __decorate([
1116
- Cordova({ sync: true }),
1117
- __metadata("design:type", Function),
1118
- __metadata("design:paramtypes", []),
1119
- __metadata("design:returntype", typeof (_7 = typeof TagGroupEditor !== "undefined" && TagGroupEditor) === "function" ? _7 : Object)
1120
- ], UrbanAirShip.prototype, "editChannelTagGroups", null);
1121
- __decorate([
1122
- Cordova({ sync: true }),
1123
- __metadata("design:type", Function),
1124
- __metadata("design:paramtypes", []),
1125
- __metadata("design:returntype", typeof (_8 = typeof AttributesEditor !== "undefined" && AttributesEditor) === "function" ? _8 : Object)
1126
- ], UrbanAirShip.prototype, "editChannelAttributes", null);
1127
- __decorate([
1128
- Cordova({ sync: true }),
1129
- __metadata("design:type", Function),
1130
- __metadata("design:paramtypes", []),
1131
- __metadata("design:returntype", typeof (_9 = typeof AttributesEditor !== "undefined" && AttributesEditor) === "function" ? _9 : Object)
1132
- ], UrbanAirShip.prototype, "editNamedUserAttributes", null);
1133
- __decorate([
1134
- Cordova({ sync: true }),
1135
- __metadata("design:type", Function),
1136
- __metadata("design:paramtypes", []),
1137
- __metadata("design:returntype", typeof (_10 = typeof ChannelSubscriptionListEditor !== "undefined" && ChannelSubscriptionListEditor) === "function" ? _10 : Object)
1138
- ], UrbanAirShip.prototype, "editChannelSubscriptionLists", null);
1139
- __decorate([
1140
- Cordova({ sync: true }),
1141
- __metadata("design:type", Function),
1142
- __metadata("design:paramtypes", []),
1143
- __metadata("design:returntype", typeof (_11 = typeof ContactSubscriptionListEditor !== "undefined" && ContactSubscriptionListEditor) === "function" ? _11 : Object)
1144
- ], UrbanAirShip.prototype, "editContactSubscriptionLists", null);
1145
- __decorate([
1146
- Cordova({
1147
- successIndex: 0,
1148
- errorIndex: 1,
1149
- }),
1150
- __metadata("design:type", Function),
1151
- __metadata("design:paramtypes", []),
1152
- __metadata("design:returntype", typeof (_12 = typeof Promise !== "undefined" && Promise) === "function" ? _12 : Object)
1153
- ], UrbanAirShip.prototype, "getChannelSubscriptionLists", null);
1154
- __decorate([
1155
- Cordova({
1156
- successIndex: 0,
1157
- errorIndex: 1,
1158
- }),
1159
- __metadata("design:type", Function),
1160
- __metadata("design:paramtypes", []),
1161
- __metadata("design:returntype", typeof (_13 = typeof Promise !== "undefined" && Promise) === "function" ? _13 : Object)
1162
- ], UrbanAirShip.prototype, "getContactSubscriptionLists", null);
1163
- __decorate([
1164
- Cordova(),
1165
- __metadata("design:type", Function),
1166
- __metadata("design:paramtypes", [String, String]),
1167
- __metadata("design:returntype", typeof (_14 = typeof Promise !== "undefined" && Promise) === "function" ? _14 : Object)
1168
- ], UrbanAirShip.prototype, "setAssociatedIdentifier", null);
1169
- __decorate([
1170
- Cordova(),
1171
- __metadata("design:type", Function),
1172
- __metadata("design:paramtypes", [Boolean]),
1173
- __metadata("design:returntype", typeof (_15 = typeof Promise !== "undefined" && Promise) === "function" ? _15 : Object)
1174
- ], UrbanAirShip.prototype, "setLocationEnabled", null);
1175
- __decorate([
1176
- Cordova(),
1177
- __metadata("design:type", Function),
1178
- __metadata("design:paramtypes", []),
1179
- __metadata("design:returntype", typeof (_16 = typeof Promise !== "undefined" && Promise) === "function" ? _16 : Object)
1180
- ], UrbanAirShip.prototype, "isLocationEnabled", null);
1181
- __decorate([
1182
- Cordova(),
1183
- __metadata("design:type", Function),
1184
- __metadata("design:paramtypes", [Boolean]),
1185
- __metadata("design:returntype", typeof (_17 = typeof Promise !== "undefined" && Promise) === "function" ? _17 : Object)
1186
- ], UrbanAirShip.prototype, "setBackgroundLocationEnabled", null);
1187
- __decorate([
1188
- Cordova(),
1189
- __metadata("design:type", Function),
1190
- __metadata("design:paramtypes", []),
1191
- __metadata("design:returntype", typeof (_18 = typeof Promise !== "undefined" && Promise) === "function" ? _18 : Object)
1192
- ], UrbanAirShip.prototype, "isBackgroundLocationEnabled", null);
1193
- __decorate([
1194
- Cordova(),
1195
- __metadata("design:type", Function),
1196
- __metadata("design:paramtypes", []),
1197
- __metadata("design:returntype", typeof (_19 = typeof Promise !== "undefined" && Promise) === "function" ? _19 : Object)
1198
- ], UrbanAirShip.prototype, "displayMessageCenter", null);
1199
- __decorate([
1200
- Cordova(),
1201
- __metadata("design:type", Function),
1202
- __metadata("design:paramtypes", []),
1203
- __metadata("design:returntype", typeof (_20 = typeof Promise !== "undefined" && Promise) === "function" ? _20 : Object)
1204
- ], UrbanAirShip.prototype, "dismissMessageCenter", null);
1205
- __decorate([
1206
- Cordova(),
1207
- __metadata("design:type", Function),
1208
- __metadata("design:paramtypes", []),
1209
- __metadata("design:returntype", typeof (_21 = typeof Promise !== "undefined" && Promise) === "function" ? _21 : Object)
1210
- ], UrbanAirShip.prototype, "dismissInboxMessage", null);
1211
- __decorate([
1212
- Cordova(),
1213
- __metadata("design:type", Function),
1214
- __metadata("design:paramtypes", []),
1215
- __metadata("design:returntype", typeof (_22 = typeof Promise !== "undefined" && Promise) === "function" ? _22 : Object)
1216
- ], UrbanAirShip.prototype, "dismissOverlayInboxMessage", null);
1217
- __decorate([
1218
- Cordova(),
1219
- __metadata("design:type", Function),
1220
- __metadata("design:paramtypes", []),
1221
- __metadata("design:returntype", typeof (_23 = typeof Promise !== "undefined" && Promise) === "function" ? _23 : Object)
1222
- ], UrbanAirShip.prototype, "getInboxMessages", null);
1223
- __decorate([
1224
- Cordova(),
1225
- __metadata("design:type", Function),
1226
- __metadata("design:paramtypes", [String]),
1227
- __metadata("design:returntype", typeof (_24 = typeof Promise !== "undefined" && Promise) === "function" ? _24 : Object)
1228
- ], UrbanAirShip.prototype, "markInboxMessageRead", null);
1229
- __decorate([
1230
- Cordova(),
1231
- __metadata("design:type", Function),
1232
- __metadata("design:paramtypes", [String]),
1233
- __metadata("design:returntype", typeof (_25 = typeof Promise !== "undefined" && Promise) === "function" ? _25 : Object)
1234
- ], UrbanAirShip.prototype, "deleteInboxMessage", null);
1235
- __decorate([
1236
- Cordova(),
1237
- __metadata("design:type", Function),
1238
- __metadata("design:paramtypes", [String]),
1239
- __metadata("design:returntype", typeof (_26 = typeof Promise !== "undefined" && Promise) === "function" ? _26 : Object)
1240
- ], UrbanAirShip.prototype, "displayInboxMessage", null);
1241
- __decorate([
1242
- Cordova(),
1243
- __metadata("design:type", Function),
1244
- __metadata("design:paramtypes", []),
1245
- __metadata("design:returntype", typeof (_27 = typeof Promise !== "undefined" && Promise) === "function" ? _27 : Object)
1246
- ], UrbanAirShip.prototype, "refreshInbox", null);
1247
- __decorate([
1248
- Cordova(),
1249
- __metadata("design:type", Function),
1250
- __metadata("design:paramtypes", [String]),
1251
- __metadata("design:returntype", typeof (_28 = typeof Promise !== "undefined" && Promise) === "function" ? _28 : Object)
1252
- ], UrbanAirShip.prototype, "overlayInboxMessage", null);
1253
- __decorate([
1254
- Cordova(),
1255
- __metadata("design:type", Function),
1256
- __metadata("design:paramtypes", [String]),
1257
- __metadata("design:returntype", typeof (_29 = typeof Promise !== "undefined" && Promise) === "function" ? _29 : Object)
1258
- ], UrbanAirShip.prototype, "clearNotification", null);
1259
- __decorate([
1260
- Cordova(),
1261
- __metadata("design:type", Function),
1262
- __metadata("design:paramtypes", []),
1263
- __metadata("design:returntype", typeof (_30 = typeof Promise !== "undefined" && Promise) === "function" ? _30 : Object)
1264
- ], UrbanAirShip.prototype, "clearNotifications", null);
1265
- __decorate([
1266
- Cordova(),
1267
- __metadata("design:type", Function),
1268
- __metadata("design:paramtypes", []),
1269
- __metadata("design:returntype", typeof (_31 = typeof Promise !== "undefined" && Promise) === "function" ? _31 : Object)
1270
- ], UrbanAirShip.prototype, "getActiveNotifications", null);
1271
- __decorate([
1272
- Cordova(),
1273
- __metadata("design:type", Function),
1274
- __metadata("design:paramtypes", [Boolean]),
1275
- __metadata("design:returntype", typeof (_32 = typeof Promise !== "undefined" && Promise) === "function" ? _32 : Object)
1276
- ], UrbanAirShip.prototype, "setAutobadgeEnabled", null);
1277
- __decorate([
1278
- Cordova(),
1279
- __metadata("design:type", Function),
1280
- __metadata("design:paramtypes", [Number]),
1281
- __metadata("design:returntype", typeof (_33 = typeof Promise !== "undefined" && Promise) === "function" ? _33 : Object)
1282
- ], UrbanAirShip.prototype, "setBadgeNumber", null);
1283
- __decorate([
1284
- Cordova(),
1285
- __metadata("design:type", Function),
1286
- __metadata("design:paramtypes", []),
1287
- __metadata("design:returntype", typeof (_34 = typeof Promise !== "undefined" && Promise) === "function" ? _34 : Object)
1288
- ], UrbanAirShip.prototype, "getBadgeNumber", null);
1289
- __decorate([
1290
- Cordova(),
1291
- __metadata("design:type", Function),
1292
- __metadata("design:paramtypes", []),
1293
- __metadata("design:returntype", typeof (_35 = typeof Promise !== "undefined" && Promise) === "function" ? _35 : Object)
1294
- ], UrbanAirShip.prototype, "resetBadge", null);
1295
- __decorate([
1296
- Cordova(),
1297
- __metadata("design:type", Function),
1298
- __metadata("design:paramtypes", [typeof (_36 = typeof NotificationType !== "undefined" && NotificationType) === "function" ? _36 : Object]),
1299
- __metadata("design:returntype", typeof (_37 = typeof Promise !== "undefined" && Promise) === "function" ? _37 : Object)
1300
- ], UrbanAirShip.prototype, "setNotificationTypes", null);
1301
- __decorate([
1302
- Cordova(),
1303
- __metadata("design:type", Function),
1304
- __metadata("design:paramtypes", [typeof (_38 = typeof PresentationOptions !== "undefined" && PresentationOptions) === "function" ? _38 : Object]),
1305
- __metadata("design:returntype", typeof (_39 = typeof Promise !== "undefined" && Promise) === "function" ? _39 : Object)
1306
- ], UrbanAirShip.prototype, "setPresentationOptions", null);
1307
- __decorate([
1308
- Cordova(),
1309
- __metadata("design:type", Function),
1310
- __metadata("design:paramtypes", []),
1311
- __metadata("design:returntype", typeof (_40 = typeof Promise !== "undefined" && Promise) === "function" ? _40 : Object)
1312
- ], UrbanAirShip.prototype, "isSoundEnabled", null);
1313
- __decorate([
1314
- Cordova(),
1315
- __metadata("design:type", Function),
1316
- __metadata("design:paramtypes", [Boolean]),
1317
- __metadata("design:returntype", typeof (_41 = typeof Promise !== "undefined" && Promise) === "function" ? _41 : Object)
1318
- ], UrbanAirShip.prototype, "setSoundEnabled", null);
1319
- __decorate([
1320
- Cordova(),
1321
- __metadata("design:type", Function),
1322
- __metadata("design:paramtypes", []),
1323
- __metadata("design:returntype", typeof (_42 = typeof Promise !== "undefined" && Promise) === "function" ? _42 : Object)
1324
- ], UrbanAirShip.prototype, "isVibrateEnabled", null);
1325
- __decorate([
1326
- Cordova(),
1327
- __metadata("design:type", Function),
1328
- __metadata("design:paramtypes", [Boolean]),
1329
- __metadata("design:returntype", typeof (_43 = typeof Promise !== "undefined" && Promise) === "function" ? _43 : Object)
1330
- ], UrbanAirShip.prototype, "setVibrateEnabled", null);
1331
- __decorate([
1332
- Cordova(),
1333
- __metadata("design:type", Function),
1334
- __metadata("design:paramtypes", [Object]),
1335
- __metadata("design:returntype", typeof (_44 = typeof Promise !== "undefined" && Promise) === "function" ? _44 : Object)
1336
- ], UrbanAirShip.prototype, "addCustomEvent", null);
1337
- __decorate([
1338
- Cordova({
1339
- successIndex: 1,
1340
- errorIndex: 2,
1341
- }),
1342
- __metadata("design:type", Function),
1343
- __metadata("design:paramtypes", [String]),
1344
- __metadata("design:returntype", typeof (_45 = typeof Promise !== "undefined" && Promise) === "function" ? _45 : Object)
1345
- ], UrbanAirShip.prototype, "trackScreen", null);
1346
- __decorate([
1347
- Cordova({
1348
- successIndex: 1,
1349
- errorIndex: 2,
1350
- }),
1351
- __metadata("design:type", Function),
1352
- __metadata("design:paramtypes", [Array]),
1353
- __metadata("design:returntype", typeof (_46 = typeof Promise !== "undefined" && Promise) === "function" ? _46 : Object)
1354
- ], UrbanAirShip.prototype, "enableFeature", null);
1355
- __decorate([
1356
- Cordova({
1357
- successIndex: 1,
1358
- errorIndex: 2,
1359
- }),
1360
- __metadata("design:type", Function),
1361
- __metadata("design:paramtypes", [Array]),
1362
- __metadata("design:returntype", typeof (_47 = typeof Promise !== "undefined" && Promise) === "function" ? _47 : Object)
1363
- ], UrbanAirShip.prototype, "disableFeature", null);
1364
- __decorate([
1365
- Cordova({
1366
- successIndex: 0,
1367
- errorIndex: 1,
1368
- }),
1369
- __metadata("design:type", Function),
1370
- __metadata("design:paramtypes", []),
1371
- __metadata("design:returntype", typeof (_48 = typeof Promise !== "undefined" && Promise) === "function" ? _48 : Object)
1372
- ], UrbanAirShip.prototype, "getEnabledFeatures", null);
1373
- __decorate([
1374
- Cordova({
1375
- successIndex: 1,
1376
- errorIndex: 2,
1377
- }),
1378
- __metadata("design:type", Function),
1379
- __metadata("design:paramtypes", [Array]),
1380
- __metadata("design:returntype", typeof (_49 = typeof Promise !== "undefined" && Promise) === "function" ? _49 : Object)
1381
- ], UrbanAirShip.prototype, "isFeatureEnabled", null);
1382
- __decorate([
1383
- Cordova({
1384
- successIndex: 1,
1385
- errorIndex: 2,
1386
- }),
1387
- __metadata("design:type", Function),
1388
- __metadata("design:paramtypes", [String]),
1389
- __metadata("design:returntype", typeof (_50 = typeof Promise !== "undefined" && Promise) === "function" ? _50 : Object)
1390
- ], UrbanAirShip.prototype, "getPreferenceCenterConfig", null);
1391
- __decorate([
1392
- Cordova({
1393
- successIndex: 1,
1394
- errorIndex: 2,
1395
- }),
1396
- __metadata("design:type", Function),
1397
- __metadata("design:paramtypes", [String]),
1398
- __metadata("design:returntype", typeof (_51 = typeof Promise !== "undefined" && Promise) === "function" ? _51 : Object)
1399
- ], UrbanAirShip.prototype, "openPreferenceCenter", null);
1400
- __decorate([
1401
- Cordova(),
1402
- __metadata("design:type", Function),
1403
- __metadata("design:paramtypes", [String]),
1404
- __metadata("design:returntype", typeof (_52 = typeof Promise !== "undefined" && Promise) === "function" ? _52 : Object)
1405
- ], UrbanAirShip.prototype, "setCurrentLocale", null);
1406
- __decorate([
1407
- Cordova(),
1408
- __metadata("design:type", Function),
1409
- __metadata("design:paramtypes", []),
1410
- __metadata("design:returntype", typeof (_53 = typeof Promise !== "undefined" && Promise) === "function" ? _53 : Object)
1411
- ], UrbanAirShip.prototype, "getCurrentLocale", null);
1412
- __decorate([
1413
- Cordova(),
1414
- __metadata("design:type", Function),
1415
- __metadata("design:paramtypes", []),
1416
- __metadata("design:returntype", typeof (_54 = typeof Promise !== "undefined" && Promise) === "function" ? _54 : Object)
1417
- ], UrbanAirShip.prototype, "clearLocale", null);
1418
- return UrbanAirShip;
129
+ UrbanAirShipOriginal.prototype.setEnabledFeatures = function (features) {
130
+ return;
131
+ };
132
+ UrbanAirShipOriginal.prototype.getEnabledFeatures = function () { return cordova(this, "getEnabledFeatures", { "successIndex": 0, "errorIndex": 1 }, arguments); };
133
+ UrbanAirShipOriginal.prototype.isFeatureEnabled = function (features) { return cordova(this, "isFeatureEnabled", { "successIndex": 1, "errorIndex": 2 }, arguments); };
134
+ UrbanAirShipOriginal.prototype.getPreferenceCenterConfig = function (preferenceCenterId) { return cordova(this, "getPreferenceCenterConfig", { "successIndex": 1, "errorIndex": 2 }, arguments); };
135
+ UrbanAirShipOriginal.prototype.openPreferenceCenter = function (prenferenceCenterId) { return cordova(this, "openPreferenceCenter", { "successIndex": 1, "errorIndex": 2 }, arguments); };
136
+ UrbanAirShipOriginal.prototype.setCurrentLocale = function (locale) { return cordova(this, "setCurrentLocale", {}, arguments); };
137
+ UrbanAirShipOriginal.prototype.getCurrentLocale = function () { return cordova(this, "getCurrentLocale", {}, arguments); };
138
+ UrbanAirShipOriginal.prototype.clearLocale = function () { return cordova(this, "clearLocale", {}, arguments); };
139
+ UrbanAirShipOriginal.pluginName = "UrbanAirShip";
140
+ UrbanAirShipOriginal.plugin = "urbanairship-cordova";
141
+ UrbanAirShipOriginal.pluginRef = "window.UAirship";
142
+ UrbanAirShipOriginal.repo = "https://www.npmjs.com/package/urbanairship-cordova";
143
+ UrbanAirShipOriginal.install = "ionic cordova plugin add urbanairship-cordova";
144
+ UrbanAirShipOriginal.platforms = ["Android", "iOS"];
145
+ return UrbanAirShipOriginal;
1419
146
  }(AwesomeCordovaNativePlugin));
147
+ var UrbanAirShip = new UrbanAirShipOriginal();
1420
148
  export { UrbanAirShip };
1421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvdXJiYW5haXJzaGlwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sdUNBQStDLE1BQU0sK0JBQStCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQXdDbEM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsdURBQVEsQ0FBQTtJQUNSLHlEQUFTLENBQUE7SUFDVCx5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsNkRBQVEsQ0FBQTtJQUNSLCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCOztJQStCaUMsZ0NBQTBCOzs7O0lBQzFEOzs7OztPQUtHO0lBTUgsaUNBQVUsR0FBVjtRQUNFLE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQU1ILHFDQUFjLEdBQWQ7UUFDRSxPQUFPO0lBQ1QsQ0FBQztJQUVEOzs7T0FHRztJQU1ILHFDQUFjLEdBQWQ7UUFDRSxPQUFPO0lBQ1QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQU1ILGtDQUFXLEdBQVg7UUFDRSxPQUFPO0lBQ1QsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBTUgscUNBQWMsR0FBZDtRQUNFLE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQU1ILDJDQUFvQixHQUFwQjtRQUNFLE9B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QztJQWNEO1FBSkMsT0FBTyxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7WUFDZixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUM7Ozs2REFDa0MsT0FBTyxvQkFBUCxPQUFPO3NEQUUxQztJQXlCRDtRQUpDLE9BQU8sQ0FBQztZQUNQLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDOzs7NkRBQ29CLE9BQU8sb0JBQVAsT0FBTzswREFFNUI7SUFjRDtRQUpDLE9BQU8sQ0FBQztZQUNQLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDOzs7NkRBQ29DLE9BQU8sb0JBQVAsT0FBTzt3REFFNUM7SUFjRDtRQUpDLE9BQU8sQ0FBQztZQUNQLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDOzs7NkRBQ3FELE9BQU8sb0JBQVAsT0FBTztpRUFFN0Q7SUFjRDtRQUpDLE9BQU8sQ0FBQztZQUNQLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDOzs7NkRBQ2lELE9BQU8sb0JBQVAsT0FBTzs0REFFekQ7SUFXRDtRQURDLE9BQU8sRUFBRTs7OzZEQUN3QixPQUFPLG9CQUFQLE9BQU87d0RBRXhDO0lBV0Q7UUFEQyxPQUFPLEVBQUU7Ozs2REFDVSxPQUFPLG9CQUFQLE9BQU87d0RBRTFCO0lBVUQ7UUFEQyxPQUFPLEVBQUU7Ozs2REFDSyxPQUFPLG9CQUFQLE9BQU87bURBRXJCO3VCQTNuQ0g7RUErRmtDLDBCQUEwQjtTQUEvQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luLCBDb3Jkb3ZhLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFVBaXJzaGlwIFRhZyBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdHcm91cEVkaXRvciB7XG4gIGFkZFRhZ3ModGFnR3JvdXA6IHN0cmluZywgdGFnczogc3RyaW5nW10pOiBUYWdHcm91cEVkaXRvcjtcbiAgcmVtb3ZlVGFncyh0YWdHcm91cDogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSk6IFRhZ0dyb3VwRWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogVGFnR3JvdXBFZGl0b3I7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBBdHRyaWJ1dGVzIEVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZXNFZGl0b3Ige1xuICBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUpOiBBdHRyaWJ1dGVzRWRpdG9yO1xuICByZW1vdmVBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQXR0cmlidXRlc0VkaXRvcjtcbiAgYXBwbHkoc3VjY2VzczogKCkgPT4gdm9pZCwgZmFpbHVyZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCk6IEF0dHJpYnV0ZXNFZGl0b3I7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdCBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvciB7XG4gIHN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZyk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICB1bnN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZyk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG59XG5cbmV4cG9ydCB0eXBlIENvbnRhY3RTdWJzY3JpcHRpb25TY29wZSA9ICdhcHAnIHwgJ2VtYWlsJyB8ICdwdXNoJyB8ICdzbXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgVUFpcnNoaXAgQ29udGFjdFN1YnNjcmlwdGlvbkxpc3QgRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICBzdWJzY3JpYmUoc3Vic2NyaXB0aW9uTGlzdElEOiBzdHJpbmcsIGNvbnRhY3RTY29wZTogQ29udGFjdFN1YnNjcmlwdGlvblNjb3BlKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG4gIHVuc3Vic2NyaWJlKHN1YnNjcmlwdGlvbkxpc3RJRDogc3RyaW5nLCBjb250YWN0U2NvcGU6IENvbnRhY3RTdWJzY3JpcHRpb25TY29wZSk6IENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG59XG5cbi8qKlxuICogRW51bSBmb3Igbm90aWZpY2F0aW9uIHR5cGVzLlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25UeXBlIHtcbiAgbm9uZSA9IDAsXG4gIGJhZGdlID0gMSxcbiAgc291bmQgPSAyLFxuICBhbGVydCA9IDQsXG59XG5cbi8qKlxuICogRW51bSBmb3IgcHJlc2VudGF0aW9uIG9wdGlvbnMuXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBlbnVtIFByZXNlbnRhdGlvbk9wdGlvbnMge1xuICBub25lID0gMCxcbiAgYmFkZ2UgPSAxLFxuICBzb3VuZCA9IDIsXG4gIGFsZXJ0ID0gNCxcbn1cblxuLyoqXG4gKiBAbmFtZSBVcmJhbkFpclNoaXBcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBwbHVnaW4gZG9lcyBzb21ldGhpbmdcbiAqIEB1c2FnZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVXJiYW5BaXJTaGlwIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3VyYmFuYWlyc2hpcC9uZ3gnO1xuICpcbiAqXG4gKiBjb25zdHJ1Y3Rvcihwcml2YXRlIHVyYmFuQWlyU2hpcDogVXJiYW5BaXJTaGlwKSB7IH1cbiAqXG4gKiAuLi5cbiAqXG4gKlxuICogdGhpcy51cmJhbkFpclNoaXAudGFrZU9mZihjb25maWcpXG4gKiAgIC50aGVuKChyZXM6IGFueSkgPT4gY29uc29sZS5sb2cocmVzKSlcbiAqICAgLmNhdGNoKChlcnJvcjogYW55KSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSk7XG4gKlxuICogYGBgXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnVXJiYW5BaXJTaGlwJyxcbiAgcGx1Z2luOiAndXJiYW5haXJzaGlwLWNvcmRvdmEnLFxuICBwbHVnaW5SZWY6ICd3aW5kb3cuVUFpcnNoaXAnLFxuICByZXBvOiAnaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvdXJiYW5haXJzaGlwLWNvcmRvdmEnLFxuICBpbnN0YWxsOiAnaW9uaWMgY29yZG92YSBwbHVnaW4gYWRkIHVyYmFuYWlyc2hpcC1jb3Jkb3ZhJyxcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVyYmFuQWlyU2hpcCBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gYSBuZXcgZGVlcCBsaW5rIGlzIHJlY2VpdmVkLlxuICAgKiBAZXZlbnQgZGVlcF9saW5rXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVlcExpbmtdIFRoZSBkZWVwIGxpbmsuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLmRlZXBfbGluaycsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25EZWVwTGluaygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIGEgY2hhbm5lbCByZWdpc3RyYXRpb24gb2NjdXJzLlxuICAgKiBAZXZlbnQgcmVnaXN0cmF0aW9uXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhbm5lbElEXSBUaGUgY2hhbm5lbCBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpc3RyYXRpb25Ub2tlbl0gVGhlIGRldmljZVRva2VuIG9uIGlPUywgYW5kIHRoZSBGQ00vQURNIHRva2VuIG9uIEFuZHJvaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JdIEVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLnJlZ2lzdHJhdGlvbicsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25SZWdpc3RyYXRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiB0aGUgaW5ib3ggaXMgdXBkYXRlZC5cbiAgICogQGV2ZW50IGluYm94X3VwZGF0ZWRcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAuaW5ib3hfdXBkYXRlZCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25JbmJveFVwZGF0ZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiB0aGUgaW5ib3ggbmVlZHMgdG8gYmUgZGlzcGxheWVkLiBUaGlzIGV2ZW50IGlzIG9ubHkgZW1pdHRlZCBpZiBhdXRvXG4gICAqIGxhdW5jaCBtZXNzYWdlIGNlbnRlciBpcyBkaXNhYmxlZC5cbiAgICogQGV2ZW50IHNob3dfaW5ib3hcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlSWRdIFRoZSBvcHRpb25hbCBtZXNzYWdlIElELlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5zaG93X2luYm94JyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvblNob3dJbmJveCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIGEgcHVzaCBpcyByZWNlaXZlZC5cbiAgICogQGV2ZW50IHB1c2hcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIHB1c2ggYWxlcnQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIFRoZSBwdXNoIHRpdGxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VidGl0bGUgVGhlIHB1c2ggc3VidGl0bGUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYXMgQW55IHB1c2ggZXh0cmFzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXBzIFRoZSByYXcgYXBzIGRpY3Rpb25hcnkgKGlPUyBvbmx5KVxuICAgKiBAcGFyYW0ge251bWJlcn0gW25vdGlmaWNhdGlvbl9pZF0gVGhlIEFuZHJvaWQgbm90aWZpY2F0aW9uIElELiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5vdGlmaWNhdGlvbklkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vdGlmaWNhdGlvbklkXSBUaGUgbm90aWZpY2F0aW9uIElELlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5wdXNoJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvblB1c2hSZWNlaXZlZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIG5vdGlmaWNhdGlvbiBvcGVuZWQuXG4gICAqIEBldmVudCBub3RpZmljYXRpb25fb3BlbmVkXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBwdXNoIGFsZXJ0IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYXMgQW55IHB1c2ggZXh0cmFzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW25vdGlmaWNhdGlvbl9pZF0gVGhlIEFuZHJvaWQgbm90aWZpY2F0aW9uIElELiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5vdGlmaWNhdGlvbklkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vdGlmaWNhdGlvbklkXSBUaGUgbm90aWZpY2F0aW9uIElELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FjdGlvbklEXSBUaGUgSUQgb2YgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb24gYnV0dG9uIGlmIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBpc0ZvcmVncm91bmQgV2lsbCBhbHdheXMgYmUgdHJ1ZSBpZiB0aGUgdXNlciB0YXBzIHRoZSBtYWluIG5vdGlmaWNhdGlvbi4gT3RoZXJ3aXNlIGl0cyBkZWZpbmVkIGJ5IHRoZSBub3RpZmljYXRpb24gYWN0aW9uIGJ1dHRvbi5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAubm90aWZpY2F0aW9uX29wZW5lZCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25Ob3RpZmljYXRpb25PcGVuZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiB0aGUgdXNlciBub3RpZmljYXRpb24gb3B0LWluIHN0YXR1cyBjaGFuZ2VzLlxuICAgKiBAZXZlbnQgbm90aWZpY2F0aW9uX29wdF9pbl9zdGF0dXNcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRJbiBJZiB0aGUgdXNlciBpcyBvcHRlZCBpbiBvciBub3QgdG8gdXNlciBub3RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2F1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5nc10gaU9TIG9ubHkuIEEgbWFwIG9mIGF1dGhvcml6ZWQgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLmFsZXJ0IElmIGFsZXJ0cyBhcmUgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3Muc291bmQgSWYgc291bmRzIGFyZSBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5iYWRnZSBJZiBiYWRnZXMgYXJlIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLmNhclBsYXkgSWYgY2FyIHBsYXkgaXMgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3MubG9ja1NjcmVlbiBJZiB0aGUgbG9jayBzY3JlZW4gaXMgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3Mubm90aWZpY2F0aW9uQ2VudGVyIElmIHRoZSBub3RpZmljYXRpb24gY2VudGVyIGlzIGF1dGhvcml6ZWQuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLm5vdGlmaWNhdGlvbl9vcHRfaW5fc3RhdHVzJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvbk5vdGlmaWNhdGlvbk9wdEluU3RhdHVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWF0dGFjaGVzIGRvY3VtZW50IGV2ZW50IGxpc3RlbmVycyBpbiB0aGlzIHdlYnZpZXdcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICByZWF0dGFjaCgpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSW5pdGFpbGl6ZXMgVXJiYW4gQWlyc2hpcC5cbiAgICpcbiAgICogVGhlIHBsdWdpbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCB0YWtlT2ZmIGR1cmluZyB0aGUgbmV4dCBhcHAgaW5pdCBpblxuICAgKiBvcmRlciB0byBwcm9wZXJseSBoYW5kbGUgaW5jb21pbmcgcHVzaC4gSWYgdGFrZU9mZiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICogaW4gYSBzZXNzaW9uLCBvciBpZiB0aGUgY29uZmlnIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBwcmV2aW91cyBzZXNzc2lvbiwgdGhlXG4gICAqIG5ldyBjb25maWcgd2lsbCBub3QgYmUgdXNlZCB1bnRpbCB0aGUgbmV4dCBhcHAgc3RhcnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgY29uZmlnIFRoZSBVcmJhbiBBaXJzaGlwIGNvbmZpZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcuc2l0ZSBTZXRzIHRoZSBjbG91ZCBzaXRlLCBtdXN0IGJlIGVpdGhlciBFVSBvciBVUy5cbiAgICogQHBhcmFtIHtvYmplY3R9ICBjb25maWcuZGV2ZWxvcG1lbnQgVGhlIFVyYmFuIEFpcnNoaXAgZGV2ZWxvcG1lbnQgY29uZmlnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5kZXZlbG9wbWVudC5hcHBLZXkgVGhlIGRldmVsb3BtZW50IGFwcEtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcuZGV2ZWxvcG1lbnQuYXBwU2VjcmV0IFRoZSBkZXZlbG9wbWVudCBhcHBTZWNyZXQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgY29uZmlnLnByb2R1Y3Rpb24gVGhlIFVyYmFuIEFpcnNoaXAgcHJvZHVjdGlvbiBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLnByb2R1Y3Rpb24uYXBwS2V5IFRoZSBwcm9kdWN0aW9uIGFwcEtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcucHJvZHVjdGlvbi5hcHBTZWNyZXQgVGhlIHByb2R1Y3Rpb24gYXBwU2VjcmV0LlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICB0YWtlT2ZmKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgQW5kcm9pZCBub3RpZmljYXRpb24gY29uZmlnLiBWYWx1ZXMgbm90IHNldCB3aWxsIGZhbGxiYWNrIHRvIGFueSB2YWx1ZXMgc2V0IGluIHRoZSBjb25maWcueG1sLlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZyBUaGUgbm90aWZpY2F0aW9uIGNvbmZpZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbY29uZmlnLmljb25dIFRoZSBuYW1lIG9mIHRoZSBkcmF3YWJsZSByZXNvdXJjZSB0byB1c2UgYXMgdGhlIG5vdGlmaWNhdGlvbiBpY29uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIFtjb25maWcubGFyZ2VJY29uXSBUaGUgbmFtZSBvZiB0aGUgZHJhd2FibGUgcmVzb3VyY2UgdG8gdXNlIGFzIHRoZSBub3RpZmljYXRpb24gbGFyZ2UgaWNvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbY29uZmlnLmFjY2VudENvbG9yXSBUaGUgbm90aWZpY2F0aW9uIGFjY2VudCBjb2xvci4gRm9ybWF0IGlzICNBQVJSR0dCQi5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QW5kcm9pZE5vdGlmaWNhdGlvbkNvbmZpZyhjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiB0aGUgbWVzc2FnZSBjZW50ZXIgaXMgbGF1bmNoZWQgZnJvbSBhIHB1c2hcbiAgICogbm90aWZpY2F0aW9uLiBJZiBzZXQgdG8gZmFsc2UgdGhlIG1lc3NhZ2UgY2VudGVyIG11c3QgYmUgbWFudWFsbHkgbGF1bmNoZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgbGF1bmNoIHRoZSBkZWZhdWx0IG1lc3NhZ2UgY2VudGVyLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEF1dG9MYXVuY2hEZWZhdWx0TWVzc2FnZUNlbnRlcihlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB1c2VyIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBub3RpZmljYXRpb25zLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFVzZXJOb3RpZmljYXRpb25zRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHVzZXIgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHVzZXIgbm90aWZpY2F0aW9ucyBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzVXNlck5vdGlmaWNhdGlvbnNFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhcHAgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZCBvciBub3QuIEl0cyBwb3NzaWJsZSB0byBoYXZlIGB1c2VyTm90aWZpY2F0aW9uc0VuYWJsZWRgXG4gICAqIGJ1dCBhcHAgbm90aWZpY2F0aW9ucyBiZWluZyBkaXNhYmxlZCBpZiB0aGUgdXNlciBvcHRlZCBvdXQgb2Ygbm90aWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgYXBwIG5vdGlmaWNhdGlvbnMgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0FwcE5vdGlmaWNhdGlvbnNFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNoYW5uZWwgSUQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSUQpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLklEIFRoZSBjaGFubmVsIElEIHN0cmluZ1xuICAgKiBAcGFyYW0ge2ZhaWx1cmVDYWxsYmFja30gW2ZhaWx1cmVdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldENoYW5uZWxJRCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IG5vdGlmaWNhdGlvbiB0aGF0IGxhdW5jaGVkIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciB0cnVlIHRvIGNsZWFyIHRoZSBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocHVzaCl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN1Y2Nlc3MucHVzaCBUaGUgcHVzaCBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcHVzaCBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLnB1c2gubWVzc2FnZSBUaGUgcHVzaCBhbGVydCBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5wdXNoLmV4dHJhcyBBbnkgcHVzaCBleHRyYXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc3VjY2Vzcy5wdXNoLm5vdGlmaWNhdGlvbl9pZF0gVGhlIEFuZHJvaWQgbm90aWZpY2F0aW9uIElELlxuICAgKiBAcGFyYW0ge2ZhaWx1cmVDYWxsYmFja30gW2ZhaWx1cmVdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldExhdW5jaE5vdGlmaWNhdGlvbihjbGVhcjogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3QgcmVjZWl2ZWQgZGVlcCBsaW5rLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNsZWFyIHRydWUgdG8gY2xlYXIgdGhlIGRlZXAgbGluay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihwdXNoKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5kZWVwTGluayBUaGUgZGVlcCBsaW5rLlxuICAgKiBAcGFyYW0ge2ZhaWx1cmVDYWxsYmFja30gW2ZhaWx1cmVdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldERlZXBMaW5rKGNsZWFyOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFncyBhcyBhbiBhcnJheS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbih0YWdzKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWNjZXNzLnRhZ3MgVGhlIHRhZ3MgYXMgYW4gYXJyYXkuXG4gICAqIEBwYXJhbSB7ZmFpbHVyZUNhbGxiYWNrfSBbZmFpbHVyZV0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZmFpbHVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0VGFncygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0YWdzLlxuICAgKiBAcGFyYW0ge0FycmF5fSB0YWdzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0VGFncyh0YWdzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFsaWFzLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIHNpbmNlIDYuNy4wIC0gdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gLSBwbGVhc2UgdXNlIGdldE5hbWVkVXNlclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGN1cnJlbnRBbGlhcyl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MuY3VycmVudEFsaWFzIFRoZSBhbGlhcyBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEFsaWFzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFsaWFzLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIHNpbmNlIDYuNy4wICAtIHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luIC0gcGxlYXNlIHVzZSBzZXROYW1lZFVzZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzIHN0cmluZ1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEFsaWFzKGFsaWFzOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcXVpZXQgdGltZSBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgcXVpZXQgdGltZSBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzUXVpZXRUaW1lRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHF1aWV0IHRpbWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBxdWlldCB0aW1lLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFF1aWV0VGltZUVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBpbiBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGluUXVpZXRUaW1lKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuaW5RdWlldFRpbWUgRmxhZyBpbmRpY2F0aW5nIGlmIHF1aWV0IHRpbWUgaXMgY3VycmVudGx5IGluIGVmZmVjdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzSW5RdWlldFRpbWUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcXVpZXQgdGltZSBhcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nOlxuICAgKiBcInN0YXJ0SG91clwiOiBOdW1iZXIsXG4gICAqIFwic3RhcnRNaW51dGVcIjogTnVtYmVyLFxuICAgKiBcImVuZEhvdXJcIjogTnVtYmVyLFxuICAgKiBcImVuZE1pbnV0ZVwiOiBOdW1iZXJcbiAgICogQHBhcmFtIHtmdW5jdGlvbihxdWlldFRpbWUpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWNjZXNzLnF1aWV0VGltZSBUaGUgcXVpZXRUaW1lIG9iamVjdCByZXByZXNlbnRzIGEgdGltZXNwYW4gZHVyaW5nXG4gICAqICAgICAgICB3aGljaCBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzaWxlbmNlZC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFF1aWV0VGltZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRIb3VyIGZvciBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRNaW51dGUgZm9yIHF1aWV0IHRpbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRIb3VyIGZvciBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTWludXRlIGZvciBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFF1aWV0VGltZShzdGFydEhvdXI6IG51bWJlciwgc3RhcnRNaW51dGU6IG51bWJlciwgZW5kSG91cjogbnVtYmVyLCBlbmRNaW51dGU6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYW5hbHl0aWNzLlxuICAgKlxuICAgKiBEaXNhYmxpbmcgYW5hbHl0aWNzIHdpbGwgZGVsZXRlIGFueSBsb2NhbGx5IHN0b3JlZCBldmVudHNcbiAgICogYW5kIHByZXZlbnQgYW55IGV2ZW50cyBmcm9tIHVwbG9hZGluZy4gRmVhdHVyZXMgdGhhdCBkZXBlbmQgb24gYW5hbHl0aWNzIGJlaW5nXG4gICAqIGVuYWJsZWQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGlmIGl0J3MgZGlzYWJsZWQgKHJlcG9ydHMsIHJlZ2lvbiB0cmlnZ2VycyxcbiAgICogbG9jYXRpb24gc2VnbWVudGF0aW9uLCBwdXNoIHRvIGxvY2FsIHRpbWUpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgYW5hbHl0aWNzLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEFuYWx5dGljc0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbmFseXRpY3MgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIGFuYWx5dGljcyBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzQW5hbHl0aWNzRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lZCB1c2VyIElELlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5hbWVkVXNlcil9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MubmFtZWRVc2VyIFRoZSBuYW1lZCB1c2VyIElEIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0TmFtZWRVc2VyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG5hbWVkIHVzZXIgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lZFVzZXIgaWRlbnRpZmllciBzdHJpbmcuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0TmFtZWRVc2VyKG5hbWVkVXNlcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbiBVcmJhbiBBaXJzaGlwIGFjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgYWN0aW9uIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0geyp9IGFjdGlvblZhbHVlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVzdWx0KX0gW3N1Y2Nlc3NdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWNjZXNzLnJlc3VsdCBUaGUgcmVzdWx0J3MgdmFsdWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBydW5BY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nLCBhY3Rpb25WYWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBuYW1lZCB1c2VyIHRhZyBncm91cHMuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdE5hbWVkVXNlclRhZ0dyb3VwcygpOiBUYWdHcm91cEVkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY2hhbm5lbCB0YWcgZ3JvdXBzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDaGFubmVsVGFnR3JvdXBzKCk6IFRhZ0dyb3VwRWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBjaGFubmVsIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdENoYW5uZWxBdHRyaWJ1dGVzKCk6IEF0dHJpYnV0ZXNFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIG5hbWVkIHVzZXIgYXR0cmlidXRlcy5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0TmFtZWRVc2VyQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVzRWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBjaGFubmVsIHN1YnNjcmlwdGlvbiBsaXN0cy5cbiAgICogQHJldHVybnMge0NoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yfSBBIHN1YnNjcmlwdGlvbiBsaXN0IGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHNpbmNlIDEzLjMuMFxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDaGFubmVsU3Vic2NyaXB0aW9uTGlzdHMoKTogQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIGNvbnRhY3Qgc3Vic2NyaXB0aW9uIGxpc3RzLlxuICAgKiBAcmV0dXJucyB7Q29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3J9IEEgc3Vic2NyaXB0aW9uIGxpc3QgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAc2luY2UgMTMuMy4wXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdENvbnRhY3RTdWJzY3JpcHRpb25MaXN0cygpOiBDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2V0IG9mIHN1YnNjcmlwdGlvbiBsaXN0cyBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCxcbiAgICogb3B0aW9uYWxseSBhcHBseWluZyBwZW5kaW5nIHN1YnNjcmlwdGlvbiBsaXN0IGNoYW5nZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSBuZXh0IGNoYW5uZWwgdXBkYXRlLlxuICAgKiBBbiBlbXB0eSBzZXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBjb250YWN0IGlzIG5vdCBzdWJzY3JpYmVkIHRvIGFueSBsaXN0cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAwLFxuICAgIGVycm9ySW5kZXg6IDEsXG4gIH0pXG4gIGdldENoYW5uZWxTdWJzY3JpcHRpb25MaXN0cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2V0IG9mIHN1YnNjcmlwdGlvbiBsaXN0cyBmb3IgdGhlIGN1cnJlbnQgY29udGFjdCxcbiAgICogb3B0aW9uYWxseSBhcHBseWluZyBwZW5kaW5nIHN1YnNjcmlwdGlvbiBsaXN0IGNoYW5nZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSBuZXh0IGNvbnRhY3QgdXBkYXRlLlxuICAgKiBBbiBlbXB0eSBzZXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBjb250YWN0IGlzIG5vdCBzdWJzY3JpYmVkIHRvIGFueSBsaXN0cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAwLFxuICAgIGVycm9ySW5kZXg6IDEsXG4gIH0pXG4gIGdldENvbnRhY3RTdWJzY3JpcHRpb25MaXN0cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYW4gYXNzb2NpYXRlZCBpZGVudGlmaWVyIGZvciB0aGUgQ29ubmVjdCBkYXRhIHN0cmVhbS5cbiAgICogQHBhcmFtIGtleSBDdXN0b20ga2V5IGZvciBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgaWRlbnRpZmllciB2YWx1ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBc3NvY2lhdGVkSWRlbnRpZmllcihrZXk6IHN0cmluZywgaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9jYXRpb25cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBVcmJhbiBBaXJzaGlwIGxvY2F0aW9uIHNlcnZpY2VzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgbG9jYXRpb24sIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0TG9jYXRpb25FbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbG9jYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIGxvY2F0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDguMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0xvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGJhY2tncm91bmQgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBiYWNrZ3JvdW5kIGxvY2F0aW9uLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiA4LjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QmFja2dyb3VuZExvY2F0aW9uRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGJhY2tncm91bmQgbG9jYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIGJhY2tncm91bmQgbG9jYXRpb24gdXBkYXRlcyBhcmUgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gOC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzQmFja2dyb3VuZExvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgbWVzc2FnZSBjZW50ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzcGxheU1lc3NhZ2VDZW50ZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyB0aGUgbWVzc2FnZSBjZW50ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzbWlzc01lc3NhZ2VDZW50ZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyB0aGUgaW5ib3ggbWVzc2FnZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkaXNtaXNzSW5ib3hNZXNzYWdlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIGluYm94IG1lc3NhZ2UgaW4gdGhlIG92ZXJsYXkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDEwLjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzbWlzc092ZXJsYXlJbmJveE1lc3NhZ2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYXJyYXkgb2YgaW5ib3ggbWVzc2FnZXMuIEVhY2ggbWVzc2FnZSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiBcImlkXCI6IHN0cmluZyAtIFRoZSBtZXNzYWdlcyBJRC4gTmVlZGVkIHRvIGRpc3BsYXksIG1hcmsgYXMgcmVhZCwgb3IgZGVsZXRlIHRoZSBtZXNzYWdlLlxuICAgKiBcInRpdGxlXCI6IHN0cmluZyAtIFRoZSBtZXNzYWdlIHRpdGxlLlxuICAgKiBcInNlbnREYXRlXCI6IG51bWJlciAtIFRoZSBtZXNzYWdlIHNlbnQgZGF0ZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFwibGlzdEljb25VcmxcIjogc3RyaW5nLCBvcHRpb25hbCAtIFRoZSBpY29uIHVybCBmb3IgdGhlIG1lc3NhZ2UuXG4gICAqIFwiaXNSZWFkXCI6IGJvb2xlYW4gLSBUaGUgdW5yZWFkL3JlYWQgc3RhdHVzIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBcImV4dHJhc1wiOiBvYmplY3QgLSBTdHJpbmcgdG8gU3RyaW5nIG1hcCBvZiBhbnkgbWVzc2FnZSBleHRyYXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZXMpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1Y2Nlc3MubWVzc2FnZXMgVGhlIGFycmF5IG9mIGluYm94IG1lc3NhZ2VzLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0SW5ib3hNZXNzYWdlcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyBhbiBpbmJveCBtZXNzYWdlIHJlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIG1hcmsgYXMgcmVhZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBtYXJrSW5ib3hNZXNzYWdlUmVhZChtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaW5ib3ggbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VJZCBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRlbGV0ZUluYm94TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBpbmJveCBtZXNzYWdlIHVzaW5nIGEgZnVsbCBzY3JlZW4gdmlldy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VJZCBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkaXNwbGF5SW5ib3hNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSBpbmJveCB0byByZWZyZXNoLiBUaGlzIGlzIG5vcm1hbGx5IG5vdCBuZWVkZWQgYXMgdGhlIGluYm94XG4gICAqIHdpbGwgYXV0b21hdGljYWxseSByZWZyZXNoIG9uIGZvcmVncm91bmQgb3Igd2hlbiBhIHB1c2ggYXJyaXZlcyB0aGF0c1xuICAgKiBhc3NvY2lhdGVkIHdpdGggYSBtZXNzYWdlLCBidXQgaXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHByb3ZpZGluZyBhIHJlZnJlc2hcbiAgICogYnV0dG9uIGZvciB0aGUgbWVzc2FnZSBsaXN0aW5nLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlZnJlc2hJbmJveCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgaW5ib3ggbWVzc2FnZSB1c2luZyBhbiBvdmVybGF5IGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDEwLjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgb3ZlcmxheUluYm94TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhIG5vdGlmaWNhdGlvbiBieSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpZmllciBUaGUgbm90aWZpY2F0aW9uIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgY2xlYXJOb3RpZmljYXRpb24oaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBub3RpZmljYXRpb25zIHBvc3RlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgY2xlYXJOb3RpZmljYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3VycmVudGx5IGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBOb3RlOiBPbiBBbmRyb2lkIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBBbmRyb2lkIE0gb3IgaGlnaGVyLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2VzKX0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRBY3RpdmVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaU9TIG9ubHlcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhdXRvIGJhZGdlLiBEZWZhdWx0cyB0byBgTk9gLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgYXV0byBiYWRnZSwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBdXRvYmFkZ2VFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiYWRnZSBudW1iZXIuXG4gICAqIEBwYXJhbSBjb3VudCBudW1iZXIgc3BlY2lmaWVkIGJhZGdlIHRvIHNldC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRCYWRnZU51bWJlcihjb3VudDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBiYWRnZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oYmFkZ2VOdW1iZXIpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7aW50fSBzdWNjZXNzLmJhZGdlTnVtYmVyIFRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGJhZGdlIG51bWJlci5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEJhZGdlTnVtYmVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgYmFkZ2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcmVzZXRCYWRnZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpT1Mgbm90aWZpY2F0aW9uIHR5cGVzLiBTcGVjaWZ5IHRoZSBjb21iaW5hdGlvbiBvZlxuICAgKiBiYWRnZXMsIHNvdW5kIGFuZCBhbGVydHMgdGhhdCBhcmUgZGVzaXJlZC5cbiAgICogQHBhcmFtIHR5cGVzIHNwZWNpZmllZCBub3RpZmljYXRpb24gdHlwZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0Tm90aWZpY2F0aW9uVHlwZXModHlwZXM6IE5vdGlmaWNhdGlvblR5cGUpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpT1MgcHJlc2VudGF0aW9uIG9wdGlvbnMuIFNwZWNpZnkgdGhlIGNvbWJpbmF0aW9uIG9mXG4gICAqIGJhZGdlcywgc291bmQgYW5kIGFsZXJ0cyB0aGF0IGFyZSBkZXNpcmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0eXBlcyBzcGVjaWZpZWQgcHJlc2VudGF0aW9uIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0UHJlc2VudGF0aW9uT3B0aW9ucyhvcHRpb25zOiBQcmVzZW50YXRpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbmRyb2lkIG9ubHlcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG5vdGlmaWNhdGlvbiBzb3VuZCBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgc291bmQgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1NvdW5kRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIG5vdGlmaWNhdGlvbiBzb3VuZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIHNvdW5kLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFNvdW5kRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG5vdGlmaWNhdGlvbiB2aWJyYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHZpYnJhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzVmlicmF0ZUVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBub3RpZmljYXRpb24gdmlicmF0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgdmlicmF0aW9uLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFZpYnJhdGVFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY3VzdG9tIGV2ZW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGN1c3RvbSBldmVudCBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5uYW1lIFRoZSBldmVudCdzIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZXZlbnQudmFsdWVdIFRoZSBldmVudCdzIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50LnRyYW5zYWN0aW9uSWRdIFRoZSBldmVudCdzIHRyYW5zYWN0aW9uIElELlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2V2ZW50LnByb3BlcnRpZXNdIFRoZSBldmVudCdzIHByb3BlcnRpZXMuIE9ubHkgbnVtYmVycywgYm9vbGVhbnMsIHN0cmluZ3MsIGFuZCBhcnJheSBvZiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgYWRkQ3VzdG9tRXZlbnQoZXZlbnQ6IG9iamVjdCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBzY3JlZW4gdHJhY2tpbmcgZm9yIGEgc3BlY2lmaWMgYXBwIHNjcmVlbiwgbXVzdCBiZSBjYWxsZWQgb25jZSBwZXIgdHJhY2tlZCBzY3JlZW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW4gVGhlIHNjcmVlbidzIHN0cmluZyBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMS4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgdHJhY2tTY3JlZW4oc2NyZWVuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGZlYXR1cmVzLCBhZGRpbmcgdGhlbSB0byB0aGUgc2V0IG9mIGN1cnJlbnRseSBlbmFibGVkIGZlYXR1cmVzLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBlbmFibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBlbmFibGVGZWF0dXJlKGZlYXR1cmVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGZlYXR1cmVzLCByZW1vdmluZyB0aGVtIGZyb20gdGhlIHNldCBvZiBjdXJyZW50bHkgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGRpc2FibGVGZWF0dXJlKGZlYXR1cmVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlZCBmZWF0dXJlcywgcmVwbGFjaW5nIGFueSBjdXJyZW50bHkgZW5hYmxlZCBmZWF0dXJlcyB3aXRoIHRoZSBnaXZlbiBzZXQuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIHRvIHNldCBhcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIHNldEVuYWJsZWRGZWF0dXJlcyhmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGVuYWJsZWQgZmVhdHVyZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMCxcbiAgICBlcnJvckluZGV4OiAxLFxuICB9KVxuICBnZXRFbmFibGVkRmVhdHVyZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFsbCBvZiB0aGUgZ2l2ZW4gZmVhdHVyZXMgYXJlIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgaXNGZWF0dXJlRW5hYmxlZChmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBQcmVmZXJlbmNlIENlbnRlciB3aXRoIHRoZSBnaXZlbiBJRCB0cm91Z2ggYSBjYWxsYmFjayBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmZXJlbmNlQ2VudGVySWQgVGhlIHByZWZlcmVuY2UgY2VudGVyIElELlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgZ2V0UHJlZmVyZW5jZUNlbnRlckNvbmZpZyhwcmVmZXJlbmNlQ2VudGVySWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBQcmVmZXJlbmNlIENlbnRlciB3aXRoIHRoZSBnaXZlbiBwcmVmZXJlbmNlQ2VudGVySWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVuZmVyZW5jZUNlbnRlcklkIFRoZSBwcmVmZXJlbmNlIGNlbnRlciBJRC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIG9wZW5QcmVmZXJlbmNlQ2VudGVyKHByZW5mZXJlbmNlQ2VudGVySWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgbG9jYWxlIHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgbGFuZ3VhZ2UgYW5kIG9wdGlvbmFsIGNvdW50cnkgY29kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTQuMy4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEN1cnJlbnRMb2NhbGUobG9jYWxlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2V0IGxvY2FsZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihsb2NhbGUpfSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MubG9jYWxlIFRoZSBsb2NhbGUgYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTQuMy4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEN1cnJlbnRMb2NhbGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjdXJyZW50IGxvY2FsZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTQuMy4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNsZWFyTG9jYWxlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG59XG4iXX0=
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvdXJiYW5haXJzaGlwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sdUNBQStDLE1BQU0sK0JBQStCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQXdDbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHVEQUFRLENBQUE7SUFDUix5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtJQUNULHlEQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUszQjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFOLElBQVksbUJBS1g7QUFMRCxXQUFZLG1CQUFtQjtJQUM3Qiw2REFBUSxDQUFBO0lBQ1IsK0RBQVMsQ0FBQTtJQUNULCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUxXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFLOUI7O0lBK0JpQyxnQ0FBMEI7Ozs7SUFhMUQsaUNBQVU7SUFrQlYscUNBQWM7SUFjZCxxQ0FBYztJQWlCZCxrQ0FBVztJQXNCWCxxQ0FBYztJQXFCZCwyQ0FBb0I7SUF1QnBCLGdEQUF5QjtJQVV6QiwrQkFBUTtJQXNCUiw4QkFBTyxhQUFDLE1BQVc7SUFhbkIsbURBQTRCLGFBQUMsTUFBVztJQWN4Qyx3REFBaUMsYUFBQyxPQUFnQjtJQWFsRCxrREFBMkIsYUFBQyxPQUFnQjtJQWE1QyxpREFBMEI7SUFjMUIsZ0RBQXlCO0lBYXpCLG1DQUFZO0lBaUJaLDRDQUFxQixhQUFDLEtBQWM7SUFjcEMsa0NBQVcsYUFBQyxLQUFjO0lBYTFCLDhCQUFPO0lBYVAsOEJBQU8sYUFBQyxJQUFjO0lBY3RCLCtCQUFRO0lBY1IsK0JBQVEsYUFBQyxLQUFhO0lBYXRCLHlDQUFrQjtJQWFsQiwwQ0FBbUIsYUFBQyxPQUFnQjtJQWFwQyxvQ0FBYTtJQWtCYixtQ0FBWTtJQWdCWixtQ0FBWSxhQUFDLFNBQWlCLEVBQUUsV0FBbUIsRUFBRSxPQUFlLEVBQUUsU0FBaUI7SUFrQnZGLDBDQUFtQixhQUFDLE9BQWdCO0lBYXBDLHlDQUFrQjtJQWFsQixtQ0FBWTtJQWFaLG1DQUFZLGFBQUMsU0FBaUI7SUFlOUIsZ0NBQVMsYUFBQyxVQUFrQixFQUFFLFdBQWdCO0lBUTlDLDZDQUFzQjtJQVF0QiwyQ0FBb0I7SUFRcEIsNENBQXFCO0lBUXJCLDhDQUF1QjtJQVd2QixtREFBNEI7SUFXNUIsbURBQTRCO0lBZ0I1QixrREFBMkI7SUFnQjNCLGtEQUEyQjtJQWMzQiw4Q0FBdUIsYUFBQyxHQUFXLEVBQUUsVUFBa0I7SUFldkQseUNBQWtCLGFBQUMsT0FBZ0I7SUFjbkMsd0NBQWlCO0lBY2pCLG1EQUE0QixhQUFDLE9BQWdCO0lBYzdDLGtEQUEyQjtJQVkzQiwyQ0FBb0I7SUFZcEIsMkNBQW9CO0lBWXBCLDBDQUFtQjtJQWFuQixpREFBMEI7SUFtQjFCLHVDQUFnQjtJQWFoQiwyQ0FBb0IsYUFBQyxTQUFpQjtJQWF0Qyx5Q0FBa0IsYUFBQyxTQUFpQjtJQWFwQywwQ0FBbUIsYUFBQyxTQUFpQjtJQWVyQyxtQ0FBWTtJQWNaLDBDQUFtQixhQUFDLFNBQWlCO0lBWXJDLHdDQUFpQixhQUFDLFVBQWtCO0lBWXBDLHlDQUFrQjtJQWFsQiw2Q0FBc0I7SUFldEIsMENBQW1CLGFBQUMsT0FBZ0I7SUFhcEMscUNBQWMsYUFBQyxLQUFhO0lBYTVCLHFDQUFjO0lBWWQsaUNBQVU7SUFjViwyQ0FBb0IsYUFBQyxLQUF1QjtJQWM1Qyw2Q0FBc0IsYUFBQyxPQUE0QjtJQWVuRCxxQ0FBYztJQWFkLHNDQUFlLGFBQUMsT0FBZ0I7SUFhaEMsdUNBQWdCO0lBYWhCLHdDQUFpQixhQUFDLE9BQWdCO0lBaUJsQyxxQ0FBYyxhQUFDLEtBQWE7SUFpQjVCLGtDQUFXLGFBQUMsTUFBYztJQWlCMUIsb0NBQWEsYUFBQyxRQUFrQjtJQWlCaEMscUNBQWMsYUFBQyxRQUFrQjtJQUlqQzs7Ozs7Ozs7T0FRRztJQUNILHlDQUFrQixHQUFsQixVQUFtQixRQUFrQjtRQUNuQyxPQUFPO0lBQ1QsQ0FBQztJQWNELHlDQUFrQjtJQWlCbEIsdUNBQWdCLGFBQUMsUUFBa0I7SUFpQm5DLGdEQUF5QixhQUFDLGtCQUEwQjtJQWlCcEQsMkNBQW9CLGFBQUMsbUJBQTJCO0lBY2hELHVDQUFnQixhQUFDLE1BQWM7SUFjL0IsdUNBQWdCO0lBYWhCLGtDQUFXOzs7Ozs7O3VCQXJzQ2I7RUFpR2tDLDBCQUEwQjtTQUEvQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luLCBDb3Jkb3ZhLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFVBaXJzaGlwIFRhZyBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdHcm91cEVkaXRvciB7XG4gIGFkZFRhZ3ModGFnR3JvdXA6IHN0cmluZywgdGFnczogc3RyaW5nW10pOiBUYWdHcm91cEVkaXRvcjtcbiAgcmVtb3ZlVGFncyh0YWdHcm91cDogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSk6IFRhZ0dyb3VwRWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogVGFnR3JvdXBFZGl0b3I7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBBdHRyaWJ1dGVzIEVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZXNFZGl0b3Ige1xuICBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUpOiBBdHRyaWJ1dGVzRWRpdG9yO1xuICByZW1vdmVBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQXR0cmlidXRlc0VkaXRvcjtcbiAgYXBwbHkoc3VjY2VzczogKCkgPT4gdm9pZCwgZmFpbHVyZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCk6IEF0dHJpYnV0ZXNFZGl0b3I7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdCBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvciB7XG4gIHN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZyk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICB1bnN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZyk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG59XG5cbmV4cG9ydCB0eXBlIENvbnRhY3RTdWJzY3JpcHRpb25TY29wZSA9ICdhcHAnIHwgJ2VtYWlsJyB8ICdwdXNoJyB8ICdzbXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgVUFpcnNoaXAgQ29udGFjdFN1YnNjcmlwdGlvbkxpc3QgRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICBzdWJzY3JpYmUoc3Vic2NyaXB0aW9uTGlzdElEOiBzdHJpbmcsIGNvbnRhY3RTY29wZTogQ29udGFjdFN1YnNjcmlwdGlvblNjb3BlKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG4gIHVuc3Vic2NyaWJlKHN1YnNjcmlwdGlvbkxpc3RJRDogc3RyaW5nLCBjb250YWN0U2NvcGU6IENvbnRhY3RTdWJzY3JpcHRpb25TY29wZSk6IENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG59XG5cbi8qKlxuICogRW51bSBmb3Igbm90aWZpY2F0aW9uIHR5cGVzLlxuICpcbiAqIEByZWFkb25seVxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uVHlwZSB7XG4gIG5vbmUgPSAwLFxuICBiYWRnZSA9IDEsXG4gIHNvdW5kID0gMixcbiAgYWxlcnQgPSA0LFxufVxuXG4vKipcbiAqIEVudW0gZm9yIHByZXNlbnRhdGlvbiBvcHRpb25zLlxuICpcbiAqIEByZWFkb25seVxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGVudW0gUHJlc2VudGF0aW9uT3B0aW9ucyB7XG4gIG5vbmUgPSAwLFxuICBiYWRnZSA9IDEsXG4gIHNvdW5kID0gMixcbiAgYWxlcnQgPSA0LFxufVxuXG4vKipcbiAqIEBuYW1lIFVyYmFuQWlyU2hpcFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBkb2VzIHNvbWV0aGluZ1xuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBVcmJhbkFpclNoaXAgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvdXJiYW5haXJzaGlwL25neCc7XG4gKlxuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgdXJiYW5BaXJTaGlwOiBVcmJhbkFpclNoaXApIHsgfVxuICpcbiAqIC4uLlxuICpcbiAqXG4gKiB0aGlzLnVyYmFuQWlyU2hpcC50YWtlT2ZmKGNvbmZpZylcbiAqICAgLnRoZW4oKHJlczogYW55KSA9PiBjb25zb2xlLmxvZyhyZXMpKVxuICogICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IGNvbnNvbGUuZXJyb3IoZXJyb3IpKTtcbiAqXG4gKiBgYGBcbiAqL1xuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6ICdVcmJhbkFpclNoaXAnLFxuICBwbHVnaW46ICd1cmJhbmFpcnNoaXAtY29yZG92YScsXG4gIHBsdWdpblJlZjogJ3dpbmRvdy5VQWlyc2hpcCcsXG4gIHJlcG86ICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS91cmJhbmFpcnNoaXAtY29yZG92YScsXG4gIGluc3RhbGw6ICdpb25pYyBjb3Jkb3ZhIHBsdWdpbiBhZGQgdXJiYW5haXJzaGlwLWNvcmRvdmEnLFxuICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXJiYW5BaXJTaGlwIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBhIG5ldyBkZWVwIGxpbmsgaXMgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBldmVudCBkZWVwX2xpbmtcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZWVwTGlua10gVGhlIGRlZXAgbGluay5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAuZGVlcF9saW5rJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvbkRlZXBMaW5rKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gYSBjaGFubmVsIHJlZ2lzdHJhdGlvbiBvY2N1cnMuXG4gICAqXG4gICAqIEBldmVudCByZWdpc3RyYXRpb25cbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFubmVsSURdIFRoZSBjaGFubmVsIElELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZ2lzdHJhdGlvblRva2VuXSBUaGUgZGV2aWNlVG9rZW4gb24gaU9TLCBhbmQgdGhlIEZDTS9BRE0gdG9rZW4gb24gQW5kcm9pZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlcnJvcl0gRXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAucmVnaXN0cmF0aW9uJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvblJlZ2lzdHJhdGlvbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIHRoZSBpbmJveCBpcyB1cGRhdGVkLlxuICAgKlxuICAgKiBAZXZlbnQgaW5ib3hfdXBkYXRlZFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5pbmJveF91cGRhdGVkJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvbkluYm94VXBkYXRlZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIHRoZSBpbmJveCBuZWVkcyB0byBiZSBkaXNwbGF5ZWQuIFRoaXMgZXZlbnQgaXMgb25seSBlbWl0dGVkIGlmIGF1dG9cbiAgICogbGF1bmNoIG1lc3NhZ2UgY2VudGVyIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBAZXZlbnQgc2hvd19pbmJveFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VJZF0gVGhlIG9wdGlvbmFsIG1lc3NhZ2UgSUQuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLnNob3dfaW5ib3gnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uU2hvd0luYm94KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gYSBwdXNoIGlzIHJlY2VpdmVkLlxuICAgKlxuICAgKiBAZXZlbnQgcHVzaFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgcHVzaCBhbGVydCBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGhlIHB1c2ggdGl0bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJ0aXRsZSBUaGUgcHVzaCBzdWJ0aXRsZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dHJhcyBBbnkgcHVzaCBleHRyYXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcHMgVGhlIHJhdyBhcHMgZGljdGlvbmFyeSAoaU9TIG9ubHkpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbm90aWZpY2F0aW9uX2lkXSBUaGUgQW5kcm9pZCBub3RpZmljYXRpb24gSUQuIERlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygbm90aWZpY2F0aW9uSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm90aWZpY2F0aW9uSWRdIFRoZSBub3RpZmljYXRpb24gSUQuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLnB1c2gnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uUHVzaFJlY2VpdmVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gbm90aWZpY2F0aW9uIG9wZW5lZC5cbiAgICpcbiAgICogQGV2ZW50IG5vdGlmaWNhdGlvbl9vcGVuZWRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIHB1c2ggYWxlcnQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dHJhcyBBbnkgcHVzaCBleHRyYXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbm90aWZpY2F0aW9uX2lkXSBUaGUgQW5kcm9pZCBub3RpZmljYXRpb24gSUQuIERlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygbm90aWZpY2F0aW9uSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm90aWZpY2F0aW9uSWRdIFRoZSBub3RpZmljYXRpb24gSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWN0aW9uSURdIFRoZSBJRCBvZiB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiBidXR0b24gaWYgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yZWdyb3VuZCBXaWxsIGFsd2F5cyBiZSB0cnVlIGlmIHRoZSB1c2VyIHRhcHMgdGhlIG1haW4gbm90aWZpY2F0aW9uLiBPdGhlcndpc2UgaXRzIGRlZmluZWQgYnkgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb24gYnV0dG9uLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5ub3RpZmljYXRpb25fb3BlbmVkJyxcbiAgICBlbGVtZW50OiAnZG9jdW1lbnQnLFxuICB9KVxuICBvbk5vdGlmaWNhdGlvbk9wZW5lZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIHRoZSB1c2VyIG5vdGlmaWNhdGlvbiBvcHQtaW4gc3RhdHVzIGNoYW5nZXMuXG4gICAqXG4gICAqIEBldmVudCBub3RpZmljYXRpb25fb3B0X2luX3N0YXR1c1xuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdEluIElmIHRoZSB1c2VyIGlzIG9wdGVkIGluIG9yIG5vdCB0byB1c2VyIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzXSBpT1Mgb25seS4gQSBtYXAgb2YgYXV0aG9yaXplZCBzZXR0aW5ncy5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3MuYWxlcnQgSWYgYWxlcnRzIGFyZSBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5zb3VuZCBJZiBzb3VuZHMgYXJlIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLmJhZGdlIElmIGJhZGdlcyBhcmUgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3MuY2FyUGxheSBJZiBjYXIgcGxheSBpcyBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5sb2NrU2NyZWVuIElmIHRoZSBsb2NrIHNjcmVlbiBpcyBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5ub3RpZmljYXRpb25DZW50ZXIgSWYgdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIgaXMgYXV0aG9yaXplZC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAubm90aWZpY2F0aW9uX29wdF9pbl9zdGF0dXMnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uTm90aWZpY2F0aW9uT3B0SW5TdGF0dXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmUtYXR0YWNoZXMgZG9jdW1lbnQgZXZlbnQgbGlzdGVuZXJzIGluIHRoaXMgd2Vidmlld1xuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN5bmM6IHRydWUsXG4gIH0pXG4gIHJlYXR0YWNoKCk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0YWlsaXplcyBVcmJhbiBBaXJzaGlwLlxuICAgKlxuICAgKiBUaGUgcGx1Z2luIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIHRha2VPZmYgZHVyaW5nIHRoZSBuZXh0IGFwcCBpbml0IGluXG4gICAqIG9yZGVyIHRvIHByb3Blcmx5IGhhbmRsZSBpbmNvbWluZyBwdXNoLiBJZiB0YWtlT2ZmIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuICAgKiBpbiBhIHNlc3Npb24sIG9yIGlmIHRoZSBjb25maWcgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHByZXZpb3VzIHNlc3NzaW9uLCB0aGVcbiAgICogbmV3IGNvbmZpZyB3aWxsIG5vdCBiZSB1c2VkIHVudGlsIHRoZSBuZXh0IGFwcCBzdGFydC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICBjb25maWcgVGhlIFVyYmFuIEFpcnNoaXAgY29uZmlnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5zaXRlIFNldHMgdGhlIGNsb3VkIHNpdGUsIG11c3QgYmUgZWl0aGVyIEVVIG9yIFVTLlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZy5kZXZlbG9wbWVudCBUaGUgVXJiYW4gQWlyc2hpcCBkZXZlbG9wbWVudCBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLmRldmVsb3BtZW50LmFwcEtleSBUaGUgZGV2ZWxvcG1lbnQgYXBwS2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5kZXZlbG9wbWVudC5hcHBTZWNyZXQgVGhlIGRldmVsb3BtZW50IGFwcFNlY3JldC5cbiAgICogQHBhcmFtIHtvYmplY3R9ICBjb25maWcucHJvZHVjdGlvbiBUaGUgVXJiYW4gQWlyc2hpcCBwcm9kdWN0aW9uIGNvbmZpZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcucHJvZHVjdGlvbi5hcHBLZXkgVGhlIHByb2R1Y3Rpb24gYXBwS2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5wcm9kdWN0aW9uLmFwcFNlY3JldCBUaGUgcHJvZHVjdGlvbiBhcHBTZWNyZXQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHRha2VPZmYoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBjb25maWcuIFZhbHVlcyBub3Qgc2V0IHdpbGwgZmFsbGJhY2sgdG8gYW55IHZhbHVlcyBzZXQgaW4gdGhlIGNvbmZpZy54bWwuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgY29uZmlnIFRoZSBub3RpZmljYXRpb24gY29uZmlnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIFtjb25maWcuaWNvbl0gVGhlIG5hbWUgb2YgdGhlIGRyYXdhYmxlIHJlc291cmNlIHRvIHVzZSBhcyB0aGUgbm90aWZpY2F0aW9uIGljb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2NvbmZpZy5sYXJnZUljb25dIFRoZSBuYW1lIG9mIHRoZSBkcmF3YWJsZSByZXNvdXJjZSB0byB1c2UgYXMgdGhlIG5vdGlmaWNhdGlvbiBsYXJnZSBpY29uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIFtjb25maWcuYWNjZW50Q29sb3JdIFRoZSBub3RpZmljYXRpb24gYWNjZW50IGNvbG9yLiBGb3JtYXQgaXMgI0FBUlJHR0JCLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIHRoZSBtZXNzYWdlIGNlbnRlciBpcyBsYXVuY2hlZCBmcm9tIGEgcHVzaFxuICAgKiBub3RpZmljYXRpb24uIElmIHNldCB0byBmYWxzZSB0aGUgbWVzc2FnZSBjZW50ZXIgbXVzdCBiZSBtYW51YWxseSBsYXVuY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gYXV0b21hdGljYWxseSBsYXVuY2ggdGhlIGRlZmF1bHQgbWVzc2FnZSBjZW50ZXIsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QXV0b0xhdW5jaERlZmF1bHRNZXNzYWdlQ2VudGVyKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHVzZXIgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbnMsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0VXNlck5vdGlmaWNhdGlvbnNFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdXNlciBub3RpZmljYXRpb25zIGFyZSBlbmFibGVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgdXNlciBub3RpZmljYXRpb25zIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNVc2VyTm90aWZpY2F0aW9uc0VuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFwcCBub3RpZmljYXRpb25zIGFyZSBlbmFibGVkIG9yIG5vdC4gSXRzIHBvc3NpYmxlIHRvIGhhdmUgYHVzZXJOb3RpZmljYXRpb25zRW5hYmxlZGBcbiAgICogYnV0IGFwcCBub3RpZmljYXRpb25zIGJlaW5nIGRpc2FibGVkIGlmIHRoZSB1c2VyIG9wdGVkIG91dCBvZiBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBhcHAgbm90aWZpY2F0aW9ucyBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzQXBwTm90aWZpY2F0aW9uc0VuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihJRCl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MuSUQgVGhlIGNoYW5uZWwgSUQgc3RyaW5nXG4gICAqIEBwYXJhbSB7ZmFpbHVyZUNhbGxiYWNrfSBbZmFpbHVyZV0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZmFpbHVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0Q2hhbm5lbElEKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3Qgbm90aWZpY2F0aW9uIHRoYXQgbGF1bmNoZWQgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNsZWFyIHRydWUgdG8gY2xlYXIgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihwdXNoKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5wdXNoIFRoZSBwdXNoIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwdXNoIG5vdGlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MucHVzaC5tZXNzYWdlIFRoZSBwdXNoIGFsZXJ0IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWNjZXNzLnB1c2guZXh0cmFzIEFueSBwdXNoIGV4dHJhcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzdWNjZXNzLnB1c2gubm90aWZpY2F0aW9uX2lkXSBUaGUgQW5kcm9pZCBub3RpZmljYXRpb24gSUQuXG4gICAqIEBwYXJhbSB7ZmFpbHVyZUNhbGxiYWNrfSBbZmFpbHVyZV0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZmFpbHVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0TGF1bmNoTm90aWZpY2F0aW9uKGNsZWFyOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCByZWNlaXZlZCBkZWVwIGxpbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXIgdHJ1ZSB0byBjbGVhciB0aGUgZGVlcCBsaW5rLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHB1c2gpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLmRlZXBMaW5rIFRoZSBkZWVwIGxpbmsuXG4gICAqIEBwYXJhbSB7ZmFpbHVyZUNhbGxiYWNrfSBbZmFpbHVyZV0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZmFpbHVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0RGVlcExpbmsoY2xlYXI6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWdzIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRhZ3MpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1Y2Nlc3MudGFncyBUaGUgdGFncyBhcyBhbiBhcnJheS5cbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRUYWdzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRhZ3MgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRUYWdzKHRhZ3M6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYWxpYXMuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIERlcHJlY2F0ZWQgc2luY2UgNi43LjAgLSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiAtIHBsZWFzZSB1c2UgZ2V0TmFtZWRVc2VyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY3VycmVudEFsaWFzKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5jdXJyZW50QWxpYXMgVGhlIGFsaWFzIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0QWxpYXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWxpYXMuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIERlcHJlY2F0ZWQgc2luY2UgNi43LjAgIC0gdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gLSBwbGVhc2UgdXNlIHNldE5hbWVkVXNlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWxpYXMgc3RyaW5nXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QWxpYXMoYWxpYXM6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBxdWlldCB0aW1lIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBxdWlldCB0aW1lIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNRdWlldFRpbWVFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgcXVpZXQgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIHF1aWV0IHRpbWUsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0UXVpZXRUaW1lRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGluIHF1aWV0IHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW5RdWlldFRpbWUpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5pblF1aWV0VGltZSBGbGFnIGluZGljYXRpbmcgaWYgcXVpZXQgdGltZSBpcyBjdXJyZW50bHkgaW4gZWZmZWN0LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNJblF1aWV0VGltZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBxdWlldCB0aW1lIGFzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmc6XG4gICAqIFwic3RhcnRIb3VyXCI6IE51bWJlcixcbiAgICogXCJzdGFydE1pbnV0ZVwiOiBOdW1iZXIsXG4gICAqIFwiZW5kSG91clwiOiBOdW1iZXIsXG4gICAqIFwiZW5kTWludXRlXCI6IE51bWJlclxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHF1aWV0VGltZSl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN1Y2Nlc3MucXVpZXRUaW1lIFRoZSBxdWlldFRpbWUgb2JqZWN0IHJlcHJlc2VudHMgYSB0aW1lc3BhbiBkdXJpbmdcbiAgICogICAgICAgIHdoaWNoIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNpbGVuY2VkLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0UXVpZXRUaW1lKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHF1aWV0IHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEhvdXIgZm9yIHF1aWV0IHRpbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydE1pbnV0ZSBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEhvdXIgZm9yIHF1aWV0IHRpbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRNaW51dGUgZm9yIHF1aWV0IHRpbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0UXVpZXRUaW1lKHN0YXJ0SG91cjogbnVtYmVyLCBzdGFydE1pbnV0ZTogbnVtYmVyLCBlbmRIb3VyOiBudW1iZXIsIGVuZE1pbnV0ZTogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhbmFseXRpY3MuXG4gICAqXG4gICAqIERpc2FibGluZyBhbmFseXRpY3Mgd2lsbCBkZWxldGUgYW55IGxvY2FsbHkgc3RvcmVkIGV2ZW50c1xuICAgKiBhbmQgcHJldmVudCBhbnkgZXZlbnRzIGZyb20gdXBsb2FkaW5nLiBGZWF0dXJlcyB0aGF0IGRlcGVuZCBvbiBhbmFseXRpY3MgYmVpbmdcbiAgICogZW5hYmxlZCBtYXkgbm90IHdvcmsgcHJvcGVybHkgaWYgaXQncyBkaXNhYmxlZCAocmVwb3J0cywgcmVnaW9uIHRyaWdnZXJzLFxuICAgKiBsb2NhdGlvbiBzZWdtZW50YXRpb24sIHB1c2ggdG8gbG9jYWwgdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBhbmFseXRpY3MsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QW5hbHl0aWNzRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFuYWx5dGljcyBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgYW5hbHl0aWNzIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNBbmFseXRpY3NFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWVkIHVzZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obmFtZWRVc2VyKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5uYW1lZFVzZXIgVGhlIG5hbWVkIHVzZXIgSUQgYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXROYW1lZFVzZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbmFtZWQgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVkVXNlciBpZGVudGlmaWVyIHN0cmluZy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXROYW1lZFVzZXIobmFtZWRVc2VyOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFuIFVyYmFuIEFpcnNoaXAgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uTmFtZSBhY3Rpb24gYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7Kn0gYWN0aW9uVmFsdWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihyZXN1bHQpfSBbc3VjY2Vzc10gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN1Y2Nlc3MucmVzdWx0IFRoZSByZXN1bHQncyB2YWx1ZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJ1bkFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIGFjdGlvblZhbHVlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIG5hbWVkIHVzZXIgdGFnIGdyb3Vwcy5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0TmFtZWRVc2VyVGFnR3JvdXBzKCk6IFRhZ0dyb3VwRWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBjaGFubmVsIHRhZyBncm91cHMuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdENoYW5uZWxUYWdHcm91cHMoKTogVGFnR3JvdXBFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIGNoYW5uZWwgYXR0cmlidXRlcy5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q2hhbm5lbEF0dHJpYnV0ZXMoKTogQXR0cmlidXRlc0VkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgbmFtZWQgdXNlciBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXROYW1lZFVzZXJBdHRyaWJ1dGVzKCk6IEF0dHJpYnV0ZXNFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIGNoYW5uZWwgc3Vic2NyaXB0aW9uIGxpc3RzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3J9IEEgc3Vic2NyaXB0aW9uIGxpc3QgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAc2luY2UgMTMuMy4wXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdENoYW5uZWxTdWJzY3JpcHRpb25MaXN0cygpOiBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY29udGFjdCBzdWJzY3JpcHRpb24gbGlzdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvcn0gQSBzdWJzY3JpcHRpb24gbGlzdCBlZGl0b3IgaW5zdGFuY2UuXG4gICAqIEBzaW5jZSAxMy4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q29udGFjdFN1YnNjcmlwdGlvbkxpc3RzKCk6IENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZXQgb2Ygc3Vic2NyaXB0aW9uIGxpc3RzIGZvciB0aGUgY3VycmVudCBjaGFubmVsLFxuICAgKiBvcHRpb25hbGx5IGFwcGx5aW5nIHBlbmRpbmcgc3Vic2NyaXB0aW9uIGxpc3QgY2hhbmdlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCBkdXJpbmcgdGhlIG5leHQgY2hhbm5lbCB1cGRhdGUuXG4gICAqIEFuIGVtcHR5IHNldCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbnRhY3QgaXMgbm90IHN1YnNjcmliZWQgdG8gYW55IGxpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDAsXG4gICAgZXJyb3JJbmRleDogMSxcbiAgfSlcbiAgZ2V0Q2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZXQgb2Ygc3Vic2NyaXB0aW9uIGxpc3RzIGZvciB0aGUgY3VycmVudCBjb250YWN0LFxuICAgKiBvcHRpb25hbGx5IGFwcGx5aW5nIHBlbmRpbmcgc3Vic2NyaXB0aW9uIGxpc3QgY2hhbmdlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCBkdXJpbmcgdGhlIG5leHQgY29udGFjdCB1cGRhdGUuXG4gICAqIEFuIGVtcHR5IHNldCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbnRhY3QgaXMgbm90IHN1YnNjcmliZWQgdG8gYW55IGxpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDAsXG4gICAgZXJyb3JJbmRleDogMSxcbiAgfSlcbiAgZ2V0Q29udGFjdFN1YnNjcmlwdGlvbkxpc3RzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBhc3NvY2lhdGVkIGlkZW50aWZpZXIgZm9yIHRoZSBDb25uZWN0IGRhdGEgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IEN1c3RvbSBrZXkgZm9yIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSBpZGVudGlmaWVyIFRoZSBpZGVudGlmaWVyIHZhbHVlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEFzc29jaWF0ZWRJZGVudGlmaWVyKGtleTogc3RyaW5nLCBpZGVudGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBMb2NhdGlvblxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIFVyYmFuIEFpcnNoaXAgbG9jYXRpb24gc2VydmljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBsb2NhdGlvbiwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRMb2NhdGlvbkVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBsb2NhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgbG9jYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gOC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzTG9jYXRpb25FbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYmFja2dyb3VuZCBsb2NhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGJhY2tncm91bmQgbG9jYXRpb24sIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDguMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRCYWNrZ3JvdW5kTG9jYXRpb25FbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYmFja2dyb3VuZCBsb2NhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgYmFja2dyb3VuZCBsb2NhdGlvbiB1cGRhdGVzIGFyZSBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiA4LjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNCYWNrZ3JvdW5kTG9jYXRpb25FbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBtZXNzYWdlIGNlbnRlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkaXNwbGF5TWVzc2FnZUNlbnRlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzIHRoZSBtZXNzYWdlIGNlbnRlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkaXNtaXNzTWVzc2FnZUNlbnRlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzIHRoZSBpbmJveCBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc21pc3NJbmJveE1lc3NhZ2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyB0aGUgaW5ib3ggbWVzc2FnZSBpbiB0aGUgb3ZlcmxheS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gMTAuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkaXNtaXNzT3ZlcmxheUluYm94TWVzc2FnZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhcnJheSBvZiBpbmJveCBtZXNzYWdlcy4gRWFjaCBtZXNzYWdlIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIFwiaWRcIjogc3RyaW5nIC0gVGhlIG1lc3NhZ2VzIElELiBOZWVkZWQgdG8gZGlzcGxheSwgbWFyayBhcyByZWFkLCBvciBkZWxldGUgdGhlIG1lc3NhZ2UuXG4gICAqIFwidGl0bGVcIjogc3RyaW5nIC0gVGhlIG1lc3NhZ2UgdGl0bGUuXG4gICAqIFwic2VudERhdGVcIjogbnVtYmVyIC0gVGhlIG1lc3NhZ2Ugc2VudCBkYXRlIGluIG1pbGxpc2Vjb25kcy5cbiAgICogXCJsaXN0SWNvblVybFwiOiBzdHJpbmcsIG9wdGlvbmFsIC0gVGhlIGljb24gdXJsIGZvciB0aGUgbWVzc2FnZS5cbiAgICogXCJpc1JlYWRcIjogYm9vbGVhbiAtIFRoZSB1bnJlYWQvcmVhZCBzdGF0dXMgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIFwiZXh0cmFzXCI6IG9iamVjdCAtIFN0cmluZyB0byBTdHJpbmcgbWFwIG9mIGFueSBtZXNzYWdlIGV4dHJhcy5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlcyl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtBcnJheX0gc3VjY2Vzcy5tZXNzYWdlcyBUaGUgYXJyYXkgb2YgaW5ib3ggbWVzc2FnZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRJbmJveE1lc3NhZ2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIGFuIGluYm94IG1lc3NhZ2UgcmVhZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VJZCBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gbWFyayBhcyByZWFkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIG1hcmtJbmJveE1lc3NhZ2VSZWFkKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbmJveCBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGVsZXRlSW5ib3hNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIGluYm94IG1lc3NhZ2UgdXNpbmcgYSBmdWxsIHNjcmVlbiB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc3BsYXlJbmJveE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIGluYm94IHRvIHJlZnJlc2guIFRoaXMgaXMgbm9ybWFsbHkgbm90IG5lZWRlZCBhcyB0aGUgaW5ib3hcbiAgICogd2lsbCBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggb24gZm9yZWdyb3VuZCBvciB3aGVuIGEgcHVzaCBhcnJpdmVzIHRoYXRzXG4gICAqIGFzc29jaWF0ZWQgd2l0aCBhIG1lc3NhZ2UsIGJ1dCBpdCBjYW4gYmUgdXNlZnVsIHdoZW4gcHJvdmlkaW5nIGEgcmVmcmVzaFxuICAgKiBidXR0b24gZm9yIHRoZSBtZXNzYWdlIGxpc3RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcmVmcmVzaEluYm94KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBpbmJveCBtZXNzYWdlIHVzaW5nIGFuIG92ZXJsYXkgZGlzcGxheS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VJZCBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gMTAuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBvdmVybGF5SW5ib3hNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGEgbm90aWZpY2F0aW9uIGJ5IGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGlmaWVyIFRoZSBub3RpZmljYXRpb24gaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjbGVhck5vdGlmaWNhdGlvbihpZGVudGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIG5vdGlmaWNhdGlvbnMgcG9zdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjbGVhck5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjdXJyZW50bHkgYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIE5vdGU6IE9uIEFuZHJvaWQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIG9uIEFuZHJvaWQgTSBvciBoaWdoZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZXMpfSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEFjdGl2ZU5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpT1Mgb25seVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gYmFkZ2UuIERlZmF1bHRzIHRvIGBOT2AuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBhdXRvIGJhZGdlLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEF1dG9iYWRnZUVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJhZGdlIG51bWJlci5cbiAgICpcbiAgICogQHBhcmFtIGNvdW50IG51bWJlciBzcGVjaWZpZWQgYmFkZ2UgdG8gc2V0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEJhZGdlTnVtYmVyKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJhZGdlIG51bWJlci5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihiYWRnZU51bWJlcil9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtpbnR9IHN1Y2Nlc3MuYmFkZ2VOdW1iZXIgVGhlIGN1cnJlbnQgYXBwbGljYXRpb24gYmFkZ2UgbnVtYmVyLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0QmFkZ2VOdW1iZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBiYWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICByZXNldEJhZGdlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlPUyBub3RpZmljYXRpb24gdHlwZXMuIFNwZWNpZnkgdGhlIGNvbWJpbmF0aW9uIG9mXG4gICAqIGJhZGdlcywgc291bmQgYW5kIGFsZXJ0cyB0aGF0IGFyZSBkZXNpcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZXMgc3BlY2lmaWVkIG5vdGlmaWNhdGlvbiB0eXBlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXROb3RpZmljYXRpb25UeXBlcyh0eXBlczogTm90aWZpY2F0aW9uVHlwZSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlPUyBwcmVzZW50YXRpb24gb3B0aW9ucy4gU3BlY2lmeSB0aGUgY29tYmluYXRpb24gb2ZcbiAgICogYmFkZ2VzLCBzb3VuZCBhbmQgYWxlcnRzIHRoYXQgYXJlIGRlc2lyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIHR5cGVzIHNwZWNpZmllZCBwcmVzZW50YXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRQcmVzZW50YXRpb25PcHRpb25zKG9wdGlvbnM6IFByZXNlbnRhdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEFuZHJvaWQgb25seVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbm90aWZpY2F0aW9uIHNvdW5kIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBzb3VuZCBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzU291bmRFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbm90aWZpY2F0aW9uIHNvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgc291bmQsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0U291bmRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbm90aWZpY2F0aW9uIHZpYnJhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihlbmFibGVkKX0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3MuZW5hYmxlZCBGbGFnIGluZGljYXRpbmcgaWYgdmlicmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNWaWJyYXRlRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIG5vdGlmaWNhdGlvbiB2aWJyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSB2aWJyYXRpb24sIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0VmlicmF0ZUVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjdXN0b20gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgY3VzdG9tIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm5hbWUgVGhlIGV2ZW50J3MgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtldmVudC52YWx1ZV0gVGhlIGV2ZW50J3MgdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnQudHJhbnNhY3Rpb25JZF0gVGhlIGV2ZW50J3MgdHJhbnNhY3Rpb24gSUQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXZlbnQucHJvcGVydGllc10gVGhlIGV2ZW50J3MgcHJvcGVydGllcy4gT25seSBudW1iZXJzLCBib29sZWFucywgc3RyaW5ncywgYW5kIGFycmF5IG9mIHN0cmluZ3MgYXJlIHN1cHBvcnRlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBhZGRDdXN0b21FdmVudChldmVudDogb2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIHNjcmVlbiB0cmFja2luZyBmb3IgYSBzcGVjaWZpYyBhcHAgc2NyZWVuLCBtdXN0IGJlIGNhbGxlZCBvbmNlIHBlciB0cmFja2VkIHNjcmVlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbiBUaGUgc2NyZWVuJ3Mgc3RyaW5nIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDExLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICB0cmFja1NjcmVlbihzY3JlZW46IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgZmVhdHVyZXMsIGFkZGluZyB0aGVtIHRvIHRoZSBzZXQgb2YgY3VycmVudGx5IGVuYWJsZWQgZmVhdHVyZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIHRvIGVuYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGVuYWJsZUZlYXR1cmUoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgZmVhdHVyZXMsIHJlbW92aW5nIHRoZW0gZnJvbSB0aGUgc2V0IG9mIGN1cnJlbnRseSBlbmFibGVkIGZlYXR1cmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgZGlzYWJsZUZlYXR1cmUoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBlbmFibGVkIGZlYXR1cmVzLCByZXBsYWNpbmcgYW55IGN1cnJlbnRseSBlbmFibGVkIGZlYXR1cmVzIHdpdGggdGhlIGdpdmVuIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgdG8gc2V0IGFzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgc2V0RW5hYmxlZEZlYXR1cmVzKGZlYXR1cmVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAwLFxuICAgIGVycm9ySW5kZXg6IDEsXG4gIH0pXG4gIGdldEVuYWJsZWRGZWF0dXJlcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWxsIG9mIHRoZSBnaXZlbiBmZWF0dXJlcyBhcmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgdG8gY2hlY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBpc0ZlYXR1cmVFbmFibGVkKGZlYXR1cmVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFByZWZlcmVuY2UgQ2VudGVyIHdpdGggdGhlIGdpdmVuIElEIHRyb3VnaCBhIGNhbGxiYWNrIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZlcmVuY2VDZW50ZXJJZCBUaGUgcHJlZmVyZW5jZSBjZW50ZXIgSUQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjMuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBnZXRQcmVmZXJlbmNlQ2VudGVyQ29uZmlnKHByZWZlcmVuY2VDZW50ZXJJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIFByZWZlcmVuY2UgQ2VudGVyIHdpdGggdGhlIGdpdmVuIHByZWZlcmVuY2VDZW50ZXJJZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZW5mZXJlbmNlQ2VudGVySWQgVGhlIHByZWZlcmVuY2UgY2VudGVyIElELlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgb3BlblByZWZlcmVuY2VDZW50ZXIocHJlbmZlcmVuY2VDZW50ZXJJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBsb2NhbGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSBsYW5ndWFnZSBhbmQgb3B0aW9uYWwgY291bnRyeSBjb2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxNC4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0Q3VycmVudExvY2FsZShsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZXQgbG9jYWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGxvY2FsZSl9IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5sb2NhbGUgVGhlIGxvY2FsZSBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxNC4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0Q3VycmVudExvY2FsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGN1cnJlbnQgbG9jYWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxNC4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgY2xlYXJMb2NhbGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==