appium-remote-debugger 9.1.5 → 9.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,5 @@
1
+ ## [9.1.6](https://github.com/appium/appium-remote-debugger/compare/v9.1.5...v9.1.6) (2022-11-27)
2
+
1
3
  ## [9.1.5](https://github.com/appium/appium-remote-debugger/compare/v9.1.4...v9.1.5) (2022-11-22)
2
4
 
3
5
  ## [9.1.4](https://github.com/appium/appium-remote-debugger/compare/v9.1.3...v9.1.4) (2022-11-06)
@@ -9,21 +9,36 @@ require("source-map-support/register");
9
9
  const OBJECT_GROUP = 'console';
10
10
 
11
11
  const COMMANDS = {
12
+ 'Animation.enable': [],
13
+ 'Animation.disable': [],
14
+
12
15
  'ApplicationCache.enable': [],
16
+ 'ApplicationCache.disable': [],
13
17
  'ApplicationCache.getFramesWithManifests': [],
14
18
 
19
+ 'Browser.enable': [],
20
+ 'Browser.disable': [],
21
+
15
22
  'Canvas.enable': [],
23
+ 'Canvas.disable': [],
24
+
25
+ 'CPUProfiler.startTracking': [],
26
+ 'CPUProfiler.stopTracking': [],
16
27
 
17
28
  'Console.disable': [],
18
29
  'Console.enable': [],
30
+ 'Console.clearMessages': [],
19
31
  'Console.getLoggingChannels': [],
20
32
  'Console.setLoggingChannelLevel': ['source', 'level'],
21
33
 
22
34
  'CSS.enable': [],
35
+ 'CSS.disable': [],
23
36
 
24
37
  'Database.enable': [],
38
+ 'Database.disable': [],
25
39
 
26
40
  'Debugger.enable': [],
41
+ 'Debugger.disable': [],
27
42
  'Debugger.setAsyncStackTraceDepth': ['depth'],
28
43
  'Debugger.setBreakpointsActive': ['active'],
29
44
  'Debugger.setPauseForInternalScripts': ['shouldPause'],
@@ -33,42 +48,63 @@ const COMMANDS = {
33
48
  'DOM.getDocument': [],
34
49
 
35
50
  'DOMStorage.enable': [],
51
+ 'DOMStorage.disable': [],
52
+ 'DOMStorage.getDOMStorageItems': ['storageId'],
53
+ 'DOMStorage.clearDOMStorageItems': ['storageId'],
36
54
 
37
55
  'Heap.enable': [],
56
+ 'Heap.disable': [],
38
57
  'Heap.gc': [],
39
58
 
40
59
  'IndexedDB.enable': [],
60
+ 'IndexedDB.disable': [],
41
61
 
42
62
  'Inspector.enable': [],
63
+ 'Inspector.disable': [],
43
64
  'Inspector.initialized': [],
44
65
 
45
66
  'LayerTree.enable': [],
67
+ 'LayerTree.disable': [],
46
68
 
47
69
  'Memory.enable': [],
70
+ 'Memory.disable': [],
48
71
 
49
72
  'Network.disable': [],
50
73
  'Network.enable': [],
74
+ 'Network.setExtraHTTPHeaders': ['headers'],
51
75
  'Network.setResourceCachingDisabled': ['disabled'],
76
+ 'Network.setEmulatedConditions': ['bytesPerSecondLimit'],
52
77
 
53
- 'Page.deleteCookie': ['cookieName', 'url'],
54
78
  'Page.enable': [],
79
+ 'Page.disable': [],
80
+ 'Page.reload': [],
81
+ 'Page.navigate': ['url'],
82
+ 'Page.overrideUserAgent': ['value'],
55
83
  'Page.getCookies': ['urls'],
84
+ 'Page.deleteCookie': ['cookieName', 'url'],
56
85
  'Page.getResourceTree': [],
57
- 'Page.navigate': ['url'],
58
86
 
59
87
  'Runtime.awaitPromise': ['promiseObjectId', 'returnByValue', 'generatePreview', 'saveResult'],
60
88
  'Runtime.callFunctionOn': ['objectId', 'functionDeclaration', 'arguments', 'returnByValue'],
61
- 'Runtime.enable': [],
62
89
  'Runtime.evaluate': ['expression', 'returnByValue', 'contextId'],
90
+ 'Runtime.enable': [],
91
+ 'Runtime.disable': [],
92
+
93
+ 'ServiceWorker.getInitializationInfo': [],
63
94
 
64
95
  'Target.exists': [],
65
96
 
66
- 'Timeline.setAutoCaptureEnabled': ['enabled'],
67
- 'Timeline.setInstruments': ['instruments'],
97
+ 'Timeline.enable': [],
98
+ 'Timeline.disable': [],
68
99
  'Timeline.start': [],
69
100
  'Timeline.stop': [],
101
+ 'Timeline.setAutoCaptureEnabled': ['enabled'],
102
+ 'Timeline.setInstruments': ['instruments'],
70
103
 
71
- 'Worker.enable': []
104
+ 'Worker.enable': [],
105
+ 'Worker.disable': [],
106
+ 'Worker.initialized': ['workerId'],
107
+ 'Worker.sendMessageToWorker': ['workerId', 'message']
72
108
  };
73
109
 
74
110
  function getCommand(id, method, params = {}) {
@@ -98,4 +134,4 @@ function getProtocolCommand(id, method, opts = {}) {
98
134
  }
99
135
  var _default = getProtocolCommand;
100
136
  exports.default = _default;
101
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPQkpFQ1RfR1JPVVAiLCJDT01NQU5EUyIsImdldENvbW1hbmQiLCJpZCIsIm1ldGhvZCIsInBhcmFtcyIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdEdyb3VwIiwiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwiZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIiwiZW11bGF0ZVVzZXJHZXN0dXJlIiwiZ2VuZXJhdGVQcmV2aWV3Iiwic2F2ZVJlc3VsdCIsImdldFByb3RvY29sQ29tbWFuZCIsIm9wdHMiLCJwYXJhbU5hbWVzIiwiRXJyb3IiLCJyZWR1Y2UiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE9CSkVDVF9HUk9VUCA9ICdjb25zb2xlJztcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvd2Via2l0L3RyZWUvbWFzdGVyL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2xcbmNvbnN0IENPTU1BTkRTID0ge1xuICAvLyNyZWdpb24gQVBQTElDQVRJT05DQUNIRSBET01BSU5cbiAgJ0FwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlJzogW10sXG4gICdBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENBTlZBUyBET01BSU5cbiAgJ0NhbnZhcy5lbmFibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENPTlNPTEUgRE9NQUlOXG4gICdDb25zb2xlLmRpc2FibGUnOiBbXSxcbiAgJ0NvbnNvbGUuZW5hYmxlJzogW10sXG4gICdDb25zb2xlLmdldExvZ2dpbmdDaGFubmVscyc6IFtdLFxuICAnQ29uc29sZS5zZXRMb2dnaW5nQ2hhbm5lbExldmVsJzogWydzb3VyY2UnLCAnbGV2ZWwnXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENTUyBET01BSU5cbiAgJ0NTUy5lbmFibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIERBVEFCQVNFIERPTUFJTlxuICAnRGF0YWJhc2UuZW5hYmxlJzogW10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBERUJVR0dFUiBET01BSU5cbiAgJ0RlYnVnZ2VyLmVuYWJsZSc6IFtdLFxuICAnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnOiBbJ2RlcHRoJ10sXG4gICdEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSc6IFsnYWN0aXZlJ10sXG4gICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyc6IFsnc2hvdWxkUGF1c2UnXSxcbiAgJ0RlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zJzogWydlbmFibGVkJ10sXG4gICdEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyc6IFsnc3RhdGUnXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIERPTSBET01BSU5cbiAgJ0RPTS5nZXREb2N1bWVudCc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRE9NU1RPUkFHRSBET01BSU5cbiAgJ0RPTVN0b3JhZ2UuZW5hYmxlJzogW10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBIRUFQIERPTUFJTlxuICAnSGVhcC5lbmFibGUnOiBbXSxcbiAgJ0hlYXAuZ2MnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIElOREVYRUREQiBET01BSU5cbiAgJ0luZGV4ZWREQi5lbmFibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIElOU1BFQ1RPUiBET01BSU5cbiAgJ0luc3BlY3Rvci5lbmFibGUnOiBbXSxcbiAgJ0luc3BlY3Rvci5pbml0aWFsaXplZCc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTEFZRVJUUkVFIERPTUFJTlxuICAnTGF5ZXJUcmVlLmVuYWJsZSc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTUVNT1JZIERPTUFJTlxuICAnTWVtb3J5LmVuYWJsZSc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTkVUV09SSyBET01BSU5cbiAgJ05ldHdvcmsuZGlzYWJsZSc6IFtdLFxuICAnTmV0d29yay5lbmFibGUnOiBbXSxcbiAgJ05ldHdvcmsuc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQnOiBbJ2Rpc2FibGVkJ10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQQUdFIERPTUFJTlxuICAnUGFnZS5kZWxldGVDb29raWUnOiBbJ2Nvb2tpZU5hbWUnLCAndXJsJ10sXG4gICdQYWdlLmVuYWJsZSc6IFtdLFxuICAnUGFnZS5nZXRDb29raWVzJzogWyd1cmxzJ10sXG4gICdQYWdlLmdldFJlc291cmNlVHJlZSc6IFtdLFxuICAnUGFnZS5uYXZpZ2F0ZSc6IFsndXJsJ10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSVU5USU1FIERPTUFJTlxuICAnUnVudGltZS5hd2FpdFByb21pc2UnOiBbJ3Byb21pc2VPYmplY3RJZCcsICdyZXR1cm5CeVZhbHVlJywgJ2dlbmVyYXRlUHJldmlldycsICdzYXZlUmVzdWx0J10sXG4gICdSdW50aW1lLmNhbGxGdW5jdGlvbk9uJzogWydvYmplY3RJZCcsICdmdW5jdGlvbkRlY2xhcmF0aW9uJywgJ2FyZ3VtZW50cycsICdyZXR1cm5CeVZhbHVlJ10sXG4gICdSdW50aW1lLmVuYWJsZSc6IFtdLFxuICAnUnVudGltZS5ldmFsdWF0ZSc6IFsnZXhwcmVzc2lvbicsICdyZXR1cm5CeVZhbHVlJywgJ2NvbnRleHRJZCddLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gVEFSR0VUIERPTUFJTlxuICAnVGFyZ2V0LmV4aXN0cyc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gVElNRUxJTkUgRE9NQUlOXG4gICdUaW1lbGluZS5zZXRBdXRvQ2FwdHVyZUVuYWJsZWQnOiBbJ2VuYWJsZWQnXSxcbiAgJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJzogWydpbnN0cnVtZW50cyddLFxuICAnVGltZWxpbmUuc3RhcnQnOiBbXSxcbiAgJ1RpbWVsaW5lLnN0b3AnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFdPUktFUiBET01BSU5cbiAgJ1dvcmtlci5lbmFibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG59O1xuXG5mdW5jdGlvbiBnZXRDb21tYW5kIChpZCwgbWV0aG9kLCBwYXJhbXMgPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG1ldGhvZCxcbiAgICBwYXJhbXM6IE9iamVjdC5hc3NpZ24oe1xuICAgICAgb2JqZWN0R3JvdXA6IE9CSkVDVF9HUk9VUCxcbiAgICAgIGluY2x1ZGVDb21tYW5kTGluZUFQSTogdHJ1ZSxcbiAgICAgIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogZmFsc2UsXG4gICAgICBlbXVsYXRlVXNlckdlc3R1cmU6IGZhbHNlLFxuICAgICAgZ2VuZXJhdGVQcmV2aWV3OiBmYWxzZSxcbiAgICAgIHNhdmVSZXN1bHQ6IGZhbHNlLFxuICAgIH0sIHBhcmFtcyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByb3RvY29sQ29tbWFuZCAoaWQsIG1ldGhvZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtTmFtZXMgPSBDT01NQU5EU1ttZXRob2RdO1xuICBpZiAoIXBhcmFtTmFtZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29tbWFuZDogJyR7bWV0aG9kfSdgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcmFtcyA9IHBhcmFtTmFtZXMucmVkdWNlKGZ1bmN0aW9uIChwYXJhbXMsIG5hbWUpIHtcbiAgICBwYXJhbXNbbmFtZV0gPSBvcHRzW25hbWVdO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldENvbW1hbmQoaWQsIG1ldGhvZCwgcGFyYW1zKTtcbn1cblxuZXhwb3J0IHsgZ2V0UHJvdG9jb2xDb21tYW5kIH07XG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b2NvbENvbW1hbmQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsTUFBTUEsWUFBWSxHQUFHLFNBQVM7O0FBRzlCLE1BQU1DLFFBQVEsR0FBRztFQUVmLHlCQUF5QixFQUFFLEVBQUU7RUFDN0IseUNBQXlDLEVBQUUsRUFBRTs7RUFJN0MsZUFBZSxFQUFFLEVBQUU7O0VBSW5CLGlCQUFpQixFQUFFLEVBQUU7RUFDckIsZ0JBQWdCLEVBQUUsRUFBRTtFQUNwQiw0QkFBNEIsRUFBRSxFQUFFO0VBQ2hDLGdDQUFnQyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQzs7RUFJckQsWUFBWSxFQUFFLEVBQUU7O0VBSWhCLGlCQUFpQixFQUFFLEVBQUU7O0VBSXJCLGlCQUFpQixFQUFFLEVBQUU7RUFDckIsa0NBQWtDLEVBQUUsQ0FBQyxPQUFPLENBQUM7RUFDN0MsK0JBQStCLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDM0MscUNBQXFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7RUFDdEQsK0JBQStCLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUMsK0JBQStCLEVBQUUsQ0FBQyxPQUFPLENBQUM7O0VBSTFDLGlCQUFpQixFQUFFLEVBQUU7O0VBSXJCLG1CQUFtQixFQUFFLEVBQUU7O0VBSXZCLGFBQWEsRUFBRSxFQUFFO0VBQ2pCLFNBQVMsRUFBRSxFQUFFOztFQUliLGtCQUFrQixFQUFFLEVBQUU7O0VBSXRCLGtCQUFrQixFQUFFLEVBQUU7RUFDdEIsdUJBQXVCLEVBQUUsRUFBRTs7RUFJM0Isa0JBQWtCLEVBQUUsRUFBRTs7RUFJdEIsZUFBZSxFQUFFLEVBQUU7O0VBSW5CLGlCQUFpQixFQUFFLEVBQUU7RUFDckIsZ0JBQWdCLEVBQUUsRUFBRTtFQUNwQixvQ0FBb0MsRUFBRSxDQUFDLFVBQVUsQ0FBQzs7RUFJbEQsbUJBQW1CLEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO0VBQzFDLGFBQWEsRUFBRSxFQUFFO0VBQ2pCLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDO0VBQzNCLHNCQUFzQixFQUFFLEVBQUU7RUFDMUIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDOztFQUl4QixzQkFBc0IsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUM7RUFDN0Ysd0JBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQztFQUMzRixnQkFBZ0IsRUFBRSxFQUFFO0VBQ3BCLGtCQUFrQixFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUM7O0VBSWhFLGVBQWUsRUFBRSxFQUFFOztFQUluQixnQ0FBZ0MsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM3Qyx5QkFBeUIsRUFBRSxDQUFDLGFBQWEsQ0FBQztFQUMxQyxnQkFBZ0IsRUFBRSxFQUFFO0VBQ3BCLGVBQWUsRUFBRSxFQUFFOztFQUluQixlQUFlLEVBQUU7QUFFbkIsQ0FBQzs7QUFFRCxTQUFTQyxVQUFVLENBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUMsT0FBTztJQUNMRixFQUFFO0lBQ0ZDLE1BQU07SUFDTkMsTUFBTSxFQUFFQyxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUNwQkMsV0FBVyxFQUFFUixZQUFZO01BQ3pCUyxxQkFBcUIsRUFBRSxJQUFJO01BQzNCQyxvQ0FBb0MsRUFBRSxLQUFLO01BQzNDQyxrQkFBa0IsRUFBRSxLQUFLO01BQ3pCQyxlQUFlLEVBQUUsS0FBSztNQUN0QkMsVUFBVSxFQUFFO0lBQ2QsQ0FBQyxFQUFFUixNQUFNO0VBQ1gsQ0FBQztBQUNIO0FBRUEsU0FBU1Msa0JBQWtCLENBQUVYLEVBQUUsRUFBRUMsTUFBTSxFQUFFVyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbEQsTUFBTUMsVUFBVSxHQUFHZixRQUFRLENBQUNHLE1BQU0sQ0FBQztFQUNuQyxJQUFJLENBQUNZLFVBQVUsRUFBRTtJQUNmLE1BQU0sSUFBSUMsS0FBSyxDQUFFLHFCQUFvQmIsTUFBTyxHQUFFLENBQUM7RUFDakQ7RUFFQSxNQUFNQyxNQUFNLEdBQUdXLFVBQVUsQ0FBQ0UsTUFBTSxDQUFDLFVBQVViLE1BQU0sRUFBRWMsSUFBSSxFQUFFO0lBQ3ZEZCxNQUFNLENBQUNjLElBQUksQ0FBQyxHQUFHSixJQUFJLENBQUNJLElBQUksQ0FBQztJQUN6QixPQUFPZCxNQUFNO0VBQ2YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ04sT0FBT0gsVUFBVSxDQUFDQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxDQUFDO0FBQ3ZDO0FBQUMsZUFHY1Msa0JBQWtCO0FBQUEifQ==
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPQkpFQ1RfR1JPVVAiLCJDT01NQU5EUyIsImdldENvbW1hbmQiLCJpZCIsIm1ldGhvZCIsInBhcmFtcyIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdEdyb3VwIiwiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwiZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIiwiZW11bGF0ZVVzZXJHZXN0dXJlIiwiZ2VuZXJhdGVQcmV2aWV3Iiwic2F2ZVJlc3VsdCIsImdldFByb3RvY29sQ29tbWFuZCIsIm9wdHMiLCJwYXJhbU5hbWVzIiwiRXJyb3IiLCJyZWR1Y2UiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE9CSkVDVF9HUk9VUCA9ICdjb25zb2xlJztcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvd2Via2l0L3RyZWUvbWFzdGVyL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2xcbmNvbnN0IENPTU1BTkRTID0ge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9BbmltYXRpb24uanNvblxuICAvLyNyZWdpb24gQU5JTUFUSU9OIERPTUFJTlxuICAnQW5pbWF0aW9uLmVuYWJsZSc6IFtdLCAvLyBFbmFibGVzIENhbnZhcyBkb21haW4gZXZlbnRzXG4gICdBbmltYXRpb24uZGlzYWJsZSc6IFtdLCAvLyBEaXNhYmxlcyBDYW52YXMgZG9tYWluIGV2ZW50c1xuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb25cbiAgLy8jcmVnaW9uIEFQUExJQ0FUSU9OQ0FDSEUgRE9NQUlOXG4gICdBcHBsaWNhdGlvbkNhY2hlLmVuYWJsZSc6IFtdLFxuICAnQXBwbGljYXRpb25DYWNoZS5kaXNhYmxlJzogW10sXG4gICdBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNvblxuICAvLyNyZWdpb24gQVVESVQgRE9NQUlOXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIuanNvblxuICAvLyNyZWdpb24gQlJPV1NFUiBET01BSU5cbiAgJ0Jyb3dzZXIuZW5hYmxlJzogW10sIC8vIEVuYWJsZXMgQnJvd3NlciBkb21haW4gZXZlbnRzLiBlLmcuIGV4dGVudGlvbnNFbmFibGVkXG4gICdCcm93c2VyLmRpc2FibGUnOiBbXSwgLy8gRGlzYWJsZXMgQnJvd3NlciBkb21haW4gZXZlbnRzXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uXG4gIC8vI3JlZ2lvbiBDQU5WQVMgRE9NQUlOXG4gICdDYW52YXMuZW5hYmxlJzogW10sXG4gICdDYW52YXMuZGlzYWJsZSc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uXG4gIC8vI3JlZ2lvbiBDUFVQUk9GSUxFUiBET01BSU5cbiAgJ0NQVVByb2ZpbGVyLnN0YXJ0VHJhY2tpbmcnOiBbXSxcbiAgJ0NQVVByb2ZpbGVyLnN0b3BUcmFja2luZyc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb25cbiAgLy8jcmVnaW9uIENPTlNPTEUgRE9NQUlOXG4gICdDb25zb2xlLmRpc2FibGUnOiBbXSxcbiAgJ0NvbnNvbGUuZW5hYmxlJzogW10sXG4gICdDb25zb2xlLmNsZWFyTWVzc2FnZXMnOiBbXSxcbiAgJ0NvbnNvbGUuZ2V0TG9nZ2luZ0NoYW5uZWxzJzogW10sXG4gICdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnOiBbJ3NvdXJjZScsICdsZXZlbCddLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvblxuICAvLyNyZWdpb24gQ1NTIERPTUFJTlxuICAnQ1NTLmVuYWJsZSc6IFtdLFxuICAnQ1NTLmRpc2FibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvblxuICAvLyNyZWdpb24gREFUQUJBU0UgRE9NQUlOXG4gICdEYXRhYmFzZS5lbmFibGUnOiBbXSxcbiAgJ0RhdGFiYXNlLmRpc2FibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvblxuICAvLyNyZWdpb24gREVCVUdHRVIgRE9NQUlOXG4gICdEZWJ1Z2dlci5lbmFibGUnOiBbXSxcbiAgJ0RlYnVnZ2VyLmRpc2FibGUnOiBbXSxcbiAgJ0RlYnVnZ2VyLnNldEFzeW5jU3RhY2tUcmFjZURlcHRoJzogWydkZXB0aCddLFxuICAnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnOiBbJ2FjdGl2ZSddLFxuICAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnOiBbJ3Nob3VsZFBhdXNlJ10sXG4gICdEZWJ1Z2dlci5zZXRQYXVzZU9uQXNzZXJ0aW9ucyc6IFsnZW5hYmxlZCddLFxuICAnRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMnOiBbJ3N0YXRlJ10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uXG4gIC8vI3JlZ2lvbiBET00gRE9NQUlOXG4gICdET00uZ2V0RG9jdW1lbnQnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NRGVidWdnZXIuanNvblxuICAvLyNyZWdpb24gRE9NREVCVUdHRVIgRE9NQUlOXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTVN0b3JhZ2UuanNvblxuICAvLyNyZWdpb24gRE9NU1RPUkFHRSBET01BSU5cbiAgJ0RPTVN0b3JhZ2UuZW5hYmxlJzogW10sXG4gICdET01TdG9yYWdlLmRpc2FibGUnOiBbXSxcbiAgJ0RPTVN0b3JhZ2UuZ2V0RE9NU3RvcmFnZUl0ZW1zJzogWydzdG9yYWdlSWQnXSxcbiAgJ0RPTVN0b3JhZ2UuY2xlYXJET01TdG9yYWdlSXRlbXMnOiBbJ3N0b3JhZ2VJZCddLFxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvblxuICAvLyNyZWdpb24gSEVBUCBET01BSU5cbiAgJ0hlYXAuZW5hYmxlJzogW10sXG4gICdIZWFwLmRpc2FibGUnOiBbXSxcbiAgJ0hlYXAuZ2MnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb25cbiAgLy8jcmVnaW9uIElOREVYRUREQiBET01BSU5cbiAgJ0luZGV4ZWREQi5lbmFibGUnOiBbXSxcbiAgJ0luZGV4ZWREQi5kaXNhYmxlJzogW10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uXG4gIC8vI3JlZ2lvbiBJTlNQRUNUT1IgRE9NQUlOXG4gICdJbnNwZWN0b3IuZW5hYmxlJzogW10sXG4gICdJbnNwZWN0b3IuZGlzYWJsZSc6IFtdLFxuICAnSW5zcGVjdG9yLmluaXRpYWxpemVkJzogW10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uXG4gIC8vI3JlZ2lvbiBMQVlFUlRSRUUgRE9NQUlOXG4gICdMYXllclRyZWUuZW5hYmxlJzogW10sXG4gICdMYXllclRyZWUuZGlzYWJsZSc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvblxuICAvLyNyZWdpb24gTUVNT1JZIERPTUFJTlxuICAnTWVtb3J5LmVuYWJsZSc6IFtdLFxuICAnTWVtb3J5LmRpc2FibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29uXG4gIC8vI3JlZ2lvbiBORVRXT1JLIERPTUFJTlxuICAnTmV0d29yay5kaXNhYmxlJzogW10sXG4gICdOZXR3b3JrLmVuYWJsZSc6IFtdLFxuICAnTmV0d29yay5zZXRFeHRyYUhUVFBIZWFkZXJzJzogWydoZWFkZXJzJ10sXG4gICdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJzogWydkaXNhYmxlZCddLFxuICAnTmV0d29yay5zZXRFbXVsYXRlZENvbmRpdGlvbnMnOiBbJ2J5dGVzUGVyU2Vjb25kTGltaXQnXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uXG4gIC8vI3JlZ2lvbiBQQUdFIERPTUFJTlxuICAnUGFnZS5lbmFibGUnOiBbXSxcbiAgJ1BhZ2UuZGlzYWJsZSc6IFtdLFxuICAnUGFnZS5yZWxvYWQnOiBbXSxcbiAgJ1BhZ2UubmF2aWdhdGUnOiBbJ3VybCddLFxuICAnUGFnZS5vdmVycmlkZVVzZXJBZ2VudCc6IFsndmFsdWUnXSxcbiAgJ1BhZ2UuZ2V0Q29va2llcyc6IFsndXJscyddLFxuICAnUGFnZS5kZWxldGVDb29raWUnOiBbJ2Nvb2tpZU5hbWUnLCAndXJsJ10sXG4gICdQYWdlLmdldFJlc291cmNlVHJlZSc6IFtdLFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb25cbiAgLy8jcmVnaW9uIFJVTlRJTUUgRE9NQUlOXG4gICdSdW50aW1lLmF3YWl0UHJvbWlzZSc6IFsncHJvbWlzZU9iamVjdElkJywgJ3JldHVybkJ5VmFsdWUnLCAnZ2VuZXJhdGVQcmV2aWV3JywgJ3NhdmVSZXN1bHQnXSxcbiAgJ1J1bnRpbWUuY2FsbEZ1bmN0aW9uT24nOiBbJ29iamVjdElkJywgJ2Z1bmN0aW9uRGVjbGFyYXRpb24nLCAnYXJndW1lbnRzJywgJ3JldHVybkJ5VmFsdWUnXSxcbiAgJ1J1bnRpbWUuZXZhbHVhdGUnOiBbJ2V4cHJlc3Npb24nLCAncmV0dXJuQnlWYWx1ZScsICdjb250ZXh0SWQnXSxcbiAgJ1J1bnRpbWUuZW5hYmxlJzogW10sXG4gICdSdW50aW1lLmRpc2FibGUnOiBbXSxcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2NyaXB0UHJvZmlsZXIuanNvblxuICAvLyNyZWdpb24gU0NSSVBUUFJPRklMRVIgRE9NQUlOXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvblxuICAvLyNyZWdpb24gU0VSVklDRVdPUktFUiBET01BSU5cbiAgJ1NlcnZpY2VXb3JrZXIuZ2V0SW5pdGlhbGl6YXRpb25JbmZvJzogW10sIC8vIHJldHVybnMgJ3sgXCJuYW1lXCI6IFwiaW5mb1wiLCBcIiRyZWZcIjogXCJDb25maWd1cmF0aW9uXCIgfSdcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC9XZWJLaXQvYmxvYi9tYWluL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb25cbiAgLy8jcmVnaW9uIFRBUkdFVCBET01BSU5cbiAgJ1RhcmdldC5leGlzdHMnOiBbXSwgLy8gcmVtb3ZlZCBzaW5jZSBXZWJLaXQgaW4gMTMuNFxuICAvLyNlbmRyZWdpb25cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L1dlYktpdC9ibG9iL21haW4vU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9UaW1lbGluZS5qc29uXG4gIC8vI3JlZ2lvbiBUSU1FTElORSBET01BSU5cbiAgJ1RpbWVsaW5lLmVuYWJsZSc6IFtdLFxuICAnVGltZWxpbmUuZGlzYWJsZSc6IFtdLFxuICAnVGltZWxpbmUuc3RhcnQnOiBbXSxcbiAgJ1RpbWVsaW5lLnN0b3AnOiBbXSxcbiAgJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCc6IFsnZW5hYmxlZCddLFxuICAnVGltZWxpbmUuc2V0SW5zdHJ1bWVudHMnOiBbJ2luc3RydW1lbnRzJ10sXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvV2ViS2l0L2Jsb2IvbWFpbi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1dvcmtlci5qc29uXG4gIC8vI3JlZ2lvbiBXT1JLRVIgRE9NQUlOXG4gICdXb3JrZXIuZW5hYmxlJzogW10sXG4gICdXb3JrZXIuZGlzYWJsZSc6IFtdLFxuICAnV29ya2VyLmluaXRpYWxpemVkJzogWyd3b3JrZXJJZCddLFxuICAnV29ya2VyLnNlbmRNZXNzYWdlVG9Xb3JrZXInOiBbJ3dvcmtlcklkJywgJ21lc3NhZ2UnXVxuICAvLyNlbmRyZWdpb25cbn07XG5cbmZ1bmN0aW9uIGdldENvbW1hbmQgKGlkLCBtZXRob2QsIHBhcmFtcyA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgbWV0aG9kLFxuICAgIHBhcmFtczogT2JqZWN0LmFzc2lnbih7XG4gICAgICBvYmplY3RHcm91cDogT0JKRUNUX0dST1VQLFxuICAgICAgaW5jbHVkZUNvbW1hbmRMaW5lQVBJOiB0cnVlLFxuICAgICAgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlOiBmYWxzZSxcbiAgICAgIGVtdWxhdGVVc2VyR2VzdHVyZTogZmFsc2UsXG4gICAgICBnZW5lcmF0ZVByZXZpZXc6IGZhbHNlLFxuICAgICAgc2F2ZVJlc3VsdDogZmFsc2UsXG4gICAgfSwgcGFyYW1zKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvdG9jb2xDb21tYW5kIChpZCwgbWV0aG9kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1OYW1lcyA9IENPTU1BTkRTW21ldGhvZF07XG4gIGlmICghcGFyYW1OYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21tYW5kOiAnJHttZXRob2R9J2ApO1xuICB9XG5cbiAgY29uc3QgcGFyYW1zID0gcGFyYW1OYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKHBhcmFtcywgbmFtZSkge1xuICAgIHBhcmFtc1tuYW1lXSA9IG9wdHNbbmFtZV07XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSwge30pO1xuICByZXR1cm4gZ2V0Q29tbWFuZChpZCwgbWV0aG9kLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgeyBnZXRQcm90b2NvbENvbW1hbmQgfTtcbmV4cG9ydCBkZWZhdWx0IGdldFByb3RvY29sQ29tbWFuZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxNQUFNQSxZQUFZLEdBQUcsU0FBUzs7QUFHOUIsTUFBTUMsUUFBUSxHQUFHO0VBR2Ysa0JBQWtCLEVBQUUsRUFBRTtFQUN0QixtQkFBbUIsRUFBRSxFQUFFOztFQUt2Qix5QkFBeUIsRUFBRSxFQUFFO0VBQzdCLDBCQUEwQixFQUFFLEVBQUU7RUFDOUIseUNBQXlDLEVBQUUsRUFBRTs7RUFTN0MsZ0JBQWdCLEVBQUUsRUFBRTtFQUNwQixpQkFBaUIsRUFBRSxFQUFFOztFQUtyQixlQUFlLEVBQUUsRUFBRTtFQUNuQixnQkFBZ0IsRUFBRSxFQUFFOztFQUtwQiwyQkFBMkIsRUFBRSxFQUFFO0VBQy9CLDBCQUEwQixFQUFFLEVBQUU7O0VBSzlCLGlCQUFpQixFQUFFLEVBQUU7RUFDckIsZ0JBQWdCLEVBQUUsRUFBRTtFQUNwQix1QkFBdUIsRUFBRSxFQUFFO0VBQzNCLDRCQUE0QixFQUFFLEVBQUU7RUFDaEMsZ0NBQWdDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDOztFQUtyRCxZQUFZLEVBQUUsRUFBRTtFQUNoQixhQUFhLEVBQUUsRUFBRTs7RUFLakIsaUJBQWlCLEVBQUUsRUFBRTtFQUNyQixrQkFBa0IsRUFBRSxFQUFFOztFQUt0QixpQkFBaUIsRUFBRSxFQUFFO0VBQ3JCLGtCQUFrQixFQUFFLEVBQUU7RUFDdEIsa0NBQWtDLEVBQUUsQ0FBQyxPQUFPLENBQUM7RUFDN0MsK0JBQStCLEVBQUUsQ0FBQyxRQUFRLENBQUM7RUFDM0MscUNBQXFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7RUFDdEQsK0JBQStCLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUMsK0JBQStCLEVBQUUsQ0FBQyxPQUFPLENBQUM7O0VBSzFDLGlCQUFpQixFQUFFLEVBQUU7O0VBU3JCLG1CQUFtQixFQUFFLEVBQUU7RUFDdkIsb0JBQW9CLEVBQUUsRUFBRTtFQUN4QiwrQkFBK0IsRUFBRSxDQUFDLFdBQVcsQ0FBQztFQUM5QyxpQ0FBaUMsRUFBRSxDQUFDLFdBQVcsQ0FBQzs7RUFNaEQsYUFBYSxFQUFFLEVBQUU7RUFDakIsY0FBYyxFQUFFLEVBQUU7RUFDbEIsU0FBUyxFQUFFLEVBQUU7O0VBS2Isa0JBQWtCLEVBQUUsRUFBRTtFQUN0QixtQkFBbUIsRUFBRSxFQUFFOztFQUt2QixrQkFBa0IsRUFBRSxFQUFFO0VBQ3RCLG1CQUFtQixFQUFFLEVBQUU7RUFDdkIsdUJBQXVCLEVBQUUsRUFBRTs7RUFLM0Isa0JBQWtCLEVBQUUsRUFBRTtFQUN0QixtQkFBbUIsRUFBRSxFQUFFOztFQUt2QixlQUFlLEVBQUUsRUFBRTtFQUNuQixnQkFBZ0IsRUFBRSxFQUFFOztFQUtwQixpQkFBaUIsRUFBRSxFQUFFO0VBQ3JCLGdCQUFnQixFQUFFLEVBQUU7RUFDcEIsNkJBQTZCLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDMUMsb0NBQW9DLEVBQUUsQ0FBQyxVQUFVLENBQUM7RUFDbEQsK0JBQStCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzs7RUFLeEQsYUFBYSxFQUFFLEVBQUU7RUFDakIsY0FBYyxFQUFFLEVBQUU7RUFDbEIsYUFBYSxFQUFFLEVBQUU7RUFDakIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3hCLHdCQUF3QixFQUFFLENBQUMsT0FBTyxDQUFDO0VBQ25DLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDO0VBQzNCLG1CQUFtQixFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztFQUMxQyxzQkFBc0IsRUFBRSxFQUFFOztFQUsxQixzQkFBc0IsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUM7RUFDN0Ysd0JBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQztFQUMzRixrQkFBa0IsRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDO0VBQ2hFLGdCQUFnQixFQUFFLEVBQUU7RUFDcEIsaUJBQWlCLEVBQUUsRUFBRTs7RUFTckIscUNBQXFDLEVBQUUsRUFBRTs7RUFLekMsZUFBZSxFQUFFLEVBQUU7O0VBS25CLGlCQUFpQixFQUFFLEVBQUU7RUFDckIsa0JBQWtCLEVBQUUsRUFBRTtFQUN0QixnQkFBZ0IsRUFBRSxFQUFFO0VBQ3BCLGVBQWUsRUFBRSxFQUFFO0VBQ25CLGdDQUFnQyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzdDLHlCQUF5QixFQUFFLENBQUMsYUFBYSxDQUFDOztFQUsxQyxlQUFlLEVBQUUsRUFBRTtFQUNuQixnQkFBZ0IsRUFBRSxFQUFFO0VBQ3BCLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2xDLDRCQUE0QixFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVM7QUFFdEQsQ0FBQzs7QUFFRCxTQUFTQyxVQUFVLENBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUMsT0FBTztJQUNMRixFQUFFO0lBQ0ZDLE1BQU07SUFDTkMsTUFBTSxFQUFFQyxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUNwQkMsV0FBVyxFQUFFUixZQUFZO01BQ3pCUyxxQkFBcUIsRUFBRSxJQUFJO01BQzNCQyxvQ0FBb0MsRUFBRSxLQUFLO01BQzNDQyxrQkFBa0IsRUFBRSxLQUFLO01BQ3pCQyxlQUFlLEVBQUUsS0FBSztNQUN0QkMsVUFBVSxFQUFFO0lBQ2QsQ0FBQyxFQUFFUixNQUFNO0VBQ1gsQ0FBQztBQUNIO0FBRUEsU0FBU1Msa0JBQWtCLENBQUVYLEVBQUUsRUFBRUMsTUFBTSxFQUFFVyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbEQsTUFBTUMsVUFBVSxHQUFHZixRQUFRLENBQUNHLE1BQU0sQ0FBQztFQUNuQyxJQUFJLENBQUNZLFVBQVUsRUFBRTtJQUNmLE1BQU0sSUFBSUMsS0FBSyxDQUFFLHFCQUFvQmIsTUFBTyxHQUFFLENBQUM7RUFDakQ7RUFFQSxNQUFNQyxNQUFNLEdBQUdXLFVBQVUsQ0FBQ0UsTUFBTSxDQUFDLFVBQVViLE1BQU0sRUFBRWMsSUFBSSxFQUFFO0lBQ3ZEZCxNQUFNLENBQUNjLElBQUksQ0FBQyxHQUFHSixJQUFJLENBQUNJLElBQUksQ0FBQztJQUN6QixPQUFPZCxNQUFNO0VBQ2YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ04sT0FBT0gsVUFBVSxDQUFDQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxDQUFDO0FBQ3ZDO0FBQUMsZUFHY1Msa0JBQWtCO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["OBJECT_GROUP","COMMANDS","getCommand","id","method","params","Object","assign","objectGroup","includeCommandLineAPI","doNotPauseOnExceptionsAndMuteConsole","emulateUserGesture","generatePreview","saveResult","getProtocolCommand","opts","paramNames","Error","reduce","name"],"sources":["../../../lib/protocol/index.js"],"sourcesContent":["const OBJECT_GROUP = 'console';\n\n// See https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/inspector/protocol\nconst COMMANDS = {\n //#region APPLICATIONCACHE DOMAIN\n 'ApplicationCache.enable': [],\n 'ApplicationCache.getFramesWithManifests': [],\n //#endregion\n\n //#region CANVAS DOMAIN\n 'Canvas.enable': [],\n //#endregion\n\n //#region CONSOLE DOMAIN\n 'Console.disable': [],\n 'Console.enable': [],\n 'Console.getLoggingChannels': [],\n 'Console.setLoggingChannelLevel': ['source', 'level'],\n //#endregion\n\n //#region CSS DOMAIN\n 'CSS.enable': [],\n //#endregion\n\n //#region DATABASE DOMAIN\n 'Database.enable': [],\n //#endregion\n\n //#region DEBUGGER DOMAIN\n 'Debugger.enable': [],\n 'Debugger.setAsyncStackTraceDepth': ['depth'],\n 'Debugger.setBreakpointsActive': ['active'],\n 'Debugger.setPauseForInternalScripts': ['shouldPause'],\n 'Debugger.setPauseOnAssertions': ['enabled'],\n 'Debugger.setPauseOnExceptions': ['state'],\n //#endregion\n\n //#region DOM DOMAIN\n 'DOM.getDocument': [],\n //#endregion\n\n //#region DOMSTORAGE DOMAIN\n 'DOMStorage.enable': [],\n //#endregion\n\n //#region HEAP DOMAIN\n 'Heap.enable': [],\n 'Heap.gc': [],\n //#endregion\n\n //#region INDEXEDDB DOMAIN\n 'IndexedDB.enable': [],\n //#endregion\n\n //#region INSPECTOR DOMAIN\n 'Inspector.enable': [],\n 'Inspector.initialized': [],\n //#endregion\n\n //#region LAYERTREE DOMAIN\n 'LayerTree.enable': [],\n //#endregion\n\n //#region MEMORY DOMAIN\n 'Memory.enable': [],\n //#endregion\n\n //#region NETWORK DOMAIN\n 'Network.disable': [],\n 'Network.enable': [],\n 'Network.setResourceCachingDisabled': ['disabled'],\n //#endregion\n\n //#region PAGE DOMAIN\n 'Page.deleteCookie': ['cookieName', 'url'],\n 'Page.enable': [],\n 'Page.getCookies': ['urls'],\n 'Page.getResourceTree': [],\n 'Page.navigate': ['url'],\n //#endregion\n\n //#region RUNTIME DOMAIN\n 'Runtime.awaitPromise': ['promiseObjectId', 'returnByValue', 'generatePreview', 'saveResult'],\n 'Runtime.callFunctionOn': ['objectId', 'functionDeclaration', 'arguments', 'returnByValue'],\n 'Runtime.enable': [],\n 'Runtime.evaluate': ['expression', 'returnByValue', 'contextId'],\n //#endregion\n\n //#region TARGET DOMAIN\n 'Target.exists': [],\n //#endregion\n\n //#region TIMELINE DOMAIN\n 'Timeline.setAutoCaptureEnabled': ['enabled'],\n 'Timeline.setInstruments': ['instruments'],\n 'Timeline.start': [],\n 'Timeline.stop': [],\n //#endregion\n\n //#region WORKER DOMAIN\n 'Worker.enable': [],\n //#endregion\n};\n\nfunction getCommand (id, method, params = {}) {\n return {\n id,\n method,\n params: Object.assign({\n objectGroup: OBJECT_GROUP,\n includeCommandLineAPI: true,\n doNotPauseOnExceptionsAndMuteConsole: false,\n emulateUserGesture: false,\n generatePreview: false,\n saveResult: false,\n }, params),\n };\n}\n\nfunction getProtocolCommand (id, method, opts = {}) {\n const paramNames = COMMANDS[method];\n if (!paramNames) {\n throw new Error(`Unknown command: '${method}'`);\n }\n\n const params = paramNames.reduce(function (params, name) {\n params[name] = opts[name];\n return params;\n }, {});\n return getCommand(id, method, params);\n}\n\nexport { getProtocolCommand };\nexport default getProtocolCommand;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["OBJECT_GROUP","COMMANDS","getCommand","id","method","params","Object","assign","objectGroup","includeCommandLineAPI","doNotPauseOnExceptionsAndMuteConsole","emulateUserGesture","generatePreview","saveResult","getProtocolCommand","opts","paramNames","Error","reduce","name"],"sources":["../../../lib/protocol/index.js"],"sourcesContent":["const OBJECT_GROUP = 'console';\n\n// See https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/inspector/protocol\nconst COMMANDS = {\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Animation.json\n //#region ANIMATION DOMAIN\n 'Animation.enable': [], // Enables Canvas domain events\n 'Animation.disable': [], // Disables Canvas domain events\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ApplicationCache.json\n //#region APPLICATIONCACHE DOMAIN\n 'ApplicationCache.enable': [],\n 'ApplicationCache.disable': [],\n 'ApplicationCache.getFramesWithManifests': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Audit.json\n //#region AUDIT DOMAIN\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Browser.json\n //#region BROWSER DOMAIN\n 'Browser.enable': [], // Enables Browser domain events. e.g. extentionsEnabled\n 'Browser.disable': [], // Disables Browser domain events\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Canvas.json\n //#region CANVAS DOMAIN\n 'Canvas.enable': [],\n 'Canvas.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/CPUProfiler.json\n //#region CPUPROFILER DOMAIN\n 'CPUProfiler.startTracking': [],\n 'CPUProfiler.stopTracking': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Console.json\n //#region CONSOLE DOMAIN\n 'Console.disable': [],\n 'Console.enable': [],\n 'Console.clearMessages': [],\n 'Console.getLoggingChannels': [],\n 'Console.setLoggingChannelLevel': ['source', 'level'],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/CSS.json\n //#region CSS DOMAIN\n 'CSS.enable': [],\n 'CSS.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Database.json\n //#region DATABASE DOMAIN\n 'Database.enable': [],\n 'Database.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Debugger.json\n //#region DEBUGGER DOMAIN\n 'Debugger.enable': [],\n 'Debugger.disable': [],\n 'Debugger.setAsyncStackTraceDepth': ['depth'],\n 'Debugger.setBreakpointsActive': ['active'],\n 'Debugger.setPauseForInternalScripts': ['shouldPause'],\n 'Debugger.setPauseOnAssertions': ['enabled'],\n 'Debugger.setPauseOnExceptions': ['state'],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOM.json\n //#region DOM DOMAIN\n 'DOM.getDocument': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOMDebugger.json\n //#region DOMDEBUGGER DOMAIN\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOMStorage.json\n //#region DOMSTORAGE DOMAIN\n 'DOMStorage.enable': [],\n 'DOMStorage.disable': [],\n 'DOMStorage.getDOMStorageItems': ['storageId'],\n 'DOMStorage.clearDOMStorageItems': ['storageId'],\n\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Heap.json\n //#region HEAP DOMAIN\n 'Heap.enable': [],\n 'Heap.disable': [],\n 'Heap.gc': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/IndexedDB.json\n //#region INDEXEDDB DOMAIN\n 'IndexedDB.enable': [],\n 'IndexedDB.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Inspector.json\n //#region INSPECTOR DOMAIN\n 'Inspector.enable': [],\n 'Inspector.disable': [],\n 'Inspector.initialized': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/LayerTree.json\n //#region LAYERTREE DOMAIN\n 'LayerTree.enable': [],\n 'LayerTree.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Memory.json\n //#region MEMORY DOMAIN\n 'Memory.enable': [],\n 'Memory.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Network.json\n //#region NETWORK DOMAIN\n 'Network.disable': [],\n 'Network.enable': [],\n 'Network.setExtraHTTPHeaders': ['headers'],\n 'Network.setResourceCachingDisabled': ['disabled'],\n 'Network.setEmulatedConditions': ['bytesPerSecondLimit'],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Page.json\n //#region PAGE DOMAIN\n 'Page.enable': [],\n 'Page.disable': [],\n 'Page.reload': [],\n 'Page.navigate': ['url'],\n 'Page.overrideUserAgent': ['value'],\n 'Page.getCookies': ['urls'],\n 'Page.deleteCookie': ['cookieName', 'url'],\n 'Page.getResourceTree': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Runtime.json\n //#region RUNTIME DOMAIN\n 'Runtime.awaitPromise': ['promiseObjectId', 'returnByValue', 'generatePreview', 'saveResult'],\n 'Runtime.callFunctionOn': ['objectId', 'functionDeclaration', 'arguments', 'returnByValue'],\n 'Runtime.evaluate': ['expression', 'returnByValue', 'contextId'],\n 'Runtime.enable': [],\n 'Runtime.disable': [],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ScriptProfiler.json\n //#region SCRIPTPROFILER DOMAIN\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ServiceWorker.json\n //#region SERVICEWORKER DOMAIN\n 'ServiceWorker.getInitializationInfo': [], // returns '{ \"name\": \"info\", \"$ref\": \"Configuration\" }'\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Target.json\n //#region TARGET DOMAIN\n 'Target.exists': [], // removed since WebKit in 13.4\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Timeline.json\n //#region TIMELINE DOMAIN\n 'Timeline.enable': [],\n 'Timeline.disable': [],\n 'Timeline.start': [],\n 'Timeline.stop': [],\n 'Timeline.setAutoCaptureEnabled': ['enabled'],\n 'Timeline.setInstruments': ['instruments'],\n //#endregion\n\n // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Worker.json\n //#region WORKER DOMAIN\n 'Worker.enable': [],\n 'Worker.disable': [],\n 'Worker.initialized': ['workerId'],\n 'Worker.sendMessageToWorker': ['workerId', 'message']\n //#endregion\n};\n\nfunction getCommand (id, method, params = {}) {\n return {\n id,\n method,\n params: Object.assign({\n objectGroup: OBJECT_GROUP,\n includeCommandLineAPI: true,\n doNotPauseOnExceptionsAndMuteConsole: false,\n emulateUserGesture: false,\n generatePreview: false,\n saveResult: false,\n }, params),\n };\n}\n\nfunction getProtocolCommand (id, method, opts = {}) {\n const paramNames = COMMANDS[method];\n if (!paramNames) {\n throw new Error(`Unknown command: '${method}'`);\n }\n\n const params = paramNames.reduce(function (params, name) {\n params[name] = opts[name];\n return params;\n }, {});\n return getCommand(id, method, params);\n}\n\nexport { getProtocolCommand };\nexport default getProtocolCommand;\n"],"mappings":"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"}
@@ -472,4 +472,4 @@ class RpcClient {
472
472
  }
473
473
  }
474
474
  exports.default = RpcClient;
475
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJ3cmFwcGVyTXNnSWQiLCJ0b1N0cmluZyIsInRhcmdldElkIiwiZnVsbE9wdHMiLCJkZWZhdWx0cyIsImlkIiwiY21kIiwiZ2V0UmVtb3RlQ29tbWFuZCIsIl9fYXJndW1lbnQiLCJXSVJTb2NrZXREYXRhS2V5IiwiaXNOaWwiLCJCdWZmZXIiLCJmcm9tIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1lc3NhZ2VIYW5kbGVkIiwidHJ1bmNhdGUiLCJsaXN0ZW5lcnMiLCJfX3NlbGVjdG9yIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImFyZ3MiLCJ2YWx1ZSIsImNvZGUiLCJtc2ciLCJyZXMiLCJzZW5kTWVzc2FnZSIsImNvbm5lY3QiLCJkaXNjb25uZWN0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVjZWl2ZSIsImFwcCIsInRhcmdldEluZm8iLCJwZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uIiwiaXNQcm92aXNpb25hbCIsImhhcyIsIm9sZFRhcmdldElkIiwibmV3VGFyZ2V0SWQiLCJwcm92aXNpb25hbCIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVtb3RlTWVzc2FnZXMgZnJvbSAnLi9yZW1vdGUtbWVzc2FnZXMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUnBjTWVzc2FnZUhhbmRsZXIgZnJvbSAnLi9ycGMtbWVzc2FnZS1oYW5kbGVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0aW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxlQUFlLEdBQUc7RUFBQ0MsTUFBTSxFQUFFO0FBQUcsQ0FBQztBQUVyQyxNQUFNQyx1QkFBdUIsR0FBRyxLQUFLO0FBQ3JDLE1BQU1DLHdCQUF3QixHQUFHLElBQUk7QUFFckMsTUFBTUMsNkJBQTZCLEdBQUcsTUFBTTs7QUFHNUMsTUFBTUMsNkJBQTZCLEdBQUcsTUFBTTtBQUU1QyxTQUFTQyxhQUFhLENBQUVDLFFBQVEsRUFBRUMsZUFBZSxFQUFFO0VBSWpELE1BQU1DLGFBQWEsR0FBR0MsYUFBSSxDQUFDQyxlQUFlLENBQUNILGVBQWUsRUFBRSxJQUFJLEVBQUVKLDZCQUE2QixDQUFDO0VBQ2hHUSxlQUFHLENBQUNDLEtBQUssQ0FBRSw4Q0FBNkNOLFFBQVEsR0FBRyxFQUFFLEdBQUcsTUFBTywrQkFBOEJDLGVBQWdCLElBQUcsQ0FBQztFQUNqSUksZUFBRyxDQUFDQyxLQUFLLENBQUUsMENBQXlDVCw2QkFBOEIsTUFBS0ssYUFBYyxFQUFDLENBQUM7RUFDdkcsT0FBT0EsYUFBYTtBQUN0QjtBQUVlLE1BQU1LLFNBQVMsQ0FBQztFQUM3QkMsV0FBVyxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUNDLHFCQUFxQixHQUFHLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxvQkFBb0I7SUFFeEQsTUFBTTtNQUNKQyxRQUFRO01BQ1JaLGVBQWUsR0FBRyxDQUFDLENBQUM7TUFDcEJELFFBQVEsR0FBRyxJQUFJO01BQ2ZjLG1CQUFtQixHQUFHLEtBQUs7TUFDM0JDLDBCQUEwQixHQUFHLEtBQUs7TUFDbENDLDBCQUEwQjtNQUMxQkMsZUFBZTtNQUNmQyxzQkFBc0IsR0FBRztJQUMzQixDQUFDLEdBQUdULElBQUk7SUFFUixJQUFJLENBQUNULFFBQVEsR0FBR0EsUUFBUTtJQUV4QixJQUFJLENBQUNtQixXQUFXLEdBQUcsS0FBSztJQUN4QixJQUFJLENBQUNDLE1BQU0sR0FBR2pCLGFBQUksQ0FBQ2tCLE1BQU0sRUFBRTtJQUMzQixJQUFJLENBQUNDLFFBQVEsR0FBR25CLGFBQUksQ0FBQ2tCLE1BQU0sRUFBRTtJQUM3QixJQUFJLENBQUNFLEtBQUssR0FBRyxDQUFDO0lBRWQsSUFBSSxDQUFDVCxtQkFBbUIsR0FBR0EsbUJBQW1CO0lBQzlDLElBQUksQ0FBQ0MsMEJBQTBCLEdBQUdBLDBCQUEwQjtJQUM1RCxJQUFJLENBQUNFLGVBQWUsR0FBR0EsZUFBZTtJQUN0QyxJQUFJLENBQUNELDBCQUEwQixHQUFHQSwwQkFBMEI7SUFFNUQsSUFBSSxDQUFDRSxzQkFBc0IsR0FBR0Esc0JBQXNCO0lBRXBELElBQUksQ0FBQ0wsUUFBUSxHQUFHQSxRQUFRO0lBQ3hCLElBQUksQ0FBQ1osZUFBZSxHQUFHQSxlQUFlO0lBRXRDLElBQUksQ0FBQ3VCLFNBQVMsR0FBRyxFQUFFO0lBQ25CLElBQUksQ0FBQ2QsUUFBUSxHQUFHLENBQUMsQ0FBQzs7SUFHbEIsSUFBSSxDQUFDWCxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFLElBQUksQ0FBQ0MsZUFBZSxDQUFDO0VBQ3BFO0VBRUEsSUFBSXdCLFFBQVEsR0FBSTtJQUNkLE9BQU8sSUFBSSxDQUFDRCxTQUFTO0VBQ3ZCO0VBRUEsSUFBSUUsV0FBVyxHQUFJO0lBQ2pCLE9BQU8sSUFBSSxDQUFDZCxvQkFBb0IsSUFBSSxJQUFJLENBQUNiLGFBQWE7RUFDeEQ7RUFFQSxJQUFJNEIsT0FBTyxHQUFJO0lBQ2IsT0FBTyxJQUFJLENBQUNqQixRQUFRO0VBQ3RCO0VBRUEsSUFBSUUsb0JBQW9CLEdBQUk7SUFDMUIsT0FBTyxJQUFJLENBQUNELHFCQUFxQjtFQUNuQztFQUVBLElBQUlDLG9CQUFvQixDQUFFQSxvQkFBb0IsRUFBRTtJQUM5QyxJQUFJLENBQUNELHFCQUFxQixHQUFHLENBQUMsQ0FBQ0Msb0JBQW9CO0VBQ3JEO0VBRUEsSUFBSU8sV0FBVyxHQUFJO0lBQ2pCLE9BQU8sSUFBSSxDQUFDUyxTQUFTO0VBQ3ZCO0VBRUEsSUFBSVQsV0FBVyxDQUFFUyxTQUFTLEVBQUU7SUFDMUIsSUFBSSxDQUFDQSxTQUFTLEdBQUcsQ0FBQyxDQUFDQSxTQUFTO0VBQzlCO0VBRUFDLEVBQUUsQ0FBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUU7SUFDbkIsSUFBSSxDQUFDQyxjQUFjLENBQUNILEVBQUUsQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLENBQUM7SUFDdkMsT0FBTyxJQUFJO0VBQ2I7RUFFQUUsSUFBSSxDQUFFSCxLQUFLLEVBQUVDLFFBQVEsRUFBRTtJQUNyQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLEVBQUVDLFFBQVEsQ0FBQztJQUN6QyxPQUFPLElBQUk7RUFDYjtFQUVBRyxHQUFHLENBQUVKLEtBQUssRUFBRUMsUUFBUSxFQUFFO0lBQ3BCLElBQUksQ0FBQ0MsY0FBYyxDQUFDRSxHQUFHLENBQUNKLEtBQUssRUFBRUMsUUFBUSxDQUFDO0lBQ3hDLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBSWhDLGFBQWEsQ0FBRUEsYUFBYSxFQUFFO0lBQ2hDTSxlQUFHLENBQUM4QixJQUFJLENBQUUseUNBQXdDcEMsYUFBYSxHQUFHLGNBQWMsR0FBRyw2QkFBOEIsZ0JBQWUsQ0FBQztJQUNqSSxJQUFJLENBQUNxQyxjQUFjLEdBQUdyQyxhQUFhO0lBRW5DLElBQUksQ0FBQyxJQUFJLENBQUNzQyxjQUFjLEVBQUU7TUFDeEIsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSUMsdUJBQWMsQ0FBQ3ZDLGFBQWEsQ0FBQztJQUN6RCxDQUFDLE1BQU07TUFDTCxJQUFJLENBQUNzQyxjQUFjLENBQUN0QyxhQUFhLEdBQUdBLGFBQWE7SUFDbkQ7SUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDaUMsY0FBYyxFQUFFO01BQ3hCLElBQUksQ0FBQ0EsY0FBYyxHQUFHLElBQUlPLDBCQUFpQixDQUFDeEMsYUFBYSxDQUFDOztNQUcxRCxJQUFJLENBQUNpQyxjQUFjLENBQUNILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUNXLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pFLElBQUksQ0FBQ1QsY0FBYyxDQUFDSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDYSxZQUFZLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6RixJQUFJLENBQUNULGNBQWMsQ0FBQ0gsRUFBRSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQ2MsWUFBWSxDQUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDOUUsSUFBSSxDQUFDVCxjQUFjLENBQUNILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUNlLHlCQUF5QixDQUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDcEcsSUFBSSxDQUFDVCxjQUFjLENBQUNILEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUNnQixrQkFBa0IsQ0FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JGLENBQUMsTUFBTTtNQUNMLElBQUksQ0FBQ1QsY0FBYyxDQUFDakMsYUFBYSxHQUFHQSxhQUFhO0lBQ25EO0VBQ0Y7RUFFQSxJQUFJQSxhQUFhLEdBQUk7SUFDbkIsT0FBTyxJQUFJLENBQUNxQyxjQUFjO0VBQzVCO0VBRUEsTUFBTVUsYUFBYSxDQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxHQUFHLEtBQUssRUFBRTtJQUN2RCxJQUFJLENBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQ3ZCLFdBQVcsRUFBRTtNQUMvQjtJQUNGO0lBRUEsSUFBSSxJQUFJLENBQUN3QixTQUFTLENBQUNILFFBQVEsRUFBRUMsU0FBUyxDQUFDLEVBQUU7TUFDdkM7SUFDRjs7SUFHQSxJQUFJO01BQ0YsTUFBTSxJQUFBRywwQkFBZ0IsRUFBQyxNQUFNLENBQUNDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0gsU0FBUyxDQUFDSCxRQUFRLEVBQUVDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDNUVNLE1BQU0sRUFBRTNELHVCQUF1QjtRQUMvQjRELFVBQVUsRUFBRTNELHdCQUF3QjtRQUNwQzRELEtBQUssRUFBRTtNQUNULENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7TUFDWixJQUFJLENBQUNBLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUM1QyxNQUFNRixHQUFHO01BQ1g7TUFDQSxNQUFNLElBQUlHLEtBQUssQ0FBQyxxREFBcUQsQ0FBQztJQUN4RTtFQUNGO0VBRUEsTUFBTUMsSUFBSSxDQUFFQyxPQUFPLEVBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVzRCxlQUFlLEdBQUcsSUFBSSxFQUFFO0lBQ3RELE1BQU1DLEtBQUssR0FBRyxJQUFJQyxlQUFNLENBQUNDLEtBQUssRUFBRSxDQUFDQyxLQUFLLEVBQUU7SUFDeEMsTUFBTTtNQUNKcEIsUUFBUTtNQUNSQztJQUNGLENBQUMsR0FBR3ZDLElBQUk7SUFDUixJQUFJO01BQ0YsSUFBSSxDQUFDMkMsZUFBQyxDQUFDQyxPQUFPLENBQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUNLLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDTCxTQUFTLENBQUMsRUFBRTtRQUNqRCxNQUFNLElBQUksQ0FBQ0YsYUFBYSxDQUFDQyxRQUFRLEVBQUVDLFNBQVMsQ0FBQztNQUMvQztNQUNBLE9BQU8sTUFBTSxJQUFJLENBQUNvQixZQUFZLENBQUNOLE9BQU8sRUFBRXJELElBQUksRUFBRXNELGVBQWUsQ0FBQztJQUNoRSxDQUFDLENBQUMsT0FBT04sR0FBRyxFQUFFO01BQ1osSUFBSTtRQUFFQyxPQUFPLEdBQUc7TUFBRyxDQUFDLEdBQUdELEdBQUc7TUFDMUJDLE9BQU8sR0FBR0EsT0FBTyxDQUFDVyxXQUFXLEVBQUU7TUFDL0IsSUFBSVgsT0FBTyxDQUFDQyxRQUFRLENBQUUsK0JBQThCLENBQUMsRUFBRTtRQUNyRHRELGVBQUcsQ0FBQ2lFLElBQUksQ0FBQyxpRUFBaUUsR0FDeEUsNkNBQTZDLENBQUM7UUFDaEQsSUFBSSxDQUFDdkUsYUFBYSxHQUFHLEtBQUs7UUFDMUIsT0FBTyxNQUFNLElBQUksQ0FBQ3FFLFlBQVksQ0FBQ04sT0FBTyxFQUFFckQsSUFBSSxFQUFFc0QsZUFBZSxDQUFDO01BQ2hFLENBQUMsTUFBTSxJQUFJTCxPQUFPLENBQUNDLFFBQVEsQ0FBRSxzQkFBcUIsQ0FBQyxJQUMvQ0QsT0FBTyxDQUFDQyxRQUFRLENBQUUsMEJBQXlCLENBQUMsSUFDNUNELE9BQU8sQ0FBQ0MsUUFBUSxDQUFFLGdCQUFlLENBQUMsRUFBRTtRQUN0QyxJQUFJLENBQUM1RCxhQUFhLEdBQUcsSUFBSTtRQUN6QixNQUFNLElBQUksQ0FBQytDLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFQyxTQUFTLENBQUM7UUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ29CLFlBQVksQ0FBQ04sT0FBTyxFQUFFckQsSUFBSSxFQUFFc0QsZUFBZSxDQUFDO01BQ2hFO01BQ0EsTUFBTU4sR0FBRztJQUNYLENBQUMsU0FBUztNQUNScEQsZUFBRyxDQUFDQyxLQUFLLENBQUUsaUNBQWdDMEQsS0FBSyxDQUFDTyxXQUFXLEVBQUUsQ0FBQ0MsY0FBYyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUcsQ0FBQztJQUMvRjtFQUNGO0VBRUEsTUFBTUwsWUFBWSxDQUFFTixPQUFPLEVBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVzRCxlQUFlLEdBQUcsSUFBSSxFQUFFO0lBQzlELE9BQU8sTUFBTSxJQUFJVyxpQkFBQyxDQUFDLE9BQU9DLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQUE7O01BSzVDLE1BQU1yRCxLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLEVBQUU7TUFDMUIsSUFBSXNELFlBQVksR0FBR3RELEtBQUs7TUFDeEIsSUFBSSxJQUFJLENBQUN4QixhQUFhLEVBQUU7UUFFdEI4RSxZQUFZLEdBQUcsSUFBSSxDQUFDdEQsS0FBSyxFQUFFO1FBRTNCLElBQUksQ0FBQ1MsY0FBYyxDQUFDSCxFQUFFLENBQUNnRCxZQUFZLENBQUNDLFFBQVEsRUFBRSxFQUFFLFVBQVVyQixHQUFHLEVBQUU7VUFDN0QsSUFBSUEsR0FBRyxFQUFFO1lBQ1BtQixNQUFNLENBQUNuQixHQUFHLENBQUM7VUFDYjtRQUNGLENBQUMsQ0FBQztNQUNKO01BRUEsTUFBTVYsUUFBUSxHQUFHdEMsSUFBSSxDQUFDc0MsUUFBUTtNQUM5QixNQUFNQyxTQUFTLEdBQUd2QyxJQUFJLENBQUN1QyxTQUFTO01BQ2hDLE1BQU0rQixRQUFRLEdBQUcsSUFBSSxDQUFDN0IsU0FBUyxDQUFDSCxRQUFRLEVBQUVDLFNBQVMsQ0FBQzs7TUFHcEQsTUFBTWdDLFFBQVEsR0FBRzVCLGVBQUMsQ0FBQzZCLFFBQVEsQ0FBQztRQUMxQjdELE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU07UUFDbkJFLFFBQVEsRUFBRSxJQUFJLENBQUNBLFFBQVE7UUFDdkJ5RCxRQUFRO1FBQ1JHLEVBQUUsRUFBRTNEO01BQ04sQ0FBQyxFQUFFZCxJQUFJLENBQUM7TUFDUixNQUFNMEUsR0FBRyxHQUFHLElBQUksQ0FBQzlDLGNBQWMsQ0FBQytDLGdCQUFnQixDQUFDdEIsT0FBTyxFQUFFa0IsUUFBUSxDQUFDO01BRW5FLElBQUlHLEdBQUcsYUFBSEEsR0FBRyxrQ0FBSEEsR0FBRyxDQUFFRSxVQUFVLDRDQUFmLGdCQUFpQkMsZ0JBQWdCLEVBQUU7UUFFckMsSUFBSWxDLGVBQUMsQ0FBQ21DLEtBQUssQ0FBQ0osR0FBRyxDQUFDRSxVQUFVLENBQUNDLGdCQUFnQixDQUFDSixFQUFFLENBQUMsRUFBRTtVQUMvQ0MsR0FBRyxDQUFDRSxVQUFVLENBQUNDLGdCQUFnQixDQUFDSixFQUFFLEdBQUdMLFlBQVk7UUFDbkQ7UUFDQU0sR0FBRyxDQUFDRSxVQUFVLENBQUNDLGdCQUFnQixHQUM3QkUsTUFBTSxDQUFDQyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDUixHQUFHLENBQUNFLFVBQVUsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztNQUNoRTtNQUVBLElBQUlNLGNBQWMsR0FBRyxJQUFJO01BQ3pCLElBQUksQ0FBQzdCLGVBQWUsRUFBRTtRQUVwQjZCLGNBQWMsR0FBRyxLQUFLO1FBRXRCLElBQUksQ0FBQzVELGNBQWMsQ0FBQ0MsSUFBSSxDQUFDVixLQUFLLENBQUN1RCxRQUFRLEVBQUUsRUFBRSxVQUFVckIsR0FBRyxFQUFFO1VBQ3hELElBQUlBLEdBQUcsRUFBRTtZQUdQcEQsZUFBRyxDQUFDbUQsS0FBSyxDQUFFLDhEQUE2RGpDLEtBQU0sT0FBTTZCLGVBQUMsQ0FBQ3lDLFFBQVEsQ0FBQ0gsSUFBSSxDQUFDQyxTQUFTLENBQUNsQyxHQUFHLENBQUMsRUFBRWhFLGVBQWUsQ0FBRSxHQUFFLENBQUM7WUFJeEltRixNQUFNLENBQUNuQixHQUFHLENBQUM7VUFDYjtRQUNGLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3pCLGNBQWMsQ0FBQzhELFNBQVMsQ0FBQ1gsR0FBRyxDQUFDWSxVQUFVLENBQUMsQ0FBQ3JHLE1BQU0sRUFBRTtRQUMvRCxJQUFJLENBQUNzQyxjQUFjLENBQUNnRSxtQkFBbUIsQ0FBQ2IsR0FBRyxDQUFDWSxVQUFVLEVBQUUsVUFBVXRDLEdBQUcsRUFBRSxHQUFHd0MsSUFBSSxFQUFFO1VBQzlFLElBQUl4QyxHQUFHLEVBQUU7WUFDUCxPQUFPbUIsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO1VBQ3BCO1VBQ0FwRCxlQUFHLENBQUNDLEtBQUssQ0FBRSxvQ0FBbUNpQixLQUFNLE9BQU02QixlQUFDLENBQUN5QyxRQUFRLENBQUNILElBQUksQ0FBQ0MsU0FBUyxDQUFDTSxJQUFJLENBQUMsRUFBRXhHLGVBQWUsQ0FBRSxHQUFFLENBQUM7VUFDL0drRixPQUFPLENBQUNzQixJQUFJLENBQUM7UUFDZixDQUFDLENBQUM7TUFDSixDQUFDLE1BQU0sSUFBSWQsR0FBRyxhQUFIQSxHQUFHLG1DQUFIQSxHQUFHLENBQUVFLFVBQVUsNkNBQWYsaUJBQWlCQyxnQkFBZ0IsRUFBRTtRQUM1QyxJQUFJLENBQUN0RCxjQUFjLENBQUNDLElBQUksQ0FBQ1YsS0FBSyxDQUFDdUQsUUFBUSxFQUFFLEVBQUUsVUFBVXJCLEdBQUcsRUFBRXlDLEtBQUssRUFBRTtVQUMvRCxJQUFJekMsR0FBRyxFQUFFO1lBQ1AsT0FBT21CLE1BQU0sQ0FBQyxJQUFJaEIsS0FBSyxDQUFFLG9DQUFtQ0gsR0FBRyxDQUFDMEMsSUFBSyxNQUFLMUMsR0FBRyxDQUFDQyxPQUFRLEVBQUMsQ0FBQyxDQUFDO1VBQzNGO1VBQ0FyRCxlQUFHLENBQUNDLEtBQUssQ0FBRSx5Q0FBd0NpQixLQUFNLE9BQU02QixlQUFDLENBQUN5QyxRQUFRLENBQUNILElBQUksQ0FBQ0MsU0FBUyxDQUFDTyxLQUFLLENBQUMsRUFBRXpHLGVBQWUsQ0FBRSxHQUFFLENBQUM7VUFDckhrRixPQUFPLENBQUN1QixLQUFLLENBQUM7UUFDaEIsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNO1FBRUxOLGNBQWMsR0FBRyxLQUFLO01BQ3hCO01BRUEsTUFBTVEsR0FBRyxHQUFJLFlBQVdqQixHQUFHLENBQUNZLFVBQVcsV0FBVSxJQUM5Q2YsUUFBUSxDQUFDakMsUUFBUSxHQUFJLFlBQVdpQyxRQUFRLENBQUNqQyxRQUFTLEdBQUUsR0FBRyxFQUFFLENBQUMsSUFDMURpQyxRQUFRLENBQUNoQyxTQUFTLEdBQUksV0FBVWdDLFFBQVEsQ0FBQ2hDLFNBQVUsR0FBRSxHQUFHLEVBQUUsQ0FBQyxJQUMzRCxJQUFJLENBQUN0QixXQUFXLElBQUlxRCxRQUFRLEdBQUksYUFBWUEsUUFBUyxHQUFFLEdBQUcsRUFBRSxDQUFDLEdBQzdELFNBQVF4RCxLQUFNLE9BQU11QyxPQUFRLEdBQUU7TUFDakN6RCxlQUFHLENBQUNDLEtBQUssQ0FBQzhGLEdBQUcsQ0FBQztNQUNkLElBQUk7UUFDRixNQUFNQyxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUNDLFdBQVcsQ0FBQ25CLEdBQUcsQ0FBQztRQUN2QyxJQUFJLENBQUNTLGNBQWMsRUFBRTtVQUduQmpCLE9BQU8sQ0FBQzBCLEdBQUcsQ0FBQztRQUNkO01BQ0YsQ0FBQyxDQUFDLE9BQU81QyxHQUFHLEVBQUU7UUFDWixPQUFPbUIsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO01BQ3BCO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNOEMsT0FBTyxHQUFJO0lBQ2YsTUFBTSxJQUFJM0MsS0FBSyxDQUFFLG9EQUFtRCxDQUFDO0VBQ3ZFO0VBRUEsTUFBTTRDLFVBQVUsR0FBSTtJQUNsQixJQUFJLENBQUN4RSxjQUFjLENBQUN5RSxrQkFBa0IsRUFBRTtFQUMxQztFQUVBLE1BQU1ILFdBQVc7RUFBQSxFQUFpQjtJQUNoQyxNQUFNLElBQUkxQyxLQUFLLENBQUUsd0RBQXVELENBQUM7RUFDM0U7O0VBRUEsTUFBTThDLE9BQU87RUFBQSxFQUFjO0lBQ3pCLE1BQU0sSUFBSTlDLEtBQUssQ0FBRSxvREFBbUQsQ0FBQztFQUN2RTs7RUFFQXBCLFNBQVMsQ0FBRWlCLEdBQUcsRUFBRWtELEdBQUcsRUFBRUMsVUFBVSxFQUFFO0lBQy9CLElBQUl4RCxlQUFDLENBQUNtQyxLQUFLLENBQUNxQixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTdCLFFBQVEsQ0FBQyxFQUFFO01BQ2pDMUUsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLGtEQUFpRHdFLEdBQUksNEJBQTJCLENBQUM7TUFDM0Y7SUFDRjtJQUNBLElBQUl2RCxlQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUN3RCx5QkFBeUIsQ0FBQyxJQUFJLENBQUNELFVBQVUsQ0FBQ0UsYUFBYSxFQUFFO01BQzFFekcsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLGtEQUFpRHdFLEdBQUksOEJBQTZCakIsSUFBSSxDQUFDQyxTQUFTLENBQUNpQixVQUFVLENBQUUsRUFBQyxDQUFDO01BQ3pIO0lBQ0Y7SUFFQSxJQUFJQSxVQUFVLENBQUNFLGFBQWEsRUFBRTtNQUM1QnpHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLHVDQUFzQ3FHLEdBQUksT0FBTUMsVUFBVSxDQUFDN0IsUUFBUyx1Q0FBc0MsQ0FBQztNQUN0SDtJQUNGO0lBRUEsTUFBTSxDQUFDaEMsUUFBUSxFQUFFQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM2RCx5QkFBeUI7SUFFNUR4RyxlQUFHLENBQUNDLEtBQUssQ0FBRSwyQkFBMEJ5QyxRQUFTLGVBQWNDLFNBQVUsTUFBSzBDLElBQUksQ0FBQ0MsU0FBUyxDQUFDaUIsVUFBVSxDQUFFLEVBQUMsQ0FBQztJQUN4RyxJQUFJeEQsZUFBQyxDQUFDMkQsR0FBRyxDQUFDLElBQUksQ0FBQ3BGLE9BQU8sQ0FBQ29CLFFBQVEsQ0FBQyxFQUFFQyxTQUFTLENBQUMsRUFBRTtNQUM1QzNDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLHFEQUFvRCxJQUFJLENBQUNxQixPQUFPLENBQUNvQixRQUFRLENBQUMsQ0FBQ0MsU0FBUyxDQUFFLCtCQUE4QixDQUFDO0lBQ2xJO0lBQ0EsSUFBSSxDQUFDckIsT0FBTyxDQUFDZ0YsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDaEYsT0FBTyxDQUFDZ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQ2hGLE9BQU8sQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDQyxTQUFTLENBQUMsR0FBRzRELFVBQVUsQ0FBQzdCLFFBQVE7RUFDekQ7RUFFQXJDLFlBQVksQ0FBRWUsR0FBRyxFQUFFa0QsR0FBRyxFQUFFSyxXQUFXLEVBQUVDLFdBQVcsRUFBRTtJQUNoRDVHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDJCQUEwQnFHLEdBQUksbUJBQWtCSyxXQUFZLG1CQUFrQkMsV0FBWSxHQUFFLENBQUM7SUFDeEcsSUFBSSxDQUFDLElBQUksQ0FBQ3RGLE9BQU8sQ0FBQ2dGLEdBQUcsQ0FBQyxFQUFFO01BQ3RCdEcsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLCtCQUE4QndFLEdBQUksd0JBQXVCLENBQUM7TUFDcEU7SUFDRjtJQUVBLElBQUksQ0FBQ2hGLE9BQU8sQ0FBQ2dGLEdBQUcsQ0FBQyxDQUFDTyxXQUFXLEdBQUc7TUFDOUJGLFdBQVc7TUFDWEM7SUFDRixDQUFDO0VBQ0g7RUFFQXRFLFlBQVksQ0FBRWMsR0FBRyxFQUFFa0QsR0FBRyxFQUFFQyxVQUFVLEVBQUU7SUFBQTtJQUNsQyxJQUFJeEQsZUFBQyxDQUFDbUMsS0FBSyxDQUFDcUIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU3QixRQUFRLENBQUMsRUFBRTtNQUNqQzFFLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGtFQUFpRSxDQUFDO01BQzdFO0lBQ0Y7SUFFQUQsZUFBRyxDQUFDQyxLQUFLLENBQUUsNkJBQTRCcUcsR0FBSSxNQUFLQyxVQUFVLENBQUM3QixRQUFTLEVBQUMsQ0FBQzs7SUFHdEUsSUFBSSwwQkFBSSxDQUFDcEQsT0FBTyxDQUFDZ0YsR0FBRyxDQUFDLCtFQUFqQixrQkFBbUJPLFdBQVcsMERBQTlCLHNCQUFnQ0YsV0FBVyxNQUFLSixVQUFVLENBQUM3QixRQUFRLEVBQUU7TUFDdkUsTUFBTTtRQUFDaUMsV0FBVztRQUFFQztNQUFXLENBQUMsR0FBRyxJQUFJLENBQUN0RixPQUFPLENBQUNnRixHQUFHLENBQUMsQ0FBQ08sV0FBVztNQUNoRSxPQUFPLElBQUksQ0FBQ3ZGLE9BQU8sQ0FBQ2dGLEdBQUcsQ0FBQyxDQUFDTyxXQUFXOztNQUdwQyxNQUFNdkYsT0FBTyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxDQUFDZ0YsR0FBRyxDQUFDO01BQ2pDLEtBQUssTUFBTSxDQUFDUSxJQUFJLEVBQUVwQyxRQUFRLENBQUMsSUFBSTNCLGVBQUMsQ0FBQ2dFLE9BQU8sQ0FBQ3pGLE9BQU8sQ0FBQyxFQUFFO1FBQ2pELElBQUlvRCxRQUFRLEtBQUtpQyxXQUFXLEVBQUU7VUFDNUIzRyxlQUFHLENBQUNDLEtBQUssQ0FBRSxxQ0FBb0NxRyxHQUFJLG1CQUFrQkssV0FBWSxtQkFBa0JDLFdBQVksYUFBWSxDQUFDO1VBQzVIdEYsT0FBTyxDQUFDd0YsSUFBSSxDQUFDLEdBQUdGLFdBQVc7VUFDM0I7UUFDRjtNQUNGO01BQ0E1RyxlQUFHLENBQUM4QixJQUFJLENBQUUsK0JBQThCd0UsR0FBSSx5RUFBd0UsQ0FBQztNQUNySHRHLGVBQUcsQ0FBQzhCLElBQUksQ0FBRSxnQkFBZTZFLFdBQVksbUJBQWtCQyxXQUFZLHdCQUF1QnZCLElBQUksQ0FBQ0MsU0FBUyxDQUFDaEUsT0FBTyxDQUFFLEVBQUMsQ0FBQztJQUN0SDs7SUFHQSxNQUFNQSxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUNnRixHQUFHLENBQUM7SUFDakMsS0FBSyxNQUFNLENBQUNRLElBQUksRUFBRXBDLFFBQVEsQ0FBQyxJQUFJM0IsZUFBQyxDQUFDZ0UsT0FBTyxDQUFDekYsT0FBTyxDQUFDLEVBQUU7TUFDakQsSUFBSW9ELFFBQVEsS0FBSzZCLFVBQVUsQ0FBQzdCLFFBQVEsRUFBRTtRQUNwQyxPQUFPcEQsT0FBTyxDQUFDd0YsSUFBSSxDQUFDO1FBQ3BCO01BQ0Y7SUFDRjtJQUNBOUcsZUFBRyxDQUFDQyxLQUFLLENBQUUsV0FBVXNHLFVBQVUsQ0FBQzdCLFFBQVMsc0JBQXFCNEIsR0FBSSw4QkFBNkIsQ0FBQztFQUNsRztFQUVBekQsU0FBUyxDQUFFSCxRQUFRLEVBQUVDLFNBQVMsRUFBRTtJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDckIsT0FBTyxDQUFDb0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUVDLFNBQVMsQ0FBQztFQUNsRDtFQUVBLE1BQU1xRSxVQUFVLENBQUV0RSxRQUFRLEVBQUVDLFNBQVMsRUFBRTtJQUNyQyxJQUFJLENBQUM2RCx5QkFBeUIsR0FBRyxDQUFDOUQsUUFBUSxFQUFFQyxTQUFTLENBQUM7SUFDdEQsSUFBSSxDQUFDcEMsb0JBQW9CLEdBQUcsS0FBSzs7SUFLakMsTUFBTTBHLFFBQVEsR0FBRztNQUNmdkUsUUFBUTtNQUNSQztJQUNGLENBQUM7O0lBR0QsS0FBSyxNQUFNdUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO01BQ25DLE1BQU0sSUFBSSxDQUFDMUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFMkQsTUFBTSxDQUFDQyxNQUFNLENBQUM7UUFDL0NGO01BQ0YsQ0FBQyxFQUFFRCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEI7SUFFQSxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUV5RCxRQUFRLENBQUM7SUFDekNqSCxlQUFHLENBQUNDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUUzQixJQUFJLElBQUksQ0FBQ1AsYUFBYSxJQUFJSSxhQUFJLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNILGVBQWUsRUFBRSxHQUFHLEVBQUVILDZCQUE2QixDQUFDLEVBQUU7TUFDeEcsTUFBTSxJQUFJLENBQUMrRCxJQUFJLENBQUMsZUFBZSxFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRDtJQUVBLElBQUksQ0FBQzFHLG9CQUFvQixHQUFHLElBQUk7SUFFaEMsSUFBSSxJQUFJLENBQUNNLHNCQUFzQixFQUFFO01BQy9CLE1BQU0sSUFBSSxDQUFDd0csa0JBQWtCLENBQUMzRSxRQUFRLEVBQUVDLFNBQVMsQ0FBQztJQUNwRCxDQUFDLE1BQU07TUFDTCxNQUFNLElBQUksQ0FBQzJFLGNBQWMsQ0FBQzVFLFFBQVEsRUFBRUMsU0FBUyxDQUFDO0lBQ2hEO0VBQ0Y7O0VBS0EsTUFBTTJFLGNBQWMsQ0FBRTVFLFFBQVEsRUFBRUMsU0FBUyxFQUFFO0lBQ3pDLE1BQU1zRSxRQUFRLEdBQUc7TUFDZnZFLFFBQVE7TUFDUkM7SUFDRixDQUFDO0lBRUQsTUFBTSxJQUFJLENBQUNhLElBQUksQ0FBQyxrQkFBa0IsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDcEQsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsYUFBYSxFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQzs7SUFHL0MsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxhQUFhLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsdUJBQXVCLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0VBQzNEOztFQU1BLE1BQU1JLGtCQUFrQixDQUFFM0UsUUFBUSxFQUFFQyxTQUFTLEVBQUU7SUFDN0MsTUFBTXNFLFFBQVEsR0FBRztNQUNmdkUsUUFBUTtNQUNSQztJQUNGLENBQUM7SUFFRCxNQUFNLElBQUksQ0FBQ2EsSUFBSSxDQUFDLGtCQUFrQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNwRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxhQUFhLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDOztJQUcvQyxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxzQkFBc0IsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDeEQsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLG9DQUFvQyxFQUFFMkQsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbEVHLFFBQVEsRUFBRTtJQUNaLENBQUMsRUFBRU4sUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLG1CQUFtQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNyRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxpQkFBaUIsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbkQsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsa0JBQWtCLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLFlBQVksRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDOUMsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDL0MsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsZUFBZSxFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNqRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyx5QkFBeUIsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDM0QsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMseUNBQXlDLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzNFLE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLHlCQUF5QixFQUFFMkQsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDdkRJLFdBQVcsRUFBRSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLO0lBQ25ELENBQUMsRUFBRVAsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFMkQsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDOURGLE9BQU8sRUFBRTtJQUNYLENBQUMsRUFBRUQsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQywrQkFBK0IsRUFBRTJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQzdESyxNQUFNLEVBQUU7SUFDVixDQUFDLEVBQUVSLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQywrQkFBK0IsRUFBRTJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQzdETSxLQUFLLEVBQUU7SUFDVCxDQUFDLEVBQUVULFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQywrQkFBK0IsRUFBRTJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQzdERixPQUFPLEVBQUU7SUFDWCxDQUFDLEVBQUVELFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxrQ0FBa0MsRUFBRTJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQ2hFTyxLQUFLLEVBQUU7SUFDVCxDQUFDLEVBQUVWLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxxQ0FBcUMsRUFBRTJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQ25FUSxXQUFXLEVBQUU7SUFDZixDQUFDLEVBQUVYLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUVwQixNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxrQkFBa0IsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDcEQsTUFBTSxJQUFJLENBQUN6RCxJQUFJLENBQUMsZUFBZSxFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNqRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxlQUFlLEVBQUV5RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2pELE1BQU0sSUFBSSxDQUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFeUQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyxpQkFBaUIsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbkQsTUFBTVksZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDckUsSUFBSSxDQUFDLDRCQUE0QixFQUFFeUQsUUFBUSxDQUFDO0lBQy9FLEtBQUssTUFBTWEsTUFBTSxJQUFJLENBQUNELGVBQWUsQ0FBQ0UsUUFBUSxJQUFJLEVBQUUsRUFBRUMsR0FBRyxDQUFFQyxLQUFLLElBQUtBLEtBQUssQ0FBQ0gsTUFBTSxDQUFDLEVBQUU7TUFDbEYsTUFBTSxJQUFJLENBQUN0RSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUyRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztRQUM5RFUsTUFBTTtRQUNOSSxLQUFLLEVBQUU7TUFDVCxDQUFDLEVBQUVqQixRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEI7SUFFQSxNQUFNLElBQUksQ0FBQ3pELElBQUksQ0FBQyx1QkFBdUIsRUFBRXlELFFBQVEsRUFBRSxLQUFLLENBQUM7RUFDM0Q7RUFFQSxNQUFNa0IsU0FBUyxDQUFFekYsUUFBUSxFQUFFO0lBQ3pCLE9BQU8sTUFBTSxJQUFJMkIsaUJBQUMsQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUl0QyxNQUFNNkQsV0FBVyxHQUFHLENBQUNoRixHQUFHLEVBQUVpRixJQUFJLEtBQUs7UUFDakMsSUFBSWpGLEdBQUcsRUFBRTtVQUNQLE9BQU9tQixNQUFNLENBQUNuQixHQUFHLENBQUM7UUFDcEI7UUFFQSxNQUFNa0YsV0FBVyxHQUFHRCxJQUFJLENBQUNFLCtCQUErQjtRQUN4RCxNQUFNQyxlQUFlLEdBQUdILElBQUksQ0FBQ0ksMkJBQTJCOztRQUl4RCxJQUFJSCxXQUFXLElBQUlFLGVBQWUsS0FBS0YsV0FBVyxFQUFFO1VBQ2xEdEksZUFBRyxDQUFDQyxLQUFLLENBQUUsNkRBQTRELEdBQzVELFlBQVd1SSxlQUFnQixlQUFjRixXQUFZLEVBQUMsQ0FBQztRQUNwRTtRQUVBL0QsTUFBTSxDQUFDLElBQUloQixLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztNQUNwRCxDQUFDO01BQ0QsSUFBSSxDQUFDNUIsY0FBYyxDQUFDZ0UsbUJBQW1CLENBQUMsNEJBQTRCLEVBQUV5QyxXQUFXLENBQUM7O01BR2xGLE9BQU8sQ0FBQyxZQUFZO1FBQ2xCLElBQUlNLFFBQVEsRUFBRUMsaUJBQWlCO1FBQy9CLElBQUk7VUFDRCxDQUFDQSxpQkFBaUIsRUFBRUQsUUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNsRixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQy9EZDtVQUNGLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxPQUFPVSxHQUFHLEVBQUU7VUFDWnBELGVBQUcsQ0FBQzhCLElBQUksQ0FBRSw2QkFBNEJzQixHQUFHLENBQUNDLE9BQVEsRUFBQyxDQUFDO1VBQ3BEa0IsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO1FBQ2I7O1FBSUEsSUFBSUwsZUFBQyxDQUFDQyxPQUFPLENBQUMwRixRQUFRLENBQUMsRUFBRTtVQUN2QixJQUFJM0MsR0FBRyxHQUFHLGdDQUFnQztVQUMxQy9GLGVBQUcsQ0FBQ0MsS0FBSyxDQUFDOEYsR0FBRyxDQUFDO1VBQ2R4QixNQUFNLENBQUMsSUFBSWhCLEtBQUssQ0FBQ3dDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsTUFBTTtVQUNMekIsT0FBTyxDQUFDLENBQUNxRSxpQkFBaUIsRUFBRUQsUUFBUSxDQUFDLENBQUM7UUFDeEM7TUFDRixDQUFDLEdBQUc7SUFDTixDQUFDLENBQUM7RUFDSjtFQUVBbkcseUJBQXlCLENBQUVhLEdBQUcsRUFBRXdGLE9BQU8sRUFBRTtJQUl2QyxJQUFJLENBQUN4SCxRQUFRLENBQUN5SCxJQUFJLENBQUNELE9BQU8sQ0FBQy9ELEVBQUUsQ0FBQztFQUNoQztFQUVBckMsa0JBQWtCLEdBQUk7SUFFcEJ4QyxlQUFHLENBQUNDLEtBQUssQ0FBRSxpQ0FBZ0MsQ0FBQztFQUM5QztFQUVBNkksY0FBYyxDQUFFMUYsR0FBRyxFQUFFMkYsVUFBVSxFQUFFO0lBRS9CL0ksZUFBRyxDQUFDQyxLQUFLLENBQUUsa0JBQWlCb0YsSUFBSSxDQUFDQyxTQUFTLENBQUN5RCxVQUFVLENBQUUsRUFBQyxDQUFDO0VBQzNEO0FBQ0Y7QUFBQyJ9
475
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJ3cmFwcGVyTXNnSWQiLCJ0b1N0cmluZyIsInRhcmdldElkIiwiZnVsbE9wdHMiLCJkZWZhdWx0cyIsImlkIiwiY21kIiwiZ2V0UmVtb3RlQ29tbWFuZCIsIl9fYXJndW1lbnQiLCJXSVJTb2NrZXREYXRhS2V5IiwiaXNOaWwiLCJCdWZmZXIiLCJmcm9tIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1lc3NhZ2VIYW5kbGVkIiwidHJ1bmNhdGUiLCJsaXN0ZW5lcnMiLCJfX3NlbGVjdG9yIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImFyZ3MiLCJ2YWx1ZSIsImNvZGUiLCJtc2ciLCJyZXMiLCJzZW5kTWVzc2FnZSIsImNvbm5lY3QiLCJkaXNjb25uZWN0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVjZWl2ZSIsImFwcCIsInRhcmdldEluZm8iLCJwZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uIiwiaXNQcm92aXNpb25hbCIsImhhcyIsIm9sZFRhcmdldElkIiwibmV3VGFyZ2V0SWQiLCJwcm92aXNpb25hbCIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVtb3RlTWVzc2FnZXMgZnJvbSAnLi9yZW1vdGUtbWVzc2FnZXMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUnBjTWVzc2FnZUhhbmRsZXIgZnJvbSAnLi9ycGMtbWVzc2FnZS1oYW5kbGVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0IGluIDEzLjRcbmNvbnN0IE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTID0gJzEzLjQnO1xuXG5mdW5jdGlvbiBpc1RhcmdldEJhc2VkIChpc1NhZmFyaSwgcGxhdGZvcm1WZXJzaW9uKSB7XG4gIC8vIE9uIGlPUyAxMi4yIHRoZSBtZXNzYWdlcyBnZXQgc2VudCB0aHJvdWdoIHRoZSBUYXJnZXQgZG9tYWluXG4gIC8vIE9uIGlPUyAxMy4wKywgV0tXZWJWaWV3IGFsc28gbmVlZHMgdG8gZm9sbG93IHRoZSBUYXJnZXQgZG9tYWluLFxuICAvLyBzbyBoZXJlIG9ubHkgY2hlY2sgdGhlIHRhcmdldCBPUyB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci5cbiAgY29uc3QgaXNIaWdoVmVyc2lvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHBsYXRmb3JtVmVyc2lvbiwgJz49JywgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQpO1xuICBsb2cuZGVidWcoYENoZWNraW5nIHdoaWNoIGNvbW11bmljYXRpb24gc3R5bGUgdG8gdXNlICgke2lzU2FmYXJpID8gJycgOiAnbm9uLSd9U2FmYXJpIG9uIHBsYXRmb3JtIHZlcnNpb24gJyR7cGxhdGZvcm1WZXJzaW9ufScpYCk7XG4gIGxvZy5kZWJ1ZyhgUGxhdGZvcm0gdmVyc2lvbiBlcXVhbCBvciBoaWdoZXIgdGhhbiAnJHtNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRH0nOiAke2lzSGlnaFZlcnNpb259YCk7XG4gIHJldHVybiBpc0hpZ2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdO1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFvcHRzLnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24gPSB7fSxcbiAgICAgIGlzU2FmYXJpID0gdHJ1ZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb24gPSBmYWxzZSxcbiAgICAgIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wID0gZmFsc2UsXG4gICAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCxcbiAgICAgIHNvY2tldENodW5rU2l6ZSxcbiAgICAgIGZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmYWxzZSxcbiAgICB9ID0gb3B0cztcblxuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcblxuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5JZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5zZW5kZXJJZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5tc2dJZCA9IDA7XG5cbiAgICB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24gPSBsb2dBbGxDb21tdW5pY2F0aW9uO1xuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcDtcbiAgICB0aGlzLnNvY2tldENodW5rU2l6ZSA9IHNvY2tldENodW5rU2l6ZTtcbiAgICB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoID0gd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGg7XG5cbiAgICB0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24gPSBmdWxsUGFnZUluaXRpYWxpemF0aW9uO1xuXG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuXG4gICAgdGhpcy5fY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLl90YXJnZXRzID0ge307XG5cbiAgICAvLyBzdGFydCB3aXRoIGEgYmVzdCBndWVzcyBmb3IgdGhlIHByb3RvY29sXG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZChpc1NhZmFyaSwgdGhpcy5wbGF0Zm9ybVZlcnNpb24pO1xuICB9XG5cbiAgZ2V0IGNvbnRleHRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XG4gIH1cblxuICBnZXQgbmVlZHNUYXJnZXQgKCkge1xuICAgIHJldHVybiB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ICYmIHRoaXMuaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0cztcbiAgfVxuXG4gIGdldCBzaG91bGRDaGVja0ZvclRhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgc2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0IChzaG91bGRDaGVja0ZvclRhcmdldCkge1xuICAgIHRoaXMuX3Nob3VsZENoZWNrRm9yVGFyZ2V0ID0gISFzaG91bGRDaGVja0ZvclRhcmdldDtcbiAgfVxuXG4gIGdldCBpc0Nvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuICB9XG5cbiAgc2V0IGlzQ29ubmVjdGVkIChjb25uZWN0ZWQpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9ICEhY29ubmVjdGVkO1xuICB9XG5cbiAgb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uY2UgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb2ZmIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0IGlzVGFyZ2V0QmFzZWQgKGlzVGFyZ2V0QmFzZWQpIHtcbiAgICBsb2cud2FybihgU2V0dGluZyBjb21tdW5pY2F0aW9uIHByb3RvY29sOiB1c2luZyAke2lzVGFyZ2V0QmFzZWQgPyAnVGFyZ2V0LWJhc2VkJyA6ICdmdWxsIFdlYiBJbnNwZWN0b3IgcHJvdG9jb2wnfSBjb21tdW5pY2F0aW9uYCk7XG4gICAgdGhpcy5faXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlTWVzc2FnZXMpIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMgPSBuZXcgUmVtb3RlTWVzc2FnZXMoaXNUYXJnZXRCYXNlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3RlTWVzc2FnZXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbmV3IFJwY01lc3NhZ2VIYW5kbGVyKGlzVGFyZ2V0QmFzZWQpO1xuXG4gICAgICAvLyBhZGQgaGFuZGxlcnMgZm9yIGludGVybmFsIGV2ZW50c1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldENyZWF0ZWQnLCB0aGlzLmFkZFRhcmdldC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIHRoaXMudXBkYXRlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcsIHRoaXMucmVtb3ZlVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCcsIHRoaXMub25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24oJ0hlYXAuZ2FyYmFnZUNvbGxlY3RlZCcsIHRoaXMub25HYXJiYWdlQ29sbGVjdGVkLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1RhcmdldEJhc2VkICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXksIGZvcmNlID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlICYmICF0aGlzLm5lZWRzVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIHdhaXRpbmcgaXMgbmVjZXNzYXJ5IHRvIHNlZSB3aGF0IHRoZSB0YXJnZXQgaXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuZ2V0VGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpKSwge1xuICAgICAgICB3YWl0TXM6IFdBSVRfRk9SX1RBUkdFVF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiBXQUlUX0ZPUl9UQVJHRVRfSU5URVJWQUwsXG4gICAgICAgIGVycm9yOiAnTm8gdGFyZ2V0cyBmb3VuZCwgdW5hYmxlIHRvIGNvbW11bmljYXRlIHdpdGggZGV2aWNlJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29uZGl0aW9uIHVubWV0JykpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kIChjb21tYW5kLCBvcHRzID0ge30sIHdhaXRGb3JSZXNwb25zZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5XG4gICAgfSA9IG9wdHM7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KGFwcElkS2V5KSAmJiAhXy5pc0VtcHR5KHBhZ2VJZEtleSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgeyBtZXNzYWdlID0gJycgfSA9IGVycjtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhgJ3RhcmdldCcgZG9tYWluIHdhcyBub3QgZm91bmRgKSkge1xuICAgICAgICBsb2cuaW5mbygnVGhlIHRhcmdldCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBUYXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4gJyArXG4gICAgICAgICAgJ1dpbGwgZm9sbG93IG5vbi10YXJnZXQgYmFzZWQgY29tbXVuaWNhdGlvbi4nKTtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmRUb0RldmljZShjb21tYW5kLCBvcHRzLCB3YWl0Rm9yUmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluY2x1ZGVzKGBkb21haW4gd2FzIG5vdCBmb3VuZGApIHx8XG4gICAgICAgICAgbWVzc2FnZS5pbmNsdWRlcyhgc29tZSBhcmd1bWVudHMgb2YgbWV0aG9kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBtaXNzaW5nIHRhcmdldGApKSB7XG4gICAgICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VuZGluZyB0byBXZWIgSW5zcGVjdG9yIHRvb2sgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kVG9EZXZpY2UgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdoZW5ldmVyIHJlbW90ZSBkZWJ1Z2dlclxuICAgICAgLy8gcmVwbGllcyB0byBvdXIgcmVxdWVzdFxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBtZXNzYWdlcyBjb21pbmcgYW5kIGdvaW5nIHVzaW5nIGEgc2ltcGxlIHNlcXVlbnRpYWwgaWRcbiAgICAgIGNvbnN0IG1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgbGV0IHdyYXBwZXJNc2dJZCA9IG1zZ0lkO1xuICAgICAgaWYgKHRoaXMuaXNUYXJnZXRCYXNlZCkge1xuICAgICAgICAvLyBmb3IgdGFyZ2V0LWJhc2UgY29tbXVuaWNhdGlvbiwgZXZlcnl0aGluZyBpcyB3cmFwcGVkIHVwXG4gICAgICAgIHdyYXBwZXJNc2dJZCA9IHRoaXMubXNnSWQrKztcbiAgICAgICAgLy8gYWNrbm93bGVkZ2Ugd3JhcHBlciBtZXNzYWdlXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub24od3JhcHBlck1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcHBJZEtleSA9IG9wdHMuYXBwSWRLZXk7XG4gICAgICBjb25zdCBwYWdlSWRLZXkgPSBvcHRzLnBhZ2VJZEtleTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgICAgIC8vIHJldHJpZXZlIHRoZSBjb3JyZWN0IGNvbW1hbmQgdG8gc2VuZFxuICAgICAgY29uc3QgZnVsbE9wdHMgPSBfLmRlZmF1bHRzKHtcbiAgICAgICAgY29ubklkOiB0aGlzLmNvbm5JZCxcbiAgICAgICAgc2VuZGVySWQ6IHRoaXMuc2VuZGVySWQsXG4gICAgICAgIHRhcmdldElkLFxuICAgICAgICBpZDogbXNnSWQsXG4gICAgICB9LCBvcHRzKTtcbiAgICAgIGNvbnN0IGNtZCA9IHRoaXMucmVtb3RlTWVzc2FnZXMuZ2V0UmVtb3RlQ29tbWFuZChjb21tYW5kLCBmdWxsT3B0cyk7XG5cbiAgICAgIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXNzYWdlIGJlaW5nIHNlbnQgaGFzIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWRcbiAgICAgICAgaWYgKF8uaXNOaWwoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleS5pZCkpIHtcbiAgICAgICAgICBjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkID0gd3JhcHBlck1zZ0lkO1xuICAgICAgICB9XG4gICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkgPVxuICAgICAgICAgIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkpKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2VIYW5kbGVkID0gdHJ1ZTtcbiAgICAgIGlmICghd2FpdEZvclJlc3BvbnNlKSB7XG4gICAgICAgIC8vIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgYXMgc29vbiBhcyB0aGUgc29ja2V0IGhhcyBiZWVuIHNlbnRcbiAgICAgICAgbWVzc2FnZUhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gZG8gbm90IGxvZyByZWNlaXB0c1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uY2UobXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgdGhpcywgYW5kIGlmIGl0IGVycm9ycyBpdCBpcyBtb3N0IGxpa2VseVxuICAgICAgICAgICAgLy8gYSBwcm90b2NvbCBjaGFuZ2UuIExvZyBhbmQgY2hlY2sgZHVyaW5nIHRlc3RpbmdcbiAgICAgICAgICAgIGxvZy5lcnJvcihgUmVjZWl2ZWQgZXJyb3IgZnJvbSBzZW5kIHRoYXQgaXMgbm90IGJlaW5nIHdhaXRlZCBmb3IgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoZXJyKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgICAvLyByZWplY3QsIHRob3VnaCBpdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGlzIHdpbGwgYmUgdHJpZ2dlcmVkLCBzaW5jZVxuICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgZGlyZWN0bHR5IGFmdGVyIHNlbmQuIE9uIHRoZSBvZmYgY2hhbmNlLFxuICAgICAgICAgICAgLy8gdGhvdWdoLCBpdCB3aWxsIGFsZXJ0IG9mIGEgcHJvdG9jb2wgY2hhbmdlLlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXNzYWdlSGFuZGxlci5saXN0ZW5lcnMoY21kLl9fc2VsZWN0b3IpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnByZXBlbmRPbmNlTGlzdGVuZXIoY21kLl9fc2VsZWN0b3IsIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY21kPy5fX2FyZ3VtZW50Py5XSVJTb2NrZXREYXRhS2V5KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBSZW1vdGUgZGVidWdnZXIgZXJyb3Igd2l0aCBjb2RlICcke2Vyci5jb2RlfSc6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGRhdGEgcmVzcG9uc2UgZnJvbSBzZW5kIChpZDogJHttc2dJZH0pOiAnJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgREFUQV9MT0dfTEVOR1RIKX0nYCk7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90aGluZyBlbHNlIGlzIGhhbmRsaW5nIHRoaW5ncywgc28ganVzdCByZXNvbHZlIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtc2cgPSBgU2VuZGluZyAnJHtjbWQuX19zZWxlY3Rvcn0nIG1lc3NhZ2VgICtcbiAgICAgICAgKGZ1bGxPcHRzLmFwcElkS2V5ID8gYCB0byBhcHAgJyR7ZnVsbE9wdHMuYXBwSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAoZnVsbE9wdHMucGFnZUlkS2V5ID8gYCwgcGFnZSAnJHtmdWxsT3B0cy5wYWdlSWRLZXl9J2AgOiAnJykgK1xuICAgICAgICAodGhpcy5uZWVkc1RhcmdldCAmJiB0YXJnZXRJZCA/IGAsIHRhcmdldCAnJHt0YXJnZXRJZH0nYCA6ICcnKSArXG4gICAgICAgIGAgKGlkOiAke21zZ0lkfSk6ICcke2NvbW1hbmR9J2A7XG4gICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VuZE1lc3NhZ2UoY21kKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlSGFuZGxlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBoYW5kbGVycyB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGJlZm9yZSByZXNvbHZpbmcsXG4gICAgICAgICAgLy8gYW5kIG5vIGVycm9ycyBzZW5kaW5nIHRoZSBtZXNzYWdlIG92ZXIgdGhlIHNvY2tldCwgc28gcmVzb2x2ZVxuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Yi1jbGFzc2VzIG5lZWQgdG8gaW1wbGVtZW50IGEgJ2Nvbm5lY3QnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlICgvKiBjb21tYW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnc2VuZE1lc3NhZ2UnIGZ1bmN0aW9uYCk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlICgvKiBkYXRhICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAncmVjZWl2ZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFkZFRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uKSAmJiAhdGFyZ2V0SW5mby5pc1Byb3Zpc2lvbmFsKSB7XG4gICAgICBsb2cud2FybihgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXRDcmVhdGVkJyBldmVudCBmb3IgYXBwICcke2FwcH0nIHdpdGggbm8gcGVuZGluZyByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KHRhcmdldEluZm8pfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUHJvdmlzaW9uYWwgdGFyZ2V0IGNyZWF0ZWQgZm9yIGFwcCAnJHthcHB9JywgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nLiBJZ25vcmluZyB1bnRpbCB0YXJnZXQgdXBkYXRlIGV2ZW50YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2FwcElkS2V5LCBwYWdlSWRLZXldID0gdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uO1xuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcElkS2V5fScgYW5kIHBhZ2UgJyR7cGFnZUlkS2V5fSc6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgaWYgKF8uaGFzKHRoaXMudGFyZ2V0c1thcHBJZEtleV0sIHBhZ2VJZEtleSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgaXMgYWxyZWFkeSBhIHRhcmdldCBmb3IgdGhpcyBhcHAgYW5kIHBhZ2UgKCcke3RoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XX0nKS4gVGhpcyBtaWdodCBjYXVzZSBwcm9ibGVtc2ApO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldHNbYXBwXSA9IHRoaXMudGFyZ2V0c1thcHBdIHx8IHt9O1xuICAgIHRoaXMudGFyZ2V0c1thcHBJZEtleV1bcGFnZUlkS2V5XSA9IHRhcmdldEluZm8udGFyZ2V0SWQ7XG4gIH1cblxuICB1cGRhdGVUYXJnZXQgKGVyciwgYXBwLCBvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWQpIHtcbiAgICBsb2cuZGVidWcoYFRhcmdldCB1cGRhdGVkIGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfSdgKTtcbiAgICBpZiAoIXRoaXMudGFyZ2V0c1thcHBdKSB7XG4gICAgICBsb2cud2FybihgTm8gZXhpc3RpbmcgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE5vdCBzdXJlIHdoYXQgdG8gZG9gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGlzLCB0byBiZSB1c2VkIGlmL3doZW4gdGhlIGV4aXN0aW5nIHRhcmdldCBpcyBkZXN0cm95ZWRcbiAgICB0aGlzLnRhcmdldHNbYXBwXS5wcm92aXNpb25hbCA9IHtcbiAgICAgIG9sZFRhcmdldElkLFxuICAgICAgbmV3VGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVRhcmdldCAoZXJyLCBhcHAsIHRhcmdldEluZm8pIHtcbiAgICBpZiAoXy5pc05pbCh0YXJnZXRJbmZvPy50YXJnZXRJZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnIGV2ZW50IHdpdGggbm8gdGFyZ2V0LiBTa2lwcGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IGRlc3Ryb3llZCBmb3IgYXBwICcke2FwcH0nOiAke3RhcmdldEluZm8udGFyZ2V0SWR9YCk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXJnZXRzIGFuZCBmaW5kIHRoZSBvbmUgdGhhdCBoYXMgYSB3YWl0aW5nIHByb3Zpc2lvbmFsIHRhcmdldFxuICAgIGlmICh0aGlzLnRhcmdldHNbYXBwXT8ucHJvdmlzaW9uYWw/Lm9sZFRhcmdldElkID09PSB0YXJnZXRJbmZvLnRhcmdldElkKSB7XG4gICAgICBjb25zdCB7b2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkfSA9IHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuICAgICAgZGVsZXRlIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsO1xuXG4gICAgICAvLyB3ZSBkbyBub3Qga25vdyB0aGUgcGFnZSwgc28gZ28gdGhyb3VnaCBhbmQgZmluZCB0aGUgZXhpc3RpbmcgdGFyZ2V0XG4gICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy50YXJnZXRzW2FwcF07XG4gICAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICAgIGlmICh0YXJnZXRJZCA9PT0gb2xkVGFyZ2V0SWQpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nLiBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBVcGRhdGluZ2ApO1xuICAgICAgICAgIHRhcmdldHNbcGFnZV0gPSBuZXdUYXJnZXRJZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy53YXJuKGBQcm92aXNpb25hbCB0YXJnZXQgZm9yIGFwcCAnJHthcHB9JyBmb3VuZCwgYnV0IG5vIHN1aXRhYmxlIGV4aXN0aW5nIHRhcmdldCBmb3VuZC4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXNgKTtcbiAgICAgIGxvZy53YXJuKGBPbGQgdGFyZ2V0OiAnJHtvbGRUYXJnZXRJZH0nLCBuZXcgdGFyZ2V0OiAnJHtuZXdUYXJnZXRJZH0nLiBFeGlzdGluZyB0YXJnZXRzOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldHMpfWApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0LCBqdXN0IGdldCByaWQgb2YgdGhlIGV4aXN0aW5nIG9uZVxuICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICBmb3IgKGNvbnN0IFtwYWdlLCB0YXJnZXRJZF0gb2YgXy50b1BhaXJzKHRhcmdldHMpKSB7XG4gICAgICBpZiAodGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgICAgZGVsZXRlIHRhcmdldHNbcGFnZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgJyR7dGFyZ2V0SW5mby50YXJnZXRJZH0nIGRlbGV0ZWQgZm9yIGFwcCAnJHthcHB9JywgYnV0IG5vIHN1Y2ggdGFyZ2V0IGV4aXN0c2ApO1xuICB9XG5cbiAgZ2V0VGFyZ2V0IChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgcmV0dXJuICh0aGlzLnRhcmdldHNbYXBwSWRLZXldIHx8IHt9KVtwYWdlSWRLZXldO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0UGFnZSAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIHRoaXMucGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiA9IFthcHBJZEtleSwgcGFnZUlkS2V5XTtcbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gZmFsc2U7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSBzdGVwcyB0aGF0IHRoZSBEZXNrdG9wIFNhZmFyaSBzeXN0ZW1cbiAgICAvLyBnb2VzIHRocm91Z2ggdG8gaW5pdGlhbGl6ZSB0aGUgV2ViIEluc3BlY3RvciBzZXNzaW9uXG5cbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICAvLyBoaWdobGlnaHQgYW5kIHRoZW4gdW4taGlnaGxpZ2h0IHRoZSB3ZWJ2aWV3XG4gICAgZm9yIChjb25zdCBlbmFibGVkIG9mIFt0cnVlLCBmYWxzZV0pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnaW5kaWNhdGVXZWJWaWV3JywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGVuYWJsZWQsXG4gICAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ3NldFNlbmRlcktleScsIHNlbmRPcHRzKTtcbiAgICBsb2cuZGVidWcoJ1NlbmRlciBrZXkgc2V0Jyk7XG5cbiAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMucGxhdGZvcm1WZXJzaW9uLCAnPCcsIE1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdUYXJnZXQuZXhpc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2VGdWxsKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQYWdlKGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIFBlcmZvcm0gdGhlIG1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZ2V0IHRoZSBXZWIgSW5zcGVjdG9yIHdvcmtpbmdcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3Qgc2VuZE9wdHMgPSB7XG4gICAgICBhcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1BhZ2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhc2tzIHRvIGluaXRpYWxpemVcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ05ldHdvcmsuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgLypcbiAgICogTWltaWMgZXZlcnkgc3RlcCB0aGF0IERlc2t0b3AgU2FmYXJpIERldmVsb3AgdG9vbHMgdXNlcyB0byBpbml0aWFsaXplIGFcbiAgICogV2ViIEluc3BlY3RvciBzZXNzaW9uXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplUGFnZUZ1bGwgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5nZXRSZXNvdXJjZVRyZWUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NU3RvcmFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGF0YWJhc2UuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luZGV4ZWREQi5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ1NTLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdSdW50aW1lLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdIZWFwLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdNZW1vcnkuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0FwcGxpY2F0aW9uQ2FjaGUuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cycsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRJbnN0cnVtZW50cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgaW5zdHJ1bWVudHM6IFsnVGltZWxpbmUnLCAnU2NyaXB0UHJvZmlsZXInLCAnQ1BVJ10sXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdUaW1lbGluZS5zZXRBdXRvQ2FwdHVyZUVuYWJsZWQnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc3RhdGU6ICdub25lJyxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25Bc3NlcnRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldEFzeW5jU3RhY2tUcmFjZURlcHRoJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZXB0aDogMjAwLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIHNob3VsZFBhdXNlOiBmYWxzZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTGF5ZXJUcmVlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdXb3JrZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NhbnZhcy5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRE9NLmdldERvY3VtZW50Jywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBjb25zdCBsb2dnaW5nQ2hhbm5lbHMgPSBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZ2V0TG9nZ2luZ0NoYW5uZWxzJywgc2VuZE9wdHMpO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIChsb2dnaW5nQ2hhbm5lbHMuY2hhbm5lbHMgfHwgW10pLm1hcCgoZW50cnkpID0+IGVudHJ5LnNvdXJjZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5zZXRMb2dnaW5nQ2hhbm5lbExldmVsJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbGV2ZWw6ICd2ZXJib3NlJyxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmluaXRpYWxpemVkJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEFwcCAoYXBwSWRLZXkpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gbG9jYWwgY2FsbGJhY2ssIHRlbXBvcmFyaWx5IGFkZGVkIGFzIGNhbGxiYWNrIHRvXG4gICAgICAvLyBgX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDpgIHJlbW90ZSBkZWJ1Z2dlciByZXNwb25zZVxuICAgICAgLy8gdG8gaGFuZGxlIHRoZSBpbml0aWFsIGNvbm5lY3Rpb25cbiAgICAgIGNvbnN0IG9uQXBwQ2hhbmdlID0gKGVyciwgZGljdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZyb20gdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQsIGdldCB0aGUgaWRzXG4gICAgICAgIGNvbnN0IG9sZEFwcElkS2V5ID0gZGljdC5XSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgICBjb25zdCBjb3JyZWN0QXBwSWRLZXkgPSBkaWN0LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcblxuICAgICAgICAvLyBpZiB0aGlzIGlzIGEgcmVwb3J0IG9mIGEgcHJveHkgcmVkaXJlY3QgZnJvbSB0aGUgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gdXBkYXRlIG91ciBkaWN0aW9uYXJ5IGFuZCBnZXQgYSBuZXcgYXBwIGlkXG4gICAgICAgIGlmIChvbGRBcHBJZEtleSAmJiBjb3JyZWN0QXBwSWRLZXkgIT09IG9sZEFwcElkS2V5KSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBXZSB3ZXJlIG5vdGlmaWVkIHdlIG1pZ2h0IGhhdmUgY29ubmVjdGVkIHRvIHRoZSB3cm9uZyBhcHAuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgVXNpbmcgaWQgJHtjb3JyZWN0QXBwSWRLZXl9IGluc3RlYWQgb2YgJHtvbGRBcHBJZEtleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05ldyBhcHBsaWNhdGlvbiBoYXMgY29ubmVjdGVkJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcignX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBvbkFwcENoYW5nZSk7XG5cbiAgICAgIC8vIGRvIHRoZSBhY3R1YWwgY29ubmVjdGluZyB0byB0aGUgYXBwXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHBhZ2VEaWN0LCBjb25uZWN0ZWRBcHBJZEtleTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoW2Nvbm5lY3RlZEFwcElkS2V5LCBwYWdlRGljdF0gPSBhd2FpdCB0aGlzLnNlbmQoJ2Nvbm5lY3RUb0FwcCcsIHtcbiAgICAgICAgICAgIGFwcElkS2V5XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihgVW5hYmxlIHRvIGNvbm5lY3QgdG8gYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgIGlmIChfLmlzRW1wdHkocGFnZURpY3QpKSB7XG4gICAgICAgICAgbGV0IG1zZyA9ICdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQnO1xuICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkIChlcnIsIGNvbnRleHQpIHtcbiAgICAvLyB7IGlkOiAyLCBpc1BhZ2VDb250ZXh0OiB0cnVlLCBuYW1lOiAnJywgZnJhbWVJZDogJzAuMScgfVxuICAgIC8vIHJpZ2h0IG5vdyB3ZSBoYXZlIG5vIHdheSB0byBtYXAgY29udGV4dHMgdG8gYXBwcy9wYWdlc1xuICAgIC8vIHNvIGp1c3Qgc3RvcmVcbiAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dC5pZCk7XG4gIH1cblxuICBvbkdhcmJhZ2VDb2xsZWN0ZWQgKCkge1xuICAgIC8vIGp1c3Qgd2FudCB0byBsb2cgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgYXMgaXQgY2FuIGFmZmVjdCBvcGVydGlvblxuICAgIGxvZy5kZWJ1ZyhgV2ViIEluc3BlY3RvciBnYXJiYWdlIGNvbGxlY3RlZGApO1xuICB9XG5cbiAgb25TY3JpcHRQYXJzZWQgKGVyciwgc2NyaXB0SW5mbykge1xuICAgIC8vIHsgc2NyaXB0SWQ6ICcxMycsIHVybDogJycsIHN0YXJ0TGluZTogMCwgc3RhcnRDb2x1bW46IDAsIGVuZExpbmU6IDgyLCBlbmRDb2x1bW46IDMgfVxuICAgIGxvZy5kZWJ1ZyhgU2NyaXB0IHBhcnNlZDogJHtKU09OLnN0cmluZ2lmeShzY3JpcHRJbmZvKX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsZUFBZSxHQUFHO0VBQUNDLE1BQU0sRUFBRTtBQUFHLENBQUM7QUFFckMsTUFBTUMsdUJBQXVCLEdBQUcsS0FBSztBQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJO0FBRXJDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07O0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYSxDQUFFQyxRQUFRLEVBQUVDLGVBQWUsRUFBRTtFQUlqRCxNQUFNQyxhQUFhLEdBQUdDLGFBQUksQ0FBQ0MsZUFBZSxDQUFDSCxlQUFlLEVBQUUsSUFBSSxFQUFFSiw2QkFBNkIsQ0FBQztFQUNoR1EsZUFBRyxDQUFDQyxLQUFLLENBQUUsOENBQTZDTixRQUFRLEdBQUcsRUFBRSxHQUFHLE1BQU8sK0JBQThCQyxlQUFnQixJQUFHLENBQUM7RUFDaklJLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDBDQUF5Q1QsNkJBQThCLE1BQUtLLGFBQWMsRUFBQyxDQUFDO0VBQ3ZHLE9BQU9BLGFBQWE7QUFDdEI7QUFFZSxNQUFNSyxTQUFTLENBQUM7RUFDN0JDLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLEVBQUU7SUFDbEIsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxDQUFDLENBQUNGLElBQUksQ0FBQ0csb0JBQW9CO0lBRXhELE1BQU07TUFDSkMsUUFBUTtNQUNSWixlQUFlLEdBQUcsQ0FBQyxDQUFDO01BQ3BCRCxRQUFRLEdBQUcsSUFBSTtNQUNmYyxtQkFBbUIsR0FBRyxLQUFLO01BQzNCQywwQkFBMEIsR0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.js","names":["DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKitin 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client.js","names":["DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKit in 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":"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"}
@@ -2,32 +2,66 @@ const OBJECT_GROUP = 'console';
2
2
 
3
3
  // See https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/inspector/protocol
4
4
  const COMMANDS = {
5
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Animation.json
6
+ //#region ANIMATION DOMAIN
7
+ 'Animation.enable': [], // Enables Canvas domain events
8
+ 'Animation.disable': [], // Disables Canvas domain events
9
+ //#endregion
10
+
11
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ApplicationCache.json
5
12
  //#region APPLICATIONCACHE DOMAIN
6
13
  'ApplicationCache.enable': [],
14
+ 'ApplicationCache.disable': [],
7
15
  'ApplicationCache.getFramesWithManifests': [],
8
16
  //#endregion
9
17
 
18
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Audit.json
19
+ //#region AUDIT DOMAIN
20
+ //#endregion
21
+
22
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Browser.json
23
+ //#region BROWSER DOMAIN
24
+ 'Browser.enable': [], // Enables Browser domain events. e.g. extentionsEnabled
25
+ 'Browser.disable': [], // Disables Browser domain events
26
+ //#endregion
27
+
28
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Canvas.json
10
29
  //#region CANVAS DOMAIN
11
30
  'Canvas.enable': [],
31
+ 'Canvas.disable': [],
12
32
  //#endregion
13
33
 
34
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/CPUProfiler.json
35
+ //#region CPUPROFILER DOMAIN
36
+ 'CPUProfiler.startTracking': [],
37
+ 'CPUProfiler.stopTracking': [],
38
+ //#endregion
39
+
40
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Console.json
14
41
  //#region CONSOLE DOMAIN
15
42
  'Console.disable': [],
16
43
  'Console.enable': [],
44
+ 'Console.clearMessages': [],
17
45
  'Console.getLoggingChannels': [],
18
46
  'Console.setLoggingChannelLevel': ['source', 'level'],
19
47
  //#endregion
20
48
 
49
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/CSS.json
21
50
  //#region CSS DOMAIN
22
51
  'CSS.enable': [],
52
+ 'CSS.disable': [],
23
53
  //#endregion
24
54
 
55
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Database.json
25
56
  //#region DATABASE DOMAIN
26
57
  'Database.enable': [],
58
+ 'Database.disable': [],
27
59
  //#endregion
28
60
 
61
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Debugger.json
29
62
  //#region DEBUGGER DOMAIN
30
63
  'Debugger.enable': [],
64
+ 'Debugger.disable': [],
31
65
  'Debugger.setAsyncStackTraceDepth': ['depth'],
32
66
  'Debugger.setBreakpointsActive': ['active'],
33
67
  'Debugger.setPauseForInternalScripts': ['shouldPause'],
@@ -35,70 +69,116 @@ const COMMANDS = {
35
69
  'Debugger.setPauseOnExceptions': ['state'],
36
70
  //#endregion
37
71
 
72
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOM.json
38
73
  //#region DOM DOMAIN
39
74
  'DOM.getDocument': [],
40
75
  //#endregion
41
76
 
77
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOMDebugger.json
78
+ //#region DOMDEBUGGER DOMAIN
79
+ //#endregion
80
+
81
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/DOMStorage.json
42
82
  //#region DOMSTORAGE DOMAIN
43
83
  'DOMStorage.enable': [],
84
+ 'DOMStorage.disable': [],
85
+ 'DOMStorage.getDOMStorageItems': ['storageId'],
86
+ 'DOMStorage.clearDOMStorageItems': ['storageId'],
87
+
44
88
  //#endregion
45
89
 
90
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Heap.json
46
91
  //#region HEAP DOMAIN
47
92
  'Heap.enable': [],
93
+ 'Heap.disable': [],
48
94
  'Heap.gc': [],
49
95
  //#endregion
50
96
 
97
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/IndexedDB.json
51
98
  //#region INDEXEDDB DOMAIN
52
99
  'IndexedDB.enable': [],
100
+ 'IndexedDB.disable': [],
53
101
  //#endregion
54
102
 
103
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Inspector.json
55
104
  //#region INSPECTOR DOMAIN
56
105
  'Inspector.enable': [],
106
+ 'Inspector.disable': [],
57
107
  'Inspector.initialized': [],
58
108
  //#endregion
59
109
 
110
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/LayerTree.json
60
111
  //#region LAYERTREE DOMAIN
61
112
  'LayerTree.enable': [],
113
+ 'LayerTree.disable': [],
62
114
  //#endregion
63
115
 
116
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Memory.json
64
117
  //#region MEMORY DOMAIN
65
118
  'Memory.enable': [],
119
+ 'Memory.disable': [],
66
120
  //#endregion
67
121
 
122
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Network.json
68
123
  //#region NETWORK DOMAIN
69
124
  'Network.disable': [],
70
125
  'Network.enable': [],
126
+ 'Network.setExtraHTTPHeaders': ['headers'],
71
127
  'Network.setResourceCachingDisabled': ['disabled'],
128
+ 'Network.setEmulatedConditions': ['bytesPerSecondLimit'],
72
129
  //#endregion
73
130
 
131
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Page.json
74
132
  //#region PAGE DOMAIN
75
- 'Page.deleteCookie': ['cookieName', 'url'],
76
133
  'Page.enable': [],
134
+ 'Page.disable': [],
135
+ 'Page.reload': [],
136
+ 'Page.navigate': ['url'],
137
+ 'Page.overrideUserAgent': ['value'],
77
138
  'Page.getCookies': ['urls'],
139
+ 'Page.deleteCookie': ['cookieName', 'url'],
78
140
  'Page.getResourceTree': [],
79
- 'Page.navigate': ['url'],
80
141
  //#endregion
81
142
 
143
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Runtime.json
82
144
  //#region RUNTIME DOMAIN
83
145
  'Runtime.awaitPromise': ['promiseObjectId', 'returnByValue', 'generatePreview', 'saveResult'],
84
146
  'Runtime.callFunctionOn': ['objectId', 'functionDeclaration', 'arguments', 'returnByValue'],
85
- 'Runtime.enable': [],
86
147
  'Runtime.evaluate': ['expression', 'returnByValue', 'contextId'],
148
+ 'Runtime.enable': [],
149
+ 'Runtime.disable': [],
150
+ //#endregion
151
+
152
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ScriptProfiler.json
153
+ //#region SCRIPTPROFILER DOMAIN
87
154
  //#endregion
88
155
 
156
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/ServiceWorker.json
157
+ //#region SERVICEWORKER DOMAIN
158
+ 'ServiceWorker.getInitializationInfo': [], // returns '{ "name": "info", "$ref": "Configuration" }'
159
+ //#endregion
160
+
161
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Target.json
89
162
  //#region TARGET DOMAIN
90
- 'Target.exists': [],
163
+ 'Target.exists': [], // removed since WebKit in 13.4
91
164
  //#endregion
92
165
 
166
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Timeline.json
93
167
  //#region TIMELINE DOMAIN
94
- 'Timeline.setAutoCaptureEnabled': ['enabled'],
95
- 'Timeline.setInstruments': ['instruments'],
168
+ 'Timeline.enable': [],
169
+ 'Timeline.disable': [],
96
170
  'Timeline.start': [],
97
171
  'Timeline.stop': [],
172
+ 'Timeline.setAutoCaptureEnabled': ['enabled'],
173
+ 'Timeline.setInstruments': ['instruments'],
98
174
  //#endregion
99
175
 
176
+ // https://github.com/WebKit/WebKit/blob/main/Source/JavaScriptCore/inspector/protocol/Worker.json
100
177
  //#region WORKER DOMAIN
101
178
  'Worker.enable': [],
179
+ 'Worker.disable': [],
180
+ 'Worker.initialized': ['workerId'],
181
+ 'Worker.sendMessageToWorker': ['workerId', 'message']
102
182
  //#endregion
103
183
  };
104
184
 
@@ -14,7 +14,7 @@ const WAIT_FOR_TARGET_INTERVAL = 1000;
14
14
 
15
15
  const MIN_PLATFORM_FOR_TARGET_BASED = '12.2';
16
16
 
17
- // `Target.exists` protocol method was removed from WebKitin 13.4
17
+ // `Target.exists` protocol method was removed from WebKit in 13.4
18
18
  const MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';
19
19
 
20
20
  function isTargetBased (isSafari, platformVersion) {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "keywords": [
5
5
  "appium"
6
6
  ],
7
- "version": "9.1.5",
7
+ "version": "9.1.6",
8
8
  "author": "Appium Contributors",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {
@@ -47,7 +47,7 @@
47
47
  "teen_process": "^2.0.0"
48
48
  },
49
49
  "scripts": {
50
- "build": "rm -rf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js",
50
+ "build": "rm -rf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js && babel --out-dir=build/bin bin",
51
51
  "dev": "npm run build -- --watch",
52
52
  "lint": "eslint .",
53
53
  "lint:fix": "npm run lint -- --fix",