appium-ios-device 2.4.4 → 2.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/build/index.js +1 -12
  3. package/build/lib/afc/index.js +1 -83
  4. package/build/lib/afc/index.js.map +1 -0
  5. package/build/lib/afc/protocol.js +1 -11
  6. package/build/lib/afc/protocol.js.map +1 -0
  7. package/build/lib/afc/streams.js +1 -22
  8. package/build/lib/afc/streams.js.map +1 -0
  9. package/build/lib/afc/transformer/afcdecoder.js +1 -14
  10. package/build/lib/afc/transformer/afcdecoder.js.map +1 -0
  11. package/build/lib/afc/transformer/afcencoder.js +1 -13
  12. package/build/lib/afc/transformer/afcencoder.js.map +1 -0
  13. package/build/lib/base-service.js +1 -9
  14. package/build/lib/base-service.js.map +1 -0
  15. package/build/lib/constants.js +1 -3
  16. package/build/lib/constants.js.map +1 -0
  17. package/build/lib/house-arrest/index.js +1 -32
  18. package/build/lib/house-arrest/index.js.map +1 -0
  19. package/build/lib/installation-proxy/index.js +1 -32
  20. package/build/lib/installation-proxy/index.js.map +1 -0
  21. package/build/lib/instrument/headers.js +1 -46
  22. package/build/lib/instrument/headers.js.map +1 -0
  23. package/build/lib/instrument/index.js +1 -31
  24. package/build/lib/instrument/index.js.map +1 -0
  25. package/build/lib/instrument/transformer/dtx-decode.js +1 -27
  26. package/build/lib/instrument/transformer/dtx-decode.js.map +1 -0
  27. package/build/lib/instrument/transformer/dtx-encode.js +1 -12
  28. package/build/lib/instrument/transformer/dtx-encode.js.map +1 -0
  29. package/build/lib/instrument/transformer/nskeyed.js +1 -86
  30. package/build/lib/instrument/transformer/nskeyed.js.map +1 -0
  31. package/build/lib/lockdown/index.js +1 -14
  32. package/build/lib/lockdown/index.js.map +1 -0
  33. package/build/lib/logger.js +1 -5
  34. package/build/lib/logger.js.map +1 -0
  35. package/build/lib/mcinstall/index.js +1 -13
  36. package/build/lib/mcinstall/index.js.map +1 -0
  37. package/build/lib/notification-proxy/index.js +1 -31
  38. package/build/lib/notification-proxy/index.js.map +1 -0
  39. package/build/lib/plist-service/index.js +1 -33
  40. package/build/lib/plist-service/index.js.map +1 -0
  41. package/build/lib/plist-service/transformer/plist-service-decoder.js +1 -17
  42. package/build/lib/plist-service/transformer/plist-service-decoder.js.map +1 -0
  43. package/build/lib/plist-service/transformer/plist-service-encoder.js +1 -12
  44. package/build/lib/plist-service/transformer/plist-service-encoder.js.map +1 -0
  45. package/build/lib/services.js +1 -33
  46. package/build/lib/services.js.map +1 -0
  47. package/build/lib/simulatelocation/index.js +1 -12
  48. package/build/lib/simulatelocation/index.js.map +1 -0
  49. package/build/lib/ssl-helper.js +1 -11
  50. package/build/lib/ssl-helper.js.map +1 -0
  51. package/build/lib/syslog/index.js +1 -13
  52. package/build/lib/syslog/index.js.map +1 -0
  53. package/build/lib/syslog/transformer/syslog-decoder.js +1 -26
  54. package/build/lib/syslog/transformer/syslog-decoder.js.map +1 -0
  55. package/build/lib/usbmux/index.js +1 -52
  56. package/build/lib/usbmux/index.js.map +1 -0
  57. package/build/lib/usbmux/transformer/usbmux-decoder.js +1 -12
  58. package/build/lib/usbmux/transformer/usbmux-decoder.js.map +1 -0
  59. package/build/lib/usbmux/transformer/usbmux-encoder.js +1 -12
  60. package/build/lib/usbmux/transformer/usbmux-encoder.js.map +1 -0
  61. package/build/lib/util/transformer/length-based-splitter.js +1 -30
  62. package/build/lib/util/transformer/length-based-splitter.js.map +1 -0
  63. package/build/lib/util/transformer/stream-logger.js +2 -18
  64. package/build/lib/util/transformer/stream-logger.js.map +1 -0
  65. package/build/lib/utilities.js +1 -28
  66. package/build/lib/utilities.js.map +1 -0
  67. package/build/lib/webinspector/index.js +5 -32
  68. package/build/lib/webinspector/index.js.map +1 -0
  69. package/build/lib/webinspector/transformer/webinspector-decoder.js +1 -16
  70. package/build/lib/webinspector/transformer/webinspector-decoder.js.map +1 -0
  71. package/build/lib/webinspector/transformer/webinspector-encoder.js +1 -15
  72. package/build/lib/webinspector/transformer/webinspector-encoder.js.map +1 -0
  73. package/package.json +5 -3
@@ -1,21 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = exports.InstallationProxyService = exports.INSTALLATION_PROXY_SERVICE_NAME = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
10
  var _baseService = require("../base-service");
15
11
 
16
12
  const INSTALLATION_PROXY_SERVICE_NAME = 'com.apple.mobile.installation_proxy';
17
13
  exports.INSTALLATION_PROXY_SERVICE_NAME = INSTALLATION_PROXY_SERVICE_NAME;
18
-
19
14
  class InstallationProxyService extends _baseService.BaseServicePlist {
20
15
  async installApplication(path, clientOptions = {}, timeout = 60000) {
21
16
  const request = {
@@ -23,9 +18,7 @@ class InstallationProxyService extends _baseService.BaseServicePlist {
23
18
  PackagePath: path,
24
19
  ClientOptions: clientOptions
25
20
  };
26
-
27
21
  this._plistService.sendPlist(request);
28
-
29
22
  return await this._waitMessageCompletion(timeout);
30
23
  }
31
24
 
@@ -35,9 +28,7 @@ class InstallationProxyService extends _baseService.BaseServicePlist {
35
28
  PackagePath: path,
36
29
  ClientOptions: clientOptions
37
30
  };
38
-
39
31
  this._plistService.sendPlist(request);
40
-
41
32
  return await this._waitMessageCompletion(timeout);
42
33
  }
43
34
 
@@ -46,23 +37,18 @@ class InstallationProxyService extends _baseService.BaseServicePlist {
46
37
  Command: 'Browse',
47
38
  ClientOptions: {}
48
39
  };
49
-
50
40
  if (opts.applicationType) {
51
41
  request.ClientOptions.ApplicationType = opts.applicationType;
52
42
  }
53
-
54
43
  if (opts.returnAttributes) {
55
44
  request.ClientOptions.ReturnAttributes = opts.returnAttributes;
56
45
  }
57
-
58
46
  this._plistService.sendPlist(request);
59
-
60
47
  const messages = await this._waitMessageCompletion();
61
48
  return messages.reduce(function (acc, message) {
62
49
  if (!message.CurrentList) {
63
50
  return acc;
64
51
  }
65
-
66
52
  message.CurrentList.forEach(function (app) {
67
53
  acc[app.CFBundleIdentifier] = app;
68
54
  });
@@ -75,29 +61,22 @@ class InstallationProxyService extends _baseService.BaseServicePlist {
75
61
  Command: 'Lookup',
76
62
  ClientOptions: {}
77
63
  };
78
-
79
64
  if (opts.bundleIds) {
80
65
  request.ClientOptions.BundleIDs = _lodash.default.isString(opts.bundleIds) ? [opts.bundleIds] : opts.bundleIds;
81
66
  }
82
-
83
67
  if (opts.applicationType) {
84
68
  request.ClientOptions.ApplicationType = opts.applicationType;
85
69
  }
86
-
87
70
  if (opts.returnAttributes) {
88
71
  request.ClientOptions.ReturnAttributes = opts.returnAttributes;
89
72
  }
90
-
91
73
  this._plistService.sendPlist(request);
92
-
93
74
  const messages = await this._waitMessageCompletion();
94
-
95
75
  for (const message of messages) {
96
76
  if (message.LookupResult) {
97
77
  return message.LookupResult;
98
78
  }
99
79
  }
100
-
101
80
  throw new Error(`Could not find LookupResult in the response: Response: ${JSON.stringify(messages)}`);
102
81
  }
103
82
 
@@ -106,40 +85,30 @@ class InstallationProxyService extends _baseService.BaseServicePlist {
106
85
  Command: 'Uninstall',
107
86
  ApplicationIdentifier: bundleId
108
87
  };
109
-
110
88
  this._plistService.sendPlist(request);
111
-
112
89
  return await this._waitMessageCompletion(timeout);
113
90
  }
114
-
115
91
  async _waitMessageCompletion(timeout) {
116
92
  let messages = [];
117
-
118
93
  for (let i = 0; i < Number.MAX_SAFE_INTEGER; i++) {
119
94
  const data = await this._plistService.receivePlist(timeout);
120
95
  messages.push(data);
121
-
122
96
  if (this._isFinished(data)) {
123
97
  return messages;
124
98
  }
125
99
  }
126
100
  }
127
-
128
101
  _isFinished(response) {
129
102
  if (response.Error) {
130
103
  throw new Error(`Unexpected data: ${JSON.stringify(response)}`);
131
104
  }
132
-
133
105
  if (!response.Status) {
134
106
  return false;
135
107
  }
136
-
137
108
  return response.Status === 'Complete';
138
109
  }
139
-
140
110
  }
141
-
142
111
  exports.InstallationProxyService = InstallationProxyService;
143
112
  var _default = InstallationProxyService;
144
113
  exports.default = _default;
145
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIiwiSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwiQmFzZVNlcnZpY2VQbGlzdCIsImluc3RhbGxBcHBsaWNhdGlvbiIsInBhdGgiLCJjbGllbnRPcHRpb25zIiwidGltZW91dCIsInJlcXVlc3QiLCJDb21tYW5kIiwiUGFja2FnZVBhdGgiLCJDbGllbnRPcHRpb25zIiwiX3BsaXN0U2VydmljZSIsInNlbmRQbGlzdCIsIl93YWl0TWVzc2FnZUNvbXBsZXRpb24iLCJ1cGdyYWRlQXBwbGljYXRpb24iLCJsaXN0QXBwbGljYXRpb25zIiwib3B0cyIsImFwcGxpY2F0aW9uVHlwZSIsIkFwcGxpY2F0aW9uVHlwZSIsInJldHVybkF0dHJpYnV0ZXMiLCJSZXR1cm5BdHRyaWJ1dGVzIiwibWVzc2FnZXMiLCJyZWR1Y2UiLCJhY2MiLCJtZXNzYWdlIiwiQ3VycmVudExpc3QiLCJmb3JFYWNoIiwiYXBwIiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwibG9va3VwQXBwbGljYXRpb25zIiwiYnVuZGxlSWRzIiwiQnVuZGxlSURzIiwiXyIsImlzU3RyaW5nIiwiTG9va3VwUmVzdWx0IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5pbnN0YWxsQXBwbGljYXRpb24iLCJidW5kbGVJZCIsIkFwcGxpY2F0aW9uSWRlbnRpZmllciIsImkiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiZGF0YSIsInJlY2VpdmVQbGlzdCIsInB1c2giLCJfaXNGaW5pc2hlZCIsInJlc3BvbnNlIiwiU3RhdHVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RhbGxhdGlvbi1wcm94eS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2VQbGlzdCB9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XG5cbi8qXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdG1vdGh5MjAwMTMvbGliaW1vYmlsZWRldmljZS1tYXN0ZXIvYmxvYi9lY2Q4OWI0MjAyMWNmNmY3ZWZlOWFkMjcxYjNiZGRjN2RkNGIyODFlL3NyYy9pbnN0YWxsYXRpb25fcHJveHkuY1xuICovXG5cbmNvbnN0IElOU1RBTExBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLm1vYmlsZS5pbnN0YWxsYXRpb25fcHJveHknO1xuXG5jbGFzcyBJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZVBsaXN0IHtcbiAgLyoqXG4gICAqIEluc3RhbGwgdGhlIGFwcGxpY2F0aW9uIG9uIHRoZSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBwaG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB3aGVyZSB0aGUgLmFwcCBhbmQgLmlwYSBpcyBsb2NhdGVkIGF0IG9uIHRoZSBwaG9uZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2xpZW50T3B0aW9ucyBUaGUgZXh0cmEgb3B0aW9ucyB0aGF0IHdhbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgaW5zdGFsbGRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSBUaGUgdGltZW91dCBiZXR3ZWVuIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhlIHBob25lIGFzIHN0YXR1cyB1cGRhdGVzXG4gICAqL1xuICBhc3luYyBpbnN0YWxsQXBwbGljYXRpb24gKHBhdGgsIGNsaWVudE9wdGlvbnMgPSB7fSwgdGltZW91dCA9IDYwMDAwKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIENvbW1hbmQ6ICdJbnN0YWxsJyxcbiAgICAgIFBhY2thZ2VQYXRoOiBwYXRoLFxuICAgICAgQ2xpZW50T3B0aW9uczogY2xpZW50T3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0KHJlcXVlc3QpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0TWVzc2FnZUNvbXBsZXRpb24odGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggb24gdGhlIHBob25lLlxuICAgKiBJdCBpcyByZXF1aXJlZCB0aGF0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgc2FtZSBhcHAgaXMgYWxyZWFkeSBpbnN0YWxsZWQgaW4gb3JkZXJcbiAgICogdG8gY2FsbCB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggd2hlcmUgdGhlIC5hcHAgYW5kIC5pcGEgaXMgbG9jYXRlZCBhdCBvbiB0aGUgcGhvbmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNsaWVudE9wdGlvbnMgVGhlIGV4dHJhIG9wdGlvbnMgdGhhdCB3YW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGluc3RhbGxkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gVGhlIHRpbWVvdXQgYmV0d2VlbiBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBwaG9uZSBhcyBzdGF0dXMgdXBkYXRlc1xuICAgKi9cbiAgYXN5bmMgdXBncmFkZUFwcGxpY2F0aW9uIChwYXRoLCBjbGllbnRPcHRpb25zID0ge30sIHRpbWVvdXQgPSA2MDAwMCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnVXBncmFkZScsXG4gICAgICBQYWNrYWdlUGF0aDogcGF0aCxcbiAgICAgIENsaWVudE9wdGlvbnM6IGNsaWVudE9wdGlvbnNcbiAgICB9O1xuXG4gICAgdGhpcy5fcGxpc3RTZXJ2aWNlLnNlbmRQbGlzdChyZXF1ZXN0KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2FpdE1lc3NhZ2VDb21wbGV0aW9uKHRpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMaXN0QXBwbGljYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcGxpY2F0aW9uVHlwZSBvZiB0aGUgd2hpY2ggZ3JvdXAgeW91IHdhbnQgdG8gbGlzdC4gVGhlc2UgY2FuIGJlIFVzZXIsIFN5c3RlbSBvciBsZWF2ZSBpdCBlbXB0eSBmb3IgYm90aFxuICogQHByb3BlcnR5IHtBcnJheX0gcmV0dXJuQXR0cmlidXRlcyB0aGUgZmllbGRzIHdoaWNoIHNob3VsZCBiZSBmaWx0ZXJlZCBhbmQgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4gTGVhdmUgdGhpcyBwYXJhbWV0ZXIgZW1wdHkgaWYgeW91IGRvbid0IHdhbnQgdG8gZmlsdGVyXG4gKi9cblxuICAvKipcbiAgICogTGlzdHMgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byB0aGUgb3B0cyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgbWFwXG4gICAqIEBwYXJhbSB7TGlzdEFwcGxpY2F0aW9uT3B0aW9uc30gb3B0cyB0aGUgbGlzdGluZyBvcHRpb25zIHRoYXQgd2FudHMgdG8gYmUgcGFzc2VkXG4gICAqIEByZXR1cm5zIEEgbWFwIG9mIHRoZSBhcHBsaWNhdGlvbnMgd2hpY2ggdGhlIGtleSBpcyB0aGUgYnVuZGxlSWRcbiAgICovXG4gIGFzeW5jIGxpc3RBcHBsaWNhdGlvbnMgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnQnJvd3NlJyxcbiAgICAgIENsaWVudE9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRzLmFwcGxpY2F0aW9uVHlwZSkge1xuICAgICAgcmVxdWVzdC5DbGllbnRPcHRpb25zLkFwcGxpY2F0aW9uVHlwZSA9IG9wdHMuYXBwbGljYXRpb25UeXBlO1xuICAgIH1cbiAgICBpZiAob3B0cy5yZXR1cm5BdHRyaWJ1dGVzKSB7XG4gICAgICByZXF1ZXN0LkNsaWVudE9wdGlvbnMuUmV0dXJuQXR0cmlidXRlcyA9IG9wdHMucmV0dXJuQXR0cmlidXRlcztcbiAgICB9XG5cbiAgICB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0KHJlcXVlc3QpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5fd2FpdE1lc3NhZ2VDb21wbGV0aW9uKCk7XG4gICAgcmV0dXJuIG1lc3NhZ2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBtZXNzYWdlKSB7XG4gICAgICBpZiAoIW1lc3NhZ2UuQ3VycmVudExpc3QpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UuQ3VycmVudExpc3QuZm9yRWFjaChmdW5jdGlvbiAoYXBwKSB7XG4gICAgICAgIGFjY1thcHAuQ0ZCdW5kbGVJZGVudGlmaWVyXSA9IGFwcDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvb2t1cEFwcGxpY2F0aW9uT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBsaWNhdGlvblR5cGUgb2YgdGhlIHdoaWNoIGdyb3VwIHlvdSB3YW50IHRvIGxpc3QuIFRoZXNlIGNhbiBiZSBVc2VyLCBTeXN0ZW0gb3IgbGVhdmUgaXQgZW1wdHkgZm9yIGJvdGhcbiAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJldHVybkF0dHJpYnV0ZXMgdGhlIGZpZWxkcyB3aGljaCBzaG91bGQgYmUgZmlsdGVyZWQgYW5kIHJldHVybmVkIHRvIHRoZSBjbGllbnQuIExlYXZlIHRoaXMgcGFyYW1ldGVyIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRvIGZpbHRlclxuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXl9IGJ1bmRsZUlkcyBCdW5kbGUgSWRzIG9mIHRoZSBhcHBzIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkXG4gKi9cblxuICAvKipcbiAgICogTGlzdHMgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byB0aGUgb3B0cyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgbWFwXG4gICAqIEBwYXJhbSB7TG9va3VwQXBwbGljYXRpb25PcHRpb25zfSBvcHRzIHRoZSBsb29rdXAgb3B0aW9ucyB0aGF0IHdhbnRzIHRvIGJlIHBhc3NlZFxuICAgKiBAcmV0dXJucyBBIG1hcCBvZiB0aGUgYXBwbGljYXRpb25zIHdoaWNoIHRoZSBrZXkgaXMgdGhlIGJ1bmRsZUlkXG4gICAqL1xuICBhc3luYyBsb29rdXBBcHBsaWNhdGlvbnMgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnTG9va3VwJyxcbiAgICAgIENsaWVudE9wdGlvbnM6IHt9XG4gICAgfTtcbiAgICBpZiAob3B0cy5idW5kbGVJZHMpIHtcbiAgICAgIHJlcXVlc3QuQ2xpZW50T3B0aW9ucy5CdW5kbGVJRHMgPSBfLmlzU3RyaW5nKG9wdHMuYnVuZGxlSWRzKSA/IFtvcHRzLmJ1bmRsZUlkc10gOiBvcHRzLmJ1bmRsZUlkcztcbiAgICB9XG4gICAgaWYgKG9wdHMuYXBwbGljYXRpb25UeXBlKSB7XG4gICAgICByZXF1ZXN0LkNsaWVudE9wdGlvbnMuQXBwbGljYXRpb25UeXBlID0gb3B0cy5hcHBsaWNhdGlvblR5cGU7XG4gICAgfVxuICAgIGlmIChvcHRzLnJldHVybkF0dHJpYnV0ZXMpIHtcbiAgICAgIHJlcXVlc3QuQ2xpZW50T3B0aW9ucy5SZXR1cm5BdHRyaWJ1dGVzID0gb3B0cy5yZXR1cm5BdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHRoaXMuX3BsaXN0U2VydmljZS5zZW5kUGxpc3QocmVxdWVzdCk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLl93YWl0TWVzc2FnZUNvbXBsZXRpb24oKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgIGlmIChtZXNzYWdlLkxvb2t1cFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5Mb29rdXBSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgTG9va3VwUmVzdWx0IGluIHRoZSByZXNwb25zZTogUmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbHMgYW4gYXBwbGljYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBidW5kbGVJZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlSWQgb2YgdGhlIGFwcCB0aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBmb3IgdW5pbnN0YWxsYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIHRpbWVvdXQgYmV0d2VlbiBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBwaG9uZSBhcyBzdGF0dXMgdXBkYXRlc1xuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsQXBwbGljYXRpb24gKGJ1bmRsZUlkLCB0aW1lb3V0ID0gMjAwMDApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgQ29tbWFuZDogJ1VuaW5zdGFsbCcsXG4gICAgICBBcHBsaWNhdGlvbklkZW50aWZpZXI6IGJ1bmRsZUlkXG4gICAgfTtcblxuICAgIHRoaXMuX3BsaXN0U2VydmljZS5zZW5kUGxpc3QocmVxdWVzdCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRNZXNzYWdlQ29tcGxldGlvbih0aW1lb3V0KTtcbiAgfVxuXG4gIGFzeW5jIF93YWl0TWVzc2FnZUNvbXBsZXRpb24gKHRpbWVvdXQpIHtcbiAgICBsZXQgbWVzc2FnZXMgPSBbXTtcbiAgICAvLyBKdXN0IGFkZGVkIGZvciBzYWZldHkuIFRoaXMgc2hvdWxkbid0IGhhcHBlblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7IGkrKykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX3BsaXN0U2VydmljZS5yZWNlaXZlUGxpc3QodGltZW91dCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKGRhdGEpO1xuICAgICAgaWYgKHRoaXMuX2lzRmluaXNoZWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9pc0ZpbmlzaGVkIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZS5FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWApO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2UuU3RhdHVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5TdGF0dXMgPT09ICdDb21wbGV0ZSc7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlLCBJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIH07XG5leHBvcnQgZGVmYXVsdCBJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBTUEsTUFBTUEsK0JBQStCLEdBQUcscUNBQXhDOzs7QUFFQSxNQUFNQyx3QkFBTixTQUF1Q0MsNkJBQXZDLENBQXdEO0VBTzlCLE1BQWxCQyxrQkFBa0IsQ0FBRUMsSUFBRixFQUFRQyxhQUFhLEdBQUcsRUFBeEIsRUFBNEJDLE9BQU8sR0FBRyxLQUF0QyxFQUE2QztJQUNuRSxNQUFNQyxPQUFPLEdBQUc7TUFDZEMsT0FBTyxFQUFFLFNBREs7TUFFZEMsV0FBVyxFQUFFTCxJQUZDO01BR2RNLGFBQWEsRUFBRUw7SUFIRCxDQUFoQjs7SUFNQSxLQUFLTSxhQUFMLENBQW1CQyxTQUFuQixDQUE2QkwsT0FBN0I7O0lBQ0EsT0FBTyxNQUFNLEtBQUtNLHNCQUFMLENBQTRCUCxPQUE1QixDQUFiO0VBQ0Q7O0VBV3VCLE1BQWxCUSxrQkFBa0IsQ0FBRVYsSUFBRixFQUFRQyxhQUFhLEdBQUcsRUFBeEIsRUFBNEJDLE9BQU8sR0FBRyxLQUF0QyxFQUE2QztJQUNuRSxNQUFNQyxPQUFPLEdBQUc7TUFDZEMsT0FB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
114
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIiwiSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwiQmFzZVNlcnZpY2VQbGlzdCIsImluc3RhbGxBcHBsaWNhdGlvbiIsInBhdGgiLCJjbGllbnRPcHRpb25zIiwidGltZW91dCIsInJlcXVlc3QiLCJDb21tYW5kIiwiUGFja2FnZVBhdGgiLCJDbGllbnRPcHRpb25zIiwiX3BsaXN0U2VydmljZSIsInNlbmRQbGlzdCIsIl93YWl0TWVzc2FnZUNvbXBsZXRpb24iLCJ1cGdyYWRlQXBwbGljYXRpb24iLCJsaXN0QXBwbGljYXRpb25zIiwib3B0cyIsImFwcGxpY2F0aW9uVHlwZSIsIkFwcGxpY2F0aW9uVHlwZSIsInJldHVybkF0dHJpYnV0ZXMiLCJSZXR1cm5BdHRyaWJ1dGVzIiwibWVzc2FnZXMiLCJyZWR1Y2UiLCJhY2MiLCJtZXNzYWdlIiwiQ3VycmVudExpc3QiLCJmb3JFYWNoIiwiYXBwIiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwibG9va3VwQXBwbGljYXRpb25zIiwiYnVuZGxlSWRzIiwiQnVuZGxlSURzIiwiXyIsImlzU3RyaW5nIiwiTG9va3VwUmVzdWx0IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5pbnN0YWxsQXBwbGljYXRpb24iLCJidW5kbGVJZCIsIkFwcGxpY2F0aW9uSWRlbnRpZmllciIsImkiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiZGF0YSIsInJlY2VpdmVQbGlzdCIsInB1c2giLCJfaXNGaW5pc2hlZCIsInJlc3BvbnNlIiwiU3RhdHVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RhbGxhdGlvbi1wcm94eS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2VQbGlzdCB9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XG5cbi8qXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdG1vdGh5MjAwMTMvbGliaW1vYmlsZWRldmljZS1tYXN0ZXIvYmxvYi9lY2Q4OWI0MjAyMWNmNmY3ZWZlOWFkMjcxYjNiZGRjN2RkNGIyODFlL3NyYy9pbnN0YWxsYXRpb25fcHJveHkuY1xuICovXG5cbmNvbnN0IElOU1RBTExBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLm1vYmlsZS5pbnN0YWxsYXRpb25fcHJveHknO1xuXG5jbGFzcyBJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZVBsaXN0IHtcbiAgLyoqXG4gICAqIEluc3RhbGwgdGhlIGFwcGxpY2F0aW9uIG9uIHRoZSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBwaG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB3aGVyZSB0aGUgLmFwcCBhbmQgLmlwYSBpcyBsb2NhdGVkIGF0IG9uIHRoZSBwaG9uZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2xpZW50T3B0aW9ucyBUaGUgZXh0cmEgb3B0aW9ucyB0aGF0IHdhbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgaW5zdGFsbGRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSBUaGUgdGltZW91dCBiZXR3ZWVuIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhlIHBob25lIGFzIHN0YXR1cyB1cGRhdGVzXG4gICAqL1xuICBhc3luYyBpbnN0YWxsQXBwbGljYXRpb24gKHBhdGgsIGNsaWVudE9wdGlvbnMgPSB7fSwgdGltZW91dCA9IDYwMDAwKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIENvbW1hbmQ6ICdJbnN0YWxsJyxcbiAgICAgIFBhY2thZ2VQYXRoOiBwYXRoLFxuICAgICAgQ2xpZW50T3B0aW9uczogY2xpZW50T3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0KHJlcXVlc3QpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0TWVzc2FnZUNvbXBsZXRpb24odGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggb24gdGhlIHBob25lLlxuICAgKiBJdCBpcyByZXF1aXJlZCB0aGF0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgc2FtZSBhcHAgaXMgYWxyZWFkeSBpbnN0YWxsZWQgaW4gb3JkZXJcbiAgICogdG8gY2FsbCB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggd2hlcmUgdGhlIC5hcHAgYW5kIC5pcGEgaXMgbG9jYXRlZCBhdCBvbiB0aGUgcGhvbmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNsaWVudE9wdGlvbnMgVGhlIGV4dHJhIG9wdGlvbnMgdGhhdCB3YW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGluc3RhbGxkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gVGhlIHRpbWVvdXQgYmV0d2VlbiBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBwaG9uZSBhcyBzdGF0dXMgdXBkYXRlc1xuICAgKi9cbiAgYXN5bmMgdXBncmFkZUFwcGxpY2F0aW9uIChwYXRoLCBjbGllbnRPcHRpb25zID0ge30sIHRpbWVvdXQgPSA2MDAwMCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnVXBncmFkZScsXG4gICAgICBQYWNrYWdlUGF0aDogcGF0aCxcbiAgICAgIENsaWVudE9wdGlvbnM6IGNsaWVudE9wdGlvbnNcbiAgICB9O1xuXG4gICAgdGhpcy5fcGxpc3RTZXJ2aWNlLnNlbmRQbGlzdChyZXF1ZXN0KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2FpdE1lc3NhZ2VDb21wbGV0aW9uKHRpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMaXN0QXBwbGljYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcGxpY2F0aW9uVHlwZSBvZiB0aGUgd2hpY2ggZ3JvdXAgeW91IHdhbnQgdG8gbGlzdC4gVGhlc2UgY2FuIGJlIFVzZXIsIFN5c3RlbSBvciBsZWF2ZSBpdCBlbXB0eSBmb3IgYm90aFxuICogQHByb3BlcnR5IHtBcnJheX0gcmV0dXJuQXR0cmlidXRlcyB0aGUgZmllbGRzIHdoaWNoIHNob3VsZCBiZSBmaWx0ZXJlZCBhbmQgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4gTGVhdmUgdGhpcyBwYXJhbWV0ZXIgZW1wdHkgaWYgeW91IGRvbid0IHdhbnQgdG8gZmlsdGVyXG4gKi9cblxuICAvKipcbiAgICogTGlzdHMgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byB0aGUgb3B0cyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgbWFwXG4gICAqIEBwYXJhbSB7TGlzdEFwcGxpY2F0aW9uT3B0aW9uc30gb3B0cyB0aGUgbGlzdGluZyBvcHRpb25zIHRoYXQgd2FudHMgdG8gYmUgcGFzc2VkXG4gICAqIEByZXR1cm5zIEEgbWFwIG9mIHRoZSBhcHBsaWNhdGlvbnMgd2hpY2ggdGhlIGtleSBpcyB0aGUgYnVuZGxlSWRcbiAgICovXG4gIGFzeW5jIGxpc3RBcHBsaWNhdGlvbnMgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnQnJvd3NlJyxcbiAgICAgIENsaWVudE9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRzLmFwcGxpY2F0aW9uVHlwZSkge1xuICAgICAgcmVxdWVzdC5DbGllbnRPcHRpb25zLkFwcGxpY2F0aW9uVHlwZSA9IG9wdHMuYXBwbGljYXRpb25UeXBlO1xuICAgIH1cbiAgICBpZiAob3B0cy5yZXR1cm5BdHRyaWJ1dGVzKSB7XG4gICAgICByZXF1ZXN0LkNsaWVudE9wdGlvbnMuUmV0dXJuQXR0cmlidXRlcyA9IG9wdHMucmV0dXJuQXR0cmlidXRlcztcbiAgICB9XG5cbiAgICB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0KHJlcXVlc3QpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5fd2FpdE1lc3NhZ2VDb21wbGV0aW9uKCk7XG4gICAgcmV0dXJuIG1lc3NhZ2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBtZXNzYWdlKSB7XG4gICAgICBpZiAoIW1lc3NhZ2UuQ3VycmVudExpc3QpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UuQ3VycmVudExpc3QuZm9yRWFjaChmdW5jdGlvbiAoYXBwKSB7XG4gICAgICAgIGFjY1thcHAuQ0ZCdW5kbGVJZGVudGlmaWVyXSA9IGFwcDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvb2t1cEFwcGxpY2F0aW9uT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBsaWNhdGlvblR5cGUgb2YgdGhlIHdoaWNoIGdyb3VwIHlvdSB3YW50IHRvIGxpc3QuIFRoZXNlIGNhbiBiZSBVc2VyLCBTeXN0ZW0gb3IgbGVhdmUgaXQgZW1wdHkgZm9yIGJvdGhcbiAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJldHVybkF0dHJpYnV0ZXMgdGhlIGZpZWxkcyB3aGljaCBzaG91bGQgYmUgZmlsdGVyZWQgYW5kIHJldHVybmVkIHRvIHRoZSBjbGllbnQuIExlYXZlIHRoaXMgcGFyYW1ldGVyIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRvIGZpbHRlclxuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXl9IGJ1bmRsZUlkcyBCdW5kbGUgSWRzIG9mIHRoZSBhcHBzIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkXG4gKi9cblxuICAvKipcbiAgICogTGlzdHMgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byB0aGUgb3B0cyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgbWFwXG4gICAqIEBwYXJhbSB7TG9va3VwQXBwbGljYXRpb25PcHRpb25zfSBvcHRzIHRoZSBsb29rdXAgb3B0aW9ucyB0aGF0IHdhbnRzIHRvIGJlIHBhc3NlZFxuICAgKiBAcmV0dXJucyBBIG1hcCBvZiB0aGUgYXBwbGljYXRpb25zIHdoaWNoIHRoZSBrZXkgaXMgdGhlIGJ1bmRsZUlkXG4gICAqL1xuICBhc3luYyBsb29rdXBBcHBsaWNhdGlvbnMgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBDb21tYW5kOiAnTG9va3VwJyxcbiAgICAgIENsaWVudE9wdGlvbnM6IHt9XG4gICAgfTtcbiAgICBpZiAob3B0cy5idW5kbGVJZHMpIHtcbiAgICAgIHJlcXVlc3QuQ2xpZW50T3B0aW9ucy5CdW5kbGVJRHMgPSBfLmlzU3RyaW5nKG9wdHMuYnVuZGxlSWRzKSA/IFtvcHRzLmJ1bmRsZUlkc10gOiBvcHRzLmJ1bmRsZUlkcztcbiAgICB9XG4gICAgaWYgKG9wdHMuYXBwbGljYXRpb25UeXBlKSB7XG4gICAgICByZXF1ZXN0LkNsaWVudE9wdGlvbnMuQXBwbGljYXRpb25UeXBlID0gb3B0cy5hcHBsaWNhdGlvblR5cGU7XG4gICAgfVxuICAgIGlmIChvcHRzLnJldHVybkF0dHJpYnV0ZXMpIHtcbiAgICAgIHJlcXVlc3QuQ2xpZW50T3B0aW9ucy5SZXR1cm5BdHRyaWJ1dGVzID0gb3B0cy5yZXR1cm5BdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHRoaXMuX3BsaXN0U2VydmljZS5zZW5kUGxpc3QocmVxdWVzdCk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLl93YWl0TWVzc2FnZUNvbXBsZXRpb24oKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgIGlmIChtZXNzYWdlLkxvb2t1cFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5Mb29rdXBSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgTG9va3VwUmVzdWx0IGluIHRoZSByZXNwb25zZTogUmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbHMgYW4gYXBwbGljYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBidW5kbGVJZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlSWQgb2YgdGhlIGFwcCB0aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBmb3IgdW5pbnN0YWxsYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIHRpbWVvdXQgYmV0d2VlbiBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBwaG9uZSBhcyBzdGF0dXMgdXBkYXRlc1xuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsQXBwbGljYXRpb24gKGJ1bmRsZUlkLCB0aW1lb3V0ID0gMjAwMDApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgQ29tbWFuZDogJ1VuaW5zdGFsbCcsXG4gICAgICBBcHBsaWNhdGlvbklkZW50aWZpZXI6IGJ1bmRsZUlkXG4gICAgfTtcblxuICAgIHRoaXMuX3BsaXN0U2VydmljZS5zZW5kUGxpc3QocmVxdWVzdCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRNZXNzYWdlQ29tcGxldGlvbih0aW1lb3V0KTtcbiAgfVxuXG4gIGFzeW5jIF93YWl0TWVzc2FnZUNvbXBsZXRpb24gKHRpbWVvdXQpIHtcbiAgICBsZXQgbWVzc2FnZXMgPSBbXTtcbiAgICAvLyBKdXN0IGFkZGVkIGZvciBzYWZldHkuIFRoaXMgc2hvdWxkbid0IGhhcHBlblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7IGkrKykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX3BsaXN0U2VydmljZS5yZWNlaXZlUGxpc3QodGltZW91dCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKGRhdGEpO1xuICAgICAgaWYgKHRoaXMuX2lzRmluaXNoZWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9pc0ZpbmlzaGVkIChyZXNwb25zZSkge1xuICAgIGlmIChyZXNwb25zZS5FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWApO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2UuU3RhdHVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5TdGF0dXMgPT09ICdDb21wbGV0ZSc7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlLCBJTlNUQUxMQVRJT05fUFJPWFlfU0VSVklDRV9OQU1FIH07XG5leHBvcnQgZGVmYXVsdCBJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFNQSxNQUFNQSwrQkFBK0IsR0FBRyxxQ0FBcUM7QUFBQztBQUU5RSxNQUFNQyx3QkFBd0IsU0FBU0MsNkJBQWdCLENBQUM7RUFPdEQsTUFBTUMsa0JBQWtCLENBQUVDLElBQUksRUFBRUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxPQUFPLEdBQUcsS0FBSyxFQUFFO0lBQ25FLE1BQU1DLE9BQU8sR0FBRztNQUNkQyxPQUFPLEVBQUUsU0FBUztNQUNsQkMsV0FBVyxFQUFFTCxJQUFJO01BQ2pCTSxhQUFhLEVBQUVMO0lBQ2pCLENBQUM7SUFFRCxJQUFJLENBQUNNLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDTCxPQUFPLENBQUM7SUFDckMsT0FBTyxNQUFNLElBQUksQ0FBQ00sc0JBQXNCLENBQUNQLE9BQU8sQ0FBQztFQUNuRDs7RUFXQSxNQUFNUSxrQkFBa0IsQ0FBRVYsSUFBSSxFQUFFQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE9BQU8sR0FBRyxLQUFLLEVBQUU7SUFDbkUsTUFBTUMsT0FBTyxHQUFHO01BQ2RDLE9BQU8sRUFBRSxTQUFTO01BQ2xCQyxXQUFXLEVBQUVMLElBQUk7TUFDakJNLGFBQWEsRUFBRUw7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQ00sYUFBYSxDQUFDQyxTQUFTLENBQUNMLE9BQU8sQ0FBQztJQUNyQyxPQUFPLE1BQU0sSUFBSSxDQUFDTSxzQkFBc0IsQ0FBQ1AsT0FBTyxDQUFDO0VBQ25EOztFQWNBLE1BQU1TLGdCQUFnQixDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDakMsTUFBTVQsT0FBTyxHQUFHO01BQ2RDLE9BQU8sRUFBRSxRQUFRO01BQ2pCRSxhQUFhLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSU0sSUFBSSxDQUFDQyxlQUFlLEVBQUU7TUFDeEJWLE9BQU8sQ0FBQ0csYUFBYSxDQUFDUSxlQUFlLEdBQUdGLElBQUksQ0FBQ0MsZUFBZTtJQUM5RDtJQUNBLElBQUlELElBQUksQ0FBQ0csZ0JBQWdCLEVBQUU7TUFDekJaLE9BQU8sQ0FBQ0csYUFBYSxDQUFDVSxnQkFBZ0IsR0FBR0osSUFBSSxDQUFDRyxnQkFBZ0I7SUFDaEU7SUFFQSxJQUFJLENBQUNSLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDTCxPQUFPLENBQUM7SUFDckMsTUFBTWMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDUixzQkFBc0IsRUFBRTtJQUNwRCxPQUFPUSxRQUFRLENBQUNDLE1BQU0sQ0FBQyxVQUFVQyxHQUFHLEVBQUVDLE9BQU8sRUFBRTtNQUM3QyxJQUFJLENBQUNBLE9BQU8sQ0FBQ0MsV0FBVyxFQUFFO1FBQ3hCLE9BQU9GLEdBQUc7TUFDWjtNQUNBQyxPQUFPLENBQUNDLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDLFVBQVVDLEdBQUcsRUFBRTtRQUN6Q0osR0FBRyxDQUFDSSxHQUFHLENBQUNDLGtCQUFrQixDQUFDLEdBQUdELEdBQUc7TUFDbkMsQ0FBQyxDQUFDO01BQ0YsT0FBT0osR0FBRztJQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNSOztFQWVBLE1BQU1NLGtCQUFrQixDQUFFYixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDbkMsTUFBTVQsT0FBTyxHQUFHO01BQ2RDLE9BQU8sRUFBRSxRQUFRO01BQ2pCRSxhQUFhLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSU0sSUFBSSxDQUFDYyxTQUFTLEVBQUU7TUFDbEJ2QixPQUFPLENBQUNHLGFBQWEsQ0FBQ3FCLFNBQVMsR0FBR0MsZUFBQyxDQUFDQyxRQUFRLENBQUNqQixJQUFJLENBQUNjLFNBQVMsQ0FBQyxHQUFHLENBQUNkLElBQUksQ0FBQ2MsU0FBUyxDQUFDLEdBQUdkLElBQUksQ0FBQ2MsU0FBUztJQUNsRztJQUNBLElBQUlkLElBQUksQ0FBQ0MsZUFBZSxFQUFFO01BQ3hCVixPQUFPLENBQUNHLGFBQWEsQ0FBQ1EsZUFBZSxHQUFHRixJQUFJLENBQUNDLGVBQWU7SUFDOUQ7SUFDQSxJQUFJRCxJQUFJLENBQUNHLGdCQUFnQixFQUFFO01BQ3pCWixPQUFPLENBQUNHLGFBQWEsQ0FBQ1UsZ0JBQWdCLEdBQUdKLElBQUksQ0FBQ0csZ0JBQWdCO0lBQ2hFO0lBRUEsSUFBSSxDQUFDUixhQUFhLENBQUNDLFNBQVMsQ0FBQ0wsT0FBTyxDQUFDO0lBQ3JDLE1BQU1jLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1Isc0JBQXNCLEVBQUU7SUFDcEQsS0FBSyxNQUFNVyxPQUFPLElBQUlILFFBQVEsRUFBRTtNQUM5QixJQUFJRyxPQUFPLENBQUNVLFlBQVksRUFBRTtRQUN4QixPQUFPVixPQUFPLENBQUNVLFlBQVk7TUFDN0I7SUFDRjtJQUNBLE1BQU0sSUFBSUMsS0FBSyxDQUFFLDBEQUF5REMsSUFBSSxDQUFDQyxTQUFTLENBQUNoQixRQUFRLENBQUUsRUFBQyxDQUFDO0VBQ3ZHOztFQU9BLE1BQU1pQixvQkFBb0IsQ0FBRUMsUUFBUSxFQUFFakMsT0FBTyxHQUFHLEtBQUssRUFBRTtJQUNyRCxNQUFNQyxPQUFPLEdBQUc7TUFDZEMsT0FBTyxFQUFFLFdBQVc7TUFDcEJnQyxxQkFBcUIsRUFBRUQ7SUFDekIsQ0FBQztJQUVELElBQUksQ0FBQzVCLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDTCxPQUFPLENBQUM7SUFDckMsT0FBTyxNQUFNLElBQUksQ0FBQ00sc0JBQXNCLENBQUNQLE9BQU8sQ0FBQztFQUNuRDtFQUVBLE1BQU1PLHNCQUFzQixDQUFFUCxPQUFPLEVBQUU7SUFDckMsSUFBSWUsUUFBUSxHQUFHLEVBQUU7SUFFakIsS0FBSyxJQUFJb0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHQyxNQUFNLENBQUNDLGdCQUFnQixFQUFFRixDQUFDLEVBQUUsRUFBRTtNQUNoRCxNQUFNRyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNqQyxhQUFhLENBQUNrQyxZQUFZLENBQUN2QyxPQUFPLENBQUM7TUFDM0RlLFFBQVEsQ0FBQ3lCLElBQUksQ0FBQ0YsSUFBSSxDQUFDO01BQ25CLElBQUksSUFBSSxDQUFDRyxXQUFXLENBQUNILElBQUksQ0FBQyxFQUFFO1FBQzFCLE9BQU92QixRQUFRO01BQ2pCO0lBQ0Y7RUFDRjtFQUVBMEIsV0FBVyxDQUFFQyxRQUFRLEVBQUU7SUFDckIsSUFBSUEsUUFBUSxDQUFDYixLQUFLLEVBQUU7TUFDbEIsTUFBTSxJQUFJQSxLQUFLLENBQUUsb0JBQW1CQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1csUUFBUSxDQUFFLEVBQUMsQ0FBQztJQUNqRTtJQUVBLElBQUksQ0FBQ0EsUUFBUSxDQUFDQyxNQUFNLEVBQUU7TUFDcEIsT0FBTyxLQUFLO0lBQ2Q7SUFDQSxPQUFPRCxRQUFRLENBQUNDLE1BQU0sS0FBSyxVQUFVO0VBQ3ZDO0FBQ0Y7QUFBQztBQUFBLGVBR2NoRCx3QkFBd0I7QUFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["INSTALLATION_PROXY_SERVICE_NAME","InstallationProxyService","BaseServicePlist","installApplication","path","clientOptions","timeout","request","Command","PackagePath","ClientOptions","_plistService","sendPlist","_waitMessageCompletion","upgradeApplication","listApplications","opts","applicationType","ApplicationType","returnAttributes","ReturnAttributes","messages","reduce","acc","message","CurrentList","forEach","app","CFBundleIdentifier","lookupApplications","bundleIds","BundleIDs","_","isString","LookupResult","Error","JSON","stringify","uninstallApplication","bundleId","ApplicationIdentifier","i","Number","MAX_SAFE_INTEGER","data","receivePlist","push","_isFinished","response","Status"],"sources":["../../../lib/installation-proxy/index.js"],"sourcesContent":["import _ from 'lodash';\nimport { BaseServicePlist } from '../base-service';\n\n/*\n * https://github.com/tmothy20013/libimobiledevice-master/blob/ecd89b42021cf6f7efe9ad271b3bddc7dd4b281e/src/installation_proxy.c\n */\n\nconst INSTALLATION_PROXY_SERVICE_NAME = 'com.apple.mobile.installation_proxy';\n\nclass InstallationProxyService extends BaseServicePlist {\n /**\n * Install the application on the relative path on the phone\n * @param {string} path The path where the .app and .ipa is located at on the phone\n * @param {Object} clientOptions The extra options that wants to be passed to the installd\n * @param {number} timeout [60000] The timeout between messages received from the phone as status updates\n */\n async installApplication (path, clientOptions = {}, timeout = 60000) {\n const request = {\n Command: 'Install',\n PackagePath: path,\n ClientOptions: clientOptions\n };\n\n this._plistService.sendPlist(request);\n return await this._waitMessageCompletion(timeout);\n }\n\n /**\n * Upgrades the given application from the relative path on the phone.\n * It is required that a previous version of the same app is already installed in order\n * to call this API.\n *\n * @param {string} path The path where the .app and .ipa is located at on the phone\n * @param {Object} clientOptions The extra options that wants to be passed to the installd\n * @param {number} timeout [60000] The timeout between messages received from the phone as status updates\n */\n async upgradeApplication (path, clientOptions = {}, timeout = 60000) {\n const request = {\n Command: 'Upgrade',\n PackagePath: path,\n ClientOptions: clientOptions\n };\n\n this._plistService.sendPlist(request);\n return await this._waitMessageCompletion(timeout);\n }\n\n /**\n * @typedef {Object} ListApplicationOptions\n *\n * @property {string} applicationType of the which group you want to list. These can be User, System or leave it empty for both\n * @property {Array} returnAttributes the fields which should be filtered and returned to the client. Leave this parameter empty if you don't want to filter\n */\n\n /**\n * Lists applications according to the opts and returns them as a map\n * @param {ListApplicationOptions} opts the listing options that wants to be passed\n * @returns A map of the applications which the key is the bundleId\n */\n async listApplications (opts = {}) {\n const request = {\n Command: 'Browse',\n ClientOptions: {}\n };\n\n if (opts.applicationType) {\n request.ClientOptions.ApplicationType = opts.applicationType;\n }\n if (opts.returnAttributes) {\n request.ClientOptions.ReturnAttributes = opts.returnAttributes;\n }\n\n this._plistService.sendPlist(request);\n const messages = await this._waitMessageCompletion();\n return messages.reduce(function (acc, message) {\n if (!message.CurrentList) {\n return acc;\n }\n message.CurrentList.forEach(function (app) {\n acc[app.CFBundleIdentifier] = app;\n });\n return acc;\n }, {});\n }\n\n /**\n * @typedef {Object} LookupApplicationOptions\n *\n * @property {string} applicationType of the which group you want to list. These can be User, System or leave it empty for both\n * @property {Array} returnAttributes the fields which should be filtered and returned to the client. Leave this parameter empty if you don't want to filter\n * @property {string|Array} bundleIds Bundle Ids of the apps that should be searched\n */\n\n /**\n * Lists applications according to the opts and returns them as a map\n * @param {LookupApplicationOptions} opts the lookup options that wants to be passed\n * @returns A map of the applications which the key is the bundleId\n */\n async lookupApplications (opts = {}) {\n const request = {\n Command: 'Lookup',\n ClientOptions: {}\n };\n if (opts.bundleIds) {\n request.ClientOptions.BundleIDs = _.isString(opts.bundleIds) ? [opts.bundleIds] : opts.bundleIds;\n }\n if (opts.applicationType) {\n request.ClientOptions.ApplicationType = opts.applicationType;\n }\n if (opts.returnAttributes) {\n request.ClientOptions.ReturnAttributes = opts.returnAttributes;\n }\n\n this._plistService.sendPlist(request);\n const messages = await this._waitMessageCompletion();\n for (const message of messages) {\n if (message.LookupResult) {\n return message.LookupResult;\n }\n }\n throw new Error(`Could not find LookupResult in the response: Response: ${JSON.stringify(messages)}`);\n }\n\n /**\n * Uninstalls an application according to the given bundleId\n * @param {string} bundleId of the app that needs to be passed for uninstallation\n * @param {number} timeout The timeout between messages received from the phone as status updates\n */\n async uninstallApplication (bundleId, timeout = 20000) {\n const request = {\n Command: 'Uninstall',\n ApplicationIdentifier: bundleId\n };\n\n this._plistService.sendPlist(request);\n return await this._waitMessageCompletion(timeout);\n }\n\n async _waitMessageCompletion (timeout) {\n let messages = [];\n // Just added for safety. This shouldn't happen\n for (let i = 0; i < Number.MAX_SAFE_INTEGER; i++) {\n const data = await this._plistService.receivePlist(timeout);\n messages.push(data);\n if (this._isFinished(data)) {\n return messages;\n }\n }\n }\n\n _isFinished (response) {\n if (response.Error) {\n throw new Error(`Unexpected data: ${JSON.stringify(response)}`);\n }\n\n if (!response.Status) {\n return false;\n }\n return response.Status === 'Complete';\n }\n}\n\nexport { InstallationProxyService, INSTALLATION_PROXY_SERVICE_NAME };\nexport default InstallationProxyService;\n"],"mappings":"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"}
@@ -1,20 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.FLAG_TYPES = exports.DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = exports.DTX_MESSAGE_HEADER_MAGIC_LEN = exports.DTX_MESSAGE_HEADER_MAGIC = exports.DTX_MESSAGE_HEADER_LENGTH = exports.DTXMessagePayloadHeader = exports.DTXMessageHeader = exports.DTXMessageAuxBuffer = exports.DTXMessageAux = exports.DTXMessage = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _nskeyed = require("./transformer/nskeyed");
13
-
14
10
  var _bplistParser = _interopRequireDefault(require("bplist-parser"));
15
-
16
11
  var _lodash = _interopRequireDefault(require("lodash"));
17
-
18
12
  const DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = 16;
19
13
  exports.DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;
20
14
  const DTX_MESSAGE_HEADER_LENGTH = 32;
@@ -68,7 +62,6 @@ class DTXMessageHeader {
68
62
  expectsReply: headerBuffer.readUInt32LE(28)
69
63
  };
70
64
  }
71
-
72
65
  }
73
66
 
74
67
  exports.DTXMessageHeader = DTXMessageHeader;
@@ -89,11 +82,8 @@ class DTXMessagePayloadHeader {
89
82
  totalLength: headerBuffer.readBigInt64LE(8)
90
83
  };
91
84
  }
92
-
93
85
  }
94
-
95
86
  exports.DTXMessagePayloadHeader = DTXMessagePayloadHeader;
96
-
97
87
  class DTXMessageAux {
98
88
  constructor(data = []) {
99
89
  this.data = data;
@@ -102,11 +92,9 @@ class DTXMessageAux {
102
92
  build() {
103
93
  const messageAux = new DTXMessageAuxBuffer();
104
94
  let buf = Buffer.alloc(0);
105
-
106
95
  if (this.data.length === 0) {
107
96
  return buf;
108
97
  }
109
-
110
98
  for (const arg of this.data) {
111
99
  if (arg instanceof DTXMessageAuxBuffer) {
112
100
  buf = Buffer.concat([buf, arg.getBytes()]);
@@ -118,7 +106,6 @@ class DTXMessageAux {
118
106
  messageAux.appendObject(arg);
119
107
  }
120
108
  }
121
-
122
109
  return Buffer.concat([buf, messageAux.getBytes()]);
123
110
  }
124
111
 
@@ -127,20 +114,16 @@ class DTXMessageAux {
127
114
  const data = [];
128
115
  const length = headerBuffer.readBigInt64LE(8);
129
116
  cursor += 16;
130
-
131
117
  while (cursor <= length) {
132
118
  if (payloadHeader.flags !== FLAG_TYPES.push) {
133
119
  const m = headerBuffer.readUInt32LE(cursor);
134
120
  cursor += 4;
135
-
136
121
  if (m !== DTX_AUXILIARY_MAGIC) {
137
122
  throw new Error(`incorrect auxiliary magic: ${m}`);
138
123
  }
139
124
  }
140
-
141
125
  const type = headerBuffer.readUInt32LE(cursor);
142
126
  cursor += 4;
143
-
144
127
  switch (type) {
145
128
  case AUX_TYPES.Text:
146
129
  {
@@ -150,7 +133,6 @@ class DTXMessageAux {
150
133
  cursor += strLen;
151
134
  break;
152
135
  }
153
-
154
136
  case AUX_TYPES.NSKeyed:
155
137
  {
156
138
  const strLen = headerBuffer.readUInt32LE(cursor);
@@ -160,41 +142,31 @@ class DTXMessageAux {
160
142
  cursor += strLen;
161
143
  break;
162
144
  }
163
-
164
145
  case AUX_TYPES.UInt32LE:
165
146
  data.push(headerBuffer.readUInt32LE(cursor));
166
147
  cursor += 4;
167
148
  break;
168
-
169
149
  case AUX_TYPES.BigUInt64LE:
170
150
  data.push(headerBuffer.readBigUInt64LE(cursor));
171
151
  cursor += 8;
172
152
  break;
173
-
174
153
  case AUX_TYPES.BigInt64LE:
175
154
  data.push(headerBuffer.readBigInt64LE(cursor));
176
155
  cursor += 8;
177
156
  break;
178
-
179
157
  default:
180
158
  throw new Error(`Unknown type ${type}`);
181
159
  }
182
160
  }
183
-
184
161
  return data;
185
162
  }
186
-
187
163
  }
188
-
189
164
  exports.DTXMessageAux = DTXMessageAux;
190
-
191
165
  class InstrumentRPCParseError {
192
166
  constructor(data) {
193
167
  this.data = data;
194
168
  }
195
-
196
169
  }
197
-
198
170
  class DTXMessageAuxBuffer {
199
171
  constructor() {
200
172
  this._buf = Buffer.alloc(0);
@@ -240,18 +212,14 @@ class DTXMessageAuxBuffer {
240
212
  buf2.writeUInt32LE(buf.length, 8);
241
213
  this._buf = Buffer.concat([this._buf, buf2, buf]);
242
214
  }
243
-
244
215
  getBytes() {
245
216
  const out = Buffer.alloc(16);
246
217
  out.writeUInt32LE(DTX_MESSAGE_AUX_HEADER, 0);
247
218
  out.writeUInt32LE(this._buf.length, 8);
248
219
  return Buffer.concat([out, this._buf]);
249
220
  }
250
-
251
221
  }
252
-
253
222
  exports.DTXMessageAuxBuffer = DTXMessageAuxBuffer;
254
-
255
223
  class DTXMessage {
256
224
  constructor(opts = {}) {
257
225
  const {
@@ -275,19 +243,16 @@ class DTXMessage {
275
243
 
276
244
  get identifier() {
277
245
  var _this$_messageHeader;
278
-
279
246
  return (_this$_messageHeader = this._messageHeader) === null || _this$_messageHeader === void 0 ? void 0 : _this$_messageHeader.identifier;
280
247
  }
281
248
 
282
249
  get channelCode() {
283
250
  var _this$_messageHeader2;
284
-
285
251
  return (_this$_messageHeader2 = this._messageHeader) === null || _this$_messageHeader2 === void 0 ? void 0 : _this$_messageHeader2.channel;
286
252
  }
287
253
 
288
254
  get expectsReply() {
289
255
  var _this$_messageHeader3;
290
-
291
256
  return (_this$_messageHeader3 = this._messageHeader) === null || _this$_messageHeader3 === void 0 ? void 0 : _this$_messageHeader3.expectsReply;
292
257
  }
293
258
 
@@ -301,7 +266,6 @@ class DTXMessage {
301
266
 
302
267
  get conversationIndex() {
303
268
  var _this$_messageHeader4;
304
-
305
269
  return (_this$_messageHeader4 = this._messageHeader) === null || _this$_messageHeader4 === void 0 ? void 0 : _this$_messageHeader4.conversationIndex;
306
270
  }
307
271
 
@@ -327,26 +291,20 @@ class DTXMessage {
327
291
  let cursor = 0;
328
292
  const ret = new DTXMessage();
329
293
  ret._messageHeader = DTXMessageHeader.parse(headerBuf);
330
-
331
294
  if (ret._messageHeader.payloadLength === 0) {
332
295
  return ret;
333
296
  }
334
-
335
297
  ret._payloadHeader = DTXMessagePayloadHeader.parse(payloadBuf.slice(cursor, DTX_MESSAGE_PAYLOAD_HEADER_LENGTH));
336
298
  cursor += DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;
337
-
338
299
  if (ret._payloadHeader.totalLength === 0n) {
339
300
  return ret;
340
301
  }
341
-
342
302
  if (ret._payloadHeader.auxLength > 0) {
343
303
  ret.auxiliaries = DTXMessageAux.parse(payloadBuf.slice(cursor, cursor + ret._payloadHeader.auxLength), ret._payloadHeader);
344
304
  cursor += ret._payloadHeader.auxLength;
345
305
  }
346
-
347
306
  const data = payloadBuf.slice(cursor, cursor + payloadBuf.length);
348
307
  ret.selector = data;
349
-
350
308
  if (data.length > 0) {
351
309
  for (const fun of [_nskeyed.unarchive, _bplistParser.default.parseBuffer]) {
352
310
  try {
@@ -357,11 +315,8 @@ class DTXMessage {
357
315
  }
358
316
  }
359
317
  }
360
-
361
318
  return ret;
362
319
  }
363
-
364
320
  }
365
-
366
321
  exports.DTXMessage = DTXMessage;
367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgiLCJEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RIIiwiRFRYX01FU1NBR0VfSEVBREVSX01BR0lDIiwiRFRYX01FU1NBR0VfSEVBREVSX01BR0lDX0xFTiIsIkRUWF9NRVNTQUdFX0FVWF9IRUFERVIiLCJEVFhfQVVYSUxJQVJZX01BR0lDIiwiRkxBR19UWVBFUyIsIk9iamVjdCIsImZyZWV6ZSIsInB1c2giLCJyZWN2Iiwic2VuZCIsInJlcGx5IiwiQVVYX1RZUEVTIiwiVGV4dCIsIk5TS2V5ZWQiLCJVSW50MzJMRSIsIkJpZ1VJbnQ2NExFIiwiQmlnSW50NjRMRSIsIkRUWE1lc3NhZ2VIZWFkZXIiLCJidWlsZCIsImRhdGEiLCJtZXNzYWdlSGVhZGVyIiwiQnVmZmVyIiwiYWxsb2MiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MTZMRSIsInBheWxvYWRMZW5ndGgiLCJpZGVudGlmaWVyIiwiY29udmVyc2F0aW9uSW5kZXgiLCJjaGFubmVsQ29kZSIsImV4cGVjdHNSZXBseSIsInBhcnNlIiwiaGVhZGVyQnVmZmVyIiwibWFnaWMiLCJyZWFkVUludDMyTEUiLCJoZWFkZXJMZW5ndGgiLCJmcmFnbWVudElkIiwicmVhZFVJbnQxNkxFIiwiZnJhZ21lbnRDb3VudCIsImNoYW5uZWwiLCJEVFhNZXNzYWdlUGF5bG9hZEhlYWRlciIsImZsYWdzIiwiYXV4TGVuZ3RoIiwid3JpdGVCaWdVSW50NjRMRSIsInRvdGFsTGVuZ3RoIiwicmVhZEJpZ0ludDY0TEUiLCJEVFhNZXNzYWdlQXV4IiwiY29uc3RydWN0b3IiLCJtZXNzYWdlQXV4IiwiRFRYTWVzc2FnZUF1eEJ1ZmZlciIsImJ1ZiIsImxlbmd0aCIsImFyZyIsImNvbmNhdCIsImdldEJ5dGVzIiwiXyIsImlzTnVtYmVyIiwiYXBwZW5kSW50IiwiYXBwZW5kTG9uZyIsImFwcGVuZE9iamVjdCIsInBheWxvYWRIZWFkZXIiLCJjdXJzb3IiLCJtIiwiRXJyb3IiLCJ0eXBlIiwic3RyTGVuIiwic2xpY2UiLCJhcmNoaXZlZF9kYXRhIiwidW5hcmNoaXZlIiwicmVhZEJpZ1VJbnQ2NExFIiwiSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3IiLCJfYnVmIiwidmFsdWUiLCJhcHBlbmRTaWduZWRJbnQiLCJ3cml0ZUludDMyTEUiLCJhcHBlbmRTaWduZWRMb25nIiwid3JpdGVCaWdJbnQ2NExFIiwiYXJjaGl2ZSIsImJ1ZjIiLCJvdXQiLCJEVFhNZXNzYWdlIiwib3B0cyIsInNlbGVjdG9yIiwiX21lc3NhZ2VIZWFkZXIiLCJ1bmRlZmluZWQiLCJfcGF5bG9hZEhlYWRlciIsIl9pZGVudGlmaWVyIiwiX2NoYW5uZWxDb2RlIiwiX2V4cGVjdHNSZXBseSIsIl9zZWxlY3RvciIsIl9jb252ZXJzYXRpb25JbmRleCIsIl9mbGFncyIsImF1eGlsaWFyaWVzIiwic2VsIiwiYXV4IiwiQmlnSW50IiwiaGVhZGVyQnVmIiwicGF5bG9hZEJ1ZiIsInJldCIsImZ1biIsInBsaXN0bGliIiwicGFyc2VCdWZmZXIiLCJlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RydW1lbnQvaGVhZGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FyY2hpdmUsIHVuYXJjaGl2ZX0gZnJvbSAnLi90cmFuc2Zvcm1lci9uc2tleWVkJztcbmltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCA9IDE2O1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDMyO1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDID0gMHgxRjNENUI3OTtcbmNvbnN0IERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4gPSA0O1xuY29uc3QgRFRYX01FU1NBR0VfQVVYX0hFQURFUiA9IDB4MDFGMDtcbmNvbnN0IERUWF9BVVhJTElBUllfTUFHSUMgPSAweGE7XG5cbmNvbnN0IEZMQUdfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcHVzaDogMCxcbiAgcmVjdjogMSxcbiAgc2VuZDogMixcbiAgcmVwbHk6IDNcbn0pO1xuXG5jb25zdCBBVVhfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgVGV4dDogMSxcbiAgTlNLZXllZDogMixcbiAgVUludDMyTEU6IDMsXG4gIEJpZ1VJbnQ2NExFOiA0LFxuICBCaWdJbnQ2NExFOiA2XG59KTtcblxuLyoqXG4gKiBEVFhNZXNzYWdlSGVhZGVyIGxlbmd0aCAzMlxuICogc3RydWN0IERUWE1lc3NhZ2VIZWFkZXIge1xuICogICAgIHUzMiBtYWdpYyBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNcbiAqICAgICB1MzIgaGVhZGVyTGVuZ3RoXG4gKiAgICAgdTE2IGZyYWdtZW50SWQgICBwYWNrZXQgbnVtYmVyXG4gKiAgICAgdTE2IGZyYWdtZW50Q291bnQgIHBhY2tldHMgdG90YWwgbnVtYmVyXG4gKiAgICAgdTMyIHBheWxvYWRMZW5ndGhcbiAqICAgICB1MzIgaWRlbnRpZmllclxuICogICAgIHUzMiBjb252ZXJzYXRpb25JbmRleFxuICogICAgIHUzMiBjaGFubmVsXG4gKiAgICAgdTMyIGV4cGVjdHNSZXBseVxuICogICAgIH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERUWE1lc3NhZ2VPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRlbnRpZmllciBwYWNrZXQgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLCB0aGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFubmVsQ29kZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gb2YgdGhlIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBjaGFubmVsIGNvZGUuXG4gKiBFYWNoIHNlcnZpY2UgaGFzIGEgc2VwYXJhdGUgY2hhbm5lbFxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBwYXlsb2FkTGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwZWN0c1JlcGx5IGlmIHRydWUgcmVwbHkgYSBhY2sgbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbnZlcnNhdGlvbkluZGV4ICByYXcgZGF0YSArMSBpbmRpY2F0ZSBhIHJlcGx5IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICovXG5cbmNsYXNzIERUWE1lc3NhZ2VIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gZGF0YVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlSGVhZGVyQnVmZmVyXG4gICAqL1xuICBzdGF0aWMgYnVpbGQgKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gQnVmZmVyLmFsbG9jKERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUMsIDApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RILCA0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDE2TEUoMCwgOCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQxNkxFKDEsIDEwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5wYXlsb2FkTGVuZ3RoLCAxMik7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuaWRlbnRpZmllciwgMTYpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmNvbnZlcnNhdGlvbkluZGV4LCAyMCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuY2hhbm5lbENvZGUsIDI0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5leHBlY3RzUmVwbHksIDI4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyIERUWE1lc3NhZ2VIZWFkZXJCdWZmZXJcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hZ2ljOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgaGVhZGVyTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgZnJhZ21lbnRJZDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MTZMRSg4KSxcbiAgICAgIGZyYWdtZW50Q291bnQ6IGhlYWRlckJ1ZmZlci5yZWFkVUludDE2TEUoMTApLFxuICAgICAgcGF5bG9hZExlbmd0aDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgxMiksXG4gICAgICBpZGVudGlmaWVyOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDE2KSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDIwKSxcbiAgICAgIGNoYW5uZWw6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjQpLFxuICAgICAgZXhwZWN0c1JlcGx5OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDI4KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIgbGVuZ3RoIDE2XG4gKiBzdHJ1Y3QgRFRYTWVzc2FnZUhlYWRlciB7XG4gKiAgICAgdTMyIGZsYWdzIEZMQUdfVFlQRVNcbiAqICAgICB1MzIgYXV4TGVuZ3RoXG4gKiAgICAgdTY0IHRvdGFsTGVuZ3RoXG4gKiAgICAgfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGF1eExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7YmlnaW50fSB0b3RhbExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSkgKyBzZWxlY3RvckJ1ZmZlci5sZW5ndGhcbiAqL1xuY2xhc3MgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEge0RUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyT2JqZWN0fVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlckJ1ZmZlclxuICAgKi9cbiAgc3RhdGljIGJ1aWxkIChkYXRhKSB7XG4gICAgY29uc3QgbWVzc2FnZUhlYWRlciA9IEJ1ZmZlci5hbGxvYyhEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmZsYWdzLCAwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5hdXhMZW5ndGgsIDQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVCaWdVSW50NjRMRShkYXRhLnRvdGFsTGVuZ3RoLCA4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlUGF5bG9hZEhlYWRlck9iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZsYWdzOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgYXV4TGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgdG90YWxMZW5ndGg6IGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRSg4KVxuICAgIH07XG4gIH1cbn1cblxuXG5jbGFzcyBEVFhNZXNzYWdlQXV4IHtcbiAgY29uc3RydWN0b3IgKGRhdGEgPSBbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSlMgQXJyYXkgdG8gQXBwbGUgTlNLZXllZCBCdWZmZXJcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBtZXNzYWdlQXV4ID0gbmV3IERUWE1lc3NhZ2VBdXhCdWZmZXIoKTtcbiAgICBsZXQgYnVmID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEVFhNZXNzYWdlQXV4QnVmZmVyKSB7XG4gICAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgYXJnLmdldEJ5dGVzKCldKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc051bWJlcihhcmcpKSB7XG4gICAgICAgIG1lc3NhZ2VBdXguYXBwZW5kSW50KGFyZyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgbWVzc2FnZUF1eC5hcHBlbmRMb25nKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlQXV4LmFwcGVuZE9iamVjdChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBtZXNzYWdlQXV4LmdldEJ5dGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgbnNrZXllZCBCdWZmZXIgaW50byBqcyBhcnJheVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmZmVyXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3R9IHBheWxvYWRIZWFkZXJcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWZmZXIsIHBheWxvYWRIZWFkZXIpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgY29uc3QgbGVuZ3RoID0gaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKDgpO1xuICAgIGN1cnNvciArPSAxNjtcbiAgICB3aGlsZSAoY3Vyc29yIDw9IGxlbmd0aCkge1xuICAgICAgaWYgKHBheWxvYWRIZWFkZXIuZmxhZ3MgIT09IEZMQUdfVFlQRVMucHVzaCkge1xuICAgICAgICBjb25zdCBtID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgaWYgKG0gIT09IERUWF9BVVhJTElBUllfTUFHSUMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluY29ycmVjdCBhdXhpbGlhcnkgbWFnaWM6ICR7bX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgIGN1cnNvciArPSA0O1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlRleHQ6IHtcbiAgICAgICAgICBjb25zdCBzdHJMZW4gPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5zbGljZShjdXJzb3IsIGN1cnNvciArIHN0ckxlbikpO1xuICAgICAgICAgIGN1cnNvciArPSBzdHJMZW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuTlNLZXllZDoge1xuICAgICAgICAgIGNvbnN0IHN0ckxlbiA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgICBjb25zdCBhcmNoaXZlZF9kYXRhID0gaGVhZGVyQnVmZmVyLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgc3RyTGVuKTtcbiAgICAgICAgICBkYXRhLnB1c2godW5hcmNoaXZlKGFyY2hpdmVkX2RhdGEpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gc3RyTGVuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlVJbnQzMkxFOlxuICAgICAgICAgIGRhdGEucHVzaChoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFVWF9UWVBFUy5CaWdVSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdVSW50NjRMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuQmlnSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgRFRYTWVzc2FnZUF1eEJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRJbnQgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSgzLCA0KTtcbiAgICBidWYud3JpdGVVSW50MzJMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZExvbmcgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDE2KTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSg0LCA0KTtcbiAgICBidWYud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICovXG4gIGFwcGVuZFNpZ25lZEludCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDMsIDQpO1xuICAgIGJ1Zi53cml0ZUludDMyTEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtiaWdpbnR9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRTaWduZWRMb25nICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoNiwgNCk7XG4gICAgYnVmLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZE9iamVjdCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBhcmNoaXZlKHZhbHVlKTtcbiAgICBjb25zdCBidWYyID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYyLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmMi53cml0ZVVJbnQzMkxFKDIsIDQpO1xuICAgIGJ1ZjIud3JpdGVVSW50MzJMRShidWYubGVuZ3RoLCA4KTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLl9idWYsIGJ1ZjIsIGJ1Zl0pO1xuICB9XG5cbiAgZ2V0Qnl0ZXMgKCkge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgb3V0LndyaXRlVUludDMyTEUoRFRYX01FU1NBR0VfQVVYX0hFQURFUiwgMCk7XG4gICAgb3V0LndyaXRlVUludDMyTEUodGhpcy5fYnVmLmxlbmd0aCwgOCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW291dCwgdGhpcy5fYnVmXSk7XG4gIH1cbn1cblxuXG5cbmNsYXNzIERUWE1lc3NhZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5LFxuICAgICAgY29udmVyc2F0aW9uSW5kZXggPSAwLFxuICAgICAgZmxhZ3MgPSBGTEFHX1RZUEVTLnNlbmRcbiAgICB9ID0gb3B0cztcbiAgICB0aGlzLl9tZXNzYWdlSGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3BheWxvYWRIZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgdGhpcy5fY2hhbm5lbENvZGUgPSBjaGFubmVsQ29kZTtcbiAgICB0aGlzLl9leHBlY3RzUmVwbHkgPSBleHBlY3RzUmVwbHk7XG4gICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB0aGlzLl9jb252ZXJzYXRpb25JbmRleCA9IGNvbnZlcnNhdGlvbkluZGV4O1xuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5hdXhpbGlhcmllcyA9IG5ldyBEVFhNZXNzYWdlQXV4KCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgaWRlbnRpZmllci4gUGFja2V0IHRyYW5zbWlzc2lvbiBzZXF1ZW5jZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGlkZW50aWZpZXIgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5pZGVudGlmaWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGNoYW5uZWxDb2RlLlxuICAgKiBQYWNrZXQgdHJhbnNtaXNzaW9uIGNoYW5uZWxDb2RlLiBVc2UgdGhpcyB2YWx1ZSB0byBkaXN0aW5ndWlzaCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjaGFubmVsc1xuICAgKiBjYWxsIHRoaXMgbWV0aG9kIGBJbnN0cnVtZW50U2VydmljZS5yZWdpc3RlckNoYW5uZWxDYWxsYmFja2AgZ2V0IHRoZSBjaGFubmVsIG1lc3NhZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBjaGFubmVsQ29kZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VIZWFkZXI/LmNoYW5uZWw7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgZXhwZWN0c1JlcGx5LiBXaGV0aGVyIHRvIG5lZWQgYWNrIG1lc3NhZ2VcbiAgICogaWYgZXhwZWN0c1JlcGx5IGlzIHRydWUgbXVzdCByZXBseSBhY2sgbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBleHBlY3RzUmVwbHkgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5leHBlY3RzUmVwbHk7XG4gIH1cblxuICAvKipcbiAgICogY2FsbCB0aGlzIG1ldGhvZCBgSW5zdHJ1bWVudFNlcnZpY2UucmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrYCBnZXQgdGhlIHNlbGVjdG9yIG1lc3NhZ2VcbiAgICogQHJldHVybnMgeyp9IFVua25vd24gZGF0YVxuICAgKi9cbiAgZ2V0IHNlbGVjdG9yICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldCBzZWxlY3RvciAoZGF0YSkge1xuICAgIHRoaXMuX3NlbGVjdG9yID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgRFRYTWVzc2FnZUhlYWRlciBjb252ZXJzYXRpb25JbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGNvbnZlcnNhdGlvbkluZGV4ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uY29udmVyc2F0aW9uSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRFRYTWVzc2FnZSBCdWZmZXI6IERUWE1lc3NhZ2VIZWFkZXIgKyBQYXlsb2FkSGVhZGVyICsgRFRYTWVzc2FnZUF1eEJ1ZmZlcihudWxsYWJsZSkgKyBzZWxlY3RvcihudWxsYWJsZSlcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLl9zZWxlY3RvciA/IGFyY2hpdmUodGhpcy5fc2VsZWN0b3IpIDogQnVmZmVyLmFsbG9jKDApO1xuICAgIGNvbnN0IGF1eCA9IHRoaXMuYXV4aWxpYXJpZXMuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkSGVhZGVyID0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIuYnVpbGQoe1xuICAgICAgZmxhZ3M6IHRoaXMuX2ZsYWdzLFxuICAgICAgYXV4TGVuZ3RoOiBhdXgubGVuZ3RoLFxuICAgICAgLy8gbmVlZCB0byBjb252ZXJ0IHRvIGJpZ2ludCBpbiBhbnkgY2FzZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB0b3RhbExlbmd0aDogQmlnSW50KGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSBEVFhNZXNzYWdlSGVhZGVyLmJ1aWxkKHtcbiAgICAgIHBheWxvYWRMZW5ndGg6IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCArIGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5faWRlbnRpZmllcixcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiB0aGlzLl9jb252ZXJzYXRpb25JbmRleCxcbiAgICAgIGNoYW5uZWxDb2RlOiB0aGlzLl9jaGFubmVsQ29kZSxcbiAgICAgIGV4cGVjdHNSZXBseTogdGhpcy5fZXhwZWN0c1JlcGx5XG4gICAgfSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW21lc3NhZ2VIZWFkZXIsIHBheWxvYWRIZWFkZXIsIGF1eCwgc2VsXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIERUWCBidWZmZXIgaW50byBhbiBqcyBvYmplY3QuIFJldHVybmVkIGluIERUWERlY29kZXIgU3RyZWFtLlRyYW5zZm9ybVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmICBEVFhNZXNzYWdlSGVhZGVyIGJ1ZmZlclxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gcGF5bG9hZEJ1ZiAgUGF5bG9hZEhlYWRlckJ1ZmZlciArIERUWE1lc3NhZ2VBdXhCdWZmZXIobnVsbGFibGUpICsgc2VsZWN0b3JCdWZmZXIobnVsbGFibGUpXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlfVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWYsIHBheWxvYWRCdWYpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCByZXQgPSBuZXcgRFRYTWVzc2FnZSgpO1xuICAgIHJldC5fbWVzc2FnZUhlYWRlciA9IERUWE1lc3NhZ2VIZWFkZXIucGFyc2UoaGVhZGVyQnVmKTtcbiAgICBpZiAocmV0Ll9tZXNzYWdlSGVhZGVyLnBheWxvYWRMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHJldC5fcGF5bG9hZEhlYWRlciA9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpKTtcbiAgICBjdXJzb3IgKz0gRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIO1xuICAgIC8vIHRvdGFsTGVuZ3RoIGlzIGJpZ2ludCB1c2UgMG5cbiAgICBpZiAocmV0Ll9wYXlsb2FkSGVhZGVyLnRvdGFsTGVuZ3RoID09PSAwbikge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaWYgKHJldC5fcGF5bG9hZEhlYWRlci5hdXhMZW5ndGggPiAwKSB7XG4gICAgICByZXQuYXV4aWxpYXJpZXMgPSBEVFhNZXNzYWdlQXV4LnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoKSwgcmV0Ll9wYXlsb2FkSGVhZGVyKTtcbiAgICAgIGN1cnNvciArPSByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgcGF5bG9hZEJ1Zi5sZW5ndGgpO1xuICAgIHJldC5zZWxlY3RvciA9IGRhdGE7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmdW4gb2YgW3VuYXJjaGl2ZSwgcGxpc3RsaWIucGFyc2VCdWZmZXJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gZnVuKGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gbmV3IEluc3RydW1lbnRSUENQYXJzZUVycm9yKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgRFRYTWVzc2FnZUhlYWRlciwgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIsIERUWE1lc3NhZ2VBdXhCdWZmZXIsIERUWE1lc3NhZ2VBdXgsIERUWE1lc3NhZ2UsXG4gIERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDLCBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNfTEVOLFxuICBGTEFHX1RZUEVTfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxpQ0FBaUMsR0FBRyxFQUExQzs7QUFDQSxNQUFN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
322
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgiLCJEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RIIiwiRFRYX01FU1NBR0VfSEVBREVSX01BR0lDIiwiRFRYX01FU1NBR0VfSEVBREVSX01BR0lDX0xFTiIsIkRUWF9NRVNTQUdFX0FVWF9IRUFERVIiLCJEVFhfQVVYSUxJQVJZX01BR0lDIiwiRkxBR19UWVBFUyIsIk9iamVjdCIsImZyZWV6ZSIsInB1c2giLCJyZWN2Iiwic2VuZCIsInJlcGx5IiwiQVVYX1RZUEVTIiwiVGV4dCIsIk5TS2V5ZWQiLCJVSW50MzJMRSIsIkJpZ1VJbnQ2NExFIiwiQmlnSW50NjRMRSIsIkRUWE1lc3NhZ2VIZWFkZXIiLCJidWlsZCIsImRhdGEiLCJtZXNzYWdlSGVhZGVyIiwiQnVmZmVyIiwiYWxsb2MiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MTZMRSIsInBheWxvYWRMZW5ndGgiLCJpZGVudGlmaWVyIiwiY29udmVyc2F0aW9uSW5kZXgiLCJjaGFubmVsQ29kZSIsImV4cGVjdHNSZXBseSIsInBhcnNlIiwiaGVhZGVyQnVmZmVyIiwibWFnaWMiLCJyZWFkVUludDMyTEUiLCJoZWFkZXJMZW5ndGgiLCJmcmFnbWVudElkIiwicmVhZFVJbnQxNkxFIiwiZnJhZ21lbnRDb3VudCIsImNoYW5uZWwiLCJEVFhNZXNzYWdlUGF5bG9hZEhlYWRlciIsImZsYWdzIiwiYXV4TGVuZ3RoIiwid3JpdGVCaWdVSW50NjRMRSIsInRvdGFsTGVuZ3RoIiwicmVhZEJpZ0ludDY0TEUiLCJEVFhNZXNzYWdlQXV4IiwiY29uc3RydWN0b3IiLCJtZXNzYWdlQXV4IiwiRFRYTWVzc2FnZUF1eEJ1ZmZlciIsImJ1ZiIsImxlbmd0aCIsImFyZyIsImNvbmNhdCIsImdldEJ5dGVzIiwiXyIsImlzTnVtYmVyIiwiYXBwZW5kSW50IiwiYXBwZW5kTG9uZyIsImFwcGVuZE9iamVjdCIsInBheWxvYWRIZWFkZXIiLCJjdXJzb3IiLCJtIiwiRXJyb3IiLCJ0eXBlIiwic3RyTGVuIiwic2xpY2UiLCJhcmNoaXZlZF9kYXRhIiwidW5hcmNoaXZlIiwicmVhZEJpZ1VJbnQ2NExFIiwiSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3IiLCJfYnVmIiwidmFsdWUiLCJhcHBlbmRTaWduZWRJbnQiLCJ3cml0ZUludDMyTEUiLCJhcHBlbmRTaWduZWRMb25nIiwid3JpdGVCaWdJbnQ2NExFIiwiYXJjaGl2ZSIsImJ1ZjIiLCJvdXQiLCJEVFhNZXNzYWdlIiwib3B0cyIsInNlbGVjdG9yIiwiX21lc3NhZ2VIZWFkZXIiLCJ1bmRlZmluZWQiLCJfcGF5bG9hZEhlYWRlciIsIl9pZGVudGlmaWVyIiwiX2NoYW5uZWxDb2RlIiwiX2V4cGVjdHNSZXBseSIsIl9zZWxlY3RvciIsIl9jb252ZXJzYXRpb25JbmRleCIsIl9mbGFncyIsImF1eGlsaWFyaWVzIiwic2VsIiwiYXV4IiwiQmlnSW50IiwiaGVhZGVyQnVmIiwicGF5bG9hZEJ1ZiIsInJldCIsImZ1biIsInBsaXN0bGliIiwicGFyc2VCdWZmZXIiLCJlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2luc3RydW1lbnQvaGVhZGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FyY2hpdmUsIHVuYXJjaGl2ZX0gZnJvbSAnLi90cmFuc2Zvcm1lci9uc2tleWVkJztcbmltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCA9IDE2O1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDMyO1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDID0gMHgxRjNENUI3OTtcbmNvbnN0IERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4gPSA0O1xuY29uc3QgRFRYX01FU1NBR0VfQVVYX0hFQURFUiA9IDB4MDFGMDtcbmNvbnN0IERUWF9BVVhJTElBUllfTUFHSUMgPSAweGE7XG5cbmNvbnN0IEZMQUdfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgcHVzaDogMCxcbiAgcmVjdjogMSxcbiAgc2VuZDogMixcbiAgcmVwbHk6IDNcbn0pO1xuXG5jb25zdCBBVVhfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgVGV4dDogMSxcbiAgTlNLZXllZDogMixcbiAgVUludDMyTEU6IDMsXG4gIEJpZ1VJbnQ2NExFOiA0LFxuICBCaWdJbnQ2NExFOiA2XG59KTtcblxuLyoqXG4gKiBEVFhNZXNzYWdlSGVhZGVyIGxlbmd0aCAzMlxuICogc3RydWN0IERUWE1lc3NhZ2VIZWFkZXIge1xuICogICAgIHUzMiBtYWdpYyBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNcbiAqICAgICB1MzIgaGVhZGVyTGVuZ3RoXG4gKiAgICAgdTE2IGZyYWdtZW50SWQgICBwYWNrZXQgbnVtYmVyXG4gKiAgICAgdTE2IGZyYWdtZW50Q291bnQgIHBhY2tldHMgdG90YWwgbnVtYmVyXG4gKiAgICAgdTMyIHBheWxvYWRMZW5ndGhcbiAqICAgICB1MzIgaWRlbnRpZmllclxuICogICAgIHUzMiBjb252ZXJzYXRpb25JbmRleFxuICogICAgIHUzMiBjaGFubmVsXG4gKiAgICAgdTMyIGV4cGVjdHNSZXBseVxuICogICAgIH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERUWE1lc3NhZ2VPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRlbnRpZmllciBwYWNrZXQgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLCB0aGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFubmVsQ29kZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gb2YgdGhlIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBjaGFubmVsIGNvZGUuXG4gKiBFYWNoIHNlcnZpY2UgaGFzIGEgc2VwYXJhdGUgY2hhbm5lbFxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBwYXlsb2FkTGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwZWN0c1JlcGx5IGlmIHRydWUgcmVwbHkgYSBhY2sgbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbnZlcnNhdGlvbkluZGV4ICByYXcgZGF0YSArMSBpbmRpY2F0ZSBhIHJlcGx5IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICovXG5cbmNsYXNzIERUWE1lc3NhZ2VIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gZGF0YVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlSGVhZGVyQnVmZmVyXG4gICAqL1xuICBzdGF0aWMgYnVpbGQgKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gQnVmZmVyLmFsbG9jKERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUMsIDApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RILCA0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDE2TEUoMCwgOCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQxNkxFKDEsIDEwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5wYXlsb2FkTGVuZ3RoLCAxMik7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuaWRlbnRpZmllciwgMTYpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmNvbnZlcnNhdGlvbkluZGV4LCAyMCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuY2hhbm5lbENvZGUsIDI0KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5leHBlY3RzUmVwbHksIDI4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyIERUWE1lc3NhZ2VIZWFkZXJCdWZmZXJcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hZ2ljOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgaGVhZGVyTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgZnJhZ21lbnRJZDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MTZMRSg4KSxcbiAgICAgIGZyYWdtZW50Q291bnQ6IGhlYWRlckJ1ZmZlci5yZWFkVUludDE2TEUoMTApLFxuICAgICAgcGF5bG9hZExlbmd0aDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgxMiksXG4gICAgICBpZGVudGlmaWVyOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDE2KSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDIwKSxcbiAgICAgIGNoYW5uZWw6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjQpLFxuICAgICAgZXhwZWN0c1JlcGx5OiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDI4KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIgbGVuZ3RoIDE2XG4gKiBzdHJ1Y3QgRFRYTWVzc2FnZUhlYWRlciB7XG4gKiAgICAgdTMyIGZsYWdzIEZMQUdfVFlQRVNcbiAqICAgICB1MzIgYXV4TGVuZ3RoXG4gKiAgICAgdTY0IHRvdGFsTGVuZ3RoXG4gKiAgICAgfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmbGFncyBtZXNzYWdlIHN0YXR1c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGF1eExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSlcbiAqIEBwcm9wZXJ0eSB7YmlnaW50fSB0b3RhbExlbmd0aCBEVFhNZXNzYWdlQXV4QnVmZmVyLmxlbmd0aChudWxsYWJsZSkgKyBzZWxlY3RvckJ1ZmZlci5sZW5ndGhcbiAqL1xuY2xhc3MgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIge1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEge0RUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyT2JqZWN0fVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlckJ1ZmZlclxuICAgKi9cbiAgc3RhdGljIGJ1aWxkIChkYXRhKSB7XG4gICAgY29uc3QgbWVzc2FnZUhlYWRlciA9IEJ1ZmZlci5hbGxvYyhEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmZsYWdzLCAwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5hdXhMZW5ndGgsIDQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVCaWdVSW50NjRMRShkYXRhLnRvdGFsTGVuZ3RoLCA4KTtcbiAgICByZXR1cm4gbWVzc2FnZUhlYWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaGVhZGVyQnVmZmVyXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlUGF5bG9hZEhlYWRlck9iamVjdH1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmZmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZsYWdzOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgYXV4TGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDQpLFxuICAgICAgdG90YWxMZW5ndGg6IGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRSg4KVxuICAgIH07XG4gIH1cbn1cblxuXG5jbGFzcyBEVFhNZXNzYWdlQXV4IHtcbiAgY29uc3RydWN0b3IgKGRhdGEgPSBbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSlMgQXJyYXkgdG8gQXBwbGUgTlNLZXllZCBCdWZmZXJcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBtZXNzYWdlQXV4ID0gbmV3IERUWE1lc3NhZ2VBdXhCdWZmZXIoKTtcbiAgICBsZXQgYnVmID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEVFhNZXNzYWdlQXV4QnVmZmVyKSB7XG4gICAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgYXJnLmdldEJ5dGVzKCldKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc051bWJlcihhcmcpKSB7XG4gICAgICAgIG1lc3NhZ2VBdXguYXBwZW5kSW50KGFyZyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgbWVzc2FnZUF1eC5hcHBlbmRMb25nKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlQXV4LmFwcGVuZE9iamVjdChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBtZXNzYWdlQXV4LmdldEJ5dGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgbnNrZXllZCBCdWZmZXIgaW50byBqcyBhcnJheVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmZmVyXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3R9IHBheWxvYWRIZWFkZXJcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWZmZXIsIHBheWxvYWRIZWFkZXIpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgY29uc3QgbGVuZ3RoID0gaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKDgpO1xuICAgIGN1cnNvciArPSAxNjtcbiAgICB3aGlsZSAoY3Vyc29yIDw9IGxlbmd0aCkge1xuICAgICAgaWYgKHBheWxvYWRIZWFkZXIuZmxhZ3MgIT09IEZMQUdfVFlQRVMucHVzaCkge1xuICAgICAgICBjb25zdCBtID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgaWYgKG0gIT09IERUWF9BVVhJTElBUllfTUFHSUMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluY29ycmVjdCBhdXhpbGlhcnkgbWFnaWM6ICR7bX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgIGN1cnNvciArPSA0O1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlRleHQ6IHtcbiAgICAgICAgICBjb25zdCBzdHJMZW4gPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5zbGljZShjdXJzb3IsIGN1cnNvciArIHN0ckxlbikpO1xuICAgICAgICAgIGN1cnNvciArPSBzdHJMZW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuTlNLZXllZDoge1xuICAgICAgICAgIGNvbnN0IHN0ckxlbiA9IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoY3Vyc29yKTtcbiAgICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgICBjb25zdCBhcmNoaXZlZF9kYXRhID0gaGVhZGVyQnVmZmVyLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgc3RyTGVuKTtcbiAgICAgICAgICBkYXRhLnB1c2godW5hcmNoaXZlKGFyY2hpdmVkX2RhdGEpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gc3RyTGVuO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLlVJbnQzMkxFOlxuICAgICAgICAgIGRhdGEucHVzaChoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFVWF9UWVBFUy5CaWdVSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdVSW50NjRMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuQmlnSW50NjRMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRCaWdJbnQ2NExFKGN1cnNvcikpO1xuICAgICAgICAgIGN1cnNvciArPSA4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgRFRYTWVzc2FnZUF1eEJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRJbnQgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSgzLCA0KTtcbiAgICBidWYud3JpdGVVSW50MzJMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZExvbmcgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDE2KTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSg0LCA0KTtcbiAgICBidWYud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICovXG4gIGFwcGVuZFNpZ25lZEludCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTIpO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDMsIDQpO1xuICAgIGJ1Zi53cml0ZUludDMyTEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtiaWdpbnR9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRTaWduZWRMb25nICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoNiwgNCk7XG4gICAgYnVmLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAgICovXG4gIGFwcGVuZE9iamVjdCAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBhcmNoaXZlKHZhbHVlKTtcbiAgICBjb25zdCBidWYyID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYyLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmMi53cml0ZVVJbnQzMkxFKDIsIDQpO1xuICAgIGJ1ZjIud3JpdGVVSW50MzJMRShidWYubGVuZ3RoLCA4KTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLl9idWYsIGJ1ZjIsIGJ1Zl0pO1xuICB9XG5cbiAgZ2V0Qnl0ZXMgKCkge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgb3V0LndyaXRlVUludDMyTEUoRFRYX01FU1NBR0VfQVVYX0hFQURFUiwgMCk7XG4gICAgb3V0LndyaXRlVUludDMyTEUodGhpcy5fYnVmLmxlbmd0aCwgOCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW291dCwgdGhpcy5fYnVmXSk7XG4gIH1cbn1cblxuXG5cbmNsYXNzIERUWE1lc3NhZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5LFxuICAgICAgY29udmVyc2F0aW9uSW5kZXggPSAwLFxuICAgICAgZmxhZ3MgPSBGTEFHX1RZUEVTLnNlbmRcbiAgICB9ID0gb3B0cztcbiAgICB0aGlzLl9tZXNzYWdlSGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3BheWxvYWRIZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgdGhpcy5fY2hhbm5lbENvZGUgPSBjaGFubmVsQ29kZTtcbiAgICB0aGlzLl9leHBlY3RzUmVwbHkgPSBleHBlY3RzUmVwbHk7XG4gICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB0aGlzLl9jb252ZXJzYXRpb25JbmRleCA9IGNvbnZlcnNhdGlvbkluZGV4O1xuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5hdXhpbGlhcmllcyA9IG5ldyBEVFhNZXNzYWdlQXV4KCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgaWRlbnRpZmllci4gUGFja2V0IHRyYW5zbWlzc2lvbiBzZXF1ZW5jZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGlkZW50aWZpZXIgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5pZGVudGlmaWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGNoYW5uZWxDb2RlLlxuICAgKiBQYWNrZXQgdHJhbnNtaXNzaW9uIGNoYW5uZWxDb2RlLiBVc2UgdGhpcyB2YWx1ZSB0byBkaXN0aW5ndWlzaCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjaGFubmVsc1xuICAgKiBjYWxsIHRoaXMgbWV0aG9kIGBJbnN0cnVtZW50U2VydmljZS5yZWdpc3RlckNoYW5uZWxDYWxsYmFja2AgZ2V0IHRoZSBjaGFubmVsIG1lc3NhZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBjaGFubmVsQ29kZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VIZWFkZXI/LmNoYW5uZWw7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgZXhwZWN0c1JlcGx5LiBXaGV0aGVyIHRvIG5lZWQgYWNrIG1lc3NhZ2VcbiAgICogaWYgZXhwZWN0c1JlcGx5IGlzIHRydWUgbXVzdCByZXBseSBhY2sgbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBleHBlY3RzUmVwbHkgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5leHBlY3RzUmVwbHk7XG4gIH1cblxuICAvKipcbiAgICogY2FsbCB0aGlzIG1ldGhvZCBgSW5zdHJ1bWVudFNlcnZpY2UucmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrYCBnZXQgdGhlIHNlbGVjdG9yIG1lc3NhZ2VcbiAgICogQHJldHVybnMgeyp9IFVua25vd24gZGF0YVxuICAgKi9cbiAgZ2V0IHNlbGVjdG9yICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldCBzZWxlY3RvciAoZGF0YSkge1xuICAgIHRoaXMuX3NlbGVjdG9yID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgRFRYTWVzc2FnZUhlYWRlciBjb252ZXJzYXRpb25JbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGNvbnZlcnNhdGlvbkluZGV4ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uY29udmVyc2F0aW9uSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRFRYTWVzc2FnZSBCdWZmZXI6IERUWE1lc3NhZ2VIZWFkZXIgKyBQYXlsb2FkSGVhZGVyICsgRFRYTWVzc2FnZUF1eEJ1ZmZlcihudWxsYWJsZSkgKyBzZWxlY3RvcihudWxsYWJsZSlcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGJ1aWxkICgpIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLl9zZWxlY3RvciA/IGFyY2hpdmUodGhpcy5fc2VsZWN0b3IpIDogQnVmZmVyLmFsbG9jKDApO1xuICAgIGNvbnN0IGF1eCA9IHRoaXMuYXV4aWxpYXJpZXMuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkSGVhZGVyID0gRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIuYnVpbGQoe1xuICAgICAgZmxhZ3M6IHRoaXMuX2ZsYWdzLFxuICAgICAgYXV4TGVuZ3RoOiBhdXgubGVuZ3RoLFxuICAgICAgLy8gbmVlZCB0byBjb252ZXJ0IHRvIGJpZ2ludCBpbiBhbnkgY2FzZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB0b3RhbExlbmd0aDogQmlnSW50KGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSBEVFhNZXNzYWdlSGVhZGVyLmJ1aWxkKHtcbiAgICAgIHBheWxvYWRMZW5ndGg6IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCArIGF1eC5sZW5ndGggKyBzZWwubGVuZ3RoLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5faWRlbnRpZmllcixcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4OiB0aGlzLl9jb252ZXJzYXRpb25JbmRleCxcbiAgICAgIGNoYW5uZWxDb2RlOiB0aGlzLl9jaGFubmVsQ29kZSxcbiAgICAgIGV4cGVjdHNSZXBseTogdGhpcy5fZXhwZWN0c1JlcGx5XG4gICAgfSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW21lc3NhZ2VIZWFkZXIsIHBheWxvYWRIZWFkZXIsIGF1eCwgc2VsXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIERUWCBidWZmZXIgaW50byBhbiBqcyBvYmplY3QuIFJldHVybmVkIGluIERUWERlY29kZXIgU3RyZWFtLlRyYW5zZm9ybVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gaGVhZGVyQnVmICBEVFhNZXNzYWdlSGVhZGVyIGJ1ZmZlclxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gcGF5bG9hZEJ1ZiAgUGF5bG9hZEhlYWRlckJ1ZmZlciArIERUWE1lc3NhZ2VBdXhCdWZmZXIobnVsbGFibGUpICsgc2VsZWN0b3JCdWZmZXIobnVsbGFibGUpXG4gICAqIEByZXR1cm5zIHtEVFhNZXNzYWdlfVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWYsIHBheWxvYWRCdWYpIHtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBjb25zdCByZXQgPSBuZXcgRFRYTWVzc2FnZSgpO1xuICAgIHJldC5fbWVzc2FnZUhlYWRlciA9IERUWE1lc3NhZ2VIZWFkZXIucGFyc2UoaGVhZGVyQnVmKTtcbiAgICBpZiAocmV0Ll9tZXNzYWdlSGVhZGVyLnBheWxvYWRMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHJldC5fcGF5bG9hZEhlYWRlciA9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEgpKTtcbiAgICBjdXJzb3IgKz0gRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIO1xuICAgIC8vIHRvdGFsTGVuZ3RoIGlzIGJpZ2ludCB1c2UgMG5cbiAgICBpZiAocmV0Ll9wYXlsb2FkSGVhZGVyLnRvdGFsTGVuZ3RoID09PSAwbikge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaWYgKHJldC5fcGF5bG9hZEhlYWRlci5hdXhMZW5ndGggPiAwKSB7XG4gICAgICByZXQuYXV4aWxpYXJpZXMgPSBEVFhNZXNzYWdlQXV4LnBhcnNlKHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoKSwgcmV0Ll9wYXlsb2FkSGVhZGVyKTtcbiAgICAgIGN1cnNvciArPSByZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgcGF5bG9hZEJ1Zi5sZW5ndGgpO1xuICAgIHJldC5zZWxlY3RvciA9IGRhdGE7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmdW4gb2YgW3VuYXJjaGl2ZSwgcGxpc3RsaWIucGFyc2VCdWZmZXJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gZnVuKGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0LnNlbGVjdG9yID0gbmV3IEluc3RydW1lbnRSUENQYXJzZUVycm9yKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgRFRYTWVzc2FnZUhlYWRlciwgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIsIERUWE1lc3NhZ2VBdXhCdWZmZXIsIERUWE1lc3NhZ2VBdXgsIERUWE1lc3NhZ2UsXG4gIERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDLCBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNfTEVOLFxuICBGTEFHX1RZUEVTfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxpQ0FBaUMsR0FBRyxFQUFFO0FBQUM7QUFDN0MsTUFBTUMseUJBQXlCLEdBQUcsRUFBRTtBQUFDO0FBQ3JDLE1BQU1DLHdCQUF3QixHQUFHLFVBQVU7QUFBQztBQUM1QyxNQUFNQyw0QkFBNEIsR0FBRyxDQUFDO0FBQUM7QUFDdkMsTUFBTUMsc0JBQXNCLEdBQUcsTUFBTTtBQUNyQyxNQUFNQyxtQkFBbUIsR0FBRyxHQUFHO0FBRS9CLE1BQU1DLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDL0JDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLEtBQUssRUFBRTtBQUNULENBQUMsQ0FBQztBQUFDO0FBRUgsTUFBTUMsU0FBUyxHQUFHTixNQUFNLENBQUNDLE1BQU0sQ0FBQztFQUM5Qk0sSUFBSSxFQUFFLENBQUM7RUFDUEMsT0FBTyxFQUFFLENBQUM7RUFDVkMsUUFBUSxFQUFFLENBQUM7RUFDWEMsV0FBVyxFQUFFLENBQUM7RUFDZEMsVUFBVSxFQUFFO0FBQ2QsQ0FBQyxDQUFDOztBQTRCRixNQUFNQyxnQkFBZ0IsQ0FBQztFQUtyQixPQUFPQyxLQUFLLENBQUVDLElBQUksRUFBRTtJQUNsQixNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDdkIseUJBQXlCLENBQUM7SUFDN0RxQixhQUFhLENBQUNHLGFBQWEsQ0FBQ3ZCLHdCQUF3QixFQUFFLENBQUMsQ0FBQztJQUN4RG9CLGFBQWEsQ0FBQ0csYUFBYSxDQUFDeEIseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pEcUIsYUFBYSxDQUFDSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQ0osYUFBYSxDQUFDSSxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsQ0osYUFBYSxDQUFDRyxhQUFhLENBQUNKLElBQUksQ0FBQ00sYUFBYSxFQUFFLEVBQUUsQ0FBQztJQUNuREwsYUFBYSxDQUFDRyxhQUFhLENBQUNKLElBQUksQ0FBQ08sVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNoRE4sYUFBYSxDQUFDRyxhQUFhLENBQUNKLElBQUksQ0FBQ1EsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBQ3ZEUCxhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDUyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ2pEUixhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDVSxZQUFZLEVBQUUsRUFBRSxDQUFDO0lBQ2xELE9BQU9ULGFBQWE7RUFDdEI7O0VBTUEsT0FBT1UsS0FBSyxDQUFFQyxZQUFZLEVBQUU7SUFDMUIsT0FBTztNQUNMQyxLQUFLLEVBQUVELFlBQVksQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNuQ0MsWUFBWSxFQUFFSCxZQUFZLENBQUNFLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDMUNFLFVBQVUsRUFBRUosWUFBWSxDQUFDSyxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3hDQyxhQUFhLEVBQUVOLFlBQVksQ0FBQ0ssWUFBWSxDQUFDLEVBQUUsQ0FBQztNQUM1Q1gsYUFBYSxFQUFFTSxZQUFZLENBQUNFLFlBQVksQ0FBQyxFQUFFLENBQUM7TUFDNUNQLFVBQVUsRUFBRUssWUFBWSxDQUFDRSxZQUFZLENBQUMsRUFBRSxDQUFDO01BQ3pDTixpQkFBaUIsRUFBRUksWUFBWSxDQUFDRSxZQUFZLENBQUMsRUFBRSxDQUFDO01BQ2hESyxPQUFPLEVBQUVQLFlBQVksQ0FBQ0UsWUFBWSxDQUFDLEVBQUUsQ0FBQztNQUN0Q0osWUFBWSxFQUFFRSxZQUFZLENBQUNFLFlBQVksQ0FBQyxFQUFFO0lBQzVDLENBQUM7RUFDSDtBQUNGOztBQUFDOztBQWlCRCxNQUFNTSx1QkFBdUIsQ0FBQztFQUs1QixPQUFPckIsS0FBSyxDQUFFQyxJQUFJLEVBQUU7SUFDbEIsTUFBTUMsYUFBYSxHQUFHQyxNQUFNLENBQUNDLEtBQUssQ0FBQ3hCLGlDQUFpQyxDQUFDO0lBQ3JFc0IsYUFBYSxDQUFDRyxhQUFhLENBQUNKLElBQUksQ0FBQ3FCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUNwQixhQUFhLENBQUNHLGFBQWEsQ0FBQ0osSUFBSSxDQUFDc0IsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5Q3JCLGFBQWEsQ0FBQ3NCLGdCQUFnQixDQUFDdkIsSUFBSSxDQUFDd0IsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRCxPQUFPdkIsYUFBYTtFQUN0Qjs7RUFNQSxPQUFPVSxLQUFLLENBQUVDLFlBQVksRUFBRTtJQUMxQixPQUFPO01BQ0xTLEtBQUssRUFBRVQsWUFBWSxDQUFDRSxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ25DUSxTQUFTLEVBQUVWLFlBQVksQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUN2Q1UsV0FBVyxFQUFFWixZQUFZLENBQUNhLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7RUFDSDtBQUNGO0FBQUM7QUFHRCxNQUFNQyxhQUFhLENBQUM7RUFDbEJDLFdBQVcsQ0FBRTNCLElBQUksR0FBRyxFQUFFLEVBQUU7SUFDdEIsSUFBSSxDQUFDQSxJQUFJLEdBQUdBLElBQUk7RUFDbEI7O0VBTUFELEtBQUssR0FBSTtJQUNQLE1BQU02QixVQUFVLEdBQUcsSUFBSUMsbUJBQW1CLEVBQUU7SUFDNUMsSUFBSUMsR0FBRyxHQUFHNUIsTUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksSUFBSSxDQUFDSCxJQUFJLENBQUMrQixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzFCLE9BQU9ELEdBQUc7SUFDWjtJQUNBLEtBQUssTUFBTUUsR0FBRyxJQUFJLElBQUksQ0FBQ2hDLElBQUksRUFBRTtNQUMzQixJQUFJZ0MsR0FBRyxZQUFZSCxtQkFBbUIsRUFBRTtRQUN0Q0MsR0FBRyxHQUFHNUIsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUNILEdBQUcsRUFBRUUsR0FBRyxDQUFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO01BQzVDLENBQUMsTUFBTSxJQUFJQyxlQUFDLENBQUNDLFFBQVEsQ0FBQ0osR0FBRyxDQUFDLEVBQUU7UUFDMUJKLFVBQVUsQ0FBQ1MsU0FBUyxDQUFDTCxHQUFHLENBQUM7TUFDM0IsQ0FBQyxNQUFNLElBQUksT0FBT0EsR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUNqQ0osVUFBVSxDQUFDVSxVQUFVLENBQUNOLEdBQUcsQ0FBQztNQUM1QixDQUFDLE1BQU07UUFDTEosVUFBVSxDQUFDVyxZQUFZLENBQUNQLEdBQUcsQ0FBQztNQUM5QjtJQUNGO0lBQ0EsT0FBTzlCLE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDSCxHQUFHLEVBQUVGLFVBQVUsQ0FBQ00sUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNwRDs7RUFRQSxPQUFPdkIsS0FBSyxDQUFFQyxZQUFZLEVBQUU0QixhQUFhLEVBQUU7SUFDekMsSUFBSUMsTUFBTSxHQUFHLENBQUM7SUFDZCxNQUFNekMsSUFBSSxHQUFHLEVBQUU7SUFDZixNQUFNK0IsTUFBTSxHQUFHbkIsWUFBWSxDQUFDYSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzdDZ0IsTUFBTSxJQUFJLEVBQUU7SUFDWixPQUFPQSxNQUFNLElBQUlWLE1BQU0sRUFBRTtNQUN2QixJQUFJUyxhQUFhLENBQUNuQixLQUFLLEtBQUtwQyxVQUFVLENBQUNHLElBQUksRUFBRTtRQUMzQyxNQUFNc0QsQ0FBQyxHQUFHOUIsWUFBWSxDQUFDRSxZQUFZLENBQUMyQixNQUFNLENBQUM7UUFDM0NBLE1BQU0sSUFBSSxDQUFDO1FBQ1gsSUFBSUMsQ0FBQyxLQUFLMUQsbUJBQW1CLEVBQUU7VUFDN0IsTUFBTSxJQUFJMkQsS0FBSyxDQUFFLDhCQUE2QkQsQ0FBRSxFQUFDLENBQUM7UUFDcEQ7TUFDRjtNQUNBLE1BQU1FLElBQUksR0FBR2hDLFlBQVksQ0FBQ0UsWUFBWSxDQUFDMkIsTUFBTSxDQUFDO01BQzlDQSxNQUFNLElBQUksQ0FBQztNQUNYLFFBQVFHLElBQUk7UUFDVixLQUFLcEQsU0FBUyxDQUFDQyxJQUFJO1VBQUU7WUFDbkIsTUFBTW9ELE1BQU0sR0FBR2pDLFlBQVksQ0FBQ0UsWUFBWSxDQUFDMkIsTUFBTSxDQUFDO1lBQ2hEQSxNQUFNLElBQUksQ0FBQztZQUNYekMsSUFBSSxDQUFDWixJQUFJLENBQUN3QixZQUFZLENBQUNrQyxLQUFLLENBQUNMLE1BQU0sRUFBRUEsTUFBTSxHQUFHSSxNQUFNLENBQUMsQ0FBQztZQUN0REosTUFBTSxJQUFJSSxNQUFNO1lBQ2hCO1VBQ0Y7UUFDQSxLQUFLckQsU0FBUyxDQUFDRSxPQUFPO1VBQUU7WUFDdEIsTUFBTW1ELE1BQU0sR0FBR2pDLFlBQVksQ0FBQ0UsWUFBWSxDQUFDMkIsTUFBTSxDQUFDO1lBQ2hEQSxNQUFNLElBQUksQ0FBQztZQUNYLE1BQU1NLGFBQWEsR0FBR25DLFlBQVksQ0FBQ2tDLEtBQUssQ0FBQ0wsTUFBTSxFQUFFQSxNQUFNLEdBQUdJLE1BQU0sQ0FBQztZQUNqRTdDLElBQUksQ0FBQ1osSUFBSSxDQUFDLElBQUE0RCxrQkFBUyxFQUFDRCxhQUFhLENBQUMsQ0FBQztZQUNuQ04sTUFBTSxJQUFJSSxNQUFNO1lBQ2hCO1VBQ0Y7UUFDQSxLQUFLckQsU0FBUyxDQUFDRyxRQUFRO1VBQ3JCSyxJQUFJLENBQUNaLElBQUksQ0FBQ3dCLFlBQVksQ0FBQ0UsWUFBWSxDQUFDMkIsTUFBTSxDQUFDLENBQUM7VUFDNUNBLE1BQU0sSUFBSSxDQUFDO1VBQ1g7UUFDRixLQUFLakQsU0FBUyxDQUFDSSxXQUFXO1VBQ3hCSSxJQUFJLENBQUNaLElBQUksQ0FBQ3dCLFlBQVksQ0FBQ3FDLGVBQWUsQ0FBQ1IsTUFBTSxDQUFDLENBQUM7VUFDL0NBLE1BQU0sSUFBSSxDQUFDO1VBQ1g7UUFDRixLQUFLakQsU0FBUyxDQUFDSyxVQUFVO1VBQ3ZCRyxJQUFJLENBQUNaLElBQUksQ0FBQ3dCLFlBQVksQ0FBQ2EsY0FBYyxDQUFDZ0IsTUFBTSxDQUFDLENBQUM7VUFDOUNBLE1BQU0sSUFBSSxDQUFDO1VBQ1g7UUFDRjtVQUNFLE1BQU0sSUFBSUUsS0FBSyxDQUFFLGdCQUFlQyxJQUFLLEVBQUMsQ0FBQztNQUFDO0lBRTlDO0lBQ0EsT0FBTzVDLElBQUk7RUFDYjtBQUNGO0FBQUM7QUFFRCxNQUFNa0QsdUJBQXVCLENBQUM7RUFDNUJ2QixXQUFXLENBQUUzQixJQUFJLEVBQUU7SUFDakIsSUFBSSxDQUFDQSxJQUFJLEdBQUdBLElBQUk7RUFDbEI7QUFDRjtBQUVBLE1BQU02QixtQkFBbUIsQ0FBQztFQUN4QkYsV0FBVyxHQUFJO0lBQ2IsSUFBSSxDQUFDd0IsSUFBSSxHQUFHakQsTUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzdCOztFQUtBa0MsU0FBUyxDQUFFZSxLQUFLLEVBQUU7SUFDaEIsTUFBTXRCLEdBQUcsR0FBRzVCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM1QjJCLEdBQUcsQ0FBQzFCLGFBQWEsQ0FBQ3BCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN6QzhDLEdBQUcsQ0FBQzFCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCMEIsR0FBRyxDQUFDMUIsYUFBYSxDQUFDZ0QsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXJCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDOztFQUtBUSxVQUFVLENBQUVjLEtBQUssRUFBRTtJQUNqQixNQUFNdEIsR0FBRyxHQUFHNUIsTUFBTSxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzVCMkIsR0FBRyxDQUFDMUIsYUFBYSxDQUFDcEIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDOEMsR0FBRyxDQUFDMUIsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIwQixHQUFHLENBQUNQLGdCQUFnQixDQUFDNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXJCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDOztFQUtBdUIsZUFBZSxDQUFFRCxLQUFLLEVBQUU7SUFDdEIsTUFBTXRCLEdBQUcsR0FBRzVCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM1QjJCLEdBQUcsQ0FBQzFCLGFBQWEsQ0FBQ3BCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN6QzhDLEdBQUcsQ0FBQzFCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCMEIsR0FBRyxDQUFDd0IsWUFBWSxDQUFDRixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQ0QsSUFBSSxHQUFHakQsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDa0IsSUFBSSxFQUFFckIsR0FBRyxDQUFDLENBQUM7RUFDN0M7O0VBS0F5QixnQkFBZ0IsQ0FBRUgsS0FBSyxFQUFFO0lBQ3ZCLE1BQU10QixHQUFHLEdBQUc1QixNQUFNLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDNUIyQixHQUFHLENBQUMxQixhQUFhLENBQUNwQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDekM4QyxHQUFHLENBQUMxQixhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QjBCLEdBQUcsQ0FBQzBCLGVBQWUsQ0FBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUNELElBQUksR0FBR2pELE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQ2tCLElBQUksRUFBRXJCLEdBQUcsQ0FBQyxDQUFDO0VBQzdDOztFQUtBUyxZQUFZLENBQUVhLEtBQUssRUFBRTtJQUNuQixNQUFNdEIsR0FBRyxHQUFHLElBQUEyQixnQkFBTyxFQUFDTCxLQUFLLENBQUM7SUFDMUIsTUFBTU0sSUFBSSxHQUFHeEQsTUFBTSxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzdCdUQsSUFBSSxDQUFDdEQsYUFBYSxDQUFDcEIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQzFDMEUsSUFBSSxDQUFDdEQsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEJzRCxJQUFJLENBQUN0RCxhQUFhLENBQUMwQixHQUFHLENBQUNDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDb0IsSUFBSSxHQUFHakQsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDa0IsSUFBSSxFQUFFTyxJQUFJLEVBQUU1QixHQUFHLENBQUMsQ0FBQztFQUNuRDtFQUVBSSxRQUFRLEdBQUk7SUFDVixNQUFNeUIsR0FBRyxHQUFHekQsTUFBTSxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzVCd0QsR0FBRyxDQUFDdkQsYUFBYSxDQUFDckIsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzVDNEUsR0FBRyxDQUFDdkQsYUFBYSxDQUFDLElBQUksQ0FBQytDLElBQUksQ0FBQ3BCLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEMsT0FBTzdCLE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDMEIsR0FBRyxFQUFFLElBQUksQ0FBQ1IsSUFBSSxDQUFDLENBQUM7RUFDeEM7QUFDRjtBQUFDO0FBSUQsTUFBTVMsVUFBVSxDQUFDO0VBSWZqQyxXQUFXLENBQUVrQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsTUFBTTtNQUNKdEQsVUFBVTtNQUNWRSxXQUFXO01BQ1hxRCxRQUFRO01BQ1JwRCxZQUFZO01BQ1pGLGlCQUFpQixHQUFHLENBQUM7TUFDckJhLEtBQUssR0FBR3BDLFVBQVUsQ0FBQ0s7SUFDckIsQ0FBQyxHQUFHdUUsSUFBSTtJQUNSLElBQUksQ0FBQ0UsY0FBYyxHQUFHQyxTQUFTO0lBQy9CLElBQUksQ0FBQ0MsY0FBYyxHQUFHRCxTQUFTO0lBQy9CLElBQUksQ0FBQ0UsV0FBVyxHQUFHM0QsVUFBVTtJQUM3QixJQUFJLENBQUM0RCxZQUFZLEdBQUcxRCxXQUFXO0lBQy9CLElBQUksQ0FBQzJELGFBQWEsR0FBRzFELFlBQVk7SUFDakMsSUFBSSxDQUFDMkQsU0FBUyxHQUFHUCxRQUFRO0lBQ3pCLElBQUksQ0FBQ1Esa0JBQWtCLEdBQUc5RCxpQkFBaUI7SUFDM0MsSUFBSSxDQUFDK0QsTUFBTSxHQUFHbEQsS0FBSztJQUNuQixJQUFJLENBQUNtRCxXQUFXLEdBQUcsSUFBSTlDLGFBQWEsRUFBRTtFQUN4Qzs7RUFNQSxJQUFJbkIsVUFBVSxHQUFJO0lBQUE7SUFDaEIsK0JBQU8sSUFBSSxDQUFDd0QsY0FBYyx5REFBbkIscUJBQXFCeEQsVUFBVTtFQUN4Qzs7RUFRQSxJQUFJRSxXQUFXLEdBQUk7SUFBQTtJQUNqQixnQ0FBTyxJQUFJLENBQUNzRCxjQUFjLDBEQUFuQixzQkFBcUI1QyxPQUFPO0VBQ3JDOztFQU9BLElBQUlULFlBQVksR0FBSTtJQUFBO0lBQ2xCLGdDQUFPLElBQUksQ0FBQ3FELGNBQWMsMERBQW5CLHNCQUFxQnJELFlBQVk7RUFDMUM7O0VBTUEsSUFBSW9ELFFBQVEsR0FBSTtJQUNkLE9BQU8sSUFBSSxDQUFDTyxTQUFTO0VBQ3ZCOztFQUtBLElBQUlQLFFBQVEsQ0FBRTlELElBQUksRUFBRTtJQUNsQixJQUFJLENBQUNxRSxTQUFTLEdBQUdyRSxJQUFJO0VBQ3ZCOztFQU1BLElBQUlRLGlCQUFpQixHQUFJO0lBQUE7SUFDdkIsZ0NBQU8sSUFBSSxDQUFDdUQsY0FBYywwREFBbkIsc0JBQXFCdkQsaUJBQWlCO0VBQy9DOztFQU1BVCxLQUFLLEdBQUk7SUFDUCxNQUFNMEUsR0FBRyxHQUFHLElBQUksQ0FBQ0osU0FBUyxHQUFHLElBQUFaLGdCQUFPLEVBQUMsSUFBSSxDQUFDWSxTQUFTLENBQUMsR0FBR25FLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxNQUFNdUUsR0FBRyxHQUFHLElBQUksQ0FBQ0YsV0FBVyxDQUFDekUsS0FBSyxFQUFFO0lBQ3BDLE1BQU15QyxhQUFhLEdBQUdwQix1QkFBdUIsQ0FBQ3JCLEtBQUssQ0FBQztNQUNsRHNCLEtBQUssRUFBRSxJQUFJLENBQUNrRCxNQUFNO01BQ2xCakQsU0FBUyxFQUFFb0QsR0FBRyxDQUFDM0MsTUFBTTtNQUdyQlAsV0FBVyxFQUFFbUQsTUFBTSxDQUFDRCxHQUFHLENBQUMzQyxNQUFNLEdBQUcwQyxHQUFHLENBQUMxQyxNQUFNO0lBQzdDLENBQUMsQ0FBQztJQUVGLE1BQU05QixhQUFhLEdBQUdILGdCQUFnQixDQUFDQyxLQUFLLENBQUM7TUFDM0NPLGFBQWEsRUFBRTNCLGlDQUFpQyxHQUFHK0YsR0FBRyxDQUFDM0MsTUFBTSxHQUFHMEMsR0FBRyxDQUFDMUMsTUFBTTtNQUMxRXhCLFVBQVUsRUFBRSxJQUFJLENBQUMyRCxXQUFXO01BQzVCMUQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDOEQsa0JBQWtCO01BQzFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQzBELFlBQVk7TUFDOUJ6RCxZQUFZLEVBQUUsSUFBSSxDQUFDMEQ7SUFDckIsQ0FBQyxDQUFDO0lBQ0YsT0FBT2xFLE1BQU0sQ0FBQytCLE1BQU0sQ0FBQyxDQUFDaEMsYUFBYSxFQUFFdUMsYUFBYSxFQUFFa0MsR0FBRyxFQUFFRCxHQUFHLENBQUMsQ0FBQztFQUNoRTs7RUFRQSxPQUFPOUQsS0FBSyxDQUFFaUUsU0FBUyxFQUFFQyxVQUFVLEVBQUU7SUFDbkMsSUFBSXBDLE1BQU0sR0FBRyxDQUFDO0lBQ2QsTUFBTXFDLEdBQUcsR0FBRyxJQUFJbEIsVUFBVSxFQUFFO0lBQzVCa0IsR0FBRyxDQUFDZixjQUFjLEdBQUdqRSxnQkFBZ0IsQ0FBQ2EsS0FBSyxDQUFDaUUsU0FBUyxDQUFDO0lBQ3RELElBQUlFLEdBQUcsQ0FBQ2YsY0FBYyxDQUFDekQsYUFBYSxLQUFLLENBQUMsRUFBRTtNQUMxQyxPQUFPd0UsR0FBRztJQUNaO0lBQ0FBLEdBQUcsQ0FBQ2IsY0FBYyxHQUFHN0MsdUJBQXVCLENBQUNULEtBQUssQ0FBQ2tFLFVBQVUsQ0FBQy9CLEtBQUssQ0FBQ0wsTUFBTSxFQUFFOUQsaUNBQWlDLENBQUMsQ0FBQztJQUMvRzhELE1BQU0sSUFBSTlELGlDQUFpQztJQUUzQyxJQUFJbUcsR0FBRyxDQUFDYixjQUFjLENBQUN6QyxXQUFXLEtBQUssRUFBRSxFQUFFO01BQ3pDLE9BQU9zRCxHQUFHO0lBQ1o7SUFDQSxJQUFJQSxHQUFHLENBQUNiLGNBQWMsQ0FBQzNDLFNBQVMsR0FBRyxDQUFDLEVBQUU7TUFDcEN3RCxHQUFHLENBQUNOLFdBQVcsR0FBRzlDLGFBQWEsQ0FBQ2YsS0FBSyxDQUFDa0UsVUFBVSxDQUFDL0IsS0FBSyxDQUFDTCxNQUFNLEVBQUVBLE1BQU0sR0FBR3FDLEdBQUcsQ0FBQ2IsY0FBYyxDQUFDM0MsU0FBUyxDQUFDLEVBQUV3RCxHQUFHLENBQUNiLGNBQWMsQ0FBQztNQUMxSHhCLE1BQU0sSUFBSXFDLEdBQUcsQ0FBQ2IsY0FBYyxDQUFDM0MsU0FBUztJQUN4QztJQUVBLE1BQU10QixJQUFJLEdBQUc2RSxVQUFVLENBQUMvQixLQUFLLENBQUNMLE1BQU0sRUFBRUEsTUFBTSxHQUFHb0MsVUFBVSxDQUFDOUMsTUFBTSxDQUFDO0lBQ2pFK0MsR0FBRyxDQUFDaEIsUUFBUSxHQUFHOUQsSUFBSTtJQUNuQixJQUFJQSxJQUFJLENBQUMrQixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25CLEtBQUssTUFBTWdELEdBQUcsSUFBSSxDQUFDL0Isa0JBQVMsRUFBRWdDLHFCQUFRLENBQUNDLFdBQVcsQ0FBQyxFQUFFO1FBQ25ELElBQUk7VUFDRkgsR0FBRyxDQUFDaEIsUUFBUSxHQUFHaUIsR0FBRyxDQUFDL0UsSUFBSSxDQUFDO1VBQ3hCO1FBQ0YsQ0FBQyxDQUFDLE9BQU9rRixDQUFDLEVBQUU7VUFDVkosR0FBRyxDQUFDaEIsUUFBUSxHQUFHLElBQUlaLHVCQUF1QixDQUFDbEQsSUFBSSxDQUFDO1FBQ2xEO01BQ0Y7SUFDRjtJQUNBLE9BQU84RSxHQUFHO0VBQ1o7QUFDRjtBQUFDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","names":["DTX_MESSAGE_PAYLOAD_HEADER_LENGTH","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","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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"}