How to handle the out of memory exception? - android

I have used 1920x1080 resolution image for all layout background.I got OutOfMemory Exception.Then I used different images for different resolutions in different folders,but still i am getting OutOfMemory Exception.Please can any one help me.Below is the my logcat.
E/AndroidRuntime( 3997): FATAL EXCEPTION: main
E/AndroidRuntime( 3997): Process: com.pm.a, PID: 3997
E/AndroidRuntime( 3997): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pm.a/com.activities.services.ConfirmDetails}: android.view.InflateException: Binary XML file line #48: Error inflating class <unknown>
E/AndroidRuntime( 3997): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
E/AndroidRuntime( 3997): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
E/AndroidRuntime( 3997): at android.app.ActivityThread.access$900(ActivityThread.java:161)
E/AndroidRuntime( 3997): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
E/AndroidRuntime( 3997): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3997): at android.os.Looper.loop(Looper.java:157)
E/AndroidRuntime( 3997): at android.app.ActivityThread.main(ActivityThread.java:5356)
E/AndroidRuntime( 3997): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3997): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3997): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
E/AndroidRuntime( 3997): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
E/AndroidRuntime( 3997): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3997): Caused by: android.view.InflateException: Binary XML file line #48: Error inflating class <unknown>
E/AndroidRuntime( 3997): at android.view.LayoutInflater.createView(LayoutInflater.java:626)
E/AndroidRuntime( 3997): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
E/AndroidRuntime( 3997): at com.activities.services.ConfirmDetails.onCreate(ConfirmDetails.java:90)
E/AndroidRuntime( 3997): at android.app.Activity.performCreate(Activity.java:5426)
E/AndroidRuntime( 3997): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
E/AndroidRuntime( 3997): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
E/AndroidRuntime( 3997): ... 11 more
E/AndroidRuntime( 3997): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 3997): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 3997): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
E/AndroidRuntime( 3997): at android.view.LayoutInflater.createView(LayoutInflater.java:600)
E/AndroidRuntime( 3997): ... 26 more
E/AndroidRuntime( 3997): Caused by: java.lang.OutOfMemoryError
E/AndroidRuntime( 3997): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime( 3997): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677)
E/AndroidRuntime( 3997): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507)
E/AndroidRuntime( 3997): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
E/AndroidRuntime( 3997): at android.content.res.Resources.loadDrawable(Resources.java:3056)
E/AndroidRuntime( 3997): at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
E/AndroidRuntime( 3997): at android.widget.ImageView.<init>(ImageView.java:133)
E/AndroidRuntime( 3997): at android.widget.ImageView.<init>(ImageView.java:123)
E/AndroidRuntime( 3997): ... 29 more
W/ActivityManager( 3050): Force finishing activity com.activities.services.ConfirmDetails
Thanking in Advance.

The OOM errors are a real pain in the a$$.
All you can do is resize your image to lower quality and/or enable largeHeap.
Have a look to this:
Bitmap recycle with largeHeap enabled

Related

Chrome cast Notification click not working on less than api level 21

App crashing with
java.lang.RuntimeException: Error receiving broadcast Intent { act=com.espn.score_center/com.framework.chromecast.CastNotificationActivity flg=0x10 bnds=[0,633][1080,971] (has extras) } in afj#439752a8
E/AndroidRuntime( 4624): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:773)
E/AndroidRuntime( 4624): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime( 4624): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 4624): at android.os.Looper.loop(Looper.java:146)
E/AndroidRuntime( 4624): at android.app.ActivityThread.main(ActivityThread.java:5727)
E/AndroidRuntime( 4624): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4624): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 4624): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
E/AndroidRuntime( 4624): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
E/AndroidRuntime( 4624): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4624): Caused by: java.lang.SecurityException: Permission Denial: getTasks() from pid=4624, uid=10257 requires android.permission.GET_TASKS
E/AndroidRuntime( 4624): at android.os.Parcel.readException(Parcel.java:1465)
E/AndroidRuntime( 4624): at android.os.Parcel.readException(Parcel.java:1419)
E/AndroidRuntime( 4624): at android.app.ActivityManagerProxy.getTasks(ActivityManagerNative.java:2860)
E/AndroidRuntime( 4624): at android.app.ActivityManager.getRunningTasks(ActivityManager.java:851)
E/AndroidRuntime( 4624): at android.app.ActivityManager.getRunningTasks(ActivityManager.java:887)
E/AndroidRuntime( 4624): at afj.onReceive(:com.google.android.gms.DynamiteModulesC:89)
E/AndroidRuntime( 4624): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:763)

How to inject Layout to LayoutInflater in RoboGuice?

I have layout
R.layout.alarm_clock_setting_view
And i want to Inject him into LayoutInflater.
Now i do next :
#InjectView(R.layout.alarm_clock_setting_view)
private RelativeLayout alarmClockSettingView;
...
//in OnCreate
mSettingAlarmClockView = alarmClockSettingView;
...
But that's not worked. What i need to do to inject layout into LayoutInflater?
Error :
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.samsung.clock/com.samsung.clock.views.ClockFragmentActivity}: java.lang.IllegalStateException: Unable to use annotation database(s)
E/AndroidRuntime( 3754): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
E/AndroidRuntime( 3754): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
E/AndroidRuntime( 3754): at android.app.ActivityThread.access$900(ActivityThread.java:172)
E/AndroidRuntime( 3754): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
E/AndroidRuntime( 3754): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3754): at android.os.Looper.loop(Looper.java:145)
E/AndroidRuntime( 3754): at android.app.ActivityThread.main(ActivityThread.java:5834)
E/AndroidRuntime( 3754): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 3754): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 3754): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
E/AndroidRuntime( 3754): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
E/AndroidRuntime( 3754): Caused by: java.lang.IllegalStateException: Unable to use annotation database(s)
E/AndroidRuntime( 3754): at roboguice.RoboGuice.initializeAnnotationDatabaseFinderAndHierarchyTraversalFilterFactory(RoboGuice.java:292)
E/AndroidRuntime( 3754): at roboguice.RoboGuice.getOrCreateBaseApplicationInjector(RoboGuice.java:149)
E/AndroidRuntime( 3754): at roboguice.RoboGuice.getOrCreateBaseApplicationInjector(RoboGuice.java:90)
E/AndroidRuntime( 3754): at roboguice.RoboGuice.getInjector(RoboGuice.java:197)
E/AndroidRuntime( 3754): at roboguice.activity.RoboFragmentActivity.onCreate(RoboFragmentActivity.java:60)
E/AndroidRuntime( 3754): at MainActivity.onCreate(MainActivity.java:95)
E/AndroidRuntime( 3754): at android.app.Activity.performCreate(Activity.java:6221)
E/AndroidRuntime( 3754): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
E/AndroidRuntime( 3754): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
E/AndroidRuntime( 3754): ... 10 more

Robotium with support.v4 ViewCompat throws NoSuchMethodError on load

I'm using Robotium to automate my app testing. My app has 1 activity (ActionBarActivity) and 2 fragments (using support.v4.app.Fragment). The app works fine but when I attempt to run a Robotium test, I get an error when attempting to create a new Solo instance.
solo = new Solo(getInstrumentation(), getActivity());
Logcat output:
java.lang.NoSuchMethodError: No static method setOnApplyWindowInsetsListener(Landroid/view/View;Landroid/support/v4/view/OnApplyWindowInsetsListener;)V in class Landroid/support/v4/view/ViewCompat; or its super classes (declaration of 'android.support.v4.view.ViewCompat' appears in /data/app/com.mycompany.mytrip.test-1/base.apk)
E/AndroidRuntime( 5220): at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:304)
E/AndroidRuntime( 5220): at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:225)
E/AndroidRuntime( 5220): at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
E/AndroidRuntime( 5220): at com.mycompany.mytrip.activities.MainActivity.onCreate(MainActivity.java:38)
E/AndroidRuntime( 5220): at android.app.Activity.performCreate(Activity.java:5933)
E/AndroidRuntime( 5220): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
E/AndroidRuntime( 5220): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
E/AndroidRuntime( 5220): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
E/AndroidRuntime( 5220): at android.app.ActivityThread.access$800(ActivityThread.java:144)
E/AndroidRuntime( 5220): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 5220): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 5220): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 5220): at android.app.ActivityThread.main(ActivityThread.java:5221)
E/AndroidRuntime( 5220): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 5220): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 5220): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E/AndroidRuntime( 5220): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
W/ActivityManager( 1229): Error in app com.mycompany.mytrip running instrumentation ComponentInfo{com.mycompany.mytrip.test/android.test.InstrumentationTestRunner}:
W/ActivityManager( 1229): java.lang.NoSuchMethodError
W/ActivityManager( 1229): java.lang.NoSuchMethodError: No static method setOnApplyWindowInsetsListener(Landroid/view/View;Landroid/support/v4/view/OnApplyWindowInsetsListener;)V in class Landroid/support/v4/view/ViewCompat; or its super classes (declaration of 'android.support.v4.view.ViewCompat' appears in /data/app/com.mycompany.mytrip.test-1/base.apk)
D/AndroidRuntime( 5209): Shutting down VM
Any suggestion much appreciated!

Crash at startup on port to Cordova Crosswalk (Android)

I'm porting an existing android cordova app to cordova crosswalk.
Using cordova 4, crosswalk-cordova-10.39.235.9-x86 and Android SDK 19
The app crashes at startup with the following logs in logcat:
D/AndroidRuntime( 7208): Shutting down VM
W/dalvikvm( 7208): threadid=1: thread exiting with uncaught exception (group=0x41caeda0)
E/AndroidRuntime( 7208): FATAL EXCEPTION: main
E/AndroidRuntime( 7208): Process: myapp.cqa, PID: 7208
E/AndroidRuntime( 7208): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 7208): at org.apache.cordova.CordovaActivity.makeWebView(CordovaActivity.java:295)
E/AndroidRuntime( 7208): at org.apache.cordova.CordovaActivity.init(CordovaActivity.java:348)
E/AndroidRuntime( 7208): at org.apache.cordova.CordovaActivity.init(CordovaActivity.java:323)
E/AndroidRuntime( 7208): at myapp.cqa.CordovaApp.onCreate(CordovaApp.java:31)
E/AndroidRuntime( 7208): at android.app.Activity.performCreate(Activity.java:5451)
E/AndroidRuntime( 7208): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
E/AndroidRuntime( 7208): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358)
E/AndroidRuntime( 7208): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2452)
E/AndroidRuntime( 7208): at android.app.ActivityThread.access$900(ActivityThread.java:172)
E/AndroidRuntime( 7208): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
E/AndroidRuntime( 7208): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 7208): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 7208): at android.app.ActivityThread.main(ActivityThread.java:5586)
E/AndroidRuntime( 7208): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 7208): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 7208): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
E/AndroidRuntime( 7208): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
E/AndroidRuntime( 7208): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 7208): Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Use SharedXWalkView if you want to support shared mode
E/AndroidRuntime( 7208): at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:233)
E/AndroidRuntime( 7208): at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:237)
E/AndroidRuntime( 7208): at org.xwalk.core.ReflectionHelper.init(ReflectionHelper.java:132)
E/AndroidRuntime( 7208): at org.xwalk.core.ReflectionHelper.loadClass(ReflectionHelper.java:199)
E/AndroidRuntime( 7208): at org.xwalk.core.XWalkPreferences.setValue(XWalkPreferences.java:112)
E/AndroidRuntime( 7208): at org.apache.cordova.CordovaWebView.<clinit>(CordovaWebView.java:890)
E/AndroidRuntime( 7208): ... 18 more
E/AndroidRuntime( 7208): Caused by: java.lang.RuntimeException: Use SharedXWalkView if you want to support shared mode
E/AndroidRuntime( 7208): ... 23 more
Any idea why it crashes ?
OK, after a night of sleeping, I realized I was using x86 crosswalk instead of the ARM one. Sorry for the dumb issue post...

Porting Contacts

I'm trying to port the Contacts APK from the galaxy S5 to the Galaxy S4.
I got a FC when I tried to launch the application. I would like to get some help fixing this issue.
E/AndroidRuntime( 3085): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.contacts/com.android.contacts.activities.PeopleActivity}: android.view.InflateException: Binary XML file line #71: Error inflating class <unknown>
E/AndroidRuntime( 3085): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
E/AndroidRuntime( 3085): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
E/AndroidRuntime( 3085): at android.app.ActivityThread.access$900(ActivityThread.java:161)
E/AndroidRuntime( 3085): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
E/AndroidRuntime( 3085): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 3085): at android.os.Looper.loop(Looper.java:157)
E/AndroidRuntime( 3085): at android.app.ActivityThread.main(ActivityThread.java:5356)
E/AndroidRuntime( 3085): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3085): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3085): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
E/AndroidRuntime( 3085): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
E/AndroidRuntime( 3085): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
E/AndroidRuntime( 3085): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3085): Caused by: android.view.InflateException: Binary XML file line #71: Error inflating class <unknown>
E/AndroidRuntime( 3085): at android.view.LayoutInflater.createView(LayoutInflater.java:626)
E/AndroidRuntime( 3085): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
E/AndroidRuntime( 3085): at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
E/AndroidRuntime( 3085): at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:627)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.inflate(Native Method)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
E/AndroidRuntime( 3085): at com.android.dialer.dialpad.DialpadFragment.onCreateView(DialpadFragment.java:672)
E/AndroidRuntime( 3085): at android.app.Fragment.performCreateView(Fragment.java:1700)
E/AndroidRuntime( 3085): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
E/AndroidRuntime( 3085): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
E/AndroidRuntime( 3085): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1044)
E/AndroidRuntime( 3085): at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1853)
E/AndroidRuntime( 3085): at android.app.Activity.performCreate(Activity.java:5429)
E/AndroidRuntime( 3085): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
E/AndroidRuntime( 3085): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
E/AndroidRuntime( 3085): ... 12 more
E/AndroidRuntime( 3085): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 3085): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 3085): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
E/AndroidRuntime( 3085): at android.view.LayoutInflater.createView(LayoutInflater.java:600)
E/AndroidRuntime( 3085): ... 30 more
E/AndroidRuntime( 3085): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/dialpad_background.xml from drawable resource ID #0x7f0200e2
E/AndroidRuntime( 3085): at android.content.res.Resources.loadDrawable(Resources.java:3010)
E/AndroidRuntime( 3085): at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
E/AndroidRuntime( 3085): at android.content.res.XResources$XTypedArray.getDrawable(XResources.java:797)
E/AndroidRuntime( 3085): at android.view.View.<init>(View.java:3694)
E/AndroidRuntime( 3085): at android.view.View.<init>(View.java:3624)
E/AndroidRuntime( 3085): ... 33 more
E/AndroidRuntime( 3085): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: <bitmap> requires a valid src attribute
E/AndroidRuntime( 3085): at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:577)
E/AndroidRuntime( 3085): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:973)
E/AndroidRuntime( 3085): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:913)
E/AndroidRuntime( 3085): at android.content.res.Resources.loadDrawable(Resources.java:3006)
E/AndroidRuntime( 3085): ... 37 more
W/ActivityManager( 1126): Force finishing activity com.android.contacts/.activities.PeopleActivity
Here is the zip containing the files from the app from apktool.
SecContacts

Categories

Resources