@vgroup/dialbox 0.7.69 → 0.7.72
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 +60 -6
- package/esm2020/lib/dialbox.component.mjs +4 -12
- package/esm2020/lib/environments/environments.mjs +12 -12
- package/esm2020/lib/service/twilio.service.mjs +9 -3
- package/fesm2015/vgroup-dialbox.mjs +84 -32
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +81 -29
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/lib/components/call-progress/call-progress.component.d.ts +5 -0
- package/lib/service/twilio.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export const environment = {
|
|
2
|
-
abb: "
|
|
2
|
+
abb: "t",
|
|
3
3
|
production: false,
|
|
4
4
|
secureCookies: true,
|
|
5
|
-
feUrl: 'https://
|
|
6
|
-
apiUrl: 'https://
|
|
7
|
-
websocketUrl: 'wss://
|
|
5
|
+
feUrl: 'https://test.vgroupinc.com:91/',
|
|
6
|
+
apiUrl: 'https://apis.vgroupinc.com/test_softphone',
|
|
7
|
+
websocketUrl: 'wss://apis.vgroupinc.com/test_softphone/',
|
|
8
8
|
captchaKey: "6LfpOmEaAAAAAGsI6JXlMzOl3b7rW4YmYXFDjldD",
|
|
9
|
-
stripePublishableKey: "
|
|
9
|
+
stripePublishableKey: "pk_test_51NbMVaA3guus6fhlTuCV5ycFTIJmwgN38dDUf9pNPfM319x5CkLbV6EbTQaZiNOrRsfR16RWLE8hQmR0eZFTBqTy00Wlsug4qS",
|
|
10
10
|
sessionTimeout: 15,
|
|
11
11
|
deviceType: "web",
|
|
12
|
-
appVersion: "2.
|
|
13
|
-
channelId: '
|
|
12
|
+
appVersion: "2.3",
|
|
13
|
+
channelId: '61481b12e138eb7dc3007579',
|
|
14
14
|
c2c_support_point_id: '60424735f74ac306c1bfa900',
|
|
15
|
-
c2c_support_channel_id: '
|
|
16
|
-
c2c_point_url: 'https://
|
|
17
|
-
c2c_call_label_id: '
|
|
18
|
-
c2c_email_label_id: '
|
|
15
|
+
c2c_support_channel_id: '677f6726be93ab507fbbfdf0',
|
|
16
|
+
c2c_point_url: 'https://app.contexttocall.com/assets/cdn/c2c.js',
|
|
17
|
+
c2c_call_label_id: '6NU5fKE2mGTyXDC3yhmK',
|
|
18
|
+
c2c_email_label_id: 'YPMamj8RvsGORVvqXWyc',
|
|
19
19
|
radarAPIKey: 'prj_live_sk_569b6f639edde6120a26f703511c61aaecd3f7ef',
|
|
20
20
|
firebase: {
|
|
21
21
|
apiKey: "AIzaSyCA8LSPrqlDq_thk26LhBQexAQeY6pkU5Y",
|
|
@@ -32,4 +32,4 @@ export const environment = {
|
|
|
32
32
|
keycloakRealm: 'vgroup-test',
|
|
33
33
|
keycloakClientId: 'c2c-softphone-app'
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsVUFBVSxFQUFFLEtBQUs7SUFDakIsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFDLGdDQUFnQztJQUN0QyxNQUFNLEVBQUUsMkNBQTJDO0lBQ2pELFlBQVksRUFBRSwwQ0FBMEM7SUFDMUQsVUFBVSxFQUFFLDBDQUEwQztJQUN0RCxvQkFBb0IsRUFBRSw2R0FBNkc7SUFDbkksY0FBYyxFQUFFLEVBQUU7SUFDbEIsVUFBVSxFQUFFLEtBQUs7SUFDakIsVUFBVSxFQUFFLEtBQUs7SUFDakIsU0FBUyxFQUFFLDBCQUEwQjtJQUNyQyxvQkFBb0IsRUFBQywwQkFBMEI7SUFDL0Msc0JBQXNCLEVBQUMsMEJBQTBCO0lBQ2pELGFBQWEsRUFBQyxpREFBaUQ7SUFDL0QsaUJBQWlCLEVBQUMsc0JBQXNCO0lBQ3hDLGtCQUFrQixFQUFDLHNCQUFzQjtJQUN6QyxXQUFXLEVBQUUsc0RBQXNEO0lBQ25FLFFBQVEsRUFBRTtRQUNOLE1BQU0sRUFBRSx5Q0FBeUM7UUFDakQsVUFBVSxFQUFFLGlDQUFpQztRQUM3QyxTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLGFBQWEsRUFBRSw2QkFBNkI7UUFDNUMsaUJBQWlCLEVBQUUsY0FBYztRQUNqQyxLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELGFBQWEsRUFBRSxjQUFjO1FBQzdCLFFBQVEsRUFBQyx5RkFBeUY7S0FDckc7SUFDSCxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDMUQsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxhQUFhLEVBQUUsYUFBYTtJQUM1QixnQkFBZ0IsRUFBRSxtQkFBbUI7Q0FDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcclxuICBhYmI6IFwidFwiLFxyXG4gIHByb2R1Y3Rpb246IGZhbHNlLFxyXG4gIHNlY3VyZUNvb2tpZXM6IHRydWUsXHJcbiAgZmVVcmw6J2h0dHBzOi8vdGVzdC52Z3JvdXBpbmMuY29tOjkxLycsXHJcbiAgYXBpVXJsOiAnaHR0cHM6Ly9hcGlzLnZncm91cGluYy5jb20vdGVzdF9zb2Z0cGhvbmUnLFxyXG4gICAgd2Vic29ja2V0VXJsOiAnd3NzOi8vYXBpcy52Z3JvdXBpbmMuY29tL3Rlc3Rfc29mdHBob25lLycsXHJcbiAgY2FwdGNoYUtleTogXCI2TGZwT21FYUFBQUFBR3NJNkpYbE16T2wzYjdyVzRZbVlYRkRqbGREXCIsXHJcbiAgc3RyaXBlUHVibGlzaGFibGVLZXk6IFwicGtfdGVzdF81MU5iTVZhQTNndXVzNmZobFR1Q1Y1eWNGVElKbXdnTjM4ZERVZjlwTlBmTTMxOXg1Q2tMYlY2RWJUUWFaaU5PclJzZlIxNlJXTEU4aFFtUjBlWkZUQnFUeTAwV2xzdWc0cVNcIixcclxuICBzZXNzaW9uVGltZW91dDogMTUsIC8vaW4gbWluc1xyXG4gIGRldmljZVR5cGU6IFwid2ViXCIsXHJcbiAgYXBwVmVyc2lvbjogXCIyLjNcIixcclxuICBjaGFubmVsSWQ6ICc2MTQ4MWIxMmUxMzhlYjdkYzMwMDc1NzknLFxyXG4gIGMyY19zdXBwb3J0X3BvaW50X2lkOic2MDQyNDczNWY3NGFjMzA2YzFiZmE5MDAnLFxyXG4gIGMyY19zdXBwb3J0X2NoYW5uZWxfaWQ6JzY3N2Y2NzI2YmU5M2FiNTA3ZmJiZmRmMCcsXHJcbiAgYzJjX3BvaW50X3VybDonaHR0cHM6Ly9hcHAuY29udGV4dHRvY2FsbC5jb20vYXNzZXRzL2Nkbi9jMmMuanMnLFxyXG4gIGMyY19jYWxsX2xhYmVsX2lkOic2TlU1ZktFMm1HVHlYREMzeWhtSycsLy8gdGVzdFxyXG4gIGMyY19lbWFpbF9sYWJlbF9pZDonWVBNYW1qOFJ2c0dPUlZ2cVhXeWMnLC8vIHRlc3RcclxuICByYWRhckFQSUtleTogJ3Byal9saXZlX3NrXzU2OWI2ZjYzOWVkZGU2MTIwYTI2ZjcwMzUxMWM2MWFhZWNkM2Y3ZWYnLFxyXG4gIGZpcmViYXNlOiB7XHJcbiAgICAgIGFwaUtleTogXCJBSXphU3lDQThMU1BycWxEcV90aGsyNkxoQlFleEFRZVk2cGtVNVlcIixcclxuICAgICAgYXV0aERvbWFpbjogXCJzb2Z0cGhvbmUtZDU3NzcuZmlyZWJhc2VhcHAuY29tXCIsXHJcbiAgICAgIHByb2plY3RJZDogXCJzb2Z0cGhvbmUtZDU3NzdcIixcclxuICAgICAgc3RvcmFnZUJ1Y2tldDogXCJzb2Z0cGhvbmUtZDU3NzcuYXBwc3BvdC5jb21cIixcclxuICAgICAgbWVzc2FnaW5nU2VuZGVySWQ6IFwiODUwODEyNDk0NTM4XCIsXHJcbiAgICAgIGFwcElkOiBcIjE6ODUwODEyNDk0NTM4OndlYjo3NGY4YTMwZmMxOGUyOGRlZDc4YTMzXCIsXHJcbiAgICAgIG1lYXN1cmVtZW50SWQ6IFwiRy1OR1hUU1Y5U0gzXCIsXHJcbiAgICAgIHZhcGlkS2V5OlwiQkQ2RWdjUWdiWlRqT1FmbGVHM1lsRWMwX1NhakIwM3BycVRkRHktcUdKa3hUeGV6YnEtQV9xdHVYRTFsM3lUNDdvOGhuVEFiVEtCY0gxNUQyQUpCMlRvXCJcclxuICB9LFxyXG5wZXJzcGVjdGl2ZUFwaUtleTogJ0FJemFTeUNsZjMybHZMSDRRT3ktdk9uekx6d1NObnRLSWdhcEg4cycsXHJcbiAga2V5Y2xvYWtVUkw6ICdodHRwczovL3Rlc3Qta2V5Y2xvYWsudmdyb3VwaW5jLmNvbS8nLFxyXG4gIGtleWNsb2FrUmVhbG06ICd2Z3JvdXAtdGVzdCcsXHJcbiAga2V5Y2xvYWtDbGllbnRJZDogJ2MyYy1zb2Z0cGhvbmUtYXBwJ1xyXG59OyJdfQ==
|
|
@@ -153,7 +153,10 @@ export class TwilioService {
|
|
|
153
153
|
device.on('incoming', (call) => {
|
|
154
154
|
console.log('Twilio Device incoming call event:', call);
|
|
155
155
|
const notification = this.buildIncomingNotification(call);
|
|
156
|
-
this.
|
|
156
|
+
if (this.previousIncomingCallNotification?.parameters?.AccountSid != notification?.parameters?.AccountSid && this.previousIncomingCallNotification?.parameters?.CallSid != notification?.parameters?.CallSid) {
|
|
157
|
+
this.incomingCallNotification.next(notification);
|
|
158
|
+
this.previousIncomingCallNotification = call;
|
|
159
|
+
}
|
|
157
160
|
if (this.acceptedCallList.length > 0 || this.primaryHasCall) {
|
|
158
161
|
console.log('primary device: concurrent call arriving – spare device will handle it');
|
|
159
162
|
this.isShowIncomingCall = true;
|
|
@@ -487,7 +490,10 @@ export class TwilioService {
|
|
|
487
490
|
this.incomingCallDetail = call;
|
|
488
491
|
this.isShowIncomingCall = true;
|
|
489
492
|
const notification = this.buildIncomingNotification(call);
|
|
490
|
-
this.
|
|
493
|
+
if (this.previousIncomingCallNotification?.parameters?.AccountSid != call?.parameters?.AccountSid && this.previousIncomingCallNotification?.parameters?.CallSid != call?.parameters?.CallSid) {
|
|
494
|
+
this.incomingCallNotification.next(notification);
|
|
495
|
+
this.previousIncomingCallNotification = call;
|
|
496
|
+
}
|
|
491
497
|
console.log('spare device: incoming call', call);
|
|
492
498
|
});
|
|
493
499
|
spare.on('error', (error) => {
|
|
@@ -632,4 +638,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
632
638
|
providedIn: 'root'
|
|
633
639
|
}]
|
|
634
640
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ExtensionService }]; } });
|
|
635
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBc0R4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF0RDVDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFHdEYsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUU5QyxVQUFLLEdBQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxL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QUFPLENBQUMsSUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM3QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDekIsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZO2dCQUNqRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYzthQUMvRTtZQUNELGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRTtTQUNuRCxDQUFDLENBQUE7SUFDSixDQUFDOzsyR0F4b0JVLGFBQWE7K0dBQWIsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxQYXlsb2FkIHtcclxuICBudW1iZXI6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaW1nOiBzdHJpbmc7XHJcbiAgY2FsbGVySWQ6c3RyaW5nO1xyXG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XHJcbiAgZnJvbTpzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcgIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHdpbGlvU2VydmljZSB7XHJcbiAgXHJcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY3VycmVudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGwgfCBudWxsPihudWxsKTtcclxuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxyXG4gIGRldmljZTphbnk7XHJcbiAgY2FsbCE6IENhbGw7XHJcbiAgaW5jb21pbmdDYWxsVG9rZW46c3RyaW5nPScnO1xyXG4gIG91dGdvaW5nQ2FsbFRva2VuPzpzdHJpbmc7XHJcbiAgY2FsbFR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ05JTCcpO1xyXG4gIGluY29taW5nQ2FsbERldGFpbDogYW55OyAvLyBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmdcclxuICB0b2tlbjphbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgaXNOZXdDb250YWN0QWRkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB1cGRhdGVSZWNlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGhhbmRsZUZyb21Ob3RpZmljYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG5cclxuICBlbmRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgZGlhbE51bWJlckZyb21PdGhlck1vZHVsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlhbFBheWxvYWQ+KHsgbnVtYmVyOiAnJywgbmFtZTogJycsIGltZzogJycsIGNhbGxlcklkOiAnJywgaXNEaWFsRnJvbUhpc3Rvcnk6IGZhbHNlLCBmcm9tOiAnJyB9KTtcclxuXHJcbiAgdG9nZ2xlQ2FsbGVySWRBbGVydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNUcmlhbE92ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1BheW1lbnREdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0F2YWlsYWJsZU51bWJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbGxlcklkTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICB0cmlnZ2VyU01TUmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG5cclxuICB0b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgZGV2aWNlSWQ6IGFueTtcclxuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBpc1Nob3dJbmNvbWluZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ1JJVElDQUw6IFRyYWNrIGFsbCBhY2NlcHRlZCBDYWxsIG9iamVjdHMgKG1pcnJvcnMgaU9TIGFjY2VwdGVkQ2FsbExpc3QpXHJcbiAgLy8gVXNlZCB0byBndWFyZCBkZXZpY2UgcmUtaW5pdGlhbGl6YXRpb24gc28gYWN0aXZlIGNhbGxzIGFyZSBuZXZlciB0b3JuIGRvd25cclxuICBhY2NlcHRlZENhbGxMaXN0OiBDYWxsW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBwcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3BhcmVEZXZpY2U6IGFueSA9IG51bGw7XHJcbiAgc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGVuZGluZ0luY29taW5nRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgcHJpdmF0ZSBleHRyYURldmljZXMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gIGluY29taW5nQ2FsbHNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG5cclxuICBwcml2YXRlIHRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlUaW1lcjogYW55ID0gbnVsbDtcclxuICAvLyBSZWZlcmVuY2VzIHRvIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBgdGhpcy5kZXZpY2VgLFxyXG4gIC8vIHNvIGFuIGludGVudGlvbmFsIHJlcGxhY2UgY2FuIGRldGFjaCBleGFjdGx5IHRob3NlIHR3byBiZWZvcmUgZGVzdHJveSgpIHdpdGhvdXRcclxuICAvLyB0b3VjaGluZyBhbnkgbGlzdGVuZXJzIHRoZSBUd2lsaW8gU0RLIGl0c2VsZiBtYXkgaGF2ZSB3aXJlZCB0byB0aGUgc2FtZSBFdmVudEVtaXR0ZXIuXHJcbiAgcHJpdmF0ZSBjdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcjogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXI6IGFueSA9IG51bGw7XHJcbiAgaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKTtcclxuICAgIC8vIFNhZmV0eSBuZXQgZm9yIGxvbmcgaWRsZS9zbGVlcCBwZXJpb2RzOiB0aGUgc2lnbmFsaW5nIHNvY2tldCBjYW4gZGllIHNpbGVudGx5XHJcbiAgICAvLyAoT1Mgc3VzcGVuZHMgdGltZXJzLCB0YWIgaXMgYmFja2dyb3VuZGVkKSB3aXRob3V0IGV2ZXIgZmlyaW5nICdlcnJvcicvJ3VucmVnaXN0ZXJlZCcuXHJcbiAgICAvLyBSZS1jaGVjayBkZXZpY2UgaGVhbHRoIHdoZW5ldmVyIHRoZSBhcHAgYmVjb21lcyBhY3RpdmUvb25saW5lIGFnYWluLlxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcclxuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgdGhpcy5lbnN1cmVEZXZpY2VIZWFsdGh5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICgpID0+IHRoaXMuZW5zdXJlRGV2aWNlSGVhbHRoeSgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRva2VuKCkge1xyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCB8fCBvZihudWxsKTtcclxuICAgIH1cclxuICAgIC8vIEEgZmV0Y2ggaXMgYWxyZWFkeSBpbiBmbGlnaHQg4oCUIEFwcEluaXRpYWxpemVyU2VydmljZSBhbmQgdGhlIGRpYWxib3ggY29tcG9uZW50XHJcbiAgICAvLyBib3RoIGNhbGwgaW5pdGlhbGl6ZVR3aWxpb0RldmljZSgpIG9uIHN0YXJ0dXAsIGFuZCB3aXRob3V0IHRoaXMgdGhleSdkIHJhY2U6XHJcbiAgICAvLyB0aGUgc2Vjb25kIGNhbGwgd291bGQgZmlyZSBpdHMgb3duIHRva2VuIHJlcXVlc3QgYW5kLCBvbmNlIHJlc29sdmVkLCBjYWxsXHJcbiAgICAvLyBpbml0aWFsaXplRGV2aWNlKCkgYWdhaW4sIGRlc3Ryb3lpbmcgdGhlIGRldmljZSB0aGUgZmlyc3QgY2FsbCBqdXN0IGNyZWF0ZWQgYW5kXHJcbiAgICAvLyB0b3VjaGluZyBvZmYgYSBzcHVyaW91cyAndW5yZWdpc3RlcmVkJyAtPiByZWNvdmVyeSBjYXNjYWRlLiBTaGFyZSB0aGUgc2FtZVxyXG4gICAgLy8gaW4tZmxpZ2h0IHJlcXVlc3QgaW5zdGVhZC5cclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0SW5jb21pbmdDYWxsVG9rZW4odGhpcy5kZXZpY2VJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlSWQnKSkucGlwZShcclxuICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbFRva2VuID0gZGF0YS50b2tlbjtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW4tdG9rZW4nLCBkYXRhLnRva2VuKTtcclxuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIFR3aWxpbyB0b2tlbjonLCBlcnJvcik7XHJcbiAgICAgICAgLy8gQWxsb3cgYSBmcmVzaCBhdHRlbXB0IG5leHQgdGltZSBzaW5jZSB0aGlzIG9uZSBmYWlsZWQuXHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICAgc2hhcmVSZXBsYXkoMSkgLy8gQ2FjaGUgdGhlIHJlc3VsdCBmb3Igc3Vic2VxdWVudCBzdWJzY3JpYmVyc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0aWFsaXplVHdpbGlvRGV2aWNlKGRldmljZUlkOiBhbnkpIHtcclxuICAgIHRoaXMuZGV2aWNlSWQgPSBkZXZpY2VJZDtcclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQgJiYgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVEZXZpY2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVEZXZpY2UoKSB7XHJcbiAgICBpZiAodGhpcy5kZXZpY2UpIHtcclxuICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTa2lwcGluZyBkZXZpY2UgcmUtaW5pdDogYWN0aXZlIGFjY2VwdGVkIGNhbGxzIGV4aXN0OicsIHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBEZXRhY2ggdGhlICd1bnJlZ2lzdGVyZWQnLydlcnJvcicgaGFuZGxlcnMgd2UgYXR0YWNoZWQgYmVmb3JlIGRlc3Ryb3lpbmcsIHNvXHJcbiAgICAgIC8vIHRoaXMgKmludGVudGlvbmFsKiB0ZWFyZG93biBjYW4ndCBmaXJlIHRoZW0gYmVsb3cg4oCUIG90aGVyd2lzZSBhIGRlbGliZXJhdGVcclxuICAgICAgLy8gcmVwbGFjZSBsb29rcyBpZGVudGljYWwgdG8gYW4gdW5leHBlY3RlZCBkcm9wIGFuZCB0b3VjaGVzIG9mZiBhXHJcbiAgICAgIC8vIGRlc3Ryb3kgLT4gJ3VucmVnaXN0ZXJlZCcgLT4gc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSAtPiBkZXN0cm95IGNhc2NhZGUuXHJcbiAgICAgIC8vIChPbmx5IHJlbW92ZXMgb3VyIG93biBoYW5kbGVycywgbm90IGFueXRoaW5nIHRoZSBUd2lsaW8gU0RLIGl0c2VsZiBtYXkgaGF2ZVxyXG4gICAgICAvLyB3aXJlZCB0byB0aGUgc2FtZSBFdmVudEVtaXR0ZXIsIHNvIGl0cyBvd24gZGVzdHJveSgpL2NsZWFudXAgaXMgdW5hZmZlY3RlZC4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERldmljZVVucmVnaXN0ZXJlZEhhbmRsZXIpIHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlLnJlbW92ZUxpc3RlbmVyKCd1bnJlZ2lzdGVyZWQnLCB0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlcikge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5jdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIGNvbnNvbGUubG9nKCcxNTMgY2FsbCBlbmQnKVxyXG4gICAgICB0aGlzLmRldmljZS5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIFR3aWxpbyB0b2tlbiBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRldmljZTogYW55ID0gbmV3IERldmljZSh0aGlzLmluY29taW5nQ2FsbFRva2VuLCB7IGFsbG93SW5jb21pbmdXaGlsZUJ1c3k6IHRydWUgfSk7XHJcbiAgICB0aGlzLmRldmljZSA9IGRldmljZTtcclxuXHJcbiAgICBkZXZpY2Uub24oJ3JlZ2lzdGVyZWQnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIHRoaXMucmVjb3ZlcnlBdHRlbXB0cyA9IDEwO1xyXG4gICAgICAvLyBBIHJlY292ZXJ5IGF0dGVtcHQgbWF5IGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgYW4gZWFybGllciBkZXZpY2UgaW5zdGFuY2VcclxuICAgICAgLy8gYmVmb3JlIHRoaXMgb25lIGNhbWUgdXAg4oCUIGl0J3Mgc3RhbGUgbm93LCBjYW5jZWwgaXQgc28gaXQgY2FuJ3QgdGVhciB0aGlzXHJcbiAgICAgIC8vIGhlYWx0aHkgZGV2aWNlIGRvd24gbGF0ZXIuXHJcbiAgICAgIGlmICh0aGlzLnJlY292ZXJ5VGltZXIpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvdmVyeVRpbWVyKTtcclxuICAgICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFR3aWxpbyBmaXJlcyB0aGlzIH4zIG1pbnV0ZXMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gU3dhcCBpbiBhXHJcbiAgICAvLyBmcmVzaCBvbmUgdmlhIHVwZGF0ZVRva2VuKCkgc28gdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIG5ldmVyIGhhcyB0byBkcm9wXHJcbiAgICAvLyBpbiB0aGUgZmlyc3QgcGxhY2UgKHRoaXMgaXMgdGhlIG1haW4gY2F1c2Ugb2YgXCJpZGxlIGZvciBhIHdoaWxlLCBCRSBzdGlsbFxyXG4gICAgLy8gbm90aWZpZXMgYnV0IFR3aWxpbyBpbmNvbWluZyBldmVudCBuZXZlciBmaXJlc1wiKS5cclxuICAgIGRldmljZS5vbigndG9rZW5XaWxsRXhwaXJlJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlZnJlc2hEZXZpY2VUb2tlbigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGV2aWNlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIGluY29taW5nIGNhbGwgZXZlbnQ6JywgY2FsbCk7XHJcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDAgfHwgdGhpcy5wcmltYXJ5SGFzQ2FsbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmltYXJ5IGRldmljZTogY29uY3VycmVudCBjYWxsIGFycml2aW5nIOKAkyBzcGFyZSBkZXZpY2Ugd2lsbCBoYW5kbGUgaXQnKTtcclxuICAgICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gdHJ1ZTtcclxuICAgICAgLy8gQXJtIGEgc3BhcmUgZGV2aWNlIHJpZ2h0IG5vdyAoYmVmb3JlIHRoZSB1c2VyIGV2ZW4gYWNjZXB0cykgc28gaXQgY2FuXHJcbiAgICAgIC8vIHJlZ2lzdGVyIGluIHRpbWUgZm9yIGFueSBjYWxsIHRoYXQgYXJyaXZlcyBzZWNvbmRzIGxhdGVyLlxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luY29taW5nTXV0ZWQpIHtcclxuICAgICAgICB0cnkgeyBkZXZpY2UuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICBjYWxsLm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luY29taW5nIGNhbGwgYW5zd2VyZWQvYWNjZXB0ZWQnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGRpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdjYW5jZWwnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGxlciBodW5nIHVwIGJlZm9yZSBhbnN3ZXInKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbigncmVqZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHJlamVjdGVkJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50cmFja0luY29taW5nQ2FsbChjYWxsKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgPSBjYWxsO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBvbkRldmljZUVycm9yID0gKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgLy8gU3RhbGUgZXZlbnQgZnJvbSBhIGRldmljZSB3ZSd2ZSBhbHJlYWR5IGludGVudGlvbmFsbHkgcmVwbGFjZWQg4oCUIGlnbm9yZS5cclxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5lcnJvcignVHdpbGlvIERldmljZSBFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIgPSBvbkRldmljZUVycm9yO1xyXG4gICAgZGV2aWNlLm9uKCdlcnJvcicsIG9uRGV2aWNlRXJyb3IpO1xyXG5cclxuICAgIGNvbnN0IG9uRGV2aWNlVW5yZWdpc3RlcmVkID0gKCkgPT4ge1xyXG4gICAgICAvLyBTdGFsZSBldmVudCBmcm9tIGEgZGV2aWNlIHdlJ3ZlIGFscmVhZHkgaW50ZW50aW9uYWxseSByZXBsYWNlZCDigJQgaWdub3JlLlxyXG4gICAgICBpZiAodGhpcy5kZXZpY2UgIT09IGRldmljZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudERldmljZVVucmVnaXN0ZXJlZEhhbmRsZXIgPSBvbkRldmljZVVucmVnaXN0ZXJlZDtcclxuICAgIGRldmljZS5vbigndW5yZWdpc3RlcmVkJywgb25EZXZpY2VVbnJlZ2lzdGVyZWQpO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIEFGVEVSIGF0dGFjaGluZyBhbGwgbGlzdGVuZXJzXHJcbiAgICBkZXZpY2UucmVnaXN0ZXIoKTtcclxuICAgIGNvbnNvbGUubG9nKCdkZXZpY2UgY3JlYXRlZCcsIGRldmljZSk7XHJcbiAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCB8fCBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIC8vIFByb2FjdGl2ZWx5IHN3YXAgaW4gYSBmcmVzaCBhY2Nlc3MgdG9rZW4gYWhlYWQgb2YgZXhwaXJ5IChzZWUgJ3Rva2VuV2lsbEV4cGlyZSdcclxuICAvLyBhYm92ZSkgc28gdGhlIERldmljZSdzIHNpZ25hbGluZyBjb25uZWN0aW9uIHN1cnZpdmVzIGxvbmcgaWRsZSBwZXJpb2RzLlxyXG4gIHByaXZhdGUgcmVmcmVzaERldmljZVRva2VuKCkge1xyXG4gICAgaWYgKHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEluY29taW5nQ2FsbFRva2VuKHRoaXMuZGV2aWNlSWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbFRva2VuID0gZGF0YS50b2tlbjtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW4tdG9rZW4nLCBkYXRhLnRva2VuKTtcclxuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZT8udXBkYXRlVG9rZW4odGhpcy5pbmNvbWluZ0NhbGxUb2tlbik7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYXBwbHkgcmVmcmVzaGVkIFR3aWxpbyB0b2tlbjonLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVmcmVzaCBUd2lsaW8gdG9rZW4gYWhlYWQgb2YgZXhwaXJ5OicsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gU2VsZi1oZWFsIGFmdGVyIHRoZSBEZXZpY2UgZGllcyAoZXhwaXJlZCB0b2tlbiwgZHJvcHBlZCBzaWduYWxpbmcgc29ja2V0IHdoaWxlXHJcbiAgLy8gaWRsZS9hc2xlZXAsIGV0YykuIE5ldmVyIHJ1bnMgd2hpbGUgYSBjYWxsIGlzIGFjdHVhbGx5IGFjdGl2ZSwgYW5kIGJhY2tzIG9mZiBzbyBhXHJcbiAgLy8gZ2VudWluZWx5IGxvZ2dlZC1vdXQvb2ZmbGluZSB1c2VyIGRvZXNuJ3QgcmV0cnkgZm9yZXZlci5cclxuICBwcml2YXRlIHNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWNvdmVyeVRpbWVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5taW4oMzAwMDAsIDIwMDAgKiBNYXRoLnBvdygyLCB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMpKTtcclxuICAgIHRoaXMucmVjb3ZlcnlBdHRlbXB0cysrO1xyXG4gICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IG51bGw7XHJcbiAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICAgICAgaWYgKCFhdXRoVG9rZW4gfHwgYXV0aFRva2VuID09PSAnbG9nb3V0Jykge1xyXG4gICAgICAgIHRoaXMucmVjb3ZlcnlBdHRlbXB0cyA9IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBkZXZpY2UgcmVjb3ZlcnkgYXR0ZW1wdCBmYWlsZWQ6JywgZXJyKVxyXG4gICAgICB9KTtcclxuICAgIH0sIGRlbGF5KTtcclxuICB9XHJcblxyXG4gIC8vIEJ1aWxkIHRoZSBmdWxsIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9uIHBheWxvYWQgKG1hdGNoZXMgdGhlIHNoYXBlIHRoZSBCRSB1c2VkIHRvXHJcbiAgLy8gcHVzaCBvdmVyIHRoZSBzb2NrZXQpIGZyb20gdGhlIHJhdyBUd2lsaW8gJ2luY29taW5nJyBDYWxsOiBwYXJzZWQgUGFyYW1zIGZpZWxkcyBwbHVzXHJcbiAgLy8gdGhlIGRlcml2ZWQgY2xpZW50U2lkL3BhcnRpY2lwYW50U2lkL25vdGlmaWNhdGlvblR5cGUvdGl0bGUvbXNnQm9keS5cclxuICBidWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGw6IENhbGwpOiBhbnkge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5jb252ZXJ0VG9Kc29uKGNhbGw/LnBhcmFtZXRlcnM/LlsnUGFyYW1zJ10gfHwgJ3t9Jyk7XHJcbiAgICBjb25zdCBjYWxsU2lkID0gY2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBub3RpZmljYXRpb24uY2xpZW50U2lkID0gY2FsbFNpZDtcclxuICAgIC8vIE9ubHkgcmVhbCBUd2lsaW8gU0lEIGV4cG9zZWQgY2xpZW50LXNpZGUgZm9yIHRoaXMgbGVnOyBubyBzZXBhcmF0ZSBwYXJ0aWNpcGFudCBTSURcclxuICAgIC8vIGlzIGF2YWlsYWJsZSwgc28gaXQgbWlycm9ycyBjbGllbnRTaWQuXHJcbiAgICBub3RpZmljYXRpb24ucGFydGljaXBhbnRTaWQgPSBjYWxsU2lkO1xyXG4gICAgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGUgPSAnaW5jb21pbmdjYWxsJztcclxuICAgIG5vdGlmaWNhdGlvbi50aXRsZSA9ICdJbmNvbWluZyBDYWxsJztcclxuICAgIG5vdGlmaWNhdGlvbi5tc2dCb2R5ID0gYHlvdSBoYXZlIGluY29taW5nIGNhbGwgJHtub3RpZmljYXRpb24uZnJvbU5hbWUgfHwgJyd9YDtcclxuICAgIHJldHVybiBub3RpZmljYXRpb247XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9Kc29uKGRhdGE6IHN0cmluZyk6IGFueSB7XHJcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvcm1hdDoga2V5PXZhbHVlJmtleT12YWx1ZVxyXG4gICAgaWYgKGRhdGEuaW5jbHVkZXMoJyYnKSkge1xyXG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGRhdGEpO1xyXG5cclxuICAgICAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICBvYmpba2V5XSA9IHZhbHVlID09PSAndHJ1ZSdcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiB2YWx1ZSA9PT0gJ2ZhbHNlJ1xyXG4gICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgOiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvcm1hdDoge2tleT12YWx1ZSwga2V5PXZhbHVlfVxyXG4gICAgICBjb25zdCB0ZXh0ID0gZGF0YS50cmltKCkucmVwbGFjZSgvXlxce3xcXH0kL2csICcnKTtcclxuXHJcbiAgICAgIHRleHQuc3BsaXQoJywnKS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5pbmRleE9mKCc9Jyk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtLnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpO1xyXG4gICAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBpdGVtLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykgdmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9iai5yZWFkID0gZmFsc2U7XHJcbiAgICBvYmouc2F2ZSA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG4gIC8vIFNhZmV0eSBuZXQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkaWVzIHNpbGVudGx5IGR1cmluZyBhIGxvbmdcclxuICAvLyBzbGVlcC9pZGxlIHBlcmlvZCB3aXRob3V0IGV2ZXIgZmlyaW5nICdlcnJvcicvJ3VucmVnaXN0ZXJlZCcgKHRoZSBPUyBjYW4gc3VzcGVuZFxyXG4gIC8vIHRpbWVycy9zb2NrZXRzIG91dHJpZ2h0KSDigJQgcmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIHdha2VzIHVwLlxyXG4gIHByaXZhdGUgZW5zdXJlRGV2aWNlSGVhbHRoeSgpIHtcclxuICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGV2aWNlIHx8IHRoaXMuZGV2aWNlLnN0YXRlICE9PSAncmVnaXN0ZXJlZCcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBkZXZpY2UgdW5oZWFsdGh5IGFmdGVyIHdha2UvdmlzaWJpbGl0eSBjaGFuZ2UsIHJlLWluaXRpYWxpemluZycpO1xyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGZhaWxlZDonLCBlcnIpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbnRhY3QocGF5bG9hZDogYW55KTogT2JzZXJ2YWJsZTxbXT4ge1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2FkZC9jb250YWN0cy9tYW51YWxseScsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNvbnRhY3QocGF5bG9hZDphbnkpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgdGhpcy50b2tlbn0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvY29udGFjdCcsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlQ29udGFjdChpZDpzdHJpbmcpe1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHBob25lYm9va2lkOiBpZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY29udGFjdC8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcbiAgZ2V0Q29udGFjdExpc3QoKXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWFkL2NvbnRhY3RzJywgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ29udGFjdFRvRmF2b3VyaXRlKHBheWxvYWQ6IGFueSl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwZGF0ZS9mYXZvdXJpdGUnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRGYXZvdXJpdENvbnRhY3RzKCl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZmF2b3VyaXRlL2NvbnRhY3RzJywgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50Q2FsbHMocGFnZUluZGV4Pzogc3RyaW5nLCBwYWdlU2l6ZT86IHN0cmluZywpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9ICB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH07XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9e2hlYWRlcnN9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3JlY2VudC9jYWxscycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcbiAgZGVsZXRlUmVjZW50Q2FsbExvZyhpZDpzdHJpbmd8IHN0cmluZ1tdKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICByZWNvcmRJZDogaWRcclxuICAgIH1cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL2NhbGxzLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkUGhvdG8ocGF5bG9hZDogYW55KXtcclxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKVxyXG4gICAgICB9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwbG9hZC9waG90bycscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGhvdG8oaWQ6c3RyaW5nKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBwaG9uZWJvb2tpZDogaWRcclxuICAgIH1cclxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKVxyXG4gICAgICB9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9waG90by8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvdXRyeUNvZGVUb2FzdCh2YWw6YW55KXtcclxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKVxyXG4gICAgICB9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9zb2Z0cGhvbmUvY291bnRyeWNvZGUvYWxlcnQvJyArIHZhbCwge30sIGh0dHBPcHRpb25zKTtcclxuICB9XHJcbiAgZ2V0VG9OdW1iZXIoZGlhbGxlZE5vOiBzdHJpbmcsIGlzb0NvZGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pLFxyXG4gICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcclxuICAgIH07XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NoZWNrL2NvdW50cnlDb2RlLycgKyBkaWFsbGVkTm8sIGh0dHBPcHRpb25zKTtcclxuICB9IFxyXG4gIFxyXG4gIC8vIFJlY29yZCBhIHJpbmdpbmcgaW5jb21pbmcgQ2FsbCBzbyBpdCBjYW4gbGF0ZXIgYmUgYWNjZXB0ZWQgYnkgaXRzIHNwZWNpZmljIGlkLlxyXG4gIC8vIFRoZSBtYXAgaXMgY2xlYW5lZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNhbGwgaXMgY2FuY2VsbGVkL2Rpc2Nvbm5lY3RlZC9yZWplY3RlZC5cclxuICBwcml2YXRlIHRyYWNrSW5jb21pbmdDYWxsKGNhbGw6IGFueSkge1xyXG4gICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG4gICAgaWYgKGNhbGxTaWQpIHtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLnNldChjYWxsU2lkLCBjYWxsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XHJcbiAgICAgIGlmICghY2FsbFNpZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbHNNYXAuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgICAvLyBJZiB0aGUgY2FsbCBlbmRlZCBiZWZvcmUgdGhlIHVzZXIgYWNjZXB0ZWQgaXQsIGRlc3Ryb3kgdGhlIHBlbmRpbmcgc3BhcmVcclxuICAgICAgLy8gZGV2aWNlIHRoYXQgd2FzIGhvbGRpbmcgaXQgc28gd2UgZG9uJ3QgbGVhayBkZXZpY2UgcmVnaXN0cmF0aW9ucy5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgICAgaWYgKGRldiAmJiAhZGV2Ll9vd25zQWNjZXB0ZWRDYWxsKSB7XHJcbiAgICAgICAgdHJ5IHsgZGV2LmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgY2FsbC5vbignY2FuY2VsJywgY2xlYW51cCk7XHJcbiAgICBjYWxsLm9uKCdkaXNjb25uZWN0JywgY2xlYW51cCk7XHJcbiAgICBjYWxsLm9uKCdyZWplY3QnLCBjbGVhbnVwKTtcclxuICB9XHJcblxyXG4gIC8vIFJlc29sdmUgdGhlIEVYQUNUIHJpbmdpbmcgQ2FsbCBmb3IgYSBnaXZlbiBVSSBlbnRyeSBpZCAocGFydGljaXBhbnQvcmVjb3JkIGlkKS5cclxuICAvLyBGYWxscyBiYWNrIHRvIHRoZSBtb3N0IHJlY2VudCBpbmNvbWluZyBjYWxsIHNvIG9sZGVyIHNpbmdsZS1jYWxsIGZsb3dzIHN0aWxsIHdvcmsuXHJcbiAgZ2V0SW5jb21pbmdDYWxsQnlJZChpZDogYW55KSB7XHJcbiAgICBpZiAoaWQgIT0gbnVsbCAmJiB0aGlzLmluY29taW5nQ2FsbHNNYXAuaGFzKGlkKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmdldChpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwucGFyYW1ldGVycz8uWydDYWxsU2lkJ10gPT0gaWQgPyB0aGlzLmluY29taW5nQ2FsbERldGFpbCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpIHtcclxuICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlKSB7XHJcbiAgICAgIHJldHVybjsgLy8gYSBmcmVlIHNwYXJlIGlzIGFscmVhZHkgd2FpdGluZ1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigncHJlcGFyZVNwYXJlRGV2aWNlOiBubyB0b2tlbiBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3BhcmU6IGFueSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlIH0pO1xyXG4gICAgc3BhcmUuX293bnNBY2NlcHRlZENhbGwgPSBmYWxzZTtcclxuXHJcbiAgICBzcGFyZS5vbigncmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gdHJ1ZTtcclxuICAgICAgLy8gQXBwbHkgdGhlIG11dGUgcHJlZmVyZW5jZSBoZXJlIOKAlCBgc3BhcmUuYXVkaW9gIGlzIG9ubHkgcmVhZHkgYWZ0ZXIgcmVnaXN0cmF0aW9uLFxyXG4gICAgICAvLyBzbyB0aGUgY2FsbCBhYm92ZSAoYmVmb3JlIHJlZ2lzdGVyKCkpIHdhcyBhbHdheXMgYSBuby1vcC5cclxuICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKCF0aGlzLmlzSW5jb21pbmdNdXRlZCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTcGFyZSBkZXZpY2UgcmVnaXN0ZXJlZCDigJMgcmVhZHkgZm9yIHRoZSBuZXh0IGNvbmN1cnJlbnQgY2FsbCcpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2luY29taW5nJywgKGNhbGw6IENhbGwpID0+IHtcclxuICAgICAgLy8gR3VhcmQ6IG9uY2UgdGhpcyBzcGFyZSBpcyBhbHJlYWR5IGhhbmRsaW5nIGEgY2FsbCAocGVuZGluZyBvciBhY2NlcHRlZCksXHJcbiAgICAgIC8vIGlnbm9yZSBhbnkgZnVydGhlciBpbmNvbWluZyBldmVudHMgc28gYW5vdGhlciBzcGFyZSBjYW4gdGFrZSB0aGUgbmV4dCBjYWxsLlxyXG4gICAgICBpZiAoc3BhcmUuX293bnNBY2NlcHRlZENhbGwgfHwgc3BhcmUuX3BlbmRpbmdJbmNvbWluZ0NhbGwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3BhcmUuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPSBjYWxsO1xyXG4gICAgICBjb25zdCBjYWxsU2lkID0gY2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcblxyXG4gICAgICAvLyBUcmFuc2l0aW9uIHRoaXMgc3BhcmUgZnJvbSBcImZyZWVcIiDihpIgXCJwZW5kaW5nXCI6IHJlbW92ZSBpdCBhcyB0aGUgYWN0aXZlXHJcbiAgICAgIC8vIHNwYXJlRGV2aWNlIGFuZCB0cmFjayBpdCBieSBDYWxsU2lkIHNvIG9uQ29uY3VycmVudENhbGxBY2NlcHRlZCBjYW4gZmluZCBpdC5cclxuICAgICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UgPT09IHNwYXJlKSB7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNhbGxTaWQpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuc2V0KGNhbGxTaWQsIHNwYXJlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJbW1lZGlhdGVseSBhcm0gdGhlIE5FWFQgZnJlZSBzcGFyZSBzbyBpdCBpcyByZWFkeSBmb3IgY2FsbCBOKzIgd2l0aG91dFxyXG4gICAgICAvLyB3YWl0aW5nIGZvciB0aGUgdXNlciB0byBhY2NlcHQgdGhpcyBjYWxsIGZpcnN0LlxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luY29taW5nTXV0ZWQpIHtcclxuICAgICAgICB0cnkgeyBzcGFyZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhY2tJbmNvbWluZ0NhbGwoY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsID0gY2FsbDtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uLm5leHQobm90aWZpY2F0aW9uKTtcclxuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignU3BhcmUgZGV2aWNlIGVycm9yOicsIGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLnJlZ2lzdGVyKCk7XHJcbiAgICB0aGlzLnNwYXJlRGV2aWNlID0gc3BhcmU7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpZCA9IGFjY2VwdGVkQ2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoc2lkKSB7XHJcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChzaWQpO1xyXG4gICAgICBpZiAoZGV2KSB7XHJcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCBkZXYpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IG9sZCBzaW5nbGUtc3BhcmUgcGF0aCAoc3BhcmUgc3RpbGwgaG9sZHMgdGhlIGNhbGwpLlxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNwYXJlRGV2aWNlICYmIHRoaXMuc3BhcmVEZXZpY2UuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPT09IGFjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxyXG4gICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUNvbmN1cnJlbnRDYWxsRGV2aWNlKGNhbGxTaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGV2ID0gdGhpcy5leHRyYURldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKGRldikge1xyXG4gICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXHJcbiAgICBjb25zdCBwZW5kaW5nRGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChwZW5kaW5nRGV2KSB7XHJcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBubyBhY2NlcHRlZCBjYWxscyByZW1haW4sIHRlYXIgZG93biBhbGwgc3BhcmUvcGVuZGluZy9leHRyYSBkZXZpY2VzIHNvXHJcbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxyXG4gIHRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgdHJ5IHsgdGhpcy5zcGFyZURldmljZS5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXHJcbiAgZGVzdHJveURldmljZTIoKSB7XHJcbiAgICB0aGlzLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyLWNvbnRyb2xsZWQgc3dpdGNoIChpbiB0aGUgY2FsbC1wcm9ncmVzcyBVSSkuIFdoZW4gT04sIGEgbmV3IGluY29taW5nXHJcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxyXG4gIC8vIG9uZ29pbmcgY2FsbC4gU291cmNlIG9mIHRydXRoIHNvIG5ld2x5IGNyZWF0ZWQgKHNwYXJlKSBkZXZpY2VzIGluaGVyaXQgaXQuXHJcbiAgaXNJbmNvbWluZ011dGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIEFwcGx5IHRoZSBjdXJyZW50IG11dGUgcHJlZmVyZW5jZSB0byBldmVyeSBsaXZlIERldmljZSAocHJpbWFyeSArIHNwYXJlICtcclxuICAvLyBhbnkgY29uY3VycmVudC1jYWxsIGRldmljZXMpIHZpYSBUd2lsaW8ncyBvd24gZGV2aWNlLmF1ZGlvLmluY29taW5nKCkuXHJcbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuaXNJbmNvbWluZ011dGVkOyAvLyByaW5ndG9uZSBlbmFibGVkID0gTk9UIG11dGVkXHJcbiAgICBjb25zdCBhcHBseSA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgfTtcclxuICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgfVxyXG5cclxuICAvLyBUb2dnbGUvc2V0IHRoZSBtdXRlIHN3aXRjaCBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgaXQuXHJcbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luY29taW5nTXV0ZWQgPSBtdXRlZDtcclxuICAgIHRoaXMuYXBwbHlJbmNvbWluZ011dGUoKTtcclxuICAgIGlmIChtdXRlZCkge1xyXG4gICAgICAvLyBkZXZpY2UuYXVkaW8uaW5jb21pbmcoZmFsc2UpIG9ubHkgcHJldmVudHMgZnV0dXJlIHJpbmdzIOKAlCBpdCBkb2VzIE5PVCBzdG9wXHJcbiAgICAgIC8vIGEgY2FsbCB0aGF0IGlzIGFscmVhZHkgcmluZ2luZy4gU3RvcCB0aGUgYWN0aXZlIHJpbmcgZGlyZWN0bHkgdmlhIHNvdW5kY2FjaGUuXHJcbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHsgZGV2Py5fc291bmRjYWNoZT8uZ2V0Py4oJ2luY29taW5nJyk/LnN0b3A/LigpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbmNvbWluZ1BhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IHN0cmluZywgY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihgJHtlbnZpcm9ubWVudC5hcGlVcmx9L3V0aWxpdGllcy9leHQvYWRkL2luY29taW5nL3BhcnRpY2lwYW50LyR7cGFydGljaXBhbnRJZH0vJHtjb25mZXJlbmNlSWR9YCxodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBjb25uZWN0KGRhdGE/OiBhbnkpe1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlLl9hY3RpdmVDYWxsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgVG9rZW46IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
641
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBdUR4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF2RDVDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFHdEYsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUU5QyxVQUFLLEdBQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxL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TUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxQYXlsb2FkIHtcclxuICBudW1iZXI6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaW1nOiBzdHJpbmc7XHJcbiAgY2FsbGVySWQ6c3RyaW5nO1xyXG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XHJcbiAgZnJvbTpzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcgIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHdpbGlvU2VydmljZSB7XHJcbiAgXHJcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY3VycmVudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGwgfCBudWxsPihudWxsKTtcclxuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxyXG4gIGRldmljZTphbnk7XHJcbiAgY2FsbCE6IENhbGw7XHJcbiAgaW5jb21pbmdDYWxsVG9rZW46c3RyaW5nPScnO1xyXG4gIG91dGdvaW5nQ2FsbFRva2VuPzpzdHJpbmc7XHJcbiAgY2FsbFR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ05JTCcpO1xyXG4gIGluY29taW5nQ2FsbERldGFpbDogYW55OyAvLyBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmdcclxuICB0b2tlbjphbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgaXNOZXdDb250YWN0QWRkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB1cGRhdGVSZWNlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGhhbmRsZUZyb21Ob3RpZmljYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG5cclxuICBlbmRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgZGlhbE51bWJlckZyb21PdGhlck1vZHVsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlhbFBheWxvYWQ+KHsgbnVtYmVyOiAnJywgbmFtZTogJycsIGltZzogJycsIGNhbGxlcklkOiAnJywgaXNEaWFsRnJvbUhpc3Rvcnk6IGZhbHNlLCBmcm9tOiAnJyB9KTtcclxuXHJcbiAgdG9nZ2xlQ2FsbGVySWRBbGVydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNUcmlhbE92ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1BheW1lbnREdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0F2YWlsYWJsZU51bWJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbGxlcklkTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICB0cmlnZ2VyU01TUmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG5cclxuICB0b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgZGV2aWNlSWQ6IGFueTtcclxuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBpc1Nob3dJbmNvbWluZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ1JJVElDQUw6IFRyYWNrIGFsbCBhY2NlcHRlZCBDYWxsIG9iamVjdHMgKG1pcnJvcnMgaU9TIGFjY2VwdGVkQ2FsbExpc3QpXHJcbiAgLy8gVXNlZCB0byBndWFyZCBkZXZpY2UgcmUtaW5pdGlhbGl6YXRpb24gc28gYWN0aXZlIGNhbGxzIGFyZSBuZXZlciB0b3JuIGRvd25cclxuICBhY2NlcHRlZENhbGxMaXN0OiBDYWxsW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBwcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3BhcmVEZXZpY2U6IGFueSA9IG51bGw7XHJcbiAgc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGVuZGluZ0luY29taW5nRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgcHJpdmF0ZSBleHRyYURldmljZXMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gIGluY29taW5nQ2FsbHNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG5cclxuICBwcml2YXRlIHRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlUaW1lcjogYW55ID0gbnVsbDtcclxuICAvLyBSZWZlcmVuY2VzIHRvIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBgdGhpcy5kZXZpY2VgLFxyXG4gIC8vIHNvIGFuIGludGVudGlvbmFsIHJlcGxhY2UgY2FuIGRldGFjaCBleGFjdGx5IHRob3NlIHR3byBiZWZvcmUgZGVzdHJveSgpIHdpdGhvdXRcclxuICAvLyB0b3VjaGluZyBhbnkgbGlzdGVuZXJzIHRoZSBUd2lsaW8gU0RLIGl0c2VsZiBtYXkgaGF2ZSB3aXJlZCB0byB0aGUgc2FtZSBFdmVudEVtaXR0ZXIuXHJcbiAgcHJpdmF0ZSBjdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcjogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXI6IGFueSA9IG51bGw7XHJcbiAgaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHJldmlvdXNJbmNvbWluZ0NhbGxOb3RpZmljYXRpb246IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpO1xyXG4gICAgLy8gU2FmZXR5IG5ldCBmb3IgbG9uZyBpZGxlL3NsZWVwIHBlcmlvZHM6IHRoZSBzaWduYWxpbmcgc29ja2V0IGNhbiBkaWUgc2lsZW50bHlcclxuICAgIC8vIChPUyBzdXNwZW5kcyB0aW1lcnMsIHRhYiBpcyBiYWNrZ3JvdW5kZWQpIHdpdGhvdXQgZXZlciBmaXJpbmcgJ2Vycm9yJy8ndW5yZWdpc3RlcmVkJy5cclxuICAgIC8vIFJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCBiZWNvbWVzIGFjdGl2ZS9vbmxpbmUgYWdhaW4uXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4gdGhpcy5lbnN1cmVEZXZpY2VIZWFsdGh5KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplVG9rZW4oKSB7XHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kIHx8IG9mKG51bGwpO1xyXG4gICAgfVxyXG4gICAgLy8gQSBmZXRjaCBpcyBhbHJlYWR5IGluIGZsaWdodCDigJQgQXBwSW5pdGlhbGl6ZXJTZXJ2aWNlIGFuZCB0aGUgZGlhbGJveCBjb21wb25lbnRcclxuICAgIC8vIGJvdGggY2FsbCBpbml0aWFsaXplVHdpbGlvRGV2aWNlKCkgb24gc3RhcnR1cCwgYW5kIHdpdGhvdXQgdGhpcyB0aGV5J2QgcmFjZTpcclxuICAgIC8vIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBmaXJlIGl0cyBvd24gdG9rZW4gcmVxdWVzdCBhbmQsIG9uY2UgcmVzb2x2ZWQsIGNhbGxcclxuICAgIC8vIGluaXRpYWxpemVEZXZpY2UoKSBhZ2FpbiwgZGVzdHJveWluZyB0aGUgZGV2aWNlIHRoZSBmaXJzdCBjYWxsIGp1c3QgY3JlYXRlZCBhbmRcclxuICAgIC8vIHRvdWNoaW5nIG9mZiBhIHNwdXJpb3VzICd1bnJlZ2lzdGVyZWQnIC0+IHJlY292ZXJ5IGNhc2NhZGUuIFNoYXJlIHRoZSBzYW1lXHJcbiAgICAvLyBpbi1mbGlnaHQgcmVxdWVzdCBpbnN0ZWFkLlxyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VJZCcpKS5waXBlKFxyXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgVHdpbGlvIHRva2VuOicsIGVycm9yKTtcclxuICAgICAgICAvLyBBbGxvdyBhIGZyZXNoIGF0dGVtcHQgbmV4dCB0aW1lIHNpbmNlIHRoaXMgb25lIGZhaWxlZC5cclxuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciBzdWJzZXF1ZW50IHN1YnNjcmliZXJzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoZGV2aWNlSWQ6IGFueSkge1xyXG4gICAgdGhpcy5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCAmJiB0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcclxuICAgIGlmICh0aGlzLmRldmljZSkge1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIGRldmljZSByZS1pbml0OiBhY3RpdmUgYWNjZXB0ZWQgY2FsbHMgZXhpc3Q6JywgdGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIERldGFjaCB0aGUgJ3VucmVnaXN0ZXJlZCcvJ2Vycm9yJyBoYW5kbGVycyB3ZSBhdHRhY2hlZCBiZWZvcmUgZGVzdHJveWluZywgc29cclxuICAgICAgLy8gdGhpcyAqaW50ZW50aW9uYWwqIHRlYXJkb3duIGNhbid0IGZpcmUgdGhlbSBiZWxvdyDigJQgb3RoZXJ3aXNlIGEgZGVsaWJlcmF0ZVxyXG4gICAgICAvLyByZXBsYWNlIGxvb2tzIGlkZW50aWNhbCB0byBhbiB1bmV4cGVjdGVkIGRyb3AgYW5kIHRvdWNoZXMgb2ZmIGFcclxuICAgICAgLy8gZGVzdHJveSAtPiAndW5yZWdpc3RlcmVkJyAtPiBzY2hlZHVsZURldmljZVJlY292ZXJ5IC0+IGRlc3Ryb3kgY2FzY2FkZS5cclxuICAgICAgLy8gKE9ubHkgcmVtb3ZlcyBvdXIgb3duIGhhbmRsZXJzLCBub3QgYW55dGhpbmcgdGhlIFR3aWxpbyBTREsgaXRzZWxmIG1heSBoYXZlXHJcbiAgICAgIC8vIHdpcmVkIHRvIHRoZSBzYW1lIEV2ZW50RW1pdHRlciwgc28gaXRzIG93biBkZXN0cm95KCkvY2xlYW51cCBpcyB1bmFmZmVjdGVkLilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcikge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2UucmVtb3ZlTGlzdGVuZXIoJ3VucmVnaXN0ZXJlZCcsIHRoaXMuY3VycmVudERldmljZVVucmVnaXN0ZXJlZEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoXykge31cclxuICAgICAgY29uc29sZS5sb2coJzE1MyBjYWxsIGVuZCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gVHdpbGlvIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGV2aWNlOiBhbnkgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cclxuICAgIGRldmljZS5vbigncmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMTA7XHJcbiAgICAgIC8vIEEgcmVjb3ZlcnkgYXR0ZW1wdCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCBieSBhbiBlYXJsaWVyIGRldmljZSBpbnN0YW5jZVxyXG4gICAgICAvLyBiZWZvcmUgdGhpcyBvbmUgY2FtZSB1cCDigJQgaXQncyBzdGFsZSBub3csIGNhbmNlbCBpdCBzbyBpdCBjYW4ndCB0ZWFyIHRoaXNcclxuICAgICAgLy8gaGVhbHRoeSBkZXZpY2UgZG93biBsYXRlci5cclxuICAgICAgaWYgKHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY292ZXJ5VGltZXIpO1xyXG4gICAgICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVHdpbGlvIGZpcmVzIHRoaXMgfjMgbWludXRlcyBiZWZvcmUgdGhlIGFjY2VzcyB0b2tlbiBleHBpcmVzLiBTd2FwIGluIGFcclxuICAgIC8vIGZyZXNoIG9uZSB2aWEgdXBkYXRlVG9rZW4oKSBzbyB0aGUgc2lnbmFsaW5nIGNvbm5lY3Rpb24gbmV2ZXIgaGFzIHRvIGRyb3BcclxuICAgIC8vIGluIHRoZSBmaXJzdCBwbGFjZSAodGhpcyBpcyB0aGUgbWFpbiBjYXVzZSBvZiBcImlkbGUgZm9yIGEgd2hpbGUsIEJFIHN0aWxsXHJcbiAgICAvLyBub3RpZmllcyBidXQgVHdpbGlvIGluY29taW5nIGV2ZW50IG5ldmVyIGZpcmVzXCIpLlxyXG4gICAgZGV2aWNlLm9uKCd0b2tlbldpbGxFeHBpcmUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaERldmljZVRva2VuKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZXZpY2Uub24oJ2luY29taW5nJywgKGNhbGw6IENhbGwgfCBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgaW5jb21pbmcgY2FsbCBldmVudDonLCBjYWxsKTtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpO1xyXG4gICAgICBpZih0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5BY2NvdW50U2lkICE9IG5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQWNjb3VudFNpZCAmJiB0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9IG5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQ2FsbFNpZCl7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNJbmNvbWluZ0NhbGxOb3RpZmljYXRpb24gPSBjYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnByaW1hcnlIYXNDYWxsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByaW1hcnkgZGV2aWNlOiBjb25jdXJyZW50IGNhbGwgYXJyaXZpbmcg4oCTIHNwYXJlIGRldmljZSB3aWxsIGhhbmRsZSBpdCcpO1xyXG4gICAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IHRydWU7XHJcbiAgICAgIC8vIEFybSBhIHNwYXJlIGRldmljZSByaWdodCBub3cgKGJlZm9yZSB0aGUgdXNlciBldmVuIGFjY2VwdHMpIHNvIGl0IGNhblxyXG4gICAgICAvLyByZWdpc3RlciBpbiB0aW1lIGZvciBhbnkgY2FsbCB0aGF0IGFycml2ZXMgc2Vjb25kcyBsYXRlci5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgZGV2aWNlLmF1ZGlvPy5pbmNvbWluZyhmYWxzZSk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIH1cclxuICAgICAgY2FsbC5vbignYWNjZXB0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdJbmNvbWluZyBjYWxsIGFuc3dlcmVkL2FjY2VwdGVkJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCBkaXNjb25uZWN0ZWQnKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbignY2FuY2VsJywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsZXIgaHVuZyB1cCBiZWZvcmUgYW5zd2VyJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCByZWplY3RlZCcpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHJhY2tJbmNvbWluZ0NhbGwoY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsID0gY2FsbDtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb25EZXZpY2VFcnJvciA9IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIC8vIFN0YWxlIGV2ZW50IGZyb20gYSBkZXZpY2Ugd2UndmUgYWxyZWFkeSBpbnRlbnRpb25hbGx5IHJlcGxhY2VkIOKAlCBpZ25vcmUuXHJcbiAgICAgIGlmICh0aGlzLmRldmljZSAhPT0gZGV2aWNlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBEZXZpY2UgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyID0gb25EZXZpY2VFcnJvcjtcclxuICAgIGRldmljZS5vbignZXJyb3InLCBvbkRldmljZUVycm9yKTtcclxuXHJcbiAgICBjb25zdCBvbkRldmljZVVucmVnaXN0ZXJlZCA9ICgpID0+IHtcclxuICAgICAgLy8gU3RhbGUgZXZlbnQgZnJvbSBhIGRldmljZSB3ZSd2ZSBhbHJlYWR5IGludGVudGlvbmFsbHkgcmVwbGFjZWQg4oCUIGlnbm9yZS5cclxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgdW5yZWdpc3RlcmVkJyk7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyID0gb25EZXZpY2VVbnJlZ2lzdGVyZWQ7XHJcbiAgICBkZXZpY2Uub24oJ3VucmVnaXN0ZXJlZCcsIG9uRGV2aWNlVW5yZWdpc3RlcmVkKTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciBBRlRFUiBhdHRhY2hpbmcgYWxsIGxpc3RlbmVyc1xyXG4gICAgZGV2aWNlLnJlZ2lzdGVyKCk7XHJcbiAgICBjb25zb2xlLmxvZygnZGV2aWNlIGNyZWF0ZWQnLCBkZXZpY2UpO1xyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLyBQcm9hY3RpdmVseSBzd2FwIGluIGEgZnJlc2ggYWNjZXNzIHRva2VuIGFoZWFkIG9mIGV4cGlyeSAoc2VlICd0b2tlbldpbGxFeHBpcmUnXHJcbiAgLy8gYWJvdmUpIHNvIHRoZSBEZXZpY2UncyBzaWduYWxpbmcgY29ubmVjdGlvbiBzdXJ2aXZlcyBsb25nIGlkbGUgcGVyaW9kcy5cclxuICBwcml2YXRlIHJlZnJlc2hEZXZpY2VUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VJZCcpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2U/LnVwZGF0ZVRva2VuKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGx5IHJlZnJlc2hlZCBUd2lsaW8gdG9rZW46JywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggVHdpbGlvIHRva2VuIGFoZWFkIG9mIGV4cGlyeTonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGYtaGVhbCBhZnRlciB0aGUgRGV2aWNlIGRpZXMgKGV4cGlyZWQgdG9rZW4sIGRyb3BwZWQgc2lnbmFsaW5nIHNvY2tldCB3aGlsZVxyXG4gIC8vIGlkbGUvYXNsZWVwLCBldGMpLiBOZXZlciBydW5zIHdoaWxlIGEgY2FsbCBpcyBhY3R1YWxseSBhY3RpdmUsIGFuZCBiYWNrcyBvZmYgc28gYVxyXG4gIC8vIGdlbnVpbmVseSBsb2dnZWQtb3V0L29mZmxpbmUgdXNlciBkb2Vzbid0IHJldHJ5IGZvcmV2ZXIuXHJcbiAgcHJpdmF0ZSBzY2hlZHVsZURldmljZVJlY292ZXJ5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKDMwMDAwLCAyMDAwICogTWF0aC5wb3coMiwgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKSk7XHJcbiAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMrKztcclxuICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xyXG4gICAgICBjb25zdCBhdXRoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgICAgIGlmICghYXV0aFRva2VuIHx8IGF1dGhUb2tlbiA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGF0dGVtcHQgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9LCBkZWxheSk7XHJcbiAgfVxyXG5cclxuICAvLyBCdWlsZCB0aGUgZnVsbCBpbmNvbWluZy1jYWxsIG5vdGlmaWNhdGlvbiBwYXlsb2FkIChtYXRjaGVzIHRoZSBzaGFwZSB0aGUgQkUgdXNlZCB0b1xyXG4gIC8vIHB1c2ggb3ZlciB0aGUgc29ja2V0KSBmcm9tIHRoZSByYXcgVHdpbGlvICdpbmNvbWluZycgQ2FsbDogcGFyc2VkIFBhcmFtcyBmaWVsZHMgcGx1c1xyXG4gIC8vIHRoZSBkZXJpdmVkIGNsaWVudFNpZC9wYXJ0aWNpcGFudFNpZC9ub3RpZmljYXRpb25UeXBlL3RpdGxlL21zZ0JvZHkuXHJcbiAgYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsOiBDYWxsKTogYW55IHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuY29udmVydFRvSnNvbihjYWxsPy5wYXJhbWV0ZXJzPy5bJ1BhcmFtcyddIHx8ICd7fScpO1xyXG4gICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG4gICAgbm90aWZpY2F0aW9uLmNsaWVudFNpZCA9IGNhbGxTaWQ7XHJcbiAgICAvLyBPbmx5IHJlYWwgVHdpbGlvIFNJRCBleHBvc2VkIGNsaWVudC1zaWRlIGZvciB0aGlzIGxlZzsgbm8gc2VwYXJhdGUgcGFydGljaXBhbnQgU0lEXHJcbiAgICAvLyBpcyBhdmFpbGFibGUsIHNvIGl0IG1pcnJvcnMgY2xpZW50U2lkLlxyXG4gICAgbm90aWZpY2F0aW9uLnBhcnRpY2lwYW50U2lkID0gY2FsbFNpZDtcclxuICAgIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlID0gJ2luY29taW5nY2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24udGl0bGUgPSAnSW5jb21pbmcgQ2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24ubXNnQm9keSA9IGB5b3UgaGF2ZSBpbmNvbWluZyBjYWxsICR7bm90aWZpY2F0aW9uLmZyb21OYW1lIHx8ICcnfWA7XHJcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvSnNvbihkYXRhOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3JtYXQ6IGtleT12YWx1ZSZrZXk9dmFsdWVcclxuICAgIGlmIChkYXRhLmluY2x1ZGVzKCcmJykpIHtcclxuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXRhKTtcclxuXHJcbiAgICAgIHBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZSA9PT0gJ3RydWUnXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogdmFsdWUgPT09ICdmYWxzZSdcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3JtYXQ6IHtrZXk9dmFsdWUsIGtleT12YWx1ZX1cclxuICAgICAgY29uc3QgdGV4dCA9IGRhdGEudHJpbSgpLnJlcGxhY2UoL15cXHt8XFx9JC9nLCAnJyk7XHJcblxyXG4gICAgICB0ZXh0LnNwbGl0KCcsJykuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaW5kZXhPZignPScpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRyaW0oKTtcclxuICAgICAgICAgIGxldCB2YWx1ZTogYW55ID0gaXRlbS5zdWJzdHJpbmcoaW5kZXggKyAxKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB2YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYmoucmVhZCA9IGZhbHNlO1xyXG4gICAgb2JqLnNhdmUgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvLyBTYWZldHkgbmV0IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgZGllcyBzaWxlbnRseSBkdXJpbmcgYSBsb25nXHJcbiAgLy8gc2xlZXAvaWRsZSBwZXJpb2Qgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnICh0aGUgT1MgY2FuIHN1c3BlbmRcclxuICAvLyB0aW1lcnMvc29ja2V0cyBvdXRyaWdodCkg4oCUIHJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCB3YWtlcyB1cC5cclxuICBwcml2YXRlIGVuc3VyZURldmljZUhlYWx0aHkoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRldmljZSB8fCB0aGlzLmRldmljZS5zdGF0ZSAhPT0gJ3JlZ2lzdGVyZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gZGV2aWNlIHVuaGVhbHRoeSBhZnRlciB3YWtlL3Zpc2liaWxpdHkgY2hhbmdlLCByZS1pbml0aWFsaXppbmcnKTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBmYWlsZWQ6JywgZXJyKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb250YWN0KHBheWxvYWQ6IGFueSk6IE9ic2VydmFibGU8W10+IHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb250YWN0KHBheWxvYWQ6YW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIHRoaXMudG9rZW59KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIFxyXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBwaG9uZWJvb2tpZDogaWRcclxuICAgIH1cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL2NvbnRhY3QvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldENvbnRhY3RMaXN0KCl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvZmF2b3VyaXRlJywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmF2b3VyaXRDb250YWN0cygpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2Zhdm91cml0ZS9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldFJlY2VudENhbGxzKHBhZ2VJbmRleD86IHN0cmluZywgcGFnZVNpemU/OiBzdHJpbmcsKXtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSAgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9O1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPXtoZWFkZXJzfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGRlbGV0ZVJlY2VudENhbGxMb2coaWQ6c3RyaW5nfCBzdHJpbmdbXSl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcmVjb3JkSWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jYWxscy8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFBob3RvKHBheWxvYWQ6IGFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGxvYWQvcGhvdG8nLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob3RvKGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvcGhvdG8vJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldFRvTnVtYmVyKGRpYWxsZWRObzogc3RyaW5nLCBpc29Db2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSxcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jaGVjay9jb3VudHJ5Q29kZS8nICsgZGlhbGxlZE5vLCBodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBcclxuICAvLyBSZWNvcmQgYSByaW5naW5nIGluY29taW5nIENhbGwgc28gaXQgY2FuIGxhdGVyIGJlIGFjY2VwdGVkIGJ5IGl0cyBzcGVjaWZpYyBpZC5cclxuICAvLyBUaGUgbWFwIGlzIGNsZWFuZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC9kaXNjb25uZWN0ZWQvcmVqZWN0ZWQuXHJcbiAgcHJpdmF0ZSB0cmFja0luY29taW5nQ2FsbChjYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5zZXQoY2FsbFNpZCwgY2FsbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIWNhbGxTaWQpIHJldHVybjtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgLy8gSWYgdGhlIGNhbGwgZW5kZWQgYmVmb3JlIHRoZSB1c2VyIGFjY2VwdGVkIGl0LCBkZXN0cm95IHRoZSBwZW5kaW5nIHNwYXJlXHJcbiAgICAgIC8vIGRldmljZSB0aGF0IHdhcyBob2xkaW5nIGl0IHNvIHdlIGRvbid0IGxlYWsgZGV2aWNlIHJlZ2lzdHJhdGlvbnMuXHJcbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICAgIGlmIChkZXYgJiYgIWRldi5fb3duc0FjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRyeSB7IGRldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNhbGwub24oJ2NhbmNlbCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbignZGlzY29ubmVjdCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbigncmVqZWN0JywgY2xlYW51cCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXNvbHZlIHRoZSBFWEFDVCByaW5naW5nIENhbGwgZm9yIGEgZ2l2ZW4gVUkgZW50cnkgaWQgKHBhcnRpY2lwYW50L3JlY29yZCBpZCkuXHJcbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgaW5jb21pbmcgY2FsbCBzbyBvbGRlciBzaW5nbGUtY2FsbCBmbG93cyBzdGlsbCB3b3JrLlxyXG4gIGdldEluY29taW5nQ2FsbEJ5SWQoaWQ6IGFueSkge1xyXG4gICAgaWYgKGlkICE9IG51bGwgJiYgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmhhcyhpZCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsc01hcC5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsLnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddID09IGlkID8gdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zcGFyZURldmljZSkge1xyXG4gICAgICByZXR1cm47IC8vIGEgZnJlZSBzcGFyZSBpcyBhbHJlYWR5IHdhaXRpbmdcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3ByZXBhcmVTcGFyZURldmljZTogbm8gdG9rZW4gYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNwYXJlOiBhbnkgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuICAgIHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsID0gZmFsc2U7XHJcblxyXG4gICAgc3BhcmUub24oJ3JlZ2lzdGVyZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IHRydWU7XHJcbiAgICAgIC8vIEFwcGx5IHRoZSBtdXRlIHByZWZlcmVuY2UgaGVyZSDigJQgYHNwYXJlLmF1ZGlvYCBpcyBvbmx5IHJlYWR5IGFmdGVyIHJlZ2lzdHJhdGlvbixcclxuICAgICAgLy8gc28gdGhlIGNhbGwgYWJvdmUgKGJlZm9yZSByZWdpc3RlcigpKSB3YXMgYWx3YXlzIGEgbm8tb3AuXHJcbiAgICAgIHRyeSB7IHNwYXJlLmF1ZGlvPy5pbmNvbWluZyghdGhpcy5pc0luY29taW5nTXV0ZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnU3BhcmUgZGV2aWNlIHJlZ2lzdGVyZWQg4oCTIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsIHwgYW55KSA9PiB7XHJcbiAgICAgIC8vIEd1YXJkOiBvbmNlIHRoaXMgc3BhcmUgaXMgYWxyZWFkeSBoYW5kbGluZyBhIGNhbGwgKHBlbmRpbmcgb3IgYWNjZXB0ZWQpLFxyXG4gICAgICAvLyBpZ25vcmUgYW55IGZ1cnRoZXIgaW5jb21pbmcgZXZlbnRzIHNvIGFub3RoZXIgc3BhcmUgY2FuIHRha2UgdGhlIG5leHQgY2FsbC5cclxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsID0gY2FsbDtcclxuICAgICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG5cclxuICAgICAgLy8gVHJhbnNpdGlvbiB0aGlzIHNwYXJlIGZyb20gXCJmcmVlXCIg4oaSIFwicGVuZGluZ1wiOiByZW1vdmUgaXQgYXMgdGhlIGFjdGl2ZVxyXG4gICAgICAvLyBzcGFyZURldmljZSBhbmQgdHJhY2sgaXQgYnkgQ2FsbFNpZCBzbyBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQgY2FuIGZpbmQgaXQuXHJcbiAgICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlID09PSBzcGFyZSkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLnNldChjYWxsU2lkLCBzcGFyZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1tZWRpYXRlbHkgYXJtIHRoZSBORVhUIGZyZWUgc3BhcmUgc28gaXQgaXMgcmVhZHkgZm9yIGNhbGwgTisyIHdpdGhvdXRcclxuICAgICAgLy8gd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gYWNjZXB0IHRoaXMgY2FsbCBmaXJzdC5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpO1xyXG4gICAgICBpZih0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5BY2NvdW50U2lkICE9IGNhbGw/LnBhcmFtZXRlcnM/LkFjY291bnRTaWQgJiYgdGhpcy5wcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQ2FsbFNpZCAhPSBjYWxsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkKXtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbi5uZXh0KG5vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbiA9IGNhbGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignU3BhcmUgZGV2aWNlIGVycm9yOicsIGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLnJlZ2lzdGVyKCk7XHJcbiAgICB0aGlzLnNwYXJlRGV2aWNlID0gc3BhcmU7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpZCA9IGFjY2VwdGVkQ2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoc2lkKSB7XHJcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChzaWQpO1xyXG4gICAgICBpZiAoZGV2KSB7XHJcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCBkZXYpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IG9sZCBzaW5nbGUtc3BhcmUgcGF0aCAoc3BhcmUgc3RpbGwgaG9sZHMgdGhlIGNhbGwpLlxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNwYXJlRGV2aWNlICYmIHRoaXMuc3BhcmVEZXZpY2UuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPT09IGFjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxyXG4gICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUNvbmN1cnJlbnRDYWxsRGV2aWNlKGNhbGxTaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGV2ID0gdGhpcy5leHRyYURldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKGRldikge1xyXG4gICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXHJcbiAgICBjb25zdCBwZW5kaW5nRGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChwZW5kaW5nRGV2KSB7XHJcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBubyBhY2NlcHRlZCBjYWxscyByZW1haW4sIHRlYXIgZG93biBhbGwgc3BhcmUvcGVuZGluZy9leHRyYSBkZXZpY2VzIHNvXHJcbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxyXG4gIHRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgdHJ5IHsgdGhpcy5zcGFyZURldmljZS5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXHJcbiAgZGVzdHJveURldmljZTIoKSB7XHJcbiAgICB0aGlzLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyLWNvbnRyb2xsZWQgc3dpdGNoIChpbiB0aGUgY2FsbC1wcm9ncmVzcyBVSSkuIFdoZW4gT04sIGEgbmV3IGluY29taW5nXHJcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxyXG4gIC8vIG9uZ29pbmcgY2FsbC4gU291cmNlIG9mIHRydXRoIHNvIG5ld2x5IGNyZWF0ZWQgKHNwYXJlKSBkZXZpY2VzIGluaGVyaXQgaXQuXHJcbiAgaXNJbmNvbWluZ011dGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIEFwcGx5IHRoZSBjdXJyZW50IG11dGUgcHJlZmVyZW5jZSB0byBldmVyeSBsaXZlIERldmljZSAocHJpbWFyeSArIHNwYXJlICtcclxuICAvLyBhbnkgY29uY3VycmVudC1jYWxsIGRldmljZXMpIHZpYSBUd2lsaW8ncyBvd24gZGV2aWNlLmF1ZGlvLmluY29taW5nKCkuXHJcbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuaXNJbmNvbWluZ011dGVkOyAvLyByaW5ndG9uZSBlbmFibGVkID0gTk9UIG11dGVkXHJcbiAgICBjb25zdCBhcHBseSA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgfTtcclxuICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgfVxyXG5cclxuICAvLyBUb2dnbGUvc2V0IHRoZSBtdXRlIHN3aXRjaCBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgaXQuXHJcbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luY29taW5nTXV0ZWQgPSBtdXRlZDtcclxuICAgIHRoaXMuYXBwbHlJbmNvbWluZ011dGUoKTtcclxuICAgIGlmIChtdXRlZCkge1xyXG4gICAgICAvLyBkZXZpY2UuYXVkaW8uaW5jb21pbmcoZmFsc2UpIG9ubHkgcHJldmVudHMgZnV0dXJlIHJpbmdzIOKAlCBpdCBkb2VzIE5PVCBzdG9wXHJcbiAgICAgIC8vIGEgY2FsbCB0aGF0IGlzIGFscmVhZHkgcmluZ2luZy4gU3RvcCB0aGUgYWN0aXZlIHJpbmcgZGlyZWN0bHkgdmlhIHNvdW5kY2FjaGUuXHJcbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHsgZGV2Py5fc291bmRjYWNoZT8uZ2V0Py4oJ2luY29taW5nJyk/LnN0b3A/LigpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbmNvbWluZ1BhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IHN0cmluZywgY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihgJHtlbnZpcm9ubWVudC5hcGlVcmx9L3V0aWxpdGllcy9leHQvYWRkL2luY29taW5nL3BhcnRpY2lwYW50LyR7cGFydGljaXBhbnRJZH0vJHtjb25mZXJlbmNlSWR9YCxodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBjb25uZWN0KGRhdGE/OiBhbnkpe1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlLl9hY3RpdmVDYWxsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgVG9rZW46IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|