appium-ios-device 2.0.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/build/lib/instrument/headers.js +356 -0
- package/build/lib/instrument/index.js +187 -0
- package/build/lib/instrument/transformer/dtx-decode.js +108 -0
- package/build/lib/instrument/transformer/dtx-encode.js +57 -0
- package/build/lib/instrument/transformer/nskeyed.js +446 -0
- package/build/lib/mcinstall/index.js +76 -0
- package/build/lib/services.js +20 -3
- package/build/lib/ssl-helper.js +39 -1
- package/build/lib/utilities.js +15 -3
- package/lib/instrument/headers.js +421 -0
- package/lib/instrument/index.js +190 -0
- package/lib/instrument/transformer/dtx-decode.js +70 -0
- package/lib/instrument/transformer/dtx-encode.js +33 -0
- package/lib/instrument/transformer/nskeyed.js +447 -0
- package/lib/mcinstall/index.js +89 -0
- package/lib/services.js +20 -3
- package/lib/ssl-helper.js +43 -2
- package/lib/utilities.js +56 -4
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -3,10 +3,8 @@ appium-ios-device
|
|
|
3
3
|
|
|
4
4
|
[](https://npmjs.org/package/appium-ios-device)
|
|
5
5
|
[](https://npmjs.org/package/appium-ios-device)
|
|
6
|
-
[](https://david-dm.org/appium/appium-ios-device/master)
|
|
7
|
-
[](https://david-dm.org/appium/appium-ios-device/master#info=devDependencies)
|
|
8
6
|
|
|
9
|
-
[](https://github.com/appium/appium-ios-device/actions/workflows/publish.js.yml)
|
|
10
8
|
|
|
11
9
|
Appium API for dealing with iOS devices. This is mainly a rewrite of libimobiledevice in nodejs. The APIs allow Appium to talk directly to the phone over usbmuxd
|
|
12
10
|
|
|
@@ -22,6 +20,7 @@ More information can be found at the links below:
|
|
|
22
20
|
- `utilities.getOSVersion`
|
|
23
21
|
- `utilities.getDeviceTime`
|
|
24
22
|
- `utilities.getDeviceName`
|
|
23
|
+
- `utilities.getDeviceInfo`
|
|
25
24
|
- `utilities.startLockdownSession`
|
|
26
25
|
- `utilities.connectPort`
|
|
27
26
|
- `utilities.connectPortSSL`
|
|
@@ -32,6 +31,8 @@ More information can be found at the links below:
|
|
|
32
31
|
- `services.startAfcService`
|
|
33
32
|
- `services.startNotificationProxyService`
|
|
34
33
|
- `services.startHouseArrestService`
|
|
34
|
+
- `services.startInstrumentService`
|
|
35
|
+
- `services.startMCInstallService`
|
|
35
36
|
|
|
36
37
|
### Usage
|
|
37
38
|
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
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
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _nskeyed = require("./transformer/nskeyed");
|
|
13
|
+
|
|
14
|
+
var _bplistParser = _interopRequireDefault(require("bplist-parser"));
|
|
15
|
+
|
|
16
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
17
|
+
|
|
18
|
+
const DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = 16;
|
|
19
|
+
exports.DTX_MESSAGE_PAYLOAD_HEADER_LENGTH = DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;
|
|
20
|
+
const DTX_MESSAGE_HEADER_LENGTH = 32;
|
|
21
|
+
exports.DTX_MESSAGE_HEADER_LENGTH = DTX_MESSAGE_HEADER_LENGTH;
|
|
22
|
+
const DTX_MESSAGE_HEADER_MAGIC = 0x1F3D5B79;
|
|
23
|
+
exports.DTX_MESSAGE_HEADER_MAGIC = DTX_MESSAGE_HEADER_MAGIC;
|
|
24
|
+
const DTX_MESSAGE_HEADER_MAGIC_LEN = 4;
|
|
25
|
+
exports.DTX_MESSAGE_HEADER_MAGIC_LEN = DTX_MESSAGE_HEADER_MAGIC_LEN;
|
|
26
|
+
const DTX_MESSAGE_AUX_HEADER = 0x01F0;
|
|
27
|
+
const DTX_AUXILIARY_MAGIC = 0xa;
|
|
28
|
+
const FLAG_TYPES = Object.freeze({
|
|
29
|
+
recv: 1,
|
|
30
|
+
send: 2,
|
|
31
|
+
reply: 3
|
|
32
|
+
});
|
|
33
|
+
exports.FLAG_TYPES = FLAG_TYPES;
|
|
34
|
+
const AUX_TYPES = Object.freeze({
|
|
35
|
+
NSKeyed: 2,
|
|
36
|
+
UInt32LE: 3,
|
|
37
|
+
BigUInt64LE: 4,
|
|
38
|
+
BigInt64LE: 6
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
class DTXMessageHeader {
|
|
42
|
+
static build(data) {
|
|
43
|
+
const messageHeader = Buffer.alloc(DTX_MESSAGE_HEADER_LENGTH);
|
|
44
|
+
messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_MAGIC, 0);
|
|
45
|
+
messageHeader.writeUInt32LE(DTX_MESSAGE_HEADER_LENGTH, 4);
|
|
46
|
+
messageHeader.writeUInt16LE(0, 8);
|
|
47
|
+
messageHeader.writeUInt16LE(1, 10);
|
|
48
|
+
messageHeader.writeUInt32LE(data.payloadLength, 12);
|
|
49
|
+
messageHeader.writeUInt32LE(data.identifier, 16);
|
|
50
|
+
messageHeader.writeUInt32LE(data.conversationIndex, 20);
|
|
51
|
+
messageHeader.writeUInt32LE(data.channelCode, 24);
|
|
52
|
+
messageHeader.writeUInt32LE(data.expectsReply, 28);
|
|
53
|
+
return messageHeader;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static parse(headerBuffer) {
|
|
57
|
+
return {
|
|
58
|
+
magic: headerBuffer.readUInt32LE(0),
|
|
59
|
+
headerLength: headerBuffer.readUInt32LE(4),
|
|
60
|
+
fragmentId: headerBuffer.readUInt16LE(8),
|
|
61
|
+
fragmentCount: headerBuffer.readUInt16LE(10),
|
|
62
|
+
payloadLength: headerBuffer.readUInt32LE(12),
|
|
63
|
+
identifier: headerBuffer.readUInt32LE(16),
|
|
64
|
+
conversationIndex: headerBuffer.readUInt32LE(20),
|
|
65
|
+
channel: headerBuffer.readUInt32LE(24),
|
|
66
|
+
expectsReply: headerBuffer.readUInt32LE(28)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
exports.DTXMessageHeader = DTXMessageHeader;
|
|
73
|
+
|
|
74
|
+
class DTXMessagePayloadHeader {
|
|
75
|
+
static build(data) {
|
|
76
|
+
const messageHeader = Buffer.alloc(DTX_MESSAGE_PAYLOAD_HEADER_LENGTH);
|
|
77
|
+
messageHeader.writeUInt32LE(data.flags, 0);
|
|
78
|
+
messageHeader.writeUInt32LE(data.auxLength, 4);
|
|
79
|
+
messageHeader.writeBigUInt64LE(data.totalLength, 8);
|
|
80
|
+
return messageHeader;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static parse(headerBuffer) {
|
|
84
|
+
return {
|
|
85
|
+
flags: headerBuffer.readUInt32LE(0),
|
|
86
|
+
auxLength: headerBuffer.readUInt32LE(4),
|
|
87
|
+
totalLength: headerBuffer.readBigInt64LE(8)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
exports.DTXMessagePayloadHeader = DTXMessagePayloadHeader;
|
|
94
|
+
|
|
95
|
+
class DTXMessageAux {
|
|
96
|
+
constructor(data = []) {
|
|
97
|
+
this.data = data;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
build() {
|
|
101
|
+
const messageAux = new DTXMessageAuxBuffer();
|
|
102
|
+
let buf = Buffer.alloc(0);
|
|
103
|
+
|
|
104
|
+
if (this.data.length === 0) {
|
|
105
|
+
return buf;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
for (const arg of this.data) {
|
|
109
|
+
if (arg instanceof DTXMessageAuxBuffer) {
|
|
110
|
+
buf = Buffer.concat([buf, arg.getBytes()]);
|
|
111
|
+
} else if (_lodash.default.isNumber(arg)) {
|
|
112
|
+
messageAux.appendInt(arg);
|
|
113
|
+
} else if (typeof arg == 'bigint') {
|
|
114
|
+
messageAux.appendLong(arg);
|
|
115
|
+
} else {
|
|
116
|
+
messageAux.appendObject(arg);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return Buffer.concat([buf, messageAux.getBytes()]);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static parse(headerBuffer) {
|
|
124
|
+
let cursor = 0;
|
|
125
|
+
const data = [];
|
|
126
|
+
const length = headerBuffer.readBigInt64LE(8);
|
|
127
|
+
cursor += 16;
|
|
128
|
+
|
|
129
|
+
while (cursor <= length) {
|
|
130
|
+
const m = headerBuffer.readUInt32LE(cursor);
|
|
131
|
+
|
|
132
|
+
if (m !== DTX_AUXILIARY_MAGIC) {
|
|
133
|
+
throw new Error(`incorrect auxiliary magic: ${m}`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const type = headerBuffer.readUInt32LE(cursor + 4);
|
|
137
|
+
cursor += 8;
|
|
138
|
+
|
|
139
|
+
switch (type) {
|
|
140
|
+
case AUX_TYPES.NSKeyed:
|
|
141
|
+
{
|
|
142
|
+
const strLen = headerBuffer.readUInt32LE(cursor);
|
|
143
|
+
cursor += 4;
|
|
144
|
+
const archived_data = headerBuffer.slice(cursor, cursor + strLen);
|
|
145
|
+
data.push((0, _nskeyed.unarchive)(archived_data));
|
|
146
|
+
cursor += strLen;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
case AUX_TYPES.UInt32LE:
|
|
151
|
+
data.push(headerBuffer.readUInt32LE(cursor));
|
|
152
|
+
cursor += 4;
|
|
153
|
+
break;
|
|
154
|
+
|
|
155
|
+
case AUX_TYPES.BigUInt64LE:
|
|
156
|
+
data.push(headerBuffer.readBigUInt64LE(cursor));
|
|
157
|
+
cursor += 8;
|
|
158
|
+
break;
|
|
159
|
+
|
|
160
|
+
case AUX_TYPES.BigInt64LE:
|
|
161
|
+
data.push(headerBuffer.readBigInt64LE(cursor));
|
|
162
|
+
cursor += 8;
|
|
163
|
+
break;
|
|
164
|
+
|
|
165
|
+
default:
|
|
166
|
+
throw new Error(`Unknown type ${type}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return data;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
exports.DTXMessageAux = DTXMessageAux;
|
|
176
|
+
|
|
177
|
+
class InstrumentRPCParseError {
|
|
178
|
+
constructor(data) {
|
|
179
|
+
this.data = data;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
class DTXMessageAuxBuffer {
|
|
185
|
+
constructor() {
|
|
186
|
+
this._buf = Buffer.alloc(0);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
appendInt(value) {
|
|
190
|
+
const buf = Buffer.alloc(12);
|
|
191
|
+
buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);
|
|
192
|
+
buf.writeUInt32LE(3, 4);
|
|
193
|
+
buf.writeUInt32LE(value, 8);
|
|
194
|
+
this._buf = Buffer.concat([this._buf, buf]);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
appendLong(value) {
|
|
198
|
+
const buf = Buffer.alloc(16);
|
|
199
|
+
buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);
|
|
200
|
+
buf.writeUInt32LE(4, 4);
|
|
201
|
+
buf.writeBigUInt64LE(value, 8);
|
|
202
|
+
this._buf = Buffer.concat([this._buf, buf]);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
appendSignedInt(value) {
|
|
206
|
+
const buf = Buffer.alloc(12);
|
|
207
|
+
buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);
|
|
208
|
+
buf.writeUInt32LE(3, 4);
|
|
209
|
+
buf.writeInt32LE(value, 8);
|
|
210
|
+
this._buf = Buffer.concat([this._buf, buf]);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
appendSignedLong(value) {
|
|
214
|
+
const buf = Buffer.alloc(16);
|
|
215
|
+
|
|
216
|
+
this._buf.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);
|
|
217
|
+
|
|
218
|
+
this._buf.writeUInt32LE(6, 4);
|
|
219
|
+
|
|
220
|
+
this._buf.writeBigInt64LE(value, 8);
|
|
221
|
+
|
|
222
|
+
this._buf = Buffer.concat([this._buf, buf]);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
appendObject(value) {
|
|
226
|
+
const buf = (0, _nskeyed.archive)(value);
|
|
227
|
+
const buf2 = Buffer.alloc(12);
|
|
228
|
+
buf2.writeUInt32LE(DTX_AUXILIARY_MAGIC, 0);
|
|
229
|
+
buf2.writeUInt32LE(2, 4);
|
|
230
|
+
buf2.writeUInt32LE(buf.length, 8);
|
|
231
|
+
this._buf = Buffer.concat([this._buf, buf2, buf]);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
getBytes() {
|
|
235
|
+
const out = Buffer.alloc(16);
|
|
236
|
+
out.writeUInt32LE(DTX_MESSAGE_AUX_HEADER, 0);
|
|
237
|
+
out.writeUInt32LE(this._buf.length, 8);
|
|
238
|
+
return Buffer.concat([out, this._buf]);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
exports.DTXMessageAuxBuffer = DTXMessageAuxBuffer;
|
|
244
|
+
|
|
245
|
+
class DTXMessage {
|
|
246
|
+
constructor(opts = {}) {
|
|
247
|
+
const {
|
|
248
|
+
identifier,
|
|
249
|
+
channelCode,
|
|
250
|
+
selector,
|
|
251
|
+
expectsReply,
|
|
252
|
+
conversationIndex = 0,
|
|
253
|
+
flags = FLAG_TYPES.send
|
|
254
|
+
} = opts;
|
|
255
|
+
this._messageHeader = undefined;
|
|
256
|
+
this._payloadHeader = undefined;
|
|
257
|
+
this._identifier = identifier;
|
|
258
|
+
this._channelCode = channelCode;
|
|
259
|
+
this._expectsReply = expectsReply;
|
|
260
|
+
this._selector = selector;
|
|
261
|
+
this._conversationIndex = conversationIndex;
|
|
262
|
+
this._flags = flags;
|
|
263
|
+
this.auxiliaries = new DTXMessageAux();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
get identifier() {
|
|
267
|
+
var _this$_messageHeader;
|
|
268
|
+
|
|
269
|
+
return (_this$_messageHeader = this._messageHeader) === null || _this$_messageHeader === void 0 ? void 0 : _this$_messageHeader.identifier;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
get channelCode() {
|
|
273
|
+
var _this$_messageHeader2;
|
|
274
|
+
|
|
275
|
+
return (_this$_messageHeader2 = this._messageHeader) === null || _this$_messageHeader2 === void 0 ? void 0 : _this$_messageHeader2.channel;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
get expectsReply() {
|
|
279
|
+
var _this$_messageHeader3;
|
|
280
|
+
|
|
281
|
+
return (_this$_messageHeader3 = this._messageHeader) === null || _this$_messageHeader3 === void 0 ? void 0 : _this$_messageHeader3.expectsReply;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
get selector() {
|
|
285
|
+
return this._selector;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
set selector(data) {
|
|
289
|
+
this._selector = data;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
get conversationIndex() {
|
|
293
|
+
var _this$_messageHeader4;
|
|
294
|
+
|
|
295
|
+
return (_this$_messageHeader4 = this._messageHeader) === null || _this$_messageHeader4 === void 0 ? void 0 : _this$_messageHeader4.conversationIndex;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
build() {
|
|
299
|
+
const sel = this._selector ? (0, _nskeyed.archive)(this._selector) : Buffer.alloc(0);
|
|
300
|
+
const aux = this.auxiliaries.build();
|
|
301
|
+
const payloadHeader = DTXMessagePayloadHeader.build({
|
|
302
|
+
flags: this._flags,
|
|
303
|
+
auxLength: aux.length,
|
|
304
|
+
totalLength: BigInt(aux.length + sel.length)
|
|
305
|
+
});
|
|
306
|
+
const messageHeader = DTXMessageHeader.build({
|
|
307
|
+
payloadLength: DTX_MESSAGE_PAYLOAD_HEADER_LENGTH + aux.length + sel.length,
|
|
308
|
+
identifier: this._identifier,
|
|
309
|
+
conversationIndex: this._conversationIndex,
|
|
310
|
+
channelCode: this._channelCode,
|
|
311
|
+
expectsReply: this._expectsReply
|
|
312
|
+
});
|
|
313
|
+
return Buffer.concat([messageHeader, payloadHeader, aux, sel]);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
static parse(headerBuf, payloadBuf) {
|
|
317
|
+
let cursor = 0;
|
|
318
|
+
const ret = new DTXMessage();
|
|
319
|
+
ret._messageHeader = DTXMessageHeader.parse(headerBuf);
|
|
320
|
+
|
|
321
|
+
if (ret._messageHeader.payloadLength === 0) {
|
|
322
|
+
return ret;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
ret._payloadHeader = DTXMessagePayloadHeader.parse(payloadBuf.slice(cursor, DTX_MESSAGE_PAYLOAD_HEADER_LENGTH));
|
|
326
|
+
cursor += DTX_MESSAGE_PAYLOAD_HEADER_LENGTH;
|
|
327
|
+
|
|
328
|
+
if (ret._payloadHeader.totalLength === 0n) {
|
|
329
|
+
return ret;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (ret._payloadHeader.auxLength > 0) {
|
|
333
|
+
ret.auxiliaries = DTXMessageAux.parse(payloadBuf.slice(cursor, cursor + ret._payloadHeader.auxLength));
|
|
334
|
+
cursor += ret._payloadHeader.auxLength;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const data = payloadBuf.slice(cursor, cursor + payloadBuf.length);
|
|
338
|
+
|
|
339
|
+
for (const fun of [_nskeyed.unarchive, _bplistParser.default.parseBuffer]) {
|
|
340
|
+
try {
|
|
341
|
+
ret.selector = fun(data);
|
|
342
|
+
break;
|
|
343
|
+
} catch (e) {
|
|
344
|
+
ret.selector = new InstrumentRPCParseError(data);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return ret;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
exports.DTXMessage = DTXMessage;require('source-map-support').install();
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbnN0cnVtZW50L2hlYWRlcnMuanMiXSwibmFtZXMiOlsiRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIIiwiRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQyIsIkRUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ19MRU4iLCJEVFhfTUVTU0FHRV9BVVhfSEVBREVSIiwiRFRYX0FVWElMSUFSWV9NQUdJQyIsIkZMQUdfVFlQRVMiLCJPYmplY3QiLCJmcmVlemUiLCJyZWN2Iiwic2VuZCIsInJlcGx5IiwiQVVYX1RZUEVTIiwiTlNLZXllZCIsIlVJbnQzMkxFIiwiQmlnVUludDY0TEUiLCJCaWdJbnQ2NExFIiwiRFRYTWVzc2FnZUhlYWRlciIsImJ1aWxkIiwiZGF0YSIsIm1lc3NhZ2VIZWFkZXIiLCJCdWZmZXIiLCJhbGxvYyIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQxNkxFIiwicGF5bG9hZExlbmd0aCIsImlkZW50aWZpZXIiLCJjb252ZXJzYXRpb25JbmRleCIsImNoYW5uZWxDb2RlIiwiZXhwZWN0c1JlcGx5IiwicGFyc2UiLCJoZWFkZXJCdWZmZXIiLCJtYWdpYyIsInJlYWRVSW50MzJMRSIsImhlYWRlckxlbmd0aCIsImZyYWdtZW50SWQiLCJyZWFkVUludDE2TEUiLCJmcmFnbWVudENvdW50IiwiY2hhbm5lbCIsIkRUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyIiwiZmxhZ3MiLCJhdXhMZW5ndGgiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwidG90YWxMZW5ndGgiLCJyZWFkQmlnSW50NjRMRSIsIkRUWE1lc3NhZ2VBdXgiLCJjb25zdHJ1Y3RvciIsIm1lc3NhZ2VBdXgiLCJEVFhNZXNzYWdlQXV4QnVmZmVyIiwiYnVmIiwibGVuZ3RoIiwiYXJnIiwiY29uY2F0IiwiZ2V0Qnl0ZXMiLCJfIiwiaXNOdW1iZXIiLCJhcHBlbmRJbnQiLCJhcHBlbmRMb25nIiwiYXBwZW5kT2JqZWN0IiwiY3Vyc29yIiwibSIsIkVycm9yIiwidHlwZSIsInN0ckxlbiIsImFyY2hpdmVkX2RhdGEiLCJzbGljZSIsInB1c2giLCJyZWFkQmlnVUludDY0TEUiLCJJbnN0cnVtZW50UlBDUGFyc2VFcnJvciIsIl9idWYiLCJ2YWx1ZSIsImFwcGVuZFNpZ25lZEludCIsIndyaXRlSW50MzJMRSIsImFwcGVuZFNpZ25lZExvbmciLCJ3cml0ZUJpZ0ludDY0TEUiLCJidWYyIiwib3V0IiwiRFRYTWVzc2FnZSIsIm9wdHMiLCJzZWxlY3RvciIsIl9tZXNzYWdlSGVhZGVyIiwidW5kZWZpbmVkIiwiX3BheWxvYWRIZWFkZXIiLCJfaWRlbnRpZmllciIsIl9jaGFubmVsQ29kZSIsIl9leHBlY3RzUmVwbHkiLCJfc2VsZWN0b3IiLCJfY29udmVyc2F0aW9uSW5kZXgiLCJfZmxhZ3MiLCJhdXhpbGlhcmllcyIsInNlbCIsImF1eCIsInBheWxvYWRIZWFkZXIiLCJCaWdJbnQiLCJoZWFkZXJCdWYiLCJwYXlsb2FkQnVmIiwicmV0IiwiZnVuIiwidW5hcmNoaXZlIiwicGxpc3RsaWIiLCJwYXJzZUJ1ZmZlciIsImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUNBQWlDLEdBQUcsRUFBMUM7O0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsRUFBbEM7O0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsVUFBakM7O0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBckM7O0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsTUFBL0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxHQUE1QjtBQUVBLE1BQU1DLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDL0JDLEVBQUFBLElBQUksRUFBRSxDQUR5QjtBQUUvQkMsRUFBQUEsSUFBSSxFQUFFLENBRnlCO0FBRy9CQyxFQUFBQSxLQUFLLEVBQUU7QUFId0IsQ0FBZCxDQUFuQjs7QUFNQSxNQUFNQyxTQUFTLEdBQUdMLE1BQU0sQ0FBQ0MsTUFBUCxDQUFj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QUFDQyxrQkFBRCxFQUFZQyxzQkFBU0MsV0FBckIsQ0FBbEIsRUFBcUQ7QUFDbkQsVUFBSTtBQUNGSixRQUFBQSxHQUFHLENBQUNqQixRQUFKLEdBQWVrQixHQUFHLENBQUM5RSxJQUFELENBQWxCO0FBQ0E7QUFDRCxPQUhELENBR0UsT0FBT2tGLENBQVAsRUFBVTtBQUNWTCxRQUFBQSxHQUFHLENBQUNqQixRQUFKLEdBQWUsSUFBSVgsdUJBQUosQ0FBNEJqRCxJQUE1QixDQUFmO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPNkUsR0FBUDtBQUNEOztBQXJJYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXJjaGl2ZSwgdW5hcmNoaXZlfSBmcm9tICcuL3RyYW5zZm9ybWVyL25za2V5ZWQnO1xuaW1wb3J0IHBsaXN0bGliIGZyb20gJ2JwbGlzdC1wYXJzZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIID0gMTY7XG5jb25zdCBEVFhfTUVTU0FHRV9IRUFERVJfTEVOR1RIID0gMzI7XG5jb25zdCBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUMgPSAweDFGM0Q1Qjc5O1xuY29uc3QgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDX0xFTiA9IDQ7XG5jb25zdCBEVFhfTUVTU0FHRV9BVVhfSEVBREVSID0gMHgwMUYwO1xuY29uc3QgRFRYX0FVWElMSUFSWV9NQUdJQyA9IDB4YTtcblxuY29uc3QgRkxBR19UWVBFUyA9IE9iamVjdC5mcmVlemUoe1xuICByZWN2OiAxLFxuICBzZW5kOiAyLFxuICByZXBseTogM1xufSk7XG5cbmNvbnN0IEFVWF9UWVBFUyA9IE9iamVjdC5mcmVlemUoe1xuICBOU0tleWVkOiAyLFxuICBVSW50MzJMRTogMyxcbiAgQmlnVUludDY0TEU6IDQsXG4gIEJpZ0ludDY0TEU6IDZcbn0pO1xuXG4vKipcbiAqIERUWE1lc3NhZ2VIZWFkZXIgbGVuZ3RoIDMyXG4gKiBzdHJ1Y3QgRFRYTWVzc2FnZUhlYWRlciB7XG4gKiAgICAgdTMyIG1hZ2ljIERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQ1xuICogICAgIHUzMiBoZWFkZXJMZW5ndGhcbiAqICAgICB1MTYgZnJhZ21lbnRJZCAgIHBhY2tldCBudW1iZXJcbiAqICAgICB1MTYgZnJhZ21lbnRDb3VudCAgcGFja2V0cyB0b3RhbCBudW1iZXJcbiAqICAgICB1MzIgcGF5bG9hZExlbmd0aFxuICogICAgIHUzMiBpZGVudGlmaWVyXG4gKiAgICAgdTMyIGNvbnZlcnNhdGlvbkluZGV4XG4gKiAgICAgdTMyIGNoYW5uZWxcbiAqICAgICB1MzIgZXhwZWN0c1JlcGx5XG4gKiAgICAgfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRFRYTWVzc2FnZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZGVudGlmaWVyIHBhY2tldCB0cmFuc21pc3Npb24gc2VxdWVuY2UsIHRoaXMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggcmVxdWVzdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNoYW5uZWxDb2RlIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2VydmljZSB3aWxsIHVzZSB0aGlzIGNoYW5uZWwgY29kZS5cbiAqIEVhY2ggc2VydmljZSBoYXMgYSBzZXBhcmF0ZSBjaGFubmVsXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHBheWxvYWRMZW5ndGggRFRYTWVzc2FnZUF1eEJ1ZmZlci5sZW5ndGgobnVsbGFibGUpICsgc2VsZWN0b3JCdWZmZXIubGVuZ3RoKG51bGxhYmxlKVxuICogQHByb3BlcnR5IHtib29sZWFufSBleHBlY3RzUmVwbHkgaWYgdHJ1ZSByZXBseSBhIGFjayBtZXNzYWdlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29udmVyc2F0aW9uSW5kZXggIHJhdyBkYXRhICsxIGluZGljYXRlIGEgcmVwbHkgbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZsYWdzIG1lc3NhZ2Ugc3RhdHVzXG4gKi9cblxuY2xhc3MgRFRYTWVzc2FnZUhlYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0RUWE1lc3NhZ2VPcHRpb25zfSBkYXRhXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IERUWE1lc3NhZ2VIZWFkZXJCdWZmZXJcbiAgICovXG4gIHN0YXRpYyBidWlsZCAoZGF0YSkge1xuICAgIGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSBCdWZmZXIuYWxsb2MoRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKERUWF9NRVNTQUdFX0hFQURFUl9NQUdJQywgMCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKERUWF9NRVNTQUdFX0hFQURFUl9MRU5HVEgsIDQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MTZMRSgwLCA4KTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDE2TEUoMSwgMTApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLnBheWxvYWRMZW5ndGgsIDEyKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5pZGVudGlmaWVyLCAxNik7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuY29udmVyc2F0aW9uSW5kZXgsIDIwKTtcbiAgICBtZXNzYWdlSGVhZGVyLndyaXRlVUludDMyTEUoZGF0YS5jaGFubmVsQ29kZSwgMjQpO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmV4cGVjdHNSZXBseSwgMjgpO1xuICAgIHJldHVybiBtZXNzYWdlSGVhZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBoZWFkZXJCdWZmZXIgRFRYTWVzc2FnZUhlYWRlckJ1ZmZlclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIHBhcnNlIChoZWFkZXJCdWZmZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFnaWM6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMCksXG4gICAgICBoZWFkZXJMZW5ndGg6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoNCksXG4gICAgICBmcmFnbWVudElkOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQxNkxFKDgpLFxuICAgICAgZnJhZ21lbnRDb3VudDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MTZMRSgxMCksXG4gICAgICBwYXlsb2FkTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKDEyKSxcbiAgICAgIGlkZW50aWZpZXI6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMTYpLFxuICAgICAgY29udmVyc2F0aW9uSW5kZXg6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjApLFxuICAgICAgY2hhbm5lbDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgyNCksXG4gICAgICBleHBlY3RzUmVwbHk6IGhlYWRlckJ1ZmZlci5yZWFkVUludDMyTEUoMjgpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlciBsZW5ndGggMTZcbiAqIHN0cnVjdCBEVFhNZXNzYWdlSGVhZGVyIHtcbiAqICAgICB1MzIgZmxhZ3MgRkxBR19UWVBFU1xuICogICAgIHUzMiBhdXhMZW5ndGhcbiAqICAgICB1NjQgdG90YWxMZW5ndGhcbiAqICAgICB9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlck9iamVjdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZsYWdzIG1lc3NhZ2Ugc3RhdHVzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYXV4TGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKVxuICogQHByb3BlcnR5IHtiaWdpbnR9IHRvdGFsTGVuZ3RoIERUWE1lc3NhZ2VBdXhCdWZmZXIubGVuZ3RoKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyLmxlbmd0aFxuICovXG5jbGFzcyBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSB7RFRYTWVzc2FnZVBheWxvYWRIZWFkZXJPYmplY3R9XG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyQnVmZmVyXG4gICAqL1xuICBzdGF0aWMgYnVpbGQgKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gQnVmZmVyLmFsbG9jKERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZVVJbnQzMkxFKGRhdGEuZmxhZ3MsIDApO1xuICAgIG1lc3NhZ2VIZWFkZXIud3JpdGVVSW50MzJMRShkYXRhLmF1eExlbmd0aCwgNCk7XG4gICAgbWVzc2FnZUhlYWRlci53cml0ZUJpZ1VJbnQ2NExFKGRhdGEudG90YWxMZW5ndGgsIDgpO1xuICAgIHJldHVybiBtZXNzYWdlSGVhZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBoZWFkZXJCdWZmZXJcbiAgICogQHJldHVybnMge3tmbGFnczogbnVtYmVyLCB0b3RhbExlbmd0aDogYmlnaW50LCBhdXhMZW5ndGg6IG51bWJlcn19XG4gICAqL1xuICBzdGF0aWMgcGFyc2UgKGhlYWRlckJ1ZmZlcikge1xuICAgIHJldHVybiB7XG4gICAgICBmbGFnczogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSgwKSxcbiAgICAgIGF1eExlbmd0aDogaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRSg0KSxcbiAgICAgIHRvdGFsTGVuZ3RoOiBoZWFkZXJCdWZmZXIucmVhZEJpZ0ludDY0TEUoOClcbiAgICB9O1xuICB9XG59XG5cblxuY2xhc3MgRFRYTWVzc2FnZUF1eCB7XG4gIGNvbnN0cnVjdG9yIChkYXRhID0gW10pIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEpTIEFycmF5IHRvIEFwcGxlIE5TS2V5ZWQgQnVmZmVyXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBidWlsZCAoKSB7XG4gICAgY29uc3QgbWVzc2FnZUF1eCA9IG5ldyBEVFhNZXNzYWdlQXV4QnVmZmVyKCk7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5kYXRhKSB7XG4gICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRFRYTWVzc2FnZUF1eEJ1ZmZlcikge1xuICAgICAgICBidWYgPSBCdWZmZXIuY29uY2F0KFtidWYsIGFyZy5nZXRCeXRlcygpXSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNOdW1iZXIoYXJnKSkge1xuICAgICAgICBtZXNzYWdlQXV4LmFwcGVuZEludChhcmcpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09ICdiaWdpbnQnKSB7XG4gICAgICAgIG1lc3NhZ2VBdXguYXBwZW5kTG9uZyhhcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZUF1eC5hcHBlbmRPYmplY3QoYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgbWVzc2FnZUF1eC5nZXRCeXRlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIG5za2V5ZWQgQnVmZmVyIGludG8ganMgYXJyYXlcbiAgICogQHBhcmFtIGhlYWRlckJ1ZmZlclxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgcGFyc2UgKGhlYWRlckJ1ZmZlcikge1xuICAgIGxldCBjdXJzb3IgPSAwO1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBjb25zdCBsZW5ndGggPSBoZWFkZXJCdWZmZXIucmVhZEJpZ0ludDY0TEUoOCk7XG4gICAgY3Vyc29yICs9IDE2O1xuICAgIHdoaWxlIChjdXJzb3IgPD0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBtID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpO1xuICAgICAgaWYgKG0gIT09IERUWF9BVVhJTElBUllfTUFHSUMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmNvcnJlY3QgYXV4aWxpYXJ5IG1hZ2ljOiAke219YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IgKyA0KTtcbiAgICAgIGN1cnNvciArPSA4O1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLk5TS2V5ZWQ6IHtcbiAgICAgICAgICBjb25zdCBzdHJMZW4gPSBoZWFkZXJCdWZmZXIucmVhZFVJbnQzMkxFKGN1cnNvcik7XG4gICAgICAgICAgY3Vyc29yICs9IDQ7XG4gICAgICAgICAgY29uc3QgYXJjaGl2ZWRfZGF0YSA9IGhlYWRlckJ1ZmZlci5zbGljZShjdXJzb3IsIGN1cnNvciArIHN0ckxlbik7XG4gICAgICAgICAgZGF0YS5wdXNoKHVuYXJjaGl2ZShhcmNoaXZlZF9kYXRhKSk7XG4gICAgICAgICAgY3Vyc29yICs9IHN0ckxlbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEFVWF9UWVBFUy5VSW50MzJMRTpcbiAgICAgICAgICBkYXRhLnB1c2goaGVhZGVyQnVmZmVyLnJlYWRVSW50MzJMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBVVhfVFlQRVMuQmlnVUludDY0TEU6XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5yZWFkQmlnVUludDY0TEUoY3Vyc29yKSk7XG4gICAgICAgICAgY3Vyc29yICs9IDg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQVVYX1RZUEVTLkJpZ0ludDY0TEU6XG4gICAgICAgICAgZGF0YS5wdXNoKGhlYWRlckJ1ZmZlci5yZWFkQmlnSW50NjRMRShjdXJzb3IpKTtcbiAgICAgICAgICBjdXJzb3IgKz0gODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSAke3R5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG5cbmNsYXNzIEluc3RydW1lbnRSUENQYXJzZUVycm9yIHtcbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmNsYXNzIERUWE1lc3NhZ2VBdXhCdWZmZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmFsbG9jKDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgYXBwZW5kSW50ICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoMywgNCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtiaWdpbnR9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRMb25nICh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxNik7XG4gICAgYnVmLndyaXRlVUludDMyTEUoRFRYX0FVWElMSUFSWV9NQUdJQywgMCk7XG4gICAgYnVmLndyaXRlVUludDMyTEUoNCwgNCk7XG4gICAgYnVmLndyaXRlQmlnVUludDY0TEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRTaWduZWRJbnQgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEyKTtcbiAgICBidWYud3JpdGVVSW50MzJMRShEVFhfQVVYSUxJQVJZX01BR0lDLCAwKTtcbiAgICBidWYud3JpdGVVSW50MzJMRSgzLCA0KTtcbiAgICBidWYud3JpdGVJbnQzMkxFKHZhbHVlLCA4KTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLl9idWYsIGJ1Zl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YmlnaW50fSB2YWx1ZVxuICAgKi9cbiAgYXBwZW5kU2lnbmVkTG9uZyAodmFsdWUpIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTYpO1xuICAgIHRoaXMuX2J1Zi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIHRoaXMuX2J1Zi53cml0ZVVJbnQzMkxFKDYsIDQpO1xuICAgIHRoaXMuX2J1Zi53cml0ZUJpZ0ludDY0TEUodmFsdWUsIDgpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZiwgYnVmXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gICAqL1xuICBhcHBlbmRPYmplY3QgKHZhbHVlKSB7XG4gICAgY29uc3QgYnVmID0gYXJjaGl2ZSh2YWx1ZSk7XG4gICAgY29uc3QgYnVmMiA9IEJ1ZmZlci5hbGxvYygxMik7XG4gICAgYnVmMi53cml0ZVVJbnQzMkxFKERUWF9BVVhJTElBUllfTUFHSUMsIDApO1xuICAgIGJ1ZjIud3JpdGVVSW50MzJMRSgyLCA0KTtcbiAgICBidWYyLndyaXRlVUludDMyTEUoYnVmLmxlbmd0aCwgOCk7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5fYnVmLCBidWYyLCBidWZdKTtcbiAgfVxuXG4gIGdldEJ5dGVzICgpIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2MoMTYpO1xuICAgIG91dC53cml0ZVVJbnQzMkxFKERUWF9NRVNTQUdFX0FVWF9IRUFERVIsIDApO1xuICAgIG91dC53cml0ZVVJbnQzMkxFKHRoaXMuX2J1Zi5sZW5ndGgsIDgpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvdXQsIHRoaXMuX2J1Zl0pO1xuICB9XG59XG5cblxuXG5jbGFzcyBEVFhNZXNzYWdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RFRYTWVzc2FnZU9wdGlvbnN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgY2hhbm5lbENvZGUsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIGV4cGVjdHNSZXBseSxcbiAgICAgIGNvbnZlcnNhdGlvbkluZGV4ID0gMCxcbiAgICAgIGZsYWdzID0gRkxBR19UWVBFUy5zZW5kXG4gICAgfSA9IG9wdHM7XG4gICAgdGhpcy5fbWVzc2FnZUhlYWRlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9wYXlsb2FkSGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgIHRoaXMuX2NoYW5uZWxDb2RlID0gY2hhbm5lbENvZGU7XG4gICAgdGhpcy5fZXhwZWN0c1JlcGx5ID0gZXhwZWN0c1JlcGx5O1xuICAgIHRoaXMuX3NlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5fY29udmVyc2F0aW9uSW5kZXggPSBjb252ZXJzYXRpb25JbmRleDtcbiAgICB0aGlzLl9mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuYXV4aWxpYXJpZXMgPSBuZXcgRFRYTWVzc2FnZUF1eCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGlkZW50aWZpZXIuIFBhY2tldCB0cmFuc21pc3Npb24gc2VxdWVuY2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBpZGVudGlmaWVyICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uaWRlbnRpZmllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgRFRYTWVzc2FnZUhlYWRlciBjaGFubmVsQ29kZS5cbiAgICogUGFja2V0IHRyYW5zbWlzc2lvbiBjaGFubmVsQ29kZS4gVXNlIHRoaXMgdmFsdWUgdG8gZGlzdGluZ3Vpc2ggd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgY2hhbm5lbHNcbiAgICogY2FsbCB0aGlzIG1ldGhvZCBgSW5zdHJ1bWVudFNlcnZpY2UucmVnaXN0ZXJDaGFubmVsQ2FsbGJhY2tgIGdldCB0aGUgY2hhbm5lbCBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgY2hhbm5lbENvZGUgKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGVhZGVyPy5jaGFubmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBEVFhNZXNzYWdlSGVhZGVyIGV4cGVjdHNSZXBseS4gV2hldGhlciB0byBuZWVkIGFjayBtZXNzYWdlXG4gICAqIGlmIGV4cGVjdHNSZXBseSBpcyB0cnVlIG11c3QgcmVwbHkgYWNrIG1lc3NhZ2VcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgZXhwZWN0c1JlcGx5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhlYWRlcj8uZXhwZWN0c1JlcGx5O1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhpcyBtZXRob2QgYEluc3RydW1lbnRTZXJ2aWNlLnJlZ2lzdGVyU2VsZWN0b3JDYWxsYmFja2AgZ2V0IHRoZSBzZWxlY3RvciBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHsqfSBVbmtub3duIGRhdGFcbiAgICovXG4gIGdldCBzZWxlY3RvciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBzZXQgc2VsZWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLl9zZWxlY3RvciA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IERUWE1lc3NhZ2VIZWFkZXIgY29udmVyc2F0aW9uSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBjb252ZXJzYXRpb25JbmRleCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VIZWFkZXI/LmNvbnZlcnNhdGlvbkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIERUWE1lc3NhZ2UgQnVmZmVyOiBEVFhNZXNzYWdlSGVhZGVyICsgUGF5bG9hZEhlYWRlciArIERUWE1lc3NhZ2VBdXhCdWZmZXIobnVsbGFibGUpICsgc2VsZWN0b3IobnVsbGFibGUpXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBidWlsZCAoKSB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fc2VsZWN0b3IgPyBhcmNoaXZlKHRoaXMuX3NlbGVjdG9yKSA6IEJ1ZmZlci5hbGxvYygwKTtcbiAgICBjb25zdCBhdXggPSB0aGlzLmF1eGlsaWFyaWVzLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZEhlYWRlciA9IERUWE1lc3NhZ2VQYXlsb2FkSGVhZGVyLmJ1aWxkKHtcbiAgICAgIGZsYWdzOiB0aGlzLl9mbGFncyxcbiAgICAgIGF1eExlbmd0aDogYXV4Lmxlbmd0aCxcbiAgICAgIC8vIG5lZWQgdG8gY29udmVydCB0byBiaWdpbnQgaW4gYW55IGNhc2VcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgdG90YWxMZW5ndGg6IEJpZ0ludChhdXgubGVuZ3RoICsgc2VsLmxlbmd0aCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlSGVhZGVyID0gRFRYTWVzc2FnZUhlYWRlci5idWlsZCh7XG4gICAgICBwYXlsb2FkTGVuZ3RoOiBEVFhfTUVTU0FHRV9QQVlMT0FEX0hFQURFUl9MRU5HVEggKyBhdXgubGVuZ3RoICsgc2VsLmxlbmd0aCxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuX2lkZW50aWZpZXIsXG4gICAgICBjb252ZXJzYXRpb25JbmRleDogdGhpcy5fY29udmVyc2F0aW9uSW5kZXgsXG4gICAgICBjaGFubmVsQ29kZTogdGhpcy5fY2hhbm5lbENvZGUsXG4gICAgICBleHBlY3RzUmVwbHk6IHRoaXMuX2V4cGVjdHNSZXBseVxuICAgIH0pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFttZXNzYWdlSGVhZGVyLCBwYXlsb2FkSGVhZGVyLCBhdXgsIHNlbF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBEVFggYnVmZmVyIGludG8gYW4ganMgb2JqZWN0LiBSZXR1cm5lZCBpbiBEVFhEZWNvZGVyIFN0cmVhbS5UcmFuc2Zvcm1cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGhlYWRlckJ1ZiAgRFRYTWVzc2FnZUhlYWRlciBidWZmZXJcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHBheWxvYWRCdWYgIFBheWxvYWRIZWFkZXJCdWZmZXIgKyBEVFhNZXNzYWdlQXV4QnVmZmVyKG51bGxhYmxlKSArIHNlbGVjdG9yQnVmZmVyKG51bGxhYmxlKVxuICAgKiBAcmV0dXJucyB7RFRYTWVzc2FnZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZSAoaGVhZGVyQnVmLCBwYXlsb2FkQnVmKSB7XG4gICAgbGV0IGN1cnNvciA9IDA7XG4gICAgY29uc3QgcmV0ID0gbmV3IERUWE1lc3NhZ2UoKTtcbiAgICByZXQuX21lc3NhZ2VIZWFkZXIgPSBEVFhNZXNzYWdlSGVhZGVyLnBhcnNlKGhlYWRlckJ1Zik7XG4gICAgaWYgKHJldC5fbWVzc2FnZUhlYWRlci5wYXlsb2FkTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICByZXQuX3BheWxvYWRIZWFkZXIgPSBEVFhNZXNzYWdlUGF5bG9hZEhlYWRlci5wYXJzZShwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgRFRYX01FU1NBR0VfUEFZTE9BRF9IRUFERVJfTEVOR1RIKSk7XG4gICAgY3Vyc29yICs9IERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSDtcbiAgICAvLyB0b3RhbExlbmd0aCBpcyBiaWdpbnQgdXNlIDBuXG4gICAgaWYgKHJldC5fcGF5bG9hZEhlYWRlci50b3RhbExlbmd0aCA9PT0gMG4pIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlmIChyZXQuX3BheWxvYWRIZWFkZXIuYXV4TGVuZ3RoID4gMCkge1xuICAgICAgcmV0LmF1eGlsaWFyaWVzID0gRFRYTWVzc2FnZUF1eC5wYXJzZShwYXlsb2FkQnVmLnNsaWNlKGN1cnNvciwgY3Vyc29yICsgcmV0Ll9wYXlsb2FkSGVhZGVyLmF1eExlbmd0aCkpO1xuICAgICAgY3Vyc29yICs9IHJldC5fcGF5bG9hZEhlYWRlci5hdXhMZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHBheWxvYWRCdWYuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyBwYXlsb2FkQnVmLmxlbmd0aCk7XG4gICAgZm9yIChjb25zdCBmdW4gb2YgW3VuYXJjaGl2ZSwgcGxpc3RsaWIucGFyc2VCdWZmZXJdKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXQuc2VsZWN0b3IgPSBmdW4oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXQuc2VsZWN0b3IgPSBuZXcgSW5zdHJ1bWVudFJQQ1BhcnNlRXJyb3IoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgRFRYTWVzc2FnZUhlYWRlciwgRFRYTWVzc2FnZVBheWxvYWRIZWFkZXIsIERUWE1lc3NhZ2VBdXhCdWZmZXIsIERUWE1lc3NhZ2VBdXgsIERUWE1lc3NhZ2UsXG4gIERUWF9NRVNTQUdFX1BBWUxPQURfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX0xFTkdUSCwgRFRYX01FU1NBR0VfSEVBREVSX01BR0lDLCBEVFhfTUVTU0FHRV9IRUFERVJfTUFHSUNfTEVOLFxuICBGTEFHX1RZUEVTfTsiXSwiZmlsZSI6ImxpYi9pbnN0cnVtZW50L2hlYWRlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.SERVICE = exports.InstrumentService = exports.INSTRUMENT_SERVICE_NAME_VERSION_14 = exports.INSTRUMENT_SERVICE_NAME = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _baseService = require("../base-service");
|
|
13
|
+
|
|
14
|
+
var _headers = require("./headers");
|
|
15
|
+
|
|
16
|
+
var _dtxEncode = require("./transformer/dtx-encode");
|
|
17
|
+
|
|
18
|
+
var _dtxDecode = require("./transformer/dtx-decode");
|
|
19
|
+
|
|
20
|
+
var _events = _interopRequireDefault(require("events"));
|
|
21
|
+
|
|
22
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
|
+
|
|
24
|
+
var _asyncbox = require("asyncbox");
|
|
25
|
+
|
|
26
|
+
const CHECK_FREQ_MS = 500;
|
|
27
|
+
const WAIT_REPLY_TIME_MS = 10000;
|
|
28
|
+
const EMPTY_MESSAGE_SIZE = 16;
|
|
29
|
+
const CHANNEL_CANCELED = '_channelCanceled';
|
|
30
|
+
const CHANNEL_OFFSET = 2 ** 32;
|
|
31
|
+
const INSTRUMENT_SERVICE_NAME_VERSION_14 = 'com.apple.instruments.remoteserver.DVTSecureSocketProxy';
|
|
32
|
+
exports.INSTRUMENT_SERVICE_NAME_VERSION_14 = INSTRUMENT_SERVICE_NAME_VERSION_14;
|
|
33
|
+
const INSTRUMENT_SERVICE_NAME = 'com.apple.instruments.remoteserver';
|
|
34
|
+
exports.INSTRUMENT_SERVICE_NAME = INSTRUMENT_SERVICE_NAME;
|
|
35
|
+
const SERVICE = Object.freeze({
|
|
36
|
+
DEVICE_INFO: 'com.apple.instruments.server.services.deviceinfo',
|
|
37
|
+
PROCESS_CONTROL: 'com.apple.instruments.server.services.processcontrol',
|
|
38
|
+
SYSMONTAP: 'com.apple.instruments.server.services.sysmontap',
|
|
39
|
+
NETWORKING: 'com.apple.instruments.server.services.networking',
|
|
40
|
+
MOBILE_NOTIFICATIONS: 'com.apple.instruments.server.services.mobilenotifications',
|
|
41
|
+
GRAPHICS_OPENGL: 'com.apple.instruments.server.services.graphics.opengl',
|
|
42
|
+
APPLICATION_LISTING: 'com.apple.instruments.server.services.device.applictionListing',
|
|
43
|
+
CONDITION_INDUCER: 'com.apple.instruments.server.services.ConditionInducer'
|
|
44
|
+
});
|
|
45
|
+
exports.SERVICE = SERVICE;
|
|
46
|
+
|
|
47
|
+
function defaultDict(createValue) {
|
|
48
|
+
return new Proxy(Object.create(null), {
|
|
49
|
+
get(storage, property) {
|
|
50
|
+
if (!(property in storage)) {
|
|
51
|
+
storage[property] = createValue(property);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return storage[property];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
class InstrumentService extends _baseService.BaseServiceSocket {
|
|
61
|
+
constructor(socketClient, event) {
|
|
62
|
+
super(socketClient);
|
|
63
|
+
this._undefinedCallback = event;
|
|
64
|
+
this._callbacks = new _events.default.EventEmitter();
|
|
65
|
+
this._channelCallbacks = new _events.default.EventEmitter();
|
|
66
|
+
this._replyQueues = defaultDict(() => []);
|
|
67
|
+
this._channels = {};
|
|
68
|
+
this._nextIdentifier = 1;
|
|
69
|
+
this._encoder = new _dtxEncode.DTXEncoder();
|
|
70
|
+
|
|
71
|
+
this._encoder.pipe(this._socketClient);
|
|
72
|
+
|
|
73
|
+
this._assignClientFailureHandlers(this._encoder);
|
|
74
|
+
|
|
75
|
+
this._decoder = new _dtxDecode.DTXDecoder();
|
|
76
|
+
|
|
77
|
+
this._socketClient.pipe(this._decoder);
|
|
78
|
+
|
|
79
|
+
this._decoder.on('data', this._handleData.bind(this));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
registerSelectorCallback(selector, event) {
|
|
83
|
+
this._callbacks.addListener(selector, event);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
registerUndefinedCallback(event) {
|
|
87
|
+
this._undefinedCallback = event;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async registerChannelCallback(channel, event) {
|
|
91
|
+
const channelId = await this.makeChannel(channel);
|
|
92
|
+
|
|
93
|
+
this._channelCallbacks.addListener(channelId, event);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async makeChannel(channel) {
|
|
97
|
+
if (channel in this._channels) {
|
|
98
|
+
return this._channels[channel];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const channelCode = Object.keys(this._channels).length + 1;
|
|
102
|
+
await this._callChannel(true, 0, '_requestChannelWithCode:identifier:', channelCode, channel);
|
|
103
|
+
this._channels[channel] = channelCode;
|
|
104
|
+
return channelCode;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async callChannel(channel, selector, ...auxiliaries) {
|
|
108
|
+
const channelCode = await this.makeChannel(channel);
|
|
109
|
+
return await this._callChannel(true, channelCode, selector, ...auxiliaries);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async _callChannel(sync, channelCode, selector, ...auxiliaries) {
|
|
113
|
+
const identifier = this._nextIdentifier;
|
|
114
|
+
|
|
115
|
+
this._encoder.write({
|
|
116
|
+
sync,
|
|
117
|
+
channelCode,
|
|
118
|
+
selector,
|
|
119
|
+
auxiliaries,
|
|
120
|
+
identifier
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
++this._nextIdentifier;
|
|
124
|
+
|
|
125
|
+
if (sync) {
|
|
126
|
+
try {
|
|
127
|
+
return await (0, _asyncbox.waitForCondition)(() => {
|
|
128
|
+
const queue = this._replyQueues[identifier];
|
|
129
|
+
const data = queue.shift();
|
|
130
|
+
|
|
131
|
+
if (!_lodash.default.isUndefined(data)) {
|
|
132
|
+
return data;
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
waitMs: WAIT_REPLY_TIME_MS,
|
|
136
|
+
intervalMs: CHECK_FREQ_MS,
|
|
137
|
+
error: 'reply channel data timeout'
|
|
138
|
+
});
|
|
139
|
+
} catch (err) {
|
|
140
|
+
this.close();
|
|
141
|
+
throw new Error(err);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
_handleData(data) {
|
|
147
|
+
if (_lodash.default.includes(data.selector, CHANNEL_CANCELED)) {
|
|
148
|
+
this.close();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (data.conversationIndex === 1) {
|
|
152
|
+
this._replyQueues[data.identifier].push(data);
|
|
153
|
+
} else if (this._channelCallbacks.listenerCount(CHANNEL_OFFSET - data.channelCode) > 0) {
|
|
154
|
+
this._channelCallbacks.emit(CHANNEL_OFFSET - data.channelCode, data);
|
|
155
|
+
} else {
|
|
156
|
+
const selector = data.selector;
|
|
157
|
+
|
|
158
|
+
if (_lodash.default.isString(selector) && this._callbacks.listenerCount(selector) > 0) {
|
|
159
|
+
this._callbacks.emit(selector, data);
|
|
160
|
+
} else if (this._undefinedCallback) {
|
|
161
|
+
this._undefinedCallback(data);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (data.expectsReply) {
|
|
165
|
+
this._replyAck(data);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
_replyAck(data) {
|
|
171
|
+
const reply = new _headers.DTXMessage({
|
|
172
|
+
identifier: data.identifier,
|
|
173
|
+
channelCode: data.channelCode,
|
|
174
|
+
selector: Buffer.alloc(EMPTY_MESSAGE_SIZE),
|
|
175
|
+
conversationIndex: data.conversationIndex + 1,
|
|
176
|
+
flags: _headers.FLAG_TYPES.reply
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
this._socketClient.write(reply.build());
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
exports.InstrumentService = InstrumentService;require('source-map-support').install();
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbnN0cnVtZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbIkNIRUNLX0ZSRVFfTVMiLCJXQUlUX1JFUExZX1RJTUVfTVMiLCJFTVBUWV9NRVNTQUdFX1NJWkUiLCJDSEFOTkVMX0NBTkNFTEVEIiwiQ0hBTk5FTF9PRkZTRVQiLCJJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRV9WRVJTSU9OXzE0IiwiSU5TVFJVTUVOVF9TRVJWSUNFX05BTUUiLCJTRVJWSUNFIiwiT2JqZWN0IiwiZnJlZXplIiwiREVWSUNFX0lORk8iLCJQUk9DRVNTX0NPTlRST0wiLCJTWVNNT05UQVAiLCJORVRXT1JLSU5HIiwiTU9CSUxFX05PVElGSUNBVElPTlMiLCJHUkFQSElDU19PUEVOR0wiLCJBUFBMSUNBVElPTl9MSVNUSU5HIiwiQ09ORElUSU9OX0lORFVDRVIiLCJkZWZhdWx0RGljdCIsImNyZWF0ZVZhbHVlIiwiUHJveHkiLCJjcmVhdGUiLCJnZXQiLCJzdG9yYWdlIiwicHJvcGVydHkiLCJJbnN0cnVtZW50U2VydmljZSIsIkJhc2VTZXJ2aWNlU29ja2V0IiwiY29uc3RydWN0b3IiLCJzb2NrZXRDbGllbnQiLCJldmVudCIsIl91bmRlZmluZWRDYWxsYmFjayIsIl9jYWxsYmFja3MiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJfY2hhbm5lbENhbGxiYWNrcyIsIl9yZXBseVF1ZXVlcyIsIl9jaGFubmVscyIsIl9uZXh0SWRlbnRpZmllciIsIl9lbmNvZGVyIiwiRFRYRW5jb2RlciIsInBpcGUiLCJfc29ja2V0Q2xpZW50IiwiX2Fzc2lnbkNsaWVudEZhaWx1cmVIYW5kbGVycyIsIl9kZWNvZGVyIiwiRFRYRGVjb2RlciIsIm9uIiwiX2hhbmRsZURhdGEiLCJiaW5kIiwicmVnaXN0ZXJTZWxlY3RvckNhbGxiYWNrIiwic2VsZWN0b3IiLCJhZGRMaXN0ZW5lciIsInJlZ2lzdGVyVW5kZWZpbmVkQ2FsbGJhY2siLCJyZWdpc3RlckNoYW5uZWxDYWxsYmFjayIsImNoYW5uZWwiLCJjaGFubmVsSWQiLCJtYWtlQ2hhbm5lbCIsImNoYW5uZWxDb2RlIiwia2V5cyIsImxlbmd0aCIsIl9jYWxsQ2hhbm5lbCIsImNhbGxDaGFubmVsIiwiYXV4aWxpYXJpZXMiLCJzeW5jIiwiaWRlbnRpZmllciIsIndyaXRlIiwicXVldWUiLCJkYXRhIiwic2hpZnQiLCJfIiwiaXNVbmRlZmluZWQiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3IiLCJlcnIiLCJjbG9zZSIsIkVycm9yIiwiaW5jbHVkZXMiLCJjb252ZXJzYXRpb25JbmRleCIsInB1c2giLCJsaXN0ZW5lckNvdW50IiwiZW1pdCIsImlzU3RyaW5nIiwiZXhwZWN0c1JlcGx5IiwiX3JlcGx5QWNrIiwicmVwbHkiLCJEVFhNZXNzYWdlIiwiQnVmZmVyIiwiYWxsb2MiLCJmbGFncyIsIkZMQUdfVFlQRVMiLCJidWlsZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsR0FBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxLQUEzQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLEVBQTNCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLEtBQUssRUFBNUI7QUFFQSxNQUFNQyxrQ0FBa0MsR0FBRyx5REFBM0M7O0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsb0NBQWhDOztBQUVPLE1BQU1DLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDbkNDLEVBQUFBLFdBQVcsRUFBRSxrREFEc0I7QUFFbkNDLEVBQUFBLGVBQWUsRUFBRSxzREFGa0I7QUFHbkNDLEVBQUFBLFNBQVMsRUFBRSxpREFId0I7QUFJbkNDLEVBQUFBLFVBQVUsRUFBRSxrREFKdUI7QUFLbkNDLEVBQUFBLG9CQUFvQixFQUFFLDJEQUxhO0FBTW5DQyxFQUFBQSxlQUFlLEVBQUUsdURBTmtCO0FBT25DQyxFQUFBQSxt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QVcsRUFBRVUsSUFBSSxDQUFDVixXQUZTO0FBRzNCUCxNQUFBQSxRQUFRLEVBQUVxQyxNQUFNLENBQUNDLEtBQVAsQ0FBYXJGLGtCQUFiLENBSGlCO0FBSTNCMkUsTUFBQUEsaUJBQWlCLEVBQUVYLElBQUksQ0FBQ1csaUJBQUwsR0FBeUIsQ0FKakI7QUFLM0JXLE1BQUFBLEtBQUssRUFBRUMsb0JBQVdMO0FBTFMsS0FBZixDQUFkOztBQU9BLFNBQUszQyxhQUFMLENBQW1CdUIsS0FBbkIsQ0FBeUJvQixLQUFLLENBQUNNLEtBQU4sRUFBekI7QUFDRDs7QUF2SStDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZVxuXG5pbXBvcnQge0Jhc2VTZXJ2aWNlU29ja2V0fSBmcm9tICcuLi9iYXNlLXNlcnZpY2UnO1xuaW1wb3J0IHtEVFhNZXNzYWdlLCBGTEFHX1RZUEVTfSBmcm9tICcuL2hlYWRlcnMnO1xuaW1wb3J0IHtEVFhFbmNvZGVyfSBmcm9tICcuL3RyYW5zZm9ybWVyL2R0eC1lbmNvZGUnO1xuaW1wb3J0IHtEVFhEZWNvZGVyfSBmcm9tICcuL3RyYW5zZm9ybWVyL2R0eC1kZWNvZGUnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7d2FpdEZvckNvbmRpdGlvbn0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBDSEVDS19GUkVRX01TID0gNTAwO1xuY29uc3QgV0FJVF9SRVBMWV9USU1FX01TID0gMTAwMDA7XG5jb25zdCBFTVBUWV9NRVNTQUdFX1NJWkUgPSAxNjtcbmNvbnN0IENIQU5ORUxfQ0FOQ0VMRUQgPSAnX2NoYW5uZWxDYW5jZWxlZCc7XG5jb25zdCBDSEFOTkVMX09GRlNFVCA9IDIgKiogMzI7XG5cbmNvbnN0IElOU1RSVU1FTlRfU0VSVklDRV9OQU1FX1ZFUlNJT05fMTQgPSAnY29tLmFwcGxlLmluc3RydW1lbnRzLnJlbW90ZXNlcnZlci5EVlRTZWN1cmVTb2NrZXRQcm94eSc7XG5jb25zdCBJTlNUUlVNRU5UX1NFUlZJQ0VfTkFNRSA9ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMucmVtb3Rlc2VydmVyJztcblxuZXhwb3J0IGNvbnN0IFNFUlZJQ0UgPSBPYmplY3QuZnJlZXplKHtcbiAgREVWSUNFX0lORk86ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmRldmljZWluZm8nLFxuICBQUk9DRVNTX0NPTlRST0w6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLnByb2Nlc3Njb250cm9sJyxcbiAgU1lTTU9OVEFQOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5zeXNtb250YXAnLFxuICBORVRXT1JLSU5HOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5uZXR3b3JraW5nJyxcbiAgTU9CSUxFX05PVElGSUNBVElPTlM6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLm1vYmlsZW5vdGlmaWNhdGlvbnMnLFxuICBHUkFQSElDU19PUEVOR0w6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmdyYXBoaWNzLm9wZW5nbCcsXG4gIEFQUExJQ0FUSU9OX0xJU1RJTkc6ICdjb20uYXBwbGUuaW5zdHJ1bWVudHMuc2VydmVyLnNlcnZpY2VzLmRldmljZS5hcHBsaWN0aW9uTGlzdGluZycsXG4gIENPTkRJVElPTl9JTkRVQ0VSOiAnY29tLmFwcGxlLmluc3RydW1lbnRzLnNlcnZlci5zZXJ2aWNlcy5Db25kaXRpb25JbmR1Y2VyJ1xufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHREaWN0IChjcmVhdGVWYWx1ZSkge1xuICByZXR1cm4gbmV3IFByb3h5KE9iamVjdC5jcmVhdGUobnVsbCksIHtcbiAgICBnZXQgKHN0b3JhZ2UsIHByb3BlcnR5KSB7XG4gICAgICBpZiAoIShwcm9wZXJ0eSBpbiBzdG9yYWdlKSkge1xuICAgICAgICBzdG9yYWdlW3Byb3BlcnR5XSA9IGNyZWF0ZVZhbHVlKHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdG9yYWdlW3Byb3BlcnR5XTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgZGF0YSB0cmFuc21pc3Npb24gaW4gaW5zdHJ1bWVudCBzZXJ2ZVxuICogQG5hbWUgRFRYQ2FsbGJhY2tcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtEVFhNZXNzYWdlfSBvYmplY3RcbiovXG5cbi8qKlxuICogQHBhcmFtIHtTb2NrZXR9IHNvY2tldENsaWVudCAgRFRYTWVzc2FnZS5zZWxlY3RvclxuICogQHBhcmFtIHs/RFRYQ2FsbGJhY2t9IGV2ZW50IGlmIGVtcHR5IHdpbGwgaWdub3JlIGFueSBtZXNzYWdlc1xuICovXG5jbGFzcyBJbnN0cnVtZW50U2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlU29ja2V0IHtcbiAgY29uc3RydWN0b3IgKHNvY2tldENsaWVudCwgZXZlbnQpIHtcbiAgICBzdXBlcihzb2NrZXRDbGllbnQpO1xuICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrID0gZXZlbnQ7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLl9jaGFubmVsQ2FsbGJhY2tzID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLl9yZXBseVF1ZXVlcyA9IGRlZmF1bHREaWN0KCgpID0+IFtdKTtcbiAgICB0aGlzLl9jaGFubmVscyA9IHt9O1xuICAgIHRoaXMuX25leHRJZGVudGlmaWVyID0gMTtcbiAgICB0aGlzLl9lbmNvZGVyID0gbmV3IERUWEVuY29kZXIoKTtcbiAgICB0aGlzLl9lbmNvZGVyLnBpcGUodGhpcy5fc29ja2V0Q2xpZW50KTtcbiAgICB0aGlzLl9hc3NpZ25DbGllbnRGYWlsdXJlSGFuZGxlcnModGhpcy5fZW5jb2Rlcik7XG4gICAgdGhpcy5fZGVjb2RlciA9IG5ldyBEVFhEZWNvZGVyKCk7XG4gICAgdGhpcy5fc29ja2V0Q2xpZW50LnBpcGUodGhpcy5fZGVjb2Rlcik7XG4gICAgdGhpcy5fZGVjb2Rlci5vbignZGF0YScsIHRoaXMuX2hhbmRsZURhdGEuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHNlbGVjdG9yIGlzIHJlZ2lzdGVyZWQsIFRoZSBtZXNzYWdlIG9mIHRoZSBzZWxlY3RvciBldmVudCB3aWxsIGJlIHJldHVybmVkLiByZWZlciB0byB0aGlzLl9oYW5kbGVEYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAgTGlzdGVuIGZvciByZXR1cm4gRFRYTWVzc2FnZS5zZWxlY3RvciBkYXRhXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICByZWdpc3RlclNlbGVjdG9yQ2FsbGJhY2sgKHNlbGVjdG9yLCBldmVudCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcy5hZGRMaXN0ZW5lcihzZWxlY3RvciwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBldmVudCBpcyByZWdpc3RlcmVkLCBhbGwgdW5yZWdpc3RlcmVkIG1lc3NhZ2VzIHdpbGwgYmUgcmV0dXJuZWQgdG8gZXZlbnQuIHJlZmVyIHRvIHRoaXMuX2hhbmRsZURhdGFcbiAgICogQHBhcmFtIHtEVFhDYWxsYmFja30gZXZlbnRcbiAgICovXG4gIHJlZ2lzdGVyVW5kZWZpbmVkQ2FsbGJhY2sgKGV2ZW50KSB7XG4gICAgdGhpcy5fdW5kZWZpbmVkQ2FsbGJhY2sgPSBldmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZXZlbnQgaXMgcmVnaXN0ZXJlZCwgdGhpcyBjaGFubmVsIHtTRVJWSUNFfSBtZXNzYWdlcyB3aWxsIGJlIHJldHVybmVkIHRvIGV2ZW50LiByZWZlciB0byB0aGlzLl9oYW5kbGVEYXRhXG4gICAqIEl0J3MgYWN0dWFsbHkgbGlzdGVuaW5nIGZvciBpbnQgY2hhbm5lbENvZGUuIEluIHRoaXMuX2NoYW5uZWwgb2JqZWN0IHRvIHJlY29yZCBjaGFubmVsIGtleSBhbmQgaW50IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIGluc3RydW1lbnRzIHNlcnZpY2UgY2hhbm5lbCBlLmc6IFNFUlZJQ0UuREVWSUNFX0lORk8uXG4gICAqIEBwYXJhbSB7RFRYQ2FsbGJhY2t9IGV2ZW50XG4gICAqL1xuICBhc3luYyByZWdpc3RlckNoYW5uZWxDYWxsYmFjayAoY2hhbm5lbCwgZXZlbnQpIHtcbiAgICBjb25zdCBjaGFubmVsSWQgPSBhd2FpdCB0aGlzLm1ha2VDaGFubmVsKGNoYW5uZWwpO1xuICAgIHRoaXMuX2NoYW5uZWxDYWxsYmFja3MuYWRkTGlzdGVuZXIoY2hhbm5lbElkLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2VydmljZSBjaGFubmVsLCBkYXRhIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2VydmljZSB3aWxsIHVzZSB0aGlzIGNoYW5uZWxDb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsICBpbnN0cnVtZW50cyBzZXJ2aWNlIGNoYW5uZWwgZS5nOiBTRVJWSUNFLkRFVklDRV9JTkZPXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcnwqPn0gaW5zdHJ1bWVudHMgc2VydmljZSBjaGFubmVsIGNvZGUgZm9yIGRhdGEgdHJhbnNtaXNzaW9uXG4gICAqL1xuICBhc3luYyBtYWtlQ2hhbm5lbCAoY2hhbm5lbCkge1xuICAgIGlmIChjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF07XG4gICAgfVxuICAgIGNvbnN0IGNoYW5uZWxDb2RlID0gT2JqZWN0LmtleXModGhpcy5fY2hhbm5lbHMpLmxlbmd0aCArIDE7XG4gICAgYXdhaXQgdGhpcy5fY2FsbENoYW5uZWwodHJ1ZSwgMCwgJ19yZXF1ZXN0Q2hhbm5lbFdpdGhDb2RlOmlkZW50aWZpZXI6JywgY2hhbm5lbENvZGUsIGNoYW5uZWwpO1xuICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdID0gY2hhbm5lbENvZGU7XG4gICAgcmV0dXJuIGNoYW5uZWxDb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGdlbmVyYWwsIHdlIGNhbGwgdGhpcyBtZXRob2QgdG8gc3RhcnQgdGhlIGluc3RydW1lbnQgZHR4IHNlcnZpY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgaW5zdHJ1bWVudCBkdHggc2VydmljZSBlLmc6IFNFUlZJQ0UuREVWSUNFX0lORk9cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIGluc3RydW1lbnQgc2VydmljZSBtZXRob2QgbmFtZSAocmVmbGVjdGlvbiBjYWxscylcbiAgICogQHBhcmFtIHsuLi5hbnl9IGF1eGlsaWFyaWVzIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgc2VsZWN0b3JcbiAgICogQHJldHVybnMge1Byb21pc2U8RFRYTWVzc2FnZT59XG4gICAqIGV4YW1wbGXvvJpcbiAgICogaW5zdHJ1bWVudFNlcnZpY2UuY2FsbENoYW5uZWwoU0VSVklDRS5QUk9DRVNTX0NPTlRST0wsXG4gICAgICAgICdsYXVuY2hTdXNwZW5kZWRQcm9jZXNzV2l0aERldmljZVBhdGg6YnVuZGxlSWRlbnRpZmllcjplbnZpcm9ubWVudDphcmd1bWVudHM6b3B0aW9uczonLCAnJyxcbiAgICAgICAgYnVuZGxlSUQsIHt9LCBbXSwgeydTdGFydFN1c3BlbmRlZEtleSc6IDAsICdLaWxsRXhpc3RpbmcnOiAxfVxuICAgKi9cbiAgYXN5bmMgY2FsbENoYW5uZWwgKGNoYW5uZWwsIHNlbGVjdG9yLCAuLi5hdXhpbGlhcmllcykge1xuICAgIGNvbnN0IGNoYW5uZWxDb2RlID0gYXdhaXQgdGhpcy5tYWtlQ2hhbm5lbChjaGFubmVsKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY2FsbENoYW5uZWwodHJ1ZSwgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCAuLi5hdXhpbGlhcmllcyk7XG4gIH1cblxuICBhc3luYyBfY2FsbENoYW5uZWwgKHN5bmMsIGNoYW5uZWxDb2RlLCBzZWxlY3RvciwgLi4uYXV4aWxpYXJpZXMpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5fbmV4dElkZW50aWZpZXI7XG4gICAgdGhpcy5fZW5jb2Rlci53cml0ZSh7c3luYywgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCBhdXhpbGlhcmllcywgaWRlbnRpZmllcn0pO1xuICAgICsrdGhpcy5fbmV4dElkZW50aWZpZXI7XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3JlcGx5UXVldWVzW2lkZW50aWZpZXJdO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7d2FpdE1zOiBXQUlUX1JFUExZX1RJTUVfTVMsIGludGVydmFsTXM6IENIRUNLX0ZSRVFfTVMsIGVycm9yOiAncmVwbHkgY2hhbm5lbCBkYXRhIHRpbWVvdXQnfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxpbmcgcmVnaXN0ZXJlZCBhc3luY2hyb25vdXMgbWVzc2FnZSBjYWxsYmFja3NcbiAgICogQHBhcmFtIHtEVFhNZXNzYWdlfSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlRGF0YSAoZGF0YSkge1xuICAgIGlmIChfLmluY2x1ZGVzKGRhdGEuc2VsZWN0b3IsIENIQU5ORUxfQ0FOQ0VMRUQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmNvbnZlcnNhdGlvbkluZGV4ID09PSAxKSB7XG4gICAgICB0aGlzLl9yZXBseVF1ZXVlc1tkYXRhLmlkZW50aWZpZXJdLnB1c2goZGF0YSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaGFubmVsQ2FsbGJhY2tzLmxpc3RlbmVyQ291bnQoQ0hBTk5FTF9PRkZTRVQgLSBkYXRhLmNoYW5uZWxDb2RlKSA+IDApIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDYWxsYmFja3MuZW1pdChDSEFOTkVMX09GRlNFVCAtIGRhdGEuY2hhbm5lbENvZGUsIGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGRhdGEuc2VsZWN0b3I7XG4gICAgICBpZiAoXy5pc1N0cmluZyhzZWxlY3RvcikgJiYgdGhpcy5fY2FsbGJhY2tzLmxpc3RlbmVyQ291bnQoc2VsZWN0b3IpID4gMCkge1xuICAgICAgICB0aGlzLl9jYWxsYmFja3MuZW1pdChzZWxlY3RvciwgZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3VuZGVmaW5lZENhbGxiYWNrKGRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuZXhwZWN0c1JlcGx5KSB7XG4gICAgICAgIHRoaXMuX3JlcGx5QWNrKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gYSBlbXB0eSBhY2sgbWVzc2FnZVxuICAgKiBAcGFyYW0ge0RUWE1lc3NhZ2V9IGRhdGFcbiAgICovXG4gIF9yZXBseUFjayAoZGF0YSkge1xuICAgIGNvbnN0IHJlcGx5ID0gbmV3IERUWE1lc3NhZ2Uoe1xuICAgICAgaWRlbnRpZmllcjogZGF0YS5pZGVudGlmaWVyLFxuICAgICAgY2hhbm5lbENvZGU6IGRhdGEuY2hhbm5lbENvZGUsXG4gICAgICBzZWxlY3RvcjogQnVmZmVyLmFsbG9jKEVNUFRZX01FU1NBR0VfU0laRSksXG4gICAgICBjb252ZXJzYXRpb25JbmRleDogZGF0YS5jb252ZXJzYXRpb25JbmRleCArIDEsXG4gICAgICBmbGFnczogRkxBR19UWVBFUy5yZXBseVxuICAgIH0pO1xuICAgIHRoaXMuX3NvY2tldENsaWVudC53cml0ZShyZXBseS5idWlsZCgpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBJbnN0cnVtZW50U2VydmljZSwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUVfVkVSU0lPTl8xNCwgSU5TVFJVTUVOVF9TRVJWSUNFX05BTUUgfTtcbiJdLCJmaWxlIjoibGliL2luc3RydW1lbnQvaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|