appium-webdriveragent 4.4.2 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,6 +31,8 @@
31
31
  - (void)pressForDuration:(double)arg1;
32
32
  - (void)doubleTap;
33
33
  - (void)tap;
34
+ - (void)pressWithPressure:(double)arg1 duration:(double)arg2;
35
+ - (void)forcePress;
34
36
 
35
37
  @end
36
38
  #endif
@@ -24,5 +24,7 @@
24
24
  - (void)pressLockButton;
25
25
  - (void)holdHomeButtonForDuration:(double)arg1;
26
26
  - (void)_silentPressButton:(long long)arg1;
27
+ // Since Xcode 11
28
+ - (_Bool)supportsPressureInteraction;
27
29
 
28
30
  @end
@@ -43,6 +43,8 @@
43
43
  - (id)_highestNonWindowAncestorOfElement:(id)arg1 notSharedWithElement:(id)arg2;
44
44
  - (id)_pointsInFrame:(CGRect)arg1 numberOfTouches:(unsigned long long)arg2;
45
45
  - (CGPoint)_hitPointByAttemptingToScrollToVisibleSnapshot:(id)arg1;
46
+ // Since 11.3
47
+ - (void)pressWithPressure:(double)arg1 duration:(double)arg2;
46
48
  - (void)forcePress;
47
49
  - (void)tapWithNumberOfTaps:(unsigned long long)arg1 numberOfTouches:(unsigned long long)arg2;
48
50
  - (void)twoFingerTap;
package/README.md CHANGED
@@ -51,3 +51,4 @@ projects has been integrated directly in the WebDriverAgent source tree.
51
51
  You can find the source files and their licenses in the `WebDriverAgentLib/Vendor` directory.
52
52
 
53
53
  Have fun!
54
+
@@ -11,29 +11,29 @@
11
11
 
12
12
  NS_ASSUME_NONNULL_BEGIN
13
13
 
14
- @interface XCUIElement (FBForceTouch)
14
+ #if !TARGET_OS_TV
15
15
 
16
- /**
17
- Waits for element to become stable (not move) and performs sync force touch on element
18
-
19
- @param error If there is an error, upon return contains an NSError object that describes the problem.
20
- @param pressure The pressure of the force touch – valid values are [0, touch.maximumPossibleForce]
21
- @param duration The duration of the gesture in float seconds
22
- @return YES if the operation succeeds, otherwise NO.
23
- */
24
- - (BOOL)fb_forceTouchWithPressure:(double)pressure duration:(double)duration error:(NSError **)error;
16
+ @interface XCUIElement (FBForceTouch)
25
17
 
26
18
  /**
27
- Waits for element to become stable (not move) and performs sync force touch on element
19
+ Performs force touch on element
28
20
 
29
- @param relativeCoordinate hit point coordinate relative to the current element position
21
+ @param relativeCoordinate hit point coordinate relative to the current element position.
22
+ nil value means to use the default element hit point
30
23
  @param pressure The pressure of the force touch – valid values are [0, touch.maximumPossibleForce]
24
+ nil value would use the default pressure value
31
25
  @param duration The duration of the gesture in float seconds
26
+ nil value would use the default duration value
32
27
  @param error If there is an error, upon return contains an NSError object that describes the problem.
33
28
  @return YES if the operation succeeds, otherwise NO.
34
29
  */
35
- - (BOOL)fb_forceTouchCoordinate:(CGPoint)relativeCoordinate pressure:(double)pressure duration:(double)duration error:(NSError **)error;
30
+ - (BOOL)fb_forceTouchCoordinate:(nullable NSValue *)relativeCoordinate
31
+ pressure:(nullable NSNumber *)pressure
32
+ duration:(nullable NSNumber *)duration
33
+ error:(NSError **)error;
36
34
 
37
35
  @end
38
36
 
37
+ #endif
38
+
39
39
  NS_ASSUME_NONNULL_END
@@ -9,56 +9,45 @@
9
9
 
10
10
  #import "XCUIElement+FBForceTouch.h"
11
11
 
12
- #import "XCUIApplication+FBTouchAction.h"
12
+ #if !TARGET_OS_TV
13
+
14
+ #import "FBErrorBuilder.h"
15
+ #import "XCUICoordinate.h"
16
+ #import "XCUIDevice.h"
13
17
 
14
18
  @implementation XCUIElement (FBForceTouch)
15
19
 
16
- - (BOOL)fb_forceTouchWithPressure:(double)pressure duration:(double)duration error:(NSError **)error
20
+ - (BOOL)fb_forceTouchCoordinate:(NSValue *)relativeCoordinate
21
+ pressure:(NSNumber *)pressure
22
+ duration:(NSNumber *)duration
23
+ error:(NSError **)error
17
24
  {
18
- NSArray<NSDictionary<NSString *, id> *> *gesture =
19
- @[@{
20
- @"action": @"press",
21
- @"options": @{
22
- @"element": self,
23
- @"pressure": @(pressure)
24
- }
25
- },
26
- @{
27
- @"action": @"wait",
28
- @"options": @{
29
- @"ms": @(duration * 1000)
30
- }
31
- },
32
- @{
33
- @"action": @"release"
34
- }
35
- ];
36
- return [self.application fb_performAppiumTouchActions:gesture elementCache:nil error:error];
37
- }
25
+ if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
26
+ return [[[FBErrorBuilder builder]
27
+ withDescriptionFormat:@"Force press is not supported on this device"]
28
+ buildError:error];
29
+ }
38
30
 
39
- - (BOOL)fb_forceTouchCoordinate:(CGPoint)relativeCoordinate pressure:(double)pressure duration:(double)duration error:(NSError **)error
40
- {
41
- NSArray<NSDictionary<NSString *, id> *> *gesture =
42
- @[@{
43
- @"action": @"press",
44
- @"options": @{
45
- @"element": self,
46
- @"x": @(relativeCoordinate.x),
47
- @"y": @(relativeCoordinate.y),
48
- @"pressure": @(pressure)
49
- }
50
- },
51
- @{
52
- @"action": @"wait",
53
- @"options": @{
54
- @"ms": @(duration * 1000)
55
- }
56
- },
57
- @{
58
- @"action": @"release"
59
- }
60
- ];
61
- return [self.application fb_performAppiumTouchActions:gesture elementCache:nil error:error];
31
+ if (nil == relativeCoordinate) {
32
+ if (nil == pressure || nil == duration) {
33
+ [self forcePress];
34
+ } else {
35
+ [self pressWithPressure:[pressure doubleValue] duration:[duration doubleValue]];
36
+ }
37
+ } else {
38
+ CGSize size = self.frame.size;
39
+ CGVector offset = CGVectorMake(size.width > 0 ? relativeCoordinate.CGPointValue.x / size.width : 0,
40
+ size.height > 0 ? relativeCoordinate.CGPointValue.y / size.height : 0);
41
+ XCUICoordinate *hitPoint = [self coordinateWithNormalizedOffset:offset];
42
+ if (nil == pressure || nil == duration) {
43
+ [hitPoint forcePress];
44
+ } else {
45
+ [hitPoint pressWithPressure:[pressure doubleValue] duration:[duration doubleValue]];
46
+ }
47
+ }
48
+ return YES;
62
49
  }
63
50
 
64
51
  @end
52
+
53
+ #endif
@@ -85,14 +85,15 @@
85
85
  [[FBRoute POST:@"/wda/element/:uuid/touchAndHold"] respondWithTarget:self action:@selector(handleTouchAndHold:)],
86
86
  [[FBRoute POST:@"/wda/element/:uuid/scroll"] respondWithTarget:self action:@selector(handleScroll:)],
87
87
  [[FBRoute POST:@"/wda/element/:uuid/dragfromtoforduration"] respondWithTarget:self action:@selector(handleDrag:)],
88
+ [[FBRoute POST:@"/wda/element/:uuid/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)],
88
89
  [[FBRoute POST:@"/wda/dragfromtoforduration"] respondWithTarget:self action:@selector(handleDragCoordinate:)],
89
90
  [[FBRoute POST:@"/wda/tap/:uuid"] respondWithTarget:self action:@selector(handleTap:)],
90
91
  [[FBRoute POST:@"/wda/touchAndHold"] respondWithTarget:self action:@selector(handleTouchAndHoldCoordinate:)],
91
92
  [[FBRoute POST:@"/wda/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTapCoordinate:)],
92
93
  [[FBRoute POST:@"/wda/pickerwheel/:uuid/select"] respondWithTarget:self action:@selector(handleWheelSelect:)],
94
+ [[FBRoute POST:@"/wda/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)],
93
95
  #endif
94
96
  [[FBRoute POST:@"/wda/keys"] respondWithTarget:self action:@selector(handleKeys:)],
95
- [[FBRoute POST:@"/wda/element/:uuid/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)],
96
97
  ];
97
98
  }
98
99
 
@@ -291,7 +292,8 @@
291
292
  + (id<FBResponsePayload>)handleDoubleTapCoordinate:(FBRouteRequest *)request
292
293
  {
293
294
  CGPoint doubleTapPoint = CGPointMake((CGFloat)[request.arguments[@"x"] doubleValue], (CGFloat)[request.arguments[@"y"] doubleValue]);
294
- XCUICoordinate *doubleTapCoordinate = [self.class gestureCoordinateWithCoordinate:doubleTapPoint application:request.session.activeApplication shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
295
+ XCUICoordinate *doubleTapCoordinate = [self.class gestureCoordinateWithCoordinate:doubleTapPoint
296
+ application:request.session.activeApplication];
295
297
  [doubleTapCoordinate doubleTap];
296
298
  return FBResponseWithOK();
297
299
  }
@@ -328,7 +330,8 @@
328
330
  + (id<FBResponsePayload>)handleTouchAndHoldCoordinate:(FBRouteRequest *)request
329
331
  {
330
332
  CGPoint touchPoint = CGPointMake((CGFloat)[request.arguments[@"x"] doubleValue], (CGFloat)[request.arguments[@"y"] doubleValue]);
331
- XCUICoordinate *pressCoordinate = [self.class gestureCoordinateWithCoordinate:touchPoint application:request.session.activeApplication shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
333
+ XCUICoordinate *pressCoordinate = [self.class gestureCoordinateWithCoordinate:touchPoint
334
+ application:request.session.activeApplication];
332
335
  [pressCoordinate pressForDuration:[request.arguments[@"duration"] doubleValue]];
333
336
  return FBResponseWithOK();
334
337
  }
@@ -386,8 +389,10 @@
386
389
  CGPoint startPoint = CGPointMake((CGFloat)[request.arguments[@"fromX"] doubleValue], (CGFloat)[request.arguments[@"fromY"] doubleValue]);
387
390
  CGPoint endPoint = CGPointMake((CGFloat)[request.arguments[@"toX"] doubleValue], (CGFloat)[request.arguments[@"toY"] doubleValue]);
388
391
  NSTimeInterval duration = [request.arguments[@"duration"] doubleValue];
389
- XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithCoordinate:endPoint application:session.activeApplication shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
390
- XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithCoordinate:startPoint application:session.activeApplication shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
392
+ XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithCoordinate:endPoint
393
+ application:session.activeApplication];
394
+ XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithCoordinate:startPoint
395
+ application:session.activeApplication];
391
396
  [startCoordinate pressForDuration:duration thenDragToCoordinate:endCoordinate];
392
397
  return FBResponseWithOK();
393
398
  }
@@ -401,9 +406,10 @@
401
406
  CGPoint startPoint = CGPointMake((CGFloat)(frame.origin.x + [request.arguments[@"fromX"] doubleValue]), (CGFloat)(frame.origin.y + [request.arguments[@"fromY"] doubleValue]));
402
407
  CGPoint endPoint = CGPointMake((CGFloat)(frame.origin.x + [request.arguments[@"toX"] doubleValue]), (CGFloat)(frame.origin.y + [request.arguments[@"toY"] doubleValue]));
403
408
  NSTimeInterval duration = [request.arguments[@"duration"] doubleValue];
404
- BOOL shouldApplyOrientationWorkaround = isSDKVersionGreaterThanOrEqualTo(@"10.0") && isSDKVersionLessThan(@"11.0");
405
- XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithCoordinate:endPoint application:session.activeApplication shouldApplyOrientationWorkaround:shouldApplyOrientationWorkaround];
406
- XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithCoordinate:startPoint application:session.activeApplication shouldApplyOrientationWorkaround:shouldApplyOrientationWorkaround];
409
+ XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithCoordinate:endPoint
410
+ application:session.activeApplication];
411
+ XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithCoordinate:startPoint
412
+ application:session.activeApplication];
407
413
  [startCoordinate pressForDuration:duration thenDragToCoordinate:endCoordinate];
408
414
  return FBResponseWithOK();
409
415
  }
@@ -439,8 +445,7 @@
439
445
  }
440
446
  } else {
441
447
  XCUICoordinate *tapCoordinate = [self.class gestureCoordinateWithCoordinate:tapPoint
442
- application:request.session.activeApplication
443
- shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
448
+ application:request.session.activeApplication];
444
449
  [tapCoordinate tap];
445
450
  }
446
451
  return FBResponseWithOK();
@@ -465,27 +470,34 @@
465
470
  [element rotate:rotation withVelocity:velocity];
466
471
  return FBResponseWithOK();
467
472
  }
468
- #endif
469
473
 
470
474
  + (id<FBResponsePayload>)handleForceTouch:(FBRouteRequest *)request
471
475
  {
472
- FBElementCache *elementCache = request.session.elementCache;
473
- XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
474
- double pressure = [request.arguments[@"pressure"] doubleValue];
475
- double duration = [request.arguments[@"duration"] doubleValue];
476
- NSError *error;
477
- if (nil != request.arguments[@"x"] && nil != request.arguments[@"y"]) {
478
- CGPoint forceTouchPoint = CGPointMake((CGFloat)[request.arguments[@"x"] doubleValue], (CGFloat)[request.arguments[@"y"] doubleValue]);
479
- if (![element fb_forceTouchCoordinate:forceTouchPoint pressure:pressure duration:duration error:&error]) {
480
- return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
481
- }
476
+ XCUIElement *element = nil;
477
+ if (nil == request.parameters[@"uuid"]) {
478
+ element = [FBApplication fb_activeApplication];
482
479
  } else {
483
- if (![element fb_forceTouchWithPressure:pressure duration:duration error:&error]) {
484
- return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
485
- }
480
+ FBElementCache *elementCache = request.session.elementCache;
481
+ element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
486
482
  }
487
- return FBResponseWithOK();
483
+ NSNumber *pressure = request.arguments[@"pressure"];
484
+ NSNumber *duration = request.arguments[@"duration"];
485
+ NSNumber *x = request.arguments[@"x"];
486
+ NSNumber *y = request.arguments[@"y"];
487
+ NSValue *hitPoint = (nil == x || nil == y)
488
+ ? nil
489
+ : [NSValue valueWithCGPoint:CGPointMake((CGFloat)[x doubleValue], (CGFloat)[y doubleValue])];
490
+ NSError *error;
491
+ BOOL didSucceed = [element fb_forceTouchCoordinate:hitPoint
492
+ pressure:pressure
493
+ duration:duration
494
+ error:&error];
495
+ return didSucceed
496
+ ? FBResponseWithOK()
497
+ : FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
498
+ traceback:nil]);
488
499
  }
500
+ #endif
489
501
 
490
502
  + (id<FBResponsePayload>)handleKeys:(FBRouteRequest *)request
491
503
  {
@@ -574,7 +586,8 @@ static const CGFloat DEFAULT_OFFSET = (CGFloat)0.2;
574
586
  return FBResponseWithStatus([FBCommandStatus elementNotVisibleErrorWithMessage:@"Can't scroll to element that does not exist" traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
575
587
  }
576
588
  if (![element fb_scrollToVisibleWithError:&error]) {
577
- return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
589
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
590
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
578
591
  }
579
592
  return FBResponseWithOK();
580
593
  }
@@ -584,21 +597,12 @@ static const CGFloat DEFAULT_OFFSET = (CGFloat)0.2;
584
597
 
585
598
  @param coordinate absolute screen coordinates
586
599
  @param application the instance of current application under test
587
- @shouldApplyOrientationWorkaround whether to apply orientation workaround. This is to
588
- handle XCTest bug where it does not translate screen coordinates for elements if
589
- screen orientation is different from the default one (which is portrait).
590
- Different iOS version have different behavior, for example iOS 9.3 returns correct
591
- coordinates for elements in landscape, but iOS 10.0+ returns inverted coordinates as if
592
- the current screen orientation would be portrait.
593
600
  @return translated gesture coordinates ready to be passed to XCUICoordinate methods
594
601
  */
595
- + (XCUICoordinate *)gestureCoordinateWithCoordinate:(CGPoint)coordinate application:(XCUIApplication *)application shouldApplyOrientationWorkaround:(BOOL)shouldApplyOrientationWorkaround
602
+ + (XCUICoordinate *)gestureCoordinateWithCoordinate:(CGPoint)coordinate
603
+ application:(XCUIApplication *)application
596
604
  {
597
605
  CGPoint point = coordinate;
598
- if (shouldApplyOrientationWorkaround) {
599
- point = FBInvertPointForApplication(coordinate, application.frame.size, application.interfaceOrientation);
600
- }
601
-
602
606
  /**
603
607
  If SDK >= 11, the tap coordinate based on application is not correct when
604
608
  the application orientation is landscape and
@@ -632,10 +636,13 @@ static const CGFloat DEFAULT_OFFSET = (CGFloat)0.2;
632
636
  @param element the element in the current application under test
633
637
  @return translated gesture coordinates ready to be passed to XCUICoordinate methods
634
638
  */
635
- + (XCUICoordinate *)gestureCoordinateWithCoordinate:(CGPoint)coordinate element:(XCUIElement *)element
639
+ + (XCUICoordinate *)gestureCoordinateWithCoordinate:(CGPoint)coordinate
640
+ element:(XCUIElement *)element
636
641
  {
637
- XCUICoordinate *appCoordinate = [[XCUICoordinate alloc] initWithElement:element normalizedOffset:CGVectorMake(0, 0)];
638
- return [[XCUICoordinate alloc] initWithCoordinate:appCoordinate pointsOffset:CGVectorMake(coordinate.x, coordinate.y)];
642
+ XCUICoordinate *appCoordinate = [[XCUICoordinate alloc] initWithElement:element
643
+ normalizedOffset:CGVectorMake(0, 0)];
644
+ return [[XCUICoordinate alloc] initWithCoordinate:appCoordinate
645
+ pointsOffset:CGVectorMake(coordinate.x, coordinate.y)];
639
646
  }
640
647
  #endif
641
648
 
@@ -21,6 +21,7 @@
21
21
  #import "FBXCTestDaemonsProxy.h"
22
22
  #import "XCElementSnapshot+FBHelpers.h"
23
23
  #import "XCUIApplication+FBHelpers.h"
24
+ #import "XCUIDevice.h"
24
25
  #import "XCUIElement+FBCaching.h"
25
26
  #import "XCUIElement+FBIsVisible.h"
26
27
  #import "XCUIElement+FBUtilities.h"
@@ -218,12 +219,28 @@ static NSString *const FB_KEY_ACTIONS = @"actions";
218
219
  return @[];
219
220
  }
220
221
  }
221
- XCPointerEventPath *result = [[XCPointerEventPath alloc] initForTouchAtPoint:self.atPosition offset:FBMillisToSeconds(self.offset)];
222
- if (nil != self.pressure && nil != result.pointerEvents.lastObject) {
223
- XCPointerEvent *pointerEvent = (XCPointerEvent *)result.pointerEvents.lastObject;
224
- pointerEvent.pressure = self.pressure.doubleValue;
222
+ if (nil == self.pressure) {
223
+ XCPointerEventPath *result = [[XCPointerEventPath alloc] initForTouchAtPoint:self.atPosition
224
+ offset:FBMillisToSeconds(self.offset)];
225
+ return @[result];
225
226
  }
226
- return @[result];
227
+
228
+ if (nil == eventPath) {
229
+ NSString *description = [NSString stringWithFormat:@"'%@' action with pressure must be preceeded with at least one '%@' action without this option", self.class.actionName, self.class.actionName];
230
+ if (error) {
231
+ *error = [[FBErrorBuilder.builder withDescription:description] build];
232
+ }
233
+ return nil;
234
+ }
235
+ if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
236
+ if (error) {
237
+ *error = [[FBErrorBuilder.builder withDescription:@"This device does not support force press interactions"] build];
238
+ }
239
+ return nil;
240
+ }
241
+ [eventPath pressDownWithPressure:self.pressure.doubleValue
242
+ atOffset:FBMillisToSeconds(self.offset)];
243
+ return @[];
227
244
  }
228
245
 
229
246
  @end
Binary file
@@ -284,35 +284,6 @@
284
284
  [self verifyGesture:gesture orientation:orientation];
285
285
  }
286
286
 
287
- - (void)testForcePress
288
- {
289
- if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"15.0")) {
290
- // Does not work on iOS 15.
291
- return;
292
- }
293
- NSArray<NSDictionary<NSString *, id> *> *gesture =
294
- @[@{
295
- @"action": @"press",
296
- @"options": @{
297
- @"ELEMENT": self.testedApplication.buttons[FBShowAlertForceTouchButtonName],
298
- @"x": @1,
299
- @"y": @1,
300
- @"pressure": @1
301
- }
302
- },
303
- @{
304
- @"action": @"wait",
305
- @"options": @{
306
- @"ms": @300
307
- }
308
- },
309
- @{
310
- @"action": @"release"
311
- }
312
- ];
313
- [self verifyGesture:gesture orientation:UIDeviceOrientationPortrait];
314
- }
315
-
316
287
  @end
317
288
 
318
289
 
@@ -14,6 +14,7 @@
14
14
  #import "FBMacros.h"
15
15
  #import "FBElementCache.h"
16
16
  #import "FBTestMacros.h"
17
+ #import "XCUIDevice.h"
17
18
  #import "XCUIDevice+FBRotation.h"
18
19
  #import "XCUIElement+FBForceTouch.h"
19
20
  #import "XCUIElement+FBIsVisible.h"
@@ -30,7 +31,10 @@
30
31
  [[XCUIDevice sharedDevice] fb_setDeviceInterfaceOrientation:orientation];
31
32
  NSError *error;
32
33
  XCTAssertTrue(self.testedApplication.alerts.count == 0);
33
- [self.testedApplication.buttons[FBShowAlertForceTouchButtonName] fb_forceTouchWithPressure:1.0 duration:1.0 error:&error];
34
+ [self.testedApplication.buttons[FBShowAlertForceTouchButtonName] fb_forceTouchCoordinate:nil
35
+ pressure:nil
36
+ duration:nil
37
+ error:&error];
34
38
  FBAssertWaitTillBecomesTrue(self.testedApplication.alerts.count > 0);
35
39
  }
36
40
 
@@ -54,21 +58,28 @@
54
58
 
55
59
  - (void)testForceTap
56
60
  {
57
- if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"15.0")) {
58
- // Does not work on iOS 15.
61
+ if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
59
62
  return;
60
63
  }
61
64
 
62
65
  [self verifyForceTapWithOrientation:UIDeviceOrientationPortrait];
63
66
  }
64
67
 
65
- - (void)disabled_testForceTapInLandscapeLeft
68
+ - (void)testForceTapInLandscapeLeft
66
69
  {
70
+ if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
71
+ return;
72
+ }
73
+
67
74
  [self verifyForceTapWithOrientation:UIDeviceOrientationLandscapeLeft];
68
75
  }
69
76
 
70
- - (void)disabled_testForceTapInLandscapeRight
77
+ - (void)testForceTapInLandscapeRight
71
78
  {
79
+ if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
80
+ return;
81
+ }
82
+
72
83
  [self verifyForceTapWithOrientation:UIDeviceOrientationLandscapeRight];
73
84
  }
74
85
 
@@ -12,6 +12,7 @@
12
12
  #import "FBIntegrationTestCase.h"
13
13
 
14
14
  #import "XCUIElement.h"
15
+ #import "XCUIDevice.h"
15
16
  #import "XCUIApplication+FBTouchAction.h"
16
17
  #import "FBTestMacros.h"
17
18
  #import "XCUIDevice+FBRotation.h"
@@ -309,13 +310,13 @@
309
310
  @"id": @"finger1",
310
311
  @"parameters": @{@"pointerType": @"touch"},
311
312
  @"actions": @[
312
- @{@"type": @"pointerMove", @"duration": @0, @"origin": self.testedApplication.buttons[FBShowAlertButtonName], @"x": @0, @"y": @0},
313
+ @{@"type": @"pointerMove", @"duration": @0, @"origin": self.testedApplication.buttons[FBShowAlertButtonName]},
313
314
  @{@"type": @"pointerDown"},
314
- @{@"type": @"pause", @"duration": @100},
315
+ @{@"type": @"pause", @"duration": @50},
315
316
  @{@"type": @"pointerUp"},
316
- @{@"type": @"pause", @"duration": @40},
317
+ @{@"type": @"pause", @"duration": @200},
317
318
  @{@"type": @"pointerDown"},
318
- @{@"type": @"pause", @"duration": @100},
319
+ @{@"type": @"pause", @"duration": @50},
319
320
  @{@"type": @"pointerUp"},
320
321
  ],
321
322
  },
@@ -371,6 +372,32 @@
371
372
  [self verifyGesture:gesture orientation:orientation];
372
373
  }
373
374
 
375
+ - (void)testForceTap
376
+ {
377
+ if (![XCUIDevice.sharedDevice supportsPressureInteraction]) {
378
+ return;
379
+ }
380
+
381
+ NSArray<NSDictionary<NSString *, id> *> *gesture =
382
+ @[@{
383
+ @"type": @"pointer",
384
+ @"id": @"finger1",
385
+ @"parameters": @{@"pointerType": @"touch"},
386
+ @"actions": @[
387
+ @{@"type": @"pointerMove", @"duration": @0, @"origin": self.testedApplication.buttons[FBShowAlertButtonName]},
388
+ @{@"type": @"pointerDown"},
389
+ @{@"type": @"pause", @"duration": @500},
390
+ @{@"type": @"pointerDown", @"pressure": @1.0},
391
+ @{@"type": @"pause", @"duration": @50},
392
+ @{@"type": @"pointerDown", @"pressure": @1.0},
393
+ @{@"type": @"pause", @"duration": @50},
394
+ @{@"type": @"pointerUp"},
395
+ ],
396
+ },
397
+ ];
398
+ [self verifyGesture:gesture orientation:UIDeviceOrientationLandscapeLeft];
399
+ }
400
+
374
401
  @end
375
402
 
376
403
 
@@ -23,18 +23,28 @@
23
23
 
24
24
  @implementation XCUIDeviceHelperTests
25
25
 
26
+ - (void)restorePortraitOrientation
27
+ {
28
+ if ([XCUIDevice sharedDevice].orientation != UIDeviceOrientationPortrait) {
29
+ [[XCUIDevice sharedDevice] fb_setDeviceInterfaceOrientation:UIDeviceOrientationPortrait];
30
+ }
31
+ }
32
+
26
33
  - (void)setUp
27
34
  {
28
35
  [super setUp];
29
- static dispatch_once_t onceToken;
30
- dispatch_once(&onceToken, ^{
31
- [self launchApplication];
32
- });
36
+ [self launchApplication];
37
+ [self restorePortraitOrientation];
38
+ }
39
+
40
+ - (void)tearDown
41
+ {
42
+ [self restorePortraitOrientation];
43
+ [super tearDown];
33
44
  }
34
45
 
35
46
  - (void)testScreenshot
36
47
  {
37
- [[XCUIDevice sharedDevice] fb_setDeviceInterfaceOrientation:UIDeviceOrientationPortrait];
38
48
  NSError *error = nil;
39
49
  NSData *screenshotData = [[XCUIDevice sharedDevice] fb_screenshotWithError:&error];
40
50
  XCTAssertNotNil(screenshotData);
@@ -56,7 +66,7 @@
56
66
 
57
67
  - (void)testLandscapeScreenshot
58
68
  {
59
- [[XCUIDevice sharedDevice] fb_setDeviceInterfaceOrientation:UIDeviceOrientationLandscapeLeft];
69
+ XCTAssertTrue([[XCUIDevice sharedDevice] fb_setDeviceInterfaceOrientation:UIDeviceOrientationLandscapeLeft]);
60
70
  NSError *error = nil;
61
71
  NSData *screenshotData = [[XCUIDevice sharedDevice] fb_screenshotWithError:&error];
62
72
  XCTAssertNotNil(screenshotData);
package/build/index.js CHANGED
@@ -57,4 +57,4 @@ if (require.main === module) {
57
57
  }require('source-map-support').install();
58
58
 
59
59
 
60
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaGVja0ZvckRlcGVuZGVuY2llcyIsImJ1bmRsZVdEQVNpbSIsImRlcGVuZGVuY2llcyIsIk5vU2Vzc2lvblByb3h5IiwicHJveGllcyIsIldlYkRyaXZlckFnZW50IiwiZHJpdmVyIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6Ii4uIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkZXBlbmRlbmNpZXMgZnJvbSAnLi9saWIvY2hlY2stZGVwZW5kZW5jaWVzJztcbmltcG9ydCAqIGFzIHByb3hpZXMgZnJvbSAnLi9saWIvbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQgKiBhcyBkcml2ZXIgZnJvbSAnLi9saWIvd2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcblxuXG5jb25zdCB7IGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0gfSA9IGRlcGVuZGVuY2llcztcbmNvbnN0IHsgTm9TZXNzaW9uUHJveHkgfSA9IHByb3hpZXM7XG5jb25zdCB7IFdlYkRyaXZlckFnZW50IH0gPSBkcml2ZXI7XG5jb25zdCB7IEJPT1RTVFJBUF9QQVRILCBXREFfQkFTRV9VUkwsIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUgfSA9IGNvbnN0YW50cztcbmNvbnN0IHsgcmVzZXRUZXN0UHJvY2Vzc2VzIH0gPSB1dGlscztcblxuXG4vLyBXaGVuIHJ1biBhcyBhIGNvbW1hbmQgbGluZSB1dGlsaXR5LCB0aGlzIHNob3VsZCBjaGVjayBmb3IgdGhlIGRlcGVuZGVuY2llc1xuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KGNoZWNrRm9yRGVwZW5kZW5jaWVzKTtcbn1cblxuZXhwb3J0IHtcbiAgV2ViRHJpdmVyQWdlbnQsXG4gIE5vU2Vzc2lvblByb3h5LFxuICBjaGVja0ZvckRlcGVuZGVuY2llcywgYnVuZGxlV0RBU2ltLFxuICByZXNldFRlc3RQcm9jZXNzZXMsXG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUFJPSkVDVF9GSUxFLFxuICBXREFfQkFTRV9VUkwsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtFQUFFQSxvQkFBRjtFQUF3QkM7QUFBeEIsSUFBeUNDLFlBQS9DOzs7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBcUJDLE9BQTNCOztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFxQkMsTUFBM0I7O0FBQ0EsTUFBTTtFQUFFQyxjQUFGO0VBQWtCQyxZQUFsQjtFQUFnQ0Msb0JBQWhDO0VBQXNEQztBQUF0RCxJQUF1RUMsU0FBN0U7Ozs7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQXlCQyxLQUEvQjs7O0FBSUEsSUFBSUMsT0FBTyxDQUFDQyxJQUFSLEtBQWlCQyxNQUFyQixFQUE2QjtFQUMzQix3QkFBU2hCLG9CQUFUO0FBQ0QifQ==
60
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaGVja0ZvckRlcGVuZGVuY2llcyIsImJ1bmRsZVdEQVNpbSIsImRlcGVuZGVuY2llcyIsIk5vU2Vzc2lvblByb3h5IiwicHJveGllcyIsIldlYkRyaXZlckFnZW50IiwiZHJpdmVyIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRlcGVuZGVuY2llcyBmcm9tICcuL2xpYi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0ICogYXMgcHJveGllcyBmcm9tICcuL2xpYi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi93ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5cbmNvbnN0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9ID0gZGVwZW5kZW5jaWVzO1xuY29uc3QgeyBOb1Nlc3Npb25Qcm94eSB9ID0gcHJveGllcztcbmNvbnN0IHsgV2ViRHJpdmVyQWdlbnQgfSA9IGRyaXZlcjtcbmNvbnN0IHsgQk9PVFNUUkFQX1BBVEgsIFdEQV9CQVNFX1VSTCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBST0pFQ1RfRklMRSB9ID0gY29uc3RhbnRzO1xuY29uc3QgeyByZXNldFRlc3RQcm9jZXNzZXMgfSA9IHV0aWxzO1xuXG5cbi8vIFdoZW4gcnVuIGFzIGEgY29tbWFuZCBsaW5lIHV0aWxpdHksIHRoaXMgc2hvdWxkIGNoZWNrIGZvciB0aGUgZGVwZW5kZW5jaWVzXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkoY2hlY2tGb3JEZXBlbmRlbmNpZXMpO1xufVxuXG5leHBvcnQge1xuICBXZWJEcml2ZXJBZ2VudCxcbiAgTm9TZXNzaW9uUHJveHksXG4gIGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0sXG4gIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgQk9PVFNUUkFQX1BBVEgsXG4gIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUsXG4gIFdEQV9CQVNFX1VSTCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0VBQUVBLG9CQUFGO0VBQXdCQztBQUF4QixJQUF5Q0MsWUFBL0M7OztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFxQkMsT0FBM0I7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQXFCQyxNQUEzQjs7QUFDQSxNQUFNO0VBQUVDLGNBQUY7RUFBa0JDLFlBQWxCO0VBQWdDQyxvQkFBaEM7RUFBc0RDO0FBQXRELElBQXVFQyxTQUE3RTs7Ozs7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBeUJDLEtBQS9COzs7QUFJQSxJQUFJQyxPQUFPLENBQUNDLElBQVIsS0FBaUJDLE1BQXJCLEVBQTZCO0VBQzNCLElBQUFDLGtCQUFBLEVBQVNqQixvQkFBVDtBQUNEIn0=
@@ -55,4 +55,4 @@ async function bundleWDASim(xcodebuild, opts = {}) {
55
55
  }require('source-map-support').install();
56
56
 
57
57
 
58
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJjaGVja0ZvckRlcGVuZGVuY2llcyIsImxvZyIsImRlYnVnIiwiYnVuZGxlV0RBU2ltIiwieGNvZGVidWlsZCIsIm9wdHMiLCJfIiwiaXNGdW5jdGlvbiIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiWGNvZGVCdWlsZCIsImRlcml2ZWREYXRhUGF0aCIsIndkYUJ1bmRsZVBhdGgiLCJwYXRoIiwiam9pbiIsIldEQV9SVU5ORVJfQVBQIiwiZnMiLCJleGlzdHMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvY2hlY2stZGVwZW5kZW5jaWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCB7XG4gIFdEQV9QUk9KRUNULCBXREFfU0NIRU1FLCBTREtfU0lNVUxBVE9SLCBXREFfUlVOTkVSX0FQUFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRXREFTaW0gKCkge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNULFxuICAgICctc2NoZW1lJywgV0RBX1NDSEVNRSxcbiAgICAnLXNkaycsIFNES19TSU1VTEFUT1IsXG4gICAgJ0NPREVfU0lHTl9JREVOVElUWT1cIlwiJyxcbiAgICAnQ09ERV9TSUdOSU5HX1JFUVVJUkVEPVwiTk9cIicsXG4gICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlM9MCcsXG4gIF07XG4gIGF3YWl0IGV4ZWMoJ3hjb2RlYnVpbGQnLCBhcmdzKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yRGVwZW5kZW5jaWVzICgpIHtcbiAgbG9nLmRlYnVnKCdEZXBlbmRlbmNpZXMgYXJlIHVwIHRvIGRhdGUnKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidW5kbGVXREFTaW0gKHhjb2RlYnVpbGQsIG9wdHMgPSB7fSkge1xuICBpZiAoeGNvZGVidWlsZCAmJiAhXy5pc0Z1bmN0aW9uKHhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgpKSB7XG4gICAgeGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKCk7XG4gICAgb3B0cyA9IHhjb2RlYnVpbGQ7XG4gIH1cblxuICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oZGVyaXZlZERhdGFQYXRoLCAnQnVpbGQnLCAnUHJvZHVjdHMnLCAnRGVidWctaXBob25lc2ltdWxhdG9yJywgV0RBX1JVTk5FUl9BUFApO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHdkYUJ1bmRsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG4gIH1cbiAgYXdhaXQgY2hlY2tGb3JEZXBlbmRlbmNpZXMob3B0cyk7XG4gIGF3YWl0IGJ1aWxkV0RBU2ltKHhjb2RlYnVpbGQsIG9wdHMpO1xuICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbn1cblxuZXhwb3J0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxlQUFlQSxXQUFmLEdBQThCO0VBQzVCLE1BQU1DLElBQUksR0FBRyxDQUNYLFVBRFcsRUFDQ0Msc0JBREQsRUFFWCxTQUZXLEVBRUFDLHFCQUZBLEVBR1gsTUFIVyxFQUdIQyx3QkFIRyxFQUlYLHVCQUpXLEVBS1gsNEJBTFcsRUFNWCxnQ0FOVyxDQUFiO0VBUUEsTUFBTSx3QkFBSyxZQUFMLEVBQW1CSCxJQUFuQixDQUFOO0FBQ0Q7O0FBR0QsZUFBZUksb0JBQWYsR0FBdUM7RUFDckNDLGdCQUFJQyxLQUFKLENBQVUsNkJBQVY7O0VBQ0EsT0FBTyxLQUFQO0FBQ0Q7O0FBRUQsZUFBZUMsWUFBZixDQUE2QkMsVUFBN0IsRUFBeUNDLElBQUksR0FBRyxFQUFoRCxFQUFvRDtFQUNsRCxJQUFJRCxVQUFVLElBQUksQ0FBQ0UsZ0JBQUVDLFVBQUYsQ0FBYUgsVUFBVSxDQUFDSSx1QkFBeEIsQ0FBbkIsRUFBcUU7SUFDbkVKLFVBQVUsR0FBRyxJQUFJSyxtQkFBSixFQUFiO0lBQ0FKLElBQUksR0FBR0QsVUFBUDtFQUNEOztFQUVELE1BQU1NLGVBQWUsR0FBRyxNQUFNTixVQUFVLENBQUNJLHVCQUFYLEVBQTlCOztFQUNBLE1BQU1HLGFBQWEsR0FBR0MsY0FBS0MsSUFBTCxDQUFVSCxlQUFWLEVBQTJCLE9BQTNCLEVBQW9DLFVBQXBDLEVBQWdELHVCQUFoRCxFQUF5RUkseUJBQXpFLENBQXRCOztFQUNBLElBQUksTUFBTUMsWUFBR0MsTUFBSCxDQUFVTCxhQUFWLENBQVYsRUFBb0M7SUFDbEMsT0FBT0EsYUFBUDtFQUNEOztFQUNELE1BQU1YLG9CQUFvQixDQUFDSyxJQUFELENBQTFCO0VBQ0EsTUFBTVYsV0FBVyxDQUFDUyxVQUFELEVBQWFDLElBQWIsQ0FBakI7RUFDQSxPQUFPTSxhQUFQO0FBQ0QifQ==
58
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwicGF0aCIsImpvaW4iLCJXREFfUlVOTkVSX0FQUCIsImZzIiwiZXhpc3RzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBXREFfUFJPSkVDVCwgV0RBX1NDSEVNRSwgU0RLX1NJTVVMQVRPUiwgV0RBX1JVTk5FUl9BUFBcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkV0RBU2ltICgpIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLXByb2plY3QnLCBXREFfUFJPSkVDVCxcbiAgICAnLXNjaGVtZScsIFdEQV9TQ0hFTUUsXG4gICAgJy1zZGsnLCBTREtfU0lNVUxBVE9SLFxuICAgICdDT0RFX1NJR05fSURFTlRJVFk9XCJcIicsXG4gICAgJ0NPREVfU0lHTklOR19SRVFVSVJFRD1cIk5PXCInLFxuICAgICdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnLFxuICBdO1xuICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgYXJncyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvckRlcGVuZGVuY2llcyAoKSB7XG4gIGxvZy5kZWJ1ZygnRGVwZW5kZW5jaWVzIGFyZSB1cCB0byBkYXRlJyk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVuZGxlV0RBU2ltICh4Y29kZWJ1aWxkLCBvcHRzID0ge30pIHtcbiAgaWYgKHhjb2RlYnVpbGQgJiYgIV8uaXNGdW5jdGlvbih4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKSkge1xuICAgIHhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCgpO1xuICAgIG9wdHMgPSB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgeGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gcGF0aC5qb2luKGRlcml2ZWREYXRhUGF0aCwgJ0J1aWxkJywgJ1Byb2R1Y3RzJywgJ0RlYnVnLWlwaG9uZXNpbXVsYXRvcicsIFdEQV9SVU5ORVJfQVBQKTtcbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyh3ZGFCdW5kbGVQYXRoKSkge1xuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoO1xuICB9XG4gIGF3YWl0IGNoZWNrRm9yRGVwZW5kZW5jaWVzKG9wdHMpO1xuICBhd2FpdCBidWlsZFdEQVNpbSh4Y29kZWJ1aWxkLCBvcHRzKTtcbiAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG59XG5cbmV4cG9ydCB7IGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsZUFBZUEsV0FBZixHQUE4QjtFQUM1QixNQUFNQyxJQUFJLEdBQUcsQ0FDWCxVQURXLEVBQ0NDLHNCQURELEVBRVgsU0FGVyxFQUVBQyxxQkFGQSxFQUdYLE1BSFcsRUFHSEMsd0JBSEcsRUFJWCx1QkFKVyxFQUtYLDRCQUxXLEVBTVgsZ0NBTlcsQ0FBYjtFQVFBLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxZQUFMLEVBQW1CSixJQUFuQixDQUFOO0FBQ0Q7O0FBR0QsZUFBZUssb0JBQWYsR0FBdUM7RUFDckNDLGVBQUEsQ0FBSUMsS0FBSixDQUFVLDZCQUFWOztFQUNBLE9BQU8sS0FBUDtBQUNEOztBQUVELGVBQWVDLFlBQWYsQ0FBNkJDLFVBQTdCLEVBQXlDQyxJQUFJLEdBQUcsRUFBaEQsRUFBb0Q7RUFDbEQsSUFBSUQsVUFBVSxJQUFJLENBQUNFLGVBQUEsQ0FBRUMsVUFBRixDQUFhSCxVQUFVLENBQUNJLHVCQUF4QixDQUFuQixFQUFxRTtJQUNuRUosVUFBVSxHQUFHLElBQUlLLG1CQUFKLEVBQWI7SUFDQUosSUFBSSxHQUFHRCxVQUFQO0VBQ0Q7O0VBRUQsTUFBTU0sZUFBZSxHQUFHLE1BQU1OLFVBQVUsQ0FBQ0ksdUJBQVgsRUFBOUI7O0VBQ0EsTUFBTUcsYUFBYSxHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVUgsZUFBVixFQUEyQixPQUEzQixFQUFvQyxVQUFwQyxFQUFnRCx1QkFBaEQsRUFBeUVJLHlCQUF6RSxDQUF0Qjs7RUFDQSxJQUFJLE1BQU1DLFdBQUEsQ0FBR0MsTUFBSCxDQUFVTCxhQUFWLENBQVYsRUFBb0M7SUFDbEMsT0FBT0EsYUFBUDtFQUNEOztFQUNELE1BQU1YLG9CQUFvQixDQUFDSyxJQUFELENBQTFCO0VBQ0EsTUFBTVgsV0FBVyxDQUFDVSxVQUFELEVBQWFDLElBQWIsQ0FBakI7RUFDQSxPQUFPTSxhQUFQO0FBQ0QifQ==
@@ -45,4 +45,4 @@ const WDA_UPGRADE_TIMESTAMP_PATH = _path.default.join('.appium', 'webdriveragent
45
45
  exports.WDA_UPGRADE_TIMESTAMP_PATH = WDA_UPGRADE_TIMESTAMP_PATH;require('source-map-support').install();
46
46
 
47
47
 
48
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsIm5hbWVzIjpbIkJPT1RTVFJBUF9QQVRIIiwiX19kaXJuYW1lIiwiZW5kc1dpdGgiLCJwYXRoIiwicmVzb2x2ZSIsIldEQV9QUk9KRUNUIiwiam9pbiIsIldEQV9TQ1JJUFRTX1JPT1QiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIldEQV9SVU5ORVJfQVBQIiwiV0RBX1NDSEVNRSIsIlBST0pFQ1RfRklMRSIsIldEQV9CQVNFX1VSTCIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwiU0RLX1NJTVVMQVRPUiIsIlNES19ERVZJQ0UiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cblxuY29uc3QgQk9PVFNUUkFQX1BBVEggPSBfX2Rpcm5hbWUuZW5kc1dpdGgoJ2J1aWxkJylcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nKVxuICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuY29uc3QgV0RBX1BST0pFQ1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbmNvbnN0IFdEQV9TQ1JJUFRTX1JPT1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdTY3JpcHRzJyk7XG5jb25zdCBXREFfUlVOTkVSX0JVTkRMRV9JRCA9ICdjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgV0RBX1JVTk5FUl9BUFAgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyLmFwcCc7XG5jb25zdCBXREFfU0NIRU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuY29uc3QgV0RBX0JBU0VfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjEnO1xuXG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX0lPUyA9ICdpT1MnO1xuXG5jb25zdCBTREtfU0lNVUxBVE9SID0gJ2lwaG9uZXNpbXVsYXRvcic7XG5jb25zdCBTREtfREVWSUNFID0gJ2lwaG9uZW9zJztcblxuY29uc3QgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnQnLCAndXBncmFkZS50aW1lJyk7XG5cbmV4cG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFBST0pFQ1RfRklMRSxcbiAgV0RBX1BST0pFQ1QsIFdEQV9TQ0hFTUUsXG4gIFBMQVRGT1JNX05BTUVfVFZPUywgUExBVEZPUk1fTkFNRV9JT1MsXG4gIFNES19TSU1VTEFUT1IsIFNES19ERVZJQ0UsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1NDUklQVFNfUk9PVCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsY0FBYyxHQUFHQyxTQUFTLENBQUNDLFFBQVYsQ0FBbUIsT0FBbkIsSUFDbkJDLGNBQUtDLE9BQUwsQ0FBYUgsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxJQUFwQyxDQURtQixHQUVuQkUsY0FBS0MsT0FBTCxDQUFhSCxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLENBRko7OztBQUdBLE1BQU1JLFdBQVcsR0FBR0YsY0FBS0csSUFBTCxDQUFVTixjQUFWLEVBQTBCLDBCQUExQixDQUFwQjs7OztBQUNBLE1BQU1PLGdCQUFnQixHQUFHSixjQUFLRyxJQUFMLENBQVVOLGNBQVYsRUFBMEIsU0FBMUIsQ0FBekI7OztBQUNBLE1BQU1RLG9CQUFvQixHQUFHLG1DQUE3Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsaUNBQXZCOztBQUNBLE1BQU1DLFVBQVUsR0FBRyxzQkFBbkI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLGlCQUFyQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsa0JBQXJCOztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLE1BQTNCOztBQUNBLE1BQU1DLGlCQUFpQixHQUFHLEtBQTFCOztBQUVBLE1BQU1DLGFBQWEsR0FBRyxpQkFBdEI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFVBQW5COzs7QUFFQSxNQUFNQywwQkFBMEIsR0FBR2QsY0FBS0csSUFBTCxDQUFVLFNBQVYsRUFBcUIsZ0JBQXJCLEVBQXVDLGNBQXZDLENBQW5DIn0=
48
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsIm5hbWVzIjpbIkJPT1RTVFJBUF9QQVRIIiwiX19kaXJuYW1lIiwiZW5kc1dpdGgiLCJwYXRoIiwicmVzb2x2ZSIsIldEQV9QUk9KRUNUIiwiam9pbiIsIldEQV9TQ1JJUFRTX1JPT1QiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIldEQV9SVU5ORVJfQVBQIiwiV0RBX1NDSEVNRSIsIlBST0pFQ1RfRklMRSIsIldEQV9CQVNFX1VSTCIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwiU0RLX1NJTVVMQVRPUiIsIlNES19ERVZJQ0UiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cblxuY29uc3QgQk9PVFNUUkFQX1BBVEggPSBfX2Rpcm5hbWUuZW5kc1dpdGgoJ2J1aWxkJylcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nKVxuICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuY29uc3QgV0RBX1BST0pFQ1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbmNvbnN0IFdEQV9TQ1JJUFRTX1JPT1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdTY3JpcHRzJyk7XG5jb25zdCBXREFfUlVOTkVSX0JVTkRMRV9JRCA9ICdjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgV0RBX1JVTk5FUl9BUFAgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyLmFwcCc7XG5jb25zdCBXREFfU0NIRU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuY29uc3QgV0RBX0JBU0VfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjEnO1xuXG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX0lPUyA9ICdpT1MnO1xuXG5jb25zdCBTREtfU0lNVUxBVE9SID0gJ2lwaG9uZXNpbXVsYXRvcic7XG5jb25zdCBTREtfREVWSUNFID0gJ2lwaG9uZW9zJztcblxuY29uc3QgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnQnLCAndXBncmFkZS50aW1lJyk7XG5cbmV4cG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFBST0pFQ1RfRklMRSxcbiAgV0RBX1BST0pFQ1QsIFdEQV9TQ0hFTUUsXG4gIFBMQVRGT1JNX05BTUVfVFZPUywgUExBVEZPUk1fTkFNRV9JT1MsXG4gIFNES19TSU1VTEFUT1IsIFNES19ERVZJQ0UsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1NDUklQVFNfUk9PVCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsY0FBYyxHQUFHQyxTQUFTLENBQUNDLFFBQVYsQ0FBbUIsT0FBbkIsSUFDbkJDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhSCxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLElBQXBDLENBRG1CLEdBRW5CRSxhQUFBLENBQUtDLE9BQUwsQ0FBYUgsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixDQUZKOzs7QUFHQSxNQUFNSSxXQUFXLEdBQUdGLGFBQUEsQ0FBS0csSUFBTCxDQUFVTixjQUFWLEVBQTBCLDBCQUExQixDQUFwQjs7OztBQUNBLE1BQU1PLGdCQUFnQixHQUFHSixhQUFBLENBQUtHLElBQUwsQ0FBVU4sY0FBVixFQUEwQixTQUExQixDQUF6Qjs7O0FBQ0EsTUFBTVEsb0JBQW9CLEdBQUcsbUNBQTdCOztBQUNBLE1BQU1DLGNBQWMsR0FBRyxpQ0FBdkI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLHNCQUFuQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsaUJBQXJCOztBQUNBLE1BQU1DLFlBQVksR0FBRyxrQkFBckI7O0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0I7O0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsS0FBMUI7O0FBRUEsTUFBTUMsYUFBYSxHQUFHLGlCQUF0Qjs7QUFDQSxNQUFNQyxVQUFVLEdBQUcsVUFBbkI7OztBQUVBLE1BQU1DLDBCQUEwQixHQUFHZCxhQUFBLENBQUtHLElBQUwsQ0FBVSxTQUFWLEVBQXFCLGdCQUFyQixFQUF1QyxjQUF2QyxDQUFuQyJ9
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnQnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGdCQUFqQixDQUFaOztlQUVlRixHIn0=
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnQnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixnQkFBakIsQ0FBWjs7ZUFFZUYsRyJ9
@@ -314,4 +314,4 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
314
314
  }require('source-map-support').install();
315
315
 
316
316
 
317
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJzcGxpdCIsIm1hcCIsIngiLCJwYXJzZUludCIsImZpbHRlciIsIl8iLCJpc0ludGVnZXIiLCJlcnIiLCJsb2ciLCJkZWJ1ZyIsImpvaW4iLCJjb2RlIiwia2lsbEFwcFVzaW5nUGF0dGVybiIsInBncmVwUGF0dGVybiIsInNpZ25hbHMiLCJzaWduYWwiLCJtYXRjaGVkUGlkcyIsImlzRW1wdHkiLCJtZXNzYWdlIiwibGFzdCIsInBpZENoZWNrUHJvbWlzZXMiLCJwaWQiLCJ0aGVuIiwiY2F0Y2giLCJCIiwiYWxsIiwiZXZlcnkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaWduIiwiaXNUdk9TIiwicGxhdGZvcm1OYW1lIiwidG9Mb3dlciIsIlBMQVRGT1JNX05BTUVfVFZPUyIsInJlcGxhY2VJbkZpbGUiLCJmaWxlIiwiZmluZCIsInJlcGxhY2UiLCJjb250ZW50cyIsImZzIiwicmVhZEZpbGUiLCJuZXdDb250ZW50cyIsIndyaXRlRmlsZSIsInVwZGF0ZVByb2plY3RGaWxlIiwiYWdlbnRQYXRoIiwibmV3QnVuZGxlSWQiLCJwcm9qZWN0RmlsZVBhdGgiLCJjb3B5RmlsZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwid2FybiIsInJlc2V0UHJvamVjdEZpbGUiLCJleGlzdHMiLCJtdiIsInNldFJlYWxEZXZpY2VTZWN1cml0eSIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsIm9yZ0lkIiwic2lnbmluZ0lkIiwieGNjb25maWdQYXRoIiwidGVtcERpciIsInNldFhjdGVzdHJ1bkZpbGUiLCJkZXZpY2VJbmZvIiwic2RrVmVyc2lvbiIsImJvb3RzdHJhcFBhdGgiLCJ3ZGFSZW1vdGVQb3J0IiwieGN0ZXN0cnVuRmlsZVBhdGgiLCJnZXRYY3Rlc3RydW5GaWxlUGF0aCIsInhjdGVzdFJ1bkNvbnRlbnQiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwidXBkYXRlV0RBUG9ydCIsImdldEFkZGl0aW9uYWxSdW5Db250ZW50IiwibmV3WGN0ZXN0UnVuQ29udGVudCIsIm1lcmdlIiwidXBkYXRlUGxpc3RGaWxlIiwicnVubmVyIiwiRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJVU0VfUE9SVCIsInNka0Jhc2VkIiwidWRpZCIsInBsYXRmb3JtQmFzZWQiLCJwbGF0Zm9ybVZlcnNpb24iLCJmaWxlUGF0aCIsInZlcnNpb24iLCJpbmZvIiwib3JpZ2luYWxYY3Rlc3RydW5GaWxlIiwiZ2V0WGN0ZXN0cnVuRmlsZU5hbWUiLCJlcnJvckFuZFRocm93IiwiaXNSZWFsRGV2aWNlIiwia2lsbFByb2Nlc3MiLCJuYW1lIiwicHJvYyIsImlzUnVubmluZyIsInN0b3AiLCJpbmNsdWRlcyIsInJhbmRvbUludCIsImxvdyIsImhpZ2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwicGFja2FnZU1hbmlmZXN0IiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsInJlc2V0VGVzdFByb2Nlc3NlcyIsImlzU2ltdWxhdG9yIiwicHJvY2Vzc1BhdHRlcm5zIiwicHVzaCIsImdldFBJRHNMaXN0ZW5pbmdPblBvcnQiLCJwb3J0IiwiZmlsdGVyaW5nRnVuYyIsInJlc3VsdCIsInRyaW0iLCJlIiwic3RkZXJyIiwiaXNGdW5jdGlvbiJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFdEQV9SVU5ORVJfQlVORExFX0lELCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBST09UX0RJUiA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuY29uc3QgUFJPSkVDVF9GSUxFID0gJ3Byb2plY3QucGJ4cHJvaic7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNVc2luZ1BhdHRlcm4gKHBhdHRlcm4pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLWlmJywgLy8gY2FzZSBpbnNlbnNpdGl2ZSwgZnVsbCBjbWRsaW5lIG1hdGNoXG4gICAgcGF0dGVybixcbiAgXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgYXJncyk7XG4gICAgcmV0dXJuIHN0ZG91dC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKCh4KSA9PiBwYXJzZUludCh4LCAxMCkpXG4gICAgICAuZmlsdGVyKF8uaXNJbnRlZ2VyKVxuICAgICAgLm1hcCgoeCkgPT4gYCR7eH1gKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGAncGdyZXAgJHthcmdzLmpvaW4oJyAnKX0nIGRpZG4ndCBkZXRlY3QgYW55IG1hdGNoaW5nIHByb2Nlc3Nlcy4gUmV0dXJuIGNvZGU6ICR7ZXJyLmNvZGV9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxBcHBVc2luZ1BhdHRlcm4gKHBncmVwUGF0dGVybikge1xuICBjb25zdCBzaWduYWxzID0gWzIsIDE1LCA5XTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIGNvbnN0IG1hdGNoZWRQaWRzID0gYXdhaXQgZ2V0UElEc1VzaW5nUGF0dGVybihwZ3JlcFBhdHRlcm4pO1xuICAgIGlmIChfLmlzRW1wdHkobWF0Y2hlZFBpZHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBbYC0ke3NpZ25hbH1gLCAuLi5tYXRjaGVkUGlkc107XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1Zyhga2lsbCAke2FyZ3Muam9pbignICcpfSAtPiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoc2lnbmFsID09PSBfLmxhc3Qoc2lnbmFscykpIHtcbiAgICAgIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBhZnRlciBTSUdLSUxMXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGlkQ2hlY2tQcm9taXNlcyA9IG1hdGNoZWRQaWRzXG4gICAgICAgICAgLm1hcCgocGlkKSA9PiBleGVjKCdraWxsJywgWyctMCcsIHBpZF0pXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gZmFsc2UpXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBkZWFkXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gdHJ1ZSlcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gKGF3YWl0IEIuYWxsKHBpZENoZWNrUHJvbWlzZXMpKVxuICAgICAgICAgIC5ldmVyeSgoeCkgPT4geCA9PT0gdHJ1ZSk7XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogMTAwMCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyB0cnkgdGhlIG5leHQgc2lnbmFsXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbGF0b3JtXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKi9cbmZ1bmN0aW9uIGlzVHZPUyAocGxhdGZvcm1OYW1lKSB7XG4gIHJldHVybiBfLnRvTG93ZXIocGxhdGZvcm1OYW1lKSA9PT0gXy50b0xvd2VyKFBMQVRGT1JNX05BTUVfVFZPUyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VJbkZpbGUgKGZpbGUsIGZpbmQsIHJlcGxhY2UpIHtcbiAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcblxuICBsZXQgbmV3Q29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKGZpbmQsIHJlcGxhY2UpO1xuICBpZiAobmV3Q29udGVudHMgIT09IGNvbnRlbnRzKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsIG5ld0NvbnRlbnRzLCAndXRmOCcpO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHdpdGggbmV3QnVuZGxlSWQuXG4gKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHByb2plY3QgZmlsZSBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdCdW5kbGVJZCB0aGUgbmV3IGJ1bmRsZSBJRCB1c2VkIHRvIHVwZGF0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJvamVjdEZpbGUgKGFnZW50UGF0aCwgbmV3QnVuZGxlSWQpIHtcbiAgbGV0IHByb2plY3RGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gQXNzdW1pbmcgcHJvamVjdEZpbGVQYXRoIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLCBjcmVhdGUgLm9sZCBmcm9tIHByb2plY3RGaWxlUGF0aFxuICAgIGF3YWl0IGZzLmNvcHlGaWxlKHByb2plY3RGaWxlUGF0aCwgYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKTtcbiAgICBhd2FpdCByZXBsYWNlSW5GaWxlKHByb2plY3RGaWxlUGF0aCwgbmV3IFJlZ0V4cChfLmVzY2FwZVJlZ0V4cChXREFfUlVOTkVSX0JVTkRMRV9JRCksICdnJyksIG5ld0J1bmRsZUlkKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHVwZGF0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHVwZGF0ZSBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9Jy4gV2ViRHJpdmVyQWdlbnQgbWF5IG5vdCBzdGFydGApO1xuICB9XG59XG5cbi8qKlxuICogUmVzZXQgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgdG8gY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRQcm9qZWN0RmlsZSAoYWdlbnRQYXRoKSB7XG4gIGNvbnN0IHByb2plY3RGaWxlUGF0aCA9IHBhdGguam9pbihhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gcmVzdG9yZSBwcm9qZWN0RmlsZVBhdGggZnJvbSAub2xkIGZpbGVcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApKSB7XG4gICAgICByZXR1cm47IC8vIG5vIG5lZWQgdG8gcmVzZXRcbiAgICB9XG4gICAgYXdhaXQgZnMubXYoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgLCBwcm9qZWN0RmlsZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHJlc2V0ICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciByZXNldHRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfScuIFdlYkRyaXZlckFnZW50IGhhcyBiZWVuIGAgK1xuICAgICAgYG1vZGlmaWVkIGFuZCBub3QgcmV0dXJuZWQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlLmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldFJlYWxEZXZpY2VTZWN1cml0eSAoa2V5Y2hhaW5QYXRoLCBrZXljaGFpblBhc3N3b3JkKSB7XG4gIGxvZy5kZWJ1ZygnU2V0dGluZyBzZWN1cml0eSBmb3IgaU9TIGRldmljZScpO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAnbGlzdC1rZXljaGFpbnMnLCAnLXMnLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ3VubG9jay1rZXljaGFpbicsICctcCcsIGtleWNoYWluUGFzc3dvcmQsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnc2V0LWtleWNoYWluLXNldHRpbmdzJywgJy10JywgJzM2MDAnLCAnLWwnLCBrZXljaGFpblBhdGhdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUgKG9yZ0lkLCBzaWduaW5nSWQpIHtcbiAgbG9nLmRlYnVnKGBHZW5lcmF0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIGZvciBvcmdJZCAnJHtvcmdJZH0nIGFuZCBzaWduaW5nSWQgYCArXG4gICAgICAgICAgICBgJyR7c2lnbmluZ0lkfSdgKTtcbiAgY29uc3QgY29udGVudHMgPSBgREVWRUxPUE1FTlRfVEVBTSA9ICR7b3JnSWR9XG5DT0RFX1NJR05fSURFTlRJVFkgPSAke3NpZ25pbmdJZH1cbmA7XG4gIGNvbnN0IHhjY29uZmlnUGF0aCA9IGF3YWl0IHRlbXBEaXIucGF0aCgnYXBwaXVtLXRlbXAueGNjb25maWcnKTtcbiAgbG9nLmRlYnVnKGBXcml0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIHRvICR7eGNjb25maWdQYXRofWApO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoeGNjb25maWdQYXRoLCBjb250ZW50cywgJ3V0ZjgnKTtcbiAgcmV0dXJuIHhjY29uZmlnUGF0aDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERldmljZUluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpc1JlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSByZWFsIGRldmljZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1WZXJzaW9uIC0gVGhlIHBsYXRmb3JtIHZlcnNpb24gb2YgT1MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIHBsYXRmb3JtIG5hbWUgb2YgaU9TLCB0dk9TXG4qL1xuLyoqXG4gKiBDcmVhdGVzIHhjdGVzdHJ1biBmaWxlIHBlciBkZXZpY2UgJiBwbGF0Zm9ybSB2ZXJzaW9uLlxuICogV2UgZXhwZWN0cyB0byBoYXZlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogYW5kIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBsb2NhdGVkIEBib290c3RyYXBQYXRoXG4gKiBOZXdlciBYY29kZSAoWGNvZGUgMTAuMCBhdCBsZWFzdCkgZ2VuZXJhdGUgeGN0ZXN0cnVuIGZpbGUgZm9sbG93aW5nIHNka1ZlcnNpb24uXG4gKiBlLmcuIFhjb2RlIHdoaWNoIGhhcyBpT1MgU0RLIFZlcnNpb24gMTIuMiBnZW5lcmF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3IuMi14ODZfNjQueGN0ZXN0cnVuXG4gKiAgICAgIGV2ZW4gaWYgdGhlIGNhcCBoYXMgcGxhdGZvcm0gdmVyc2lvbiAxMS40XG4gKlxuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gd2RhUmVtb3RlUG9ydCAtIFRoZSByZW1vdGUgcG9ydCBXREEgaXMgbGlzdGVuaW5nIG9uLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqIEB0aHJvd3MgaWYgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBvciBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgaXMgbm90IGZvdW5kIEBib290c3RyYXBQYXRoLFxuICogdGhlbiBpdCB3aWxsIHRocm93IGZpbGUgbm90IGZvdW5kIGV4Y2VwdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRYY3Rlc3RydW5GaWxlIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCk7XG4gIGNvbnN0IHhjdGVzdFJ1bkNvbnRlbnQgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCk7XG4gIGNvbnN0IHVwZGF0ZVdEQVBvcnQgPSBnZXRBZGRpdGlvbmFsUnVuQ29udGVudChkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCk7XG4gIGNvbnN0IG5ld1hjdGVzdFJ1bkNvbnRlbnQgPSBfLm1lcmdlKHhjdGVzdFJ1bkNvbnRlbnQsIHVwZGF0ZVdEQVBvcnQpO1xuICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgsIG5ld1hjdGVzdFJ1bkNvbnRlbnQsIHRydWUpO1xuXG4gIHJldHVybiB4Y3Rlc3RydW5GaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIFdEQSBvYmplY3Qgd2hpY2ggYXBwZW5kcyBleGlzdGluZyB4Y3Rlc3QgcnVubmVyIGNvbnRlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGxhdGZvcm1cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7b2JqZWN0fSByZXR1cm5zIGEgcnVubmVyIG9iamVjdCB3aGljaCBoYXMgVVNFX1BPUlRcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQgKHBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCBydW5uZXIgPSBgV2ViRHJpdmVyQWdlbnRSdW5uZXIke2lzVHZPUyhwbGF0Zm9ybU5hbWUpID8gJ190dk9TJyA6ICcnfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBbcnVubmVyXToge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgLy8gVVNFX1BPUlQgbXVzdCBiZSAnc3RyaW5nJ1xuICAgICAgICBVU0VfUE9SVDogYCR7d2RhUmVtb3RlUG9ydH1gXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcGF0aCBvZiB4Y3Rlc3RydW4gaWYgaXQgZXhpc3RzXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZVBhdGggKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpIHtcbiAgLy8gRmlyc3QgdHJ5IHRoZSBTREsgcGF0aCwgZm9yIFhjb2RlIDEwIChhdCBsZWFzdClcbiAgY29uc3Qgc2RrQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtzZGtWZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBzZGtWZXJzaW9uLFxuICBdO1xuICAvLyBOZXh0IHRyeSBQbGF0Zm9ybSBwYXRoLCBmb3IgZWFybGllciBYY29kZSB2ZXJzaW9uc1xuICBjb25zdCBwbGF0Zm9ybUJhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7ZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIGRldmljZUluZm8ucGxhdGZvcm1WZXJzaW9uLFxuICBdO1xuXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCB2ZXJzaW9uXSBvZiBbc2RrQmFzZWQsIHBsYXRmb3JtQmFzZWRdKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlYCk7XG4gICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSA9IHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBnZXRYY3Rlc3RydW5GaWxlTmFtZShkZXZpY2VJbmZvLCB2ZXJzaW9uKSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhvcmlnaW5hbFhjdGVzdHJ1bkZpbGUpKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGZpcnN0IHRpbWUgcnVuIGZvciBnaXZlbiBkZXZpY2UsIHRoZW4gZmlyc3QgZ2VuZXJhdGUgeGN0ZXN0cnVuIGZpbGUgZm9yIGRldmljZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBhIHhjdGVzdHJ1biBmaWxlICoqcGVyIGRldmljZSoqIGJlY2F1c2Ugd2UgY2FudCBub3QgaGF2ZSBzYW1lIHdkYSBwb3J0IGZvciBhbGwgZGV2aWNlcy5cbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSwgZmlsZVBhdGgpO1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGUgY29waWVkIGJ5ICcke29yaWdpbmFsWGN0ZXN0cnVuRmlsZX0nYCk7XG4gICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgfVxuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYElmIHlvdSBhcmUgdXNpbmcgJ3VzZVhjdGVzdHJ1bkZpbGUnIGNhcGFiaWxpdHkgdGhlbiB5b3UgYCArXG4gICAgYG5lZWQgdG8gaGF2ZSBhIHhjdGVzdHJ1biBmaWxlIChleHBlY3RlZDogYCArXG4gICAgYCcke3BhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBnZXRYY3Rlc3RydW5GaWxlTmFtZShkZXZpY2VJbmZvLCBzZGtWZXJzaW9uKSl9JylgKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbmFtZSBvZiB4Y3Rlc3RydW4gZmlsZVxuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKi9cbmZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVOYW1lIChkZXZpY2VJbmZvLCB2ZXJzaW9uKSB7XG4gIHJldHVybiBpc1R2T1MoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUpXG4gICAgPyBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfdHZPU19hcHBsZXR2JHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYFxuICAgIDogYFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZSR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxQcm9jZXNzIChuYW1lLCBwcm9jKSB7XG4gIGlmICghcHJvYyB8fCAhcHJvYy5pc1J1bm5pbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2cuaW5mbyhgU2h1dHRpbmcgZG93biAnJHtuYW1lfScgcHJvY2VzcyAocGlkICcke3Byb2MucHJvYy5waWR9JylgKTtcblxuICBsb2cuaW5mbyhgU2VuZGluZyAnU0lHVEVSTScuLi5gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9jLnN0b3AoJ1NJR1RFUk0nLCAxMDAwKTtcbiAgICByZXR1cm47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoYFByb2Nlc3MgZGlkbid0IGVuZCBhZnRlcmApKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgJHtuYW1lfSBwcm9jZXNzIGRpZCBub3QgZW5kIGluIGEgdGltZWx5IGZhc2hpb246ICcke2Vyci5tZXNzYWdlfScuYCk7XG4gIH1cblxuICBsb2cuaW5mbyhgU2VuZGluZyAnU0lHS0lMTCcuLi5gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgY3VycmVudGx5IHJ1bm5pbmcnKSkge1xuICAgICAgLy8gdGhlIHByb2Nlc3MgZW5kZWQgYnV0IGZvciBzb21lIHJlYXNvbiB3ZSB3ZXJlIG5vdCBpbmZvcm1lZFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyLlxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gaW50ZWdlciBudW1iZXIgaW4gcmFuZ2UgW2xvdywgaGlnaHQpLiBgbG93YGAgaXMgaW5jbHVzaXZlIGFuZCBgaGlnaGAgaXMgZXhjbHVzaXZlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnQgKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpICsgbG93KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgV0RBIHVwZ3JhZGUgdGltZXN0YW1wXG4gKlxuICogQHJldHVybiB7P251bWJlcn0gVGhlIFVOSVggdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlIG1hbmlmZXN0LiBUaGUgbWFuaWZlc3Qgb25seSBnZXRzIG1vZGlmaWVkIG9uXG4gKiBwYWNrYWdlIHVwZ3JhZGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAgKCkge1xuICBjb25zdCBwYWNrYWdlTWFuaWZlc3QgPSBwYXRoLnJlc29sdmUoUk9PVF9ESVIsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocGFja2FnZU1hbmlmZXN0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHttdGltZX0gPSBhd2FpdCBmcy5zdGF0KHBhY2thZ2VNYW5pZmVzdCk7XG4gIHJldHVybiBtdGltZS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogS2lsbHMgcnVubmluZyBYQ1Rlc3QgcHJvY2Vzc2VzIGZvciB0aGUgcGFydGljdWxhciBkZXZpY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU2ltdWxhdG9yIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgU2ltdWxhdG9yXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0VGVzdFByb2Nlc3NlcyAodWRpZCwgaXNTaW11bGF0b3IpIHtcbiAgY29uc3QgcHJvY2Vzc1BhdHRlcm5zID0gW2B4Y29kZWJ1aWxkLioke3VkaWR9YF07XG4gIGlmIChpc1NpbXVsYXRvcikge1xuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGAke3VkaWR9LipYQ1RSdW5uZXJgKTtcbiAgICAvLyBUaGUgcGF0dGVybiB0byBmaW5kIGluIGNhc2UgaWRiIHdhcyB1c2VkXG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYHhjdGVzdC4qJHt1ZGlkfWApO1xuICB9XG4gIGxvZy5kZWJ1ZyhgS2lsbGluZyBydW5uaW5nIHByb2Nlc3NlcyAnJHtwcm9jZXNzUGF0dGVybnMuam9pbignLCAnKX0nIGZvciB0aGUgZGV2aWNlICR7dWRpZH0uLi5gKTtcbiAgYXdhaXQgQi5hbGwocHJvY2Vzc1BhdHRlcm5zLm1hcChraWxsQXBwVXNpbmdQYXR0ZXJuKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBJRHMgb2YgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiB0aGUgcGFydGljdWxhciBzeXN0ZW0gcG9ydC5cbiAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwbHkgYWRkaXRpb25hbCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlXG4gKiBwcm9jZXNzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBvcnQgLSBUaGUgcG9ydCBudW1iZXIuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZmlsdGVyaW5nRnVuYyAtIE9wdGlvbmFsIGxhbWJkYSBmdW5jdGlvbiwgd2hpY2hcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXMgY29tbWFuZCBsaW5lIHN0cmluZyBvZiB0aGUgcGFydGljdWxhciBwcm9jZXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZyBvbiBnaXZlbiBwb3J0LCBhbmQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUvZXhjbHVkZSB0aGUgY29ycmVzcG9uZGluZyBQSURcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcmVzdWx0aW5nIGFycmF5LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IC0gdGhlIGxpc3Qgb2YgbWF0Y2hlZCBwcm9jZXNzIGlkcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc0xpc3RlbmluZ09uUG9ydCAocG9ydCwgZmlsdGVyaW5nRnVuYyA9IG51bGwpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBvbmx5IHdvcmtzIHNpbmNlIE1hYyBPUyBYIEVsIENhcGl0YW5cbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2xzb2YnLCBbJy10aScsIGB0Y3A6JHtwb3J0fWBdKTtcbiAgICByZXN1bHQucHVzaCguLi4oc3Rkb3V0LnRyaW0oKS5zcGxpdCgvXFxuKy8pKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlICE9PSAxKSB7XG4gICAgICAvLyBjb2RlIDEgbWVhbnMgbm8gcHJvY2Vzc2VzLiBPdGhlciBlcnJvcnMgbmVlZCByZXBvcnRpbmdcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgZ2V0dGluZyBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHBvcnQgJyR7cG9ydH0nOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghXy5pc0Z1bmN0aW9uKGZpbHRlcmluZ0Z1bmMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gYXdhaXQgQi5maWx0ZXIocmVzdWx0LCBhc3luYyAocGlkKSA9PiB7XG4gICAgbGV0IHN0ZG91dDtcbiAgICB0cnkge1xuICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncHMnLCBbJy1wJywgcGlkLCAnLW8nLCAnY29tbWFuZCddKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gMSkge1xuICAgICAgICAvLyBUaGUgcHJvY2VzcyBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aGVyZSdzIG5vdGhpbmcgdG8gZmlsdGVyXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBmaWx0ZXJpbmdGdW5jKHN0ZG91dCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwgc2V0UmVhbERldmljZVNlY3VyaXR5LFxuICBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUsIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLFxuICBzZXRYY3Rlc3RydW5GaWxlLCBnZXRYY3Rlc3RydW5GaWxlUGF0aCwga2lsbFByb2Nlc3MsIHJhbmRvbUludCxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLFxuICBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBraWxsQXBwVXNpbmdQYXR0ZXJuLCBpc1R2T1MsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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
317
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJleGVjIiwic3BsaXQiLCJtYXAiLCJ4IiwicGFyc2VJbnQiLCJmaWx0ZXIiLCJfIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJqb2luIiwiY29kZSIsImtpbGxBcHBVc2luZ1BhdHRlcm4iLCJwZ3JlcFBhdHRlcm4iLCJzaWduYWxzIiwic2lnbmFsIiwibWF0Y2hlZFBpZHMiLCJpc0VtcHR5IiwibWVzc2FnZSIsImxhc3QiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCBwbGlzdCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IFJPT1RfRElSID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG5jb25zdCBQUk9KRUNUX0ZJTEUgPSAncHJvamVjdC5wYnhwcm9qJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc1VzaW5nUGF0dGVybiAocGF0dGVybikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctaWYnLCAvLyBjYXNlIGluc2Vuc2l0aXZlLCBmdWxsIGNtZGxpbmUgbWF0Y2hcbiAgICBwYXR0ZXJuLFxuICBdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBhcmdzKTtcbiAgICByZXR1cm4gc3Rkb3V0LnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAoKHgpID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgICAgIC5maWx0ZXIoXy5pc0ludGVnZXIpXG4gICAgICAubWFwKCh4KSA9PiBgJHt4fWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYCdwZ3JlcCAke2FyZ3Muam9pbignICcpfScgZGlkbid0IGRldGVjdCBhbnkgbWF0Y2hpbmcgcHJvY2Vzc2VzLiBSZXR1cm4gY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbEFwcFVzaW5nUGF0dGVybiAocGdyZXBQYXR0ZXJuKSB7XG4gIGNvbnN0IHNpZ25hbHMgPSBbMiwgMTUsIDldO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBzaWduYWxzKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBpZHMgPSBhd2FpdCBnZXRQSURzVXNpbmdQYXR0ZXJuKHBncmVwUGF0dGVybik7XG4gICAgaWYgKF8uaXNFbXB0eShtYXRjaGVkUGlkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IFtgLSR7c2lnbmFsfWAsIC4uLm1hdGNoZWRQaWRzXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBraWxsICR7YXJncy5qb2luKCcgJyl9IC0+ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzaWduYWwgPT09IF8ubGFzdChzaWduYWxzKSkge1xuICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGFmdGVyIFNJR0tJTExcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwaWRDaGVja1Byb21pc2VzID0gbWF0Y2hlZFBpZHNcbiAgICAgICAgICAubWFwKChwaWQpID0+IGV4ZWMoJ2tpbGwnLCBbJy0wJywgcGlkXSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIGRlYWRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgQi5hbGwocGlkQ2hlY2tQcm9taXNlcykpXG4gICAgICAgICAgLmV2ZXJ5KCh4KSA9PiB4ID09PSB0cnVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiAxMDAwLFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIHRyeSB0aGUgbmV4dCBzaWduYWxcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsYXRvcm1cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqL1xuZnVuY3Rpb24gaXNUdk9TIChwbGF0Zm9ybU5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihwbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZSAoZmlsZSwgZmluZCwgcmVwbGFjZSkge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuXG4gIGxldCBuZXdDb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoZmluZCwgcmVwbGFjZSk7XG4gIGlmIChuZXdDb250ZW50cyAhPT0gY29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMsICd1dGY4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgd2l0aCBuZXdCdW5kbGVJZC5cbiAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgcHJvamVjdCBmaWxlIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0J1bmRsZUlkIHRoZSBuZXcgYnVuZGxlIElEIHVzZWQgdG8gdXBkYXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RmlsZSAoYWdlbnRQYXRoLCBuZXdCdW5kbGVJZCkge1xuICBsZXQgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyBwcm9qZWN0RmlsZVBhdGggaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUsIGNyZWF0ZSAub2xkIGZyb20gcHJvamVjdEZpbGVQYXRoXG4gICAgYXdhaXQgZnMuY29weUZpbGUocHJvamVjdEZpbGVQYXRoLCBgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApO1xuICAgIGF3YWl0IHJlcGxhY2VJbkZpbGUocHJvamVjdEZpbGVQYXRoLCBuZXcgUmVnRXhwKF8uZXNjYXBlUmVnRXhwKFdEQV9SVU5ORVJfQlVORExFX0lEKSwgJ2cnKSwgbmV3QnVuZGxlSWQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgdXBkYXRlZCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgdXBkYXRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gdXBkYXRlIHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nLiBXZWJEcml2ZXJBZ2VudCBtYXkgbm90IHN0YXJ0YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB0byBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFByb2plY3RGaWxlIChhZ2VudFBhdGgpIHtcbiAgY29uc3QgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5qb2luKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN0b3JlIHByb2plY3RGaWxlUGF0aCBmcm9tIC5vbGQgZmlsZVxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byByZXNldFxuICAgIH1cbiAgICBhd2FpdCBmcy5tdihgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGAsIHByb2plY3RGaWxlUGF0aCk7XG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgcmVzZXQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHJlc2V0dGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9Jy4gV2ViRHJpdmVyQWdlbnQgaGFzIGJlZW4gYCArXG4gICAgICBgbW9kaWZpZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgb3JpZ2luYWwgc3RhdGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0UmVhbERldmljZVNlY3VyaXR5IChrZXljaGFpblBhdGgsIGtleWNoYWluUGFzc3dvcmQpIHtcbiAgbG9nLmRlYnVnKCdTZXR0aW5nIHNlY3VyaXR5IGZvciBpT1MgZGV2aWNlJyk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICdsaXN0LWtleWNoYWlucycsICctcycsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAndW5sb2NrLWtleWNoYWluJywgJy1wJywga2V5Y2hhaW5QYXNzd29yZCwga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWydzZXQta2V5Y2hhaW4tc2V0dGluZ3MnLCAnLXQnLCAnMzYwMCcsICctbCcsIGtleWNoYWluUGF0aF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSAob3JnSWQsIHNpZ25pbmdJZCkge1xuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgZm9yIG9yZ0lkICcke29yZ0lkfScgYW5kIHNpZ25pbmdJZCBgICtcbiAgICAgICAgICAgIGAnJHtzaWduaW5nSWR9J2ApO1xuICBjb25zdCBjb250ZW50cyA9IGBERVZFTE9QTUVOVF9URUFNID0gJHtvcmdJZH1cbkNPREVfU0lHTl9JREVOVElUWSA9ICR7c2lnbmluZ0lkfVxuYDtcbiAgY29uc3QgeGNjb25maWdQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKCdhcHBpdW0tdGVtcC54Y2NvbmZpZycpO1xuICBsb2cuZGVidWcoYFdyaXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgdG8gJHt4Y2NvbmZpZ1BhdGh9YCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh4Y2NvbmZpZ1BhdGgsIGNvbnRlbnRzLCAndXRmOCcpO1xuICByZXR1cm4geGNjb25maWdQYXRoO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzUmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybVZlcnNpb24gLSBUaGUgcGxhdGZvcm0gdmVyc2lvbiBvZiBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgcGxhdGZvcm0gbmFtZSBvZiBpT1MsIHR2T1NcbiovXG4vKipcbiAqIENyZWF0ZXMgeGN0ZXN0cnVuIGZpbGUgcGVyIGRldmljZSAmIHBsYXRmb3JtIHZlcnNpb24uXG4gKiBXZSBleHBlY3RzIHRvIGhhdmUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBhbmQgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGxvY2F0ZWQgQGJvb3RzdHJhcFBhdGhcbiAqIE5ld2VyIFhjb2RlIChYY29kZSAxMC4wIGF0IGxlYXN0KSBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb2xsb3dpbmcgc2RrVmVyc2lvbi5cbiAqIGUuZy4gWGNvZGUgd2hpY2ggaGFzIGlPUyBTREsgVmVyc2lvbiAxMi4yIGdlbmVyYXRlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvci4yLXg4Nl82NC54Y3Rlc3RydW5cbiAqICAgICAgZXZlbiBpZiB0aGUgY2FwIGhhcyBwbGF0Zm9ybSB2ZXJzaW9uIDExLjRcbiAqXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZGFSZW1vdGVQb3J0IC0gVGhlIHJlbW90ZSBwb3J0IFdEQSBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICogQHRocm93cyBpZiBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIG9yIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBpcyBub3QgZm91bmQgQGJvb3RzdHJhcFBhdGgsXG4gKiB0aGVuIGl0IHdpbGwgdGhyb3cgZmlsZSBub3QgZm91bmQgZXhjZXB0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFhjdGVzdHJ1bkZpbGUgKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgeGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBnZXRYY3Rlc3RydW5GaWxlUGF0aChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKTtcbiAgY29uc3QgeGN0ZXN0UnVuQ29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoKTtcbiAgY29uc3QgdXBkYXRlV0RBUG9ydCA9IGdldEFkZGl0aW9uYWxSdW5Db250ZW50KGRldmljZUluZm8ucGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KTtcbiAgY29uc3QgbmV3WGN0ZXN0UnVuQ29udGVudCA9IF8ubWVyZ2UoeGN0ZXN0UnVuQ29udGVudCwgdXBkYXRlV0RBUG9ydCk7XG4gIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCwgbmV3WGN0ZXN0UnVuQ29udGVudCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIHhjdGVzdHJ1bkZpbGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgV0RBIG9iamVjdCB3aGljaCBhcHBlbmRzIGV4aXN0aW5nIHhjdGVzdCBydW5uZXIgY29udGVudFxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtvYmplY3R9IHJldHVybnMgYSBydW5uZXIgb2JqZWN0IHdoaWNoIGhhcyBVU0VfUE9SVFxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCAocGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHJ1bm5lciA9IGBXZWJEcml2ZXJBZ2VudFJ1bm5lciR7aXNUdk9TKHBsYXRmb3JtTmFtZSkgPyAnX3R2T1MnIDogJyd9YDtcblxuICByZXR1cm4ge1xuICAgIFtydW5uZXJdOiB7XG4gICAgICBFbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAvLyBVU0VfUE9SVCBtdXN0IGJlICdzdHJpbmcnXG4gICAgICAgIFVTRV9QT1JUOiBgJHt3ZGFSZW1vdGVQb3J0fWBcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPUyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFF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
@@ -451,4 +451,4 @@ var _default = WebDriverAgent;
451
451
  exports.default = _default;require('source-map-support').install();
452
452
 
453
453
 
454
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwidXJsIiwicG9ydCIsImNtZExpbmUiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwidWRpZCIsImlzRW1wdHkiLCJkZWJ1ZyIsImxlbmd0aCIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImlzUnVubmluZyIsImdldFN0YXR1cyIsImJhc2VQYXRoIiwibm9TZXNzaW9uUHJveHkiLCJOb1Nlc3Npb25Qcm94eSIsInNlcnZlciIsImhvc3RuYW1lIiwiYmFzZSIsInRpbWVvdXQiLCJjb21tYW5kIiwiZXJyIiwiaHJlZiIsInVuaW5zdGFsbCIsImJ1bmRsZUlkcyIsImdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUiLCJidW5kbGVJZCIsInJlbW92ZUFwcCIsIl9jbGVhbnVwUHJvamVjdElmRnJlc2giLCJob21lRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJjdXJyZW50VXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGNvbnN0IGRpZFRpbWVzdGFtcEV4aXN0ID0gYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpO1xuICAgIGlmIChkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUF2QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLGtCQUFKLEVBQS9COztBQUVBLE1BQU1DLGNBQU4sQ0FBcUI7RUFDbkJDLFdBQVcsQ0FBRUMsWUFBRixFQUFnQkMsSUFBSSxHQUFHLEVBQXZCLEVBQTJCQyxHQUFHLEdBQUcsSUFBakMsRUFBdUM7SUFDaEQsS0FBS0YsWUFBTCxHQUFvQkEsWUFBcEI7SUFFQSxLQUFLQyxJQUFMLEdBQVlFLGdCQUFFQyxLQUFGLENBQVFILElBQVIsQ0FBWjtJQUNBLEtBQUtDLEdBQUwsR0FBV0EsR0FBWCxhQUFXQSxHQUFYLGNBQVdBLEdBQVgsR0FBa0JHLGVBQWxCO0lBRUEsS0FBS0MsTUFBTCxHQUFjTCxJQUFJLENBQUNLLE1BQW5CO0lBQ0EsS0FBS0MsZUFBTCxHQUF1Qk4sSUFBSSxDQUFDTSxlQUE1QjtJQUNBLEtBQUtDLFlBQUwsR0FBb0JQLElBQUksQ0FBQ08sWUFBekI7SUFDQSxLQUFLQyxhQUFMLEdBQXFCUixJQUFJLENBQUNRLGFBQTFCO0lBQ0EsS0FBS0MsSUFBTCxHQUFZVCxJQUFJLENBQUNTLElBQWpCO0lBQ0EsS0FBS0MsWUFBTCxHQUFvQixDQUFDLENBQUNWLElBQUksQ0FBQ1csVUFBM0I7SUFDQSxLQUFLQyxHQUFMLEdBQVcsQ0FBQ1osSUFBSSxDQUFDSyxNQUFMLElBQWUsRUFBaEIsRUFBb0JPLEdBQS9CO0lBQ0EsS0FBS0MsYUFBTCxHQUFxQmIsSUFBSSxDQUFDYSxhQUExQjtJQUVBLEtBQUtDLFdBQUwsQ0FBaUJkLElBQUksQ0FBQ2UsYUFBdEIsRUFBcUNmLElBQUksQ0FBQ2dCLFNBQTFDO0lBRUEsS0FBS0MsWUFBTCxHQUFvQmpCLElBQUksQ0FBQ2lCLFlBQXpCO0lBQ0EsS0FBS0MsYUFBTCxHQUFxQmxCLElBQUksQ0FBQ2lCLFlBQUwsSUFBcUJ4QixjQUExQztJQUNBLEtBQUswQixVQUFMLEdBQWtCbkIsSUFBSSxDQUFDbUIsVUFBTCxJQUFtQkMsdUJBQXJDO0lBRUEsS0FBS0MsV0FBTCxHQUFtQnJCLElBQUksQ0FBQ3FCLFdBQXhCO0lBRUEsS0FBS0MsaUJBQUwsR0FBeUJ0QixJQUFJLENBQUNzQixpQkFBOUI7SUFFQSxLQUFLQyxPQUFMLEdBQWUsS0FBZjtJQUVBLEtBQUtDLG9CQUFMLEdBQTRCeEIsSUFBSSxDQUFDd0Isb0JBQWpDO0lBRUEsS0FBS0MsZ0JBQUwsR0FBd0J6QixJQUFJLENBQUN5QixnQkFBN0I7SUFDQSxLQUFLQyxjQUFMLEdBQXNCMUIsSUFBSSxDQUFDMEIsY0FBM0I7SUFDQSxLQUFLQyxlQUFMLEdBQXVCM0IsSUFBSSxDQUFDMkIsZUFBNUI7SUFDQSxLQUFLQyxlQUFMLEdBQXVCNUIsSUFBSSxDQUFDNEIsZUFBNUI7SUFFQSxLQUFLQyxrQkFBTCxHQUEwQjdCLElBQUksQ0FBQzZCLGtCQUEvQjtJQUVBLEtBQUtDLFVBQUwsR0FBa0IsSUFBSUMsbUJBQUosQ0FBZSxLQUFLaEMsWUFBcEIsRUFBa0MsS0FBS00sTUFBdkMsRUFBK0M7TUFDL0RDLGVBQWUsRUFBRSxLQUFLQSxlQUR5QztNQUUvREMsWUFBWSxFQUFFLEtBQUtBLFlBRjRDO01BRy9EQyxhQUFhLEVBQUUsS0FBS0EsYUFIMkM7TUFJL0RRLFNBQVMsRUFBRSxLQUFLQSxTQUorQztNQUsvREQsYUFBYSxFQUFFLEtBQUtBLGFBTDJDO01BTS9ESixVQUFVLEVBQUUsS0FBS0QsWUFOOEM7TUFPL0RzQixZQUFZLEVBQUVoQyxJQUFJLENBQUNnQyxZQVA0QztNQVEvREMsZUFBZSxFQUFFakMsSUFBSSxDQUFDaUMsZUFSeUM7TUFTL0RDLFVBQVUsRUFBRWxDLElBQUksQ0FBQ2tDLFVBVDhDO01BVS9EQyxjQUFjLEVBQUVuQyxJQUFJLENBQUNtQyxjQVYwQztNQVcvREMsWUFBWSxFQUFFcEMsSUFBSSxDQUFDb0MsWUFYNEM7TUFZL0RDLGdCQUFnQixFQUFFckMsSUFBSSxDQUFDcUMsZ0JBWndDO01BYS9EQyxrQkFBa0IsRUFBRXRDLElBQUksQ0FBQ3NDLGtCQWJzQztNQWMvRFosY0FBYyxFQUFFMUIsSUFBSSxDQUFDMEIsY0FkMEM7TUFlL0RHLGtCQUFrQixFQUFFLEtBQUtBLGtCQWZzQztNQWdCL0RVLGFBQWEsRUFBRXZDLElBQUksQ0FBQ3dDLGdCQUFMLElBQXlCaEQsa0JBaEJ1QjtNQWlCL0QwQixhQUFhLEVBQUUsS0FBS0EsYUFqQjJDO01Ba0IvRE8sZ0JBQWdCLEVBQUUsS0FBS0EsZ0JBbEJ3QztNQW1CL0RFLGVBQWUsRUFBRTNCLElBQUksQ0FBQzJCLGVBbkJ5QztNQW9CL0RDLGVBQWUsRUFBRSxLQUFLQSxlQXBCeUM7TUFxQi9EYSxtQ0FBbUMsRUFBRXpDLElBQUksQ0FBQ3lDLG1DQXJCcUI7TUFzQi9EQyxnQkFBZ0IsRUFBRTFDLElBQUksQ0FBQzBDLGdCQXRCd0M7TUF1Qi9EQyxtQkFBbUIsRUFBRTNDLElBQUksQ0FBQzJDO0lBdkJxQyxDQUEvQyxFQXdCZixLQUFLMUMsR0F4QlUsQ0FBbEI7RUF5QkQ7O0VBRURhLFdBQVcsQ0FBRUMsYUFBRixFQUFpQkMsU0FBakIsRUFBNEI7SUFHckMsS0FBS0QsYUFBTCxHQUFxQkEsYUFBYSxJQUFJNkIseUJBQXRDO0lBQ0EsS0FBSzNDLEdBQUwsQ0FBUzRDLElBQVQsQ0FBZSxvQkFBbUIsS0FBSzlCLGFBQWMsR0FBckQ7SUFHQSxLQUFLQyxTQUFMLEdBQWlCQSxTQUFTLElBQUk4QixjQUFLQyxPQUFMLENBQWEsS0FBS2hDLGFBQWxCLEVBQWlDLDBCQUFqQyxDQUE5QjtJQUNBLEtBQUtkLEdBQUwsQ0FBUzRDLElBQVQsQ0FBZSxxQkFBb0IsS0FBSzdCLFNBQVUsR0FBbEQ7RUFDRDs7RUFFNkIsTUFBeEJnQyx3QkFBd0IsR0FBSTtJQUNoQyxNQUFNQyxZQUFZLEdBQUcsTUFBTSxtQ0FBdUIsS0FBS0MsR0FBTCxDQUFTQyxJQUFoQyxFQUN4QkMsT0FBRCxJQUFhQSxPQUFPLENBQUNDLFFBQVIsQ0FBaUIsdUJBQWpCLEtBQ1gsQ0FBQ0QsT0FBTyxDQUFDRSxXQUFSLEdBQXNCRCxRQUF0QixDQUErQixLQUFLaEQsTUFBTCxDQUFZa0QsSUFBWixDQUFpQkQsV0FBakIsRUFBL0IsQ0FGc0IsQ0FBM0I7O0lBSUEsSUFBSXBELGdCQUFFc0QsT0FBRixDQUFVUCxZQUFWLENBQUosRUFBNkI7TUFDM0IsS0FBS2hELEdBQUwsQ0FBU3dELEtBQVQsQ0FBZ0IsMERBQUQsR0FDWixxQkFBb0IsS0FBS1AsR0FBTCxDQUFTQyxJQUFLLGtCQURyQztNQUVBO0lBQ0Q7O0lBRUQsS0FBS2xELEdBQUwsQ0FBUzRDLElBQVQsQ0FBZSxZQUFXSSxZQUFZLENBQUNTLE1BQU8sMkJBQTBCVCxZQUFZLENBQUNTLE1BQWIsS0FBd0IsQ0FBeEIsR0FBNEIsRUFBNUIsR0FBaUMsSUFBSyxHQUFoRyxHQUNYLDhDQURIOztJQUVBLElBQUk7TUFDRixNQUFNLHdCQUFLLE1BQUwsRUFBYVQsWUFBYixDQUFOO0lBQ0QsQ0FGRCxDQUVFLE9BQU9VLENBQVAsRUFBVTtNQUNWLEtBQUsxRCxHQUFMLENBQVMyRCxJQUFULENBQWUseUNBQXdDWCxZQUFZLENBQUNTLE1BQWIsS0FBd0IsQ0FBeEIsR0FBNEIsRUFBNUIsR0FBaUMsSUFBSyxLQUFJVCxZQUFhLEtBQWhHLEdBQ1gsbUJBQWtCVSxDQUFDLENBQUNFLE9BQVEsRUFEL0I7SUFFRDtFQUNGOztFQU9jLE1BQVRDLFNBQVMsR0FBSTtJQUNqQixPQUFPLENBQUMsRUFBRSxNQUFNLEtBQUtDLFNBQUwsRUFBUixDQUFSO0VBQ0Q7O0VBRVcsSUFBUkMsUUFBUSxHQUFJO0lBQ2QsSUFBSSxLQUFLZCxHQUFMLENBQVNKLElBQVQsS0FBa0IsR0FBdEIsRUFBMkI7TUFDekIsT0FBTyxFQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxLQUFLSSxHQUFMLENBQVNKLElBQVQsSUFBaUIsRUFBeEI7RUFDRDs7RUF3QmMsTUFBVGlCLFNBQVMsR0FBSTtJQUNqQixNQUFNRSxjQUFjLEdBQUcsSUFBSUMsOEJBQUosQ0FBbUI7TUFDeENDLE1BQU0sRUFBRSxLQUFLakIsR0FBTCxDQUFTa0IsUUFEdUI7TUFFeENqQixJQUFJLEVBQUUsS0FBS0QsR0FBTCxDQUFTQyxJQUZ5QjtNQUd4Q2tCLElBQUksRUFBRSxLQUFLTCxRQUg2QjtNQUl4Q00sT0FBTyxFQUFFO0lBSitCLENBQW5CLENBQXZCOztJQU1BLElBQUk7TUFDRixPQUFPLE1BQU1MLGNBQWMsQ0FBQ00sT0FBZixDQUF1QixTQUF2QixFQUFrQyxLQUFsQyxDQUFiO0lBQ0QsQ0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtNQUNaLEtBQUt2RSxHQUFMLENBQVN3RCxLQUFULENBQWdCLDRCQUEyQixLQUFLUCxHQUFMLENBQVN1QixJQUFLLEdBQXpEO01BQ0EsT0FBTyxJQUFQO0lBQ0Q7RUFDRjs7RUFPYyxNQUFUQyxTQUFTLEdBQUk7SUFDakIsSUFBSTtNQUNGLE1BQU1DLFNBQVMsR0FBRyxNQUFNLEtBQUt0RSxNQUFMLENBQVl1RSxxQ0FBWixDQUFrRGxGLGtCQUFsRCxDQUF4Qjs7TUFDQSxJQUFJUSxnQkFBRXNELE9BQUYsQ0FBVW1CLFNBQVYsQ0FBSixFQUEwQjtRQUN4QixLQUFLMUUsR0FBTCxDQUFTd0QsS0FBVCxDQUFlLHdCQUFmO1FBQ0E7TUFDRDs7TUFFRCxLQUFLeEQsR0FBTCxDQUFTd0QsS0FBVCxDQUFnQix1QkFBc0JrQixTQUFVLEdBQWhEOztNQUNBLEtBQUssTUFBTUUsUUFBWCxJQUF1QkYsU0FBdkIsRUFBa0M7UUFDaEMsTUFBTSxLQUFLdEUsTUFBTCxDQUFZeUUsU0FBWixDQUFzQkQsUUFBdEIsQ0FBTjtNQUNEO0lBQ0YsQ0FYRCxDQVdFLE9BQU9sQixDQUFQLEVBQVU7TUFDVixLQUFLMUQsR0FBTCxDQUFTd0QsS0FBVCxDQUFlRSxDQUFmO01BQ0EsS0FBSzFELEdBQUwsQ0FBUzJELElBQVQsQ0FBZSx1RUFBRCxHQUNYLG1CQUFrQkQsQ0FBQyxDQUFDRSxPQUFRLEVBRC9CO0lBRUQ7RUFDRjs7RUFFMkIsTUFBdEJrQixzQkFBc0IsR0FBSTtJQUM5QixNQUFNQyxVQUFVLEdBQUdDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxJQUEvQjs7SUFDQSxJQUFJLENBQUNILFVBQUwsRUFBaUI7TUFDZixLQUFLL0UsR0FBTCxDQUFTNEMsSUFBVCxDQUFjLDJDQUFkO01BQ0E7SUFDRDs7SUFFRCxNQUFNdUMsdUJBQXVCLEdBQUcsTUFBTSxvQ0FBdEM7O0lBQ0EsSUFBSSxDQUFDbEYsZ0JBQUVtRixTQUFGLENBQVlELHVCQUFaLENBQUwsRUFBMkM7TUFDekMsS0FBS25GLEdBQUwsQ0FBUzRDLElBQVQsQ0FBYyw0REFBZDtNQUNBO0lBQ0Q7O0lBRUQsTUFBTXlDLGFBQWEsR0FBR3hDLGNBQUtDLE9BQUwsQ0FBYWlDLFVBQWIsRUFBeUJPLHFDQUF6QixDQUF0Qjs7SUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxNQUFNQyxZQUFHQyxNQUFILENBQVVKLGFBQVYsQ0FBaEM7O0lBQ0EsSUFBSUUsaUJBQUosRUFBdUI7TUFDckIsSUFBSTtRQUNGLE1BQU1DLFlBQUdFLE1BQUgsQ0FBVUwsYUFBVixFQUF5QkcsWUFBR0csSUFBNUIsQ0FBTjtNQUNELENBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7UUFDWixLQUFLNUYsR0FBTCxDQUFTNEMsSUFBVCxDQUFlLHdDQUF1Q3lDLGFBQWMsc0JBQXRELEdBQ1gsMEJBREg7UUFFQTtNQUNEOztNQUNELE1BQU1RLHNCQUFzQixHQUFHQyxRQUFRLENBQUMsTUFBTU4sWUFBR08sUUFBSCxDQUFZVixhQUFaLEVBQTJCLE1BQTNCLENBQVAsRUFBMkMsRUFBM0MsQ0FBdkM7O01BQ0EsSUFBSXBGLGdCQUFFbUYsU0FBRixDQUFZUyxzQkFBWixDQUFKLEVBQXlDO1FBQ3ZDLElBQUlBLHNCQUFzQixJQUFJVix1QkFBOUIsRUFBdUQ7VUFDckQsS0FBS25GLEdBQUwsQ0FBUzRDLElBQVQsQ0FBZSxxRUFBRCxHQUNYLElBQUdpRCxzQkFBdUIsT0FBTVYsdUJBQXdCLEdBRDNEO1VBRUE7UUFDRDs7UUFDRCxLQUFLbkYsR0FBTCxDQUFTNEMsSUFBVCxDQUFlLDRDQUFELEdBQ1gsSUFBR2lELHNCQUF1QixNQUFLVix1QkFBd0IsR0FEMUQ7TUFFRCxDQVJELE1BUU87UUFDTCxLQUFLbkYsR0FBTCxDQUFTMkQsSUFBVCxDQUFlLG9DQUFtQzBCLGFBQWMsa0NBQWhFO01BQ0Q7SUFDRjs7SUFFRCxJQUFJO01BQ0YsTUFBTSxxQkFBT3hDLGNBQUttRCxPQUFMLENBQWFYLGFBQWIsQ0FBUCxDQUFOO01BQ0EsTUFBTUcsWUFBR1MsU0FBSCxDQUFhWixhQUFiLEVBQTZCLEdBQUVGLHVCQUF3QixFQUF2RCxFQUEwRCxNQUExRCxDQUFOO01BQ0EsS0FBS25GLEdBQUwsQ0FBU3dELEtBQVQsQ0FBZ0Isc0RBQXFEMkIsdUJBQXdCLEdBQTlFLEdBQ1osT0FBTUUsYUFBYyxHQUR2QjtJQUVELENBTEQsQ0FLRSxPQUFPM0IsQ0FBUCxFQUFVO01BQ1YsS0FBSzFELEdBQUwsQ0FBUzRDLElBQVQsQ0FBZSxvRUFBbUV5QyxhQUFjLEtBQWxGLEdBQ1gsbUJBQWtCM0IsQ0FBQyxDQUFDRSxPQUFRLEVBRC9CO01BRUE7SUFDRDs7SUFFRCxJQUFJLENBQUMyQixpQkFBTCxFQUF3QjtNQUN0QixLQUFLdkYsR0FBTCxDQUFTNEMsSUFBVCxDQUFjLG9GQUFkO01BQ0E7SUFDRDs7SUFFRCxJQUFJO01BQ0YsTUFBTSxLQUFLZixVQUFMLENBQWdCcUUsWUFBaEIsRUFBTjtJQUNELENBRkQsQ0FFRSxPQUFPeEMsQ0FBUCxFQUFVO01BQ1YsS0FBSzFELEdBQUwsQ0FBUzJELElBQVQsQ0FBZSxrRUFBaUVELENBQUMsQ0FBQ0UsT0FBUSxFQUExRjtJQUNEO0VBQ0Y7O0VBeUJXLE1BQU51QyxNQUFNLENBQUVDLFNBQUYsRUFBYTtJQUN2QixJQUFJLEtBQUsvRSxpQkFBVCxFQUE0QjtNQUMxQixLQUFLckIsR0FBTCxDQUFTNEMsSUFBVCxDQUFlLHFDQUFvQyxLQUFLdkIsaUJBQWtCLEdBQTFFO01BQ0EsS0FBSzRCLEdBQUwsR0FBVyxLQUFLNUIsaUJBQWhCO01BQ0EsS0FBS2dGLFlBQUwsQ0FBa0JELFNBQWxCO01BQ0EsT0FBTyxNQUFNLEtBQUt0QyxTQUFMLEVBQWI7SUFDRDs7SUFFRCxLQUFLOUQsR0FBTCxDQUFTNEMsSUFBVCxDQUFjLHdDQUFkO0lBRUEsS0FBS3lELFlBQUwsQ0FBa0JELFNBQWxCOztJQUVBLElBQUksQ0FBQyxLQUFLNUUsZ0JBQU4sSUFBMEIsRUFBQyxNQUFNZ0UsWUFBR0MsTUFBSCxDQUFVLEtBQUsxRSxTQUFmLENBQVAsQ0FBOUIsRUFBZ0U7TUFDOUQsTUFBTSxJQUFJdUYsS0FBSixDQUFXLDRDQUEyQyxLQUFLdkYsU0FBVSxZQUEzRCxHQUNBLHFCQURWLENBQU47SUFFRDs7SUFJRCxJQUFJLEtBQUtKLEdBQUwsSUFBWSxLQUFLYSxnQkFBakIsSUFBc0MsS0FBS0UsZUFBTCxJQUF3QixLQUFLRCxjQUF2RSxFQUF3RjtNQUN0RixLQUFLekIsR0FBTCxDQUFTNEMsSUFBVCxDQUFjLG9FQUFkO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsTUFBTTJELGtCQUFrQixHQUFHMUQsY0FBSzJELFNBQUwsQ0FBZSxLQUFLMUYsYUFBcEIsQ0FBM0I7O01BQ0EsTUFBTXBCLHNCQUFzQixDQUFDK0csT0FBdkIsQ0FBK0JGLGtCQUEvQixFQUNKLFlBQVksTUFBTSxLQUFLekIsc0JBQUwsRUFEZCxDQUFOO0lBRUQ7O0lBR0QsTUFBTSwrQkFBbUIsS0FBSzFFLE1BQUwsQ0FBWWtELElBQS9CLEVBQXFDLENBQUMsS0FBSzdDLFlBQTNDLENBQU47O0lBRUEsSUFBSSxLQUFLRSxHQUFULEVBQWM7TUFDWixPQUFPLE1BQU0sS0FBSytGLFlBQUwsRUFBYjtJQUNEOztJQUVELE1BQU0sS0FBSzdFLFVBQUwsQ0FBZ0I4RSxJQUFoQixDQUFxQixLQUFLM0MsY0FBMUIsQ0FBTjs7SUFHQSxJQUFJLEtBQUs1QyxXQUFULEVBQXNCO01BQ3BCLE1BQU0sS0FBS1MsVUFBTCxDQUFnQitFLFFBQWhCLEVBQU47SUFDRDs7SUFDRCxPQUFPLE1BQU0sS0FBSy9FLFVBQUwsQ0FBZ0JnRixLQUFoQixFQUFiO0VBQ0Q7O0VBRWlCLE1BQVpILFlBQVksR0FBSTtJQUNwQixLQUFLMUcsR0FBTCxDQUFTNEMsSUFBVCxDQUFjLHdGQUFkO0lBQ0EsTUFBTTtNQUFDa0UsV0FBRDtNQUFjQztJQUFkLElBQThCLE1BQU0sS0FBS0MsVUFBTCxFQUExQztJQUNBLE1BQU0vQixHQUFHLEdBQUc7TUFDVmdDLFFBQVEsRUFBRSxLQUFLaEcsYUFETDtNQUVWaUcsNkJBQTZCLEVBQUUsS0FBS3RGO0lBRjFCLENBQVo7O0lBSUEsSUFBSSxLQUFLRCxlQUFULEVBQTBCO01BQ3hCc0QsR0FBRyxDQUFDa0MsaUJBQUosR0FBd0IsS0FBS3hGLGVBQTdCO0lBQ0Q7O0lBRUQsT0FBTyxNQUFNLEtBQUtoQixHQUFMLENBQVN5RyxXQUFULENBQXFCTixXQUFyQixFQUFrQ0EsV0FBbEMsRUFBK0NDLFlBQS9DLEVBQTZEO01BQUM5QjtJQUFELENBQTdELENBQWI7RUFDRDs7RUFFa0IsTUFBYm9DLGFBQWEsQ0FBRXpHLGFBQUYsRUFBaUI7SUFDbEMsTUFBTTBHLGFBQWEsR0FBR3pFLGNBQUswRSxJQUFMLENBQVUzRyxhQUFWLEVBQXlCLFlBQXpCLENBQXRCOztJQUNBLE1BQU00RyxTQUFTLEdBQUcsTUFBTUMsZUFBTUMsVUFBTixDQUFpQixNQUFNbEMsWUFBR08sUUFBSCxDQUFZdUIsYUFBWixDQUF2QixDQUF4Qjs7SUFDQSxJQUFJLENBQUNFLFNBQVMsQ0FBQ0csa0JBQWYsRUFBbUM7TUFDakMsTUFBTSxJQUFJckIsS0FBSixDQUFXLGdDQUErQmdCLGFBQWMsR0FBeEQsQ0FBTjtJQUNEOztJQUNELE9BQU9FLFNBQVMsQ0FBQ0csa0JBQWpCO0VBQ0Q7O0VBRWUsTUFBVlgsVUFBVSxHQUFJO0lBQ2xCLE1BQU1wRyxhQUFhLEdBQUcsS0FBS0EsYUFBTCxLQUFzQixNQUFNLEtBQUtnSCxjQUFMLEVBQTVCLENBQXRCO0lBQ0EsTUFBTWQsV0FBVyxHQUFHLE1BQU0sS0FBS08sYUFBTCxDQUFtQnpHLGFBQW5CLENBQTFCOztJQUNBLElBQUksRUFBQyxNQUFNLEtBQUtSLE1BQUwsQ0FBWXlILGNBQVosQ0FBMkJmLFdBQTNCLENBQVAsQ0FBSixFQUFvRDtNQUNsRCxNQUFNLEtBQUsxRyxNQUFMLENBQVkwSCxVQUFaLENBQXVCbEgsYUFBdkIsQ0FBTjtJQUNEOztJQUNELE1BQU1tRyxZQUFZLEdBQUcsTUFBTSxLQUFLcEcsR0FBTCxDQUFTb0gsbUJBQVQsQ0FBNkJsRixjQUFLMEUsSUFBTCxDQUFVM0csYUFBVixFQUF5QixTQUF6QixFQUFvQyw2QkFBcEMsQ0FBN0IsQ0FBM0I7SUFDQSxPQUFPO01BQUNrRyxXQUFEO01BQWNDLFlBQWQ7TUFBNEJuRztJQUE1QixDQUFQO0VBQ0Q7O0VBRW1CLE1BQWRnSCxjQUFjLEdBQUk7SUFDdEIsSUFBSSxDQUFDLEtBQUtsRyxlQUFWLEVBQTJCO01BQ3pCLE9BQU8sTUFBTSxxQ0FBYSxLQUFLRyxVQUFsQixDQUFiO0lBQ0Q7O0lBQ0QsTUFBTW1HLGNBQWMsR0FBRyxNQUFNeEMsWUFBR3lDLElBQUgsQ0FBUyxHQUFFLEtBQUt2RyxlQUFnQixRQUFPd0cseUJBQWUsR0FBdEQsRUFBMEQ7TUFDckZDLFFBQVEsRUFBRTtJQUQyRSxDQUExRCxDQUE3Qjs7SUFHQSxJQUFJbEksZ0JBQUVzRCxPQUFGLENBQVV5RSxjQUFWLENBQUosRUFBK0I7TUFDN0IsTUFBTSxJQUFJMUIsS0FBSixDQUFXLHFDQUFvQyxLQUFLNUUsZUFBZ0IsR0FBcEUsQ0FBTjtJQUNEOztJQUNELE9BQU9zRyxjQUFjLENBQUMsQ0FBRCxDQUFyQjtFQUNEOztFQUVrQixNQUFiSSxhQUFhLEdBQUk7SUFDckIsTUFBTUMsY0FBYyxHQUFHLENBQ3JCLFdBRHFCLEVBRXBCLFlBQVd4RixjQUFLeUYsR0FBSSx1QkFGQSxFQUdyQkMsR0FIcUIsQ0FHaEJDLE9BQUQsSUFBYWhELFlBQUdDLE1BQUgsQ0FBVTVDLGNBQUtDLE9BQUwsQ0FBYSxLQUFLaEMsYUFBbEIsRUFBaUMwSCxPQUFqQyxDQUFWLENBSEksQ0FBdkI7SUFJQSxPQUFPLENBQUMsTUFBTUMsa0JBQUVDLEdBQUYsQ0FBTUwsY0FBTixDQUFQLEVBQThCTSxJQUE5QixDQUFvQ0MsQ0FBRCxJQUFPQSxDQUFDLEtBQUssS0FBaEQsQ0FBUDtFQUNEOztFQUVEdkMsWUFBWSxDQUFFRCxTQUFGLEVBQWE7SUFDdkIsTUFBTXlDLFNBQVMsR0FBRztNQUNoQjdJLEdBQUcsRUFBRSxLQUFLQSxHQURNO01BRWhCa0UsTUFBTSxFQUFFLEtBQUtqQixHQUFMLENBQVNrQixRQUZEO01BR2hCakIsSUFBSSxFQUFFLEtBQUtELEdBQUwsQ0FBU0MsSUFIQztNQUloQmtCLElBQUksRUFBRSxLQUFLTCxRQUpLO01BS2hCTSxPQUFPLEVBQUUsS0FBSzlDLG9CQUxFO01BTWhCdUgsU0FBUyxFQUFFO0lBTkssQ0FBbEI7SUFTQSxLQUFLQyxPQUFMLEdBQWUsSUFBSUMsbUJBQUosQ0FBWUgsU0FBWixDQUFmO0lBQ0EsS0FBS0UsT0FBTCxDQUFhM0MsU0FBYixHQUF5QkEsU0FBekI7SUFDQSxLQUFLNkMsV0FBTCxHQUFtQixLQUFLRixPQUFMLENBQWFFLFdBQWIsQ0FBeUJDLElBQXpCLENBQThCLEtBQUtILE9BQW5DLENBQW5CO0lBRUEsS0FBSy9FLGNBQUwsR0FBc0IsSUFBSUMsOEJBQUosQ0FBbUI0RSxTQUFuQixDQUF0QjtFQUNEOztFQUVTLE1BQUpNLElBQUksR0FBSTtJQUNaLEtBQUtuSixHQUFMLENBQVM0QyxJQUFULENBQWMsNkJBQWQ7SUFFQSxNQUFNLEtBQUtmLFVBQUwsQ0FBZ0JzSCxJQUFoQixFQUFOO0lBQ0EsTUFBTSxLQUFLdEgsVUFBTCxDQUFnQnVILEtBQWhCLEVBQU47O0lBRUEsSUFBSSxLQUFLTCxPQUFULEVBQWtCO01BQ2hCLEtBQUtBLE9BQUwsQ0FBYTNDLFNBQWIsR0FBeUIsSUFBekI7SUFDRDs7SUFFRCxLQUFLOUUsT0FBTCxHQUFlLEtBQWY7O0lBRUEsSUFBSSxDQUFDLEtBQUt2QixJQUFMLENBQVVzQixpQkFBZixFQUFrQztNQUdoQyxLQUFLQSxpQkFBTCxHQUF5QixJQUF6QjtJQUNEO0VBQ0Y7O0VBRU0sSUFBSDRCLEdBQUcsR0FBSTtJQUNULElBQUksQ0FBQyxLQUFLb0csSUFBVixFQUFnQjtNQUNkLElBQUksS0FBS2hJLGlCQUFULEVBQTRCO1FBQzFCLEtBQUtnSSxJQUFMLEdBQVlwRyxjQUFJcUcsS0FBSixDQUFVLEtBQUtqSSxpQkFBZixDQUFaO01BQ0QsQ0FGRCxNQUVPO1FBQ0wsTUFBTTZCLElBQUksR0FBRyxLQUFLbEMsWUFBTCxJQUFxQnhCLGNBQWxDOztRQUNBLE1BQU07VUFBQytKLFFBQUQ7VUFBV3BGO1FBQVgsSUFBdUJsQixjQUFJcUcsS0FBSixDQUFVLEtBQUtwSSxVQUFMLElBQW1CQyx1QkFBN0IsQ0FBN0I7O1FBQ0EsS0FBS2tJLElBQUwsR0FBWXBHLGNBQUlxRyxLQUFKLENBQVcsR0FBRUMsUUFBUyxLQUFJcEYsUUFBUyxJQUFHakIsSUFBSyxFQUEzQyxDQUFaO01BQ0Q7SUFDRjs7SUFDRCxPQUFPLEtBQUttRyxJQUFaO0VBQ0Q7O0VBRU0sSUFBSHBHLEdBQUcsQ0FBRW9HLElBQUYsRUFBUTtJQUNiLEtBQUtBLElBQUwsR0FBWXBHLGNBQUlxRyxLQUFKLENBQVVELElBQVYsQ0FBWjtFQUNEOztFQUVlLElBQVpHLFlBQVksR0FBSTtJQUNsQixPQUFPLEtBQUtsSSxPQUFaO0VBQ0Q7O0VBRWUsSUFBWmtJLFlBQVksQ0FBRWxJLE9BQU8sR0FBRyxLQUFaLEVBQW1CO0lBQ2pDLEtBQUtBLE9BQUwsR0FBZUEsT0FBZjtFQUNEOztFQUU0QixNQUF2Qm1JLHVCQUF1QixHQUFJO0lBQy9CLE9BQU8sTUFBTSxLQUFLNUgsVUFBTCxDQUFnQjRILHVCQUFoQixFQUFiO0VBQ0Q7O0VBU2lCLE1BQVpDLFlBQVksR0FBSTtJQUNwQixNQUFNQyxNQUFNLEdBQUcsTUFBTSxLQUFLN0YsU0FBTCxFQUFyQjs7SUFDQSxJQUFJLENBQUM2RixNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxLQUF2QixFQUE4QjtNQUM1QixLQUFLNUosR0FBTCxDQUFTd0QsS0FBVCxDQUFlLHlEQUFmO01BQ0E7SUFDRDs7SUFFRCxNQUFNO01BQ0pxRyx1QkFESTtNQUVKQztJQUZJLElBR0ZILE1BQU0sQ0FBQ0MsS0FIWDs7SUFLQSxJQUFJRyxjQUFLQyxRQUFMLENBQWNILHVCQUFkLEtBQTBDRSxjQUFLQyxRQUFMLENBQWMsS0FBS3BJLGtCQUFuQixDQUExQyxJQUFvRixLQUFLQSxrQkFBTCxLQUE0QmlJLHVCQUFwSCxFQUE2STtNQUMzSSxLQUFLN0osR0FBTCxDQUFTNEMsSUFBVCxDQUFlLHFGQUFvRmlILHVCQUF3QixJQUEzSDtNQUNBLE9BQU8sTUFBTSxLQUFLcEYsU0FBTCxFQUFiO0lBQ0Q7O0lBRUQsSUFBSXNGLGNBQUtDLFFBQUwsQ0FBY0gsdUJBQWQsS0FBMEMsQ0FBQ0UsY0FBS0MsUUFBTCxDQUFjLEtBQUtwSSxrQkFBbkIsQ0FBM0MsSUFBcUZxSSxvQ0FBeUJKLHVCQUFsSCxFQUEySTtNQUN6SSxLQUFLN0osR0FBTCxDQUFTNEMsSUFBVCxDQUFlLG9GQUFtRnFILCtCQUFxQixFQUF2SDtNQUNBLE9BQU8sTUFBTSxLQUFLeEYsU0FBTCxFQUFiO0lBQ0Q7O0lBRUQsTUFBTXlGLHNCQUFzQixHQUFHLE1BQU0sb0NBQXJDO0lBQ0EsS0FBS2xLLEdBQUwsQ0FBU3dELEtBQVQsQ0FBZ0IsbURBQWtEMEcsc0JBQXVCLEVBQXpGO0lBQ0EsS0FBS2xLLEdBQUwsQ0FBU3dELEtBQVQsQ0FBZ0IsK0NBQThDc0csVUFBVyxFQUF6RTs7SUFDQSxJQUFJSSxzQkFBc0IsSUFBSUosVUFBMUIsSUFBd0M3SixnQkFBRWtLLE9BQUYsQ0FBVyxHQUFFRCxzQkFBdUIsRUFBcEMsTUFBMkNqSyxnQkFBRWtLLE9BQUYsQ0FBVyxHQUFFTCxVQUFXLEVBQXhCLENBQXZGLEVBQW1IO01BQ2pILEtBQUs5SixHQUFMLENBQVM0QyxJQUFULENBQWMsd0ZBQ1gsd0RBQXVEc0gsc0JBQXVCLE9BQU1KLFVBQVcsR0FEbEc7TUFFQSxPQUFPLE1BQU0sS0FBS3JGLFNBQUwsRUFBYjtJQUNEOztJQUVELE1BQU1iLE9BQU8sR0FBR21HLGNBQUtDLFFBQUwsQ0FBY0gsdUJBQWQsSUFDWCxpREFBZ0QsS0FBSzVHLEdBQUwsQ0FBU3VCLElBQUssV0FBVXFGLHVCQUF3QixHQURyRixHQUVYLGlEQUFnRCxLQUFLNUcsR0FBTCxDQUFTdUIsSUFBSyxHQUZuRTtJQUdBLEtBQUt4RSxHQUFMLENBQVM0QyxJQUFULENBQWUsR0FBRWdCLE9BQVEsK0RBQThELEtBQUtYLEdBQUwsQ0FBU0MsSUFBSyxvQ0FBckc7SUFDQSxLQUFLN0IsaUJBQUwsR0FBeUIsS0FBSzRCLEdBQUwsQ0FBU3VCLElBQWxDO0VBQ0Q7O0VBS3FCLE1BQWhCNEYsZ0JBQWdCLEdBQUk7SUFDeEIsTUFBTSxLQUFLakIsSUFBTCxFQUFOO0lBQ0EsTUFBTSxLQUFLMUUsU0FBTCxFQUFOO0VBQ0Q7O0FBcmRrQjs7O2VBd2RON0UsYyJ9
454
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJta2RpcnAiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGNvbnN0IGRpZFRpbWVzdGFtcEV4aXN0ID0gYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpO1xuICAgIGlmIChkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUF2QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLGtCQUFKLEVBQS9COztBQUVBLE1BQU1DLGNBQU4s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
@@ -393,4 +393,4 @@ var _default = XcodeBuild;
393
393
  exports.default = _default;require('source-map-support').install();
394
394
 
395
395
 
396
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJfZGVyaXZlZERhdGFQYXRoUHJvbWlzZSIsInN0ZG91dCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwicGF0dGVybiIsIm1hdGNoIiwiZXhlYyIsInRydW5jYXRlIiwibGVuZ3RoIiwiZGVidWciLCJwYXRoIiwiZGlybmFtZSIsIm5vcm1hbGl6ZSIsInJlc2V0IiwicHJlYnVpbGQiLCJzdGFydCIsInhjb2RlYnVpbGQiLCJCIiwiZGVsYXkiLCJjbGVhblByb2plY3QiLCJ0bXBJc1R2T1MiLCJsaWJTY2hlbWUiLCJydW5uZXJTY2hlbWUiLCJzY2hlbWUiLCJnZXRDb21tYW5kIiwiYnVpbGRPbmx5IiwiY21kIiwiYnVpbGRDbWQiLCJ0ZXN0Q21kIiwicHVzaCIsInZlcnNpb25NYXRjaCIsIlJlZ0V4cCIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTIiwiY3JlYXRlU3ViUHJvY2VzcyIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJVUEdSQURFX1RJTUVTVEFNUCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJkZXRhY2hlZCIsInN0ZGlvIiwibG9nWGNvZGVPdXRwdXQiLCJsb2dNc2ciLCJpc0Jvb2xlYW4iLCJvbiIsInN0ZGVyciIsIm91dCIsImluY2x1ZGVzIiwibG9nTG9jYXRpb24iLCJmaXJzdCIsInJlbW92ZSIsInRyaW0iLCJzcGxpdCIsInYiLCJzdGFydHNXaXRoIiwic2VwIiwiaWdub3JlRXJyb3IiLCJzb21lIiwieCIsIl93ZGFfZXJyb3Jfb2NjdXJyZWQiLCJsaW5lIiwiRU9MIiwiZXJyb3IiLCJfd2RhX2Vycm9yX21lc3NhZ2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29kZSIsInNpZ25hbCIsImRhdGEiLCJmcyIsInJlYWRGaWxlIiwicHJvY2Vzc0V4aXRlZCIsIkVycm9yIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXR1cyIsIndhaXRGb3JTdGFydCIsIm1zZyIsImN1cnJlbnRTdGF0dXMiLCJyZXRyaWVzIiwicGFyc2VJbnQiLCJwcm94eVRpbWVvdXQiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImlvcyIsImlwIiwiYWdlbnRVcmwiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJxdWl0Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3hjb2RlYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxrQkFBa0IsR0FBRyxrQkFBM0I7QUFDQSxNQUFNQyxjQUFjLEdBQUcsQ0FBdkI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxzQkFBMUI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsbUJBQXZCO0FBRUEsTUFBTUMsd0JBQXdCLEdBQUcsdUNBQWpDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcs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
396
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBzZXRSZWFsRGV2aWNlU2VjdXJpdHksIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLCBzZXRYY3Rlc3RydW5GaWxlLFxuICB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwga2lsbFByb2Nlc3MsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIGlzVHZPUyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cblxuY29uc3QgREVGQVVMVF9TSUdOSU5HX0lEID0gJ2lQaG9uZSBEZXZlbG9wZXInO1xuY29uc3QgUFJFQlVJTERfREVMQVkgPSAwO1xuY29uc3QgUlVOTkVSX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgTElCX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRMaWInO1xuXG5jb25zdCBFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3Igd3JpdGluZyBhdHRhY2htZW50IGRhdGEgdG8gZmlsZSc7XG5jb25zdCBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3IgY29weWluZyB0ZXN0aW5nIGF0dGFjaG1lbnQnO1xuY29uc3QgSUdOT1JFRF9FUlJPUlMgPSBbXG4gIEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCxcbiAgRVJST1JfQ09QWUlOR19BVFRBQ0hNRU5ULFxuICAnRmFpbGVkIHRvIHJlbW92ZSBzY3JlZW5zaG90IGF0IHBhdGgnLFxuXTtcblxuY29uc3QgUlVOTkVSX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TJztcbmNvbnN0IExJQl9TQ0hFTUVfVFYgPSAnV2ViRHJpdmVyQWdlbnRMaWJfdHZPUyc7XG5cbmNvbnN0IHhjb2RlTG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5jbGFzcyBYY29kZUJ1aWxkIHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgZGV2aWNlLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLnJlYWxEZXZpY2UgPSBhcmdzLnJlYWxEZXZpY2U7XG5cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFyZ3MuYWdlbnRQYXRoO1xuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGFyZ3MuYm9vdHN0cmFwUGF0aDtcblxuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG5cbiAgICB0aGlzLnNob3dYY29kZUxvZyA9IGFyZ3Muc2hvd1hjb2RlTG9nO1xuXG4gICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhcmdzLnhjb2RlQ29uZmlnRmlsZTtcbiAgICB0aGlzLnhjb2RlT3JnSWQgPSBhcmdzLnhjb2RlT3JnSWQ7XG4gICAgdGhpcy54Y29kZVNpZ25pbmdJZCA9IGFyZ3MueGNvZGVTaWduaW5nSWQgfHwgREVGQVVMVF9TSUdOSU5HX0lEO1xuICAgIHRoaXMua2V5Y2hhaW5QYXRoID0gYXJncy5rZXljaGFpblBhdGg7XG4gICAgdGhpcy5rZXljaGFpblBhc3N3b3JkID0gYXJncy5rZXljaGFpblBhc3N3b3JkO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy51c2VTaW1wbGVCdWlsZFRlc3QgPSBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcblxuICAgIHRoaXMubGF1bmNoVGltZW91dCA9IGFyZ3MubGF1bmNoVGltZW91dDtcblxuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhUmVtb3RlUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcblxuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkRGVsYXkgPSBfLmlzTnVtYmVyKGFyZ3MucHJlYnVpbGREZWxheSkgPyBhcmdzLnByZWJ1aWxkRGVsYXkgOiBQUkVCVUlMRF9ERUxBWTtcblxuICAgIHRoaXMuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gPSBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uO1xuXG4gICAgdGhpcy5yZXN1bHRCdW5kbGVQYXRoID0gYXJncy5yZXN1bHRCdW5kbGVQYXRoO1xuICAgIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbiA9IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKG5vU2Vzc2lvblByb3h5KSB7XG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5vU2Vzc2lvblByb3h5O1xuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgY29uc3QgZGV2aXZlSW5mbyA9IHtcbiAgICAgICAgaXNSZWFsRGV2aWNlOiB0aGlzLnJlYWxEZXZpY2UsXG4gICAgICAgIHVkaWQ6IHRoaXMuZGV2aWNlLnVkaWQsXG4gICAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWVcbiAgICAgIH07XG4gICAgICB0aGlzLnhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgc2V0WGN0ZXN0cnVuRmlsZShkZXZpdmVJbmZvLCB0aGlzLmlvc1Nka1ZlcnNpb24sIHRoaXMuYm9vdHN0cmFwUGF0aCwgdGhpcy53ZGFSZW1vdGVQb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBuZWNlc3NhcnksIHVwZGF0ZSB0aGUgYnVuZGxlSWQgdG8gdXNlcidzIHNwZWNpZmljYXRpb25cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBwcm9qZWN0IHN0aWxsIGhhcyB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQsIHJlc2V0IHRoZSBwcm9qZWN0IGZpbGUgZmlyc3QuXG4gICAgICAvLyAtIFdlIGRvIHRoaXMgcmVzZXQgZXZlbiBpZiB1cGRhdGVkV0RBQnVuZGxlSWQgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgIC8vICAgc2luY2UgdGhlIHByZXZpb3VzIHVwZGF0ZWRXREFCdW5kbGVJZCB0ZXN0IGhhcyBnZW5lcmF0ZWQgdGhlIHVzZXIgc3BlY2lmaWMgYnVuZGxlIElEIHByb2plY3QgZmlsZS5cbiAgICAgIC8vIC0gV2UgZG9uJ3QgY2FsbCByZXNldFByb2plY3RGaWxlIGZvciBzaW11bGF0b3IsXG4gICAgICAvLyAgIHNpbmNlIHNpbXVsYXRvciB0ZXN0IHJ1biB3aWxsIHdvcmsgd2l0aCBhbnkgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQuXG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICAgIGlmICh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkge1xuICAgICAgICBhd2FpdCB1cGRhdGVQcm9qZWN0RmlsZSh0aGlzLmFnZW50UGF0aCwgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICBpZiAodGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFsnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCwgJy1zaG93QnVpbGRTZXR0aW5ncyddKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHJldHJpZXZlIFdEQSBidWlsZCBzZXR0aW5ncy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0dGVybiA9IC9eXFxzKkJVSUxEX0RJUlxccys9XFxzKyhcXC8uKikvbTtcbiAgICAgIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKHN0ZG91dCk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBXREEgYnVpbGQgZGlyIGZyb20gJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgQlVJTERfRElSIGNvbmZpZ3VyYXRpb24gdmFsdWU6ICcke21hdGNoWzFdfSdgKTtcbiAgICAgIC8vIERlcml2ZWQgZGF0YSByb290IGlzIHR3byBsZXZlbHMgaGlnaGVyIG92ZXIgdGhlIGJ1aWxkIGRpclxuICAgICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBwYXRoLmRpcm5hbWUocGF0aC5kaXJuYW1lKHBhdGgubm9ybWFsaXplKG1hdGNoWzFdKSkpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEdvdCBkZXJpdmVkIGRhdGEgcm9vdDogJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgLy8gaWYgbmVjZXNzYXJ5LCByZXNldCB0aGUgYnVuZGxlSWQgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwcmVidWlsZCAoKSB7XG4gICAgLy8gZmlyc3QgZG8gYSBidWlsZCBwaGFzZVxuICAgIHRoaXMubG9nLmRlYnVnKCdQcmUtYnVpbGRpbmcgV0RBIGJlZm9yZSBsYXVuY2hpbmcgdGVzdCcpO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQodHJ1ZSk7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBudWxsO1xuXG4gICAgLy8gcGF1c2UgYSBtb21lbnRcbiAgICBhd2FpdCBCLmRlbGF5KHRoaXMucHJlYnVpbGREZWxheSk7XG4gIH1cblxuICBhc3luYyBjbGVhblByb2plY3QgKCkge1xuICAgIGNvbnN0IHRtcElzVHZPUyA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSk7XG4gICAgY29uc3QgbGliU2NoZW1lID0gdG1wSXNUdk9TID8gTElCX1NDSEVNRV9UViA6IExJQl9TQ0hFTUVfSU9TO1xuICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IHRtcElzVHZPUyA/IFJVTk5FUl9TQ0hFTUVfVFYgOiBSVU5ORVJfU0NIRU1FX0lPUztcblxuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIFtsaWJTY2hlbWUsIHJ1bm5lclNjaGVtZV0pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGUgcHJvamVjdCBzY2hlbWUgJyR7c2NoZW1lfScgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsZWZ0b3ZlcnMgZnJvbSBwcmV2aW91cyBpbnN0YWxsc2ApO1xuICAgICAgYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFtcbiAgICAgICAgJ2NsZWFuJyxcbiAgICAgICAgJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsXG4gICAgICAgICctc2NoZW1lJywgc2NoZW1lLFxuICAgICAgXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tbWFuZCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICBsZXQgY21kID0gJ3hjb2RlYnVpbGQnO1xuICAgIGxldCBhcmdzO1xuXG4gICAgLy8gZmlndXJlIG91dCB0aGUgdGFyZ2V0cyBmb3IgeGNvZGVidWlsZFxuICAgIGNvbnN0IFtidWlsZENtZCwgdGVzdENtZF0gPSB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA/IFsnYnVpbGQnLCAndGVzdCddIDogWydidWlsZC1mb3ItdGVzdGluZycsICd0ZXN0LXdpdGhvdXQtYnVpbGRpbmcnXTtcbiAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlUHJlYnVpbHRXREEgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBhcmdzID0gW3Rlc3RDbWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kLCB0ZXN0Q21kXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbikge1xuICAgICAgLy8gVG8gLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIGZsYWcgdGFrZXMgZWZmZWN0LCAtYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzIG5lZWRzIHRvIGJlIHBhc3NlZCBhcyB3ZWxsLlxuICAgICAgYXJncy5wdXNoKCctYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzJywgJy1hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVBhdGgnLCB0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVZlcnNpb24nLCB0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXhjdGVzdHJ1bicsIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBydW5uZXJTY2hlbWUgPSBpc1R2T1ModGhpcy5wbGF0Zm9ybU5hbWUpID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuICAgICAgYXJncy5wdXNoKCctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNjaGVtZScsIHJ1bm5lclNjaGVtZSk7XG4gICAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKCctZGVyaXZlZERhdGFQYXRoJywgdGhpcy5kZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBhcmdzLnB1c2goJy1kZXN0aW5hdGlvbicsIGBpZD0ke3RoaXMuZGV2aWNlLnVkaWR9YCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBuZXcgUmVnRXhwKC9eKFxcZCspXFwuKFxcZCspLykuZXhlYyh0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgYXJncy5wdXNoKGBJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVD0ke3ZlcnNpb25NYXRjaFsxXX0uJHt2ZXJzaW9uTWF0Y2hbMl19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzIGZyb20gcGxhdGZvcm1WZXJzaW9uIFwiJHt0aGlzLnBsYXRmb3JtVmVyc2lvbn1cIi4gYCArXG4gICAgICAgICdXaWxsIGJ1aWxkIGZvciB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhbERldmljZSAmJiB0aGlzLnhjb2RlQ29uZmlnRmlsZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFVzaW5nIFhjb2RlIGNvbmZpZ3VyYXRpb24gZmlsZTogJyR7dGhpcy54Y29kZUNvbmZpZ0ZpbGV9J2ApO1xuICAgICAgYXJncy5wdXNoKCcteGNjb25maWcnLCB0aGlzLnhjb2RlQ29uZmlnRmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5BUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTKSB7XG4gICAgICAvLyBUaGlzIHNvbWV0aW1lcyBoZWxwcyB0byBzdXJ2aXZlIFhjb2RlIHVwZGF0ZXNcbiAgICAgIGFyZ3MucHVzaCgnR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUz0wJyk7XG4gICAgfVxuXG4gICAgLy8gQmVsb3cgb3B0aW9uIHNsaWdodGx5IHJlZHVjZXMgYnVpbGQgdGltZSBpbiBkZWJ1ZyBidWlsZFxuICAgIC8vIHdpdGggcHJldmVudGluZyB0byBnZW5lcmF0ZSBgL0luZGV4L0RhdGFTdG9yZWAgd2hpY2ggaXMgdXNlZCBieSBkZXZlbG9wbWVudFxuICAgIGFyZ3MucHVzaCgnQ09NUElMRVJfSU5ERVhfU1RPUkVfRU5BQkxFPU5PJyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTdWJQcm9jZXNzIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmIHRoaXMucmVhbERldmljZSkge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhaW5QYXRoICYmIHRoaXMua2V5Y2hhaW5QYXNzd29yZCkge1xuICAgICAgICBhd2FpdCBzZXRSZWFsRGV2aWNlU2VjdXJpdHkodGhpcy5rZXljaGFpblBhdGgsIHRoaXMua2V5Y2hhaW5QYXNzd29yZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy54Y29kZU9yZ0lkICYmIHRoaXMueGNvZGVTaWduaW5nSWQgJiYgIXRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICAgIHRoaXMueGNvZGVDb25maWdGaWxlID0gYXdhaXQgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUodGhpcy54Y29kZU9yZ0lkLCB0aGlzLnhjb2RlU2lnbmluZ0lkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZChidWlsZE9ubHkpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCZWdpbm5pbmcgJHtidWlsZE9ubHkgPyAnYnVpbGQnIDogJ3Rlc3QnfSB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG4gICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgfHwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L3B1bGwvMTA1XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG4gICAgY29uc3QgdXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICBpZiAodXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgZW52LlVQR1JBREVfVElNRVNUQU1QID0gdXBncmFkZVRpbWVzdGFtcDtcbiAgICB9XG4gICAgY29uc3QgeGNvZGVidWlsZCA9IG5ldyBTdWJQcm9jZXNzKGNtZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICBlbnYsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcblxuICAgIGxldCBsb2dYY29kZU91dHB1dCA9ICEhdGhpcy5zaG93WGNvZGVMb2c7XG4gICAgY29uc3QgbG9nTXNnID0gXy5pc0Jvb2xlYW4odGhpcy5zaG93WGNvZGVMb2cpXG4gICAgICA/IGBPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkICR7dGhpcy5zaG93WGNvZGVMb2cgPyAnd2lsbCcgOiAnd2lsbCBub3QnfSBiZSBsb2dnZWRgXG4gICAgICA6ICdPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkIHdpbGwgb25seSBiZSBsb2dnZWQgaWYgYW55IGVycm9ycyBhcmUgcHJlc2VudCB0aGVyZSc7XG4gICAgdGhpcy5sb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd1hjb2RlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICB4Y29kZWJ1aWxkLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGxldCBvdXQgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgLy8gd2Ugd2FudCB0byBwdWxsIG91dCB0aGUgbG9nIGZpbGUgdGhhdCBpcyBjcmVhdGVkLCBhbmQgaGlnaGxpZ2h0IGl0XG4gICAgICAvLyBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlc1xuICAgICAgaWYgKG91dC5pbmNsdWRlcygnV3JpdGluZyBkaWFnbm9zdGljIGxvZyBmb3IgdGVzdCBzZXNzaW9uIHRvJykpIHtcbiAgICAgICAgLy8gcHVsbCBvdXQgdGhlIGZpcnN0IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgLy8gd2hpY2ggKnNob3VsZCogYmUgdGhlIGxpbmUgaW5kaWNhdGluZyB0aGUgbG9nIGZpbGUgZ2VuZXJhdGVkXG4gICAgICAgIHhjb2RlYnVpbGQubG9nTG9jYXRpb24gPSBfLmZpcnN0KF8ucmVtb3ZlKG91dC50cmltKCkuc3BsaXQoJ1xcbicpLCAodikgPT4gdi5zdGFydHNXaXRoKHBhdGguc2VwKSkpO1xuICAgICAgICB4Y29kZUxvZy5kZWJ1ZyhgTG9nIGZpbGUgZm9yIHhjb2RlYnVpbGQgdGVzdDogJHt4Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGFuIGVycm9yIHdlIHdhbnQgdG8gb3V0cHV0IHRoZSBsb2dzXG4gICAgICAvLyBvdGhlcndpc2UgdGhlIGZhaWx1cmUgaXMgaW5zY3J1dGlibGVcbiAgICAgIC8vIGJ1dCBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgY29uc3QgaWdub3JlRXJyb3IgPSBJR05PUkVEX0VSUk9SUy5zb21lKCh4KSA9PiBvdXQuaW5jbHVkZXMoeCkpO1xuICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICE9PSBmYWxzZSAmJiBvdXQuaW5jbHVkZXMoJ0Vycm9yIERvbWFpbj0nKSAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgbG9nWGNvZGVPdXRwdXQgPSB0cnVlO1xuXG4gICAgICAgIC8vIHRlcnJpYmxlIGhhY2sgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgeGNvZGUgcmV0dXJuIDAgYnV0IGlzIGZhaWxpbmdcbiAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gbm90IGxvZyBwZXJtaXNzaW9uIGVycm9ycyBmcm9tIHRyeWluZyB0byB3cml0ZSB0byBhdHRhY2htZW50cyBmb2xkZXJcbiAgICAgIGlmIChsb2dYY29kZU91dHB1dCAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dC5zcGxpdChFT0wpKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgIHhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlICs9IGAke0VPTH0ke2xpbmV9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgdGhpcy54Y29kZWJ1aWxkID0gYXdhaXQgdGhpcy5jcmVhdGVTdWJQcm9jZXNzKGJ1aWxkT25seSk7XG4gICAgLy8gU3RvcmUgeGNvZGVidWlsZCBtZXNzYWdlXG4gICAgdGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZSA9ICcnO1xuXG4gICAgLy8gd3JhcCB0aGUgc3RhcnQgcHJvY2VkdXJlIGluIGEgcHJvbWlzZSBzbyB0aGF0IHdlIGNhbiBjYXRjaCwgYW5kIHJlcG9ydCxcbiAgICAvLyBhbnkgc3RhcnR1cCBlcnJvcnMgdGhhdCBhcmUgdGhyb3duIGFzIGV2ZW50c1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnhjb2RlYnVpbGQub24oJ2V4aXQnLCBhc3luYyAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHhjb2RlTG9nLmVycm9yKGB4Y29kZWJ1aWxkIGV4aXRlZCB3aXRoIGNvZGUgJyR7Y29kZX0nIGFuZCBzaWduYWwgJyR7c2lnbmFsfSdgKTtcbiAgICAgICAgLy8gcHJpbnQgb3V0IHRoZSB4Y29kZWJ1aWxkIGZpbGUgaWYgdXNlcnMgaGF2ZSBhc2tlZCBmb3IgaXRcbiAgICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICYmIHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbikge1xuICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBDb250ZW50cyBvZiB4Y29kZWJ1aWxkIGxvZyBmaWxlICcke3RoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbn0nOmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbiwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihgVW5hYmxlIHRvIGFjY2VzcyB4Y29kZWJ1aWxkIGxvZyBmaWxlOiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkIHx8ICghc2lnbmFsICYmIGNvZGUgIT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYHhjb2RlYnVpbGQgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9JHtFT0x9YCArXG4gICAgICAgICAgICBgeGNvZGVidWlsZCBlcnJvciBtZXNzYWdlOiR7RU9MfSR7dGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YganVzdCBidWlsZGluZywgdGhlIHByb2Nlc3Mgd2lsbCBleGl0IGFuZCB0aGF0IGlzIG91ciBmaW5pc2hcbiAgICAgICAgaWYgKGJ1aWxkT25seSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCh0cnVlKTtcbiAgICAgICAgICBpZiAoIWJ1aWxkT25seSkge1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IHRoaXMud2FpdEZvclN0YXJ0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50OiAke2Vycn1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JTdGFydCAodGltZXIpIHtcbiAgICAvLyB0cnkgdG8gY29ubmVjdCBvbmNlIGV2ZXJ5IDAuNSBzZWNvbmRzLCB1bnRpbCBgbGF1bmNoVGltZW91dGAgaXMgdXBcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RoaXMubGF1bmNoVGltZW91dH1tcyBmb3IgV2ViRHJpdmVyQWdlbnQgdG8gc3RhcnRgKTtcbiAgICBsZXQgY3VycmVudFN0YXR1cyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQodGhpcy5sYXVuY2hUaW1lb3V0IC8gNTAwLCAxMCk7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgLy8gdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgZWxzZXdoZXJlIGFuZCB3ZSBuZWVkIHRvIHNob3J0LWNpcmN1aXRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlUaW1lb3V0ID0gdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0O1xuICAgICAgICB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQgPSAxMDAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN1cnJlbnRTdGF0dXMgPSBhd2FpdCB0aGlzLm5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgJiYgY3VycmVudFN0YXR1cy5pb3MgJiYgY3VycmVudFN0YXR1cy5pb3MuaXApIHtcbiAgICAgICAgICAgIHRoaXMuYWdlbnRVcmwgPSBjdXJyZW50U3RhdHVzLmlvcy5pcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IGluZm9ybWF0aW9uOmApO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29ubmVjdCB0byBydW5uaW5nIFdlYkRyaXZlckFnZW50OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IHByb3h5VGltZW91dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnhjb2RlYnVpbGQucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICByZXR1cm4gY3VycmVudFN0YXR1cztcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IHN1Y2Nlc3NmdWxseSBzdGFydGVkIGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBhdCB0aGlzIHBvaW50LCBpZiB3ZSBoYXZlIG5vdCBoYWQgYW55IGVycm9ycyBmcm9tIHhjb2RlIGl0c2VsZiAocmVwb3J0ZWRcbiAgICAgIC8vIGVsc2V3aGVyZSksIHdlIGNhbiBsZXQgdGhpcyBnbyB0aHJvdWdoIGFuZCB0cnkgdG8gY3JlYXRlIHRoZSBzZXNzaW9uXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlcnIubWVzc2FnZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBHZXR0aW5nIHN0YXR1cyBvZiBXZWJEcml2ZXJBZ2VudCBvbiBkZXZpY2UgdGltZWQgb3V0LiBDb250aW51aW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgYXdhaXQga2lsbFByb2Nlc3MoJ3hjb2RlYnVpbGQnLCB0aGlzLnhjb2RlYnVpbGQpO1xuICB9XG59XG5cbmV4cG9ydCB7IFhjb2RlQnVpbGQgfTtcbmV4cG9ydCBkZWZhdWx0IFhjb2RlQnVpbGQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "4.4.2",
3
+ "version": "4.5.1",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -57,7 +57,7 @@
57
57
  "mocha": "^10.0.0",
58
58
  "pre-commit": "^1.2.2",
59
59
  "semantic-release": "^19.0.2",
60
- "sinon": "^13.0.0"
60
+ "sinon": "^14.0.0"
61
61
  },
62
62
  "dependencies": {
63
63
  "@appium/base-driver": "^8.3.0",