diff --git a/Opus/Code/MainActivity.cs b/Opus/Code/MainActivity.cs
index 8d5f57f..3a5641d 100644
--- a/Opus/Code/MainActivity.cs
+++ b/Opus/Code/MainActivity.cs
@@ -261,6 +261,10 @@ namespace Opus
themeRes = Resource.Style.DarkTheme;
dialogTheme = Resource.Style.AppCompatDarkAlertDialogStyle;
break;
+ case 2:
+ themeRes = Resource.Style.BlackTheme;
+ dialogTheme = Resource.Style.AppCompatDarkAlertDialogStyle;
+ break;
}
context.SetTheme(themeRes);
}
diff --git a/Opus/Code/UI/Adapter/BottomSheetAdapter.cs b/Opus/Code/UI/Adapter/BottomSheetAdapter.cs
index e6a222e..0114195 100644
--- a/Opus/Code/UI/Adapter/BottomSheetAdapter.cs
+++ b/Opus/Code/UI/Adapter/BottomSheetAdapter.cs
@@ -45,7 +45,7 @@ namespace Opus.Adapter
Color color;
TypedValue value = new TypedValue();
- if (Context.Theme.ResolveAttribute(Resource.Attribute.iconColor, value, true))
+ if (Context.Theme.ResolveAttribute(Android.Resource.Attribute.ColorForeground, value, true))
color = Color.ParseColor("#" + Integer.ToHexString(value.Data));
else
color = Color.Black;
diff --git a/Opus/Code/UI/Fragments/Preferences.cs b/Opus/Code/UI/Fragments/Preferences.cs
index 66c9d84..daca2a3 100644
--- a/Opus/Code/UI/Fragments/Preferences.cs
+++ b/Opus/Code/UI/Fragments/Preferences.cs
@@ -176,7 +176,19 @@ namespace Opus.Fragments
Preference themePreference = PreferenceScreen.FindPreference("theme");
themePreference.IconSpaceReserved = false;
themePreference.PreferenceClick += ChangeTheme;
- themePreference.Summary = prefManager.GetInt("theme", 0) == 0 ? Resources.GetString(Resource.String.white_theme) : Resources.GetString(Resource.String.dark_theme);
+ switch (prefManager.GetInt("theme", 0))
+ {
+ case 0:
+ default:
+ themePreference.Summary = Resources.GetString(Resource.String.white_theme);
+ break;
+ case 1:
+ themePreference.Summary = Resources.GetString(Resource.String.dark_theme);
+ break;
+ case 2:
+ themePreference.Summary = Resources.GetString(Resource.String.black_theme);
+ break;
+ }
//Check For Update
Preference updatePreference = PreferenceScreen.FindPreference("update");
@@ -307,7 +319,7 @@ namespace Opus.Fragments
{
AlertDialog.Builder builder = new AlertDialog.Builder(Activity, MainActivity.dialogTheme);
builder.SetTitle(Resources.GetString(Resource.String.theme_dialog));
- builder.SetItems(new[] { Resources.GetString(Resource.String.white_theme), Resources.GetString(Resource.String.dark_theme) }, (s, args) =>
+ builder.SetItems(new[] { Resources.GetString(Resource.String.white_theme), Resources.GetString(Resource.String.dark_theme), Resources.GetString(Resource.String.black_theme) }, (s, args) =>
{
ISharedPreferences pref = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
ISharedPreferencesEditor editor = pref.Edit();
diff --git a/Opus/Resources/Resource.Designer.cs b/Opus/Resources/Resource.Designer.cs
index 44b6add..0733aa2 100644
--- a/Opus/Resources/Resource.Designer.cs
+++ b/Opus/Resources/Resource.Designer.cs
@@ -162,8 +162,8 @@ namespace Opus
public partial class Attribute
{
- // aapt resource value: 0x7f010280
- public const int accountIconColor = 2130772608;
+ // aapt resource value: 0x7f01027d
+ public const int accountIconColor = 2130772605;
// aapt resource value: 0x7f0100d1
public const int actionBarDivider = 2130772177;
@@ -336,9 +336,6 @@ namespace Opus
// aapt resource value: 0x7f010090
public const int background = 2130772112;
- // aapt resource value: 0x7f01027f
- public const int backgroundAccent = 2130772607;
-
// aapt resource value: 0x7f010092
public const int backgroundSplit = 2130772114;
@@ -375,6 +372,9 @@ namespace Opus
// aapt resource value: 0x7f0101b4
public const int behavior_skipCollapsed = 2130772404;
+ // aapt resource value: 0x7f01027f
+ public const int blackSeperatorColor = 2130772607;
+
// aapt resource value: 0x7f0101ea
public const int borderWidth = 2130772458;
@@ -795,9 +795,6 @@ namespace Opus
// aapt resource value: 0x7f010093
public const int customNavigationLayout = 2130772115;
- // aapt resource value: 0x7f01027d
- public const int defaultColor = 2130772605;
-
// aapt resource value: 0x7f010154
public const int defaultQueryHint = 2130772308;
@@ -1125,9 +1122,6 @@ namespace Opus
// aapt resource value: 0x7f01008d
public const int icon = 2130772109;
- // aapt resource value: 0x7f01027e
- public const int iconColor = 2130772606;
-
// aapt resource value: 0x7f0101c9
public const int iconEndPadding = 2130772425;
@@ -1389,6 +1383,9 @@ namespace Opus
// aapt resource value: 0x7f0100a7
public const int multiChoiceItemLayout = 2130772135;
+ // aapt resource value: 0x7f01027e
+ public const int navigationBarColor = 2130772606;
+
// aapt resource value: 0x7f010176
public const int navigationContentDescription = 2130772342;
@@ -7231,8 +7228,11 @@ namespace Opus
// aapt resource value: 0x7f0d0138
public const int behavior = 2131558712;
- // aapt resource value: 0x7f0d0157
- public const int beta_available = 2131558743;
+ // aapt resource value: 0x7f0d0158
+ public const int beta_available = 2131558744;
+
+ // aapt resource value: 0x7f0d0143
+ public const int black_theme = 2131558723;
// aapt resource value: 0x7f0d0081
public const int bottom_sheet_behavior = 2131558529;
@@ -7243,14 +7243,14 @@ namespace Opus
// aapt resource value: 0x7f0d0132
public const int cancel = 2131558706;
- // aapt resource value: 0x7f0d015d
- public const int cancelling = 2131558749;
+ // aapt resource value: 0x7f0d015e
+ public const int cancelling = 2131558750;
// aapt resource value: 0x7f0d00f0
public const int cant_delete = 2131558640;
- // aapt resource value: 0x7f0d015a
- public const int cant_play_non_youtube = 2131558746;
+ // aapt resource value: 0x7f0d015b
+ public const int cant_play_non_youtube = 2131558747;
// aapt resource value: 0x7f0d00b7
public const int cast = 2131558583;
@@ -7402,8 +7402,8 @@ namespace Opus
// aapt resource value: 0x7f0d0083
public const int character_counter_pattern = 2131558531;
- // aapt resource value: 0x7f0d0144
- public const int check_updates = 2131558724;
+ // aapt resource value: 0x7f0d0145
+ public const int check_updates = 2131558725;
// aapt resource value: 0x7f0d002b
public const int common_google_play_services_enable_button = 2131558443;
@@ -7462,8 +7462,8 @@ namespace Opus
// aapt resource value: 0x7f0d012e
public const int completed = 2131558702;
- // aapt resource value: 0x7f0d0151
- public const int country_blocked = 2131558737;
+ // aapt resource value: 0x7f0d0152
+ public const int country_blocked = 2131558738;
// aapt resource value: 0x7f0d0116
public const int create_local = 2131558678;
@@ -7522,14 +7522,14 @@ namespace Opus
// aapt resource value: 0x7f0d00ee
public const int downloading = 2131558638;
- // aapt resource value: 0x7f0d015b
- public const int downloading_notification = 2131558747;
+ // aapt resource value: 0x7f0d015c
+ public const int downloading_notification = 2131558748;
// aapt resource value: 0x7f0d012c
public const int downloading_status = 2131558700;
- // aapt resource value: 0x7f0d0158
- public const int downloading_update = 2131558744;
+ // aapt resource value: 0x7f0d0159
+ public const int downloading_update = 2131558745;
// aapt resource value: 0x7f0d00d1
public const int edit_metadata = 2131558609;
@@ -7690,17 +7690,17 @@ namespace Opus
// aapt resource value: 0x7f0d00ff
public const int localpl_noperm = 2131558655;
- // aapt resource value: 0x7f0d0148
- public const int log_in = 2131558728;
-
// aapt resource value: 0x7f0d0149
- public const int log_out = 2131558729;
-
- // aapt resource value: 0x7f0d0147
- public const int logged_in = 2131558727;
+ public const int log_in = 2131558729;
// aapt resource value: 0x7f0d014a
- public const int login_disabled = 2131558730;
+ public const int log_out = 2131558730;
+
+ // aapt resource value: 0x7f0d0148
+ public const int logged_in = 2131558728;
+
+ // aapt resource value: 0x7f0d014b
+ public const int login_disabled = 2131558731;
// aapt resource value: 0x7f0d013b
public const int max_download = 2131558715;
@@ -7819,8 +7819,8 @@ namespace Opus
// aapt resource value: 0x7f0d00f4
public const int no_lives = 2131558644;
- // aapt resource value: 0x7f0d014c
- public const int no_permission = 2131558732;
+ // aapt resource value: 0x7f0d014d
+ public const int no_permission = 2131558733;
// aapt resource value: 0x7f0d00f3
public const int no_playlist = 2131558643;
@@ -7831,17 +7831,17 @@ namespace Opus
// aapt resource value: 0x7f0d00e7
public const int no_song = 2131558631;
- // aapt resource value: 0x7f0d014d
- public const int no_song_mix = 2131558733;
+ // aapt resource value: 0x7f0d014e
+ public const int no_song_mix = 2131558734;
// aapt resource value: 0x7f0d00f2
public const int no_track = 2131558642;
- // aapt resource value: 0x7f0d0146
- public const int not_log = 2131558726;
+ // aapt resource value: 0x7f0d0147
+ public const int not_log = 2131558727;
- // aapt resource value: 0x7f0d0152
- public const int not_streamable = 2131558738;
+ // aapt resource value: 0x7f0d0153
+ public const int not_streamable = 2131558739;
// aapt resource value: 0x7f0d00bb
public const int nothing = 2131558587;
@@ -7855,8 +7855,8 @@ namespace Opus
// aapt resource value: 0x7f0d00c4
public const int open_youtube = 2131558596;
- // aapt resource value: 0x7f0d0143
- public const int others = 2131558723;
+ // aapt resource value: 0x7f0d0144
+ public const int others = 2131558724;
// aapt resource value: 0x7f0d0088
public const int password_toggle_content_description = 2131558536;
@@ -8014,8 +8014,8 @@ namespace Opus
// aapt resource value: 0x7f0d00ef
public const int syncing = 2131558639;
- // aapt resource value: 0x7f0d015c
- public const int tap_details = 2131558748;
+ // aapt resource value: 0x7f0d015d
+ public const int tap_details = 2131558749;
// aapt resource value: 0x7f0d013f
public const int theme = 2131558719;
@@ -8026,14 +8026,14 @@ namespace Opus
// aapt resource value: 0x7f0d00c3
public const int timer = 2131558595;
- // aapt resource value: 0x7f0d014f
- public const int timout = 2131558735;
+ // aapt resource value: 0x7f0d0150
+ public const int timout = 2131558736;
// aapt resource value: 0x7f0d0119
public const int title = 2131558681;
- // aapt resource value: 0x7f0d014b
- public const int undo = 2131558731;
+ // aapt resource value: 0x7f0d014c
+ public const int undo = 2131558732;
// aapt resource value: 0x7f0d0121
public const int undo_change = 2131558689;
@@ -8044,29 +8044,29 @@ namespace Opus
// aapt resource value: 0x7f0d010d
public const int unfork_playlist = 2131558669;
- // aapt resource value: 0x7f0d0150
- public const int unknow = 2131558736;
+ // aapt resource value: 0x7f0d0151
+ public const int unknow = 2131558737;
// aapt resource value: 0x7f0d00ba
public const int up_next = 2131558586;
- // aapt resource value: 0x7f0d0156
- public const int up_to_date = 2131558742;
+ // aapt resource value: 0x7f0d0157
+ public const int up_to_date = 2131558743;
// aapt resource value: 0x7f0d012d
public const int up_to_date_status = 2131558701;
- // aapt resource value: 0x7f0d0154
- public const int update = 2131558740;
-
// aapt resource value: 0x7f0d0155
- public const int update_message = 2131558741;
+ public const int update = 2131558741;
- // aapt resource value: 0x7f0d0153
- public const int update_no_internet = 2131558739;
+ // aapt resource value: 0x7f0d0156
+ public const int update_message = 2131558742;
- // aapt resource value: 0x7f0d0159
- public const int updating = 2131558745;
+ // aapt resource value: 0x7f0d0154
+ public const int update_no_internet = 2131558740;
+
+ // aapt resource value: 0x7f0d015a
+ public const int updating = 2131558746;
// aapt resource value: 0x7f0d003e
public const int v7_preference_off = 2131558462;
@@ -8074,8 +8074,8 @@ namespace Opus
// aapt resource value: 0x7f0d003f
public const int v7_preference_on = 2131558463;
- // aapt resource value: 0x7f0d0145
- public const int version = 2131558725;
+ // aapt resource value: 0x7f0d0146
+ public const int version = 2131558726;
// aapt resource value: 0x7f0d0139
public const int volume = 2131558713;
@@ -8086,8 +8086,8 @@ namespace Opus
// aapt resource value: 0x7f0d0136
public const int yes = 2131558710;
- // aapt resource value: 0x7f0d014e
- public const int youtube_endpoint = 2131558734;
+ // aapt resource value: 0x7f0d014f
+ public const int youtube_endpoint = 2131558735;
// aapt resource value: 0x7f0d00fb
public const int youtube_loading_error = 2131558651;
@@ -8711,6 +8711,12 @@ namespace Opus
// aapt resource value: 0x7f0e01b2
public const int Base_Widget_MaterialComponents_TextInputLayout = 2131624370;
+ // aapt resource value: 0x7f0e023a
+ public const int BlackPreferences = 2131624506;
+
+ // aapt resource value: 0x7f0e0232
+ public const int BlackTheme = 2131624498;
+
// aapt resource value: 0x7f0e0032
public const int CardView = 2131623986;
@@ -8738,8 +8744,8 @@ namespace Opus
// aapt resource value: 0x7f0e0239
public const int DarkPreferences = 2131624505;
- // aapt resource value: 0x7f0e0232
- public const int DarkTheme = 2131624498;
+ // aapt resource value: 0x7f0e0231
+ public const int DarkTheme = 2131624497;
// aapt resource value: 0x7f0e0226
public const int ExoMediaButton = 2131624486;
@@ -8879,8 +8885,8 @@ namespace Opus
// aapt resource value: 0x7f0e0020
public const int Preference_SwitchPreferenceCompat_Material = 2131623968;
- // aapt resource value: 0x7f0e023a
- public const int PreferenceCategoryStyle = 2131624506;
+ // aapt resource value: 0x7f0e023b
+ public const int PreferenceCategoryStyle = 2131624507;
// aapt resource value: 0x7f0e0008
public const int PreferenceFragment = 2131623944;
@@ -9302,9 +9308,6 @@ namespace Opus
// aapt resource value: 0x7f0e0138
public const int Theme_AppCompat_NoActionBar = 2131624248;
- // aapt resource value: 0x7f0e0231
- public const int Theme_Base = 2131624497;
-
// aapt resource value: 0x7f0e01ca
public const int Theme_Design = 2131624394;
diff --git a/Opus/Resources/layout/AddToPlaylistItem.xml b/Opus/Resources/layout/AddToPlaylistItem.xml
index 910f040..d816cc8 100644
--- a/Opus/Resources/layout/AddToPlaylistItem.xml
+++ b/Opus/Resources/layout/AddToPlaylistItem.xml
@@ -24,7 +24,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:id="@+id/status"
android:paddingRight="15dp"
android:layout_centerVertical="true"
@@ -35,7 +35,7 @@
android:layout_height="20dp"
android:paddingRight="15dp"
android:indeterminate="true"
- android:indeterminateTint="?iconColor"
+ android:indeterminateTint="?android:colorForeground"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:visibility="gone" />
diff --git a/Opus/Resources/layout/AddToPlaylistLayout.xml b/Opus/Resources/layout/AddToPlaylistLayout.xml
index e6b8c1e..3895ed5 100644
--- a/Opus/Resources/layout/AddToPlaylistLayout.xml
+++ b/Opus/Resources/layout/AddToPlaylistLayout.xml
@@ -16,7 +16,7 @@
android:id="@+id/divider"
android:layout_margin="5dp"
android:alpha="0.6"
- android:background="?iconColor" />
+ android:background="?android:colorForeground" />
diff --git a/Opus/Resources/layout/HomeChannels.xml b/Opus/Resources/layout/HomeChannels.xml
index 911aaee..2bc6df2 100644
--- a/Opus/Resources/layout/HomeChannels.xml
+++ b/Opus/Resources/layout/HomeChannels.xml
@@ -5,7 +5,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:elevation="6dp"
- android:background="?backgroundAccent"
+ android:background="?android:panelBackground"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:orientation="vertical">
diff --git a/Opus/Resources/layout/HomePlaylist.xml b/Opus/Resources/layout/HomePlaylist.xml
index 43e8741..c2461a0 100644
--- a/Opus/Resources/layout/HomePlaylist.xml
+++ b/Opus/Resources/layout/HomePlaylist.xml
@@ -26,7 +26,7 @@
android:layout_height="30dp"
android:layout_margin="6dp"
android:src="@drawable/play"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:background="@null"
android:id="@+id/play" />
diff --git a/Opus/Resources/layout/HomePlaylists.xml b/Opus/Resources/layout/HomePlaylists.xml
index 81611b3..186a87c 100644
--- a/Opus/Resources/layout/HomePlaylists.xml
+++ b/Opus/Resources/layout/HomePlaylists.xml
@@ -5,7 +5,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:elevation="6dp"
- android:background="?backgroundAccent"
+ android:background="?android:panelBackground"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:orientation="vertical">
diff --git a/Opus/Resources/layout/LineSongs.xml b/Opus/Resources/layout/LineSongs.xml
index 3ef2e76..bfcd8a8 100644
--- a/Opus/Resources/layout/LineSongs.xml
+++ b/Opus/Resources/layout/LineSongs.xml
@@ -5,7 +5,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:elevation="6dp"
- android:background="?backgroundAccent"
+ android:background="?android:panelBackground"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:orientation="vertical">
diff --git a/Opus/Resources/layout/Main.xml b/Opus/Resources/layout/Main.xml
index 5c60468..0d94880 100644
--- a/Opus/Resources/layout/Main.xml
+++ b/Opus/Resources/layout/Main.xml
@@ -114,13 +114,20 @@
+
+
diff --git a/Opus/Resources/layout/PlaylistItem.xml b/Opus/Resources/layout/PlaylistItem.xml
index 97dc1d6..bc6f237 100644
--- a/Opus/Resources/layout/PlaylistItem.xml
+++ b/Opus/Resources/layout/PlaylistItem.xml
@@ -52,7 +52,7 @@
android:layout_height="30dp"
android:padding="5dp"
android:background="@null"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:src="@drawable/Edit"
android:visibility="gone" />
diff --git a/Opus/Resources/layout/PlaylistSmallHeader.xml b/Opus/Resources/layout/PlaylistSmallHeader.xml
index 5168a3f..4adf7e7 100644
--- a/Opus/Resources/layout/PlaylistSmallHeader.xml
+++ b/Opus/Resources/layout/PlaylistSmallHeader.xml
@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
- android:background="?backgroundAccent"
+ android:background="?android:panelBackground"
android:id="@+id/playlistHeader"
android:elevation="6dp" >
@@ -33,7 +33,7 @@
android:id="@+id/headerShuffle"
android:layout_width="60dp"
android:layout_height="60dp"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:clickable="true"
android:src="@drawable/Shuffle"
android:background="@null"/>
@@ -41,9 +41,14 @@
android:id="@+id/headerMore"
android:layout_width="60dp"
android:layout_height="60dp"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:clickable="true"
android:src="@drawable/More"
android:background="@null" />
+
\ No newline at end of file
diff --git a/Opus/Resources/layout/PreferenceRoot.xml b/Opus/Resources/layout/PreferenceRoot.xml
index cc9e8ef..6bfe4e5 100644
--- a/Opus/Resources/layout/PreferenceRoot.xml
+++ b/Opus/Resources/layout/PreferenceRoot.xml
@@ -22,6 +22,6 @@
\ No newline at end of file
diff --git a/Opus/Resources/layout/ShuffleButton.xml b/Opus/Resources/layout/ShuffleButton.xml
index 8142ab7..4eb1d36 100644
--- a/Opus/Resources/layout/ShuffleButton.xml
+++ b/Opus/Resources/layout/ShuffleButton.xml
@@ -11,7 +11,6 @@
app:cardCornerRadius="16dp"
app:cardElevation="14dp"
android:foreground="?android:attr/selectableItemBackground"
- app:cardBackgroundColor="?defaultColor"
android:clickable="true" >
@@ -85,7 +85,7 @@
android:padding="5dp"
android:clickable="true"
android:visibility="gone"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:layout_gravity="center_vertical"
android:src="@drawable/Reorder" />
diff --git a/Opus/Resources/layout/SuggestionLayout.xml b/Opus/Resources/layout/SuggestionLayout.xml
index 5b33314..7a23320 100644
--- a/Opus/Resources/layout/SuggestionLayout.xml
+++ b/Opus/Resources/layout/SuggestionLayout.xml
@@ -10,7 +10,7 @@
android:layout_marginLeft="18dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp"
- android:tint="?iconColor"
+ android:tint="?android:colorForeground"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
diff --git a/Opus/Resources/layout/folderList.xml b/Opus/Resources/layout/folderList.xml
index e5d5905..6652cf5 100644
--- a/Opus/Resources/layout/folderList.xml
+++ b/Opus/Resources/layout/folderList.xml
@@ -2,7 +2,6 @@
Choisissez un thème
Thème clair
Thème sombre
+ Thème noir
Autres
Rechercher des mises à jour
Version
diff --git a/Opus/Resources/values/attars.xml b/Opus/Resources/values/attars.xml
index 03b77e4..a155314 100644
--- a/Opus/Resources/values/attars.xml
+++ b/Opus/Resources/values/attars.xml
@@ -1,7 +1,6 @@
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/Opus/Resources/values/strings.xml b/Opus/Resources/values/strings.xml
index c7d85d3..2c7b398 100644
--- a/Opus/Resources/values/strings.xml
+++ b/Opus/Resources/values/strings.xml
@@ -179,6 +179,7 @@
Choose a theme
White Theme
Dark Theme
+ Black Theme
Others
Check for updates
Version
diff --git a/Opus/Resources/values/styles.xml b/Opus/Resources/values/styles.xml
index 9a1be66..82828b3 100644
--- a/Opus/Resources/values/styles.xml
+++ b/Opus/Resources/values/styles.xml
@@ -1,8 +1,6 @@
-
-
-
-
+
+
+
@@ -75,9 +94,21 @@
- true
- false
- true
- - #212121
- - #ffffff
- - #424242
+ - #212121
+ - #ffffff
+
+
+