@tiba-spark/client-shared-lib 25.3.0-905 → 25.3.0-910
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/esm2022/libraries/modules/facility/facility.state.mjs +25 -24
- package/esm2022/libraries/utils/text.util.mjs +14 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +711 -698
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/facility/facility.state.d.ts.map +1 -1
- package/libraries/utils/text.util.d.ts +1 -0
- package/libraries/utils/text.util.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -25,6 +25,7 @@ import { SidenavState } from '../sidenav/sidenav.state';
|
|
|
25
25
|
import { SetSmartParkAction } from '../smartparks/smartpark.actions';
|
|
26
26
|
import { ClearCategoriesAction, ClearFacilityDictionaryAction, ClearGroupsAction, ClearInactiveSelectedParkAction, ClearJobTitlesAction, ClearMacroCommandsAction, ClearSelectedFacilityAction, ClearZonesAction, ClearZsAction, FacilityChangedAction, FacilityRemoteCommandExecutedAction, LoadCategoriesAction, LoadFacilityAction, LoadFacilityRemoteCommandsRefAction, LoadGroupsAction, LoadJobTitlesAction, LoadMacroCommandsAction, LoadParkingLotAction, LoadRemoteCommandsRefAction, LoadZonesAction, LoadZsAction, ServicesRunningStatusChangedAction, SetBasicMenuAction, SetDeviceRemoteCommandsMapAction, SetFacilityRemoteCommandsMapAction, SetSelectedParkAction, SetSmartparkBasicAction, SetSmartparkBasicAllAction, UnloadParkingLotAction, ZoneChangedAction } from './facility.actions';
|
|
27
27
|
var SmartZoneCounterVehicleTypeDto = Edge.SmartZoneCounterVehicleTypeDto;
|
|
28
|
+
import { objectKeystoLowerCase } from '../../utils';
|
|
28
29
|
import * as i0 from "@angular/core";
|
|
29
30
|
import * as i1 from "@ngxs/store";
|
|
30
31
|
import * as i2 from "../../services/facility-commands.service";
|
|
@@ -298,38 +299,38 @@ let FacilityState = class FacilityState {
|
|
|
298
299
|
});
|
|
299
300
|
}
|
|
300
301
|
handleSmartCounter(zone) {
|
|
301
|
-
//"[{"VehicleClassId":1,"Counter":31,"ZoneId":10},{"VehicleClassId":2,"Counter":25,"ZoneId":10}]"
|
|
302
|
-
//"[{\"VehicleTypeId\":1,\"Counter\":10,\"ZoneId\":10},{\"VehicleTypeId\":2,\"Counter\":10,\"ZoneId\":10}]"
|
|
303
302
|
try {
|
|
304
|
-
if (zone?.
|
|
305
|
-
const
|
|
306
|
-
|
|
307
|
-
|
|
303
|
+
if (zone?.smartCounterVehicleTypeJson) {
|
|
304
|
+
const parsedJson = JSON.parse(zone.smartCounterVehicleTypeJson);
|
|
305
|
+
const smartCounterVehicleType = objectKeystoLowerCase(parsedJson);
|
|
306
|
+
if (!Array.isArray(smartCounterVehicleType)) {
|
|
307
|
+
throw new Error('Parsed JSON smartCounterVehicleType is not an array');
|
|
308
308
|
}
|
|
309
|
-
zone.
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
309
|
+
zone.smartZoneCounterVehicleType = smartCounterVehicleType.map((sc) => {
|
|
310
|
+
const smartZoneCounterVehicleTypeDto = new SmartZoneCounterVehicleTypeDto();
|
|
311
|
+
smartZoneCounterVehicleTypeDto.counter = sc.counter;
|
|
312
|
+
smartZoneCounterVehicleTypeDto.zoneId = zone.id;
|
|
313
|
+
smartZoneCounterVehicleTypeDto.vehicleTypeId = sc.vehicletypeid;
|
|
314
|
+
return smartZoneCounterVehicleTypeDto;
|
|
315
315
|
});
|
|
316
316
|
}
|
|
317
|
-
if (zone?.
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
|
|
317
|
+
if (zone?.smartCounterVehicleClassJson) {
|
|
318
|
+
const parsedJson = JSON.parse(zone.smartCounterVehicleClassJson);
|
|
319
|
+
const smartCounterVehicleClass = objectKeystoLowerCase(parsedJson);
|
|
320
|
+
if (!Array.isArray(smartCounterVehicleClass)) {
|
|
321
|
+
throw new Error('Parsed JSON smartCounterVehicleClass is not an array');
|
|
321
322
|
}
|
|
322
|
-
zone.
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
323
|
+
zone.smartZoneCounterVehicleClass = smartCounterVehicleClass.map((sc) => {
|
|
324
|
+
const smartZoneCounterVehicleClassDto = new SmartZoneCounterVehicleClassDto();
|
|
325
|
+
smartZoneCounterVehicleClassDto.counter = sc.counter;
|
|
326
|
+
smartZoneCounterVehicleClassDto.zoneId = zone.id;
|
|
327
|
+
smartZoneCounterVehicleClassDto.vehicleClassId = sc.vehicleclassid;
|
|
328
|
+
return smartZoneCounterVehicleClassDto;
|
|
328
329
|
});
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
332
|
catch (error) {
|
|
332
|
-
console.error(
|
|
333
|
+
console.error('Failed to parse smartCounterJson:', error);
|
|
333
334
|
zone.smartZoneCounterVehicleClass = [];
|
|
334
335
|
zone.smartZoneCounterVehicleType = [];
|
|
335
336
|
}
|
|
@@ -931,4 +932,4 @@ export { FacilityState };
|
|
|
931
932
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FacilityState, decorators: [{
|
|
932
933
|
type: Injectable
|
|
933
934
|
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.BaseFacilityCommandsService }, { type: i3.LocalStorageService }, { type: i4.FacilityMenuService }, { type: i5.FacilityServiceProxy }, { type: i5.RemoteCommandServiceProxy }, { type: i5.GroupServiceProxy }, { type: i5.CategoryServiceProxy }, { type: i5.JobTitleServiceProxy }, { type: i5.ZoneServiceProxy }, { type: i5.ZServiceProxy }, { type: i6.GlobalErrorService }, { type: i7.CommandNotificationService }, { type: i8.TranslateService }, { type: i9.AppConfigService }], propDecorators: { onClearFacilityDictionary: [], onSetSmartparkBasicAllAction: [], onSetSmartparkBasicAction: [], onLoadParkingLotAction: [], onLoadRemoteCommandsRefAction: [], onLoadFacilityRemoteCommandsRefAction: [], onLoadFacilityAction: [], onUnloadParkingLotAction: [], onSetDeviceRemoteCommandsMapAction: [], onSetFacilityRemoteCommandsMapAction: [], onZoneChangedAction: [], onServicesRunningStatusChangedAction: [], onFacilityChangedAction: [], onSetBasicMenuAction: [], onLoadGroupsAction: [], onLoadCategoriesAction: [], onLoadJobTitlesAction: [], onLoadZonesAction: [], onLoadZsAction: [], onClearGroupsAction: [], onClearCategoriesAction: [], onClearJobTitlesAction: [], onClearZonesAction: [], onClearZsAction: [], onSetSelectedParkAction: [], onClearSelectedFacilityAction: [], onClearInactiveSelectedParkAction: [], onFacilityRemoteCommandExecutedAction: [], onLoadMacroCommandsAction: [], onClearMacroCommandsAction: [] } });
|
|
934
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHbEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBOEIsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFB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SyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO0tBQ1QsQ0FBQztHQUNXLGFBQWEsQ0EwNEJ6Qjs7NEZBMTRCWSxhQUFhO2tCQUx6QixVQUFVOzRpQkFtSlQseUJBQXlCLE1BT3pCLDRCQUE0QixNQU81Qix5QkFBeUIsTUFLekIsc0JBQXNCLE1BMEJ0Qiw2QkFBNkIsTUFzQjdCLHFDQUFxQyxNQTJCckMsb0JBQW9CLE1BZ0JwQix3QkFBd0IsTUFXeEIsa0NBQWtDLE1BWWxDLG9DQUFvQyxNQVlwQyxtQkFBbUIsTUFtRm5CLG9DQUFvQyxNQXNCcEMsdUJBQXVCLE1BK0J2QixvQkFBb0IsTUFLcEIsa0JBQWtCLE1BYWxCLHNCQUFzQixNQVl0QixxQkFBcUIsTUFhckIsaUJBQWlCLE1BYWpCLGNBQWMsTUFhZCxtQkFBbUIsTUFPbkIsdUJBQXVCLE1BT3ZCLHNCQUFzQixNQU90QixrQkFBa0IsTUFPbEIsZUFBZSxNQU9mLHVCQUF1QixNQWF2Qiw2QkFBNkIsTUFZN0IsaUNBQWlDLE1Ba0JqQyxxQ0FBcUMsTUFtQnJDLHlCQUF5QixNQVd6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl84XzRfMCwgVkVSU0lPTl85XzFfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWVudUl0ZW1zIH0gZnJvbSAnLi4vLi4vZW51bXMvZmFjaWxpdHktY29tbWFuZC5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MsIFNtYXJ0Q291bnRlclZlaGljbGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBBcHBNb2R1bGUsIENhdGVnb3J5RHRvLCBDYXRlZ29yeVNlcnZpY2VQcm94eSwgRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LFxuICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLCBGYWNpbGl0eVNlcnZpY2VQcm94eSwgR3JvdXBEdG8sIEdyb3VwU2VydmljZVByb3h5LCBKb2JUaXRsZUR0byxcbiAgSm9iVGl0bGVTZXJ2aWNlUHJveHksIE1hY3JvQ29tbWFuZER0bywgUGVybWlzc2lvblR5cGUsIFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byxcbiAgU21hcnRwYXJrQmFzaWNEdG8sIFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLFxuICBTdHJpbmdGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLCBaRHRvLCBab25lRHRvLFxuICBab25lU2VydmljZVByb3h5LCBaU2VydmljZVByb3h5XG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWNpbGl0eS1jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUcnV0aHksIE51bWJlck1hcCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgTWVudUxvYWRBY3Rpb24gfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgU2V0U21hcnRQYXJrQWN0aW9uIH0gZnJvbSAnLi4vc21hcnRwYXJrcy9zbWFydHBhcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9mYWNpbGl0eS1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksIENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5LCBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gIEZhY2lsaXR5RGljdGlvbmFyeSwgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlcbn0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQge1xuICBDbGVhckNhdGVnb3JpZXNBY3Rpb24sIENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uLCBDbGVhckdyb3Vwc0FjdGlvbiwgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbixcbiAgQ2xlYXJKb2JUaXRsZXNBY3Rpb24sIENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbiwgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uLCBDbGVhclpvbmVzQWN0aW9uLCBDbGVhclpzQWN0aW9uLFxuICBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLCBMb2FkQ2F0ZWdvcmllc0FjdGlvbiwgTG9hZEZhY2lsaXR5QWN0aW9uLCBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbixcbiAgTG9hZEdyb3Vwc0FjdGlvbiwgTG9hZEpvYlRpdGxlc0FjdGlvbiwgTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sIExvYWRQYXJraW5nTG90QWN0aW9uLCBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRab25lc0FjdGlvbixcbiAgTG9hZFpzQWN0aW9uLCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uLCBTZXRCYXNpY01lbnVBY3Rpb24sIFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLCBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLFxuICBTZXRTZWxlY3RlZFBhcmtBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbiwgVW5sb2FkUGFya2luZ0xvdEFjdGlvbiwgWm9uZUNoYW5nZWRBY3Rpb25cbn0gZnJvbSAnLi9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBFZGdlLlNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFNlcnZpY2U6IFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2VQcm94eTogR3JvdXBTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVNlcnZpY2VQcm94eTogSm9iVGl0bGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZVByb3h5OiBab25lU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelNlcnZpY2VQcm94eTogWlNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgaWYgKGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMV8wKSkge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldERldmljZVJlbW90ZUNvbW1hbmRzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldERldmljZVJlbW90ZUNvbW1hbmRzQnlQYXJrSWQocGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgICBpZiAoaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8xXzApKSB7XG4gICAgICAgIHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFNlcnZpY2UuZ2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kcyhwYXJrSWQsIGd1aWQpO1xuICAgICAgfSBlbHNlIGlmIChpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl84XzRfMCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gbmV3IFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgY29tbWFuZFJlc3BvbnNlLmRhdGEgPSB7IFtndWlkXTogRmFjaWxpdHlSZW1vdGVDb21tYW5kc01lbnVJdGVtcyB9O1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSBvZihjb21tYW5kUmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3RlQ29tbWFuZHNSZWYkKSB7XG4gICAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkLCBpc1N1cGVyUGFyaywgYXBwTW9kdWxlIH06IExvYWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGlmIChpc1N1cGVyUGFyaykge1xuICAgICAgY29uc3QgYWxsR3VpZEZhY2lsaXRpZXMkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0aWVzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICByZXR1cm4gYWxsR3VpZEZhY2lsaXRpZXMkLnBpcGUodGFwKGZhY2lsaXRpZXNNYXAgPT4ge1xuICAgICAgICBjb25zdCBmYWNpbGl0eSA9IGZhY2lsaXRpZXNNYXAuZGF0YVtndWlkXS5maW5kKGYgPT4gZi5pZCA9IHBhcmtJZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eSwgZmFjaWxpdGllc01hcC5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEZhY2lsaXR5JCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0lkLCBndWlkKTtcbiAgICAgIHJldHVybiBmdWxsRmFjaWxpdHkkLnBpcGUodGFwKGZhY2lsaXR5ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oVW5sb2FkUGFya2luZ0xvdEFjdGlvbilcbiAgb25VbmxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogVW5sb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFpvbmVDaGFuZ2VkQWN0aW9uKVxuICBvblpvbmVDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgem9uZSwgcGFya0lkIH06IFpvbmVDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcbiAgICBjb25zdCB6b25lSW5kZXggPSBzZWxlY3RlZC56b25lcz8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gem9uZS5pZCAmJiBpdGVtLnBhcmtJRCA9PT0gcGFya0lkKTtcbiAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcblxuICAgIHN3aXRjaCAoem9uZS5ydWxlc01vZGUpIHtcbiAgICAgIGNhc2UgUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSOlxuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubG9vcENvdW50O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIHRoaXMuaGFuZGxlU21hcnRDb3VudGVyKHpvbmUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX0xPT1BfREVURUNUT1I6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWQuem9uZXNbem9uZUluZGV4XSA9IHpvbmU7XG4gICAgc2VsZWN0ZWQuem9uZXMgPSBjbG9uZShzZWxlY3RlZC56b25lcyk7XG5cbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGd1aWQgPSBjdHguZ2V0U3RhdGUoKS5ndWlkO1xuICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtzZWxlY3RlZC5pZF0uem9uZXMgPSBzZWxlY3RlZC56b25lcztcblxuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU21hcnRDb3VudGVyKHpvbmU6IFpvbmVEdG8pIHtcblxuXG4gICAgLy9cIlt7XCJWZWhpY2xlQ2xhc3NJZFwiOjEsXCJDb3VudGVyXCI6MzEsXCJab25lSWRcIjoxMH0se1wiVmVoaWNsZUNsYXNzSWRcIjoyLFwiQ291bnRlclwiOjI1LFwiWm9uZUlkXCI6MTB9XVwiXG4gICAgLy9cIlt7XFxcIlZlaGljbGVUeXBlSWRcXFwiOjEsXFxcIkNvdW50ZXJcXFwiOjEwLFxcXCJab25lSWRcXFwiOjEwfSx7XFxcIlZlaGljbGVUeXBlSWRcXFwiOjIsXFxcIkNvdW50ZXJcXFwiOjEwLFxcXCJab25lSWRcXFwiOjEwfV1cIlxuXG4gICAgdHJ5IHtcblxuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pIHtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzOiBTbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NbXSA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NKc29uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgaXMgbm90IGFuIGFycmF5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzID0gc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzLm1hcChzYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uZnJvbUpTKHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHNjLkNvdW50ZXIsXG4gICAgICAgICAgICB6b25lSWQ6IHpvbmUuaWQsXG4gICAgICAgICAgICB2ZWhpY2xlQ2xhc3NJZDogc2MuVmVoaWNsZUNsYXNzSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbikge1xuICAgICAgICBjb25zdCBzbWFydENvdW50ZXJWZWhpY2xlVHlwZTogU21hcnRDb3VudGVyVmVoaWNsZVR5cGVbXSA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlVHlwZUpzb24pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc21hcnRDb3VudGVyVmVoaWNsZVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2VkIEpTT04gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgIGlzIG5vdCBhbiBhcnJheVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUubWFwKHNjID0+IHtcbiAgICAgICAgICByZXR1cm4gU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLmZyb21KUyh7XG4gICAgICAgICAgICBjb3VudGVyOiBzYy5Db3VudGVyLFxuICAgICAgICAgICAgem9uZUlkOiB6b25lLmlkLFxuICAgICAgICAgICAgdmVoaWNsZVR5cGVJZDogc2MuVmVoaWNsZVR5cGVJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwYXJzZSBzbWFydENvdW50ZXJKc29uOlwiLCBlcnJvcik7XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBbXTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gW107XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKVxuICBvblNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPixcbiAgICB7IHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCB9OiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3Moc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzKTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGlmIChmYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHksIHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eUNoYW5nZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHksIGd1aWQgfTogRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZEZhY2lsaXR5ID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA6IG51bGw7XG4gICAgaWYgKCFzZWxlY3RlZEZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkRmFjaWxpdHkgPSB0aGlzLmFzc2lnbkZhY2lsaXR5KHNlbGVjdGVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gY29tcGxldGVkRmFjaWxpdHk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGRpY3Rpb25hcnk6IGNsb25lRGVlcChmYWNpbGl0eURpY3Rpb25hcnkpIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNQYXJrQWN0aXZlKGN0eCwgZ3VpZCwgZmFjaWxpdHkuaWQpKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBjb21wbGV0ZWRGYWNpbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0QmFzaWNNZW51QWN0aW9uKVxuICBvblNldEJhc2ljTWVudUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0cGFya01hcCwgYXBwTW9kdWxlIH06IFNldEJhc2ljTWVudUFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24odGhpcy50b0Jhc2ljTWVudUl0ZW1zKGN0eCwgc21hcnRwYXJrTWFwLCBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5LCBhcHBNb2R1bGUpLCBhcHBNb2R1bGUpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEdyb3Vwc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRHcm91cHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkR3JvdXBzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0R3JvdXBzJCA9IHRoaXMuZ3JvdXBTZXJ2aWNlUHJveHkuZ2V0R3Vlc3RHcm91cChhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uLCBhY3Rpb24uZ3VpZCk7XG5cbiAgICByZXR1cm4gZ2V0R3JvdXBzJC5waXBlKHRhcChncm91cHMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBncm91cHM6IGdyb3Vwcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQ2F0ZWdvcmllc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZENhdGVnb3JpZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRDYXRlZ29yaWVzJCA9IHRoaXMuY2F0ZWdvcnlTZXJ2aWNlUHJveHkuZ2V0Q2F0ZWdvcmllcyhhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uLCBhY3Rpb24uZ3VpZCk7XG4gICAgcmV0dXJuIGdldENhdGVnb3JpZXMkLnBpcGUodGFwKGNhdGVnb3JpZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRKb2JUaXRsZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkSm9iVGl0bGVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZEpvYlRpdGxlc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEpvYlRpdGxlcyQgPSB0aGlzLmpvYlRpdGxlU2VydmljZVByb3h5LmdldEpvYlRpdGxlcyhhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uLCBhY3Rpb24uZ3VpZCk7XG5cbiAgICByZXR1cm4gZ2V0Sm9iVGl0bGVzJC5waXBlKHRhcChqb2JUaXRsZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBqb2JUaXRsZXM6IGpvYlRpdGxlcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkWm9uZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVTZXJ2aWNlUHJveHkuZ2V0QnlTZWFyY2hQYXJhbXMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkWnNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkWnNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRacyQgPSB0aGlzLnpTZXJ2aWNlUHJveHkuZ2V0WnMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldFpzJC5waXBlKHRhcCh6ID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgejogei5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckdyb3Vwc0FjdGlvbilcbiAgb25DbGVhckdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3JvdXBzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckNhdGVnb3JpZXNBY3Rpb24pXG4gIG9uQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjYXRlZ29yaWVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckpvYlRpdGxlc0FjdGlvbilcbiAgb25DbGVhckpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgam9iVGl0bGVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpvbmVzQWN0aW9uKVxuICBvbkNsZWFyWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpzQWN0aW9uKVxuICBvbkNsZWFyWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25TZXRTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkLCBmYWNpbGl0eSB9OiBTZXRTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHk/LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZCxcbiAgICAgIHBhcmtJZDogZmFjaWxpdHk/LmlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Py5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgIHpvbmVzOiBmYWNpbGl0eT8uem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgfTogQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25DbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG5cbiAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkgaXMgSW5hY3RpdmUgYW5kIG5vdCBhIFN1cGVycGFyaywgd2UgZGVzZWxlY3RcbiAgICAvLyBUaGlzIG1lYW4gd2Ugd29uJ3QgY2FycnkgYW4gSW5hY3RpdmUgcGFyayB0byB0aGUgbmV4dCBtb2R1bGUgYXMgc2VsZWN0ZWRcbiAgICBpZiAoIXNlbGVjdGVkPy5hY3RpdmUgJiYgIXNlbGVjdGVkPy5pc011bHRpUGFyaykge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKVxuICBvbkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgfTogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnlbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF1bZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQucGFya0lkXTtcblxuICAgIGNvbnN0IG9wZXJhdGlvblR5cGVLZXkgPSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTG9jYWxpemF0aW9uS2V5W0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGVdXTtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlczogW3sgdmFsdWU6IGZhY2lsaXR5Lm5hbWUsIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5ib2R5IH1dLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQob3BlcmF0aW9uVHlwZUtleSlcbiAgICB9O1xuXG4gICAgaWYgKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCkucGlwZShzd2l0Y2hNYXAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MgPyBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzKSA6IHRocm93RXJyb3IoJ0ZhaWxlZCBleGVjdXRpbmcgY29tbWFuZCcpO1xuICAgIH0pLCB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXkoY29uZmlnKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQgfTogTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24pIHtcbiAgICBjb25zdCBtYWNyb0NvbW1hbmRzJCA9IHRoaXMucmVtb3RlQ29tbWFuZFNlcnZpY2UuZ2V0TWFjcm9Db21tYW5kcyhwYXJrSWQsIGd1aWQpO1xuXG4gICAgcmV0dXJuIG1hY3JvQ29tbWFuZHMkLnBpcGUodGFwKG1hY3JvQ29tbWFuZHMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBtYWNyb0NvbW1hbmRzOiBtYWNyb0NvbW1hbmRzLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKVxuICBvbkNsZWFyTWFjcm9Db21tYW5kc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgbWFjcm9Db21tYW5kczogW10sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZhY2lsaXRpZXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlciwgYXBwTW9kdWxlOiBBcHBNb2R1bGUsXG4gICAgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBmYWNpbGl0aWVzTWFwPzogU3RyaW5nTWFwPEZhY2lsaXR5RHRvW10+KSB7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IG5vd01vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGZhY2lsaXRpZXNNYXApIHtcbiAgICAgIGZhY2lsaXRpZXNNYXBbZ3VpZF0uZm9yRWFjaChmID0+IHtcbiAgICAgICAgZi5jbG91ZElkID0gZi5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLmNsb3VkSWQ7XG4gICAgICAgIGYuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgZi5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5wZXJtaXNzaW9ucztcbiAgICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdID0gdGhpcy51cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXSwgZik7XG4gICAgICAgIHJldHVybiBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdHkuY2xvdWRJZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0uY2xvdWRJZDtcbiAgICAgIGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgZmFjaWxpdHkucGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0sIGZhY2lsaXR5KTtcbiAgICB9XG5cbiAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSA9IHRoaXMuZ2V0Q2xpZW50U2VydmVyVGltZURpZmYoZmFjaWxpdHksIG5vd01vbWVudCk7XG4gICAgdGhpcy5wYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eCwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIHRoaXMucGF0Y2hGYWNpbGl0aWVzVG9TdG9yZShjdHgsIGZhY2lsaXR5RGljdGlvbmFyeSwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0sIGFwcE1vZHVsZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3Moc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gaW5jb21pbmdGYWNpbGl0eTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGYWNpbGl0aWVzVG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgYXBwTW9kdWxlOiBBcHBNb2R1bGUpIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5LFxuICAgIH0pO1xuXG4gICAgaWYgKGFwcE1vZHVsZSA9PT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhY2lsaXR5LFxuICAgICAgICB6b25lczogZmFjaWxpdHkuem9uZXMsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hEaWZmRGljdGluYXJ5VG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50U2VydmVyVGltZURpZmYoZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBub3dNb21lbnQ6IG1vbWVudC5Nb21lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBub3dNb21lbnQudHooZmFjaWxpdHkuc3BUaW1lWm9uZSkuZGlmZih0aGlzLnN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgLy8gZml4IGZvciBzZXJ2ZXJzIHRoYXQgbm90IHN5bmMgdG8gZ2xvYmFsIHdvcmxkIGNsb2NrXG4gICAgbGV0IHNlcnZlckRhdGVUaW1lOiBzdHJpbmcgPSBmYWNpbGl0eS5zZXJ2ZXJEYXRlVGltZVsnX2knXTtcbiAgICBpZiAoIXNlcnZlckRhdGVUaW1lLmVuZHNXaXRoKCcrMDA6MDAnKSkge1xuICAgICAgc2VydmVyRGF0ZVRpbWUgPSBzZXJ2ZXJEYXRlVGltZS5zbGljZSgwLCBzZXJ2ZXJEYXRlVGltZS5pbmRleE9mKCcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50LnR6KHNlcnZlckRhdGVUaW1lLCBmYWNpbGl0eS5zcFRpbWVab25lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VydmljZVJ1bm5pbmdTdGF0dXNGbGFncyhjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0Nvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ29yZUNvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIHJldHVybiBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbkZhY2lsaXR5KHN0b3JlZEZhY2lsaXR5OiBGYWNpbGl0eUR0bywgaW5jb21pbmdGYWNpbGl0eTogRmFjaWxpdHlEdG8pOiBGYWNpbGl0eUR0byB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIGxldCBjdXJyZW50RmFjaWxpdHkgPSBuZXcgRmFjaWxpdHlEdG8oc3RvcmVkRmFjaWxpdHkpO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5uYW1lID0gaW5jb21pbmdGYWNpbGl0eS5uYW1lO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0xQUkVuYWJsZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc011bHRpUGFyayA9IGluY29taW5nRmFjaWxpdHkuaXNNdWx0aVBhcms7XG4gICAgY3VycmVudEZhY2lsaXR5LnRpbWVEcmlmdCA9IGluY29taW5nRmFjaWxpdHkudGltZURyaWZ0O1xuICAgIGN1cnJlbnRGYWNpbGl0eS5zbWFydFBhcmtQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5zbWFydFBhcmtQb2ludGVyO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXIgPSBpbmNvbWluZ0ZhY2lsaXR5Lm1haW5Db250cm9sbGVyUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkuYWN0aXZlID0gaW5jb21pbmdGYWNpbGl0eS5hY3RpdmU7XG4gICAgY3VycmVudEZhY2lsaXR5LnRvdGFsU3BhY2UgPSBpbmNvbWluZ0ZhY2lsaXR5LnRvdGFsU3BhY2U7XG4gICAgY3VycmVudEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSAhaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgcmV0dXJuIGN1cnJlbnRGYWNpbGl0eTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvdWREYXRlVGltZVV0YygpIHtcbiAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KTtcbiAgICByZXR1cm4gbW9tZW50LnV0YygpLnN1YnRyYWN0KGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdLCAnbWlsbGlzZWNvbmRzJyk7XG4gIH1cblxuICBwcml2YXRlIHRvQmFzaWNNZW51SXRlbXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+LCBmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlOiBBcHBNb2R1bGUpOiBNZW51SXRlbVtdIHtcbiAgICBjb25zdCB0aWJhS2V5cyA9IGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzO1xuICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBjb25zdCB0aWJhS2V5ID0gdGliYUtleXNbZ3VpZF07XG4gICAgICBtZW51SXRlbXMucHVzaCguLi50aGlzLmNyZWF0ZU1lbnVJdGVtcyhzbWFydHBhcmtNYXBbZ3VpZF0sIGd1aWQsIHRpYmFLZXksIGZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgaXNQYXJrQWN0aXZlID0gKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIpID0+XG4gICAgY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ/LmlkID09PSBwYXJrSWQgJiYgY3R4LmdldFN0YXRlKCkuZ3VpZCA9PT0gZ3VpZDtcblxuICBwcml2YXRlIGNyZWF0ZU1lbnVJdGVtcyhzbWFydHBhcmtCYXNpYzogU21hcnRwYXJrQmFzaWNEdG8sIGd1aWQ6IHN0cmluZywgdGliYUtleTogbnVtYmVyLCBmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlOiBBcHBNb2R1bGUpOiBNZW51SXRlbVtdIHtcbiAgICBjb25zdCBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBzbWFydHBhcmtCYXNpYy5mYWNpbGl0aWVzLmZvckVhY2gobG90ID0+IHtcbiAgICAgIGlmIChsb3QubXVsdGlQYXJrUGFyZW50SUQgPiAwKSB7XG4gICAgICAgIC8vIGRvIG5vdCBwdXNoIGNoaWxkcmVucyB0byBtZW51IGl0ZW1zIGFycmF5XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLmZhY2lsaXR5TWVudVNlcnZpY2UuY3JlYXRlTWVudShndWlkLCB0aWJhS2V5LCBzbWFydHBhcmtCYXNpYywgbG90LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSk7XG4gICAgICBtZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KTogdm9pZCB7XG4gICAgLy8gV2UgZG9udCBydW4gbWVudSB1cGRhdGUgaWYgd2UgYXJlIG5vdCBpbiBDQ1xuICAgIGNvbnN0IGN1cnJlbnRNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpO1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGlmIChjdXJyZW50TW9kdWxlICE9PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnVJdGVtcyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLm1lbnVJdGVtcyk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcblxuICAgIGZvciAoY29uc3QgW2d1aWQsIGxvdHNNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGZhY2lsaXR5RGljdGlvbmFyeSkpIHtcbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGxvdHNNYXApO1xuICAgICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICAgIGxldCBtZW51SXRlbTogTWVudUl0ZW07XG5cbiAgICAgICAgaWYgKGZhY2lsaXR5Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAgIG1lbnVJdGVtID0gbWVudUl0ZW1zXG4gICAgICAgICAgICAuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCk/LmNoaWxkcmVuXG4gICAgICAgICAgICAuZmluZChzdWJJdGVtID0+IHN1Ykl0ZW0uaWQgPT09IGZhY2lsaXR5LmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkICYmIGl0ZW0uaWQgPT09IGZhY2lsaXR5LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZW51SXRlbSkge1xuICAgICAgICAgIGNvbnN0IGJhZGdlQ2xhc3MgPSB0aGlzLmZhY2lsaXR5TWVudVNlcnZpY2UuZ2V0QmFkZ2VQcmlvcml0eShndWlkLCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdLCBmYWNpbGl0eSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgICAgICBtZW51SXRlbS5oYXNCYWRnZSA9IGJhZGdlQ2xhc3MgIT09IFBhcmtDb25uZWN0aW9uU3RhdHVzQ2xhc3MuQ29ubmVjdGVkO1xuICAgICAgICAgIG1lbnVJdGVtLmJhZGdlQ2xhc3MgPSBiYWRnZUNsYXNzO1xuICAgICAgICAgIG1lbnVJdGVtLm5hbWUgPSBmYWNpbGl0eS5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc01vYmlsZUFwcE1vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE1lbnVMb2FkQWN0aW9uKFsuLi5tZW51SXRlbXNdLCBBcHBNb2R1bGUuQ2MpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNtYXJ0cGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+LCBmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSkge1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+ID0ge307XG4gICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXA6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0ge307XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0gPSBzbWFydHBhcmtNYXBbZ3VpZF0uc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgICAgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXBbZ3VpZF0gPSBzbWFydHBhcmtNYXBbZ3VpZF0uZmFjaWxpdGllcy5yZWR1Y2UoKGZhY2lsaXRpZXMsIGxvdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJrQ29ubmVjdGlvblN0YXR1cyA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGxvdCwgc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgICAgZmFjaWxpdGllc1tsb3QuaWRdID0ge1xuICAgICAgICAgIHN0YXR1czogcGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogcGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhcnREYXRlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0ZhY2lsaXR5RGljdGlvbmFyeShzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4pOiB7IGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OyB9IHtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSA9IHt9O1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBsb3Qgb2Ygc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29uc3QgY2xvdCA9IG5ldyBGYWNpbGl0eUR0bygpO1xuICAgICAgICBjbG90LmlkID0gbG90LmlkO1xuICAgICAgICBjbG90LmNsb3VkSWQgPSBsb3QuY2xvdWRJZDtcbiAgICAgICAgY2xvdC5hY3RpdmUgPSBsb3QuYWN0aXZlO1xuICAgICAgICBjbG90LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGxvdC5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QucGVybWlzc2lvbnMgPSBsb3QucGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QubmFtZSA9IGxvdC5uYW1lO1xuICAgICAgICBjbG90LnNpdGVDb2RlID0gbG90LnNpdGVDb2RlO1xuICAgICAgICBjbG90Lm11bHRpUGFya1BhcmVudElEID0gbG90Lm11bHRpUGFya1BhcmVudElEO1xuICAgICAgICBjbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNMUFJDb25uZWN0ZWQgPSBsb3QuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuaXNMUFJFbmFibGVkID0gbG90LmlzTFBSRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc1RpY2tldExlc3NFbmFibGVkID0gbG90LmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGNsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0Jhc2ljID0gbG90LmlzQmFzaWM7XG4gICAgICAgIGNsb3QuaXNNdWx0aVBhcmsgPSBsb3QuaXNNdWx0aVBhcms7XG4gICAgICAgIGNsb3QudGltZURyaWZ0ID0gbG90LnRpbWVEcmlmdDtcbiAgICAgICAgY2xvdC5zcFRpbWVab25lID0gbG90LnNwVGltZVpvbmU7XG4gICAgICAgIGNsb3Quc2VydmVyRGF0ZVRpbWUgPSBsb3Quc2VydmVyRGF0ZVRpbWU7XG4gICAgICAgIGNsb3QudG90YWxTcGFjZSA9IGxvdC50b3RhbFNwYWNlO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bbG90LmlkXSA9IGNsb3Q7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaWZmIG9mIDAgZm9yIGluaXRpYWwgc2V0dXBcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBkaWN0aW9uYXJ5OiBmYWNpbGl0eURpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH07XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgc21hcnRQYXJrczogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPikge1xuICAgIC8vIGtlZXAgZGVmYXVsdCB2YWx1ZXMgd2hlbiBuYXZpZ2F0ZSB0byBjb21tYW5kIGNlbnRlciBmb3J3YXJkIGFuZCBiYWNrLlxuICAgIGNvbnN0IHsgZ3VpZCwgcGFya0lkLCBtdWx0aVBhcmtQYXJlbnRJRCwgc2VsZWN0ZWQgfSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGRlZmF1bHRzLmd1aWQgPSBndWlkO1xuICAgIGRlZmF1bHRzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgZGVmYXVsdHMucGFya0lkID0gcGFya0lkO1xuICAgIGRlZmF1bHRzLm11bHRpUGFya1BhcmVudElEID0gbXVsdGlQYXJrUGFyZW50SUQ7XG5cbiAgICBjdHguc2V0U3RhdGUoZGVmYXVsdHMpO1xuXG4gICAgY29uc3QgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+ID0gT2JqZWN0LmtleXMoc21hcnRQYXJrcykucmVkdWNlKChrZXlzLCBndWlkLCBpbmRleCkgPT4ge1xuICAgICAga2V5c1tndWlkXSA9IGluZGV4O1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgeyBkaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9ID0gdGhpcy5jb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRQYXJrcyk7XG5cbiAgICBjb25zdCBzdGF0ZVVwZGF0ZXM6IFBhcnRpYWw8RmFjaWxpdHlTdGF0ZU1vZGVsPiA9IHtcbiAgICAgIHRpYmFLZXlzLFxuICAgICAgZGljdGlvbmFyeSxcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH07XG5cbiAgICBpZiAoIWRpY3Rpb25hcnlbZ3VpZF0gfHwgIWRpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVVwZGF0ZXMsIHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHN0YXRlVXBkYXRlcyk7XG5cbiAgICAvL3VzZXMgZmFjaWxpdHkgZGljdGlvbmFyeSBmcm9tIHN0b3JlLCB0aGVyZWZvcmUgcGxhY2VkIGFmdGVyXG4gICAgY29uc3QgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9ID0gdGhpcy5nZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0UGFya3MsIGRpY3Rpb25hcnkpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwOiBOdW1iZXJNYXA8RHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8+ID0gSlNPTi5wYXJzZShcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04pXG4gICAgKSA/PyB7fTtcblxuICAgIGNvbnN0IGRwYzogRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc291cmNlSWRlbnRpZmllcl07XG4gICAgaWYgKGRwYykge1xuICAgICAgY29uc3QgZmFjaWxpdHk6IEZhY2lsaXR5RHRvID0gbnVsbDtcbiAgICAgIGNvbmZpZy5kdXJhdGlvbiA9IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbiAgICAgIGNvbmZpZy5tZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKFxuICAgICAgICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLFxuICAgICAgICBmYWNpbGl0eSxcbiAgICAgICAgZHBjXG4gICAgICApO1xuXG4gICAgICAvLyBDbG9zZSBkeW5hbWljIHByaWNpbmcgbm90aWZpY2F0aW9uXG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0byA9IG5ldyBOb3RpZmljYXRpb25EdG8oKTtcbiAgICAgIG5vdGlmaWNhdGlvbi50eXBlID0gTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiA9IGRwYztcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24obm90aWZpY2F0aW9uLCBkcGMuZ3VpZCkpO1xuXG4gICAgICBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF0gPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXG4gICAgICAgIERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04sXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
935
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBOEIsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFB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USxFQUFFO3FEQUdWO0FBR007SUFETixRQUFRLEVBQUU7MERBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTttQ0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzJEQUdWO0FBR007SUFETixRQUFRLEVBQUU7NkRBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtpQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3FDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7b0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTs0QkFHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3dDQUdWO0FBM0lVLGFBQWE7SUFKekIsS0FBSyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO0tBQ1QsQ0FBQztHQUNXLGFBQWEsQ0F3NEJ6Qjs7NEZBeDRCWSxhQUFhO2tCQUx6QixVQUFVOzRpQkFtSlQseUJBQXlCLE1BT3pCLDRCQUE0QixNQU81Qix5QkFBeUIsTUFLekIsc0JBQXNCLE1BMEJ0Qiw2QkFBNkIsTUFzQjdCLHFDQUFxQyxNQTJCckMsb0JBQW9CLE1BZ0JwQix3QkFBd0IsTUFXeEIsa0NBQWtDLE1BWWxDLG9DQUFvQyxNQVlwQyxtQkFBbUIsTUFpRm5CLG9DQUFvQyxNQXNCcEMsdUJBQXVCLE1BK0J2QixvQkFBb0IsTUFLcEIsa0JBQWtCLE1BYWxCLHNCQUFzQixNQVl0QixxQkFBcUIsTUFhckIsaUJBQWlCLE1BYWpCLGNBQWMsTUFhZCxtQkFBbUIsTUFPbkIsdUJBQXVCLE1BT3ZCLHNCQUFzQixNQU90QixrQkFBa0IsTUFPbEIsZUFBZSxNQU9mLHVCQUF1QixNQWF2Qiw2QkFBNkIsTUFZN0IsaUNBQWlDLE1Ba0JqQyxxQ0FBcUMsTUFtQnJDLHlCQUF5QixNQVd6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl84XzRfMCwgVkVSU0lPTl85XzFfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWVudUl0ZW1zIH0gZnJvbSAnLi4vLi4vZW51bXMvZmFjaWxpdHktY29tbWFuZC5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBBcHBNb2R1bGUsIENhdGVnb3J5RHRvLCBDYXRlZ29yeVNlcnZpY2VQcm94eSwgRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LFxuICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLCBGYWNpbGl0eVNlcnZpY2VQcm94eSwgR3JvdXBEdG8sIEdyb3VwU2VydmljZVByb3h5LCBKb2JUaXRsZUR0byxcbiAgSm9iVGl0bGVTZXJ2aWNlUHJveHksIE1hY3JvQ29tbWFuZER0bywgUGVybWlzc2lvblR5cGUsIFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byxcbiAgU21hcnRwYXJrQmFzaWNEdG8sIFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLFxuICBTdHJpbmdGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLCBaRHRvLCBab25lRHRvLFxuICBab25lU2VydmljZVByb3h5LCBaU2VydmljZVByb3h5XG59IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWNpbGl0eS1jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUcnV0aHksIE51bWJlck1hcCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgTWVudUxvYWRBY3Rpb24gfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgU2V0U21hcnRQYXJrQWN0aW9uIH0gZnJvbSAnLi4vc21hcnRwYXJrcy9zbWFydHBhcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9mYWNpbGl0eS1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksIENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5LCBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gIEZhY2lsaXR5RGljdGlvbmFyeSwgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlcbn0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQge1xuICBDbGVhckNhdGVnb3JpZXNBY3Rpb24sIENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uLCBDbGVhckdyb3Vwc0FjdGlvbiwgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbixcbiAgQ2xlYXJKb2JUaXRsZXNBY3Rpb24sIENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbiwgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uLCBDbGVhclpvbmVzQWN0aW9uLCBDbGVhclpzQWN0aW9uLFxuICBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLCBMb2FkQ2F0ZWdvcmllc0FjdGlvbiwgTG9hZEZhY2lsaXR5QWN0aW9uLCBMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbixcbiAgTG9hZEdyb3Vwc0FjdGlvbiwgTG9hZEpvYlRpdGxlc0FjdGlvbiwgTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sIExvYWRQYXJraW5nTG90QWN0aW9uLCBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRab25lc0FjdGlvbixcbiAgTG9hZFpzQWN0aW9uLCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uLCBTZXRCYXNpY01lbnVBY3Rpb24sIFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLCBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uLFxuICBTZXRTZWxlY3RlZFBhcmtBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbiwgVW5sb2FkUGFya2luZ0xvdEFjdGlvbiwgWm9uZUNoYW5nZWRBY3Rpb25cbn0gZnJvbSAnLi9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBFZGdlLlNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcbmltcG9ydCB7IG9iamVjdEtleXN0b0xvd2VyQ2FzZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFNlcnZpY2U6IFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2VQcm94eTogR3JvdXBTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVNlcnZpY2VQcm94eTogSm9iVGl0bGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZVByb3h5OiBab25lU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelNlcnZpY2VQcm94eTogWlNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgaWYgKGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMV8wKSkge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldERldmljZVJlbW90ZUNvbW1hbmRzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldERldmljZVJlbW90ZUNvbW1hbmRzQnlQYXJrSWQocGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgICBpZiAoaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8xXzApKSB7XG4gICAgICAgIHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFNlcnZpY2UuZ2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kcyhwYXJrSWQsIGd1aWQpO1xuICAgICAgfSBlbHNlIGlmIChpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl84XzRfMCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gbmV3IFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgY29tbWFuZFJlc3BvbnNlLmRhdGEgPSB7IFtndWlkXTogRmFjaWxpdHlSZW1vdGVDb21tYW5kc01lbnVJdGVtcyB9O1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSBvZihjb21tYW5kUmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3RlQ29tbWFuZHNSZWYkKSB7XG4gICAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkLCBpc1N1cGVyUGFyaywgYXBwTW9kdWxlIH06IExvYWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGlmIChpc1N1cGVyUGFyaykge1xuICAgICAgY29uc3QgYWxsR3VpZEZhY2lsaXRpZXMkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0aWVzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICByZXR1cm4gYWxsR3VpZEZhY2lsaXRpZXMkLnBpcGUodGFwKGZhY2lsaXRpZXNNYXAgPT4ge1xuICAgICAgICBjb25zdCBmYWNpbGl0eSA9IGZhY2lsaXRpZXNNYXAuZGF0YVtndWlkXS5maW5kKGYgPT4gZi5pZCA9IHBhcmtJZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eSwgZmFjaWxpdGllc01hcC5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEZhY2lsaXR5JCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0lkLCBndWlkKTtcbiAgICAgIHJldHVybiBmdWxsRmFjaWxpdHkkLnBpcGUodGFwKGZhY2lsaXR5ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oVW5sb2FkUGFya2luZ0xvdEFjdGlvbilcbiAgb25VbmxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogVW5sb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFpvbmVDaGFuZ2VkQWN0aW9uKVxuICBvblpvbmVDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgem9uZSwgcGFya0lkIH06IFpvbmVDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcbiAgICBjb25zdCB6b25lSW5kZXggPSBzZWxlY3RlZC56b25lcz8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gem9uZS5pZCAmJiBpdGVtLnBhcmtJRCA9PT0gcGFya0lkKTtcbiAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcblxuICAgIHN3aXRjaCAoem9uZS5ydWxlc01vZGUpIHtcbiAgICAgIGNhc2UgUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSOlxuICAgICAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubG9vcENvdW50O1xuICAgICAgICB6b25lLnZhY2FuY3kgPSB6b25lLmNhcGFjaXR5IC0gem9uZS5vY2N1cGFuY3k7XG4gICAgICAgIHRoaXMuaGFuZGxlU21hcnRDb3VudGVyKHpvbmUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX0xPT1BfREVURUNUT1I6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWQuem9uZXNbem9uZUluZGV4XSA9IHpvbmU7XG4gICAgc2VsZWN0ZWQuem9uZXMgPSBjbG9uZShzZWxlY3RlZC56b25lcyk7XG5cbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGd1aWQgPSBjdHguZ2V0U3RhdGUoKS5ndWlkO1xuICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtzZWxlY3RlZC5pZF0uem9uZXMgPSBzZWxlY3RlZC56b25lcztcblxuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU21hcnRDb3VudGVyKHpvbmU6IFpvbmVEdG8pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbikge1xuICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbik7XG4gICAgICAgIGNvbnN0IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlID0gb2JqZWN0S2V5c3RvTG93ZXJDYXNlKHBhcnNlZEpzb24pO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbWFydENvdW50ZXJWZWhpY2xlVHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlZCBKU09OIHNtYXJ0Q291bnRlclZlaGljbGVUeXBlIGlzIG5vdCBhbiBhcnJheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGUgPSBzbWFydENvdW50ZXJWZWhpY2xlVHlwZS5tYXAoKHNjOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8gPSBuZXcgU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvKCk7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLmNvdW50ZXIgPSBzYy5jb3VudGVyO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0by56b25lSWQgPSB6b25lLmlkO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0by52ZWhpY2xlVHlwZUlkID0gc2MudmVoaWNsZXR5cGVpZDtcbiAgICAgICAgICByZXR1cm4gc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NKc29uKTtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzID0gb2JqZWN0S2V5c3RvTG93ZXJDYXNlKHBhcnNlZEpzb24pO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MubWFwKChzYzogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0byA9IG5ldyBTbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvKCk7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0by5jb3VudGVyID0gc2MuY291bnRlcjtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLnpvbmVJZCA9IHpvbmUuaWQ7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzc0R0by52ZWhpY2xlQ2xhc3NJZCA9IHNjLnZlaGljbGVjbGFzc2lkO1xuICAgICAgICAgIHJldHVybiBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHNtYXJ0Q291bnRlckpzb246JywgZXJyb3IpO1xuICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzID0gW107XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbilcbiAgb25TZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sXG4gICAgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQgfTogU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzID0gdGhpcy51cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1cyk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBpZiAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5LCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICB9XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKVxuICBvbkZhY2lsaXR5Q2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5LCBndWlkIH06IEZhY2lsaXR5Q2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGYWNpbGl0eSA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA/IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gOiBudWxsO1xuICAgIGlmICghc2VsZWN0ZWRGYWNpbGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlZEZhY2lsaXR5ID0gdGhpcy5hc3NpZ25GYWNpbGl0eShzZWxlY3RlZEZhY2lsaXR5LCBmYWNpbGl0eSk7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IGNvbXBsZXRlZEZhY2lsaXR5O1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoeyBkaWN0aW9uYXJ5OiBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB9KTtcblxuICAgIGlmICh0aGlzLmlzUGFya0FjdGl2ZShjdHgsIGd1aWQsIGZhY2lsaXR5LmlkKSkge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogY29tcGxldGVkRmFjaWxpdHksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdKTtcbiAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKFNldEJhc2ljTWVudUFjdGlvbilcbiAgb25TZXRCYXNpY01lbnVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBzbWFydHBhcmtNYXAsIGFwcE1vZHVsZSB9OiBTZXRCYXNpY01lbnVBY3Rpb24pIHtcbiAgICBjdHguZGlzcGF0Y2gobmV3IE1lbnVMb2FkQWN0aW9uKHRoaXMudG9CYXNpY01lbnVJdGVtcyhjdHgsIHNtYXJ0cGFya01hcCwgY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeSwgYXBwTW9kdWxlKSwgYXBwTW9kdWxlKSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRHcm91cHNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkR3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZEdyb3Vwc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEdyb3VwcyQgPSB0aGlzLmdyb3VwU2VydmljZVByb3h5LmdldEd1ZXN0R3JvdXAoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldEdyb3VwcyQucGlwZSh0YXAoZ3JvdXBzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3JvdXBzOiBncm91cHMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENhdGVnb3JpZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRDYXRlZ29yaWVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Q2F0ZWdvcmllcyQgPSB0aGlzLmNhdGVnb3J5U2VydmljZVByb3h5LmdldENhdGVnb3JpZXMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuICAgIHJldHVybiBnZXRDYXRlZ29yaWVzJC5waXBlKHRhcChjYXRlZ29yaWVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkSm9iVGl0bGVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRKb2JUaXRsZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRKb2JUaXRsZXMkID0gdGhpcy5qb2JUaXRsZVNlcnZpY2VQcm94eS5nZXRKb2JUaXRsZXMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lU2VydmljZVByb3h5LmdldEJ5U2VhcmNoUGFyYW1zKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFpzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFpzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0WnMkID0gdGhpcy56U2VydmljZVByb3h5LmdldFpzKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRacyQucGlwZSh0YXAoeiA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHo6IHouZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJHcm91cHNBY3Rpb24pXG4gIG9uQ2xlYXJHcm91cHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGdyb3VwczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKVxuICBvbkNsZWFyQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2F0ZWdvcmllczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJKb2JUaXRsZXNBY3Rpb24pXG4gIG9uQ2xlYXJKb2JUaXRsZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGpvYlRpdGxlczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJab25lc0FjdGlvbilcbiAgb25DbGVhclpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6b25lczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJac0FjdGlvbilcbiAgb25DbGVhclpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6OiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZ3VpZCwgZmFjaWxpdHkgfTogU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKSB7XG4gICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5Py5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQsXG4gICAgICBwYXJrSWQ6IGZhY2lsaXR5Py5pZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBmYWNpbGl0eT8ubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICB6b25lczogZmFjaWxpdHk/LnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKVxuICBvbkNsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IH06IENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuXG4gICAgLy8gSWYgdGhlIHNlbGVjdGVkIGZhY2lsaXR5IGlzIEluYWN0aXZlIGFuZCBub3QgYSBTdXBlcnBhcmssIHdlIGRlc2VsZWN0XG4gICAgLy8gVGhpcyBtZWFuIHdlIHdvbid0IGNhcnJ5IGFuIEluYWN0aXZlIHBhcmsgdG8gdGhlIG5leHQgbW9kdWxlIGFzIHNlbGVjdGVkXG4gICAgaWYgKCFzZWxlY3RlZD8uYWN0aXZlICYmICFzZWxlY3RlZD8uaXNNdWx0aVBhcmspIHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbilcbiAgb25GYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50IH06IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5W2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnBhcmtJZF07XG5cbiAgICBjb25zdCBvcGVyYXRpb25UeXBlS2V5ID0gRmFjaWxpdHlSZW1vdGVDb21tYW5kc0xvY2FsaXphdGlvbktleVtGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlc1tmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlXV07XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7IHZhbHVlOiBmYWNpbGl0eS5uYW1lLCBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3MuYm9keSB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG9wZXJhdGlvblR5cGVLZXkpXG4gICAgfTtcblxuICAgIGlmIChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpLnBpcGUoc3dpdGNoTWFwKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50ID0+IHtcbiAgICAgIHJldHVybiBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzID8gb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcykgOiB0aHJvd0Vycm9yKCdGYWlsZWQgZXhlY3V0aW5nIGNvbW1hbmQnKTtcbiAgICB9KSwgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5KGNvbmZpZykpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkTWFjcm9Db21tYW5kc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkIH06IExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKSB7XG4gICAgY29uc3QgbWFjcm9Db21tYW5kcyQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldE1hY3JvQ29tbWFuZHMocGFya0lkLCBndWlkKTtcblxuICAgIHJldHVybiBtYWNyb0NvbW1hbmRzJC5waXBlKHRhcChtYWNyb0NvbW1hbmRzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbWFjcm9Db21tYW5kczogbWFjcm9Db21tYW5kcy5kYXRhXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbilcbiAgb25DbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIG1hY3JvQ29tbWFuZHM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0aWVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIsIGFwcE1vZHVsZTogQXBwTW9kdWxlLFxuICAgIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgZmFjaWxpdGllc01hcD86IFN0cmluZ01hcDxGYWNpbGl0eUR0b1tdPikge1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBub3dNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIGlmIChmYWNpbGl0aWVzTWFwKSB7XG4gICAgICBmYWNpbGl0aWVzTWFwW2d1aWRdLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGYuY2xvdWRJZCA9IGYuY2xvdWRJZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5jbG91ZElkO1xuICAgICAgICBmLmZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGYucGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0ucGVybWlzc2lvbnM7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0sIGYpO1xuICAgICAgICByZXR1cm4gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY2lsaXR5LmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmNsb3VkSWQ7XG4gICAgICBmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5LnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5wZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdID0gdGhpcy51cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBmYWNpbGl0eSk7XG4gICAgfVxuXG4gICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSB0aGlzLmdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5LCBub3dNb21lbnQpO1xuICAgIHRoaXMucGF0Y2hEaWZmRGljdGluYXJ5VG9TdG9yZShjdHgsIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KTtcbiAgICB0aGlzLnBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4LCBmYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBhcHBNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKHN0b3JlZEZhY2lsaXR5OiBGYWNpbGl0eUR0bywgaW5jb21pbmdGYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSAhaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgcmV0dXJuIGluY29taW5nRmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGFwcE1vZHVsZTogQXBwTW9kdWxlKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeSxcbiAgICB9KTtcblxuICAgIGlmIChhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgICAgem9uZXM6IGZhY2lsaXR5LnpvbmVzLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgbm93TW9tZW50OiBtb21lbnQuTW9tZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gbm93TW9tZW50LnR6KGZhY2lsaXR5LnNwVGltZVpvbmUpLmRpZmYodGhpcy5zeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIC8vIGZpeCBmb3Igc2VydmVycyB0aGF0IG5vdCBzeW5jIHRvIGdsb2JhbCB3b3JsZCBjbG9ja1xuICAgIGxldCBzZXJ2ZXJEYXRlVGltZTogc3RyaW5nID0gZmFjaWxpdHkuc2VydmVyRGF0ZVRpbWVbJ19pJ107XG4gICAgaWYgKCFzZXJ2ZXJEYXRlVGltZS5lbmRzV2l0aCgnKzAwOjAwJykpIHtcbiAgICAgIHNlcnZlckRhdGVUaW1lID0gc2VydmVyRGF0ZVRpbWUuc2xpY2UoMCwgc2VydmVyRGF0ZVRpbWUuaW5kZXhPZignLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbWVudC50eihzZXJ2ZXJEYXRlVGltZSwgZmFjaWxpdHkuc3BUaW1lWm9uZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3MoY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICByZXR1cm4gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25GYWNpbGl0eShzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKTogRmFjaWxpdHlEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBsZXQgY3VycmVudEZhY2lsaXR5ID0gbmV3IEZhY2lsaXR5RHRvKHN0b3JlZEZhY2lsaXR5KTtcbiAgICBjdXJyZW50RmFjaWxpdHkubmFtZSA9IGluY29taW5nRmFjaWxpdHkubmFtZTtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNdWx0aVBhcmsgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTXVsdGlQYXJrO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50aW1lRHJpZnQgPSBpbmNvbWluZ0ZhY2lsaXR5LnRpbWVEcmlmdDtcbiAgICBjdXJyZW50RmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5LmFjdGl2ZSA9IGluY29taW5nRmFjaWxpdHkuYWN0aXZlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50b3RhbFNwYWNlID0gaW5jb21pbmdGYWNpbGl0eS50b3RhbFNwYWNlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBjdXJyZW50RmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkRGF0ZVRpbWVVdGMoKSB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgcmV0dXJuIG1vbWVudC51dGMoKS5zdWJ0cmFjdChjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSwgJ21pbGxpc2Vjb25kcycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2ljTWVudUl0ZW1zKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgdGliYUtleXMgPSBjdHguZ2V0U3RhdGUoKS50aWJhS2V5cztcbiAgICBjb25zdCBtZW51SXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgY29uc3QgdGliYUtleSA9IHRpYmFLZXlzW2d1aWRdO1xuICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5jcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrTWFwW2d1aWRdLCBndWlkLCB0aWJhS2V5LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGlzUGFya0FjdGl2ZSA9IChjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkPy5pZCA9PT0gcGFya0lkICYmIGN0eC5nZXRTdGF0ZSgpLmd1aWQgPT09IGd1aWQ7XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrQmFzaWM6IFNtYXJ0cGFya0Jhc2ljRHRvLCBndWlkOiBzdHJpbmcsIHRpYmFLZXk6IG51bWJlciwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgc21hcnRwYXJrQmFzaWMuZmFjaWxpdGllcy5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICBpZiAobG90Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAvLyBkbyBub3QgcHVzaCBjaGlsZHJlbnMgdG8gbWVudSBpdGVtcyBhcnJheVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmNyZWF0ZU1lbnUoZ3VpZCwgdGliYUtleSwgc21hcnRwYXJrQmFzaWMsIGxvdCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpO1xuICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIC8vIFdlIGRvbnQgcnVuIG1lbnUgdXBkYXRlIGlmIHdlIGFyZSBub3QgaW4gQ0NcbiAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoY3VycmVudE1vZHVsZSAhPT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG5cbiAgICBmb3IgKGNvbnN0IFtndWlkLCBsb3RzTWFwXSBvZiBPYmplY3QuZW50cmllcyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtc1xuICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQpPy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBpdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBiYWRnZUNsYXNzID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmdldEJhZGdlUHJpb3JpdHkoZ3VpZCwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHksIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgICAgbWVudUl0ZW0uaGFzQmFkZ2UgPSBiYWRnZUNsYXNzICE9PSBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzLkNvbm5lY3RlZDtcbiAgICAgICAgICBtZW51SXRlbS5iYWRnZUNsYXNzID0gYmFkZ2VDbGFzcztcbiAgICAgICAgICBtZW51SXRlbS5uYW1lID0gZmFjaWxpdHkubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbihbLi4ubWVudUl0ZW1zXSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiA9IHt9O1xuICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwW2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMucmVkdWNlKChmYWNpbGl0aWVzLCBsb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBsb3QsIHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgIGZhY2lsaXRpZXNbbG90LmlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICBzdGFydERhdGU6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXJ0RGF0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KTogeyBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTsgfSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkgPSB7fTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgbG90IG9mIHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvbnN0IGNsb3QgPSBuZXcgRmFjaWxpdHlEdG8oKTtcbiAgICAgICAgY2xvdC5pZCA9IGxvdC5pZDtcbiAgICAgICAgY2xvdC5jbG91ZElkID0gbG90LmNsb3VkSWQ7XG4gICAgICAgIGNsb3QuYWN0aXZlID0gbG90LmFjdGl2ZTtcbiAgICAgICAgY2xvdC5mZWF0dXJlUGVybWlzc2lvbnMgPSBsb3QuZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBjbG90LnBlcm1pc3Npb25zID0gbG90LnBlcm1pc3Npb25zO1xuICAgICAgICBjbG90Lm5hbWUgPSBsb3QubmFtZTtcbiAgICAgICAgY2xvdC5zaXRlQ29kZSA9IGxvdC5zaXRlQ29kZTtcbiAgICAgICAgY2xvdC5tdWx0aVBhcmtQYXJlbnRJRCA9IGxvdC5tdWx0aVBhcmtQYXJlbnRJRDtcbiAgICAgICAgY2xvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzTFBSQ29ubmVjdGVkID0gbG90LmlzTFBSQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmlzTFBSRW5hYmxlZCA9IGxvdC5pc0xQUkVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZCA9IGxvdC5pc1RpY2tldExlc3NFbmFibGVkO1xuICAgICAgICBjbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNCYXNpYyA9IGxvdC5pc0Jhc2ljO1xuICAgICAgICBjbG90LmlzTXVsdGlQYXJrID0gbG90LmlzTXVsdGlQYXJrO1xuICAgICAgICBjbG90LnRpbWVEcmlmdCA9IGxvdC50aW1lRHJpZnQ7XG4gICAgICAgIGNsb3Quc3BUaW1lWm9uZSA9IGxvdC5zcFRpbWVab25lO1xuICAgICAgICBjbG90LnNlcnZlckRhdGVUaW1lID0gbG90LnNlcnZlckRhdGVUaW1lO1xuICAgICAgICBjbG90LnRvdGFsU3BhY2UgPSBsb3QudG90YWxTcGFjZTtcbiAgICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2xvdC5pZF0gPSBjbG90O1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGlmZiBvZiAwIGZvciBpbml0aWFsIHNldHVwXG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVNtYXJ0cGFya0Jhc2ljKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0UGFya3M6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4pIHtcbiAgICAvLyBrZWVwIGRlZmF1bHQgdmFsdWVzIHdoZW4gbmF2aWdhdGUgdG8gY29tbWFuZCBjZW50ZXIgZm9yd2FyZCBhbmQgYmFjay5cbiAgICBjb25zdCB7IGd1aWQsIHBhcmtJZCwgbXVsdGlQYXJrUGFyZW50SUQsIHNlbGVjdGVkIH0gPSBjdHguZ2V0U3RhdGUoKTtcbiAgICBkZWZhdWx0cy5ndWlkID0gZ3VpZDtcbiAgICBkZWZhdWx0cy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgIGRlZmF1bHRzLnBhcmtJZCA9IHBhcmtJZDtcbiAgICBkZWZhdWx0cy5tdWx0aVBhcmtQYXJlbnRJRCA9IG11bHRpUGFya1BhcmVudElEO1xuXG4gICAgY3R4LnNldFN0YXRlKGRlZmF1bHRzKTtcblxuICAgIGNvbnN0IHRpYmFLZXlzOiBTdHJpbmdNYXA8bnVtYmVyPiA9IE9iamVjdC5rZXlzKHNtYXJ0UGFya3MpLnJlZHVjZSgoa2V5cywgZ3VpZCwgaW5kZXgpID0+IHtcbiAgICAgIGtleXNbZ3VpZF0gPSBpbmRleDtcbiAgICAgIHJldHVybiBrZXlzO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0IHsgZGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfSA9IHRoaXMuY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0UGFya3MpO1xuXG4gICAgY29uc3Qgc3RhdGVVcGRhdGVzOiBQYXJ0aWFsPEZhY2lsaXR5U3RhdGVNb2RlbD4gPSB7XG4gICAgICB0aWJhS2V5cyxcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSxcbiAgICB9O1xuXG4gICAgaWYgKCFkaWN0aW9uYXJ5W2d1aWRdIHx8ICFkaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVVcGRhdGVzLCB7XG4gICAgICAgIGd1aWQ6ICcnLFxuICAgICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgICAgem9uZXM6IG51bGwsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjdHgucGF0Y2hTdGF0ZShzdGF0ZVVwZGF0ZXMpO1xuXG4gICAgLy91c2VzIGZhY2lsaXR5IGRpY3Rpb25hcnkgZnJvbSBzdG9yZSwgdGhlcmVmb3JlIHBsYWNlZCBhZnRlclxuICAgIGNvbnN0IHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSA9IHRoaXMuZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydFBhcmtzLCBkaWN0aW9uYXJ5KTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5OiBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudDogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcDogTnVtYmVyTWFwPER5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvPiA9IEpTT04ucGFyc2UoXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OKVxuICAgICkgPz8ge307XG5cbiAgICBjb25zdCBkcGM6IER5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnNvdXJjZUlkZW50aWZpZXJdO1xuICAgIGlmIChkcGMpIHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5OiBGYWNpbGl0eUR0byA9IG51bGw7XG4gICAgICBjb25maWcuZHVyYXRpb24gPSA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgICBjb25maWcubWVzc2FnZXMgPSB0aGlzLmZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLmdldENvbW1hbmROb3RpZmljYXRpb25Db25maWdNZXNzYWdlcyhcbiAgICAgICAgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSxcbiAgICAgICAgZmFjaWxpdHksXG4gICAgICAgIGRwY1xuICAgICAgKTtcblxuICAgICAgLy8gQ2xvc2UgZHluYW1pYyBwcmljaW5nIG5vdGlmaWNhdGlvblxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8gPSBuZXcgTm90aWZpY2F0aW9uRHRvKCk7XG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgICBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gPSBkcGM7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbiwgZHBjLmd1aWQpKTtcblxuICAgICAgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdID0gbnVsbDtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFxuICAgICAgICBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXApXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|