@appium/base-driver 8.5.3 → 8.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/build/lib/basedriver/capabilities.d.ts.map +1 -1
  2. package/build/lib/basedriver/capabilities.js +1 -1
  3. package/build/lib/basedriver/commands/event.js +1 -1
  4. package/build/lib/basedriver/commands/find.d.ts.map +1 -1
  5. package/build/lib/basedriver/commands/find.js +1 -1
  6. package/build/lib/basedriver/commands/index.js +1 -1
  7. package/build/lib/basedriver/commands/log.d.ts.map +1 -1
  8. package/build/lib/basedriver/commands/log.js +1 -1
  9. package/build/lib/basedriver/commands/session.js +1 -1
  10. package/build/lib/basedriver/commands/settings.d.ts.map +1 -1
  11. package/build/lib/basedriver/commands/settings.js +1 -1
  12. package/build/lib/basedriver/commands/timeout.d.ts.map +1 -1
  13. package/build/lib/basedriver/commands/timeout.js +1 -1
  14. package/build/lib/basedriver/core.d.ts +120 -139
  15. package/build/lib/basedriver/core.d.ts.map +1 -1
  16. package/build/lib/basedriver/core.js +1 -49
  17. package/build/lib/basedriver/desired-caps.d.ts +5 -2
  18. package/build/lib/basedriver/desired-caps.d.ts.map +1 -1
  19. package/build/lib/basedriver/desired-caps.js +14 -18
  20. package/build/lib/basedriver/device-settings.d.ts +9 -9
  21. package/build/lib/basedriver/device-settings.d.ts.map +1 -1
  22. package/build/lib/basedriver/device-settings.js +4 -4
  23. package/build/lib/basedriver/driver.d.ts +43 -38
  24. package/build/lib/basedriver/driver.d.ts.map +1 -1
  25. package/build/lib/basedriver/driver.js +58 -11
  26. package/build/lib/basedriver/helpers.d.ts +8 -3
  27. package/build/lib/basedriver/helpers.d.ts.map +1 -1
  28. package/build/lib/basedriver/helpers.js +4 -6
  29. package/build/lib/basedriver/logger.d.ts +1 -1
  30. package/build/lib/basedriver/logger.d.ts.map +1 -1
  31. package/build/lib/basedriver/logger.js +1 -1
  32. package/build/lib/constants.js +1 -1
  33. package/build/lib/express/crash.d.ts.map +1 -1
  34. package/build/lib/express/crash.js +1 -1
  35. package/build/lib/express/express-logging.d.ts.map +1 -1
  36. package/build/lib/express/express-logging.js +1 -1
  37. package/build/lib/express/idempotency.js +1 -1
  38. package/build/lib/express/logger.d.ts +1 -1
  39. package/build/lib/express/logger.d.ts.map +1 -1
  40. package/build/lib/express/logger.js +1 -1
  41. package/build/lib/express/middleware.d.ts.map +1 -1
  42. package/build/lib/express/middleware.js +1 -1
  43. package/build/lib/express/server.d.ts +21 -0
  44. package/build/lib/express/server.d.ts.map +1 -1
  45. package/build/lib/express/server.js +4 -9
  46. package/build/lib/express/static.d.ts.map +1 -1
  47. package/build/lib/express/static.js +2 -2
  48. package/build/lib/express/websocket.d.ts +14 -11
  49. package/build/lib/express/websocket.d.ts.map +1 -1
  50. package/build/lib/express/websocket.js +2 -2
  51. package/build/lib/helpers/capabilities.d.ts.map +1 -1
  52. package/build/lib/helpers/capabilities.js +1 -1
  53. package/build/lib/index.d.ts +2 -1
  54. package/build/lib/index.js +7 -1
  55. package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -1
  56. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -2
  57. package/build/lib/jsonwp-proxy/proxy.d.ts +30 -5
  58. package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -1
  59. package/build/lib/jsonwp-proxy/proxy.js +20 -4
  60. package/build/lib/jsonwp-status/status.d.ts.map +1 -1
  61. package/build/lib/jsonwp-status/status.js +2 -2
  62. package/build/lib/protocol/errors.d.ts +17 -8
  63. package/build/lib/protocol/errors.d.ts.map +1 -1
  64. package/build/lib/protocol/errors.js +9 -5
  65. package/build/lib/protocol/helpers.js +1 -1
  66. package/build/lib/protocol/index.js +1 -1
  67. package/build/lib/protocol/protocol.d.ts.map +1 -1
  68. package/build/lib/protocol/protocol.js +1 -1
  69. package/build/lib/protocol/routes.d.ts +17 -3
  70. package/build/lib/protocol/routes.d.ts.map +1 -1
  71. package/build/lib/protocol/routes.js +1 -1
  72. package/build/lib/protocol/validators.js +1 -1
  73. package/build/test/basedriver/driver-e2e-tests.js +1 -1
  74. package/build/test/basedriver/driver-tests.js +1 -1
  75. package/build/test/basedriver/index.js +1 -1
  76. package/build/test/e2e/basedriver/driver.e2e.spec.js +1 -1
  77. package/build/test/e2e/basedriver/helpers.e2e.spec.js +1 -1
  78. package/build/test/e2e/basedriver/websockets.e2e.spec.js +1 -1
  79. package/build/test/e2e/express/server.e2e.spec.js +1 -1
  80. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +1 -1
  81. package/build/test/e2e/protocol/fake-driver.js +1 -1
  82. package/build/test/e2e/protocol/helpers.js +1 -1
  83. package/build/test/e2e/protocol/protocol.e2e.spec.js +13 -13
  84. package/build/test/helpers.js +1 -1
  85. package/build/test/unit/basedriver/capabilities.spec.js +12 -12
  86. package/build/test/unit/basedriver/capability.spec.js +15 -15
  87. package/build/test/unit/basedriver/commands/event.spec.js +1 -1
  88. package/build/test/unit/basedriver/commands/log.spec.js +1 -1
  89. package/build/test/unit/basedriver/device-settings.spec.js +1 -1
  90. package/build/test/unit/basedriver/driver.spec.js +1 -1
  91. package/build/test/unit/basedriver/helpers.spec.js +33 -33
  92. package/build/test/unit/basedriver/timeout.spec.js +1 -1
  93. package/build/test/unit/express/server.spec.js +1 -1
  94. package/build/test/unit/express/static.spec.js +2 -2
  95. package/build/test/unit/jsonwp-proxy/mock-request.js +1 -1
  96. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +1 -1
  97. package/build/test/unit/jsonwp-proxy/proxy.spec.js +2 -2
  98. package/build/test/unit/jsonwp-proxy/url.spec.js +1 -1
  99. package/build/test/unit/jsonwp-status/status.spec.js +1 -1
  100. package/build/test/unit/protocol/errors.spec.js +1 -1
  101. package/build/test/unit/protocol/routes.spec.js +1 -1
  102. package/build/test/unit/protocol/validator.spec.js +1 -1
  103. package/build/tsconfig.tsbuildinfo +1 -1
  104. package/lib/basedriver/capabilities.js +95 -47
  105. package/lib/basedriver/commands/event.js +4 -4
  106. package/lib/basedriver/commands/find.js +12 -26
  107. package/lib/basedriver/commands/index.js +7 -7
  108. package/lib/basedriver/commands/log.js +5 -7
  109. package/lib/basedriver/commands/session.js +3 -3
  110. package/lib/basedriver/commands/settings.js +3 -5
  111. package/lib/basedriver/commands/timeout.js +18 -23
  112. package/lib/basedriver/core.js +150 -229
  113. package/lib/basedriver/desired-caps.js +30 -29
  114. package/lib/basedriver/device-settings.js +21 -20
  115. package/lib/basedriver/driver.js +131 -96
  116. package/lib/basedriver/helpers.js +124 -81
  117. package/lib/basedriver/logger.js +1 -1
  118. package/lib/constants.js +2 -6
  119. package/lib/express/crash.js +4 -6
  120. package/lib/express/express-logging.js +26 -24
  121. package/lib/express/idempotency.js +16 -16
  122. package/lib/express/logger.js +1 -1
  123. package/lib/express/middleware.js +49 -33
  124. package/lib/express/server.js +68 -44
  125. package/lib/express/static.js +11 -12
  126. package/lib/express/websocket.js +26 -16
  127. package/lib/helpers/capabilities.js +11 -16
  128. package/lib/index.js +50 -33
  129. package/lib/jsonwp-proxy/protocol-converter.js +85 -69
  130. package/lib/jsonwp-proxy/proxy.js +116 -53
  131. package/lib/jsonwp-status/status.js +36 -29
  132. package/lib/protocol/errors.js +469 -292
  133. package/lib/protocol/helpers.js +5 -8
  134. package/lib/protocol/index.js +22 -15
  135. package/lib/protocol/protocol.js +103 -55
  136. package/lib/protocol/routes.js +430 -273
  137. package/lib/protocol/validators.js +5 -5
  138. package/package.json +7 -6
  139. package/test/basedriver/driver-e2e-tests.js +92 -66
  140. package/test/basedriver/driver-tests.js +90 -33
  141. package/test/basedriver/index.js +1 -1
@@ -5,13 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.desiredCapabilityConstraints = void 0;
9
- Object.defineProperty(exports, "validator", {
10
- enumerable: true,
11
- get: function () {
12
- return _validate.default;
13
- }
14
- });
8
+ exports.validator = exports.desiredCapabilityConstraints = void 0;
15
9
 
16
10
  require("source-map-support/register");
17
11
 
@@ -21,6 +15,8 @@ var _validate = _interopRequireDefault(require("validate.js"));
21
15
 
22
16
  var _bluebird = _interopRequireDefault(require("bluebird"));
23
17
 
18
+ const validator = _validate.default;
19
+ exports.validator = validator;
24
20
  let desiredCapabilityConstraints = {
25
21
  platformName: {
26
22
  presence: true,
@@ -71,7 +67,7 @@ let desiredCapabilityConstraints = {
71
67
  };
72
68
  exports.desiredCapabilityConstraints = desiredCapabilityConstraints;
73
69
 
74
- _validate.default.validators.isString = function isString(value) {
70
+ validator.validators.isString = function isString(value) {
75
71
  if (typeof value === 'string') {
76
72
  return null;
77
73
  }
@@ -83,7 +79,7 @@ _validate.default.validators.isString = function isString(value) {
83
79
  return 'must be of type string';
84
80
  };
85
81
 
86
- _validate.default.validators.isNumber = function isNumber(value) {
82
+ validator.validators.isNumber = function isNumber(value) {
87
83
  if (typeof value === 'number') {
88
84
  return null;
89
85
  }
@@ -92,7 +88,7 @@ _validate.default.validators.isNumber = function isNumber(value) {
92
88
  return null;
93
89
  }
94
90
 
95
- if (typeof value === 'string' && !isNaN(value)) {
91
+ if (typeof value === 'string' && !isNaN(Number(value))) {
96
92
  _logger.default.warn('Number capability passed in as string. Functionality may be compromised.');
97
93
 
98
94
  return null;
@@ -101,7 +97,7 @@ _validate.default.validators.isNumber = function isNumber(value) {
101
97
  return 'must be of type number';
102
98
  };
103
99
 
104
- _validate.default.validators.isBoolean = function isBoolean(value) {
100
+ validator.validators.isBoolean = function isBoolean(value) {
105
101
  if (typeof value === 'boolean') {
106
102
  return null;
107
103
  }
@@ -117,7 +113,7 @@ _validate.default.validators.isBoolean = function isBoolean(value) {
117
113
  return 'must be of type boolean';
118
114
  };
119
115
 
120
- _validate.default.validators.isObject = function isObject(value) {
116
+ validator.validators.isObject = function isObject(value) {
121
117
  if (typeof value === 'object') {
122
118
  return null;
123
119
  }
@@ -129,7 +125,7 @@ _validate.default.validators.isObject = function isObject(value) {
129
125
  return 'must be of type object';
130
126
  };
131
127
 
132
- _validate.default.validators.isArray = function isArray(value) {
128
+ validator.validators.isArray = function isArray(value) {
133
129
  if (Array.isArray(value)) {
134
130
  return null;
135
131
  }
@@ -141,7 +137,7 @@ _validate.default.validators.isArray = function isArray(value) {
141
137
  return 'must be of type array';
142
138
  };
143
139
 
144
- _validate.default.validators.deprecated = function deprecated(value, options, key) {
140
+ validator.validators.deprecated = function deprecated(value, options, key) {
145
141
  if (options) {
146
142
  _logger.default.warn(`${key} is a deprecated capability`);
147
143
  }
@@ -149,7 +145,7 @@ _validate.default.validators.deprecated = function deprecated(value, options, ke
149
145
  return null;
150
146
  };
151
147
 
152
- _validate.default.validators.inclusionCaseInsensitive = function inclusionCaseInsensitive(value, options) {
148
+ validator.validators.inclusionCaseInsensitive = function inclusionCaseInsensitive(value, options) {
153
149
  if (typeof value === 'undefined') {
154
150
  return null;
155
151
  } else if (typeof value !== 'string') {
@@ -165,9 +161,9 @@ _validate.default.validators.inclusionCaseInsensitive = function inclusionCaseIn
165
161
  return `${value} not part of ${options.toString()}`;
166
162
  };
167
163
 
168
- _validate.default.promise = _bluebird.default;
164
+ validator.promise = _bluebird.default;
169
165
 
170
- _validate.default.prettify = function prettify(val) {
166
+ validator.prettify = function prettify(val) {
171
167
  return val;
172
168
  };
173
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwicGxhdGZvcm1OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJuZXdDb21tYW5kVGltZW91dCIsImlzTnVtYmVyIiwiYXV0b21hdGlvbk5hbWUiLCJhdXRvTGF1bmNoIiwiaXNCb29sZWFuIiwidWRpZCIsIm9yaWVudGF0aW9uIiwiaW5jbHVzaW9uIiwiYXV0b1dlYnZpZXciLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJldmVudFRpbWluZ3MiLCJwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbHVlIiwiaXNOYU4iLCJsb2ciLCJ3YXJuIiwiaW5jbHVkZXMiLCJpc09iamVjdCIsImlzQXJyYXkiLCJBcnJheSIsImRlcHJlY2F0ZWQiLCJvcHRpb25zIiwia2V5IiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwib3B0aW9uIiwidG9Mb3dlckNhc2UiLCJ0b1N0cmluZyIsInByb21pc2UiLCJCIiwicHJldHRpZnkiLCJ2YWwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvYmFzZWRyaXZlci9kZXNpcmVkLWNhcHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJ3ZhbGlkYXRlLmpzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db25zdHJhaW50c30gKi9cbmxldCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0ge1xuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgZGV2aWNlTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHBsYXRmb3JtVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG5ld0NvbW1hbmRUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b21hdGlvbk5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVkaWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBvcmllbnRhdGlvbjoge1xuICAgIGluY2x1c2lvbjogW1xuICAgICAgJ0xBTkRTQ0FQRScsXG4gICAgICAnUE9SVFJBSVQnXG4gICAgXVxuICB9LFxuICBhdXRvV2Vidmlldzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBub1Jlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGZ1bGxSZXNldDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBsYW5ndWFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGV2ZW50VGltaW5nczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG59O1xuXG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBhbGxvdyBhIHN0cmluZyB2YWx1ZVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgbG9nLndhcm4oJ051bWJlciBjYXBhYmlsaXR5IHBhc3NlZCBpbiBhcyBzdHJpbmcuIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGNvbXByb21pc2VkLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgb2JqZWN0Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuICdtdXN0IGJlIG9mIHR5cGUgYXJyYXknO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkICh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSAodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICd1bnJlY29nbmlzZWQnO1xuICB9XG4gIGZvciAobGV0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbi50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfSBub3QgcGFydCBvZiAke29wdGlvbnMudG9TdHJpbmcoKX1gO1xufTtcblxudmFsaWRhdG9yLnByb21pc2UgPSBCO1xudmFsaWRhdG9yLnByZXR0aWZ5ID0gZnVuY3Rpb24gcHJldHRpZnkgKHZhbCkge1xuICByZXR1cm4gdmFsO1xufTtcblxuXG5leHBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzLCB2YWxpZGF0b3IgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQSxJQUFJQSw0QkFBNEIsR0FBRztFQUNqQ0MsWUFBWSxFQUFFO0lBQ1pDLFFBQVEsRUFBRSxJQURFO0lBRVpDLFFBQVEsRUFBRTtFQUZFLENBRG1CO0VBS2pDQyxVQUFVLEVBQUU7SUFDVkQsUUFBUSxFQUFFO0VBREEsQ0FMcUI7RUFRakNFLGVBQWUsRUFBRTtJQUNmRixRQUFRLEVBQUU7RUFESyxDQVJnQjtFQVdqQ0csaUJBQWlCLEVBQUU7SUFDakJDLFFBQVEsRUFBRTtFQURPLENBWGM7RUFjakNDLGNBQWMsRUFBRTtJQUNkTCxRQUFRLEVBQUU7RUFESSxDQWRpQjtFQWlCakNNLFVBQVUsRUFBRTtJQUNWQyxTQUFTLEVBQUU7RUFERCxDQWpCcUI7RUFvQmpDQyxJQUFJLEVBQUU7SUFDSlIsUUFBUSxFQUFFO0VBRE4sQ0FwQjJCO0VBdUJqQ1MsV0FBVyxFQUFFO0lBQ1hDLFNBQVMsRUFBRSxDQUNULFdBRFMsRUFFVCxVQUZTO0VBREEsQ0F2Qm9CO0VBNkJqQ0MsV0FBVyxFQUFFO0lBQ1hKLFNBQVMsRUFBRTtFQURBLENBN0JvQjtFQWdDakNLLE9BQU8sRUFBRTtJQUNQTCxTQUFTLEVBQUU7RUFESixDQWhDd0I7RUFtQ2pDTSxTQUFTLEVBQUU7SUFDVE4sU0FBUyxFQUFFO0VBREYsQ0FuQ3NCO0VBc0NqQ08sUUFBUSxFQUFFO0lBQ1JkLFFBQVEsRUFBRTtFQURGLENBdEN1QjtFQXlDakNlLE1BQU0sRUFBRTtJQUNOZixRQUFRLEVBQUU7RUFESixDQXpDeUI7RUE0Q2pDZ0IsWUFBWSxFQUFFO0lBQ1pULFNBQVMsRUFBRTtFQURDLENBNUNtQjtFQStDakNV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
169
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWxpZGF0b3IiLCJfdmFsaWRhdG9yIiwiZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsInByZXNlbmNlIiwiaXNTdHJpbmciLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpc051bWJlciIsImF1dG9tYXRpb25OYW1lIiwiYXV0b0xhdW5jaCIsImlzQm9vbGVhbiIsInVkaWQiLCJvcmllbnRhdGlvbiIsImluY2x1c2lvbiIsImF1dG9XZWJ2aWV3Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsImxhbmd1YWdlIiwibG9jYWxlIiwiZXZlbnRUaW1pbmdzIiwicHJpbnRQYWdlU291cmNlT25GaW5kRmFpbHVyZSIsInZhbGlkYXRvcnMiLCJ2YWx1ZSIsImlzTmFOIiwiTnVtYmVyIiwibG9nIiwid2FybiIsImluY2x1ZGVzIiwiaXNPYmplY3QiLCJpc0FycmF5IiwiQXJyYXkiLCJkZXByZWNhdGVkIiwib3B0aW9ucyIsImtleSIsImluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSIsIm9wdGlvbiIsInRvTG93ZXJDYXNlIiwidG9TdHJpbmciLCJwcm9taXNlIiwiQiIsInByZXR0aWZ5IiwidmFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF92YWxpZGF0b3IgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCB2YWxpZGF0b3IgPVxuICAvKiogQHR5cGUge2ltcG9ydCgndmFsaWRhdGUuanMnKS5WYWxpZGF0ZUpTICYge3Byb21pc2U6IHR5cGVvZiBpbXBvcnQoJ2JsdWViaXJkJyl9fSAqLyAoXG4gICAgX3ZhbGlkYXRvclxuICApO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSAqL1xubGV0IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMgPSB7XG4gIHBsYXRmb3JtTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBkZXZpY2VOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIHBsYXRmb3JtVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBuZXdDb21tYW5kVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlLFxuICB9LFxuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICB1ZGlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIG9yaWVudGF0aW9uOiB7XG4gICAgaW5jbHVzaW9uOiBbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLFxuICB9LFxuICBhdXRvV2Vidmlldzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgbm9SZXNldDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgZnVsbFJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBsYW5ndWFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBsb2NhbGU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgZXZlbnRUaW1pbmdzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxufTtcblxudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGFsbG93IGEgc3RyaW5nIHZhbHVlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgIGxvZy53YXJuKCdOdW1iZXIgY2FwYWJpbGl0eSBwYXNzZWQgaW4gYXMgc3RyaW5nLiBGdW5jdGlvbmFsaXR5IG1heSBiZSBjb21wcm9taXNlZC4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIG51bWJlcic7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gJ211c3QgYmUgb2YgdHlwZSBvYmplY3QnO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGFycmF5Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5kZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3VucmVjb2duaXNlZCc7XG4gIH1cbiAgZm9yIChsZXQgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9uLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9IG5vdCBwYXJ0IG9mICR7b3B0aW9ucy50b1N0cmluZygpfWA7XG59O1xuXG52YWxpZGF0b3IucHJvbWlzZSA9IEI7XG52YWxpZGF0b3IucHJldHRpZnkgPSBmdW5jdGlvbiBwcmV0dGlmeSh2YWwpIHtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbmV4cG9ydCB7ZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cywgdmFsaWRhdG9yfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBRVhDLGlCQUZKOztBQU1BLElBQUlDLDRCQUE0QixHQUFHO0VBQ2pDQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBREU7SUFFWkMsUUFBUSxFQUFFO0VBRkUsQ0FEbUI7RUFLakNDLFVBQVUsRUFBRTtJQUNWRCxRQUFRLEVBQUU7RUFEQSxDQUxxQjtFQVFqQ0UsZUFBZSxFQUFFO0lBQ2ZGLFFBQVEsRUFBRTtFQURLLENBUmdCO0VBV2pDRyxpQkFBaUIsRUFBRTtJQUNqQkMsUUFBUSxFQUFFO0VBRE8sQ0FYYztFQWNqQ0MsY0FBYyxFQUFFO0lBQ2RMLFFBQVEsRUFBRTtFQURJLENBZGlCO0VBaUJqQ00sVUFBVSxFQUFFO0lBQ1ZDLFNBQVMsRUFBRTtFQURELENBakJxQjtFQW9CakNDLElBQUksRUFBRTtJQUNKUixRQUFRLEVBQUU7RUFETixDQXBCMkI7RUF1QmpDUyxXQUFXLEVBQUU7SUFDWEMsU0FBUyxFQUFFLENBQUMsV0FBRCxFQUFjLFVBQWQ7RUFEQSxDQXZCb0I7RUEwQmpDQyxXQUFXLEVBQUU7SUFDWEosU0FBUyxFQUFFO0VBREEsQ0ExQm9CO0VBNkJqQ0ssT0FBTyxFQUFFO0lBQ1BMLFNBQVMsRUFBRTtFQURKLENBN0J3QjtFQWdDakNNLFNBQVMsRUFBRTtJQUNU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
@@ -5,21 +5,21 @@ export const MAX_SETTINGS_SIZE: number;
5
5
  export default DeviceSettings;
6
6
  export type IDeviceSettings<T> = import('@appium/types').DeviceSettings<T>;
7
7
  /**
8
- * @template {Record<string,unknown>} T
8
+ * @template T
9
9
  * @implements {IDeviceSettings<T>}
10
10
  */
11
- export class DeviceSettings<T extends Record<string, unknown>> implements IDeviceSettings<T> {
11
+ export class DeviceSettings<T> implements IDeviceSettings<T> {
12
12
  /**
13
13
  * Creates a _shallow copy_ of the `defaultSettings` parameter!
14
- * @param {T} [defaultSettings]
14
+ * @param {Record<string,T>} [defaultSettings]
15
15
  * @param {import('@appium/types').SettingsUpdateListener<T>} [onSettingsUpdate]
16
16
  */
17
- constructor(defaultSettings?: T | undefined, onSettingsUpdate?: import("@appium/types").SettingsUpdateListener<T> | undefined);
17
+ constructor(defaultSettings?: Record<string, T> | undefined, onSettingsUpdate?: import("@appium/types").SettingsUpdateListener<T> | undefined);
18
18
  /**
19
19
  * @protected
20
- * @type {T}
20
+ * @type {Record<string,T>}
21
21
  */
22
- protected _settings: T;
22
+ protected _settings: Record<string, T>;
23
23
  /**
24
24
  * @protected
25
25
  * @type {import('@appium/types').SettingsUpdateListener<T>}
@@ -27,9 +27,9 @@ export class DeviceSettings<T extends Record<string, unknown>> implements IDevic
27
27
  protected _onSettingsUpdate: import('@appium/types').SettingsUpdateListener<T>;
28
28
  /**
29
29
  * calls updateSettings from implementing driver every time a setting is changed.
30
- * @param {T} newSettings
30
+ * @param {Record<string,T>} newSettings
31
31
  */
32
- update(newSettings: T): Promise<void>;
33
- getSettings(): T;
32
+ update(newSettings: Record<string, T>): Promise<void>;
33
+ getSettings(): Record<string, T>;
34
34
  }
35
35
  //# sourceMappingURL=device-settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device-settings.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/device-settings.js"],"names":[],"mappings":"AAOA;;GAEG;AACH,uCAAkD;;iCAoErC,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;AAlEtD;;;GAGG;AACH,0FAFgC,CAAC;IAgB/B;;;;OAIG;IACH,+HAGC;IApBD;;;OAGG;IACH,qBAFU,CAAC,CAED;IAEV;;;OAGG;IACH,6BAFU,OAAO,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAEzC;IAYlB;;;OAGG;IACH,oBAFW,CAAC,iBAwBX;IAED,iBAEC;CACF"}
1
+ {"version":3,"file":"device-settings.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/device-settings.js"],"names":[],"mappings":"AAKA;;GAEG;AACH,uCAAkD;;iCAuErC,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;AArEtD;;;GAGG;AACH,0DAFgC,CAAC;IAe/B;;;;OAIG;IACH,+IAGC;IApBD;;;OAGG;IACH,qBAFU,OAAO,MAAM,EAAC,CAAC,CAAC,CAEhB;IAEV;;;OAGG;IACH,6BAFU,OAAO,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAEzC;IAYlB;;;OAGG;IACH,oBAFW,OAAO,MAAM,EAAC,CAAC,CAAC,iBA4B1B;IAED,iCAEC;CACF"}
@@ -24,10 +24,10 @@ class DeviceSettings {
24
24
  _settings;
25
25
  _onSettingsUpdate;
26
26
 
27
- constructor(defaultSettings, onSettingsUpdate) {
28
- this._settings = { ...(defaultSettings !== null && defaultSettings !== void 0 ? defaultSettings : {})
27
+ constructor(defaultSettings = {}, onSettingsUpdate = async () => {}) {
28
+ this._settings = { ...defaultSettings
29
29
  };
30
- this._onSettingsUpdate = onSettingsUpdate !== null && onSettingsUpdate !== void 0 ? onSettingsUpdate : async () => {};
30
+ this._onSettingsUpdate = onSettingsUpdate;
31
31
  }
32
32
 
33
33
  async update(newSettings) {
@@ -66,4 +66,4 @@ class DeviceSettings {
66
66
  exports.DeviceSettings = DeviceSettings;
67
67
  var _default = DeviceSettings;
68
68
  exports.default = _default;
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJsb2ciLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBub2RlLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sL2Vycm9ycyc7XG5cbi8qKlxuICogTWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYSBnaXZlbiBkcml2ZXIncyBzZXR0aW5ncyBvYmplY3QgKHdoaWNoIGlzIGludGVybmFsIHRvIHtAbGlua2NvZGUgRHJpdmVyU2V0dGluZ3N9KS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9TRVRUSU5HU19TSVpFID0gMjAgKiAxMDI0ICogMTAyNDsgLy8gMjAgTUJcblxuLyoqXG4gKiBAdGVtcGxhdGUge1JlY29yZDxzdHJpbmcsdW5rbm93bj59IFRcbiAqIEBpbXBsZW1lbnRzIHtJRGV2aWNlU2V0dGluZ3M8VD59XG4gKi9cbmNsYXNzIERldmljZVNldHRpbmdzIHtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAdHlwZSB7VH1cbiAgICovXG4gIF9zZXR0aW5ncztcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2V0dGluZ3NVcGRhdGVMaXN0ZW5lcjxUPn1cbiAgICovXG4gIF9vblNldHRpbmdzVXBkYXRlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgX3NoYWxsb3cgY29weV8gb2YgdGhlIGBkZWZhdWx0U2V0dGluZ3NgIHBhcmFtZXRlciFcbiAgICogQHBhcmFtIHtUfSBbZGVmYXVsdFNldHRpbmdzXVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59IFtvblNldHRpbmdzVXBkYXRlXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRlZmF1bHRTZXR0aW5ncywgb25TZXR0aW5nc1VwZGF0ZSkge1xuICAgIHRoaXMuX3NldHRpbmdzID0gLyoqIEB0eXBlIHtUfSAqLyh7Li4uKGRlZmF1bHRTZXR0aW5ncyA/PyB7fSl9KTtcbiAgICB0aGlzLl9vblNldHRpbmdzVXBkYXRlID0gb25TZXR0aW5nc1VwZGF0ZSA/PyAoYXN5bmMgKCkgPT4ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxzIHVwZGF0ZVNldHRpbmdzIGZyb20gaW1wbGVtZW50aW5nIGRyaXZlciBldmVyeSB0aW1lIGEgc2V0dGluZyBpcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge1R9IG5ld1NldHRpbmdzXG4gICAqL1xuICBhc3luYyB1cGRhdGUgKG5ld1NldHRpbmdzKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobmV3U2V0dGluZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBTZXR0aW5ncyB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHZhbGlkIEpTT04uIEdvdCBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkobmV3U2V0dGluZ3MpfSBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuZ2V0T2JqZWN0U2l6ZSh7Li4udGhpcy5fc2V0dGluZ3MsIC4uLm5ld1NldHRpbmdzfSkgPj0gTUFYX1NFVFRJTkdTX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYE5ldyBzZXR0aW5ncyBjYW5ub3QgYmUgYXBwbGllZCwgYmVjYXVzZSB0aGUgb3ZlcmFsbCBgICtcbiAgICAgICAgYG9iamVjdCBzaXplIGV4Y2VlZHMgdGhlIGFsbG93ZWQgbGltaXQgb2YgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKE1BWF9TRVRUSU5HU19TSVpFKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IC8qKiBAdHlwZSB7KGtleW9mIFQgJiBzdHJpbmcpW119ICovKF8ua2V5cyhuZXdTZXR0aW5ncykpO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuX3NldHRpbmdzW3Byb3BdKSkge1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NbcHJvcF0gPT09IG5ld1NldHRpbmdzW3Byb3BdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBUaGUgdmFsdWUgb2YgJyR7cHJvcH0nIHNldHRpbmcgZGlkIG5vdCBjaGFuZ2UuIFNraXBwaW5nIHRoZSB1cGRhdGUgZm9yIGl0YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuX29uU2V0dGluZ3NVcGRhdGUocHJvcCwgbmV3U2V0dGluZ3NbcHJvcF0sIHRoaXMuX3NldHRpbmdzW3Byb3BdKTtcbiAgICAgIHRoaXMuX3NldHRpbmdzW3Byb3BdID0gbmV3U2V0dGluZ3NbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgZ2V0U2V0dGluZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXZpY2VTZXR0aW5ncztcbmV4cG9ydCB7IERldmljZVNldHRpbmdzIH07XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5EZXZpY2VTZXR0aW5nczxUPn0gSURldmljZVNldHRpbmdzXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLTyxNQUFNQSxpQkFBaUIsR0FBRyxLQUFLLElBQUwsR0FBWSxJQUF0Qzs7O0FBTVAsTUFBTUMsY0FBTixDQUFxQjtFQU1uQkMsU0FBUztFQU1UQyxpQkFBaUI7O0VBT2pCQyxXQUFXLENBQUVDLGVBQUYsRUFBbUJDLGdCQUFuQixFQUFxQztJQUM5QyxLQUFLSixTQUFMLEdBQWtDLEVBQUMsSUFBSUcsZUFBSixhQUFJQSxlQUFKLGNBQUlBLGVBQUosR0FBdUIsRUFBdkI7SUFBRCxDQUFsQztJQUNBLEtBQUtGLGlCQUFMLEdBQXlCRyxnQkFBekIsYUFBeUJBLGdCQUF6QixjQUF5QkEsZ0JBQXpCLEdBQThDLFlBQVksQ0FBRSxDQUE1RDtFQUNEOztFQU1XLE1BQU5DLE1BQU0sQ0FBRUMsV0FBRixFQUFlO0lBQ3pCLElBQUksQ0FBQ0MsZ0JBQUVDLGFBQUYsQ0FBZ0JGLFdBQWhCLENBQUwsRUFBbUM7TUFDakMsTUFBTSxJQUFJRyxlQUFPQyxvQkFBWCxDQUFpQyx3REFBRCxHQUNuQyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sV0FBZixDQUE0QixVQUQzQixDQUFOO0lBRUQ7O0lBRUQsSUFBSU8sY0FBS0MsYUFBTCxDQUFtQixFQUFDLEdBQUcsS0FBS2QsU0FBVDtNQUFvQixHQUFHTTtJQUF2QixDQUFuQixLQUEyRFIsaUJBQS9ELEVBQWtGO01BQ2hGLE1BQU0sSUFBSVcsZUFBT0Msb0JBQVgsQ0FBaUMsc0RBQUQsR0FDbkMsNENBQTJDSyxjQUFLQyxvQkFBTCxDQUEwQmxCLGlCQUExQixDQUE2QyxFQURyRixDQUFOO0lBRUQ7O0lBRUQsTUFBTW1CLEtBQUssR0FBdUNWLGdCQUFFVyxJQUFGLENBQU9aLFdBQVAsQ0FBbEQ7O0lBQ0EsS0FBSyxNQUFNYSxJQUFYLElBQW1CRixLQUFuQixFQUEwQjtNQUN4QixJQUFJLENBQUNWLGdCQUFFYSxXQUFGLENBQWMsS0FBS3BCLFNBQUwsQ0FBZW1CLElBQWYsQ0FBZCxDQUFMLEVBQTBDO1FBQ3hDLElBQUksS0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsTUFBeUJiLFdBQVcsQ0FBQ2EsSUFBRCxDQUF4QyxFQUFnRDtVQUM5Q0UsZ0JBQUlDLEtBQUosQ0FBVyxpQkFBZ0JILElBQUssc0RBQWhDOztVQUNBO1FBQ0Q7TUFDRjs7TUFDRCxNQUFNLEtBQUtsQixpQkFBTCxDQUF1QmtCLElBQXZCLEVBQTZCYixXQUFXLENBQUNhLElBQUQsQ0FBeEMsRUFBZ0QsS0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsQ0FBaEQsQ0FBTjtNQUNBLEtBQUtuQixTQUFMLENBQWVtQixJQUFmLElBQXVCYixXQUFXLENBQUNhLElBQUQsQ0FBbEM7SUFDRDtFQUNGOztFQUVESSxXQUFXLEdBQUk7SUFDYixPQUFPLEtBQUt2QixTQUFaO0VBQ0Q7O0FBdERrQjs7O2VBeURORCxjIn0=
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJsb2ciLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7bm9kZSwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG4vKipcbiAqIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZ2l2ZW4gZHJpdmVyJ3Mgc2V0dGluZ3Mgb2JqZWN0ICh3aGljaCBpcyBpbnRlcm5hbCB0byB7QGxpbmtjb2RlIERyaXZlclNldHRpbmdzfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0VUVElOR1NfU0laRSA9IDIwICogMTAyNCAqIDEwMjQ7IC8vIDIwIE1CXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBpbXBsZW1lbnRzIHtJRGV2aWNlU2V0dGluZ3M8VD59XG4gKi9cbmNsYXNzIERldmljZVNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsVD59XG4gICAqL1xuICBfc2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59XG4gICAqL1xuICBfb25TZXR0aW5nc1VwZGF0ZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIF9zaGFsbG93IGNvcHlfIG9mIHRoZSBgZGVmYXVsdFNldHRpbmdzYCBwYXJhbWV0ZXIhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZyxUPn0gW2RlZmF1bHRTZXR0aW5nc11cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXR0aW5nc1VwZGF0ZUxpc3RlbmVyPFQ+fSBbb25TZXR0aW5nc1VwZGF0ZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRTZXR0aW5ncyA9IHt9LCBvblNldHRpbmdzVXBkYXRlID0gYXN5bmMgKCkgPT4ge30pIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHsuLi5kZWZhdWx0U2V0dGluZ3N9O1xuICAgIHRoaXMuX29uU2V0dGluZ3NVcGRhdGUgPSBvblNldHRpbmdzVXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxzIHVwZGF0ZVNldHRpbmdzIGZyb20gaW1wbGVtZW50aW5nIGRyaXZlciBldmVyeSB0aW1lIGEgc2V0dGluZyBpcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsVD59IG5ld1NldHRpbmdzXG4gICAqL1xuICBhc3luYyB1cGRhdGUobmV3U2V0dGluZ3MpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChuZXdTZXR0aW5ncykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBTZXR0aW5ncyB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHZhbGlkIEpTT04uIEdvdCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShuZXdTZXR0aW5ncyl9IGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmdldE9iamVjdFNpemUoey4uLnRoaXMuX3NldHRpbmdzLCAuLi5uZXdTZXR0aW5nc30pID49IE1BWF9TRVRUSU5HU19TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgTmV3IHNldHRpbmdzIGNhbm5vdCBiZSBhcHBsaWVkLCBiZWNhdXNlIHRoZSBvdmVyYWxsIGAgK1xuICAgICAgICAgIGBvYmplY3Qgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0IG9mICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhNQVhfU0VUVElOR1NfU0laRSl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IC8qKiBAdHlwZSB7KGtleW9mIFQgJiBzdHJpbmcpW119ICovIChfLmtleXMobmV3U2V0dGluZ3MpKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLl9zZXR0aW5nc1twcm9wXSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzW3Byb3BdID09PSBuZXdTZXR0aW5nc1twcm9wXSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZhbHVlIG9mICcke3Byb3B9JyBzZXR0aW5nIGRpZCBub3QgY2hhbmdlLiBTa2lwcGluZyB0aGUgdXBkYXRlIGZvciBpdGApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLl9vblNldHRpbmdzVXBkYXRlKHByb3AsIG5ld1NldHRpbmdzW3Byb3BdLCB0aGlzLl9zZXR0aW5nc1twcm9wXSk7XG4gICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIGdldFNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXZpY2VTZXR0aW5ncztcbmV4cG9ydCB7RGV2aWNlU2V0dGluZ3N9O1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGV2aWNlU2V0dGluZ3M8VD59IElEZXZpY2VTZXR0aW5nc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsaUJBQWlCLEdBQUcsS0FBSyxJQUFMLEdBQVksSUFBdEM7OztBQU1QLE1BQU1DLGNBQU4sQ0FBcUI7RUFLbkJDLFNBQVM7RUFNVEMsaUJBQWlCOztFQU9qQkMsV0FBVyxDQUFDQyxlQUFlLEdBQUcsRUFBbkIsRUFBdUJDLGdCQUFnQixHQUFHLFlBQVksQ0FBRSxDQUF4RCxFQUEwRDtJQUNuRSxLQUFLSixTQUFMLEdBQWlCLEVBQUMsR0FBR0c7SUFBSixDQUFqQjtJQUNBLEtBQUtGLGlCQUFMLEdBQXlCRyxnQkFBekI7RUFDRDs7RUFNVyxNQUFOQyxNQUFNLENBQUNDLFdBQUQsRUFBYztJQUN4QixJQUFJLENBQUNDLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztNQUNqQyxNQUFNLElBQUlHLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCx3REFBRCxHQUNHLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTixXQUFmLENBQTRCLFVBRjdCLENBQU47SUFJRDs7SUFFRCxJQUFJTyxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsRUFBQyxHQUFHLEtBQUtkLFNBQVQ7TUFBb0IsR0FBR007SUFBdkIsQ0FBbkIsS0FBMkRSLGlCQUEvRCxFQUFrRjtNQUNoRixNQUFNLElBQUlXLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxzREFBRCxHQUNHLDRDQUEyQ0ssYUFBQSxDQUFLQyxvQkFBTCxDQUEwQmxCLGlCQUExQixDQUE2QyxFQUZ2RixDQUFOO0lBSUQ7O0lBRUQsTUFBTW1CLEtBQUssR0FBd0NWLGVBQUEsQ0FBRVcsSUFBRixDQUFPWixXQUFQLENBQW5EOztJQUNBLEtBQUssTUFBTWEsSUFBWCxJQUFtQkYsS0FBbkIsRUFBMEI7TUFDeEIsSUFBSSxDQUFDVixlQUFBLENBQUVhLFdBQUYsQ0FBYyxLQUFLcEIsU0FBTCxDQUFlbUIsSUFBZixDQUFkLENBQUwsRUFBMEM7UUFDeEMsSUFBSSxLQUFLbkIsU0FBTCxDQUFlbUIsSUFBZixNQUF5QmIsV0FBVyxDQUFDYSxJQUFELENBQXhDLEVBQWdEO1VBQzlDRSxlQUFBLENBQUlDLEtBQUosQ0FBVyxpQkFBZ0JILElBQUssc0RBQWhDOztVQUNBO1FBQ0Q7TUFDRjs7TUFDRCxNQUFNLEtBQUtsQixpQkFBTCxDQUF1QmtCLElBQXZCLEVBQTZCYixXQUFXLENBQUNhLElBQUQsQ0FBeEMsRUFBZ0QsS0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsQ0FBaEQsQ0FBTjtNQUNBLEtBQUtuQixTQUFMLENBQWVtQixJQUFmLElBQXVCYixXQUFXLENBQUNhLElBQUQsQ0FBbEM7SUFDRDtFQUNGOztFQUVESSxXQUFXLEdBQUc7SUFDWixPQUFPLEtBQUt2QixTQUFaO0VBQ0Q7O0FBekRrQjs7O2VBNERORCxjIn0=
@@ -2,18 +2,19 @@
2
2
  * @implements {SessionHandler}
3
3
  */
4
4
  export class BaseDriverCore extends DriverCore implements SessionHandler {
5
+ _constraints: import("@appium/types").Constraints;
5
6
  /** @type {Record<string,any>|undefined} */
6
7
  cliArgs: Record<string, any> | undefined;
7
8
  /**
8
- * @param {string} cmd
9
- * @param {...any[]} args
10
- * @returns {Promise<any>}
11
- */
12
- executeCommand(cmd: string, ...args: any[][]): Promise<any>;
9
+ * @param {string} cmd
10
+ * @param {...any} args
11
+ * @returns {Promise<any>}
12
+ */
13
+ executeCommand(cmd: string, ...args: any[]): Promise<any>;
13
14
  /**
14
- *
15
- * @param {Error} err
16
- */
15
+ *
16
+ * @param {Error} err
17
+ */
17
18
  startUnexpectedShutdown(err?: Error): Promise<void>;
18
19
  startNewCommandTimeout(): Promise<void>;
19
20
  /**
@@ -31,25 +32,40 @@ export class BaseDriverCore extends DriverCore implements SessionHandler {
31
32
  reset(): Promise<void>;
32
33
  resetOnUnexpectedShutdown: (() => void) | undefined;
33
34
  /**
34
- *
35
- * Historically the first two arguments were reserved for JSONWP capabilities.
36
- * Appium 2 has dropped the support of these, so now we only accept capability
37
- * objects in W3C format and thus allow any of the three arguments to represent
38
- * the latter.
39
- * @param {W3CCapabilities} w3cCapabilities1
40
- * @param {W3CCapabilities} [w3cCapabilities2]
41
- * @param {W3CCapabilities} [w3cCapabilities]
42
- * @param {DriverData[]} [driverData]
43
- * @returns {Promise<[string,object]>}
44
- */
35
+ *
36
+ * Historically the first two arguments were reserved for JSONWP capabilities.
37
+ * Appium 2 has dropped the support of these, so now we only accept capability
38
+ * objects in W3C format and thus allow any of the three arguments to represent
39
+ * the latter.
40
+ * @param {W3CCapabilities} w3cCapabilities1
41
+ * @param {W3CCapabilities} [w3cCapabilities2]
42
+ * @param {W3CCapabilities} [w3cCapabilities]
43
+ * @param {DriverData[]} [driverData]
44
+ * @returns {Promise<[string,object]>}
45
+ */
45
46
  createSession(w3cCapabilities1: W3CCapabilities, w3cCapabilities2?: W3CCapabilities | undefined, w3cCapabilities?: W3CCapabilities | undefined, driverData?: import("@appium/types").DriverData[] | undefined): Promise<[string, object]>;
46
47
  /**
47
- *
48
- * @param {string} [sessionId]
49
- * @param {DriverData[]} [driverData]
50
- * @returns {Promise<void>}
51
- */
48
+ *
49
+ * @param {string} [sessionId]
50
+ * @param {DriverData[]} [driverData]
51
+ * @returns {Promise<void>}
52
+ */
52
53
  deleteSession(sessionId?: string | undefined, driverData?: import("@appium/types").DriverData[] | undefined): Promise<void>;
54
+ /**
55
+ *
56
+ * @param {Capabilities} caps
57
+ */
58
+ logExtraCaps(caps: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
59
+ [x: string]: any;
60
+ }>): void;
61
+ /**
62
+ *
63
+ * @param {Capabilities} caps
64
+ * @returns {boolean}
65
+ */
66
+ validateDesiredCaps(caps: Capabilities): boolean;
67
+ set desiredCapConstraints(arg: import("@appium/types").Constraints);
68
+ get desiredCapConstraints(): import("@appium/types").Constraints;
53
69
  }
54
70
  export default BaseDriver;
55
71
  export type HTTPMethod = import('@appium/types').HTTPMethod;
@@ -62,22 +78,11 @@ export type UpdateServerCallback = (app: import('express').Express, httpServer:
62
78
  /**
63
79
  * This is used to extend {@linkcode BaseDriverCore } by the mixins and also external drivers.
64
80
  */
65
- export type BaseDriverBase<Proto = {}, Static = {}> = import('@appium/types').Class<BaseDriverCore & Proto, BaseDriverStatic & Static>;
66
- /**
67
- * Static properties of `BaseDriver` and optional properties for subclasses.
68
- */
69
- export type BaseDriverStatic<T extends import("@appium/types").ExternalDriver = import("@appium/types").ExternalDriver> = {
70
- baseVersion: string;
71
- updateServer?: UpdateServerCallback | undefined;
72
- newMethodMap?: import("@appium/types").MethodMap<T> | undefined;
73
- };
81
+ export type BaseDriverBase<Proto = {}, Static = {}> = import('@appium/types').Class<BaseDriverCore & Proto, import('@appium/types').DriverStatic & Static>;
74
82
  export type SessionHandler = import('@appium/types').SessionHandler<[string, object], void>;
75
83
  import { DriverCore } from "./core";
76
- declare const BaseDriver_base: import("./commands/session").SessionBase;
77
84
  /**
78
- * This ensures that all of the mixins correctly implement the interface described in {@linkcode Driver}.
79
- * @implements {Driver}
85
+ * @type {import('@appium/types').DriverClass<Driver>}
80
86
  */
81
- export class BaseDriver extends BaseDriver_base implements Driver {
82
- }
87
+ export const BaseDriver: import('@appium/types').DriverClass<Driver>;
83
88
  //# sourceMappingURL=driver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/driver.js"],"names":[],"mappings":"AA0BA;;GAEG;AACH;IAEE,2CAA2C;IAC3C,SADW,OAAO,MAAM,EAAC,GAAG,CAAC,GAAC,SAAS,CAC/B;IAMR;;;;QAII;IACJ,oBAJY,MAAM,WACF,GAAG,EAAE,KACP,QAAQ,GAAG,CAAC,CA2EzB;IAED;;;QAGI;IACJ,8BAFY,KAAK,iBAgBhB;IAED,wCAmBC;IAED;;;;;;OAMG;IACH,qBALW,OAAO,eAAe,EAAE,YAAY,QACpC,MAAM,QACN,MAAM,QACN,MAAM,QAOhB;IAJC,yDAAoB;IACpB,+BAAsB;IACtB,+BAAsB;IACtB,+BAAsB;IAOxB,uBA+BC;IAfC,oDAAyC;IAiB3C;;;;;;;;;;;SAWK;IACL,gCANa,eAAe,iKAIb,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAmGtC;IAED;;;;;QAKI;IACJ,8GAFc,QAAQ,IAAI,CAAC,CAc1B;CACF;;yBAWY,OAAO,eAAe,EAAE,UAAU;qBAClC,OAAO,eAAe,EAAE,MAAM;6BAC9B,OAAO,eAAe,EAAE,cAAc;2BACtC,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yCAMpC,OAAO,SAAS,EAAE,OAAO,cACzB,OAAO,eAAe,EAAE,YAAY,KAClC,OAAO,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC;;;;sDAOpC,OAAO,eAAe,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,EAAC,gBAAgB,GAAG,MAAM,CAAC;;;;;iBAO9E,MAAM;;;;6BAMP,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,IAAI,CAAC;;;AA1C1E;;;GAGG;AACH;CAAiE"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/driver.js"],"names":[],"mappings":"AA0BA;;GAEG;AACH;IACE,kDAAyD;IAEzD,2CAA2C;IAC3C,SADW,OAAO,MAAM,EAAC,GAAG,CAAC,GAAC,SAAS,CAC/B;IAMR;;;;OAIG;IACH,oBAJW,MAAM,WACF,GAAG,KACL,QAAQ,GAAG,CAAC,CAsExB;IAED;;;OAGG;IACH,8BAFW,KAAK,iBAcf;IAED,wCAmBC;IAED;;;;;;OAMG;IACH,qBALW,OAAO,eAAe,EAAE,YAAY,QACpC,MAAM,QACN,MAAM,QACN,MAAM,QAOhB;IAJC,yDAAoB;IACpB,+BAAsB;IACtB,+BAAsB;IACtB,+BAAsB;IAOxB,uBA+BC;IAfC,oDAAyC;IAiB3C;;;;;;;;;;;OAWG;IACH,gCANW,eAAe,iKAIb,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAoFpC;IAED;;;;;OAKG;IACH,8GAFa,QAAQ,IAAI,CAAC,CAczB;IAED;;;OAGG;IACH;;cAUC;IAED;;;;OAIG;IACH,0BAHW,YAAY,GACV,OAAO,CAqBnB;IAGD,oEAWC;IAED,iEAEC;CACF;;yBAiBY,OAAO,eAAe,EAAE,UAAU;qBAClC,OAAO,eAAe,EAAE,MAAM;6BAC9B,OAAO,eAAe,EAAE,cAAc;2BACtC,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yCAKpC,OAAO,SAAS,EAAE,OAAO,cACzB,OAAO,eAAe,EAAE,YAAY,KAClC,OAAO,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC;;;;sDAOpC,OAAO,eAAe,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,EAAC,OAAO,eAAe,EAAE,YAAY,GAAG,MAAM,CAAC;6BAInG,OAAO,eAAe,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC,IAAI,CAAC;;AAhC1E;;GAEG;AACH,yBAFU,OAAO,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAEtB"}
@@ -9,6 +9,8 @@ exports.default = exports.BaseDriverCore = exports.BaseDriver = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
+ var _capabilities = require("./capabilities");
13
+
12
14
  var _core = require("./core");
13
15
 
14
16
  var _support = require("@appium/support");
@@ -17,16 +19,16 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
17
19
 
18
20
  var _lodash = _interopRequireDefault(require("lodash"));
19
21
 
20
- var _capabilities = require("../helpers/capabilities");
22
+ var _capabilities2 = require("../helpers/capabilities");
21
23
 
22
24
  var _protocol = require("../protocol");
23
25
 
24
- var _capabilities2 = require("./capabilities");
25
-
26
26
  var _commands = require("./commands");
27
27
 
28
28
  var _helpers = _interopRequireDefault(require("./helpers"));
29
29
 
30
+ var _desiredCaps = require("./desired-caps");
31
+
30
32
  const EVENT_SESSION_INIT = 'newSessionRequested';
31
33
  const EVENT_SESSION_START = 'newSessionStarted';
32
34
  const EVENT_SESSION_QUIT_START = 'quitSessionRequested';
@@ -34,6 +36,7 @@ const EVENT_SESSION_QUIT_DONE = 'quitSessionFinished';
34
36
  const ON_UNEXPECTED_SHUTDOWN_EVENT = 'onUnexpectedShutdown';
35
37
 
36
38
  class BaseDriverCore extends _core.DriverCore {
39
+ _constraints = _lodash.default.cloneDeep(_desiredCaps.desiredCapabilityConstraints);
37
40
  cliArgs;
38
41
 
39
42
  async executeCommand(cmd, ...args) {
@@ -155,7 +158,7 @@ class BaseDriverCore extends _core.DriverCore {
155
158
 
156
159
  this.log.debug();
157
160
 
158
- const originalCaps = _lodash.default.cloneDeep([w3cCapabilities, w3cCapabilities1, w3cCapabilities2].find(_capabilities.isW3cCaps));
161
+ const originalCaps = _lodash.default.cloneDeep([w3cCapabilities, w3cCapabilities1, w3cCapabilities2].find(_capabilities2.isW3cCaps));
159
162
 
160
163
  if (!originalCaps) {
161
164
  throw new _protocol.errors.SessionNotCreatedError('Appium only supports W3C-style capability objects. ' + 'Your client is sending an older capabilities format. Please update your client library.');
@@ -167,14 +170,14 @@ class BaseDriverCore extends _core.DriverCore {
167
170
  let caps;
168
171
 
169
172
  try {
170
- caps = (0, _capabilities2.processCapabilities)(originalCaps, this.desiredCapConstraints, this.shouldValidateCaps);
173
+ caps = (0, _capabilities.processCapabilities)(originalCaps, this.desiredCapConstraints, this.shouldValidateCaps);
171
174
 
172
- if (caps[_capabilities2.APPIUM_OPTS_CAP]) {
173
- this.log.debug(`Found ${_capabilities2.PREFIXED_APPIUM_OPTS_CAP} capability present; will promote items inside to caps`);
174
- caps = (0, _capabilities2.promoteAppiumOptions)(caps);
175
+ if (caps[_capabilities.APPIUM_OPTS_CAP]) {
176
+ this.log.debug(`Found ${_capabilities.PREFIXED_APPIUM_OPTS_CAP} capability present; will promote items inside to caps`);
177
+ caps = (0, _capabilities.promoteAppiumOptions)(caps);
175
178
  }
176
179
 
177
- caps = (0, _capabilities.fixCaps)(caps, this.desiredCapConstraints, this.log);
180
+ caps = (0, _capabilities2.fixCaps)(caps, this.desiredCapConstraints, this.log);
178
181
  } catch (e) {
179
182
  throw new _protocol.errors.SessionNotCreatedError(e.message);
180
183
  }
@@ -226,13 +229,57 @@ class BaseDriverCore extends _core.DriverCore {
226
229
  this._log.prefix = _helpers.default.generateDriverLogPrefix(this);
227
230
  }
228
231
 
232
+ logExtraCaps(caps) {
233
+ let extraCaps = _lodash.default.difference(_lodash.default.keys(caps), _lodash.default.keys(this._constraints));
234
+
235
+ if (extraCaps.length) {
236
+ this.log.warn(`The following capabilities were provided, but are not ` + `recognized by Appium:`);
237
+
238
+ for (const cap of extraCaps) {
239
+ this.log.warn(` ${cap}`);
240
+ }
241
+ }
242
+ }
243
+
244
+ validateDesiredCaps(caps) {
245
+ if (!this.shouldValidateCaps) {
246
+ return true;
247
+ }
248
+
249
+ try {
250
+ (0, _capabilities.validateCaps)(caps, this._constraints);
251
+ } catch (e) {
252
+ this.log.errorAndThrow(new _protocol.errors.SessionNotCreatedError(`The desiredCapabilities object was not valid for the ` + `following reason(s): ${e.message}`));
253
+ }
254
+
255
+ this.logExtraCaps(caps);
256
+ return true;
257
+ }
258
+
259
+ set desiredCapConstraints(constraints) {
260
+ this._constraints = Object.assign(this._constraints, constraints);
261
+
262
+ for (const [, value] of _lodash.default.toPairs(this._constraints)) {
263
+ if (value && value.presence === true) {
264
+ value.presence = {
265
+ allowEmpty: false
266
+ };
267
+ }
268
+ }
269
+ }
270
+
271
+ get desiredCapConstraints() {
272
+ return this._constraints;
273
+ }
274
+
229
275
  }
230
276
 
231
277
  exports.BaseDriverCore = BaseDriverCore;
232
278
 
233
- class BaseDriver extends (0, _commands.createBaseDriverClass)(BaseDriverCore) {}
279
+ class _BaseDriver extends (0, _commands.createBaseDriverClass)(BaseDriverCore) {}
234
280
 
281
+ const BaseDriver = _BaseDriver;
235
282
  exports.BaseDriver = BaseDriver;
236
283
  var _default = BaseDriver;
237
284
  exports.default = _default;
238
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFVkVOVF9TRVNTSU9OX0lOSVQiLCJFVkVOVF9TRVNTSU9OX1NUQVJUIiwiRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUIiwiRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUiLCJPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UIiwiQmFzZURyaXZlckNvcmUiLCJEcml2ZXJDb3JlIiwiY2xpQXJncyIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwiYXJncyIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJwcm90b2NvbCIsImxvZ0V2ZW50IiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJzaHV0ZG93blVuZXhwZWN0ZWRseSIsImVycm9ycyIsIk5vU3VjaERyaXZlckVycm9yIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyIiwiY29tbWFuZEV4ZWN1dG9yIiwiQiIsInJhY2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXZlbnRFbWl0dGVyIiwib24iLCJmaW5hbGx5IiwicmVtb3ZlTGlzdGVuZXIiLCJyZXMiLCJpc0NvbW1hbmRzUXVldWVFbmFibGVkIiwiY29tbWFuZHNRdWV1ZUd1YXJkIiwiYWNxdWlyZSIsIkJhc2VEcml2ZXIiLCJuYW1lIiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsImVuZFRpbWUiLCJfZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJwdXNoIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJlcnIiLCJlbWl0Iiwic2Vzc2lvbklkIiwiZGVsZXRlU2Vzc2lvbiIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJub0NvbW1hbmRUaW1lciIsInNldFRpbWVvdXQiLCJsb2ciLCJ3YXJuIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3IiLCJhc3NpZ25TZXJ2ZXIiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInBhdGgiLCJzZXJ2ZXJIb3N0Iiwic2VydmVyUG9ydCIsInNlcnZlclBhdGgiLCJyZXNldCIsImRlYnVnIiwiY3VycmVudENvbmZpZyIsInByb3BlcnR5IiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsImNyZWF0ZVNlc3Npb24iLCJvcmlnaW5hbENhcHMiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwidzNjQ2FwYWJpbGl0aWVzMSIsInczY0NhcGFiaWxpdGllczIiLCJ3M2NDYXBhYmlsaXRpZXMiLCJkcml2ZXJEYXRhIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImNsb25lRGVlcCIsImZpbmQiLCJpc1czY0NhcHMiLCJzZXRQcm90b2NvbFczQyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYXBzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiQVBQSVVNX09QVFNfQ0FQIiwiUFJFRklYRURfQVBQSVVNX09QVFNfQ0FQIiwiZSIsIm1lc3NhZ2UiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwidXRpbCIsInV1aWRWNCIsIm9wdHMiLCJpbml0aWFsT3B0cyIsIk9iamVjdCIsImFzc2lnbiIsIm5vUmVzZXQiLCJmdWxsUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiYXBwIiwidHJpbSIsImlzVW5kZWZpbmVkIiwibmV3Q29tbWFuZFRpbWVvdXQiLCJfbG9nIiwicHJlZml4IiwiaGVscGVycyIsImdlbmVyYXRlRHJpdmVyTG9nUHJlZml4IiwiaW5mbyIsImlzQnVzeSIsImtleXMiLCJxdWV1ZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvYmFzZWRyaXZlci9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG4vKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBEcml2ZXJDb3JlIH0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZpeENhcHMsIGlzVzNjQ2FwcyB9IGZyb20gJy4uL2hlbHBlcnMvY2FwYWJpbGl0aWVzJztcbmltcG9ydCB7IERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIGRldGVybWluZVByb3RvY29sLCBlcnJvcnMgfSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQge1xuICBBUFBJVU1fT1BUU19DQVAsXG4gIFBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCxcbiAgcHJvY2Vzc0NhcGFiaWxpdGllcyxcbiAgcHJvbW90ZUFwcGl1bU9wdGlvbnNcbn0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IHsgY3JlYXRlQmFzZURyaXZlckNsYXNzIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuXG5jb25zdCBFVkVOVF9TRVNTSU9OX0lOSVQgPSAnbmV3U2Vzc2lvblJlcXVlc3RlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1NUQVJUID0gJ25ld1Nlc3Npb25TdGFydGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fUVVJVF9TVEFSVCA9ICdxdWl0U2Vzc2lvblJlcXVlc3RlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSA9ICdxdWl0U2Vzc2lvbkZpbmlzaGVkJztcbmNvbnN0IE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQgPSAnb25VbmV4cGVjdGVkU2h1dGRvd24nO1xuXG5cbi8qKlxuICogQGltcGxlbWVudHMge1Nlc3Npb25IYW5kbGVyfVxuICovXG5leHBvcnQgY2xhc3MgQmFzZURyaXZlckNvcmUgZXh0ZW5kcyBEcml2ZXJDb3JlIHtcblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsYW55Pnx1bmRlZmluZWR9ICovXG4gIGNsaUFyZ3M7XG5cbiAgLy8gVGhpcyBpcyB0aGUgbWFpbiBjb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIuIEl0IHdyYXBzIGNvbW1hbmRcbiAgLy8gZXhlY3V0aW9uIHdpdGggdGltZW91dCBsb2dpYywgY2hlY2tpbmcgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc2Vzc2lvbixcbiAgLy8gYW5kIGVuc3VyaW5nIHRoYXQgd2UgZXhlY3V0ZSBjb21tYW5kcyBvbmUgYXQgYSB0aW1lLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWRcbiAgLy8gYnkgTUpTT05XUCdzIGV4cHJlc3Mgcm91dGVyLlxuICAvKipcbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICAqIEBwYXJhbSAgey4uLmFueVtdfSBhcmdzXG4gICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjbWQsIC4uLmFyZ3MpIHtcbiAgICAvLyBnZXQgc3RhcnQgdGltZSBmb3IgdGhpcyBjb21tYW5kLCBhbmQgbG9nIGluIHNwZWNpYWwgY2FzZXNcbiAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChjbWQgPT09ICdjcmVhdGVTZXNzaW9uJykge1xuICAgICAgLy8gSWYgY3JlYXRpbmcgYSBzZXNzaW9uIGRldGVybWluZSBpZiBXM0Mgb3IgTUpTT05XUCBwcm90b2NvbCB3YXMgcmVxdWVzdGVkIGFuZCByZW1lbWJlciB0aGUgY2hvaWNlXG4gICAgICB0aGlzLnByb3RvY29sID0gZGV0ZXJtaW5lUHJvdG9jb2woYXJncyk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fSU5JVCk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYWQgYSBjb21tYW5kIHRpbWVyIHJ1bm5pbmcsIGNsZWFyIGl0IG5vdyB0aGF0IHdlJ3JlIHN0YXJ0aW5nXG4gICAgLy8gYSBuZXcgY29tbWFuZCBhbmQgc28gZG9uJ3Qgd2FudCB0byB0aW1lIG91dFxuICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgaWYgKHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoXG4gICAgICAgICAgJ1RoZSBkcml2ZXIgd2FzIHVuZXhwZWN0ZWRseSBzaHV0IGRvd24hJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzIGNvbW1hbmQsIGl0IG11c3Qgbm90IGJlIGltcGxlbWVudGVkXG4gICAgaWYgKCF0aGlzW2NtZF0pIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIGxldCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcjtcbiAgICBjb25zdCBjb21tYW5kRXhlY3V0b3IgPSBhc3luYyAoKSA9PlxuICAgICAgYXdhaXQgQi5yYWNlKFtcbiAgICAgICAgdGhpc1tjbWRdKC4uLmFyZ3MpLFxuICAgICAgICBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSByZWplY3Q7XG4gICAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIub24oXG4gICAgICAgICAgICAgIE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsXG4gICAgICAgICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgXSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcikge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoXG4gICAgICAgICAgICAgIE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsXG4gICAgICAgICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBjb25zdCByZXMgPSB0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWRcbiAgICAgID8gYXdhaXQgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQuYWNxdWlyZShCYXNlRHJpdmVyLm5hbWUsIGNvbW1hbmRFeGVjdXRvcilcbiAgICAgIDogYXdhaXQgY29tbWFuZEV4ZWN1dG9yKCk7XG5cbiAgICAvLyBpZiB3ZSBoYXZlIHNldCBhIG5ldyBjb21tYW5kIHRpbWVvdXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgc3RhcnQgYVxuICAgIC8vIHRpbWVyIG9uY2Ugd2UndmUgZmluaXNoZWQgZXhlY3V0aW5nIHRoaXMgY29tbWFuZC4gSWYgd2UgZG9uJ3QgY2xlYXJcbiAgICAvLyB0aGUgdGltZXIgKHdoaWNoIGlzIGRvbmUgd2hlbiBhIG5ldyBjb21tYW5kIGNvbWVzIGluKSwgd2Ugd2lsbCB0cmlnZ2VyXG4gICAgLy8gYXV0b21hdGljIHNlc3Npb24gZGVsZXRpb24gaW4gdGhpcy5vbkNvbW1hbmRUaW1lb3V0LiBPZiBjb3Vyc2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgdGhlIHRpbWVyIHdoZW4gdGhlIHVzZXIgaXMgc2h1dHRpbmcgZG93biB0aGUgc2Vzc2lvblxuICAgIC8vIGludGVudGlvbmFsbHlcbiAgICBpZiAodGhpcy5pc0NvbW1hbmRzUXVldWVFbmFibGVkICYmIGNtZCAhPT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgLy8gcmVzZXR0aW5nIGV4aXN0aW5nIHRpbWVvdXRcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnROZXdDb21tYW5kVGltZW91dCgpO1xuICAgIH1cblxuICAgIC8vIGxvZyB0aW1pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb21tYW5kXG4gICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5LmNvbW1hbmRzLnB1c2goe2NtZCwgc3RhcnRUaW1lLCBlbmRUaW1lfSk7XG4gICAgaWYgKGNtZCA9PT0gJ2NyZWF0ZVNlc3Npb24nKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fU1RBUlQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fUVVJVF9ET05FKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAgKlxuICAgICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gICAgKi9cbiAgYXN5bmMgc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24gKFxuICAgIGVyciA9IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoXG4gICAgICAgICdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScsXG4gICAgKSxcbiAgKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBlcnIpOyAvLyBhbGxvdyBvdGhlcnMgdG8gbGlzdGVuIGZvciB0aGlzXG4gICAgdGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25JZCAhPT0gbnVsbCkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnROZXdDb21tYW5kVGltZW91dCAoKSB7XG4gICAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByb2d1ZSB0aW1lb3V0c1xuICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgLy8gaWYgY29tbWFuZCB0aW1lb3V0IGlzIDAsIGl0IGlzIGRpc2FibGVkXG4gICAgaWYgKCF0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgYFNodXR0aW5nIGRvd24gYmVjYXVzZSB3ZSB3YWl0ZWQgYCArXG4gICAgICAgICAgYCR7dGhpcy5uZXdDb21tYW5kVGltZW91dE1zIC8gMTAwMC4wfSBzZWNvbmRzIGZvciBhIGNvbW1hbmRgLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgIGBOZXcgQ29tbWFuZCBUaW1lb3V0IG9mIGAgK1xuICAgICAgICBgJHt0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgLyAxMDAwLjB9IHNlY29uZHMgYCArXG4gICAgICAgIGBleHBpcmVkLiBUcnkgY3VzdG9taXppbmcgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIGAgK1xuICAgICAgICBgJ25ld0NvbW1hbmRUaW1lb3V0JyBkZXNpcmVkIGNhcGFiaWxpdHlgO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gICAgfSwgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcn0gc2VydmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3N0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBhc3NpZ25TZXJ2ZXIgKHNlcnZlciwgaG9zdCwgcG9ydCwgcGF0aCkge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIHRoaXMuc2VydmVySG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5zZXJ2ZXJQb3J0ID0gcG9ydDtcbiAgICB0aGlzLnNlcnZlclBhdGggPSBwYXRoO1xuICB9XG5cbiAgLypcbiAgICAqIFJlc3RhcnQgdGhlIHNlc3Npb24gd2l0aCB0aGUgb3JpZ2luYWwgY2FwcyxcbiAgICAqIHByZXNlcnZpbmcgdGhlIHRpbWVvdXQgY29uZmlnLlxuICAgICovXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUmVzZXR0aW5nIGFwcCBtaWQtc2Vzc2lvbicpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdSdW5uaW5nIGdlbmVyaWMgZnVsbCByZXNldCcpO1xuXG4gICAgLy8gcHJlc2VydmluZyBzdGF0ZVxuICAgIGxldCBjdXJyZW50Q29uZmlnID0ge307XG4gICAgZm9yIChsZXQgcHJvcGVydHkgb2YgW1xuICAgICAgJ2ltcGxpY2l0V2FpdE1zJyxcbiAgICAgICduZXdDb21tYW5kVGltZW91dE1zJyxcbiAgICAgICdzZXNzaW9uSWQnLFxuICAgICAgJ3Jlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24nLFxuICAgIF0pIHtcbiAgICAgIGN1cnJlbnRDb25maWdbcHJvcGVydHldID0gdGhpc1twcm9wZXJ0eV07XG4gICAgfVxuXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIHByZXNlcnZlIHRoZSB1bmV4cGVjdGVkIHNodXRkb3duLCBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBjYW5jZWxsZWQgZHVyaW5nIHJlc2V0LlxuICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25JZCAhPT0gbnVsbCkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ1Jlc3RhcnRpbmcgYXBwJyk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb24odGhpcy5vcmlnaW5hbENhcHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcmVzdG9yZSBzdGF0ZS5cbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY3VycmVudENvbmZpZykpIHtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAgICpcbiAgICAgKiBIaXN0b3JpY2FsbHkgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgd2VyZSByZXNlcnZlZCBmb3IgSlNPTldQIGNhcGFiaWxpdGllcy5cbiAgICAgKiBBcHBpdW0gMiBoYXMgZHJvcHBlZCB0aGUgc3VwcG9ydCBvZiB0aGVzZSwgc28gbm93IHdlIG9ubHkgYWNjZXB0IGNhcGFiaWxpdHlcbiAgICAgKiBvYmplY3RzIGluIFczQyBmb3JtYXQgYW5kIHRodXMgYWxsb3cgYW55IG9mIHRoZSB0aHJlZSBhcmd1bWVudHMgdG8gcmVwcmVzZW50XG4gICAgICogdGhlIGxhdHRlci5cbiAgICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gdzNjQ2FwYWJpbGl0aWVzMVxuICAgICAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSBbdzNjQ2FwYWJpbGl0aWVzMl1cbiAgICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gW3czY0NhcGFiaWxpdGllc11cbiAgICAgKiBAcGFyYW0ge0RyaXZlckRhdGFbXX0gW2RyaXZlckRhdGFdXG4gICAgICogQHJldHVybnMge1Byb21pc2U8W3N0cmluZyxvYmplY3RdPn1cbiAgICAgKi9cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoXG4gICAgdzNjQ2FwYWJpbGl0aWVzMSxcbiAgICB3M2NDYXBhYmlsaXRpZXMyLFxuICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICBkcml2ZXJEYXRhLFxuICApIHtcbiAgICBpZiAodGhpcy5zZXNzaW9uSWQgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiB3aGlsZSBvbmUgaXMgaW4gcHJvZ3Jlc3MnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5kZWJ1ZygpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxDYXBzID0gXy5jbG9uZURlZXAoW1xuICAgICAgdzNjQ2FwYWJpbGl0aWVzLFxuICAgICAgdzNjQ2FwYWJpbGl0aWVzMSxcbiAgICAgIHczY0NhcGFiaWxpdGllczIsXG4gICAgXS5maW5kKGlzVzNjQ2FwcykpO1xuICAgIGlmICghb3JpZ2luYWxDYXBzKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoXG4gICAgICAgICAgICdBcHBpdW0gb25seSBzdXBwb3J0cyBXM0Mtc3R5bGUgY2FwYWJpbGl0eSBvYmplY3RzLiAnICtcbiAgICAgICAgICAgICAnWW91ciBjbGllbnQgaXMgc2VuZGluZyBhbiBvbGRlciBjYXBhYmlsaXRpZXMgZm9ybWF0LiBQbGVhc2UgdXBkYXRlIHlvdXIgY2xpZW50IGxpYnJhcnkuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQcm90b2NvbFczQygpO1xuXG4gICAgdGhpcy5vcmlnaW5hbENhcHMgPSBfLmNsb25lRGVlcChvcmlnaW5hbENhcHMpO1xuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nIHNlc3Npb24gd2l0aCBXM0MgY2FwYWJpbGl0aWVzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBvcmlnaW5hbENhcHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGxldCBjYXBzO1xuICAgIHRyeSB7XG4gICAgICBjYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyhcbiAgICAgICAgICAgb3JpZ2luYWxDYXBzLFxuICAgICAgICAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyxcbiAgICAgICAgICAgdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMsXG4gICAgICApO1xuICAgICAgaWYgKGNhcHNbQVBQSVVNX09QVFNfQ0FQXSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgICAgICAgICBgRm91bmQgJHtQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVB9IGNhcGFiaWxpdHkgcHJlc2VudDsgd2lsbCBwcm9tb3RlIGl0ZW1zIGluc2lkZSB0byBjYXBzYCxcbiAgICAgICAgKTtcbiAgICAgICAgY2FwcyA9IHByb21vdGVBcHBpdW1PcHRpb25zKGNhcHMpO1xuICAgICAgfVxuICAgICAgY2FwcyA9IGZpeENhcHMoY2FwcywgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsIHRoaXMubG9nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5jYXBzID0gY2FwcztcbiAgICB0aGlzLm9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLmluaXRpYWxPcHRzKTtcblxuICAgIC8vIG1lcmdlIGNhcHMgb250byBvcHRzIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgd2hhdCdzIHdoZXJlXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAvLyBkZWFsIHdpdGggcmVzZXRzXG4gICAgLy8gc29tZSBwZW9wbGUgbGlrZSB0byBkbyB3ZWlyZCB0aGluZ3MgYnkgc2V0dGluZyBub1Jlc2V0IGFuZCBmdWxsUmVzZXRcbiAgICAvLyBib3RoIHRvIHRydWUsIGJ1dCB0aGlzIGlzIG1pc2d1aWRlZCBhbmQgc3RyYW5nZSwgc28gZXJyb3IgaGVyZSBpbnN0ZWFkXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ICYmIHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgXCJUaGUgJ25vUmVzZXQnIGFuZCAnZnVsbFJlc2V0JyBjYXBhYmlsaXRpZXMgYXJlIG11dHVhbGx5IFwiICtcbiAgICAgICAgICAgICAnZXhjbHVzaXZlIGFuZCBzaG91bGQgbm90IGJvdGggYmUgc2V0IHRvIHRydWUuIFlvdSAnICtcbiAgICAgICAgICAgICBcInByb2JhYmx5IG1lYW50IHRvIGp1c3QgdXNlICdmdWxsUmVzZXQnIG9uIGl0cyBvd25cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCA9IHRoaXMub3B0cy5mYXN0UmVzZXQgfHwgdGhpcy5vcHRzLm5vUmVzZXQ7XG5cbiAgICAvLyBQcmV2ZW50cyBlbXB0eSBzdHJpbmcgY2FwcyBzbyB3ZSBkb24ndCBuZWVkIHRvIHRlc3QgaXQgZXZlcnl3aGVyZVxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmFwcCA9PT0gJ3N0cmluZycgJiYgdGhpcy5vcHRzLmFwcC50cmltKCkgPT09ICcnKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRzLmFwcDtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5jYXBzLm5ld0NvbW1hbmRUaW1lb3V0KSkge1xuICAgICAgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zID0gdGhpcy5jYXBzLm5ld0NvbW1hbmRUaW1lb3V0ICogMTAwMDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2cucHJlZml4ID0gaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBTZXNzaW9uIGNyZWF0ZWQgd2l0aCBzZXNzaW9uIGlkOiAke3RoaXMuc2Vzc2lvbklkfWApO1xuXG4gICAgcmV0dXJuIFt0aGlzLnNlc3Npb25JZCwgY2Fwc107XG4gIH1cblxuICAvKipcbiAgICAqXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICAqIEBwYXJhbSB7RHJpdmVyRGF0YVtdfSBbZHJpdmVyRGF0YV1cbiAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKHNlc3Npb25JZCwgZHJpdmVyRGF0YSkge1xuICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICAgIGlmICh0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgJiYgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQuaXNCdXN5KCkpIHtcbiAgICAgIC8vIHNpbXBsZSBoYWNrIHRvIHJlbGVhc2UgcGVuZGluZyBjb21tYW5kcyBpZiB0aGV5IGV4aXN0XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBfLmtleXModGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQucXVldWVzKSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuY29tbWFuZHNRdWV1ZUd1YXJkLnF1ZXVlc1trZXldID0gW107XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB0aGlzLl9sb2cucHJlZml4ID0gaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBvZiB0aGUgbWl4aW5zIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBkZXNjcmliZWQgaW4ge0BsaW5rY29kZSBEcml2ZXJ9LlxuICogQGltcGxlbWVudHMge0RyaXZlcn1cbiAqL1xuY2xhc3MgQmFzZURyaXZlciBleHRlbmRzIGNyZWF0ZUJhc2VEcml2ZXJDbGFzcyhCYXNlRHJpdmVyQ29yZSkge31cbmV4cG9ydCB7IEJhc2VEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEJhc2VEcml2ZXI7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IEhUVFBNZXRob2RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4dGVybmFsRHJpdmVyfSBFeHRlcm5hbERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuVzNDQ2FwYWJpbGl0aWVzfSBXM0NDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJEYXRhfSBEcml2ZXJEYXRhXG4gKi9cblxuXG4vKipcbiAqIEBjYWxsYmFjayBVcGRhdGVTZXJ2ZXJDYWxsYmFja1xuICogQHBhcmFtIHtpbXBvcnQoJ2V4cHJlc3MnKS5FeHByZXNzfSBhcHAgLSBFeHByZXNzIGFwcFxuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1TZXJ2ZXJ9IGh0dHBTZXJ2ZXIgLSBIVFRQIHNlcnZlclxuICogQHJldHVybnMge2ltcG9ydCgndHlwZS1mZXN0JykuUHJvbWlzYWJsZTx2b2lkPn1cbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCB0byBleHRlbmQge0BsaW5rY29kZSBCYXNlRHJpdmVyQ29yZX0gYnkgdGhlIG1peGlucyBhbmQgYWxzbyBleHRlcm5hbCBkcml2ZXJzLlxuICogQHRlbXBsYXRlIFtQcm90bz17fV1cbiAqIEB0ZW1wbGF0ZSBbU3RhdGljPXt9XVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNsYXNzPEJhc2VEcml2ZXJDb3JlICYgUHJvdG8sQmFzZURyaXZlclN0YXRpYyAmIFN0YXRpYz59IEJhc2VEcml2ZXJCYXNlXG4gKi9cblxuLyoqXG4gKiBTdGF0aWMgcHJvcGVydGllcyBvZiBgQmFzZURyaXZlcmAgYW5kIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIHN1YmNsYXNzZXMuXG4gKiBAdGVtcGxhdGUge0V4dGVybmFsRHJpdmVyfSBbVD1FeHRlcm5hbERyaXZlcl1cbiAqIEB0eXBlZGVmIEJhc2VEcml2ZXJTdGF0aWNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNlVmVyc2lvblxuICogQHByb3BlcnR5IHtVcGRhdGVTZXJ2ZXJDYWxsYmFja30gW3VwZGF0ZVNlcnZlcl1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTWV0aG9kTWFwPFQ+fSBbbmV3TWV0aG9kTWFwXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNlc3Npb25IYW5kbGVyPFtzdHJpbmcsIG9iamVjdF0sdm9pZD59IFNlc3Npb25IYW5kbGVyXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQTs7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
285
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFVkVOVF9TRVNTSU9OX0lOSVQiLCJFVkVOVF9TRVNTSU9OX1NUQVJUIiwiRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUIiwiRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUiLCJPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UIiwiQmFzZURyaXZlckNvcmUiLCJEcml2ZXJDb3JlIiwiX2NvbnN0cmFpbnRzIiwiXyIsImNsb25lRGVlcCIsImRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMiLCJjbGlBcmdzIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJhcmdzIiwic3RhcnRUaW1lIiwiRGF0ZSIsIm5vdyIsInByb3RvY29sIiwiZGV0ZXJtaW5lUHJvdG9jb2wiLCJsb2dFdmVudCIsIkRFTEVURV9TRVNTSU9OX0NPTU1BTkQiLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0Iiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJlcnJvcnMiLCJOb1N1Y2hEcml2ZXJFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJ1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciIsImNvbW1hbmRFeGVjdXRvciIsIkIiLCJyYWNlIiwicmVzb2x2ZSIsInJlamVjdCIsImV2ZW50RW1pdHRlciIsIm9uIiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwicmVzIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImNvbW1hbmRzUXVldWVHdWFyZCIsImFjcXVpcmUiLCJCYXNlRHJpdmVyIiwibmFtZSIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJlbmRUaW1lIiwiX2V2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwicHVzaCIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiZW1pdCIsInNlc3Npb25JZCIsImRlbGV0ZVNlc3Npb24iLCJuZXdDb21tYW5kVGltZW91dE1zIiwibm9Db21tYW5kVGltZXIiLCJzZXRUaW1lb3V0IiwibG9nIiwid2FybiIsImVycm9yTWVzc2FnZSIsIkVycm9yIiwiYXNzaWduU2VydmVyIiwic2VydmVyIiwiaG9zdCIsInBvcnQiLCJwYXRoIiwic2VydmVySG9zdCIsInNlcnZlclBvcnQiLCJzZXJ2ZXJQYXRoIiwicmVzZXQiLCJkZWJ1ZyIsImN1cnJlbnRDb25maWciLCJwcm9wZXJ0eSIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJjcmVhdGVTZXNzaW9uIiwib3JpZ2luYWxDYXBzIiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwidzNjQ2FwYWJpbGl0aWVzMSIsInczY0NhcGFiaWxpdGllczIiLCJ3M2NDYXBhYmlsaXRpZXMiLCJkcml2ZXJEYXRhIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImZpbmQiLCJpc1czY0NhcHMiLCJzZXRQcm90b2NvbFczQyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYXBzIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsIkFQUElVTV9PUFRTX0NBUCIsIlBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCIsInByb21vdGVBcHBpdW1PcHRpb25zIiwiZml4Q2FwcyIsImUiLCJtZXNzYWdlIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInV0aWwiLCJ1dWlkVjQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwiZmFzdFJlc2V0Iiwic2tpcFVuaW5zdGFsbCIsImFwcCIsInRyaW0iLCJpc1VuZGVmaW5lZCIsIm5ld0NvbW1hbmRUaW1lb3V0IiwiX2xvZyIsInByZWZpeCIsImhlbHBlcnMiLCJnZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCIsImluZm8iLCJpc0J1c3kiLCJrZXlzIiwicXVldWVzIiwibG9nRXh0cmFDYXBzIiwiZXh0cmFDYXBzIiwiZGlmZmVyZW5jZSIsImxlbmd0aCIsImNhcCIsInZhbGlkYXRlQ2FwcyIsImVycm9yQW5kVGhyb3ciLCJjb25zdHJhaW50cyIsInByZXNlbmNlIiwiYWxsb3dFbXB0eSIsIl9CYXNlRHJpdmVyIiwiY3JlYXRlQmFzZURyaXZlckNsYXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZHJpdmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmltcG9ydCB7XG4gIHZhbGlkYXRlQ2FwcyxcbiAgQVBQSVVNX09QVFNfQ0FQLFxuICBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAsXG4gIHByb2Nlc3NDYXBhYmlsaXRpZXMsXG4gIHByb21vdGVBcHBpdW1PcHRpb25zLFxufSBmcm9tICcuL2NhcGFiaWxpdGllcyc7XG5pbXBvcnQge0RyaXZlckNvcmV9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQge3V0aWx9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtmaXhDYXBzLCBpc1czY0NhcHN9IGZyb20gJy4uL2hlbHBlcnMvY2FwYWJpbGl0aWVzJztcbmltcG9ydCB7REVMRVRFX1NFU1NJT05fQ09NTUFORCwgZGV0ZXJtaW5lUHJvdG9jb2wsIGVycm9yc30gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IHtjcmVhdGVCYXNlRHJpdmVyQ2xhc3N9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7ZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50c30gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuXG5jb25zdCBFVkVOVF9TRVNTSU9OX0lOSVQgPSAnbmV3U2Vzc2lvblJlcXVlc3RlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1NUQVJUID0gJ25ld1Nlc3Npb25TdGFydGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fUVVJVF9TVEFSVCA9ICdxdWl0U2Vzc2lvblJlcXVlc3RlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSA9ICdxdWl0U2Vzc2lvbkZpbmlzaGVkJztcbmNvbnN0IE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQgPSAnb25VbmV4cGVjdGVkU2h1dGRvd24nO1xuXG4vKipcbiAqIEBpbXBsZW1lbnRzIHtTZXNzaW9uSGFuZGxlcn1cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VEcml2ZXJDb3JlIGV4dGVuZHMgRHJpdmVyQ29yZSB7XG4gIF9jb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMpO1xuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxhbnk+fHVuZGVmaW5lZH0gKi9cbiAgY2xpQXJncztcblxuICAvLyBUaGlzIGlzIHRoZSBtYWluIGNvbW1hbmQgaGFuZGxlciBmb3IgdGhlIGRyaXZlci4gSXQgd3JhcHMgY29tbWFuZFxuICAvLyBleGVjdXRpb24gd2l0aCB0aW1lb3V0IGxvZ2ljLCBjaGVja2luZyB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzZXNzaW9uLFxuICAvLyBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBleGVjdXRlIGNvbW1hbmRzIG9uZSBhdCBhIHRpbWUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZFxuICAvLyBieSBNSlNPTldQJ3MgZXhwcmVzcyByb3V0ZXIuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY21kXG4gICAqIEBwYXJhbSAgey4uLmFueX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gZ2V0IHN0YXJ0IHRpbWUgZm9yIHRoaXMgY29tbWFuZCwgYW5kIGxvZyBpbiBzcGVjaWFsIGNhc2VzXG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIC8vIElmIGNyZWF0aW5nIGEgc2Vzc2lvbiBkZXRlcm1pbmUgaWYgVzNDIG9yIE1KU09OV1AgcHJvdG9jb2wgd2FzIHJlcXVlc3RlZCBhbmQgcmVtZW1iZXIgdGhlIGNob2ljZVxuICAgICAgdGhpcy5wcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKGFyZ3MpO1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX0lOSVQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fUVVJVF9TVEFSVCk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGFkIGEgY29tbWFuZCB0aW1lciBydW5uaW5nLCBjbGVhciBpdCBub3cgdGhhdCB3ZSdyZSBzdGFydGluZ1xuICAgIC8vIGEgbmV3IGNvbW1hbmQgYW5kIHNvIGRvbid0IHdhbnQgdG8gdGltZSBvdXRcbiAgICBhd2FpdCB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgIGlmICh0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBjb21tYW5kLCBpdCBtdXN0IG5vdCBiZSBpbXBsZW1lbnRlZFxuICAgIGlmICghdGhpc1tjbWRdKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBsZXQgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXI7XG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dG9yID0gYXN5bmMgKCkgPT5cbiAgICAgIGF3YWl0IEIucmFjZShbXG4gICAgICAgIHRoaXNbY21kXSguLi5hcmdzKSxcbiAgICAgICAgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyID0gcmVqZWN0O1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgICAgfSksXG4gICAgICBdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lcihcbiAgICAgICAgICAgIE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsXG4gICAgICAgICAgICB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBjb25zdCByZXMgPSB0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWRcbiAgICAgID8gYXdhaXQgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQuYWNxdWlyZShCYXNlRHJpdmVyLm5hbWUsIGNvbW1hbmRFeGVjdXRvcilcbiAgICAgIDogYXdhaXQgY29tbWFuZEV4ZWN1dG9yKCk7XG5cbiAgICAvLyBpZiB3ZSBoYXZlIHNldCBhIG5ldyBjb21tYW5kIHRpbWVvdXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgc3RhcnQgYVxuICAgIC8vIHRpbWVyIG9uY2Ugd2UndmUgZmluaXNoZWQgZXhlY3V0aW5nIHRoaXMgY29tbWFuZC4gSWYgd2UgZG9uJ3QgY2xlYXJcbiAgICAvLyB0aGUgdGltZXIgKHdoaWNoIGlzIGRvbmUgd2hlbiBhIG5ldyBjb21tYW5kIGNvbWVzIGluKSwgd2Ugd2lsbCB0cmlnZ2VyXG4gICAgLy8gYXV0b21hdGljIHNlc3Npb24gZGVsZXRpb24gaW4gdGhpcy5vbkNvbW1hbmRUaW1lb3V0LiBPZiBjb3Vyc2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgdGhlIHRpbWVyIHdoZW4gdGhlIHVzZXIgaXMgc2h1dHRpbmcgZG93biB0aGUgc2Vzc2lvblxuICAgIC8vIGludGVudGlvbmFsbHlcbiAgICBpZiAodGhpcy5pc0NvbW1hbmRzUXVldWVFbmFibGVkICYmIGNtZCAhPT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgLy8gcmVzZXR0aW5nIGV4aXN0aW5nIHRpbWVvdXRcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnROZXdDb21tYW5kVGltZW91dCgpO1xuICAgIH1cblxuICAgIC8vIGxvZyB0aW1pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb21tYW5kXG4gICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5LmNvbW1hbmRzLnB1c2goe2NtZCwgc3RhcnRUaW1lLCBlbmRUaW1lfSk7XG4gICAgaWYgKGNtZCA9PT0gJ2NyZWF0ZVNlc3Npb24nKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fU1RBUlQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fUVVJVF9ET05FKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICAgKi9cbiAgYXN5bmMgc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oXG4gICAgZXJyID0gbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKVxuICApIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIGVycik7IC8vIGFsbG93IG90aGVycyB0byBsaXN0ZW4gZm9yIHRoaXNcbiAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkICE9PSBudWxsKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydE5ld0NvbW1hbmRUaW1lb3V0KCkge1xuICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcm9ndWUgdGltZW91dHNcbiAgICBhd2FpdCB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgIC8vIGlmIGNvbW1hbmQgdGltZW91dCBpcyAwLCBpdCBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5uZXdDb21tYW5kVGltZW91dE1zKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMubG9nLndhcm4oXG4gICAgICAgIGBTaHV0dGluZyBkb3duIGJlY2F1c2Ugd2Ugd2FpdGVkIGAgK1xuICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBmb3IgYSBjb21tYW5kYFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgIGBOZXcgQ29tbWFuZCBUaW1lb3V0IG9mIGAgK1xuICAgICAgICBgJHt0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgLyAxMDAwLjB9IHNlY29uZHMgYCArXG4gICAgICAgIGBleHBpcmVkLiBUcnkgY3VzdG9taXppbmcgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIGAgK1xuICAgICAgICBgJ25ld0NvbW1hbmRUaW1lb3V0JyBkZXNpcmVkIGNhcGFiaWxpdHlgO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gICAgfSwgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcn0gc2VydmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3N0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBhc3NpZ25TZXJ2ZXIoc2VydmVyLCBob3N0LCBwb3J0LCBwYXRoKSB7XG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgdGhpcy5zZXJ2ZXJIb3N0ID0gaG9zdDtcbiAgICB0aGlzLnNlcnZlclBvcnQgPSBwb3J0O1xuICAgIHRoaXMuc2VydmVyUGF0aCA9IHBhdGg7XG4gIH1cblxuICAvKlxuICAgKiBSZXN0YXJ0IHRoZSBzZXNzaW9uIHdpdGggdGhlIG9yaWdpbmFsIGNhcHMsXG4gICAqIHByZXNlcnZpbmcgdGhlIHRpbWVvdXQgY29uZmlnLlxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1Jlc2V0dGluZyBhcHAgbWlkLXNlc3Npb24nKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUnVubmluZyBnZW5lcmljIGZ1bGwgcmVzZXQnKTtcblxuICAgIC8vIHByZXNlcnZpbmcgc3RhdGVcbiAgICBsZXQgY3VycmVudENvbmZpZyA9IHt9O1xuICAgIGZvciAobGV0IHByb3BlcnR5IG9mIFtcbiAgICAgICdpbXBsaWNpdFdhaXRNcycsXG4gICAgICAnbmV3Q29tbWFuZFRpbWVvdXRNcycsXG4gICAgICAnc2Vzc2lvbklkJyxcbiAgICAgICdyZXNldE9uVW5leHBlY3RlZFNodXRkb3duJyxcbiAgICBdKSB7XG4gICAgICBjdXJyZW50Q29uZmlnW3Byb3BlcnR5XSA9IHRoaXNbcHJvcGVydHldO1xuICAgIH1cblxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgY2FuY2VsbGVkIGR1cmluZyByZXNldC5cbiAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zZXNzaW9uSWQgIT09IG51bGwpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdSZXN0YXJ0aW5nIGFwcCcpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTZXNzaW9uKHRoaXMub3JpZ2luYWxDYXBzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gYWx3YXlzIHJlc3RvcmUgc3RhdGUuXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGN1cnJlbnRDb25maWcpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBIaXN0b3JpY2FsbHkgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgd2VyZSByZXNlcnZlZCBmb3IgSlNPTldQIGNhcGFiaWxpdGllcy5cbiAgICogQXBwaXVtIDIgaGFzIGRyb3BwZWQgdGhlIHN1cHBvcnQgb2YgdGhlc2UsIHNvIG5vdyB3ZSBvbmx5IGFjY2VwdCBjYXBhYmlsaXR5XG4gICAqIG9iamVjdHMgaW4gVzNDIGZvcm1hdCBhbmQgdGh1cyBhbGxvdyBhbnkgb2YgdGhlIHRocmVlIGFyZ3VtZW50cyB0byByZXByZXNlbnRcbiAgICogdGhlIGxhdHRlci5cbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllczFcbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IFt3M2NDYXBhYmlsaXRpZXMyXVxuICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gW3czY0NhcGFiaWxpdGllc11cbiAgICogQHBhcmFtIHtEcml2ZXJEYXRhW119IFtkcml2ZXJEYXRhXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxbc3RyaW5nLG9iamVjdF0+fVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbih3M2NDYXBhYmlsaXRpZXMxLCB3M2NDYXBhYmlsaXRpZXMyLCB3M2NDYXBhYmlsaXRpZXMsIGRyaXZlckRhdGEpIHtcbiAgICBpZiAodGhpcy5zZXNzaW9uSWQgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiB3aGlsZSBvbmUgaXMgaW4gcHJvZ3Jlc3MnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmRlYnVnKCk7XG5cbiAgICBjb25zdCBvcmlnaW5hbENhcHMgPSBfLmNsb25lRGVlcChcbiAgICAgIFt3M2NDYXBhYmlsaXRpZXMsIHczY0NhcGFiaWxpdGllczEsIHczY0NhcGFiaWxpdGllczJdLmZpbmQoaXNXM2NDYXBzKVxuICAgICk7XG4gICAgaWYgKCFvcmlnaW5hbENhcHMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgJ0FwcGl1bSBvbmx5IHN1cHBvcnRzIFczQy1zdHlsZSBjYXBhYmlsaXR5IG9iamVjdHMuICcgK1xuICAgICAgICAgICdZb3VyIGNsaWVudCBpcyBzZW5kaW5nIGFuIG9sZGVyIGNhcGFiaWxpdGllcyBmb3JtYXQuIFBsZWFzZSB1cGRhdGUgeW91ciBjbGllbnQgbGlicmFyeS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UHJvdG9jb2xXM0MoKTtcblxuICAgIHRoaXMub3JpZ2luYWxDYXBzID0gXy5jbG9uZURlZXAob3JpZ2luYWxDYXBzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgIGBDcmVhdGluZyBzZXNzaW9uIHdpdGggVzNDIGNhcGFiaWxpdGllczogJHtKU09OLnN0cmluZ2lmeShvcmlnaW5hbENhcHMsIG51bGwsIDIpfWBcbiAgICApO1xuXG4gICAgbGV0IGNhcHM7XG4gICAgdHJ5IHtcbiAgICAgIGNhcHMgPSBwcm9jZXNzQ2FwYWJpbGl0aWVzKG9yaWdpbmFsQ2FwcywgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsIHRoaXMuc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICAgIGlmIChjYXBzW0FQUElVTV9PUFRTX0NBUF0pIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgYEZvdW5kICR7UFJFRklYRURfQVBQSVVNX09QVFNfQ0FQfSBjYXBhYmlsaXR5IHByZXNlbnQ7IHdpbGwgcHJvbW90ZSBpdGVtcyBpbnNpZGUgdG8gY2Fwc2BcbiAgICAgICAgKTtcbiAgICAgICAgY2FwcyA9IHByb21vdGVBcHBpdW1PcHRpb25zKGNhcHMpO1xuICAgICAgfVxuICAgICAgY2FwcyA9IGZpeENhcHMoY2FwcywgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsIHRoaXMubG9nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy5jYXBzID0gY2FwcztcbiAgICB0aGlzLm9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLmluaXRpYWxPcHRzKTtcblxuICAgIC8vIG1lcmdlIGNhcHMgb250byBvcHRzIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgd2hhdCdzIHdoZXJlXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAvLyBkZWFsIHdpdGggcmVzZXRzXG4gICAgLy8gc29tZSBwZW9wbGUgbGlrZSB0byBkbyB3ZWlyZCB0aGluZ3MgYnkgc2V0dGluZyBub1Jlc2V0IGFuZCBmdWxsUmVzZXRcbiAgICAvLyBib3RoIHRvIHRydWUsIGJ1dCB0aGlzIGlzIG1pc2d1aWRlZCBhbmQgc3RyYW5nZSwgc28gZXJyb3IgaGVyZSBpbnN0ZWFkXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ICYmIHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgJ25vUmVzZXQnIGFuZCAnZnVsbFJlc2V0JyBjYXBhYmlsaXRpZXMgYXJlIG11dHVhbGx5IFwiICtcbiAgICAgICAgICAnZXhjbHVzaXZlIGFuZCBzaG91bGQgbm90IGJvdGggYmUgc2V0IHRvIHRydWUuIFlvdSAnICtcbiAgICAgICAgICBcInByb2JhYmx5IG1lYW50IHRvIGp1c3QgdXNlICdmdWxsUmVzZXQnIG9uIGl0cyBvd25cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgIC8vIFByZXZlbnRzIGVtcHR5IHN0cmluZyBjYXBzIHNvIHdlIGRvbid0IG5lZWQgdG8gdGVzdCBpdCBldmVyeXdoZXJlXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuYXBwID09PSAnc3RyaW5nJyAmJiB0aGlzLm9wdHMuYXBwLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdHMuYXBwO1xuICAgIH1cblxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMubmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSB0aGlzLmNhcHMubmV3Q29tbWFuZFRpbWVvdXQgKiAxMDAwO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZy5wcmVmaXggPSBoZWxwZXJzLmdlbmVyYXRlRHJpdmVyTG9nUHJlZml4KHRoaXMsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIHRoaXMubG9nLmluZm8oYFNlc3Npb24gY3JlYXRlZCB3aXRoIHNlc3Npb24gaWQ6ICR7dGhpcy5zZXNzaW9uSWR9YCk7XG5cbiAgICByZXR1cm4gW3RoaXMuc2Vzc2lvbklkLCBjYXBzXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHBhcmFtIHtEcml2ZXJEYXRhW119IFtkcml2ZXJEYXRhXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24oc2Vzc2lvbklkLCBkcml2ZXJEYXRhKSB7XG4gICAgYXdhaXQgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAmJiB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZC5pc0J1c3koKSkge1xuICAgICAgLy8gc2ltcGxlIGhhY2sgdG8gcmVsZWFzZSBwZW5kaW5nIGNvbW1hbmRzIGlmIHRoZXkgZXhpc3RcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIF8ua2V5cyh0aGlzLmNvbW1hbmRzUXVldWVHdWFyZC5xdWV1ZXMpKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQucXVldWVzW2tleV0gPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMuX2xvZy5wcmVmaXggPSBoZWxwZXJzLmdlbmVyYXRlRHJpdmVyTG9nUHJlZml4KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzXG4gICAqL1xuICBsb2dFeHRyYUNhcHMoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLCBfLmtleXModGhpcy5fY29uc3RyYWludHMpKTtcbiAgICBpZiAoZXh0cmFDYXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBhcmUgbm90IGAgKyBgcmVjb2duaXplZCBieSBBcHBpdW06YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgY2FwIG9mIGV4dHJhQ2Fwcykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGAgICR7Y2FwfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2Fwc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgIG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihcbiAgICAgICAgICBgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgICAgIGBmb2xsb3dpbmcgcmVhc29uKHMpOiAke2UubWVzc2FnZX1gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dFeHRyYUNhcHMoY2Fwcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMoY29uc3RyYWludHMpIHtcbiAgICB0aGlzLl9jb25zdHJhaW50cyA9IE9iamVjdC5hc3NpZ24odGhpcy5fY29uc3RyYWludHMsIGNvbnN0cmFpbnRzKTtcbiAgICAvLyAncHJlc2VuY2UnIG1lYW5zIGRpZmZlcmVudCB0aGluZ3MgaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSB2YWxpZGF0b3IsXG4gICAgLy8gd2hlbiB3ZSBzYXkgJ3RydWUnIHdlIG1lYW4gdGhhdCBpdCBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgZW1wdHlcbiAgICBmb3IgKGNvbnN0IFssIHZhbHVlXSBvZiBfLnRvUGFpcnModGhpcy5fY29uc3RyYWludHMpKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUucHJlc2VuY2UgPT09IHRydWUpIHtcbiAgICAgICAgdmFsdWUucHJlc2VuY2UgPSB7XG4gICAgICAgICAgYWxsb3dFbXB0eTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlc2lyZWRDYXBDb25zdHJhaW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc3RyYWludHM7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgb2YgdGhlIG1peGlucyBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgZGVzY3JpYmVkIGluIHtAbGlua2NvZGUgRHJpdmVyfS5cbiAqIEBpbXBsZW1lbnRzIHtEcml2ZXJ9XG4gKi9cbmNsYXNzIF9CYXNlRHJpdmVyIGV4dGVuZHMgY3JlYXRlQmFzZURyaXZlckNsYXNzKEJhc2VEcml2ZXJDb3JlKSB7fVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzczxEcml2ZXI+fVxuICovXG5jb25zdCBCYXNlRHJpdmVyID0gX0Jhc2VEcml2ZXI7XG5cbmV4cG9ydCB7QmFzZURyaXZlcn07XG5leHBvcnQgZGVmYXVsdCBCYXNlRHJpdmVyO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5IVFRQTWV0aG9kfSBIVFRQTWV0aG9kXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlcm5hbERyaXZlcn0gRXh0ZXJuYWxEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyRGF0YX0gRHJpdmVyRGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFVwZGF0ZVNlcnZlckNhbGxiYWNrXG4gKiBAcGFyYW0ge2ltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3N9IGFwcCAtIEV4cHJlc3MgYXBwXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcn0gaHR0cFNlcnZlciAtIEhUVFAgc2VydmVyXG4gKiBAcmV0dXJucyB7aW1wb3J0KCd0eXBlLWZlc3QnKS5Qcm9taXNhYmxlPHZvaWQ+fVxuICovXG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIHRvIGV4dGVuZCB7QGxpbmtjb2RlIEJhc2VEcml2ZXJDb3JlfSBieSB0aGUgbWl4aW5zIGFuZCBhbHNvIGV4dGVybmFsIGRyaXZlcnMuXG4gKiBAdGVtcGxhdGUgW1Byb3RvPXt9XVxuICogQHRlbXBsYXRlIFtTdGF0aWM9e31dXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2xhc3M8QmFzZURyaXZlckNvcmUgJiBQcm90byxpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJTdGF0aWMgJiBTdGF0aWM+fSBCYXNlRHJpdmVyQmFzZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNlc3Npb25IYW5kbGVyPFtzdHJpbmcsIG9iamVjdF0sdm9pZD59IFNlc3Npb25IYW5kbGVyXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxxQkFBM0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxtQkFBNUI7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxzQkFBakM7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxxQkFBaEM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyxzQkFBckM7O0FBS08sTUFBTUMsY0FBTixTQUE2QkMsZ0JBQTdCLENBQXdDO0VBQzdDQyxZQUFZLEdBQUdDLGVBQUEsQ0FBRUMsU0FBRixDQUFZQyx5Q0FBWixDQUFIO0VBR1pDLE9BQU87O0VBV2EsTUFBZEMsY0FBYyxDQUFDQyxHQUFELEVBQU0sR0FBR0MsSUFBVCxFQUFlO0lBRWpDLElBQUlDLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLEVBQWhC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