Add encode and decode padding options
diff --git a/libraries/stdlib/api/js/kotlin.io.encoding.kt b/libraries/stdlib/api/js/kotlin.io.encoding.kt
index 8241b5b..5bdce3a 100644
--- a/libraries/stdlib/api/js/kotlin.io.encoding.kt
+++ b/libraries/stdlib/api/js/kotlin.io.encoding.kt
@@ -17,11 +17,29 @@
 
     public final fun encodeToByteArray(source: kotlin.ByteArray, startIndex: kotlin.Int = ..., endIndex: kotlin.Int = ...): kotlin.ByteArray
 
+    public final fun paddingOnDecode(option: kotlin.io.encoding.Base64.DecodeOption): kotlin.io.encoding.Base64
+
+    public final fun paddingOnEncode(option: kotlin.io.encoding.Base64.EncodeOption): kotlin.io.encoding.Base64
+
+    public final enum class DecodeOption : kotlin.Enum<kotlin.io.encoding.Base64.DecodeOption> {
+        enum entry REQUIRE_PADDING
+
+        enum entry REQUIRE_NO_PADDING
+
+        enum entry REQUIRE_PADDING_OR_NO_PADDING
+    }
+
     public companion object of Base64 Default : kotlin.io.encoding.Base64 {
         public final val Mime: kotlin.io.encoding.Base64 { get; }
 
         public final val UrlSafe: kotlin.io.encoding.Base64 { get; }
     }
+
+    public final enum class EncodeOption : kotlin.Enum<kotlin.io.encoding.Base64.EncodeOption> {
+        enum entry PADDING
+
+        enum entry NO_PADDING
+    }
 }
 
 @kotlin.RequiresOptIn(level = Level.ERROR)
diff --git a/libraries/stdlib/src/kotlin/io/encoding/Base64.kt b/libraries/stdlib/src/kotlin/io/encoding/Base64.kt
index 8f94169..6e6b7aa 100644
--- a/libraries/stdlib/src/kotlin/io/encoding/Base64.kt
+++ b/libraries/stdlib/src/kotlin/io/encoding/Base64.kt
@@ -19,12 +19,41 @@
 @ExperimentalEncodingApi
 public open class Base64 private constructor(
     internal val isUrlSafe: Boolean,
-    internal val isMimeScheme: Boolean
+    internal val isMimeScheme: Boolean,
+    private val encodePadding: EncodeOption = EncodeOption.PADDING,
+    private val decodePadding: DecodeOption = DecodeOption.REQUIRE_PADDING
 ) {
     init {
         require(!isUrlSafe || !isMimeScheme)
     }
 
+    public enum class EncodeOption {
+        PADDING,
+        NO_PADDING
+    }
+
+    public enum class DecodeOption {
+        REQUIRE_PADDING,
+        REQUIRE_NO_PADDING,
+        REQUIRE_PADDING_OR_NO_PADDING
+    }
+
+    public fun paddingOnEncode(option: EncodeOption): Base64 {
+        return if (option != encodePadding) {
+            Base64(isUrlSafe, isMimeScheme, option, decodePadding)
+        } else {
+            this
+        }
+    }
+
+    public fun paddingOnDecode(option: DecodeOption): Base64 {
+        return if (option != decodePadding) {
+            Base64(isUrlSafe, isMimeScheme, encodePadding, option)
+        } else {
+            this
+        }
+    }
+
     /**
      * Encodes bytes from the specified [source] array or its subrange.
      * Returns a [ByteArray] containing the resulting symbols.
diff --git a/libraries/stdlib/test/io.encoding/Base64Test.kt b/libraries/stdlib/test/io.encoding/Base64Test.kt
index 8696425..10e992b 100644
--- a/libraries/stdlib/test/io.encoding/Base64Test.kt
+++ b/libraries/stdlib/test/io.encoding/Base64Test.kt
@@ -272,4 +272,29 @@
         val expected = "Zm9vYmFy".repeat(76).chunked(76).joinToString(separator = "\r\n")
         testEncode(Base64.Mime, "foobar".repeat(76).encodeToByteArray(), expected)
     }
+}
+
+private fun f() {
+    val binary = "foobar".encodeToByteArray()
+    val text = "Zm9vYmFy".encodeToByteArray()
+
+    // Encode with padding
+    Base64.encode(binary)
+    Base64.Mime.encode(binary)
+
+    // Encode without padding
+    Base64.paddingOnEncode(Base64.EncodeOption.NO_PADDING).encode(binary)
+    Base64.UrlSafe.paddingOnEncode(Base64.EncodeOption.NO_PADDING).encode(binary)
+
+    // Decode with required padding
+    Base64.decode(text)
+    Base64.Mime.decode(text)
+
+    // Decode with required no padding
+    Base64.paddingOnDecode(Base64.DecodeOption.REQUIRE_NO_PADDING).decode(text)
+    Base64.Mime.paddingOnDecode(Base64.DecodeOption.REQUIRE_NO_PADDING).decode(text)
+
+    // Decode with required padding or no padding
+    Base64.paddingOnDecode(Base64.DecodeOption.REQUIRE_PADDING_OR_NO_PADDING).decode(text)
+    Base64.Mime.paddingOnDecode(Base64.DecodeOption.REQUIRE_PADDING_OR_NO_PADDING).decode(text)
 }
\ No newline at end of file
diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
index 94f966a9..ba79ec2 100644
--- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
+++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
@@ -3279,7 +3279,6 @@
 
 public class kotlin/io/encoding/Base64 {
 	public static final field Default Lkotlin/io/encoding/Base64$Default;
-	public synthetic fun <init> (ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
 	public final fun decode (Ljava/lang/CharSequence;II)[B
 	public final fun decode ([BII)[B
 	public static synthetic fun decode$default (Lkotlin/io/encoding/Base64;Ljava/lang/CharSequence;IIILjava/lang/Object;)[B
@@ -3296,6 +3295,17 @@
 	public static synthetic fun encodeToAppendable$default (Lkotlin/io/encoding/Base64;[BLjava/lang/Appendable;IIILjava/lang/Object;)Ljava/lang/Appendable;
 	public final fun encodeToByteArray ([BII)[B
 	public static synthetic fun encodeToByteArray$default (Lkotlin/io/encoding/Base64;[BIIILjava/lang/Object;)[B
+	public final fun paddingOnDecode (Lkotlin/io/encoding/Base64$DecodeOption;)Lkotlin/io/encoding/Base64;
+	public final fun paddingOnEncode (Lkotlin/io/encoding/Base64$EncodeOption;)Lkotlin/io/encoding/Base64;
+}
+
+public final class kotlin/io/encoding/Base64$DecodeOption : java/lang/Enum {
+	public static final field REQUIRE_NO_PADDING Lkotlin/io/encoding/Base64$DecodeOption;
+	public static final field REQUIRE_PADDING Lkotlin/io/encoding/Base64$DecodeOption;
+	public static final field REQUIRE_PADDING_OR_NO_PADDING Lkotlin/io/encoding/Base64$DecodeOption;
+	public static fun getEntries ()Lkotlin/enums/EnumEntries;
+	public static fun valueOf (Ljava/lang/String;)Lkotlin/io/encoding/Base64$DecodeOption;
+	public static fun values ()[Lkotlin/io/encoding/Base64$DecodeOption;
 }
 
 public final class kotlin/io/encoding/Base64$Default : kotlin/io/encoding/Base64 {
@@ -3303,6 +3313,14 @@
 	public final fun getUrlSafe ()Lkotlin/io/encoding/Base64;
 }
 
+public final class kotlin/io/encoding/Base64$EncodeOption : java/lang/Enum {
+	public static final field NO_PADDING Lkotlin/io/encoding/Base64$EncodeOption;
+	public static final field PADDING Lkotlin/io/encoding/Base64$EncodeOption;
+	public static fun getEntries ()Lkotlin/enums/EnumEntries;
+	public static fun valueOf (Ljava/lang/String;)Lkotlin/io/encoding/Base64$EncodeOption;
+	public static fun values ()[Lkotlin/io/encoding/Base64$EncodeOption;
+}
+
 public abstract interface annotation class kotlin/io/encoding/ExperimentalEncodingApi : java/lang/annotation/Annotation {
 }