diff --git a/ui/ui-unit/api/public_plus_experimental_current.txt b/ui/ui-unit/api/public_plus_experimental_current.txt
index 05a1680..68a02a8 100644
--- a/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -1,12 +1,12 @@
 // Signature format: 3.0
 package androidx.ui.core {
 
-  public final class Constraints {
+  @androidx.compose.Immutable public final class Constraints {
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method public androidx.ui.core.Constraints copy-Q13GOEE(int minWidth, int maxWidth, int minHeight, int maxHeight);
+    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy-Q13GOEE(int minWidth, int maxWidth, int minHeight, int maxHeight);
     method public int getMaxHeight();
     method public int getMaxWidth();
     method public int getMinHeight();
@@ -15,16 +15,16 @@
   }
 
   public static final class Constraints.Companion {
-    method public androidx.ui.core.Constraints fixed-rRMsBxU(int width, int height);
-    method public androidx.ui.core.Constraints fixedHeight-gshw56o(int height);
-    method public androidx.ui.core.Constraints fixedWidth-gshw56o(int width);
+    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed-rRMsBxU(int width, int height);
+    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight-gshw56o(int height);
+    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth-gshw56o(int width);
   }
 
-  public final inline class Constraints2 {
+  @androidx.compose.Immutable public final inline class Constraints2 {
     ctor public Constraints2();
     method public static long constructor-impl(internal long value);
-    method public static long copy-impl(long $this, int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.Stable public static long copy-impl(long $this, int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static boolean getHasBoundedHeight-impl(long $this);
     method public static boolean getHasBoundedWidth-impl(long $this);
@@ -32,39 +32,39 @@
     method public static int getMaxWidth-impl(long $this);
     method public static int getMinHeight-impl(long $this);
     method public static int getMinWidth-impl(long $this);
-    method public static inline int hashCode-impl(long p);
-    method public static inline String! toString-impl(long p);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.Constraints2.Companion! Companion;
-    field public static final int Infinity = -1073741824; // 0xc0000000
+    field @androidx.compose.Stable public static final int Infinity = -1073741824; // 0xc0000000
   }
 
   public static final class Constraints2.Companion {
-    method public long fixed(int width, int height);
-    method public long fixedHeight(int height);
-    method public long fixedWidth(int width);
+    method @androidx.compose.Stable public long fixed(int width, int height);
+    method @androidx.compose.Stable public long fixedHeight(int height);
+    method @androidx.compose.Stable public long fixedWidth(int width);
   }
 
   public final class Constraints2Kt {
-    method public static long Constraints2(@IntRange(from=0) int minWidth = 0, int maxWidth = -1073741824, @IntRange(from=0) int minHeight = 0, int maxHeight = -1073741824);
-    method public static long constrain-M1ogGms(long, long size);
-    method public static long enforce-uQjoOwo(long, long otherConstraints);
+    method @androidx.compose.Stable public static long Constraints2(@IntRange(from=0) int minWidth = 0, int maxWidth = -1073741824, @IntRange(from=0) int minHeight = 0, int maxHeight = -1073741824);
+    method @androidx.compose.Stable public static long constrain-M1ogGms(long, long size);
+    method @androidx.compose.Stable public static long enforce-uQjoOwo(long, long otherConstraints);
     method public static boolean getHasFixedHeight-ybNdgAI(long);
     method public static boolean getHasFixedWidth-ybNdgAI(long);
     method public static boolean isZero-ybNdgAI(long);
-    method public static long offset-xOKVbDg(long, int horizontal = 0, int vertical = 0);
-    method public static boolean satisfiedBy-M1ogGms(long, long size);
+    method @androidx.compose.Stable public static long offset-xOKVbDg(long, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy-M1ogGms(long, long size);
   }
 
   public final class ConstraintsKt {
-    method public static androidx.ui.unit.IntPxSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntPxSize size);
-    method public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
+    method @androidx.compose.Stable public static androidx.ui.unit.IntPxSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntPxSize size);
+    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.ui.core.Constraints);
     method public static boolean getHasBoundedWidth(androidx.ui.core.Constraints);
     method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
     method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
     method public static boolean isZero(androidx.ui.core.Constraints);
-    method public static androidx.ui.core.Constraints offset-3L2DHGc(androidx.ui.core.Constraints, int horizontal = 0.ipx, int vertical = 0.ipx);
-    method public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntPxSize size);
+    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset-3L2DHGc(androidx.ui.core.Constraints, int horizontal = 0.ipx, int vertical = 0.ipx);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntPxSize size);
   }
 
   public enum LayoutDirection {
@@ -80,65 +80,65 @@
     method public static androidx.ui.unit.Density Density(android.content.Context context);
   }
 
-  public final class Bounds {
+  @androidx.compose.Immutable public final class Bounds {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  public interface Density {
+  @androidx.compose.Immutable public interface Density {
     method public float getDensity();
     method public float getFontScale();
-    method public default float toDp(float);
-    method public default float toDp(int);
-    method public default float toDp-NgWp0Z8(float);
-    method public default float toDp-gshw56o(int);
-    method public default float toDp-vVlMl6k(long);
-    method public default int toIntPx-ipo6vVg(float);
-    method public default int toIntPx-vVlMl6k(long);
-    method public default float toPx-ipo6vVg(float);
-    method public default float toPx-vVlMl6k(long);
-    method public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
-    method public default long toSp(float);
-    method public default long toSp(int);
-    method public default long toSp-NgWp0Z8(float);
-    method public default long toSp-gshw56o(int);
-    method public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default float toDp(float);
+    method @androidx.compose.Stable public default float toDp(int);
+    method @androidx.compose.Stable public default float toDp-NgWp0Z8(float);
+    method @androidx.compose.Stable public default float toDp-gshw56o(int);
+    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
+    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
+    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
+    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
+    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
+    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default long toSp(float);
+    method @androidx.compose.Stable public default long toSp(int);
+    method @androidx.compose.Stable public default long toSp-NgWp0Z8(float);
+    method @androidx.compose.Stable public default long toSp-gshw56o(int);
+    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
     ctor public Dp();
-    method public operator int compareTo-ipo6vVg(float p);
-    method public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline operator float div-impl(float $this, int other);
-    method public static inline operator float div-ipo6vVg(float $this, float other);
-    method public static inline operator float div-x8crYZs(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-ipo6vVg(float $this, float other);
-    method public static inline operator float plus-ipo6vVg(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static inline operator float times-impl(float $this, int other);
-    method public static inline operator float times-ipo6vVg(float $this, float other);
-    method public static inline operator float times-x8crYZs(float $this, float other);
-    method public static String toString-impl(float $this);
-    method public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
+    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.ui.unit.Dp.Companion! Companion;
   }
 
@@ -151,100 +151,100 @@
     property public final float Unspecified;
   }
 
-  public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method public operator int compareTo-JDqhs2g(float p);
-    method public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
+    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-JDqhs2g(float $this, float other);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline operator float div-ipo6vVg(float $this, float other);
-    method public static inline operator float div-x8crYZs(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method public static inline operator float plus-JDqhs2g(float $this, float dimension);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method public operator int compareTo-_K2iRR8(float p);
-    method public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method public static inline operator float times-JDqhs2g(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static inline operator float times-ipo6vVg(float $this, float other);
-    method public static inline operator float times-x8crYZs(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method public static inline long Position-98Cn76g(float x, float y);
-    method public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method public static inline operator float div-H0Zl2lQ(float, float other);
-    method public static inline operator float div-Y_YOLaE(double, float other);
-    method public static inline operator float div-hZ6b2Ic(int, float other);
-    method public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
+    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
+    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     method public static inline float getHeight(androidx.ui.unit.Bounds);
     method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method public static inline boolean isFinite-ipo6vVg(float);
-    method public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method public static inline float max-98Cn76g(float a, float b);
-    method public static inline float min-98Cn76g(float a, float b);
-    method public static inline operator float times-H0Zl2lQ(float, float other);
-    method public static inline operator float times-Y_YOLaE(double, float other);
-    method public static inline operator float times-hZ6b2Ic(int, float other);
+    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
+    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
+    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
+    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
   }
 
-  public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method public operator int compareTo-x8crYZs(float p);
-    method public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
+    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-JDqhs2g(float $this, float other);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline operator float div-ipo6vVg(float $this, float other);
-    method public static inline operator float div-x8crYZs(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-x8crYZs(float $this, float other);
-    method public static inline operator float plus-x8crYZs(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static inline operator float times-ipo6vVg(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
     method public long component1();
-    method public androidx.ui.unit.Duration copy(long nanoseconds);
-    method public operator androidx.ui.unit.Duration div(int quotient);
-    method public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method public operator androidx.ui.unit.Duration times(int factor);
-    method public operator androidx.ui.unit.Duration times(double factor);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
     field public static final androidx.ui.unit.Duration.Companion! Companion;
   }
 
@@ -288,27 +288,27 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  public final inline class IntPx implements java.lang.Comparable<androidx.ui.unit.IntPx> {
+  @androidx.compose.Immutable public final inline class IntPx implements java.lang.Comparable<androidx.ui.unit.IntPx> {
     ctor public IntPx();
-    method public static inline operator int compareTo-NgWp0Z8(int $this, float other);
-    method public operator int compareTo-gshw56o(int p);
-    method public static operator int compareTo-gshw56o(int $this, int other);
+    method @androidx.compose.Stable public static inline operator int compareTo-NgWp0Z8(int $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-gshw56o(int p);
+    method @androidx.compose.Stable public static operator int compareTo-gshw56o(int $this, int other);
     method public static int constructor-impl(int value);
-    method public static operator int div-impl(int $this, float other);
-    method public static operator int div-impl(int $this, double other);
-    method public static operator int div-impl(int $this, int other);
-    method public static inline boolean equals-impl(int p, Object? p1);
+    method @androidx.compose.Stable public static operator int div-impl(int $this, float other);
+    method @androidx.compose.Stable public static operator int div-impl(int $this, double other);
+    method @androidx.compose.Stable public static operator int div-impl(int $this, int other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(int p, Object? p1);
     method public static boolean equals-impl0(int p1, int p2);
     method public int getValue();
-    method public static inline int hashCode-impl(int p);
-    method public static operator int minus-gshw56o(int $this, int other);
-    method public static operator int plus-gshw56o(int $this, int other);
-    method public static inline operator int rem-impl(int $this, int other);
-    method public static operator int times-impl(int $this, float other);
-    method public static operator int times-impl(int $this, double other);
-    method public static operator int times-impl(int $this, int other);
-    method public static String toString-impl(int $this);
-    method public static operator int unaryMinus-impl(int $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(int p);
+    method @androidx.compose.Stable public static operator int minus-gshw56o(int $this, int other);
+    method @androidx.compose.Stable public static operator int plus-gshw56o(int $this, int other);
+    method @androidx.compose.Stable public static inline operator int rem-impl(int $this, int other);
+    method @androidx.compose.Stable public static operator int times-impl(int $this, float other);
+    method @androidx.compose.Stable public static operator int times-impl(int $this, double other);
+    method @androidx.compose.Stable public static operator int times-impl(int $this, int other);
+    method @androidx.compose.Stable public static String toString-impl(int $this);
+    method @androidx.compose.Stable public static operator int unaryMinus-impl(int $this);
     field public static final androidx.ui.unit.IntPx.Companion! Companion;
   }
 
@@ -319,12 +319,12 @@
     property public final int Zero;
   }
 
-  public final class IntPxBounds {
+  @androidx.compose.Immutable public final class IntPxBounds {
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method public androidx.ui.unit.IntPxBounds copy-Q13GOEE(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.ui.unit.IntPxBounds copy-Q13GOEE(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -333,41 +333,41 @@
 
   public final class IntPxKt {
     method public static inline androidx.ui.unit.IntPxPosition IntPxPosition-rRMsBxU(int x, int y);
-    method public static inline androidx.ui.unit.IntPxSize IntPxSize-rRMsBxU(int width, int height);
-    method public static inline androidx.ui.unit.PxPosition PxPosition-rRMsBxU(int x, int y);
-    method public static inline androidx.ui.unit.PxSize PxSize-rRMsBxU(int width, int height);
-    method public static inline int ceil-NgWp0Z8(float);
-    method public static androidx.ui.unit.IntPxPosition center(androidx.ui.unit.IntPxSize);
-    method public static inline androidx.ui.unit.IntPxPosition center(androidx.ui.unit.IntPxBounds);
-    method public static inline int coerceAtLeast-rRMsBxU(int, int minimumValue);
-    method public static inline int coerceAtMost-rRMsBxU(int, int maximumValue);
-    method public static inline int coerceIn-qx1LT1w(int, int minimumValue, int maximumValue);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntPxSize IntPxSize-rRMsBxU(int width, int height);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxPosition PxPosition-rRMsBxU(int x, int y);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxSize PxSize-rRMsBxU(int width, int height);
+    method @androidx.compose.Stable public static inline int ceil-NgWp0Z8(float);
+    method @androidx.compose.Stable public static androidx.ui.unit.IntPxPosition center(androidx.ui.unit.IntPxSize);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntPxPosition center(androidx.ui.unit.IntPxBounds);
+    method @androidx.compose.Stable public static inline int coerceAtLeast-rRMsBxU(int, int minimumValue);
+    method @androidx.compose.Stable public static inline int coerceAtMost-rRMsBxU(int, int maximumValue);
+    method @androidx.compose.Stable public static inline int coerceIn-qx1LT1w(int, int minimumValue, int maximumValue);
     method public static inline int getHeight(androidx.ui.unit.IntPxBounds);
     method public static inline int getIpx(int);
     method public static inline int getWidth(androidx.ui.unit.IntPxBounds);
-    method public static inline boolean isFinite-gshw56o(int);
-    method public static androidx.ui.unit.IntPxPosition lerp(androidx.ui.unit.IntPxPosition start, androidx.ui.unit.IntPxPosition stop, float fraction);
-    method public static int lerp-9BbVZj8(int start, int stop, float fraction);
-    method public static inline int max-rRMsBxU(int a, int b);
-    method public static inline int min-rRMsBxU(int a, int b);
-    method public static inline int round-NgWp0Z8(float);
-    method public static inline operator androidx.ui.unit.IntPxSize times(int, androidx.ui.unit.IntPxSize size);
-    method public static inline operator int times--Vi_IPY(float, int other);
-    method public static inline operator int times-9kGzznM(int, int other);
-    method public static inline operator int times-tHVXE4c(double, int other);
+    method @androidx.compose.Stable public static inline boolean isFinite-gshw56o(int);
+    method @androidx.compose.Stable public static androidx.ui.unit.IntPxPosition lerp(androidx.ui.unit.IntPxPosition start, androidx.ui.unit.IntPxPosition stop, float fraction);
+    method @androidx.compose.Stable public static int lerp-9BbVZj8(int start, int stop, float fraction);
+    method @androidx.compose.Stable public static inline int max-rRMsBxU(int a, int b);
+    method @androidx.compose.Stable public static inline int min-rRMsBxU(int a, int b);
+    method @androidx.compose.Stable public static inline int round-NgWp0Z8(float);
+    method @androidx.compose.Stable public static inline operator androidx.ui.unit.IntPxSize times(int, androidx.ui.unit.IntPxSize size);
+    method @androidx.compose.Stable public static inline operator int times--Vi_IPY(float, int other);
+    method @androidx.compose.Stable public static inline operator int times-9kGzznM(int, int other);
+    method @androidx.compose.Stable public static inline operator int times-tHVXE4c(double, int other);
     method public static inline float toPx-gshw56o(int);
-    method public static inline androidx.ui.unit.PxPosition toPxPosition(androidx.ui.unit.IntPxPosition);
-    method public static inline androidx.ui.unit.PxSize toPxSize(androidx.ui.unit.IntPxSize);
-    method public static inline androidx.ui.unit.IntPxSize toSize(androidx.ui.unit.IntPxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxPosition toPxPosition(androidx.ui.unit.IntPxPosition);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxSize toPxSize(androidx.ui.unit.IntPxSize);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntPxSize toSize(androidx.ui.unit.IntPxBounds);
   }
 
-  public final class IntPxPosition {
-    method public androidx.ui.unit.IntPxPosition copy(long value);
+  @androidx.compose.Immutable public final class IntPxPosition {
+    method @androidx.compose.Immutable public androidx.ui.unit.IntPxPosition copy(long value);
     method public inline int getX();
     method public inline int getY();
-    method public inline operator androidx.ui.unit.IntPxPosition minus(androidx.ui.unit.IntPxPosition other);
-    method public inline operator androidx.ui.unit.IntPxPosition plus(androidx.ui.unit.IntPxPosition other);
-    method public inline operator androidx.ui.unit.IntPxPosition unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntPxPosition minus(androidx.ui.unit.IntPxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntPxPosition plus(androidx.ui.unit.IntPxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntPxPosition unaryMinus();
     property public final inline int x;
     property public final inline int y;
     field public static final androidx.ui.unit.IntPxPosition.Companion! Companion;
@@ -378,12 +378,12 @@
     property public final androidx.ui.unit.IntPxPosition Origin;
   }
 
-  public final class IntPxSize {
-    method public androidx.ui.unit.IntPxSize copy(long value);
-    method public inline operator androidx.ui.unit.IntPxSize div(int other);
+  @androidx.compose.Immutable public final class IntPxSize {
+    method @androidx.compose.Immutable public androidx.ui.unit.IntPxSize copy(long value);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntPxSize div(int other);
     method public inline int getHeight();
     method public inline int getWidth();
-    method public inline operator androidx.ui.unit.IntPxSize times(int other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntPxSize times(int other);
     property public final inline int height;
     property public final inline int width;
     field public static final androidx.ui.unit.IntPxSize.Companion! Companion;
@@ -394,61 +394,61 @@
     property public final androidx.ui.unit.IntPxSize Zero;
   }
 
-  public final inline class IntSize {
+  @androidx.compose.Immutable public final inline class IntSize {
     ctor public IntSize();
     method public static long constructor-impl(internal long value);
-    method public static operator long div-impl(long $this, int other);
-    method public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.Stable public static operator long div-impl(long $this, int other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static int getHeight-impl(long $this);
     method public static int getWidth-impl(long $this);
-    method public static inline int hashCode-impl(long p);
-    method public static operator long times-impl(long $this, int other);
-    method public static String toString-impl(long $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.Stable public static operator long times-impl(long $this, int other);
+    method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
   public final class IntSizeKt {
-    method public static long IntSize(int width, int height);
-    method public static operator long times-twsQOwo(int, long size);
+    method @androidx.compose.Stable public static long IntSize(int width, int height);
+    method @androidx.compose.Stable public static operator long times-twsQOwo(int, long size);
   }
 
-  public final inline class Position {
+  @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long value);
-    method public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
-    method public static inline int hashCode-impl(long p);
-    method public static inline operator long minus-T8eBu-w(long $this, long other);
-    method public static inline operator long plus-T8eBu-w(long $this, long other);
-    method public static String toString-impl(long $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
-  public final inline class Px implements java.lang.Comparable<androidx.ui.unit.Px> {
+  @androidx.compose.Immutable public final inline class Px implements java.lang.Comparable<androidx.ui.unit.Px> {
     ctor public Px();
-    method public operator int compareTo-NgWp0Z8(float p);
-    method public static operator int compareTo-NgWp0Z8(float $this, float other);
-    method public static inline operator int compareTo-gshw56o(float $this, int other);
+    method @androidx.compose.Stable public operator int compareTo-NgWp0Z8(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator int compareTo-gshw56o(float $this, int other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-NgWp0Z8(float $this, float other);
-    method public static inline operator float div-RjPF0Mw(float $this, float other);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline operator float div-impl(float $this, int other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-NgWp0Z8(float $this, float other);
-    method public static inline operator float minus-gshw56o(float $this, int other);
-    method public static inline operator float plus-NgWp0Z8(float $this, float other);
-    method public static inline operator float plus-gshw56o(float $this, int other);
-    method public static inline operator float times-NgWp0Z8(float $this, float other);
-    method public static inline operator float times-RjPF0Mw(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static inline operator float times-impl(float $this, int other);
-    method public static String toString-impl(float $this);
-    method public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-gshw56o(float $this, int other);
+    method @androidx.compose.Stable public static inline operator float plus-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-gshw56o(float $this, int other);
+    method @androidx.compose.Stable public static inline operator float times-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
+    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.ui.unit.Px.Companion! Companion;
   }
 
@@ -459,105 +459,105 @@
     property public final float Zero;
   }
 
-  public final class PxBounds {
+  @androidx.compose.Immutable public final class PxBounds {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method public androidx.ui.unit.PxBounds copy-wHlpFhg(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy-wHlpFhg(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method public operator int compareTo-bji3ab4(float p);
-    method public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-NgWp0Z8(float $this, float other);
-    method public static inline operator float div-RjPF0Mw(float $this, float other);
-    method public static inline operator float div-bji3ab4(float $this, float other);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method public static inline operator float plus-bji3ab4(float $this, float dimension);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method public operator int compareTo-KGV0gLo(float p);
-    method public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
+    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method public static inline operator float times-NgWp0Z8(float $this, float other);
-    method public static inline operator float times-RjPF0Mw(float $this, float other);
-    method public static inline operator float times-bji3ab4(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method public static inline androidx.ui.unit.PxBounds PxBounds(androidx.ui.unit.PxPosition topLeft, androidx.ui.unit.PxSize size);
-    method public static inline androidx.ui.unit.PxPosition PxPosition(float x, float y);
-    method public static inline androidx.ui.unit.PxPosition PxPosition-qHcltEY(float x, float y);
-    method public static inline androidx.ui.unit.PxSize PxSize(float width, float height);
-    method public static inline androidx.ui.unit.PxSize PxSize-qHcltEY(float width, float height);
-    method public static inline float abs-NgWp0Z8(float x);
-    method public static androidx.ui.unit.PxPosition center(androidx.ui.unit.PxSize);
-    method public static inline androidx.ui.unit.PxPosition center(androidx.ui.unit.PxBounds);
-    method public static inline float coerceAtLeast-qHcltEY(float, float minimumValue);
-    method public static inline float coerceAtMost-qHcltEY(float, float maximumValue);
-    method public static inline float coerceIn-HXvnt1Q(float, float minimumValue, float maximumValue);
-    method public static inline operator float div-78fIwVY(double, float other);
-    method public static inline operator float div-Ndu7NvY(int, float other);
-    method public static inline operator float div-kxDXtn8(float, float other);
-    method public static float getDistance(androidx.ui.unit.PxPosition);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds(androidx.ui.unit.PxPosition topLeft, androidx.ui.unit.PxSize size);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxPosition PxPosition(float x, float y);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxPosition PxPosition-qHcltEY(float x, float y);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxSize PxSize(float width, float height);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxSize PxSize-qHcltEY(float width, float height);
+    method @androidx.compose.Stable public static inline float abs-NgWp0Z8(float x);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxPosition center(androidx.ui.unit.PxSize);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxPosition center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-qHcltEY(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-qHcltEY(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-HXvnt1Q(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-78fIwVY(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-Ndu7NvY(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-kxDXtn8(float, float other);
+    method @androidx.compose.Stable public static float getDistance(androidx.ui.unit.PxPosition);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static float getMinDimension(androidx.ui.unit.PxSize);
     method public static inline float getPx(int);
     method public static inline float getPx(double);
     method public static inline float getPx(float);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method public static androidx.ui.unit.PxPosition lerp(androidx.ui.unit.PxPosition start, androidx.ui.unit.PxPosition stop, float fraction);
-    method public static float lerp-g-Fs4Ag(float start, float stop, float fraction);
-    method public static inline float max-qHcltEY(float a, float b);
-    method public static inline float min-qHcltEY(float a, float b);
-    method public static inline androidx.ui.unit.IntPxPosition round(androidx.ui.unit.PxPosition);
-    method public static inline operator androidx.ui.unit.PxSize times(int, androidx.ui.unit.PxSize size);
-    method public static inline operator androidx.ui.unit.PxSize times(float, androidx.ui.unit.PxSize size);
-    method public static inline operator androidx.ui.unit.PxSize times(double, androidx.ui.unit.PxSize size);
-    method public static inline operator float times-78fIwVY(double, float other);
-    method public static inline operator float times-Ndu7NvY(int, float other);
-    method public static inline operator float times-kxDXtn8(float, float other);
-    method public static androidx.ui.unit.PxBounds toBounds(androidx.ui.unit.PxSize);
-    method public static inline long toOffset(androidx.ui.unit.PxPosition);
-    method public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxSize);
-    method public static androidx.ui.unit.PxSize toSize(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxPosition lerp(androidx.ui.unit.PxPosition start, androidx.ui.unit.PxPosition stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-g-Fs4Ag(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-qHcltEY(float a, float b);
+    method @androidx.compose.Stable public static inline float min-qHcltEY(float a, float b);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntPxPosition round(androidx.ui.unit.PxPosition);
+    method @androidx.compose.Stable public static inline operator androidx.ui.unit.PxSize times(int, androidx.ui.unit.PxSize size);
+    method @androidx.compose.Stable public static inline operator androidx.ui.unit.PxSize times(float, androidx.ui.unit.PxSize size);
+    method @androidx.compose.Stable public static inline operator androidx.ui.unit.PxSize times(double, androidx.ui.unit.PxSize size);
+    method @androidx.compose.Stable public static inline operator float times-78fIwVY(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-Ndu7NvY(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-kxDXtn8(float, float other);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds(androidx.ui.unit.PxSize);
+    method @androidx.compose.Stable public static inline long toOffset(androidx.ui.unit.PxPosition);
+    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxSize);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxSize toSize(androidx.ui.unit.PxBounds);
   }
 
-  public final class PxPosition {
-    method public androidx.ui.unit.PxPosition copy(long value);
+  @androidx.compose.Immutable public final class PxPosition {
+    method @androidx.compose.Immutable public androidx.ui.unit.PxPosition copy(long value);
     method public inline float getX();
     method public inline float getY();
-    method public inline operator androidx.ui.unit.PxPosition minus(androidx.ui.unit.PxPosition other);
-    method public inline operator androidx.ui.unit.PxPosition minus(androidx.ui.unit.IntPxPosition other);
-    method public inline operator androidx.ui.unit.PxPosition plus(androidx.ui.unit.PxPosition other);
-    method public inline operator androidx.ui.unit.PxPosition plus(androidx.ui.unit.IntPxPosition other);
-    method public inline operator androidx.ui.unit.PxPosition unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxPosition minus(androidx.ui.unit.PxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxPosition minus(androidx.ui.unit.IntPxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxPosition plus(androidx.ui.unit.PxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxPosition plus(androidx.ui.unit.IntPxPosition other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxPosition unaryMinus();
     property public final inline float x;
     property public final inline float y;
     field public static final androidx.ui.unit.PxPosition.Companion! Companion;
@@ -568,16 +568,16 @@
     property public final androidx.ui.unit.PxPosition Origin;
   }
 
-  public final class PxSize {
-    method public androidx.ui.unit.PxSize copy(long value);
-    method public inline operator androidx.ui.unit.PxSize div(int other);
-    method public inline operator androidx.ui.unit.PxSize div(float other);
-    method public inline operator androidx.ui.unit.PxSize div(double other);
+  @androidx.compose.Immutable public final class PxSize {
+    method @androidx.compose.Immutable public androidx.ui.unit.PxSize copy(long value);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize div(int other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize div(float other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize div(double other);
     method public inline float getHeight();
     method public inline float getWidth();
-    method public inline operator androidx.ui.unit.PxSize times(int other);
-    method public inline operator androidx.ui.unit.PxSize times(float other);
-    method public inline operator androidx.ui.unit.PxSize times(double other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize times(int other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize times(float other);
+    method @androidx.compose.Stable public inline operator androidx.ui.unit.PxSize times(double other);
     property public final inline float height;
     property public final inline float width;
     field public static final androidx.ui.unit.PxSize.Companion! Companion;
@@ -590,27 +590,27 @@
     property public final androidx.ui.unit.PxSize Zero;
   }
 
-  public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method public operator int compareTo-RjPF0Mw(float p);
-    method public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
     method public static float constructor-impl(float value);
-    method public static inline operator float div-NgWp0Z8(float $this, float other);
-    method public static inline operator float div-RjPF0Mw(float $this, float other);
-    method public static inline operator float div-bji3ab4(float $this, float other);
-    method public static inline operator float div-impl(float $this, float other);
-    method public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.Stable public static inline operator float div-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
-    method public static inline int hashCode-impl(float p);
-    method public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method public static inline operator float plus-RjPF0Mw(float $this, float other);
-    method public static inline operator float times-NgWp0Z8(float $this, float other);
-    method public static inline operator float times-impl(float $this, float other);
-    method public static String toString-impl(float $this);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-NgWp0Z8(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  public final inline class TextUnit {
+  @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo-vVlMl6k(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -618,12 +618,12 @@
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
     method public static inline operator float div-vVlMl6k(long $this, long other);
-    method public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
-    method public static inline int hashCode-impl(long p);
+    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
@@ -649,21 +649,21 @@
   }
 
   public final class TextUnitKt {
-    method public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method public static long lerp-SpZbbpo(long a, long b, float t);
-    method public static inline long max-gL_aCS0(long a, long b);
-    method public static inline long min-gL_aCS0(long a, long b);
-    method public static inline operator long times-GncdoDw(double, long other);
-    method public static inline operator long times-MVx5XBU(float, long other);
-    method public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
+    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
+    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
   }
 
   public enum TextUnitType {
@@ -672,11 +672,11 @@
     enum_constant public static final androidx.ui.unit.TextUnitType Sp;
   }
 
-  public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.ui.unit.Uptime other);
     method public long component1();
-    method public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
     method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
@@ -693,10 +693,10 @@
     method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
   }
 
-  public final class Velocity {
+  @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.ui.unit.PxPosition pixelsPerSecond);
     method public androidx.ui.unit.PxPosition component1();
-    method public androidx.ui.unit.Velocity copy(androidx.ui.unit.PxPosition pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.unit.PxPosition pixelsPerSecond);
     method public androidx.ui.unit.PxPosition getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion! Companion;
