@c8y/ngx-components 1017.0.330 → 1017.0.333
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/context-dashboard/context-dashboard.component.d.ts +1 -1
- package/core/dashboard/dashboard.model.d.ts +4 -0
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -1
- package/esm2020/context-dashboard/context-dashboard.component.mjs +19 -28
- package/esm2020/context-dashboard/context-dashboard.service.mjs +11 -6
- package/esm2020/core/dashboard/dashboard.model.mjs +1 -1
- package/esm2020/core/dashboard/widgets-dashboard.component.mjs +35 -24
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +28 -32
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +13 -6
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +28 -32
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +12 -5
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +3 -0
- package/package.json +2 -2
|
@@ -204,11 +204,16 @@ export class ContextDashboardService {
|
|
|
204
204
|
}
|
|
205
205
|
async pasteDashboard(newContext) {
|
|
206
206
|
if (this.copyClipboard) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
207
|
+
try {
|
|
208
|
+
if (this.canPasteDashboard(this.copyClipboard, newContext.context)) {
|
|
209
|
+
const dashboardToPaste = this.createContextDashboardCopy(this.copyClipboard.dashboard, newContext.contextData, this.copyClipboard.context.contextData);
|
|
210
|
+
const dashboard = await this.create(this.clean(dashboardToPaste), newContext);
|
|
211
|
+
this.copyClipboard = undefined;
|
|
212
|
+
this.navigateToDashboard(dashboard);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
this.alert.warning(gettext('Insufficient permissions for this action.'));
|
|
212
217
|
}
|
|
213
218
|
}
|
|
214
219
|
}
|
|
@@ -396,4 +401,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
396
401
|
providedIn: 'root'
|
|
397
402
|
}]
|
|
398
403
|
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }]; } });
|
|
399
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsTUFBTSxFQUVOLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEdBQUcsRUFDSixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixRQUFRLEVBQ1IsR0FBRyxFQUNILFlBQVksRUFDWixPQUFPLEVBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBR0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBS25DLE1BQU0sT0FBTyx1QkFBdUI7SUFtQmxDLFlBQ1UsU0FBMkIsRUFDM0IsSUFBaUIsRUFDakIsS0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLE1BQWMsRUFDZCxTQUEyQixFQUMzQixXQUF3QixFQUN4QixLQUFtQixFQUNuQixnQkFBeUM7UUFSekMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQTNCMUMsd0JBQW1CLEdBQUcsU0FBUyxDQUFDO1FBRXhCLG9CQUFlLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBeUMsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxlQUFlLENBQUM7UUFDaEMseUJBQW9CLEdBQUcsV0FBVyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO0lBb0IxQixDQUFDO0lBbEJKLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBY0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUE4QixFQUFFLE9BQXFCLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDM0UsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1osSUFBSSxhQUFhLENBQUM7UUFFbEIsSUFBSSxPQUFPLEVBQUU7WUFDWCxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFZLENBQUM7WUFDdEMsYUFBYSxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0U7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNSLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7U0FDNUM7UUFFRCxNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVuRCxNQUFNLEtBQUssR0FDVCxhQUFhLEtBQUssb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWhHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUNaLGFBQWEsS0FBSyxvQkFBb0IsQ0FBQyxLQUFLO1lBQzVDLGFBQWEsS0FBSyxvQkFBb0IsQ0FBQyxNQUFNO1lBQzdDLENBQUMsT0FBTyxJQUFJLGFBQWEsS0FBSyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7WUFDdkQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzFELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBcUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUEwQztRQUNyRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBd0M7UUFDbkQsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUF3QyxFQUFFLG1CQUE0QixJQUFJO1FBQ3JGLElBQUk7WUFDRixJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQ2Ysc0ZBQXNGLENBQ3ZGLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNoQyxHQUFHLEdBQUcsT0FBTyxDQUNYO21DQUN1QixDQUN4QixDQUFDO2lCQUNIO2dCQUNELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3RCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtvQkFDakMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSTtvQkFDM0MsVUFBVSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZTtpQkFDcEQsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxNQUFNLEVBQ2I7b0JBQ0UsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7b0JBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2lCQUMxQixDQUNGLENBQUM7YUFDSDtZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUN6RCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDbEUsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckI7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLGlCQUFpQjtTQUNsQjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsS0FBNkIsRUFDN0IsS0FBNkI7UUFFN0IsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQy9FLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDZCxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFZLEVBQUUsY0FBd0IsRUFBRSxPQUFxQjtRQUNyRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDaEUsWUFBWSxFQUFFLEVBQ2QsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUNkLElBQUksQ0FDRixJQUFJLENBQUMsTUFBTSxDQUNUO1lBQ0UsUUFBUTtZQUNSLGFBQWEsRUFBRSxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7U0FDOUUsRUFDRCxPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQ0YsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUEwQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM5QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3pELEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNwRSxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLElBQUksV0FBVyxFQUFFO2dCQUNmLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ3BELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDaEMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDMUI7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEVBQWtCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNkLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDYixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQTBDO1FBQ2xFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDM0MsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3RFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzNDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpRDtRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDNUYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUQ7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUN2SCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFpRDtRQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDakcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpRDtRQUNqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDN0YsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFpRDtRQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDNUYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxTQUFtQjtRQUM1QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDMUIsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDM0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDNUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUN0RSxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNoRCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWlCO1FBQzFCLE9BQU8sS0FBSyxDQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxhQUFxQyxFQUFFLEVBQW1CO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFaEQsTUFBTSxVQUFVLEdBQUcsRUFBRTtZQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELE1BQU0sQ0FDSixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxFQUFFLEtBQUssaUJBQWlCO1lBQ2xDLEdBQUcsQ0FDRCxTQUFTLEVBQ1QsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FDL0csQ0FDSixDQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBNEI7UUFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNsRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQzVCLFVBQVUsQ0FBQyxXQUFXLEVBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDdkMsQ0FBQztnQkFDRixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQXdDO1FBQzNFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsYUFBcUMsRUFDckMsY0FBMkI7UUFFM0IsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUUzRCxJQUFJLGNBQWMsS0FBSyxvQkFBb0IsRUFBRTtZQUMzQyxJQUFJLG9CQUFvQixLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLENBQUM7YUFDcEY7aUJBQU0sSUFBSSxvQkFBb0IsS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxJQUFzQixFQUN0QixVQUFtQyxFQUNuQyxVQUFtQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQ2IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDMUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQzVCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2FBQ3RFLENBQUM7WUFFRixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7aUJBQ3BEO2FBQ0Y7WUFFRCxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCO1FBQzFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDakIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxVQUFVLEVBQ1YsVUFBbUMsRUFDbkMsVUFBbUM7UUFFbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsR0FBNEIsRUFDNUIsVUFBbUMsRUFDbkMsVUFBbUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sUUFBUSxDQUFDLEVBQWlDLEVBQUUsYUFBcUM7UUFDdkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ2hELFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNuRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDcEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDcEQsT0FBTyxFQUFFLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxTQUF3QztRQUMzRSxNQUFNLGNBQWMsR0FBRyxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDdEYsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQ3BCLENBQUMsY0FBYyxJQUFJLGNBQWMsS0FBSyx5QkFBeUI7WUFDN0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFxRDtRQUNqRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3hCLFFBQVEsRUFBRSxFQUNWLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUF1QyxDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsU0FBd0M7UUFFeEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsRUFBRTtnQkFDckQsT0FBTyxLQUFLLENBQUMsbUNBQW1DLENBQUM7Z0JBQ2pELGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUF3QztRQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxTQUF3QztRQUNqRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDcEQsT0FBTztZQUNMLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFFO1lBQzFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSTtZQUN0QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1NBQ3hCLENBQUM7SUFDWCxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVM7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQzVDLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBWTtRQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pCLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUU7WUFDL0csUUFBUSxFQUFFLENBQUM7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsRUFBa0IsRUFBRSxhQUFxQztRQUNwRixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUEwQixFQUFFLEVBQUUsQ0FDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1lBQ3BELFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ2hDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QixDQUFDLEVBQWtCLEVBQUUsSUFBMEI7UUFDNUUsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDakIsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUMvQzthQUFNO1lBQ0wsS0FBSyxHQUFHLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDcEU7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsT0FBTztRQUMzRCxJQUFJLGFBQWEsQ0FBQztRQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUMxQyxhQUFhLEdBQUcsWUFBWSxDQUFDLFVBQVU7Z0JBQ3JDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVO2dCQUNqQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDekMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQztTQUM1QztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxvQkFBMEMsRUFBRSxLQUFhO1FBQ2pGLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFpRCxFQUFFLE9BQVE7UUFDakYsSUFDRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQzVCO1lBQ0EsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7b0hBbmlCVSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb250ZXh0RGF0YSxcbiAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gIGdldEFjdGl2YXRlZFJvdXRlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvclNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBTdGF0dXMsXG4gIFRhYixcbiAgVGFic1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBXaWRnZXRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIHBpY2ssXG4gIHNvbWUsXG4gIGtleXMsXG4gIGtleUJ5LFxuICBoYXMsXG4gIGdldCxcbiAgZm9yRWFjaCxcbiAgY2xvbmVEZWVwLFxuICByZWR1Y2UsXG4gIHNldFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBtZXJnZUFsbCxcbiAgbWVyZ2VNYXAsXG4gIHRhcCxcbiAgdGhyb3dJZkVtcHR5LFxuICB0b0FycmF5XG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBDb250ZXh0RGFzaGJvYXJkVHlwZSxcbiAgRGFzaGJvYXJkQ29udGV4dCxcbiAgRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgU1RZTElOR19DTEFTU19QUkVGSVhFUyxcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRFxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZFNlcnZpY2Uge1xuICByZWFkb25seSBSRVBPUlRfUEFSVElBTF9OQU1FID0gJ3JlcG9ydF8nO1xuICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkO1xuICBwcml2YXRlIHJlYWRvbmx5IElOVkVOVE9SWV9ST0xFUyA9IFsnUk9MRV9JTlZFTlRPUllfQURNSU4nXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgX2Zvcm1EaXNhYmxlZCA9IHRydWU7XG5cbiAgZ2V0IGZvcm1EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybURpc2FibGVkO1xuICB9XG5cbiAgc2V0IGZvcm1EaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2Zvcm1EaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIGNyZWF0ZShkYXNoYm9hcmRDZmc6IENvbnRleHREYXNoYm9hcmQsIGNvbnRleHQ/OiBDb250ZXh0RGF0YSwgbmFtZSA9ICcnKSB7XG4gICAgbGV0IGlkID0gJyc7XG4gICAgbGV0IGRhc2hib2FyZFR5cGU7XG5cbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaWQgPSBjb250ZXh0LmNvbnRleHREYXRhLmlkIGFzIHN0cmluZztcbiAgICAgIGRhc2hib2FyZFR5cGUgPSB0aGlzLmdldERhc2hib2FyZFR5cGVGcm9tVmlld0NvbnRleHQoZGFzaGJvYXJkQ2ZnLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXNoYm9hcmQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge307XG4gICAgYXNzaWduKGRhc2hib2FyZCwgeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSk7XG5cbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlID8gZGFzaGJvYXJkQ2ZnLmRldmljZVR5cGVWYWx1ZSA6IG5hbWUgfHwgaWQ7XG5cbiAgICBjb25zdCBmcmFnbWVudEtleSA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoZGFzaGJvYXJkVHlwZSwgdmFsdWUpO1xuICAgIGRhc2hib2FyZFtmcmFnbWVudEtleV0gPSB7fTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQsIGNvbnRleHQpKSB7XG4gICAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9HbG9iYWw6IHt9IH0pO1xuICAgIH1cbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXAgfHxcbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZSB8fFxuICAgICAgKGNvbnRleHQgJiYgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQpXG4gICAgICAgID8gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUoZGFzaGJvYXJkLCBpZClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeS5jcmVhdGUoZGFzaGJvYXJkKTtcbiAgICByZXR1cm4gZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkTU8uaWQsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3Qga2VlcEZyYWdtZW50cyA9IHRoaXMuY2xlYW4ocGljayhkYXNoYm9hcmQsIFt0aGlzLkZSQUdNRU5UX05BTUUsICdpZCcsICduYW1lJ10pKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9HbG9iYWwgPSB0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQpO1xuICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhrZWVwRnJhZ21lbnRzKTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZShrZWVwRnJhZ21lbnRzKTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsIHdpdGhDb25maXJtYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh3aXRoQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGxldCBtc2cgPSBnZXR0ZXh0KFxuICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXZpY2VUeXBlKGRhc2hib2FyZCkpIHtcbiAgICAgICAgICBtc2cgPSBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIgZnJvbSBhbGwgZGV2aWNlcyBvZiB0aGUgdHlwZSBcInt7IGRldmljZVR5cGUgfX1cIi5cbiAgICAgICAgICAgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGRhc2hib2FyZCcpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1zZywge1xuICAgICAgICAgICAgZGFzaGJvYXJkTmFtZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZSxcbiAgICAgICAgICAgIGRldmljZVR5cGU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpLFxuICAgICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmRlbGV0ZShkYXNoYm9hcmQpO1xuICAgICAgY29uc3QgdGFiVG9SZW1vdmUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT5cbiAgICAgICAgdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmQuaWR9YClcbiAgICAgICk7XG4gICAgICB0aGlzLnRhYnMucmVtb3ZlKHRhYlRvUmVtb3ZlKTtcbiAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGVEYXNoYm9hcmRzKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHR5cGVzOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFRhYltdPiB7XG4gICAgY29uc3QgeyBkYXNoYm9hcmRJZCB9ID0gcm91dGUucGFyYW1zO1xuICAgIGlmIChkYXNoYm9hcmRJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZCwgdHlwZXMsIHJvdXRlLnBhcmVudC5kYXRhLmNvbnRleHREYXRhKS5waXBlKFxuICAgICAgICB0YXAoZGFzaGJvYXJkID0+IHtcbiAgICAgICAgICByb3V0ZS5kYXRhID0geyBkYXNoYm9hcmQgfTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGFicyQocm91dGUuZGF0YS5jb250ZXh0RGF0YSwgdHlwZXMpO1xuICB9XG5cbiAgZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSwgY29udGV4dD86IENvbnRleHREYXRhKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm1hcFdpZGdldHMoZGVmYXVsdFdpZGdldHMpO1xuICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQobmFtZSwgW0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkXSkucGlwZShcbiAgICAgIHRocm93SWZFbXB0eSgpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PlxuICAgICAgICBmcm9tKFxuICAgICAgICAgIHRoaXMuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgd2lkZ2V0Q2xhc3NlczogeyAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JzogdHJ1ZSwgJ3BhbmVsLXRpdGxlLXJlZ3VsYXInOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVGFicyhkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIXRoaXMuaXNOYW1lZChkYXNoYm9hcmRNTykpIHtcbiAgICAgIGNvbnN0IHRhYlRvVXBkYXRlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+XG4gICAgICAgIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkTU8uaWR9YClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgICBpZiAodGFiVG9VcGRhdGUpIHtcbiAgICAgICAgY29uc3QgeyBpY29uLCBwcmlvcml0eSwgbmFtZSB9ID0gZGF0YS5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0YWJUb1VwZGF0ZS5pY29uID0gaWNvbjtcbiAgICAgICAgdGFiVG9VcGRhdGUucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgICAgICAgdGFiVG9VcGRhdGUubGFiZWwgPSBuYW1lO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0b3JJdGVtKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMubmF2aWdhdG9yLnN0YXRlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAobm9kZS5wYXRoID09PSBgcmVwb3J0cy8ke21vLmlkfWApIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChtby5jOHlfSXNOYXZpZ2F0b3JOb2RlKSB7XG4gICAgICBjb25zdCBub2RlVG9BZGQgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgIGxhYmVsOiBtby5uYW1lLFxuICAgICAgICBwYXRoOiBgcmVwb3J0cy8ke21vLmlkfWAsXG4gICAgICAgIGljb246IG1vLmljb24sXG4gICAgICAgIHByaW9yaXR5OiBtby5wcmlvcml0eVxuICAgICAgfSk7XG4gICAgICB0aGlzLm5hdmlnYXRvci5hZGQobm9kZVRvQWRkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICgvZGFzaGJvYXJkLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbkVkaXREYXNoYm9hcmQobW8pIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KFsnUk9MRV9JTlZFTlRPUllfQURNSU4nLCAnUk9MRV9JTlZFTlRPUllfQ1JFQVRFJ10sIG1vKTtcbiAgfVxuXG4gIGlzTmFtZWQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzUmVwb3J0KGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZVR5cGUoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2V9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0dyb3VwRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuR3JvdXB9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERhc2hib2FyZFN0eWxlcyhzdHlsZUxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0eWxlTGlzdC5maWx0ZXIoYyA9PlxuICAgICAgU1RZTElOR19DTEFTU19QUkVGSVhFUy5zb21lKGNsYXNzUHJlZml4ID0+IGMuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0eWxpbmcoc3R5bGVMaXN0LCBzdHlsZU5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHN0eWxpbmcgPSBzdHlsZUxpc3QuZmluZChcbiAgICAgIHN0eWxlID0+IHN0eWxlICYmIG5ldyBSZWdFeHAoYC0ke3N0eWxlTmFtZX0kYCwgJ2knKS50ZXN0KHN0eWxlLmNsYXNzKVxuICAgICk7XG4gICAgcmV0dXJuIHN0eWxpbmcgPyBzdHlsaW5nLmNsYXNzIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbWFwV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIHJldHVybiBrZXlCeShcbiAgICAgIHdpZGdldHMubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5pZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMik7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgICB9KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZE9yTmFtZSwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSwgbW8/OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IG1vXG4gICAgICA/IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpXG4gICAgICA6IFt0aGlzLmdldE5hbWVkRGFzaGJvYXJkKGRhc2hib2FyZElkT3JOYW1lKV07XG5cbiAgICBjb25zdCBjYWNoZVJlZnJlc2ggPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICBkYXNoYm9hcmQgPT5cbiAgICAgICAgICBkYXNoYm9hcmQuaWQgPT09IGRhc2hib2FyZElkT3JOYW1lIHx8XG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgZGFzaGJvYXJkLFxuICAgICAgICAgICAgYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke2Rhc2hib2FyZElkT3JOYW1lfWBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY2FjaGUgPyBvZihjYWNoZSkgOiBjYWNoZVJlZnJlc2g7XG4gIH1cblxuICBhc3luYyBwYXN0ZURhc2hib2FyZChuZXdDb250ZXh0OiBEYXNoYm9hcmRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29weUNsaXBib2FyZCkge1xuICAgICAgaWYgKHRoaXMuY2FuUGFzdGVEYXNoYm9hcmQodGhpcy5jb3B5Q2xpcGJvYXJkLCBuZXdDb250ZXh0LmNvbnRleHQpKSB7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgbmV3Q29udGV4dC5jb250ZXh0RGF0YSxcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNyZWF0ZSh0aGlzLmNsZWFuKGRhc2hib2FyZFRvUGFzdGUpLCBuZXdDb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNhblBhc3RlRGFzaGJvYXJkKFxuICAgIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gICAgY3VycmVudENvbnRleHQ6IFZpZXdDb250ZXh0XG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZFZpZXdDb250ZXh0ID0gY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHQ7XG5cbiAgICBpZiAoY3VycmVudENvbnRleHQgIT09IGNsaXBib2FyZFZpZXdDb250ZXh0KSB7XG4gICAgICBpZiAoY2xpcGJvYXJkVmlld0NvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRGV2aWNlIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBkZXZpY2UuJykpO1xuICAgICAgfSBlbHNlIGlmIChjbGlwYm9hcmRWaWV3Q29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0dyb3VwIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBncm91cC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICBkYXNoOiBDb250ZXh0RGFzaGJvYXJkLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICk6IENvbnRleHREYXNoYm9hcmQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVkdWNlKFxuICAgICAgZGFzaC5jaGlsZHJlbixcbiAgICAgIChfY2hpbGRyZW4sIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQgfSA9IGNoaWxkO1xuICAgICAgICBjb25zdCBjZmcgPSBjaGlsZC5jb25maWc7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSB7XG4gICAgICAgICAgZGV2aWNlOiBkZXZpY2UgPT4gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRldmljZSwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhUG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNHYXVnZTogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzTGFiZWxzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICBpZiAoY2ZnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLm9wdGlvbnMsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZHJlbltpZF0gPSBjbG9uZURlZXAoY2hpbGQpO1xuICAgICAgICByZXR1cm4gX2NoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGRhc2guY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gZGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVByb3BlcnRpZXMob2JqLCBwcm9wZXJ0aWVzVG9Db3B5KSB7XG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzVG9Db3B5LCAoY29weUZuLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKG9ialtwcm9wZXJ0eV0pIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNvcHlGbihvYmpbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoXG4gICAgZGF0YVBvaW50cyxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBkYXRhUG9pbnRzLmZvckVhY2goZHAgPT4ge1xuICAgICAgZHAuX190YXJnZXQgPSB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZHAuX190YXJnZXQsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhUG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluT2JqKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouaWQgPT09IG9sZENvbnRleHQuaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwaWNrKG5ld0NvbnRleHQsIFsnaWQnLCAnbmFtZSddKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYnMkKG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIGNvbnN0IGRhc2hib2FyZHMgPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZGFzaGJvYXJkID0+IHRoaXMudmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQpKSxcbiAgICAgIG1lcmdlTWFwKChbZGFzaGJvYXJkXSkgPT4gdGhpcy5yZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KGRhc2hib2FyZCkpLFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgbWFwKGRhc2hib2FyZCA9PiB0aGlzLmNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdsb2JhbFJvbGVzSWRzID0gZGFzaGJvYXJkPy5jOHlfRGFzaGJvYXJkPy5nbG9iYWxSb2xlc0lkcztcbiAgICBjb25zdCBjYW5FZGl0ID0gZnJvbShcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgZGFzaGJvYXJkLCB7IHNraXBSZXF1ZXN0Q2hlY2s6IHRydWUgfSlcbiAgICApO1xuICAgIGNvbnN0IGhhc0FueUdsb2JhbFJvbGUgPVxuICAgICAgIWdsb2JhbFJvbGVzSWRzIHx8IGdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgOiBvZih0aGlzLnBlcm1pc3Npb25zLmhhc0FueUdsb2JhbFJvbGUoZ2xvYmFsUm9sZXNJZHMpKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZihkYXNoYm9hcmQpLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkucGlwZShcbiAgICAgIGZpbHRlcigoWywgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pID0+IGNhbkVkaXQgfHwgaGFzQW55R2xvYmFsUm9sZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyQocmVxdWVzdHM6IEFycmF5PFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0cykucGlwZShcbiAgICAgIG1lcmdlQWxsKCksXG4gICAgICBtZXJnZU1hcChyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0W10pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgYWxyZWFkeSBjb3JydXB0ZWQgZGFzaGJvYXJkcyBmcm9tIGRhc2hib2FyZE1vIHByb3BlcnR5LlxuICAgKiBBZGRlZCB0byBmaXggZGFzaGJvYXJkcyBvbiB0aGUgY2xvdWQgaW5zdGFuY2UgKGV1LWxhdGVzdCkuXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBhZnRlciAxMDA3LjcuMC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlRGFzaGJvYXJkTW9Qcm9wZXJ0eShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDb3B5ID0gY2xvbmVEZWVwKGRhc2hib2FyZCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXQoZGFzaGJvYXJkQ29weSwgJ2M4eV9EYXNoYm9hcmQuY2hpbGRyZW4nKTtcbiAgICBsZXQgdXBkYXRlRGFzaGJvYXJkID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQnKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ7XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29uZmlnLmRhc2hib2FyZE1vJykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbmZpZy5kYXNoYm9hcmRNbztcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVEYXNoYm9hcmQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlKGRhc2hib2FyZENvcHkpO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGJvYXJkQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGFzaGJvYXJkKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGM4eV9EYXNoYm9hcmQ6IF9kYXNoYm9hcmQsIGlkIH0gPSBkYXNoYm9hcmQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IF9kYXNoYm9hcmQuaWNvbixcbiAgICAgIHBhdGg6IGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7aWR9YCxcbiAgICAgIGxhYmVsOiBfZGFzaGJvYXJkLm5hbWUsXG4gICAgICBwcmlvcml0eTogX2Rhc2hib2FyZC5wcmlvcml0eSxcbiAgICAgIGhpZGU6IHRoaXMuaXNSZXBvcnQoZGFzaGJvYXJkKVxuICAgIH0gYXMgVGFiO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbihkYXNoYm9hcmQpIHtcbiAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGFzaGJvYXJkLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJyQkaGFzaEtleScgfHwga2V5ID09PSAna2xhc3NlcycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROYW1lZERhc2hib2FyZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBmcmFnbWVudFR5cGU6IGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtuYW1lfWAsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyhtbzogSU1hbmFnZWRPYmplY3QsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10pIHtcbiAgICByZXR1cm4gZGFzaGJvYXJkVHlwZS5tYXAoKHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlKSA9PlxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICAgIGZyYWdtZW50VHlwZTogdGhpcy5jcmVhdGVEYXNoYm9hcmRGcmFnbWVudChtbywgdHlwZSksXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLkRFRkFVTFRfUEFHRVNJWkVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkRnJhZ21lbnQobW86IElNYW5hZ2VkT2JqZWN0LCB0eXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAobW8uYzh5X1JlcG9ydCkge1xuICAgICAgdmFsdWUgPSBgJHt0aGlzLlJFUE9SVF9QQVJUSUFMX05BTUV9JHttby5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBtby50eXBlIDogbW8uaWQ7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7dHlwZX0ke3RoaXMuSU5ERVhfU1BMSVR9JHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXNoYm9hcmRUeXBlRnJvbVZpZXdDb250ZXh0KGRhc2hib2FyZENmZywgY29udGV4dCkge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlO1xuICAgIGlmIChjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IGRhc2hib2FyZENmZy5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZVxuICAgICAgICA6IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZFR5cGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiBbdGhpcy5GUkFHTUVOVF9OQU1FLCBjb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWVdLmpvaW4odGhpcy5JTkRFWF9TUExJVCk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LCBjb250ZXh0Pykge1xuICAgIGlmIChcbiAgICAgICghY29udGV4dCAmJiB0aGlzLmlzTmFtZWQoZGFzaGJvYXJkKSAmJiAhdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpKSB8fFxuICAgICAgdGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKVxuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsTUFBTSxFQUVOLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEdBQUcsRUFDSixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixRQUFRLEVBQ1IsR0FBRyxFQUNILFlBQVksRUFDWixPQUFPLEVBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBR0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBS25DLE1BQU0sT0FBTyx1QkFBdUI7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QUFTLENBQUMsRUFDNUI7WUFDQSxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztvSEF2aUJVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbnRleHREYXRhLFxuICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgZ2V0QWN0aXZhdGVkUm91dGUsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFN0YXR1cyxcbiAgVGFiLFxuICBUYWJzU2VydmljZSxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgcGljayxcbiAgc29tZSxcbiAga2V5cyxcbiAga2V5QnksXG4gIGhhcyxcbiAgZ2V0LFxuICBmb3JFYWNoLFxuICBjbG9uZURlZXAsXG4gIHJlZHVjZSxcbiAgc2V0XG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZmlsdGVyLFxuICBtYXAsXG4gIG1lcmdlQWxsLFxuICBtZXJnZU1hcCxcbiAgdGFwLFxuICB0aHJvd0lmRW1wdHksXG4gIHRvQXJyYXlcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIENvbnRleHREYXNoYm9hcmRUeXBlLFxuICBEYXNoYm9hcmRDb250ZXh0LFxuICBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkLFxuICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLFxuICBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB7XG4gIHJlYWRvbmx5IFJFUE9SVF9QQVJUSUFMX05BTUUgPSAncmVwb3J0Xyc7XG4gIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5WRU5UT1JZX1JPTEVTID0gWydST0xFX0lOVkVOVE9SWV9BRE1JTiddO1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUEFHRVNJWkUgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZSQUdNRU5UX05BTUUgPSAnYzh5X0Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgREFTSEJPQVJEX1JPVVRFX1BBVEggPSAnZGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9TUExJVCA9ICchJztcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG5hdmlnYXRvcjogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50OiBEeW5hbWljQ29tcG9uZW50U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgaWQgPSAnJztcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTtcblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBpZCA9IGNvbnRleHQuY29udGV4dERhdGEuaWQgYXMgc3RyaW5nO1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IHRoaXMuZ2V0RGFzaGJvYXJkVHlwZUZyb21WaWV3Q29udGV4dChkYXNoYm9hcmRDZmcsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAobmFtZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRhc2hib2FyZDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KTtcblxuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBkYXNoYm9hcmRDZmcuZGV2aWNlVHlwZVZhbHVlIDogbmFtZSB8fCBpZDtcblxuICAgIGNvbnN0IGZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShkYXNoYm9hcmRUeXBlLCB2YWx1ZSk7XG4gICAgZGFzaGJvYXJkW2ZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShkYXNoYm9hcmQsIGlkKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0dsb2JhbCA9IHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKGtlZXBGcmFnbWVudHMpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZyA9IGdldHRleHQoXG4gICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKSkge1xuICAgICAgICAgIG1zZyA9IGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIiBmcm9tIGFsbCBkZXZpY2VzIG9mIHRoZSB0eXBlIFwie3sgZGV2aWNlVHlwZSB9fVwiLlxuICAgICAgICAgICBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZGFzaGJvYXJkJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobXNnLCB7XG4gICAgICAgICAgICBkYXNoYm9hcmROYW1lOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lLFxuICAgICAgICAgICAgZGV2aWNlVHlwZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvazogZ2V0dGV4dCgnRGVsZXRlJyksXG4gICAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGRhc2hib2FyZCk7XG4gICAgICBjb25zdCB0YWJUb1JlbW92ZSA9IEFycmF5LmZyb20odGhpcy50YWJzLnN0YXRlKS5maW5kKHRhYiA9PlxuICAgICAgICB0YWIucGF0aC5lbmRzV2l0aChgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2Rhc2hib2FyZC5pZH1gKVxuICAgICAgKTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgdGhpcy50YWJzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUYWJzKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICghdGhpcy5pc05hbWVkKGRhc2hib2FyZE1PKSkge1xuICAgICAgY29uc3QgdGFiVG9VcGRhdGUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT5cbiAgICAgICAgdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmRNTy5pZH1gKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICAgIGlmICh0YWJUb1VwZGF0ZSkge1xuICAgICAgICBjb25zdCB7IGljb24sIHByaW9yaXR5LCBuYW1lIH0gPSBkYXRhLmM4eV9EYXNoYm9hcmQ7XG4gICAgICAgIHRhYlRvVXBkYXRlLmljb24gPSBpY29uO1xuICAgICAgICB0YWJUb1VwZGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICB0YWJUb1VwZGF0ZS5sYWJlbCA9IG5hbWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdERhc2hib2FyZChtbykge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmNhbkVkaXQoWydST0xFX0lOVkVOVE9SWV9BRE1JTicsICdST0xFX0lOVkVOVE9SWV9DUkVBVEUnXSwgbW8pO1xuICB9XG5cbiAgaXNOYW1lZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNSZXBvcnQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHt0aGlzLlJFUE9SVF9QQVJUSUFMX05BTUV9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzRGV2aWNlVHlwZShkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGV9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZURhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzR3JvdXBEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHN0eWxlTGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gc3R5bGVMaXN0LmZpbHRlcihjID0+XG4gICAgICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLnNvbWUoY2xhc3NQcmVmaXggPT4gYy5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0U3R5bGluZyhzdHlsZUxpc3QsIHN0eWxlTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3Qgc3R5bGluZyA9IHN0eWxlTGlzdC5maW5kKFxuICAgICAgc3R5bGUgPT4gc3R5bGUgJiYgbmV3IFJlZ0V4cChgLSR7c3R5bGVOYW1lfSRgLCAnaScpLnRlc3Qoc3R5bGUuY2xhc3MpXG4gICAgKTtcbiAgICByZXR1cm4gc3R5bGluZyA/IHN0eWxpbmcuY2xhc3MgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBtYXBXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKSB7XG4gICAgcmV0dXJuIGtleUJ5KFxuICAgICAgd2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmlkID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKTtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH0pLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gIH1cblxuICBnZXREYXNoYm9hcmQkKGRhc2hib2FyZElkT3JOYW1lLCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdLCBtbz86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBkYXNoYm9hcmRzID0gbW9cbiAgICAgID8gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSlcbiAgICAgIDogW3RoaXMuZ2V0TmFtZWREYXNoYm9hcmQoZGFzaGJvYXJkSWRPck5hbWUpXTtcblxuICAgIGNvbnN0IGNhY2hlUmVmcmVzaCA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIGRhc2hib2FyZCA9PlxuICAgICAgICAgIGRhc2hib2FyZC5pZCA9PT0gZGFzaGJvYXJkSWRPck5hbWUgfHxcbiAgICAgICAgICBoYXMoXG4gICAgICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgICAgICBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7ZGFzaGJvYXJkSWRPck5hbWV9YFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBjYWNoZSA/IG9mKGNhY2hlKSA6IGNhY2hlUmVmcmVzaDtcbiAgfVxuXG4gIGFzeW5jIHBhc3RlRGFzaGJvYXJkKG5ld0NvbnRleHQ6IERhc2hib2FyZENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jb3B5Q2xpcGJvYXJkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5jYW5QYXN0ZURhc2hib2FyZCh0aGlzLmNvcHlDbGlwYm9hcmQsIG5ld0NvbnRleHQuY29udGV4dCkpIHtcbiAgICAgICAgICBjb25zdCBkYXNoYm9hcmRUb1Bhc3RlID0gdGhpcy5jcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgICBuZXdDb250ZXh0LmNvbnRleHREYXRhLFxuICAgICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmNvbnRleHQuY29udGV4dERhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IHRoaXMuY3JlYXRlKHRoaXMuY2xlYW4oZGFzaGJvYXJkVG9QYXN0ZSksIG5ld0NvbnRleHQpO1xuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgYWN0aW9uLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNhblBhc3RlRGFzaGJvYXJkKFxuICAgIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gICAgY3VycmVudENvbnRleHQ6IFZpZXdDb250ZXh0XG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZFZpZXdDb250ZXh0ID0gY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHQ7XG5cbiAgICBpZiAoY3VycmVudENvbnRleHQgIT09IGNsaXBib2FyZFZpZXdDb250ZXh0KSB7XG4gICAgICBpZiAoY2xpcGJvYXJkVmlld0NvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRGV2aWNlIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBkZXZpY2UuJykpO1xuICAgICAgfSBlbHNlIGlmIChjbGlwYm9hcmRWaWV3Q29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0dyb3VwIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBncm91cC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICBkYXNoOiBDb250ZXh0RGFzaGJvYXJkLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICk6IENvbnRleHREYXNoYm9hcmQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVkdWNlKFxuICAgICAgZGFzaC5jaGlsZHJlbixcbiAgICAgIChfY2hpbGRyZW4sIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQgfSA9IGNoaWxkO1xuICAgICAgICBjb25zdCBjZmcgPSBjaGlsZC5jb25maWc7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSB7XG4gICAgICAgICAgZGV2aWNlOiBkZXZpY2UgPT4gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRldmljZSwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhUG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNHYXVnZTogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzTGFiZWxzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICBpZiAoY2ZnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLm9wdGlvbnMsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZHJlbltpZF0gPSBjbG9uZURlZXAoY2hpbGQpO1xuICAgICAgICByZXR1cm4gX2NoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGRhc2guY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gZGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVByb3BlcnRpZXMob2JqLCBwcm9wZXJ0aWVzVG9Db3B5KSB7XG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzVG9Db3B5LCAoY29weUZuLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKG9ialtwcm9wZXJ0eV0pIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNvcHlGbihvYmpbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoXG4gICAgZGF0YVBvaW50cyxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBkYXRhUG9pbnRzLmZvckVhY2goZHAgPT4ge1xuICAgICAgZHAuX190YXJnZXQgPSB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZHAuX190YXJnZXQsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhUG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluT2JqKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouaWQgPT09IG9sZENvbnRleHQuaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwaWNrKG5ld0NvbnRleHQsIFsnaWQnLCAnbmFtZSddKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYnMkKG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIGNvbnN0IGRhc2hib2FyZHMgPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZGFzaGJvYXJkID0+IHRoaXMudmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQpKSxcbiAgICAgIG1lcmdlTWFwKChbZGFzaGJvYXJkXSkgPT4gdGhpcy5yZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KGRhc2hib2FyZCkpLFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgbWFwKGRhc2hib2FyZCA9PiB0aGlzLmNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdsb2JhbFJvbGVzSWRzID0gZGFzaGJvYXJkPy5jOHlfRGFzaGJvYXJkPy5nbG9iYWxSb2xlc0lkcztcbiAgICBjb25zdCBjYW5FZGl0ID0gZnJvbShcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgZGFzaGJvYXJkLCB7IHNraXBSZXF1ZXN0Q2hlY2s6IHRydWUgfSlcbiAgICApO1xuICAgIGNvbnN0IGhhc0FueUdsb2JhbFJvbGUgPVxuICAgICAgIWdsb2JhbFJvbGVzSWRzIHx8IGdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgOiBvZih0aGlzLnBlcm1pc3Npb25zLmhhc0FueUdsb2JhbFJvbGUoZ2xvYmFsUm9sZXNJZHMpKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZihkYXNoYm9hcmQpLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkucGlwZShcbiAgICAgIGZpbHRlcigoWywgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pID0+IGNhbkVkaXQgfHwgaGFzQW55R2xvYmFsUm9sZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyQocmVxdWVzdHM6IEFycmF5PFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0cykucGlwZShcbiAgICAgIG1lcmdlQWxsKCksXG4gICAgICBtZXJnZU1hcChyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0W10pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgYWxyZWFkeSBjb3JydXB0ZWQgZGFzaGJvYXJkcyBmcm9tIGRhc2hib2FyZE1vIHByb3BlcnR5LlxuICAgKiBBZGRlZCB0byBmaXggZGFzaGJvYXJkcyBvbiB0aGUgY2xvdWQgaW5zdGFuY2UgKGV1LWxhdGVzdCkuXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBhZnRlciAxMDA3LjcuMC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlRGFzaGJvYXJkTW9Qcm9wZXJ0eShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDb3B5ID0gY2xvbmVEZWVwKGRhc2hib2FyZCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXQoZGFzaGJvYXJkQ29weSwgJ2M4eV9EYXNoYm9hcmQuY2hpbGRyZW4nKTtcbiAgICBsZXQgdXBkYXRlRGFzaGJvYXJkID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQnKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ7XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29uZmlnLmRhc2hib2FyZE1vJykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbmZpZy5kYXNoYm9hcmRNbztcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVEYXNoYm9hcmQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlKGRhc2hib2FyZENvcHkpO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGJvYXJkQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGFzaGJvYXJkKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGM4eV9EYXNoYm9hcmQ6IF9kYXNoYm9hcmQsIGlkIH0gPSBkYXNoYm9hcmQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IF9kYXNoYm9hcmQuaWNvbixcbiAgICAgIHBhdGg6IGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7aWR9YCxcbiAgICAgIGxhYmVsOiBfZGFzaGJvYXJkLm5hbWUsXG4gICAgICBwcmlvcml0eTogX2Rhc2hib2FyZC5wcmlvcml0eSxcbiAgICAgIGhpZGU6IHRoaXMuaXNSZXBvcnQoZGFzaGJvYXJkKVxuICAgIH0gYXMgVGFiO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbihkYXNoYm9hcmQpIHtcbiAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGFzaGJvYXJkLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJyQkaGFzaEtleScgfHwga2V5ID09PSAna2xhc3NlcycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROYW1lZERhc2hib2FyZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBmcmFnbWVudFR5cGU6IGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtuYW1lfWAsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyhtbzogSU1hbmFnZWRPYmplY3QsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10pIHtcbiAgICByZXR1cm4gZGFzaGJvYXJkVHlwZS5tYXAoKHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlKSA9PlxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICAgIGZyYWdtZW50VHlwZTogdGhpcy5jcmVhdGVEYXNoYm9hcmRGcmFnbWVudChtbywgdHlwZSksXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLkRFRkFVTFRfUEFHRVNJWkVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkRnJhZ21lbnQobW86IElNYW5hZ2VkT2JqZWN0LCB0eXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAobW8uYzh5X1JlcG9ydCkge1xuICAgICAgdmFsdWUgPSBgJHt0aGlzLlJFUE9SVF9QQVJUSUFMX05BTUV9JHttby5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBtby50eXBlIDogbW8uaWQ7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7dHlwZX0ke3RoaXMuSU5ERVhfU1BMSVR9JHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXNoYm9hcmRUeXBlRnJvbVZpZXdDb250ZXh0KGRhc2hib2FyZENmZywgY29udGV4dCkge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlO1xuICAgIGlmIChjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IGRhc2hib2FyZENmZy5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZVxuICAgICAgICA6IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZFR5cGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiBbdGhpcy5GUkFHTUVOVF9OQU1FLCBjb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWVdLmpvaW4odGhpcy5JTkRFWF9TUExJVCk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LCBjb250ZXh0Pykge1xuICAgIGlmIChcbiAgICAgICghY29udGV4dCAmJiB0aGlzLmlzTmFtZWQoZGFzaGJvYXJkKSAmJiAhdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpKSB8fFxuICAgICAgdGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKVxuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvZGFzaGJvYXJkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGxlZ2FjeSB3aWRnZXQuIFBsZWFzZSB1c2VcbiAqIHRoZSBwcm9wZXIgV2lkZ2V0IGludGVyZmFjZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeVdpZGdldCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd2lkZ2V0LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29tcG9uZW5JZFxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBVUkwgZm9yIGxlZ2FjeSBwbHVnaW5zLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHRlbXBsYXRlVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIHRlbXBsYXRlIFVSTCBmb3IgbGVnYWN5IHBsdWdpbnMuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnVGVtcGxhdGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWcgY29tcG9uZW50IG5hbWUuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnQ29tcG9uZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkZ2V0IGNvbXBvbmVudCBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHdpZGdldENvbXBvbmVudD86IHN0cmluZztcbiAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgd2lkZ2V0IGlzIGEgY2hpbGQgb24gYSBkYXNoYm9hcmQgd2hpY2ggY2FuIGJlIGFkZGVkIGFuZCBjb25maWd1cmVkXG4gKiBieSB0aGUgdXNlci4gQSB3aWRnZXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIFtbRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25dXVxuICogYnkgYW55IG1vZHVsZSBvZiBhbiBhcHBsaWNhdGlvbi4gVGhldyB3aWRnZXQgaXRzZWxmIHN0b3JlcyBiZXNpZGUgaXQnc1xuICogbGluayAoY29tcG9uZW50SWQpIHRvIHRoZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiB0aGUgaW5mb3JtYXRpb25cbiAqIGFib3V0IHRoZSB0aXRsZSwgbGF5b3V0IChjbGFzc2VzKSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0IGV4dGVuZHMgTGVnYWN5V2lkZ2V0IHtcbiAgLyoqXG4gICAqIHggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF94PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB5IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfeT86IG51bWJlcjtcblxuICAvKipcbiAgICogd2lkdGggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF93aWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogaGVpZ2h0IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfaGVpZ2h0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGNvbXBvbmVudCBpZCB0byBmaW5kIHRoZSBjb21wb25lbnQgaW4gdGhlXG4gICAqIEhPT0tfQ09NUE9ORU5UUyBkeW5hbWljLWNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmFuZG9tIGtleSBmb3Igc2F2aW5nIGl0IHRvIHRoZSBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSB3aWRnZXQuXG4gICAqL1xuICBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGl0bGUgb2YgdGhlIHdpZGdldC5cbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBjbGFzc2VzIHNob3VsZCBiZSBhZGRlZC5cbiAgICovXG4gIGNsYXNzZXM/OiBhbnk7XG59XG5cbi8qKlxuICogSXMgdXNlZCB0byBjb25maWd1cmUgYSB3aWRnZXQgZGFzaGJvYXJkLiBJdCBhbGxvd3NcbiAqIHRvIHNldCBjZXJ0YWluIHBhcmFtZXRlciB0aGF0IGNoYW5nZSB0aGUgYmVoYXZpb3JcbiAqIG9mIHRoZSBkYXNoYm9hcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkU2V0dGluZ3Mge1xuICAvKipcbiAgICogSWYgdGhlIGRhc2hib2FyZCBpcyBmcm96ZW4sIHRoZSB1c2VyIGNhbid0IGVkaXQgaXQgYW55IG1vcmUuXG4gICAqIEhvd2V2ZXIgaGUgY2FuIGRlbGV0ZSBpdCBhbmQgY2hhbmdlIHRoZSBmcm96ZW4gc3RhdGUuXG4gICAqL1xuICBpc0Zyb3plbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoZSBkYXNoYm9hcmQgaXMgZGlzYWJsZWQsIG5vIGNoYW5nZXMgb24gdGhpcyBkYXNoYm9hcmQgYXJlIGFsbG93ZWQuXG4gICAqIEUuZy4gYmVjYXVzZSB0aGUgdXNlciBkb2Vzbid0IGhhdmUgdGhlIHJpZ2h0cy5cbiAgICovXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgZ2FwIGJldHdlZW4gZWFjaCB3aWRnZXQgYXMgcGl4ZWxcbiAgICovXG4gIHdpZGdldE1hcmdpbjogbnVtYmVyO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSBhcHBsaWNhdGlvbiBjaGVjayBpZiBhIHRyYW5zbGF0aW9uIGlzIHByZXNlbnQgZm9yIHRoZVxuICAgKiB3aWRnZXQgdGl0bGUuXG4gICAqL1xuICB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5ldyBhZGRlZCB3aWRnZXRzIGdldCB0aGF0IGhlaWdodCBhdHRhY2hlZCAoaW4gY3NzIGdyaWQgY29sdW1ucyB1bml0cylcbiAgICovXG4gIGRlZmF1bHRIZWlnaHQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIE5ldyBhZGRlZCB3aWRnZXRzIGdldCB0aGF0IHdpZHRoIGF0dGFjaGVkIChpbiBjc3MgZ3JpZCByb3cgdW5pdHMpXG4gICAqL1xuICBkZWZhdWx0V2lkdGg6IG51bWJlcjtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgdXNlciBiZSBhYmxlIHRvIHN3aXRjaCB0byBmdWxsc2NyZWVuIG1vZGUuXG4gICAqL1xuICBhbGxvd0Z1bGxzY3JlZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGdsb2JhbCB0aXRsZSB0aGF0IGlzIHVzZWQgZm9yIHRoaXMgZGFzaGJvYXJkLlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGRhc2hib2FyZCBjYW4gbm90IGJlIGNvcGllZCAoZGVmYXVsdCB0cnVlKS5cbiAgICovXG4gIGNhbkNvcHk/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvZGFzaGJvYXJkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGxlZ2FjeSB3aWRnZXQuIFBsZWFzZSB1c2VcbiAqIHRoZSBwcm9wZXIgV2lkZ2V0IGludGVyZmFjZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeVdpZGdldCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd2lkZ2V0LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29tcG9uZW5JZFxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBVUkwgZm9yIGxlZ2FjeSBwbHVnaW5zLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHRlbXBsYXRlVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIHRlbXBsYXRlIFVSTCBmb3IgbGVnYWN5IHBsdWdpbnMuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnVGVtcGxhdGVVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWcgY29tcG9uZW50IG5hbWUuXG4gICAqIEBkZXByZWNhdGVkOiBPbmx5IHVzZWQgZm9yIGFuZ3VsYXJqcyBwbHVnaW5zLlxuICAgKi9cbiAgY29uZmlnQ29tcG9uZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkZ2V0IGNvbXBvbmVudCBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZDogT25seSB1c2VkIGZvciBhbmd1bGFyanMgcGx1Z2lucy5cbiAgICovXG4gIHdpZGdldENvbXBvbmVudD86IHN0cmluZztcbiAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgd2lkZ2V0IGlzIGEgY2hpbGQgb24gYSBkYXNoYm9hcmQgd2hpY2ggY2FuIGJlIGFkZGVkIGFuZCBjb25maWd1cmVkXG4gKiBieSB0aGUgdXNlci4gQSB3aWRnZXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIFtbRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25dXVxuICogYnkgYW55IG1vZHVsZSBvZiBhbiBhcHBsaWNhdGlvbi4gVGhldyB3aWRnZXQgaXRzZWxmIHN0b3JlcyBiZXNpZGUgaXQnc1xuICogbGluayAoY29tcG9uZW50SWQpIHRvIHRoZSBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiB0aGUgaW5mb3JtYXRpb25cbiAqIGFib3V0IHRoZSB0aXRsZSwgbGF5b3V0IChjbGFzc2VzKSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0IGV4dGVuZHMgTGVnYWN5V2lkZ2V0IHtcbiAgLyoqXG4gICAqIHggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF94PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB5IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfeT86IG51bWJlcjtcblxuICAvKipcbiAgICogd2lkdGggZGltZW5zaW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIF93aWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogaGVpZ2h0IGRpbWVuc2lvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBfaGVpZ2h0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGNvbXBvbmVudCBpZCB0byBmaW5kIHRoZSBjb21wb25lbnQgaW4gdGhlXG4gICAqIEhPT0tfQ09NUE9ORU5UUyBkeW5hbWljLWNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmFuZG9tIGtleSBmb3Igc2F2aW5nIGl0IHRvIHRoZSBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSB3aWRnZXQuXG4gICAqL1xuICBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGl0bGUgb2YgdGhlIHdpZGdldC5cbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBjbGFzc2VzIHNob3VsZCBiZSBhZGRlZC5cbiAgICovXG4gIGNsYXNzZXM/OiBhbnk7XG59XG5cbi8qKlxuICogSXMgdXNlZCB0byBjb25maWd1cmUgYSB3aWRnZXQgZGFzaGJvYXJkLiBJdCBhbGxvd3NcbiAqIHRvIHNldCBjZXJ0YWluIHBhcmFtZXRlciB0aGF0IGNoYW5nZSB0aGUgYmVoYXZpb3JcbiAqIG9mIHRoZSBkYXNoYm9hcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkU2V0dGluZ3Mge1xuICAvKipcbiAgICogSWYgdGhlIGRhc2hib2FyZCBpcyBmcm96ZW4sIHRoZSB1c2VyIGNhbid0IGVkaXQgaXQgYW55IG1vcmUuXG4gICAqIEhvd2V2ZXIgaGUgY2FuIGRlbGV0ZSBpdCBhbmQgY2hhbmdlIHRoZSBmcm96ZW4gc3RhdGUuXG4gICAqL1xuICBpc0Zyb3plbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoZSBkYXNoYm9hcmQgaXMgZGlzYWJsZWQsIG5vIGNoYW5nZXMgb24gdGhpcyBkYXNoYm9hcmQgYXJlIGFsbG93ZWQuXG4gICAqIEUuZy4gYmVjYXVzZSB0aGUgdXNlciBkb2Vzbid0IGhhdmUgdGhlIHJpZ2h0cy5cbiAgICovXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgZ2FwIGJldHdlZW4gZWFjaCB3aWRnZXQgYXMgcGl4ZWxcbiAgICovXG4gIHdpZGdldE1hcmdpbjogbnVtYmVyO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSBhcHBsaWNhdGlvbiBjaGVjayBpZiBhIHRyYW5zbGF0aW9uIGlzIHByZXNlbnQgZm9yIHRoZVxuICAgKiB3aWRnZXQgdGl0bGUuXG4gICAqL1xuICB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5ldyBhZGRlZCB3aWRnZXRzIGdldCB0aGF0IGhlaWdodCBhdHRhY2hlZCAoaW4gY3NzIGdyaWQgY29sdW1ucyB1bml0cylcbiAgICovXG4gIGRlZmF1bHRIZWlnaHQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIE5ldyBhZGRlZCB3aWRnZXRzIGdldCB0aGF0IHdpZHRoIGF0dGFjaGVkIChpbiBjc3MgZ3JpZCByb3cgdW5pdHMpXG4gICAqL1xuICBkZWZhdWx0V2lkdGg6IG51bWJlcjtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgdXNlciBiZSBhYmxlIHRvIHN3aXRjaCB0byBmdWxsc2NyZWVuIG1vZGUuXG4gICAqL1xuICBhbGxvd0Z1bGxzY3JlZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGdsb2JhbCB0aXRsZSB0aGF0IGlzIHVzZWQgZm9yIHRoaXMgZGFzaGJvYXJkLlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGRhc2hib2FyZCBjYW4gbm90IGJlIGNvcGllZCAoZGVmYXVsdCB0cnVlKS5cbiAgICovXG4gIGNhbkNvcHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlZCBjb3B5IGRhc2hib2FyZCBidXR0b24uXG4gICAqL1xuICBpc0NvcHlEaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGRhc2hib2FyZCBjYW4gbm90IGJlIHJlbW92ZWQgKGRlZmF1bHQgdHJ1ZSkuXG4gICAqL1xuICBjYW5EZWxldGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGFzaGJvYXJkIGlzIGxvYWRpbmcuXG4gICAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIGNvbHVtbnMgb24gdGhhdCBkYXNoYm9hcmQuXG4gICAqIENhbiBiZSBmcmVlbHkgY2hvc2VuLCBidXQgcHJvZHVjdCB1c2VzIGVpdGhlciAxMiBvciAyNC5cbiAgICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZFJlc2l6ZURpbWVuc2lvbiB7XG4gIHBvaW50ZXI6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGlsZEFycmFuZ2VtZW50IHtcbiAgY3VycmVudDogRGFzaGJvYXJkQ2hpbGREaW1lbnNpb247XG4gIHNjYW46IERhc2hib2FyZENoaWxkQ29tcG9uZW50W107XG4gIHNwYWNpbmc6IG51bWJlcjtcbiAgb3JpZ2luOiBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDaGFuZ2Uge1xuICBzb3VyY2U6IERhc2hib2FyZENoaWxkQ29tcG9uZW50O1xuICBjaGlsZHJlbjogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaWRnZXRDaGFuZ2Uge1xuICB3aWRnZXQ6IFdpZGdldDtcbiAgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQ7XG4gIHNvdXJjZTogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ7XG59XG4iXX0=
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
2
3
|
import { DynamicComponentService } from '../dynamic-component/dynamic-component.service';
|
|
3
4
|
import { BehaviorSubject, combineLatest, merge } from 'rxjs';
|
|
4
5
|
import { map, shareReplay, switchMap } from 'rxjs/operators';
|
|
5
6
|
import { set } from 'lodash-es';
|
|
6
7
|
import { WidgetsDashboardEventService } from './widgets-dashboard-event.service';
|
|
8
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "../dynamic-component/dynamic-component.service";
|
|
9
|
-
import * as i2 from "
|
|
10
|
-
import * as i3 from "
|
|
11
|
-
import * as i4 from "../
|
|
12
|
-
import * as i5 from "
|
|
13
|
-
import * as i6 from "../
|
|
14
|
-
import * as i7 from "
|
|
15
|
-
import * as i8 from "../
|
|
16
|
-
import * as i9 from "../
|
|
17
|
-
import * as i10 from "../
|
|
18
|
-
import * as i11 from "../
|
|
19
|
-
import * as i12 from "../
|
|
20
|
-
import * as i13 from "../
|
|
21
|
-
import * as i14 from "
|
|
22
|
-
import * as i15 from "
|
|
23
|
-
import * as i16 from "./dashboard-child
|
|
24
|
-
import * as i17 from "./dashboard
|
|
25
|
-
import * as i18 from "./
|
|
26
|
-
import * as i19 from "
|
|
11
|
+
import * as i2 from "@ngx-translate/core";
|
|
12
|
+
import * as i3 from "@angular/router";
|
|
13
|
+
import * as i4 from "../common/empty-state/empty-state.component";
|
|
14
|
+
import * as i5 from "../common/icon.directive";
|
|
15
|
+
import * as i6 from "../i18n/c8y-translate.directive";
|
|
16
|
+
import * as i7 from "@angular/common";
|
|
17
|
+
import * as i8 from "../common/loading.component";
|
|
18
|
+
import * as i9 from "../action-bar/action-bar-item.component";
|
|
19
|
+
import * as i10 from "../dynamic-component/dynamic-component.component";
|
|
20
|
+
import * as i11 from "../header/title/title.component";
|
|
21
|
+
import * as i12 from "../docs/guide-href.directive";
|
|
22
|
+
import * as i13 from "../docs/guide-docs.component";
|
|
23
|
+
import * as i14 from "../breadcrumb/breadcrumb.component";
|
|
24
|
+
import * as i15 from "../breadcrumb/breadcrumb-item.component";
|
|
25
|
+
import * as i16 from "./dashboard-child.component";
|
|
26
|
+
import * as i17 from "./dashboard.component";
|
|
27
|
+
import * as i18 from "./dashboard-child-title.component";
|
|
28
|
+
import * as i19 from "./dashboard-child-action.component";
|
|
29
|
+
import * as i20 from "./widget-time-context.component";
|
|
30
|
+
import * as i21 from "../i18n/c8y-translate.pipe";
|
|
27
31
|
export class WidgetsDashboardComponent {
|
|
28
|
-
constructor(dynamic) {
|
|
32
|
+
constructor(dynamic, translateService, route) {
|
|
29
33
|
this.dynamic = dynamic;
|
|
34
|
+
this.translateService = translateService;
|
|
35
|
+
this.route = route;
|
|
30
36
|
this.contextDashboard = { updateTarget: true };
|
|
31
37
|
this.settings = {
|
|
32
38
|
isFrozen: false,
|
|
@@ -53,6 +59,11 @@ export class WidgetsDashboardComponent {
|
|
|
53
59
|
this.onChangeEnd = new EventEmitter();
|
|
54
60
|
this._widgets = new BehaviorSubject([]);
|
|
55
61
|
this.isLoading$ = new BehaviorSubject(!!this._settings?.isLoading);
|
|
62
|
+
const viewContext = this.route.parent.snapshot.data?.context;
|
|
63
|
+
if (viewContext) {
|
|
64
|
+
const ctx = viewContext.split('/').shift();
|
|
65
|
+
this.copyDashboardWarningMessage = this.translateService.instant('Only dashboards with widgets referencing the current {{ ctx }} can be copied.', { ctx });
|
|
66
|
+
}
|
|
56
67
|
this.resolvedWidgets$ = this._widgets.pipe(switchMap(widgets => this.executeResolversOfWidgets(widgets)), shareReplay(1));
|
|
57
68
|
this.isExecutingResolvers$ = merge(this._widgets.pipe(map(() => true)), this.resolvedWidgets$.pipe(map(() => false)));
|
|
58
69
|
this.isLoadingWidgets$ = combineLatest([this.isLoading$, this.isExecutingResolvers$]).pipe(map(loadings => loadings.some(loading => loading)), shareReplay(1));
|
|
@@ -130,8 +141,8 @@ export class WidgetsDashboardComponent {
|
|
|
130
141
|
return widgets;
|
|
131
142
|
}
|
|
132
143
|
}
|
|
133
|
-
WidgetsDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetsDashboardComponent, deps: [{ token: i1.DynamicComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
134
|
-
WidgetsDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: { widgets: "widgets", context: "context", contextDashboard: "contextDashboard", _settings: ["settings", "_settings"], breadcrumb: "breadcrumb" }, outputs: { onAddWidget: "onAddWidget", onEditWidget: "onEditWidget", onDeleteWidget: "onDeleteWidget", onChangeDashboard: "onChangeDashboard", onEditDashboard: "onEditDashboard", onCopyDashboard: "onCopyDashboard", onDeleteDashboard: "onDeleteDashboard", onFreeze: "onFreeze", onChangeStart: "onChangeStart", onChangeEnd: "onChangeEnd" }, host: { styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, providers: [WidgetsDashboardEventService], ngImport: i0, template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button\n title=\"{{ 'Full screen' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i>\n {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'more'\" [priority]=\"-2000\" *ngIf=\"settings.canCopy\">\n <button title=\"{{ 'Copy dashboard' | translate }}\" type=\"button\" (click)=\"onCopyDashboard.emit()\" class=\"btn btn-link\">\n <i c8yIcon=\"clone\"></i>\n <span class=\"m-l-4\" translate>Copy dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button\n title=\"{{ 'Delete dashboard' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteDashboard.emit()\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<ng-template #loadingIndicator>\n <c8y-loading class=\"col-xs-12 text-center\" *ngIf=\"isLoadingWidgets$ | async\"></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n <!-- empty state -->\n <c8y-ui-empty-state\n *ngIf=\"widgetsToDisplay?.length === 0\"\n [icon]=\"'c8y-device'\"\n [title]=\"'No widgets to display.' | translate\"\n >\n <div *ngIf=\"!settings.isFrozen && onAddWidget.observers.length\">\n <p translate>Add widgets to this dashboard.</p>\n <div>\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n class=\"btn btn-primary m-t-16\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n </div>\n </c8y-ui-empty-state>\n\n <c8y-dashboard\n [columns]=\"settings.columns\"\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n >\n <c8y-dashboard-child\n *ngFor=\"let widget of widgetsToDisplay\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [isFrozen]=\"settings.isFrozen || settings.isDisabled\"\n [class]=\"widget.classes\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n #child\n >\n <c8y-dashboard-child-title>\n <span *ngIf=\"settings.translateWidgetTitle\">\n {{ widget.title | translate }}\n </span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button\n title=\"{{ 'Edit widget' | translate }}\"\n type=\"button\"\n (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"pencil\"></i>\n <span class=\"m-l-4\" translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n title=\"{{ 'Remove widget' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n\n <c8y-widget-time-context\n *ngIf=\"\n widget.config?.displaySettings?.globalTimeContext &&\n widget.config?.widgetInstanceGlobalTimeContext\n \"\n (dateContextChange)=\"updateWidgetConfig({ date: $event }, widget)\"\n [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n ></c8y-widget-time-context>\n\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n </c8y-dashboard>\n </ng-container>\n</ng-container>\n\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i7.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i8.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "component", type: i9.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i10.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i11.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i12.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i13.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i14.DashboardChildComponent, selector: "c8y-dashboard-child", inputs: ["x", "y", "width", "height", "data", "margin", "isFrozen", "useIntersection", "class"], outputs: ["changeStart", "changeEnd"] }, { kind: "component", type: i15.DashboardComponent, selector: "c8y-dashboard", inputs: ["columns", "gap", "rows"], outputs: ["dashboardChange"] }, { kind: "component", type: i16.DashboardChildTitleComponent, selector: "c8y-dashboard-child-title" }, { kind: "component", type: i17.DashboardChildActionComponent, selector: "c8y-dashboard-child-action" }, { kind: "component", type: i18.WidgetTimeContextComponent, selector: "c8y-widget-time-context", inputs: ["canDecouple"], outputs: ["dateContextChange"] }, { kind: "pipe", type: i19.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
|
|
144
|
+
WidgetsDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetsDashboardComponent, deps: [{ token: i1.DynamicComponentService }, { token: i2.TranslateService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
+
WidgetsDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: { widgets: "widgets", context: "context", contextDashboard: "contextDashboard", _settings: ["settings", "_settings"], breadcrumb: "breadcrumb" }, outputs: { onAddWidget: "onAddWidget", onEditWidget: "onEditWidget", onDeleteWidget: "onDeleteWidget", onChangeDashboard: "onChangeDashboard", onEditDashboard: "onEditDashboard", onCopyDashboard: "onCopyDashboard", onDeleteDashboard: "onDeleteDashboard", onFreeze: "onFreeze", onChangeStart: "onChangeStart", onChangeEnd: "onChangeEnd" }, host: { styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, providers: [WidgetsDashboardEventService], ngImport: i0, template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button\n title=\"{{ 'Full screen' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i>\n {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n *ngIf=\"settings.canCopy\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n settings.isCopyDisabled ? copyDashboardWarningMessage : ('Copy dashboard' | translate)\n }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"onCopyDashboard.emit()\"\n [disabled]=\"settings.isCopyDisabled\"\n >\n <i c8yIcon=\"clone\"></i>\n <span class=\"m-l-4\" translate>Copy dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button\n title=\"{{ 'Delete dashboard' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteDashboard.emit()\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<ng-template #loadingIndicator>\n <c8y-loading class=\"col-xs-12 text-center\" *ngIf=\"isLoadingWidgets$ | async\"></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n <!-- empty state -->\n <c8y-ui-empty-state\n *ngIf=\"widgetsToDisplay?.length === 0\"\n [icon]=\"'c8y-device'\"\n [title]=\"'No widgets to display.' | translate\"\n >\n <div *ngIf=\"!settings.isFrozen && onAddWidget.observers.length\">\n <p translate>Add widgets to this dashboard.</p>\n <div>\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n class=\"btn btn-primary m-t-16\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n </div>\n </c8y-ui-empty-state>\n\n <c8y-dashboard\n [columns]=\"settings.columns\"\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n >\n <c8y-dashboard-child\n *ngFor=\"let widget of widgetsToDisplay\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [isFrozen]=\"settings.isFrozen || settings.isDisabled\"\n [class]=\"widget.classes\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n #child\n >\n <c8y-dashboard-child-title>\n <span *ngIf=\"settings.translateWidgetTitle\">\n {{ widget.title | translate }}\n </span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button\n title=\"{{ 'Edit widget' | translate }}\"\n type=\"button\"\n (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"pencil\"></i>\n <span class=\"m-l-4\" translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n title=\"{{ 'Remove widget' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n\n <c8y-widget-time-context\n *ngIf=\"\n widget.config?.displaySettings?.globalTimeContext &&\n widget.config?.widgetInstanceGlobalTimeContext\n \"\n (dateContextChange)=\"updateWidgetConfig({ date: $event }, widget)\"\n [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n ></c8y-widget-time-context>\n\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n </c8y-dashboard>\n </ng-container>\n</ng-container>\n\n", dependencies: [{ kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i6.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i9.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i10.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "component", type: i11.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i12.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i13.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i14.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i15.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i16.DashboardChildComponent, selector: "c8y-dashboard-child", inputs: ["x", "y", "width", "height", "data", "margin", "isFrozen", "useIntersection", "class"], outputs: ["changeStart", "changeEnd"] }, { kind: "component", type: i17.DashboardComponent, selector: "c8y-dashboard", inputs: ["columns", "gap", "rows"], outputs: ["dashboardChange"] }, { kind: "component", type: i18.DashboardChildTitleComponent, selector: "c8y-dashboard-child-title" }, { kind: "component", type: i19.DashboardChildActionComponent, selector: "c8y-dashboard-child-action" }, { kind: "component", type: i20.WidgetTimeContextComponent, selector: "c8y-widget-time-context", inputs: ["canDecouple"], outputs: ["dateContextChange"] }, { kind: "pipe", type: i21.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] });
|
|
135
146
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetsDashboardComponent, decorators: [{
|
|
136
147
|
type: Component,
|
|
137
148
|
args: [{ selector: 'c8y-widgets-dashboard', host: {
|
|
@@ -139,8 +150,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
139
150
|
display: block;
|
|
140
151
|
`,
|
|
141
152
|
class: 'dashboard c8y-grid-dashboard'
|
|
142
|
-
}, providers: [WidgetsDashboardEventService], template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button\n title=\"{{ 'Full screen' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i>\n {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item
|
|
143
|
-
}], ctorParameters: function () { return [{ type: i1.DynamicComponentService }]; }, propDecorators: { widgets: [{
|
|
153
|
+
}, providers: [WidgetsDashboardEventService], template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onAddWidget.observers.length\">\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"onEditDashboard.observers.length\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onEditDashboard.emit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"settings.allowFullscreen\">\n <button\n title=\"{{ 'Full screen' | translate }}\"\n type=\"button\"\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"fullScreen() ? 'compress' : 'expand'\"></i>\n {{ 'Full screen' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"navbar-form\"\n *ngIf=\"onFreeze.observers.length\"\n>\n <button\n title=\"{{ 'Lock/unlock this dashboard' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n [ngClass]=\"{ active: settings.isFrozen }\"\n (click)=\"onFreeze.emit(settings)\"\n [disabled]=\"settings.isDisabled\"\n uib-btn-checkbox\n >\n <i [c8yIcon]=\"settings.isFrozen ? 'lock' : 'unlock'\"></i>\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n *ngIf=\"settings.canCopy\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{\n settings.isCopyDisabled ? copyDashboardWarningMessage : ('Copy dashboard' | translate)\n }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"onCopyDashboard.emit()\"\n [disabled]=\"settings.isCopyDisabled\"\n >\n <i c8yIcon=\"clone\"></i>\n <span class=\"m-l-4\" translate>Copy dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button\n title=\"{{ 'Delete dashboard' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteDashboard.emit()\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<ng-template #loadingIndicator>\n <c8y-loading class=\"col-xs-12 text-center\" *ngIf=\"isLoadingWidgets$ | async\"></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n <!-- empty state -->\n <c8y-ui-empty-state\n *ngIf=\"widgetsToDisplay?.length === 0\"\n [icon]=\"'c8y-device'\"\n [title]=\"'No widgets to display.' | translate\"\n >\n <div *ngIf=\"!settings.isFrozen && onAddWidget.observers.length\">\n <p translate>Add widgets to this dashboard.</p>\n <div>\n <button\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isFrozen || settings.isDisabled\"\n (click)=\"onAddWidget.emit()\"\n class=\"btn btn-primary m-t-16\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide`KEEP_ORIGINAL`</a>\n .\n </small>\n </p>\n </div>\n </c8y-ui-empty-state>\n\n <c8y-dashboard\n [columns]=\"settings.columns\"\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n >\n <c8y-dashboard-child\n *ngFor=\"let widget of widgetsToDisplay\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [isFrozen]=\"settings.isFrozen || settings.isDisabled\"\n [class]=\"widget.classes\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n #child\n >\n <c8y-dashboard-child-title>\n <span *ngIf=\"settings.translateWidgetTitle\">\n {{ widget.title | translate }}\n </span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button\n title=\"{{ 'Edit widget' | translate }}\"\n type=\"button\"\n (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"pencil\"></i>\n <span class=\"m-l-4\" translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n title=\"{{ 'Remove widget' | translate }}\"\n type=\"button\"\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"delete\"></i>\n <span class=\"m-l-4\" translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n\n <c8y-widget-time-context\n *ngIf=\"\n widget.config?.displaySettings?.globalTimeContext &&\n widget.config?.widgetInstanceGlobalTimeContext\n \"\n (dateContextChange)=\"updateWidgetConfig({ date: $event }, widget)\"\n [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n ></c8y-widget-time-context>\n\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n </c8y-dashboard>\n </ng-container>\n</ng-container>\n\n" }]
|
|
154
|
+
}], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i2.TranslateService }, { type: i3.ActivatedRoute }]; }, propDecorators: { widgets: [{
|
|
144
155
|
type: Input
|
|
145
156
|
}], context: [{
|
|
146
157
|
type: Input
|
|
@@ -172,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
172
183
|
}], onChangeEnd: [{
|
|
173
184
|
type: Output
|
|
174
185
|
}] } });
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYWpGLE1BQU0sT0FBTyx5QkFBeUI7SUE2RXBDLFlBQW9CLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBL0RwRCxxQkFBZ0IsR0FBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQVcvQyxhQUFRLEdBQXNCO1lBQzVCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixhQUFhLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQztZQUNmLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixT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SU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSUYsU0FBUztzQkFEWixLQUFLO3VCQUFDLFVBQVU7Z0JBT2pCLFVBQVU7c0JBRFQsS0FBSztnQkFrQk4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vYnJlYWRjcnVtYi9icmVhZGNydW1iLm1vZGVsJztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGFuZ2UsIERhc2hib2FyZFNldHRpbmdzLCBXaWRnZXQsIFdpZGdldENoYW5nZSB9IGZyb20gJy4vZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgV2lkZ2V0c0Rhc2hib2FyZEV2ZW50U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0cy1kYXNoYm9hcmQtZXZlbnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXRzLWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXRzLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBzdHlsZTogYFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgYCxcbiAgICBjbGFzczogJ2Rhc2hib2FyZCBjOHktZ3JpZC1kYXNoYm9hcmQnXG4gIH0sXG4gIHByb3ZpZGVyczogW1dpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldHNEYXNoYm9hcmRDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBzZXQgd2lkZ2V0cyh2YWx1ZTogV2lkZ2V0W10pIHtcbiAgICB0aGlzLl93aWRnZXRzLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHdpZGdldHMoKTogV2lkZ2V0W10ge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRzLnZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgY29udGV4dDogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRleHREYXNoYm9hcmQ6IGFueSA9IHsgdXBkYXRlVGFyZ2V0OiB0cnVlIH07XG5cbiAgQElucHV0KCdzZXR0aW5ncycpXG4gIHNldCBfc2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGFzaGJvYXJkU2V0dGluZ3M+KSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHsgLi4udGhpcy5zZXR0aW5ncywgLi4uc2V0dGluZ3MgfTtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dCghIXRoaXMuc2V0dGluZ3MuaXNMb2FkaW5nKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJJdGVtO1xuXG4gIHNldHRpbmdzOiBEYXNoYm9hcmRTZXR0aW5ncyA9IHtcbiAgICBpc0Zyb3plbjogZmFsc2UsXG4gICAgaXNEaXNhYmxlZDogZmFsc2UsXG4gICAgd2lkZ2V0TWFyZ2luOiAxMixcbiAgICB0cmFuc2xhdGVXaWRnZXRUaXRsZTogZmFsc2UsXG4gICAgZGVmYXVsdEhlaWdodDogNCxcbiAgICBkZWZhdWx0V2lkdGg6IDQsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBmYWxzZSxcbiAgICBjYW5Db3B5OiB0cnVlLFxuICAgIGNhbkRlbGV0ZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGNvbHVtbnM6IDEyXG4gIH07XG5cbiAgQE91dHB1dCgpXG4gIG9uQWRkV2lkZ2V0OiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25FZGl0V2lkZ2V0OiBFdmVudEVtaXR0ZXI8V2lkZ2V0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25EZWxldGVXaWRnZXQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZURhc2hib2FyZDogRXZlbnRFbWl0dGVyPERhc2hib2FyZENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uRWRpdERhc2hib2FyZDogRXZlbnRFbWl0dGVyPERhc2hib2FyZENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ29weURhc2hib2FyZDogRXZlbnRFbWl0dGVyPERhc2hib2FyZENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uRGVsZXRlRGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25GcmVlemU6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRTZXR0aW5ncz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlU3RhcnQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZUVuZDogRXZlbnRFbWl0dGVyPFdpZGdldENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVzb2x2ZWRXaWRnZXRzJDogT2JzZXJ2YWJsZTxXaWRnZXRbXT47XG5cbiAgaXNMb2FkaW5nV2lkZ2V0cyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSBfd2lkZ2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2lkZ2V0W10+KFtdKTtcbiAgcHJpdmF0ZSBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdCghIXRoaXMuX3NldHRpbmdzPy5pc0xvYWRpbmcpO1xuICBwcml2YXRlIGlzRXhlY3V0aW5nUmVzb2x2ZXJzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGR5bmFtaWM6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlKSB7XG4gICAgdGhpcy5yZXNvbHZlZFdpZGdldHMkID0gdGhpcy5fd2lkZ2V0cy5waXBlKFxuICAgICAgc3dpdGNoTWFwKHdpZGdldHMgPT4gdGhpcy5leGVjdXRlUmVzb2x2ZXJzT2ZXaWRnZXRzKHdpZGdldHMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgICB0aGlzLmlzRXhlY3V0aW5nUmVzb2x2ZXJzJCA9IG1lcmdlKFxuICAgICAgdGhpcy5fd2lkZ2V0cy5waXBlKG1hcCgoKSA9PiB0cnVlKSksXG4gICAgICB0aGlzLnJlc29sdmVkV2lkZ2V0cyQucGlwZShtYXAoKCkgPT4gZmFsc2UpKVxuICAgICk7XG4gICAgdGhpcy5pc0xvYWRpbmdXaWRnZXRzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNMb2FkaW5nJCwgdGhpcy5pc0V4ZWN1dGluZ1Jlc29sdmVycyRdKS5waXBlKFxuICAgICAgbWFwKGxvYWRpbmdzID0+IGxvYWRpbmdzLnNvbWUobG9hZGluZyA9PiBsb2FkaW5nKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5ib2R5IGFzIGFueTtcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudCBhcyBhbnk7XG4gICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKEVsZW1lbnQgYXMgYW55KS5BTExPV19LRVlCT0FSRF9JTlBVVCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkb2MuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvYy5leGl0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZG9jLm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvYy5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChkb2MubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgZG9jLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGRvYy53ZWJraXRFeGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVsbFNjcmVlbigpIHtcbiAgICBjb25zdCBkb2M6IGFueSA9IGRvY3VtZW50O1xuICAgIHJldHVybiAhIShcbiAgICAgIGRvYy5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgZG9jLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8XG4gICAgICBkb2Mud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgIGRvYy5tc0Z1bGxzY3JlZW5FbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVdpZGdldENsYXNzZXMod2lkZ2V0OiBXaWRnZXQsIGNsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XG4gICAgd2lkZ2V0LmNsYXNzZXMgPSB7IC4uLndpZGdldC5jbGFzc2VzLCAuLi5jbGFzc2VzIH07XG4gIH1cblxuICB1cGRhdGVXaWRnZXRDb25maWcoZGF0YTogYW55LCB3aWRnZXQ6IFdpZGdldCkge1xuICAgIHdpZGdldC5jb25maWcgPSB7IC4uLndpZGdldC5jb25maWcsIC4uLmRhdGEgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVJlc29sdmVyc09mV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSk6IFByb21pc2U8V2lkZ2V0W10+IHtcbiAgICBpZiAoIXdpZGdldHMpIHtcbiAgICAgIHJldHVybiB3aWRnZXRzO1xuICAgIH1cblxuICAgIGNvbnN0IHR1cGxlID0gd2lkZ2V0cy5tYXAod2lkZ2V0ID0+ICh7XG4gICAgICBjb21wb25lbnRJZDogd2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lLFxuICAgICAgY29uZmlnOiB3aWRnZXQuY29uZmlnXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRSZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljLmV4ZWN1dGVSZXNvbHZlcnModHVwbGUpO1xuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHJlc29sdmVkUmVzdWx0c1tpbmRleF0pIHtcbiAgICAgICAgaWYgKCF3aWRnZXQuY29uZmlnKSB7XG4gICAgICAgICAgd2lkZ2V0LmNvbmZpZyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc29sdmVkUmVzdWx0c1tpbmRleF0pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICBzZXQod2lkZ2V0LmNvbmZpZywga2V5LCB2YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2lkZ2V0cztcbiAgfVxufVxuIiwiPGM4eS10aXRsZSAqbmdJZj1cIiEhc2V0dGluZ3MudGl0bGVcIj5cbiAge3sgc2V0dGluZ3MudGl0bGUgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWIgKm5nSWY9XCIhIWJyZWFkY3J1bWJcIj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCJicmVhZGNydW1iLmljb25cIlxuICAgIFtsYWJlbF09XCJicmVhZGNydW1iLmxhYmVsXCJcbiAgICBbcGF0aF09XCJicmVhZGNydW1iLnBhdGhcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCIgKm5nSWY9XCJvbkFkZFdpZGdldC5vYnNlcnZlcnMubGVuZ3RoXCI+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdBZGQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIFtkaXNhYmxlZF09XCJzZXR0aW5ncy5pc0Zyb3plbiB8fCBzZXR0aW5ncy5pc0Rpc2FibGVkXCJcbiAgICAoY2xpY2spPVwib25BZGRXaWRnZXQuZW1pdCgpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiICpuZ0lmPVwib25FZGl0RGFzaGJvYXJkLm9ic2VydmVycy5sZW5ndGhcIj5cbiAgPGJ1dHRvblxuICAgIHRpdGxlPVwie3sgJ0VkaXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRnJvemVuIHx8IHNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvbkVkaXREYXNoYm9hcmQuZW1pdCgpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwZW5jaWxcIj48L2k+XG4gICAge3sgJ0VkaXQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIiAqbmdJZj1cInNldHRpbmdzLmFsbG93RnVsbHNjcmVlblwiPlxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnRnVsbCBzY3JlZW4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCJmdWxsU2NyZWVuKCkgPyAnY29tcHJlc3MnIDogJ2V4cGFuZCdcIj48L2k+XG4gICAge3sgJ0Z1bGwgc2NyZWVuJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm1cIlxuICAqbmdJZj1cIm9uRnJlZXplLm9ic2VydmVycy5sZW5ndGhcIlxuPlxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnTG9jay91bmxvY2sgdGhpcyBkYXNoYm9hcmQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHNldHRpbmdzLmlzRnJvemVuIH1cIlxuICAgIChjbGljayk9XCJvbkZyZWV6ZS5lbWl0KHNldHRpbmdzKVwiXG4gICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICAgIHVpYi1idG4tY2hlY2tib3hcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cInNldHRpbmdzLmlzRnJvemVuID8gJ2xvY2snIDogJ3VubG9jaydcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCInbW9yZSdcIiBbcHJpb3JpdHldPVwiLTIwMDBcIiAqbmdJZj1cInNldHRpbmdzLmNhbkNvcHlcIj5cbiAgPGJ1dHRvbiB0aXRsZT1cInt7ICdDb3B5IGRhc2hib2FyZCcgfCB0cmFuc2xhdGUgfX1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ29weURhc2hib2FyZC5lbWl0KClcIiBjbGFzcz1cImJ0biBidG4tbGlua1wiPlxuICAgIDxpIGM4eUljb249XCJjbG9uZVwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCIgdHJhbnNsYXRlPkNvcHkgZGFzaGJvYXJkPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbW9yZSdcIlxuICBbcHJpb3JpdHldPVwiLTMwMDBcIlxuICAqbmdJZj1cInNldHRpbmdzLmNhbkRlbGV0ZSAmJiBvbkRlbGV0ZURhc2hib2FyZC5vYnNlcnZlcnMubGVuZ3RoXCJcbj5cbiAgPGJ1dHRvblxuICAgIHRpdGxlPVwie3sgJ0RlbGV0ZSBkYXNoYm9hcmQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwib25EZWxldGVEYXNoYm9hcmQuZW1pdCgpXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNGcm96ZW4gfHwgc2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZGVsZXRlXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIiB0cmFuc2xhdGU+RGVsZXRlIGRhc2hib2FyZDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0luZGljYXRvcj5cbiAgPGM4eS1sb2FkaW5nIGNsYXNzPVwiY29sLXhzLTEyIHRleHQtY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmdXaWRnZXRzJCB8IGFzeW5jXCI+PC9jOHktbG9hZGluZz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzTG9hZGluZ1dpZGdldHMkIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdJbmRpY2F0b3JcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc29sdmVkV2lkZ2V0cyQgfCBhc3luYyBhcyB3aWRnZXRzVG9EaXNwbGF5XCI+XG4gICAgPCEtLSBlbXB0eSBzdGF0ZSAtLT5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAqbmdJZj1cIndpZGdldHNUb0Rpc3BsYXk/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICBbaWNvbl09XCInYzh5LWRldmljZSdcIlxuICAgICAgW3RpdGxlXT1cIidObyB3aWRnZXRzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPGRpdiAqbmdJZj1cIiFzZXR0aW5ncy5pc0Zyb3plbiAmJiBvbkFkZFdpZGdldC5vYnNlcnZlcnMubGVuZ3RoXCI+XG4gICAgICAgIDxwIHRyYW5zbGF0ZT5BZGQgd2lkZ2V0cyB0byB0aGlzIGRhc2hib2FyZC48L3A+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNGcm96ZW4gfHwgc2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BZGRXaWRnZXQuZW1pdCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tdC0xNlwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBBZGQgd2lkZ2V0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICA8c21hbGwgdHJhbnNsYXRlIG5nTm9uQmluZGFibGU+XG4gICAgICAgICAgICBGaW5kIG91dCBtb3JlIGluIHRoZVxuICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCJ1c2Vycy1ndWlkZS9jb2NrcGl0LyNkYXNoYm9hcmRzXCI+VXNlciBndWlkZWBLRUVQX09SSUdJTkFMYDwvYT5cbiAgICAgICAgICAgIC5cbiAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgIDxjOHktZGFzaGJvYXJkXG4gICAgICBbY29sdW1uc109XCJzZXR0aW5ncy5jb2x1bW5zXCJcbiAgICAgIChkYXNoYm9hcmRDaGFuZ2UpPVwib25DaGFuZ2VEYXNoYm9hcmQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICNkYXNoYm9hcmRcbiAgICA+XG4gICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZFxuICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHdpZGdldHNUb0Rpc3BsYXlcIlxuICAgICAgICBbeF09XCJ3aWRnZXQuX3hcIlxuICAgICAgICBbeV09XCJ3aWRnZXQuX3lcIlxuICAgICAgICBbd2lkdGhdPVwid2lkZ2V0Ll93aWR0aCB8fCBzZXR0aW5ncy5kZWZhdWx0V2lkdGhcIlxuICAgICAgICBbaGVpZ2h0XT1cIndpZGdldC5faGVpZ2h0IHx8IHNldHRpbmdzLmRlZmF1bHRIZWlnaHRcIlxuICAgICAgICBbbWFyZ2luXT1cInNldHRpbmdzLndpZGdldE1hcmdpblwiXG4gICAgICAgIFtpc0Zyb3plbl09XCJzZXR0aW5ncy5pc0Zyb3plbiB8fCBzZXR0aW5ncy5pc0Rpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzXT1cIndpZGdldC5jbGFzc2VzXCJcbiAgICAgICAgW2RhdGFdPVwid2lkZ2V0XCJcbiAgICAgICAgW3VzZUludGVyc2VjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgKGNoYW5nZVN0YXJ0KT1cIm9uQ2hhbmdlU3RhcnQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgIChjaGFuZ2VFbmQpPVwib25DaGFuZ2VFbmQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgICNjaGlsZFxuICAgICAgPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNldHRpbmdzLnRyYW5zbGF0ZVdpZGdldFRpdGxlXCI+XG4gICAgICAgICAgICB7eyB3aWRnZXQudGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2V0dGluZ3MudHJhbnNsYXRlV2lkZ2V0VGl0bGVcIj5cbiAgICAgICAgICAgIHt7IHdpZGdldC50aXRsZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24gKm5nSWY9XCJvbkVkaXRXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXRXaWRnZXQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBlbmNpbFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIiB0cmFuc2xhdGU+RWRpdDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAgICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uICpuZ0lmPVwib25EZWxldGVXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlV2lkZ2V0LmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCIgdHJhbnNsYXRlPlJlbW92ZTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cblxuICAgICAgICA8Yzh5LXdpZGdldC10aW1lLWNvbnRleHRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgd2lkZ2V0LmNvbmZpZz8uZGlzcGxheVNldHRpbmdzPy5nbG9iYWxUaW1lQ29udGV4dCAmJlxuICAgICAgICAgICAgd2lkZ2V0LmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dFxuICAgICAgICAgIFwiXG4gICAgICAgICAgKGRhdGVDb250ZXh0Q2hhbmdlKT1cInVwZGF0ZVdpZGdldENvbmZpZyh7IGRhdGU6ICRldmVudCB9LCB3aWRnZXQpXCJcbiAgICAgICAgICBbY2FuRGVjb3VwbGVdPVwid2lkZ2V0LmNvbmZpZy5jYW5EZWNvdXBsZUdsb2JhbFRpbWVDb250ZXh0XCJcbiAgICAgICAgPjwvYzh5LXdpZGdldC10aW1lLWNvbnRleHQ+XG5cbiAgICAgICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICAgICAgICAgIFtjb21wb25lbnRJZF09XCJ3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWVcIlxuICAgICAgICAgIFtjb25maWddPVwiXG4gICAgICAgICAgICB3aWRnZXQudGVtcGxhdGVVcmwgfHwgd2lkZ2V0LndpZGdldENvbXBvbmVudFxuICAgICAgICAgICAgICA/IHsgY2hpbGQ6IHdpZGdldCwgZGFzaGJvYXJkOiBjb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0OiBjb250ZXh0IH1cbiAgICAgICAgICAgICAgOiB3aWRnZXQuY29uZmlnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAqbmdJZj1cImNoaWxkLmludGVyc2VjdGVkXCJcbiAgICAgICAgICAodXBkYXRlV2lkZ2V0Q2xhc3Nlcyk9XCJ1cGRhdGVXaWRnZXRDbGFzc2VzKHdpZGdldCwgJGV2ZW50KVwiXG4gICAgICAgID48L2M4eS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZD5cbiAgICA8L2M4eS1kYXNoYm9hcmQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYXZELE1BQU0sT0FBTyx5QkFBeUI7SUErRXBDLFlBQ1UsT0FBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLEtBQXFCO1FBRnJCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFwRS9CLHFCQUFnQixHQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1FBVy9DLGFBQVEsR0FBc0I7WUFDNUIsUUFBUSxFQUFFLEtBQUs7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QU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQzlELEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FDL0IsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOztzSEEzS1UseUJBQXlCOzBHQUF6Qix5QkFBeUIsd29CQUZ6QixDQUFDLDRCQUE0QixDQUFDLDBCQ3JCM0MsMG1PQW9OQTsyRkQ3TGEseUJBQXlCO2tCQVhyQyxTQUFTOytCQUNFLHVCQUF1QixRQUUzQjt3QkFDSixLQUFLLEVBQUU7O0tBRU47d0JBQ0QsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEMsYUFDVSxDQUFDLDRCQUE0QixDQUFDOzBLQUlyQyxPQUFPO3NCQURWLEtBQUs7Z0JBVU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSzt1QkFBQyxVQUFVO2dCQU9qQixVQUFVO3NCQURULEtBQUs7Z0JBa0JOLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQUlQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsZUFBZTtzQkFEZCxNQUFNO2dCQUlQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCcmVhZGNydW1iSXRlbSB9IGZyb20gJy4uL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5tb2RlbCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hhbmdlLCBEYXNoYm9hcmRTZXR0aW5ncywgV2lkZ2V0LCBXaWRnZXRDaGFuZ2UgfSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UgfSBmcm9tICcuL3dpZGdldHMtZGFzaGJvYXJkLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktd2lkZ2V0cy1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7XG4gICAgc3R5bGU6IGBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGAsXG4gICAgY2xhc3M6ICdkYXNoYm9hcmQgYzh5LWdyaWQtZGFzaGJvYXJkJ1xuICB9LFxuICBwcm92aWRlcnM6IFtXaWRnZXRzRGFzaGJvYXJkRXZlbnRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRzRGFzaGJvYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgc2V0IHdpZGdldHModmFsdWU6IFdpZGdldFtdKSB7XG4gICAgdGhpcy5fd2lkZ2V0cy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCB3aWRnZXRzKCk6IFdpZGdldFtdIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0cy52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNvbnRleHQ6IGFueTtcblxuICBASW5wdXQoKVxuICBjb250ZXh0RGFzaGJvYXJkOiBhbnkgPSB7IHVwZGF0ZVRhcmdldDogdHJ1ZSB9O1xuXG4gIEBJbnB1dCgnc2V0dGluZ3MnKVxuICBzZXQgX3NldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPERhc2hib2FyZFNldHRpbmdzPikge1xuICAgIHRoaXMuc2V0dGluZ3MgPSB7IC4uLnRoaXMuc2V0dGluZ3MsIC4uLnNldHRpbmdzIH07XG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQoISF0aGlzLnNldHRpbmdzLmlzTG9hZGluZyk7XG4gIH1cblxuICBASW5wdXQoKVxuICBicmVhZGNydW1iOiBCcmVhZGNydW1iSXRlbTtcblxuICBzZXR0aW5nczogRGFzaGJvYXJkU2V0dGluZ3MgPSB7XG4gICAgaXNGcm96ZW46IGZhbHNlLFxuICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICAgIHdpZGdldE1hcmdpbjogMTIsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGZhbHNlLFxuICAgIGRlZmF1bHRIZWlnaHQ6IDQsXG4gICAgZGVmYXVsdFdpZHRoOiA0LFxuICAgIGFsbG93RnVsbHNjcmVlbjogZmFsc2UsXG4gICAgY2FuQ29weTogdHJ1ZSxcbiAgICBjYW5EZWxldGU6IHRydWUsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBjb2x1bW5zOiAxMlxuICB9O1xuXG4gIEBPdXRwdXQoKVxuICBvbkFkZFdpZGdldDogRXZlbnRFbWl0dGVyPERhc2hib2FyZENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uRWRpdFdpZGdldDogRXZlbnRFbWl0dGVyPFdpZGdldENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uRGVsZXRlV2lkZ2V0OiBFdmVudEVtaXR0ZXI8V2lkZ2V0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2VEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkVkaXREYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNvcHlEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkRlbGV0ZURhc2hib2FyZDogRXZlbnRFbWl0dGVyPERhc2hib2FyZENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uRnJlZXplOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkU2V0dGluZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZVN0YXJ0OiBFdmVudEVtaXR0ZXI8V2lkZ2V0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2VFbmQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlc29sdmVkV2lkZ2V0cyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuXG4gIGlzTG9hZGluZ1dpZGdldHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvcHlEYXNoYm9hcmRXYXJuaW5nTWVzc2FnZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3dpZGdldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdpZGdldFtdPihbXSk7XG4gIHByaXZhdGUgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoISF0aGlzLl9zZXR0aW5ncz8uaXNMb2FkaW5nKTtcbiAgcHJpdmF0ZSBpc0V4ZWN1dGluZ1Jlc29sdmVycyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkeW5hbWljOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgdGhpcy5jb3B5RGFzaGJvYXJkV2FybmluZ01lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ09ubHkgZGFzaGJvYXJkcyB3aXRoIHdpZGdldHMgcmVmZXJlbmNpbmcgdGhlIGN1cnJlbnQge3sgY3R4IH19IGNhbiBiZSBjb3BpZWQuJyxcbiAgICAgICAgeyBjdHggfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVkV2lkZ2V0cyQgPSB0aGlzLl93aWRnZXRzLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAod2lkZ2V0cyA9PiB0aGlzLmV4ZWN1dGVSZXNvbHZlcnNPZldpZGdldHMod2lkZ2V0cykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICAgIHRoaXMuaXNFeGVjdXRpbmdSZXNvbHZlcnMkID0gbWVyZ2UoXG4gICAgICB0aGlzLl93aWRnZXRzLnBpcGUobWFwKCgpID0+IHRydWUpKSxcbiAgICAgIHRoaXMucmVzb2x2ZWRXaWRnZXRzJC5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgKTtcbiAgICB0aGlzLmlzTG9hZGluZ1dpZGdldHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pc0xvYWRpbmckLCB0aGlzLmlzRXhlY3V0aW5nUmVzb2x2ZXJzJF0pLnBpcGUoXG4gICAgICBtYXAobG9hZGluZ3MgPT4gbG9hZGluZ3Muc29tZShsb2FkaW5nID0+IGxvYWRpbmcpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmJvZHkgYXMgYW55O1xuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50IGFzIGFueTtcbiAgICBpZiAoIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICBlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigoRWxlbWVudCBhcyBhbnkpLkFMTE9XX0tFWUJPQVJEX0lOUFVUKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvYy5leGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChkb2MubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLm1zRXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGRvYy5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICBkb2MubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZG9jLndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICBkb2Mud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9XG4gIH1cblxuICBmdWxsU2NyZWVuKCkge1xuICAgIGNvbnN0IGRvYzogYW55ID0gZG9jdW1lbnQ7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZG9jLmZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICBkb2MubW96RnVsbFNjcmVlbkVsZW1lbnQgfHxcbiAgICAgIGRvYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgZG9jLm1zRnVsbHNjcmVlbkVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQ6IFdpZGdldCwgY2xhc3NlczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcbiAgICB3aWRnZXQuY2xhc3NlcyA9IHsgLi4ud2lkZ2V0LmNsYXNzZXMsIC4uLmNsYXNzZXMgfTtcbiAgfVxuXG4gIHVwZGF0ZVdpZGdldENvbmZpZyhkYXRhOiBhbnksIHdpZGdldDogV2lkZ2V0KSB7XG4gICAgd2lkZ2V0LmNvbmZpZyA9IHsgLi4ud2lkZ2V0LmNvbmZpZywgLi4uZGF0YSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUmVzb2x2ZXJzT2ZXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKTogUHJvbWlzZTxXaWRnZXRbXT4ge1xuICAgIGlmICghd2lkZ2V0cykge1xuICAgICAgcmV0dXJuIHdpZGdldHM7XG4gICAgfVxuXG4gICAgY29uc3QgdHVwbGUgPSB3aWRnZXRzLm1hcCh3aWRnZXQgPT4gKHtcbiAgICAgIGNvbXBvbmVudElkOiB3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUsXG4gICAgICBjb25maWc6IHdpZGdldC5jb25maWdcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXNvbHZlZFJlc3VsdHMgPSBhd2FpdCB0aGlzLmR5bmFtaWMuZXhlY3V0ZVJlc29sdmVycyh0dXBsZSk7XG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAocmVzb2x2ZWRSZXN1bHRzW2luZGV4XSkge1xuICAgICAgICBpZiAoIXdpZGdldC5jb25maWcpIHtcbiAgICAgICAgICB3aWRnZXQuY29uZmlnID0ge307XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzb2x2ZWRSZXN1bHRzW2luZGV4XSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgIHNldCh3aWRnZXQuY29uZmlnLCBrZXksIHZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwiISFzZXR0aW5ncy50aXRsZVwiPlxuICB7eyBzZXR0aW5ncy50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYiAqbmdJZj1cIiEhYnJlYWRjcnVtYlwiPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cImJyZWFkY3J1bWIuaWNvblwiXG4gICAgW2xhYmVsXT1cImJyZWFkY3J1bWIubGFiZWxcIlxuICAgIFtwYXRoXT1cImJyZWFkY3J1bWIucGF0aFwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIiAqbmdJZj1cIm9uQWRkV2lkZ2V0Lm9ic2VydmVycy5sZW5ndGhcIj5cbiAgPGJ1dHRvblxuICAgIHRpdGxlPVwie3sgJ0FkZCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRnJvemVuIHx8IHNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvbkFkZFdpZGdldC5lbWl0KClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCIgKm5nSWY9XCJvbkVkaXREYXNoYm9hcmQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNGcm96ZW4gfHwgc2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cIm9uRWRpdERhc2hib2FyZC5lbWl0KClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBlbmNpbFwiPjwvaT5cbiAgICB7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiICpuZ0lmPVwic2V0dGluZ3MuYWxsb3dGdWxsc2NyZWVuXCI+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdGdWxsIHNjcmVlbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cImZ1bGxTY3JlZW4oKSA/ICdjb21wcmVzcycgOiAnZXhwYW5kJ1wiPjwvaT5cbiAgICB7eyAnRnVsbCBzY3JlZW4nIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybVwiXG4gICpuZ0lmPVwib25GcmVlemUub2JzZXJ2ZXJzLmxlbmd0aFwiXG4+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdMb2NrL3VubG9jayB0aGlzIGRhc2hib2FyZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2V0dGluZ3MuaXNGcm96ZW4gfVwiXG4gICAgKGNsaWNrKT1cIm9uRnJlZXplLmVtaXQoc2V0dGluZ3MpXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gICAgdWliLWJ0bi1jaGVja2JveFxuICA+XG4gICAgPGkgW2M4eUljb25dPVwic2V0dGluZ3MuaXNGcm96ZW4gPyAnbG9jaycgOiAndW5sb2NrJ1wiPjwvaT5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidtb3JlJ1wiXG4gIFtwcmlvcml0eV09XCItMjAwMFwiXG4gICpuZ0lmPVwic2V0dGluZ3MuY2FuQ29weVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7e1xuICAgICAgc2V0dGluZ3MuaXNDb3B5RGlzYWJsZWQgPyBjb3B5RGFzaGJvYXJkV2FybmluZ01lc3NhZ2UgOiAoJ0NvcHkgZGFzaGJvYXJkJyB8IHRyYW5zbGF0ZSlcbiAgICB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1jb3B5LWRhc2hib2FyZFwiXG4gICAgKGNsaWNrKT1cIm9uQ29weURhc2hib2FyZC5lbWl0KClcIlxuICAgIFtkaXNhYmxlZF09XCJzZXR0aW5ncy5pc0NvcHlEaXNhYmxlZFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiY2xvbmVcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJtLWwtNFwiIHRyYW5zbGF0ZT5Db3B5IGRhc2hib2FyZDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ21vcmUnXCJcbiAgW3ByaW9yaXR5XT1cIi0zMDAwXCJcbiAgKm5nSWY9XCJzZXR0aW5ncy5jYW5EZWxldGUgJiYgb25EZWxldGVEYXNoYm9hcmQub2JzZXJ2ZXJzLmxlbmd0aFwiXG4+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdEZWxldGUgZGFzaGJvYXJkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uRGVsZXRlRGFzaGJvYXJkLmVtaXQoKVwiXG4gICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRnJvemVuIHx8IHNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCIgdHJhbnNsYXRlPkRlbGV0ZSBkYXNoYm9hcmQ8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdJbmRpY2F0b3I+XG4gIDxjOHktbG9hZGluZyBjbGFzcz1cImNvbC14cy0xMiB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaXNMb2FkaW5nV2lkZ2V0cyQgfCBhc3luY1wiPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0xvYWRpbmdXaWRnZXRzJCB8IGFzeW5jKTsgZWxzZSBsb2FkaW5nSW5kaWNhdG9yXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXNvbHZlZFdpZGdldHMkIHwgYXN5bmMgYXMgd2lkZ2V0c1RvRGlzcGxheVwiPlxuICAgIDwhLS0gZW1wdHkgc3RhdGUgLS0+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgKm5nSWY9XCJ3aWRnZXRzVG9EaXNwbGF5Py5sZW5ndGggPT09IDBcIlxuICAgICAgW2ljb25dPVwiJ2M4eS1kZXZpY2UnXCJcbiAgICAgIFt0aXRsZV09XCInTm8gd2lkZ2V0cyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxkaXYgKm5nSWY9XCIhc2V0dGluZ3MuaXNGcm96ZW4gJiYgb25BZGRXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICA8cCB0cmFuc2xhdGU+QWRkIHdpZGdldHMgdG8gdGhpcyBkYXNoYm9hcmQuPC9wPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRnJvemVuIHx8IHNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkV2lkZ2V0LmVtaXQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLXQtMTZcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQWRkIHdpZGdldFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgYzh5LWd1aWRlLWRvY3M+XG4gICAgICAgICAgPHNtYWxsIHRyYW5zbGF0ZSBuZ05vbkJpbmRhYmxlPlxuICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgIDxhIGM4eS1ndWlkZS1ocmVmPVwidXNlcnMtZ3VpZGUvY29ja3BpdC8jZGFzaGJvYXJkc1wiPlVzZXIgZ3VpZGVgS0VFUF9PUklHSU5BTGA8L2E+XG4gICAgICAgICAgICAuXG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgICA8Yzh5LWRhc2hib2FyZFxuICAgICAgW2NvbHVtbnNdPVwic2V0dGluZ3MuY29sdW1uc1wiXG4gICAgICAoZGFzaGJvYXJkQ2hhbmdlKT1cIm9uQ2hhbmdlRGFzaGJvYXJkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAjZGFzaGJvYXJkXG4gICAgPlxuICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGRcbiAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB3aWRnZXRzVG9EaXNwbGF5XCJcbiAgICAgICAgW3hdPVwid2lkZ2V0Ll94XCJcbiAgICAgICAgW3ldPVwid2lkZ2V0Ll95XCJcbiAgICAgICAgW3dpZHRoXT1cIndpZGdldC5fd2lkdGggfHwgc2V0dGluZ3MuZGVmYXVsdFdpZHRoXCJcbiAgICAgICAgW2hlaWdodF09XCJ3aWRnZXQuX2hlaWdodCB8fCBzZXR0aW5ncy5kZWZhdWx0SGVpZ2h0XCJcbiAgICAgICAgW21hcmdpbl09XCJzZXR0aW5ncy53aWRnZXRNYXJnaW5cIlxuICAgICAgICBbaXNGcm96ZW5dPVwic2V0dGluZ3MuaXNGcm96ZW4gfHwgc2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzc109XCJ3aWRnZXQuY2xhc3Nlc1wiXG4gICAgICAgIFtkYXRhXT1cIndpZGdldFwiXG4gICAgICAgIFt1c2VJbnRlcnNlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgIChjaGFuZ2VTdGFydCk9XCJvbkNoYW5nZVN0YXJ0LmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAoY2hhbmdlRW5kKT1cIm9uQ2hhbmdlRW5kLmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAjY2hpbGRcbiAgICAgID5cbiAgICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGU+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZXR0aW5ncy50cmFuc2xhdGVXaWRnZXRUaXRsZVwiPlxuICAgICAgICAgICAge3sgd2lkZ2V0LnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNldHRpbmdzLnRyYW5zbGF0ZVdpZGdldFRpdGxlXCI+XG4gICAgICAgICAgICB7eyB3aWRnZXQudGl0bGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAgICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uICpuZ0lmPVwib25FZGl0V2lkZ2V0Lm9ic2VydmVycy5sZW5ndGhcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdFZGl0IHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0V2lkZ2V0LmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwZW5jaWxcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCIgdHJhbnNsYXRlPkVkaXQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbiAqbmdJZj1cIm9uRGVsZXRlV2lkZ2V0Lm9ic2VydmVycy5sZW5ndGhcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVdpZGdldC5lbWl0KHsgd2lkZ2V0OiB3aWRnZXQsIHNvdXJjZTogY2hpbGQsIGRhc2hib2FyZDogZGFzaGJvYXJkIH0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwiZGVsZXRlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtNFwiIHRyYW5zbGF0ZT5SZW1vdmU8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG5cbiAgICAgICAgPGM4eS13aWRnZXQtdGltZS1jb250ZXh0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHdpZGdldC5jb25maWc/LmRpc3BsYXlTZXR0aW5ncz8uZ2xvYmFsVGltZUNvbnRleHQgJiZcbiAgICAgICAgICAgIHdpZGdldC5jb25maWc/LndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIChkYXRlQ29udGV4dENoYW5nZSk9XCJ1cGRhdGVXaWRnZXRDb25maWcoeyBkYXRlOiAkZXZlbnQgfSwgd2lkZ2V0KVwiXG4gICAgICAgICAgW2NhbkRlY291cGxlXT1cIndpZGdldC5jb25maWcuY2FuRGVjb3VwbGVHbG9iYWxUaW1lQ29udGV4dFwiXG4gICAgICAgID48L2M4eS13aWRnZXQtdGltZS1jb250ZXh0PlxuXG4gICAgICAgIDxjOHktZHluYW1pYy1jb21wb25lbnRcbiAgICAgICAgICBbY29tcG9uZW50SWRdPVwid2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lXCJcbiAgICAgICAgICBbY29uZmlnXT1cIlxuICAgICAgICAgICAgd2lkZ2V0LnRlbXBsYXRlVXJsIHx8IHdpZGdldC53aWRnZXRDb21wb25lbnRcbiAgICAgICAgICAgICAgPyB7IGNoaWxkOiB3aWRnZXQsIGRhc2hib2FyZDogY29udGV4dERhc2hib2FyZCwgY29udGV4dDogY29udGV4dCB9XG4gICAgICAgICAgICAgIDogd2lkZ2V0LmNvbmZpZ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKm5nSWY9XCJjaGlsZC5pbnRlcnNlY3RlZFwiXG4gICAgICAgICAgKHVwZGF0ZVdpZGdldENsYXNzZXMpPVwidXBkYXRlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQsICRldmVudClcIlxuICAgICAgICA+PC9jOHktZHluYW1pYy1jb21wb25lbnQ+XG4gICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQ+XG4gICAgPC9jOHktZGFzaGJvYXJkPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG4iXX0=
|