Skip to content

Commit

Permalink
Prepare 2.2 release
Browse files Browse the repository at this point in the history
  • Loading branch information
Armaxis committed Feb 5, 2020
1 parent 7859ca0 commit 57d5e35
Show file tree
Hide file tree
Showing 36 changed files with 393 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [build](./build.md)

# build

`fun build(): `[`LeakCanary.Config`](../index.md)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [computeRetainedHeapSize](./compute-retained-heap-size.md)

# computeRetainedHeapSize

`fun computeRetainedHeapSize(computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.computeRetainedHeapSize](../compute-retained-heap-size.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [dumpHeapWhenDebugging](./dump-heap-when-debugging.md)

# dumpHeapWhenDebugging

`fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.dumpHeapWhenDebugging](../dump-heap-when-debugging.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [dumpHeap](./dump-heap.md)

# dumpHeap

`fun dumpHeap(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.dumpHeap](../dump-heap.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](./index.md)

# Builder

`class Builder`

Builder for [LeakCanary.Config](../index.md) intended to be used only from Java code.

Usage:

```
LeakCanary.Config config = LeakCanary.getConfig().newBuilder()
.retainedVisibleThreshold(3)
.build();
LeakCanary.setConfig(config);
```

For idiomatic Kotlin use `copy()` method instead:

```
LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)
```

### Functions

| Name | Summary |
|---|---|
| [build](build.md) | `fun build(): `[`LeakCanary.Config`](../index.md) |
| [computeRetainedHeapSize](compute-retained-heap-size.md) | `fun computeRetainedHeapSize(computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [dumpHeap](dump-heap.md) | `fun dumpHeap(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [dumpHeapWhenDebugging](dump-heap-when-debugging.md) | `fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [leakingObjectFinder](leaking-object-finder.md) | `fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): `[`LeakCanary.Config.Builder`](./index.md) |
| [maxStoredHeapDumps](max-stored-heap-dumps.md) | `fun maxStoredHeapDumps(maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [metadataExtractor](metadata-extractor.md) | `fun metadataExtractor(metadataExtractor: MetadataExtractor): `[`LeakCanary.Config.Builder`](./index.md) |
| [objectInspectors](object-inspectors.md) | `fun objectInspectors(objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector>): `[`LeakCanary.Config.Builder`](./index.md) |
| [onHeapAnalyzedListener](on-heap-analyzed-listener.md) | `fun onHeapAnalyzedListener(onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../../-on-heap-analyzed-listener/index.md)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [referenceMatchers](reference-matchers.md) | `fun referenceMatchers(referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher>): `[`LeakCanary.Config.Builder`](./index.md) |
| [requestWriteExternalStoragePermission](request-write-external-storage-permission.md) | `fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
| [retainedVisibleThreshold](retained-visible-threshold.md) | `fun retainedVisibleThreshold(retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`): `[`LeakCanary.Config.Builder`](./index.md) |
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [leakingObjectFinder](./leaking-object-finder.md)

# leakingObjectFinder

`fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.leakingObjectFinder](../leaking-object-finder.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [maxStoredHeapDumps](./max-stored-heap-dumps.md)

# maxStoredHeapDumps

`fun maxStoredHeapDumps(maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.maxStoredHeapDumps](../max-stored-heap-dumps.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [metadataExtractor](./metadata-extractor.md)

# metadataExtractor

`fun metadataExtractor(metadataExtractor: MetadataExtractor): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.metadataExtractor](../metadata-extractor.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [objectInspectors](./object-inspectors.md)

# objectInspectors

`fun objectInspectors(objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector>): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.objectInspectors](../object-inspectors.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [onHeapAnalyzedListener](./on-heap-analyzed-listener.md)

# onHeapAnalyzedListener

`fun onHeapAnalyzedListener(onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../../-on-heap-analyzed-listener/index.md)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.onHeapAnalyzedListener](../on-heap-analyzed-listener.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [referenceMatchers](./reference-matchers.md)

# referenceMatchers

`fun referenceMatchers(referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher>): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.referenceMatchers](../reference-matchers.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [requestWriteExternalStoragePermission](./request-write-external-storage-permission.md)

# requestWriteExternalStoragePermission

`fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.requestWriteExternalStoragePermission](../request-write-external-storage-permission.md)

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[leakcanary-android-core](../../../../index.md) / [leakcanary](../../../index.md) / [LeakCanary](../../index.md) / [Config](../index.md) / [Builder](index.md) / [retainedVisibleThreshold](./retained-visible-threshold.md)

# retainedVisibleThreshold

`fun retainedVisibleThreshold(retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`): `[`LeakCanary.Config.Builder`](index.md)

**See Also**

[LeakCanary.Config.retainedVisibleThreshold](../retained-visible-threshold.md)

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# &lt;init&gt;

`Config(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 5, referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector> = AndroidObjectInspectors.appDefaults, onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../-on-heap-analyzed-listener/index.md)` = DefaultOnHeapAnalyzedListener.create(), metatadaExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 7, requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, useExperimentalLeakFinders: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false)`
`Config(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 5, referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector> = AndroidObjectInspectors.appDefaults, onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../-on-heap-analyzed-listener/index.md)` = DefaultOnHeapAnalyzedListener.create(), metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 7, requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, useExperimentalLeakFinders: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false)`

LeakCanary configuration data class. Properties can be updated via [copy](#).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,17 @@ LeakCanary configuration data class. Properties can be updated via [copy](#).

[config](../config.md)

### Types

| Name | Summary |
|---|---|
| [Builder](-builder/index.md) | `class Builder`<br>Builder for [LeakCanary.Config](./index.md) intended to be used only from Java code. |

### Constructors

| Name | Summary |
|---|---|
| [&lt;init&gt;](-init-.md) | `Config(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 5, referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector> = AndroidObjectInspectors.appDefaults, onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../-on-heap-analyzed-listener/index.md)` = DefaultOnHeapAnalyzedListener.create(), metatadaExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 7, requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, useExperimentalLeakFinders: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false)`<br>LeakCanary configuration data class. Properties can be updated via [copy](#). |
| [&lt;init&gt;](-init-.md) | `Config(dumpHeap: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 5, referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector> = AndroidObjectInspectors.appDefaults, onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../-on-heap-analyzed-listener/index.md)` = DefaultOnHeapAnalyzedListener.create(), metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = true, maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` = 7, requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, useExperimentalLeakFinders: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false)`<br>LeakCanary configuration data class. Properties can be updated via [copy](#). |

### Properties

Expand All @@ -25,10 +31,16 @@ LeakCanary configuration data class. Properties can be updated via [copy](#).
| [dumpHeapWhenDebugging](dump-heap-when-debugging.md) | `val dumpHeapWhenDebugging: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)<br>If [dumpHeapWhenDebugging](dump-heap-when-debugging.md) is false then LeakCanary will not dump the heap when the debugger is attached. The debugger can create temporary memory leaks (for instance if a thread is blocked on a breakpoint). |
| [leakingObjectFinder](leaking-object-finder.md) | `val leakingObjectFinder: LeakingObjectFinder`<br>Finds the objects that are leaking, for which LeakCanary will compute leak traces. |
| [maxStoredHeapDumps](max-stored-heap-dumps.md) | `val maxStoredHeapDumps: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)<br>How many heap dumps are kept on the Android device for this app package. When this threshold is reached LeakCanary deletes the older heap dumps. As several heap dumps may be enqueued you should avoid going down to 1 or 2. |
| [metatadaExtractor](metatada-extractor.md) | `val metatadaExtractor: MetadataExtractor`<br>Extracts metadata from a hprof to be reported in [HeapAnalysisSuccess.metadata](#). Called on a background thread during heap analysis. |
| [metadataExtractor](metadata-extractor.md) | `val metadataExtractor: MetadataExtractor`<br>Extracts metadata from a hprof to be reported in [HeapAnalysisSuccess.metadata](#). Called on a background thread during heap analysis. |
| [objectInspectors](object-inspectors.md) | `val objectInspectors: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ObjectInspector>`<br>List of [ObjectInspector](#) that provide LeakCanary with insights about objects found in the heap. You can create your own [ObjectInspector](#) implementations, and also add a [shark.AppSingletonInspector](#) instance created with the list of internal singletons. |
| [onHeapAnalyzedListener](on-heap-analyzed-listener.md) | `val onHeapAnalyzedListener: `[`OnHeapAnalyzedListener`](../../-on-heap-analyzed-listener/index.md)<br>Called on a background thread when the heap analysis is complete. If you want leaks to be added to the activity that lists leaks, make sure to delegate calls to a [DefaultOnHeapAnalyzedListener](../../-default-on-heap-analyzed-listener/index.md). |
| [referenceMatchers](reference-matchers.md) | `val referenceMatchers: `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<ReferenceMatcher>`<br>Known patterns of references in the heap, lister here either to ignore them ([IgnoredReferenceMatcher](#)) or to mark them as library leaks ([LibraryLeakReferenceMatcher](#)). |
| [requestWriteExternalStoragePermission](request-write-external-storage-permission.md) | `val requestWriteExternalStoragePermission: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)<br>LeakCanary always attempts to store heap dumps on the external storage if the WRITE_EXTERNAL_STORAGE is already granted, and otherwise uses the app storage. If the WRITE_EXTERNAL_STORAGE permission is not granted and [requestWriteExternalStoragePermission](request-write-external-storage-permission.md) is true, then LeakCanary will display a notification to ask for that permission. |
| [retainedVisibleThreshold](retained-visible-threshold.md) | `val retainedVisibleThreshold: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)<br>When the app is visible, LeakCanary will wait for at least [retainedVisibleThreshold](retained-visible-threshold.md) retained instances before dumping the heap. Dumping the heap freezes the UI and can be frustrating for developers who are trying to work. This is especially frustrating as the Android Framework has a number of leaks that cannot easily be fixed. |
| [useExperimentalLeakFinders](use-experimental-leak-finders.md) | `val ~~useExperimentalLeakFinders~~: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)<br>Deprecated: This is a no-op, set a custom [leakingObjectFinder](leaking-object-finder.md) instead. |

### Functions

| Name | Summary |
|---|---|
| [newBuilder](new-builder.md)<br>(Kotlin 999.9) | `fun newBuilder(): `[`LeakCanary.Config.Builder`](-builder/index.md)<br>Construct a new Config via [LeakCanary.Config.Builder](-builder/index.md). Note: this method is intended to be used from Java code only. For idiomatic Kotlin use `copy()` to modify [LeakCanary.config](../config.md). |
Loading

0 comments on commit 57d5e35

Please sign in to comment.