private partial IImmutableDictionary <Guid, ReadOnlyMemory <byte> > GetServiceData() => args.Advertisement.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData16BitUuids ).Concat(scanResponse?.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData16BitUuids ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>()) .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray()) .ToImmutableDictionary( x => Uuid.From16(ReadUInt16LittleEndian(x.Slice(0, 2).Span)), x => x.Slice(2) ).AddRange( args.Advertisement.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData32BitUuids ).Concat(scanResponse?.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData32BitUuids ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>()) .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray()) .ToDictionary( x => Uuid.From32(ReadUInt32LittleEndian(x.Slice(0, 4).Span)), x => x.Slice(4) ) ).AddRange( args.Advertisement.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData128BitUuids ).Concat(scanResponse?.GetSectionsByType( BluetoothLEAdvertisementDataTypes.ServiceData128BitUuids ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>()) .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray()) .ToDictionary( x => new Guid(x.Slice(0, 16).ToArray()), x => x.Slice(16) ) );