appium-ios-device 2.4.11 → 2.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [2.4.12](https://github.com/appium/appium-ios-device/compare/v2.4.11...v2.4.12) (2023-04-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * The issue which auxBuffer cannot be correctly handled as parameter. ([#108](https://github.com/appium/appium-ios-device/issues/108)) ([727cc8c](https://github.com/appium/appium-ios-device/commit/727cc8c230261aae233686bcce2d0e232d009a15))
7
+
1
8
  ## [2.4.11](https://github.com/appium/appium-ios-device/compare/v2.4.10...v2.4.11) (2023-02-28)
2
9
 
3
10
 
package/README.md CHANGED
@@ -32,6 +32,7 @@ More information can be found at the links below:
32
32
  - `services.startNotificationProxyService`
33
33
  - `services.startHouseArrestService`
34
34
  - `services.startInstrumentService`
35
+ - `services.startTestmanagerdService`
35
36
  - `services.startMCInstallService`
36
37
 
37
38
  ### Usage
package/build/index.js CHANGED
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "INSTRUMENT_CHANNEL", {
10
10
  return _instrument.INSTRUMENT_CHANNEL;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "TESTMANAGERD_CHANNEL", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _testmanagerd.TESTMANAGERD_CHANNEL;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "Usbmux", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -24,8 +30,9 @@ exports.utilities = utilities;
24
30
  var services = _interopRequireWildcard(require("./lib/services"));
25
31
  exports.services = services;
26
32
  var _instrument = require("./lib/instrument");
33
+ var _testmanagerd = require("./lib/testmanagerd");
27
34
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
35
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
36
  var _default = _usbmux.default;
30
37
  exports.default = _default;
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNibXV4IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJ1dGlsaXRpZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImV4cG9ydHMiLCJzZXJ2aWNlcyIsIl9pbnN0cnVtZW50IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl9kZWZhdWx0IiwiVXNibXV4Il0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBVc2JtdXggfSBmcm9tICcuL2xpYi91c2JtdXgnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vbGliL3V0aWxpdGllcyc7XG5pbXBvcnQgKiBhcyBzZXJ2aWNlcyBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJTlNUUlVNRU5UX0NIQU5ORUwgfSBmcm9tICcuL2xpYi9pbnN0cnVtZW50JztcblxuXG5leHBvcnQgeyBVc2JtdXgsIHV0aWxpdGllcywgc2VydmljZXMsIElOU1RSVU1FTlRfQ0hBTk5FTCB9O1xuZXhwb3J0IGRlZmF1bHQgVXNibXV4O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUE2Q0csT0FBQSxDQUFBRixTQUFBLEdBQUFBLFNBQUE7QUFDN0MsSUFBQUcsUUFBQSxHQUFBRix1QkFBQSxDQUFBRixPQUFBO0FBQTJDRyxPQUFBLENBQUFDLFFBQUEsR0FBQUEsUUFBQTtBQUMzQyxJQUFBQyxXQUFBLEdBQUFMLE9BQUE7QUFBc0QsU0FBQU0seUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQUwsd0JBQUFTLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxvQkFBQUEsR0FBQSx3QkFBQUEsR0FBQSw0QkFBQUUsT0FBQSxFQUFBRixHQUFBLFVBQUFHLEtBQUEsR0FBQVIsd0JBQUEsQ0FBQUMsV0FBQSxPQUFBTyxLQUFBLElBQUFBLEtBQUEsQ0FBQUMsR0FBQSxDQUFBSixHQUFBLFlBQUFHLEtBQUEsQ0FBQUUsR0FBQSxDQUFBTCxHQUFBLFNBQUFNLE1BQUEsV0FBQUMscUJBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsR0FBQSxJQUFBWCxHQUFBLFFBQUFXLEdBQUEsa0JBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWQsR0FBQSxFQUFBVyxHQUFBLFNBQUFJLElBQUEsR0FBQVIscUJBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixHQUFBLEVBQUFXLEdBQUEsY0FBQUksSUFBQSxLQUFBQSxJQUFBLENBQUFWLEdBQUEsSUFBQVUsSUFBQSxDQUFBQyxHQUFBLEtBQUFSLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxNQUFBLEVBQUFLLEdBQUEsRUFBQUksSUFBQSxZQUFBVCxNQUFBLENBQUFLLEdBQUEsSUFBQVgsR0FBQSxDQUFBVyxHQUFBLFNBQUFMLE1BQUEsQ0FBQUosT0FBQSxHQUFBRixHQUFBLE1BQUFHLEtBQUEsSUFBQUEsS0FBQSxDQUFBYSxHQUFBLENBQUFoQixHQUFBLEVBQUFNLE1BQUEsWUFBQUEsTUFBQTtBQUFBLElBQUFXLFFBQUEsR0FJdkNDLGVBQU07QUFBQTFCLE9BQUEsQ0FBQVUsT0FBQSxHQUFBZSxRQUFBIn0=
38
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNibXV4IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJ1dGlsaXRpZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImV4cG9ydHMiLCJzZXJ2aWNlcyIsIl9pbnN0cnVtZW50IiwiX3Rlc3RtYW5hZ2VyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJfZGVmYXVsdCIsIlVzYm11eCJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHQgYXMgVXNibXV4IH0gZnJvbSAnLi9saWIvdXNibXV4JztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuL2xpYi91dGlsaXRpZXMnO1xuaW1wb3J0ICogYXMgc2VydmljZXMgZnJvbSAnLi9saWIvc2VydmljZXMnO1xuXG5leHBvcnQgeyBVc2JtdXgsIHV0aWxpdGllcywgc2VydmljZXMgfTtcbmV4cG9ydCB7IElOU1RSVU1FTlRfQ0hBTk5FTCB9IGZyb20gJy4vbGliL2luc3RydW1lbnQnO1xuZXhwb3J0IHsgVEVTVE1BTkFHRVJEX0NIQU5ORUwgfSBmcm9tICcuL2xpYi90ZXN0bWFuYWdlcmQnO1xuZXhwb3J0IGRlZmF1bHQgVXNibXV4O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUE2Q0csT0FBQSxDQUFBRixTQUFBLEdBQUFBLFNBQUE7QUFDN0MsSUFBQUcsUUFBQSxHQUFBRix1QkFBQSxDQUFBRixPQUFBO0FBQTJDRyxPQUFBLENBQUFDLFFBQUEsR0FBQUEsUUFBQTtBQUczQyxJQUFBQyxXQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7QUFBMEQsU0FBQU8seUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQU4sd0JBQUFVLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxvQkFBQUEsR0FBQSx3QkFBQUEsR0FBQSw0QkFBQUUsT0FBQSxFQUFBRixHQUFBLFVBQUFHLEtBQUEsR0FBQVIsd0JBQUEsQ0FBQUMsV0FBQSxPQUFBTyxLQUFBLElBQUFBLEtBQUEsQ0FBQUMsR0FBQSxDQUFBSixHQUFBLFlBQUFHLEtBQUEsQ0FBQUUsR0FBQSxDQUFBTCxHQUFBLFNBQUFNLE1BQUEsV0FBQUMscUJBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsR0FBQSxJQUFBWCxHQUFBLFFBQUFXLEdBQUEsa0JBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWQsR0FBQSxFQUFBVyxHQUFBLFNBQUFJLElBQUEsR0FBQVIscUJBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixHQUFBLEVBQUFXLEdBQUEsY0FBQUksSUFBQSxLQUFBQSxJQUFBLENBQUFWLEdBQUEsSUFBQVUsSUFBQSxDQUFBQyxHQUFBLEtBQUFSLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxNQUFBLEVBQUFLLEdBQUEsRUFBQUksSUFBQSxZQUFBVCxNQUFBLENBQUFLLEdBQUEsSUFBQVgsR0FBQSxDQUFBVyxHQUFBLFNBQUFMLE1BQUEsQ0FBQUosT0FBQSxHQUFBRixHQUFBLE1BQUFHLEtBQUEsSUFBQUEsS0FBQSxDQUFBYSxHQUFBLENBQUFoQixHQUFBLEVBQUFNLE1BQUEsWUFBQUEsTUFBQTtBQUFBLElBQUFXLFFBQUEsR0FDM0NDLGVBQU07QUFBQTNCLE9BQUEsQ0FBQVcsT0FBQSxHQUFBZSxRQUFBIn0=
@@ -84,11 +84,11 @@ class DTXMessageAux {
84
84
  this.data = data;
85
85
  }
86
86
  build() {
87
+ if (this.data instanceof DTXMessageAuxBuffer) {
88
+ return this.data.getBytes();
89
+ }
87
90
  const messageAux = new DTXMessageAuxBuffer();
88
91
  let buf = Buffer.alloc(0);
89
- if (this.data.length === 0) {
90
- return buf;
91
- }
92
92
  for (const arg of this.data) {
93
93
  if (arg instanceof DTXMessageAuxBuffer) {
94
94
  buf = Buffer.concat([buf, arg.getBytes()]);
@@ -299,4 +299,4 @@ class DTXMessage {
299
299
  }
300
300
  }
301
301
  exports.DTXMessage = DTXMessage;
302
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbnNrZXllZCIsInJlcXVpcmUiLCJfYnBsaXN0UGFyc2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2Rhc2giLCJEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgiLCJleHBvcnRzIiwiRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQyIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4iLCJEVFhfTUVTU0FHRV9BVVhfSEVBREVSIiwiRFRYX0FVWElMSUFSWV9NQUdJQyIsIkZMQUdfVFlQRVMiLCJPYmplY3QiLCJmcmVlemUiLCJwdXNoIiwicmVjdiIsInNlbmQiLCJyZXBseSIsIkFVWF9UWVBFUyIsIlRleHQiLCJOU0tleWVkIiwiVUludDMyTEUiLCJCaWdVSW50NjRMRSIsIkJpZ0ludDY0TEUiLCJEVFhNZXNzYWdlSGVhZGVyIiwiYnVpbGQiLCJkYXRhIiwibWVzc2FnZUhlYWRlciIsIkJ1ZmZlciIsImFsbG9jIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJwYXlsb2FkTGVuZ3RoIiwiaWRlbnRpZmllciIsImNvbnZlcnNhdGlvbkluZGV4IiwiY2hhbm5lbENvZGUiLCJleHBlY3RzUmVwbHkiLCJwYXJzZSIsImhlYWRlckJ1ZmZlciIsIm1hZ2ljIiwicmVhZFVJbnQzMkxFIiwiaGVhZGVyTGVuZ3RoIiwiZnJhZ21lbnRJZCIsInJlYWRVSW50MTZMRSIsImZyYWdtZW50Q291bnQiLCJjaGFubmVsIiwiRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIiLCJmbGFncyIsImF1eExlbmd0aCIsIndyaXRlQmlnVUludDY0TEUiLCJ0b3RhbExlbmd0aCIsInJlYWRCaWdJbnQ2NExFIiwiRFRYTWVzc2FnZUF1eCIsImNvbnN0cnVjdG9yIiwibWVzc2FnZUF1eCIsIkRUWE1lc3NhZ2VBdXhCdWZmZXIiLCJidWYiLCJsZW5ndGgiLCJhcmciLCJjb25jYXQiLCJnZXRCeXRlcyIsIl8iLCJpc051bWJlciIsImFwcGVuZEludCIsImFwcGVuZExvbmciLCJhcHBlbmRPYmplY3QiLCJwYXlsb2FkSGVhZGVyIiwiY3Vyc29yIiwibSIsIkVycm9yIiwidHlwZSIsInN0ckxlbiIsInNsaWNlIiwiYXJjaGl2ZWRfZGF0YSIsInVuYXJjaGl2ZSIsInJlYWRCaWdVSW50NjRMRSIsIkluc3RydW1lbnRSUENQYXJzZUVycm9yIiwiX2J1ZiIsInZhbHVlIiwiYXBwZW5kU2lnbmVkSW50Iiwid3JpdGVJbnQzMkxFIiwiYXBwZW5kU2lnbmVkTG9uZyIsIndyaXRlQmlnSW50NjRMRSIsImFyY2hpdmUiLCJidWYyIiwib3V0IiwiRFRYTWVzc2FnZSIsIm9wdHMiLCJzZWxlY3RvciIsIl9tZXNzYWdlSGVhZGVyIiwidW5kZWZpbmVkIiwiX3BheWxvYWRIZWFkZXIiLCJfaWRlbnRpZmllciIsIl9jaGFubmVsQ29kZSIsIl9leHBlY3RzUmVwbHkiLCJfc2VsZWN0b3IiLCJfY29udmVyc2F0aW9uSW5kZXgiLCJfZmxhZ3MiLCJhdXhpbGlhcmllcyIsIl90aGlzJF9tZXNzYWdlSGVhZGVyIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXIyIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXIzIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXI0Iiwic2VsIiwiYXV4IiwiQmlnSW50IiwiaGVhZGVyQnVmIiwicGF5bG9hZEJ1ZiIsInJldCIsImZ1biIsInBsaXN0bGliIiwicGFyc2VCdWZmZXIiLCJlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RydW1lbnQvaGVhZGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FyY2hpdmUsIHVuYXJjaGl2ZX0gZnJvbSAnLi90cmFuc2Zvcm1lci9uc2tleWVkJztcbmltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCA9IDE2O1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDMyO1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDID0gMHgxRjNENUI3OTtcbmNvbnN0IERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4gPSA0O1xuY29uc3QgRFRYX01FU1NBR0VfQVVYX0hFQURFUiA9IDB4MDFGMDtcbmNvbnN0IERUWF9BVVhJTElBUllfTUFHSUMgPSAweGE7XG5cbmNvbnN0IEZMQUdfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcHVzaDogMCxcbiAgcmVjdjogMSxcbiAgc2VuZDogMixcbiAgcmVwbHk6IDNcbn0pO1xuXG5jb25zdCBBVVhfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgVGV4dDogMSxcbiAgTlNLZXllZDogMixcbiAgVUludDMyTEU6IDMsXG4gIEJpZ1VJbnQ2NExFOiA0LFxuICBCaWdJbnQ2NExFOiA2XG59KTtcblxuLyoqXG4gKiBEVFhNZXNzYWdlSGVhZGVyIGxlbmd0aCAzMlxuICogc3RydWN0IERUWE1lc3NhZ2VIZWFkZXIge1xuICogICAgIHUzMiBtYWdpYyBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNcbiAqICAgICB1MzIgaGVhZGVyTGVuZ3RoXG4gKiAgICAgdTE2IGZyYWdtZW50SWQgICBwYWNrZXQgbnVtYmVyXG4gKiAgICAgdTE2IGZyYWdtZW50Q291bnQgIHBhY2tldHMgdG90YWwgbnVtYmVyXG4gKiAgICAgdTMyIHBheWxvYWRMZW5ndGhcbiAqICAgICB1MzIgaWRlbnRpZmllclxuICogICAgIHUzMiBjb252ZXJzYXRpb25JbmRleFxuICogICAgIHUzMiBjaGFubmVsXG4gKiAgICAgdTMyIGV4cGVjdHNSZXBseVxuICogICAgIH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERUWE1lc3NhZ2VPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRlbnRpZmllciBwYWNrZXQgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLCB0aGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFubmVsQ29kZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gb2YgdGhlIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBjaGFubmVsIGNvZGUuXG4gKiBFYWNoIHNlcnZpY2UgaGFzIGEgc2VwYXJhdGUgY2hhbm5lbFxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBwYXlsb2FkTGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwZWN0c1JlcGx5IGlmIHRydWUgcmVwbHkgYSBhY2sgbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbnZlcnNhdGlvbkluZGV4ICByYXcgZGF0YSArMSBpbmRpY2F0ZSBhIHJlcGx5IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICovXG5cbmNsYXNzIERUWE1lc3NhZ2VIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gZGF0YVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlSGVhZGVyQnVmZmVyXG4gICAqL1xuICBzdGF0aWMgYnVpbGQgKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gQnVmZmVyLmFsbG9jKERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUMsIDApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RILCA0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDE2TEUoMCwgOCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQxNkxFKDEsIDEwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5wYXlsb2FkTGVuZ3RoLCAxMik7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuaWRlbnRpZmllciwgMTYpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmNvbnZlcnNhdGlvbkluZGV4LCAyMCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuY2hhbm5lbENvZGUsIDI0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5leHBlY3RzUmVwbHksIDI4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyIERUWE1lc3NhZ2VIZWFkZXJCdWZmZXJcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hZ2ljOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgaGVhZGVyTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgZnJhZ21lbnRJZDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MTZMRSg4KSxcbiAgICAgIGZyYWdtZW50Q291bnQ6IGhlYWRlckJ1ZmZlci5yZWFkVUludDE2TEUoMTApLFxuICAgICAgcGF5bG9hZExlbmd0aDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgxMiksXG4gICAgICBpZGVudGlmaWVyOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDE2KSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDIwKSxcbiAgICAgIGNoYW5uZWw6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjQpLFxuICAgICAgZXhwZWN0c1JlcGx5OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDI4KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIgbGVuZ3RoIDE2XG4gKiBzdHJ1Y3QgRFRYTWVzc2FnZUhlYWRlciB7XG4gKiAgICAgdTMyIGZsYWdzIEZMQUdfVFlQRVNcbiAqICAgICB1MzIgYXV4TGVuZ3RoXG4gKiAgICAgdTY0IHRvdGFsTGVuZ3RoXG4gKiAgICAgfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGF1eExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7YmlnaW50fSB0b3RhbExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSkgKyBzZWxlY3RvckJ1ZmZlci5sZW5ndGhcbiAqL1xuY2xhc3MgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEge0RUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyT2JqZWN0fVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlckJ1ZmZlclxuICAgKi9cbiAgc3RhdGljIGJ1aWxkIChkYXRhKSB7XG4gICAgY29uc3QgbWVzc2FnZUhlYWRlciA9IEJ1ZmZlci5hbGxvYyhEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmZsYWdzLCAwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5hdXhMZW5ndGgsIDQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVCaWdVSW50NjRMRShkYXRhLnRvdGFsTGVuZ3RoLCA4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlUGF5bG9hZEhlYWRlck9iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZsYWdzOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgYXV4TGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgdG90YWxMZW5ndGg6IGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRSg4KVxuICAgIH07XG4gIH1cbn1cblxuXG5jbGFzcyBEVFhNZXNzYWdlQXV4IHtcbiAgY29uc3RydWN0b3IgKGRhdGEgPSBbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSlMgQXJyYXkgdG8gQXBwbGUgTlNLZXllZCBCdWZmZXJcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBtZXNzYWdlQXV4ID0gbmV3IERUWE1lc3NhZ2VBdXhCdWZmZXIoKTtcbiAgICBsZXQgYnVmID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEVFhNZXNzYWdlQXV4QnVmZmVyKSB7XG4gICAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgYXJnLmdldEJ5dGVzKCldKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc051bWJlcihhcmcpKSB7XG4gICAgICAgIG1lc3NhZ2VBdXguYXBwZW5kSW50KGFyZyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgbWVzc2FnZUF1eC5hcHBlbmRMb25nKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlQXV4LmFwcGVuZE9iamVjdChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBtZXNzYWdlQXV4LmdldEJ5dGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgbnNrZXllZCBCdWZmZXIgaW50byBqcyBhcnJheVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmZmVyXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3R9IHBheWxvYWRIZWFkZXJcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWZmZXIsIHBheWxvYWRIZWFkZXIpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgY29uc3QgbGVuZ3RoID0gaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKDgpO1xuICAgIGN1cnNvciArPSAxNjtcbiAgICB3aGlsZSAoY3Vyc29yIDw9IGxlbmd0aCkge1xuICAgICAgaWYgKHBheWxvYWRIZWFkZXIuZmxhZ3MgIT09IEZMQUdfVFlQRVMucHVzaCkge1xuICAgICAgICBjb25zdCBtID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgaWYgKG0gIT09IERUWF9BVVhJTElBUllfTUFHSUMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluY29ycmVjdCBhdXhpbGlhcnkgbWFnaWM6ICR7bX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgIGN1cnNvciArPSA0O1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlRleHQ6IHtcbiAgICAgICAgICBjb25zdCBzdHJMZW4gPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5zbGljZShjdXJzb3IsIGN1cnNvciArIHN0ckxlbikpO1xuICAgICAgICAgIGN1cnNvciArPSBzdHJMZW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuTlNLZXllZDoge1xuICAgICAgICAgIGNvbnN0IHN0ckxlbiA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgICBjb25zdCBhcmNoaXZlZF9kYXRhID0gaGVhZGVyQnVmZmVyLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgc3RyTGVuKTtcbiAgICAgICAgICBkYXRhLnB1c2godW5hcmNoaXZlKGFyY2hpdmVkX2RhdGEpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gc3RyTGVuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlVJbnQzMkxFOlxuICAgICAgICAgIGRhdGEucHVzaChoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFVWF9UWVBFUy5CaWdVSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdVSW50NjRMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuQmlnSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgRFRYTWVzc2FnZUF1eEJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRJbnQgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSgzLCA0KTtcbiAgICBidWYud3JpdGVVSW50MzJMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZExvbmcgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDE2KTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSg0LCA0KTtcbiAgICBidWYud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICovXG4gIGFwcGVuZFNpZ25lZEludCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDMsIDQpO1xuICAgIGJ1Zi53cml0ZUludDMyTEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtiaWdpbnR9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRTaWduZWRMb25nICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoNiwgNCk7XG4gICAgYnVmLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZE9iamVjdCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBhcmNoaXZlKHZhbHVlKTtcbiAgICBjb25zdCBidWYyID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYyLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmMi53cml0ZVVJbnQzMkxFKDIsIDQpO1xuICAgIGJ1ZjIud3JpdGVVSW50MzJMRShidWYubGVuZ3RoLCA4KTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLl9idWYsIGJ1ZjIsIGJ1Zl0pO1xuICB9XG5cbiAgZ2V0Qnl0ZXMgKCkge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgb3V0LndyaXRlVUludDMyTEUoRFRYX01FU1NBR0VfQVVYX0hFQURFUiwgMCk7XG4gICAgb3V0LndyaXRlVUludDMyTEUodGhpcy5fYnVmLmxlbmd0aCwgOCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW291dCwgdGhpcy5fYnVmXSk7XG4gIH1cbn1cblxuXG5cbmNsYXNzIERUWE1lc3NhZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5LFxuICAgICAgY29udmVyc2F0aW9uSW5kZXggPSAwLFxuICAgICAgZmxhZ3MgPSBGTEFHX1RZUEVTLnNlbmRcbiAgICB9ID0gb3B0cztcbiAgICB0aGlzLl9tZXNzYWdlSGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3BheWxvYWRIZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgdGhpcy5fY2hhbm5lbENvZGUgPSBjaGFubmVsQ29kZTtcbiAgICB0aGlzLl9leHBlY3RzUmVwbHkgPSBleHBlY3RzUmVwbHk7XG4gICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB0aGlzLl9jb252ZXJzYXRpb25JbmRleCA9IGNvbnZlcnNhdGlvbkluZGV4O1xuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5hdXhpbGlhcmllcyA9IG5ldyBEVFhNZXNzYWdlQXV4KCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgaWRlbnRpZmllci4gUGFja2V0IHRyYW5zbWlzc2lvbiBzZXF1ZW5jZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGlkZW50aWZpZXIgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5pZGVudGlmaWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGNoYW5uZWxDb2RlLlxuICAgKiBQYWNrZXQgdHJhbnNtaXNzaW9uIGNoYW5uZWxDb2RlLiBVc2UgdGhpcyB2YWx1ZSB0byBkaXN0aW5ndWlzaCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjaGFubmVsc1xuICAgKiBjYWxsIHRoaXMgbWV0aG9kIGBJbnN0cnVtZW50U2VydmljZS5yZWdpc3RlckNoYW5uZWxDYWxsYmFja2AgZ2V0IHRoZSBjaGFubmVsIG1lc3NhZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBjaGFubmVsQ29kZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VIZWFkZXI/LmNoYW5uZWw7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgZXhwZWN0c1JlcGx5LiBXaGV0aGVyIHRvIG5lZWQgYWNrIG1lc3NhZ2VcbiAgICogaWYgZXhwZWN0c1JlcGx5IGlzIHRydWUgbXVzdCByZXBseSBhY2sgbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBleHBlY3RzUmVwbHkgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5leHBlY3RzUmVwbHk7XG4gIH1cblxuICAvKipcbiAgICogY2FsbCB0aGlzIG1ldGhvZCBgSW5zdHJ1bWVudFNlcnZpY2UucmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrYCBnZXQgdGhlIHNlbGVjdG9yIG1lc3NhZ2VcbiAgICogQHJldHVybnMgeyp9IFVua25vd24gZGF0YVxuICAgKi9cbiAgZ2V0IHNlbGVjdG9yICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldCBzZWxlY3RvciAoZGF0YSkge1xuICAgIHRoaXMuX3NlbGVjdG9yID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgRFRYTWVzc2FnZUhlYWRlciBjb252ZXJzYXRpb25JbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGNvbnZlcnNhdGlvbkluZGV4ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uY29udmVyc2F0aW9uSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRFRYTWVzc2FnZSBCdWZmZXI6IERUWE1lc3NhZ2VIZWFkZXIgKyBQYXlsb2FkSGVhZGVyICsgRFRYTWVzc2FnZUF1eEJ1ZmZlcihudWxsYWJsZSkgKyBzZWxlY3RvcihudWxsYWJsZSlcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLl9zZWxlY3RvciA/IGFyY2hpdmUodGhpcy5fc2VsZWN0b3IpIDogQnVmZmVyLmFsbG9jKDApO1xuICAgIGNvbnN0IGF1eCA9IHRoaXMuYXV4aWxpYXJpZXMuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkSGVhZGVyID0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIuYnVpbGQoe1xuICAgICAgZmxhZ3M6IHRoaXMuX2ZsYWdzLFxuICAgICAgYXV4TGVuZ3RoOiBhdXgubGVuZ3RoLFxuICAgICAgLy8gbmVlZCB0byBjb252ZXJ0IHRvIGJpZ2ludCBpbiBhbnkgY2FzZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB0b3RhbExlbmd0aDogQmlnSW50KGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSBEVFhNZXNzYWdlSGVhZGVyLmJ1aWxkKHtcbiAgICAgIHBheWxvYWRMZW5ndGg6IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCArIGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5faWRlbnRpZmllcixcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiB0aGlzLl9jb252ZXJzYXRpb25JbmRleCxcbiAgICAgIGNoYW5uZWxDb2RlOiB0aGlzLl9jaGFubmVsQ29kZSxcbiAgICAgIGV4cGVjdHNSZXBseTogdGhpcy5fZXhwZWN0c1JlcGx5XG4gICAgfSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW21lc3NhZ2VIZWFkZXIsIHBheWxvYWRIZWFkZXIsIGF1eCwgc2VsXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIERUWCBidWZmZXIgaW50byBhbiBqcyBvYmplY3QuIFJldHVybmVkIGluIERUWERlY29kZXIgU3RyZWFtLlRyYW5zZm9ybVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmICBEVFhNZXNzYWdlSGVhZGVyIGJ1ZmZlclxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gcGF5bG9hZEJ1ZiAgUGF5bG9hZEhlYWRlckJ1ZmZlciArIERUWE1lc3NhZ2VBdXhCdWZmZXIobnVsbGFibGUpICsgc2VsZWN0b3JCdWZmZXIobnVsbGFibGUpXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlfVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWYsIHBheWxvYWRCdWYpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCByZXQgPSBuZXcgRFRYTWVzc2FnZSgpO1xuICAgIHJldC5fbWVzc2FnZUhlYWRlciA9IERUWE1lc3NhZ2VIZWFkZXIucGFyc2UoaGVhZGVyQnVmKTtcbiAgICBpZiAocmV0Ll9tZXNzYWdlSGVhZGVyLnBheWxvYWRMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHJldC5fcGF5bG9hZEhlYWRlciA9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpKTtcbiAgICBjdXJzb3IgKz0gRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIO1xuICAgIC8vIHRvdGFsTGVuZ3RoIGlzIGJpZ2ludCB1c2UgMG5cbiAgICBpZiAocmV0Ll9wYXlsb2FkSGVhZGVyLnRvdGFsTGVuZ3RoID09PSAwbikge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaWYgKHJldC5fcGF5bG9hZEhlYWRlci5hdXhMZW5ndGggPiAwKSB7XG4gICAgICByZXQuYXV4aWxpYXJpZXMgPSBEVFhNZXNzYWdlQXV4LnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoKSwgcmV0Ll9wYXlsb2FkSGVhZGVyKTtcbiAgICAgIGN1cnNvciArPSByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgcGF5bG9hZEJ1Zi5sZW5ndGgpO1xuICAgIHJldC5zZWxlY3RvciA9IGRhdGE7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmdW4gb2YgW3VuYXJjaGl2ZSwgcGxpc3RsaWIucGFyc2VCdWZmZXJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gZnVuKGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gbmV3IEluc3RydW1lbnRSUENQYXJzZUVycm9yKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgRFRYTWVzc2FnZUhlYWRlciwgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIsIERUWE1lc3NhZ2VBdXhCdWZmZXIsIERUWE1lc3NhZ2VBdXgsIERUWE1lc3NhZ2UsXG4gIERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDLCBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNfTEVOLFxuICBGTEFHX1RZUEVTfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFFQSxNQUFNSSxpQ0FBaUMsR0FBRyxFQUFFO0FBQUNDLE9BQUEsQ0FBQUQsaUNBQUEsR0FBQUEsaUNBQUE7QUFDN0MsTUFBTUUseUJBQXlCLEdBQUcsRUFBRTtBQUFDRCxPQUFBLENBQUFDLHlCQUFBLEdBQUFBLHlCQUFBO0FBQ3JDLE1BQU1DLHdCQUF3QixHQUFHLFVBQVU7QUFBQ0YsT0FBQSxDQUFBRSx3QkFBQSxHQUFBQSx3QkFBQTtBQUM1QyxNQUFNQyw0QkFBNEIsR0FBRyxDQUFDO0FBQUNILE9BQUEsQ0FBQUcsNEJBQUEsR0FBQUEsNEJBQUE7QUFDdkMsTUFBTUMsc0JBQXNCLEdBQUcsTUFBTTtBQUNyQyxNQUFNQyxtQkFBbUIsR0FBRyxHQUFHO0FBRS9CLE1BQU1DLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDL0JDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLEtBQUssRUFBRTtBQUNULENBQUMsQ0FBQztBQUFDWixPQUFBLENBQUFNLFVBQUEsR0FBQUEsVUFBQTtBQUVILE1BQU1PLFNBQVMsR0FBR04sTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDOUJNLElBQUksRUFBRSxDQUFDO0VBQ1BDLE9BQU8sRUFBRSxDQUFDO0VBQ1ZDLFFBQVEsRUFBRSxDQUFDO0VBQ1hDLFdBQVcsRUFBRSxDQUFDO0VBQ2RDLFVBQVUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQTRCRixNQUFNQyxnQkFBZ0IsQ0FBQztFQUtyQixPQUFP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
302
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbnNrZXllZCIsInJlcXVpcmUiLCJfYnBsaXN0UGFyc2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2Rhc2giLCJEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgiLCJleHBvcnRzIiwiRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQyIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4iLCJEVFhfTUVTU0FHRV9BVVhfSEVBREVSIiwiRFRYX0FVWElMSUFSWV9NQUdJQyIsIkZMQUdfVFlQRVMiLCJPYmplY3QiLCJmcmVlemUiLCJwdXNoIiwicmVjdiIsInNlbmQiLCJyZXBseSIsIkFVWF9UWVBFUyIsIlRleHQiLCJOU0tleWVkIiwiVUludDMyTEUiLCJCaWdVSW50NjRMRSIsIkJpZ0ludDY0TEUiLCJEVFhNZXNzYWdlSGVhZGVyIiwiYnVpbGQiLCJkYXRhIiwibWVzc2FnZUhlYWRlciIsIkJ1ZmZlciIsImFsbG9jIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJwYXlsb2FkTGVuZ3RoIiwiaWRlbnRpZmllciIsImNvbnZlcnNhdGlvbkluZGV4IiwiY2hhbm5lbENvZGUiLCJleHBlY3RzUmVwbHkiLCJwYXJzZSIsImhlYWRlckJ1ZmZlciIsIm1hZ2ljIiwicmVhZFVJbnQzMkxFIiwiaGVhZGVyTGVuZ3RoIiwiZnJhZ21lbnRJZCIsInJlYWRVSW50MTZMRSIsImZyYWdtZW50Q291bnQiLCJjaGFubmVsIiwiRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIiLCJmbGFncyIsImF1eExlbmd0aCIsIndyaXRlQmlnVUludDY0TEUiLCJ0b3RhbExlbmd0aCIsInJlYWRCaWdJbnQ2NExFIiwiRFRYTWVzc2FnZUF1eCIsImNvbnN0cnVjdG9yIiwiRFRYTWVzc2FnZUF1eEJ1ZmZlciIsImdldEJ5dGVzIiwibWVzc2FnZUF1eCIsImJ1ZiIsImFyZyIsImNvbmNhdCIsIl8iLCJpc051bWJlciIsImFwcGVuZEludCIsImFwcGVuZExvbmciLCJhcHBlbmRPYmplY3QiLCJwYXlsb2FkSGVhZGVyIiwiY3Vyc29yIiwibGVuZ3RoIiwibSIsIkVycm9yIiwidHlwZSIsInN0ckxlbiIsInNsaWNlIiwiYXJjaGl2ZWRfZGF0YSIsInVuYXJjaGl2ZSIsInJlYWRCaWdVSW50NjRMRSIsIkluc3RydW1lbnRSUENQYXJzZUVycm9yIiwiX2J1ZiIsInZhbHVlIiwiYXBwZW5kU2lnbmVkSW50Iiwid3JpdGVJbnQzMkxFIiwiYXBwZW5kU2lnbmVkTG9uZyIsIndyaXRlQmlnSW50NjRMRSIsImFyY2hpdmUiLCJidWYyIiwib3V0IiwiRFRYTWVzc2FnZSIsIm9wdHMiLCJzZWxlY3RvciIsIl9tZXNzYWdlSGVhZGVyIiwidW5kZWZpbmVkIiwiX3BheWxvYWRIZWFkZXIiLCJfaWRlbnRpZmllciIsIl9jaGFubmVsQ29kZSIsIl9leHBlY3RzUmVwbHkiLCJfc2VsZWN0b3IiLCJfY29udmVyc2F0aW9uSW5kZXgiLCJfZmxhZ3MiLCJhdXhpbGlhcmllcyIsIl90aGlzJF9tZXNzYWdlSGVhZGVyIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXIyIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXIzIiwiX3RoaXMkX21lc3NhZ2VIZWFkZXI0Iiwic2VsIiwiYXV4IiwiQmlnSW50IiwiaGVhZGVyQnVmIiwicGF5bG9hZEJ1ZiIsInJldCIsImZ1biIsInBsaXN0bGliIiwicGFyc2VCdWZmZXIiLCJlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RydW1lbnQvaGVhZGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FyY2hpdmUsIHVuYXJjaGl2ZX0gZnJvbSAnLi90cmFuc2Zvcm1lci9uc2tleWVkJztcbmltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCA9IDE2O1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDMyO1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDID0gMHgxRjNENUI3OTtcbmNvbnN0IERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4gPSA0O1xuY29uc3QgRFRYX01FU1NBR0VfQVVYX0hFQURFUiA9IDB4MDFGMDtcbmNvbnN0IERUWF9BVVhJTElBUllfTUFHSUMgPSAweGE7XG5cbmNvbnN0IEZMQUdfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcHVzaDogMCxcbiAgcmVjdjogMSxcbiAgc2VuZDogMixcbiAgcmVwbHk6IDNcbn0pO1xuXG5jb25zdCBBVVhfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgVGV4dDogMSxcbiAgTlNLZXllZDogMixcbiAgVUludDMyTEU6IDMsXG4gIEJpZ1VJbnQ2NExFOiA0LFxuICBCaWdJbnQ2NExFOiA2XG59KTtcblxuLyoqXG4gKiBEVFhNZXNzYWdlSGVhZGVyIGxlbmd0aCAzMlxuICogc3RydWN0IERUWE1lc3NhZ2VIZWFkZXIge1xuICogICAgIHUzMiBtYWdpYyBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNcbiAqICAgICB1MzIgaGVhZGVyTGVuZ3RoXG4gKiAgICAgdTE2IGZyYWdtZW50SWQgICBwYWNrZXQgbnVtYmVyXG4gKiAgICAgdTE2IGZyYWdtZW50Q291bnQgIHBhY2tldHMgdG90YWwgbnVtYmVyXG4gKiAgICAgdTMyIHBheWxvYWRMZW5ndGhcbiAqICAgICB1MzIgaWRlbnRpZmllclxuICogICAgIHUzMiBjb252ZXJzYXRpb25JbmRleFxuICogICAgIHUzMiBjaGFubmVsXG4gKiAgICAgdTMyIGV4cGVjdHNSZXBseVxuICogICAgIH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERUWE1lc3NhZ2VPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRlbnRpZmllciBwYWNrZXQgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLCB0aGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFubmVsQ29kZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gb2YgdGhlIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBjaGFubmVsIGNvZGUuXG4gKiBFYWNoIHNlcnZpY2UgaGFzIGEgc2VwYXJhdGUgY2hhbm5lbFxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBwYXlsb2FkTGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwZWN0c1JlcGx5IGlmIHRydWUgcmVwbHkgYSBhY2sgbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbnZlcnNhdGlvbkluZGV4ICByYXcgZGF0YSArMSBpbmRpY2F0ZSBhIHJlcGx5IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICovXG5cbmNsYXNzIERUWE1lc3NhZ2VIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gZGF0YVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlSGVhZGVyQnVmZmVyXG4gICAqL1xuICBzdGF0aWMgYnVpbGQgKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gQnVmZmVyLmFsbG9jKERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUMsIDApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RILCA0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDE2TEUoMCwgOCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQxNkxFKDEsIDEwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5wYXlsb2FkTGVuZ3RoLCAxMik7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuaWRlbnRpZmllciwgMTYpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmNvbnZlcnNhdGlvbkluZGV4LCAyMCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuY2hhbm5lbENvZGUsIDI0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5leHBlY3RzUmVwbHksIDI4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyIERUWE1lc3NhZ2VIZWFkZXJCdWZmZXJcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hZ2ljOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgaGVhZGVyTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgZnJhZ21lbnRJZDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MTZMRSg4KSxcbiAgICAgIGZyYWdtZW50Q291bnQ6IGhlYWRlckJ1ZmZlci5yZWFkVUludDE2TEUoMTApLFxuICAgICAgcGF5bG9hZExlbmd0aDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgxMiksXG4gICAgICBpZGVudGlmaWVyOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDE2KSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDIwKSxcbiAgICAgIGNoYW5uZWw6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjQpLFxuICAgICAgZXhwZWN0c1JlcGx5OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDI4KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIgbGVuZ3RoIDE2XG4gKiBzdHJ1Y3QgRFRYTWVzc2FnZUhlYWRlciB7XG4gKiAgICAgdTMyIGZsYWdzIEZMQUdfVFlQRVNcbiAqICAgICB1MzIgYXV4TGVuZ3RoXG4gKiAgICAgdTY0IHRvdGFsTGVuZ3RoXG4gKiAgICAgfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGF1eExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7YmlnaW50fSB0b3RhbExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSkgKyBzZWxlY3RvckJ1ZmZlci5sZW5ndGhcbiAqL1xuY2xhc3MgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEge0RUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyT2JqZWN0fVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlckJ1ZmZlclxuICAgKi9cbiAgc3RhdGljIGJ1aWxkIChkYXRhKSB7XG4gICAgY29uc3QgbWVzc2FnZUhlYWRlciA9IEJ1ZmZlci5hbGxvYyhEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmZsYWdzLCAwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5hdXhMZW5ndGgsIDQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVCaWdVSW50NjRMRShkYXRhLnRvdGFsTGVuZ3RoLCA4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlUGF5bG9hZEhlYWRlck9iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZsYWdzOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgYXV4TGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgdG90YWxMZW5ndGg6IGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRSg4KVxuICAgIH07XG4gIH1cbn1cblxuXG5jbGFzcyBEVFhNZXNzYWdlQXV4IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55W10gfCBEVFhNZXNzYWdlQXV4QnVmZmVyfSBkYXRhXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoZGF0YSA9IFtdKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKUyBBcnJheSB0byBBcHBsZSBOU0tleWVkIEJ1ZmZlclxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKi9cbiAgYnVpbGQgKCkge1xuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBEVFhNZXNzYWdlQXV4QnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmdldEJ5dGVzKCk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VBdXggPSBuZXcgRFRYTWVzc2FnZUF1eEJ1ZmZlcigpO1xuICAgIGxldCBidWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5kYXRhKSB7XG4gICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRFRYTWVzc2FnZUF1eEJ1ZmZlcikge1xuICAgICAgICBidWYgPSBCdWZmZXIuY29uY2F0KFtidWYsIGFyZy5nZXRCeXRlcygpXSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNOdW1iZXIoYXJnKSkge1xuICAgICAgICBtZXNzYWdlQXV4LmFwcGVuZEludChhcmcpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09ICdiaWdpbnQnKSB7XG4gICAgICAgIG1lc3NhZ2VBdXguYXBwZW5kTG9uZyhhcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZUF1eC5hcHBlbmRPYmplY3QoYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgbWVzc2FnZUF1eC5nZXRCeXRlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIG5za2V5ZWQgQnVmZmVyIGludG8ganMgYXJyYXlcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGhlYWRlckJ1ZmZlclxuICAgKiBAcGFyYW0ge0RUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyT2JqZWN0fSBwYXlsb2FkSGVhZGVyXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyLCBwYXlsb2FkSGVhZGVyKSB7XG4gICAgbGV0IGN1cnNvciA9IDA7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGNvbnN0IGxlbmd0aCA9IGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRSg4KTtcbiAgICBjdXJzb3IgKz0gMTY7XG4gICAgd2hpbGUgKGN1cnNvciA8PSBsZW5ndGgpIHtcbiAgICAgIGlmIChwYXlsb2FkSGVhZGVyLmZsYWdzICE9PSBGTEFHX1RZUEVTLnB1c2gpIHtcbiAgICAgICAgY29uc3QgbSA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgIGlmIChtICE9PSBEVFhfQVVYSUxJQVJZX01BR0lDKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmNvcnJlY3QgYXV4aWxpYXJ5IG1hZ2ljOiAke219YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICBjdXJzb3IgKz0gNDtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFVWF9UWVBFUy5UZXh0OiB7XG4gICAgICAgICAgY29uc3Qgc3RyTGVuID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpO1xuICAgICAgICAgIGN1cnNvciArPSA0O1xuICAgICAgICAgIGRhdGEucHVzaChoZWFkZXJCdWZmZXIuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyBzdHJMZW4pKTtcbiAgICAgICAgICBjdXJzb3IgKz0gc3RyTGVuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLk5TS2V5ZWQ6IHtcbiAgICAgICAgICBjb25zdCBzdHJMZW4gPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgICAgY29uc3QgYXJjaGl2ZWRfZGF0YSA9IGhlYWRlckJ1ZmZlci5zbGljZShjdXJzb3IsIGN1cnNvciArIHN0ckxlbik7XG4gICAgICAgICAgZGF0YS5wdXNoKHVuYXJjaGl2ZShhcmNoaXZlZF9kYXRhKSk7XG4gICAgICAgICAgY3Vyc29yICs9IHN0ckxlbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEFVWF9UWVBFUy5VSW50MzJMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuQmlnVUludDY0TEU6XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5yZWFkQmlnVUludDY0TEUoY3Vyc29yKSk7XG4gICAgICAgICAgY3Vyc29yICs9IDg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLkJpZ0ludDY0TEU6XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSAke3R5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbmNsYXNzIEluc3RydW1lbnRSUENQYXJzZUVycm9yIHtcbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmNsYXNzIERUWE1lc3NhZ2VBdXhCdWZmZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmFsbG9jKDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgYXBwZW5kSW50ICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoMywgNCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtiaWdpbnR9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRMb25nICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoNCwgNCk7XG4gICAgYnVmLndyaXRlQmlnVUludDY0TEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRTaWduZWRJbnQgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSgzLCA0KTtcbiAgICBidWYud3JpdGVJbnQzMkxFKHZhbHVlLCA4KTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLl9idWYsIGJ1Zl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YmlnaW50fSB2YWx1ZVxuICAgKi9cbiAgYXBwZW5kU2lnbmVkTG9uZyAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTYpO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDYsIDQpO1xuICAgIGJ1Zi53cml0ZUJpZ0ludDY0TEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRPYmplY3QgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gYXJjaGl2ZSh2YWx1ZSk7XG4gICAgY29uc3QgYnVmMiA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgYnVmMi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1ZjIud3JpdGVVSW50MzJMRSgyLCA0KTtcbiAgICBidWYyLndyaXRlVUludDMyTEUoYnVmLmxlbmd0aCwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWYyLCBidWZdKTtcbiAgfVxuXG4gIGdldEJ5dGVzICgpIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2MoMTYpO1xuICAgIG91dC53cml0ZVVJbnQzMkxFKERUWF9NRVNTQUdFX0FVWF9IRUFERVIsIDApO1xuICAgIG91dC53cml0ZVVJbnQzMkxFKHRoaXMuX2J1Zi5sZW5ndGgsIDgpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvdXQsIHRoaXMuX2J1Zl0pO1xuICB9XG59XG5cblxuXG5jbGFzcyBEVFhNZXNzYWdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZU9wdGlvbnN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgY2hhbm5lbENvZGUsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIGV4cGVjdHNSZXBseSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4ID0gMCxcbiAgICAgIGZsYWdzID0gRkxBR19UWVBFUy5zZW5kXG4gICAgfSA9IG9wdHM7XG4gICAgdGhpcy5fbWVzc2FnZUhlYWRlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9wYXlsb2FkSGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgIHRoaXMuX2NoYW5uZWxDb2RlID0gY2hhbm5lbENvZGU7XG4gICAgdGhpcy5fZXhwZWN0c1JlcGx5ID0gZXhwZWN0c1JlcGx5O1xuICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5fY29udmVyc2F0aW9uSW5kZXggPSBjb252ZXJzYXRpb25JbmRleDtcbiAgICB0aGlzLl9mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuYXV4aWxpYXJpZXMgPSBuZXcgRFRYTWVzc2FnZUF1eCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGlkZW50aWZpZXIuIFBhY2tldCB0cmFuc21pc3Npb24gc2VxdWVuY2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBpZGVudGlmaWVyICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgRFRYTWVzc2FnZUhlYWRlciBjaGFubmVsQ29kZS5cbiAgICogUGFja2V0IHRyYW5zbWlzc2lvbiBjaGFubmVsQ29kZS4gVXNlIHRoaXMgdmFsdWUgdG8gZGlzdGluZ3Vpc2ggd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgY2hhbm5lbHNcbiAgICogY2FsbCB0aGlzIG1ldGhvZCBgSW5zdHJ1bWVudFNlcnZpY2UucmVnaXN0ZXJDaGFubmVsQ2FsbGJhY2tgIGdldCB0aGUgY2hhbm5lbCBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgY2hhbm5lbENvZGUgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5jaGFubmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGV4cGVjdHNSZXBseS4gV2hldGhlciB0byBuZWVkIGFjayBtZXNzYWdlXG4gICAqIGlmIGV4cGVjdHNSZXBseSBpcyB0cnVlIG11c3QgcmVwbHkgYWNrIG1lc3NhZ2VcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgZXhwZWN0c1JlcGx5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uZXhwZWN0c1JlcGx5O1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhpcyBtZXRob2QgYEluc3RydW1lbnRTZXJ2aWNlLnJlZ2lzdGVyU2VsZWN0b3JDYWxsYmFja2AgZ2V0IHRoZSBzZWxlY3RvciBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHsqfSBVbmtub3duIGRhdGFcbiAgICovXG4gIGdldCBzZWxlY3RvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBzZXQgc2VsZWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLl9zZWxlY3RvciA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgY29udmVyc2F0aW9uSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBjb252ZXJzYXRpb25JbmRleCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VIZWFkZXI/LmNvbnZlcnNhdGlvbkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIERUWE1lc3NhZ2UgQnVmZmVyOiBEVFhNZXNzYWdlSGVhZGVyICsgUGF5bG9hZEhlYWRlciArIERUWE1lc3NhZ2VBdXhCdWZmZXIobnVsbGFibGUpICsgc2VsZWN0b3IobnVsbGFibGUpXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBidWlsZCAoKSB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fc2VsZWN0b3IgPyBhcmNoaXZlKHRoaXMuX3NlbGVjdG9yKSA6IEJ1ZmZlci5hbGxvYygwKTtcbiAgICBjb25zdCBhdXggPSB0aGlzLmF1eGlsaWFyaWVzLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZEhlYWRlciA9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLmJ1aWxkKHtcbiAgICAgIGZsYWdzOiB0aGlzLl9mbGFncyxcbiAgICAgIGF1eExlbmd0aDogYXV4Lmxlbmd0aCxcbiAgICAgIC8vIG5lZWQgdG8gY29udmVydCB0byBiaWdpbnQgaW4gYW55IGNhc2VcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgdG90YWxMZW5ndGg6IEJpZ0ludChhdXgubGVuZ3RoICsgc2VsLmxlbmd0aCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gRFRYTWVzc2FnZUhlYWRlci5idWlsZCh7XG4gICAgICBwYXlsb2FkTGVuZ3RoOiBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEggKyBhdXgubGVuZ3RoICsgc2VsLmxlbmd0aCxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuX2lkZW50aWZpZXIsXG4gICAgICBjb252ZXJzYXRpb25JbmRleDogdGhpcy5fY29udmVyc2F0aW9uSW5kZXgsXG4gICAgICBjaGFubmVsQ29kZTogdGhpcy5fY2hhbm5lbENvZGUsXG4gICAgICBleHBlY3RzUmVwbHk6IHRoaXMuX2V4cGVjdHNSZXBseVxuICAgIH0pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFttZXNzYWdlSGVhZGVyLCBwYXlsb2FkSGVhZGVyLCBhdXgsIHNlbF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBEVFggYnVmZmVyIGludG8gYW4ganMgb2JqZWN0LiBSZXR1cm5lZCBpbiBEVFhEZWNvZGVyIFN0cmVhbS5UcmFuc2Zvcm1cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGhlYWRlckJ1ZiAgRFRYTWVzc2FnZUhlYWRlciBidWZmZXJcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHBheWxvYWRCdWYgIFBheWxvYWRIZWFkZXJCdWZmZXIgKyBEVFhNZXNzYWdlQXV4QnVmZmVyKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyKG51bGxhYmxlKVxuICAgKiBAcmV0dXJucyB7RFRYTWVzc2FnZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmLCBwYXlsb2FkQnVmKSB7XG4gICAgbGV0IGN1cnNvciA9IDA7XG4gICAgY29uc3QgcmV0ID0gbmV3IERUWE1lc3NhZ2UoKTtcbiAgICByZXQuX21lc3NhZ2VIZWFkZXIgPSBEVFhNZXNzYWdlSGVhZGVyLnBhcnNlKGhlYWRlckJ1Zik7XG4gICAgaWYgKHJldC5fbWVzc2FnZUhlYWRlci5wYXlsb2FkTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICByZXQuX3BheWxvYWRIZWFkZXIgPSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlci5wYXJzZShwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIKSk7XG4gICAgY3Vyc29yICs9IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSDtcbiAgICAvLyB0b3RhbExlbmd0aCBpcyBiaWdpbnQgdXNlIDBuXG4gICAgaWYgKHJldC5fcGF5bG9hZEhlYWRlci50b3RhbExlbmd0aCA9PT0gMG4pIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlmIChyZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoID4gMCkge1xuICAgICAgcmV0LmF1eGlsaWFyaWVzID0gRFRYTWVzc2FnZUF1eC5wYXJzZShwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgcmV0Ll9wYXlsb2FkSGVhZGVyLmF1eExlbmd0aCksIHJldC5fcGF5bG9hZEhlYWRlcik7XG4gICAgICBjdXJzb3IgKz0gcmV0Ll9wYXlsb2FkSGVhZGVyLmF1eExlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gcGF5bG9hZEJ1Zi5zbGljZShjdXJzb3IsIGN1cnNvciArIHBheWxvYWRCdWYubGVuZ3RoKTtcbiAgICByZXQuc2VsZWN0b3IgPSBkYXRhO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZnVuIG9mIFt1bmFyY2hpdmUsIHBsaXN0bGliLnBhcnNlQnVmZmVyXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldC5zZWxlY3RvciA9IGZ1bihkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldC5zZWxlY3RvciA9IG5ldyBJbnN0cnVtZW50UlBDUGFyc2VFcnJvcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbmV4cG9ydCB7IERUWE1lc3NhZ2VIZWFkZXIsIERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLCBEVFhNZXNzYWdlQXV4QnVmZmVyLCBEVFhNZXNzYWdlQXV4LCBEVFhNZXNzYWdlLFxuICBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgsIERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgsIERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQywgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDX0xFTixcbiAgRkxBR19UWVBFU307XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsTUFBTUksaUNBQWlDLEdBQUcsRUFBRTtBQUFDQyxPQUFBLENBQUFELGlDQUFBLEdBQUFBLGlDQUFBO0FBQzdDLE1BQU1FLHlCQUF5QixHQUFHLEVBQUU7QUFBQ0QsT0FBQSxDQUFBQyx5QkFBQSxHQUFBQSx5QkFBQTtBQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxVQUFVO0FBQUNGLE9BQUEsQ0FBQUUsd0JBQUEsR0FBQUEsd0JBQUE7QUFDNUMsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBQztBQUFDSCxPQUFBLENBQUFHLDRCQUFBLEdBQUFBLDRCQUFBO0FBQ3ZDLE1BQU1DLHNCQUFzQixHQUFHLE1BQU07QUFDckMsTUFBTUMsbUJBQW1CLEdBQUcsR0FBRztBQUUvQixNQUFNQyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO0VBQy9CQyxJQUFJLEVBQUUsQ0FBQztFQUNQQyxJQUFJLEVBQUUsQ0FBQztFQUNQQyxJQUFJLEVBQUUsQ0FBQztFQUNQQyxLQUFLLEVBQUU7QUFDVCxDQUFDLENBQUM7QUFBQ1osT0FBQSxDQUFBTSxVQUFBLEdBQUFBLFVBQUE7QUFFSCxNQUFNTyxTQUFTLEdBQUdOLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO0VBQzlCTSxJQUFJLEVBQUUsQ0FBQztFQUNQQyxPQUFPLEVBQUUsQ0FBQztFQUNWQyxRQUFRLEVBQUUsQ0FBQztFQUNYQyxXQUFXLEVBQUUsQ0FBQztFQUNkQyxVQUFVLEVBQUU7QUFDZCxDQUFDLENBQUM7QUE0QkYsTUFBTUMsZ0JBQWdCLENBQUM7RUFLckIsT0FBT0MsS0FBS0EsQ0FBRUMsSUFBSSxFQUFFO0lBQ2xCLE1BQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxLQUFLLENBQUN2Qix5QkFBeUIsQ0FBQztJQUM3RHFCLGFBQWEsQ0FBQ0csYUFBYSxDQUFDdkIsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hEb0IsYUFBYSxDQUFDRyxhQUFhLENBQUN4Qix5QkFBeUIsRUFBRSxDQUFDLENBQUM7SUFDekRxQixhQUFhLENBQUNJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDSixhQUFhLENBQUNJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xDSixhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDTSxhQUFhLEVBQUUsRUFBRSxDQUFDO0lBQ25ETCxhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDTyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2hETixhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDUSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7SUFDdkRQLGFBQWEsQ0FBQ0csYUFBYSxDQUFDSixJQUFJLENBQUNTLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDakRSLGFBQWEsQ0FBQ0csYUFBYSxDQUFDSixJQUFJLENBQUNVLFlBQVksRUFBRSxFQUFFLENBQUM7SUFDbEQsT0FBT1QsYUFBYTtFQUN0QjtFQU1BLE9BQU9VLEtBQUtBLENBQUVDLFlBQVksRUFBRTtJQUMxQixPQUFPO01BQ0xDLEtBQUssRUFBRUQsWUFBWSxDQUFDRSxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ25DQyxZQUFZLEVBQUVILFlBQVksQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUMxQ0UsVUFBVSxFQUFFSixZQUFZLENBQUNLLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDeENDLGFBQWEsRUFBRU4sWUFBWSxDQUFDSyxZQUFZLENBQUMsRUFBRSxDQUFDO01BQzVDWCxhQUFhLEVBQUVNLFlBQVksQ0FBQ0UsWUFBWSxDQUFDLEVBQUUsQ0FBQztNQUM1Q1AsVUFBVSxFQUFFSyxZQUFZLENBQUNFLFlBQVksQ0FBQyxFQUFFLENBQUM7TUFDekNOLGlCQUFpQixFQUFFSSxZQUFZLENBQUNFLFlBQVksQ0FBQyxFQUFFLENBQUM7TUFDaERLLE9BQU8sRUFBRVAsWUFBWSxDQUFDRSxZQUFZLENBQUMsRUFBRSxDQUFDO01BQ3RDSixZQUFZLEVBQUVFLFlBQVksQ0FBQ0UsWUFBWSxDQUFDLEVBQUU7SUFDNUMsQ0FBQztFQUNIO0FBQ0Y7QUFBQ25DLE9BQUEsQ0FBQW1CLGdCQUFBLEdBQUFBLGdCQUFBO0FBaUJELE1BQU1zQix1QkFBdUIsQ0FBQztFQUs1QixPQUFPckIsS0FBS0EsQ0FBRUMsSUFBSSxFQUFFO0lBQ2xCLE1BQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxLQUFLLENBQUN6QixpQ0FBaUMsQ0FBQztJQUNyRXVCLGFBQWEsQ0FBQ0csYUFBYSxDQUFDSixJQUFJLENBQUNxQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDcEIsYUFBYSxDQUFDRyxhQUFhLENBQUNKLElBQUksQ0FBQ3NCLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUNyQixhQUFhLENBQUNzQixnQkFBZ0IsQ0FBQ3ZCLElBQUksQ0FBQ3dCLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkQsT0FBT3ZCLGFBQWE7RUFDdEI7RUFNQSxPQUFPVSxLQUFLQSxDQUFFQyxZQUFZLEVBQUU7SUFDMUIsT0FBTztNQUNMUyxLQUFLLEVBQUVULFlBQVksQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNuQ1EsU0FBUyxFQUFFVixZQUFZLENBQUNFLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDdkNVLFdBQVcsRUFBRVosWUFBWSxDQUFDYSxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0VBQ0g7QUFDRjtBQUFDOUMsT0FBQSxDQUFBeUMsdUJBQUEsR0FBQUEsdUJBQUE7QUFHRCxNQUFNTSxhQUFhLENBQUM7RUFJbEJDLFdBQVdBLENBQUUzQixJQUFJLEdBQUcsRUFBRSxFQUFFO0lBQ3RCLElBQUksQ0FBQ0EsSUFBSSxHQUFHQSxJQUFJO0VBQ2xCO0VBTUFELEtBQUtBLENBQUEsRUFBSTtJQUNQLElBQUksSUFBSSxDQUFDQyxJQUFJLFlBQVk0QixtQkFBbUIsRUFBRTtNQUM1QyxPQUFPLElBQUksQ0FBQzVCLElBQUksQ0FBQzZCLFFBQVEsRUFBRTtJQUM3QjtJQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJRixtQkFBbUIsRUFBRTtJQUM1QyxJQUFJRyxHQUFHLEdBQUc3QixNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekIsS0FBSyxNQUFNNkIsR0FBRyxJQUFJLElBQUksQ0FBQ2hDLElBQUksRUFBRTtNQUMzQixJQUFJZ0MsR0FBRyxZQUFZSixtQkFBbUIsRUFBRTtRQUN0Q0csR0FBRyxHQUFHN0IsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUNGLEdBQUcsRUFBRUMsR0FBRyxDQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzVDLENBQUMsTUFBTSxJQUFJSyxlQUFDLENBQUNDLFFBQVEsQ0FBQ0gsR0FBRyxDQUFDLEVBQUU7UUFDMUJGLFVBQVUsQ0FBQ00sU0FBUyxDQUFDSixHQUFHLENBQUM7TUFDM0IsQ0FBQyxNQUFNLElBQUksT0FBT0EsR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUNqQ0YsVUFBVSxDQUFDTyxVQUFVLENBQUNMLEdBQUcsQ0FBQztNQUM1QixDQUFDLE1BQU07UUFDTEYsVUFBVSxDQUFDUSxZQUFZLENBQUNOLEdBQUcsQ0FBQztNQUM5QjtJQUNGO0lBQ0EsT0FBTzlCLE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDRixHQUFHLEVBQUVELFVBQVUsQ0FBQ0QsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNwRDtFQVFBLE9BQU9sQixLQUFLQSxDQUFFQyxZQUFZLEVBQUUyQixhQUFhLEVBQUU7SUFDekMsSUFBSUMsTUFBTSxHQUFHLENBQUM7SUFDZCxNQUFNeEMsSUFBSSxHQUFHLEVBQUU7SUFDZixNQUFNeUMsTUFBTSxHQUFHN0IsWUFBWSxDQUFDYSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzdDZSxNQUFNLElBQUksRUFBRTtJQUNaLE9BQU9BLE1BQU0sSUFBSUMsTUFBTSxFQUFFO01BQ3ZCLElBQUlGLGFBQWEsQ0FBQ2xCLEtBQUssS0FBS3BDLFVBQVUsQ0FBQ0csSUFBSSxFQUFFO1FBQzNDLE1BQU1zRCxDQUFDLEdBQUc5QixZQUFZLENBQUNFLFlBQVksQ0FBQzBCLE1BQU0sQ0FBQztRQUMzQ0EsTUFBTSxJQUFJLENBQUM7UUFDWCxJQUFJRSxDQUFDLEtBQUsxRCxtQkFBbUIsRUFBRTtVQUM3QixNQUFNLElBQUkyRCxLQUFLLENBQUUsOEJBQTZCRCxDQUFFLEVBQUMsQ0FBQztRQUNwRDtNQUNGO01BQ0EsTUFBTUUsSUFBSSxHQUFHaEMsWUFBWSxDQUFDRSxZQUFZLENBQUMwQixNQUFNLENBQUM7TUFDOUNBLE1BQU0sSUFBSSxDQUFDO01BQ1gsUUFBUUksSUFBSTtRQUNWLEtBQUtwRCxTQUFTLENBQUNDLElBQUk7VUFBRTtZQUNuQixNQUFNb0QsTUFBTSxHQUFHakMsWUFBWSxDQUFDRSxZQUFZLENBQUMwQixNQUFNLENBQUM7WUFDaERBLE1BQU0sSUFBSSxDQUFDO1lBQ1h4QyxJQUFJLENBQUNaLElBQUksQ0FBQ3dCLFlBQVksQ0FBQ2tDLEtBQUssQ0FBQ04sTUFBTSxFQUFFQSxNQUFNLEdBQUdLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RETCxNQUFNLElBQUlLLE1BQU07WUFDaEI7VUFDRjtRQUNBLEtBQUtyRCxTQUFTLENBQUNFLE9BQU87VUFBRTtZQUN0QixNQUFNbUQsTUFBTSxHQUFHakMsWUFBWSxDQUFDRSxZQUFZLENBQUMwQixNQUFNLENBQUM7WUFDaERBLE1BQU0sSUFBSSxDQUFDO1lBQ1gsTUFBTU8sYUFBYSxHQUFHbkMsWUFBWSxDQUFDa0MsS0FBSyxDQUFDTixNQUFNLEVBQUVBLE1BQU0sR0FBR0ssTUFBTSxDQUFDO1lBQ2pFN0MsSUFBSSxDQUFDWixJQUFJLENBQUMsSUFBQTRELGtCQUFTLEVBQUNELGFBQWEsQ0FBQyxDQUFDO1lBQ25DUCxNQUFNLElBQUlLLE1BQU07WUFDaEI7VUFDRjtRQUNBLEtBQUtyRCxTQUFTLENBQUNHLFFBQVE7VUFDckJLLElBQUksQ0FBQ1osSUFBSSxDQUFDd0IsWUFBWSxDQUFDRSxZQUFZLENBQUMwQixNQUFNLENBQUMsQ0FBQztVQUM1Q0EsTUFBTSxJQUFJLENBQUM7VUFDWDtRQUNGLEtBQUtoRCxTQUFTLENBQUNJLFdBQVc7VUFDeEJJLElBQUksQ0FBQ1osSUFBSSxDQUFDd0IsWUFBWSxDQUFDcUMsZUFBZSxDQUFDVCxNQUFNLENBQUMsQ0FBQztVQUMvQ0EsTUFBTSxJQUFJLENBQUM7VUFDWDtRQUNGLEtBQUtoRCxTQUFTLENBQUNLLFVBQVU7VUFDdkJHLElBQUksQ0FBQ1osSUFBSSxDQUFDd0IsWUFBWSxDQUFDYSxjQUFjLENBQUNlLE1BQU0sQ0FBQyxDQUFDO1VBQzlDQSxNQUFNLElBQUksQ0FBQztVQUNYO1FBQ0Y7VUFDRSxNQUFNLElBQUlHLEtBQUssQ0FBRSxnQkFBZUMsSUFBSyxFQUFDLENBQUM7TUFBQztJQUU5QztJQUNBLE9BQU81QyxJQUFJO0VBQ2I7QUFDRjtBQUFDckIsT0FBQSxDQUFBK0MsYUFBQSxHQUFBQSxhQUFBO0FBRUQsTUFBTXdCLHVCQUF1QixDQUFDO0VBQzVCdkIsV0FBV0EsQ0FBRTNCLElBQUksRUFBRTtJQUNqQixJQUFJLENBQUNBLElBQUksR0FBR0EsSUFBSTtFQUNsQjtBQUNGO0FBRUEsTUFBTTRCLG1CQUFtQixDQUFDO0VBQ3hCRCxXQUFXQSxDQUFBLEVBQUk7SUFDYixJQUFJLENBQUN3QixJQUFJLEdBQUdqRCxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDN0I7RUFLQWlDLFNBQVNBLENBQUVnQixLQUFLLEVBQUU7SUFDaEIsTUFBTXJCLEdBQUcsR0FBRzdCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM1QjRCLEdBQUcsQ0FBQzNCLGFBQWEsQ0FBQ3BCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN6QytDLEdBQUcsQ0FBQzNCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCMkIsR0FBRyxDQUFDM0IsYUFBYSxDQUFDZ0QsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXBCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDO0VBS0FNLFVBQVVBLENBQUVlLEtBQUssRUFBRTtJQUNqQixNQUFNckIsR0FBRyxHQUFHN0IsTUFBTSxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzVCNEIsR0FBRyxDQUFDM0IsYUFBYSxDQUFDcEIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDK0MsR0FBRyxDQUFDM0IsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIyQixHQUFHLENBQUNSLGdCQUFnQixDQUFDNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXBCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDO0VBS0FzQixlQUFlQSxDQUFFRCxLQUFLLEVBQUU7SUFDdEIsTUFBTXJCLEdBQUcsR0FBRzdCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM1QjRCLEdBQUcsQ0FBQzNCLGFBQWEsQ0FBQ3BCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN6QytDLEdBQUcsQ0FBQzNCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCMkIsR0FBRyxDQUFDdUIsWUFBWSxDQUFDRixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQ0QsSUFBSSxHQUFHakQsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDa0IsSUFBSSxFQUFFcEIsR0FBRyxDQUFDLENBQUM7RUFDN0M7RUFLQXdCLGdCQUFnQkEsQ0FBRUgsS0FBSyxFQUFFO0lBQ3ZCLE1BQU1yQixHQUFHLEdBQUc3QixNQUFNLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDNUI0QixHQUFHLENBQUMzQixhQUFhLENBQUNwQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDekMrQyxHQUFHLENBQUMzQixhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QjJCLEdBQUcsQ0FBQ3lCLGVBQWUsQ0FBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXBCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDO0VBS0FPLFlBQVlBLENBQUVjLEtBQUssRUFBRTtJQUNuQixNQUFNckIsR0FBRyxHQUFHLElBQUEwQixnQkFBTyxFQUFDTCxLQUFLLENBQUM7SUFDMUIsTUFBTU0sSUFBSSxHQUFHeEQsTUFBTSxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzdCdUQsSUFBSSxDQUFDdEQsYUFBYSxDQUFDcEIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQzFDMEUsSUFBSSxDQUFDdEQsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEJzRCxJQUFJLENBQUN0RCxhQUFhLENBQUMyQixHQUFHLENBQUNVLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDVSxJQUFJLEdBQUdqRCxNQUFNLENBQUMrQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUNrQixJQUFJLEVBQUVPLElBQUksRUFBRTNCLEdBQUcsQ0FBQyxDQUFDO0VBQ25EO0VBRUFGLFFBQVFBLENBQUEsRUFBSTtJQUNWLE1BQU04QixHQUFHLEdBQUd6RCxNQUFNLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDNUJ3RCxHQUFHLENBQUN2RCxhQUFhLENBQUNyQixzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDNUM0RSxHQUFHLENBQUN2RCxhQUFhLENBQUMsSUFBSSxDQUFDK0MsSUFBSSxDQUFDVixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE9BQU92QyxNQUFNLENBQUMrQixNQUFNLENBQUMsQ0FBQzBCLEdBQUcsRUFBRSxJQUFJLENBQUNSLElBQUksQ0FBQyxDQUFDO0VBQ3hDO0FBQ0Y7QUFBQ3hFLE9BQUEsQ0FBQWlELG1CQUFBLEdBQUFBLG1CQUFBO0FBSUQsTUFBTWdDLFVBQVUsQ0FBQztFQUlmakMsV0FBV0EsQ0FBRWtDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN0QixNQUFNO01BQ0p0RCxVQUFVO01BQ1ZFLFdBQVc7TUFDWHFELFFBQVE7TUFDUnBELFlBQVk7TUFDWkYsaUJBQWlCLEdBQUcsQ0FBQztNQUNyQmEsS0FBSyxHQUFHcEMsVUFBVSxDQUFDSztJQUNyQixDQUFDLEdBQUd1RSxJQUFJO0lBQ1IsSUFBSSxDQUFDRSxjQUFjLEdBQUdDLFNBQVM7SUFDL0IsSUFBSSxDQUFDQyxjQUFjLEdBQUdELFNBQVM7SUFDL0IsSUFBSSxDQUFDRSxXQUFXLEdBQUczRCxVQUFVO0lBQzdCLElBQUksQ0FBQzRELFlBQVksR0FBRzFELFdBQVc7SUFDL0IsSUFBSSxDQUFDMkQsYUFBYSxHQUFHMUQsWUFBWTtJQUNqQyxJQUFJLENBQUMyRCxTQUFTLEdBQUdQLFFBQVE7SUFDekIsSUFBSSxDQUFDUSxrQkFBa0IsR0FBRzlELGlCQUFpQjtJQUMzQyxJQUFJLENBQUMrRCxNQUFNLEdBQUdsRCxLQUFLO0lBQ25CLElBQUksQ0FBQ21ELFdBQVcsR0FBRyxJQUFJOUMsYUFBYSxFQUFFO0VBQ3hDO0VBTUEsSUFBSW5CLFVBQVVBLENBQUEsRUFBSTtJQUFBLElBQUFrRSxvQkFBQTtJQUNoQixRQUFBQSxvQkFBQSxHQUFPLElBQUksQ0FBQ1YsY0FBYyxjQUFBVSxvQkFBQSx1QkFBbkJBLG9CQUFBLENBQXFCbEUsVUFBVTtFQUN4QztFQVFBLElBQUlFLFdBQVdBLENBQUEsRUFBSTtJQUFBLElBQUFpRSxxQkFBQTtJQUNqQixRQUFBQSxxQkFBQSxHQUFPLElBQUksQ0FBQ1gsY0FBYyxjQUFBVyxxQkFBQSx1QkFBbkJBLHFCQUFBLENBQXFCdkQsT0FBTztFQUNyQztFQU9BLElBQUlULFlBQVlBLENBQUEsRUFBSTtJQUFBLElBQUFpRSxxQkFBQTtJQUNsQixRQUFBQSxxQkFBQSxHQUFPLElBQUksQ0FBQ1osY0FBYyxjQUFBWSxxQkFBQSx1QkFBbkJBLHFCQUFBLENBQXFCakUsWUFBWTtFQUMxQztFQU1BLElBQUlvRCxRQUFRQSxDQUFBLEVBQUk7SUFDZCxPQUFPLElBQUksQ0FBQ08sU0FBUztFQUN2QjtFQUtBLElBQUlQLFFBQVFBLENBQUU5RCxJQUFJLEVBQUU7SUFDbEIsSUFBSSxDQUFDcUUsU0FBUyxHQUFHckUsSUFBSTtFQUN2QjtFQU1BLElBQUlRLGlCQUFpQkEsQ0FBQSxFQUFJO0lBQUEsSUFBQW9FLHFCQUFBO0lBQ3ZCLFFBQUFBLHFCQUFBLEdBQU8sSUFBSSxDQUFDYixjQUFjLGNBQUFhLHFCQUFBLHVCQUFuQkEscUJBQUEsQ0FBcUJwRSxpQkFBaUI7RUFDL0M7RUFNQVQsS0FBS0EsQ0FBQSxFQUFJO0lBQ1AsTUFBTThFLEdBQUcsR0FBRyxJQUFJLENBQUNSLFNBQVMsR0FBRyxJQUFBWixnQkFBTyxFQUFDLElBQUksQ0FBQ1ksU0FBUyxDQUFDLEdBQUduRSxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTTJFLEdBQUcsR0FBRyxJQUFJLENBQUNOLFdBQVcsQ0FBQ3pFLEtBQUssRUFBRTtJQUNwQyxNQUFNd0MsYUFBYSxHQUFHbkIsdUJBQXVCLENBQUNyQixLQUFLLENBQUM7TUFDbERzQixLQUFLLEVBQUUsSUFBSSxDQUFDa0QsTUFBTTtNQUNsQmpELFNBQVMsRUFBRXdELEdBQUcsQ0FBQ3JDLE1BQU07TUFHckJqQixXQUFXLEVBQUV1RCxNQUFNLENBQUNELEdBQUcsQ0FBQ3JDLE1BQU0sR0FBR29DLEdBQUcsQ0FBQ3BDLE1BQU07SUFDN0MsQ0FBQyxDQUFDO0lBRUYsTUFBTXhDLGFBQWEsR0FBR0gsZ0JBQWdCLENBQUNDLEtBQUssQ0FBQztNQUMzQ08sYUFBYSxFQUFFNUIsaUNBQWlDLEdBQUdvRyxHQUFHLENBQUNyQyxNQUFNLEdBQUdvQyxHQUFHLENBQUNwQyxNQUFNO01BQzFFbEMsVUFBVSxFQUFFLElBQUksQ0FBQzJELFdBQVc7TUFDNUIxRCxpQkFBaUIsRUFBRSxJQUFJLENBQUM4RCxrQkFBa0I7TUFDMUM3RCxXQUFXLEVBQUUsSUFBSSxDQUFDMEQsWUFBWTtNQUM5QnpELFlBQVksRUFBRSxJQUFJLENBQUMwRDtJQUNyQixDQUFDLENBQUM7SUFDRixPQUFPbEUsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUNoQyxhQUFhLEVBQUVzQyxhQUFhLEVBQUV1QyxHQUFHLEVBQUVELEdBQUcsQ0FBQyxDQUFDO0VBQ2hFO0VBUUEsT0FBT2xFLEtBQUtBLENBQUVxRSxTQUFTLEVBQUVDLFVBQVUsRUFBRTtJQUNuQyxJQUFJekMsTUFBTSxHQUFHLENBQUM7SUFDZCxNQUFNMEMsR0FBRyxHQUFHLElBQUl0QixVQUFVLEVBQUU7SUFDNUJzQixHQUFHLENBQUNuQixjQUFjLEdBQUdqRSxnQkFBZ0IsQ0FBQ2EsS0FBSyxDQUFDcUUsU0FBUyxDQUFDO0lBQ3RELElBQUlFLEdBQUcsQ0FBQ25CLGNBQWMsQ0FBQ3pELGFBQWEsS0FBSyxDQUFDLEVBQUU7TUFDMUMsT0FBTzRFLEdBQUc7SUFDWjtJQUNBQSxHQUFHLENBQUNqQixjQUFjLEdBQUc3Qyx1QkFBdUIsQ0FBQ1QsS0FBSyxDQUFDc0UsVUFBVSxDQUFDbkMsS0FBSyxDQUFDTixNQUFNLEVBQUU5RCxpQ0FBaUMsQ0FBQyxDQUFDO0lBQy9HOEQsTUFBTSxJQUFJOUQsaUNBQWlDO0lBRTNDLElBQUl3RyxHQUFHLENBQUNqQixjQUFjLENBQUN6QyxXQUFXLEtBQUssRUFBRSxFQUFFO01BQ3pDLE9BQU8wRCxHQUFHO0lBQ1o7SUFDQSxJQUFJQSxHQUFHLENBQUNqQixjQUFjLENBQUMzQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO01BQ3BDNEQsR0FBRyxDQUFDVixXQUFXLEdBQUc5QyxhQUFhLENBQUNmLEtBQUssQ0FBQ3NFLFVBQVUsQ0FBQ25DLEtBQUssQ0FBQ04sTUFBTSxFQUFFQSxNQUFNLEdBQUcwQyxHQUFHLENBQUNqQixjQUFjLENBQUMzQyxTQUFTLENBQUMsRUFBRTRELEdBQUcsQ0FBQ2pCLGNBQWMsQ0FBQztNQUMxSHpCLE1BQU0sSUFBSTBDLEdBQUcsQ0FBQ2pCLGNBQWMsQ0FBQzNDLFNBQVM7SUFDeEM7SUFFQSxNQUFNdEIsSUFBSSxHQUFHaUYsVUFBVSxDQUFDbkMsS0FBSyxDQUFDTixNQUFNLEVBQUVBLE1BQU0sR0FBR3lDLFVBQVUsQ0FBQ3hDLE1BQU0sQ0FBQztJQUNqRXlDLEdBQUcsQ0FBQ3BCLFFBQVEsR0FBRzlELElBQUk7SUFDbkIsSUFBSUEsSUFBSSxDQUFDeUMsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNuQixLQUFLLE1BQU0wQyxHQUFHLElBQUksQ0FBQ25DLGtCQUFTLEVBQUVvQyxxQkFBUSxDQUFDQyxXQUFXLENBQUMsRUFBRTtRQUNuRCxJQUFJO1VBQ0ZILEdBQUcsQ0FBQ3BCLFFBQVEsR0FBR3FCLEdBQUcsQ0FBQ25GLElBQUksQ0FBQztVQUN4QjtRQUNGLENBQUMsQ0FBQyxPQUFPc0YsQ0FBQyxFQUFFO1VBQ1ZKLEdBQUcsQ0FBQ3BCLFFBQVEsR0FBRyxJQUFJWix1QkFBdUIsQ0FBQ2xELElBQUksQ0FBQztRQUNsRDtNQUNGO0lBQ0Y7SUFDQSxPQUFPa0YsR0FBRztFQUNaO0FBQ0Y7QUFBQ3ZHLE9BQUEsQ0FBQWlGLFVBQUEsR0FBQUEsVUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"headers.js","names":["_nskeyed","require","_bplistParser","_interopRequireDefault","_lodash","DTX_MESSAGE_PAYLOAD_HEADER_LENGTH","exports","DTX_MESSAGE_HEADER_LENGTH","DTX_MESSAGE_HEADER_MAGIC","DTX_MESSAGE_HEADER_MAGIC_LEN","DTX_MESSAGE_AUX_HEADER","DTX_AUXILIARY_MAGIC","FLAG_TYPES","Object","freeze","push","recv","send","reply","AUX_TYPES","Text","NSKeyed","UInt32LE","BigUInt64LE","BigInt64LE","DTXMessageHeader","build","data","messageHeader","Buffer","alloc","writeUInt32LE","writeUInt16LE","payloadLength","identifier","conversationIndex","channelCode","expectsReply","parse","headerBuffer","magic","readUInt32LE","headerLength","fragmentId","readUInt16LE","fragmentCount","channel","DTXMessagePayloadHeader","flags","auxLength","writeBigUInt64LE","totalLength","readBigInt64LE","DTXMessageAux","constructor","messageAux","DTXMessageAuxBuffer","buf","length","arg","concat","getBytes","_","isNumber","appendInt","appendLong","appendObject","payloadHeader","cursor","m","Error","type","strLen","slice","archived_data","unarchive","readBigUInt64LE","InstrumentRPCParseError","_buf","value","appendSignedInt","writeInt32LE","appendSignedLong","writeBigInt64LE","archive","buf2","out","DTXMessage","opts","selector","_messageHeader","undefined","_payloadHeader","_identifier","_channelCode","_expectsReply","_selector","_conversationIndex","_flags","auxiliaries","_this$_messageHeader","_this$_messageHeader2","_this$_messageHeader3","_this$_messageHeader4","sel","aux","BigInt","headerBuf","payloadBuf","ret","fun","plistlib","parseBuffer","e"],"sources":["../../../lib/instrument/headers.js"],"sourcesContent":["import {archive, unarchive} from './transformer/nskeyed';\nimport plistlib from 'bplist-parser';\nimport _ from 'lodash';\n\nconst DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = 16;\nconst DTX_MESSAGE_HEADER_LENGTH = 32;\nconst DTX_MESSAGE_HEADER_MAGIC = 0x1F3D5B79;\nconst DTX_MESSAGE_HEADER_MAGIC_LEN = 4;\nconst DTX_MESSAGE_AUX_HEADER = 0x01F0;\nconst DTX_AUXILIARY_MAGIC = 0xa;\n\nconst FLAG_TYPES = Object.freeze({\n push: 0,\n recv: 1,\n send: 2,\n reply: 3\n});\n\nconst AUX_TYPES = Object.freeze({\n Text: 1,\n NSKeyed: 2,\n UInt32LE: 3,\n BigUInt64LE: 4,\n BigInt64LE: 6\n});\n\n/**\n * DTXMessageHeader length 32\n * struct DTXMessageHeader {\n * u32 magic DTX_MESSAGE_HEADER_MAGIC\n * u32 headerLength\n * u16 fragmentId packet number\n * u16 fragmentCount packets total number\n * u32 payloadLength\n * u32 identifier\n * u32 conversationIndex\n * u32 channel\n * u32 expectsReply\n * }\n */\n\n/**\n * @typedef {Object} DTXMessageOptions\n * @property {number} identifier packet transmission sequence, this value is incremented for each request\n * @property {number} channelCode the data transmission of the service will use this channel code.\n * Each service has a separate channel\n * @property {?number} payloadLength DTXMessageAuxBuffer.length(nullable) + selectorBuffer.length(nullable)\n * @property {boolean} expectsReply if true reply a ack message\n * @property {number} conversationIndex raw data +1 indicate a reply message\n * @property {number} flags message status\n */\n\nclass DTXMessageHeader {\n /**\n * @param {DTXMessageOptions} data\n * @returns {Buffer} DTXMessageHeaderBuffer\n */\n static build (data) {\n const messageHeader = Buffer.alloc(DTX_MESSAGE_HEADER_LENGTH);\n messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_MAGIC, 0);\n messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_LENGTH, 4);\n messageHeader.writeUInt16LE(0, 8);\n messageHeader.writeUInt16LE(1, 10);\n messageHeader.writeUInt32LE(data.payloadLength, 12);\n messageHeader.writeUInt32LE(data.identifier, 16);\n messageHeader.writeUInt32LE(data.conversationIndex, 20);\n messageHeader.writeUInt32LE(data.channelCode, 24);\n messageHeader.writeUInt32LE(data.expectsReply, 28);\n return messageHeader;\n }\n\n /**\n * @param headerBuffer DTXMessageHeaderBuffer\n * @returns {Object}\n */\n static parse (headerBuffer) {\n return {\n magic: headerBuffer.readUInt32LE(0),\n headerLength: headerBuffer.readUInt32LE(4),\n fragmentId: headerBuffer.readUInt16LE(8),\n fragmentCount: headerBuffer.readUInt16LE(10),\n payloadLength: headerBuffer.readUInt32LE(12),\n identifier: headerBuffer.readUInt32LE(16),\n conversationIndex: headerBuffer.readUInt32LE(20),\n channel: headerBuffer.readUInt32LE(24),\n expectsReply: headerBuffer.readUInt32LE(28),\n };\n }\n}\n\n/**\n * DTXMessagePayloadHeader length 16\n * struct DTXMessageHeader {\n * u32 flags FLAG_TYPES\n * u32 auxLength\n * u64 totalLength\n * }\n */\n\n/**\n * @typedef {Object} DTXMessagePayloadHeaderObject\n * @property {number} flags message status\n * @property {number} auxLength DTXMessageAuxBuffer.length(nullable)\n * @property {bigint} totalLength DTXMessageAuxBuffer.length(nullable) + selectorBuffer.length\n */\nclass DTXMessagePayloadHeader {\n /**\n * @param data {DTXMessagePayloadHeaderObject}\n * @returns {Buffer} DTXMessagePayloadHeaderBuffer\n */\n static build (data) {\n const messageHeader = Buffer.alloc(DTX_MESSAGE_PAYLOAD_HEADER_LENGTH);\n messageHeader.writeUInt32LE(data.flags, 0);\n messageHeader.writeUInt32LE(data.auxLength, 4);\n messageHeader.writeBigUInt64LE(data.totalLength, 8);\n return messageHeader;\n }\n\n /**\n * @param headerBuffer\n * @returns {DTXMessagePayloadHeaderObject}\n */\n static parse (headerBuffer) {\n return {\n flags: headerBuffer.readUInt32LE(0),\n auxLength: headerBuffer.readUInt32LE(4),\n totalLength: headerBuffer.readBigInt64LE(8)\n };\n }\n}\n\n\nclass DTXMessageAux {\n constructor (data = []) {\n this.data = data;\n }\n\n /**\n * JS Array to Apple NSKeyed Buffer\n * @returns {Buffer}\n */\n build () {\n const messageAux = new DTXMessageAuxBuffer();\n let buf = Buffer.alloc(0);\n if (this.data.length === 0) {\n return buf;\n }\n for (const arg of this.data) {\n if (arg instanceof DTXMessageAuxBuffer) {\n buf = Buffer.concat([buf, arg.getBytes()]);\n } else if (_.isNumber(arg)) {\n messageAux.appendInt(arg);\n } else if (typeof arg == 'bigint') {\n messageAux.appendLong(arg);\n } else {\n messageAux.appendObject(arg);\n }\n }\n return Buffer.concat([buf, messageAux.getBytes()]);\n }\n\n /**\n * Parses nskeyed Buffer into js array\n * @param {Buffer} headerBuffer\n * @param {DTXMessagePayloadHeaderObject} payloadHeader\n * @returns {Array}\n */\n static parse (headerBuffer, payloadHeader) {\n let cursor = 0;\n const data = [];\n const length = headerBuffer.readBigInt64LE(8);\n cursor += 16;\n while (cursor <= length) {\n if (payloadHeader.flags !== FLAG_TYPES.push) {\n const m = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n if (m !== DTX_AUXILIARY_MAGIC) {\n throw new Error(`incorrect auxiliary magic: ${m}`);\n }\n }\n const type = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n switch (type) {\n case AUX_TYPES.Text: {\n const strLen = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n data.push(headerBuffer.slice(cursor, cursor + strLen));\n cursor += strLen;\n break;\n }\n case AUX_TYPES.NSKeyed: {\n const strLen = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n const archived_data = headerBuffer.slice(cursor, cursor + strLen);\n data.push(unarchive(archived_data));\n cursor += strLen;\n break;\n }\n case AUX_TYPES.UInt32LE:\n data.push(headerBuffer.readUInt32LE(cursor));\n cursor += 4;\n break;\n case AUX_TYPES.BigUInt64LE:\n data.push(headerBuffer.readBigUInt64LE(cursor));\n cursor += 8;\n break;\n case AUX_TYPES.BigInt64LE:\n data.push(headerBuffer.readBigInt64LE(cursor));\n cursor += 8;\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n return data;\n }\n}\n\nclass InstrumentRPCParseError {\n constructor (data) {\n this.data = data;\n }\n}\n\nclass DTXMessageAuxBuffer {\n constructor () {\n this._buf = Buffer.alloc(0);\n }\n\n /**\n * @param {number} value\n */\n appendInt (value) {\n const buf = Buffer.alloc(12);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(3, 4);\n buf.writeUInt32LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {bigint} value\n */\n appendLong (value) {\n const buf = Buffer.alloc(16);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(4, 4);\n buf.writeBigUInt64LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {number} value\n */\n appendSignedInt (value) {\n const buf = Buffer.alloc(12);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(3, 4);\n buf.writeInt32LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {bigint} value\n */\n appendSignedLong (value) {\n const buf = Buffer.alloc(16);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(6, 4);\n buf.writeBigInt64LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {Object} value\n */\n appendObject (value) {\n const buf = archive(value);\n const buf2 = Buffer.alloc(12);\n buf2.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf2.writeUInt32LE(2, 4);\n buf2.writeUInt32LE(buf.length, 8);\n this._buf = Buffer.concat([this._buf, buf2, buf]);\n }\n\n getBytes () {\n const out = Buffer.alloc(16);\n out.writeUInt32LE(DTX_MESSAGE_AUX_HEADER, 0);\n out.writeUInt32LE(this._buf.length, 8);\n return Buffer.concat([out, this._buf]);\n }\n}\n\n\n\nclass DTXMessage {\n /**\n * @param {DTXMessageOptions} opts\n */\n constructor (opts = {}) {\n const {\n identifier,\n channelCode,\n selector,\n expectsReply,\n conversationIndex = 0,\n flags = FLAG_TYPES.send\n } = opts;\n this._messageHeader = undefined;\n this._payloadHeader = undefined;\n this._identifier = identifier;\n this._channelCode = channelCode;\n this._expectsReply = expectsReply;\n this._selector = selector;\n this._conversationIndex = conversationIndex;\n this._flags = flags;\n this.auxiliaries = new DTXMessageAux();\n }\n\n /**\n * get DTXMessageHeader identifier. Packet transmission sequence\n * @returns {number}\n */\n get identifier () {\n return this._messageHeader?.identifier;\n }\n\n /**\n * get DTXMessageHeader channelCode.\n * Packet transmission channelCode. Use this value to distinguish when there are multiple channels\n * call this method `InstrumentService.registerChannelCallback` get the channel message\n * @returns {number}\n */\n get channelCode () {\n return this._messageHeader?.channel;\n }\n\n /**\n * get DTXMessageHeader expectsReply. Whether to need ack message\n * if expectsReply is true must reply ack message\n * @returns {boolean}\n */\n get expectsReply () {\n return this._messageHeader?.expectsReply;\n }\n\n /**\n * call this method `InstrumentService.registerSelectorCallback` get the selector message\n * @returns {*} Unknown data\n */\n get selector () {\n return this._selector;\n }\n\n /**\n * @param data\n */\n set selector (data) {\n this._selector = data;\n }\n\n /**\n * get DTXMessageHeader conversationIndex\n * @returns {number}\n */\n get conversationIndex () {\n return this._messageHeader?.conversationIndex;\n }\n\n /**\n * DTXMessage Buffer: DTXMessageHeader + PayloadHeader + DTXMessageAuxBuffer(nullable) + selector(nullable)\n * @returns {Buffer}\n */\n build () {\n const sel = this._selector ? archive(this._selector) : Buffer.alloc(0);\n const aux = this.auxiliaries.build();\n const payloadHeader = DTXMessagePayloadHeader.build({\n flags: this._flags,\n auxLength: aux.length,\n // need to convert to bigint in any case\n // eslint-disable-next-line no-undef\n totalLength: BigInt(aux.length + sel.length),\n });\n\n const messageHeader = DTXMessageHeader.build({\n payloadLength: DTX_MESSAGE_PAYLOAD_HEADER_LENGTH + aux.length + sel.length,\n identifier: this._identifier,\n conversationIndex: this._conversationIndex,\n channelCode: this._channelCode,\n expectsReply: this._expectsReply\n });\n return Buffer.concat([messageHeader, payloadHeader, aux, sel]);\n }\n\n /**\n * Parses DTX buffer into an js object. Returned in DTXDecoder Stream.Transform\n * @param {Buffer} headerBuf DTXMessageHeader buffer\n * @param {Buffer} payloadBuf PayloadHeaderBuffer + DTXMessageAuxBuffer(nullable) + selectorBuffer(nullable)\n * @returns {DTXMessage}\n */\n static parse (headerBuf, payloadBuf) {\n let cursor = 0;\n const ret = new DTXMessage();\n ret._messageHeader = DTXMessageHeader.parse(headerBuf);\n if (ret._messageHeader.payloadLength === 0) {\n return ret;\n }\n ret._payloadHeader = DTXMessagePayloadHeader.parse(payloadBuf.slice(cursor, DTX_MESSAGE_PAYLOAD_HEADER_LENGTH));\n cursor += DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;\n // totalLength is bigint use 0n\n if (ret._payloadHeader.totalLength === 0n) {\n return ret;\n }\n if (ret._payloadHeader.auxLength > 0) {\n ret.auxiliaries = DTXMessageAux.parse(payloadBuf.slice(cursor, cursor + ret._payloadHeader.auxLength), ret._payloadHeader);\n cursor += ret._payloadHeader.auxLength;\n }\n\n const data = payloadBuf.slice(cursor, cursor + payloadBuf.length);\n ret.selector = data;\n if (data.length > 0) {\n for (const fun of [unarchive, plistlib.parseBuffer]) {\n try {\n ret.selector = fun(data);\n break;\n } catch (e) {\n ret.selector = new InstrumentRPCParseError(data);\n }\n }\n }\n return ret;\n }\n}\n\nexport { DTXMessageHeader, DTXMessagePayloadHeader, DTXMessageAuxBuffer, DTXMessageAux, DTXMessage,\n DTX_MESSAGE_PAYLOAD_HEADER_LENGTH, DTX_MESSAGE_HEADER_LENGTH, DTX_MESSAGE_HEADER_MAGIC, DTX_MESSAGE_HEADER_MAGIC_LEN,\n FLAG_TYPES};\n"],"mappings":"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"}
1
+ {"version":3,"file":"headers.js","names":["_nskeyed","require","_bplistParser","_interopRequireDefault","_lodash","DTX_MESSAGE_PAYLOAD_HEADER_LENGTH","exports","DTX_MESSAGE_HEADER_LENGTH","DTX_MESSAGE_HEADER_MAGIC","DTX_MESSAGE_HEADER_MAGIC_LEN","DTX_MESSAGE_AUX_HEADER","DTX_AUXILIARY_MAGIC","FLAG_TYPES","Object","freeze","push","recv","send","reply","AUX_TYPES","Text","NSKeyed","UInt32LE","BigUInt64LE","BigInt64LE","DTXMessageHeader","build","data","messageHeader","Buffer","alloc","writeUInt32LE","writeUInt16LE","payloadLength","identifier","conversationIndex","channelCode","expectsReply","parse","headerBuffer","magic","readUInt32LE","headerLength","fragmentId","readUInt16LE","fragmentCount","channel","DTXMessagePayloadHeader","flags","auxLength","writeBigUInt64LE","totalLength","readBigInt64LE","DTXMessageAux","constructor","DTXMessageAuxBuffer","getBytes","messageAux","buf","arg","concat","_","isNumber","appendInt","appendLong","appendObject","payloadHeader","cursor","length","m","Error","type","strLen","slice","archived_data","unarchive","readBigUInt64LE","InstrumentRPCParseError","_buf","value","appendSignedInt","writeInt32LE","appendSignedLong","writeBigInt64LE","archive","buf2","out","DTXMessage","opts","selector","_messageHeader","undefined","_payloadHeader","_identifier","_channelCode","_expectsReply","_selector","_conversationIndex","_flags","auxiliaries","_this$_messageHeader","_this$_messageHeader2","_this$_messageHeader3","_this$_messageHeader4","sel","aux","BigInt","headerBuf","payloadBuf","ret","fun","plistlib","parseBuffer","e"],"sources":["../../../lib/instrument/headers.js"],"sourcesContent":["import {archive, unarchive} from './transformer/nskeyed';\nimport plistlib from 'bplist-parser';\nimport _ from 'lodash';\n\nconst DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = 16;\nconst DTX_MESSAGE_HEADER_LENGTH = 32;\nconst DTX_MESSAGE_HEADER_MAGIC = 0x1F3D5B79;\nconst DTX_MESSAGE_HEADER_MAGIC_LEN = 4;\nconst DTX_MESSAGE_AUX_HEADER = 0x01F0;\nconst DTX_AUXILIARY_MAGIC = 0xa;\n\nconst FLAG_TYPES = Object.freeze({\n push: 0,\n recv: 1,\n send: 2,\n reply: 3\n});\n\nconst AUX_TYPES = Object.freeze({\n Text: 1,\n NSKeyed: 2,\n UInt32LE: 3,\n BigUInt64LE: 4,\n BigInt64LE: 6\n});\n\n/**\n * DTXMessageHeader length 32\n * struct DTXMessageHeader {\n * u32 magic DTX_MESSAGE_HEADER_MAGIC\n * u32 headerLength\n * u16 fragmentId packet number\n * u16 fragmentCount packets total number\n * u32 payloadLength\n * u32 identifier\n * u32 conversationIndex\n * u32 channel\n * u32 expectsReply\n * }\n */\n\n/**\n * @typedef {Object} DTXMessageOptions\n * @property {number} identifier packet transmission sequence, this value is incremented for each request\n * @property {number} channelCode the data transmission of the service will use this channel code.\n * Each service has a separate channel\n * @property {?number} payloadLength DTXMessageAuxBuffer.length(nullable) + selectorBuffer.length(nullable)\n * @property {boolean} expectsReply if true reply a ack message\n * @property {number} conversationIndex raw data +1 indicate a reply message\n * @property {number} flags message status\n */\n\nclass DTXMessageHeader {\n /**\n * @param {DTXMessageOptions} data\n * @returns {Buffer} DTXMessageHeaderBuffer\n */\n static build (data) {\n const messageHeader = Buffer.alloc(DTX_MESSAGE_HEADER_LENGTH);\n messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_MAGIC, 0);\n messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_LENGTH, 4);\n messageHeader.writeUInt16LE(0, 8);\n messageHeader.writeUInt16LE(1, 10);\n messageHeader.writeUInt32LE(data.payloadLength, 12);\n messageHeader.writeUInt32LE(data.identifier, 16);\n messageHeader.writeUInt32LE(data.conversationIndex, 20);\n messageHeader.writeUInt32LE(data.channelCode, 24);\n messageHeader.writeUInt32LE(data.expectsReply, 28);\n return messageHeader;\n }\n\n /**\n * @param headerBuffer DTXMessageHeaderBuffer\n * @returns {Object}\n */\n static parse (headerBuffer) {\n return {\n magic: headerBuffer.readUInt32LE(0),\n headerLength: headerBuffer.readUInt32LE(4),\n fragmentId: headerBuffer.readUInt16LE(8),\n fragmentCount: headerBuffer.readUInt16LE(10),\n payloadLength: headerBuffer.readUInt32LE(12),\n identifier: headerBuffer.readUInt32LE(16),\n conversationIndex: headerBuffer.readUInt32LE(20),\n channel: headerBuffer.readUInt32LE(24),\n expectsReply: headerBuffer.readUInt32LE(28),\n };\n }\n}\n\n/**\n * DTXMessagePayloadHeader length 16\n * struct DTXMessageHeader {\n * u32 flags FLAG_TYPES\n * u32 auxLength\n * u64 totalLength\n * }\n */\n\n/**\n * @typedef {Object} DTXMessagePayloadHeaderObject\n * @property {number} flags message status\n * @property {number} auxLength DTXMessageAuxBuffer.length(nullable)\n * @property {bigint} totalLength DTXMessageAuxBuffer.length(nullable) + selectorBuffer.length\n */\nclass DTXMessagePayloadHeader {\n /**\n * @param data {DTXMessagePayloadHeaderObject}\n * @returns {Buffer} DTXMessagePayloadHeaderBuffer\n */\n static build (data) {\n const messageHeader = Buffer.alloc(DTX_MESSAGE_PAYLOAD_HEADER_LENGTH);\n messageHeader.writeUInt32LE(data.flags, 0);\n messageHeader.writeUInt32LE(data.auxLength, 4);\n messageHeader.writeBigUInt64LE(data.totalLength, 8);\n return messageHeader;\n }\n\n /**\n * @param headerBuffer\n * @returns {DTXMessagePayloadHeaderObject}\n */\n static parse (headerBuffer) {\n return {\n flags: headerBuffer.readUInt32LE(0),\n auxLength: headerBuffer.readUInt32LE(4),\n totalLength: headerBuffer.readBigInt64LE(8)\n };\n }\n}\n\n\nclass DTXMessageAux {\n /**\n * @param {any[] | DTXMessageAuxBuffer} data\n */\n constructor (data = []) {\n this.data = data;\n }\n\n /**\n * JS Array to Apple NSKeyed Buffer\n * @returns {Buffer}\n */\n build () {\n if (this.data instanceof DTXMessageAuxBuffer) {\n return this.data.getBytes();\n }\n const messageAux = new DTXMessageAuxBuffer();\n let buf = Buffer.alloc(0);\n for (const arg of this.data) {\n if (arg instanceof DTXMessageAuxBuffer) {\n buf = Buffer.concat([buf, arg.getBytes()]);\n } else if (_.isNumber(arg)) {\n messageAux.appendInt(arg);\n } else if (typeof arg == 'bigint') {\n messageAux.appendLong(arg);\n } else {\n messageAux.appendObject(arg);\n }\n }\n return Buffer.concat([buf, messageAux.getBytes()]);\n }\n\n /**\n * Parses nskeyed Buffer into js array\n * @param {Buffer} headerBuffer\n * @param {DTXMessagePayloadHeaderObject} payloadHeader\n * @returns {Array}\n */\n static parse (headerBuffer, payloadHeader) {\n let cursor = 0;\n const data = [];\n const length = headerBuffer.readBigInt64LE(8);\n cursor += 16;\n while (cursor <= length) {\n if (payloadHeader.flags !== FLAG_TYPES.push) {\n const m = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n if (m !== DTX_AUXILIARY_MAGIC) {\n throw new Error(`incorrect auxiliary magic: ${m}`);\n }\n }\n const type = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n switch (type) {\n case AUX_TYPES.Text: {\n const strLen = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n data.push(headerBuffer.slice(cursor, cursor + strLen));\n cursor += strLen;\n break;\n }\n case AUX_TYPES.NSKeyed: {\n const strLen = headerBuffer.readUInt32LE(cursor);\n cursor += 4;\n const archived_data = headerBuffer.slice(cursor, cursor + strLen);\n data.push(unarchive(archived_data));\n cursor += strLen;\n break;\n }\n case AUX_TYPES.UInt32LE:\n data.push(headerBuffer.readUInt32LE(cursor));\n cursor += 4;\n break;\n case AUX_TYPES.BigUInt64LE:\n data.push(headerBuffer.readBigUInt64LE(cursor));\n cursor += 8;\n break;\n case AUX_TYPES.BigInt64LE:\n data.push(headerBuffer.readBigInt64LE(cursor));\n cursor += 8;\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n return data;\n }\n}\n\nclass InstrumentRPCParseError {\n constructor (data) {\n this.data = data;\n }\n}\n\nclass DTXMessageAuxBuffer {\n constructor () {\n this._buf = Buffer.alloc(0);\n }\n\n /**\n * @param {number} value\n */\n appendInt (value) {\n const buf = Buffer.alloc(12);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(3, 4);\n buf.writeUInt32LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {bigint} value\n */\n appendLong (value) {\n const buf = Buffer.alloc(16);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(4, 4);\n buf.writeBigUInt64LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {number} value\n */\n appendSignedInt (value) {\n const buf = Buffer.alloc(12);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(3, 4);\n buf.writeInt32LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {bigint} value\n */\n appendSignedLong (value) {\n const buf = Buffer.alloc(16);\n buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf.writeUInt32LE(6, 4);\n buf.writeBigInt64LE(value, 8);\n this._buf = Buffer.concat([this._buf, buf]);\n }\n\n /**\n * @param {Object} value\n */\n appendObject (value) {\n const buf = archive(value);\n const buf2 = Buffer.alloc(12);\n buf2.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);\n buf2.writeUInt32LE(2, 4);\n buf2.writeUInt32LE(buf.length, 8);\n this._buf = Buffer.concat([this._buf, buf2, buf]);\n }\n\n getBytes () {\n const out = Buffer.alloc(16);\n out.writeUInt32LE(DTX_MESSAGE_AUX_HEADER, 0);\n out.writeUInt32LE(this._buf.length, 8);\n return Buffer.concat([out, this._buf]);\n }\n}\n\n\n\nclass DTXMessage {\n /**\n * @param {DTXMessageOptions} opts\n */\n constructor (opts = {}) {\n const {\n identifier,\n channelCode,\n selector,\n expectsReply,\n conversationIndex = 0,\n flags = FLAG_TYPES.send\n } = opts;\n this._messageHeader = undefined;\n this._payloadHeader = undefined;\n this._identifier = identifier;\n this._channelCode = channelCode;\n this._expectsReply = expectsReply;\n this._selector = selector;\n this._conversationIndex = conversationIndex;\n this._flags = flags;\n this.auxiliaries = new DTXMessageAux();\n }\n\n /**\n * get DTXMessageHeader identifier. Packet transmission sequence\n * @returns {number}\n */\n get identifier () {\n return this._messageHeader?.identifier;\n }\n\n /**\n * get DTXMessageHeader channelCode.\n * Packet transmission channelCode. Use this value to distinguish when there are multiple channels\n * call this method `InstrumentService.registerChannelCallback` get the channel message\n * @returns {number}\n */\n get channelCode () {\n return this._messageHeader?.channel;\n }\n\n /**\n * get DTXMessageHeader expectsReply. Whether to need ack message\n * if expectsReply is true must reply ack message\n * @returns {boolean}\n */\n get expectsReply () {\n return this._messageHeader?.expectsReply;\n }\n\n /**\n * call this method `InstrumentService.registerSelectorCallback` get the selector message\n * @returns {*} Unknown data\n */\n get selector () {\n return this._selector;\n }\n\n /**\n * @param data\n */\n set selector (data) {\n this._selector = data;\n }\n\n /**\n * get DTXMessageHeader conversationIndex\n * @returns {number}\n */\n get conversationIndex () {\n return this._messageHeader?.conversationIndex;\n }\n\n /**\n * DTXMessage Buffer: DTXMessageHeader + PayloadHeader + DTXMessageAuxBuffer(nullable) + selector(nullable)\n * @returns {Buffer}\n */\n build () {\n const sel = this._selector ? archive(this._selector) : Buffer.alloc(0);\n const aux = this.auxiliaries.build();\n const payloadHeader = DTXMessagePayloadHeader.build({\n flags: this._flags,\n auxLength: aux.length,\n // need to convert to bigint in any case\n // eslint-disable-next-line no-undef\n totalLength: BigInt(aux.length + sel.length),\n });\n\n const messageHeader = DTXMessageHeader.build({\n payloadLength: DTX_MESSAGE_PAYLOAD_HEADER_LENGTH + aux.length + sel.length,\n identifier: this._identifier,\n conversationIndex: this._conversationIndex,\n channelCode: this._channelCode,\n expectsReply: this._expectsReply\n });\n return Buffer.concat([messageHeader, payloadHeader, aux, sel]);\n }\n\n /**\n * Parses DTX buffer into an js object. Returned in DTXDecoder Stream.Transform\n * @param {Buffer} headerBuf DTXMessageHeader buffer\n * @param {Buffer} payloadBuf PayloadHeaderBuffer + DTXMessageAuxBuffer(nullable) + selectorBuffer(nullable)\n * @returns {DTXMessage}\n */\n static parse (headerBuf, payloadBuf) {\n let cursor = 0;\n const ret = new DTXMessage();\n ret._messageHeader = DTXMessageHeader.parse(headerBuf);\n if (ret._messageHeader.payloadLength === 0) {\n return ret;\n }\n ret._payloadHeader = DTXMessagePayloadHeader.parse(payloadBuf.slice(cursor, DTX_MESSAGE_PAYLOAD_HEADER_LENGTH));\n cursor += DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;\n // totalLength is bigint use 0n\n if (ret._payloadHeader.totalLength === 0n) {\n return ret;\n }\n if (ret._payloadHeader.auxLength > 0) {\n ret.auxiliaries = DTXMessageAux.parse(payloadBuf.slice(cursor, cursor + ret._payloadHeader.auxLength), ret._payloadHeader);\n cursor += ret._payloadHeader.auxLength;\n }\n\n const data = payloadBuf.slice(cursor, cursor + payloadBuf.length);\n ret.selector = data;\n if (data.length > 0) {\n for (const fun of [unarchive, plistlib.parseBuffer]) {\n try {\n ret.selector = fun(data);\n break;\n } catch (e) {\n ret.selector = new InstrumentRPCParseError(data);\n }\n }\n }\n return ret;\n }\n}\n\nexport { DTXMessageHeader, DTXMessagePayloadHeader, DTXMessageAuxBuffer, DTXMessageAux, DTXMessage,\n DTX_MESSAGE_PAYLOAD_HEADER_LENGTH, DTX_MESSAGE_HEADER_LENGTH, DTX_MESSAGE_HEADER_MAGIC, DTX_MESSAGE_HEADER_MAGIC_LEN,\n FLAG_TYPES};\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AAEA,MAAMI,iCAAiC,GAAG,EAAE;AAACC,OAAA,CAAAD,iCAAA,GAAAA,iCAAA;AAC7C,MAAME,yBAAyB,GAAG,EAAE;AAACD,OAAA,CAAAC,yBAAA,GAAAA,yBAAA;AACrC,MAAMC,wBAAwB,GAAG,UAAU;AAACF,OAAA,CAAAE,wBAAA,GAAAA,wBAAA;AAC5C,MAAMC,4BAA4B,GAAG,CAAC;AAACH,OAAA,CAAAG,4BAAA,GAAAA,4BAAA;AACvC,MAAMC,sBAAsB,GAAG,MAAM;AACrC,MAAMC,mBAAmB,GAAG,GAAG;AAE/B,MAAMC,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC/BC,IAAI,EAAE,CAAC;EACPC,IAAI,EAAE,CAAC;EACPC,IAAI,EAAE,CAAC;EACPC,KAAK,EAAE;AACT,CAAC,CAAC;AAACZ,OAAA,CAAAM,UAAA,GAAAA,UAAA;AAEH,MAAMO,SAAS,GAAGN,MAAM,CAACC,MAAM,CAAC;EAC9BM,IAAI,EAAE,CAAC;EACPC,OAAO,EAAE,CAAC;EACVC,QAAQ,EAAE,CAAC;EACXC,WAAW,EAAE,CAAC;EACdC,UAAU,EAAE;AACd,CAAC,CAAC;AA4BF,MAAMC,gBAAgB,CAAC;EAKrB,OAAOC,KAAKA,CAAEC,IAAI,EAAE;IAClB,MAAMC,aAAa,GAAGC,MAAM,CAACC,KAAK,CAACvB,yBAAyB,CAAC;IAC7DqB,aAAa,CAACG,aAAa,CAACvB,wBAAwB,EAAE,CAAC,CAAC;IACxDoB,aAAa,CAACG,aAAa,CAACxB,yBAAyB,EAAE,CAAC,CAAC;IACzDqB,aAAa,CAACI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACjCJ,aAAa,CAACI,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;IAClCJ,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACM,aAAa,EAAE,EAAE,CAAC;IACnDL,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACO,UAAU,EAAE,EAAE,CAAC;IAChDN,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACQ,iBAAiB,EAAE,EAAE,CAAC;IACvDP,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACS,WAAW,EAAE,EAAE,CAAC;IACjDR,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACU,YAAY,EAAE,EAAE,CAAC;IAClD,OAAOT,aAAa;EACtB;EAMA,OAAOU,KAAKA,CAAEC,YAAY,EAAE;IAC1B,OAAO;MACLC,KAAK,EAAED,YAAY,CAACE,YAAY,CAAC,CAAC,CAAC;MACnCC,YAAY,EAAEH,YAAY,CAACE,YAAY,CAAC,CAAC,CAAC;MAC1CE,UAAU,EAAEJ,YAAY,CAACK,YAAY,CAAC,CAAC,CAAC;MACxCC,aAAa,EAAEN,YAAY,CAACK,YAAY,CAAC,EAAE,CAAC;MAC5CX,aAAa,EAAEM,YAAY,CAACE,YAAY,CAAC,EAAE,CAAC;MAC5CP,UAAU,EAAEK,YAAY,CAACE,YAAY,CAAC,EAAE,CAAC;MACzCN,iBAAiB,EAAEI,YAAY,CAACE,YAAY,CAAC,EAAE,CAAC;MAChDK,OAAO,EAAEP,YAAY,CAACE,YAAY,CAAC,EAAE,CAAC;MACtCJ,YAAY,EAAEE,YAAY,CAACE,YAAY,CAAC,EAAE;IAC5C,CAAC;EACH;AACF;AAACnC,OAAA,CAAAmB,gBAAA,GAAAA,gBAAA;AAiBD,MAAMsB,uBAAuB,CAAC;EAK5B,OAAOrB,KAAKA,CAAEC,IAAI,EAAE;IAClB,MAAMC,aAAa,GAAGC,MAAM,CAACC,KAAK,CAACzB,iCAAiC,CAAC;IACrEuB,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACqB,KAAK,EAAE,CAAC,CAAC;IAC1CpB,aAAa,CAACG,aAAa,CAACJ,IAAI,CAACsB,SAAS,EAAE,CAAC,CAAC;IAC9CrB,aAAa,CAACsB,gBAAgB,CAACvB,IAAI,CAACwB,WAAW,EAAE,CAAC,CAAC;IACnD,OAAOvB,aAAa;EACtB;EAMA,OAAOU,KAAKA,CAAEC,YAAY,EAAE;IAC1B,OAAO;MACLS,KAAK,EAAET,YAAY,CAACE,YAAY,CAAC,CAAC,CAAC;MACnCQ,SAAS,EAAEV,YAAY,CAACE,YAAY,CAAC,CAAC,CAAC;MACvCU,WAAW,EAAEZ,YAAY,CAACa,cAAc,CAAC,CAAC;IAC5C,CAAC;EACH;AACF;AAAC9C,OAAA,CAAAyC,uBAAA,GAAAA,uBAAA;AAGD,MAAMM,aAAa,CAAC;EAIlBC,WAAWA,CAAE3B,IAAI,GAAG,EAAE,EAAE;IACtB,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAMAD,KAAKA,CAAA,EAAI;IACP,IAAI,IAAI,CAACC,IAAI,YAAY4B,mBAAmB,EAAE;MAC5C,OAAO,IAAI,CAAC5B,IAAI,CAAC6B,QAAQ,EAAE;IAC7B;IACA,MAAMC,UAAU,GAAG,IAAIF,mBAAmB,EAAE;IAC5C,IAAIG,GAAG,GAAG7B,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;IACzB,KAAK,MAAM6B,GAAG,IAAI,IAAI,CAAChC,IAAI,EAAE;MAC3B,IAAIgC,GAAG,YAAYJ,mBAAmB,EAAE;QACtCG,GAAG,GAAG7B,MAAM,CAAC+B,MAAM,CAAC,CAACF,GAAG,EAAEC,GAAG,CAACH,QAAQ,EAAE,CAAC,CAAC;MAC5C,CAAC,MAAM,IAAIK,eAAC,CAACC,QAAQ,CAACH,GAAG,CAAC,EAAE;QAC1BF,UAAU,CAACM,SAAS,CAACJ,GAAG,CAAC;MAC3B,CAAC,MAAM,IAAI,OAAOA,GAAG,IAAI,QAAQ,EAAE;QACjCF,UAAU,CAACO,UAAU,CAACL,GAAG,CAAC;MAC5B,CAAC,MAAM;QACLF,UAAU,CAACQ,YAAY,CAACN,GAAG,CAAC;MAC9B;IACF;IACA,OAAO9B,MAAM,CAAC+B,MAAM,CAAC,CAACF,GAAG,EAAED,UAAU,CAACD,QAAQ,EAAE,CAAC,CAAC;EACpD;EAQA,OAAOlB,KAAKA,CAAEC,YAAY,EAAE2B,aAAa,EAAE;IACzC,IAAIC,MAAM,GAAG,CAAC;IACd,MAAMxC,IAAI,GAAG,EAAE;IACf,MAAMyC,MAAM,GAAG7B,YAAY,CAACa,cAAc,CAAC,CAAC,CAAC;IAC7Ce,MAAM,IAAI,EAAE;IACZ,OAAOA,MAAM,IAAIC,MAAM,EAAE;MACvB,IAAIF,aAAa,CAAClB,KAAK,KAAKpC,UAAU,CAACG,IAAI,EAAE;QAC3C,MAAMsD,CAAC,GAAG9B,YAAY,CAACE,YAAY,CAAC0B,MAAM,CAAC;QAC3CA,MAAM,IAAI,CAAC;QACX,IAAIE,CAAC,KAAK1D,mBAAmB,EAAE;UAC7B,MAAM,IAAI2D,KAAK,CAAE,8BAA6BD,CAAE,EAAC,CAAC;QACpD;MACF;MACA,MAAME,IAAI,GAAGhC,YAAY,CAACE,YAAY,CAAC0B,MAAM,CAAC;MAC9CA,MAAM,IAAI,CAAC;MACX,QAAQI,IAAI;QACV,KAAKpD,SAAS,CAACC,IAAI;UAAE;YACnB,MAAMoD,MAAM,GAAGjC,YAAY,CAACE,YAAY,CAAC0B,MAAM,CAAC;YAChDA,MAAM,IAAI,CAAC;YACXxC,IAAI,CAACZ,IAAI,CAACwB,YAAY,CAACkC,KAAK,CAACN,MAAM,EAAEA,MAAM,GAAGK,MAAM,CAAC,CAAC;YACtDL,MAAM,IAAIK,MAAM;YAChB;UACF;QACA,KAAKrD,SAAS,CAACE,OAAO;UAAE;YACtB,MAAMmD,MAAM,GAAGjC,YAAY,CAACE,YAAY,CAAC0B,MAAM,CAAC;YAChDA,MAAM,IAAI,CAAC;YACX,MAAMO,aAAa,GAAGnC,YAAY,CAACkC,KAAK,CAACN,MAAM,EAAEA,MAAM,GAAGK,MAAM,CAAC;YACjE7C,IAAI,CAACZ,IAAI,CAAC,IAAA4D,kBAAS,EAACD,aAAa,CAAC,CAAC;YACnCP,MAAM,IAAIK,MAAM;YAChB;UACF;QACA,KAAKrD,SAAS,CAACG,QAAQ;UACrBK,IAAI,CAACZ,IAAI,CAACwB,YAAY,CAACE,YAAY,CAAC0B,MAAM,CAAC,CAAC;UAC5CA,MAAM,IAAI,CAAC;UACX;QACF,KAAKhD,SAAS,CAACI,WAAW;UACxBI,IAAI,CAACZ,IAAI,CAACwB,YAAY,CAACqC,eAAe,CAACT,MAAM,CAAC,CAAC;UAC/CA,MAAM,IAAI,CAAC;UACX;QACF,KAAKhD,SAAS,CAACK,UAAU;UACvBG,IAAI,CAACZ,IAAI,CAACwB,YAAY,CAACa,cAAc,CAACe,MAAM,CAAC,CAAC;UAC9CA,MAAM,IAAI,CAAC;UACX;QACF;UACE,MAAM,IAAIG,KAAK,CAAE,gBAAeC,IAAK,EAAC,CAAC;MAAC;IAE9C;IACA,OAAO5C,IAAI;EACb;AACF;AAACrB,OAAA,CAAA+C,aAAA,GAAAA,aAAA;AAED,MAAMwB,uBAAuB,CAAC;EAC5BvB,WAAWA,CAAE3B,IAAI,EAAE;IACjB,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;AACF;AAEA,MAAM4B,mBAAmB,CAAC;EACxBD,WAAWA,CAAA,EAAI;IACb,IAAI,CAACwB,IAAI,GAAGjD,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EAC7B;EAKAiC,SAASA,CAAEgB,KAAK,EAAE;IAChB,MAAMrB,GAAG,GAAG7B,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC5B4B,GAAG,CAAC3B,aAAa,CAACpB,mBAAmB,EAAE,CAAC,CAAC;IACzC+C,GAAG,CAAC3B,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB2B,GAAG,CAAC3B,aAAa,CAACgD,KAAK,EAAE,CAAC,CAAC;IAC3B,IAAI,CAACD,IAAI,GAAGjD,MAAM,CAAC+B,MAAM,CAAC,CAAC,IAAI,CAACkB,IAAI,EAAEpB,GAAG,CAAC,CAAC;EAC7C;EAKAM,UAAUA,CAAEe,KAAK,EAAE;IACjB,MAAMrB,GAAG,GAAG7B,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC5B4B,GAAG,CAAC3B,aAAa,CAACpB,mBAAmB,EAAE,CAAC,CAAC;IACzC+C,GAAG,CAAC3B,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB2B,GAAG,CAACR,gBAAgB,CAAC6B,KAAK,EAAE,CAAC,CAAC;IAC9B,IAAI,CAACD,IAAI,GAAGjD,MAAM,CAAC+B,MAAM,CAAC,CAAC,IAAI,CAACkB,IAAI,EAAEpB,GAAG,CAAC,CAAC;EAC7C;EAKAsB,eAAeA,CAAED,KAAK,EAAE;IACtB,MAAMrB,GAAG,GAAG7B,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC5B4B,GAAG,CAAC3B,aAAa,CAACpB,mBAAmB,EAAE,CAAC,CAAC;IACzC+C,GAAG,CAAC3B,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB2B,GAAG,CAACuB,YAAY,CAACF,KAAK,EAAE,CAAC,CAAC;IAC1B,IAAI,CAACD,IAAI,GAAGjD,MAAM,CAAC+B,MAAM,CAAC,CAAC,IAAI,CAACkB,IAAI,EAAEpB,GAAG,CAAC,CAAC;EAC7C;EAKAwB,gBAAgBA,CAAEH,KAAK,EAAE;IACvB,MAAMrB,GAAG,GAAG7B,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC5B4B,GAAG,CAAC3B,aAAa,CAACpB,mBAAmB,EAAE,CAAC,CAAC;IACzC+C,GAAG,CAAC3B,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB2B,GAAG,CAACyB,eAAe,CAACJ,KAAK,EAAE,CAAC,CAAC;IAC7B,IAAI,CAACD,IAAI,GAAGjD,MAAM,CAAC+B,MAAM,CAAC,CAAC,IAAI,CAACkB,IAAI,EAAEpB,GAAG,CAAC,CAAC;EAC7C;EAKAO,YAAYA,CAAEc,KAAK,EAAE;IACnB,MAAMrB,GAAG,GAAG,IAAA0B,gBAAO,EAACL,KAAK,CAAC;IAC1B,MAAMM,IAAI,GAAGxD,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC7BuD,IAAI,CAACtD,aAAa,CAACpB,mBAAmB,EAAE,CAAC,CAAC;IAC1C0E,IAAI,CAACtD,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACxBsD,IAAI,CAACtD,aAAa,CAAC2B,GAAG,CAACU,MAAM,EAAE,CAAC,CAAC;IACjC,IAAI,CAACU,IAAI,GAAGjD,MAAM,CAAC+B,MAAM,CAAC,CAAC,IAAI,CAACkB,IAAI,EAAEO,IAAI,EAAE3B,GAAG,CAAC,CAAC;EACnD;EAEAF,QAAQA,CAAA,EAAI;IACV,MAAM8B,GAAG,GAAGzD,MAAM,CAACC,KAAK,CAAC,EAAE,CAAC;IAC5BwD,GAAG,CAACvD,aAAa,CAACrB,sBAAsB,EAAE,CAAC,CAAC;IAC5C4E,GAAG,CAACvD,aAAa,CAAC,IAAI,CAAC+C,IAAI,CAACV,MAAM,EAAE,CAAC,CAAC;IACtC,OAAOvC,MAAM,CAAC+B,MAAM,CAAC,CAAC0B,GAAG,EAAE,IAAI,CAACR,IAAI,CAAC,CAAC;EACxC;AACF;AAACxE,OAAA,CAAAiD,mBAAA,GAAAA,mBAAA;AAID,MAAMgC,UAAU,CAAC;EAIfjC,WAAWA,CAAEkC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,MAAM;MACJtD,UAAU;MACVE,WAAW;MACXqD,QAAQ;MACRpD,YAAY;MACZF,iBAAiB,GAAG,CAAC;MACrBa,KAAK,GAAGpC,UAAU,CAACK;IACrB,CAAC,GAAGuE,IAAI;IACR,IAAI,CAACE,cAAc,GAAGC,SAAS;IAC/B,IAAI,CAACC,cAAc,GAAGD,SAAS;IAC/B,IAAI,CAACE,WAAW,GAAG3D,UAAU;IAC7B,IAAI,CAAC4D,YAAY,GAAG1D,WAAW;IAC/B,IAAI,CAAC2D,aAAa,GAAG1D,YAAY;IACjC,IAAI,CAAC2D,SAAS,GAAGP,QAAQ;IACzB,IAAI,CAACQ,kBAAkB,GAAG9D,iBAAiB;IAC3C,IAAI,CAAC+D,MAAM,GAAGlD,KAAK;IACnB,IAAI,CAACmD,WAAW,GAAG,IAAI9C,aAAa,EAAE;EACxC;EAMA,IAAInB,UAAUA,CAAA,EAAI;IAAA,IAAAkE,oBAAA;IAChB,QAAAA,oBAAA,GAAO,IAAI,CAACV,cAAc,cAAAU,oBAAA,uBAAnBA,oBAAA,CAAqBlE,UAAU;EACxC;EAQA,IAAIE,WAAWA,CAAA,EAAI;IAAA,IAAAiE,qBAAA;IACjB,QAAAA,qBAAA,GAAO,IAAI,CAACX,cAAc,cAAAW,qBAAA,uBAAnBA,qBAAA,CAAqBvD,OAAO;EACrC;EAOA,IAAIT,YAAYA,CAAA,EAAI;IAAA,IAAAiE,qBAAA;IAClB,QAAAA,qBAAA,GAAO,IAAI,CAACZ,cAAc,cAAAY,qBAAA,uBAAnBA,qBAAA,CAAqBjE,YAAY;EAC1C;EAMA,IAAIoD,QAAQA,CAAA,EAAI;IACd,OAAO,IAAI,CAACO,SAAS;EACvB;EAKA,IAAIP,QAAQA,CAAE9D,IAAI,EAAE;IAClB,IAAI,CAACqE,SAAS,GAAGrE,IAAI;EACvB;EAMA,IAAIQ,iBAAiBA,CAAA,EAAI;IAAA,IAAAoE,qBAAA;IACvB,QAAAA,qBAAA,GAAO,IAAI,CAACb,cAAc,cAAAa,qBAAA,uBAAnBA,qBAAA,CAAqBpE,iBAAiB;EAC/C;EAMAT,KAAKA,CAAA,EAAI;IACP,MAAM8E,GAAG,GAAG,IAAI,CAACR,SAAS,GAAG,IAAAZ,gBAAO,EAAC,IAAI,CAACY,SAAS,CAAC,GAAGnE,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM2E,GAAG,GAAG,IAAI,CAACN,WAAW,CAACzE,KAAK,EAAE;IACpC,MAAMwC,aAAa,GAAGnB,uBAAuB,CAACrB,KAAK,CAAC;MAClDsB,KAAK,EAAE,IAAI,CAACkD,MAAM;MAClBjD,SAAS,EAAEwD,GAAG,CAACrC,MAAM;MAGrBjB,WAAW,EAAEuD,MAAM,CAACD,GAAG,CAACrC,MAAM,GAAGoC,GAAG,CAACpC,MAAM;IAC7C,CAAC,CAAC;IAEF,MAAMxC,aAAa,GAAGH,gBAAgB,CAACC,KAAK,CAAC;MAC3CO,aAAa,EAAE5B,iCAAiC,GAAGoG,GAAG,CAACrC,MAAM,GAAGoC,GAAG,CAACpC,MAAM;MAC1ElC,UAAU,EAAE,IAAI,CAAC2D,WAAW;MAC5B1D,iBAAiB,EAAE,IAAI,CAAC8D,kBAAkB;MAC1C7D,WAAW,EAAE,IAAI,CAAC0D,YAAY;MAC9BzD,YAAY,EAAE,IAAI,CAAC0D;IACrB,CAAC,CAAC;IACF,OAAOlE,MAAM,CAAC+B,MAAM,CAAC,CAAChC,aAAa,EAAEsC,aAAa,EAAEuC,GAAG,EAAED,GAAG,CAAC,CAAC;EAChE;EAQA,OAAOlE,KAAKA,CAAEqE,SAAS,EAAEC,UAAU,EAAE;IACnC,IAAIzC,MAAM,GAAG,CAAC;IACd,MAAM0C,GAAG,GAAG,IAAItB,UAAU,EAAE;IAC5BsB,GAAG,CAACnB,cAAc,GAAGjE,gBAAgB,CAACa,KAAK,CAACqE,SAAS,CAAC;IACtD,IAAIE,GAAG,CAACnB,cAAc,CAACzD,aAAa,KAAK,CAAC,EAAE;MAC1C,OAAO4E,GAAG;IACZ;IACAA,GAAG,CAACjB,cAAc,GAAG7C,uBAAuB,CAACT,KAAK,CAACsE,UAAU,CAACnC,KAAK,CAACN,MAAM,EAAE9D,iCAAiC,CAAC,CAAC;IAC/G8D,MAAM,IAAI9D,iCAAiC;IAE3C,IAAIwG,GAAG,CAACjB,cAAc,CAACzC,WAAW,KAAK,EAAE,EAAE;MACzC,OAAO0D,GAAG;IACZ;IACA,IAAIA,GAAG,CAACjB,cAAc,CAAC3C,SAAS,GAAG,CAAC,EAAE;MACpC4D,GAAG,CAACV,WAAW,GAAG9C,aAAa,CAACf,KAAK,CAACsE,UAAU,CAACnC,KAAK,CAACN,MAAM,EAAEA,MAAM,GAAG0C,GAAG,CAACjB,cAAc,CAAC3C,SAAS,CAAC,EAAE4D,GAAG,CAACjB,cAAc,CAAC;MAC1HzB,MAAM,IAAI0C,GAAG,CAACjB,cAAc,CAAC3C,SAAS;IACxC;IAEA,MAAMtB,IAAI,GAAGiF,UAAU,CAACnC,KAAK,CAACN,MAAM,EAAEA,MAAM,GAAGyC,UAAU,CAACxC,MAAM,CAAC;IACjEyC,GAAG,CAACpB,QAAQ,GAAG9D,IAAI;IACnB,IAAIA,IAAI,CAACyC,MAAM,GAAG,CAAC,EAAE;MACnB,KAAK,MAAM0C,GAAG,IAAI,CAACnC,kBAAS,EAAEoC,qBAAQ,CAACC,WAAW,CAAC,EAAE;QACnD,IAAI;UACFH,GAAG,CAACpB,QAAQ,GAAGqB,GAAG,CAACnF,IAAI,CAAC;UACxB;QACF,CAAC,CAAC,OAAOsF,CAAC,EAAE;UACVJ,GAAG,CAACpB,QAAQ,GAAG,IAAIZ,uBAAuB,CAAClD,IAAI,CAAC;QAClD;MACF;IACF;IACA,OAAOkF,GAAG;EACZ;AACF;AAACvG,OAAA,CAAAiF,UAAA,GAAAA,UAAA"}
@@ -88,7 +88,7 @@ class InstrumentService extends _baseService.BaseServiceSocket {
88
88
  sync,
89
89
  channelCode,
90
90
  selector,
91
- auxiliaries,
91
+ auxiliaries: auxiliaries.length === 1 && auxiliaries[0] instanceof _headers.DTXMessageAuxBuffer ? auxiliaries[0] : auxiliaries,
92
92
  identifier
93
93
  });
94
94
  ++this._nextIdentifier;
@@ -143,4 +143,4 @@ class InstrumentService extends _baseService.BaseServiceSocket {
143
143
  }
144
144
  }
145
145
  exports.InstrumentService = InstrumentService;
146
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZVNlcnZpY2UiLCJyZXF1aXJlIiwiX2hlYWRlcnMiLCJfZHR4RW5jb2RlIiwiX2R0eERlY29kZSIsIl9ldmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9hc3luY2JveCIsIkNIRUNLX0ZSRVFfTVMiLCJXQUlUX1JFUExZX1RJTUVfTVMiLCJFTVBUWV9NRVNTQUdFX1NJWkUiLCJDSEFOTkVMX0NBTkNFTEVEIiwiQ0hBTk5FTF9PRkZTRVQiLCJJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRV9WRVJTSU9OXzE0IiwiZXhwb3J0cyIsIklOU1RSVU1FTlRfU0VSVklDRV9OQU1FIiwiSU5TVFJVTUVOVF9DSEFOTkVMIiwiT2JqZWN0IiwiZnJlZXplIiwiREVWSUNFX0lORk8iLCJQUk9DRVNTX0NPTlRST0wiLCJTWVNNT05UQVAiLCJORVRXT1JLSU5HIiwiTU9CSUxFX05PVElGSUNBVElPTlMiLCJHUkFQSElDU19PUEVOR0wiLCJBUFBMSUNBVElPTl9MSVNUSU5HIiwiQ09ORElUSU9OX0lORFVDRVIiLCJkZWZhdWx0RGljdCIsImNyZWF0ZVZhbHVlIiwiUHJveHkiLCJjcmVhdGUiLCJnZXQiLCJzdG9yYWdlIiwicHJvcGVydHkiLCJJbnN0cnVtZW50U2VydmljZSIsIkJhc2VTZXJ2aWNlU29ja2V0IiwiY29uc3RydWN0b3IiLCJzb2NrZXRDbGllbnQiLCJldmVudCIsIl91bmRlZmluZWRDYWxsYmFjayIsIl9jYWxsYmFja3MiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJfY2hhbm5lbENhbGxiYWNrcyIsIl9yZXBseVF1ZXVlcyIsIl9jaGFubmVscyIsIl9uZXh0SWRlbnRpZmllciIsIl9lbmNvZGVyIiwiRFRYRW5jb2RlciIsInBpcGUiLCJfc29ja2V0Q2xpZW50IiwiX2Fzc2lnbkNsaWVudEZhaWx1cmVIYW5kbGVycyIsIl9kZWNvZGVyIiwiRFRYRGVjb2RlciIsIm9uIiwiX2hhbmRsZURhdGEiLCJiaW5kIiwicmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrIiwic2VsZWN0b3IiLCJhZGRMaXN0ZW5lciIsInJlZ2lzdGVyVW5kZWZpbmVkQ2FsbGJhY2siLCJyZWdpc3RlckNoYW5uZWxDYWxsYmFjayIsImNoYW5uZWwiLCJjaGFubmVsSWQiLCJtYWtlQ2hhbm5lbCIsImNoYW5uZWxDb2RlIiwia2V5cyIsImxlbmd0aCIsIl9jYWxsQ2hhbm5lbCIsImNhbGxDaGFubmVsIiwiYXV4aWxpYXJpZXMiLCJzeW5jIiwiaWRlbnRpZmllciIsIndyaXRlIiwid2FpdEZvckNvbmRpdGlvbiIsInF1ZXVlIiwiZGF0YSIsInNoaWZ0IiwiXyIsImlzVW5kZWZpbmVkIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwiY2xvc2UiLCJFcnJvciIsImluY2x1ZGVzIiwiY29udmVyc2F0aW9uSW5kZXgiLCJwdXNoIiwibGlzdGVuZXJDb3VudCIsImVtaXQiLCJpc1N0cmluZyIsImV4cGVjdHNSZXBseSIsIl9yZXBseUFjayIsInJlcGx5IiwiRFRYTWVzc2FnZSIsIkJ1ZmZlciIsImFsbG9jIiwiZmxhZ3MiLCJGTEFHX1RZUEVTIiwiYnVpbGQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvaW5zdHJ1bWVudC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1l1ZUNoZW4tQy9weS1pb3MtZGV2aWNlXG5cbmltcG9ydCB7QmFzZVNlcnZpY2VTb2NrZXR9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XG5pbXBvcnQge0RUWE1lc3NhZ2UsIEZMQUdfVFlQRVN9IGZyb20gJy4vaGVhZGVycyc7XG5pbXBvcnQge0RUWEVuY29kZXJ9IGZyb20gJy4vdHJhbnNmb3JtZXIvZHR4LWVuY29kZSc7XG5pbXBvcnQge0RUWERlY29kZXJ9IGZyb20gJy4vdHJhbnNmb3JtZXIvZHR4LWRlY29kZSc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHt3YWl0Rm9yQ29uZGl0aW9ufSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IENIRUNLX0ZSRVFfTVMgPSA1MDA7XG5jb25zdCBXQUlUX1JFUExZX1RJTUVfTVMgPSAxMDAwMDtcbmNvbnN0IEVNUFRZX01FU1NBR0VfU0laRSA9IDE2O1xuY29uc3QgQ0hBTk5FTF9DQU5DRUxFRCA9ICdfY2hhbm5lbENhbmNlbGVkJztcbmNvbnN0IENIQU5ORUxfT0ZGU0VUID0gMiAqKiAzMjtcblxuY29uc3QgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCA9ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMucmVtb3Rlc2VydmVyLkRWVFNlY3VyZVNvY2tldFByb3h5JztcbmNvbnN0IElOU1RSVU1FTlRfU0VSVklDRV9OQU1FID0gJ2NvbS5hcHBsZS5pbnN0cnVtZW50cy5yZW1vdGVzZXJ2ZXInO1xuXG5leHBvcnQgY29uc3QgSU5TVFJVTUVOVF9DSEFOTkVMID0gT2JqZWN0LmZyZWV6ZSh7XG4gIERFVklDRV9JTkZPOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5kZXZpY2VpbmZvJyxcbiAgUFJPQ0VTU19DT05UUk9MOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5wcm9jZXNzY29udHJvbCcsXG4gIFNZU01PTlRBUDogJ2NvbS5hcHBsZS5pbnN0cnVtZW50cy5zZXJ2ZXIuc2VydmljZXMuc3lzbW9udGFwJyxcbiAgTkVUV09SS0lORzogJ2NvbS5hcHBsZS5pbnN0cnVtZW50cy5zZXJ2ZXIuc2VydmljZXMubmV0d29ya2luZycsXG4gIE1PQklMRV9OT1RJRklDQVRJT05TOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5tb2JpbGVub3RpZmljYXRpb25zJyxcbiAgR1JBUEhJQ1NfT1BFTkdMOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5ncmFwaGljcy5vcGVuZ2wnLFxuICBBUFBMSUNBVElPTl9MSVNUSU5HOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5kZXZpY2UuYXBwbGljdGlvbkxpc3RpbmcnLFxuICBDT05ESVRJT05fSU5EVUNFUjogJ2NvbS5hcHBsZS5pbnN0cnVtZW50cy5zZXJ2ZXIuc2VydmljZXMuQ29uZGl0aW9uSW5kdWNlcidcbn0pO1xuXG5mdW5jdGlvbiBkZWZhdWx0RGljdCAoY3JlYXRlVmFsdWUpIHtcbiAgcmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgZ2V0IChzdG9yYWdlLCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKCEocHJvcGVydHkgaW4gc3RvcmFnZSkpIHtcbiAgICAgICAgc3RvcmFnZVtwcm9wZXJ0eV0gPSBjcmVhdGVWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmFnZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGluIGluc3RydW1lbnQgc2VydmVcbiAqIEBuYW1lIERUWENhbGxiYWNrXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7RFRYTWVzc2FnZX0gb2JqZWN0XG4qL1xuXG4vKipcbiAqIEBwYXJhbSB7U29ja2V0fSBzb2NrZXRDbGllbnQgIERUWE1lc3NhZ2Uuc2VsZWN0b3JcbiAqIEBwYXJhbSB7P0RUWENhbGxiYWNrfSBldmVudCBpZiBlbXB0eSB3aWxsIGlnbm9yZSBhbnkgbWVzc2FnZXNcbiAqL1xuY2xhc3MgSW5zdHJ1bWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZVNvY2tldCB7XG4gIGNvbnN0cnVjdG9yIChzb2NrZXRDbGllbnQsIGV2ZW50KSB7XG4gICAgc3VwZXIoc29ja2V0Q2xpZW50KTtcbiAgICB0aGlzLl91bmRlZmluZWRDYWxsYmFjayA9IGV2ZW50O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBldmVudHMuRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5fY2hhbm5lbENhbGxiYWNrcyA9IG5ldyBldmVudHMuRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5fcmVwbHlRdWV1ZXMgPSBkZWZhdWx0RGljdCgoKSA9PiBbXSk7XG4gICAgdGhpcy5fY2hhbm5lbHMgPSB7fTtcbiAgICB0aGlzLl9uZXh0SWRlbnRpZmllciA9IDE7XG4gICAgdGhpcy5fZW5jb2RlciA9IG5ldyBEVFhFbmNvZGVyKCk7XG4gICAgdGhpcy5fZW5jb2Rlci5waXBlKHRoaXMuX3NvY2tldENsaWVudCk7XG4gICAgdGhpcy5fYXNzaWduQ2xpZW50RmFpbHVyZUhhbmRsZXJzKHRoaXMuX2VuY29kZXIpO1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgRFRYRGVjb2RlcigpO1xuICAgIHRoaXMuX3NvY2tldENsaWVudC5waXBlKHRoaXMuX2RlY29kZXIpO1xuICAgIHRoaXMuX2RlY29kZXIub24oJ2RhdGEnLCB0aGlzLl9oYW5kbGVEYXRhLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBzZWxlY3RvciBpcyByZWdpc3RlcmVkLCBUaGUgbWVzc2FnZSBvZiB0aGUgc2VsZWN0b3IgZXZlbnQgd2lsbCBiZSByZXR1cm5lZC4gcmVmZXIgdG8gdGhpcy5faGFuZGxlRGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgIExpc3RlbiBmb3IgcmV0dXJuIERUWE1lc3NhZ2Uuc2VsZWN0b3IgZGF0YVxuICAgKiBAcGFyYW0ge0RUWENhbGxiYWNrfSBldmVudFxuICAgKi9cbiAgcmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrIChzZWxlY3RvciwgZXZlbnQpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MuYWRkTGlzdGVuZXIoc2VsZWN0b3IsIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZXZlbnQgaXMgcmVnaXN0ZXJlZCwgYWxsIHVucmVnaXN0ZXJlZCBtZXNzYWdlcyB3aWxsIGJlIHJldHVybmVkIHRvIGV2ZW50LiByZWZlciB0byB0aGlzLl9oYW5kbGVEYXRhXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICByZWdpc3RlclVuZGVmaW5lZENhbGxiYWNrIChldmVudCkge1xuICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGV2ZW50IGlzIHJlZ2lzdGVyZWQsIHRoaXMgY2hhbm5lbCB7Q0hBTk5FTH0gbWVzc2FnZXMgd2lsbCBiZSByZXR1cm5lZCB0byBldmVudC4gcmVmZXIgdG8gdGhpcy5faGFuZGxlRGF0YVxuICAgKiBJdCdzIGFjdHVhbGx5IGxpc3RlbmluZyBmb3IgaW50IGNoYW5uZWxDb2RlLiBJbiB0aGlzLl9jaGFubmVsIG9iamVjdCB0byByZWNvcmQgY2hhbm5lbCBrZXkgYW5kIGludCB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBpbnN0cnVtZW50cyBzZXJ2aWNlIGNoYW5uZWwgZS5nOiBJTlNUUlVNRU5UX0NIQU5ORUwuREVWSUNFX0lORk8uXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICBhc3luYyByZWdpc3RlckNoYW5uZWxDYWxsYmFjayAoY2hhbm5lbCwgZXZlbnQpIHtcbiAgICBjb25zdCBjaGFubmVsSWQgPSBhd2FpdCB0aGlzLm1ha2VDaGFubmVsKGNoYW5uZWwpO1xuICAgIHRoaXMuX2NoYW5uZWxDYWxsYmFja3MuYWRkTGlzdGVuZXIoY2hhbm5lbElkLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2VydmljZSBjaGFubmVsLCBkYXRhIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2VydmljZSB3aWxsIHVzZSB0aGlzIGNoYW5uZWxDb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsICBpbnN0cnVtZW50cyBzZXJ2aWNlIGNoYW5uZWwgZS5nOiBJTlNUUlVNRU5UX0NIQU5ORUwuREVWSUNFX0lORk9cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyfCo+fSBpbnN0cnVtZW50cyBzZXJ2aWNlIGNoYW5uZWwgY29kZSBmb3IgZGF0YSB0cmFuc21pc3Npb25cbiAgICovXG4gIGFzeW5jIG1ha2VDaGFubmVsIChjaGFubmVsKSB7XG4gICAgaWYgKGNoYW5uZWwgaW4gdGhpcy5fY2hhbm5lbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsc1tjaGFubmVsXTtcbiAgICB9XG4gICAgY29uc3QgY2hhbm5lbENvZGUgPSBPYmplY3Qua2V5cyh0aGlzLl9jaGFubmVscykubGVuZ3RoICsgMTtcbiAgICBhd2FpdCB0aGlzLl9jYWxsQ2hhbm5lbCh0cnVlLCAwLCAnX3JlcXVlc3RDaGFubmVsV2l0aENvZGU6aWRlbnRpZmllcjonLCBjaGFubmVsQ29kZSwgY2hhbm5lbCk7XG4gICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0gPSBjaGFubmVsQ29kZTtcbiAgICByZXR1cm4gY2hhbm5lbENvZGU7XG4gIH1cblxuICAvKipcbiAgICogSW4gZ2VuZXJhbCwgd2UgY2FsbCB0aGlzIG1ldGhvZCB0byBzdGFydCB0aGUgaW5zdHJ1bWVudCBkdHggc2VydmljZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBpbnN0cnVtZW50IGR0eCBzZXJ2aWNlIGUuZzogSU5TVFJVTUVOVF9DSEFOTkVMLkRFVklDRV9JTkZPXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBpbnN0cnVtZW50IHNlcnZpY2UgbWV0aG9kIG5hbWUgKHJlZmxlY3Rpb24gY2FsbHMpXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhdXhpbGlhcmllcyBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERUWE1lc3NhZ2U+fVxuICAgKiBleGFtcGxl77yaXG4gICAqIGluc3RydW1lbnRTZXJ2aWNlLmNhbGxDaGFubmVsKElOU1RSVU1FTlRfQ0hBTk5FTC5QUk9DRVNTX0NPTlRST0wsXG4gICAgICAgICdsYXVuY2hTdXNwZW5kZWRQcm9jZXNzV2l0aERldmljZVBhdGg6YnVuZGxlSWRlbnRpZmllcjplbnZpcm9ubWVudDphcmd1bWVudHM6b3B0aW9uczonLCAnJyxcbiAgICAgICAgYnVuZGxlSUQsIHt9LCBbXSwgeydTdGFydFN1c3BlbmRlZEtleSc6IDAsICdLaWxsRXhpc3RpbmcnOiAxfVxuICAgKi9cbiAgYXN5bmMgY2FsbENoYW5uZWwgKGNoYW5uZWwsIHNlbGVjdG9yLCAuLi5hdXhpbGlhcmllcykge1xuICAgIGNvbnN0IGNoYW5uZWxDb2RlID0gYXdhaXQgdGhpcy5tYWtlQ2hhbm5lbChjaGFubmVsKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY2FsbENoYW5uZWwodHJ1ZSwgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCAuLi5hdXhpbGlhcmllcyk7XG4gIH1cblxuICBhc3luYyBfY2FsbENoYW5uZWwgKHN5bmMsIGNoYW5uZWxDb2RlLCBzZWxlY3RvciwgLi4uYXV4aWxpYXJpZXMpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5fbmV4dElkZW50aWZpZXI7XG4gICAgdGhpcy5fZW5jb2Rlci53cml0ZSh7c3luYywgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCBhdXhpbGlhcmllcywgaWRlbnRpZmllcn0pO1xuICAgICsrdGhpcy5fbmV4dElkZW50aWZpZXI7XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3JlcGx5UXVldWVzW2lkZW50aWZpZXJdO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7d2FpdE1zOiBXQUlUX1JFUExZX1RJTUVfTVMsIGludGVydmFsTXM6IENIRUNLX0ZSRVFfTVMsIGVycm9yOiAncmVwbHkgY2hhbm5lbCBkYXRhIHRpbWVvdXQnfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxpbmcgcmVnaXN0ZXJlZCBhc3luY2hyb25vdXMgbWVzc2FnZSBjYWxsYmFja3NcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlfSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlRGF0YSAoZGF0YSkge1xuICAgIGlmIChfLmluY2x1ZGVzKGRhdGEuc2VsZWN0b3IsIENIQU5ORUxfQ0FOQ0VMRUQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmNvbnZlcnNhdGlvbkluZGV4ID09PSAxKSB7XG4gICAgICB0aGlzLl9yZXBseVF1ZXVlc1tkYXRhLmlkZW50aWZpZXJdLnB1c2goZGF0YSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaGFubmVsQ2FsbGJhY2tzLmxpc3RlbmVyQ291bnQoQ0hBTk5FTF9PRkZTRVQgLSBkYXRhLmNoYW5uZWxDb2RlKSA+IDApIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDYWxsYmFja3MuZW1pdChDSEFOTkVMX09GRlNFVCAtIGRhdGEuY2hhbm5lbENvZGUsIGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGRhdGEuc2VsZWN0b3I7XG4gICAgICBpZiAoXy5pc1N0cmluZyhzZWxlY3RvcikgJiYgdGhpcy5fY2FsbGJhY2tzLmxpc3RlbmVyQ291bnQoc2VsZWN0b3IpID4gMCkge1xuICAgICAgICB0aGlzLl9jYWxsYmFja3MuZW1pdChzZWxlY3RvciwgZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrKGRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuZXhwZWN0c1JlcGx5KSB7XG4gICAgICAgIHRoaXMuX3JlcGx5QWNrKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gYSBlbXB0eSBhY2sgbWVzc2FnZVxuICAgKiBAcGFyYW0ge0RUWE1lc3NhZ2V9IGRhdGFcbiAgICovXG4gIF9yZXBseUFjayAoZGF0YSkge1xuICAgIGNvbnN0IHJlcGx5ID0gbmV3IERUWE1lc3NhZ2Uoe1xuICAgICAgaWRlbnRpZmllcjogZGF0YS5pZGVudGlmaWVyLFxuICAgICAgY2hhbm5lbENvZGU6IGRhdGEuY2hhbm5lbENvZGUsXG4gICAgICBzZWxlY3RvcjogQnVmZmVyLmFsbG9jKEVNUFRZX01FU1NBR0VfU0laRSksXG4gICAgICBjb252ZXJzYXRpb25JbmRleDogZGF0YS5jb252ZXJzYXRpb25JbmRleCArIDEsXG4gICAgICBmbGFnczogRkxBR19UWVBFUy5yZXBseVxuICAgIH0pO1xuICAgIHRoaXMuX3NvY2tldENsaWVudC53cml0ZShyZXBseS5idWlsZCgpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBJbnN0cnVtZW50U2VydmljZSwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUUgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFDLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFELHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFQLE9BQUE7QUFFQSxNQUFNUSxhQUFhLEdBQUcsR0FBRztB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
146
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZVNlcnZpY2UiLCJyZXF1aXJlIiwiX2hlYWRlcnMiLCJfZHR4RW5jb2RlIiwiX2R0eERlY29kZSIsIl9ldmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9hc3luY2JveCIsIkNIRUNLX0ZSRVFfTVMiLCJXQUlUX1JFUExZX1RJTUVfTVMiLCJFTVBUWV9NRVNTQUdFX1NJWkUiLCJDSEFOTkVMX0NBTkNFTEVEIiwiQ0hBTk5FTF9PRkZTRVQiLCJJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRV9WRVJTSU9OXzE0IiwiZXhwb3J0cyIsIklOU1RSVU1FTlRfU0VSVklDRV9OQU1FIiwiSU5TVFJVTUVOVF9DSEFOTkVMIiwiT2JqZWN0IiwiZnJlZXplIiwiREVWSUNFX0lORk8iLCJQUk9DRVNTX0NPTlRST0wiLCJTWVNNT05UQVAiLCJORVRXT1JLSU5HIiwiTU9CSUxFX05PVElGSUNBVElPTlMiLCJHUkFQSElDU19PUEVOR0wiLCJBUFBMSUNBVElPTl9MSVNUSU5HIiwiQ09ORElUSU9OX0lORFVDRVIiLCJkZWZhdWx0RGljdCIsImNyZWF0ZVZhbHVlIiwiUHJveHkiLCJjcmVhdGUiLCJnZXQiLCJzdG9yYWdlIiwicHJvcGVydHkiLCJJbnN0cnVtZW50U2VydmljZSIsIkJhc2VTZXJ2aWNlU29ja2V0IiwiY29uc3RydWN0b3IiLCJzb2NrZXRDbGllbnQiLCJldmVudCIsIl91bmRlZmluZWRDYWxsYmFjayIsIl9jYWxsYmFja3MiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJfY2hhbm5lbENhbGxiYWNrcyIsIl9yZXBseVF1ZXVlcyIsIl9jaGFubmVscyIsIl9uZXh0SWRlbnRpZmllciIsIl9lbmNvZGVyIiwiRFRYRW5jb2RlciIsInBpcGUiLCJfc29ja2V0Q2xpZW50IiwiX2Fzc2lnbkNsaWVudEZhaWx1cmVIYW5kbGVycyIsIl9kZWNvZGVyIiwiRFRYRGVjb2RlciIsIm9uIiwiX2hhbmRsZURhdGEiLCJiaW5kIiwicmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrIiwic2VsZWN0b3IiLCJhZGRMaXN0ZW5lciIsInJlZ2lzdGVyVW5kZWZpbmVkQ2FsbGJhY2siLCJyZWdpc3RlckNoYW5uZWxDYWxsYmFjayIsImNoYW5uZWwiLCJjaGFubmVsSWQiLCJtYWtlQ2hhbm5lbCIsImNoYW5uZWxDb2RlIiwia2V5cyIsImxlbmd0aCIsIl9jYWxsQ2hhbm5lbCIsImNhbGxDaGFubmVsIiwiYXV4aWxpYXJpZXMiLCJzeW5jIiwiaWRlbnRpZmllciIsIndyaXRlIiwiRFRYTWVzc2FnZUF1eEJ1ZmZlciIsIndhaXRGb3JDb25kaXRpb24iLCJxdWV1ZSIsImRhdGEiLCJzaGlmdCIsIl8iLCJpc1VuZGVmaW5lZCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnJvciIsImVyciIsImNsb3NlIiwiRXJyb3IiLCJpbmNsdWRlcyIsImNvbnZlcnNhdGlvbkluZGV4IiwicHVzaCIsImxpc3RlbmVyQ291bnQiLCJlbWl0IiwiaXNTdHJpbmciLCJleHBlY3RzUmVwbHkiLCJfcmVwbHlBY2siLCJyZXBseSIsIkRUWE1lc3NhZ2UiLCJCdWZmZXIiLCJhbGxvYyIsImZsYWdzIiwiRkxBR19UWVBFUyIsImJ1aWxkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RydW1lbnQvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZVxuXG5pbXBvcnQgeyBCYXNlU2VydmljZVNvY2tldCB9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XG5pbXBvcnQgeyBEVFhNZXNzYWdlLCBEVFhNZXNzYWdlQXV4QnVmZmVyLCBGTEFHX1RZUEVTIH0gZnJvbSAnLi9oZWFkZXJzJztcbmltcG9ydCB7IERUWEVuY29kZXIgfSBmcm9tICcuL3RyYW5zZm9ybWVyL2R0eC1lbmNvZGUnO1xuaW1wb3J0IHsgRFRYRGVjb2RlciB9IGZyb20gJy4vdHJhbnNmb3JtZXIvZHR4LWRlY29kZSc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgQ0hFQ0tfRlJFUV9NUyA9IDUwMDtcbmNvbnN0IFdBSVRfUkVQTFlfVElNRV9NUyA9IDEwMDAwO1xuY29uc3QgRU1QVFlfTUVTU0FHRV9TSVpFID0gMTY7XG5jb25zdCBDSEFOTkVMX0NBTkNFTEVEID0gJ19jaGFubmVsQ2FuY2VsZWQnO1xuY29uc3QgQ0hBTk5FTF9PRkZTRVQgPSAyICoqIDMyO1xuXG5jb25zdCBJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRV9WRVJTSU9OXzE0ID0gJ2NvbS5hcHBsZS5pbnN0cnVtZW50cy5yZW1vdGVzZXJ2ZXIuRFZUU2VjdXJlU29ja2V0UHJveHknO1xuY29uc3QgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLmluc3RydW1lbnRzLnJlbW90ZXNlcnZlcic7XG5cbmV4cG9ydCBjb25zdCBJTlNUUlVNRU5UX0NIQU5ORUwgPSBPYmplY3QuZnJlZXplKHtcbiAgREVWSUNFX0lORk86ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmRldmljZWluZm8nLFxuICBQUk9DRVNTX0NPTlRST0w6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLnByb2Nlc3Njb250cm9sJyxcbiAgU1lTTU9OVEFQOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5zeXNtb250YXAnLFxuICBORVRXT1JLSU5HOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5uZXR3b3JraW5nJyxcbiAgTU9CSUxFX05PVElGSUNBVElPTlM6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLm1vYmlsZW5vdGlmaWNhdGlvbnMnLFxuICBHUkFQSElDU19PUEVOR0w6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmdyYXBoaWNzLm9wZW5nbCcsXG4gIEFQUExJQ0FUSU9OX0xJU1RJTkc6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmRldmljZS5hcHBsaWN0aW9uTGlzdGluZycsXG4gIENPTkRJVElPTl9JTkRVQ0VSOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5Db25kaXRpb25JbmR1Y2VyJ1xufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHREaWN0KGNyZWF0ZVZhbHVlKSB7XG4gIHJldHVybiBuZXcgUHJveHkoT2JqZWN0LmNyZWF0ZShudWxsKSwge1xuICAgIGdldChzdG9yYWdlLCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKCEocHJvcGVydHkgaW4gc3RvcmFnZSkpIHtcbiAgICAgICAgc3RvcmFnZVtwcm9wZXJ0eV0gPSBjcmVhdGVWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmFnZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxuLyoqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGluIGluc3RydW1lbnQgc2VydmVcbiAqIEBuYW1lIERUWENhbGxiYWNrXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7RFRYTWVzc2FnZX0gb2JqZWN0XG4qL1xuXG4vKipcbiAqIEBwYXJhbSB7U29ja2V0fSBzb2NrZXRDbGllbnQgIERUWE1lc3NhZ2Uuc2VsZWN0b3JcbiAqIEBwYXJhbSB7P0RUWENhbGxiYWNrfSBldmVudCBpZiBlbXB0eSB3aWxsIGlnbm9yZSBhbnkgbWVzc2FnZXNcbiAqL1xuY2xhc3MgSW5zdHJ1bWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZVNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKHNvY2tldENsaWVudCwgZXZlbnQpIHtcbiAgICBzdXBlcihzb2NrZXRDbGllbnQpO1xuICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrID0gZXZlbnQ7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLl9jaGFubmVsQ2FsbGJhY2tzID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLl9yZXBseVF1ZXVlcyA9IGRlZmF1bHREaWN0KCgpID0+IFtdKTtcbiAgICB0aGlzLl9jaGFubmVscyA9IHt9O1xuICAgIHRoaXMuX25leHRJZGVudGlmaWVyID0gMTtcbiAgICB0aGlzLl9lbmNvZGVyID0gbmV3IERUWEVuY29kZXIoKTtcbiAgICB0aGlzLl9lbmNvZGVyLnBpcGUodGhpcy5fc29ja2V0Q2xpZW50KTtcbiAgICB0aGlzLl9hc3NpZ25DbGllbnRGYWlsdXJlSGFuZGxlcnModGhpcy5fZW5jb2Rlcik7XG4gICAgdGhpcy5fZGVjb2RlciA9IG5ldyBEVFhEZWNvZGVyKCk7XG4gICAgdGhpcy5fc29ja2V0Q2xpZW50LnBpcGUodGhpcy5fZGVjb2Rlcik7XG4gICAgdGhpcy5fZGVjb2Rlci5vbignZGF0YScsIHRoaXMuX2hhbmRsZURhdGEuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHNlbGVjdG9yIGlzIHJlZ2lzdGVyZWQsIFRoZSBtZXNzYWdlIG9mIHRoZSBzZWxlY3RvciBldmVudCB3aWxsIGJlIHJldHVybmVkLiByZWZlciB0byB0aGlzLl9oYW5kbGVEYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAgTGlzdGVuIGZvciByZXR1cm4gRFRYTWVzc2FnZS5zZWxlY3RvciBkYXRhXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICByZWdpc3RlclNlbGVjdG9yQ2FsbGJhY2soc2VsZWN0b3IsIGV2ZW50KSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzLmFkZExpc3RlbmVyKHNlbGVjdG9yLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGV2ZW50IGlzIHJlZ2lzdGVyZWQsIGFsbCB1bnJlZ2lzdGVyZWQgbWVzc2FnZXMgd2lsbCBiZSByZXR1cm5lZCB0byBldmVudC4gcmVmZXIgdG8gdGhpcy5faGFuZGxlRGF0YVxuICAgKiBAcGFyYW0ge0RUWENhbGxiYWNrfSBldmVudFxuICAgKi9cbiAgcmVnaXN0ZXJVbmRlZmluZWRDYWxsYmFjayhldmVudCkge1xuICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGV2ZW50IGlzIHJlZ2lzdGVyZWQsIHRoaXMgY2hhbm5lbCB7Q0hBTk5FTH0gbWVzc2FnZXMgd2lsbCBiZSByZXR1cm5lZCB0byBldmVudC4gcmVmZXIgdG8gdGhpcy5faGFuZGxlRGF0YVxuICAgKiBJdCdzIGFjdHVhbGx5IGxpc3RlbmluZyBmb3IgaW50IGNoYW5uZWxDb2RlLiBJbiB0aGlzLl9jaGFubmVsIG9iamVjdCB0byByZWNvcmQgY2hhbm5lbCBrZXkgYW5kIGludCB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBpbnN0cnVtZW50cyBzZXJ2aWNlIGNoYW5uZWwgZS5nOiBJTlNUUlVNRU5UX0NIQU5ORUwuREVWSUNFX0lORk8uXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICBhc3luYyByZWdpc3RlckNoYW5uZWxDYWxsYmFjayhjaGFubmVsLCBldmVudCkge1xuICAgIGNvbnN0IGNoYW5uZWxJZCA9IGF3YWl0IHRoaXMubWFrZUNoYW5uZWwoY2hhbm5lbCk7XG4gICAgdGhpcy5fY2hhbm5lbENhbGxiYWNrcy5hZGRMaXN0ZW5lcihjaGFubmVsSWQsIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZXJ2aWNlIGNoYW5uZWwsIGRhdGEgdHJhbnNtaXNzaW9uIG9mIHRoZSBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgY2hhbm5lbENvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgIGluc3RydW1lbnRzIHNlcnZpY2UgY2hhbm5lbCBlLmc6IElOU1RSVU1FTlRfQ0hBTk5FTC5ERVZJQ0VfSU5GT1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXJ8Kj59IGluc3RydW1lbnRzIHNlcnZpY2UgY2hhbm5lbCBjb2RlIGZvciBkYXRhIHRyYW5zbWlzc2lvblxuICAgKi9cbiAgYXN5bmMgbWFrZUNoYW5uZWwoY2hhbm5lbCkge1xuICAgIGlmIChjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF07XG4gICAgfVxuICAgIGNvbnN0IGNoYW5uZWxDb2RlID0gT2JqZWN0LmtleXModGhpcy5fY2hhbm5lbHMpLmxlbmd0aCArIDE7XG4gICAgYXdhaXQgdGhpcy5fY2FsbENoYW5uZWwodHJ1ZSwgMCwgJ19yZXF1ZXN0Q2hhbm5lbFdpdGhDb2RlOmlkZW50aWZpZXI6JywgY2hhbm5lbENvZGUsIGNoYW5uZWwpO1xuICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdID0gY2hhbm5lbENvZGU7XG4gICAgcmV0dXJuIGNoYW5uZWxDb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGdlbmVyYWwsIHdlIGNhbGwgdGhpcyBtZXRob2QgdG8gc3RhcnQgdGhlIGluc3RydW1lbnQgZHR4IHNlcnZpY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgaW5zdHJ1bWVudCBkdHggc2VydmljZSBlLmc6IElOU1RSVU1FTlRfQ0hBTk5FTC5ERVZJQ0VfSU5GT1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgaW5zdHJ1bWVudCBzZXJ2aWNlIG1ldGhvZCBuYW1lIChyZWZsZWN0aW9uIGNhbGxzKVxuICAgKiBAcGFyYW0gey4uLmFueSB8IERUWE1lc3NhZ2VBdXhCdWZmZXJ9IGF1eGlsaWFyaWVzIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgc2VsZWN0b3IuIElmIGF1eGlsaWFyaWVzIGFyZSBwYXNzZWQgaW4gdXNpbmdcbiAgICogdGhlIERUWE1lc3NhZ2VBdXhCdWZmZXIgdHlwZSwgYWxsIHRoZSB2YXJpYWJsZXMgc2hvdWxkIGJlIG1hbnVhbGx5IGFzc2VtYmxlZCBpbnRvIG9ubHkgb25lIERUWE1lc3NhZ2VBdXhCdWZmZXIgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERUWE1lc3NhZ2U+fVxuICAgKiBleGFtcGxl77yaXG4gICAqIGluc3RydW1lbnRTZXJ2aWNlLmNhbGxDaGFubmVsKElOU1RSVU1FTlRfQ0hBTk5FTC5QUk9DRVNTX0NPTlRST0wsXG4gICAgICAgICdsYXVuY2hTdXNwZW5kZWRQcm9jZXNzV2l0aERldmljZVBhdGg6YnVuZGxlSWRlbnRpZmllcjplbnZpcm9ubWVudDphcmd1bWVudHM6b3B0aW9uczonLCAnJyxcbiAgICAgICAgYnVuZGxlSUQsIHt9LCBbXSwgeydTdGFydFN1c3BlbmRlZEtleSc6IDAsICdLaWxsRXhpc3RpbmcnOiAxfVxuICAgKi9cbiAgYXN5bmMgY2FsbENoYW5uZWwoY2hhbm5lbCwgc2VsZWN0b3IsIC4uLmF1eGlsaWFyaWVzKSB7XG4gICAgY29uc3QgY2hhbm5lbENvZGUgPSBhd2FpdCB0aGlzLm1ha2VDaGFubmVsKGNoYW5uZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jYWxsQ2hhbm5lbCh0cnVlLCBjaGFubmVsQ29kZSwgc2VsZWN0b3IsIC4uLmF1eGlsaWFyaWVzKTtcbiAgfVxuXG4gIGFzeW5jIF9jYWxsQ2hhbm5lbChzeW5jLCBjaGFubmVsQ29kZSwgc2VsZWN0b3IsIC4uLmF1eGlsaWFyaWVzKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuX25leHRJZGVudGlmaWVyO1xuICAgIHRoaXMuX2VuY29kZXIud3JpdGUoe1xuICAgICAgc3luYyxcbiAgICAgIGNoYW5uZWxDb2RlLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBhdXhpbGlhcmllczogKGF1eGlsaWFyaWVzLmxlbmd0aCA9PT0gMSAmJiBhdXhpbGlhcmllc1swXSBpbnN0YW5jZW9mIERUWE1lc3NhZ2VBdXhCdWZmZXIpID8gYXV4aWxpYXJpZXNbMF0gOiBhdXhpbGlhcmllcyxcbiAgICAgIGlkZW50aWZpZXJcbiAgICB9KTtcbiAgICArK3RoaXMuX25leHRJZGVudGlmaWVyO1xuICAgIGlmIChzeW5jKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9yZXBseVF1ZXVlc1tpZGVudGlmaWVyXTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgeyB3YWl0TXM6IFdBSVRfUkVQTFlfVElNRV9NUywgaW50ZXJ2YWxNczogQ0hFQ0tfRlJFUV9NUywgZXJyb3I6ICdyZXBseSBjaGFubmVsIGRhdGEgdGltZW91dCcgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxpbmcgcmVnaXN0ZXJlZCBhc3luY2hyb25vdXMgbWVzc2FnZSBjYWxsYmFja3NcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlfSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlRGF0YShkYXRhKSB7XG4gICAgaWYgKF8uaW5jbHVkZXMoZGF0YS5zZWxlY3RvciwgQ0hBTk5FTF9DQU5DRUxFRCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY29udmVyc2F0aW9uSW5kZXggPT09IDEpIHtcbiAgICAgIHRoaXMuX3JlcGx5UXVldWVzW2RhdGEuaWRlbnRpZmllcl0ucHVzaChkYXRhKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoYW5uZWxDYWxsYmFja3MubGlzdGVuZXJDb3VudChDSEFOTkVMX09GRlNFVCAtIGRhdGEuY2hhbm5lbENvZGUpID4gMCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENhbGxiYWNrcy5lbWl0KENIQU5ORUxfT0ZGU0VUIC0gZGF0YS5jaGFubmVsQ29kZSwgZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZGF0YS5zZWxlY3RvcjtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHNlbGVjdG9yKSAmJiB0aGlzLl9jYWxsYmFja3MubGlzdGVuZXJDb3VudChzZWxlY3RvcikgPiAwKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcy5lbWl0KHNlbGVjdG9yLCBkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdW5kZWZpbmVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fdW5kZWZpbmVkQ2FsbGJhY2soZGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5leHBlY3RzUmVwbHkpIHtcbiAgICAgICAgdGhpcy5fcmVwbHlBY2soZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBhIGVtcHR5IGFjayBtZXNzYWdlXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZX0gZGF0YVxuICAgKi9cbiAgX3JlcGx5QWNrKGRhdGEpIHtcbiAgICBjb25zdCByZXBseSA9IG5ldyBEVFhNZXNzYWdlKHtcbiAgICAgIGlkZW50aWZpZXI6IGRhdGEuaWRlbnRpZmllcixcbiAgICAgIGNoYW5uZWxDb2RlOiBkYXRhLmNoYW5uZWxDb2RlLFxuICAgICAgc2VsZWN0b3I6IEJ1ZmZlci5hbGxvYyhFTVBUWV9NRVNTQUdFX1NJWkUpLFxuICAgICAgY29udmVyc2F0aW9uSW5kZXg6IGRhdGEuY29udmVyc2F0aW9uSW5kZXggKyAxLFxuICAgICAgZmxhZ3M6IEZMQUdfVFlQRVMucmVwbHlcbiAgICB9KTtcbiAgICB0aGlzLl9zb2NrZXRDbGllbnQud3JpdGUocmVwbHkuYnVpbGQoKSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW5zdHJ1bWVudFNlcnZpY2UsIElOU1RSVU1FTlRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQsIElOU1RSVU1FTlRfU0VSVklDRV9OQU1FIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBRCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBRUEsTUFBTVEsYUFBYSxHQUFHLEdBQUc7QUFDekIsTUFBTUMsa0JBQWtCLEdBQUcsS0FBSztBQUNoQyxNQUFNQyxrQkFBa0IsR0FBRyxFQUFFO0FBQzdCLE1BQU1DLGdCQUFnQixHQUFHLGtCQUFrQjtBQUMzQyxNQUFNQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUU7QUFFOUIsTUFBTUMsa0NBQWtDLEdBQUcseURBQXlEO0FBQUNDLE9BQUEsQ0FBQUQsa0NBQUEsR0FBQUEsa0NBQUE7QUFDckcsTUFBTUUsdUJBQXVCLEdBQUcsb0NBQW9DO0FBQUNELE9BQUEsQ0FBQUMsdUJBQUEsR0FBQUEsdUJBQUE7QUFFOUQsTUFBTUMsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO0VBQzlDQyxXQUFXLEVBQUUsa0RBQWtEO0VBQy9EQyxlQUFlLEVBQUUsc0RBQXNEO0VBQ3ZFQyxTQUFTLEVBQUUsaURBQWlEO0VBQzVEQyxVQUFVLEVBQUUsa0RBQWtEO0VBQzlEQyxvQkFBb0IsRUFBRSwyREFBMkQ7RUFDakZDLGVBQWUsRUFBRSx1REFBdUQ7RUFDeEVDLG1CQUFtQixFQUFFLGdFQUFnRTtFQUNyRkMsaUJBQWlCLEVBQUU7QUFDckIsQ0FBQyxDQUFDO0FBQUNaLE9BQUEs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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_baseService","require","_headers","_dtxEncode","_dtxDecode","_events","_interopRequireDefault","_lodash","_asyncbox","CHECK_FREQ_MS","WAIT_REPLY_TIME_MS","EMPTY_MESSAGE_SIZE","CHANNEL_CANCELED","CHANNEL_OFFSET","INSTRUMENT_SERVICE_NAME_VERSION_14","exports","INSTRUMENT_SERVICE_NAME","INSTRUMENT_CHANNEL","Object","freeze","DEVICE_INFO","PROCESS_CONTROL","SYSMONTAP","NETWORKING","MOBILE_NOTIFICATIONS","GRAPHICS_OPENGL","APPLICATION_LISTING","CONDITION_INDUCER","defaultDict","createValue","Proxy","create","get","storage","property","InstrumentService","BaseServiceSocket","constructor","socketClient","event","_undefinedCallback","_callbacks","events","EventEmitter","_channelCallbacks","_replyQueues","_channels","_nextIdentifier","_encoder","DTXEncoder","pipe","_socketClient","_assignClientFailureHandlers","_decoder","DTXDecoder","on","_handleData","bind","registerSelectorCallback","selector","addListener","registerUndefinedCallback","registerChannelCallback","channel","channelId","makeChannel","channelCode","keys","length","_callChannel","callChannel","auxiliaries","sync","identifier","write","waitForCondition","queue","data","shift","_","isUndefined","waitMs","intervalMs","error","err","close","Error","includes","conversationIndex","push","listenerCount","emit","isString","expectsReply","_replyAck","reply","DTXMessage","Buffer","alloc","flags","FLAG_TYPES","build"],"sources":["../../../lib/instrument/index.js"],"sourcesContent":["// Adapted from https://github.com/YueChen-C/py-ios-device\n\nimport {BaseServiceSocket} from '../base-service';\nimport {DTXMessage, FLAG_TYPES} from './headers';\nimport {DTXEncoder} from './transformer/dtx-encode';\nimport {DTXDecoder} from './transformer/dtx-decode';\nimport events from 'events';\nimport _ from 'lodash';\nimport {waitForCondition} from 'asyncbox';\n\nconst CHECK_FREQ_MS = 500;\nconst WAIT_REPLY_TIME_MS = 10000;\nconst EMPTY_MESSAGE_SIZE = 16;\nconst CHANNEL_CANCELED = '_channelCanceled';\nconst CHANNEL_OFFSET = 2 ** 32;\n\nconst INSTRUMENT_SERVICE_NAME_VERSION_14 = 'com.apple.instruments.remoteserver.DVTSecureSocketProxy';\nconst INSTRUMENT_SERVICE_NAME = 'com.apple.instruments.remoteserver';\n\nexport const INSTRUMENT_CHANNEL = Object.freeze({\n DEVICE_INFO: 'com.apple.instruments.server.services.deviceinfo',\n PROCESS_CONTROL: 'com.apple.instruments.server.services.processcontrol',\n SYSMONTAP: 'com.apple.instruments.server.services.sysmontap',\n NETWORKING: 'com.apple.instruments.server.services.networking',\n MOBILE_NOTIFICATIONS: 'com.apple.instruments.server.services.mobilenotifications',\n GRAPHICS_OPENGL: 'com.apple.instruments.server.services.graphics.opengl',\n APPLICATION_LISTING: 'com.apple.instruments.server.services.device.applictionListing',\n CONDITION_INDUCER: 'com.apple.instruments.server.services.ConditionInducer'\n});\n\nfunction defaultDict (createValue) {\n return new Proxy(Object.create(null), {\n get (storage, property) {\n if (!(property in storage)) {\n storage[property] = createValue(property);\n }\n return storage[property];\n }\n });\n}\n\n/** The callback function which will be called during the data transmission in instrument serve\n * @name DTXCallback\n * @function\n * @param {DTXMessage} object\n*/\n\n/**\n * @param {Socket} socketClient DTXMessage.selector\n * @param {?DTXCallback} event if empty will ignore any messages\n */\nclass InstrumentService extends BaseServiceSocket {\n constructor (socketClient, event) {\n super(socketClient);\n this._undefinedCallback = event;\n this._callbacks = new events.EventEmitter();\n this._channelCallbacks = new events.EventEmitter();\n this._replyQueues = defaultDict(() => []);\n this._channels = {};\n this._nextIdentifier = 1;\n this._encoder = new DTXEncoder();\n this._encoder.pipe(this._socketClient);\n this._assignClientFailureHandlers(this._encoder);\n this._decoder = new DTXDecoder();\n this._socketClient.pipe(this._decoder);\n this._decoder.on('data', this._handleData.bind(this));\n }\n\n /**\n * If the selector is registered, The message of the selector event will be returned. refer to this._handleData\n * @param {string} selector Listen for return DTXMessage.selector data\n * @param {DTXCallback} event\n */\n registerSelectorCallback (selector, event) {\n this._callbacks.addListener(selector, event);\n }\n\n /**\n * If the event is registered, all unregistered messages will be returned to event. refer to this._handleData\n * @param {DTXCallback} event\n */\n registerUndefinedCallback (event) {\n this._undefinedCallback = event;\n }\n\n /**\n * If the event is registered, this channel {CHANNEL} messages will be returned to event. refer to this._handleData\n * It's actually listening for int channelCode. In this._channel object to record channel key and int value\n * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO.\n * @param {DTXCallback} event\n */\n async registerChannelCallback (channel, event) {\n const channelId = await this.makeChannel(channel);\n this._channelCallbacks.addListener(channelId, event);\n }\n\n /**\n * Create a service channel, data transmission of the service will use this channelCode\n * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO\n * @returns {Promise<number|*>} instruments service channel code for data transmission\n */\n async makeChannel (channel) {\n if (channel in this._channels) {\n return this._channels[channel];\n }\n const channelCode = Object.keys(this._channels).length + 1;\n await this._callChannel(true, 0, '_requestChannelWithCode:identifier:', channelCode, channel);\n this._channels[channel] = channelCode;\n return channelCode;\n }\n\n /**\n * In general, we call this method to start the instrument dtx service\n * @param {string} channel instrument dtx service e.g: INSTRUMENT_CHANNEL.DEVICE_INFO\n * @param {string} selector instrument service method name (reflection calls)\n * @param {...any} auxiliaries parameters required by selector\n * @returns {Promise<DTXMessage>}\n * example:\n * instrumentService.callChannel(INSTRUMENT_CHANNEL.PROCESS_CONTROL,\n 'launchSuspendedProcessWithDevicePath:bundleIdentifier:environment:arguments:options:', '',\n bundleID, {}, [], {'StartSuspendedKey': 0, 'KillExisting': 1}\n */\n async callChannel (channel, selector, ...auxiliaries) {\n const channelCode = await this.makeChannel(channel);\n return await this._callChannel(true, channelCode, selector, ...auxiliaries);\n }\n\n async _callChannel (sync, channelCode, selector, ...auxiliaries) {\n const identifier = this._nextIdentifier;\n this._encoder.write({sync, channelCode, selector, auxiliaries, identifier});\n ++this._nextIdentifier;\n if (sync) {\n try {\n return await waitForCondition(() => {\n const queue = this._replyQueues[identifier];\n const data = queue.shift();\n if (!_.isUndefined(data)) {\n return data;\n }\n }, {waitMs: WAIT_REPLY_TIME_MS, intervalMs: CHECK_FREQ_MS, error: 'reply channel data timeout'});\n } catch (err) {\n this.close();\n throw new Error(err);\n }\n }\n }\n\n /**\n * Handling registered asynchronous message callbacks\n * @param {DTXMessage} data\n * @private\n */\n _handleData (data) {\n if (_.includes(data.selector, CHANNEL_CANCELED)) {\n this.close();\n }\n if (data.conversationIndex === 1) {\n this._replyQueues[data.identifier].push(data);\n } else if (this._channelCallbacks.listenerCount(CHANNEL_OFFSET - data.channelCode) > 0) {\n this._channelCallbacks.emit(CHANNEL_OFFSET - data.channelCode, data);\n } else {\n const selector = data.selector;\n if (_.isString(selector) && this._callbacks.listenerCount(selector) > 0) {\n this._callbacks.emit(selector, data);\n } else if (this._undefinedCallback) {\n this._undefinedCallback(data);\n }\n if (data.expectsReply) {\n this._replyAck(data);\n }\n }\n }\n\n /**\n * return a empty ack message\n * @param {DTXMessage} data\n */\n _replyAck (data) {\n const reply = new DTXMessage({\n identifier: data.identifier,\n channelCode: data.channelCode,\n selector: Buffer.alloc(EMPTY_MESSAGE_SIZE),\n conversationIndex: data.conversationIndex + 1,\n flags: FLAG_TYPES.reply\n });\n this._socketClient.write(reply.build());\n }\n}\n\nexport { InstrumentService, INSTRUMENT_SERVICE_NAME_VERSION_14, INSTRUMENT_SERVICE_NAME };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_baseService","require","_headers","_dtxEncode","_dtxDecode","_events","_interopRequireDefault","_lodash","_asyncbox","CHECK_FREQ_MS","WAIT_REPLY_TIME_MS","EMPTY_MESSAGE_SIZE","CHANNEL_CANCELED","CHANNEL_OFFSET","INSTRUMENT_SERVICE_NAME_VERSION_14","exports","INSTRUMENT_SERVICE_NAME","INSTRUMENT_CHANNEL","Object","freeze","DEVICE_INFO","PROCESS_CONTROL","SYSMONTAP","NETWORKING","MOBILE_NOTIFICATIONS","GRAPHICS_OPENGL","APPLICATION_LISTING","CONDITION_INDUCER","defaultDict","createValue","Proxy","create","get","storage","property","InstrumentService","BaseServiceSocket","constructor","socketClient","event","_undefinedCallback","_callbacks","events","EventEmitter","_channelCallbacks","_replyQueues","_channels","_nextIdentifier","_encoder","DTXEncoder","pipe","_socketClient","_assignClientFailureHandlers","_decoder","DTXDecoder","on","_handleData","bind","registerSelectorCallback","selector","addListener","registerUndefinedCallback","registerChannelCallback","channel","channelId","makeChannel","channelCode","keys","length","_callChannel","callChannel","auxiliaries","sync","identifier","write","DTXMessageAuxBuffer","waitForCondition","queue","data","shift","_","isUndefined","waitMs","intervalMs","error","err","close","Error","includes","conversationIndex","push","listenerCount","emit","isString","expectsReply","_replyAck","reply","DTXMessage","Buffer","alloc","flags","FLAG_TYPES","build"],"sources":["../../../lib/instrument/index.js"],"sourcesContent":["// Adapted from https://github.com/YueChen-C/py-ios-device\n\nimport { BaseServiceSocket } from '../base-service';\nimport { DTXMessage, DTXMessageAuxBuffer, FLAG_TYPES } from './headers';\nimport { DTXEncoder } from './transformer/dtx-encode';\nimport { DTXDecoder } from './transformer/dtx-decode';\nimport events from 'events';\nimport _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\n\nconst CHECK_FREQ_MS = 500;\nconst WAIT_REPLY_TIME_MS = 10000;\nconst EMPTY_MESSAGE_SIZE = 16;\nconst CHANNEL_CANCELED = '_channelCanceled';\nconst CHANNEL_OFFSET = 2 ** 32;\n\nconst INSTRUMENT_SERVICE_NAME_VERSION_14 = 'com.apple.instruments.remoteserver.DVTSecureSocketProxy';\nconst INSTRUMENT_SERVICE_NAME = 'com.apple.instruments.remoteserver';\n\nexport const INSTRUMENT_CHANNEL = Object.freeze({\n DEVICE_INFO: 'com.apple.instruments.server.services.deviceinfo',\n PROCESS_CONTROL: 'com.apple.instruments.server.services.processcontrol',\n SYSMONTAP: 'com.apple.instruments.server.services.sysmontap',\n NETWORKING: 'com.apple.instruments.server.services.networking',\n MOBILE_NOTIFICATIONS: 'com.apple.instruments.server.services.mobilenotifications',\n GRAPHICS_OPENGL: 'com.apple.instruments.server.services.graphics.opengl',\n APPLICATION_LISTING: 'com.apple.instruments.server.services.device.applictionListing',\n CONDITION_INDUCER: 'com.apple.instruments.server.services.ConditionInducer'\n});\n\nfunction defaultDict(createValue) {\n return new Proxy(Object.create(null), {\n get(storage, property) {\n if (!(property in storage)) {\n storage[property] = createValue(property);\n }\n return storage[property];\n }\n });\n}\n\n/** The callback function which will be called during the data transmission in instrument serve\n * @name DTXCallback\n * @function\n * @param {DTXMessage} object\n*/\n\n/**\n * @param {Socket} socketClient DTXMessage.selector\n * @param {?DTXCallback} event if empty will ignore any messages\n */\nclass InstrumentService extends BaseServiceSocket {\n constructor(socketClient, event) {\n super(socketClient);\n this._undefinedCallback = event;\n this._callbacks = new events.EventEmitter();\n this._channelCallbacks = new events.EventEmitter();\n this._replyQueues = defaultDict(() => []);\n this._channels = {};\n this._nextIdentifier = 1;\n this._encoder = new DTXEncoder();\n this._encoder.pipe(this._socketClient);\n this._assignClientFailureHandlers(this._encoder);\n this._decoder = new DTXDecoder();\n this._socketClient.pipe(this._decoder);\n this._decoder.on('data', this._handleData.bind(this));\n }\n\n /**\n * If the selector is registered, The message of the selector event will be returned. refer to this._handleData\n * @param {string} selector Listen for return DTXMessage.selector data\n * @param {DTXCallback} event\n */\n registerSelectorCallback(selector, event) {\n this._callbacks.addListener(selector, event);\n }\n\n /**\n * If the event is registered, all unregistered messages will be returned to event. refer to this._handleData\n * @param {DTXCallback} event\n */\n registerUndefinedCallback(event) {\n this._undefinedCallback = event;\n }\n\n /**\n * If the event is registered, this channel {CHANNEL} messages will be returned to event. refer to this._handleData\n * It's actually listening for int channelCode. In this._channel object to record channel key and int value\n * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO.\n * @param {DTXCallback} event\n */\n async registerChannelCallback(channel, event) {\n const channelId = await this.makeChannel(channel);\n this._channelCallbacks.addListener(channelId, event);\n }\n\n /**\n * Create a service channel, data transmission of the service will use this channelCode\n * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO\n * @returns {Promise<number|*>} instruments service channel code for data transmission\n */\n async makeChannel(channel) {\n if (channel in this._channels) {\n return this._channels[channel];\n }\n const channelCode = Object.keys(this._channels).length + 1;\n await this._callChannel(true, 0, '_requestChannelWithCode:identifier:', channelCode, channel);\n this._channels[channel] = channelCode;\n return channelCode;\n }\n\n /**\n * In general, we call this method to start the instrument dtx service\n * @param {string} channel instrument dtx service e.g: INSTRUMENT_CHANNEL.DEVICE_INFO\n * @param {string} selector instrument service method name (reflection calls)\n * @param {...any | DTXMessageAuxBuffer} auxiliaries parameters required by selector. If auxiliaries are passed in using\n * the DTXMessageAuxBuffer type, all the variables should be manually assembled into only one DTXMessageAuxBuffer instance.\n * @returns {Promise<DTXMessage>}\n * example:\n * instrumentService.callChannel(INSTRUMENT_CHANNEL.PROCESS_CONTROL,\n 'launchSuspendedProcessWithDevicePath:bundleIdentifier:environment:arguments:options:', '',\n bundleID, {}, [], {'StartSuspendedKey': 0, 'KillExisting': 1}\n */\n async callChannel(channel, selector, ...auxiliaries) {\n const channelCode = await this.makeChannel(channel);\n return await this._callChannel(true, channelCode, selector, ...auxiliaries);\n }\n\n async _callChannel(sync, channelCode, selector, ...auxiliaries) {\n const identifier = this._nextIdentifier;\n this._encoder.write({\n sync,\n channelCode,\n selector,\n auxiliaries: (auxiliaries.length === 1 && auxiliaries[0] instanceof DTXMessageAuxBuffer) ? auxiliaries[0] : auxiliaries,\n identifier\n });\n ++this._nextIdentifier;\n if (sync) {\n try {\n return await waitForCondition(() => {\n const queue = this._replyQueues[identifier];\n const data = queue.shift();\n if (!_.isUndefined(data)) {\n return data;\n }\n }, { waitMs: WAIT_REPLY_TIME_MS, intervalMs: CHECK_FREQ_MS, error: 'reply channel data timeout' });\n } catch (err) {\n this.close();\n throw new Error(err);\n }\n }\n }\n\n /**\n * Handling registered asynchronous message callbacks\n * @param {DTXMessage} data\n * @private\n */\n _handleData(data) {\n if (_.includes(data.selector, CHANNEL_CANCELED)) {\n this.close();\n }\n if (data.conversationIndex === 1) {\n this._replyQueues[data.identifier].push(data);\n } else if (this._channelCallbacks.listenerCount(CHANNEL_OFFSET - data.channelCode) > 0) {\n this._channelCallbacks.emit(CHANNEL_OFFSET - data.channelCode, data);\n } else {\n const selector = data.selector;\n if (_.isString(selector) && this._callbacks.listenerCount(selector) > 0) {\n this._callbacks.emit(selector, data);\n } else if (this._undefinedCallback) {\n this._undefinedCallback(data);\n }\n if (data.expectsReply) {\n this._replyAck(data);\n }\n }\n }\n\n /**\n * return a empty ack message\n * @param {DTXMessage} data\n */\n _replyAck(data) {\n const reply = new DTXMessage({\n identifier: data.identifier,\n channelCode: data.channelCode,\n selector: Buffer.alloc(EMPTY_MESSAGE_SIZE),\n conversationIndex: data.conversationIndex + 1,\n flags: FLAG_TYPES.reply\n });\n this._socketClient.write(reply.build());\n }\n}\n\nexport { InstrumentService, INSTRUMENT_SERVICE_NAME_VERSION_14, INSTRUMENT_SERVICE_NAME };\n"],"mappings":"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"}
@@ -32,7 +32,7 @@ class DTXEncoder extends _stream.default.Transform {
32
32
  selector,
33
33
  expectsReply: sync
34
34
  });
35
- if (auxiliaries instanceof _headers.DTXMessageAuxBuffer) {
35
+ if (auxiliaries instanceof _headers.DTXMessageAux) {
36
36
  dtx.auxiliaries = auxiliaries;
37
37
  } else {
38
38
  dtx.auxiliaries.data = auxiliaries;
@@ -41,4 +41,4 @@ class DTXEncoder extends _stream.default.Transform {
41
41
  }
42
42
  }
43
43
  exports.DTXEncoder = DTXEncoder;
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3RyZWFtIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaGVhZGVycyIsIkRUWEVuY29kZXIiLCJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsIm9iamVjdE1vZGUiLCJfdHJhbnNmb3JtIiwiZGF0YSIsImVuY29kaW5nIiwib25EYXRhIiwicHVzaCIsIl9lbmNvZGUiLCJzeW5jIiwiY2hhbm5lbENvZGUiLCJzZWxlY3RvciIsImF1eGlsaWFyaWVzIiwiaWRlbnRpZmllciIsImR0eCIsIkRUWE1lc3NhZ2UiLCJleHBlY3RzUmVwbHkiLCJEVFhNZXNzYWdlQXV4QnVmZmVyIiwiYnVpbGQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2luc3RydW1lbnQvdHJhbnNmb3JtZXIvZHR4LWVuY29kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge0RUWE1lc3NhZ2UsIERUWE1lc3NhZ2VBdXhCdWZmZXJ9IGZyb20gJy4uL2hlYWRlcnMnO1xuXG5cbmNsYXNzIERUWEVuY29kZXIgZXh0ZW5kcyBTdHJlYW0uVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgZW5jb2RpbmcsIG9uRGF0YSkge1xuICAgIHRoaXMucHVzaCh0aGlzLl9lbmNvZGUoZGF0YSksICdidWZmZXInKTtcbiAgICBvbkRhdGEoKTtcbiAgfVxuXG4gIF9lbmNvZGUgKGRhdGEpIHtcbiAgICBjb25zdCB7c3luYywgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCBhdXhpbGlhcmllcywgaWRlbnRpZmllcn0gPSBkYXRhO1xuICAgIGNvbnN0IGR0eCA9IG5ldyBEVFhNZXNzYWdlKHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5OiBzeW5jXG4gICAgfSk7XG4gICAgaWYgKGF1eGlsaWFyaWVzIGluc3RhbmNlb2YgRFRYTWVzc2FnZUF1eEJ1ZmZlcikge1xuICAgICAgZHR4LmF1eGlsaWFyaWVzID0gYXV4aWxpYXJpZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGR0eC5hdXhpbGlhcmllcy5kYXRhID0gYXV4aWxpYXJpZXM7XG4gICAgfVxuICAgIHJldHVybiBkdHguYnVpbGQoKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEVFhFbmNvZGVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBR0EsTUFBTUUsVUFBVSxTQUFTQyxlQUFNLENBQUNDLFNBQVMsQ0FBQztFQUV4Q0MsV0FBV0EsQ0FBQSxFQUFJO0lBQ2IsS0FBSyxDQUFDO01BQUVDLFVBQVUsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUM3QjtFQUVBQyxVQUFVQSxDQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFO0lBQ2xDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDSixJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDdkNFLE1BQU0sRUFBRTtFQUNWO0VBRUFFLE9BQU9BLENBQUVKLElBQUksRUFBRTtJQUNiLE1BQU07TUFBQ0ssSUFBSTtNQUFFQyxXQUFXO01BQUVDLFFBQVE7TUFBRUMsV0FBVztNQUFFQztJQUFVLENBQUMsR0FBR1QsSUFBSTtJQUNuRSxNQUFNVSxHQUFHLEdBQUcsSUFBSUMsbUJBQVUsQ0FBQztNQUN6QkYsVUFBVTtNQUNWSCxXQUFXO01BQ1hDLFFBQVE7TUFDUkssWUFBWSxFQUFFUDtJQUNoQixDQUFDLENBQUM7SUFDRixJQUFJRyxXQUFXLFlBQVlLLDRCQUFtQixFQUFFO01BQzlDSCxHQUFHLENBQUNGLFdBQVcsR0FBR0EsV0FBVztJQUMvQixDQUFDLE1BQU07TUFDTEUsR0FBRyxDQUFDRixXQUFXLENBQUNSLElBQUksR0FBR1EsV0FBVztJQUNwQztJQUNBLE9BQU9FLEdBQUcsQ0FBQ0ksS0FBSyxFQUFFO0VBQ3BCO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBckIsVUFBQSxHQUFBQSxVQUFBIn0=
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3RyZWFtIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaGVhZGVycyIsIkRUWEVuY29kZXIiLCJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsIm9iamVjdE1vZGUiLCJfdHJhbnNmb3JtIiwiZGF0YSIsImVuY29kaW5nIiwib25EYXRhIiwicHVzaCIsIl9lbmNvZGUiLCJzeW5jIiwiY2hhbm5lbENvZGUiLCJzZWxlY3RvciIsImF1eGlsaWFyaWVzIiwiaWRlbnRpZmllciIsImR0eCIsIkRUWE1lc3NhZ2UiLCJleHBlY3RzUmVwbHkiLCJEVFhNZXNzYWdlQXV4IiwiYnVpbGQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2luc3RydW1lbnQvdHJhbnNmb3JtZXIvZHR4LWVuY29kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge0RUWE1lc3NhZ2UsIERUWE1lc3NhZ2VBdXh9IGZyb20gJy4uL2hlYWRlcnMnO1xuXG5cbmNsYXNzIERUWEVuY29kZXIgZXh0ZW5kcyBTdHJlYW0uVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgZW5jb2RpbmcsIG9uRGF0YSkge1xuICAgIHRoaXMucHVzaCh0aGlzLl9lbmNvZGUoZGF0YSksICdidWZmZXInKTtcbiAgICBvbkRhdGEoKTtcbiAgfVxuXG4gIF9lbmNvZGUgKGRhdGEpIHtcbiAgICBjb25zdCB7c3luYywgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCBhdXhpbGlhcmllcywgaWRlbnRpZmllcn0gPSBkYXRhO1xuICAgIGNvbnN0IGR0eCA9IG5ldyBEVFhNZXNzYWdlKHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5OiBzeW5jXG4gICAgfSk7XG4gICAgaWYgKGF1eGlsaWFyaWVzIGluc3RhbmNlb2YgRFRYTWVzc2FnZUF1eCkge1xuICAgICAgZHR4LmF1eGlsaWFyaWVzID0gYXV4aWxpYXJpZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGR0eC5hdXhpbGlhcmllcy5kYXRhID0gYXV4aWxpYXJpZXM7XG4gICAgfVxuICAgIHJldHVybiBkdHguYnVpbGQoKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEVFhFbmNvZGVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBR0EsTUFBTUUsVUFBVSxTQUFTQyxlQUFNLENBQUNDLFNBQVMsQ0FBQztFQUV4Q0MsV0FBV0EsQ0FBQSxFQUFJO0lBQ2IsS0FBSyxDQUFDO01BQUVDLFVBQVUsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUM3QjtFQUVBQyxVQUFVQSxDQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFO0lBQ2xDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDSixJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDdkNFLE1BQU0sRUFBRTtFQUNWO0VBRUFFLE9BQU9BLENBQUVKLElBQUksRUFBRTtJQUNiLE1BQU07TUFBQ0ssSUFBSTtNQUFFQyxXQUFXO01BQUVDLFFBQVE7TUFBRUMsV0FBVztNQUFFQztJQUFVLENBQUMsR0FBR1QsSUFBSTtJQUNuRSxNQUFNVSxHQUFHLEdBQUcsSUFBSUMsbUJBQVUsQ0FBQztNQUN6QkYsVUFBVTtNQUNWSCxXQUFXO01BQ1hDLFFBQVE7TUFDUkssWUFBWSxFQUFFUDtJQUNoQixDQUFDLENBQUM7SUFDRixJQUFJRyxXQUFXLFlBQVlLLHNCQUFhLEVBQUU7TUFDeENILEdBQUcsQ0FBQ0YsV0FBVyxHQUFHQSxXQUFXO0lBQy9CLENBQUMsTUFBTTtNQUNMRSxHQUFHLENBQUNGLFdBQVcsQ0FBQ1IsSUFBSSxHQUFHUSxXQUFXO0lBQ3BDO0lBQ0EsT0FBT0UsR0FBRyxDQUFDSSxLQUFLLEVBQUU7RUFDcEI7QUFDRjtBQUFDQyxPQUFBLENBQUFyQixVQUFBLEdBQUFBLFVBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"dtx-encode.js","names":["_stream","_interopRequireDefault","require","_headers","DTXEncoder","Stream","Transform","constructor","objectMode","_transform","data","encoding","onData","push","_encode","sync","channelCode","selector","auxiliaries","identifier","dtx","DTXMessage","expectsReply","DTXMessageAuxBuffer","build","exports"],"sources":["../../../../lib/instrument/transformer/dtx-encode.js"],"sourcesContent":["import Stream from 'stream';\nimport {DTXMessage, DTXMessageAuxBuffer} from '../headers';\n\n\nclass DTXEncoder extends Stream.Transform {\n\n constructor () {\n super({ objectMode: true });\n }\n\n _transform (data, encoding, onData) {\n this.push(this._encode(data), 'buffer');\n onData();\n }\n\n _encode (data) {\n const {sync, channelCode, selector, auxiliaries, identifier} = data;\n const dtx = new DTXMessage({\n identifier,\n channelCode,\n selector,\n expectsReply: sync\n });\n if (auxiliaries instanceof DTXMessageAuxBuffer) {\n dtx.auxiliaries = auxiliaries;\n } else {\n dtx.auxiliaries.data = auxiliaries;\n }\n return dtx.build();\n }\n}\n\nexport { DTXEncoder };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,UAAU,SAASC,eAAM,CAACC,SAAS,CAAC;EAExCC,WAAWA,CAAA,EAAI;IACb,KAAK,CAAC;MAAEC,UAAU,EAAE;IAAK,CAAC,CAAC;EAC7B;EAEAC,UAAUA,CAAEC,IAAI,EAAEC,QAAQ,EAAEC,MAAM,EAAE;IAClC,IAAI,CAACC,IAAI,CAAC,IAAI,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE,QAAQ,CAAC;IACvCE,MAAM,EAAE;EACV;EAEAE,OAAOA,CAAEJ,IAAI,EAAE;IACb,MAAM;MAACK,IAAI;MAAEC,WAAW;MAAEC,QAAQ;MAAEC,WAAW;MAAEC;IAAU,CAAC,GAAGT,IAAI;IACnE,MAAMU,GAAG,GAAG,IAAIC,mBAAU,CAAC;MACzBF,UAAU;MACVH,WAAW;MACXC,QAAQ;MACRK,YAAY,EAAEP;IAChB,CAAC,CAAC;IACF,IAAIG,WAAW,YAAYK,4BAAmB,EAAE;MAC9CH,GAAG,CAACF,WAAW,GAAGA,WAAW;IAC/B,CAAC,MAAM;MACLE,GAAG,CAACF,WAAW,CAACR,IAAI,GAAGQ,WAAW;IACpC;IACA,OAAOE,GAAG,CAACI,KAAK,EAAE;EACpB;AACF;AAACC,OAAA,CAAArB,UAAA,GAAAA,UAAA"}
1
+ {"version":3,"file":"dtx-encode.js","names":["_stream","_interopRequireDefault","require","_headers","DTXEncoder","Stream","Transform","constructor","objectMode","_transform","data","encoding","onData","push","_encode","sync","channelCode","selector","auxiliaries","identifier","dtx","DTXMessage","expectsReply","DTXMessageAux","build","exports"],"sources":["../../../../lib/instrument/transformer/dtx-encode.js"],"sourcesContent":["import Stream from 'stream';\nimport {DTXMessage, DTXMessageAux} from '../headers';\n\n\nclass DTXEncoder extends Stream.Transform {\n\n constructor () {\n super({ objectMode: true });\n }\n\n _transform (data, encoding, onData) {\n this.push(this._encode(data), 'buffer');\n onData();\n }\n\n _encode (data) {\n const {sync, channelCode, selector, auxiliaries, identifier} = data;\n const dtx = new DTXMessage({\n identifier,\n channelCode,\n selector,\n expectsReply: sync\n });\n if (auxiliaries instanceof DTXMessageAux) {\n dtx.auxiliaries = auxiliaries;\n } else {\n dtx.auxiliaries.data = auxiliaries;\n }\n return dtx.build();\n }\n}\n\nexport { DTXEncoder };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,UAAU,SAASC,eAAM,CAACC,SAAS,CAAC;EAExCC,WAAWA,CAAA,EAAI;IACb,KAAK,CAAC;MAAEC,UAAU,EAAE;IAAK,CAAC,CAAC;EAC7B;EAEAC,UAAUA,CAAEC,IAAI,EAAEC,QAAQ,EAAEC,MAAM,EAAE;IAClC,IAAI,CAACC,IAAI,CAAC,IAAI,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE,QAAQ,CAAC;IACvCE,MAAM,EAAE;EACV;EAEAE,OAAOA,CAAEJ,IAAI,EAAE;IACb,MAAM;MAACK,IAAI;MAAEC,WAAW;MAAEC,QAAQ;MAAEC,WAAW;MAAEC;IAAU,CAAC,GAAGT,IAAI;IACnE,MAAMU,GAAG,GAAG,IAAIC,mBAAU,CAAC;MACzBF,UAAU;MACVH,WAAW;MACXC,QAAQ;MACRK,YAAY,EAAEP;IAChB,CAAC,CAAC;IACF,IAAIG,WAAW,YAAYK,sBAAa,EAAE;MACxCH,GAAG,CAACF,WAAW,GAAGA,WAAW;IAC/B,CAAC,MAAM;MACLE,GAAG,CAACF,WAAW,CAACR,IAAI,GAAGQ,WAAW;IACpC;IACA,OAAOE,GAAG,CAACI,KAAK,EAAE;EACpB;AACF;AAACC,OAAA,CAAArB,UAAA,GAAAA,UAAA"}
@@ -13,6 +13,7 @@ exports.startMCInstallService = startMCInstallService;
13
13
  exports.startNotificationProxyService = startNotificationProxyService;
14
14
  exports.startSimulateLocationService = startSimulateLocationService;
15
15
  exports.startSyslogService = startSyslogService;
16
+ exports.startTestmanagerdService = startTestmanagerdService;
16
17
  exports.startWebInspectorService = startWebInspectorService;
17
18
  require("source-map-support/register");
18
19
  var _utilities = require("./utilities");
@@ -24,11 +25,13 @@ var _afc = require("./afc");
24
25
  var _notificationProxy = require("./notification-proxy");
25
26
  var _houseArrest = require("./house-arrest");
26
27
  var _instrument = require("./instrument");
28
+ var _testmanagerd = require("./testmanagerd");
27
29
  var _mcinstall = require("./mcinstall");
28
30
  var _plistService = _interopRequireDefault(require("./plist-service"));
29
31
  var _semver = _interopRequireDefault(require("semver"));
30
32
  const CRASH_LOG_SERVICE_NAME = 'com.apple.crashreportcopymobile';
31
33
  const INSTRUMENT_HANDSHAKE_VERSION = 14;
34
+ const TESTMANAGERD_HANDSHAKE_VERSION = 14;
32
35
  async function startSyslogService(udid, opts = {}) {
33
36
  const socket = await startService(udid, _syslog.SYSLOG_SERVICE_NAME, opts.socket);
34
37
  return new _syslog.SyslogService(socket);
@@ -94,6 +97,10 @@ async function startInstrumentService(udid, opts = {}) {
94
97
  const osVersion = opts.osVersion || (await (0, _utilities.getOSVersion)(udid, opts.socket));
95
98
  return new _instrument.InstrumentService(parseInt(osVersion.split('.')[0], 10) < INSTRUMENT_HANDSHAKE_VERSION ? await startService(udid, _instrument.INSTRUMENT_SERVICE_NAME, opts.socket, true) : await startService(udid, _instrument.INSTRUMENT_SERVICE_NAME_VERSION_14, opts.socket));
96
99
  }
100
+ async function startTestmanagerdService(udid, opts = {}) {
101
+ const osVersion = opts.osVersion || (await (0, _utilities.getOSVersion)(udid, opts.socket));
102
+ return new _testmanagerd.TestmanagerdService(parseInt(osVersion.split('.')[0], 10) < TESTMANAGERD_HANDSHAKE_VERSION ? await startService(udid, _testmanagerd.TESTMANAGERD_SERVICE_NAME, opts.socket, true) : await startService(udid, _testmanagerd.TESTMANAGERD_SERVICE_NAME_VERSION_14, opts.socket));
103
+ }
97
104
  async function startMCInstallService(udid, opts = {}) {
98
105
  const socket = await startService(udid, _mcinstall.MC_INSTALL_SERVICE_NAME, opts.socket);
99
106
  return new _mcinstall.MCInstallProxyService(new _plistService.default(socket));
@@ -111,4 +118,4 @@ async function startService(udid, serviceName, socket, handshakeOnly = false) {
111
118
  lockdown.close();
112
119
  }
113
120
  }
114
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbGl0aWVzIiwicmVxdWlyZSIsIl9zeXNsb2ciLCJfc2ltdWxhdGVsb2NhdGlvbiIsIl93ZWJpbnNwZWN0b3IiLCJfaW5zdGFsbGF0aW9uUHJveHkiLCJfYWZjIiwiX25vdGlmaWNhdGlvblByb3h5IiwiX2hvdXNlQXJyZXN0IiwiX2luc3RydW1lbnQiLCJfbWNpbnN0YWxsIiwiX3BsaXN0U2VydmljZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2VtdmVyIiwiQ1JBU0hfTE9HX1NFUlZJQ0VfTkFNRSIsIklOU1RSVU1FTlRfSEFORFNIQUtFX1ZFUlNJT04iLCJzdGFydFN5c2xvZ1NlcnZpY2UiLCJ1ZGlkIiwib3B0cyIsInNvY2tldCIsInN0YXJ0U2VydmljZSIsIlNZU0xPR19TRVJWSUNFX05BTUUiLCJTeXNsb2dTZXJ2aWNlIiwic3RhcnRTaW11bGF0ZUxvY2F0aW9uU2VydmljZSIsIlNJTVVMQVRFX0xPQ0FUSU9OX1NFUlZJQ0VfTkFNRSIsIlNpbXVsYXRlTG9jYXRpb25TZXJ2aWNlIiwic3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlIiwib3NWZXJzaW9uIiwiZ2V0T1NWZXJzaW9uIiwiaXNTaW11bGF0b3IiLCJ2ZXJib3NlIiwidmVyYm9zZUhleER1bXAiLCJzb2NrZXRDaHVua1NpemUiLCJtYXhGcmFtZUxlbmd0aCIsInNlbXZlclZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJFcnJvciIsIldlYkluc3BlY3RvclNlcnZpY2UiLCJtYWpvck9zVmVyc2lvbiIsIm1ham9yIiwic29ja2V0Q2xpZW50IiwiV0VCX0lOU1BFQ1RPUl9TRVJWSUNFX05BTUUiLCJ1bmRlZmluZWQiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsIklOU1RBTExBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUiLCJJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UiLCJQbGlzdFNlcnZpY2UiLCJzdGFydEFmY1NlcnZpY2UiLCJBRkNfU0VSVklDRV9OQU1FIiwiQWZjU2VydmljZSIsInN0YXJ0Q3Jhc2hMb2dTZXJ2aWNlIiwic3RhcnROb3RpZmljYXRpb25Qcm94eVNlcnZpY2UiLCJOT1RJRklDQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIiwiTm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlIiwic3RhcnRIb3VzZUFycmVzdFNlcnZpY2UiLCJIT1VTRV9BUlJFU1RfU0VSVklDRV9OQU1FIiwiSG91c2VBcnJlc3RTZXJ2aWNlIiwic3RhcnRJbnN0cnVtZW50U2VydmljZSIsIkluc3RydW1lbnRTZXJ2aWNlIiwicGFyc2VJbnQiLCJzcGxpdCIsIklOU1RSVU1FTlRfU0VSVklDRV9OQU1FIiwiSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCIsInN0YXJ0TUNJbnN0YWxsU2VydmljZSIsIk1DX0lOU1RBTExfU0VSVklDRV9OQU1FIiwiTUNJbnN0YWxsUHJveHlTZXJ2aWNlIiwic2VydmljZU5hbWUiLCJoYW5kc2hha2VPbmx5IiwibG9ja2Rvd24iLCJzdGFydExvY2tkb3duU2Vzc2lvbiIsInNlcnZpY2UiLCJFbmFibGVTZXJ2aWNlU1NMIiwiY29ubmVjdFBvcnRTU0wiLCJQb3J0IiwiY29ubmVjdFBvcnQiLCJjbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zZXJ2aWNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0UG9ydCwgY29ubmVjdFBvcnRTU0wsIHN0YXJ0TG9ja2Rvd25TZXNzaW9uLCBnZXRPU1ZlcnNpb24gfSBmcm9tICcuL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTeXNsb2dTZXJ2aWNlLCBTWVNMT0dfU0VSVklDRV9OQU1FIH0gZnJvbSAnLi9zeXNsb2cnO1xuaW1wb3J0IHsgU2ltdWxhdGVMb2NhdGlvblNlcnZpY2UsIFNJTVVMQVRFX0xPQ0FUSU9OX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vc2ltdWxhdGVsb2NhdGlvbic7XG5pbXBvcnQgeyBXZWJJbnNwZWN0b3JTZXJ2aWNlLCBXRUJfSU5TUEVDVE9SX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vd2ViaW5zcGVjdG9yJztcbmltcG9ydCB7IEluc3RhbGxhdGlvblByb3h5U2VydmljZSwgSU5TVEFMTEFUSU9OX1BST1hZX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vaW5zdGFsbGF0aW9uLXByb3h5JztcbmltcG9ydCB7IEFmY1NlcnZpY2UsIEFGQ19TRVJWSUNFX05BTUUgfSBmcm9tICcuL2FmYyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Qcm94eVNlcnZpY2UsIE5PVElGSUNBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wcm94eSc7XG5pbXBvcnQgeyBIb3VzZUFycmVzdFNlcnZpY2UsIEhPVVNFX0FSUkVTVF9TRVJWSUNFX05BTUUgfSBmcm9tICcuL2hvdXNlLWFycmVzdCc7XG5pbXBvcnQgeyBJbnN0cnVtZW50U2VydmljZSwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUV9IGZyb20gJy4vaW5zdHJ1bWVudCc7XG5pbXBvcnQgeyBNQ0luc3RhbGxQcm94eVNlcnZpY2UsIE1DX0lOU1RBTExfU0VSVklDRV9OQU1FfSBmcm9tICcuL21jaW5zdGFsbCc7XG5pbXBvcnQgUGxpc3RTZXJ2aWNlIGZyb20gJy4vcGxpc3Qtc2VydmljZSc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IENSQVNIX0xPR19TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLmNyYXNocmVwb3J0Y29weW1vYmlsZSc7XG5jb25zdCBJTlNUUlVNRU5UX0hBTkRTSEFLRV9WRVJTSU9OID0gMTQ7XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U3lzbG9nU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBTWVNMT0dfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgU3lzbG9nU2VydmljZShzb2NrZXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNpbXVsYXRlTG9jYXRpb25TZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIFNJTVVMQVRFX0xPQ0FUSU9OX1NFUlZJQ0VfTkFNRSwgb3B0cy5zb2NrZXQpO1xuICByZXR1cm4gbmV3IFNpbXVsYXRlTG9jYXRpb25TZXJ2aWNlKHNvY2tldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9zVmVyc2lvbiA9IG9wdHMub3NWZXJzaW9uIHx8IGF3YWl0IGdldE9TVmVyc2lvbih1ZGlkLCBvcHRzLnNvY2tldCk7XG4gIGNvbnN0IGlzU2ltdWxhdG9yID0gISFvcHRzLmlzU2ltdWxhdG9yO1xuICBjb25zdCB2ZXJib3NlID0gISFvcHRzLnZlcmJvc2U7XG4gIGNvbnN0IHZlcmJvc2VIZXhEdW1wID0gISFvcHRzLnZlcmJvc2VIZXhEdW1wO1xuICBjb25zdCBzb2NrZXRDaHVua1NpemUgPSBvcHRzLnNvY2tldENodW5rU2l6ZTtcbiAgY29uc3QgbWF4RnJhbWVMZW5ndGggPSBvcHRzLm1heEZyYW1lTGVuZ3RoO1xuICBjb25zdCBzZW12ZXJWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShvc1ZlcnNpb24pO1xuICBpZiAoIXNlbXZlclZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgYSBzZW12ZXIgdmVyc2lvbiBvdXQgb2YgJyR7b3NWZXJzaW9ufSdgKTtcbiAgfVxuICBpZiAob3B0cy5zb2NrZXQpIHtcbiAgICByZXR1cm4gbmV3IFdlYkluc3BlY3RvclNlcnZpY2Uoe1xuICAgICAgbWFqb3JPc1ZlcnNpb246IHNlbXZlclZlcnNpb24ubWFqb3IsXG4gICAgICBpc1NpbXVsYXRvcixcbiAgICAgIHNvY2tldENodW5rU2l6ZSxcbiAgICAgIHZlcmJvc2UsXG4gICAgICB2ZXJib3NlSGV4RHVtcCxcbiAgICAgIHNvY2tldENsaWVudDogb3B0cy5zb2NrZXQsXG4gICAgICBtYXhGcmFtZUxlbmd0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgV0VCX0lOU1BFQ1RPUl9TRVJWSUNFX05BTUUsIHVuZGVmaW5lZCk7XG4gIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yU2VydmljZSh7XG4gICAgbWFqb3JPc1ZlcnNpb246IHNlbXZlclZlcnNpb24ubWFqb3IsXG4gICAgaXNTaW11bGF0b3IsXG4gICAgc29ja2V0Q2h1bmtTaXplLFxuICAgIHZlcmJvc2UsXG4gICAgdmVyYm9zZUhleER1bXAsXG4gICAgc29ja2V0Q2xpZW50OiBzb2NrZXQsXG4gICAgbWF4RnJhbWVMZW5ndGgsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKG5ldyBQbGlzdFNlcnZpY2Uoc29ja2V0KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWZjU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBBRkNfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgQWZjU2VydmljZShzb2NrZXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydENyYXNoTG9nU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBDUkFTSF9MT0dfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgQWZjU2VydmljZShzb2NrZXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydE5vdGlmaWNhdGlvblByb3h5U2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBOT1RJRklDQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgTm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlKHNvY2tldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0SG91c2VBcnJlc3RTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIEhPVVNFX0FSUkVTVF9TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBIb3VzZUFycmVzdFNlcnZpY2Uoc29ja2V0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRJbnN0cnVtZW50U2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9zVmVyc2lvbiA9IG9wdHMub3NWZXJzaW9uIHx8IGF3YWl0IGdldE9TVmVyc2lvbih1ZGlkLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgSW5zdHJ1bWVudFNlcnZpY2UoXG4gIHBhcnNlSW50KG9zVmVyc2lvbi5zcGxpdCgnLicpWzBdLCAxMCkgPCBJTlNUUlVNRU5UX0hBTkRTSEFLRV9WRVJTSU9OXG4gICAgPyBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0LCB0cnVlKVxuICAgIDogYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIElOU1RSVU1FTlRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQsIG9wdHMuc29ja2V0KVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydE1DSW5zdGFsbFNlcnZpY2UgKHVkaWQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgTUNfSU5TVEFMTF9TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBNQ0luc3RhbGxQcm94eVNlcnZpY2UobmV3IFBsaXN0U2VydmljZShzb2NrZXQpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2aWNlICh1ZGlkLCBzZXJ2aWNlTmFtZSwgc29ja2V0LCBoYW5kc2hha2VPbmx5ID0gZmFsc2UpIHtcbiAgY29uc3QgbG9ja2Rvd24gPSBhd2FpdCBzdGFydExvY2tkb3duU2Vzc2lvbih1ZGlkLCBzb2NrZXQpO1xuICB0cnkge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBsb2NrZG93bi5zdGFydFNlcnZpY2Uoc2VydmljZU5hbWUpO1xuICAgIGlmIChzZXJ2aWNlLkVuYWJsZVNlcnZpY2VTU0wpIHtcbiAgICAgIHJldHVybiBhd2FpdCBjb25uZWN0UG9ydFNTTCh1ZGlkLCBzZXJ2aWNlLlBvcnQsIHNvY2tldCwgaGFuZHNoYWtlT25seSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCBjb25uZWN0UG9ydCh1ZGlkLCBzZXJ2aWNlLlBvcnQsIHNvY2tldCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGxvY2tkb3duLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgc3RhcnRTeXNsb2dTZXJ2aWNlLCBzdGFydFdlYkluc3BlY3RvclNlcnZpY2UsXG4gIHN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlLCBzdGFydFNpbXVsYXRlTG9jYXRpb25TZXJ2aWNlLFxuICBzdGFydEFmY1NlcnZpY2UsIHN0YXJ0Q3Jhc2hMb2dTZXJ2aWNlLCBzdGFydE5vdGlmaWNhdGlvblByb3h5U2VydmljZSxcbiAgc3RhcnRIb3VzZUFycmVzdFNlcnZpY2UsIHN0YXJ0SW5zdHJ1bWVudFNlcnZpY2Us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
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbGl0aWVzIiwicmVxdWlyZSIsIl9zeXNsb2ciLCJfc2ltdWxhdGVsb2NhdGlvbiIsIl93ZWJpbnNwZWN0b3IiLCJfaW5zdGFsbGF0aW9uUHJveHkiLCJfYWZjIiwiX25vdGlmaWNhdGlvblByb3h5IiwiX2hvdXNlQXJyZXN0IiwiX2luc3RydW1lbnQiLCJfdGVzdG1hbmFnZXJkIiwiX21jaW5zdGFsbCIsIl9wbGlzdFNlcnZpY2UiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3NlbXZlciIsIkNSQVNIX0xPR19TRVJWSUNFX05BTUUiLCJJTlNUUlVNRU5UX0hBTkRTSEFLRV9WRVJTSU9OIiwiVEVTVE1BTkFHRVJEX0hBTkRTSEFLRV9WRVJTSU9OIiwic3RhcnRTeXNsb2dTZXJ2aWNlIiwidWRpZCIsIm9wdHMiLCJzb2NrZXQiLCJzdGFydFNlcnZpY2UiLCJTWVNMT0dfU0VSVklDRV9OQU1FIiwiU3lzbG9nU2VydmljZSIsInN0YXJ0U2ltdWxhdGVMb2NhdGlvblNlcnZpY2UiLCJTSU1VTEFURV9MT0NBVElPTl9TRVJWSUNFX05BTUUiLCJTaW11bGF0ZUxvY2F0aW9uU2VydmljZSIsInN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSIsIm9zVmVyc2lvbiIsImdldE9TVmVyc2lvbiIsImlzU2ltdWxhdG9yIiwidmVyYm9zZSIsInZlcmJvc2VIZXhEdW1wIiwic29ja2V0Q2h1bmtTaXplIiwibWF4RnJhbWVMZW5ndGgiLCJzZW12ZXJWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwiRXJyb3IiLCJXZWJJbnNwZWN0b3JTZXJ2aWNlIiwibWFqb3JPc1ZlcnNpb24iLCJtYWpvciIsInNvY2tldENsaWVudCIsIldFQl9JTlNQRUNUT1JfU0VSVklDRV9OQU1FIiwidW5kZWZpbmVkIiwic3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UiLCJJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIiwiSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwiUGxpc3RTZXJ2aWNlIiwic3RhcnRBZmNTZXJ2aWNlIiwiQUZDX1NFUlZJQ0VfTkFNRSIsIkFmY1NlcnZpY2UiLCJzdGFydENyYXNoTG9nU2VydmljZSIsInN0YXJ0Tm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlIiwiTk9USUZJQ0FUSU9OX1BST1hZX1NFUlZJQ0VfTkFNRSIsIk5vdGlmaWNhdGlvblByb3h5U2VydmljZSIsInN0YXJ0SG91c2VBcnJlc3RTZXJ2aWNlIiwiSE9VU0VfQVJSRVNUX1NFUlZJQ0VfTkFNRSIsIkhvdXNlQXJyZXN0U2VydmljZSIsInN0YXJ0SW5zdHJ1bWVudFNlcnZpY2UiLCJJbnN0cnVtZW50U2VydmljZSIsInBhcnNlSW50Iiwic3BsaXQiLCJJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRSIsIklOU1RSVU1FTlRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQiLCJzdGFydFRlc3RtYW5hZ2VyZFNlcnZpY2UiLCJUZXN0bWFuYWdlcmRTZXJ2aWNlIiwiVEVTVE1BTkFHRVJEX1NFUlZJQ0VfTkFNRSIsIlRFU1RNQU5BR0VSRF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCIsInN0YXJ0TUNJbnN0YWxsU2VydmljZSIsIk1DX0lOU1RBTExfU0VSVklDRV9OQU1FIiwiTUNJbnN0YWxsUHJveHlTZXJ2aWNlIiwic2VydmljZU5hbWUiLCJoYW5kc2hha2VPbmx5IiwibG9ja2Rvd24iLCJzdGFydExvY2tkb3duU2Vzc2lvbiIsInNlcnZpY2UiLCJFbmFibGVTZXJ2aWNlU1NMIiwiY29ubmVjdFBvcnRTU0wiLCJQb3J0IiwiY29ubmVjdFBvcnQiLCJjbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zZXJ2aWNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25uZWN0UG9ydCwgY29ubmVjdFBvcnRTU0wsIHN0YXJ0TG9ja2Rvd25TZXNzaW9uLCBnZXRPU1ZlcnNpb24gfSBmcm9tICcuL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTeXNsb2dTZXJ2aWNlLCBTWVNMT0dfU0VSVklDRV9OQU1FIH0gZnJvbSAnLi9zeXNsb2cnO1xuaW1wb3J0IHsgU2ltdWxhdGVMb2NhdGlvblNlcnZpY2UsIFNJTVVMQVRFX0xPQ0FUSU9OX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vc2ltdWxhdGVsb2NhdGlvbic7XG5pbXBvcnQgeyBXZWJJbnNwZWN0b3JTZXJ2aWNlLCBXRUJfSU5TUEVDVE9SX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vd2ViaW5zcGVjdG9yJztcbmltcG9ydCB7IEluc3RhbGxhdGlvblByb3h5U2VydmljZSwgSU5TVEFMTEFUSU9OX1BST1hZX1NFUlZJQ0VfTkFNRSB9IGZyb20gJy4vaW5zdGFsbGF0aW9uLXByb3h5JztcbmltcG9ydCB7IEFmY1NlcnZpY2UsIEFGQ19TRVJWSUNFX05BTUUgfSBmcm9tICcuL2FmYyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Qcm94eVNlcnZpY2UsIE5PVElGSUNBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wcm94eSc7XG5pbXBvcnQgeyBIb3VzZUFycmVzdFNlcnZpY2UsIEhPVVNFX0FSUkVTVF9TRVJWSUNFX05BTUUgfSBmcm9tICcuL2hvdXNlLWFycmVzdCc7XG5pbXBvcnQgeyBJbnN0cnVtZW50U2VydmljZSwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUV9IGZyb20gJy4vaW5zdHJ1bWVudCc7XG5pbXBvcnQgeyBUZXN0bWFuYWdlcmRTZXJ2aWNlLCBURVNUTUFOQUdFUkRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQsIFRFU1RNQU5BR0VSRF9TRVJWSUNFX05BTUUgfSBmcm9tICcuL3Rlc3RtYW5hZ2VyZCc7XG5pbXBvcnQgeyBNQ0luc3RhbGxQcm94eVNlcnZpY2UsIE1DX0lOU1RBTExfU0VSVklDRV9OQU1FfSBmcm9tICcuL21jaW5zdGFsbCc7XG5pbXBvcnQgUGxpc3RTZXJ2aWNlIGZyb20gJy4vcGxpc3Qtc2VydmljZSc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IENSQVNIX0xPR19TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLmNyYXNocmVwb3J0Y29weW1vYmlsZSc7XG5jb25zdCBJTlNUUlVNRU5UX0hBTkRTSEFLRV9WRVJTSU9OID0gMTQ7XG5jb25zdCBURVNUTUFOQUdFUkRfSEFORFNIQUtFX1ZFUlNJT04gPSAxNDtcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTeXNsb2dTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIFNZU0xPR19TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBTeXNsb2dTZXJ2aWNlKHNvY2tldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2ltdWxhdGVMb2NhdGlvblNlcnZpY2UgKHVkaWQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgU0lNVUxBVEVfTE9DQVRJT05fU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgU2ltdWxhdGVMb2NhdGlvblNlcnZpY2Uoc29ja2V0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgb3NWZXJzaW9uID0gb3B0cy5vc1ZlcnNpb24gfHwgYXdhaXQgZ2V0T1NWZXJzaW9uKHVkaWQsIG9wdHMuc29ja2V0KTtcbiAgY29uc3QgaXNTaW11bGF0b3IgPSAhIW9wdHMuaXNTaW11bGF0b3I7XG4gIGNvbnN0IHZlcmJvc2UgPSAhIW9wdHMudmVyYm9zZTtcbiAgY29uc3QgdmVyYm9zZUhleER1bXAgPSAhIW9wdHMudmVyYm9zZUhleER1bXA7XG4gIGNvbnN0IHNvY2tldENodW5rU2l6ZSA9IG9wdHMuc29ja2V0Q2h1bmtTaXplO1xuICBjb25zdCBtYXhGcmFtZUxlbmd0aCA9IG9wdHMubWF4RnJhbWVMZW5ndGg7XG4gIGNvbnN0IHNlbXZlclZlcnNpb24gPSBzZW12ZXIuY29lcmNlKG9zVmVyc2lvbik7XG4gIGlmICghc2VtdmVyVmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBhIHNlbXZlciB2ZXJzaW9uIG91dCBvZiAnJHtvc1ZlcnNpb259J2ApO1xuICB9XG4gIGlmIChvcHRzLnNvY2tldCkge1xuICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yU2VydmljZSh7XG4gICAgICBtYWpvck9zVmVyc2lvbjogc2VtdmVyVmVyc2lvbi5tYWpvcixcbiAgICAgIGlzU2ltdWxhdG9yLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIHZlcmJvc2VIZXhEdW1wLFxuICAgICAgc29ja2V0Q2xpZW50OiBvcHRzLnNvY2tldCxcbiAgICAgIG1heEZyYW1lTGVuZ3RoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBXRUJfSU5TUEVDVE9SX1NFUlZJQ0VfTkFNRSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3JTZXJ2aWNlKHtcbiAgICBtYWpvck9zVmVyc2lvbjogc2VtdmVyVmVyc2lvbi5tYWpvcixcbiAgICBpc1NpbXVsYXRvcixcbiAgICBzb2NrZXRDaHVua1NpemUsXG4gICAgdmVyYm9zZSxcbiAgICB2ZXJib3NlSGV4RHVtcCxcbiAgICBzb2NrZXRDbGllbnQ6IHNvY2tldCxcbiAgICBtYXhGcmFtZUxlbmd0aCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIElOU1RBTExBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UobmV3IFBsaXN0U2VydmljZShzb2NrZXQpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRBZmNTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIEFGQ19TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBBZmNTZXJ2aWNlKHNvY2tldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q3Jhc2hMb2dTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIENSQVNIX0xPR19TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBBZmNTZXJ2aWNlKHNvY2tldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0Tm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIE5PVElGSUNBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb25Qcm94eVNlcnZpY2Uoc29ja2V0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRIb3VzZUFycmVzdFNlcnZpY2UgKHVkaWQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgSE9VU0VfQVJSRVNUX1NFUlZJQ0VfTkFNRSwgb3B0cy5zb2NrZXQpO1xuICByZXR1cm4gbmV3IEhvdXNlQXJyZXN0U2VydmljZShzb2NrZXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydEluc3RydW1lbnRTZXJ2aWNlICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgb3NWZXJzaW9uID0gb3B0cy5vc1ZlcnNpb24gfHwgYXdhaXQgZ2V0T1NWZXJzaW9uKHVkaWQsIG9wdHMuc29ja2V0KTtcbiAgcmV0dXJuIG5ldyBJbnN0cnVtZW50U2VydmljZShcbiAgcGFyc2VJbnQob3NWZXJzaW9uLnNwbGl0KCcuJylbMF0sIDEwKSA8IElOU1RSVU1FTlRfSEFORFNIQUtFX1ZFUlNJT05cbiAgICA/IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRSwgb3B0cy5zb2NrZXQsIHRydWUpXG4gICAgOiBhd2FpdCBzdGFydFNlcnZpY2UodWRpZCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgb3B0cy5zb2NrZXQpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0VGVzdG1hbmFnZXJkU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9zVmVyc2lvbiA9IG9wdHMub3NWZXJzaW9uIHx8IGF3YWl0IGdldE9TVmVyc2lvbih1ZGlkLCBvcHRzLnNvY2tldCk7XG4gIHJldHVybiBuZXcgVGVzdG1hbmFnZXJkU2VydmljZShcbiAgICBwYXJzZUludChvc1ZlcnNpb24uc3BsaXQoJy4nKVswXSwgMTApIDwgVEVTVE1BTkFHRVJEX0hBTkRTSEFLRV9WRVJTSU9OXG4gICAgICA/IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBURVNUTUFOQUdFUkRfU0VSVklDRV9OQU1FLCBvcHRzLnNvY2tldCwgdHJ1ZSlcbiAgICAgIDogYXdhaXQgc3RhcnRTZXJ2aWNlKHVkaWQsIFRFU1RNQU5BR0VSRF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgb3B0cy5zb2NrZXQpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0TUNJbnN0YWxsU2VydmljZSAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IHN0YXJ0U2VydmljZSh1ZGlkLCBNQ19JTlNUQUxMX1NFUlZJQ0VfTkFNRSwgb3B0cy5zb2NrZXQpO1xuICByZXR1cm4gbmV3IE1DSW5zdGFsbFByb3h5U2VydmljZShuZXcgUGxpc3RTZXJ2aWNlKHNvY2tldCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZpY2UgKHVkaWQsIHNlcnZpY2VOYW1lLCBzb2NrZXQsIGhhbmRzaGFrZU9ubHkgPSBmYWxzZSkge1xuICBjb25zdCBsb2NrZG93biA9IGF3YWl0IHN0YXJ0TG9ja2Rvd25TZXNzaW9uKHVkaWQsIHNvY2tldCk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VydmljZSA9IGF3YWl0IGxvY2tkb3duLnN0YXJ0U2VydmljZShzZXJ2aWNlTmFtZSk7XG4gICAgaWYgKHNlcnZpY2UuRW5hYmxlU2VydmljZVNTTCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNvbm5lY3RQb3J0U1NMKHVkaWQsIHNlcnZpY2UuUG9ydCwgc29ja2V0LCBoYW5kc2hha2VPbmx5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IGNvbm5lY3RQb3J0KHVkaWQsIHNlcnZpY2UuUG9ydCwgc29ja2V0KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgbG9ja2Rvd24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBzdGFydFN5c2xvZ1NlcnZpY2UsIHN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSxcbiAgc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UsIHN0YXJ0U2ltdWxhdGVMb2NhdGlvblNlcnZpY2UsXG4gIHN0YXJ0QWZjU2VydmljZSwgc3RhcnRDcmFzaExvZ1NlcnZpY2UsIHN0YXJ0Tm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlLFxuICBzdGFydEhvdXNlQXJyZXN0U2VydmljZSwgc3RhcnRJbnN0cnVtZW50U2VydmljZSwgc3RhcnRUZXN0bWFuYWdlcmRTZXJ2aWNlLFxuICBzdGFydE1DSW5zdGFsbFNlcnZpY2Vcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtB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
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","names":["_utilities","require","_syslog","_simulatelocation","_webinspector","_installationProxy","_afc","_notificationProxy","_houseArrest","_instrument","_mcinstall","_plistService","_interopRequireDefault","_semver","CRASH_LOG_SERVICE_NAME","INSTRUMENT_HANDSHAKE_VERSION","startSyslogService","udid","opts","socket","startService","SYSLOG_SERVICE_NAME","SyslogService","startSimulateLocationService","SIMULATE_LOCATION_SERVICE_NAME","SimulateLocationService","startWebInspectorService","osVersion","getOSVersion","isSimulator","verbose","verboseHexDump","socketChunkSize","maxFrameLength","semverVersion","semver","coerce","Error","WebInspectorService","majorOsVersion","major","socketClient","WEB_INSPECTOR_SERVICE_NAME","undefined","startInstallationProxyService","INSTALLATION_PROXY_SERVICE_NAME","InstallationProxyService","PlistService","startAfcService","AFC_SERVICE_NAME","AfcService","startCrashLogService","startNotificationProxyService","NOTIFICATION_PROXY_SERVICE_NAME","NotificationProxyService","startHouseArrestService","HOUSE_ARREST_SERVICE_NAME","HouseArrestService","startInstrumentService","InstrumentService","parseInt","split","INSTRUMENT_SERVICE_NAME","INSTRUMENT_SERVICE_NAME_VERSION_14","startMCInstallService","MC_INSTALL_SERVICE_NAME","MCInstallProxyService","serviceName","handshakeOnly","lockdown","startLockdownSession","service","EnableServiceSSL","connectPortSSL","Port","connectPort","close"],"sources":["../../lib/services.js"],"sourcesContent":["import { connectPort, connectPortSSL, startLockdownSession, getOSVersion } from './utilities';\nimport { SyslogService, SYSLOG_SERVICE_NAME } from './syslog';\nimport { SimulateLocationService, SIMULATE_LOCATION_SERVICE_NAME } from './simulatelocation';\nimport { WebInspectorService, WEB_INSPECTOR_SERVICE_NAME } from './webinspector';\nimport { InstallationProxyService, INSTALLATION_PROXY_SERVICE_NAME } from './installation-proxy';\nimport { AfcService, AFC_SERVICE_NAME } from './afc';\nimport { NotificationProxyService, NOTIFICATION_PROXY_SERVICE_NAME } from './notification-proxy';\nimport { HouseArrestService, HOUSE_ARREST_SERVICE_NAME } from './house-arrest';\nimport { InstrumentService, INSTRUMENT_SERVICE_NAME_VERSION_14, INSTRUMENT_SERVICE_NAME} from './instrument';\nimport { MCInstallProxyService, MC_INSTALL_SERVICE_NAME} from './mcinstall';\nimport PlistService from './plist-service';\nimport semver from 'semver';\n\nconst CRASH_LOG_SERVICE_NAME = 'com.apple.crashreportcopymobile';\nconst INSTRUMENT_HANDSHAKE_VERSION = 14;\n\nasync function startSyslogService (udid, opts = {}) {\n const socket = await startService(udid, SYSLOG_SERVICE_NAME, opts.socket);\n return new SyslogService(socket);\n}\n\nasync function startSimulateLocationService (udid, opts = {}) {\n const socket = await startService(udid, SIMULATE_LOCATION_SERVICE_NAME, opts.socket);\n return new SimulateLocationService(socket);\n}\n\nasync function startWebInspectorService (udid, opts = {}) {\n const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);\n const isSimulator = !!opts.isSimulator;\n const verbose = !!opts.verbose;\n const verboseHexDump = !!opts.verboseHexDump;\n const socketChunkSize = opts.socketChunkSize;\n const maxFrameLength = opts.maxFrameLength;\n const semverVersion = semver.coerce(osVersion);\n if (!semverVersion) {\n throw new Error(`Could not create a semver version out of '${osVersion}'`);\n }\n if (opts.socket) {\n return new WebInspectorService({\n majorOsVersion: semverVersion.major,\n isSimulator,\n socketChunkSize,\n verbose,\n verboseHexDump,\n socketClient: opts.socket,\n maxFrameLength,\n });\n }\n const socket = await startService(udid, WEB_INSPECTOR_SERVICE_NAME, undefined);\n return new WebInspectorService({\n majorOsVersion: semverVersion.major,\n isSimulator,\n socketChunkSize,\n verbose,\n verboseHexDump,\n socketClient: socket,\n maxFrameLength,\n });\n}\n\nasync function startInstallationProxyService (udid, opts = {}) {\n const socket = await startService(udid, INSTALLATION_PROXY_SERVICE_NAME, opts.socket);\n return new InstallationProxyService(new PlistService(socket));\n}\n\nasync function startAfcService (udid, opts = {}) {\n const socket = await startService(udid, AFC_SERVICE_NAME, opts.socket);\n return new AfcService(socket);\n}\n\nasync function startCrashLogService (udid, opts = {}) {\n const socket = await startService(udid, CRASH_LOG_SERVICE_NAME, opts.socket);\n return new AfcService(socket);\n}\n\nasync function startNotificationProxyService (udid, opts = {}) {\n const socket = await startService(udid, NOTIFICATION_PROXY_SERVICE_NAME, opts.socket);\n return new NotificationProxyService(socket);\n}\n\nasync function startHouseArrestService (udid, opts = {}) {\n const socket = await startService(udid, HOUSE_ARREST_SERVICE_NAME, opts.socket);\n return new HouseArrestService(socket);\n}\n\nasync function startInstrumentService (udid, opts = {}) {\n const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);\n return new InstrumentService(\n parseInt(osVersion.split('.')[0], 10) < INSTRUMENT_HANDSHAKE_VERSION\n ? await startService(udid, INSTRUMENT_SERVICE_NAME, opts.socket, true)\n : await startService(udid, INSTRUMENT_SERVICE_NAME_VERSION_14, opts.socket)\n );\n}\n\nasync function startMCInstallService (udid, opts = {}) {\n const socket = await startService(udid, MC_INSTALL_SERVICE_NAME, opts.socket);\n return new MCInstallProxyService(new PlistService(socket));\n}\n\nasync function startService (udid, serviceName, socket, handshakeOnly = false) {\n const lockdown = await startLockdownSession(udid, socket);\n try {\n const service = await lockdown.startService(serviceName);\n if (service.EnableServiceSSL) {\n return await connectPortSSL(udid, service.Port, socket, handshakeOnly);\n } else {\n return await connectPort(udid, service.Port, socket);\n }\n } finally {\n lockdown.close();\n }\n}\n\nexport {\n startSyslogService, startWebInspectorService,\n startInstallationProxyService, startSimulateLocationService,\n startAfcService, startCrashLogService, startNotificationProxyService,\n startHouseArrestService, startInstrumentService, startMCInstallService\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"services.js","names":["_utilities","require","_syslog","_simulatelocation","_webinspector","_installationProxy","_afc","_notificationProxy","_houseArrest","_instrument","_testmanagerd","_mcinstall","_plistService","_interopRequireDefault","_semver","CRASH_LOG_SERVICE_NAME","INSTRUMENT_HANDSHAKE_VERSION","TESTMANAGERD_HANDSHAKE_VERSION","startSyslogService","udid","opts","socket","startService","SYSLOG_SERVICE_NAME","SyslogService","startSimulateLocationService","SIMULATE_LOCATION_SERVICE_NAME","SimulateLocationService","startWebInspectorService","osVersion","getOSVersion","isSimulator","verbose","verboseHexDump","socketChunkSize","maxFrameLength","semverVersion","semver","coerce","Error","WebInspectorService","majorOsVersion","major","socketClient","WEB_INSPECTOR_SERVICE_NAME","undefined","startInstallationProxyService","INSTALLATION_PROXY_SERVICE_NAME","InstallationProxyService","PlistService","startAfcService","AFC_SERVICE_NAME","AfcService","startCrashLogService","startNotificationProxyService","NOTIFICATION_PROXY_SERVICE_NAME","NotificationProxyService","startHouseArrestService","HOUSE_ARREST_SERVICE_NAME","HouseArrestService","startInstrumentService","InstrumentService","parseInt","split","INSTRUMENT_SERVICE_NAME","INSTRUMENT_SERVICE_NAME_VERSION_14","startTestmanagerdService","TestmanagerdService","TESTMANAGERD_SERVICE_NAME","TESTMANAGERD_SERVICE_NAME_VERSION_14","startMCInstallService","MC_INSTALL_SERVICE_NAME","MCInstallProxyService","serviceName","handshakeOnly","lockdown","startLockdownSession","service","EnableServiceSSL","connectPortSSL","Port","connectPort","close"],"sources":["../../lib/services.js"],"sourcesContent":["import { connectPort, connectPortSSL, startLockdownSession, getOSVersion } from './utilities';\nimport { SyslogService, SYSLOG_SERVICE_NAME } from './syslog';\nimport { SimulateLocationService, SIMULATE_LOCATION_SERVICE_NAME } from './simulatelocation';\nimport { WebInspectorService, WEB_INSPECTOR_SERVICE_NAME } from './webinspector';\nimport { InstallationProxyService, INSTALLATION_PROXY_SERVICE_NAME } from './installation-proxy';\nimport { AfcService, AFC_SERVICE_NAME } from './afc';\nimport { NotificationProxyService, NOTIFICATION_PROXY_SERVICE_NAME } from './notification-proxy';\nimport { HouseArrestService, HOUSE_ARREST_SERVICE_NAME } from './house-arrest';\nimport { InstrumentService, INSTRUMENT_SERVICE_NAME_VERSION_14, INSTRUMENT_SERVICE_NAME} from './instrument';\nimport { TestmanagerdService, TESTMANAGERD_SERVICE_NAME_VERSION_14, TESTMANAGERD_SERVICE_NAME } from './testmanagerd';\nimport { MCInstallProxyService, MC_INSTALL_SERVICE_NAME} from './mcinstall';\nimport PlistService from './plist-service';\nimport semver from 'semver';\n\nconst CRASH_LOG_SERVICE_NAME = 'com.apple.crashreportcopymobile';\nconst INSTRUMENT_HANDSHAKE_VERSION = 14;\nconst TESTMANAGERD_HANDSHAKE_VERSION = 14;\n\nasync function startSyslogService (udid, opts = {}) {\n const socket = await startService(udid, SYSLOG_SERVICE_NAME, opts.socket);\n return new SyslogService(socket);\n}\n\nasync function startSimulateLocationService (udid, opts = {}) {\n const socket = await startService(udid, SIMULATE_LOCATION_SERVICE_NAME, opts.socket);\n return new SimulateLocationService(socket);\n}\n\nasync function startWebInspectorService (udid, opts = {}) {\n const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);\n const isSimulator = !!opts.isSimulator;\n const verbose = !!opts.verbose;\n const verboseHexDump = !!opts.verboseHexDump;\n const socketChunkSize = opts.socketChunkSize;\n const maxFrameLength = opts.maxFrameLength;\n const semverVersion = semver.coerce(osVersion);\n if (!semverVersion) {\n throw new Error(`Could not create a semver version out of '${osVersion}'`);\n }\n if (opts.socket) {\n return new WebInspectorService({\n majorOsVersion: semverVersion.major,\n isSimulator,\n socketChunkSize,\n verbose,\n verboseHexDump,\n socketClient: opts.socket,\n maxFrameLength,\n });\n }\n const socket = await startService(udid, WEB_INSPECTOR_SERVICE_NAME, undefined);\n return new WebInspectorService({\n majorOsVersion: semverVersion.major,\n isSimulator,\n socketChunkSize,\n verbose,\n verboseHexDump,\n socketClient: socket,\n maxFrameLength,\n });\n}\n\nasync function startInstallationProxyService (udid, opts = {}) {\n const socket = await startService(udid, INSTALLATION_PROXY_SERVICE_NAME, opts.socket);\n return new InstallationProxyService(new PlistService(socket));\n}\n\nasync function startAfcService (udid, opts = {}) {\n const socket = await startService(udid, AFC_SERVICE_NAME, opts.socket);\n return new AfcService(socket);\n}\n\nasync function startCrashLogService (udid, opts = {}) {\n const socket = await startService(udid, CRASH_LOG_SERVICE_NAME, opts.socket);\n return new AfcService(socket);\n}\n\nasync function startNotificationProxyService (udid, opts = {}) {\n const socket = await startService(udid, NOTIFICATION_PROXY_SERVICE_NAME, opts.socket);\n return new NotificationProxyService(socket);\n}\n\nasync function startHouseArrestService (udid, opts = {}) {\n const socket = await startService(udid, HOUSE_ARREST_SERVICE_NAME, opts.socket);\n return new HouseArrestService(socket);\n}\n\nasync function startInstrumentService (udid, opts = {}) {\n const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);\n return new InstrumentService(\n parseInt(osVersion.split('.')[0], 10) < INSTRUMENT_HANDSHAKE_VERSION\n ? await startService(udid, INSTRUMENT_SERVICE_NAME, opts.socket, true)\n : await startService(udid, INSTRUMENT_SERVICE_NAME_VERSION_14, opts.socket)\n );\n}\n\nasync function startTestmanagerdService (udid, opts = {}) {\n const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);\n return new TestmanagerdService(\n parseInt(osVersion.split('.')[0], 10) < TESTMANAGERD_HANDSHAKE_VERSION\n ? await startService(udid, TESTMANAGERD_SERVICE_NAME, opts.socket, true)\n : await startService(udid, TESTMANAGERD_SERVICE_NAME_VERSION_14, opts.socket)\n );\n}\n\nasync function startMCInstallService (udid, opts = {}) {\n const socket = await startService(udid, MC_INSTALL_SERVICE_NAME, opts.socket);\n return new MCInstallProxyService(new PlistService(socket));\n}\n\nasync function startService (udid, serviceName, socket, handshakeOnly = false) {\n const lockdown = await startLockdownSession(udid, socket);\n try {\n const service = await lockdown.startService(serviceName);\n if (service.EnableServiceSSL) {\n return await connectPortSSL(udid, service.Port, socket, handshakeOnly);\n } else {\n return await connectPort(udid, service.Port, socket);\n }\n } finally {\n lockdown.close();\n }\n}\n\nexport {\n startSyslogService, startWebInspectorService,\n startInstallationProxyService, startSimulateLocationService,\n startAfcService, startCrashLogService, startNotificationProxyService,\n startHouseArrestService, startInstrumentService, startTestmanagerdService,\n startMCInstallService\n};\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TestmanagerdService = exports.TESTMANAGERD_SERVICE_NAME_VERSION_14 = exports.TESTMANAGERD_SERVICE_NAME = exports.TESTMANAGERD_CHANNEL = void 0;
7
+ require("source-map-support/register");
8
+ var _instrument = require("../instrument");
9
+ const TESTMANAGERD_SERVICE_NAME_VERSION_14 = 'com.apple.testmanagerd.lockdown.secure';
10
+ exports.TESTMANAGERD_SERVICE_NAME_VERSION_14 = TESTMANAGERD_SERVICE_NAME_VERSION_14;
11
+ const TESTMANAGERD_SERVICE_NAME = 'com.apple.testmanagerd.lockdown';
12
+ exports.TESTMANAGERD_SERVICE_NAME = TESTMANAGERD_SERVICE_NAME;
13
+ const TESTMANAGERD_CHANNEL = Object.freeze({
14
+ DAEMON_CONNECTION_INTERFACE: 'dtxproxy:XCTestManager_IDEInterface:XCTestManager_DaemonConnectionInterface'
15
+ });
16
+ exports.TESTMANAGERD_CHANNEL = TESTMANAGERD_CHANNEL;
17
+ class TestmanagerdService extends _instrument.InstrumentService {}
18
+ exports.TestmanagerdService = TestmanagerdService;
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5zdHJ1bWVudCIsInJlcXVpcmUiLCJURVNUTUFOQUdFUkRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQiLCJleHBvcnRzIiwiVEVTVE1BTkFHRVJEX1NFUlZJQ0VfTkFNRSIsIlRFU1RNQU5BR0VSRF9DSEFOTkVMIiwiT2JqZWN0IiwiZnJlZXplIiwiREFFTU9OX0NPTk5FQ1RJT05fSU5URVJGQUNFIiwiVGVzdG1hbmFnZXJkU2VydmljZSIsIkluc3RydW1lbnRTZXJ2aWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Rlc3RtYW5hZ2VyZC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnN0cnVtZW50U2VydmljZSB9IGZyb20gJy4uL2luc3RydW1lbnQnO1xuXG5jb25zdCBURVNUTUFOQUdFUkRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQgPSAnY29tLmFwcGxlLnRlc3RtYW5hZ2VyZC5sb2NrZG93bi5zZWN1cmUnO1xuY29uc3QgVEVTVE1BTkFHRVJEX1NFUlZJQ0VfTkFNRSA9ICdjb20uYXBwbGUudGVzdG1hbmFnZXJkLmxvY2tkb3duJztcblxuY29uc3QgVEVTVE1BTkFHRVJEX0NIQU5ORUwgPSBPYmplY3QuZnJlZXplKHtcbiAgICBEQUVNT05fQ09OTkVDVElPTl9JTlRFUkZBQ0U6ICdkdHhwcm94eTpYQ1Rlc3RNYW5hZ2VyX0lERUludGVyZmFjZTpYQ1Rlc3RNYW5hZ2VyX0RhZW1vbkNvbm5lY3Rpb25JbnRlcmZhY2UnLFxufSk7XG5cblxuY2xhc3MgVGVzdG1hbmFnZXJkU2VydmljZSBleHRlbmRzIEluc3RydW1lbnRTZXJ2aWNlIHtcblxufVxuXG5leHBvcnQgeyBUZXN0bWFuYWdlcmRTZXJ2aWNlLCBURVNUTUFOQUdFUkRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQsIFRFU1RNQU5BR0VSRF9TRVJWSUNFX05BTUUsIFRFU1RNQU5BR0VSRF9DSEFOTkVMIH07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FBRUEsTUFBTUMsb0NBQW9DLEdBQUcsd0NBQXdDO0FBQUNDLE9BQUEsQ0FBQUQsb0NBQUEsR0FBQUEsb0NBQUE7QUFDdEYsTUFBTUUseUJBQXlCLEdBQUcsaUNBQWlDO0FBQUNELE9BQUEsQ0FBQUMseUJBQUEsR0FBQUEseUJBQUE7QUFFcEUsTUFBTUMsb0JBQW9CLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO0VBQ3ZDQywyQkFBMkIsRUFBRTtBQUNqQyxDQUFDLENBQUM7QUFBQ0wsT0FBQSxDQUFBRSxvQkFBQSxHQUFBQSxvQkFBQTtBQUdILE1BQU1JLG1CQUFtQixTQUFTQyw2QkFBaUIsQ0FBQztBQUVuRFAsT0FBQSxDQUFBTSxtQkFBQSxHQUFBQSxtQkFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_instrument","require","TESTMANAGERD_SERVICE_NAME_VERSION_14","exports","TESTMANAGERD_SERVICE_NAME","TESTMANAGERD_CHANNEL","Object","freeze","DAEMON_CONNECTION_INTERFACE","TestmanagerdService","InstrumentService"],"sources":["../../../lib/testmanagerd/index.js"],"sourcesContent":["import { InstrumentService } from '../instrument';\n\nconst TESTMANAGERD_SERVICE_NAME_VERSION_14 = 'com.apple.testmanagerd.lockdown.secure';\nconst TESTMANAGERD_SERVICE_NAME = 'com.apple.testmanagerd.lockdown';\n\nconst TESTMANAGERD_CHANNEL = Object.freeze({\n DAEMON_CONNECTION_INTERFACE: 'dtxproxy:XCTestManager_IDEInterface:XCTestManager_DaemonConnectionInterface',\n});\n\n\nclass TestmanagerdService extends InstrumentService {\n\n}\n\nexport { TestmanagerdService, TESTMANAGERD_SERVICE_NAME_VERSION_14, TESTMANAGERD_SERVICE_NAME, TESTMANAGERD_CHANNEL };"],"mappings":";;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,MAAMC,oCAAoC,GAAG,wCAAwC;AAACC,OAAA,CAAAD,oCAAA,GAAAA,oCAAA;AACtF,MAAME,yBAAyB,GAAG,iCAAiC;AAACD,OAAA,CAAAC,yBAAA,GAAAA,yBAAA;AAEpE,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,2BAA2B,EAAE;AACjC,CAAC,CAAC;AAACL,OAAA,CAAAE,oBAAA,GAAAA,oBAAA;AAGH,MAAMI,mBAAmB,SAASC,6BAAiB,CAAC;AAEnDP,OAAA,CAAAM,mBAAA,GAAAA,mBAAA"}
package/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { default as Usbmux } from './lib/usbmux';
2
2
  import * as utilities from './lib/utilities';
3
3
  import * as services from './lib/services';
4
- import { INSTRUMENT_CHANNEL } from './lib/instrument';
5
4
 
6
-
7
- export { Usbmux, utilities, services, INSTRUMENT_CHANNEL };
5
+ export { Usbmux, utilities, services };
6
+ export { INSTRUMENT_CHANNEL } from './lib/instrument';
7
+ export { TESTMANAGERD_CHANNEL } from './lib/testmanagerd';
8
8
  export default Usbmux;
@@ -131,6 +131,9 @@ class DTXMessagePayloadHeader {
131
131
 
132
132
 
133
133
  class DTXMessageAux {
134
+ /**
135
+ * @param {any[] | DTXMessageAuxBuffer} data
136
+ */
134
137
  constructor (data = []) {
135
138
  this.data = data;
136
139
  }
@@ -140,11 +143,11 @@ class DTXMessageAux {
140
143
  * @returns {Buffer}
141
144
  */
142
145
  build () {
146
+ if (this.data instanceof DTXMessageAuxBuffer) {
147
+ return this.data.getBytes();
148
+ }
143
149
  const messageAux = new DTXMessageAuxBuffer();
144
150
  let buf = Buffer.alloc(0);
145
- if (this.data.length === 0) {
146
- return buf;
147
- }
148
151
  for (const arg of this.data) {
149
152
  if (arg instanceof DTXMessageAuxBuffer) {
150
153
  buf = Buffer.concat([buf, arg.getBytes()]);
@@ -1,12 +1,12 @@
1
1
  // Adapted from https://github.com/YueChen-C/py-ios-device
2
2
 
3
- import {BaseServiceSocket} from '../base-service';
4
- import {DTXMessage, FLAG_TYPES} from './headers';
5
- import {DTXEncoder} from './transformer/dtx-encode';
6
- import {DTXDecoder} from './transformer/dtx-decode';
3
+ import { BaseServiceSocket } from '../base-service';
4
+ import { DTXMessage, DTXMessageAuxBuffer, FLAG_TYPES } from './headers';
5
+ import { DTXEncoder } from './transformer/dtx-encode';
6
+ import { DTXDecoder } from './transformer/dtx-decode';
7
7
  import events from 'events';
8
8
  import _ from 'lodash';
9
- import {waitForCondition} from 'asyncbox';
9
+ import { waitForCondition } from 'asyncbox';
10
10
 
11
11
  const CHECK_FREQ_MS = 500;
12
12
  const WAIT_REPLY_TIME_MS = 10000;
@@ -28,9 +28,9 @@ export const INSTRUMENT_CHANNEL = Object.freeze({
28
28
  CONDITION_INDUCER: 'com.apple.instruments.server.services.ConditionInducer'
29
29
  });
30
30
 
31
- function defaultDict (createValue) {
31
+ function defaultDict(createValue) {
32
32
  return new Proxy(Object.create(null), {
33
- get (storage, property) {
33
+ get(storage, property) {
34
34
  if (!(property in storage)) {
35
35
  storage[property] = createValue(property);
36
36
  }
@@ -50,7 +50,7 @@ function defaultDict (createValue) {
50
50
  * @param {?DTXCallback} event if empty will ignore any messages
51
51
  */
52
52
  class InstrumentService extends BaseServiceSocket {
53
- constructor (socketClient, event) {
53
+ constructor(socketClient, event) {
54
54
  super(socketClient);
55
55
  this._undefinedCallback = event;
56
56
  this._callbacks = new events.EventEmitter();
@@ -71,7 +71,7 @@ class InstrumentService extends BaseServiceSocket {
71
71
  * @param {string} selector Listen for return DTXMessage.selector data
72
72
  * @param {DTXCallback} event
73
73
  */
74
- registerSelectorCallback (selector, event) {
74
+ registerSelectorCallback(selector, event) {
75
75
  this._callbacks.addListener(selector, event);
76
76
  }
77
77
 
@@ -79,7 +79,7 @@ class InstrumentService extends BaseServiceSocket {
79
79
  * If the event is registered, all unregistered messages will be returned to event. refer to this._handleData
80
80
  * @param {DTXCallback} event
81
81
  */
82
- registerUndefinedCallback (event) {
82
+ registerUndefinedCallback(event) {
83
83
  this._undefinedCallback = event;
84
84
  }
85
85
 
@@ -89,7 +89,7 @@ class InstrumentService extends BaseServiceSocket {
89
89
  * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO.
90
90
  * @param {DTXCallback} event
91
91
  */
92
- async registerChannelCallback (channel, event) {
92
+ async registerChannelCallback(channel, event) {
93
93
  const channelId = await this.makeChannel(channel);
94
94
  this._channelCallbacks.addListener(channelId, event);
95
95
  }
@@ -99,7 +99,7 @@ class InstrumentService extends BaseServiceSocket {
99
99
  * @param {string} channel instruments service channel e.g: INSTRUMENT_CHANNEL.DEVICE_INFO
100
100
  * @returns {Promise<number|*>} instruments service channel code for data transmission
101
101
  */
102
- async makeChannel (channel) {
102
+ async makeChannel(channel) {
103
103
  if (channel in this._channels) {
104
104
  return this._channels[channel];
105
105
  }
@@ -113,21 +113,28 @@ class InstrumentService extends BaseServiceSocket {
113
113
  * In general, we call this method to start the instrument dtx service
114
114
  * @param {string} channel instrument dtx service e.g: INSTRUMENT_CHANNEL.DEVICE_INFO
115
115
  * @param {string} selector instrument service method name (reflection calls)
116
- * @param {...any} auxiliaries parameters required by selector
116
+ * @param {...any | DTXMessageAuxBuffer} auxiliaries parameters required by selector. If auxiliaries are passed in using
117
+ * the DTXMessageAuxBuffer type, all the variables should be manually assembled into only one DTXMessageAuxBuffer instance.
117
118
  * @returns {Promise<DTXMessage>}
118
119
  * example:
119
120
  * instrumentService.callChannel(INSTRUMENT_CHANNEL.PROCESS_CONTROL,
120
121
  'launchSuspendedProcessWithDevicePath:bundleIdentifier:environment:arguments:options:', '',
121
122
  bundleID, {}, [], {'StartSuspendedKey': 0, 'KillExisting': 1}
122
123
  */
123
- async callChannel (channel, selector, ...auxiliaries) {
124
+ async callChannel(channel, selector, ...auxiliaries) {
124
125
  const channelCode = await this.makeChannel(channel);
125
126
  return await this._callChannel(true, channelCode, selector, ...auxiliaries);
126
127
  }
127
128
 
128
- async _callChannel (sync, channelCode, selector, ...auxiliaries) {
129
+ async _callChannel(sync, channelCode, selector, ...auxiliaries) {
129
130
  const identifier = this._nextIdentifier;
130
- this._encoder.write({sync, channelCode, selector, auxiliaries, identifier});
131
+ this._encoder.write({
132
+ sync,
133
+ channelCode,
134
+ selector,
135
+ auxiliaries: (auxiliaries.length === 1 && auxiliaries[0] instanceof DTXMessageAuxBuffer) ? auxiliaries[0] : auxiliaries,
136
+ identifier
137
+ });
131
138
  ++this._nextIdentifier;
132
139
  if (sync) {
133
140
  try {
@@ -137,7 +144,7 @@ class InstrumentService extends BaseServiceSocket {
137
144
  if (!_.isUndefined(data)) {
138
145
  return data;
139
146
  }
140
- }, {waitMs: WAIT_REPLY_TIME_MS, intervalMs: CHECK_FREQ_MS, error: 'reply channel data timeout'});
147
+ }, { waitMs: WAIT_REPLY_TIME_MS, intervalMs: CHECK_FREQ_MS, error: 'reply channel data timeout' });
141
148
  } catch (err) {
142
149
  this.close();
143
150
  throw new Error(err);
@@ -150,7 +157,7 @@ class InstrumentService extends BaseServiceSocket {
150
157
  * @param {DTXMessage} data
151
158
  * @private
152
159
  */
153
- _handleData (data) {
160
+ _handleData(data) {
154
161
  if (_.includes(data.selector, CHANNEL_CANCELED)) {
155
162
  this.close();
156
163
  }
@@ -175,7 +182,7 @@ class InstrumentService extends BaseServiceSocket {
175
182
  * return a empty ack message
176
183
  * @param {DTXMessage} data
177
184
  */
178
- _replyAck (data) {
185
+ _replyAck(data) {
179
186
  const reply = new DTXMessage({
180
187
  identifier: data.identifier,
181
188
  channelCode: data.channelCode,
@@ -1,5 +1,5 @@
1
1
  import Stream from 'stream';
2
- import {DTXMessage, DTXMessageAuxBuffer} from '../headers';
2
+ import {DTXMessage, DTXMessageAux} from '../headers';
3
3
 
4
4
 
5
5
  class DTXEncoder extends Stream.Transform {
@@ -21,7 +21,7 @@ class DTXEncoder extends Stream.Transform {
21
21
  selector,
22
22
  expectsReply: sync
23
23
  });
24
- if (auxiliaries instanceof DTXMessageAuxBuffer) {
24
+ if (auxiliaries instanceof DTXMessageAux) {
25
25
  dtx.auxiliaries = auxiliaries;
26
26
  } else {
27
27
  dtx.auxiliaries.data = auxiliaries;
package/lib/services.js CHANGED
@@ -7,12 +7,14 @@ import { AfcService, AFC_SERVICE_NAME } from './afc';
7
7
  import { NotificationProxyService, NOTIFICATION_PROXY_SERVICE_NAME } from './notification-proxy';
8
8
  import { HouseArrestService, HOUSE_ARREST_SERVICE_NAME } from './house-arrest';
9
9
  import { InstrumentService, INSTRUMENT_SERVICE_NAME_VERSION_14, INSTRUMENT_SERVICE_NAME} from './instrument';
10
+ import { TestmanagerdService, TESTMANAGERD_SERVICE_NAME_VERSION_14, TESTMANAGERD_SERVICE_NAME } from './testmanagerd';
10
11
  import { MCInstallProxyService, MC_INSTALL_SERVICE_NAME} from './mcinstall';
11
12
  import PlistService from './plist-service';
12
13
  import semver from 'semver';
13
14
 
14
15
  const CRASH_LOG_SERVICE_NAME = 'com.apple.crashreportcopymobile';
15
16
  const INSTRUMENT_HANDSHAKE_VERSION = 14;
17
+ const TESTMANAGERD_HANDSHAKE_VERSION = 14;
16
18
 
17
19
  async function startSyslogService (udid, opts = {}) {
18
20
  const socket = await startService(udid, SYSLOG_SERVICE_NAME, opts.socket);
@@ -92,6 +94,15 @@ async function startInstrumentService (udid, opts = {}) {
92
94
  );
93
95
  }
94
96
 
97
+ async function startTestmanagerdService (udid, opts = {}) {
98
+ const osVersion = opts.osVersion || await getOSVersion(udid, opts.socket);
99
+ return new TestmanagerdService(
100
+ parseInt(osVersion.split('.')[0], 10) < TESTMANAGERD_HANDSHAKE_VERSION
101
+ ? await startService(udid, TESTMANAGERD_SERVICE_NAME, opts.socket, true)
102
+ : await startService(udid, TESTMANAGERD_SERVICE_NAME_VERSION_14, opts.socket)
103
+ );
104
+ }
105
+
95
106
  async function startMCInstallService (udid, opts = {}) {
96
107
  const socket = await startService(udid, MC_INSTALL_SERVICE_NAME, opts.socket);
97
108
  return new MCInstallProxyService(new PlistService(socket));
@@ -115,5 +126,6 @@ export {
115
126
  startSyslogService, startWebInspectorService,
116
127
  startInstallationProxyService, startSimulateLocationService,
117
128
  startAfcService, startCrashLogService, startNotificationProxyService,
118
- startHouseArrestService, startInstrumentService, startMCInstallService
129
+ startHouseArrestService, startInstrumentService, startTestmanagerdService,
130
+ startMCInstallService
119
131
  };
@@ -0,0 +1,15 @@
1
+ import { InstrumentService } from '../instrument';
2
+
3
+ const TESTMANAGERD_SERVICE_NAME_VERSION_14 = 'com.apple.testmanagerd.lockdown.secure';
4
+ const TESTMANAGERD_SERVICE_NAME = 'com.apple.testmanagerd.lockdown';
5
+
6
+ const TESTMANAGERD_CHANNEL = Object.freeze({
7
+ DAEMON_CONNECTION_INTERFACE: 'dtxproxy:XCTestManager_IDEInterface:XCTestManager_DaemonConnectionInterface',
8
+ });
9
+
10
+
11
+ class TestmanagerdService extends InstrumentService {
12
+
13
+ }
14
+
15
+ export { TestmanagerdService, TESTMANAGERD_SERVICE_NAME_VERSION_14, TESTMANAGERD_SERVICE_NAME, TESTMANAGERD_CHANNEL };
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "keywords": [
5
5
  "appium"
6
6
  ],
7
- "version": "2.4.11",
7
+ "version": "2.4.12",
8
8
  "author": "Appium Contributors",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {