@veeroute/lss-studio-angular 7.33.3222 → 7.35.3290
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/cfg/entity_error_type.yaml +9 -9
- package/cfg/table_settings.json +11 -20
- package/fesm2022/veeroute-lss-studio-angular.mjs +220 -159
- package/fesm2022/veeroute-lss-studio-angular.mjs.map +1 -1
- package/package.json +5 -6
- package/types/veeroute-lss-studio-angular.d.ts +13407 -0
- package/api/api.d.ts +0 -46
- package/api/backupsService.d.ts +0 -56
- package/api/backupsServiceInterface.d.ts +0 -35
- package/api/customFieldsService.d.ts +0 -145
- package/api/customFieldsServiceInterface.d.ts +0 -70
- package/api/customIconsService.d.ts +0 -144
- package/api/customIconsServiceInterface.d.ts +0 -69
- package/api/experimentsService.d.ts +0 -546
- package/api/experimentsServiceInterface.d.ts +0 -272
- package/api/explorerService.d.ts +0 -279
- package/api/explorerServiceInterface.d.ts +0 -132
- package/api/externalRoutingService.d.ts +0 -101
- package/api/externalRoutingServiceInterface.d.ts +0 -55
- package/api/factsService.d.ts +0 -213
- package/api/factsServiceInterface.d.ts +0 -119
- package/api/hardlinksService.d.ts +0 -213
- package/api/hardlinksServiceInterface.d.ts +0 -119
- package/api/locationsService.d.ts +0 -192
- package/api/locationsServiceInterface.d.ts +0 -112
- package/api/ordersService.d.ts +0 -236
- package/api/ordersServiceInterface.d.ts +0 -132
- package/api/performersService.d.ts +0 -236
- package/api/performersServiceInterface.d.ts +0 -132
- package/api/systemService.d.ts +0 -78
- package/api/systemServiceInterface.d.ts +0 -37
- package/api/transportsService.d.ts +0 -236
- package/api/transportsServiceInterface.d.ts +0 -132
- package/api/tripsService.d.ts +0 -372
- package/api/tripsServiceInterface.d.ts +0 -218
- package/api/userService.d.ts +0 -162
- package/api/userServiceInterface.d.ts +0 -79
- package/api.base.service.d.ts +0 -21
- package/api.module.d.ts +0 -11
- package/configuration.d.ts +0 -106
- package/encoder.d.ts +0 -11
- package/esm2022/api/api.mjs +0 -47
- package/esm2022/api/backupsService.mjs +0 -135
- package/esm2022/api/backupsServiceInterface.mjs +0 -2
- package/esm2022/api/customFieldsService.mjs +0 -312
- package/esm2022/api/customFieldsServiceInterface.mjs +0 -2
- package/esm2022/api/customIconsService.mjs +0 -313
- package/esm2022/api/customIconsServiceInterface.mjs +0 -2
- package/esm2022/api/experimentsService.mjs +0 -1163
- package/esm2022/api/experimentsServiceInterface.mjs +0 -2
- package/esm2022/api/explorerService.mjs +0 -594
- package/esm2022/api/explorerServiceInterface.mjs +0 -2
- package/esm2022/api/externalRoutingService.mjs +0 -227
- package/esm2022/api/externalRoutingServiceInterface.mjs +0 -2
- package/esm2022/api/factsService.mjs +0 -509
- package/esm2022/api/factsServiceInterface.mjs +0 -2
- package/esm2022/api/hardlinksService.mjs +0 -509
- package/esm2022/api/hardlinksServiceInterface.mjs +0 -2
- package/esm2022/api/locationsService.mjs +0 -459
- package/esm2022/api/locationsServiceInterface.mjs +0 -2
- package/esm2022/api/ordersService.mjs +0 -565
- package/esm2022/api/ordersServiceInterface.mjs +0 -2
- package/esm2022/api/performersService.mjs +0 -565
- package/esm2022/api/performersServiceInterface.mjs +0 -2
- package/esm2022/api/systemService.mjs +0 -149
- package/esm2022/api/systemServiceInterface.mjs +0 -2
- package/esm2022/api/transportsService.mjs +0 -565
- package/esm2022/api/transportsServiceInterface.mjs +0 -2
- package/esm2022/api/tripsService.mjs +0 -900
- package/esm2022/api/tripsServiceInterface.mjs +0 -2
- package/esm2022/api/userService.mjs +0 -312
- package/esm2022/api/userServiceInterface.mjs +0 -2
- package/esm2022/api.base.service.mjs +0 -79
- package/esm2022/api.module.mjs +0 -40
- package/esm2022/configuration.mjs +0 -145
- package/esm2022/encoder.mjs +0 -19
- package/esm2022/index.mjs +0 -8
- package/esm2022/model/actualizeSettings.mjs +0 -11
- package/esm2022/model/assignedPerformer.mjs +0 -2
- package/esm2022/model/assignedTransport.mjs +0 -2
- package/esm2022/model/attribute.mjs +0 -11
- package/esm2022/model/basicProcess.mjs +0 -19
- package/esm2022/model/basicState.mjs +0 -20
- package/esm2022/model/box.mjs +0 -2
- package/esm2022/model/boxCompatibilities.mjs +0 -11
- package/esm2022/model/boxLimits.mjs +0 -2
- package/esm2022/model/break.mjs +0 -11
- package/esm2022/model/breakRules.mjs +0 -7
- package/esm2022/model/calculationHistoryElement.mjs +0 -2
- package/esm2022/model/calculationInfo.mjs +0 -2
- package/esm2022/model/calculationSettings.mjs +0 -11
- package/esm2022/model/calculationState.mjs +0 -2
- package/esm2022/model/calculationStatus.mjs +0 -24
- package/esm2022/model/capacity.mjs +0 -11
- package/esm2022/model/capacityCost.mjs +0 -11
- package/esm2022/model/capacityLimit.mjs +0 -11
- package/esm2022/model/capacityMultiplier.mjs +0 -11
- package/esm2022/model/capacityStatisticsLoad.mjs +0 -11
- package/esm2022/model/capacityStatisticsRatio.mjs +0 -11
- package/esm2022/model/capacityStatisticsSum.mjs +0 -11
- package/esm2022/model/cargo.mjs +0 -2
- package/esm2022/model/cargoAction.mjs +0 -2
- package/esm2022/model/cargoActionType.mjs +0 -18
- package/esm2022/model/cargoCompatibilities.mjs +0 -2
- package/esm2022/model/cargoInvoice.mjs +0 -2
- package/esm2022/model/cargoInvoiceDetail.mjs +0 -2
- package/esm2022/model/cargoInvoiceHonestSign.mjs +0 -11
- package/esm2022/model/cargoInvoiceReceipt.mjs +0 -11
- package/esm2022/model/cargoInvoiceTax.mjs +0 -28
- package/esm2022/model/cargoRotationType.mjs +0 -20
- package/esm2022/model/checkResult.mjs +0 -11
- package/esm2022/model/compatibilityPenalty.mjs +0 -11
- package/esm2022/model/customfieldConvertRule.mjs +0 -2
- package/esm2022/model/customfieldEntityType.mjs +0 -28
- package/esm2022/model/customfieldsSettings.mjs +0 -2
- package/esm2022/model/demand.mjs +0 -2
- package/esm2022/model/demandExtraDuration.mjs +0 -11
- package/esm2022/model/demandType.mjs +0 -21
- package/esm2022/model/entityError.mjs +0 -2
- package/esm2022/model/entityErrorType.mjs +0 -36
- package/esm2022/model/entityPath.mjs +0 -2
- package/esm2022/model/entityType.mjs +0 -44
- package/esm2022/model/entityWarning.mjs +0 -2
- package/esm2022/model/entityWarningType.mjs +0 -58
- package/esm2022/model/experiment.mjs +0 -2
- package/esm2022/model/experimentCheck.mjs +0 -2
- package/esm2022/model/experimentList.mjs +0 -2
- package/esm2022/model/experimentNeighbors.mjs +0 -11
- package/esm2022/model/experimentSettings.mjs +0 -2
- package/esm2022/model/experimentStatistics.mjs +0 -2
- package/esm2022/model/extensionSettings.mjs +0 -11
- package/esm2022/model/fact.mjs +0 -2
- package/esm2022/model/factEssences.mjs +0 -2
- package/esm2022/model/factStatus.mjs +0 -19
- package/esm2022/model/factType.mjs +0 -25
- package/esm2022/model/featureLifetime.mjs +0 -2
- package/esm2022/model/fileNamePath.mjs +0 -11
- package/esm2022/model/fileSpecification.mjs +0 -11
- package/esm2022/model/filesystem.mjs +0 -2
- package/esm2022/model/filesystemColumnType.mjs +0 -23
- package/esm2022/model/filesystemCounters.mjs +0 -2
- package/esm2022/model/filesystemPath.mjs +0 -2
- package/esm2022/model/folder.mjs +0 -2
- package/esm2022/model/folderCounters.mjs +0 -11
- package/esm2022/model/folderSpecification.mjs +0 -2
- package/esm2022/model/folderType.mjs +0 -18
- package/esm2022/model/general400.mjs +0 -2
- package/esm2022/model/general402.mjs +0 -2
- package/esm2022/model/general403.mjs +0 -2
- package/esm2022/model/general404.mjs +0 -2
- package/esm2022/model/general404Detail.mjs +0 -2
- package/esm2022/model/general429.mjs +0 -2
- package/esm2022/model/general500.mjs +0 -2
- package/esm2022/model/generalStatistics.mjs +0 -2
- package/esm2022/model/geoSettings.mjs +0 -2
- package/esm2022/model/geopoint.mjs +0 -11
- package/esm2022/model/hardlink.mjs +0 -2
- package/esm2022/model/hardlinkElement.mjs +0 -2
- package/esm2022/model/hardlinkElementType.mjs +0 -19
- package/esm2022/model/importSample.mjs +0 -18
- package/esm2022/model/importSource.mjs +0 -18
- package/esm2022/model/linkedEssence.mjs +0 -23
- package/esm2022/model/loadStatistics.mjs +0 -2
- package/esm2022/model/location.mjs +0 -2
- package/esm2022/model/locationCargosLimit.mjs +0 -2
- package/esm2022/model/locationCompatibilities.mjs +0 -11
- package/esm2022/model/locationLimit.mjs +0 -2
- package/esm2022/model/locationLimitStatistics.mjs +0 -2
- package/esm2022/model/locationStatistics.mjs +0 -2
- package/esm2022/model/locationTimetableElement.mjs +0 -2
- package/esm2022/model/locationTransportsLimit.mjs +0 -11
- package/esm2022/model/measurements.mjs +0 -2
- package/esm2022/model/models.mjs +0 -261
- package/esm2022/model/order.mjs +0 -2
- package/esm2022/model/orderCompatibilities.mjs +0 -11
- package/esm2022/model/performer.mjs +0 -2
- package/esm2022/model/performerCompatibilities.mjs +0 -2
- package/esm2022/model/performerLimits.mjs +0 -2
- package/esm2022/model/performerShift.mjs +0 -2
- package/esm2022/model/performerTariff.mjs +0 -2
- package/esm2022/model/performerTariffConstraint.mjs +0 -11
- package/esm2022/model/planSettings.mjs +0 -2
- package/esm2022/model/planStatistics.mjs +0 -2
- package/esm2022/model/possibleEvent.mjs +0 -2
- package/esm2022/model/quality.mjs +0 -2
- package/esm2022/model/removedItems.mjs +0 -11
- package/esm2022/model/replanSettings.mjs +0 -2
- package/esm2022/model/replanStrategy.mjs +0 -11
- package/esm2022/model/rest.mjs +0 -11
- package/esm2022/model/restRules.mjs +0 -2
- package/esm2022/model/roundtripStatistics.mjs +0 -2
- package/esm2022/model/routingMatrix.mjs +0 -2
- package/esm2022/model/routingMatrixWaypoint.mjs +0 -2
- package/esm2022/model/routingTransportMatrix.mjs +0 -2
- package/esm2022/model/schemaError.mjs +0 -11
- package/esm2022/model/service.mjs +0 -26
- package/esm2022/model/settingsKeyList.mjs +0 -11
- package/esm2022/model/stopDemand.mjs +0 -2
- package/esm2022/model/stopStatistics.mjs +0 -2
- package/esm2022/model/tableCustomfields.mjs +0 -11
- package/esm2022/model/tableCustomfieldsColumnType.mjs +0 -76
- package/esm2022/model/tableDataStats.mjs +0 -11
- package/esm2022/model/tableExperimentColumnType.mjs +0 -21
- package/esm2022/model/tableFact.mjs +0 -2
- package/esm2022/model/tableFactColumnType.mjs +0 -27
- package/esm2022/model/tableFactFields.mjs +0 -6
- package/esm2022/model/tableFactFilter.mjs +0 -2
- package/esm2022/model/tableFactFilterList.mjs +0 -2
- package/esm2022/model/tableFactList.mjs +0 -2
- package/esm2022/model/tableFactMetrics.mjs +0 -2
- package/esm2022/model/tableFactMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableFilterBoolList.mjs +0 -11
- package/esm2022/model/tableFilterDatetimeRange.mjs +0 -11
- package/esm2022/model/tableFilterDurationRange.mjs +0 -11
- package/esm2022/model/tableFilterEnumList.mjs +0 -11
- package/esm2022/model/tableFilterFloatRange.mjs +0 -11
- package/esm2022/model/tableFilterIntRange.mjs +0 -11
- package/esm2022/model/tableFilterStringList.mjs +0 -11
- package/esm2022/model/tableFilterStringSearch.mjs +0 -11
- package/esm2022/model/tableFilterType.mjs +0 -24
- package/esm2022/model/tableHardlink.mjs +0 -2
- package/esm2022/model/tableHardlinkColumnType.mjs +0 -24
- package/esm2022/model/tableHardlinkFields.mjs +0 -7
- package/esm2022/model/tableHardlinkFilter.mjs +0 -2
- package/esm2022/model/tableHardlinkFilterList.mjs +0 -2
- package/esm2022/model/tableHardlinkList.mjs +0 -2
- package/esm2022/model/tableHardlinkMetrics.mjs +0 -2
- package/esm2022/model/tableHardlinkMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableListCounters.mjs +0 -2
- package/esm2022/model/tableListCountersDetail.mjs +0 -11
- package/esm2022/model/tableLocation.mjs +0 -2
- package/esm2022/model/tableLocationColumnType.mjs +0 -23
- package/esm2022/model/tableLocationFields.mjs +0 -7
- package/esm2022/model/tableLocationFilter.mjs +0 -2
- package/esm2022/model/tableLocationFilterList.mjs +0 -2
- package/esm2022/model/tableLocationList.mjs +0 -2
- package/esm2022/model/tableLocationMetrics.mjs +0 -2
- package/esm2022/model/tableLocationMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableOrder.mjs +0 -2
- package/esm2022/model/tableOrderColumnType.mjs +0 -49
- package/esm2022/model/tableOrderFields.mjs +0 -7
- package/esm2022/model/tableOrderFilter.mjs +0 -2
- package/esm2022/model/tableOrderFilterList.mjs +0 -2
- package/esm2022/model/tableOrderList.mjs +0 -2
- package/esm2022/model/tableOrderMetrics.mjs +0 -2
- package/esm2022/model/tableOrderMetricsFilterList.mjs +0 -2
- package/esm2022/model/tablePerformer.mjs +0 -2
- package/esm2022/model/tablePerformerColumnType.mjs +0 -31
- package/esm2022/model/tablePerformerFields.mjs +0 -7
- package/esm2022/model/tablePerformerFilter.mjs +0 -2
- package/esm2022/model/tablePerformerFilterList.mjs +0 -2
- package/esm2022/model/tablePerformerList.mjs +0 -2
- package/esm2022/model/tablePerformerMetrics.mjs +0 -2
- package/esm2022/model/tablePerformerMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableRoundtrip.mjs +0 -2
- package/esm2022/model/tableRoundtripColumnType.mjs +0 -51
- package/esm2022/model/tableRoundtripFields.mjs +0 -7
- package/esm2022/model/tableRoundtripFilter.mjs +0 -2
- package/esm2022/model/tableRoundtripFilterList.mjs +0 -2
- package/esm2022/model/tableRoundtripList.mjs +0 -2
- package/esm2022/model/tableRoundtripMetrics.mjs +0 -2
- package/esm2022/model/tableRoundtripMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableTransport.mjs +0 -2
- package/esm2022/model/tableTransportColumnType.mjs +0 -37
- package/esm2022/model/tableTransportFields.mjs +0 -7
- package/esm2022/model/tableTransportFilter.mjs +0 -2
- package/esm2022/model/tableTransportFilterList.mjs +0 -2
- package/esm2022/model/tableTransportList.mjs +0 -2
- package/esm2022/model/tableTransportMetrics.mjs +0 -2
- package/esm2022/model/tableTransportMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableTrip.mjs +0 -2
- package/esm2022/model/tableTripColumnType.mjs +0 -53
- package/esm2022/model/tableTripFields.mjs +0 -7
- package/esm2022/model/tableTripFilter.mjs +0 -2
- package/esm2022/model/tableTripFilterList.mjs +0 -2
- package/esm2022/model/tableTripList.mjs +0 -2
- package/esm2022/model/tableTripMetrics.mjs +0 -2
- package/esm2022/model/tableTripMetricsFilterList.mjs +0 -2
- package/esm2022/model/tableTripStop.mjs +0 -2
- package/esm2022/model/tableTripStopColumnType.mjs +0 -33
- package/esm2022/model/tableTripStopFields.mjs +0 -7
- package/esm2022/model/tableTripStopFilter.mjs +0 -2
- package/esm2022/model/tableTripStopFilterList.mjs +0 -2
- package/esm2022/model/tableTripStopList.mjs +0 -2
- package/esm2022/model/taskStatistics.mjs +0 -2
- package/esm2022/model/timeWindow.mjs +0 -11
- package/esm2022/model/timeWindowViolationDetail.mjs +0 -11
- package/esm2022/model/timeWindowViolations.mjs +0 -2
- package/esm2022/model/tracedata.mjs +0 -2
- package/esm2022/model/track.mjs +0 -2
- package/esm2022/model/trackList.mjs +0 -2
- package/esm2022/model/trackListCustom.mjs +0 -2
- package/esm2022/model/trackType.mjs +0 -19
- package/esm2022/model/trackpoint.mjs +0 -11
- package/esm2022/model/translations.mjs +0 -11
- package/esm2022/model/transport.mjs +0 -2
- package/esm2022/model/transportCapacityMultiplier.mjs +0 -2
- package/esm2022/model/transportCompatibilities.mjs +0 -2
- package/esm2022/model/transportLimits.mjs +0 -2
- package/esm2022/model/transportLoad.mjs +0 -2
- package/esm2022/model/transportShift.mjs +0 -2
- package/esm2022/model/transportSpeedMultiplier.mjs +0 -2
- package/esm2022/model/transportTariff.mjs +0 -2
- package/esm2022/model/transportTariffConstraint.mjs +0 -11
- package/esm2022/model/transportType.mjs +0 -32
- package/esm2022/model/trip.mjs +0 -2
- package/esm2022/model/tripAssumptions.mjs +0 -2
- package/esm2022/model/tripExpectations.mjs +0 -2
- package/esm2022/model/tripPenalties.mjs +0 -2
- package/esm2022/model/tripStartTimeStrategy.mjs +0 -18
- package/esm2022/model/tripState.mjs +0 -2
- package/esm2022/model/tripStateFlag.mjs +0 -30
- package/esm2022/model/tripStatistics.mjs +0 -2
- package/esm2022/model/tripStatus.mjs +0 -25
- package/esm2022/model/tripsSettings.mjs +0 -2
- package/esm2022/model/universal400WithErrorsAndWarnings.mjs +0 -2
- package/esm2022/model/universalData.mjs +0 -2
- package/esm2022/model/unplannedItems.mjs +0 -11
- package/esm2022/model/versionResult.mjs +0 -11
- package/esm2022/model/webFact.mjs +0 -2
- package/esm2022/model/webHardlink.mjs +0 -2
- package/esm2022/model/webLocation.mjs +0 -2
- package/esm2022/model/webLocationGeopoint.mjs +0 -2
- package/esm2022/model/webLocationGeopointList.mjs +0 -2
- package/esm2022/model/webOrder.mjs +0 -2
- package/esm2022/model/webOrderGeopoint.mjs +0 -2
- package/esm2022/model/webOrderGeopointList.mjs +0 -2
- package/esm2022/model/webPerformer.mjs +0 -2
- package/esm2022/model/webPerformerGeopoint.mjs +0 -7
- package/esm2022/model/webPerformerGeopointList.mjs +0 -2
- package/esm2022/model/webTransport.mjs +0 -2
- package/esm2022/model/webTransportGeopoint.mjs +0 -7
- package/esm2022/model/webTransportGeopointList.mjs +0 -2
- package/esm2022/model/webTrip.mjs +0 -2
- package/esm2022/model/webTripChart.mjs +0 -2
- package/esm2022/model/webTripChartDemand.mjs +0 -2
- package/esm2022/model/webTripChartList.mjs +0 -2
- package/esm2022/model/workAndRestRules.mjs +0 -2
- package/esm2022/param.mjs +0 -2
- package/esm2022/provide-api.mjs +0 -15
- package/esm2022/variables.mjs +0 -9
- package/esm2022/veeroute-lss-studio-angular.mjs +0 -5
- package/index.d.ts +0 -7
- package/model/actualizeSettings.d.ts +0 -23
- package/model/assignedPerformer.d.ts +0 -25
- package/model/assignedTransport.d.ts +0 -25
- package/model/attribute.d.ts +0 -23
- package/model/basicProcess.d.ts +0 -17
- package/model/basicState.d.ts +0 -18
- package/model/box.d.ts +0 -30
- package/model/boxCompatibilities.d.ts +0 -31
- package/model/boxLimits.d.ts +0 -17
- package/model/break.d.ts +0 -27
- package/model/breakRules.d.ts +0 -29
- package/model/calculationHistoryElement.d.ts +0 -21
- package/model/calculationInfo.d.ts +0 -49
- package/model/calculationSettings.d.ts +0 -39
- package/model/calculationState.d.ts +0 -23
- package/model/calculationStatus.d.ts +0 -22
- package/model/capacity.d.ts +0 -35
- package/model/capacityCost.d.ts +0 -35
- package/model/capacityLimit.d.ts +0 -35
- package/model/capacityMultiplier.d.ts +0 -35
- package/model/capacityStatisticsLoad.d.ts +0 -35
- package/model/capacityStatisticsRatio.d.ts +0 -35
- package/model/capacityStatisticsSum.d.ts +0 -35
- package/model/cargo.d.ts +0 -34
- package/model/cargoAction.d.ts +0 -25
- package/model/cargoActionType.d.ts +0 -16
- package/model/cargoCompatibilities.d.ts +0 -44
- package/model/cargoInvoice.d.ts +0 -30
- package/model/cargoInvoiceDetail.d.ts +0 -55
- package/model/cargoInvoiceHonestSign.d.ts +0 -23
- package/model/cargoInvoiceReceipt.d.ts +0 -27
- package/model/cargoInvoiceTax.d.ts +0 -26
- package/model/cargoRotationType.d.ts +0 -18
- package/model/checkResult.d.ts +0 -19
- package/model/compatibilityPenalty.d.ts +0 -23
- package/model/customfieldConvertRule.d.ts +0 -25
- package/model/customfieldEntityType.d.ts +0 -26
- package/model/customfieldsSettings.d.ts +0 -20
- package/model/demand.d.ts +0 -47
- package/model/demandExtraDuration.d.ts +0 -23
- package/model/demandType.d.ts +0 -19
- package/model/entityError.d.ts +0 -26
- package/model/entityErrorType.d.ts +0 -34
- package/model/entityPath.d.ts +0 -22
- package/model/entityType.d.ts +0 -42
- package/model/entityWarning.d.ts +0 -26
- package/model/entityWarningType.d.ts +0 -56
- package/model/experiment.d.ts +0 -49
- package/model/experimentCheck.d.ts +0 -25
- package/model/experimentList.d.ts +0 -22
- package/model/experimentNeighbors.d.ts +0 -23
- package/model/experimentSettings.d.ts +0 -21
- package/model/experimentStatistics.d.ts +0 -31
- package/model/extensionSettings.d.ts +0 -35
- package/model/fact.d.ts +0 -58
- package/model/factEssences.d.ts +0 -20
- package/model/factStatus.d.ts +0 -17
- package/model/factType.d.ts +0 -23
- package/model/featureLifetime.d.ts +0 -24
- package/model/fileNamePath.d.ts +0 -23
- package/model/fileSpecification.d.ts +0 -27
- package/model/filesystem.d.ts +0 -23
- package/model/filesystemColumnType.d.ts +0 -21
- package/model/filesystemCounters.d.ts +0 -24
- package/model/filesystemPath.d.ts +0 -20
- package/model/folder.d.ts +0 -60
- package/model/folderCounters.d.ts +0 -23
- package/model/folderSpecification.d.ts +0 -40
- package/model/folderType.d.ts +0 -16
- package/model/general400.d.ts +0 -26
- package/model/general402.d.ts +0 -21
- package/model/general403.d.ts +0 -21
- package/model/general404.d.ts +0 -21
- package/model/general404Detail.d.ts +0 -17
- package/model/general429.d.ts +0 -21
- package/model/general500.d.ts +0 -21
- package/model/generalStatistics.d.ts +0 -96
- package/model/geoSettings.d.ts +0 -40
- package/model/geopoint.d.ts +0 -23
- package/model/hardlink.d.ts +0 -29
- package/model/hardlinkElement.d.ts +0 -21
- package/model/hardlinkElementType.d.ts +0 -17
- package/model/importSample.d.ts +0 -16
- package/model/importSource.d.ts +0 -16
- package/model/linkedEssence.d.ts +0 -34
- package/model/loadStatistics.d.ts +0 -28
- package/model/location.d.ts +0 -49
- package/model/locationCargosLimit.d.ts +0 -25
- package/model/locationCompatibilities.d.ts +0 -19
- package/model/locationLimit.d.ts +0 -42
- package/model/locationLimitStatistics.d.ts +0 -33
- package/model/locationStatistics.d.ts +0 -40
- package/model/locationTimetableElement.d.ts +0 -25
- package/model/locationTransportsLimit.d.ts +0 -23
- package/model/measurements.d.ts +0 -53
- package/model/models.d.ts +0 -260
- package/model/order.d.ts +0 -40
- package/model/orderCompatibilities.d.ts +0 -31
- package/model/performer.d.ts +0 -42
- package/model/performerCompatibilities.d.ts +0 -28
- package/model/performerLimits.d.ts +0 -24
- package/model/performerShift.d.ts +0 -57
- package/model/performerTariff.d.ts +0 -28
- package/model/performerTariffConstraint.d.ts +0 -23
- package/model/planSettings.d.ts +0 -23
- package/model/planStatistics.d.ts +0 -31
- package/model/possibleEvent.d.ts +0 -42
- package/model/quality.d.ts +0 -28
- package/model/removedItems.d.ts +0 -63
- package/model/replanSettings.d.ts +0 -17
- package/model/replanStrategy.d.ts +0 -27
- package/model/rest.d.ts +0 -27
- package/model/restRules.d.ts +0 -20
- package/model/roundtripStatistics.d.ts +0 -24
- package/model/routingMatrix.d.ts +0 -28
- package/model/routingMatrixWaypoint.d.ts +0 -21
- package/model/routingTransportMatrix.d.ts +0 -19
- package/model/schemaError.d.ts +0 -23
- package/model/service.d.ts +0 -24
- package/model/settingsKeyList.d.ts +0 -23
- package/model/stopDemand.d.ts +0 -28
- package/model/stopStatistics.d.ts +0 -60
- package/model/tableCustomfields.d.ts +0 -255
- package/model/tableCustomfieldsColumnType.d.ts +0 -74
- package/model/tableDataStats.d.ts +0 -47
- package/model/tableExperimentColumnType.d.ts +0 -19
- package/model/tableFact.d.ts +0 -21
- package/model/tableFactColumnType.d.ts +0 -25
- package/model/tableFactFields.d.ts +0 -68
- package/model/tableFactFilter.d.ts +0 -37
- package/model/tableFactFilterList.d.ts +0 -20
- package/model/tableFactList.d.ts +0 -22
- package/model/tableFactMetrics.d.ts +0 -26
- package/model/tableFactMetricsFilterList.d.ts +0 -24
- package/model/tableFilterBoolList.d.ts +0 -19
- package/model/tableFilterDatetimeRange.d.ts +0 -23
- package/model/tableFilterDurationRange.d.ts +0 -23
- package/model/tableFilterEnumList.d.ts +0 -19
- package/model/tableFilterFloatRange.d.ts +0 -23
- package/model/tableFilterIntRange.d.ts +0 -23
- package/model/tableFilterStringList.d.ts +0 -23
- package/model/tableFilterStringSearch.d.ts +0 -23
- package/model/tableFilterType.d.ts +0 -22
- package/model/tableHardlink.d.ts +0 -21
- package/model/tableHardlinkColumnType.d.ts +0 -22
- package/model/tableHardlinkFields.d.ts +0 -57
- package/model/tableHardlinkFilter.d.ts +0 -37
- package/model/tableHardlinkFilterList.d.ts +0 -20
- package/model/tableHardlinkList.d.ts +0 -22
- package/model/tableHardlinkMetrics.d.ts +0 -26
- package/model/tableHardlinkMetricsFilterList.d.ts +0 -24
- package/model/tableListCounters.d.ts +0 -24
- package/model/tableListCountersDetail.d.ts +0 -19
- package/model/tableLocation.d.ts +0 -21
- package/model/tableLocationColumnType.d.ts +0 -21
- package/model/tableLocationFields.d.ts +0 -47
- package/model/tableLocationFilter.d.ts +0 -37
- package/model/tableLocationFilterList.d.ts +0 -20
- package/model/tableLocationList.d.ts +0 -22
- package/model/tableLocationMetrics.d.ts +0 -26
- package/model/tableLocationMetricsFilterList.d.ts +0 -24
- package/model/tableOrder.d.ts +0 -21
- package/model/tableOrderColumnType.d.ts +0 -47
- package/model/tableOrderFields.d.ts +0 -137
- package/model/tableOrderFilter.d.ts +0 -37
- package/model/tableOrderFilterList.d.ts +0 -20
- package/model/tableOrderList.d.ts +0 -22
- package/model/tableOrderMetrics.d.ts +0 -26
- package/model/tableOrderMetricsFilterList.d.ts +0 -24
- package/model/tablePerformer.d.ts +0 -21
- package/model/tablePerformerColumnType.d.ts +0 -29
- package/model/tablePerformerFields.d.ts +0 -76
- package/model/tablePerformerFilter.d.ts +0 -37
- package/model/tablePerformerFilterList.d.ts +0 -20
- package/model/tablePerformerList.d.ts +0 -22
- package/model/tablePerformerMetrics.d.ts +0 -26
- package/model/tablePerformerMetricsFilterList.d.ts +0 -24
- package/model/tableRoundtrip.d.ts +0 -21
- package/model/tableRoundtripColumnType.d.ts +0 -49
- package/model/tableRoundtripFields.d.ts +0 -159
- package/model/tableRoundtripFilter.d.ts +0 -37
- package/model/tableRoundtripFilterList.d.ts +0 -20
- package/model/tableRoundtripList.d.ts +0 -22
- package/model/tableRoundtripMetrics.d.ts +0 -26
- package/model/tableRoundtripMetricsFilterList.d.ts +0 -24
- package/model/tableTransport.d.ts +0 -21
- package/model/tableTransportColumnType.d.ts +0 -35
- package/model/tableTransportFields.d.ts +0 -101
- package/model/tableTransportFilter.d.ts +0 -37
- package/model/tableTransportFilterList.d.ts +0 -20
- package/model/tableTransportList.d.ts +0 -22
- package/model/tableTransportMetrics.d.ts +0 -26
- package/model/tableTransportMetricsFilterList.d.ts +0 -24
- package/model/tableTrip.d.ts +0 -21
- package/model/tableTripColumnType.d.ts +0 -51
- package/model/tableTripFields.d.ts +0 -165
- package/model/tableTripFilter.d.ts +0 -37
- package/model/tableTripFilterList.d.ts +0 -20
- package/model/tableTripList.d.ts +0 -22
- package/model/tableTripMetrics.d.ts +0 -26
- package/model/tableTripMetricsFilterList.d.ts +0 -24
- package/model/tableTripStop.d.ts +0 -21
- package/model/tableTripStopColumnType.d.ts +0 -31
- package/model/tableTripStopFields.d.ts +0 -90
- package/model/tableTripStopFilter.d.ts +0 -37
- package/model/tableTripStopFilterList.d.ts +0 -20
- package/model/tableTripStopList.d.ts +0 -22
- package/model/taskStatistics.d.ts +0 -20
- package/model/timeWindow.d.ts +0 -23
- package/model/timeWindowViolationDetail.d.ts +0 -23
- package/model/timeWindowViolations.d.ts +0 -24
- package/model/tracedata.d.ts +0 -49
- package/model/track.d.ts +0 -44
- package/model/trackList.d.ts +0 -22
- package/model/trackListCustom.d.ts +0 -20
- package/model/trackType.d.ts +0 -17
- package/model/trackpoint.d.ts +0 -27
- package/model/translations.d.ts +0 -23
- package/model/transport.d.ts +0 -44
- package/model/transportCapacityMultiplier.d.ts +0 -19
- package/model/transportCompatibilities.d.ts +0 -28
- package/model/transportLimits.d.ts +0 -21
- package/model/transportLoad.d.ts +0 -21
- package/model/transportShift.d.ts +0 -43
- package/model/transportSpeedMultiplier.d.ts +0 -21
- package/model/transportTariff.d.ts +0 -26
- package/model/transportTariffConstraint.d.ts +0 -23
- package/model/transportType.d.ts +0 -30
- package/model/trip.d.ts +0 -41
- package/model/tripAssumptions.d.ts +0 -45
- package/model/tripExpectations.d.ts +0 -26
- package/model/tripPenalties.d.ts +0 -24
- package/model/tripStartTimeStrategy.d.ts +0 -16
- package/model/tripState.d.ts +0 -66
- package/model/tripStateFlag.d.ts +0 -28
- package/model/tripStatistics.d.ts +0 -41
- package/model/tripStatus.d.ts +0 -23
- package/model/tripsSettings.d.ts +0 -25
- package/model/universal400WithErrorsAndWarnings.d.ts +0 -36
- package/model/universalData.d.ts +0 -67
- package/model/unplannedItems.d.ts +0 -47
- package/model/versionResult.d.ts +0 -27
- package/model/webFact.d.ts +0 -24
- package/model/webHardlink.d.ts +0 -24
- package/model/webLocation.d.ts +0 -26
- package/model/webLocationGeopoint.d.ts +0 -33
- package/model/webLocationGeopointList.d.ts +0 -30
- package/model/webOrder.d.ts +0 -24
- package/model/webOrderGeopoint.d.ts +0 -43
- package/model/webOrderGeopointList.d.ts +0 -30
- package/model/webPerformer.d.ts +0 -24
- package/model/webPerformerGeopoint.d.ts +0 -45
- package/model/webPerformerGeopointList.d.ts +0 -30
- package/model/webTransport.d.ts +0 -24
- package/model/webTransportGeopoint.d.ts +0 -45
- package/model/webTransportGeopointList.d.ts +0 -30
- package/model/webTrip.d.ts +0 -26
- package/model/webTripChart.d.ts +0 -22
- package/model/webTripChartDemand.d.ts +0 -21
- package/model/webTripChartList.d.ts +0 -22
- package/model/workAndRestRules.d.ts +0 -27
- package/param.d.ts +0 -37
- package/provide-api.d.ts +0 -3
- package/variables.d.ts +0 -8
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VRt.Studio [ST]
|
|
3
|
-
*
|
|
4
|
-
* The version of the OpenAPI document: 7.33.3222
|
|
5
|
-
* Contact: support@veeroute.com
|
|
6
|
-
*
|
|
7
|
-
* NOTE: This class is auto generated by OpenAPI Generator.
|
|
8
|
-
* Do not edit the class manually.
|
|
9
|
-
*/
|
|
10
|
-
/* tslint:disable:no-unused-variable member-ordering */
|
|
11
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
12
|
-
import { HttpParams, HttpContext } from '@angular/common/http';
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
import { BASE_PATH } from '../variables';
|
|
15
|
-
import { BaseService } from '../api.base.service';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "@angular/common/http";
|
|
18
|
-
import * as i2 from "../configuration";
|
|
19
|
-
export class LocationsService extends BaseService {
|
|
20
|
-
httpClient;
|
|
21
|
-
constructor(httpClient, basePath, configuration) {
|
|
22
|
-
super(basePath, configuration);
|
|
23
|
-
this.httpClient = httpClient;
|
|
24
|
-
}
|
|
25
|
-
createLocation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
26
|
-
const fileKey = requestParameters?.fileKey;
|
|
27
|
-
if (fileKey === null || fileKey === undefined) {
|
|
28
|
-
throw new Error('Required parameter fileKey was null or undefined when calling createLocation.');
|
|
29
|
-
}
|
|
30
|
-
const locationStudio = requestParameters?.locationStudio;
|
|
31
|
-
if (locationStudio === null || locationStudio === undefined) {
|
|
32
|
-
throw new Error('Required parameter locationStudio was null or undefined when calling createLocation.');
|
|
33
|
-
}
|
|
34
|
-
let localVarHeaders = this.defaultHeaders;
|
|
35
|
-
// authentication (ApiKeyAuth) required
|
|
36
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
37
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
38
|
-
'application/json'
|
|
39
|
-
]);
|
|
40
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
41
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
42
|
-
}
|
|
43
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
44
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
45
|
-
// to determine the Content-Type header
|
|
46
|
-
const consumes = [
|
|
47
|
-
'application/json'
|
|
48
|
-
];
|
|
49
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
50
|
-
if (httpContentTypeSelected !== undefined) {
|
|
51
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
52
|
-
}
|
|
53
|
-
let responseType_ = 'json';
|
|
54
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
55
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
56
|
-
responseType_ = 'text';
|
|
57
|
-
}
|
|
58
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
59
|
-
responseType_ = 'json';
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
responseType_ = 'blob';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations`;
|
|
66
|
-
const { basePath, withCredentials } = this.configuration;
|
|
67
|
-
return this.httpClient.request('post', `${basePath}${localVarPath}`, {
|
|
68
|
-
context: localVarHttpContext,
|
|
69
|
-
body: locationStudio,
|
|
70
|
-
responseType: responseType_,
|
|
71
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
72
|
-
headers: localVarHeaders,
|
|
73
|
-
observe: observe,
|
|
74
|
-
transferCache: localVarTransferCache,
|
|
75
|
-
reportProgress: reportProgress
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
deleteLocation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
79
|
-
const fileKey = requestParameters?.fileKey;
|
|
80
|
-
if (fileKey === null || fileKey === undefined) {
|
|
81
|
-
throw new Error('Required parameter fileKey was null or undefined when calling deleteLocation.');
|
|
82
|
-
}
|
|
83
|
-
const essenceKey = requestParameters?.essenceKey;
|
|
84
|
-
if (essenceKey === null || essenceKey === undefined) {
|
|
85
|
-
throw new Error('Required parameter essenceKey was null or undefined when calling deleteLocation.');
|
|
86
|
-
}
|
|
87
|
-
let localVarHeaders = this.defaultHeaders;
|
|
88
|
-
// authentication (ApiKeyAuth) required
|
|
89
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
90
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
91
|
-
'application/json'
|
|
92
|
-
]);
|
|
93
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
94
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
95
|
-
}
|
|
96
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
97
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
98
|
-
let responseType_ = 'json';
|
|
99
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
100
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
101
|
-
responseType_ = 'text';
|
|
102
|
-
}
|
|
103
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
104
|
-
responseType_ = 'json';
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
responseType_ = 'blob';
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/${this.configuration.encodeParam({ name: "essenceKey", value: essenceKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
111
|
-
const { basePath, withCredentials } = this.configuration;
|
|
112
|
-
return this.httpClient.request('delete', `${basePath}${localVarPath}`, {
|
|
113
|
-
context: localVarHttpContext,
|
|
114
|
-
responseType: responseType_,
|
|
115
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
116
|
-
headers: localVarHeaders,
|
|
117
|
-
observe: observe,
|
|
118
|
-
transferCache: localVarTransferCache,
|
|
119
|
-
reportProgress: reportProgress
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
deleteLocationsBatch(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
123
|
-
const fileKey = requestParameters?.fileKey;
|
|
124
|
-
if (fileKey === null || fileKey === undefined) {
|
|
125
|
-
throw new Error('Required parameter fileKey was null or undefined when calling deleteLocationsBatch.');
|
|
126
|
-
}
|
|
127
|
-
const requestBody = requestParameters?.requestBody;
|
|
128
|
-
if (requestBody === null || requestBody === undefined) {
|
|
129
|
-
throw new Error('Required parameter requestBody was null or undefined when calling deleteLocationsBatch.');
|
|
130
|
-
}
|
|
131
|
-
let localVarHeaders = this.defaultHeaders;
|
|
132
|
-
// authentication (ApiKeyAuth) required
|
|
133
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
134
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
135
|
-
'application/json'
|
|
136
|
-
]);
|
|
137
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
138
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
139
|
-
}
|
|
140
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
141
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
142
|
-
// to determine the Content-Type header
|
|
143
|
-
const consumes = [
|
|
144
|
-
'application/json'
|
|
145
|
-
];
|
|
146
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
147
|
-
if (httpContentTypeSelected !== undefined) {
|
|
148
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
149
|
-
}
|
|
150
|
-
let responseType_ = 'json';
|
|
151
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
152
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
153
|
-
responseType_ = 'text';
|
|
154
|
-
}
|
|
155
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
156
|
-
responseType_ = 'json';
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
responseType_ = 'blob';
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/table`;
|
|
163
|
-
const { basePath, withCredentials } = this.configuration;
|
|
164
|
-
return this.httpClient.request('delete', `${basePath}${localVarPath}`, {
|
|
165
|
-
context: localVarHttpContext,
|
|
166
|
-
body: requestBody,
|
|
167
|
-
responseType: responseType_,
|
|
168
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
169
|
-
headers: localVarHeaders,
|
|
170
|
-
observe: observe,
|
|
171
|
-
transferCache: localVarTransferCache,
|
|
172
|
-
reportProgress: reportProgress
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
readLocation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
176
|
-
const fileKey = requestParameters?.fileKey;
|
|
177
|
-
if (fileKey === null || fileKey === undefined) {
|
|
178
|
-
throw new Error('Required parameter fileKey was null or undefined when calling readLocation.');
|
|
179
|
-
}
|
|
180
|
-
const essenceKey = requestParameters?.essenceKey;
|
|
181
|
-
if (essenceKey === null || essenceKey === undefined) {
|
|
182
|
-
throw new Error('Required parameter essenceKey was null or undefined when calling readLocation.');
|
|
183
|
-
}
|
|
184
|
-
let localVarHeaders = this.defaultHeaders;
|
|
185
|
-
// authentication (ApiKeyAuth) required
|
|
186
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
187
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
188
|
-
'application/json'
|
|
189
|
-
]);
|
|
190
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
191
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
192
|
-
}
|
|
193
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
194
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
195
|
-
let responseType_ = 'json';
|
|
196
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
197
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
198
|
-
responseType_ = 'text';
|
|
199
|
-
}
|
|
200
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
201
|
-
responseType_ = 'json';
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
responseType_ = 'blob';
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/${this.configuration.encodeParam({ name: "essenceKey", value: essenceKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
|
|
208
|
-
const { basePath, withCredentials } = this.configuration;
|
|
209
|
-
return this.httpClient.request('get', `${basePath}${localVarPath}`, {
|
|
210
|
-
context: localVarHttpContext,
|
|
211
|
-
responseType: responseType_,
|
|
212
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
213
|
-
headers: localVarHeaders,
|
|
214
|
-
observe: observe,
|
|
215
|
-
transferCache: localVarTransferCache,
|
|
216
|
-
reportProgress: reportProgress
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
readLocationsGeopoints(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
220
|
-
const fileKey = requestParameters?.fileKey;
|
|
221
|
-
if (fileKey === null || fileKey === undefined) {
|
|
222
|
-
throw new Error('Required parameter fileKey was null or undefined when calling readLocationsGeopoints.');
|
|
223
|
-
}
|
|
224
|
-
const offset = requestParameters?.offset;
|
|
225
|
-
const limit = requestParameters?.limit;
|
|
226
|
-
const tableLocationFilterListStudio = requestParameters?.tableLocationFilterListStudio;
|
|
227
|
-
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
228
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, 'offset');
|
|
229
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
|
|
230
|
-
let localVarHeaders = this.defaultHeaders;
|
|
231
|
-
// authentication (ApiKeyAuth) required
|
|
232
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
233
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
234
|
-
'application/json'
|
|
235
|
-
]);
|
|
236
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
237
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
238
|
-
}
|
|
239
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
240
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
241
|
-
// to determine the Content-Type header
|
|
242
|
-
const consumes = [
|
|
243
|
-
'application/json'
|
|
244
|
-
];
|
|
245
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
246
|
-
if (httpContentTypeSelected !== undefined) {
|
|
247
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
248
|
-
}
|
|
249
|
-
let responseType_ = 'json';
|
|
250
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
251
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
252
|
-
responseType_ = 'text';
|
|
253
|
-
}
|
|
254
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
255
|
-
responseType_ = 'json';
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
responseType_ = 'blob';
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/geopoints`;
|
|
262
|
-
const { basePath, withCredentials } = this.configuration;
|
|
263
|
-
return this.httpClient.request('post', `${basePath}${localVarPath}`, {
|
|
264
|
-
context: localVarHttpContext,
|
|
265
|
-
body: tableLocationFilterListStudio,
|
|
266
|
-
params: localVarQueryParameters,
|
|
267
|
-
responseType: responseType_,
|
|
268
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
269
|
-
headers: localVarHeaders,
|
|
270
|
-
observe: observe,
|
|
271
|
-
transferCache: localVarTransferCache,
|
|
272
|
-
reportProgress: reportProgress
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
readLocationsMetrics(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
276
|
-
const fileKey = requestParameters?.fileKey;
|
|
277
|
-
if (fileKey === null || fileKey === undefined) {
|
|
278
|
-
throw new Error('Required parameter fileKey was null or undefined when calling readLocationsMetrics.');
|
|
279
|
-
}
|
|
280
|
-
const tableLocationMetricsFilterListStudio = requestParameters?.tableLocationMetricsFilterListStudio;
|
|
281
|
-
if (tableLocationMetricsFilterListStudio === null || tableLocationMetricsFilterListStudio === undefined) {
|
|
282
|
-
throw new Error('Required parameter tableLocationMetricsFilterListStudio was null or undefined when calling readLocationsMetrics.');
|
|
283
|
-
}
|
|
284
|
-
let localVarHeaders = this.defaultHeaders;
|
|
285
|
-
// authentication (ApiKeyAuth) required
|
|
286
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
287
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
288
|
-
'application/json'
|
|
289
|
-
]);
|
|
290
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
291
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
292
|
-
}
|
|
293
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
294
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
295
|
-
// to determine the Content-Type header
|
|
296
|
-
const consumes = [
|
|
297
|
-
'application/json'
|
|
298
|
-
];
|
|
299
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
300
|
-
if (httpContentTypeSelected !== undefined) {
|
|
301
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
302
|
-
}
|
|
303
|
-
let responseType_ = 'json';
|
|
304
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
305
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
306
|
-
responseType_ = 'text';
|
|
307
|
-
}
|
|
308
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
309
|
-
responseType_ = 'json';
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
responseType_ = 'blob';
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/metrics`;
|
|
316
|
-
const { basePath, withCredentials } = this.configuration;
|
|
317
|
-
return this.httpClient.request('post', `${basePath}${localVarPath}`, {
|
|
318
|
-
context: localVarHttpContext,
|
|
319
|
-
body: tableLocationMetricsFilterListStudio,
|
|
320
|
-
responseType: responseType_,
|
|
321
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
322
|
-
headers: localVarHeaders,
|
|
323
|
-
observe: observe,
|
|
324
|
-
transferCache: localVarTransferCache,
|
|
325
|
-
reportProgress: reportProgress
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
readLocationsTable(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
329
|
-
const fileKey = requestParameters?.fileKey;
|
|
330
|
-
if (fileKey === null || fileKey === undefined) {
|
|
331
|
-
throw new Error('Required parameter fileKey was null or undefined when calling readLocationsTable.');
|
|
332
|
-
}
|
|
333
|
-
const offset = requestParameters?.offset;
|
|
334
|
-
const limit = requestParameters?.limit;
|
|
335
|
-
const sortField = requestParameters?.sortField;
|
|
336
|
-
const sortCustomfield = requestParameters?.sortCustomfield;
|
|
337
|
-
const sortDirection = requestParameters?.sortDirection;
|
|
338
|
-
const tableLocationFilterListStudio = requestParameters?.tableLocationFilterListStudio;
|
|
339
|
-
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
340
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, 'offset');
|
|
341
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
|
|
342
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortField, 'sort_field');
|
|
343
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortCustomfield, 'sort_customfield');
|
|
344
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortDirection, 'sort_direction');
|
|
345
|
-
let localVarHeaders = this.defaultHeaders;
|
|
346
|
-
// authentication (ApiKeyAuth) required
|
|
347
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
348
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
349
|
-
'application/json'
|
|
350
|
-
]);
|
|
351
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
352
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
353
|
-
}
|
|
354
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
355
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
356
|
-
// to determine the Content-Type header
|
|
357
|
-
const consumes = [
|
|
358
|
-
'application/json'
|
|
359
|
-
];
|
|
360
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
361
|
-
if (httpContentTypeSelected !== undefined) {
|
|
362
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
363
|
-
}
|
|
364
|
-
let responseType_ = 'json';
|
|
365
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
366
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
367
|
-
responseType_ = 'text';
|
|
368
|
-
}
|
|
369
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
370
|
-
responseType_ = 'json';
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
responseType_ = 'blob';
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/table`;
|
|
377
|
-
const { basePath, withCredentials } = this.configuration;
|
|
378
|
-
return this.httpClient.request('post', `${basePath}${localVarPath}`, {
|
|
379
|
-
context: localVarHttpContext,
|
|
380
|
-
body: tableLocationFilterListStudio,
|
|
381
|
-
params: localVarQueryParameters,
|
|
382
|
-
responseType: responseType_,
|
|
383
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
384
|
-
headers: localVarHeaders,
|
|
385
|
-
observe: observe,
|
|
386
|
-
transferCache: localVarTransferCache,
|
|
387
|
-
reportProgress: reportProgress
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
updateLocation(requestParameters, observe = 'body', reportProgress = false, options) {
|
|
391
|
-
const fileKey = requestParameters?.fileKey;
|
|
392
|
-
if (fileKey === null || fileKey === undefined) {
|
|
393
|
-
throw new Error('Required parameter fileKey was null or undefined when calling updateLocation.');
|
|
394
|
-
}
|
|
395
|
-
const locationStudio = requestParameters?.locationStudio;
|
|
396
|
-
if (locationStudio === null || locationStudio === undefined) {
|
|
397
|
-
throw new Error('Required parameter locationStudio was null or undefined when calling updateLocation.');
|
|
398
|
-
}
|
|
399
|
-
let localVarHeaders = this.defaultHeaders;
|
|
400
|
-
// authentication (ApiKeyAuth) required
|
|
401
|
-
localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
|
|
402
|
-
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
|
403
|
-
'application/json'
|
|
404
|
-
]);
|
|
405
|
-
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
406
|
-
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
407
|
-
}
|
|
408
|
-
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
409
|
-
const localVarTransferCache = options?.transferCache ?? true;
|
|
410
|
-
// to determine the Content-Type header
|
|
411
|
-
const consumes = [
|
|
412
|
-
'application/json'
|
|
413
|
-
];
|
|
414
|
-
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
415
|
-
if (httpContentTypeSelected !== undefined) {
|
|
416
|
-
localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
|
|
417
|
-
}
|
|
418
|
-
let responseType_ = 'json';
|
|
419
|
-
if (localVarHttpHeaderAcceptSelected) {
|
|
420
|
-
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
421
|
-
responseType_ = 'text';
|
|
422
|
-
}
|
|
423
|
-
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
424
|
-
responseType_ = 'json';
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
responseType_ = 'blob';
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations`;
|
|
431
|
-
const { basePath, withCredentials } = this.configuration;
|
|
432
|
-
return this.httpClient.request('put', `${basePath}${localVarPath}`, {
|
|
433
|
-
context: localVarHttpContext,
|
|
434
|
-
body: locationStudio,
|
|
435
|
-
responseType: responseType_,
|
|
436
|
-
...(withCredentials ? { withCredentials } : {}),
|
|
437
|
-
headers: localVarHeaders,
|
|
438
|
-
observe: observe,
|
|
439
|
-
transferCache: localVarTransferCache,
|
|
440
|
-
reportProgress: reportProgress
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
444
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, providedIn: 'root' });
|
|
445
|
-
}
|
|
446
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, decorators: [{
|
|
447
|
-
type: Injectable,
|
|
448
|
-
args: [{
|
|
449
|
-
providedIn: 'root'
|
|
450
|
-
}]
|
|
451
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
452
|
-
type: Optional
|
|
453
|
-
}, {
|
|
454
|
-
type: Inject,
|
|
455
|
-
args: [BASE_PATH]
|
|
456
|
-
}] }, { type: i2.Configuration, decorators: [{
|
|
457
|
-
type: Optional
|
|
458
|
-
}] }] });
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9sb2NhdGlvbnNTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUEyQixVQUFVLEVBQ1UsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBbUM1QyxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWtCbEQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFFdkI7SUFBdEIsWUFBc0IsVUFBc0IsRUFBaUMsUUFBeUIsRUFBYyxhQUE2QjtRQUM3SSxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRGIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUU1QyxDQUFDO0lBWU0sY0FBYyxDQUFDLGlCQUE4QyxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBaUc7UUFDM04sTUFBTSxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1FBQzNDLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxjQUFjLENBQUM7UUFDekQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDNUcsQ0FB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QU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLGNBQWM7WUFDcEIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt3R0E3a0JRLGdCQUFnQiw0Q0FFeUMsU0FBUzs0R0FGbEUsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR2tELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjMzLjMyMjJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDAnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwMlN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDInO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwM1N0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwNFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDQnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQyOVN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MjknO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDUwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw1MDAnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTG9jYXRpb25TdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9sb2NhdGlvbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUYWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC90YWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkNvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC90YWJsZUxvY2F0aW9uQ29sdW1uVHlwZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL3RhYmxlTG9jYXRpb25GaWx0ZXJMaXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25MaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbkxpc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbk1ldHJpY3MnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgV2ViTG9jYXRpb25HZW9wb2ludExpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC93ZWJMb2NhdGlvbkdlb3BvaW50TGlzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBXZWJMb2NhdGlvblN0dWRpbyB9IGZyb20gJy4uL21vZGVsL3dlYkxvY2F0aW9uJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uL2FwaS5iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcyxcbiAgICBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsXG4gICAgRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLFxuICAgIFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMsXG4gICAgUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsXG4gICAgUmVhZExvY2F0aW9uc01ldHJpY3NSZXF1ZXN0UGFyYW1zLFxuICAgIFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsXG4gICAgVXBkYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zXG59IGZyb20gJy4vbG9jYXRpb25zU2VydmljZUludGVyZmFjZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhdGlvbnNTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoYmFzZVBhdGgsIGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBsb2NhdGlvblxuICAgICAqIENyZWF0ZSBsb2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIGNyZWF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyBjcmVhdGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIGNyZWF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb25TdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8ubG9jYXRpb25TdHVkaW87XG4gICAgICAgIGlmIChsb2NhdGlvblN0dWRpbyA9PT0gbnVsbCB8fCBsb2NhdGlvblN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsb2NhdGlvblN0dWRpbyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZmlsZUtleVwiLCB2YWx1ZTogZmlsZUtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9sb2NhdGlvbnNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uU3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBsb2NhdGlvblN0dWRpbyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICAuLi4od2l0aENyZWRlbnRpYWxzID8geyB3aXRoQ3JlZGVudGlhbHMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGxvY2F0aW9uXG4gICAgICogUmVtb3ZpbmcgYSBsb2NhdGlvbiBieSBrZXkuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+O1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+O1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZpbGVLZXk7XG4gICAgICAgIGlmIChmaWxlS2V5ID09PSBudWxsIHx8IGZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZmlsZUtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRlbGV0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVzc2VuY2VLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZXNzZW5jZUtleTtcbiAgICAgICAgaWYgKGVzc2VuY2VLZXkgPT09IG51bGwgfHwgZXNzZW5jZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlc3NlbmNlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImVzc2VuY2VLZXlcIiwgdmFsdWU6IGVzc2VuY2VLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgY29uc3QgeyBiYXNlUGF0aCwgd2l0aENyZWRlbnRpYWxzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxhbnk+KCdkZWxldGUnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBsb2NhdGlvbnMgKGJhdGNoKVxuICAgICAqIFJlbW92aW5nIGxvY2F0aW9ucyBmcm9tIHRoZSBmaWxlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbnNCYXRjaChyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHVibGljIGRlbGV0ZUxvY2F0aW9uc0JhdGNoKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvbnNCYXRjaFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb25zQmF0Y2gocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb25zQmF0Y2gocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVMb2NhdGlvbnNCYXRjaC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5yZXF1ZXN0Qm9keTtcbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ID09PSBudWxsIHx8IHJlcXVlc3RCb2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHJlcXVlc3RCb2R5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlTG9jYXRpb25zQmF0Y2guJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy9iYXRjaC90YWJsZWA7XG4gICAgICAgIGNvbnN0IHsgYmFzZVBhdGgsIHdpdGhDcmVkZW50aWFscyB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8YW55PignZGVsZXRlJywgYCR7YmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGxvY2F0aW9uXG4gICAgICogR2V0dGluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBieSBrZXkuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhZExvY2F0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVzc2VuY2VLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZXNzZW5jZUtleTtcbiAgICAgICAgaWYgKGVzc2VuY2VLZXkgPT09IG51bGwgfHwgZXNzZW5jZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlc3NlbmNlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhZExvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJlc3NlbmNlS2V5XCIsIHZhbHVlOiBlc3NlbmNlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIGNvbnN0IHsgYmFzZVBhdGgsIHdpdGhDcmVkZW50aWFscyB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8V2ViTG9jYXRpb25TdHVkaW8+KCdnZXQnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9uIGdlb3BvaW50c1xuICAgICAqIEdldHRpbmcgYSBnZW9wb2ludHMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRMb2NhdGlvbnNHZW9wb2ludHMocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNHZW9wb2ludHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc0dlb3BvaW50cyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvbkdlb3BvaW50TGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zR2VvcG9pbnRzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zR2VvcG9pbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXZWJMb2NhdGlvbkdlb3BvaW50TGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zR2VvcG9pbnRzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zR2VvcG9pbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zR2VvcG9pbnRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgPGFueT5vZmZzZXQsICdvZmZzZXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy9iYXRjaC9nZW9wb2ludHNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2NhdGlvbiBtZXRyaWNzXG4gICAgICogQ2FsY3VsYXRlIGdlbmVyYWwgbWV0cmljcyBmb3Igc2VsZWN0ZWQgbG9jYXRpb25zLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zTWV0cmljcyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc01ldHJpY3NSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc01ldHJpY3MocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNNZXRyaWNzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPj47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbnNNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VGFibGVMb2NhdGlvbk1ldHJpY3NTdHVkaW8+PjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc01ldHJpY3MocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNNZXRyaWNzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zTWV0cmljcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8udGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvO1xuICAgICAgICBpZiAodGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvID09PSBudWxsIHx8IHRhYmxlTG9jYXRpb25NZXRyaWNzRmlsdGVyTGlzdFN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zTWV0cmljcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycygnQXBpS2V5QXV0aCcsICdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJIZWFkZXJzLCAnQmVhcmVyICcpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zL2JhdGNoL21ldHJpY3NgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9ucyBsaXN0XG4gICAgICogR2V0dGluZyBhIGxvY2F0aW9ucyBsaXN0LlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8VGFibGVMb2NhdGlvbkxpc3RTdHVkaW8+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUYWJsZUxvY2F0aW9uTGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VGFibGVMb2NhdGlvbkxpc3RTdHVkaW8+PjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc1RhYmxlKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zVGFibGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZpbGVLZXk7XG4gICAgICAgIGlmIChmaWxlS2V5ID09PSBudWxsIHx8IGZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZmlsZUtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlYWRMb2NhdGlvbnNUYWJsZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgICAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNvcnRGaWVsZDtcbiAgICAgICAgY29uc3Qgc29ydEN1c3RvbWZpZWxkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNvcnRDdXN0b21maWVsZDtcbiAgICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0RGlyZWN0aW9uO1xuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgPGFueT5vZmZzZXQsICdvZmZzZXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnRGaWVsZCwgJ3NvcnRfZmllbGQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnRDdXN0b21maWVsZCwgJ3NvcnRfY3VzdG9tZmllbGQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnREaXJlY3Rpb24sICdzb3J0X2RpcmVjdGlvbicpO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycygnQXBpS2V5QXV0aCcsICdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJIZWFkZXJzLCAnQmVhcmVyICcpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zL2JhdGNoL3RhYmxlYDtcbiAgICAgICAgY29uc3QgeyBiYXNlUGF0aCwgd2l0aENyZWRlbnRpYWxzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxUYWJsZUxvY2F0aW9uTGlzdFN0dWRpbz4oJ3Bvc3QnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8sXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICAuLi4od2l0aENyZWRlbnRpYWxzID8geyB3aXRoQ3JlZGVudGlhbHMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGxvY2F0aW9uXG4gICAgICogVXBkYXRpbmcgdGhlIGxvY2F0aW9uIGJ5IGtleS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFVwZGF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyB1cGRhdGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogVXBkYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb25TdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8ubG9jYXRpb25TdHVkaW87XG4gICAgICAgIGlmIChsb2NhdGlvblN0dWRpbyA9PT0gbnVsbCB8fCBsb2NhdGlvblN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsb2NhdGlvblN0dWRpbyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwZGF0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZmlsZUtleVwiLCB2YWx1ZTogZmlsZUtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9sb2NhdGlvbnNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uU3R1ZGlvPigncHV0JywgYCR7YmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGxvY2F0aW9uU3R1ZGlvLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zU2VydmljZUludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9sb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjMzLjMyMjJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBHZW5lcmFsNDAwU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IEdlbmVyYWw0MDJTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDQwM1N0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBHZW5lcmFsNDA0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IEdlbmVyYWw0MjlTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDUwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBUYWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkNvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkxpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFdlYkxvY2F0aW9uU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcblxuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBsb2NhdGlvblN0dWRpbzogTG9jYXRpb25TdHVkaW87XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgZXNzZW5jZUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcyB7XG4gICAgZmlsZUtleTogc3RyaW5nO1xuICAgIHJlcXVlc3RCb2R5OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBlc3NlbmNlS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8/OiBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW86IFRhYmxlTG9jYXRpb25NZXRyaWNzRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkTG9jYXRpb25zVGFibGVSZXF1ZXN0UGFyYW1zIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIHNvcnRGaWVsZD86IFRhYmxlTG9jYXRpb25Db2x1bW5UeXBlU3R1ZGlvO1xuICAgIHNvcnRDdXN0b21maWVsZD86IFRhYmxlQ3VzdG9tZmllbGRzQ29sdW1uVHlwZVN0dWRpbztcbiAgICBzb3J0RGlyZWN0aW9uPzogJ0FTQycgfCAnREVTQyc7XG4gICAgdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8/OiBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBsb2NhdGlvblN0dWRpbzogTG9jYXRpb25TdHVkaW87XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnM7XG4gICAgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBsb2NhdGlvblxuICAgICAqIENyZWF0ZSBsb2NhdGlvbi5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgY3JlYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8V2ViTG9jYXRpb25TdHVkaW8+O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGxvY2F0aW9uXG4gICAgICogUmVtb3ZpbmcgYSBsb2NhdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIGRlbGV0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPHt9PjtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBsb2NhdGlvbnMgKGJhdGNoKVxuICAgICAqIFJlbW92aW5nIGxvY2F0aW9ucyBmcm9tIHRoZSBmaWxlLlxuKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBkZWxldGVMb2NhdGlvbnNCYXRjaChyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTx7fT47XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGxvY2F0aW9uXG4gICAgICogR2V0dGluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8V2ViTG9jYXRpb25TdHVkaW8+O1xuXG4gICAgLyoqXG4gICAgICogTG9jYXRpb24gZ2VvcG9pbnRzXG4gICAgICogR2V0dGluZyBhIGdlb3BvaW50cy5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcmVhZExvY2F0aW9uc0dlb3BvaW50cyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9uIG1ldHJpY3NcbiAgICAgKiBDYWxjdWxhdGUgZ2VuZXJhbCBtZXRyaWNzIGZvciBzZWxlY3RlZCBsb2NhdGlvbnMuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHJlYWRMb2NhdGlvbnNNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9ucyBsaXN0XG4gICAgICogR2V0dGluZyBhIGxvY2F0aW9ucyBsaXN0LlxuKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25MaXN0U3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsb2NhdGlvblxuICAgICAqIFVwZGF0aW5nIHRoZSBsb2NhdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uU3R1ZGlvPjtcblxufVxuIl19
|