appium-webdriveragent 3.13.3 → 3.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/PrivateHeaders/.DS_Store +0 -0
  2. package/Scripts/build.sh +13 -16
  3. package/WebDriverAgent.xcodeproj/project.pbxproj +26 -2
  4. package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  5. package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +91 -0
  6. package/WebDriverAgent.xcodeproj/xcuserdata/{kazuaki.xcuserdatad → elf.xcuserdatad}/xcschemes/xcschememanagement.plist +12 -35
  7. package/WebDriverAgentLib/.DS_Store +0 -0
  8. package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +1 -4
  9. package/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.h +23 -0
  10. package/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.m +32 -0
  11. package/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +10 -1
  12. package/WebDriverAgentLib/Commands/FBCustomCommands.m +10 -2
  13. package/WebDriverAgentLib/Routing/FBElement.h +2 -2
  14. package/WebDriverAgentLib/Routing/FBResponsePayload.m +1 -1
  15. package/WebDriverAgentLib/Utilities/FBConfiguration.h +5 -0
  16. package/WebDriverAgentLib/Utilities/FBConfiguration.m +6 -0
  17. package/WebDriverAgentLib/Utilities/FBMathUtils.h +0 -3
  18. package/WebDriverAgentLib/Utilities/FBMathUtils.m +0 -13
  19. package/WebDriverAgentLib/Utilities/FBReflectionUtils.h +24 -0
  20. package/WebDriverAgentLib/Utilities/FBReflectionUtils.m +32 -0
  21. package/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +5 -23
  22. package/WebDriverAgentLib/Utilities/LRUCache/.DS_Store +0 -0
  23. package/WebDriverAgentLib/Vendor/.DS_Store +0 -0
  24. package/WebDriverAgentRunner/.DS_Store +0 -0
  25. package/WebDriverAgentRunner/UITestingUITests.m +1 -0
  26. package/WebDriverAgentRunner-Runner.app.zip +0 -0
  27. package/WebDriverAgentTests/IntegrationApp/Resources/.DS_Store +0 -0
  28. package/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +1 -0
  29. package/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +13 -10
  30. package/build/index.js +3 -5
  31. package/build/lib/utils.js +2 -2
  32. package/build/lib/webdriveragent.js +1 -1
  33. package/build/lib/xcodebuild.js +1 -1
  34. package/lib/utils.js +2 -1
  35. package/package.json +1 -1
  36. package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/kazuaki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  37. package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/kazuaki.xcuserdatad/WorkspaceSettings.xcsettings +0 -20
  38. package/WebDriverAgent.xcodeproj/xcuserdata/kazuaki.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -1446
@@ -13,9 +13,10 @@
13
13
 
14
14
  #import "FBConfiguration.h"
15
15
  #import "FBLogger.h"
16
+ #import "FBMacros.h"
17
+ #import "FBReflectionUtils.h"
16
18
  #import "XCAXClient_iOS.h"
17
19
  #import "XCUIDevice.h"
18
- #import "FBMacros.h"
19
20
 
20
21
  static id FBAXClient = nil;
21
22
 
@@ -35,28 +36,9 @@ static id FBAXClient = nil;
35
36
  {
36
37
  static dispatch_once_t onceToken;
37
38
  dispatch_once(&onceToken, ^{
38
- Class class = [self class];
39
-
40
- SEL originalSelector = @selector(defaultParameters);
41
- SEL swizzledSelector = @selector(fb_getParametersForElementSnapshot);
42
-
43
- Method originalMethod = class_getInstanceMethod(class, originalSelector);
44
- Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
45
-
46
- BOOL didAddMethod =
47
- class_addMethod(class,
48
- originalSelector,
49
- method_getImplementation(swizzledMethod),
50
- method_getTypeEncoding(swizzledMethod));
51
-
52
- if (didAddMethod) {
53
- class_replaceMethod(class,
54
- swizzledSelector,
55
- method_getImplementation(originalMethod),
56
- method_getTypeEncoding(originalMethod));
57
- } else {
58
- method_exchangeImplementations(originalMethod, swizzledMethod);
59
- }
39
+ SEL originalParametersSelector = @selector(defaultParameters);
40
+ SEL swizzledParametersSelector = @selector(fb_getParametersForElementSnapshot);
41
+ FBReplaceMethod([self class], originalParametersSelector, swizzledParametersSelector);
60
42
  });
61
43
  }
62
44
 
Binary file
@@ -25,6 +25,7 @@
25
25
  [FBDebugLogDelegateDecorator decorateXCTestLogger];
26
26
  [FBConfiguration disableRemoteQueryEvaluation];
27
27
  [FBConfiguration configureDefaultKeyboardPreferences];
28
+ [FBConfiguration disableApplicationUIInterruptionsHandling];
28
29
  if (NSProcessInfo.processInfo.environment[@"ENABLE_AUTOMATIC_SCREENSHOTS"]) {
29
30
  [FBConfiguration enableScreenshots];
30
31
  } else {
Binary file
@@ -29,6 +29,7 @@
29
29
  dispatch_once(&onceToken, ^{
30
30
  [self launchApplication];
31
31
  [self goToAlertsPage];
32
+ [FBConfiguration disableApplicationUIInterruptionsHandling];
32
33
  });
33
34
  [self clearAlert];
34
35
  }
@@ -46,28 +46,31 @@ static NSString *const SAFARI_BUNDLE_ID = @"com.apple.mobilesafari";
46
46
  [self.session terminateApplicationWithBundleId:SAFARI_BUNDLE_ID];
47
47
  }
48
48
 
49
- - (void)testCanHandleSafariInputPrompt
49
+ - (void)disabled_testCanHandleSafariInputPrompt
50
50
  {
51
- XCUIElement *urlInput = [[self.safariApp descendantsMatchingType:XCUIElementTypeTextField] matchingIdentifier:@"URL"].firstMatch;
51
+ XCUIElement *urlInput = [[self.safariApp
52
+ descendantsMatchingType:XCUIElementTypeTextField]
53
+ matchingPredicate:[
54
+ NSPredicate predicateWithFormat:@"label == 'Address' or label == 'URL'"
55
+ ]].firstMatch;
52
56
  if (!urlInput.exists) {
53
- [[[self.safariApp descendantsMatchingType:XCUIElementTypeButton] matchingIdentifier:@"URL"].firstMatch tap];
57
+ [[[self.safariApp descendantsMatchingType:XCUIElementTypeButton] matchingPredicate:[
58
+ NSPredicate predicateWithFormat:@"label == 'Address' or label == 'URL'"]].firstMatch tap];
54
59
  }
55
- XCTAssertTrue([urlInput fb_typeText:@"https://www.seleniumeasy.com/test/javascript-alert-box-demo.html"
60
+ XCTAssertTrue([urlInput fb_typeText:@"https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert"
56
61
  shouldClear:YES
57
62
  error:nil]);
58
63
  [[[self.safariApp descendantsMatchingType:XCUIElementTypeButton] matchingIdentifier:@"Go"].firstMatch tap];
59
64
  XCUIElement *clickMeButton = [[self.safariApp descendantsMatchingType:XCUIElementTypeButton]
60
- matchingPredicate:[NSPredicate predicateWithFormat:@"label == 'Click for Prompt Box'"]].firstMatch;
65
+ matchingPredicate:[NSPredicate predicateWithFormat:@"label == 'Try it'"]].firstMatch;
61
66
  XCTAssertTrue([clickMeButton waitForExistenceWithTimeout:15.0]);
62
67
  [clickMeButton tap];
63
68
  FBAlert *alert = [FBAlert alertWithApplication:self.safariApp];
64
- FBAssertWaitTillBecomesTrue([alert.text isEqualToString:@"Please enter your name"]);
69
+ FBAssertWaitTillBecomesTrue([alert.text isEqualToString:@"I am an alert box!"]);
65
70
  NSArray *buttonLabels = alert.buttonLabels;
66
- XCTAssertEqualObjects(buttonLabels.firstObject, @"Cancel");
67
- XCTAssertNotNil([self.safariApp fb_descendantsMatchingXPathQuery:@"//XCUIElementTypeButton[@label='Cancel' and @visible='true']"
71
+ XCTAssertEqualObjects(buttonLabels.firstObject, @"Close");
72
+ XCTAssertNotNil([self.safariApp fb_descendantsMatchingXPathQuery:@"//XCUIElementTypeButton[@label='Close']"
68
73
  shouldReturnAfterFirstMatch:YES].firstObject);
69
- XCTAssertEqualObjects(buttonLabels.lastObject, @"OK");
70
- XCTAssertTrue([alert typeText:@"yolo" error:nil]);
71
74
  XCTAssertTrue([alert acceptWithError:nil]);
72
75
  }
73
76
 
package/build/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -19,10 +21,6 @@ var utils = _interopRequireWildcard(require("./lib/utils"));
19
21
 
20
22
  var _asyncbox = require("asyncbox");
21
23
 
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
24
  const {
27
25
  checkForDependencies,
28
26
  bundleWDASim
@@ -59,4 +57,4 @@ if (require.main === module) {
59
57
  }require('source-map-support').install();
60
58
 
61
59
 
62
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNoZWNrRm9yRGVwZW5kZW5jaWVzIiwiYnVuZGxlV0RBU2ltIiwiZGVwZW5kZW5jaWVzIiwiTm9TZXNzaW9uUHJveHkiLCJwcm94aWVzIiwiV2ViRHJpdmVyQWdlbnQiLCJkcml2ZXIiLCJXREFfQlVORExFX0lEIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUVBLEVBQUFBLG9CQUFGO0FBQXdCQyxFQUFBQTtBQUF4QixJQUF5Q0MsWUFBL0M7OztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFxQkMsT0FBM0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQXFCQyxNQUEzQjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLGFBQUY7QUFBaUJDLEVBQUFBLGNBQWpCO0FBQWlDQyxFQUFBQSxZQUFqQztBQUErQ0MsRUFBQUEsb0JBQS9DO0FBQXFFQyxFQUFBQTtBQUFyRSxJQUFzRkMsU0FBNUY7Ozs7OztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF5QkMsS0FBL0I7OztBQUlBLElBQUlDLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7QUFDM0IsMEJBQVNqQixvQkFBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZGVwZW5kZW5jaWVzIGZyb20gJy4vbGliL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQgKiBhcyBwcm94aWVzIGZyb20gJy4vbGliL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL3dlYmRyaXZlcmFnZW50JztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgYXN5bmNpZnkgfSBmcm9tICdhc3luY2JveCc7XG5cblxuY29uc3QgeyBjaGVja0ZvckRlcGVuZGVuY2llcywgYnVuZGxlV0RBU2ltIH0gPSBkZXBlbmRlbmNpZXM7XG5jb25zdCB7IE5vU2Vzc2lvblByb3h5IH0gPSBwcm94aWVzO1xuY29uc3QgeyBXZWJEcml2ZXJBZ2VudCB9ID0gZHJpdmVyO1xuY29uc3QgeyBXREFfQlVORExFX0lELCBCT09UU1RSQVBfUEFUSCwgV0RBX0JBU0VfVVJMLCBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUFJPSkVDVF9GSUxFIH0gPSBjb25zdGFudHM7XG5jb25zdCB7IHJlc2V0VGVzdFByb2Nlc3NlcyB9ID0gdXRpbHM7XG5cblxuLy8gV2hlbiBydW4gYXMgYSBjb21tYW5kIGxpbmUgdXRpbGl0eSwgdGhpcyBzaG91bGQgY2hlY2sgZm9yIHRoZSBkZXBlbmRlbmNpZXNcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShjaGVja0ZvckRlcGVuZGVuY2llcyk7XG59XG5cbmV4cG9ydCB7XG4gIFdlYkRyaXZlckFnZW50LFxuICBOb1Nlc3Npb25Qcm94eSxcbiAgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSxcbiAgcmVzZXRUZXN0UHJvY2Vzc2VzLFxuICBCT09UU1RSQVBfUEFUSCwgV0RBX0JVTkRMRV9JRCxcbiAgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBST0pFQ1RfRklMRSxcbiAgV0RBX0JBU0VfVVJMLFxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4ifQ==
60
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNoZWNrRm9yRGVwZW5kZW5jaWVzIiwiYnVuZGxlV0RBU2ltIiwiZGVwZW5kZW5jaWVzIiwiTm9TZXNzaW9uUHJveHkiLCJwcm94aWVzIiwiV2ViRHJpdmVyQWdlbnQiLCJkcml2ZXIiLCJXREFfQlVORExFX0lEIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTTtBQUFFQSxFQUFBQSxvQkFBRjtBQUF3QkMsRUFBQUE7QUFBeEIsSUFBeUNDLFlBQS9DOzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBcUJDLE9BQTNCOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFxQkMsTUFBM0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxhQUFGO0FBQWlCQyxFQUFBQSxjQUFqQjtBQUFpQ0MsRUFBQUEsWUFBakM7QUFBK0NDLEVBQUFBLG9CQUEvQztBQUFxRUMsRUFBQUE7QUFBckUsSUFBc0ZDLFNBQTVGOzs7Ozs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBeUJDLEtBQS9COzs7QUFJQSxJQUFJQyxPQUFPLENBQUNDLElBQVIsS0FBaUJDLE1BQXJCLEVBQTZCO0FBQzNCLDBCQUFTakIsb0JBQVQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRlcGVuZGVuY2llcyBmcm9tICcuL2xpYi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0ICogYXMgcHJveGllcyBmcm9tICcuL2xpYi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi93ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5cbmNvbnN0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9ID0gZGVwZW5kZW5jaWVzO1xuY29uc3QgeyBOb1Nlc3Npb25Qcm94eSB9ID0gcHJveGllcztcbmNvbnN0IHsgV2ViRHJpdmVyQWdlbnQgfSA9IGRyaXZlcjtcbmNvbnN0IHsgV0RBX0JVTkRMRV9JRCwgQk9PVFNUUkFQX1BBVEgsIFdEQV9CQVNFX1VSTCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBST0pFQ1RfRklMRSB9ID0gY29uc3RhbnRzO1xuY29uc3QgeyByZXNldFRlc3RQcm9jZXNzZXMgfSA9IHV0aWxzO1xuXG5cbi8vIFdoZW4gcnVuIGFzIGEgY29tbWFuZCBsaW5lIHV0aWxpdHksIHRoaXMgc2hvdWxkIGNoZWNrIGZvciB0aGUgZGVwZW5kZW5jaWVzXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkoY2hlY2tGb3JEZXBlbmRlbmNpZXMpO1xufVxuXG5leHBvcnQge1xuICBXZWJEcml2ZXJBZ2VudCxcbiAgTm9TZXNzaW9uUHJveHksXG4gIGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0sXG4gIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9CVU5ETEVfSUQsXG4gIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUsXG4gIFdEQV9CQVNFX1VSTCxcbn07XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
@@ -176,7 +176,7 @@ function getAdditionalRunContent(platformName, wdaRemotePort) {
176
176
  return {
177
177
  [runner]: {
178
178
  EnvironmentVariables: {
179
- USE_PORT: wdaRemotePort
179
+ USE_PORT: `${wdaRemotePort}`
180
180
  }
181
181
  }
182
182
  };
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJST09UX0RJUiIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIlBST0pFQ1RfRklMRSIsImdldFBJRHNVc2luZ1BhdHRlcm4iLCJwYXR0ZXJuIiwiYXJncyIsInN0ZG91dCIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiXyIsImlzSW50ZWdlciIsImVyciIsImxvZyIsImRlYnVnIiwiam9pbiIsImNvZGUiLCJraWxsQXBwVXNpbmdQYXR0ZXJuIiwicGdyZXBQYXR0ZXJuIiwic2lnbmFscyIsInNpZ25hbCIsIm1hdGNoZWRQaWRzIiwiaXNFbXB0eSIsIm1lc3NhZ2UiLCJsYXN0IiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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QSxDQUFDLENBQUMzRyxJQUFGLEtBQVcsQ0FBZixFQUFrQjtBQUVoQixlQUFPLEtBQVA7QUFDRDs7QUFDRCxZQUFNMkcsQ0FBTjtBQUNEOztBQUNELFdBQU8sTUFBTUgsYUFBYSxDQUFDcEgsTUFBRCxDQUExQjtBQUNELEdBWlksQ0FBYjtBQWFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHBsaXN0IH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFdEQV9SVU5ORVJfQlVORExFX0lELCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBST09UX0RJUiA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuY29uc3QgUFJPSkVDVF9GSUxFID0gJ3Byb2plY3QucGJ4cHJvaic7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNVc2luZ1BhdHRlcm4gKHBhdHRlcm4pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLWlmJywgLy8gY2FzZSBpbnNlbnNpdGl2ZSwgZnVsbCBjbWRsaW5lIG1hdGNoXG4gICAgcGF0dGVybixcbiAgXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgYXJncyk7XG4gICAgcmV0dXJuIHN0ZG91dC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKCh4KSA9PiBwYXJzZUludCh4LCAxMCkpXG4gICAgICAuZmlsdGVyKF8uaXNJbnRlZ2VyKVxuICAgICAgLm1hcCgoeCkgPT4gYCR7eH1gKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGAncGdyZXAgJHthcmdzLmpvaW4oJyAnKX0nIGRpZG4ndCBkZXRlY3QgYW55IG1hdGNoaW5nIHByb2Nlc3Nlcy4gUmV0dXJuIGNvZGU6ICR7ZXJyLmNvZGV9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxBcHBVc2luZ1BhdHRlcm4gKHBncmVwUGF0dGVybikge1xuICBjb25zdCBzaWduYWxzID0gWzIsIDE1LCA5XTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIGNvbnN0IG1hdGNoZWRQaWRzID0gYXdhaXQgZ2V0UElEc1VzaW5nUGF0dGVybihwZ3JlcFBhdHRlcm4pO1xuICAgIGlmIChfLmlzRW1wdHkobWF0Y2hlZFBpZHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBbYC0ke3NpZ25hbH1gLCAuLi5tYXRjaGVkUGlkc107XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1Zyhga2lsbCAke2FyZ3Muam9pbignICcpfSAtPiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoc2lnbmFsID09PSBfLmxhc3Qoc2lnbmFscykpIHtcbiAgICAgIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBhZnRlciBTSUdLSUxMXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGlkQ2hlY2tQcm9taXNlcyA9IG1hdGNoZWRQaWRzXG4gICAgICAgICAgLm1hcCgocGlkKSA9PiBleGVjKCdraWxsJywgWyctMCcsIHBpZF0pXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gZmFsc2UpXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBkZWFkXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gdHJ1ZSlcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gKGF3YWl0IEIuYWxsKHBpZENoZWNrUHJvbWlzZXMpKVxuICAgICAgICAgIC5ldmVyeSgoeCkgPT4geCA9PT0gdHJ1ZSk7XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogMTAwMCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyB0cnkgdGhlIG5leHQgc2lnbmFsXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbGF0b3JtXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKi9cbmZ1bmN0aW9uIGlzVHZPUyAocGxhdGZvcm1OYW1lKSB7XG4gIHJldHVybiBfLnRvTG93ZXIocGxhdGZvcm1OYW1lKSA9PT0gXy50b0xvd2VyKFBMQVRGT1JNX05BTUVfVFZPUyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VJbkZpbGUgKGZpbGUsIGZpbmQsIHJlcGxhY2UpIHtcbiAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcblxuICBsZXQgbmV3Q29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKGZpbmQsIHJlcGxhY2UpO1xuICBpZiAobmV3Q29udGVudHMgIT09IGNvbnRlbnRzKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsIG5ld0NvbnRlbnRzLCAndXRmOCcpO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHdpdGggbmV3QnVuZGxlSWQuXG4gKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHByb2plY3QgZmlsZSBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdCdW5kbGVJZCB0aGUgbmV3IGJ1bmRsZSBJRCB1c2VkIHRvIHVwZGF0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJvamVjdEZpbGUgKGFnZW50UGF0aCwgbmV3QnVuZGxlSWQpIHtcbiAgbGV0IHByb2plY3RGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gQXNzdW1pbmcgcHJvamVjdEZpbGVQYXRoIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLCBjcmVhdGUgLm9sZCBmcm9tIHByb2plY3RGaWxlUGF0aFxuICAgIGF3YWl0IGZzLmNvcHlGaWxlKHByb2plY3RGaWxlUGF0aCwgYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKTtcbiAgICBhd2FpdCByZXBsYWNlSW5GaWxlKHByb2plY3RGaWxlUGF0aCwgbmV3IFJlZ0V4cChfLmVzY2FwZVJlZ0V4cChXREFfUlVOTkVSX0JVTkRMRV9JRCksICdnJyksIG5ld0J1bmRsZUlkKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHVwZGF0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHVwZGF0ZSBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9Jy4gV2ViRHJpdmVyQWdlbnQgbWF5IG5vdCBzdGFydGApO1xuICB9XG59XG5cbi8qKlxuICogUmVzZXQgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgdG8gY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRQcm9qZWN0RmlsZSAoYWdlbnRQYXRoKSB7XG4gIGNvbnN0IHByb2plY3RGaWxlUGF0aCA9IHBhdGguam9pbihhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gcmVzdG9yZSBwcm9qZWN0RmlsZVBhdGggZnJvbSAub2xkIGZpbGVcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApKSB7XG4gICAgICByZXR1cm47IC8vIG5vIG5lZWQgdG8gcmVzZXRcbiAgICB9XG4gICAgYXdhaXQgZnMubXYoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgLCBwcm9qZWN0RmlsZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHJlc2V0ICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciByZXNldHRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfScuIFdlYkRyaXZlckFnZW50IGhhcyBiZWVuIGAgK1xuICAgICAgYG1vZGlmaWVkIGFuZCBub3QgcmV0dXJuZWQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlLmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldFJlYWxEZXZpY2VTZWN1cml0eSAoa2V5Y2hhaW5QYXRoLCBrZXljaGFpblBhc3N3b3JkKSB7XG4gIGxvZy5kZWJ1ZygnU2V0dGluZyBzZWN1cml0eSBmb3IgaU9TIGRldmljZScpO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAnbGlzdC1rZXljaGFpbnMnLCAnLXMnLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ3VubG9jay1rZXljaGFpbicsICctcCcsIGtleWNoYWluUGFzc3dvcmQsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnc2V0LWtleWNoYWluLXNldHRpbmdzJywgJy10JywgJzM2MDAnLCAnLWwnLCBrZXljaGFpblBhdGhdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUgKG9yZ0lkLCBzaWduaW5nSWQpIHtcbiAgbG9nLmRlYnVnKGBHZW5lcmF0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIGZvciBvcmdJZCAnJHtvcmdJZH0nIGFuZCBzaWduaW5nSWQgYCArXG4gICAgICAgICAgICBgJyR7c2lnbmluZ0lkfSdgKTtcbiAgY29uc3QgY29udGVudHMgPSBgREVWRUxPUE1FTlRfVEVBTSA9ICR7b3JnSWR9XG5DT0RFX1NJR05fSURFTlRJVFkgPSAke3NpZ25pbmdJZH1cbmA7XG4gIGNvbnN0IHhjY29uZmlnUGF0aCA9IGF3YWl0IHRlbXBEaXIucGF0aCgnYXBwaXVtLXRlbXAueGNjb25maWcnKTtcbiAgbG9nLmRlYnVnKGBXcml0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIHRvICR7eGNjb25maWdQYXRofWApO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoeGNjb25maWdQYXRoLCBjb250ZW50cywgJ3V0ZjgnKTtcbiAgcmV0dXJuIHhjY29uZmlnUGF0aDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERldmljZUluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpc1JlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSByZWFsIGRldmljZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1WZXJzaW9uIC0gVGhlIHBsYXRmb3JtIHZlcnNpb24gb2YgT1MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIHBsYXRmb3JtIG5hbWUgb2YgaU9TLCB0dk9TXG4qL1xuLyoqXG4gKiBDcmVhdGVzIHhjdGVzdHJ1biBmaWxlIHBlciBkZXZpY2UgJiBwbGF0Zm9ybSB2ZXJzaW9uLlxuICogV2UgZXhwZWN0cyB0byBoYXZlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogYW5kIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBsb2NhdGVkIEBib290c3RyYXBQYXRoXG4gKiBOZXdlciBYY29kZSAoWGNvZGUgMTAuMCBhdCBsZWFzdCkgZ2VuZXJhdGUgeGN0ZXN0cnVuIGZpbGUgZm9sbG93aW5nIHNka1ZlcnNpb24uXG4gKiBlLmcuIFhjb2RlIHdoaWNoIGhhcyBpT1MgU0RLIFZlcnNpb24gMTIuMiBnZW5lcmF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3IuMi14ODZfNjQueGN0ZXN0cnVuXG4gKiAgICAgIGV2ZW4gaWYgdGhlIGNhcCBoYXMgcGxhdGZvcm0gdmVyc2lvbiAxMS40XG4gKlxuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gd2RhUmVtb3RlUG9ydCAtIFRoZSByZW1vdGUgcG9ydCBXREEgaXMgbGlzdGVuaW5nIG9uLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqIEB0aHJvd3MgaWYgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBvciBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgaXMgbm90IGZvdW5kIEBib290c3RyYXBQYXRoLFxuICogdGhlbiBpdCB3aWxsIHRocm93IGZpbGUgbm90IGZvdW5kIGV4Y2VwdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRYY3Rlc3RydW5GaWxlIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCk7XG4gIGNvbnN0IHhjdGVzdFJ1bkNvbnRlbnQgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCk7XG4gIGNvbnN0IHVwZGF0ZVdEQVBvcnQgPSBnZXRBZGRpdGlvbmFsUnVuQ29udGVudChkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCk7XG4gIGNvbnN0IG5ld1hjdGVzdFJ1bkNvbnRlbnQgPSBfLm1lcmdlKHhjdGVzdFJ1bkNvbnRlbnQsIHVwZGF0ZVdEQVBvcnQpO1xuICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgsIG5ld1hjdGVzdFJ1bkNvbnRlbnQsIHRydWUpO1xuXG4gIHJldHVybiB4Y3Rlc3RydW5GaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIFdEQSBvYmplY3Qgd2hpY2ggYXBwZW5kcyBleGlzdGluZyB4Y3Rlc3QgcnVubmVyIGNvbnRlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGxhdGZvcm1cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7b2JqZWN0fSByZXR1cm5zIGEgcnVubmVyIG9iamVjdCB3aGljaCBoYXMgVVNFX1BPUlRcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQgKHBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCBydW5uZXIgPSBgV2ViRHJpdmVyQWdlbnRSdW5uZXIke2lzVHZPUyhwbGF0Zm9ybU5hbWUpID8gJ190dk9TJyA6ICcnfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBbcnVubmVyXToge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgVVNFX1BPUlQ6IHdkYVJlbW90ZVBvcnRcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPUyxcbn07XG4iXSwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
317
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJST09UX0RJUiIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIlBST0pFQ1RfRklMRSIsImdldFBJRHNVc2luZ1BhdHRlcm4iLCJwYXR0ZXJuIiwiYXJncyIsInN0ZG91dCIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiXyIsImlzSW50ZWdlciIsImVyciIsImxvZyIsImRlYnVnIiwiam9pbiIsImNvZGUiLCJraWxsQXBwVXNpbmdQYXR0ZXJuIiwicGdyZXBQYXR0ZXJuIiwic2lnbmFscyIsInNpZ25hbCIsIm1hdGNoZWRQaWRzIiwiaXNFbXB0eSIsIm1lc3NhZ2UiLCJsYXN0IiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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LENBQUMsQ0FBQzNHLElBQUYsS0FBVyxDQUFmLEVBQWtCO0FBRWhCLGVBQU8sS0FBUDtBQUNEOztBQUNELFlBQU0yRyxDQUFOO0FBQ0Q7O0FBQ0QsV0FBTyxNQUFNSCxhQUFhLENBQUNwSCxNQUFELENBQTFCO0FBQ0QsR0FaWSxDQUFiO0FBYUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IFJPT1RfRElSID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG5jb25zdCBQUk9KRUNUX0ZJTEUgPSAncHJvamVjdC5wYnhwcm9qJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc1VzaW5nUGF0dGVybiAocGF0dGVybikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctaWYnLCAvLyBjYXNlIGluc2Vuc2l0aXZlLCBmdWxsIGNtZGxpbmUgbWF0Y2hcbiAgICBwYXR0ZXJuLFxuICBdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBhcmdzKTtcbiAgICByZXR1cm4gc3Rkb3V0LnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAoKHgpID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgICAgIC5maWx0ZXIoXy5pc0ludGVnZXIpXG4gICAgICAubWFwKCh4KSA9PiBgJHt4fWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYCdwZ3JlcCAke2FyZ3Muam9pbignICcpfScgZGlkbid0IGRldGVjdCBhbnkgbWF0Y2hpbmcgcHJvY2Vzc2VzLiBSZXR1cm4gY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbEFwcFVzaW5nUGF0dGVybiAocGdyZXBQYXR0ZXJuKSB7XG4gIGNvbnN0IHNpZ25hbHMgPSBbMiwgMTUsIDldO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBzaWduYWxzKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBpZHMgPSBhd2FpdCBnZXRQSURzVXNpbmdQYXR0ZXJuKHBncmVwUGF0dGVybik7XG4gICAgaWYgKF8uaXNFbXB0eShtYXRjaGVkUGlkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IFtgLSR7c2lnbmFsfWAsIC4uLm1hdGNoZWRQaWRzXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBraWxsICR7YXJncy5qb2luKCcgJyl9IC0+ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzaWduYWwgPT09IF8ubGFzdChzaWduYWxzKSkge1xuICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGFmdGVyIFNJR0tJTExcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwaWRDaGVja1Byb21pc2VzID0gbWF0Y2hlZFBpZHNcbiAgICAgICAgICAubWFwKChwaWQpID0+IGV4ZWMoJ2tpbGwnLCBbJy0wJywgcGlkXSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIGRlYWRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgQi5hbGwocGlkQ2hlY2tQcm9taXNlcykpXG4gICAgICAgICAgLmV2ZXJ5KCh4KSA9PiB4ID09PSB0cnVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiAxMDAwLFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIHRyeSB0aGUgbmV4dCBzaWduYWxcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsYXRvcm1cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqL1xuZnVuY3Rpb24gaXNUdk9TIChwbGF0Zm9ybU5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihwbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZSAoZmlsZSwgZmluZCwgcmVwbGFjZSkge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuXG4gIGxldCBuZXdDb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoZmluZCwgcmVwbGFjZSk7XG4gIGlmIChuZXdDb250ZW50cyAhPT0gY29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMsICd1dGY4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgd2l0aCBuZXdCdW5kbGVJZC5cbiAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgcHJvamVjdCBmaWxlIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0J1bmRsZUlkIHRoZSBuZXcgYnVuZGxlIElEIHVzZWQgdG8gdXBkYXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RmlsZSAoYWdlbnRQYXRoLCBuZXdCdW5kbGVJZCkge1xuICBsZXQgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyBwcm9qZWN0RmlsZVBhdGggaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUsIGNyZWF0ZSAub2xkIGZyb20gcHJvamVjdEZpbGVQYXRoXG4gICAgYXdhaXQgZnMuY29weUZpbGUocHJvamVjdEZpbGVQYXRoLCBgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApO1xuICAgIGF3YWl0IHJlcGxhY2VJbkZpbGUocHJvamVjdEZpbGVQYXRoLCBuZXcgUmVnRXhwKF8uZXNjYXBlUmVnRXhwKFdEQV9SVU5ORVJfQlVORExFX0lEKSwgJ2cnKSwgbmV3QnVuZGxlSWQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgdXBkYXRlZCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgdXBkYXRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gdXBkYXRlIHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nLiBXZWJEcml2ZXJBZ2VudCBtYXkgbm90IHN0YXJ0YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB0byBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFByb2plY3RGaWxlIChhZ2VudFBhdGgpIHtcbiAgY29uc3QgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5qb2luKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN0b3JlIHByb2plY3RGaWxlUGF0aCBmcm9tIC5vbGQgZmlsZVxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byByZXNldFxuICAgIH1cbiAgICBhd2FpdCBmcy5tdihgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGAsIHByb2plY3RGaWxlUGF0aCk7XG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgcmVzZXQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHJlc2V0dGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9Jy4gV2ViRHJpdmVyQWdlbnQgaGFzIGJlZW4gYCArXG4gICAgICBgbW9kaWZpZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgb3JpZ2luYWwgc3RhdGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0UmVhbERldmljZVNlY3VyaXR5IChrZXljaGFpblBhdGgsIGtleWNoYWluUGFzc3dvcmQpIHtcbiAgbG9nLmRlYnVnKCdTZXR0aW5nIHNlY3VyaXR5IGZvciBpT1MgZGV2aWNlJyk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICdsaXN0LWtleWNoYWlucycsICctcycsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAndW5sb2NrLWtleWNoYWluJywgJy1wJywga2V5Y2hhaW5QYXNzd29yZCwga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWydzZXQta2V5Y2hhaW4tc2V0dGluZ3MnLCAnLXQnLCAnMzYwMCcsICctbCcsIGtleWNoYWluUGF0aF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSAob3JnSWQsIHNpZ25pbmdJZCkge1xuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgZm9yIG9yZ0lkICcke29yZ0lkfScgYW5kIHNpZ25pbmdJZCBgICtcbiAgICAgICAgICAgIGAnJHtzaWduaW5nSWR9J2ApO1xuICBjb25zdCBjb250ZW50cyA9IGBERVZFTE9QTUVOVF9URUFNID0gJHtvcmdJZH1cbkNPREVfU0lHTl9JREVOVElUWSA9ICR7c2lnbmluZ0lkfVxuYDtcbiAgY29uc3QgeGNjb25maWdQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKCdhcHBpdW0tdGVtcC54Y2NvbmZpZycpO1xuICBsb2cuZGVidWcoYFdyaXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgdG8gJHt4Y2NvbmZpZ1BhdGh9YCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh4Y2NvbmZpZ1BhdGgsIGNvbnRlbnRzLCAndXRmOCcpO1xuICByZXR1cm4geGNjb25maWdQYXRoO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzUmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybVZlcnNpb24gLSBUaGUgcGxhdGZvcm0gdmVyc2lvbiBvZiBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgcGxhdGZvcm0gbmFtZSBvZiBpT1MsIHR2T1NcbiovXG4vKipcbiAqIENyZWF0ZXMgeGN0ZXN0cnVuIGZpbGUgcGVyIGRldmljZSAmIHBsYXRmb3JtIHZlcnNpb24uXG4gKiBXZSBleHBlY3RzIHRvIGhhdmUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBhbmQgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGxvY2F0ZWQgQGJvb3RzdHJhcFBhdGhcbiAqIE5ld2VyIFhjb2RlIChYY29kZSAxMC4wIGF0IGxlYXN0KSBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb2xsb3dpbmcgc2RrVmVyc2lvbi5cbiAqIGUuZy4gWGNvZGUgd2hpY2ggaGFzIGlPUyBTREsgVmVyc2lvbiAxMi4yIGdlbmVyYXRlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvci4yLXg4Nl82NC54Y3Rlc3RydW5cbiAqICAgICAgZXZlbiBpZiB0aGUgY2FwIGhhcyBwbGF0Zm9ybSB2ZXJzaW9uIDExLjRcbiAqXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZGFSZW1vdGVQb3J0IC0gVGhlIHJlbW90ZSBwb3J0IFdEQSBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICogQHRocm93cyBpZiBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIG9yIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBpcyBub3QgZm91bmQgQGJvb3RzdHJhcFBhdGgsXG4gKiB0aGVuIGl0IHdpbGwgdGhyb3cgZmlsZSBub3QgZm91bmQgZXhjZXB0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFhjdGVzdHJ1bkZpbGUgKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgeGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBnZXRYY3Rlc3RydW5GaWxlUGF0aChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKTtcbiAgY29uc3QgeGN0ZXN0UnVuQ29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoKTtcbiAgY29uc3QgdXBkYXRlV0RBUG9ydCA9IGdldEFkZGl0aW9uYWxSdW5Db250ZW50KGRldmljZUluZm8ucGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KTtcbiAgY29uc3QgbmV3WGN0ZXN0UnVuQ29udGVudCA9IF8ubWVyZ2UoeGN0ZXN0UnVuQ29udGVudCwgdXBkYXRlV0RBUG9ydCk7XG4gIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCwgbmV3WGN0ZXN0UnVuQ29udGVudCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIHhjdGVzdHJ1bkZpbGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgV0RBIG9iamVjdCB3aGljaCBhcHBlbmRzIGV4aXN0aW5nIHhjdGVzdCBydW5uZXIgY29udGVudFxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtvYmplY3R9IHJldHVybnMgYSBydW5uZXIgb2JqZWN0IHdoaWNoIGhhcyBVU0VfUE9SVFxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCAocGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHJ1bm5lciA9IGBXZWJEcml2ZXJBZ2VudFJ1bm5lciR7aXNUdk9TKHBsYXRmb3JtTmFtZSkgPyAnX3R2T1MnIDogJyd9YDtcblxuICByZXR1cm4ge1xuICAgIFtydW5uZXJdOiB7XG4gICAgICBFbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAvLyBVU0VfUE9SVCBtdXN0IGJlICdzdHJpbmcnXG4gICAgICAgIFVTRV9QT1JUOiBgJHt3ZGFSZW1vdGVQb3J0fWBcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPUyxcbn07XG4iXSwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -467,4 +467,4 @@ var _default = WebDriverAgent;
467
467
  exports.default = _default;require('source-map-support').install();
468
468
 
469
469
 
470
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsIl8iLCJjbG9uZSIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ4Y29kZWJ1aWxkIiwiWGNvZGVCdWlsZCIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJsYXVuY2hUaW1lb3V0Iiwid2RhTGF1bmNoVGltZW91dCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJCT09UU1RSQVBfUEFUSCIsImxvZyIsImluZm8iLCJwYXRoIiwicmVzb2x2ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIm9ic29sZXRlUGlkcyIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJpc1J1bm5pbmciLCJnZXRTdGF0dXMiLCJiYXNlUGF0aCIsIm5vU2Vzc2lvblByb3h5IiwiTm9TZXNzaW9uUHJveHkiLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImJhc2UiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImVyciIsImhyZWYiLCJ1bmluc3RhbGwiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlSWQiLCJyZW1vdmVBcHAiLCJfY2xlYW51cFByb2plY3RJZkZyZXNoIiwiaG9tZUZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJmcyIsImV4aXN0cyIsImFjY2VzcyIsIldfT0siLCJpZ24iLCJyZWNlbnRVcGdyYWRlVGltZXN0YW1wIiwicGFyc2VJbnQiLCJyZWFkRmlsZSIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJjbGVhblByb2plY3QiLCJsYXVuY2giLCJzZXNzaW9uSWQiLCJzZXR1cFByb3hpZXMiLCJFcnJvciIsInN5bmNocm9uaXphdGlvbktleSIsIm5vcm1hbGl6ZSIsImFjcXVpcmUiLCJzdGFydFdpdGhJREIiLCJpbml0IiwicHJlYnVpbGQiLCJzdGFydCIsIndkYUJ1bmRsZUlkIiwidGVzdEJ1bmRsZUlkIiwicHJlcGFyZVdEQSIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsInJ1blhDVUlUZXN0IiwicGFyc2VCdW5kbGVJZCIsImluZm9QbGlzdFBhdGgiLCJqb2luIiwiaW5mb1BsaXN0IiwicGxpc3QiLCJwYXJzZVBsaXN0IiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwiZmV0Y2hXREFCdW5kbGUiLCJpc0FwcEluc3RhbGxlZCIsImluc3RhbGxBcHAiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwid2RhQnVuZGxlUGF0aHMiLCJnbG9iIiwiV0RBX1JVTk5FUl9BUFAiLCJhYnNvbHV0ZSIsImlzU291cmNlRnJlc2giLCJleGlzdHNQcm9taXNlcyIsInNlcCIsIm1hcCIsInN1YlBhdGgiLCJCIiwiYWxsIiwic29tZSIsInYiLCJwcm94eU9wdHMiLCJrZWVwQWxpdmUiLCJqd3Byb3h5IiwiSldQcm94eSIsInByb3h5UmVxUmVzIiwiYmluZCIsInF1aXQiLCJyZXNldCIsIl91cmwiLCJwYXJzZSIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJzdGF0dXMiLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsInV0aWwiLCJoYXNWYWx1ZSIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwiYWN0dWFsVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLGtCQUFrQixHQUFHLEtBQUssSUFBaEM7QUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBM0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjs7QUFFQSxNQUFNQyxjQUFOLENBQXFCO0FBQ25CQyxFQUFBQSxXQUFXLENBQUVDLFlBQUYsRUFBZ0JDLElBQUksR0FBRyxFQUF2QixFQUEyQjtBQUNw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RCxVQUFNd0Ysc0JBQXNCLEdBQUcsTUFBTSxvQ0FBckM7O0FBQ0F0SCxvQkFBSWEsS0FBSixDQUFXLG1EQUFrRHlHLHNCQUF1QixFQUFwRjs7QUFDQXRILG9CQUFJYSxLQUFKLENBQVcsK0NBQThDcUcsVUFBVyxFQUFwRTs7QUFDQSxRQUFJSSxzQkFBc0IsSUFBSUosVUFBMUIsSUFBd0M1SixnQkFBRWlLLE9BQUYsQ0FBVyxHQUFFRCxzQkFBdUIsRUFBcEMsTUFBMkNoSyxnQkFBRWlLLE9BQUYsQ0FBVyxHQUFFTCxVQUFXLEVBQXhCLENBQXZGLEVBQW1IO0FBQ2pIbEgsc0JBQUlDLElBQUosQ0FBUyx3RkFDTix3REFBdURxSCxzQkFBdUIsT0FBTUosVUFBVyxHQURsRzs7QUFFQSxhQUFPLE1BQU0sS0FBS3BGLFNBQUwsRUFBYjtBQUNEOztBQUVELFVBQU1iLE9BQU8sR0FBR2tHLG9CQUFLQyxRQUFMLENBQWNILHVCQUFkLElBQ1gsaURBQWdELEtBQUszRyxHQUFMLENBQVN1QixJQUFLLFdBQVVvRix1QkFBd0IsR0FEckYsR0FFWCxpREFBZ0QsS0FBSzNHLEdBQUwsQ0FBU3VCLElBQUssR0FGbkU7O0FBR0E3QixvQkFBSUMsSUFBSixDQUFVLEdBQUVnQixPQUFRLCtEQUE4RCxLQUFLWCxHQUFMLENBQVNDLElBQUssb0NBQWhHOztBQUNBLFNBQUs5QixpQkFBTCxHQUF5QixLQUFLNkIsR0FBTCxDQUFTdUIsSUFBbEM7QUFDRDs7QUFLcUIsUUFBaEIyRixnQkFBZ0IsR0FBSTtBQUN4QixVQUFNLEtBQUtqQixJQUFMLEVBQU47QUFDQSxVQUFNLEtBQUt6RSxTQUFMLEVBQU47QUFDRDs7QUE3Y2tCOzs7ZUFnZE41RSxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgSldQcm94eSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgTm9TZXNzaW9uUHJveHkgfSBmcm9tICcuL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0IHtcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGJ1bmRsZVdEQVNpbSB9IGZyb20gJy4vY2hlY2stZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILCBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgV0RBX0xBVU5DSF9USU1FT1VUID0gNjAgKiAxMDAwO1xuY29uc3QgV0RBX0FHRU5UX1BPUlQgPSA4MTAwO1xuY29uc3QgV0RBX0NGX0JVTkRMRV9OQU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyLVJ1bm5lcic7XG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuXG5jbGFzcyBXZWJEcml2ZXJBZ2VudCB7XG4gIGNvbnN0cnVjdG9yICh4Y29kZVZlcnNpb24sIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5hcmdzID0gXy5jbG9uZShhcmdzKTtcblxuICAgIHRoaXMuZGV2aWNlID0gYXJncy5kZXZpY2U7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcbiAgICB0aGlzLmhvc3QgPSBhcmdzLmhvc3Q7XG4gICAgdGhpcy5pc1JlYWxEZXZpY2UgPSAhIWFyZ3MucmVhbERldmljZTtcbiAgICB0aGlzLmlkYiA9IChhcmdzLmRldmljZSB8fCB7fSkuaWRiO1xuICAgIHRoaXMud2RhQnVuZGxlUGF0aCA9IGFyZ3Mud2RhQnVuZGxlUGF0aDtcblxuICAgIHRoaXMuc2V0V0RBUGF0aHMoYXJncy5ib290c3RyYXBQYXRoLCBhcmdzLmFnZW50UGF0aCk7XG5cbiAgICB0aGlzLndkYUxvY2FsUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0O1xuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgIHRoaXMud2RhQmFzZVVybCA9IGFyZ3Mud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcblxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy54Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMuZGV2aWNlLCB7XG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgIGlvc1Nka1ZlcnNpb246IHRoaXMuaW9zU2RrVmVyc2lvbixcbiAgICAgIGFnZW50UGF0aDogdGhpcy5hZ2VudFBhdGgsXG4gICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICByZWFsRGV2aWNlOiB0aGlzLmlzUmVhbERldmljZSxcbiAgICAgIHNob3dYY29kZUxvZzogYXJncy5zaG93WGNvZGVMb2csXG4gICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgeGNvZGVPcmdJZDogYXJncy54Y29kZU9yZ0lkLFxuICAgICAgeGNvZGVTaWduaW5nSWQ6IGFyZ3MueGNvZGVTaWduaW5nSWQsXG4gICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAga2V5Y2hhaW5QYXNzd29yZDogYXJncy5rZXljaGFpblBhc3N3b3JkLFxuICAgICAgdXNlU2ltcGxlQnVpbGRUZXN0OiBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdCxcbiAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICAgIGxhdW5jaFRpbWVvdXQ6IGFyZ3Mud2RhTGF1bmNoVGltZW91dCB8fCBXREFfTEFVTkNIX1RJTUVPVVQsXG4gICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICB1c2VYY3Rlc3RydW5GaWxlOiB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUsXG4gICAgICBkZXJpdmVkRGF0YVBhdGg6IGFyZ3MuZGVyaXZlZERhdGFQYXRoLFxuICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgIGFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uOiBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uLFxuICAgICAgcmVzdWx0QnVuZGxlUGF0aDogYXJncy5yZXN1bHRCdW5kbGVQYXRoLFxuICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0V0RBUGF0aHMgKGJvb3RzdHJhcFBhdGgsIGFnZW50UGF0aCkge1xuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBwbGFjZSBmb3IgV0RBLiBUaGlzIGlzIHVuZG9jdW1lbnRlZCBhbmRcbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRldmVsb3BtZW50IG9mIFdEQVxuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGJvb3RzdHJhcFBhdGggfHwgQk9PVFNUUkFQX1BBVEg7XG4gICAgbG9nLmluZm8oYFVzaW5nIFdEQSBwYXRoOiAnJHt0aGlzLmJvb3RzdHJhcFBhdGh9J2ApO1xuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYWdlbnRQYXRoIHRvb1xuICAgIHRoaXMuYWdlbnRQYXRoID0gYWdlbnRQYXRoIHx8IHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbiAgICBsb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICBsb2cuZGVidWcoYE5vIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzZXMgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMgYCArXG4gICAgICAgIGBsaXN0ZW5pbmcgb24gcG9ydCAke3RoaXMudXJsLnBvcnR9IGhhdmUgYmVlbiBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBEZXRlY3RlZCAke29ic29sZXRlUGlkcy5sZW5ndGh9IG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBgICtcbiAgICAgIGBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucy4gQ2xlYW5pbmcgdGhlbSB1cGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgb2Jzb2xldGVQaWRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYFdEQSBpcyBub3QgbGlzdGVuaW5nIGF0ICcke3RoaXMudXJsLmhyZWZ9J2ApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbCBXREFzIGZyb20gdGhlIHRlc3QgZGV2aWNlLlxuICAgKiBPdmVyIFhjb2RlIDExLCBtdWx0aXBsZSBXREEgY2FuIGJlIGluIHRoZSBkZXZpY2Ugc2luY2UgWGNvZGUgMTEgZ2VuZXJhdGVzIGRpZmZlcmVudCBXREEuXG4gICAqIEFwcGl1bSBkb2VzIG5vdCBleHBlY3QgbXVsdGlwbGUgV0RBcyBhcmUgcnVubmluZyBvbiBhIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVuaW5zdGFsbCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZUlkcyA9IGF3YWl0IHRoaXMuZGV2aWNlLmdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUoV0RBX0NGX0JVTkRMRV9OQU1FKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoYnVuZGxlSWRzKSkge1xuICAgICAgICBsb2cuZGVidWcoJ05vIFdEQXMgb24gdGhlIGRldmljZS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZSk7XG4gICAgICBsb2cud2FybihgV2ViRHJpdmVyQWdlbnQgdW5pbnN0YWxsIGZhaWxlZC4gUGVyaGFwcywgaXQgaXMgYWxyZWFkeSB1bmluc3RhbGxlZD8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2NsZWFudXBQcm9qZWN0SWZGcmVzaCAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgbG9nLmluZm8oJ0l0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKGhvbWVGb2xkZXIsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgbG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9ID49ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBoYXZlIGJlZW4gdXBncmFkZWQgYCArXG4gICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9IDwgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICBsb2cuZGVidWcoYFN0b3JlZCB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9IGAgK1xuICAgICAgICBgYXQgJyR7dGltZXN0YW1wUGF0aH0nYCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmluZm8oYFVuYWJsZSB0byBjcmVhdGUgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuY2xlYW5Qcm9qZWN0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIFdlYkRyaXZlckFnZW50IHByb2plY3QgY2xlYW51cC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93IGFmdGVyIGxhdW5jaGluZyBXREFcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgTGF1bmNoIFdEQSBhbmQgZXN0YWJsaXNoIHRoZSBzZXNzaW9uIHdpdGggdGhpcyBzZXNzaW9uSWRcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGxhdW5jaCAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFdlYkRyaXZlckFnZW50IG9uIHRoZSBkZXZpY2UnKTtcblxuICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMudXNlWGN0ZXN0cnVuRmlsZSAmJiAhYXdhaXQgZnMuZXhpc3RzKHRoaXMuYWdlbnRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIFdlYkRyaXZlckFnZW50IHByb2plY3QgYXQgJyR7dGhpcy5hZ2VudFBhdGh9JyBidXQgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICdmaWxlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlWGN0ZXN0cnVuRmlsZSBhbmQgdXNlUHJlYnVpbHRXREEgdXNlIGV4aXN0aW5nIGRlcGVuZGVuY2llc1xuICAgIC8vIEl0IGRlcGVuZHMgb24gdXNlciBzaWRlXG4gICAgaWYgKHRoaXMuaWRiIHx8IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSB8fCAodGhpcy5kZXJpdmVkRGF0YVBhdGggJiYgdGhpcy51c2VQcmVidWlsdFdEQSkpIHtcbiAgICAgIGxvZy5pbmZvKCdTa2lwcGVkIFdEQSBwcm9qZWN0IGNsZWFudXAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjYXBhYmlsaXRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksXG4gICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NsZWFudXBQcm9qZWN0SWZGcmVzaCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUgV0RBIGxvY2FsIHBvcnQsIGJlY2F1c2UgaXQgbWlnaHQgYmUgb2NjdXBpZWRcbiAgICBhd2FpdCByZXNldFRlc3RQcm9jZXNzZXModGhpcy5kZXZpY2UudWRpZCwgIXRoaXMuaXNSZWFsRGV2aWNlKTtcblxuICAgIGlmICh0aGlzLmlkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRXaXRoSURCKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmluaXQodGhpcy5ub1Nlc3Npb25Qcm94eSk7XG5cbiAgICAvLyBTdGFydCB0aGUgeGNvZGVidWlsZCBwcm9jZXNzXG4gICAgaWYgKHRoaXMucHJlYnVpbGRXREEpIHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5wcmVidWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBzdGFydFdpdGhJREIgKCkge1xuICAgIGxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcblxuICAgIHRoaXMubm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkocHJveHlPcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHF1aXQgKCkge1xuICAgIGxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgbG9nLmRlYnVnKCdXREEgaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIsXG4gICAgICB1cGdyYWRlZEF0LFxuICAgIH0gPSBzdGF0dXMuYnVpbGQ7XG4gICAgLy8gZm9yIHJlYWwgZGV2aWNlXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmIHV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgbG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgYnVuZGxlIGlkLiBUaGUgYWN0dWFsIHZhbHVlIGlzICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfScuYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG4gICAgLy8gZm9yIHNpbXVsYXRvclxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgV0RBX1JVTk5FUl9CVU5ETEVfSUQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICBsb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgbG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudGx5IGJ1bmRsZWQgV0RBOiAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCk7XG4gICAgbG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgV0RBIG9uIHRoZSBkZXZpY2U6ICR7dXBncmFkZWRBdH1gKTtcbiAgICBpZiAoYWN0dWFsVXBncmFkZVRpbWVzdGFtcCAmJiB1cGdyYWRlZEF0ICYmIF8udG9Mb3dlcihgJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApICE9PSBfLnRvTG93ZXIoYCR7dXBncmFkZWRBdH1gKSkge1xuICAgICAgbG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgbG9nLmluZm8oYCR7bWVzc2FnZX0uIFNldCB0aGUgd2RhTG9jYWxQb3J0IGNhcGFiaWxpdHkgdG8gYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAke3RoaXMudXJsLnBvcnR9IGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLmApO1xuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSB0aGlzLnVybC5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXQgYW5kIHVuaW5zdGFsbCBydW5uaW5nIFdEQS5cbiAgICovXG4gIGFzeW5jIHF1aXRBbmRVbmluc3RhbGwgKCkge1xuICAgIGF3YWl0IHRoaXMucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2ViRHJpdmVyQWdlbnQ7XG5leHBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9O1xuIl0sImZpbGUiOiJsaWIvd2ViZHJpdmVyYWdlbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
470
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsIl8iLCJjbG9uZSIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ4Y29kZWJ1aWxkIiwiWGNvZGVCdWlsZCIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJsYXVuY2hUaW1lb3V0Iiwid2RhTGF1bmNoVGltZW91dCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJCT09UU1RSQVBfUEFUSCIsImxvZyIsImluZm8iLCJwYXRoIiwicmVzb2x2ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIm9ic29sZXRlUGlkcyIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJpc1J1bm5pbmciLCJnZXRTdGF0dXMiLCJiYXNlUGF0aCIsIm5vU2Vzc2lvblByb3h5IiwiTm9TZXNzaW9uUHJveHkiLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImJhc2UiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImVyciIsImhyZWYiLCJ1bmluc3RhbGwiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlSWQiLCJyZW1vdmVBcHAiLCJfY2xlYW51cFByb2plY3RJZkZyZXNoIiwiaG9tZUZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJmcyIsImV4aXN0cyIsImFjY2VzcyIsIldfT0siLCJpZ24iLCJyZWNlbnRVcGdyYWRlVGltZXN0YW1wIiwicGFyc2VJbnQiLCJyZWFkRmlsZSIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJjbGVhblByb2plY3QiLCJsYXVuY2giLCJzZXNzaW9uSWQiLCJzZXR1cFByb3hpZXMiLCJFcnJvciIsInN5bmNocm9uaXphdGlvbktleSIsIm5vcm1hbGl6ZSIsImFjcXVpcmUiLCJzdGFydFdpdGhJREIiLCJpbml0IiwicHJlYnVpbGQiLCJzdGFydCIsIndkYUJ1bmRsZUlkIiwidGVzdEJ1bmRsZUlkIiwicHJlcGFyZVdEQSIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsInJ1blhDVUlUZXN0IiwicGFyc2VCdW5kbGVJZCIsImluZm9QbGlzdFBhdGgiLCJqb2luIiwiaW5mb1BsaXN0IiwicGxpc3QiLCJwYXJzZVBsaXN0IiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwiZmV0Y2hXREFCdW5kbGUiLCJpc0FwcEluc3RhbGxlZCIsImluc3RhbGxBcHAiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwid2RhQnVuZGxlUGF0aHMiLCJnbG9iIiwiV0RBX1JVTk5FUl9BUFAiLCJhYnNvbHV0ZSIsImlzU291cmNlRnJlc2giLCJleGlzdHNQcm9taXNlcyIsInNlcCIsIm1hcCIsInN1YlBhdGgiLCJCIiwiYWxsIiwic29tZSIsInYiLCJwcm94eU9wdHMiLCJrZWVwQWxpdmUiLCJqd3Byb3h5IiwiSldQcm94eSIsInByb3h5UmVxUmVzIiwiYmluZCIsInF1aXQiLCJyZXNldCIsIl91cmwiLCJwYXJzZSIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJzdGF0dXMiLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsInV0aWwiLCJoYXNWYWx1ZSIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwiYWN0dWFsVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLGtCQUFrQixHQUFHLEtBQUssSUFBaEM7QUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBM0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjs7QUFFQSxNQUFNQyxjQUFOLENBQXFCO0FBQ25CQyxFQUFBQSxXQUFXLENBQUVDLFlBQUYsRUFBZ0JDLElBQUksR0FBRyxFQUF2QixFQUEyQjtBQUNw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O0FBRUQsVUFBTXdGLHNCQUFzQixHQUFHLE1BQU0sb0NBQXJDOztBQUNBdEgsb0JBQUlhLEtBQUosQ0FBVyxtREFBa0R5RyxzQkFBdUIsRUFBcEY7O0FBQ0F0SCxvQkFBSWEsS0FBSixDQUFXLCtDQUE4Q3FHLFVBQVcsRUFBcEU7O0FBQ0EsUUFBSUksc0JBQXNCLElBQUlKLFVBQTFCLElBQXdDNUosZ0JBQUVpSyxPQUFGLENBQVcsR0FBRUQsc0JBQXVCLEVBQXBDLE1BQTJDaEssZ0JBQUVpSyxPQUFGLENBQVcsR0FBRUwsVUFBVyxFQUF4QixDQUF2RixFQUFtSDtBQUNqSGxILHNCQUFJQyxJQUFKLENBQVMsd0ZBQ04sd0RBQXVEcUgsc0JBQXVCLE9BQU1KLFVBQVcsR0FEbEc7O0FBRUEsYUFBTyxNQUFNLEtBQUtwRixTQUFMLEVBQWI7QUFDRDs7QUFFRCxVQUFNYixPQUFPLEdBQUdrRyxvQkFBS0MsUUFBTCxDQUFjSCx1QkFBZCxJQUNYLGlEQUFnRCxLQUFLM0csR0FBTCxDQUFTdUIsSUFBSyxXQUFVb0YsdUJBQXdCLEdBRHJGLEdBRVgsaURBQWdELEtBQUszRyxHQUFMLENBQVN1QixJQUFLLEdBRm5FOztBQUdBN0Isb0JBQUlDLElBQUosQ0FBVSxHQUFFZ0IsT0FBUSwrREFBOEQsS0FBS1gsR0FBTCxDQUFTQyxJQUFLLG9DQUFoRzs7QUFDQSxTQUFLOUIsaUJBQUwsR0FBeUIsS0FBSzZCLEdBQUwsQ0FBU3VCLElBQWxDO0FBQ0Q7O0FBS0QsUUFBTTJGLGdCQUFOLEdBQTBCO0FBQ3hCLFVBQU0sS0FBS2pCLElBQUwsRUFBTjtBQUNBLFVBQU0sS0FBS3pFLFNBQUwsRUFBTjtBQUNEOztBQTdja0I7OztlQWdkTjVFLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGZzLCB1dGlsLCBwbGlzdCwgbWtkaXJwIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9KSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBhcmdzLmRldmljZTtcbiAgICB0aGlzLnBsYXRmb3JtVmVyc2lvbiA9IGFyZ3MucGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMucGxhdGZvcm1OYW1lID0gYXJncy5wbGF0Zm9ybU5hbWU7XG4gICAgdGhpcy5pb3NTZGtWZXJzaW9uID0gYXJncy5pb3NTZGtWZXJzaW9uO1xuICAgIHRoaXMuaG9zdCA9IGFyZ3MuaG9zdDtcbiAgICB0aGlzLmlzUmVhbERldmljZSA9ICEhYXJncy5yZWFsRGV2aWNlO1xuICAgIHRoaXMuaWRiID0gKGFyZ3MuZGV2aWNlIHx8IHt9KS5pZGI7XG4gICAgdGhpcy53ZGFCdW5kbGVQYXRoID0gYXJncy53ZGFCdW5kbGVQYXRoO1xuXG4gICAgdGhpcy5zZXRXREFQYXRocyhhcmdzLmJvb3RzdHJhcFBhdGgsIGFyZ3MuYWdlbnRQYXRoKTtcblxuICAgIHRoaXMud2RhTG9jYWxQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQ7XG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgdGhpcy53ZGFCYXNlVXJsID0gYXJncy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTDtcblxuICAgIHRoaXMucHJlYnVpbGRXREEgPSBhcmdzLnByZWJ1aWxkV0RBO1xuXG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IGFyZ3Mud2ViRHJpdmVyQWdlbnRVcmw7XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQgPSBhcmdzLndkYUNvbm5lY3Rpb25UaW1lb3V0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSBhcmdzLnVzZVByZWJ1aWx0V0RBO1xuICAgIHRoaXMuZGVyaXZlZERhdGFQYXRoID0gYXJncy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5kZXZpY2UsIHtcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybU5hbWU6IHRoaXMucGxhdGZvcm1OYW1lLFxuICAgICAgaW9zU2RrVmVyc2lvbjogdGhpcy5pb3NTZGtWZXJzaW9uLFxuICAgICAgYWdlbnRQYXRoOiB0aGlzLmFnZW50UGF0aCxcbiAgICAgIGJvb3RzdHJhcFBhdGg6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIHJlYWxEZXZpY2U6IHRoaXMuaXNSZWFsRGV2aWNlLFxuICAgICAgc2hvd1hjb2RlTG9nOiBhcmdzLnNob3dYY29kZUxvZyxcbiAgICAgIHhjb2RlQ29uZmlnRmlsZTogYXJncy54Y29kZUNvbmZpZ0ZpbGUsXG4gICAgICB4Y29kZU9yZ0lkOiBhcmdzLnhjb2RlT3JnSWQsXG4gICAgICB4Y29kZVNpZ25pbmdJZDogYXJncy54Y29kZVNpZ25pbmdJZCxcbiAgICAgIGtleWNoYWluUGF0aDogYXJncy5rZXljaGFpblBhdGgsXG4gICAgICBrZXljaGFpblBhc3N3b3JkOiBhcmdzLmtleWNoYWluUGFzc3dvcmQsXG4gICAgICB1c2VTaW1wbGVCdWlsZFRlc3Q6IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0LFxuICAgICAgdXNlUHJlYnVpbHRXREE6IGFyZ3MudXNlUHJlYnVpbHRXREEsXG4gICAgICB1cGRhdGVkV0RBQnVuZGxlSWQ6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgICAgbGF1bmNoVGltZW91dDogYXJncy53ZGFMYXVuY2hUaW1lb3V0IHx8IFdEQV9MQVVOQ0hfVElNRU9VVCxcbiAgICAgIHdkYVJlbW90ZVBvcnQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIHVzZVhjdGVzdHJ1bkZpbGU6IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSxcbiAgICAgIGRlcml2ZWREYXRhUGF0aDogYXJncy5kZXJpdmVkRGF0YVBhdGgsXG4gICAgICBtanBlZ1NlcnZlclBvcnQ6IHRoaXMubWpwZWdTZXJ2ZXJQb3J0LFxuICAgICAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24sXG4gICAgICByZXN1bHRCdW5kbGVQYXRoOiBhcmdzLnJlc3VsdEJ1bmRsZVBhdGgsXG4gICAgICByZXN1bHRCdW5kbGVWZXJzaW9uOiBhcmdzLnJlc3VsdEJ1bmRsZVZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICBsb2cuaW5mbyhgVXNpbmcgV0RBIHBhdGg6ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZ2VudFBhdGggdG9vXG4gICAgdGhpcy5hZ2VudFBhdGggPSBhZ2VudFBhdGggfHwgcGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgJ1dlYkRyaXZlckFnZW50Lnhjb2RlcHJvaicpO1xuICAgIGxvZy5pbmZvKGBVc2luZyBXREEgYWdlbnQ6ICcke3RoaXMuYWdlbnRQYXRofSdgKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyAoKSB7XG4gICAgY29uc3Qgb2Jzb2xldGVQaWRzID0gYXdhaXQgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCh0aGlzLnVybC5wb3J0LFxuICAgICAgKGNtZExpbmUpID0+IGNtZExpbmUuaW5jbHVkZXMoJy9XZWJEcml2ZXJBZ2VudFJ1bm5lcicpICYmXG4gICAgICAgICFjbWRMaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5kZXZpY2UudWRpZC50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KG9ic29sZXRlUGlkcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYERldGVjdGVkICR7b2Jzb2xldGVQaWRzLmxlbmd0aH0gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9IGAgK1xuICAgICAgYGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zLiBDbGVhbmluZyB0aGVtIHVwYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBvYnNvbGV0ZVBpZHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gJyR7b2Jzb2xldGVQaWRzfScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpZiBXREEgaXMgcnVubmluZyBvciBub3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBXREEgaXMgcnVubmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFN0YXR1cygpKTtcbiAgfVxuXG4gIGdldCBiYXNlUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMudXJsLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmwucGF0aCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93XG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBjb25zdCBub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiAzMDAwLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm8gV0RBcyBvbiB0aGUgZGV2aWNlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nIFdEQXM6ICcke2J1bmRsZUlkc30nYCk7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIGJ1bmRsZUlkcykge1xuICAgICAgICBhd2FpdCB0aGlzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIGxvZy53YXJuKGBXZWJEcml2ZXJBZ2VudCB1bmluc3RhbGwgZmFpbGVkLiBQZXJoYXBzLCBpdCBpcyBhbHJlYWR5IHVuaW5zdGFsbGVkPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xlYW51cFByb2plY3RJZkZyZXNoICgpIHtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvY2Vzcy5lbnYuSE9NRTtcbiAgICBpZiAoIWhvbWVGb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgSE9NRSBmb2xkZXIgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIGlmICghXy5pc0ludGVnZXIoY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICBsb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0aW1lc3RhbXBQYXRoLCBmcy5XX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBzb3VyY2VzIGNsZWFudXBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjZW50VXBncmFkZVRpbWVzdGFtcCA9IHBhcnNlSW50KGF3YWl0IGZzLnJlYWRGaWxlKHRpbWVzdGFtcFBhdGgsICd1dGY4JyksIDEwKTtcbiAgICAgIGlmIChfLmlzSW50ZWdlcihyZWNlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgICBpZiAocmVjZW50VXBncmFkZVRpbWVzdGFtcCA+PSBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBzb3VyY2VzIGhhdmUgYmVlbiB1cGdyYWRlZCBgICtcbiAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHBlcmZvcm0gV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBjbGVhbnVwLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3cgYWZ0ZXIgbGF1bmNoaW5nIFdEQVxuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgbGF1bmNoIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nIHByb3ZpZGVkIFdlYmRyaXZlckFnZW50IGF0ICcke3RoaXMud2ViRHJpdmVyQWdlbnRVcmx9J2ApO1xuICAgICAgdGhpcy51cmwgPSB0aGlzLndlYkRyaXZlckFnZW50VXJsO1xuICAgICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgbG9nLmluZm8oJ1NraXBwZWQgV0RBIHByb2plY3QgY2xlYW51cCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNhcGFiaWxpdGllcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZSh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSxcbiAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY2xlYW51cFByb2plY3RJZkZyZXNoKCkpO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSBXREEgbG9jYWwgcG9ydCwgYmVjYXVzZSBpdCBtaWdodCBiZSBvY2N1cGllZFxuICAgIGF3YWl0IHJlc2V0VGVzdFByb2Nlc3Nlcyh0aGlzLmRldmljZS51ZGlkLCAhdGhpcy5pc1JlYWxEZXZpY2UpO1xuXG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFdpdGhJREIoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuaW5pdCh0aGlzLm5vU2Vzc2lvblByb3h5KTtcblxuICAgIC8vIFN0YXJ0IHRoZSB4Y29kZWJ1aWxkIHByb2Nlc3NcbiAgICBpZiAodGhpcy5wcmVidWlsZFdEQSkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnByZWJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuc3RhcnQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2l0aElEQiAoKSB7XG4gICAgbG9nLmluZm8oJ1dpbGwgbGF1bmNoIFdEQSB3aXRoIGlkYiBpbnN0ZWFkIG9mIHhjb2RlYnVpbGQgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBlbmFibGVkJyk7XG4gICAgY29uc3Qge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWR9ID0gYXdhaXQgdGhpcy5wcmVwYXJlV0RBKCk7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgZW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRiLnJ1blhDVUlUZXN0KHdkYUJ1bmRsZUlkLCB3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB7ZW52fSk7XG4gIH1cblxuICBhc3luYyBwYXJzZUJ1bmRsZUlkICh3ZGFCdW5kbGVQYXRoKSB7XG4gICAgY29uc3QgaW5mb1BsaXN0UGF0aCA9IHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnSW5mby5wbGlzdCcpO1xuICAgIGNvbnN0IGluZm9QbGlzdCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3QoYXdhaXQgZnMucmVhZEZpbGUoaW5mb1BsaXN0UGF0aCkpO1xuICAgIGlmICghaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBidW5kbGUgaWQgaW4gJyR7aW5mb1BsaXN0UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdEQSAoKSB7XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHRoaXMud2RhQnVuZGxlUGF0aCB8fCBhd2FpdCB0aGlzLmZldGNoV0RBQnVuZGxlKCk7XG4gICAgY29uc3Qgd2RhQnVuZGxlSWQgPSBhd2FpdCB0aGlzLnBhcnNlQnVuZGxlSWQod2RhQnVuZGxlUGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmRldmljZS5pc0FwcEluc3RhbGxlZCh3ZGFCdW5kbGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLmluc3RhbGxBcHAod2RhQnVuZGxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRlc3RCdW5kbGVJZCA9IGF3YWl0IHRoaXMuaWRiLmluc3RhbGxYQ1Rlc3RCdW5kbGUocGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdQbHVnSW5zJywgJ1dlYkRyaXZlckFnZW50UnVubmVyLnhjdGVzdCcpKTtcbiAgICByZXR1cm4ge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHdkYUJ1bmRsZVBhdGh9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXREFCdW5kbGUgKCkge1xuICAgIGlmICghdGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCBidW5kbGVXREFTaW0odGhpcy54Y29kZWJ1aWxkKTtcbiAgICB9XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZGVyaXZlZERhdGFQYXRofS8qKi8qJHtXREFfUlVOTkVSX0FQUH0vYCwge1xuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKF8uaXNFbXB0eSh3ZGFCdW5kbGVQYXRocykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIFdEQSBidW5kbGUgaW4gJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aHNbMF07XG4gIH1cblxuICBhc3luYyBpc1NvdXJjZUZyZXNoICgpIHtcbiAgICBjb25zdCBleGlzdHNQcm9taXNlcyA9IFtcbiAgICAgICdSZXNvdXJjZXMnLFxuICAgICAgYFJlc291cmNlcyR7cGF0aC5zZXB9V2ViRHJpdmVyQWdlbnQuYnVuZGxlYCxcbiAgICBdLm1hcCgoc3ViUGF0aCkgPT4gZnMuZXhpc3RzKHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsIHN1YlBhdGgpKSk7XG4gICAgcmV0dXJuIChhd2FpdCBCLmFsbChleGlzdHNQcm9taXNlcykpLnNvbWUoKHYpID0+IHYgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHNldHVwUHJveGllcyAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkocHJveHlPcHRzKTtcbiAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuXG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eShwcm94eU9wdHMpO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgbG9nLmluZm8oJ1NodXR0aW5nIGRvd24gc3ViLXByb2Nlc3NlcycpO1xuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLmp3cHJveHkpIHtcbiAgICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIC8vIGlmIHdlIHBvcHVsYXRlZCB0aGUgdXJsIG91cnNlbHZlcyAoZHVyaW5nIGBzZXR1cENhY2hpbmdgIGNhbGwsIGZvciBpbnN0YW5jZSlcbiAgICAgIC8vIHRoZW4gY2xlYW4gdGhhdCB1cC4gSWYgdGhlIHVybCB3YXMgc3VwcGxpZWQsIHdlIHdhbnQgdG8ga2VlcCBpdFxuICAgICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHtcbiAgICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZSh0aGlzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UodGhpcy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTCk7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cG9ydH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwgKF91cmwpIHtcbiAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoX3VybCk7XG4gIH1cblxuICBnZXQgZnVsbHlTdGFydGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgc2V0IGZ1bGx5U3RhcnRlZCAoc3RhcnRlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgcnVubmluZyBXREEgaWYgaXQgaGFzIHRoZSBzYW1lIGJ1bmRsZSBpZCB3aXRoIHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogT3IgcmV1c2UgaXQgaWYgaXQgaGFzIHRoZSBkZWZhdWx0IGlkIHdpdGhvdXQgdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBVbmluc3RhbGwgaXQgaWYgdGhlIG1ldGhvZCBmYWNlcyBhbiBleGNlcHRpb24gZm9yIHRoZSBhYm92ZSBzaXR1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cGRhdGVkV0RBQnVuZGxlSWQgQnVuZGxlSWQgeW91J2QgbGlrZSB0byB1c2VcbiAgICovXG4gIGFzeW5jIHNldHVwQ2FjaGluZyAoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmJ1aWxkKSB7XG4gICAgICBsb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICBsb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBidW5kbGUgaWQuIFRoZSBhY3R1YWwgdmFsdWUgaXMgJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9Jy5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cbiAgICAvLyBmb3Igc2ltdWxhdG9yXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiBXREFfUlVOTkVSX0JVTkRMRV9JRCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdHMgYnVuZGxlIGlkIGlzIG5vdCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAke1dEQV9SVU5ORVJfQlVORExFX0lEfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBsb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICBsb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBXREEgb24gdGhlIGRldmljZTogJHt1cGdyYWRlZEF0fWApO1xuICAgIGlmIChhY3R1YWxVcGdyYWRlVGltZXN0YW1wICYmIHVwZ3JhZGVkQXQgJiYgXy50b0xvd2VyKGAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCkgIT09IF8udG9Mb3dlcihgJHt1cGdyYWRlZEF0fWApKSB7XG4gICAgICBsb2cuaW5mbygnV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCB2ZXJzaW9uIGluIGNvbXBhcmlzb24gdG8gdGhlIG9uZSAnICtcbiAgICAgICAgYHdoaWNoIGlzIGJ1bmRsZWQgd2l0aCBhcHBpdW0teGN1aXRlc3QtZHJpdmVyIG1vZHVsZSAoJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfSAhPSAke3VwZ3JhZGVkQXR9KWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpXG4gICAgICA/IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfScgd2l0aCAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nYFxuICAgICAgOiBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nYDtcbiAgICBsb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwiZmlsZSI6ImxpYi93ZWJkcml2ZXJhZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9