From a9d56ebfbdbc4d333c535393a1f3ea7885985dd4 Mon Sep 17 00:00:00 2001 From: QI Mingxuan Date: Mon, 18 May 2026 09:17:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E5=9F=BA=E7=A1=80=E8=AE=BE?= =?UTF-8?q?=E6=96=BDXP.Common=E6=96=B0=E5=A2=9E=20ImageHistogramControl=20?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E7=81=B0=E5=BA=A6=E7=9B=B4=E6=96=B9=E5=9B=BE?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=8E=A7=E4=BB=B6=EF=BC=88=E4=BD=BF=E7=94=A8?= =?UTF-8?q?SixLabors.ImageSharp=203.1.12=EF=BC=89=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20Image=20=E5=92=8C=20byte[]=20=E8=BE=93?= =?UTF-8?q?=E5=85=A5=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E8=B0=83=E7=94=A8=EF=BC=8CTelerik=20RadChartView=20=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controls/ImageHistogram/ChartRenderer.cs | 245 +++ .../Controls/ImageHistogram/FrameThrottler.cs | 207 +++ .../ImageHistogram/HistogramEngine.cs | 211 +++ .../ImageHistogram/ImageHistogramControl.xaml | 36 + .../ImageHistogramControl.xaml.cs | 331 ++++ XP.Common/XP.Common.csproj | 1 + .../XP.Hardware.Detector.deps.json | 1378 ++++++++++++++++- 7 files changed, 2408 insertions(+), 1 deletion(-) create mode 100644 XP.Common/Controls/ImageHistogram/ChartRenderer.cs create mode 100644 XP.Common/Controls/ImageHistogram/FrameThrottler.cs create mode 100644 XP.Common/Controls/ImageHistogram/HistogramEngine.cs create mode 100644 XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml create mode 100644 XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs diff --git a/XP.Common/Controls/ImageHistogram/ChartRenderer.cs b/XP.Common/Controls/ImageHistogram/ChartRenderer.cs new file mode 100644 index 0000000..bf242a4 --- /dev/null +++ b/XP.Common/Controls/ImageHistogram/ChartRenderer.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Telerik.Windows.Controls; +using Telerik.Windows.Controls.ChartView; + +namespace XP.Common.Controls.ImageHistogram +{ + /// + /// RadChartView 渲染适配器 | RadChartView rendering adapter + /// 负责将直方图频次数据渲染到 Telerik RadCartesianChart 控件 + /// + internal sealed class ChartRenderer + { + private readonly RadCartesianChart _chart; + private readonly BarSeries _barSeries; + private readonly LinearAxis _xAxis; + + /// + /// 16 位数据聚合因子 | 16-bit data aggregation factor + /// + private const int AggregationFactor = 256; + + /// + /// 构造函数,接收 RadCartesianChart 实例 | Constructor, receives RadCartesianChart instance + /// + /// 图表控件实例 | Chart control instance + /// 柱状图系列 | Bar series + /// X 轴 | X axis + public ChartRenderer(RadCartesianChart chart, BarSeries barSeries, LinearAxis xAxis) + { + _chart = chart ?? throw new ArgumentNullException(nameof(chart)); + _barSeries = barSeries ?? throw new ArgumentNullException(nameof(barSeries)); + _xAxis = xAxis ?? throw new ArgumentNullException(nameof(xAxis)); + } + + /// + /// 更新直方图数据 | Update histogram data + /// + /// 频次数组(256 或 65536 长度)| Frequency array (256 or 65536 length) + /// 是否使用对数 Y 轴 | Whether to use logarithmic Y axis + public void UpdateData(long[] histogram, bool isLogarithmic) + { + if (histogram == null || histogram.Length == 0) + return; + + // 确定是否需要聚合(16 位数据)| Determine if aggregation needed (16-bit data) + long[] displayData; + int xAxisMax; + + if (histogram.Length == 65536) + { + // 16 位数据聚合为 256 个柱体 | Aggregate 16-bit data to 256 bars + displayData = Aggregate16BitHistogram(histogram); + xAxisMax = 65535; + } + else + { + // 8 位数据直接显示 | Display 8-bit data directly + displayData = histogram; + xAxisMax = 255; + } + + // 设置 X 轴范围 | Set X axis range + _xAxis.Minimum = 0; + _xAxis.Maximum = xAxisMax; + + // 构建数据点 | Build data points + var dataPoints = new List(); + + if (isLogarithmic) + { + // 对数模式:频次为 0 的不绘制 | Logarithmic mode: skip zero frequency + for (int i = 0; i < displayData.Length; i++) + { + if (displayData[i] > 0) + { + double xValue = histogram.Length == 65536 + ? i * AggregationFactor + AggregationFactor / 2.0 + : i; + dataPoints.Add(new HistogramDataPoint + { + GrayLevel = xValue, + Frequency = displayData[i] + }); + } + } + } + else + { + // 线性模式:所有灰度级别都绘制 | Linear mode: draw all gray levels + for (int i = 0; i < displayData.Length; i++) + { + double xValue = histogram.Length == 65536 + ? i * AggregationFactor + AggregationFactor / 2.0 + : i; + dataPoints.Add(new HistogramDataPoint + { + GrayLevel = xValue, + Frequency = displayData[i] + }); + } + } + + // 更新图表数据 | Update chart data + _barSeries.ItemsSource = dataPoints; + + // 设置 Y 轴范围 | Set Y axis range + UpdateYAxis(displayData, isLogarithmic); + } + + /// + /// 清空图表,恢复初始状态 | Clear chart, restore initial state + /// + public void Clear() + { + _barSeries.ItemsSource = null; + + // X 轴范围重置为 0-255 | Reset X axis range to 0-255 + _xAxis.Minimum = 0; + _xAxis.Maximum = 255; + + // Y 轴范围重置为 0-1 | Reset Y axis range to 0-1 + SetYAxisRange(0, 1, isLogarithmic: false); + } + + /// + /// 获取当前数据点数量 | Get current data point count + /// + public int DataPointCount + { + get + { + if (_barSeries.ItemsSource is ICollection collection) + return collection.Count; + if (_barSeries.ItemsSource is IEnumerable enumerable) + return enumerable.Count(); + return 0; + } + } + + /// + /// 将 65536 长度的频次数组聚合为 256 个柱体 | Aggregate 65536-length array to 256 bars + /// + private static long[] Aggregate16BitHistogram(long[] histogram) + { + var aggregated = new long[256]; + for (int i = 0; i < 256; i++) + { + long sum = 0; + int startIndex = i * AggregationFactor; + for (int j = 0; j < AggregationFactor; j++) + { + sum += histogram[startIndex + j]; + } + aggregated[i] = sum; + } + return aggregated; + } + + /// + /// 更新 Y 轴范围 | Update Y axis range + /// + private void UpdateYAxis(long[] displayData, bool isLogarithmic) + { + long maxValue = 0; + for (int i = 0; i < displayData.Length; i++) + { + if (displayData[i] > maxValue) + maxValue = displayData[i]; + } + + if (maxValue == 0) + maxValue = 1; + + SetYAxisRange(0, maxValue, isLogarithmic); + } + + /// + /// 设置 Y 轴范围和刻度类型 | Set Y axis range and scale type + /// + private void SetYAxisRange(double minimum, double maximum, bool isLogarithmic) + { + // 获取或创建 Y 轴 | Get or create Y axis + var verticalAxis = _chart.VerticalAxis; + + if (isLogarithmic) + { + // 对数刻度 | Logarithmic scale + if (verticalAxis is LogarithmicAxis logAxis) + { + logAxis.Minimum = 1; + logAxis.Maximum = maximum; + logAxis.LogarithmBase = 10; + } + else + { + // 需要切换为对数轴 | Need to switch to logarithmic axis + var newLogAxis = new LogarithmicAxis + { + Minimum = 1, + Maximum = maximum, + LogarithmBase = 10 + }; + _chart.VerticalAxis = newLogAxis; + } + } + else + { + // 线性刻度 | Linear scale + if (verticalAxis is LinearAxis linearAxis) + { + linearAxis.Minimum = minimum; + linearAxis.Maximum = maximum; + } + else + { + // 需要切换为线性轴 | Need to switch to linear axis + var newLinearAxis = new LinearAxis + { + Minimum = minimum, + Maximum = maximum + }; + _chart.VerticalAxis = newLinearAxis; + } + } + } + } + + /// + /// 直方图数据点模型 | Histogram data point model + /// + internal class HistogramDataPoint + { + /// + /// 灰度级别(X 轴值)| Gray level (X axis value) + /// + public double GrayLevel { get; set; } + + /// + /// 像素频次(Y 轴值)| Pixel frequency (Y axis value) + /// + public long Frequency { get; set; } + } +} diff --git a/XP.Common/Controls/ImageHistogram/FrameThrottler.cs b/XP.Common/Controls/ImageHistogram/FrameThrottler.cs new file mode 100644 index 0000000..bb3c598 --- /dev/null +++ b/XP.Common/Controls/ImageHistogram/FrameThrottler.cs @@ -0,0 +1,207 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace XP.Common.Controls.ImageHistogram +{ + /// + /// 帧率限流器,确保计算频率不超过 MaxFrameRate | Frame rate throttler + /// 支持从任意线程调用,使用 lock 保护内部状态 + /// + internal sealed class FrameThrottler : IDisposable + { + private readonly object _lock = new(); + private DateTime _lastProcessTime = DateTime.MinValue; + private Action? _pendingAction; + private CancellationTokenSource? _delayCts; + private bool _isProcessing; + private bool _disposed; + private int _maxFrameRate = 15; + + /// + /// 最大刷新帧率(fps),有效范围 1-60,超出范围自动钳位 | Max frame rate (fps), valid range 1-60, auto-clamped + /// + public int MaxFrameRate + { + get => _maxFrameRate; + set => _maxFrameRate = Math.Clamp(value, 1, 60); + } + + /// + /// 获取当前帧间隔(毫秒)| Get current frame interval (ms) + /// + private double FrameIntervalMs => 1000.0 / _maxFrameRate; + + /// + /// 提交一帧计算动作 | Submit a frame compute action + /// 若未超过帧率限制则立即执行,否则缓存最新帧并延迟触发 + /// + /// 计算动作 | Compute action + /// 是否被立即接受处理 | Whether it was immediately accepted + public bool TrySubmit(Action computeAction) + { + if (_disposed || computeAction == null) + return false; + + lock (_lock) + { + var now = DateTime.UtcNow; + var elapsed = (now - _lastProcessTime).TotalMilliseconds; + + if (elapsed >= FrameIntervalMs && !_isProcessing) + { + // 已超过间隔且无正在处理的任务,立即执行 | Interval exceeded and no processing, execute immediately + _isProcessing = true; + _lastProcessTime = now; + ExecuteAction(computeAction); + return true; + } + else + { + // 未超过间隔或正在处理中,缓存最新帧(丢弃之前的中间帧)| Cache latest frame, discard previous + _pendingAction = computeAction; + ScheduleDelayedExecution(elapsed); + return false; + } + } + } + + /// + /// 执行计算动作(异步,完成后检查待处理帧)| Execute compute action asynchronously + /// + private void ExecuteAction(Action action) + { + Task.Run(() => + { + try + { + action.Invoke(); + } + catch + { + // 异常不外抛 | Do not propagate exceptions + } + finally + { + OnActionCompleted(); + } + }); + } + + /// + /// 计算动作完成后的回调 | Callback after compute action completes + /// + private void OnActionCompleted() + { + Action? nextAction = null; + + lock (_lock) + { + _isProcessing = false; + + if (_pendingAction != null && !_disposed) + { + var now = DateTime.UtcNow; + var elapsed = (now - _lastProcessTime).TotalMilliseconds; + + if (elapsed >= FrameIntervalMs) + { + // 间隔已到,立即执行待处理帧 | Interval reached, execute pending frame + nextAction = _pendingAction; + _pendingAction = null; + _isProcessing = true; + _lastProcessTime = now; + } + // 否则等待延迟触发 | Otherwise wait for delayed trigger + } + } + + if (nextAction != null) + { + ExecuteAction(nextAction); + } + } + + /// + /// 安排延迟执行(等待帧间隔到期后处理最新帧)| Schedule delayed execution + /// + private void ScheduleDelayedExecution(double elapsedMs) + { + // 取消之前的延迟任务 | Cancel previous delay task + _delayCts?.Cancel(); + _delayCts?.Dispose(); + _delayCts = new CancellationTokenSource(); + var token = _delayCts.Token; + + var delayMs = Math.Max(0, FrameIntervalMs - elapsedMs); + + Task.Run(async () => + { + try + { + await Task.Delay((int)delayMs, token); + + if (token.IsCancellationRequested) + return; + + Action? actionToExecute = null; + + lock (_lock) + { + if (_pendingAction != null && !_isProcessing && !_disposed) + { + actionToExecute = _pendingAction; + _pendingAction = null; + _isProcessing = true; + _lastProcessTime = DateTime.UtcNow; + } + } + + if (actionToExecute != null) + { + ExecuteAction(actionToExecute); + } + } + catch (OperationCanceledException) + { + // 延迟被取消,正常情况 | Delay cancelled, normal case + } + catch + { + // 异常不外抛 | Do not propagate exceptions + } + }); + } + + /// + /// 取消所有待处理任务 | Cancel all pending tasks + /// + public void Cancel() + { + lock (_lock) + { + _pendingAction = null; + _delayCts?.Cancel(); + _delayCts?.Dispose(); + _delayCts = null; + } + } + + /// + /// 释放所有资源 | Dispose all resources + /// + public void Dispose() + { + if (_disposed) return; + _disposed = true; + + lock (_lock) + { + _pendingAction = null; + _delayCts?.Cancel(); + _delayCts?.Dispose(); + _delayCts = null; + } + } + } +} diff --git a/XP.Common/Controls/ImageHistogram/HistogramEngine.cs b/XP.Common/Controls/ImageHistogram/HistogramEngine.cs new file mode 100644 index 0000000..cafa8c7 --- /dev/null +++ b/XP.Common/Controls/ImageHistogram/HistogramEngine.cs @@ -0,0 +1,211 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; + +namespace XP.Common.Controls.ImageHistogram +{ + /// + /// 直方图后台计算引擎 | Histogram background computation engine + /// 负责在后台线程中执行灰度值遍历和统计计算 + /// + internal sealed class HistogramEngine : IDisposable + { + /// + /// 单帧计算超时时间(毫秒)| Single frame computation timeout (ms) + /// + private const int ComputeTimeoutMs = 5000; + + private CancellationTokenSource? _timeoutCts; + private readonly object _lock = new(); + private bool _disposed; + + /// + /// 从 Image<Rgba32> 计算灰度直方图 | Compute histogram from Image<Rgba32> + /// 使用 ITU-R BT.601 亮度公式:Gray = 0.299R + 0.587G + 0.114B + /// + /// 输入图像 | Input image + /// 取消令牌 | Cancellation token + /// 256 长度的频次数组,失败返回 null | 256-length frequency array, null on failure + public Task ComputeAsync(Image image, CancellationToken ct) + { + if (image == null) + return Task.FromResult(null); + + // 创建超时令牌 | Create timeout token + var linkedCts = CreateLinkedTimeoutToken(ct); + var linkedToken = linkedCts.Token; + + return Task.Run(() => + { + try + { + var width = image.Width; + var height = image.Height; + var histogram = new long[256]; + + // 遍历像素,使用亮度公式计算灰度值 | Iterate pixels, compute grayscale using luminance formula + for (int y = 0; y < height; y++) + { + linkedToken.ThrowIfCancellationRequested(); + + for (int x = 0; x < width; x++) + { + var pixel = image[x, y]; + // ITU-R BT.601 亮度公式 | ITU-R BT.601 luminance formula + var gray = (int)(0.299 * pixel.R + 0.587 * pixel.G + 0.114 * pixel.B); + // 钳位到 0-255 范围 | Clamp to 0-255 range + gray = Math.Clamp(gray, 0, 255); + histogram[gray]++; + } + } + + return (long[]?)histogram; + } + catch (OperationCanceledException) + { + // 超时或取消,返回 null | Timeout or cancelled, return null + return null; + } + catch + { + // 所有异常内部捕获,不向外抛出 | Catch all exceptions internally + return null; + } + finally + { + linkedCts.Dispose(); + } + }, linkedToken); + } + + /// + /// 从原始字节数组计算灰度直方图 | Compute histogram from raw byte array + /// + /// 原始像素数据 | Raw pixel data + /// 图像宽度 | Image width + /// 图像高度 | Image height + /// 位深度(8 或 16)| Bit depth (8 or 16) + /// 取消令牌 | Cancellation token + /// 频次数组(8位:256长度,16位:65536长度),失败返回 null | Frequency array, null on failure + public Task ComputeAsync(byte[] rawData, int width, int height, int bitDepth, CancellationToken ct) + { + // 参数有效性验证 | Parameter validation + if (rawData == null || width <= 0 || height <= 0) + return Task.FromResult(null); + + if (bitDepth != 8 && bitDepth != 16) + return Task.FromResult(null); + + int expectedLength = bitDepth == 8 ? width * height : width * height * 2; + if (rawData.Length != expectedLength) + return Task.FromResult(null); + + // 创建超时令牌 | Create timeout token + var linkedCts = CreateLinkedTimeoutToken(ct); + var linkedToken = linkedCts.Token; + + return Task.Run(() => + { + try + { + if (bitDepth == 8) + { + return ComputeHistogram8Bit(rawData, width, height, linkedToken); + } + else + { + return ComputeHistogram16Bit(rawData, width, height, linkedToken); + } + } + catch (OperationCanceledException) + { + return null; + } + catch + { + return null; + } + finally + { + linkedCts.Dispose(); + } + }, linkedToken); + } + + /// + /// 计算 8 位灰度直方图 | Compute 8-bit grayscale histogram + /// + private static long[]? ComputeHistogram8Bit(byte[] rawData, int width, int height, CancellationToken ct) + { + var histogram = new long[256]; + int totalPixels = width * height; + + for (int i = 0; i < totalPixels; i++) + { + if (i % 65536 == 0) + ct.ThrowIfCancellationRequested(); + + histogram[rawData[i]]++; + } + + return histogram; + } + + /// + /// 计算 16 位灰度直方图 | Compute 16-bit grayscale histogram + /// + private static long[]? ComputeHistogram16Bit(byte[] rawData, int width, int height, CancellationToken ct) + { + var histogram = new long[65536]; + int totalPixels = width * height; + + for (int i = 0; i < totalPixels; i++) + { + if (i % 65536 == 0) + ct.ThrowIfCancellationRequested(); + + // 小端序读取 16 位值 | Read 16-bit value in little-endian + int offset = i * 2; + ushort value = (ushort)(rawData[offset] | (rawData[offset + 1] << 8)); + histogram[value]++; + } + + return histogram; + } + + /// + /// 创建带超时的链接取消令牌 | Create linked cancellation token with timeout + /// + private CancellationTokenSource CreateLinkedTimeoutToken(CancellationToken externalToken) + { + var timeoutCts = new CancellationTokenSource(ComputeTimeoutMs); + var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(externalToken, timeoutCts.Token); + + lock (_lock) + { + _timeoutCts?.Dispose(); + _timeoutCts = timeoutCts; + } + + return linkedCts; + } + + /// + /// 释放资源 | Dispose resources + /// + public void Dispose() + { + if (_disposed) return; + _disposed = true; + + lock (_lock) + { + _timeoutCts?.Cancel(); + _timeoutCts?.Dispose(); + _timeoutCts = null; + } + } + } +} diff --git a/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml new file mode 100644 index 0000000..4000334 --- /dev/null +++ b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs new file mode 100644 index 0000000..a02cb15 --- /dev/null +++ b/XP.Common/Controls/ImageHistogram/ImageHistogramControl.xaml.cs @@ -0,0 +1,331 @@ +using System; +using System.Threading; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Threading; +using Prism.Ioc; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; +using XP.Common.Logging.Interfaces; + +namespace XP.Common.Controls.ImageHistogram +{ + /// + /// 图像灰度直方图通用控件 | Image grayscale histogram control + /// 支持单帧静态图像和高频流式图像输入,使用 Telerik RadChartView 进行可视化渲染 + /// + public partial class ImageHistogramControl : UserControl + { + #region 依赖属性 | Dependency Properties + + /// + /// 最大刷新帧率依赖属性 | MaxFrameRate dependency property + /// + public static readonly DependencyProperty MaxFrameRateProperty = + DependencyProperty.Register( + nameof(MaxFrameRate), + typeof(int), + typeof(ImageHistogramControl), + new PropertyMetadata(15, OnMaxFrameRateChanged, CoerceMaxFrameRate)); + + /// + /// 是否使用对数 Y 轴依赖属性 | IsLogarithmic dependency property + /// + public static readonly DependencyProperty IsLogarithmicProperty = + DependencyProperty.Register( + nameof(IsLogarithmic), + typeof(bool), + typeof(ImageHistogramControl), + new PropertyMetadata(false)); + + /// + /// 最大刷新帧率(fps),有效范围 1-60,默认 15 | Max frame rate (fps), valid range 1-60, default 15 + /// + public int MaxFrameRate + { + get => (int)GetValue(MaxFrameRateProperty); + set => SetValue(MaxFrameRateProperty, value); + } + + /// + /// 是否使用对数 Y 轴,默认 false | Whether to use logarithmic Y axis, default false + /// + public bool IsLogarithmic + { + get => (bool)GetValue(IsLogarithmicProperty); + set => SetValue(IsLogarithmicProperty, value); + } + + private static void OnMaxFrameRateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is ImageHistogramControl control) + { + var newValue = (int)e.NewValue; + control._frameThrottler.MaxFrameRate = newValue; + } + } + + private static object CoerceMaxFrameRate(DependencyObject d, object baseValue) + { + var value = (int)baseValue; + var clamped = Math.Clamp(value, 1, 60); + + if (clamped != value && d is ImageHistogramControl control) + { + control._logger?.Warn( + "MaxFrameRate 值 {Value} 超出有效范围,已钳位为 {Clamped} | MaxFrameRate value {Value} out of range, clamped to {Clamped}", + value, clamped); + } + + return clamped; + } + + #endregion + + #region 私有字段 | Private Fields + + private readonly FrameThrottler _frameThrottler; + private readonly HistogramEngine _histogramEngine; + private ChartRenderer? _chartRenderer; + private ILoggerService? _logger; + private CancellationTokenSource? _currentCts; + private readonly object _ctsLock = new(); + + #endregion + + #region 构造函数 | Constructor + + /// + /// 构造函数 | Constructor + /// + public ImageHistogramControl() + { + InitializeComponent(); + + // 初始化内部组件 | Initialize internal components + _frameThrottler = new FrameThrottler(); + _histogramEngine = new HistogramEngine(); + + // 尝试解析日志服务 | Try to resolve logger service + try + { + var loggerService = ContainerLocator.Current?.Resolve(); + _logger = loggerService?.ForModule(); + } + catch + { + // 日志服务不可用,静默降级 | Logger service unavailable, silent degradation + _logger = null; + } + + // 订阅 Loaded 事件初始化 ChartRenderer | Subscribe Loaded event to initialize ChartRenderer + Loaded += OnLoaded; + Unloaded += OnUnloaded; + } + + private void OnLoaded(object sender, RoutedEventArgs e) + { + // 初始化 ChartRenderer | Initialize ChartRenderer + _chartRenderer = new ChartRenderer(HistogramChart, HistogramBarSeries, XAxis); + } + + #endregion + + #region 公共 API | Public API + + /// + /// 传入 ImageSharp 图像对象,计算并显示灰度直方图 | Update histogram from ImageSharp image + /// + /// ImageSharp 图像对象 | ImageSharp image object + public void UpdateImage(Image image) + { + try + { + if (image == null) + { + _logger?.Warn("UpdateImage 收到 null 图像,已忽略 | UpdateImage received null image, ignored"); + return; + } + + SubmitComputation(() => _histogramEngine.ComputeAsync(image, GetOrCreateCancellationToken())); + } + catch (Exception ex) + { + _logger?.Error(ex, "UpdateImage(Image) 异常:{Message} | UpdateImage(Image) error: {Message}", ex.Message); + } + } + + /// + /// 传入原始像素数组,计算并显示灰度直方图 | Update histogram from raw byte array + /// + /// 原始像素数据 | Raw pixel data + /// 图像宽度 | Image width + /// 图像高度 | Image height + /// 位深度(8 或 16)| Bit depth (8 or 16) + public void UpdateImage(byte[] rawData, int width, int height, int bitDepth) + { + try + { + // 参数有效性验证 | Parameter validation + if (rawData == null) + { + _logger?.Warn("UpdateImage 收到 null rawData,已忽略 | UpdateImage received null rawData, ignored"); + return; + } + + if (width <= 0 || height <= 0) + { + _logger?.Warn( + "UpdateImage 参数无效:width={Width}, height={Height} | Invalid params: width={Width}, height={Height}", + width, height); + return; + } + + if (bitDepth != 8 && bitDepth != 16) + { + _logger?.Warn( + "UpdateImage 参数无效:bitDepth={BitDepth},仅支持 8 或 16 | Invalid bitDepth={BitDepth}, only 8 or 16 supported", + bitDepth); + return; + } + + int expectedLength = bitDepth == 8 ? width * height : width * height * 2; + if (rawData.Length != expectedLength) + { + _logger?.Warn( + "UpdateImage 参数无效:rawData.Length={Length}, 预期={Expected} | Invalid params: rawData.Length={Length}, expected={Expected}", + rawData.Length, expectedLength); + return; + } + + SubmitComputation(() => _histogramEngine.ComputeAsync(rawData, width, height, bitDepth, GetOrCreateCancellationToken())); + } + catch (Exception ex) + { + _logger?.Error(ex, "UpdateImage(byte[]) 异常:{Message} | UpdateImage(byte[]) error: {Message}", ex.Message); + } + } + + /// + /// 清空直方图显示,恢复初始空白状态 | Clear histogram display, restore initial blank state + /// + public void Clear() + { + try + { + // 取消正在执行的后台任务 | Cancel running background task + CancelCurrentComputation(); + + // 取消帧率限流器中的待处理任务 | Cancel pending tasks in throttler + _frameThrottler.Cancel(); + + // 清空图表 | Clear chart + if (_chartRenderer != null) + { + Dispatcher.InvokeAsync(() => _chartRenderer.Clear()); + } + } + catch (Exception ex) + { + _logger?.Error(ex, "Clear() 异常:{Message} | Clear() error: {Message}", ex.Message); + } + } + + #endregion + + #region 私有方法 | Private Methods + + /// + /// 通过帧率限流器提交计算任务 | Submit computation through frame throttler + /// + private void SubmitComputation(Func> computeFunc) + { + _frameThrottler.TrySubmit(() => + { + try + { + var task = computeFunc(); + task.ContinueWith(t => + { + if (t.IsCompletedSuccessfully && t.Result != null) + { + var histogram = t.Result; + var isLog = false; + + // 在 UI 线程获取 IsLogarithmic 值并更新图表 | Get IsLogarithmic on UI thread and update chart + Dispatcher.InvokeAsync(() => + { + try + { + isLog = IsLogarithmic; + _chartRenderer?.UpdateData(histogram, isLog); + } + catch (Exception ex) + { + _logger?.Error(ex, "图表更新异常:{Message} | Chart update error: {Message}", ex.Message); + } + }); + } + else if (t.IsFaulted) + { + _logger?.Error(t.Exception, "直方图计算异常:{Message} | Histogram computation error: {Message}", + t.Exception?.InnerException?.Message ?? "Unknown"); + } + }, System.Threading.Tasks.TaskScheduler.Default); + } + catch (Exception ex) + { + _logger?.Error(ex, "提交计算任务异常:{Message} | Submit computation error: {Message}", ex.Message); + } + }); + } + + /// + /// 获取或创建取消令牌(取消上一个)| Get or create cancellation token (cancel previous) + /// + private CancellationToken GetOrCreateCancellationToken() + { + lock (_ctsLock) + { + _currentCts?.Cancel(); + _currentCts?.Dispose(); + _currentCts = new CancellationTokenSource(); + return _currentCts.Token; + } + } + + /// + /// 取消当前计算 | Cancel current computation + /// + private void CancelCurrentComputation() + { + lock (_ctsLock) + { + _currentCts?.Cancel(); + _currentCts?.Dispose(); + _currentCts = null; + } + } + + /// + /// Unloaded 事件处理:释放所有资源 | Unloaded event handler: release all resources + /// + private void OnUnloaded(object sender, RoutedEventArgs e) + { + // 取消所有后台任务 | Cancel all background tasks + CancelCurrentComputation(); + + // 释放帧率限流器 | Dispose frame throttler + _frameThrottler.Cancel(); + _frameThrottler.Dispose(); + + // 释放计算引擎 | Dispose histogram engine + _histogramEngine.Dispose(); + + // 清空引用 | Clear references + _chartRenderer = null; + } + + #endregion + } +} diff --git a/XP.Common/XP.Common.csproj b/XP.Common/XP.Common.csproj index 50c0aa6..4e9ab0c 100644 --- a/XP.Common/XP.Common.csproj +++ b/XP.Common/XP.Common.csproj @@ -27,6 +27,7 @@ + diff --git a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json index 8d2b10c..fb5a616 100644 --- a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json +++ b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json @@ -29,6 +29,9 @@ }, "Emgu.CV/4.10.0.5680": { "dependencies": { + "System.Drawing.Primitives": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", "System.Text.Json": "10.0.0" }, "runtime": { @@ -77,9 +80,13 @@ "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "Microsoft.Bcl.HashCode": "1.1.0", "Microsoft.EntityFrameworkCore.Abstractions": "3.1.5", + "Microsoft.EntityFrameworkCore.Analyzers": "3.1.5", "Microsoft.Extensions.Caching.Memory": "3.1.5", "Microsoft.Extensions.DependencyInjection": "3.1.5", - "Microsoft.Extensions.Logging": "3.1.5" + "Microsoft.Extensions.Logging": "3.1.5", + "System.Collections.Immutable": "1.7.1", + "System.ComponentModel.Annotations": "4.7.0", + "System.Diagnostics.DiagnosticSource": "4.7.1" }, "runtime": { "lib/netstandard2.0/Microsoft.EntityFrameworkCore.dll": { @@ -96,6 +103,7 @@ } } }, + "Microsoft.EntityFrameworkCore.Analyzers/3.1.5": {}, "Microsoft.Extensions.Caching.Abstractions/3.1.5": { "dependencies": { "Microsoft.Extensions.Primitives": "10.0.0" @@ -229,6 +237,8 @@ } } }, + "Microsoft.NETCore.Platforms/2.0.0": {}, + "Microsoft.NETCore.Targets/1.1.3": {}, "Microsoft.OData.Client/7.8.3": { "dependencies": { "Microsoft.OData.Core": "7.8.3" @@ -271,6 +281,14 @@ } } }, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "Microsoft.Win32.SystemEvents/6.0.0": {}, "Microsoft.Xaml.Behaviors.Wpf/1.1.122": { "runtime": { "lib/net6.0-windows7.0/Microsoft.Xaml.Behaviors.dll": { @@ -279,6 +297,54 @@ } } }, + "NETStandard.Library/1.6.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, "Prism.Container.Abstractions/9.0.106": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.1" @@ -322,6 +388,54 @@ } } }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "Serilog/4.3.1": { "runtime": { "lib/net8.0/Serilog.dll": { @@ -366,6 +480,9 @@ } }, "SharpDX/4.2.0": { + "dependencies": { + "NETStandard.Library": "1.6.1" + }, "runtime": { "lib/netstandard1.1/SharpDX.dll": { "assemblyVersion": "4.2.0.0", @@ -375,6 +492,7 @@ }, "SharpDX.D3DCompiler/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -386,6 +504,7 @@ }, "SharpDX.Direct2D1/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0", "SharpDX.DXGI": "4.2.0" }, @@ -398,6 +517,7 @@ }, "SharpDX.Direct3D10/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0", "SharpDX.D3DCompiler": "4.2.0", "SharpDX.DXGI": "4.2.0" @@ -411,6 +531,7 @@ }, "SharpDX.Direct3D9/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -422,6 +543,7 @@ }, "SharpDX.DXGI/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -433,6 +555,7 @@ }, "SharpDX.Mathematics/4.2.0": { "dependencies": { + "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -442,6 +565,14 @@ } } }, + "SixLabors.ImageSharp/3.1.12": { + "runtime": { + "lib/net6.0/SixLabors.ImageSharp.dll": { + "assemblyVersion": "3.0.0.0", + "fileVersion": "3.1.12.0" + } + } + }, "SQLitePCLRaw.bundle_e_sqlite3/2.1.11": { "dependencies": { "SQLitePCLRaw.lib.e_sqlite3": "2.1.11", @@ -455,6 +586,9 @@ } }, "SQLitePCLRaw.core/2.1.11": { + "dependencies": { + "System.Memory": "4.5.3" + }, "runtime": { "lib/netstandard2.0/SQLitePCLRaw.core.dll": { "assemblyVersion": "2.1.11.2622", @@ -592,7 +726,63 @@ } } }, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.1" + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Threading": "4.3.0" + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable/1.7.1": {}, + "System.ComponentModel.Annotations/4.7.0": {}, + "System.Configuration.ConfigurationManager/6.0.0": { + "dependencies": { + "System.Security.Cryptography.ProtectedData": "6.0.0", + "System.Security.Permissions": "6.0.0" + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.Runtime": "4.3.1", + "System.Text.Encoding": "4.3.0" + } + }, "System.Data.OleDb/6.0.0": { + "dependencies": { + "System.Configuration.ConfigurationManager": "6.0.0", + "System.Diagnostics.PerformanceCounter": "6.0.0" + }, "runtime": { "lib/net6.0/System.Data.OleDb.dll": { "assemblyVersion": "6.0.0.0", @@ -608,6 +798,127 @@ } } }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Diagnostics.DiagnosticSource/4.7.1": {}, + "System.Diagnostics.PerformanceCounter/6.0.0": { + "dependencies": { + "System.Configuration.ConfigurationManager": "6.0.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Drawing.Common/6.0.0": { + "dependencies": { + "Microsoft.Win32.SystemEvents": "6.0.0" + } + }, + "System.Drawing.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile/4.3.0": { + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.1" + } + }, "System.IO.Pipelines/10.0.0": { "runtime": { "lib/net8.0/System.IO.Pipelines.dll": { @@ -616,7 +927,100 @@ } } }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Memory/4.5.3": {}, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.7.1", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.1", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Threading": "4.3.0" + } + }, "System.Private.ServiceModel/4.7.0": { + "dependencies": { + "System.Reflection.DispatchProxy": "4.5.0", + "System.Security.Cryptography.Xml": "4.5.0", + "System.Security.Principal.Windows": "4.5.0" + }, "runtime": { "lib/netstandard2.0/System.Private.ServiceModel.dll": { "assemblyVersion": "4.7.0.0", @@ -624,6 +1028,252 @@ } } }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.DispatchProxy/4.5.0": {}, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.1" + } + }, + "System.Runtime/4.3.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Security.AccessControl/6.0.0": {}, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng/4.5.0": {}, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Pkcs/4.5.0": { + "dependencies": { + "System.Security.Cryptography.Cng": "4.5.0" + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.ProtectedData/6.0.0": {}, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.5.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Xml/4.5.0": { + "dependencies": { + "System.Security.Cryptography.Pkcs": "4.5.0", + "System.Security.Permissions": "6.0.0" + } + }, + "System.Security.Permissions/6.0.0": { + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Windows.Extensions": "6.0.0" + } + }, + "System.Security.Principal.Windows/4.5.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0" + } + }, "System.ServiceModel.Http/4.7.0": { "dependencies": { "System.Private.ServiceModel": "4.7.0", @@ -651,6 +1301,21 @@ } } }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1", + "System.Text.Encoding": "4.3.0" + } + }, "System.Text.Encodings.Web/10.0.0": { "runtime": { "lib/net8.0/System.Text.Encodings.Web.dll": { @@ -679,6 +1344,78 @@ } } }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.1" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.1", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.1", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Timer/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.1" + } + }, + "System.Windows.Extensions/6.0.0": { + "dependencies": { + "System.Drawing.Common": "6.0.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.1", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, "Telerik.UI.for.Wpf.NetCore.Xaml/2024.1.408": { "dependencies": { "Microsoft.EntityFrameworkCore": "3.1.5", @@ -690,6 +1427,7 @@ "SharpDX.Direct3D9": "4.2.0", "SharpDX.Mathematics": "4.2.0", "System.Data.OleDb": "6.0.0", + "System.Drawing.Common": "6.0.0", "System.ServiceModel.Http": "4.7.0" }, "runtime": { @@ -972,6 +1710,7 @@ "Serilog.Settings.Configuration": "10.0.0", "Serilog.Sinks.Console": "6.1.1", "Serilog.Sinks.File": "7.0.0", + "SixLabors.ImageSharp": "3.1.12", "Telerik.UI.for.Wpf.NetCore.Xaml": "2024.1.408" }, "runtime": { @@ -1049,6 +1788,13 @@ "path": "microsoft.entityframeworkcore.abstractions/3.1.5", "hashPath": "microsoft.entityframeworkcore.abstractions.3.1.5.nupkg.sha512" }, + "Microsoft.EntityFrameworkCore.Analyzers/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NhxlI6Qj/QUt79ApeBrpKo+a5TGt/UCddxd9rLHD7Zd6yLyfkDOMiyu4oPqhnMhpqmzo/gd79tW7BMwIxgEZCw==", + "path": "microsoft.entityframeworkcore.analyzers/3.1.5", + "hashPath": "microsoft.entityframeworkcore.analyzers.3.1.5.nupkg.sha512" + }, "Microsoft.Extensions.Caching.Abstractions/3.1.5": { "type": "package", "serviceable": true, @@ -1133,6 +1879,20 @@ "path": "microsoft.extensions.primitives/10.0.0", "hashPath": "microsoft.extensions.primitives.10.0.0.nupkg.sha512" }, + "Microsoft.NETCore.Platforms/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==", + "path": "microsoft.netcore.platforms/2.0.0", + "hashPath": "microsoft.netcore.platforms.2.0.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==", + "path": "microsoft.netcore.targets/1.1.3", + "hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512" + }, "Microsoft.OData.Client/7.8.3": { "type": "package", "serviceable": true, @@ -1161,6 +1921,20 @@ "path": "microsoft.spatial/7.8.3", "hashPath": "microsoft.spatial.7.8.3.nupkg.sha512" }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "Microsoft.Win32.SystemEvents/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==", + "path": "microsoft.win32.systemevents/6.0.0", + "hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512" + }, "Microsoft.Xaml.Behaviors.Wpf/1.1.122": { "type": "package", "serviceable": true, @@ -1168,6 +1942,13 @@ "path": "microsoft.xaml.behaviors.wpf/1.1.122", "hashPath": "microsoft.xaml.behaviors.wpf.1.1.122.nupkg.sha512" }, + "NETStandard.Library/1.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "path": "netstandard.library/1.6.1", + "hashPath": "netstandard.library.1.6.1.nupkg.sha512" + }, "Prism.Container.Abstractions/9.0.106": { "type": "package", "serviceable": true, @@ -1196,6 +1977,118 @@ "path": "prism.wpf/9.0.537", "hashPath": "prism.wpf.9.0.537.nupkg.sha512" }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, "Serilog/4.3.1": { "type": "package", "serviceable": true, @@ -1273,6 +2166,13 @@ "path": "sharpdx.mathematics/4.2.0", "hashPath": "sharpdx.mathematics.4.2.0.nupkg.sha512" }, + "SixLabors.ImageSharp/3.1.12": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==", + "path": "sixlabors.imagesharp/3.1.12", + "hashPath": "sixlabors.imagesharp.3.1.12.nupkg.sha512" + }, "SQLitePCLRaw.bundle_e_sqlite3/2.1.11": { "type": "package", "serviceable": true, @@ -1301,6 +2201,62 @@ "path": "sqlitepclraw.provider.e_sqlite3/2.1.11", "hashPath": "sqlitepclraw.provider.e_sqlite3.2.1.11.nupkg.sha512" }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/1.7.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==", + "path": "system.collections.immutable/1.7.1", + "hashPath": "system.collections.immutable.1.7.1.nupkg.sha512" + }, + "System.ComponentModel.Annotations/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0YFqjhp/mYkDGpU0Ye1GjE53HMp9UVfGN7seGpAMttAC0C40v5gw598jCgpbBLMmCo0E5YRLBv5Z2doypO49ZQ==", + "path": "system.componentmodel.annotations/4.7.0", + "hashPath": "system.componentmodel.annotations.4.7.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "path": "system.configuration.configurationmanager/6.0.0", + "hashPath": "system.configuration.configurationmanager.6.0.0.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, "System.Data.OleDb/6.0.0": { "type": "package", "serviceable": true, @@ -1308,6 +2264,111 @@ "path": "system.data.oledb/6.0.0", "hashPath": "system.data.oledb.6.0.0.nupkg.sha512" }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.7.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j81Lovt90PDAq8kLpaJfJKV/rWdWuEk6jfV+MBkee33vzYLEUsy4gXK8laa9V2nZlLM9VM9yA/OOQxxPEJKAMw==", + "path": "system.diagnostics.diagnosticsource/4.7.1", + "hashPath": "system.diagnostics.diagnosticsource.4.7.1.nupkg.sha512" + }, + "System.Diagnostics.PerformanceCounter/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gbeE5tNp/oB7O8kTTLh3wPPJCxpNOphXPTWVs1BsYuFOYapFijWuh0LYw1qnDo4gwDUYPXOmpTIhvtxisGsYOQ==", + "path": "system.diagnostics.performancecounter/6.0.0", + "hashPath": "system.diagnostics.performancecounter.6.0.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Drawing.Common/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", + "path": "system.drawing.common/6.0.0", + "hashPath": "system.drawing.common.6.0.0.nupkg.sha512" + }, + "System.Drawing.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1QU/c35gwdhvj77fkScXQQbjiVAqIL3fEYn/19NE0CV/ic5TN5PyWAft8HsrbRd4SBLEoErNCkWSzMDc0MmbRw==", + "path": "system.drawing.primitives/4.3.0", + "hashPath": "system.drawing.primitives.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.Compression.ZipFile/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "path": "system.io.compression.zipfile/4.3.0", + "hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, "System.IO.Pipelines/10.0.0": { "type": "package", "serviceable": true, @@ -1315,6 +2376,55 @@ "path": "system.io.pipelines/10.0.0", "hashPath": "system.io.pipelines.10.0.0.nupkg.sha512" }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "path": "system.memory/4.5.3", + "hashPath": "system.memory.4.5.3.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.Net.Sockets/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "path": "system.net.sockets/4.3.0", + "hashPath": "system.net.sockets.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, "System.Private.ServiceModel/4.7.0": { "type": "package", "serviceable": true, @@ -1322,6 +2432,202 @@ "path": "system.private.servicemodel/4.7.0", "hashPath": "system.private.servicemodel.4.7.0.nupkg.sha512" }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.DispatchProxy/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA==", + "path": "system.reflection.dispatchproxy/4.5.0", + "hashPath": "system.reflection.dispatchproxy.4.5.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-abhfv1dTK6NXOmu4bgHIONxHyEqFjW8HwXPmpY9gmll+ix9UNo4XDcmzJn6oLooftxNssVHdJC1pGT9jkSynQg==", + "path": "system.runtime/4.3.1", + "hashPath": "system.runtime.4.3.1.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "path": "system.security.accesscontrol/6.0.0", + "hashPath": "system.security.accesscontrol.6.0.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==", + "path": "system.security.cryptography.cng/4.5.0", + "hashPath": "system.security.cryptography.cng.4.5.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Pkcs/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TGQX51gxpY3K3I6LJlE2LAftVlIMqJf0cBGhz68Y89jjk3LJCB6SrwiD+YN1fkqemBvWGs+GjyMJukl6d6goyQ==", + "path": "system.security.cryptography.pkcs/4.5.0", + "hashPath": "system.security.cryptography.pkcs.4.5.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==", + "path": "system.security.cryptography.protecteddata/6.0.0", + "hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Xml/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-i2Jn6rGXR63J0zIklImGRkDIJL4b1NfPSEbIVHBlqoIb12lfXIigCbDRpDmIEzwSo/v1U5y/rYJdzZYSyCWxvg==", + "path": "system.security.cryptography.xml/4.5.0", + "hashPath": "system.security.cryptography.xml.4.5.0.nupkg.sha512" + }, + "System.Security.Permissions/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "path": "system.security.permissions/6.0.0", + "hashPath": "system.security.permissions.6.0.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==", + "path": "system.security.principal.windows/4.5.0", + "hashPath": "system.security.principal.windows.4.5.0.nupkg.sha512" + }, "System.ServiceModel.Http/4.7.0": { "type": "package", "serviceable": true, @@ -1336,6 +2642,20 @@ "path": "system.servicemodel.primitives/4.7.0", "hashPath": "system.servicemodel.primitives.4.7.0.nupkg.sha512" }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, "System.Text.Encodings.Web/10.0.0": { "type": "package", "serviceable": true, @@ -1350,6 +2670,62 @@ "path": "system.text.json/10.0.0", "hashPath": "system.text.json.10.0.0.nupkg.sha512" }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Timer/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "path": "system.threading.timer/4.3.0", + "hashPath": "system.threading.timer.4.3.0.nupkg.sha512" + }, + "System.Windows.Extensions/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "path": "system.windows.extensions/6.0.0", + "hashPath": "system.windows.extensions.6.0.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + }, "Telerik.UI.for.Wpf.NetCore.Xaml/2024.1.408": { "type": "package", "serviceable": true,