Merge pull request #6929 from element-hq/feature/bma/reorderRoomDetailItems

Reorder room detail items
This commit is contained in:
Benoit Marty
2026-06-01 22:39:41 +02:00
committed by GitHub
53 changed files with 203 additions and 180 deletions
@@ -38,6 +38,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.LocalSnackbarDis
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
import io.element.android.libraries.designsystem.utils.snackbar.collectSnackbarMessageAsState
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
import io.element.android.libraries.matrix.api.room.JoinedRoom
@@ -117,7 +118,7 @@ class RoomDetailsPresenter(
val canonicalAlias by remember { derivedStateOf { roomInfo.canonicalAlias } }
val isEncrypted by remember { derivedStateOf { roomInfo.isEncrypted == true } }
val dmMember by room.getDirectRoomMember(membersState)
val roomMemberDetailsPresenter = roomMemberDetailsPresenter(dmMember)
val roomMemberDetailsPresenter = roomMemberDetailsPresenter(dmMember?.userId)
val roomType = getRoomType(dmMember)
val roomCallState = roomCallStatePresenter.present()
val joinedMemberCount by remember { derivedStateOf { roomInfo.joinedMembersCount } }
@@ -174,7 +175,7 @@ class RoomDetailsPresenter(
}
}
val roomMemberDetailsState = roomMemberDetailsPresenter?.present()
val dmOtherMemberDetailsState = roomMemberDetailsPresenter?.present()
val hasMemberVerificationViolations by produceState(false) {
room.roomMemberIdentityStateChange(waitForEncryption = true)
@@ -196,7 +197,7 @@ class RoomDetailsPresenter(
canEdit = roomType == RoomDetailsType.Room && permissions.editDetailsPermissions.hasAny,
roomCallState = roomCallState,
roomType = roomType,
roomMemberDetailsState = roomMemberDetailsState,
dmOtherMemberDetailsState = dmOtherMemberDetailsState,
leaveRoomState = leaveRoomState,
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
isFavorite = isFavorite,
@@ -209,7 +210,7 @@ class RoomDetailsPresenter(
knockRequestsCount = knockRequestsCount,
canShowSecurityAndPrivacy = canShowSecurityAndPrivacy,
hasMemberVerificationViolations = hasMemberVerificationViolations,
canReportRoom = canReportRoom,
canReportRoom = !isDm && canReportRoom,
isTombstoned = roomInfo.successorRoom != null,
showDebugInfo = isDeveloperModeEnabled,
roomVersion = roomInfo.roomVersion,
@@ -220,9 +221,9 @@ class RoomDetailsPresenter(
}
@Composable
private fun roomMemberDetailsPresenter(dmMemberState: RoomMember?) = remember(dmMemberState) {
dmMemberState?.let { roomMember ->
roomMembersDetailsPresenterFactory.create(roomMember.userId)
private fun roomMemberDetailsPresenter(userId: UserId?) = remember(userId) {
userId?.let { userId ->
roomMembersDetailsPresenterFactory.create(userId)
}
}
@@ -31,7 +31,7 @@ data class RoomDetailsState(
val memberCount: Long,
val isEncrypted: Boolean,
val roomType: RoomDetailsType,
val roomMemberDetailsState: UserProfileState?,
val dmOtherMemberDetailsState: UserProfileState?,
val canEdit: Boolean,
val canInvite: Boolean,
val roomCallState: RoomCallState,
@@ -106,7 +106,7 @@ fun aRoomDetailsState(
canEdit: Boolean = false,
roomCallState: RoomCallState = aStandByCallState(),
roomType: RoomDetailsType = RoomDetailsType.Room,
roomMemberDetailsState: UserProfileState? = null,
dmOtherMemberDetailsState: UserProfileState? = null,
leaveRoomState: LeaveRoomState = aLeaveRoomState(),
roomNotificationSettings: RoomNotificationSettings = aRoomNotificationSettings(),
isFavorite: Boolean = false,
@@ -137,7 +137,7 @@ fun aRoomDetailsState(
canEdit = canEdit,
roomCallState = roomCallState,
roomType = roomType,
roomMemberDetailsState = roomMemberDetailsState,
dmOtherMemberDetailsState = dmOtherMemberDetailsState,
leaveRoomState = leaveRoomState,
roomNotificationSettings = roomNotificationSettings,
isFavorite = isFavorite,
@@ -184,7 +184,7 @@ fun aDmRoomDetailsState(
isEncrypted = isEncrypted,
canInvite = true,
roomType = RoomDetailsType.Dm(otherMember = aDmRoomMember(isIgnored = isDmMemberIgnored)),
roomMemberDetailsState = aUserProfileState(
dmOtherMemberDetailsState = aUserProfileState(
isBlocked = AsyncData.Success(isDmMemberIgnored),
verificationState = dmRoomMemberVerificationState,
)
@@ -43,6 +43,7 @@ import im.vector.app.features.analytics.plan.Interaction
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.roomcall.api.hasPermissionToJoin
import io.element.android.features.userprofile.api.UserProfileState
import io.element.android.features.userprofile.api.UserProfileVerificationState
import io.element.android.features.userprofile.shared.blockuser.BlockUserDialogs
import io.element.android.features.userprofile.shared.blockuser.BlockUserSection
@@ -64,7 +65,7 @@ import io.element.android.libraries.designsystem.modifiers.niceClickable
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight
import io.element.android.libraries.designsystem.preview.PreviewWithExtraLargeHeight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.DropdownMenu
import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem
@@ -96,6 +97,9 @@ import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
/**
* Ref: https://www.figma.com/design/pDlJZGBsri47FNTXMnEdXB/Compound-Android-Templates?node-id=21-120385
*/
@Composable
fun RoomDetailsView(
state: RoomDetailsState,
@@ -229,66 +233,11 @@ fun RoomDetailsView(
)
}
}
// Room content
PreferenceCategory {
if (state.roomNotificationSettings != null) {
NotificationItem(
isDefaultMode = state.roomNotificationSettings.isDefault,
openRoomNotificationSettings = openRoomNotificationSettings
)
}
FavoriteItem(
isFavorite = state.isFavorite,
onFavoriteChanges = {
state.eventSink(RoomDetailsEvent.SetFavorite(it))
}
MediaGalleryItem(
onClick = openMediaGallery
)
if (state.canShowSecurityAndPrivacy) {
SecurityAndPrivacyItem(
onClick = onSecurityAndPrivacyClick
)
}
}
state.roomMemberDetailsState?.let { dmMemberDetails ->
if (state.canInvite) {
PreferenceCategory {
InviteItem(onClick = invitePeople)
}
}
PreferenceCategory {
ProfileItem(
verificationState = dmMemberDetails.verificationState,
onClick = { onProfileClick(dmMemberDetails.userId) }
)
}
}
if (state.roomType is RoomDetailsType.Room) {
PreferenceCategory {
MembersItem(
memberCount = state.memberCount,
hasVerificationViolations = state.hasMemberVerificationViolations,
openRoomMemberList = openRoomMemberList,
)
if (state.canShowKnockRequests) {
KnockRequestsItem(
knockRequestsCount = state.knockRequestsCount,
onKnockRequestsClick = onKnockRequestsClick
)
}
if (state.displayRolesAndPermissionsSettings) {
ListItem(
headlineContent = { Text(stringResource(R.string.screen_room_details_roles_and_permissions)) },
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Admin())),
onClick = openAdminSettings,
)
}
}
}
PreferenceCategory {
PinnedMessagesItem(
pinnedMessagesCount = state.pinnedMessagesCount,
onPinnedMessagesClick = onPinnedMessagesClick
@@ -296,23 +245,87 @@ fun RoomDetailsView(
PollsItem(
openPollHistory = openPollHistory
)
MediaGalleryItem(
onClick = openMediaGallery
}
when (state.roomType) {
is RoomDetailsType.Room -> {
PreferenceCategory {
MembersItem(
memberCount = state.memberCount,
hasVerificationViolations = state.hasMemberVerificationViolations,
openRoomMemberList = openRoomMemberList,
)
if (state.canShowKnockRequests) {
KnockRequestsItem(
knockRequestsCount = state.knockRequestsCount,
onKnockRequestsClick = onKnockRequestsClick
)
}
if (state.displayRolesAndPermissionsSettings) {
ListItem(
headlineContent = { Text(stringResource(R.string.screen_room_details_roles_and_permissions)) },
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Admin())),
onClick = openAdminSettings,
)
}
}
}
is RoomDetailsType.Dm -> {
if (state.canInvite) {
// Note: for rooms the invite action is a Main action
PreferenceCategory {
InviteItem(onClick = invitePeople)
}
}
state.dmOtherMemberDetailsState?.let { dmMemberDetails ->
PreferenceCategory {
ProfileItem(
verificationState = dmMemberDetails.verificationState,
onClick = { onProfileClick(dmMemberDetails.userId) }
)
}
}
}
}
PreferenceCategory {
if (state.roomNotificationSettings != null) {
NotificationItem(
isDefaultMode = state.roomNotificationSettings.isDefault,
openRoomNotificationSettings = openRoomNotificationSettings
)
}
FavoriteItem(
isFavorite = state.isFavorite,
onFavoriteChanges = {
state.eventSink(RoomDetailsEvent.SetFavorite(it))
}
)
if (state.canShowSecurityAndPrivacy && state.roomType is RoomDetailsType.Room) {
SecurityAndPrivacyItem(
onClick = onSecurityAndPrivacyClick
)
}
}
if (state.roomType is RoomDetailsType.Dm && state.roomMemberDetailsState != null) {
val roomMemberState = state.roomMemberDetailsState
BlockUserSection(roomMemberState)
BlockUserDialogs(roomMemberState)
if (state.isEncrypted) {
PreferenceCategory(
title = stringResource(R.string.screen_room_details_security_title)
) {
ListItem(
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Lock())),
headlineContent = {
Text(stringResource(id = R.string.screen_room_details_encryption_enabled_title))
},
supportingContent = {
Text(stringResource(id = R.string.screen_room_details_encryption_enabled_subtitle))
},
)
}
}
OtherActionsSection(
dmOtherMemberDetailsState = state.dmOtherMemberDetailsState,
canReportRoom = state.canReportRoom,
onReportRoomClick = onReportRoomClick,
onLeaveRoomClick = { state.eventSink(RoomDetailsEvent.LeaveRoom(needsConfirmation = true)) }
)
if (state.showDebugInfo) {
DebugInfoSection(
roomId = state.roomId,
@@ -803,8 +816,13 @@ private fun OtherActionsSection(
canReportRoom: Boolean,
onReportRoomClick: () -> Unit,
onLeaveRoomClick: () -> Unit,
dmOtherMemberDetailsState: UserProfileState?,
) {
PreferenceCategory(showTopDivider = true) {
PreferenceCategory {
if (dmOtherMemberDetailsState != null) {
BlockUserSection(dmOtherMemberDetailsState)
BlockUserDialogs(dmOtherMemberDetailsState)
}
if (canReportRoom) {
ListItem(
headlineContent = {
@@ -832,7 +850,7 @@ private fun DebugInfoSection(
roomVersion: String?,
) {
val context = LocalContext.current
PreferenceCategory(showTopDivider = true) {
PreferenceCategory {
val toastMessage = stringResource(CommonStrings.common_copied_to_clipboard)
ListItem(
headlineContent = {
@@ -870,17 +888,17 @@ private fun DebugInfoSection(
}
}
@PreviewWithLargeHeight
@PreviewWithExtraLargeHeight
@Composable
internal fun RoomDetailsPreview(@PreviewParameter(RoomDetailsStateProvider::class) state: RoomDetailsState) =
ElementPreviewLight { ContentToPreview(state) }
@PreviewWithLargeHeight
@PreviewWithExtraLargeHeight
@Composable
internal fun RoomDetailsDarkPreview(@PreviewParameter(RoomDetailsStateProvider::class) state: RoomDetailsState) =
ElementPreviewDark { ContentToPreview(state) }
@PreviewWithLargeHeight
@PreviewWithExtraLargeHeight
@Composable
internal fun RoomDetailsA11yPreview() = ElementPreview {
ContentToPreview(
@@ -334,7 +334,8 @@ class RoomDetailsViewTest {
setRoomDetailView(
state = aRoomDetailsState(
eventSink = EventsRecorder(expectEvents = false),
roomMemberDetailsState = aUserProfileState(userId = A_USER_ID),
roomType = RoomDetailsType.Dm(aDmRoomMember(userId = A_USER_ID)),
dmOtherMemberDetailsState = aUserProfileState(userId = A_USER_ID),
),
onProfileClick = callback,
)
@@ -352,7 +353,7 @@ class RoomDetailsViewTest {
roomType = RoomDetailsType.Dm(
aDmRoomMember(userId = UserId("@other:local.org")),
),
roomMemberDetailsState = aUserProfileState(userId = A_USER_ID),
dmOtherMemberDetailsState = aUserProfileState(userId = A_USER_ID),
canInvite = true,
),
invitePeople = callback,
@@ -16,3 +16,6 @@ import androidx.compose.ui.tooling.preview.Preview
*/
@Preview(heightDp = 1000)
annotation class PreviewWithLargeHeight
@Preview(heightDp = 1600)
annotation class PreviewWithExtraLargeHeight
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d7c187e173ae6d02d6c95c03bcc24cce91b0922e6aa5a08677732748aab0fc30
size 85320
oid sha256:9dc6120d4320dafa66be77e8386a4b636b6b8a77e30ac10d9d6f31932839036a
size 67337
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8979ec6209ad6e0deb6946e00ce227f3db41a565218afe31b72b889bee224daa
size 46268
oid sha256:6a2dc4ca92e9ab49a29158ef001408ae1ca5d7f8cfed30876c223a4bea31624d
size 40091
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:16200632461dcbbf0f6211b7064b61a1e2fa04cd34e14946beb12b9e9f4d7b7f
size 43901
oid sha256:4c31008e2eff545cee39d267475c1f346fe96c6c3600572d812a903659f79604
size 38262
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2279893a284e620cf487f6370982a14278fd57bb278e53932a5fd7c5cab8e95e
size 43033
oid sha256:a5a22703e5a398443ff2457f5705177648f2ce5172c91294e10860ff16ceb25a
size 38258
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d4da60a94c56b13b65efb797825c54c1e107fe4440f56b1fcac5d47779cbf64
size 44502
oid sha256:e121018b1e0344c0f07453fa63c99ec382797f82b6828c0291c9724a4e8bdcc9
size 38601
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ee2899f7870b09f287b45b327d5d0462b423ba65afa1087dec1be862507378de
size 44411
oid sha256:bd3f8738d58814fa420f683c7bd80a8f805195b15e4973bed1d33b5aa3062533
size 38535
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:78ba2ddfdfc47febc0503daa0985a5fdf04ef15bdc391b4a88c3c630b1946b35
size 46004
oid sha256:00e744b9f2652c2cd4cc05f798786d2a090843483d616e1f4868e0431f5495d8
size 39947
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4a832b0e395498b15e176529ea55c50ed129f6d2330fbec4ff1f8e3dcaeab93f
size 46543
oid sha256:b7832f9cca5732d13dc8d2f282df245c5b09e908c84b37104f3f9764fb2ca189
size 40271
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d8e738bd873339d195b4190f65a18016f2f0eb1bbc9f513a2b25467cb5f5828c
size 44745
oid sha256:fc2f69b95a34c455534f04a21f9edde12acfbdd4c57c190ad7aa22352c2206ec
size 38838
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:892dd301ab08c6a302e8286d3f86878178130a22baf550402f2102ba98f0d21c
size 43982
oid sha256:096bfadc7faa370132e03822cb9c66eacdc2b7fa07a65ce501fe1fec7c0d8a81
size 38236
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:809c597757d6f1385803c1378a494f24309b533168df59c7e06852c1ce34b8d3
size 41408
oid sha256:2710ef0a99a60eca8b369a6c2b0d45658f7d1b2e44900137a625ade9891986bd
size 37199
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3756793e5d92f0fac18e96a49e69ac7ed6901c1195d3e6526088027405e82dbf
size 41361
oid sha256:3e51350f6799f4b5ed3a0dadfa226d839e4be8e7182bad82ba168381c5a7f7b7
size 37223
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:099f571485ce8476d4b8a2313610b6c1d03a7d7420132e06d6258b483d640a08
size 39130
oid sha256:922caafea1f17073dfe1352762f194694d4dec8facc93cfa901be111fc99832d
size 34856
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:66fd2cfb9f343c77b8db0a4fbc0d7a1571a4dfe1d70c78823a4ba03bfbc846eb
size 44934
oid sha256:7764a75469a6e2f585c2b919ebad99e61a627d1adef05a6de85370eeb08a0df1
size 38934
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:465ecd337f705262c8f533b3b01daa6a548c6ee88752be405609660ddfaf56b1
size 44676
oid sha256:fd3546dd3a61245c611fbd94ba510ba96ea0b3c63048aa6537a91479a45542a4
size 38696
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3cca233c171b6c6709a94163ca1f0024a42ff66200383fdbcaf57b321251522e
size 44390
oid sha256:bbbfc332a093a408354d75064d960f20ca761f606741349723c46d8ab68b6f59
size 38585
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9e5e8b39197d115c6190b89fd54033b3319b36dfbf5c6f152dd84e6c79147bbb
size 37877
oid sha256:7ab49c4c721c0b192786afb47c47fe9d205e10734e6c20410a522b0a33624b47
size 32001
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4899d2ffcc6da1f414f7fb223440b8463250dc5ac07558cfaee2947f95c93362
size 42236
oid sha256:1dde565f1a8a2b58c1eb9446b04e4c954dbb6e1c2d2fa843acac9e7ae850bd31
size 30785
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:577381a33e7f0a88ceebb7f2be6528c3e99417cf1351b74c134aab948664cc64
size 42149
oid sha256:bd58ff9f30ac4aadf4c7db8d26f0127e8182f6806febd54bbc2a69a071b9606b
size 37445
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b2bc2699d8dcf770103726c571a6966eacf173cbbad05c4fa6188815aa9ae231
size 41052
oid sha256:3cfc733deef5472fc65f0de1e6318e6bac781be6a399c9b1441fd1e2e4123c26
size 36925
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9cba49398954a404def6b37f3cde057cb88d6f59249b943f1689403ccd902326
size 42024
oid sha256:0e3d91ed010211048d9d1e7d659d5159ec7c771af53672cf61825ce8a719c6fc
size 31495
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:405a29c158295616560152c5790f189a8019bd635a53a69b581c8aa595e6e9ea
size 45494
oid sha256:167eb16cc4197529054fd0522a73db2b36b4369f149bce46c65a7d2deb449559
size 39193
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3f948e9cc2eb7bc73b0441fbdea72d582a042895b3404c8302b7e182c3481fae
size 44425
oid sha256:b49f74cb3db16cb8f4c8c0cfadf08f64a29b147598e420e264bfd9121b485d35
size 38615
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b4702b18ad5d203050140e6e1a18553344f52eb5482fcaf6ab497698b9ec59fd
size 44432
oid sha256:50463dcf8b496677bb8d6c8ac1af92378aca52fde19a421e227337425a22457c
size 38765
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4189b58dd1263a81566ea86d9881c02f053ecb2a91ba9442553fbe0f230e6860
size 47105
oid sha256:3cedec6cfed8804e7ef5814255da7b690051a7f29178094aa558dd151bebec5f
size 41410
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3fced9019f81e5804ea57c0b1a2750868626ad35b9a7227009a796d289595556
size 44659
oid sha256:578c3e724112d29557432e08bc442fe127163dc2c33ec22560e7e9768b14bc79
size 39456
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:be9bb839a503d169d67d4332a133ce2b3d76b3ff4c52c063436521f8a74c973e
size 43894
oid sha256:74daf2e85aaee7e01bfd50446e25d1cfe057ad95adfda6efcc8fd74ee4894cb7
size 39318
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:82c2781c37b7cefa198f2061a2c8e900b27bd57653db88733be5ff55dfaf5eee
size 45251
oid sha256:4c3484c638961188614a9b70c8d9c5fb20c8c5da04fa7907274bc809ee305b2e
size 39828
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:36feab599a6a2d4269b68f42149a6f82832ac0f6f0e9f01fb49adc21b3a58d93
size 45172
oid sha256:5add6a8689ea768e86cd035958f6d06f71bf882a8059e3addaa4efef25e77f91
size 39779
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:04bedd62b5ceba766197dd18da9efb0ff086c2c01c9c19446f8a3c42ed43ad87
size 46813
oid sha256:0c9bf7f1707d5304bd9df44f086ae966ee7ce6aeefd1f3f830ca9ad5aff9e6e6
size 41261
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:828b065aaeeccd826e98e9601069819d7a75ffabab9820a834cacb627416edc0
size 47409
oid sha256:5d7cc787ca66a1d32df5af87ce2b5c17837a8c650622c8a87b133fe63bbdcecf
size 41662
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4740bcd118f8583334dd1c03b5011e33c5384ea6810d1c83711f538cf9f1d165
size 45521
oid sha256:522ac292a26b23b260305de8e7ad03b9603c2fa7490c2f420d226c2821914a18
size 40062
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7fab53a63021ddae8384aed8eaf0a3803d06e8c80645ecc13f79a7f5cced6e68
size 45024
oid sha256:c4d7cc1bc96f2271efd707d2f8e5a8cc0e19a2eab8981bb1e27e822e54cae904
size 39615
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:89a2c619412ad9ca43c79cb76ebe72b827da71743dda7044a9b44de2990f160b
size 42388
oid sha256:e24cb3232d0c59c8ce020def10be0210860de81be50314706fda1c37f928ce51
size 38529
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56ceed440bb51039ffe7e4419477a57a235eed153a0188838e6265c241896a82
size 42262
oid sha256:22d74ec9cc245f83fdb71fcb67bff0f4ca061ddd410f64fde61a12ccbb2ffa68
size 38492
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b03e9da2d73cc0e3d0485b73470e576d7ebd4b8b5f375f2a478f1c1524772fa
size 39948
oid sha256:1d91aed4496b28952522a084145819947c0eeb704bfafab638f12fa11876acda
size 36068
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a686a2596b9b85b17c6882aa986b12e13a83a47ed217c4eb6de6aa2cb3ec2d50
size 45717
oid sha256:42a2011218c00319b7511ced2bc0187d5aeebb874e236a71a6fcd59ea2190feb
size 40240
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d6bda369c1754e2c07216f4bff0285e017f87b550fe0dc6bb5f127845d52c9b6
size 45462
oid sha256:d87aab87e3d86ede030054a68e905cf793046ff7443233a1418e12b067d8021b
size 39942
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:285045769d912e98df0371c829affd925642c8a20cd0b6b09dfa92ab5f143538
size 45131
oid sha256:8f3719a8515a3e9edeaa0db8e1d02eccb5c4330a7767d99f25051d4dce46f7b2
size 39812
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:463548e170b48509d68c0993acb000748b19921e5d4be784b07ce83252c8a5bb
size 38613
oid sha256:688c59277fd440e8b96c83857084be78a23218151845ef5483175b0b2e322401
size 33306
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c1d19c2b8c6b3c80b68214da2bb9f54a6897a279aa70e2d8cab88c291332cece
size 42980
oid sha256:1c424390f8c4930db36d474806290c525edfd4b2e25689c95516fe74e5bdc77b
size 31484
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2057479cad5d3b9a89ec835ee1d06705c6c459f7810c2875bea26b975944bcf7
size 42960
oid sha256:e76c8967b4cd416dc4a09e94290dba727e1ca6de51186afd7993ed7561ad49e4
size 38593
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:073addf26e8d0b638bce93db99d1fe9740abd89613a1eb8ef5bb4324e489d6fa
size 41924
oid sha256:2edc249c3352db53a478c033ca5ebee16a3bfde7c9110b893315b739792f2409
size 38215
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56d72cab4a9d7af568cc497b68d6ca9055874544cfd462c93da37fe368801fdf
size 42984
oid sha256:9f8a90a86b7dca19bd6964a2a78c610308915d4c55327601499b03f58b104236
size 32498
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9141f5fa4e054dc5cf70126309830bc38d564d467a215eaa1130f3601b15e761
size 46350
oid sha256:aa079faa553ee5f223cd96c50c89dcd207b226b108da92287f1f70fb83078ee6
size 40503
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a062b8cbe4dfbd94a5b068b1f7c4654ed8b697a7e98ae4c2bcb6c3e5bf473b49
size 45289
oid sha256:d98ec0320a6360b56c01ddd193da24c397ca95b0127b31f56375e0fc970264ac
size 39913
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:46aafd39e1a93f8d357def4c5f3f024ad0ee13931ebdb9f72475dbc911fd7532
size 45266
oid sha256:037424649684d6559b0a62d7ef1001c63b5a7547bff8398aaa27cc37002d1491
size 39939