@vgroup/dialbox 0.6.35 → 0.6.37
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/esm2020/lib/components/call-progress/call-progress.component.mjs +35 -32
- package/esm2020/lib/dialbox.component.mjs +2 -2
- package/fesm2015/vgroup-dialbox.mjs +36 -33
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +35 -32
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -139,7 +139,7 @@ export class CallProgressComponent {
|
|
|
139
139
|
}
|
|
140
140
|
this.newIncomingCallsList.forEach((callInfo, i) => {
|
|
141
141
|
this.conferenceId = i == 0 ? this.newIncomingCallsList[i].conferenceId : this.conferenceId;
|
|
142
|
-
let ourNumberInfo = this.newIncomingCallsList[i].participants.find((resData) => ((this.deviceNumberList.includes(resData?.from) && resData?.
|
|
142
|
+
let ourNumberInfo = this.newIncomingCallsList[i].participants.find((resData) => ((this.deviceNumberList.includes(resData?.from) && resData?.direction == 'outgoing-call') || (this.deviceNumberList.includes(resData?.to) && resData?.direction == 'incoming-call')) && !resData?.isLeft);
|
|
143
143
|
this.isMute = !ourNumberInfo?.isHold ? ourNumberInfo?.isMute : this.isMute;
|
|
144
144
|
if (ourNumberInfo?.id) {
|
|
145
145
|
this.newIncomingCallsList[i].participants.forEach(async (res) => {
|
|
@@ -267,16 +267,11 @@ export class CallProgressComponent {
|
|
|
267
267
|
return ((this.deviceNumberList.includes(participant?.from) && participant?.direction == 'outgoing-call') || (this.deviceNumberList.includes(participant?.to) && participant?.direction == 'incoming-call')) && !participant?.isLeft && !participant?.isHold;
|
|
268
268
|
});
|
|
269
269
|
});
|
|
270
|
-
// this.newIncomingCallsList.find((item: any) => {
|
|
271
|
-
// currentCall = item?.participants?.filter((participant: any) => {
|
|
272
|
-
// return ((this.deviceNumberList.includes(participant?.from) && participant?.direction == 'outgoing-call') || (this.deviceNumberList.includes(participant?.to) && participant?.direction == 'incoming-call')) && !participant?.isLeft && !participant?.isHold
|
|
273
|
-
// })
|
|
274
|
-
// });
|
|
275
270
|
if (this.currentConferenceCall?.participants?.length == 2 && this.currentConferenceCall?.participants[0]?.id) {
|
|
276
|
-
this.currentCall = this.currentCallList
|
|
271
|
+
this.currentCall = this.currentCallList.find((res) => !res?.isConferenceHold);
|
|
277
272
|
}
|
|
278
273
|
else if (this.currentConferenceCall?.participants?.length > 2 && this.currentConferenceCall?.participants[1]?.isConference) {
|
|
279
|
-
this.currentCall = this.currentCallList
|
|
274
|
+
this.currentCall = this.currentCallList.find((res) => !res?.isConferenceHold);
|
|
280
275
|
this.isConference = true;
|
|
281
276
|
}
|
|
282
277
|
if (!this.currentConferenceCall && !this.isNewAddedCall) {
|
|
@@ -368,7 +363,7 @@ export class CallProgressComponent {
|
|
|
368
363
|
}
|
|
369
364
|
}
|
|
370
365
|
this.cdr.detectChanges();
|
|
371
|
-
let incomingData = this.currentCallList.find((res) => res?.isIncomingCall && !res?.isAcceptCall && !res?.isLeft);
|
|
366
|
+
let incomingData = this.currentCallList.find((res) => res?.isIncomingCall && (!res?.isAcceptCall && res?.callStatus != 'participant-join') && !res?.isLeft);
|
|
372
367
|
if (incomingData?.id && !this.isRinging && this.deviceNumberList.includes(incomingData?.to)) {
|
|
373
368
|
this.isRinging = this.incomeingCallSocketService.play();
|
|
374
369
|
}
|
|
@@ -422,7 +417,7 @@ export class CallProgressComponent {
|
|
|
422
417
|
this.call = await this.device.connect({
|
|
423
418
|
params: {
|
|
424
419
|
From: rejoinParticipentInfo.from,
|
|
425
|
-
To: rejoinParticipentInfo.
|
|
420
|
+
To: rejoinParticipentInfo.to,
|
|
426
421
|
Env: environment.abb,
|
|
427
422
|
Token: tokenData.token.id,
|
|
428
423
|
Ext: rejoinParticipentInfo.extNum,
|
|
@@ -431,19 +426,27 @@ export class CallProgressComponent {
|
|
|
431
426
|
rtcConstraints: { audio: { deviceId: 'default' } },
|
|
432
427
|
});
|
|
433
428
|
this.twilioService.call = this.call;
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
429
|
+
console.log('this.call', this.call);
|
|
430
|
+
setTimeout(async () => {
|
|
431
|
+
try {
|
|
432
|
+
let addClientParticipantRes = this.addClientParticipant({
|
|
433
|
+
from: rejoinParticipentInfo.from,
|
|
434
|
+
route: "OUTGOING",
|
|
435
|
+
participantNumber: rejoinParticipentInfo?.to,
|
|
436
|
+
conferenceId: rejoinParticipentInfo?.conferenceId,
|
|
437
|
+
userId: this.userId || localStorage.getItem('userId'),
|
|
438
|
+
proxy: '',
|
|
439
|
+
countrycode: '',
|
|
440
|
+
deviceId: this.deviceId,
|
|
441
|
+
clientSid: this.call?.parameters['CallSid']
|
|
442
|
+
});
|
|
443
|
+
console.log('host rejoin addClientParticipantRes', addClientParticipantRes);
|
|
444
|
+
this.setupEventListeners();
|
|
445
|
+
}
|
|
446
|
+
catch (error) {
|
|
447
|
+
console.error('Error in addClientParticipant:', error);
|
|
448
|
+
}
|
|
449
|
+
}, 500);
|
|
447
450
|
console.log('Rejoined successfully');
|
|
448
451
|
}
|
|
449
452
|
catch (error) {
|
|
@@ -452,7 +455,7 @@ export class CallProgressComponent {
|
|
|
452
455
|
}
|
|
453
456
|
getStatus(res) {
|
|
454
457
|
if (res.direction == "incoming-call") {
|
|
455
|
-
return this.incomeingCallSocketService.isCurrentIncomingCallList.includes(res.id);
|
|
458
|
+
return res?.callStatus == "participant-join" ? true : this.incomeingCallSocketService.isCurrentIncomingCallList.includes(res.id);
|
|
456
459
|
}
|
|
457
460
|
else {
|
|
458
461
|
if (res.status == 'answered' && res.direction == "incoming-call") {
|
|
@@ -937,16 +940,16 @@ export class CallProgressComponent {
|
|
|
937
940
|
console.log('Adding participant:', contact);
|
|
938
941
|
console.log('this.call', this.call);
|
|
939
942
|
const phoneNumber = isUnsavedNumber ? contact : contact?.numbersList?.[0]?.number || contact?.phone;
|
|
940
|
-
let alreadyInCall = this.currentCallList.find((res) => res.to == phoneNumber || res.from == phoneNumber);
|
|
943
|
+
let alreadyInCall = this.currentCallList.find((res) => (res.to == phoneNumber && res?.direction == 'incoming-call') || (res.from == phoneNumber && res?.direction == 'outgoing-call') && !res?.isLeft);
|
|
941
944
|
if (alreadyInCall) {
|
|
942
945
|
swal('Error', `Already ${phoneNumber} number in this call.`);
|
|
943
946
|
return false;
|
|
944
947
|
}
|
|
945
|
-
const currentCall = this.currentCallList.find((c) => c?.phone === phoneNumber);
|
|
946
|
-
if (!phoneNumber || currentCall) {
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
}
|
|
948
|
+
// const currentCall = this.currentCallList.find((c: any) => c?.phone === phoneNumber);
|
|
949
|
+
// if (!phoneNumber || currentCall) {
|
|
950
|
+
// console.error('No phone number found for contact');
|
|
951
|
+
// return;
|
|
952
|
+
// }
|
|
950
953
|
try {
|
|
951
954
|
if (this.isConference) {
|
|
952
955
|
let data = await this.addParticipantToCall({
|
|
@@ -1046,7 +1049,7 @@ export class CallProgressComponent {
|
|
|
1046
1049
|
if (isInvalid) {
|
|
1047
1050
|
return false;
|
|
1048
1051
|
}
|
|
1049
|
-
let alreadyInCall = this.currentCallList.find((res) => res.to == number || res.from == number);
|
|
1052
|
+
let alreadyInCall = this.currentCallList.find((res) => ((res.to == number && res?.direction == 'incoming-call') || (res.from == number && res?.direction == 'outgoing-call')) && !res?.isLeft);
|
|
1050
1053
|
if (alreadyInCall) {
|
|
1051
1054
|
swal('Error', `Already ${number} number in this call.`);
|
|
1052
1055
|
return false;
|
|
@@ -1688,4 +1691,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1688
1691
|
}], endIncomingCallEvent: [{
|
|
1689
1692
|
type: Output
|
|
1690
1693
|
}] } });
|
|
1691
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQXVCOUMsTUFBTSxPQUFPLHFCQUFxQjtJQXFGaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDNUUsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM1RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBcEZ2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFLdEIsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVB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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBbUJHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhbGwsIERldmljZSB9IGZyb20gJ0B0d2lsaW8vdm9pY2Utc2RrJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90d2lsaW8uc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XHJcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuaW1wb3J0IHsga2V5cGFkIH0gZnJvbSAnLi4vLi4vLi4va2V5cGFkJztcclxuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJTkNPTUlOR19DQUxMX0FVRElPX0JBU0U2NCB9IGZyb20gJy4vYXVkaW9fYmFzZTY0LmJhc2U2NCc7XHJcbmltcG9ydCB7IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElwQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2lwLWFkZHJlc3Muc2VydmljZSc7XHJcblxyXG5cclxuaW50ZXJmYWNlIENhbGxEZXRhaWxzIHtcclxuICBjYWxsU2lkOiBzdHJpbmc7XHJcbiAgY2FsbFN0YXR1czogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBDYWxsU3RhdHVzUmVzcG9uc2Uge1xyXG4gIGNhbGxEZXRhaWxzOiBDYWxsRGV0YWlscztcclxuICByZXNwb25zZTogc3RyaW5nO1xyXG4gIGVycm9yVHlwZTogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBzdGF0dXM6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2FsbC1wcm9ncmVzcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxsUHJvZ3Jlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgY2FsbERhdGE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhbGxlcklkOiBhbnk7XHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsRGF0YT86IENhbGw7XHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNhbGxlcklkTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgZGV2aWNlSWQ6IGFueTtcclxuICBASW5wdXQoKSBjYWxsQWN0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgY29uZmVyZW5jZUNhbGxJbmZvOiBhbnk7XHJcbiAgdXNlcklkOiBhbnk7XHJcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxzTmV3SW5mbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG1pbmltaXNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBkZXZpY2U/OiBEZXZpY2U7XHJcbiAgY2FsbCE6IENhbGwgfCBhbnk7XHJcbiAgc2hvd1JpbmdBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0aW1lcjogc3RyaW5nID0gJzAwOjAwJztcclxuICBpbnRlcnZhbElkOiBhbnk7XHJcbiAgc2hvd0tleXBhZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGtleXBhZFZhbCA9IGtleXBhZDtcclxuICBjYWxsSW5wdXQ6IHN0cmluZyA9ICcnO1xyXG4gIGlzTXV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpc2JhbGVFbmRDYWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0NvbGxvcHMgPSBmYWxzZTtcclxuICBjdXJyZW50Q2FsbDogYW55O1xyXG4gIC8vIENvbmZlcmVuY2Ugc3RhdGUgZmxhZ1xyXG4gIGlzQ29uZmVyZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT3V0Z29pbmdDYWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBJbmNvbWluZyBjYWxsIHZhcmlhYmxlc1xyXG4gIGluY29taW5nQ2FsbERpdjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgaXNMb2FkZXJzaG93OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGVuZEluY29taW5nQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8vIFJlY29yZGluZyB2YXJpYWJsZXNcclxuICBjYWxsU2lkOiBhbnk7XHJcbiAgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1BhdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHRpbWVFbGFwc2VkID0gMDsgLy8gaW4gc2Vjb25kc1xyXG4gIHJlY29yZENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbmNvbWluZ0NhbGxTaWQ6IGFueTtcclxuICBjYWxsU3RhdHVzOiBzdHJpbmcgPSAncmluZ2luZyc7XHJcbiAgaW5jb21pbmdSZWNvcmRDYWxsPzogYW55O1xyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsOiBhbnk7XHJcbiAgc2hvd0NvbnRhY3RzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FkZFJlbW92ZVBhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDb25jdXJyZW50SW5jb21pbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoZWxkQ2FsbD86IENhbGw7XHJcbiAgaXNDYWxsT25Ib2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29udGFjdHM6IGFueVtdID0gW107XHJcbiAgY3VycmVudENhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNvbmZlcmVuY2VJZDogYW55O1xyXG4gIGFsbFBhcnRpY2lwZW50TGlzdDogYW55O1xyXG4gIGlzQ2xpY2tFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0NhbGxJblByb2dyZXNzITogYm9vbGVhbjtcclxuICBpc0N1cnJlbnRJbmNvbWluZ0NhbGxMaXN0OiBhbnkgPSBbXTtcclxuICBpc0NvbmZlcmVuY2VDYWxsSG9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkVXNlckluZm86IGFueTtcclxuICBpc1NlYXJjaFZpc2libGUgPSBmYWxzZTtcclxuICBpc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgc2VhcmNoVGV4dCA9ICcnO1xyXG4gIGZpbHRlcmVkTGlzdDogYW55ID0gW107XHJcbiAgZmlsdGVyZWRQYXJ0aWNpcGVudExpc3Q6IGFueTtcclxuICBzaG93QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNSaW5naW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNEaXJlY3RDYWxsT3B0aW9uU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxBbGVydCA9IHtcclxuICAgIG1zZzogJycsXHJcbiAgICBzaG93OiBmYWxzZVxyXG4gIH1cclxuICBsZWZ0UGFydGljaXBlbnQ6IGFueSA9IHt9O1xyXG4gIGNvbmZlcmVuY2VDYWxsTGlzdDogYW55W10gPSBbXTtcclxuICBpc0luY29taW5nQ2FsbEJ0bkRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBob3N0bnVtYmVyOiBhbnk7XHJcbiAgaXNOZXdBZGRlZENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZXZpY2VOdW1iZXJMaXN0OiBhbnkgPSBbXTtcclxuICBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fTtcclxuICBjdXJyZW50Q29uZmVyZW5jZUNhbGw6IGFueSA9IHt9O1xyXG4gIGlzUmVhc29uQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxlYXZlUmVhc29uOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlZENvbmY6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHR3aWxpb1NlcnZpY2U6IFR3aWxpb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlwU2VydmljZTogSXBBZGRyZXNzU2VydmljZSxcclxuICAgIHByaXZhdGUgaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2U6IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQ2FsbCBQcm9ncmVzcyBDb21wb25lbnQnKTtcclxuICAgIHRoaXMuY2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5jYWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQ2FsbCBQcm9ncmVzcyBDb21wb25lbnQgbmdPbkluaXQnKTtcclxuICAgIC8vIFN1YnNjcmliZSB0byBpbmNvbWluZyBjYWxscyBmcm9tIFR3aWxpb1NlcnZpY2VcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkKSB7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoKGluY29taW5nOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWluY29taW5nKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsIGVtaXR0ZWQ6JywgaW5jb21pbmcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDb25jdXJyZW50IGluY29taW5nIGRldGVjdGVkIC0gc2hvd2luZyBiYW5uZXInKTtcclxuICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3Vic2NyaWJpbmcgdG8gaW5jb21pbmcgY2FsbHM6JywgZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgIHRoaXMuR2V0Q29udGFjdHNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy51c2VySWQpIHtcclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnVzZXJJZCA9IHRoaXMudXNlcklkO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10pIHtcclxuICAgICAgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5pc0luY29taW5nQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmRpc3BsYXlOdW0gfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb20pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndGVzdC1zdGFydENhbGwxMjMnLCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgICAgLi4uY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgICBpZDogJzEyNScsXHJcbiAgICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZSxcclxuICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgICBwaG9uZTogY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnBob25lLFxyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogJzEyMScsXHJcbiAgICAgICAgICBuYW1lOiBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8ubmFtZSB8fCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uZnJvbU5hbWUgfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnRvTmFtZSB8fCAnJyxcclxuICAgICAgICAgIHRpbWU6IHRoaXMudGltZXIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnN0YXJ0Q2FsbChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCB8fCBjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5wcmV2aW91c1ZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kZXZpY2VOdW1iZXJMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlTnVtYmVyTGlzdCA9IHRoaXMuY2FsbGVySWRMaXN0Lm1hcCgocmVzOiBhbnkpID0+IHJlcy5udW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goKGNhbGxJbmZvOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSBpID09IDAgPyB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLmNvbmZlcmVuY2VJZCA6IHRoaXMuY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgbGV0IG91ck51bWJlckluZm8gPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMuaXNNdXRlID0gIW91ck51bWJlckluZm8/LmlzSG9sZCA/IG91ck51bWJlckluZm8/LmlzTXV0ZSA6IHRoaXMuaXNNdXRlO1xyXG4gICAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0ucGFydGljaXBhbnRzLmZvckVhY2goYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcz8uaG9zdCAmJiAhcmVzPy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdG51bWJlciA9IHJlcztcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RzLmZpbmQoKHJlc0RhdGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzRGF0YT8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciA9PSAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvKVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHJlcz8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgIGltZzogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LnRvSW1hZ2UgOiByZXM/LmZyb21JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogb3VyTnVtYmVySW5mbz8uaXNIb2xkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogcmVzPy5pc0NvbmZlcmVuY2UgfHwgdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VTaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiByZXM/LmlzTGVmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LmlkID09IHRoaXMuY3VycmVudENhbGw/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPiAwID8gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0gOiB7fTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmN1cnJlbnRDYWxsPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy50b0ltYWdlIDogcmVzPy5mcm9tSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IG91ck51bWJlckluZm8/LmlzSG9sZCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogcmVzPy5pc011dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHJlcy5pc0NvbmZlcmVuY2UgPyByZXMuaXNDb25mZXJlbmNlIDogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0aGlzLmdldFN0YXR1cyhyZXMpIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzPy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzPy5uYW1lIHx8IHJlcz8uZnJvbU5hbWUgfHwgcmVzPy50b05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHJlcz8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXMuaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LnRvSW1hZ2UgOiByZXM/LmZyb21JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiByZXM/LmlzTXV0ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHJlcy5pc0NvbmZlcmVuY2UgPyByZXMuaXNDb25mZXJlbmNlIDogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIocmVzPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmxlZnRQYXJ0aWNpcGVudFtjYWxsSW5mbz8uY29uZmVyZW5jZUlkXSA9IFsuLi5uZXcgTWFwKGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0/LmlzTGVmdCA9PT0gdHJ1ZSkubWFwKChpdGVtOiBhbnkpID0+IFtpdGVtPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gaXRlbT8udG8gfHwgJ1Vua25vd24nIDogaXRlbT8uZnJvbSwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IHZhbGlkVmFsdWVzID0gbmV3IFNldCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdmFsaWRWYWx1ZXMuaGFzKGl0ZW0/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHRoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWQgPT0gcmVzPy5wYXJ0aWNpcGFudElkICYmICFyZXM/LmlzQ29uZmVyZW5jZUhvbGQpO1xyXG4gICAgICAgIGxldCBjdXJyZW50Q2FsbDphbnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbT8ucGFydGljaXBhbnRzPy5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQpIHtcclxuICAgICAgICAgICAgICBjdXJyZW50Q2FsbC5wdXNoKHBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCAmJiAhcGFydGljaXBhbnQ/LmlzSG9sZFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICBjdXJyZW50Q2FsbCA9IGl0ZW0/LnBhcnRpY2lwYW50cz8uZmlsdGVyKChwYXJ0aWNpcGFudDogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHJldHVybiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0ICYmICFwYXJ0aWNpcGFudD8uaXNIb2xkXHJcbiAgICAgICAgLy8gICB9KVxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzPy5sZW5ndGggPT0gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzBdPy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0WzBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID4gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzFdPy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFsxXVxyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsICYmICF0aGlzLmlzTmV3QWRkZWRDYWxsKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy5mcm9tKSAmJiBpdGVtPy50byA9PT0gJ2MyY19zb2Z0cGhvbmVfY2xpZW50JykgfHwgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSkgJiYgIWl0ZW0/LmlzTGVmdCAmJiAhaXRlbT8uaXNIb2xkXHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIC8vIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5wYXJ0aWNpcGFudElkID09IHRoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWQgJiYgcmVzPy5pc0FjY2VwdENhbGwgJiYgIXJlcz8uaXNDb25mZXJlbmNlSG9sZClcclxuICAgICAgICAgIC8vIGlmICghdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LmlkICYmIHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgcmV0dXJuICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LmZyb20pICYmIGl0ZW0/LnRvID09PSAnYzJjX3NvZnRwaG9uZV9jbGllbnQnKSB8fCB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoaXRlbT8udG8pKSAmJiAhaXRlbT8uaXNMZWZ0ICYmIGl0ZW0/LmlzSG9sZFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBsZXQgY2FsbGRldGFpbCA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsLmZpbmQoKHJlc0luZm86IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzSW5mbz8uZnJvbSkgJiYgcmVzSW5mbz8udG8gPT09ICdjMmNfc29mdHBob25lX2NsaWVudCcpIHx8IHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNJbmZvPy50bykpICYmICFyZXNJbmZvPy5pc0xlZnQgJiYgcmVzSW5mbz8uaXNIb2xkKVxyXG4gICAgICAgICAgLy8gaWYgKGNhbGxkZXRhaWw/LmlzSG9sZCkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAvLyAgICAgcGFydGljaXBhbnRJZDogW2NhbGxkZXRhaWw/LmlkIHx8IGNhbGxkZXRhaWw/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICAgICAgLy8gICAgIGNvbmZlcmVuY2VJZDogY2FsbGRldGFpbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgLy8gICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgIG11dGU6IGNhbGxkZXRhaWw/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAvLyAgICAgY29uZmVyZW5jZTogY2FsbGRldGFpbD8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXTtcclxuICAgICAgICAgIC8vICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0WzBdPy5pc0NvbmZlcmVuY2VIb2xkICYmIHRoaXMuY3VycmVudENhbGxMaXN0WzBdPy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIC8vICAgICAgIHBhcnRpY2lwYW50SWQ6IFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgIC8vICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgLy8gICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAvLyAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgICAgY29uZmVyZW5jZTogdGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlSG9sZCkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAvLyAgICAgICBwYXJ0aWNpcGFudElkOiBbdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICAvLyAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIC8vICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgICAgbXV0ZTogdGhpcy5jdXJyZW50Q2FsbD8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgIC8vICAgICAgIGNvbmZlcmVuY2U6IHRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkKSB7XHJcbiAgICAgICAgICAgIGxldCBob2xkQ2FsbEluZm8gPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0WzBdLnBhcnRpY2lwYW50cy5maW5kKChjYWxsSW5mbzogYW55KSA9PiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjYWxsSW5mbz8uZnJvbSkgJiYgY2FsbEluZm8/LmNsaWVudClcclxuICAgICAgICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNhbGxJbmZvPy50bykgJiYgY2FsbEluZm8/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhY2FsbEluZm8/LmlzTGVmdCAmJiBjYWxsSW5mbz8uaXNIb2xkKVxyXG4gICAgICAgICAgICBpZiAoaG9sZENhbGxJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbaG9sZENhbGxJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IGhvbGRDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdXRlOiBob2xkQ2FsbEluZm8/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb25mZXJlbmNlOiBob2xkQ2FsbEluZm8/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsLCAnY3VycmVudENvbmZlcmVuY2VDYWxsJylcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRVc2VyID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtPy5pZCA9PSB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkVXNlcikge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXIuSXNVc2VySW5mb1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBzZWxlY3RlZFVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaW5jb21pbmdDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtPy5idXNpbmVzc051bWJlcik7XHJcbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0NhbGw/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBpbmNvbWluZ0NhbGw7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGlja0V4cGFuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0ge307XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHJlc0luZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+ICEhaXRlbT8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgaWYgKHJlc0luZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdLklzVXNlckluZm9TaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgbGV0IGluY29taW5nRGF0YTogYW55ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzKSA9PiByZXM/LmlzSW5jb21pbmdDYWxsICYmICFyZXM/LmlzQWNjZXB0Q2FsbCAmJiAhcmVzPy5pc0xlZnQpO1xyXG4gICAgICAgIGlmIChpbmNvbWluZ0RhdGE/LmlkICYmICF0aGlzLmlzUmluZ2luZyAmJiB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoaW5jb21pbmdEYXRhPy50bykpIHtcclxuICAgICAgICAgIHRoaXMuaXNSaW5naW5nID0gdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpbmNvbWluZ0RhdGE/LmlkICYmIHRoaXMuaXNSaW5naW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmlzUmluZ2luZyA9IHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnRDYWxsTGlzdCcsIHRoaXMuY3VycmVudENhbGxMaXN0KTtcclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0ID0gW1xyXG4gICAgICAgICAgLi4ubmV3IE1hcCh0aGlzLmN1cnJlbnRDYWxsTGlzdC5tYXAoaXRlbSA9PiBbaXRlbS5jb25mZXJlbmNlSWQsIGl0ZW1dKSkudmFsdWVzKClcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHt9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmluZ2luZykge1xyXG4gICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsQWN0aW9uJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmNhbGxBY3Rpb24/LnR5cGUgPT0gJ3JlSm9pbicpIHtcclxuICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgIHRoaXMucmVqb2luSG9zdCh0aGlzLmNhbGxBY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVqb2luSG9zdChjYWxsSW5mbzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZWpvaW5QYXJ0aWNpcGVudEluZm8gPSBjYWxsSW5mbz8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudClcclxuICAgICAgKVxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIDHvuI/ig6MgR2V0IG5ldyB0b2tlbiBmb3Igc2FtZSBjb25mZXJlbmNlXHJcbiAgICAgIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuXHJcbiAgICAgIC8vIDLvuI/ig6MgUmVjb25uZWN0IGRldmljZVxyXG4gICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLnRva2VuLnZhbHVlLCBvcHRpb25zKTtcclxuXHJcbiAgICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgRnJvbTogcmVqb2luUGFydGljaXBlbnRJbmZvLmZyb20sXHJcbiAgICAgICAgICBUbzogcmVqb2luUGFydGljaXBlbnRJbmZvLmZyb20sXHJcbiAgICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICAgIFRva2VuOiB0b2tlbkRhdGEudG9rZW4uaWQsXHJcbiAgICAgICAgICBFeHQ6IHJlam9pblBhcnRpY2lwZW50SW5mby5leHROdW0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY2FsbCA9IHRoaXMuY2FsbDtcclxuICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgZnJvbTogcmVqb2luUGFydGljaXBlbnRJbmZvLmZyb20sXHJcbiAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcmVqb2luUGFydGljaXBlbnRJbmZvPy5mcm9tLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmxvZygnaG9zdCByZWpvaW4gYWRkQ2xpZW50UGFydGljaXBhbnRSZXMnLCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcyk7XHJcbiAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coJ1Jlam9pbmVkIHN1Y2Nlc3NmdWxseScpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlam9pbiBmYWlsZWQnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXMocmVzOiBhbnkpIHtcclxuICAgIGlmIChyZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmlzQ3VycmVudEluY29taW5nQ2FsbExpc3QuaW5jbHVkZXMocmVzLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09ICdhbnN3ZXJlZCcgJiYgcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgR2V0Q29udGFjdHNMaXN0KCkge1xyXG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucmVhZENvbnRhY3RzKHRva2VuKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdBUEkgUmVzcG9uc2U6JywgcmVzKTtcclxuXHJcbiAgICAgICAgLy8gTm90ZTogQ2FwaXRhbCBCIGluIHBob25lQm9va1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnBob25lQm9vaykge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29udGFjdHMgYXJyYXk6JywgdGhpcy5jb250YWN0cyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcclxuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDb250YWN0cyBhcnJheTonLCB0aGlzLmNvbnRhY3RzKTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNvbnRhY3RzOicsIGVycm9yKTtcclxuICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgYWRkUmVzOiBhbnk7XHJcbiAgYXN5bmMgc3RhcnRDYWxsKGNhbGxEYXRhOiBhbnksIGlzTmV3Q29uZmVyZW5jZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc29sZS5sb2coY2FsbERhdGEsICdjYWxsRGF0YScpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgdG86IGNhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGZyb21OdW1iZXI6IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgc2NvcGU6ICdsb2NhbCcsXHJcbiAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgZmlyc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGxhc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGNvdW50cnljb2RlOiBudWxsLFxyXG4gICAgICAgIG51bWJlcjogbnVsbCxcclxuICAgICAgICBudW1vdHA6IG51bGwsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgIGJ1c2luZXNzTnVtYmVyOiBmYWxzZSxcclxuICAgICAgICBjYWxsU2lkOiAnJyxcclxuICAgICAgICBjYWxsU3RhdHVzOiAnJyxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6ICcnLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZGlyZWN0aW9uOiAnb3V0Z29pbmctY2FsbCcsXHJcbiAgICAgICAgZm9yd2FyZGVkVG86ICcnLFxyXG4gICAgICAgIGZyb206IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgaWQ6ICd5eXVnZ2hqYicsXHJcbiAgICAgICAgaW1nOiBjYWxsRGF0YS5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlLFxyXG4gICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICBqb2luZWRBdDogJycsXHJcbiAgICAgICAgbmFtZTogY2FsbERhdGE/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGFydGljaXBhbnRJZDogJycsXHJcbiAgICAgICAgcGhvbmU6IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICByb2xlOiAnY2FsbGVlJyxcclxuICAgICAgICBzdGF0dXM6ICcnLFxyXG4gICAgICAgIHRpbWU6ICcnLFxyXG4gICAgICAgIHRvOiBjYWxsRGF0YT8ucGhvbmUgfHwgJycsXHJcbiAgICAgICAgdG9OYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGNhbGxEYXRhPy51c2VySWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pbml0aWF0ZUNhbGwocGF5bG9hZCk7XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICBjb25zdCB7IGlkOiBjYWxsQXV0aElkLCByZWNvcmRDYWxsLCAgdG9rZW5EYXRhfSA9IGF3YWl0IHRoaXMuZ2V0Q2FsbEF1dGhJZChyZXNwb25zZSk7XHJcbiAgICAgICAgLy8gdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY2FsbEF1dGhJZClcclxuICAgICAgICB0aGlzLnJlY29yZENhbGwgPSByZWNvcmRDYWxsOyAvLyBTdG9yZSB0aGUgcmVjb3JkQ2FsbCB2YWx1ZVxyXG4gICAgICAgIC8vIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsQXV0aElkKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb0RldmljZShjYWxsQXV0aElkLCBjYWxsRGF0YSwgdG9rZW5EYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqbmVlZCB0byB1cGRhdGUqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICAgICAgIGxldCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcyA9IHRoaXMuYWRkQ2xpZW50UGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2FkZENsaWVudFBhcnRpY2lwYW50UmVzJywgYWRkQ2xpZW50UGFydGljaXBhbnRSZXMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRSZXMgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcclxuICAgICAgICAgICAgICBmcm9tOiBjYWxsRGF0YT8uZnJvbSxcclxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBjYWxsRGF0YT8ucGhvbmUsXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiByZXNwb25zZT8uY2FsbGF1dGg/LmlkLFxyXG4gICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc05ld0FkZGVkQ2FsbCA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZXJzaG93LmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSW5pdGlhbCBwYXJ0aWNpcGFudElkOicsIHRoaXMuYWRkUmVzPy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGluaXRpYWwgcGFydGljaXBhbnQ6JywgZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMClcclxuICAgICAgICAvLyBQb2xsIHRoZSBzdGF0dXMgZm9yIDMwLTQ1IHNlY29uZHNcclxuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAxKSB7XHJcbiAgICAgICAgdGhpcy5pc05ld0FkZGVkQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZXJzaG93LmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnIvPlwiKSwgXCJlcnJvclwiKTtcclxuICAgICAgICB0aGlzLmVuZENhbGwoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MycpXHJcbiAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbk11dGVVc2VyKGM6IGFueSkge1xyXG4gICAgdGhpcy5vbk11dGVQYXJ0aWNpcGFudCh7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaG9sZDogYy5ob2xkLFxyXG4gICAgICBtdXRlOiAhYz8uaXNNdXRlLFxyXG4gICAgICBjb25mZXJlbmNlOiBjLmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgfSlcclxuICAgIGMuaXNNdXRlID0gIWMuaXNNdXRlO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoYz8uY29uZmVyZW5jZVNpZCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkhvbGRDYWxsKGM6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coYywgJ2RzZHNkc2RzZHNkc2Fkc2EnKTtcclxuICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaG9sZDogIWMuaG9sZCxcclxuICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgY29uZmVyZW5jZTogYy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIH0pXHJcbiAgICBjLmhvbGQgPSAhYy5ob2xkO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBhc3luYyBvbkVuZEluY29taW5nQ2FsbCgpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgocmVzKSA9PiByZXMucGFydGljaXBhbnRJZCA9PSB0aGlzLmN1cnJlbnRDYWxsLnBhcnRpY2lwYW50SWQpO1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFJlbW92ZVBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LnBhcnRpY2lwYW50SWQsIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XT8uY29uZmVyZW5jZUlkIHx8ICdubycpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcylcclxuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgIHRoaXMuZW5kSW5jb21pbmdDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgYXN5bmMgb25FbmRDYWxsKGM6IGFueSwgaXNBbGxDYWxsRW5kPzogYm9vbGVhbiwgaXNDb250ZWN0PzogYm9vbGVhbikge1xyXG4gICAgLy8gaWYgKCFjPy5pc0FjY2VwdENhbGwgJiYgIWlzQ29udGVjdCAmJiAhaXNBbGxDYWxsRW5kKSB7XHJcbiAgICAvLyAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgocmVzKSA9PiByZXMucGFydGljaXBhbnRJZCA9PSBjLnBhcnRpY2lwYW50SWQpXHJcbiAgICAvLyAgIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHModGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdPy5wYXJ0aWNpcGFudElkLCB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LmNvbmZlcmVuY2VJZCB8fCAnbm8nKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgIC8vICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAvLyAgICAgdGhpcy5jYWxsPy5kaXNjb25uZWN0KCk7XHJcbiAgICAvLyAgICAgdGhpcy5lbmRJbmNvbWluZ0NhbGxFdmVudC5lbWl0KGMpO1xyXG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgfSlcclxuICAgIC8vICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gfVxyXG4gICAgbGV0IHBhcnRpY2lwYW50SWQgPSBpc0FsbENhbGxFbmQgPyAnYWxsJyA6IGMucGFydGljaXBhbnRJZCB8fCBjPy5pZDtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8gPSB0aGlzLmdldEN1cnJlbnRDYWxsSW5mbygpO1xyXG4gICAgbGV0IGNvbmZlcmVuY2VJZCA9IGMuY29uZmVyZW5jZUlkIHx8IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmNvbmZlcmVuY2VJZDtcclxuICAgIGxldCBjb25mZXJlbmNlU2lkID0gYy5jb25mZXJlbmNlU2lkIHx8IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmNvbmZlcmVuY2VTaWQ7XHJcbiAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQpO1xyXG4gICAgaWYgKHJlcz8uc3RhdHVzID09IDIwMSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ3BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcpIHtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZVNpZCk7XHJcbiAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICB0aGlzLmVuZEluY29taW5nQ2FsbEV2ZW50LmVtaXQoYyk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhdGVDYWxsKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pbml0aWF0ZUNhbGwocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFkZFBhcnRpY2lwYW50VG9DYWxsKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2xpZW50UGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmFkZENsaWVudFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDYWxsU3RhdHVzT2ZQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXNPZlBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25NdXRlUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLm9uTXV0ZVBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXHJcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGwsXHJcbiAgICAgIHRva2VuRGF0YTogcmVzcG9uc2UuY2FsbGF1dGgudG9rZW5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSwgdG9rZW5EYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxyXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcclxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICBUb2tlbjogdG9rZW4sXHJcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHRydWUgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGwgPSB0aGlzLmNhbGw7XHJcbiAgICBjb25zb2xlLmxvZygndGVzdDk4OTk4MTExMTExJywgdGhpcy5jYWxsKTtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXN0ZGV2aWNlJywgdGhpcy50d2lsaW9TZXJ2aWNlLmRldmljZSk7XHJcbiAgICAvLyB0aGlzLmNhbGxbJ2NhbGxJbmZvJ10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhbGxEYXRhKSk7XHJcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcclxuXHJcbiAgICB0aGlzLnN0YXJ0VGltZXIoKTtcclxuICAgIHRoaXMuZGV2aWNlPy5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZGlzY29ubmVjdCcsIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3QtZGlzY29ubmVjdCcpXHJcbiAgICAgIHRoaXMuY2FsbD8uZGlzY29ubmVjdCgpO1xyXG4gICAgICAvLyB0aGlzLmVuZENhbGwoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JpbmdpbmcnLCAoKSA9PiB7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdyZWplY3QnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NScpXHJcbiAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignYWNjZXB0JywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBpZCA9IHRoaXMuY2FsbERhdGE/LnBhcnRpY2lwYW50SWQ7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jdXJyZW50Q2FsbExpc3QpICYmIHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gY29uc3QgaWR4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjOiBhbnkpID0+IChwaWQgJiYgYz8ucGFydGljaXBhbnRJZCA9PT0gcGlkKSB8fCAoIXBpZCAmJiBjPy5waG9uZSA9PT0gdGhpcy5jYWxsRGF0YT8ucGhvbmUpKTtcclxuICAgICAgICAgIC8vIGlmIChpZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpZHhdLmlzQWNjZXB0Q2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaWR4XTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHVwZGF0aW5nIGFjY2VwdCBzdGF0ZTonLCBlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdtZXNzYWdlUmVjZWl2ZWQnLCAobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRUaW1lcihqb2luQXQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICgham9pbkF0KSByZXR1cm47XHJcblxyXG4gIGNvbnN0IGpvaW5UaW1lID0gbmV3IERhdGUoam9pbkF0KS5nZXRUaW1lKCkgfHwgMDtcclxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5vdyAtIGpvaW5UaW1lKSAvIDEwMDApO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBzZWNvbmRzKys7XHJcbiAgICAgIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcbiAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMucGFkKGhvdXJzKX06JHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcclxuICB9XHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmVjZUNhbGwoY29uZj86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmYgPSBjb25mO1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyh0aGlzLmhvc3RudW1iZXI/LmZyb20pKSB7XHJcbiAgICAgIHRoaXMub25DYWxsRGlzY29ubmVjdGVkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IGNvbmZlcmVuY2UgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gY29uZj8uY29uZmVyZW5jZUlkKVxyXG4gICAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQpXHJcbiAgICAgICAgaWYgKGNvbmZlcmVuY2U/LmlkKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRW5kQ2FsbChwYXJ0aWNpcGVudEluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBlbmRDYWxsKGlzQWxsQ2FsbEVuZD86IGJvb2xlYW4pIHtcclxuICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGlzQWxsQ2FsbEVuZCkge1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh7fSwgaXNBbGxDYWxsRW5kKTtcclxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgICAgdGhpcy5vbkVuZENhbGwoY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbywgaXNBbGxDYWxsRW5kKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNhbGwpIHtcclxuICAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgdGhpcy5jYWxsLnJlamVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIHRvZ2dsZU11dGUoaXNDb25mZXJlbmNlPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc011dGUgPSAhdGhpcy5pc011dGU7XHJcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW2N1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8ucGFydGljaXBhbnRJZCB8fCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZF0sXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICBob2xkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLmhvbGQsXHJcbiAgICAgIG11dGU6ICFjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pc011dGUsXHJcbiAgICAgIGNvbmZlcmVuY2U6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5jdXJyZW50Q2FsbC5pc011dGUgPSB0aGlzLmlzTXV0ZTtcclxuICB9XHJcblxyXG4gIC8vIGF1ZGlvU3RyZWFtPzogTWVkaWFTdHJlYW07XHJcbiAgLy8gbWljT24gPSBmYWxzZTtcclxuXHJcbiAgLy8gYXN5bmMgdG9nZ2xlTWljKCkge1xyXG4gIC8vICAgaWYgKCF0aGlzLmF1ZGlvU3RyZWFtKSB7XHJcbiAgLy8gICAgIC8vIGZpcnN0IHRpbWU6IHJlcXVlc3QgbWljXHJcbiAgLy8gICAgIHRoaXMuYXVkaW9TdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHRoaXMubWljT24gPSAhdGhpcy5taWNPbjtcclxuXHJcbiAgLy8gICB0aGlzLmF1ZGlvU3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XHJcbiAgLy8gICAgIHRyYWNrLmVuYWJsZWQgPSB0aGlzLm1pY09uOyAgIC8vIGZhbHNlID0gbXV0ZWQsIHRydWUgPSBzZW5kaW5nIGF1ZGlvXHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIGdldEN1cnJlbnRDYWxsSW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0XHJcbiAgICAgIC5mbGF0TWFwKChjYWxsSW5mbzogYW55KSA9PiBjYWxsSW5mby5wYXJ0aWNpcGFudHMpXHJcbiAgICAgIC5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpXHJcbiAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQpO1xyXG4gIH1cclxuICB0b2dnbGVLZXlwYWQoKSB7XHJcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSAnJztcclxuICB9XHJcbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChjYWxsSW5mbz86IGFueSwgaXNDbG9zZT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGlzQ2xvc2UpIHtcclxuICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gIWlzQ2xvc2U7XHJcbiAgICB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB0aGlzLmlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZW1vdmVQYXJ0aWNpcGFudCgpIHtcclxuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VTaWQpO1xyXG4gICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IHRoaXMuYWxsUGFydGljaXBlbnRMaXN0O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkKGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY29uZmVyZW5jZUlkID0gdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQ7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSAmJiB0aGlzLmN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwpIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbdGhpcy5ob3N0bnVtYmVyLnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmhvc3RudW1iZXI/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmhvc3RudW1iZXI/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICBjb25mZXJlbmNlOiB0aGlzLmhvc3RudW1iZXIuaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0luY29taW5nQ2FsbCA/IFt0aGlzLmN1cnJlbnRDYWxsPy5pZF0gOiBbdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgY29uZmVyZW5jZTogdGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudHdpbGlvU2VydmljZT8uaW5jb21pbmdDYWxsRGV0YWlsPy5hY2NlcHQoKTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICByZWNvcmRJZDogZGF0YT8uaWQsXHJcbiAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgIGlwQ291bnRyeTogJycsXHJcbiAgICAgIGNhbGxTdGF0dXM6ICdhbnN3ZXJlZCcsXHJcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICB1c2VySWQ6ICB0aGlzLnVzZXJJZCxcclxuICAgICAgY29tcGFueUlkOiAnJyxcclxuICAgICAgY2xpZW50U2lkOiB0aGlzLnR3aWxpb1NlcnZpY2U/LmluY29taW5nQ2FsbERldGFpbD8ucGFyYW1ldGVycz8uQ2FsbFNpZCxcclxuICAgICAgY29uZmVyZW5jZUlkOiBkYXRhPy5jb25mZXJlbmNlSWQgfHwgJ25vJ1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldEluY29taW5nQ2FsbFN0YXR1cyhwYXlsb2FkKS5zdWJzY3JpYmUoYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIC8vIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5jb25uZWN0KHsgY29uZmVyZW5jZUlkOiByZXMuY29uZmVyZW5jZUlkLCBjb25mZXJlbmNlTmFtZTogcmVzLmNvbmZlcmVuY2VOYW1lIH0pO1xyXG4gICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuaXNDdXJyZW50SW5jb21pbmdDYWxsTGlzdC5wdXNoKGRhdGE/LmlkKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNhbGwsICdjYWxsQ29ubmVjdCcpO1xyXG4gICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgIC8vIGRhdGEuaXNBY2NlcHRDYWxsID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKHJlcykgPT4gcmVzLnBhcnRpY2lwYW50SWQgPT0gZGF0YS5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlLmpvaW4oXCI8YnIvPlwiKSwgXCJlcnJvclwiKTtcclxuICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBhc3luYyBjYWxsQ29udGFjdChjb250YWN0OiBhbnksIGlzVW5zYXZlZE51bWJlcj86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc29sZS5sb2coJ0FkZGluZyBwYXJ0aWNpcGFudDonLCBjb250YWN0KTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNhbGwnLCB0aGlzLmNhbGwpXHJcbiAgICBjb25zdCBwaG9uZU51bWJlciA9IGlzVW5zYXZlZE51bWJlciA/IGNvbnRhY3QgOiBjb250YWN0Py5udW1iZXJzTGlzdD8uWzBdPy5udW1iZXIgfHwgY29udGFjdD8ucGhvbmU7XHJcbiAgICBsZXQgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXMudG8gPT0gcGhvbmVOdW1iZXIgfHwgcmVzLmZyb20gPT0gcGhvbmVOdW1iZXIpO1xyXG4gICAgaWYgKGFscmVhZHlJbkNhbGwpIHtcclxuICAgICAgc3dhbCgnRXJyb3InLCBgQWxyZWFkeSAke3Bob25lTnVtYmVyfSBudW1iZXIgaW4gdGhpcyBjYWxsLmApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYz8ucGhvbmUgPT09IHBob25lTnVtYmVyKTtcclxuICAgIGlmICghcGhvbmVOdW1iZXIgfHwgY3VycmVudENhbGwpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gcGhvbmUgbnVtYmVyIGZvdW5kIGZvciBjb250YWN0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICBsZXQgZGF0YTogYW55ID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tID8gdGhpcy5jYWxsRGF0YT8uZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtkYXRhPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIG5hbWU6IGNvbnRhY3Q/Lm5hbWUgfHwgYCR7Y29udGFjdD8uZmlyc3ROYW1lfSAke2NvbnRhY3Q/Lmxhc3ROYW1lfWAgfHwgcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQgYWRkZWQgdG8gY29uZmVyZW5jZTpcIiwgcGhvbmVOdW1iZXIpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZFxyXG4gICAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBBZGQgcGFydGljaXBhbnQgdG8gdGhlIGNvbmZlcmVuY2VcclxuICAgICAgICBsZXQgZGF0YTogYW55ID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbZGF0YT8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiBmYWxzZSxcclxuICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICAgIHBob25lOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGltZzogY29udGFjdD8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXHJcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHBhcnRpY2lwYW50OicsIGVycm9yKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIENhbGxUb1Vuc2F2ZWROdW1iZXIobnVtYmVyOiBzdHJpbmcsIGlzTmV3Q29uZmVyZW5jZT86IGJvb2xlYW4pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKG51bWJlcik7XHJcbiAgICAgIGlmIChpc0ludmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFscmVhZHlJbkNhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzLnRvID09IG51bWJlciB8fCByZXMuZnJvbSA9PSBudW1iZXIpO1xyXG4gICAgICBpZiAoYWxyZWFkeUluQ2FsbCkge1xyXG4gICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwuYCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChudW1iZXIgPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xyXG4gICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjb250YWN0ID0gdGhpcy5jb250YWN0cy5maW5kKChjb250YWN0OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gY29udGFjdC5udW1iZXJzTGlzdC5zb21lKChudW06IGFueSkgPT4gbnVtLm51bWJlciA9PT0gbnVtYmVyKVxyXG4gICAgICB9KTtcclxuICAgICAgbnVtYmVyID0gYXdhaXQgdGhpcy5nZXRUb051bWJlcihudW1iZXIpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cclxuICAgICAgY29uc3QgY2FsbERhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogY29udGFjdD8uZmlyc3ROYW1lLFxyXG4gICAgICAgIGltZzogY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIHBob25lOiBudW1iZXIsXHJcbiAgICAgICAgZXh0TnVtOiAnJyxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnY2FsbCBzdGFydHRlZCcsIGNhbGxEYXRhKTtcclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhvdXJOdW1iZXJJbmZvLCAnc2VsZkluZm8nKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtvdXJOdW1iZXJJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBvdXJOdW1iZXJJbmZvPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlOiBvdXJOdW1iZXJJbmZvPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENhbGwoY2FsbERhdGEsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FsbENvbnRhY3QobnVtYmVyLCB0cnVlKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUb051bWJlcihkaWFsZWROdW1iZXI6IHN0cmluZykge1xyXG4gICAgaWYgKGRpYWxlZE51bWJlclswXSAhPT0gJysnKSB7XHJcbiAgICAgIC8vIHRoaXMgaXMgY2FzZSB3aGVuIHVzZXIgZ2VvbG9jYXRpb24gZGlhbCBjb2RlIGlzIG9uXHJcbiAgICAgIGxldCBpcEFkZHJlc3M6IGFueSA9IGF3YWl0IHRoaXMuaXBTZXJ2aWNlLmdldElwQWRkcmVzc0luZm8oKS50b1Byb21pc2UoKTtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyLCBpcEFkZHJlc3MuYWRkcmVzcy5jb3VudHJ5Q29kZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiByZXM/LnRvTnVtYmVyXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxlZE51bWJlclxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZGlhbGVkTnVtYmVyXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc0ludmFsaWROdW1iZXIobnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChudW1iZXIgPT0gJycpIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsaWROdW1iZXJQYXR0ZXJuID0gL15bK1xcZFxccygpLV0qJC87IC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB2YWxpZCBjaGFyYWN0ZXJzXHJcbiAgICAgIGNvbnN0IHBob25lTnVtYmVyID0gbnVtYmVyO1xyXG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgIHJldHVybiB0cnVlOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCwgbWVhbmluZyB0aGUgbnVtYmVyIGlzIGludmFsaWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dEaWFsQWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcclxuICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICBzaG93OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGlhbEFsZXJ0LnNob3cgPSBmYWxzZTtcclxuICAgIH0sIDMwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VTaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU2lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gcmVzLnBhcnRpY2lwYW50cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IHRoaXMuYWxsUGFydGljaXBlbnRMaXN0O1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN3YXBDYWxscyhjYWxsSW5mbzogYW55LCBpc0NvbmZlcmVuY2VDYWxsPzogYm9vbGVhbikge1xyXG4gICAgLy8gaWYgKCF0aGlzLmhlbGRDYWxsIHx8ICF0aGlzLmNhbGwpIHJldHVybjtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ3RoaXMuY2FsbCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWxkQ2FsbCwgJ3RoaXMuaGVsZENhbGwnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENhbGxMaXN0LCAndGhpcy5jdXJyZW50Q2FsbExpc3QnKTtcclxuICAgIGNvbnNvbGUubG9nKGNhbGxJbmZvLCAnY2FsbEluZm8gZm9yIHN3YXBDYWxscycpO1xyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGM/LmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50SW5mbyA9IGMucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG11dGU6IHBhcnRpY2lwYW50SW5mbz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZTogcGFydGljaXBhbnRJbmZvPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGFudEluZm8/LmlkICYmICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2U6IHBhcnRpY2lwYW50SW5mbz8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlKSB7XHJcbiAgICAvLyAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgIC8vICAgICB9IGVsc2UgaWYgKGlzQ29uZmVyZW5jZUNhbGwgJiYgYz8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvLmNvbmZlcmVuY2VJZCAmJiBjLmlzQ29uZmVyZW5jZSkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2VcclxuICAgIC8vICAgICB9IGVsc2UgaWYgKGNhbGxJbmZvPy5pc0hvbGQgJiYgYz8ucGFydGljaXBhbnRJZCA9PT0gY2FsbEluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAvLyAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZUlkOiBjLmNvbmZlcmVuY2VJZCxcclxuICAgIC8vICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSBpZiAoaXNDb25mZXJlbmNlQ2FsbCkge1xyXG4gICAgLy8gICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmIGNhbGxJbmZvPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAvLyBjLmlzSG9sZCA9IHRydWU7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSBmYWxzZTtcclxuICAgIC8vICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgLy8gICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0gZWxzZSBpZiAoY2FsbEluZm8/LmlzSG9sZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBjYWxsSW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZTogYz8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY3VycmVudENhbGxMaXN0IGFmdGVyIHN3YXAnLCB0aGlzLmN1cnJlbnRDYWxsTGlzdCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBpc01lcmdlQ2FsbEFsbG93ZWQoKSB7XHJcbiAgICBsZXQgbWVyZ2VDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzKSA9PiByZXMuY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgIHJldHVybiBtZXJnZUNhbGxMaXN0Lmxlbmd0aCA8PSAxO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWVyZ2VDYWxscygpIHtcclxuICAgIC8vIE1lcmdlIGZ1bmN0aW9uYWxpdHkgLSB1bm11dGUgYm90aCBjYWxscyBmb3IgY29uZmVyZW5jZVxyXG4gICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGMuY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBpZiAoYz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgICAgLy8gICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAvLyAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgYy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghY2FsbERhdGEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB1c2VySW5mbyBleGlzdHMgYW5kIGhhcyBtZWFuaW5nZnVsIGRhdGFcclxuICAgIGlmIChjYWxsRGF0YS51c2VySW5mbyAmJiBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbikge1xyXG4gICAgICBjb25zdCBpbmZvID0gY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb247XHJcbiAgICAgIHJldHVybiAhIShcclxuICAgICAgICBpbmZvLnN1YmplY3QgJiYgaW5mby5zdWJqZWN0ICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLmVtYWlsICYmIGluZm8uZW1haWwgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8ubWVzc2FnZSAmJiBpbmZvLm1lc3NhZ2UgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8ucG9pbnROYW1lICYmIGluZm8ucG9pbnROYW1lICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnNvdXJjZU5hbWUgJiYgaW5mby5zb3VyY2VOYW1lICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLmV4dGVuc2lvbiAmJiBpbmZvLmV4dGVuc2lvbiAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby51cmwgfHxcclxuICAgICAgICBpbmZvLmxhdGl0dWRlIHx8XHJcbiAgICAgICAgaW5mby5sb25naXR1ZGVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNhbGxJbnB1dHMobnVtOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtID09ICcrJyB8fCBudW0gPT0gJyonIHx8IG51bSA9PSAnIycpIHtcclxuICAgICAgICBpZiAobnVtID09ICcjJykge1xyXG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQgKyBTdHJpbmcobnVtKTtcclxuICAgICAgICB0aGlzLnNob3dDbGVhckJ0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0ciA9IFN0cmluZyhudW0pO1xyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoc3RyKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQ2FsbElucHV0RW50ZXIoZXY6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZUluY29taW5nQ2FsbChkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhLnNob3cpIHtcclxuICAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGwgYWNjZXB0ZWRcclxuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgaW5jb21pbmdEZXRhaWwgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xyXG4gICAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGluY29taW5nRGV0YWlsLnJlY29yZENhbGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ1JlY29yZENhbGwpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGluY29taW5nIGNhbGwgcmVqZWN0ZWQgb3IgYXV0by1jYW5jZWxsZWRcclxuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG4gICAgICAvLyBJZiB0aGVyZSBpcyBOTyBhY3RpdmUgY2FsbCwgdGhlbiBwcm9wYWdhdGUgZW5kLiBPdGhlcndpc2Uga2VlcCBvbmdvaW5nIFVJLlxyXG4gICAgICBpZiAoIXRoaXMuY2FsbCB8fCB0aGlzLmNhbGwuc3RhdHVzKCkgIT09ICdvcGVuJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NycpXHJcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsZWFySW5wdXRzKCkge1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWluaW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gdHJ1ZTtcclxuICB9XHJcbiAgbWF4aW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhcnRSZWNvcmRpbmcoKSB7XHJcbiAgICBsZXQgc2lkO1xyXG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcclxuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xyXG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZCB8fCB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJjb25mZXJlbmNlSWRcIjogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgfVxyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxSZWNvcmRpbmcocGF5bG9hZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy50aW1lRWxhcHNlZCA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhdXNlUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcodGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLCAncGF1c2UnKS5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3BvbnNlID0+IHtcclxuICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmdUaW1lcigpO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXVzaW5nIHJlY29yZGluZzonLCBlcnJvcik7XHJcbiAgICAgICAgLy8gQ29uc2lkZXIgdXBkYXRpbmcgdGhlIFVJIHRvIHNob3cgdGhlIGVycm9yIHN0YXRlXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlc3VtZVJlY29yZGluZygpIHtcclxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xyXG4gICAgLy8gICByZXR1cm47IC8vIFNraXAgaWYgcmVjb3JkaW5nIGlzIG5vdCBlbmFibGVkXHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsICdyZXN1bWUnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzdW1pbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFRpbWVEaWZmZXJlbmNlKGlucHV0VGltZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhc3RUaW1lID0gbmV3IERhdGUoaW5wdXRUaW1lKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGxldCBkaWZmID0gTWF0aC5mbG9vcigoY3VycmVudFRpbWUgLSBwYXN0VGltZSkgLyAxMDAwKTsgLy8gdG90YWwgc2Vjb25kc1xyXG5cclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGRpZmYgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gZGlmZiAlIDYwO1xyXG5cclxuICAgIGNvbnN0IG1tID0gbWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXM7XHJcbiAgICBjb25zdCBzcyA9IHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzO1xyXG5cclxuICAgIHJldHVybiBgJHttbX06JHtzc31gO1xyXG4gIH1cclxuICBzdGFydFRpbWVyMSgpIHtcclxuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBQYXVzZSB0aGUgdGltZXJcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodGhpcy50aW1lRWxhcHNlZCAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnRpbWVFbGFwc2VkICUgNjA7XHJcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcclxuICB9XHJcbiAgcG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcclxuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDMwMDA7IC8vIFBvbGwgZXZlcnkgMyBzZWNvbmRzXHJcbiAgICBsZXQgZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcclxuICAgICAgZWxhcHNlZFRpbWUgKz0gcG9sbEludGVydmFsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xyXG4gICAgICAgIGlmIChzdGF0dXNSZXNwb25zZSAmJiBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5jYWxsU3RhdHVzID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFN0YXR1cztcclxuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsU2lkID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFNpZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FsbCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MScpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAncmluZ2luZycpIHtcclxuICAgICAgICAgICAgLy8gQ29udGludWUgcG9sbGluZzsgZG8gbm90IGNsZWFyIHRoZSBpbnRlcnZhbCB5ZXRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdNYXggcG9sbGluZyB0aW1lIHJlYWNoZWQuIFN0b3BwaW5nIHBvbGwuJyk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgfSwgcG9sbEludGVydmFsKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpZDogYW55KSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGlkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UsICd1c2VySW5mb3JtYXRpb24nKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG9sZENhbGxMaXN0KCkge1xyXG4gICAgbGV0IGhvbGRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGlzQ29uZmVyZW5jZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjPy5pc0hvbGQgJiYgIWM/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgIGhvbGRMaXN0LnB1c2goYyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGM/LmlzQ29uZmVyZW5jZSAmJiAhaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICBjWydpc0NvbmZlcmVuY2VDYWxsSG9sZCddID0gdHJ1ZTtcclxuICAgICAgICBob2xkTGlzdC5wdXNoKGMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBob2xkTGlzdDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFeHBhbmQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YS5pZCAhPSB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gZGF0YTtcclxuICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9ICF0aGlzLmlzQ2xpY2tFeHBhbmQ7XHJcbiAgICAgIGlmICh0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEluY29taW5nQ2FsbFN0YXR1cyhkYXRhOiBhbnkpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICByZWNvcmRJZDogZGF0YT8uaWQsXHJcbiAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgIGlwQ291bnRyeTogJycsXHJcbiAgICAgIGNhbGxTdGF0dXM6ICdhbnN3ZXJlZCcsXHJcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB8fCBkYXRhLmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gIXRoaXMuaXNTZWFyY2hWaXNpYmxlO1xyXG5cclxuICAgIC8vIGlmIGNsb3Npbmcgc2VhcmNoIOKAlCByZXNldCByZXN1bHRzXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIGlmICghdGhpcy5pc1NlYXJjaFZpc2libGUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLmNvbnRhY3RzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcigpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmlzRGlyZWN0Q2FsbE9wdGlvblNob3cgPSAvXlxcKz9cXGQrJC8udGVzdCh0ZXh0KVxyXG4gICAgaWYgKHRleHQubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiAhY2M/LklzQ29ubmVjdGVkICYmIChjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlcikpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjWydJc0Nvbm5lY3RlZCddID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cy5maWx0ZXIoKGM6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gKGM/LmZpcnN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAoYz8ubWlkZGxlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubmlja05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAoYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoY2M6IGFueSkgPT4gY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIgfHwgY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzFdPy5udW1iZXIpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoZWNrVGV4dEhlaWdodCgpIHtcclxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRleHQtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoZWw/LnNjcm9sbEhlaWdodCA+IGVsPy5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9nZ2xlVGV4dCgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgfVxyXG5cclxuICBzaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcblxyXG4gIC8vIENhbGwgdGhpcyB3aGVuIGNhbGwgZGlzY29ubmVjdHNcclxuICBvbkNhbGxEaXNjb25uZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZW5kQ29uZmVyZW5jZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb25mZXJlbmNlIEVuZGVkJyk7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuc2VsZWN0ZWRDb25mLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQ2FsbCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxlYXZlQ29uZmVyZW5jZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdsZWF2ZVRpbWUnLCB0aGlzLmxlYXZlUmVhc29uKTtcclxuICAgIHRoaXMuc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaXNSZWFzb25DaGVja2VkKSB7XHJcbiAgICAgIGxldCBwYXlsb2FkID0geyBjb25mZXJlbmNlSWQ6IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQgfHwgdGhpcy5ob3N0bnVtYmVyPy5jb25mZXJlbmNlSWQsIHRpbWU6IHRoaXMuY29udmVydEhITU1Ub01pbnV0ZXModGhpcy5sZWF2ZVJlYXNvbiksIHRpbWVyRGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpIH1cclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldFRpbWVyRm9yRW5kQ29uZmVyZW5jZUNhbGwocGF5bG9hZCkuc3Vic2NyaWJlKChyZXMpID0+IHsgfSlcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICBpZiAoY29uZmVyZW5jZT8uaWQpIHtcclxuICAgICAgICB0aGlzLm9uRW5kQ2FsbChwYXJ0aWNpcGVudEluZm8pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuaG9zdG51bWJlcik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjb252ZXJ0SEhNTVRvTWludXRlcyh0aW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgIHJldHVybiAoaG91cnMgKiA2MCkgKyBtaW51dGVzO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2FsbERhdGEuZGlhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkICYmIGN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2NvbGxvcHMnOiBpc0NvbGxvcHMsICdpbmNvbWluZy1jYWxsLWNvbnRhaW5lcic6IGlzQ2xpY2tFeHBhbmQsICdjb250YWN0cy1vcGVuJzogc2hvd0NvbnRhY3RzUGFuZWwgfVwiPlxyXG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmcgfHwgdHJ1ZVwiPiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSBBbGwgdHlwZSBDYWxsIEhvbGQgbGlzdCAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1iYW5uZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmICEhY3VycmVudENhbGwgJiYgKChpc0NvbmZlcmVuY2VDYWxsSG9sZCB8fCBpc0NvbmZlcmVuY2UpIHx8ICFpc0NvbmZlcmVuY2UpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY29uZmVyZW5jZUNhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cImNvbmY/LmlzQ29uZmVyZW5jZUhvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBob2xkLWljb25cIj5wYXVzZV9jaXJjbGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SG9sZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+Q29uZmVyZW5jZSBDYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdFwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjb25mPy5pc0NvbmZlcmVuY2VIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3YXBDYWxscyhjb25mLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cInt7J0hvbGQnfX1cIj4gcGhvbmVfcGF1c2VkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVhcnJvdy1hcnJvdyBtZS0yXCIgaWQ9XCJ0b2dnbGVhcnJvd1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGluY29taW5nIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHB5LTVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxICYmIGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGwgJiYgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8udG8gfHwgJ1Vua25vd25cclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJjdXJyZW50Q2FsbExpc3RbMF0/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTIwXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGxMaXN0WzBdPy5uYW1lID8gY3VycmVudENhbGxMaXN0WzBdPy5uYW1lIDogY3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB8fCAnVW5rbm93blxyXG4gICAgICAgICAgICAgICAgICAgIE51bWJlcicgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhIWN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZVwiPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhbmV3SW5jb21pbmdDYWxsc0xpc3RbMF0/LmlzQ2FsbENvbm5lY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZVwiIChjbGljayk9XCJhZGQoY3VycmVudENhbGxMaXN0WzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiID4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWplY3QtYnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGxfZW5kXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIighaXNDb25mZXJlbmNlIHx8IGlzQ29uZmVyZW5jZUNhbGxIb2xkKSAmJiAoISFjdXJyZW50Q2FsbD8uaWQgJiYgIWN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpICYmIGN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiIGNsYXNzPVwiYWN0aXZlLWNhbGxcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cImN1cnJlbnRDYWxsPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgIDxoMSBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fVxyXG4gICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGw/LnBob25lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luLXRvcDogNHB4XCI+e3tjdXJyZW50Q2FsbD8udGltZSB8fCB0aW1lcn19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRuc1wiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc3MjN4J31cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaGVsZC1idG4gbWVyZ2UtYnRuXCIgKGNsaWNrKT1cIm1lcmdlQ2FsbHMoKVwiIHRpdGxlPVwiTWVyZ2UgY2FsbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNZXJnZUNhbGxBbGxvd2VkKCkgfHwgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA8IDJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWVyZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGN1cnJlbnRDYWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzXzIgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGNvbmZlcmVuY2UgY2FsbCB2aWV3IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25mZXJlbmNlLWNhbGwtdmlld1wiICpuZ0lmPVwiaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLWljb24gbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLXRpdGxlXCI+Q29uZmVyZW5jZSBDYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLXRleHQgY29uZi1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbCBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYWxsPy5pc0NvbmZlcmVuY2VIb2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgIT0gMFwiPiY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhbGw/LmNsaWVudFwiPnt7Y2FsbD8uZGlyZWN0aW9uID09IFwib3V0Z29pbmctY2FsbFwiID8gY2FsbD8uZnJvbU5hbWUgfHwgY2FsbD8uZnJvbSA6IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byB8fCAnVW5rbm93biBudW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjYWxsPy5jbGllbnRcIj57e2NhbGw/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIiA/IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byA6IGNhbGw/LmZyb21OYW1lIHx8IGNhbGw/LmZyb20gfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyB0aW1lciB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zIG10LWF1dG9cIiAqbmdJZj1cIiFzaG93S2V5cGFkXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNNdXRlfVwiIChjbGljayk9XCJ0b2dnbGVNdXRlKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHt7IGlzTXV0ZSA/ICdtaWNfb2ZmJyA6ICdtaWMnIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3Vwc18yIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG4gZGFuZ2VyXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuZWNlQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiM1wiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSW5jb21pbmcgY2FsbCB1c2VyIGRldGFpbHMgc2hvd24gaW4gbW9kZWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXItbW9kZWwgcC0zIHRleHQtd2hpdGUgbW9kZWwtY29udGVudCBjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNDbGlja0V4cGFuZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIHVzZXItaW5mby1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+QzJDIC1QT0lOVCB7e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTFcIj5OYW1lOjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXdoaXRlIHVzZXJOYW1lXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5uYW1lfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYtMTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+TnVtYmVyOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5udW1iZXJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+RXh0ZW5zaW9uOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uZXh0ZW5zaW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPkVtYWlsOiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e3NlbGVjdGVkVXNlckluZm8/LmVtYWlsfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlN1YmplY3Q6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHN1YmplY3QtdGV4dFwiIHRpdGxlPVwie3tzZWxlY3RlZFVzZXJJbmZvPy5zdWJqZWN0fX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRVc2VySW5mbz8uc3ViamVjdH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTIgbWItMVwiPkltYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgJiYgc2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgIT09ICctJzsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e3NlbGVjdGVkVXNlckluZm8/LmltYWdlfX1cIiBhbHQ9XCJcIiB3aWR0aD1cIjE1MFwiIGNsYXNzPVwibWwtMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5ObyBJbWFnZSBBdmFpbGFibGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5NZXNzYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW2NsYXNzLmV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIj57e3NlbGVjdGVkVXNlckluZm8/Lm1lc3NhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0b2dnbGUtYnRuXCIgKm5nSWY9XCJzaG93QnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVRleHQoKVwiPnt7IGlzRXhwYW5kZWQgPyAnU2VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzcycgOiAnU2VlIG1vcmUnIH19PC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPlBvaW50IE5hbWU6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj57e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5Tb3VyY2UgTmFtZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uc291cmNlTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGNvbnRhY3QgbGlzdCBwYW5lbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXY+UGFydGljaXBhbnQ8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoe30sIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDAwMDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFNFQVJDSCBJTlBVVCAodmlzaWJsZSB3aGVuIGlzU2VhcmNoVmlzaWJsZSA9IHRydWUpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIHAtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChpbnB1dCk9XCJhcHBseUZpbHRlcigpXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWN0cy1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdJZj1cInNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yz8uZmlyc3ROYW1lfX0ge3tjPy5taWRkbGVOYW1lfX0ge3tjPy5sYXN0TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjPy5udW1iZXJzTGlzdCAmJiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiQWRkIHRvIGNvbmZlcmVuY2UgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWM/LklzQ29ubmVjdGVkXCIgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXJlZExpc3QubGVuZ3RoICYmIGlzRGlyZWN0Q2FsbE9wdGlvblNob3cgJiYgc2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCInYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IHNlYXJjaFRleHQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0biBtci0yXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgdG8gY29uZmVyZW5jZSBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPkluIFRoaXMgQ2FsbDwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwiIWM/LmlzTGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjPy50byA9PSAnY2xpZW50JyBlbHNlIHBhcnRpY2lwZW50SW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+WW91XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgYz8uZnJvbSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pYy1idG4gbXItMlwiIFtkaXNhYmxlZF09XCJjPy5ob2xkXCIgKGNsaWNrKT1cIm9uTXV0ZVVzZXIoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiYz8uaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhYz8uaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjPy5ob2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCIhYz8uaG9sZCA/ICdIb2xkJyA6ICdSZXN1bWUnXCI+IHBob25lX3BhdXNlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJvbkVuZENhbGwoYywgZmFsc2UsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJ0aWNpcGVudEluZm8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiICpuZ0lmPVwiIWM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCJjPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b05hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Vua25vd24nfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM/LnRvTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5rbm93bicgOiBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiYz8uZnJvbSA9PSBob3N0bnVtYmVyPy5mcm9tICYmIGM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pYy1idG4gbXItMlwiIFtkaXNhYmxlZF09XCJjPy5ob2xkXCIgKGNsaWNrKT1cIm9uTXV0ZVVzZXIoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiYz8uaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhYz8uaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjPy5ob2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIiAqbmdJZj1cIiFjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBbdGl0bGVdPVwiIWM/LmhvbGQgPyAnSG9sZCcgOiAnUmVzdW1lJ1wiPiBwaG9uZV9wYXVzZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwib25FbmRDYWxsKGMsIGZhbHNlLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjPy5ob3N0ICYmIGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8uZnJvbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgcHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPlBhcnRpY2lwYW50IGFkZGVkIHRvIHRoZSBjYWxsPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCJjPy5pc0xlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9OYW1lIHx8ICdVbmtub3duJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYz8udG9OYW1lIHx8ICdVbmtub3duJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmtub3duJyA6IGM/LnRvIHx8ICdVbmtub3duJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cImM/LmZyb20gPT0gaG9zdG51bWJlcj8uZnJvbSAmJiBjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG4gY29udGFjdC1hZGQtYnRuXCIgKm5nSWY9XCIhYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoYy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG8gOiBjPy5mcm9tKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlJlam9pbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cImM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gOiBjPy50bylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5SZWpvaW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibWluLWNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpc01pbmltaXNlZFwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZ1bGxzY3JlZW5cIiAoY2xpY2spPVwibWF4aW1pc2VEaWFscGFkKClcIj4gb3Blbl9pbl9mdWxsIDwvc3Bhbj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbC1hbmltYXRpb25cIiBpZD1cImNhbGwtYXZhdGFyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWluLWF2YXRhci1pbWdcIiBbc3JjXT1cImNhbGxEYXRhLmltZ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NhbGxEYXRhLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPnt7Y2FsbERhdGEuZGlzcGxheU51bSA/IGNhbGxEYXRhLmRpc3BsYXlOdW0gOiBjYWxsRGF0YS5waG9uZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtaW4tYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdGltZXJcIj57e3RpbWVyfX08L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtc2VjLWJ0blwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIENhbGwgRGlzY29ubmVjdCBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiICpuZ0lmPVwic2hvd0Rpc2Nvbm5lY3RNb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlciBwLTAgcGItMlwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ0aXRsZSBtYi0wXCI+Q2FsbCBEaXNjb25uZWN0ZWQ8L2g0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwic2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDAwMDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YW50LWJvZHkgbWItMlwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgIEV4aXRpbmcgdGhpcyBjYWxsIHdpbGwgbm90IGVuZCB0aGUgY29uZmVyZW5jZS4gVGhlIHNlc3Npb24gd2lsbCBjb250aW51ZSwgYW5kIGNoYXJnZXMgd2lsbCBpbmN1ciB0b1xyXG4gICAgICAgICAgICAgICAgeW91clxyXG4gICAgICAgICAgICAgICAgYWNjb3VudC5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJpc1JlYXNvbkNoZWNrZWRcIiBjbGFzcz1cIm1lLTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRpbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcmVhc29uXCIgWyhuZ01vZGVsKV09XCJsZWF2ZVJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc1JlYXNvbkNoZWNrZWRcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImxlYXZlQ29uZmVyZW5jZSgpXCI+XHJcbiAgICAgICAgICAgICAgICBMZWF2ZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuY2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgRW5kIEFsbFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
1694
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQXVCOUMsTUFBTSxPQUFPLHFCQUFxQjtJQXFGaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDNUUsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM1RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBcEZ2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFLdEIsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVB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Q0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNsRCxPQUFPLENBQUMsQ0FBQyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQzFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JJLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFD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LENBQUM7U0FDakM7SUFFSCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7O21IQXRzRFUscUJBQXFCO3VHQUFyQixxQkFBcUIsNmxCQy9CbEMsZ2xnQ0FnaUJNOzRGRGpnQk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjsyT0FLcEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFtQkcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FsbCwgRGV2aWNlIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFR3aWxpb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBrZXlwYWQgfSBmcm9tICcuLi8uLi8uLi9rZXlwYWQnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElOQ09NSU5HX0NBTExfQVVESU9fQkFTRTY0IH0gZnJvbSAnLi9hdWRpb19iYXNlNjQuYmFzZTY0JztcclxuaW1wb3J0IHsgSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2luY29tZWluZy1jYWxsLXNvY2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaXAtYWRkcmVzcy5zZXJ2aWNlJztcclxuXHJcblxyXG5pbnRlcmZhY2UgQ2FsbERldGFpbHMge1xyXG4gIGNhbGxTaWQ6IHN0cmluZztcclxuICBjYWxsU3RhdHVzOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIENhbGxTdGF0dXNSZXNwb25zZSB7XHJcbiAgY2FsbERldGFpbHM6IENhbGxEZXRhaWxzO1xyXG4gIHJlc3BvbnNlOiBzdHJpbmc7XHJcbiAgZXJyb3JUeXBlOiBudW1iZXI7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHN0YXR1czogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWxsLXByb2dyZXNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGxQcm9ncmVzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjYWxsRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxEYXRhPzogQ2FsbDtcclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgY2FsbGVySWRMaXN0OiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xyXG4gIEBJbnB1dCgpIGNhbGxBY3Rpb246IGFueTtcclxuICBASW5wdXQoKSBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICB1c2VySWQ6IGFueTtcclxuICBAT3V0cHV0KCkgZW5kQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbHNOZXdJbmZvOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIGRldmljZT86IERldmljZTtcclxuICBjYWxsITogQ2FsbCB8IGFueTtcclxuICBzaG93UmluZ0FuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyOiBzdHJpbmcgPSAnMDA6MDAnO1xyXG4gIGludGVydmFsSWQ6IGFueTtcclxuICBzaG93S2V5cGFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xyXG4gIGNhbGxJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgaXNNdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYmFsZUVuZENhbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dDbGVhckJ0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ29sbG9wcyA9IGZhbHNlO1xyXG4gIGN1cnJlbnRDYWxsOiBhbnk7XHJcbiAgLy8gQ29uZmVyZW5jZSBzdGF0ZSBmbGFnXHJcbiAgaXNDb25mZXJlbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNPdXRnb2luZ0NhbGw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8vIEluY29taW5nIGNhbGwgdmFyaWFibGVzXHJcbiAgaW5jb21pbmdDYWxsRGl2OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlcnNob3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgZW5kSW5jb21pbmdDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLy8gUmVjb3JkaW5nIHZhcmlhYmxlc1xyXG4gIGNhbGxTaWQ6IGFueTtcclxuICBpc1JlY29yZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGltZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgdGltZUVsYXBzZWQgPSAwOyAvLyBpbiBzZWNvbmRzXHJcbiAgcmVjb3JkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluY29taW5nQ2FsbFNpZDogYW55O1xyXG4gIGNhbGxTdGF0dXM6IHN0cmluZyA9ICdyaW5naW5nJztcclxuICBpbmNvbWluZ1JlY29yZENhbGw/OiBhbnk7XHJcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGw6IGFueTtcclxuICBzaG93Q29udGFjdHNQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQWRkUmVtb3ZlUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0NvbmN1cnJlbnRJbmNvbWluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlbGRDYWxsPzogQ2FsbDtcclxuICBpc0NhbGxPbkhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb250YWN0czogYW55W10gPSBbXTtcclxuICBjdXJyZW50Q2FsbExpc3Q6IGFueVtdID0gW107XHJcbiAgY29uZmVyZW5jZUlkOiBhbnk7XHJcbiAgYWxsUGFydGljaXBlbnRMaXN0OiBhbnk7XHJcbiAgaXNDbGlja0V4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ2FsbEluUHJvZ3Jlc3MhOiBib29sZWFuO1xyXG4gIGlzQ3VycmVudEluY29taW5nQ2FsbExpc3Q6IGFueSA9IFtdO1xyXG4gIGlzQ29uZmVyZW5jZUNhbGxIb2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRVc2VySW5mbzogYW55O1xyXG4gIGlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICBzZWFyY2hUZXh0ID0gJyc7XHJcbiAgZmlsdGVyZWRMaXN0OiBhbnkgPSBbXTtcclxuICBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdDogYW55O1xyXG4gIHNob3dCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Jpbmdpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0RpcmVjdENhbGxPcHRpb25TaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlhbEFsZXJ0ID0ge1xyXG4gICAgbXNnOiAnJyxcclxuICAgIHNob3c6IGZhbHNlXHJcbiAgfVxyXG4gIGxlZnRQYXJ0aWNpcGVudDogYW55ID0ge307XHJcbiAgY29uZmVyZW5jZUNhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhvc3RudW1iZXI6IGFueTtcclxuICBpc05ld0FkZGVkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRldmljZU51bWJlckxpc3Q6IGFueSA9IFtdO1xyXG4gIG91ck51bWJlckluZm86IGFueSA9IHt9O1xyXG4gIGN1cnJlbnRDb25mZXJlbmNlQ2FsbDogYW55ID0ge307XHJcbiAgaXNSZWFzb25DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGVhdmVSZWFzb246IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkQ29uZjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSxcclxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZTogSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2VcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYWxsIFByb2dyZXNzIENvbXBvbmVudCcpO1xyXG4gICAgdGhpcy5jYWxsID0gdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYWxsIFByb2dyZXNzIENvbXBvbmVudCBuZ09uSW5pdCcpO1xyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGluY29taW5nIGNhbGxzIGZyb20gVHdpbGlvU2VydmljZVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZSgoaW5jb21pbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghaW5jb21pbmcpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R3aWxpb1NlcnZpY2UuY3VycmVudENhbGwgZW1pdHRlZDonLCBpbmNvbWluZyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NvbmN1cnJlbnQgaW5jb21pbmcgZGV0ZWN0ZWQgLSBzaG93aW5nIGJhbm5lcicpO1xyXG4gICAgICAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdWJzY3JpYmluZyB0byBpbmNvbWluZyBjYWxsczonLCBlKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGV2aWNlTnVtYmVyTGlzdCA9IHRoaXMuY2FsbGVySWRMaXN0Lm1hcCgocmVzOiBhbnkpID0+IHJlcy5udW1iZXIpO1xyXG4gICAgdGhpcy5HZXRDb250YWN0c0xpc3QoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICh0aGlzLnVzZXJJZCkge1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkID0gdGhpcy51c2VySWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xyXG4gICAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmlzSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uZGlzcGxheU51bSB8fCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uZnJvbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0LXN0YXJ0Q2FsbDEyMycsIGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7XHJcbiAgICAgICAgICAuLi5jaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgIGlkOiAnMTI1JyxcclxuICAgICAgICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICAgIGlzTXV0ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgaXNBY2NlcHRDYWxsOiB0cnVlLFxyXG4gICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgIHBob25lOiBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8ucGhvbmUsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiAnMTIxJyxcclxuICAgICAgICAgIG5hbWU6IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5uYW1lIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tTmFtZSB8fCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8udG9OYW1lIHx8ICcnLFxyXG4gICAgICAgICAgdGltZTogdGhpcy50aW1lcixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc3RhcnRDYWxsKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ25ld0luY29taW5nQ2FsbHNMaXN0J10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoIHx8IGNoYW5nZXNbJ25ld0luY29taW5nQ2FsbHNMaXN0J10/LnByZXZpb3VzVmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZU51bWJlckxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VJZCA9IGkgPT0gMCA/IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0uY29uZmVyZW5jZUlkIDogdGhpcy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICBsZXQgb3VyTnVtYmVySW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMuaXNNdXRlID0gIW91ck51bWJlckluZm8/LmlzSG9sZCA/IG91ck51bWJlckluZm8/LmlzTXV0ZSA6IHRoaXMuaXNNdXRlO1xyXG4gICAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0ucGFydGljaXBhbnRzLmZvckVhY2goYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcz8uaG9zdCAmJiAhcmVzPy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdG51bWJlciA9IHJlcztcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RzLmZpbmQoKHJlc0RhdGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzRGF0YT8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciA9PSAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvKVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHJlcz8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgIGltZzogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LnRvSW1hZ2UgOiByZXM/LmZyb21JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogb3VyTnVtYmVySW5mbz8uaXNIb2xkIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogcmVzPy5pc0NvbmZlcmVuY2UgfHwgdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VTaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiByZXM/LmlzTGVmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LmlkID09IHRoaXMuY3VycmVudENhbGw/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPiAwID8gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0gOiB7fTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmN1cnJlbnRDYWxsPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy50b0ltYWdlIDogcmVzPy5mcm9tSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IG91ck51bWJlckluZm8/LmlzSG9sZCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogcmVzPy5pc011dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHJlcy5pc0NvbmZlcmVuY2UgPyByZXMuaXNDb25mZXJlbmNlIDogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0aGlzLmdldFN0YXR1cyhyZXMpIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzPy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzPy5uYW1lIHx8IHJlcz8uZnJvbU5hbWUgfHwgcmVzPy50b05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHJlcz8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXMuaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LnRvSW1hZ2UgOiByZXM/LmZyb21JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiByZXM/LmlzTXV0ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHJlcy5pc0NvbmZlcmVuY2UgPyByZXMuaXNDb25mZXJlbmNlIDogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIocmVzPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmxlZnRQYXJ0aWNpcGVudFtjYWxsSW5mbz8uY29uZmVyZW5jZUlkXSA9IFsuLi5uZXcgTWFwKGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0/LmlzTGVmdCA9PT0gdHJ1ZSkubWFwKChpdGVtOiBhbnkpID0+IFtpdGVtPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gaXRlbT8udG8gfHwgJ1Vua25vd24nIDogaXRlbT8uZnJvbSwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IHZhbGlkVmFsdWVzID0gbmV3IFNldCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdmFsaWRWYWx1ZXMuaGFzKGl0ZW0/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHRoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWQgPT0gcmVzPy5wYXJ0aWNpcGFudElkICYmICFyZXM/LmlzQ29uZmVyZW5jZUhvbGQpO1xyXG4gICAgICAgIGxldCBjdXJyZW50Q2FsbDphbnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbT8ucGFydGljaXBhbnRzPy5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQpIHtcclxuICAgICAgICAgICAgICBjdXJyZW50Q2FsbC5wdXNoKHBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCAmJiAhcGFydGljaXBhbnQ/LmlzSG9sZFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID09IDIgJiYgdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXT8uaWQpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gIXJlcz8uaXNDb25mZXJlbmNlSG9sZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzPy5sZW5ndGggPiAyICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMV0/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiAhcmVzPy5pc0NvbmZlcmVuY2VIb2xkKTtcclxuICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCAmJiAhdGhpcy5pc05ld0FkZGVkQ2FsbCkge1xyXG4gICAgICAgICAgLy8gdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICByZXR1cm4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoaXRlbT8uZnJvbSkgJiYgaXRlbT8udG8gPT09ICdjMmNfc29mdHBob25lX2NsaWVudCcpIHx8IHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy50bykpICYmICFpdGVtPy5pc0xlZnQgJiYgIWl0ZW0/LmlzSG9sZFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8ucGFydGljaXBhbnRJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkICYmIHJlcz8uaXNBY2NlcHRDYWxsICYmICFyZXM/LmlzQ29uZmVyZW5jZUhvbGQpXHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5pZCAmJiB0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy5mcm9tKSAmJiBpdGVtPy50byA9PT0gJ2MyY19zb2Z0cGhvbmVfY2xpZW50JykgfHwgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSkgJiYgIWl0ZW0/LmlzTGVmdCAmJiBpdGVtPy5pc0hvbGRcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gbGV0IGNhbGxkZXRhaWwgPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbC5maW5kKChyZXNJbmZvOiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0luZm8/LmZyb20pICYmIHJlc0luZm8/LnRvID09PSAnYzJjX3NvZnRwaG9uZV9jbGllbnQnKSB8fCB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzSW5mbz8udG8pKSAmJiAhcmVzSW5mbz8uaXNMZWZ0ICYmIHJlc0luZm8/LmlzSG9sZClcclxuICAgICAgICAgIC8vIGlmIChjYWxsZGV0YWlsPy5pc0hvbGQpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgLy8gICAgIHBhcnRpY2lwYW50SWQ6IFtjYWxsZGV0YWlsPy5pZCB8fCBjYWxsZGV0YWlsPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgIC8vICAgICBjb25mZXJlbmNlSWQ6IGNhbGxkZXRhaWw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIC8vICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgIC8vICAgICBtdXRlOiBjYWxsZGV0YWlsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgIGNvbmZlcmVuY2U6IGNhbGxkZXRhaWw/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGlmICghdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF07XHJcbiAgICAgICAgICAvLyAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uaXNDb25mZXJlbmNlSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAvLyAgICAgICBwYXJ0aWNpcGFudElkOiBbdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICAvLyAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIC8vICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgICAgbXV0ZTogdGhpcy5jdXJyZW50Q2FsbD8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgIC8vICAgICAgIGNvbmZlcmVuY2U6IHRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgICAgLy8gICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZUhvbGQpIHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgLy8gICAgICAgcGFydGljaXBhbnRJZDogW3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICAgICAgLy8gICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAvLyAgICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgIC8vICAgICAgIG11dGU6IHRoaXMuY3VycmVudENhbGw/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAvLyAgICAgICBjb25mZXJlbmNlOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8gPSB0aGlzLmdldEN1cnJlbnRDYWxsSW5mbygpO1xyXG4gICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICBsZXQgaG9sZENhbGxJbmZvID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFswXS5wYXJ0aWNpcGFudHMuZmluZCgoY2FsbEluZm86IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoY2FsbEluZm8/LmZyb20pICYmIGNhbGxJbmZvPy5jbGllbnQpXHJcbiAgICAgICAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjYWxsSW5mbz8udG8pICYmIGNhbGxJbmZvPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIWNhbGxJbmZvPy5pc0xlZnQgJiYgY2FsbEluZm8/LmlzSG9sZClcclxuICAgICAgICAgICAgaWYgKGhvbGRDYWxsSW5mbz8uaWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2hvbGRDYWxsSW5mbz8uaWRdLFxyXG4gICAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBob2xkQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXV0ZTogaG9sZENhbGxJbmZvPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uZmVyZW5jZTogaG9sZENhbGxJbmZvPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCwgJ2N1cnJlbnRDb25mZXJlbmNlQ2FsbCcpXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkVXNlciA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZFVzZXIpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VyLklzVXNlckluZm9TaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gc2VsZWN0ZWRVc2VyO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGluY29taW5nQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgICBpZiAoaW5jb21pbmdDYWxsPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gaW5jb21pbmdDYWxsO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHt9O1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCByZXNJbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiAhIWl0ZW0/LmJ1c2luZXNzTnVtYmVyKTtcclxuICAgICAgICAgIGlmIChyZXNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XS5Jc1VzZXJJbmZvU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGxldCBpbmNvbWluZ0RhdGE6IGFueSA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlcykgPT4gcmVzPy5pc0luY29taW5nQ2FsbCAmJiAoIXJlcz8uaXNBY2NlcHRDYWxsICYmIHJlcz8uY2FsbFN0YXR1cyAhPSAncGFydGljaXBhbnQtam9pbicgKSYmICFyZXM/LmlzTGVmdCk7XHJcbiAgICAgICAgaWYgKGluY29taW5nRGF0YT8uaWQgJiYgIXRoaXMuaXNSaW5naW5nICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpbmNvbWluZ0RhdGE/LnRvKSkge1xyXG4gICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWluY29taW5nRGF0YT8uaWQgJiYgdGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgIHRoaXMuaXNSaW5naW5nID0gdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudENhbGxMaXN0JywgdGhpcy5jdXJyZW50Q2FsbExpc3QpO1xyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QgPSBbXHJcbiAgICAgICAgICAuLi5uZXcgTWFwKHRoaXMuY3VycmVudENhbGxMaXN0Lm1hcChpdGVtID0+IFtpdGVtLmNvbmZlcmVuY2VJZCwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSaW5naW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbGxBY3Rpb24nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuY2FsbEFjdGlvbj8udHlwZSA9PSAncmVKb2luJykge1xyXG4gICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgdGhpcy5yZWpvaW5Ib3N0KHRoaXMuY2FsbEFjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWpvaW5Ib3N0KGNhbGxJbmZvOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlam9pblBhcnRpY2lwZW50SW5mbyA9IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgLy8gMe+4j+KDoyBHZXQgbmV3IHRva2VuIGZvciBzYW1lIGNvbmZlcmVuY2VcclxuICAgICAgY29uc3QgdG9rZW5EYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpO1xyXG5cclxuICAgICAgLy8gMu+4j+KDoyBSZWNvbm5lY3QgZGV2aWNlXHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgICBjb2RlY1ByZWZlcmVuY2VzOiBbJ29wdXMnLCAncGNtdSddLFxyXG4gICAgICAgIGNsb3NlUHJvdGVjdGlvbjogdHJ1ZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh0b2tlbkRhdGEudG9rZW4udmFsdWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy5kZXZpY2UuY29ubmVjdCh7XHJcbiAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICBGcm9tOiByZWpvaW5QYXJ0aWNpcGVudEluZm8uZnJvbSxcclxuICAgICAgICAgIFRvOiByZWpvaW5QYXJ0aWNpcGVudEluZm8udG8sXHJcbiAgICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICAgIFRva2VuOiB0b2tlbkRhdGEudG9rZW4uaWQsXHJcbiAgICAgICAgICBFeHQ6IHJlam9pblBhcnRpY2lwZW50SW5mby5leHROdW0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY2FsbCA9IHRoaXMuY2FsbDtcclxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuY2FsbCcsIHRoaXMuY2FsbCk7XHJcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcyA9IHRoaXMuYWRkQ2xpZW50UGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIGZyb206IHJlam9pblBhcnRpY2lwZW50SW5mby5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHJlam9pblBhcnRpY2lwZW50SW5mbz8udG8sXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiByZWpvaW5QYXJ0aWNpcGVudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgIGNsaWVudFNpZDogdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydDYWxsU2lkJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdob3N0IHJlam9pbiBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcycsIGFkZENsaWVudFBhcnRpY2lwYW50UmVzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhZGRDbGllbnRQYXJ0aWNpcGFudDonLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCdSZWpvaW5lZCBzdWNjZXNzZnVsbHknKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdSZWpvaW4gZmFpbGVkJywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzKHJlczogYW55KSB7XHJcbiAgICBpZiAocmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICByZXR1cm4gcmVzPy5jYWxsU3RhdHVzID09IFwicGFydGljaXBhbnQtam9pblwiID8gdHJ1ZSA6IHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuaXNDdXJyZW50SW5jb21pbmdDYWxsTGlzdC5pbmNsdWRlcyhyZXMuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gJ2Fuc3dlcmVkJyAmJiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBHZXRDb250YWN0c0xpc3QoKSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5yZWFkQ29udGFjdHModG9rZW4pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FQSSBSZXNwb25zZTonLCByZXMpO1xyXG5cclxuICAgICAgICAvLyBOb3RlOiBDYXBpdGFsIEIgaW4gcGhvbmVCb29rXHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucGhvbmVCb29rKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb250YWN0cyBhcnJheTonLCB0aGlzLmNvbnRhY3RzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NvbnRhY3RzIGFycmF5OicsIHRoaXMuY29udGFjdHMpO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGFjdHM6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuY29udGFjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBhZGRSZXM6IGFueTtcclxuICBhc3luYyBzdGFydENhbGwoY2FsbERhdGE6IGFueSwgaXNOZXdDb25mZXJlbmNlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zb2xlLmxvZyhjYWxsRGF0YSwgJ2NhbGxEYXRhJyk7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICB0bzogY2FsbERhdGEucGhvbmUsXHJcbiAgICAgICAgZnJvbU51bWJlcjogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBzY29wZTogJ2xvY2FsJyxcclxuICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICBmaXJzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgbGFzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgY291bnRyeWNvZGU6IG51bGwsXHJcbiAgICAgICAgbnVtYmVyOiBudWxsLFxyXG4gICAgICAgIG51bW90cDogbnVsbCxcclxuICAgICAgICBleHRlbnNpb246IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NOdW1iZXI6IGZhbHNlLFxyXG4gICAgICAgIGNhbGxTaWQ6ICcnLFxyXG4gICAgICAgIGNhbGxTdGF0dXM6ICcnLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogJycsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBkaXJlY3Rpb246ICdvdXRnb2luZy1jYWxsJyxcclxuICAgICAgICBmb3J3YXJkZWRUbzogJycsXHJcbiAgICAgICAgZnJvbTogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBpZDogJ3l5dWdnaGpiJyxcclxuICAgICAgICBpbWc6IGNhbGxEYXRhLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgaXNBY2NlcHRDYWxsOiB0cnVlLFxyXG4gICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2UsXHJcbiAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgIGpvaW5lZEF0OiAnJyxcclxuICAgICAgICBuYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiAnJyxcclxuICAgICAgICBwaG9uZTogY2FsbERhdGE/LnBob25lIHx8ICcnLFxyXG4gICAgICAgIHJvbGU6ICdjYWxsZWUnLFxyXG4gICAgICAgIHN0YXR1czogJycsXHJcbiAgICAgICAgdGltZTogJycsXHJcbiAgICAgICAgdG86IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICB0b05hbWU6IGNhbGxEYXRhPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgY2FsbERhdGE/LnVzZXJJZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluaXRpYXRlQ2FsbChwYXlsb2FkKTtcclxuICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IHsgaWQ6IGNhbGxBdXRoSWQsIHJlY29yZENhbGwsICB0b2tlbkRhdGF9ID0gYXdhaXQgdGhpcy5nZXRDYWxsQXV0aElkKHJlc3BvbnNlKTtcclxuICAgICAgICAvLyB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjYWxsQXV0aElkKVxyXG4gICAgICAgIHRoaXMucmVjb3JkQ2FsbCA9IHJlY29yZENhbGw7IC8vIFN0b3JlIHRoZSByZWNvcmRDYWxsIHZhbHVlXHJcbiAgICAgICAgLy8gY29uc3QgdG9rZW5EYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvRGV2aWNlKGNhbGxBdXRoSWQsIGNhbGxEYXRhLCB0b2tlbkRhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZCk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gKioqKioqKioqKioqKipuZWVkIHRvIHVwZGF0ZSoqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgZnJvbTogY2FsbERhdGE/LmZyb20sXHJcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogY2FsbERhdGE/LnBob25lLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVzcG9uc2U/LmNhbGxhdXRoPy5pZCxcclxuICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgIGNsaWVudFNpZDogdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydDYWxsU2lkJ11cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkQ2xpZW50UGFydGljaXBhbnRSZXMnLCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZFJlcyA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRlcnNob3cuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWFsIHBhcnRpY2lwYW50SWQ6JywgdGhpcy5hZGRSZXM/LnBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgaW5pdGlhbCBwYXJ0aWNpcGFudDonLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKVxyXG4gICAgICAgIC8vIFBvbGwgdGhlIHN0YXR1cyBmb3IgMzAtNDUgc2Vjb25kc1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcclxuICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlcnNob3cuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3QzJylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uTXV0ZVVzZXIoYzogYW55KSB7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW2MucGFydGljaXBhbnRJZF0sXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogYz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICBob2xkOiBjLmhvbGQsXHJcbiAgICAgIG11dGU6ICFjPy5pc011dGUsXHJcbiAgICAgIGNvbmZlcmVuY2U6IGMuaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgYy5pc011dGUgPSAhYy5pc011dGU7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjPy5jb25mZXJlbmNlU2lkKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uSG9sZENhbGwoYzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhjLCAnZHNkc2RzZHNkc2RzYWRzYScpO1xyXG4gICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW2MucGFydGljaXBhbnRJZF0sXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogYz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICBob2xkOiAhYy5ob2xkLFxyXG4gICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICBjb25mZXJlbmNlOiBjLmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgfSlcclxuICAgIGMuaG9sZCA9ICFjLmhvbGQ7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGFzeW5jIG9uRW5kSW5jb21pbmdDYWxsKCkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChyZXMpID0+IHJlcy5wYXJ0aWNpcGFudElkID09IHRoaXMuY3VycmVudENhbGwucGFydGljaXBhbnRJZCk7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XT8ucGFydGljaXBhbnRJZCwgdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdPy5jb25mZXJlbmNlSWQgfHwgJ25vJykuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgdGhpcy5lbmRJbmNvbWluZ0NhbGxFdmVudC5lbWl0KCk7XHJcbiAgICB9KVxyXG4gIH1cclxuICBhc3luYyBvbkVuZENhbGwoYzogYW55LCBpc0FsbENhbGxFbmQ/OiBib29sZWFuLCBpc0NvbnRlY3Q/OiBib29sZWFuKSB7XHJcbiAgICAvLyBpZiAoIWM/LmlzQWNjZXB0Q2FsbCAmJiAhaXNDb250ZWN0ICYmICFpc0FsbENhbGxFbmQpIHtcclxuICAgIC8vICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChyZXMpID0+IHJlcy5wYXJ0aWNpcGFudElkID09IGMucGFydGljaXBhbnRJZClcclxuICAgIC8vICAgYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFJlbW92ZVBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LnBhcnRpY2lwYW50SWQsIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XT8uY29uZmVyZW5jZUlkIHx8ICdubycpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgLy8gICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgIC8vICAgICB0aGlzLmNhbGw/LmRpc2Nvbm5lY3QoKTtcclxuICAgIC8vICAgICB0aGlzLmVuZEluY29taW5nQ2FsbEV2ZW50LmVtaXQoYyk7XHJcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICB9KVxyXG4gICAgLy8gICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgcGFydGljaXBhbnRJZCA9IGlzQWxsQ2FsbEVuZCA/ICdhbGwnIDogYy5wYXJ0aWNpcGFudElkIHx8IGM/LmlkO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICBsZXQgY29uZmVyZW5jZUlkID0gYy5jb25mZXJlbmNlSWQgfHwgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgbGV0IGNvbmZlcmVuY2VTaWQgPSBjLmNvbmZlcmVuY2VTaWQgfHwgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZVNpZDtcclxuICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQsIGNvbmZlcmVuY2VJZCk7XHJcbiAgICBpZiAocmVzPy5zdGF0dXMgPT0gMjAxICYmIHJlcz8ubWVzc2FnZSA9PSAncGFydGljaXBhbnQgYWxyZWFkeSBsZWZ0Jykge1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU2lkKTtcclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgIHRoaXMuZW5kSW5jb21pbmdDYWxsRXZlbnQuZW1pdChjKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWF0ZUNhbGwocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmluaXRpYXRlQ2FsbChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYWRkUGFydGljaXBhbnRUb0NhbGwocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmFkZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRDbGllbnRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkQ2xpZW50UGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldENhbGxTdGF0dXNPZlBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFN0YXR1c09mUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvbk11dGVQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2Uub25NdXRlUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkOiBhbnksIGNvbmZlcmVuY2VJZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDYWxsQXV0aElkKHJlc3BvbnNlOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiByZXNwb25zZS5jYWxsYXV0aC5pZCxcclxuICAgICAgcmVjb3JkQ2FsbDogcmVzcG9uc2UuY2FsbGF1dGgucmVjb3JkQ2FsbCxcclxuICAgICAgdG9rZW5EYXRhOiByZXNwb25zZS5jYWxsYXV0aC50b2tlblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3V0Z29pbmdDYWxsVG9rZW4oY2FsbEF1dGhJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENvbmZlcmVuY2VDYWxsVG9rZW4oeyBhdXRoSWQ6IGNhbGxBdXRoSWQgfSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb0RldmljZSh0b2tlbjogYW55LCBjYWxsRGF0YTogYW55LCB0b2tlbkRhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xyXG4gICAgICBjb2RlY1ByZWZlcmVuY2VzOiBbJ29wdXMnLCAncGNtdSddLFxyXG4gICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh0b2tlbkRhdGEsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy5kZXZpY2UuY29ubmVjdCh7XHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIEZyb206IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgVG86IGNhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIEVudjogZW52aXJvbm1lbnQuYWJiLFxyXG4gICAgICAgIFRva2VuOiB0b2tlbixcclxuICAgICAgICBFeHQ6IGNhbGxEYXRhLmV4dE51bVxyXG4gICAgICB9LFxyXG4gICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogdHJ1ZSB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY2FsbCA9IHRoaXMuY2FsbDtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXN0OTg5OTgxMTExMTEnLCB0aGlzLmNhbGwpO1xyXG4gICAgY29uc29sZS5sb2coJ3Rlc3RkZXZpY2UnLCB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlKTtcclxuICAgIC8vIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FsbERhdGEpKTtcclxuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xyXG5cclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcclxuICAgICAgdGhpcy5jYWxsPy5kaXNjb25uZWN0KCk7XHJcbiAgICAgIC8vIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xyXG4gICAgICAvLyBFbnN1cmUgdGhlIGFjdGl2ZSBvdXRnb2luZyBjYWxsIGlzIG1hcmtlZCBhcyBhY2NlcHRlZCBzbyB0aGUgVUkgc3dpdGNoZXMgdG8gdGhlIGNvbm5lY3RlZCB2aWV3XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGlkID0gdGhpcy5jYWxsRGF0YT8ucGFydGljaXBhbnRJZDtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmN1cnJlbnRDYWxsTGlzdCkgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGM6IGFueSkgPT4gKHBpZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBwaWQpIHx8ICghcGlkICYmIGM/LnBob25lID09PSB0aGlzLmNhbGxEYXRhPy5waG9uZSkpO1xyXG4gICAgICAgICAgLy8gaWYgKGlkeCAhPT0gLTEpIHtcclxuICAgICAgICAgIC8vIHRoaXMuY3VycmVudENhbGxMaXN0W2lkeF0uaXNBY2NlcHRDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpZHhdO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgdXBkYXRpbmcgYWNjZXB0IHN0YXRlOicsIGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FsbD8ub24oJ21lc3NhZ2VSZWNlaXZlZCcsIChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydFRpbWVyKGpvaW5BdD86IHN0cmluZykge1xyXG4gICAgaWYgKCFqb2luQXQpIHJldHVybjtcclxuXHJcbiAgY29uc3Qgam9pblRpbWUgPSBuZXcgRGF0ZShqb2luQXQpLmdldFRpbWUoKSB8fCAwO1xyXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGxldCBzZWNvbmRzID0gTWF0aC5mbG9vcigobm93IC0gam9pblRpbWUpIC8gMTAwMCk7XHJcbiAgICBpZiAoc2Vjb25kcyA8IDApIHtcclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHNlY29uZHMrKztcclxuICAgICAgdGhpcy50aW1lciA9IHRoaXMuZm9ybWF0VGltZShzZWNvbmRzKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcclxuICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKHRvdGFsU2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcclxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gMzYwMCk7XHJcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHRvdGFsU2Vjb25kcyAlIDM2MDApIC8gNjApO1xyXG4gIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcclxuICBpZiAoaG91cnMgPiAwKSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQoaG91cnMpfToke3RoaXMucGFkKG1pbnV0ZXMpfToke3RoaXMucGFkKHNlY29uZHMpfWA7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBgJHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH1cclxufVxyXG5cclxuICBwcml2YXRlIHBhZCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gIH1cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcclxuICAgIHN3YWwoXCJFcnJvclwiLCBlcnJvciwgXCJlcnJvclwiKTtcclxuICB9XHJcblxyXG4gIGVuZENvbmZlcmVuZWNlQ2FsbChjb25mPzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZiA9IGNvbmY7XHJcbiAgICBpZiAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHRoaXMuaG9zdG51bWJlcj8uZnJvbSkpIHtcclxuICAgICAgdGhpcy5vbkNhbGxEaXNjb25uZWN0ZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChjb25mPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICBsZXQgY29uZmVyZW5jZSA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSBjb25mPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgbGV0IHBhcnRpY2lwZW50SW5mbyA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pXHJcbiAgICAgICAgICAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdClcclxuICAgICAgICBpZiAoY29uZmVyZW5jZT8uaWQpIHtcclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGVuZENhbGwoaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xyXG4gICAgLy8gdGhpcy5pc0NvbmZlcmVuY2UgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAoaXNBbGxDYWxsRW5kKSB7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHt9LCBpc0FsbENhbGxFbmQpO1xyXG4gICAgICBpZiAoIXRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8gPSB0aGlzLmdldEN1cnJlbnRDYWxsSW5mbygpO1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbChjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLCBpc0FsbENhbGxFbmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2FsbCkge1xyXG4gICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICB0aGlzLmNhbGwucmVqZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdG9nZ2xlTXV0ZShpc0NvbmZlcmVuY2U/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcclxuICAgIHRoaXMuY2FsbD8ubXV0ZSh0aGlzLmlzTXV0ZSk7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgIHRoaXMub25NdXRlUGFydGljaXBhbnQoe1xyXG4gICAgICBwYXJ0aWNpcGFudElkOiBbY3VycmVudENvbmZlcmVuY2VDYWxsSW5mby5wYXJ0aWNpcGFudElkIHx8IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkXSxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgIGhvbGQ6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaG9sZCxcclxuICAgICAgbXV0ZTogIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlzTXV0ZSxcclxuICAgICAgY29uZmVyZW5jZTogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mby5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLmN1cnJlbnRDYWxsLmlzTXV0ZSA9IHRoaXMuaXNNdXRlO1xyXG4gIH1cclxuXHJcbiAgLy8gYXVkaW9TdHJlYW0/OiBNZWRpYVN0cmVhbTtcclxuICAvLyBtaWNPbiA9IGZhbHNlO1xyXG5cclxuICAvLyBhc3luYyB0b2dnbGVNaWMoKSB7XHJcbiAgLy8gICBpZiAoIXRoaXMuYXVkaW9TdHJlYW0pIHtcclxuICAvLyAgICAgLy8gZmlyc3QgdGltZTogcmVxdWVzdCBtaWNcclxuICAvLyAgICAgdGhpcy5hdWRpb1N0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgdGhpcy5taWNPbiA9ICF0aGlzLm1pY09uO1xyXG5cclxuICAvLyAgIHRoaXMuYXVkaW9TdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcclxuICAvLyAgICAgdHJhY2suZW5hYmxlZCA9IHRoaXMubWljT247ICAgLy8gZmFsc2UgPSBtdXRlZCwgdHJ1ZSA9IHNlbmRpbmcgYXVkaW9cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0Q3VycmVudENhbGxJbmZvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RcclxuICAgICAgLmZsYXRNYXAoKGNhbGxJbmZvOiBhbnkpID0+IGNhbGxJbmZvLnBhcnRpY2lwYW50cylcclxuICAgICAgLmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJylcclxuICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCAmJiAhcGFydGljaXBhbnQ/LmlzSG9sZCk7XHJcbiAgfVxyXG4gIHRvZ2dsZUtleXBhZCgpIHtcclxuICAgIHRoaXMuc2hvd0tleXBhZCA9ICF0aGlzLnNob3dLZXlwYWQ7XHJcbiAgICB0aGlzLmNhbGxJbnB1dCA9ICcnO1xyXG4gIH1cclxuICB0b2dnbGVDb250YWN0c1BhbmVsKGNhbGxJbmZvPzogYW55LCBpc0Nsb3NlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoaXNDbG9zZSkge1xyXG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhaXNDbG9zZTtcclxuICAgIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkKTtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFJlbW92ZVBhcnRpY2lwYW50KCkge1xyXG4gICAgdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50ID0gIXRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDtcclxuICAgIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZVNpZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoZGF0YT86IGFueSkge1xyXG4gICAgdGhpcy5pc0luY29taW5nQ2FsbEJ0bkRpc2FibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5jb25mZXJlbmNlSWQgPSB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VJZDtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmIHRoaXMuY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCkge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFt0aGlzLmhvc3RudW1iZXIucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuaG9zdG51bWJlcj8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgIG11dGU6IHRoaXMuaG9zdG51bWJlcj8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgIGNvbmZlcmVuY2U6IHRoaXMuaG9zdG51bWJlci5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuY3VycmVudENhbGw/LmlzSW5jb21pbmdDYWxsID8gW3RoaXMuY3VycmVudENhbGw/LmlkXSA6IFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgIG11dGU6IHRoaXMuY3VycmVudENhbGw/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICBjb25mZXJlbmNlOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlPy5pbmNvbWluZ0NhbGxEZXRhaWw/LmFjY2VwdCgpO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHJlY29yZElkOiBkYXRhPy5pZCxcclxuICAgICAgaXBBZGRyZXNzOiAnJyxcclxuICAgICAgaXBDb3VudHJ5OiAnJyxcclxuICAgICAgY2FsbFN0YXR1czogJ2Fuc3dlcmVkJyxcclxuICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgIHVzZXJJZDogIHRoaXMudXNlcklkLFxyXG4gICAgICBjb21wYW55SWQ6ICcnLFxyXG4gICAgICBjbGllbnRTaWQ6IHRoaXMudHdpbGlvU2VydmljZT8uaW5jb21pbmdDYWxsRGV0YWlsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGRhdGE/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZShhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgLy8gdGhpcy5jYWxsID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbm5lY3QoeyBjb25mZXJlbmNlSWQ6IHJlcy5jb25mZXJlbmNlSWQsIGNvbmZlcmVuY2VOYW1lOiByZXMuY29uZmVyZW5jZU5hbWUgfSk7XHJcbiAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5pc0N1cnJlbnRJbmNvbWluZ0NhbGxMaXN0LnB1c2goZGF0YT8uaWQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ2NhbGxDb25uZWN0Jyk7XHJcbiAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgLy8gZGF0YS5pc0FjY2VwdENhbGwgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgocmVzKSA9PiByZXMucGFydGljaXBhbnRJZCA9PSBkYXRhLnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGFzeW5jIGNhbGxDb250YWN0KGNvbnRhY3Q6IGFueSwgaXNVbnNhdmVkTnVtYmVyPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zb2xlLmxvZygnQWRkaW5nIHBhcnRpY2lwYW50OicsIGNvbnRhY3QpO1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMuY2FsbCcsIHRoaXMuY2FsbClcclxuICAgIGNvbnN0IHBob25lTnVtYmVyID0gaXNVbnNhdmVkTnVtYmVyID8gY29udGFjdCA6IGNvbnRhY3Q/Lm51bWJlcnNMaXN0Py5bMF0/Lm51bWJlciB8fCBjb250YWN0Py5waG9uZTtcclxuICAgIGxldCBhbHJlYWR5SW5DYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IChyZXMudG8gPT0gcGhvbmVOdW1iZXIgJiYgcmVzPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSB8fCAocmVzLmZyb20gPT0gcGhvbmVOdW1iZXIgJiYgcmVzPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSAmJiAhcmVzPy5pc0xlZnQpO1xyXG4gICAgaWYgKGFscmVhZHlJbkNhbGwpIHtcclxuICAgICAgc3dhbCgnRXJyb3InLCBgQWxyZWFkeSAke3Bob25lTnVtYmVyfSBudW1iZXIgaW4gdGhpcyBjYWxsLmApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zdCBjdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYz8ucGhvbmUgPT09IHBob25lTnVtYmVyKTtcclxuICAgIC8vIGlmICghcGhvbmVOdW1iZXIgfHwgY3VycmVudENhbGwpIHtcclxuICAgIC8vICAgY29uc29sZS5lcnJvcignTm8gcGhvbmUgbnVtYmVyIGZvdW5kIGZvciBjb250YWN0Jyk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICBsZXQgZGF0YTogYW55ID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tID8gdGhpcy5jYWxsRGF0YT8uZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtkYXRhPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIG5hbWU6IGNvbnRhY3Q/Lm5hbWUgfHwgYCR7Y29udGFjdD8uZmlyc3ROYW1lfSAke2NvbnRhY3Q/Lmxhc3ROYW1lfWAgfHwgcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQgYWRkZWQgdG8gY29uZmVyZW5jZTpcIiwgcGhvbmVOdW1iZXIpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZFxyXG4gICAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBBZGQgcGFydGljaXBhbnQgdG8gdGhlIGNvbmZlcmVuY2VcclxuICAgICAgICBsZXQgZGF0YTogYW55ID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbZGF0YT8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiBmYWxzZSxcclxuICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICAgIHBob25lOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGltZzogY29udGFjdD8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXHJcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHBhcnRpY2lwYW50OicsIGVycm9yKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIENhbGxUb1Vuc2F2ZWROdW1iZXIobnVtYmVyOiBzdHJpbmcsIGlzTmV3Q29uZmVyZW5jZT86IGJvb2xlYW4pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKG51bWJlcik7XHJcbiAgICAgIGlmIChpc0ludmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFscmVhZHlJbkNhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gKChyZXMudG8gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykgfHwgKHJlcy5mcm9tID09IG51bWJlciAmJiByZXM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpKSAmJiAhcmVzPy5pc0xlZnQpO1xyXG4gICAgICBpZiAoYWxyZWFkeUluQ2FsbCkge1xyXG4gICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwuYCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChudW1iZXIgPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xyXG4gICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjb250YWN0ID0gdGhpcy5jb250YWN0cy5maW5kKChjb250YWN0OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gY29udGFjdC5udW1iZXJzTGlzdC5zb21lKChudW06IGFueSkgPT4gbnVtLm51bWJlciA9PT0gbnVtYmVyKVxyXG4gICAgICB9KTtcclxuICAgICAgbnVtYmVyID0gYXdhaXQgdGhpcy5nZXRUb051bWJlcihudW1iZXIpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cclxuICAgICAgY29uc3QgY2FsbERhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogY29udGFjdD8uZmlyc3ROYW1lLFxyXG4gICAgICAgIGltZzogY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIHBob25lOiBudW1iZXIsXHJcbiAgICAgICAgZXh0TnVtOiAnJyxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnY2FsbCBzdGFydHRlZCcsIGNhbGxEYXRhKTtcclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhvdXJOdW1iZXJJbmZvLCAnc2VsZkluZm8nKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtvdXJOdW1iZXJJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBvdXJOdW1iZXJJbmZvPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlOiBvdXJOdW1iZXJJbmZvPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENhbGwoY2FsbERhdGEsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FsbENvbnRhY3QobnVtYmVyLCB0cnVlKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUb051bWJlcihkaWFsZWROdW1iZXI6IHN0cmluZykge1xyXG4gICAgaWYgKGRpYWxlZE51bWJlclswXSAhPT0gJysnKSB7XHJcbiAgICAgIC8vIHRoaXMgaXMgY2FzZSB3aGVuIHVzZXIgZ2VvbG9jYXRpb24gZGlhbCBjb2RlIGlzIG9uXHJcbiAgICAgIGxldCBpcEFkZHJlc3M6IGFueSA9IGF3YWl0IHRoaXMuaXBTZXJ2aWNlLmdldElwQWRkcmVzc0luZm8oKS50b1Byb21pc2UoKTtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyLCBpcEFkZHJlc3MuYWRkcmVzcy5jb3VudHJ5Q29kZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiByZXM/LnRvTnVtYmVyXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxlZE51bWJlclxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZGlhbGVkTnVtYmVyXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc0ludmFsaWROdW1iZXIobnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChudW1iZXIgPT0gJycpIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsaWROdW1iZXJQYXR0ZXJuID0gL15bK1xcZFxccygpLV0qJC87IC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB2YWxpZCBjaGFyYWN0ZXJzXHJcbiAgICAgIGNvbnN0IHBob25lTnVtYmVyID0gbnVtYmVyO1xyXG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgIHJldHVybiB0cnVlOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCwgbWVhbmluZyB0aGUgbnVtYmVyIGlzIGludmFsaWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dEaWFsQWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcclxuICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICBzaG93OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGlhbEFsZXJ0LnNob3cgPSBmYWxzZTtcclxuICAgIH0sIDMwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VTaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU2lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gcmVzLnBhcnRpY2lwYW50cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IHRoaXMuYWxsUGFydGljaXBlbnRMaXN0O1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN3YXBDYWxscyhjYWxsSW5mbzogYW55LCBpc0NvbmZlcmVuY2VDYWxsPzogYm9vbGVhbikge1xyXG4gICAgLy8gaWYgKCF0aGlzLmhlbGRDYWxsIHx8ICF0aGlzLmNhbGwpIHJldHVybjtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ3RoaXMuY2FsbCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWxkQ2FsbCwgJ3RoaXMuaGVsZENhbGwnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENhbGxMaXN0LCAndGhpcy5jdXJyZW50Q2FsbExpc3QnKTtcclxuICAgIGNvbnNvbGUubG9nKGNhbGxJbmZvLCAnY2FsbEluZm8gZm9yIHN3YXBDYWxscycpO1xyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGM/LmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50SW5mbyA9IGMucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG11dGU6IHBhcnRpY2lwYW50SW5mbz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZTogcGFydGljaXBhbnRJbmZvPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGFudEluZm8/LmlkICYmICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2U6IHBhcnRpY2lwYW50SW5mbz8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlKSB7XHJcbiAgICAvLyAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgIC8vICAgICB9IGVsc2UgaWYgKGlzQ29uZmVyZW5jZUNhbGwgJiYgYz8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvLmNvbmZlcmVuY2VJZCAmJiBjLmlzQ29uZmVyZW5jZSkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2VcclxuICAgIC8vICAgICB9IGVsc2UgaWYgKGNhbGxJbmZvPy5pc0hvbGQgJiYgYz8ucGFydGljaXBhbnRJZCA9PT0gY2FsbEluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAvLyAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZUlkOiBjLmNvbmZlcmVuY2VJZCxcclxuICAgIC8vICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSBpZiAoaXNDb25mZXJlbmNlQ2FsbCkge1xyXG4gICAgLy8gICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmIGNhbGxJbmZvPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAvLyBjLmlzSG9sZCA9IHRydWU7XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgLy8gICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAvLyAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAvLyAgICAgICAgIGNvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSBmYWxzZTtcclxuICAgIC8vICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgLy8gICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2UgfHwgZmFsc2VcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0gZWxzZSBpZiAoY2FsbEluZm8/LmlzSG9sZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBjYWxsSW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgIC8vICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxyXG4gICAgLy8gICAgICAgICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgLy8gICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZSxcclxuICAgIC8vICAgICAgICAgY29uZmVyZW5jZTogYz8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY3VycmVudENhbGxMaXN0IGFmdGVyIHN3YXAnLCB0aGlzLmN1cnJlbnRDYWxsTGlzdCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBpc01lcmdlQ2FsbEFsbG93ZWQoKSB7XHJcbiAgICBsZXQgbWVyZ2VDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzKSA9PiByZXMuY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgIHJldHVybiBtZXJnZUNhbGxMaXN0Lmxlbmd0aCA8PSAxO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWVyZ2VDYWxscygpIHtcclxuICAgIC8vIE1lcmdlIGZ1bmN0aW9uYWxpdHkgLSB1bm11dGUgYm90aCBjYWxscyBmb3IgY29uZmVyZW5jZVxyXG4gICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGMuY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBpZiAoYz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcclxuICAgICAgICAgICAgLy8gICBjb25mZXJlbmNlSWQ6IGMuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAvLyAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgYy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghY2FsbERhdGEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB1c2VySW5mbyBleGlzdHMgYW5kIGhhcyBtZWFuaW5nZnVsIGRhdGFcclxuICAgIGlmIChjYWxsRGF0YS51c2VySW5mbyAmJiBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbikge1xyXG4gICAgICBjb25zdCBpbmZvID0gY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb247XHJcbiAgICAgIHJldHVybiAhIShcclxuICAgICAgICBpbmZvLnN1YmplY3QgJiYgaW5mby5zdWJqZWN0ICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLmVtYWlsICYmIGluZm8uZW1haWwgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8ubWVzc2FnZSAmJiBpbmZvLm1lc3NhZ2UgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8ucG9pbnROYW1lICYmIGluZm8ucG9pbnROYW1lICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnNvdXJjZU5hbWUgJiYgaW5mby5zb3VyY2VOYW1lICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLmV4dGVuc2lvbiAmJiBpbmZvLmV4dGVuc2lvbiAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby51cmwgfHxcclxuICAgICAgICBpbmZvLmxhdGl0dWRlIHx8XHJcbiAgICAgICAgaW5mby5sb25naXR1ZGVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNhbGxJbnB1dHMobnVtOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtID09ICcrJyB8fCBudW0gPT0gJyonIHx8IG51bSA9PSAnIycpIHtcclxuICAgICAgICBpZiAobnVtID09ICcjJykge1xyXG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQgKyBTdHJpbmcobnVtKTtcclxuICAgICAgICB0aGlzLnNob3dDbGVhckJ0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0ciA9IFN0cmluZyhudW0pO1xyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoc3RyKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQ2FsbElucHV0RW50ZXIoZXY6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZUluY29taW5nQ2FsbChkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhLnNob3cpIHtcclxuICAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGwgYWNjZXB0ZWRcclxuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uc3QgaW5jb21pbmdEZXRhaWwgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xyXG4gICAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGluY29taW5nRGV0YWlsLnJlY29yZENhbGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ1JlY29yZENhbGwpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGluY29taW5nIGNhbGwgcmVqZWN0ZWQgb3IgYXV0by1jYW5jZWxsZWRcclxuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xyXG4gICAgICAvLyBJZiB0aGVyZSBpcyBOTyBhY3RpdmUgY2FsbCwgdGhlbiBwcm9wYWdhdGUgZW5kLiBPdGhlcndpc2Uga2VlcCBvbmdvaW5nIFVJLlxyXG4gICAgICBpZiAoIXRoaXMuY2FsbCB8fCB0aGlzLmNhbGwuc3RhdHVzKCkgIT09ICdvcGVuJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NycpXHJcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsZWFySW5wdXRzKCkge1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWluaW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gdHJ1ZTtcclxuICB9XHJcbiAgbWF4aW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhcnRSZWNvcmRpbmcoKSB7XHJcbiAgICBsZXQgc2lkO1xyXG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcclxuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xyXG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZCB8fCB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJjb25mZXJlbmNlSWRcIjogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgfVxyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxSZWNvcmRpbmcocGF5bG9hZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy50aW1lRWxhcHNlZCA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhdXNlUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcodGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLCAncGF1c2UnKS5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3BvbnNlID0+IHtcclxuICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmdUaW1lcigpO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXVzaW5nIHJlY29yZGluZzonLCBlcnJvcik7XHJcbiAgICAgICAgLy8gQ29uc2lkZXIgdXBkYXRpbmcgdGhlIFVJIHRvIHNob3cgdGhlIGVycm9yIHN0YXRlXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlc3VtZVJlY29yZGluZygpIHtcclxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xyXG4gICAgLy8gICByZXR1cm47IC8vIFNraXAgaWYgcmVjb3JkaW5nIGlzIG5vdCBlbmFibGVkXHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsICdyZXN1bWUnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzdW1pbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFRpbWVEaWZmZXJlbmNlKGlucHV0VGltZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhc3RUaW1lID0gbmV3IERhdGUoaW5wdXRUaW1lKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGxldCBkaWZmID0gTWF0aC5mbG9vcigoY3VycmVudFRpbWUgLSBwYXN0VGltZSkgLyAxMDAwKTsgLy8gdG90YWwgc2Vjb25kc1xyXG5cclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGRpZmYgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gZGlmZiAlIDYwO1xyXG5cclxuICAgIGNvbnN0IG1tID0gbWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXM7XHJcbiAgICBjb25zdCBzcyA9IHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzO1xyXG5cclxuICAgIHJldHVybiBgJHttbX06JHtzc31gO1xyXG4gIH1cclxuICBzdGFydFRpbWVyMSgpIHtcclxuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBQYXVzZSB0aGUgdGltZXJcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodGhpcy50aW1lRWxhcHNlZCAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnRpbWVFbGFwc2VkICUgNjA7XHJcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcclxuICB9XHJcbiAgcG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcclxuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDMwMDA7IC8vIFBvbGwgZXZlcnkgMyBzZWNvbmRzXHJcbiAgICBsZXQgZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcclxuICAgICAgZWxhcHNlZFRpbWUgKz0gcG9sbEludGVydmFsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xyXG4gICAgICAgIGlmIChzdGF0dXNSZXNwb25zZSAmJiBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5jYWxsU3RhdHVzID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFN0YXR1cztcclxuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsU2lkID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFNpZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FsbCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MScpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAncmluZ2luZycpIHtcclxuICAgICAgICAgICAgLy8gQ29udGludWUgcG9sbGluZzsgZG8gbm90IGNsZWFyIHRoZSBpbnRlcnZhbCB5ZXRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdNYXggcG9sbGluZyB0aW1lIHJlYWNoZWQuIFN0b3BwaW5nIHBvbGwuJyk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgfSwgcG9sbEludGVydmFsKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpZDogYW55KSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGlkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UsICd1c2VySW5mb3JtYXRpb24nKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG9sZENhbGxMaXN0KCkge1xyXG4gICAgbGV0IGhvbGRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGlzQ29uZmVyZW5jZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjPy5pc0hvbGQgJiYgIWM/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgIGhvbGRMaXN0LnB1c2goYyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGM/LmlzQ29uZmVyZW5jZSAmJiAhaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICBjWydpc0NvbmZlcmVuY2VDYWxsSG9sZCddID0gdHJ1ZTtcclxuICAgICAgICBob2xkTGlzdC5wdXNoKGMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBob2xkTGlzdDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFeHBhbmQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YS5pZCAhPSB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gZGF0YTtcclxuICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9ICF0aGlzLmlzQ2xpY2tFeHBhbmQ7XHJcbiAgICAgIGlmICh0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEluY29taW5nQ2FsbFN0YXR1cyhkYXRhOiBhbnkpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICByZWNvcmRJZDogZGF0YT8uaWQsXHJcbiAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgIGlwQ291bnRyeTogJycsXHJcbiAgICAgIGNhbGxTdGF0dXM6ICdhbnN3ZXJlZCcsXHJcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB8fCBkYXRhLmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gIXRoaXMuaXNTZWFyY2hWaXNpYmxlO1xyXG5cclxuICAgIC8vIGlmIGNsb3Npbmcgc2VhcmNoIOKAlCByZXNldCByZXN1bHRzXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIGlmICghdGhpcy5pc1NlYXJjaFZpc2libGUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLmNvbnRhY3RzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcigpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmlzRGlyZWN0Q2FsbE9wdGlvblNob3cgPSAvXlxcKz9cXGQrJC8udGVzdCh0ZXh0KVxyXG4gICAgaWYgKHRleHQubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiAhY2M/LklzQ29ubmVjdGVkICYmIChjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlcikpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjWydJc0Nvbm5lY3RlZCddID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cy5maWx0ZXIoKGM6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gKGM/LmZpcnN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAoYz8ubWlkZGxlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubmlja05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAoYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fCAoYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoY2M6IGFueSkgPT4gY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIgfHwgY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzFdPy5udW1iZXIpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoZWNrVGV4dEhlaWdodCgpIHtcclxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRleHQtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoZWw/LnNjcm9sbEhlaWdodCA+IGVsPy5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9nZ2xlVGV4dCgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgfVxyXG5cclxuICBzaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcblxyXG4gIC8vIENhbGwgdGhpcyB3aGVuIGNhbGwgZGlzY29ubmVjdHNcclxuICBvbkNhbGxEaXNjb25uZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZW5kQ29uZmVyZW5jZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb25mZXJlbmNlIEVuZGVkJyk7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuc2VsZWN0ZWRDb25mLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQ2FsbCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxlYXZlQ29uZmVyZW5jZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdsZWF2ZVRpbWUnLCB0aGlzLmxlYXZlUmVhc29uKTtcclxuICAgIHRoaXMuc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaXNSZWFzb25DaGVja2VkKSB7XHJcbiAgICAgIGxldCBwYXlsb2FkID0geyBjb25mZXJlbmNlSWQ6IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQgfHwgdGhpcy5ob3N0bnVtYmVyPy5jb25mZXJlbmNlSWQsIHRpbWU6IHRoaXMuY29udmVydEhITU1Ub01pbnV0ZXModGhpcy5sZWF2ZVJlYXNvbiksIHRpbWVyRGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpIH1cclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldFRpbWVyRm9yRW5kQ29uZmVyZW5jZUNhbGwocGF5bG9hZCkuc3Vic2NyaWJlKChyZXMpID0+IHsgfSlcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICBpZiAoY29uZmVyZW5jZT8uaWQpIHtcclxuICAgICAgICB0aGlzLm9uRW5kQ2FsbChwYXJ0aWNpcGVudEluZm8pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuaG9zdG51bWJlcik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjb252ZXJ0SEhNTVRvTWludXRlcyh0aW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgIHJldHVybiAoaG91cnMgKiA2MCkgKyBtaW51dGVzO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2FsbERhdGEuZGlhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkICYmIGN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2NvbGxvcHMnOiBpc0NvbGxvcHMsICdpbmNvbWluZy1jYWxsLWNvbnRhaW5lcic6IGlzQ2xpY2tFeHBhbmQsICdjb250YWN0cy1vcGVuJzogc2hvd0NvbnRhY3RzUGFuZWwgfVwiPlxyXG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmcgfHwgdHJ1ZVwiPiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSBBbGwgdHlwZSBDYWxsIEhvbGQgbGlzdCAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1iYW5uZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmICEhY3VycmVudENhbGwgJiYgKChpc0NvbmZlcmVuY2VDYWxsSG9sZCB8fCBpc0NvbmZlcmVuY2UpIHx8ICFpc0NvbmZlcmVuY2UpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY29uZmVyZW5jZUNhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cImNvbmY/LmlzQ29uZmVyZW5jZUhvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBob2xkLWljb25cIj5wYXVzZV9jaXJjbGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SG9sZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+Q29uZmVyZW5jZSBDYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdFwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjb25mPy5pc0NvbmZlcmVuY2VIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3YXBDYWxscyhjb25mLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cInt7J0hvbGQnfX1cIj4gcGhvbmVfcGF1c2VkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVhcnJvdy1hcnJvdyBtZS0yXCIgaWQ9XCJ0b2dnbGVhcnJvd1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGluY29taW5nIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHB5LTVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxICYmIGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGwgJiYgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8udG8gfHwgJ1Vua25vd25cclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJjdXJyZW50Q2FsbExpc3RbMF0/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTIwXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGxMaXN0WzBdPy5uYW1lID8gY3VycmVudENhbGxMaXN0WzBdPy5uYW1lIDogY3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB8fCAnVW5rbm93blxyXG4gICAgICAgICAgICAgICAgICAgIE51bWJlcicgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhIWN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZVwiPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhbmV3SW5jb21pbmdDYWxsc0xpc3RbMF0/LmlzQ2FsbENvbm5lY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZVwiIChjbGljayk9XCJhZGQoY3VycmVudENhbGxMaXN0WzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiID4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWplY3QtYnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGxfZW5kXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIighaXNDb25mZXJlbmNlIHx8IGlzQ29uZmVyZW5jZUNhbGxIb2xkKSAmJiAoISFjdXJyZW50Q2FsbD8uaWQgJiYgIWN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpICYmIGN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiIGNsYXNzPVwiYWN0aXZlLWNhbGxcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cImN1cnJlbnRDYWxsPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgIDxoMSBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fVxyXG4gICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGw/LnBob25lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luLXRvcDogNHB4XCI+e3tjdXJyZW50Q2FsbD8udGltZSB8fCB0aW1lcn19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRuc1wiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc3MjN4J31cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaGVsZC1idG4gbWVyZ2UtYnRuXCIgKGNsaWNrKT1cIm1lcmdlQ2FsbHMoKVwiIHRpdGxlPVwiTWVyZ2UgY2FsbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNZXJnZUNhbGxBbGxvd2VkKCkgfHwgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA8IDJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWVyZ2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGN1cnJlbnRDYWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzXzIgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGNvbmZlcmVuY2UgY2FsbCB2aWV3IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25mZXJlbmNlLWNhbGwtdmlld1wiICpuZ0lmPVwiaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLWljb24gbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLXRpdGxlXCI+Q29uZmVyZW5jZSBDYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLXRleHQgY29uZi1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbCBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYWxsPy5pc0NvbmZlcmVuY2VIb2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgIT0gMFwiPiY8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhbGw/LmNsaWVudFwiPnt7Y2FsbD8uZGlyZWN0aW9uID09IFwib3V0Z29pbmctY2FsbFwiID8gY2FsbD8uZnJvbU5hbWUgfHwgY2FsbD8uZnJvbSA6IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byB8fCAnVW5rbm93biBudW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjYWxsPy5jbGllbnRcIj57e2NhbGw/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIiA/IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byA6IGNhbGw/LmZyb21OYW1lIHx8IGNhbGw/LmZyb20gfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyB0aW1lciB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zIG10LWF1dG9cIiAqbmdJZj1cIiFzaG93S2V5cGFkXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNNdXRlfVwiIChjbGljayk9XCJ0b2dnbGVNdXRlKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHt7IGlzTXV0ZSA/ICdtaWNfb2ZmJyA6ICdtaWMnIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3Vwc18yIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG4gZGFuZ2VyXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuZWNlQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiM1wiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSW5jb21pbmcgY2FsbCB1c2VyIGRldGFpbHMgc2hvd24gaW4gbW9kZWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXItbW9kZWwgcC0zIHRleHQtd2hpdGUgbW9kZWwtY29udGVudCBjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNDbGlja0V4cGFuZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIHVzZXItaW5mby1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+QzJDIC1QT0lOVCB7e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTFcIj5OYW1lOjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXdoaXRlIHVzZXJOYW1lXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5uYW1lfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYtMTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+TnVtYmVyOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5udW1iZXJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+RXh0ZW5zaW9uOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uZXh0ZW5zaW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPkVtYWlsOiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e3NlbGVjdGVkVXNlckluZm8/LmVtYWlsfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlN1YmplY3Q6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHN1YmplY3QtdGV4dFwiIHRpdGxlPVwie3tzZWxlY3RlZFVzZXJJbmZvPy5zdWJqZWN0fX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRVc2VySW5mbz8uc3ViamVjdH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTIgbWItMVwiPkltYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgJiYgc2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgIT09ICctJzsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e3NlbGVjdGVkVXNlckluZm8/LmltYWdlfX1cIiBhbHQ9XCJcIiB3aWR0aD1cIjE1MFwiIGNsYXNzPVwibWwtMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5ObyBJbWFnZSBBdmFpbGFibGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5NZXNzYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW2NsYXNzLmV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIj57e3NlbGVjdGVkVXNlckluZm8/Lm1lc3NhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0b2dnbGUtYnRuXCIgKm5nSWY9XCJzaG93QnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVRleHQoKVwiPnt7IGlzRXhwYW5kZWQgPyAnU2VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzcycgOiAnU2VlIG1vcmUnIH19PC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPlBvaW50IE5hbWU6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj57e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5Tb3VyY2UgTmFtZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uc291cmNlTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGNvbnRhY3QgbGlzdCBwYW5lbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXY+UGFydGljaXBhbnQ8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoe30sIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDAwMDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFNFQVJDSCBJTlBVVCAodmlzaWJsZSB3aGVuIGlzU2VhcmNoVmlzaWJsZSA9IHRydWUpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIHAtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChpbnB1dCk9XCJhcHBseUZpbHRlcigpXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWN0cy1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdJZj1cInNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yz8uZmlyc3ROYW1lfX0ge3tjPy5taWRkbGVOYW1lfX0ge3tjPy5sYXN0TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjPy5udW1iZXJzTGlzdCAmJiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiQWRkIHRvIGNvbmZlcmVuY2UgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWM/LklzQ29ubmVjdGVkXCIgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXJlZExpc3QubGVuZ3RoICYmIGlzRGlyZWN0Q2FsbE9wdGlvblNob3cgJiYgc2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCInYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IHNlYXJjaFRleHQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0biBtci0yXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgdG8gY29uZmVyZW5jZSBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPkluIFRoaXMgQ2FsbDwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwiIWM/LmlzTGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjPy50byA9PSAnY2xpZW50JyBlbHNlIHBhcnRpY2lwZW50SW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+WW91XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgYz8uZnJvbSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pYy1idG4gbXItMlwiIFtkaXNhYmxlZF09XCJjPy5ob2xkXCIgKGNsaWNrKT1cIm9uTXV0ZVVzZXIoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiYz8uaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhYz8uaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjPy5ob2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCIhYz8uaG9sZCA/ICdIb2xkJyA6ICdSZXN1bWUnXCI+IHBob25lX3BhdXNlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJvbkVuZENhbGwoYywgZmFsc2UsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJ0aWNpcGVudEluZm8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiICpuZ0lmPVwiIWM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCJjPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b05hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Vua25vd24nfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM/LnRvTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5rbm93bicgOiBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiYz8uZnJvbSA9PSBob3N0bnVtYmVyPy5mcm9tICYmIGM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pYy1idG4gbXItMlwiIFtkaXNhYmxlZF09XCJjPy5ob2xkXCIgKGNsaWNrKT1cIm9uTXV0ZVVzZXIoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiYz8uaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhYz8uaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjPy5ob2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIiAqbmdJZj1cIiFjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBbdGl0bGVdPVwiIWM/LmhvbGQgPyAnSG9sZCcgOiAnUmVzdW1lJ1wiPiBwaG9uZV9wYXVzZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwib25FbmRDYWxsKGMsIGZhbHNlLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjPy5ob3N0ICYmIGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8uZnJvbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgcHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPlBhcnRpY2lwYW50IGFkZGVkIHRvIHRoZSBjYWxsPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCJjPy5pc0xlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9OYW1lIHx8ICdVbmtub3duJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYz8udG9OYW1lIHx8ICdVbmtub3duJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmtub3duJyA6IGM/LnRvIHx8ICdVbmtub3duJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cImM/LmZyb20gPT0gaG9zdG51bWJlcj8uZnJvbSAmJiBjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG4gY29udGFjdC1hZGQtYnRuXCIgKm5nSWY9XCIhYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoYy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG8gOiBjPy5mcm9tKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlJlam9pbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cImM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gOiBjPy50bylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5SZWpvaW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibWluLWNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpc01pbmltaXNlZFwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZ1bGxzY3JlZW5cIiAoY2xpY2spPVwibWF4aW1pc2VEaWFscGFkKClcIj4gb3Blbl9pbl9mdWxsIDwvc3Bhbj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbC1hbmltYXRpb25cIiBpZD1cImNhbGwtYXZhdGFyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWluLWF2YXRhci1pbWdcIiBbc3JjXT1cImNhbGxEYXRhLmltZ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NhbGxEYXRhLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPnt7Y2FsbERhdGEuZGlzcGxheU51bSA/IGNhbGxEYXRhLmRpc3BsYXlOdW0gOiBjYWxsRGF0YS5waG9uZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtaW4tYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdGltZXJcIj57e3RpbWVyfX08L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtc2VjLWJ0blwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIENhbGwgRGlzY29ubmVjdCBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiICpuZ0lmPVwic2hvd0Rpc2Nvbm5lY3RNb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlciBwLTAgcGItMlwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ0aXRsZSBtYi0wXCI+Q2FsbCBEaXNjb25uZWN0ZWQ8L2g0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwic2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDAwMDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YW50LWJvZHkgbWItMlwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgIEV4aXRpbmcgdGhpcyBjYWxsIHdpbGwgbm90IGVuZCB0aGUgY29uZmVyZW5jZS4gVGhlIHNlc3Npb24gd2lsbCBjb250aW51ZSwgYW5kIGNoYXJnZXMgd2lsbCBpbmN1ciB0b1xyXG4gICAgICAgICAgICAgICAgeW91clxyXG4gICAgICAgICAgICAgICAgYWNjb3VudC5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3RhcnQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJpc1JlYXNvbkNoZWNrZWRcIiBjbGFzcz1cIm1lLTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRpbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcmVhc29uXCIgWyhuZ01vZGVsKV09XCJsZWF2ZVJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc1JlYXNvbkNoZWNrZWRcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImxlYXZlQ29uZmVyZW5jZSgpXCI+XHJcbiAgICAgICAgICAgICAgICBMZWF2ZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuY2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgRW5kIEFsbFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|