appium-webdriveragent 4.10.2 → 4.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/Scripts/build-webdriveragent.js +1 -1
- package/Scripts/fetch-prebuilt-wda.js +1 -1
- package/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +9 -7
- package/WebDriverAgentLib/Commands/FBSessionCommands.m +6 -5
- package/WebDriverAgentLib/Routing/FBElementUtils.h +8 -0
- package/WebDriverAgentLib/Routing/FBElementUtils.m +16 -1
- package/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.m +67 -4
- package/WebDriverAgentLib/Utilities/FBCapabilities.h +1 -1
- package/WebDriverAgentLib/Utilities/FBCapabilities.m +1 -1
- package/WebDriverAgentLib/Utilities/FBConfiguration.h +5 -0
- package/WebDriverAgentLib/Utilities/FBConfiguration.m +44 -20
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/build/lib/check-dependencies.js +2 -2
- package/build/lib/check-dependencies.js.map +1 -1
- package/build/lib/logger.js +2 -2
- package/build/lib/logger.js.map +1 -1
- package/build/lib/no-session-proxy.js +3 -3
- package/build/lib/no-session-proxy.js.map +1 -1
- package/build/lib/utils.js +2 -2
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webdriveragent.js +4 -4
- package/build/lib/webdriveragent.js.map +1 -1
- package/build/lib/xcodebuild.js +2 -2
- package/build/lib/xcodebuild.js.map +1 -1
- package/lib/check-dependencies.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/no-session-proxy.js +1 -1
- package/lib/utils.js +1 -1
- package/lib/webdriveragent.js +2 -2
- package/lib/xcodebuild.js +1 -1
- package/package.json +3 -4
package/CHANGELOG.md
CHANGED
|
@@ -1 +1,5 @@
|
|
|
1
|
+
## [4.10.4](https://github.com/appium/WebDriverAgent/compare/v4.10.3...v4.10.4) (2022-11-22)
|
|
2
|
+
|
|
3
|
+
## [4.10.3](https://github.com/appium/WebDriverAgent/compare/v4.10.2...v4.10.3) (2022-11-22)
|
|
4
|
+
|
|
1
5
|
## [4.10.2](https://github.com/appium/WebDriverAgent/compare/v4.10.1...v4.10.2) (2022-11-06)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const os = require('os');
|
|
3
3
|
const { asyncify } = require('asyncbox');
|
|
4
|
-
const { logger, fs, mkdirp, zip } = require('appium/support');
|
|
4
|
+
const { logger, fs, mkdirp, zip } = require('@appium/support');
|
|
5
5
|
const { exec } = require('teen_process');
|
|
6
6
|
const xcode = require('appium-xcode');
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const axios = require('axios');
|
|
3
3
|
const { asyncify } = require('asyncbox');
|
|
4
|
-
const { logger, fs, mkdirp, net } = require('appium/support');
|
|
4
|
+
const { logger, fs, mkdirp, net } = require('@appium/support');
|
|
5
5
|
const _ = require('lodash');
|
|
6
6
|
const B = require('bluebird');
|
|
7
7
|
|
|
@@ -9,8 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
#import "XCUIElement+FBWebDriverAttributes.h"
|
|
11
11
|
|
|
12
|
-
#import <objc/runtime.h>
|
|
13
|
-
|
|
14
12
|
#import "FBElementTypeTransformer.h"
|
|
15
13
|
#import "FBLogger.h"
|
|
16
14
|
#import "FBMacros.h"
|
|
@@ -58,11 +56,15 @@
|
|
|
58
56
|
|
|
59
57
|
- (id)forwardingTargetForSelector:(SEL)aSelector
|
|
60
58
|
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
static dispatch_once_t onceToken;
|
|
60
|
+
static NSSet<NSString *> *fbElementAttributeNames;
|
|
61
|
+
dispatch_once(&onceToken, ^{
|
|
62
|
+
fbElementAttributeNames = [FBElementUtils selectorNamesWithProtocol:@protocol(FBElement)];
|
|
63
|
+
});
|
|
64
|
+
NSString* attributeName = NSStringFromSelector(aSelector);
|
|
65
|
+
return [fbElementAttributeNames containsObject:attributeName]
|
|
66
|
+
? [FBXCElementSnapshotWrapper ensureWrapped:[self fb_snapshotForAttributeName:attributeName]]
|
|
67
|
+
: nil;
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
@end
|
|
@@ -88,6 +88,8 @@
|
|
|
88
88
|
if (nil == (capabilities = FBParseCapabilities((NSDictionary *)request.arguments[@"capabilities"], &error))) {
|
|
89
89
|
return FBResponseWithStatus([FBCommandStatus sessionNotCreatedError:error.description traceback:nil]);
|
|
90
90
|
}
|
|
91
|
+
|
|
92
|
+
[FBConfiguration resetSessionSettings];
|
|
91
93
|
[FBConfiguration setShouldUseTestManagerForVisibilityDetection:[capabilities[FB_CAP_USE_TEST_MANAGER_FOR_VISIBLITY_DETECTION] boolValue]];
|
|
92
94
|
if (capabilities[FB_SETTING_USE_COMPACT_RESPONSES]) {
|
|
93
95
|
[FBConfiguration setShouldUseCompactResponses:[capabilities[FB_SETTING_USE_COMPACT_RESPONSES] boolValue]];
|
|
@@ -96,8 +98,8 @@
|
|
|
96
98
|
if (elementResponseAttributes) {
|
|
97
99
|
[FBConfiguration setElementResponseAttributes:elementResponseAttributes];
|
|
98
100
|
}
|
|
99
|
-
if (capabilities[
|
|
100
|
-
[FBConfiguration setMaxTypingFrequency:[capabilities[
|
|
101
|
+
if (capabilities[FB_CAP_MAX_TYPING_FREQUENCY]) {
|
|
102
|
+
[FBConfiguration setMaxTypingFrequency:[capabilities[FB_CAP_MAX_TYPING_FREQUENCY] unsignedIntegerValue]];
|
|
101
103
|
}
|
|
102
104
|
if (capabilities[FB_CAP_USE_SINGLETON_TEST_MANAGER]) {
|
|
103
105
|
[FBConfiguration setShouldUseSingletonTestManager:[capabilities[FB_CAP_USE_SINGLETON_TEST_MANAGER] boolValue]];
|
|
@@ -380,10 +382,9 @@
|
|
|
380
382
|
NSError *error;
|
|
381
383
|
if (![FBConfiguration setScreenshotOrientation:(NSString *)[settings objectForKey:FB_SETTING_SCREENSHOT_ORIENTATION]
|
|
382
384
|
error:&error]) {
|
|
383
|
-
return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.description
|
|
385
|
+
return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.description
|
|
386
|
+
traceback:nil]);
|
|
384
387
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
388
|
}
|
|
388
389
|
#endif
|
|
389
390
|
|
|
@@ -64,6 +64,14 @@ extern NSString *const FBUnknownAttributeException;
|
|
|
64
64
|
*/
|
|
65
65
|
+ (unsigned long long)idWithAccessibilityElement:(id<FBXCAccessibilityElement>)element;
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
Retrieves the list of required instance methods of the given protocol
|
|
69
|
+
|
|
70
|
+
@param protocol target protocol reference
|
|
71
|
+
@return set of selector names
|
|
72
|
+
*/
|
|
73
|
+
+ (NSSet<NSString *> *)selectorNamesWithProtocol:(Protocol *)protocol;
|
|
74
|
+
|
|
67
75
|
@end
|
|
68
76
|
|
|
69
77
|
NS_ASSUME_NONNULL_END
|
|
@@ -20,11 +20,26 @@ static NSString *const OBJC_PROP_ATTRIBS_SEPARATOR = @",";
|
|
|
20
20
|
|
|
21
21
|
@implementation FBElementUtils
|
|
22
22
|
|
|
23
|
+
+ (NSSet<NSString *> *)selectorNamesWithProtocol:(Protocol *)protocol
|
|
24
|
+
{
|
|
25
|
+
unsigned int count;
|
|
26
|
+
struct objc_method_description *methods = protocol_copyMethodDescriptionList(protocol, YES, YES, &count);
|
|
27
|
+
NSMutableSet<NSString *> *result = [NSMutableSet set];
|
|
28
|
+
for (unsigned int i = 0; i < count; i++) {
|
|
29
|
+
SEL sel = methods[i].name;
|
|
30
|
+
if (nil != sel) {
|
|
31
|
+
[result addObject:NSStringFromSelector(sel)];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
free(methods);
|
|
35
|
+
return result.copy;
|
|
36
|
+
}
|
|
37
|
+
|
|
23
38
|
+ (NSString *)wdAttributeNameForAttributeName:(NSString *)name
|
|
24
39
|
{
|
|
25
40
|
NSAssert(name.length > 0, @"Attribute name cannot be empty", nil);
|
|
26
41
|
NSDictionary *attributeNamesMapping = [self.class wdAttributeNamesMapping];
|
|
27
|
-
NSString *result = [
|
|
42
|
+
NSString *result = attributeNamesMapping[name];
|
|
28
43
|
if (nil == result) {
|
|
29
44
|
NSString *description = [NSString stringWithFormat:@"The attribute '%@' is unknown. Valid attribute names are: %@", name, [attributeNamesMapping.allKeys sortedArrayUsingSelector:@selector(compare:)]];
|
|
30
45
|
@throw [NSException exceptionWithName:FBUnknownAttributeException reason:description userInfo:@{}];
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
#import "FBXCElementSnapshotWrapper.h"
|
|
11
11
|
|
|
12
|
-
#import
|
|
12
|
+
#import "FBElementUtils.h"
|
|
13
13
|
|
|
14
14
|
#pragma clang diagnostic push
|
|
15
15
|
#pragma clang diagnostic ignored "-Wobjc-protocol-property-synthesis"
|
|
@@ -33,11 +33,74 @@
|
|
|
33
33
|
: [[FBXCElementSnapshotWrapper alloc] initWithSnapshot:snapshot];
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
// Attributes are queried most often,
|
|
37
|
+
// so we prefer them to have direct accessors defined here
|
|
38
|
+
// rather than to use message forwarding via forwardingTargetForSelector,
|
|
39
|
+
// which is slow
|
|
40
|
+
|
|
41
|
+
- (NSString *)identifier
|
|
42
|
+
{
|
|
43
|
+
return self.snapshot.identifier;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
- (CGRect)frame
|
|
47
|
+
{
|
|
48
|
+
return self.snapshot.frame;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (id)value
|
|
52
|
+
{
|
|
53
|
+
return self.snapshot.value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
- (NSString *)title
|
|
57
|
+
{
|
|
58
|
+
return self.snapshot.title;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
- (NSString *)label
|
|
62
|
+
{
|
|
63
|
+
return self.snapshot.label;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
- (XCUIElementType)elementType
|
|
67
|
+
{
|
|
68
|
+
return self.snapshot.elementType;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
- (BOOL)isEnabled
|
|
72
|
+
{
|
|
73
|
+
return self.snapshot.enabled;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
- (XCUIUserInterfaceSizeClass)horizontalSizeClass
|
|
77
|
+
{
|
|
78
|
+
return self.snapshot.horizontalSizeClass;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
- (XCUIUserInterfaceSizeClass)verticalSizeClass
|
|
82
|
+
{
|
|
83
|
+
return self.snapshot.verticalSizeClass;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
- (NSString *)placeholderValue
|
|
87
|
+
{
|
|
88
|
+
return self.snapshot.placeholderValue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
- (BOOL)isSelected
|
|
92
|
+
{
|
|
93
|
+
return self.snapshot.selected;
|
|
94
|
+
}
|
|
95
|
+
|
|
36
96
|
- (id)forwardingTargetForSelector:(SEL)aSelector
|
|
37
97
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
98
|
+
static dispatch_once_t onceToken;
|
|
99
|
+
static NSSet<NSString *> *names;
|
|
100
|
+
dispatch_once(&onceToken, ^{
|
|
101
|
+
names = [FBElementUtils selectorNamesWithProtocol:@protocol(FBXCElementSnapshot)];
|
|
102
|
+
});
|
|
103
|
+
return [names containsObject:NSStringFromSelector(aSelector)] ? self.snapshot : nil;
|
|
41
104
|
}
|
|
42
105
|
|
|
43
106
|
@end
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#import <Foundation/Foundation.h>
|
|
11
11
|
|
|
12
12
|
extern NSString* const FB_CAP_USE_TEST_MANAGER_FOR_VISIBLITY_DETECTION;
|
|
13
|
-
extern NSString* const
|
|
13
|
+
extern NSString* const FB_CAP_MAX_TYPING_FREQUENCY;
|
|
14
14
|
extern NSString* const FB_CAP_USE_SINGLETON_TEST_MANAGER;
|
|
15
15
|
extern NSString* const FB_CAP_DISABLE_AUTOMATIC_SCREENSHOTS;
|
|
16
16
|
extern NSString* const FB_CAP_SHOULD_TERMINATE_APP;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#import "FBCapabilities.h"
|
|
11
11
|
|
|
12
12
|
NSString* const FB_CAP_USE_TEST_MANAGER_FOR_VISIBLITY_DETECTION = @"shouldUseTestManagerForVisibilityDetection";
|
|
13
|
-
NSString* const
|
|
13
|
+
NSString* const FB_CAP_MAX_TYPING_FREQUENCY = @"maxTypingFrequency";
|
|
14
14
|
NSString* const FB_CAP_USE_SINGLETON_TEST_MANAGER = @"shouldUseSingletonTestManager";
|
|
15
15
|
NSString* const FB_CAP_DISABLE_AUTOMATIC_SCREENSHOTS = @"disableAutomaticScreenshots";
|
|
16
16
|
NSString* const FB_CAP_SHOULD_TERMINATE_APP = @"shouldTerminateApp";
|
|
@@ -30,30 +30,30 @@ static NSString *const axSettingsClassName = @"AXSettings";
|
|
|
30
30
|
|
|
31
31
|
static BOOL FBShouldUseTestManagerForVisibilityDetection = NO;
|
|
32
32
|
static BOOL FBShouldUseSingletonTestManager = YES;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
static
|
|
36
|
-
static NSUInteger FBMaxTypingFrequency = 60;
|
|
33
|
+
NSString *const FBSnapshotMaxDepthKey = @"maxDepth";
|
|
34
|
+
|
|
35
|
+
static NSUInteger FBMjpegScalingFactor = 100;
|
|
37
36
|
static NSUInteger FBMjpegServerScreenshotQuality = 25;
|
|
38
37
|
static NSUInteger FBMjpegServerFramerate = 10;
|
|
39
|
-
static NSUInteger FBScreenshotQuality = 1;
|
|
40
|
-
static NSUInteger FBMjpegScalingFactor = 100;
|
|
41
|
-
static NSTimeInterval FBCustomSnapshotTimeout = 15.;
|
|
42
|
-
static BOOL FBShouldUseFirstMatch = NO;
|
|
43
|
-
static BOOL FBShouldBoundElementsByIndex = NO;
|
|
44
|
-
// This is diabled by default because enabling it prevents the accessbility snapshot to be taken
|
|
45
|
-
// (it always errors with kxIllegalArgument error)
|
|
46
|
-
static BOOL FBIncludeNonModalElements = NO;
|
|
47
|
-
static NSString *FBAcceptAlertButtonSelector = @"";
|
|
48
|
-
static NSString *FBDismissAlertButtonSelector = @"";
|
|
49
|
-
NSString *const FBSnapshotMaxDepthKey = @"maxDepth";
|
|
50
|
-
static NSMutableDictionary *FBSnapshotRequestParameters;
|
|
51
|
-
static NSTimeInterval FBWaitForIdleTimeout = 10.;
|
|
52
|
-
static NSTimeInterval FBAnimationCoolOffTimeout = 2.;
|
|
53
38
|
|
|
39
|
+
// Session-specific settings
|
|
40
|
+
static BOOL FBShouldTerminateApp;
|
|
41
|
+
static NSUInteger FBMaxTypingFrequency;
|
|
42
|
+
static NSUInteger FBScreenshotQuality;
|
|
43
|
+
static NSTimeInterval FBCustomSnapshotTimeout;
|
|
44
|
+
static BOOL FBShouldUseFirstMatch;
|
|
45
|
+
static BOOL FBShouldBoundElementsByIndex;
|
|
46
|
+
static BOOL FBIncludeNonModalElements;
|
|
47
|
+
static NSString *FBAcceptAlertButtonSelector;
|
|
48
|
+
static NSString *FBDismissAlertButtonSelector;
|
|
49
|
+
static NSTimeInterval FBWaitForIdleTimeout;
|
|
50
|
+
static NSTimeInterval FBAnimationCoolOffTimeout;
|
|
51
|
+
static BOOL FBShouldUseCompactResponses;
|
|
52
|
+
static NSString *FBElementResponseAttributes;
|
|
54
53
|
#if !TARGET_OS_TV
|
|
55
|
-
static UIInterfaceOrientation FBScreenshotOrientation
|
|
54
|
+
static UIInterfaceOrientation FBScreenshotOrientation;
|
|
56
55
|
#endif
|
|
56
|
+
static NSMutableDictionary *FBSnapshotRequestParameters;
|
|
57
57
|
|
|
58
58
|
@implementation FBConfiguration
|
|
59
59
|
|
|
@@ -62,9 +62,9 @@ static UIInterfaceOrientation FBScreenshotOrientation = UIInterfaceOrientationUn
|
|
|
62
62
|
FBSnapshotRequestParameters = [NSMutableDictionary dictionaryWithDictionary:@{
|
|
63
63
|
@"maxArrayCount": @INT_MAX,
|
|
64
64
|
@"maxChildren": @INT_MAX,
|
|
65
|
-
FBSnapshotMaxDepthKey: @50, // 50 should be enough for the majority of the cases. The performance is acceptable for values up to 100.
|
|
66
65
|
@"traverseFromParentsToChildren": @1
|
|
67
66
|
}];
|
|
67
|
+
[FBConfiguration resetSessionSettings];
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
#pragma mark Public
|
|
@@ -450,6 +450,30 @@ static UIInterfaceOrientation FBScreenshotOrientation = UIInterfaceOrientationUn
|
|
|
450
450
|
}
|
|
451
451
|
#endif
|
|
452
452
|
|
|
453
|
+
+ (void)resetSessionSettings
|
|
454
|
+
{
|
|
455
|
+
FBShouldTerminateApp = YES;
|
|
456
|
+
FBShouldUseCompactResponses = YES;
|
|
457
|
+
FBElementResponseAttributes = @"type,label";
|
|
458
|
+
FBMaxTypingFrequency = 60;
|
|
459
|
+
FBScreenshotQuality = 1;
|
|
460
|
+
FBCustomSnapshotTimeout = 15.;
|
|
461
|
+
FBShouldUseFirstMatch = NO;
|
|
462
|
+
FBShouldBoundElementsByIndex = NO;
|
|
463
|
+
// This is diabled by default because enabling it prevents the accessbility snapshot to be taken
|
|
464
|
+
// (it always errors with kxIllegalArgument error)
|
|
465
|
+
FBIncludeNonModalElements = NO;
|
|
466
|
+
FBAcceptAlertButtonSelector = @"";
|
|
467
|
+
FBDismissAlertButtonSelector = @"";
|
|
468
|
+
FBWaitForIdleTimeout = 10.;
|
|
469
|
+
FBAnimationCoolOffTimeout = 2.;
|
|
470
|
+
// 50 should be enough for the majority of the cases. The performance is acceptable for values up to 100.
|
|
471
|
+
FBSnapshotRequestParameters[FBSnapshotMaxDepthKey] = @50;
|
|
472
|
+
#if !TARGET_OS_TV
|
|
473
|
+
FBScreenshotOrientation = UIInterfaceOrientationUnknown;
|
|
474
|
+
#endif
|
|
475
|
+
}
|
|
476
|
+
|
|
453
477
|
#pragma mark Private
|
|
454
478
|
|
|
455
479
|
+ (FBConfigurationKeyboardPreference)keyboardsPreference:(nonnull NSString *)key
|
|
Binary file
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.bundleWDASim = bundleWDASim;
|
|
8
8
|
exports.checkForDependencies = checkForDependencies;
|
|
9
9
|
require("source-map-support/register");
|
|
10
|
-
var _support = require("appium/support");
|
|
10
|
+
var _support = require("@appium/support");
|
|
11
11
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
12
|
var _teen_process = require("teen_process");
|
|
13
13
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -37,4 +37,4 @@ async function bundleWDASim(xcodebuild, opts = {}) {
|
|
|
37
37
|
await buildWDASim(xcodebuild, opts);
|
|
38
38
|
return wdaBundlePath;
|
|
39
39
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFdEQVNpbSIsImFyZ3MiLCJwYXRoIiwiam9pbiIsIkJPT1RTVFJBUF9QQVRIIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwiV0RBX1JVTk5FUl9BUFAiLCJmcyIsImV4aXN0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaGVjay1kZXBlbmRlbmNpZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IHtcbiAgV0RBX1NDSEVNRSwgU0RLX1NJTVVMQVRPUiwgV0RBX1JVTk5FUl9BUFBcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQk9PVFNUUkFQX1BBVEggfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuXG5hc3luYyBmdW5jdGlvbiBidWlsZFdEQVNpbSAoKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1wcm9qZWN0JywgcGF0aC5qb2luKEJPT1RTVFJBUF9QQVRILCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyksXG4gICAgJy1zY2hlbWUnLCBXREFfU0NIRU1FLFxuICAgICctc2RrJywgU0RLX1NJTVVMQVRPUixcbiAgICAnQ09ERV9TSUdOX0lERU5USVRZPVwiXCInLFxuICAgICdDT0RFX1NJR05JTkdfUkVRVUlSRUQ9XCJOT1wiJyxcbiAgICAnR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUz0wJyxcbiAgXTtcbiAgYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIGFyZ3MpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JEZXBlbmRlbmNpZXMgKCkge1xuICBsb2cuZGVidWcoJ0RlcGVuZGVuY2llcyBhcmUgdXAgdG8gZGF0ZScpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bmRsZVdEQVNpbSAoeGNvZGVidWlsZCwgb3B0cyA9IHt9KSB7XG4gIGlmICh4Y29kZWJ1aWxkICYmICFfLmlzRnVuY3Rpb24oeGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCkpIHtcbiAgICB4Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQoKTtcbiAgICBvcHRzID0geGNvZGVidWlsZDtcbiAgfVxuXG4gIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHBhdGguam9pbihkZXJpdmVkRGF0YVBhdGgsICdCdWlsZCcsICdQcm9kdWN0cycsICdEZWJ1Zy1pcGhvbmVzaW11bGF0b3InLCBXREFfUlVOTkVSX0FQUCk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMod2RhQnVuZGxlUGF0aCkpIHtcbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbiAgfVxuICBhd2FpdCBidWlsZFdEQVNpbSh4Y29kZWJ1aWxkLCBvcHRzKTtcbiAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG59XG5cbmV4cG9ydCB7IGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBLGVBQWVBLFdBQVcsR0FBSTtFQUM1QixNQUFNQyxJQUFJLEdBQUcsQ0FDWCxVQUFVLEVBQUVDLGFBQUksQ0FBQ0MsSUFBSSxDQUFDQyxxQkFBYyxFQUFFLDBCQUEwQixDQUFDLEVBQ2pFLFNBQVMsRUFBRUMscUJBQVUsRUFDckIsTUFBTSxFQUFFQyx3QkFBYSxFQUNyQix1QkFBdUIsRUFDdkIsNEJBQTRCLEVBQzVCLGdDQUFnQyxDQUNqQztFQUNELE1BQU0sSUFBQUMsa0JBQUksRUFBQyxZQUFZLEVBQUVOLElBQUksQ0FBQztBQUNoQzs7QUFHQSxlQUFlTyxvQkFBb0IsR0FBSTtFQUNyQ0MsZUFBRyxDQUFDQyxLQUFLLENBQUMsNkJBQTZCLENBQUM7RUFDeEMsT0FBTyxLQUFLO0FBQ2Q7QUFFQSxlQUFlQyxZQUFZLENBQUVDLFVBQVUsRUFBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlELFVBQVUsSUFBSSxDQUFDRSxlQUFDLENBQUNDLFVBQVUsQ0FBQ0gsVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQyxFQUFFO0lBQ25FSixVQUFVLEdBQUcsSUFBSUssbUJBQVUsRUFBRTtJQUM3QkosSUFBSSxHQUFHRCxVQUFVO0VBQ25CO0VBRUEsTUFBTU0sZUFBZSxHQUFHLE1BQU1OLFVBQVUsQ0FBQ0ksdUJBQXVCLEVBQUU7RUFDbEUsTUFBTUcsYUFBYSxHQUFHakIsYUFBSSxDQUFDQyxJQUFJLENBQUNlLGVBQWUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFRSx5QkFBYyxDQUFDO0VBQzlHLElBQUksTUFBTUMsV0FBRSxDQUFDQyxNQUFNLENBQUNILGFBQWEsQ0FBQyxFQUFFO0lBQ2xDLE9BQU9BLGFBQWE7RUFDdEI7RUFDQSxNQUFNbkIsV0FBVyxDQUFDWSxVQUFVLEVBQUVDLElBQUksQ0FBQztFQUNuQyxPQUFPTSxhQUFhO0FBQ3RCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dependencies.js","names":["buildWDASim","args","path","join","BOOTSTRAP_PATH","WDA_SCHEME","SDK_SIMULATOR","exec","checkForDependencies","log","debug","bundleWDASim","xcodebuild","opts","_","isFunction","retrieveDerivedDataPath","XcodeBuild","derivedDataPath","wdaBundlePath","WDA_RUNNER_APP","fs","exists"],"sources":["../../lib/check-dependencies.js"],"sourcesContent":["import { fs } from 'appium/support';\nimport _ from 'lodash';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport XcodeBuild from './xcodebuild';\nimport {\n WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP\n} from './constants';\nimport { BOOTSTRAP_PATH } from './utils';\nimport log from './logger';\n\nasync function buildWDASim () {\n const args = [\n '-project', path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'),\n '-scheme', WDA_SCHEME,\n '-sdk', SDK_SIMULATOR,\n 'CODE_SIGN_IDENTITY=\"\"',\n 'CODE_SIGNING_REQUIRED=\"NO\"',\n 'GCC_TREAT_WARNINGS_AS_ERRORS=0',\n ];\n await exec('xcodebuild', args);\n}\n\n// eslint-disable-next-line require-await\nasync function checkForDependencies () {\n log.debug('Dependencies are up to date');\n return false;\n}\n\nasync function bundleWDASim (xcodebuild, opts = {}) {\n if (xcodebuild && !_.isFunction(xcodebuild.retrieveDerivedDataPath)) {\n xcodebuild = new XcodeBuild();\n opts = xcodebuild;\n }\n\n const derivedDataPath = await xcodebuild.retrieveDerivedDataPath();\n const wdaBundlePath = path.join(derivedDataPath, 'Build', 'Products', 'Debug-iphonesimulator', WDA_RUNNER_APP);\n if (await fs.exists(wdaBundlePath)) {\n return wdaBundlePath;\n }\n await buildWDASim(xcodebuild, opts);\n return wdaBundlePath;\n}\n\nexport { checkForDependencies, bundleWDASim };\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA,eAAeA,WAAW,GAAI;EAC5B,MAAMC,IAAI,GAAG,CACX,UAAU,EAAEC,aAAI,CAACC,IAAI,CAACC,qBAAc,EAAE,0BAA0B,CAAC,EACjE,SAAS,EAAEC,qBAAU,EACrB,MAAM,EAAEC,wBAAa,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,gCAAgC,CACjC;EACD,MAAM,IAAAC,kBAAI,EAAC,YAAY,EAAEN,IAAI,CAAC;AAChC;;AAGA,eAAeO,oBAAoB,GAAI;EACrCC,eAAG,CAACC,KAAK,CAAC,6BAA6B,CAAC;EACxC,OAAO,KAAK;AACd;AAEA,eAAeC,YAAY,CAAEC,UAAU,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAClD,IAAID,UAAU,IAAI,CAACE,eAAC,CAACC,UAAU,CAACH,UAAU,CAACI,uBAAuB,CAAC,EAAE;IACnEJ,UAAU,GAAG,IAAIK,mBAAU,EAAE;IAC7BJ,IAAI,GAAGD,UAAU;EACnB;EAEA,MAAMM,eAAe,GAAG,MAAMN,UAAU,CAACI,uBAAuB,EAAE;EAClE,MAAMG,aAAa,GAAGjB,aAAI,CAACC,IAAI,CAACe,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAEE,yBAAc,CAAC;EAC9G,IAAI,MAAMC,WAAE,CAACC,MAAM,CAACH,aAAa,CAAC,EAAE;IAClC,OAAOA,aAAa;EACtB;EACA,MAAMnB,WAAW,CAACY,UAAU,EAAEC,IAAI,CAAC;EACnC,OAAOM,aAAa;AACtB"}
|
|
1
|
+
{"version":3,"file":"check-dependencies.js","names":["buildWDASim","args","path","join","BOOTSTRAP_PATH","WDA_SCHEME","SDK_SIMULATOR","exec","checkForDependencies","log","debug","bundleWDASim","xcodebuild","opts","_","isFunction","retrieveDerivedDataPath","XcodeBuild","derivedDataPath","wdaBundlePath","WDA_RUNNER_APP","fs","exists"],"sources":["../../lib/check-dependencies.js"],"sourcesContent":["import { fs } from '@appium/support';\nimport _ from 'lodash';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport XcodeBuild from './xcodebuild';\nimport {\n WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP\n} from './constants';\nimport { BOOTSTRAP_PATH } from './utils';\nimport log from './logger';\n\nasync function buildWDASim () {\n const args = [\n '-project', path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'),\n '-scheme', WDA_SCHEME,\n '-sdk', SDK_SIMULATOR,\n 'CODE_SIGN_IDENTITY=\"\"',\n 'CODE_SIGNING_REQUIRED=\"NO\"',\n 'GCC_TREAT_WARNINGS_AS_ERRORS=0',\n ];\n await exec('xcodebuild', args);\n}\n\n// eslint-disable-next-line require-await\nasync function checkForDependencies () {\n log.debug('Dependencies are up to date');\n return false;\n}\n\nasync function bundleWDASim (xcodebuild, opts = {}) {\n if (xcodebuild && !_.isFunction(xcodebuild.retrieveDerivedDataPath)) {\n xcodebuild = new XcodeBuild();\n opts = xcodebuild;\n }\n\n const derivedDataPath = await xcodebuild.retrieveDerivedDataPath();\n const wdaBundlePath = path.join(derivedDataPath, 'Build', 'Products', 'Debug-iphonesimulator', WDA_RUNNER_APP);\n if (await fs.exists(wdaBundlePath)) {\n return wdaBundlePath;\n }\n await buildWDASim(xcodebuild, opts);\n return wdaBundlePath;\n}\n\nexport { checkForDependencies, bundleWDASim };\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA,eAAeA,WAAW,GAAI;EAC5B,MAAMC,IAAI,GAAG,CACX,UAAU,EAAEC,aAAI,CAACC,IAAI,CAACC,qBAAc,EAAE,0BAA0B,CAAC,EACjE,SAAS,EAAEC,qBAAU,EACrB,MAAM,EAAEC,wBAAa,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,gCAAgC,CACjC;EACD,MAAM,IAAAC,kBAAI,EAAC,YAAY,EAAEN,IAAI,CAAC;AAChC;;AAGA,eAAeO,oBAAoB,GAAI;EACrCC,eAAG,CAACC,KAAK,CAAC,6BAA6B,CAAC;EACxC,OAAO,KAAK;AACd;AAEA,eAAeC,YAAY,CAAEC,UAAU,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAClD,IAAID,UAAU,IAAI,CAACE,eAAC,CAACC,UAAU,CAACH,UAAU,CAACI,uBAAuB,CAAC,EAAE;IACnEJ,UAAU,GAAG,IAAIK,mBAAU,EAAE;IAC7BJ,IAAI,GAAGD,UAAU;EACnB;EAEA,MAAMM,eAAe,GAAG,MAAMN,UAAU,CAACI,uBAAuB,EAAE;EAClE,MAAMG,aAAa,GAAGjB,aAAI,CAACC,IAAI,CAACe,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAEE,yBAAc,CAAC;EAC9G,IAAI,MAAMC,WAAE,CAACC,MAAM,CAACH,aAAa,CAAC,EAAE;IAClC,OAAOA,aAAa;EACtB;EACA,MAAMnB,WAAW,CAACY,UAAU,EAAEC,IAAI,CAAC;EACnC,OAAOM,aAAa;AACtB"}
|
package/build/lib/logger.js
CHANGED
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
require("source-map-support/register");
|
|
8
|
-
var _support = require("appium/support");
|
|
8
|
+
var _support = require("@appium/support");
|
|
9
9
|
const log = _support.logger.getLogger('WebDriverAgent');
|
|
10
10
|
var _default = log;
|
|
11
11
|
exports.default = _default;
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1dlYkRyaXZlckFnZW50Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBRUEsTUFBTUEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUFDLGVBRWhDRixHQUFHO0FBQUEifQ==
|
package/build/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\n\nconst log = logger.getLogger('WebDriverAgent');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AAEA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,gBAAgB,CAAC;AAAC,eAEhCF,GAAG;AAAA"}
|
|
1
|
+
{"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from '@appium/support';\n\nconst log = logger.getLogger('WebDriverAgent');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AAEA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,gBAAgB,CAAC;AAAC,eAEhCF,GAAG;AAAA"}
|
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.NoSessionProxy = void 0;
|
|
7
7
|
require("source-map-support/register");
|
|
8
|
-
var
|
|
9
|
-
class NoSessionProxy extends
|
|
8
|
+
var _baseDriver = require("@appium/base-driver");
|
|
9
|
+
class NoSessionProxy extends _baseDriver.JWProxy {
|
|
10
10
|
constructor(opts = {}) {
|
|
11
11
|
super(opts);
|
|
12
12
|
}
|
|
@@ -28,4 +28,4 @@ class NoSessionProxy extends _driver.JWProxy {
|
|
|
28
28
|
exports.NoSessionProxy = NoSessionProxy;
|
|
29
29
|
var _default = NoSessionProxy;
|
|
30
30
|
exports.default = _default;
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUdBLE1BQU1BLGNBQWMsU0FBU0MsbUJBQU8sQ0FBQztFQUNuQ0MsV0FBVyxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsS0FBSyxDQUFDQSxJQUFJLENBQUM7RUFDYjtFQUVBQyxjQUFjLENBQUVDLEdBQUcsRUFBRTtJQUNuQixJQUFJQSxHQUFHLEtBQUssRUFBRSxFQUFFO01BQ2RBLEdBQUcsR0FBRyxHQUFHO0lBQ1g7SUFDQSxNQUFNQyxTQUFTLEdBQUksR0FBRSxJQUFJLENBQUNDLE1BQU8sTUFBSyxJQUFJLENBQUNDLE1BQU8sSUFBRyxJQUFJLENBQUNDLElBQUssR0FBRSxJQUFJLENBQUNDLElBQUssRUFBQztJQUM1RSxJQUFJQyxZQUFZLEdBQUcsRUFBRTtJQUNyQixJQUFLLElBQUlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBRUMsSUFBSSxDQUFDUixHQUFHLENBQUMsRUFBRTtNQUNoQ00sWUFBWSxHQUFHTixHQUFHO0lBQ3BCLENBQUMsTUFBTTtNQUNMLE1BQU0sSUFBSVMsS0FBSyxDQUFFLHFDQUFvQ1QsR0FBSSxHQUFFLENBQUM7SUFDOUQ7SUFDQU0sWUFBWSxHQUFHQSxZQUFZLENBQUNJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQzlDLE9BQU9ULFNBQVMsR0FBR0ssWUFBWTtFQUNqQztBQUNGO0FBQUM7QUFBQSxlQUdjWCxjQUFjO0FBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-session-proxy.js","names":["NoSessionProxy","JWProxy","constructor","opts","getUrlForProxy","url","proxyBase","scheme","server","port","base","remainingUrl","RegExp","test","Error","replace"],"sources":["../../lib/no-session-proxy.js"],"sourcesContent":["import { JWProxy } from 'appium/driver';\n\n\nclass NoSessionProxy extends JWProxy {\n constructor (opts = {}) {\n super(opts);\n }\n\n getUrlForProxy (url) {\n if (url === '') {\n url = '/';\n }\n const proxyBase = `${this.scheme}://${this.server}:${this.port}${this.base}`;\n let remainingUrl = '';\n if ((new RegExp('^/')).test(url)) {\n remainingUrl = url;\n } else {\n throw new Error(`Did not know what to do with url '${url}'`);\n }\n remainingUrl = remainingUrl.replace(/\\/$/, ''); // can't have trailing slashes\n return proxyBase + remainingUrl;\n }\n}\n\nexport { NoSessionProxy };\nexport default NoSessionProxy;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,cAAc,SAASC,
|
|
1
|
+
{"version":3,"file":"no-session-proxy.js","names":["NoSessionProxy","JWProxy","constructor","opts","getUrlForProxy","url","proxyBase","scheme","server","port","base","remainingUrl","RegExp","test","Error","replace"],"sources":["../../lib/no-session-proxy.js"],"sourcesContent":["import { JWProxy } from '@appium/base-driver';\n\n\nclass NoSessionProxy extends JWProxy {\n constructor (opts = {}) {\n super(opts);\n }\n\n getUrlForProxy (url) {\n if (url === '') {\n url = '/';\n }\n const proxyBase = `${this.scheme}://${this.server}:${this.port}${this.base}`;\n let remainingUrl = '';\n if ((new RegExp('^/')).test(url)) {\n remainingUrl = url;\n } else {\n throw new Error(`Did not know what to do with url '${url}'`);\n }\n remainingUrl = remainingUrl.replace(/\\/$/, ''); // can't have trailing slashes\n return proxyBase + remainingUrl;\n }\n}\n\nexport { NoSessionProxy };\nexport default NoSessionProxy;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,cAAc,SAASC,mBAAO,CAAC;EACnCC,WAAW,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,KAAK,CAACA,IAAI,CAAC;EACb;EAEAC,cAAc,CAAEC,GAAG,EAAE;IACnB,IAAIA,GAAG,KAAK,EAAE,EAAE;MACdA,GAAG,GAAG,GAAG;IACX;IACA,MAAMC,SAAS,GAAI,GAAE,IAAI,CAACC,MAAO,MAAK,IAAI,CAACC,MAAO,IAAG,IAAI,CAACC,IAAK,GAAE,IAAI,CAACC,IAAK,EAAC;IAC5E,IAAIC,YAAY,GAAG,EAAE;IACrB,IAAK,IAAIC,MAAM,CAAC,IAAI,CAAC,CAAEC,IAAI,CAACR,GAAG,CAAC,EAAE;MAChCM,YAAY,GAAGN,GAAG;IACpB,CAAC,MAAM;MACL,MAAM,IAAIS,KAAK,CAAE,qCAAoCT,GAAI,GAAE,CAAC;IAC9D;IACAM,YAAY,GAAGA,YAAY,CAACI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9C,OAAOT,SAAS,GAAGK,YAAY;EACjC;AACF;AAAC;AAAA,eAGcX,cAAc;AAAA"}
|
package/build/lib/utils.js
CHANGED
|
@@ -21,7 +21,7 @@ exports.setRealDeviceSecurity = setRealDeviceSecurity;
|
|
|
21
21
|
exports.setXctestrunFile = setXctestrunFile;
|
|
22
22
|
exports.updateProjectFile = updateProjectFile;
|
|
23
23
|
require("source-map-support/register");
|
|
24
|
-
var _support = require("appium/support");
|
|
24
|
+
var _support = require("@appium/support");
|
|
25
25
|
var _teen_process = require("teen_process");
|
|
26
26
|
var _path = _interopRequireDefault(require("path"));
|
|
27
27
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
@@ -271,4 +271,4 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
|
|
|
271
271
|
return await filteringFunc(stdout);
|
|
272
272
|
});
|
|
273
273
|
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQUk9KRUNUX0ZJTEUiLCJnZXRNb2R1bGVSb290IiwiXyIsIm1lbW9pemUiLCJjdXJyZW50RGlyIiwicGF0aCIsImRpcm5hbWUiLCJyZXNvbHZlIiwiX19maWxlbmFtZSIsImlzQXRGc1Jvb3QiLCJtYW5pZmVzdFBhdGgiLCJqb2luIiwiX2ZzIiwiZXhpc3RzU3luYyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsIm5hbWUiLCJpZ24iLCJsZW5ndGgiLCJFcnJvciIsIkJPT1RTVFJBUF9QQVRIIiwiZ2V0UElEc1VzaW5nUGF0dGVybiIsInBhdHRlcm4iLCJhcmdzIiwic3Rkb3V0IiwiZXhlYyIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJjb2RlIiwia2lsbEFwcFVzaW5nUGF0dGVybiIsInBncmVwUGF0dGVybiIsInNpZ25hbHMiLCJzaWduYWwiLCJtYXRjaGVkUGlkcyIsImlzRW1wdHkiLCJtZXNzYWdlIiwibGFzdCIsIndhaXRGb3JDb25kaXRpb24iLCJwaWRDaGVja1Byb21pc2VzIiwicGlkIiwidGhlbiIsImNhdGNoIiwiQiIsImFsbCIsImV2ZXJ5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzVHZPUyIsInBsYXRmb3JtTmFtZSIsInRvTG93ZXIiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJyZXBsYWNlSW5GaWxlIiwiZmlsZSIsImZpbmQiLCJyZXBsYWNlIiwiY29udGVudHMiLCJmcyIsInJlYWRGaWxlIiwibmV3Q29udGVudHMiLCJ3cml0ZUZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsImFnZW50UGF0aCIsIm5ld0J1bmRsZUlkIiwicHJvamVjdEZpbGVQYXRoIiwiY29weUZpbGUiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIndhcm4iLCJyZXNldFByb2plY3RGaWxlIiwiZXhpc3RzIiwibXYiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUiLCJvcmdJZCIsInNpZ25pbmdJZCIsInhjY29uZmlnUGF0aCIsInRlbXBEaXIiLCJzZXRYY3Rlc3RydW5GaWxlIiwiZGV2aWNlSW5mbyIsInNka1ZlcnNpb24iLCJib290c3RyYXBQYXRoIiwid2RhUmVtb3RlUG9ydCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwiZ2V0WGN0ZXN0cnVuRmlsZVBhdGgiLCJ4Y3Rlc3RSdW5Db250ZW50IiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsInVwZGF0ZVdEQVBvcnQiLCJnZXRBZGRpdGlvbmFsUnVuQ29udGVudCIsIm5ld1hjdGVzdFJ1bkNvbnRlbnQiLCJtZXJnZSIsInVwZGF0ZVBsaXN0RmlsZSIsInJ1bm5lciIsIkVudmlyb25tZW50VmFyaWFibGVzIiwiVVNFX1BPUlQiLCJzZGtCYXNlZCIsInVkaWQiLCJwbGF0Zm9ybUJhc2VkIiwicGxhdGZvcm1WZXJzaW9uIiwiZmlsZVBhdGgiLCJ2ZXJzaW9uIiwiaW5mbyIsIm9yaWdpbmFsWGN0ZXN0cnVuRmlsZSIsImdldFhjdGVzdHJ1bkZpbGVOYW1lIiwiZXJyb3JBbmRUaHJvdyIsImlzUmVhbERldmljZSIsImtpbGxQcm9jZXNzIiwicHJvYyIsImlzUnVubmluZyIsInN0b3AiLCJpbmNsdWRlcyIsInJhbmRvbUludCIsImxvdyIsImhpZ2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwicGFja2FnZU1hbmlmZXN0IiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsInJlc2V0VGVzdFByb2Nlc3NlcyIsImlzU2ltdWxhdG9yIiwicHJvY2Vzc1BhdHRlcm5zIiwicHVzaCIsImdldFBJRHNMaXN0ZW5pbmdPblBvcnQiLCJwb3J0IiwiZmlsdGVyaW5nRnVuYyIsInJlc3VsdCIsInRyaW0iLCJlIiwic3RkZXJyIiwiaXNGdW5jdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUFJPSkVDVF9GSUxFID0gJ3Byb2plY3QucGJ4cHJvaic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKF9fZmlsZW5hbWUpKTtcbiAgbGV0IGlzQXRGc1Jvb3QgPSBmYWxzZTtcbiAgd2hpbGUgKCFpc0F0RnNSb290KSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKF9mcy5leGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkgJiZcbiAgICAgICAgICBKU09OLnBhcnNlKF9mcy5yZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmOCcpKS5uYW1lID09PSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50Jykge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICBpc0F0RnNSb290ID0gY3VycmVudERpci5sZW5ndGggPD0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpLmxlbmd0aDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSByb290IGZvbGRlciBvZiB0aGUgYXBwaXVtLXdlYmRyaXZlcmFnZW50IE5vZGUuanMgbW9kdWxlJyk7XG59KTtcblxuZXhwb3J0IGNvbnN0IEJPT1RTVFJBUF9QQVRIID0gZ2V0TW9kdWxlUm9vdCgpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPU1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxZQUFZLEdBQUcsaUJBQWlCOztB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
|
|
274
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQUk9KRUNUX0ZJTEUiLCJnZXRNb2R1bGVSb290IiwiXyIsIm1lbW9pemUiLCJjdXJyZW50RGlyIiwicGF0aCIsImRpcm5hbWUiLCJyZXNvbHZlIiwiX19maWxlbmFtZSIsImlzQXRGc1Jvb3QiLCJtYW5pZmVzdFBhdGgiLCJqb2luIiwiX2ZzIiwiZXhpc3RzU3luYyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsIm5hbWUiLCJpZ24iLCJsZW5ndGgiLCJFcnJvciIsIkJPT1RTVFJBUF9QQVRIIiwiZ2V0UElEc1VzaW5nUGF0dGVybiIsInBhdHRlcm4iLCJhcmdzIiwic3Rkb3V0IiwiZXhlYyIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJjb2RlIiwia2lsbEFwcFVzaW5nUGF0dGVybiIsInBncmVwUGF0dGVybiIsInNpZ25hbHMiLCJzaWduYWwiLCJtYXRjaGVkUGlkcyIsImlzRW1wdHkiLCJtZXNzYWdlIiwibGFzdCIsIndhaXRGb3JDb25kaXRpb24iLCJwaWRDaGVja1Byb21pc2VzIiwicGlkIiwidGhlbiIsImNhdGNoIiwiQiIsImFsbCIsImV2ZXJ5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzVHZPUyIsInBsYXRmb3JtTmFtZSIsInRvTG93ZXIiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJyZXBsYWNlSW5GaWxlIiwiZmlsZSIsImZpbmQiLCJyZXBsYWNlIiwiY29udGVudHMiLCJmcyIsInJlYWRGaWxlIiwibmV3Q29udGVudHMiLCJ3cml0ZUZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsImFnZW50UGF0aCIsIm5ld0J1bmRsZUlkIiwicHJvamVjdEZpbGVQYXRoIiwiY29weUZpbGUiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIndhcm4iLCJyZXNldFByb2plY3RGaWxlIiwiZXhpc3RzIiwibXYiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUiLCJvcmdJZCIsInNpZ25pbmdJZCIsInhjY29uZmlnUGF0aCIsInRlbXBEaXIiLCJzZXRYY3Rlc3RydW5GaWxlIiwiZGV2aWNlSW5mbyIsInNka1ZlcnNpb24iLCJib290c3RyYXBQYXRoIiwid2RhUmVtb3RlUG9ydCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwiZ2V0WGN0ZXN0cnVuRmlsZVBhdGgiLCJ4Y3Rlc3RSdW5Db250ZW50IiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsInVwZGF0ZVdEQVBvcnQiLCJnZXRBZGRpdGlvbmFsUnVuQ29udGVudCIsIm5ld1hjdGVzdFJ1bkNvbnRlbnQiLCJtZXJnZSIsInVwZGF0ZVBsaXN0RmlsZSIsInJ1bm5lciIsIkVudmlyb25tZW50VmFyaWFibGVzIiwiVVNFX1BPUlQiLCJzZGtCYXNlZCIsInVkaWQiLCJwbGF0Zm9ybUJhc2VkIiwicGxhdGZvcm1WZXJzaW9uIiwiZmlsZVBhdGgiLCJ2ZXJzaW9uIiwiaW5mbyIsIm9yaWdpbmFsWGN0ZXN0cnVuRmlsZSIsImdldFhjdGVzdHJ1bkZpbGVOYW1lIiwiZXJyb3JBbmRUaHJvdyIsImlzUmVhbERldmljZSIsImtpbGxQcm9jZXNzIiwicHJvYyIsImlzUnVubmluZyIsInN0b3AiLCJpbmNsdWRlcyIsInJhbmRvbUludCIsImxvdyIsImhpZ2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwicGFja2FnZU1hbmlmZXN0IiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsInJlc2V0VGVzdFByb2Nlc3NlcyIsImlzU2ltdWxhdG9yIiwicHJvY2Vzc1BhdHRlcm5zIiwicHVzaCIsImdldFBJRHNMaXN0ZW5pbmdPblBvcnQiLCJwb3J0IiwiZmlsdGVyaW5nRnVuYyIsInJlc3VsdCIsInRyaW0iLCJlIiwic3RkZXJyIiwiaXNGdW5jdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFdEQV9SVU5ORVJfQlVORExFX0lELCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBhdGggdG8gdGhlIGN1cnJlbnQgbW9kdWxlJ3Mgcm9vdCBmb2xkZXJcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIG1vZHVsZSByb290XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGN1cnJlbnQgbW9kdWxlIHJvb3QgZm9sZGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmNvbnN0IGdldE1vZHVsZVJvb3QgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0TW9kdWxlUm9vdCAoKSB7XG4gIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShfX2ZpbGVuYW1lKSk7XG4gIGxldCBpc0F0RnNSb290ID0gZmFsc2U7XG4gIHdoaWxlICghaXNBdEZzUm9vdCkge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfZnMuZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpICYmXG4gICAgICAgICAgSlNPTi5wYXJzZShfZnMucmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgJ3V0ZjgnKSkubmFtZSA9PT0gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCcpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgaXNBdEZzUm9vdCA9IGN1cnJlbnREaXIubGVuZ3RoIDw9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKS5sZW5ndGg7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIGFwcGl1bS13ZWJkcml2ZXJhZ2VudCBOb2RlLmpzIG1vZHVsZScpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBCT09UU1RSQVBfUEFUSCA9IGdldE1vZHVsZVJvb3QoKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc1VzaW5nUGF0dGVybiAocGF0dGVybikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctaWYnLCAvLyBjYXNlIGluc2Vuc2l0aXZlLCBmdWxsIGNtZGxpbmUgbWF0Y2hcbiAgICBwYXR0ZXJuLFxuICBdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBhcmdzKTtcbiAgICByZXR1cm4gc3Rkb3V0LnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAoKHgpID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgICAgIC5maWx0ZXIoXy5pc0ludGVnZXIpXG4gICAgICAubWFwKCh4KSA9PiBgJHt4fWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYCdwZ3JlcCAke2FyZ3Muam9pbignICcpfScgZGlkbid0IGRldGVjdCBhbnkgbWF0Y2hpbmcgcHJvY2Vzc2VzLiBSZXR1cm4gY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbEFwcFVzaW5nUGF0dGVybiAocGdyZXBQYXR0ZXJuKSB7XG4gIGNvbnN0IHNpZ25hbHMgPSBbMiwgMTUsIDldO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBzaWduYWxzKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBpZHMgPSBhd2FpdCBnZXRQSURzVXNpbmdQYXR0ZXJuKHBncmVwUGF0dGVybik7XG4gICAgaWYgKF8uaXNFbXB0eShtYXRjaGVkUGlkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IFtgLSR7c2lnbmFsfWAsIC4uLm1hdGNoZWRQaWRzXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBraWxsICR7YXJncy5qb2luKCcgJyl9IC0+ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzaWduYWwgPT09IF8ubGFzdChzaWduYWxzKSkge1xuICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGFmdGVyIFNJR0tJTExcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwaWRDaGVja1Byb21pc2VzID0gbWF0Y2hlZFBpZHNcbiAgICAgICAgICAubWFwKChwaWQpID0+IGV4ZWMoJ2tpbGwnLCBbJy0wJywgcGlkXSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIGRlYWRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgQi5hbGwocGlkQ2hlY2tQcm9taXNlcykpXG4gICAgICAgICAgLmV2ZXJ5KCh4KSA9PiB4ID09PSB0cnVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiAxMDAwLFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIHRyeSB0aGUgbmV4dCBzaWduYWxcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsYXRvcm1cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqL1xuZnVuY3Rpb24gaXNUdk9TIChwbGF0Zm9ybU5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihwbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZSAoZmlsZSwgZmluZCwgcmVwbGFjZSkge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuXG4gIGxldCBuZXdDb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoZmluZCwgcmVwbGFjZSk7XG4gIGlmIChuZXdDb250ZW50cyAhPT0gY29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMsICd1dGY4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgd2l0aCBuZXdCdW5kbGVJZC5cbiAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgcHJvamVjdCBmaWxlIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0J1bmRsZUlkIHRoZSBuZXcgYnVuZGxlIElEIHVzZWQgdG8gdXBkYXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RmlsZSAoYWdlbnRQYXRoLCBuZXdCdW5kbGVJZCkge1xuICBsZXQgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyBwcm9qZWN0RmlsZVBhdGggaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUsIGNyZWF0ZSAub2xkIGZyb20gcHJvamVjdEZpbGVQYXRoXG4gICAgYXdhaXQgZnMuY29weUZpbGUocHJvamVjdEZpbGVQYXRoLCBgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApO1xuICAgIGF3YWl0IHJlcGxhY2VJbkZpbGUocHJvamVjdEZpbGVQYXRoLCBuZXcgUmVnRXhwKF8uZXNjYXBlUmVnRXhwKFdEQV9SVU5ORVJfQlVORExFX0lEKSwgJ2cnKSwgbmV3QnVuZGxlSWQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgdXBkYXRlZCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgdXBkYXRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gdXBkYXRlIHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nLiBXZWJEcml2ZXJBZ2VudCBtYXkgbm90IHN0YXJ0YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB0byBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFByb2plY3RGaWxlIChhZ2VudFBhdGgpIHtcbiAgY29uc3QgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5qb2luKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN0b3JlIHByb2plY3RGaWxlUGF0aCBmcm9tIC5vbGQgZmlsZVxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byByZXNldFxuICAgIH1cbiAgICBhd2FpdCBmcy5tdihgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGAsIHByb2plY3RGaWxlUGF0aCk7XG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgcmVzZXQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHJlc2V0dGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9Jy4gV2ViRHJpdmVyQWdlbnQgaGFzIGJlZW4gYCArXG4gICAgICBgbW9kaWZpZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgb3JpZ2luYWwgc3RhdGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0UmVhbERldmljZVNlY3VyaXR5IChrZXljaGFpblBhdGgsIGtleWNoYWluUGFzc3dvcmQpIHtcbiAgbG9nLmRlYnVnKCdTZXR0aW5nIHNlY3VyaXR5IGZvciBpT1MgZGV2aWNlJyk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICdsaXN0LWtleWNoYWlucycsICctcycsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAndW5sb2NrLWtleWNoYWluJywgJy1wJywga2V5Y2hhaW5QYXNzd29yZCwga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWydzZXQta2V5Y2hhaW4tc2V0dGluZ3MnLCAnLXQnLCAnMzYwMCcsICctbCcsIGtleWNoYWluUGF0aF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSAob3JnSWQsIHNpZ25pbmdJZCkge1xuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgZm9yIG9yZ0lkICcke29yZ0lkfScgYW5kIHNpZ25pbmdJZCBgICtcbiAgICAgICAgICAgIGAnJHtzaWduaW5nSWR9J2ApO1xuICBjb25zdCBjb250ZW50cyA9IGBERVZFTE9QTUVOVF9URUFNID0gJHtvcmdJZH1cbkNPREVfU0lHTl9JREVOVElUWSA9ICR7c2lnbmluZ0lkfVxuYDtcbiAgY29uc3QgeGNjb25maWdQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKCdhcHBpdW0tdGVtcC54Y2NvbmZpZycpO1xuICBsb2cuZGVidWcoYFdyaXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgdG8gJHt4Y2NvbmZpZ1BhdGh9YCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh4Y2NvbmZpZ1BhdGgsIGNvbnRlbnRzLCAndXRmOCcpO1xuICByZXR1cm4geGNjb25maWdQYXRoO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzUmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybVZlcnNpb24gLSBUaGUgcGxhdGZvcm0gdmVyc2lvbiBvZiBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgcGxhdGZvcm0gbmFtZSBvZiBpT1MsIHR2T1NcbiovXG4vKipcbiAqIENyZWF0ZXMgeGN0ZXN0cnVuIGZpbGUgcGVyIGRldmljZSAmIHBsYXRmb3JtIHZlcnNpb24uXG4gKiBXZSBleHBlY3RzIHRvIGhhdmUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBhbmQgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGxvY2F0ZWQgQGJvb3RzdHJhcFBhdGhcbiAqIE5ld2VyIFhjb2RlIChYY29kZSAxMC4wIGF0IGxlYXN0KSBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb2xsb3dpbmcgc2RrVmVyc2lvbi5cbiAqIGUuZy4gWGNvZGUgd2hpY2ggaGFzIGlPUyBTREsgVmVyc2lvbiAxMi4yIGdlbmVyYXRlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvci4yLXg4Nl82NC54Y3Rlc3RydW5cbiAqICAgICAgZXZlbiBpZiB0aGUgY2FwIGhhcyBwbGF0Zm9ybSB2ZXJzaW9uIDExLjRcbiAqXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZGFSZW1vdGVQb3J0IC0gVGhlIHJlbW90ZSBwb3J0IFdEQSBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICogQHRocm93cyBpZiBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIG9yIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBpcyBub3QgZm91bmQgQGJvb3RzdHJhcFBhdGgsXG4gKiB0aGVuIGl0IHdpbGwgdGhyb3cgZmlsZSBub3QgZm91bmQgZXhjZXB0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFhjdGVzdHJ1bkZpbGUgKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgeGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBnZXRYY3Rlc3RydW5GaWxlUGF0aChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKTtcbiAgY29uc3QgeGN0ZXN0UnVuQ29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoKTtcbiAgY29uc3QgdXBkYXRlV0RBUG9ydCA9IGdldEFkZGl0aW9uYWxSdW5Db250ZW50KGRldmljZUluZm8ucGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KTtcbiAgY29uc3QgbmV3WGN0ZXN0UnVuQ29udGVudCA9IF8ubWVyZ2UoeGN0ZXN0UnVuQ29udGVudCwgdXBkYXRlV0RBUG9ydCk7XG4gIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCwgbmV3WGN0ZXN0UnVuQ29udGVudCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIHhjdGVzdHJ1bkZpbGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgV0RBIG9iamVjdCB3aGljaCBhcHBlbmRzIGV4aXN0aW5nIHhjdGVzdCBydW5uZXIgY29udGVudFxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtvYmplY3R9IHJldHVybnMgYSBydW5uZXIgb2JqZWN0IHdoaWNoIGhhcyBVU0VfUE9SVFxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCAocGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHJ1bm5lciA9IGBXZWJEcml2ZXJBZ2VudFJ1bm5lciR7aXNUdk9TKHBsYXRmb3JtTmFtZSkgPyAnX3R2T1MnIDogJyd9YDtcblxuICByZXR1cm4ge1xuICAgIFtydW5uZXJdOiB7XG4gICAgICBFbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAvLyBVU0VfUE9SVCBtdXN0IGJlICdzdHJpbmcnXG4gICAgICAgIFVTRV9QT1JUOiBgJHt3ZGFSZW1vdGVQb3J0fWBcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShnZXRNb2R1bGVSb290KCksICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocGFja2FnZU1hbmlmZXN0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHttdGltZX0gPSBhd2FpdCBmcy5zdGF0KHBhY2thZ2VNYW5pZmVzdCk7XG4gIHJldHVybiBtdGltZS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogS2lsbHMgcnVubmluZyBYQ1Rlc3QgcHJvY2Vzc2VzIGZvciB0aGUgcGFydGljdWxhciBkZXZpY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU2ltdWxhdG9yIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgU2ltdWxhdG9yXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0VGVzdFByb2Nlc3NlcyAodWRpZCwgaXNTaW11bGF0b3IpIHtcbiAgY29uc3QgcHJvY2Vzc1BhdHRlcm5zID0gW2B4Y29kZWJ1aWxkLioke3VkaWR9YF07XG4gIGlmIChpc1NpbXVsYXRvcikge1xuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGAke3VkaWR9LipYQ1RSdW5uZXJgKTtcbiAgICAvLyBUaGUgcGF0dGVybiB0byBmaW5kIGluIGNhc2UgaWRiIHdhcyB1c2VkXG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYHhjdGVzdC4qJHt1ZGlkfWApO1xuICB9XG4gIGxvZy5kZWJ1ZyhgS2lsbGluZyBydW5uaW5nIHByb2Nlc3NlcyAnJHtwcm9jZXNzUGF0dGVybnMuam9pbignLCAnKX0nIGZvciB0aGUgZGV2aWNlICR7dWRpZH0uLi5gKTtcbiAgYXdhaXQgQi5hbGwocHJvY2Vzc1BhdHRlcm5zLm1hcChraWxsQXBwVXNpbmdQYXR0ZXJuKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBJRHMgb2YgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiB0aGUgcGFydGljdWxhciBzeXN0ZW0gcG9ydC5cbiAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwbHkgYWRkaXRpb25hbCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlXG4gKiBwcm9jZXNzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBvcnQgLSBUaGUgcG9ydCBudW1iZXIuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZmlsdGVyaW5nRnVuYyAtIE9wdGlvbmFsIGxhbWJkYSBmdW5jdGlvbiwgd2hpY2hcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXMgY29tbWFuZCBsaW5lIHN0cmluZyBvZiB0aGUgcGFydGljdWxhciBwcm9jZXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZyBvbiBnaXZlbiBwb3J0LCBhbmQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUvZXhjbHVkZSB0aGUgY29ycmVzcG9uZGluZyBQSURcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcmVzdWx0aW5nIGFycmF5LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IC0gdGhlIGxpc3Qgb2YgbWF0Y2hlZCBwcm9jZXNzIGlkcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc0xpc3RlbmluZ09uUG9ydCAocG9ydCwgZmlsdGVyaW5nRnVuYyA9IG51bGwpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBvbmx5IHdvcmtzIHNpbmNlIE1hYyBPUyBYIEVsIENhcGl0YW5cbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2xzb2YnLCBbJy10aScsIGB0Y3A6JHtwb3J0fWBdKTtcbiAgICByZXN1bHQucHVzaCguLi4oc3Rkb3V0LnRyaW0oKS5zcGxpdCgvXFxuKy8pKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlICE9PSAxKSB7XG4gICAgICAvLyBjb2RlIDEgbWVhbnMgbm8gcHJvY2Vzc2VzLiBPdGhlciBlcnJvcnMgbmVlZCByZXBvcnRpbmdcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgZ2V0dGluZyBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHBvcnQgJyR7cG9ydH0nOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghXy5pc0Z1bmN0aW9uKGZpbHRlcmluZ0Z1bmMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gYXdhaXQgQi5maWx0ZXIocmVzdWx0LCBhc3luYyAocGlkKSA9PiB7XG4gICAgbGV0IHN0ZG91dDtcbiAgICB0cnkge1xuICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncHMnLCBbJy1wJywgcGlkLCAnLW8nLCAnY29tbWFuZCddKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gMSkge1xuICAgICAgICAvLyBUaGUgcHJvY2VzcyBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aGVyZSdzIG5vdGhpbmcgdG8gZmlsdGVyXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBmaWx0ZXJpbmdGdW5jKHN0ZG91dCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwgc2V0UmVhbERldmljZVNlY3VyaXR5LFxuICBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUsIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLFxuICBzZXRYY3Rlc3RydW5GaWxlLCBnZXRYY3Rlc3RydW5GaWxlUGF0aCwga2lsbFByb2Nlc3MsIHJhbmRvbUludCxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLFxuICBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBraWxsQXBwVXNpbmdQYXR0ZXJuLCBpc1R2T1Ncbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsWUFBWSxHQUFHLGlCQUFpQjs7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
|