Most everything is optional. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.
In PHP, there is an array of environmental variables called $_SERVER that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.
How the submitted content interacts with the server can be very telling, so please include as much of it as possible.
This is the call you will make the most. It takes a number of arguments and characteristics about the submitted content and then returns a thumbs up or thumbs down. Performance can drop dramatically if you choose to exclude data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including too much data
By default, if an error (IO, empty response from Akismet, etc.) occurs the function will return false and log the error, use the trueOnError parameter to change this behavior.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
Set to true if Akismet has determined that the last checked comment is blatant spam, and you can safely discard it without saving it in any spam queue.
The x-akismet-pro-tip header from the last operation, if any.
If the x-akismet-pro-tip header is set to discard, then Akismet has determined that the comment is blatant spam, and you can safely discard it without saving it in any spam queue.
This call is intended for the submission of false positives - items that were incorrectly classified as spam by Akismet. It takes identical arguments as comment check and submit spam.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
This call is for submitting comments that weren't marked as spam but should have been.
It is very important that the values you submit with this call match those of your comment check calls as closely as possible. In order to learn from its mistakes, Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made when the content was first posted. While it is normal for less information to be available for submit-spam and submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the values that you do send match those of the original content.
Key verification authenticates your key before calling the comment check, submit spam, or submit ham methods. This is the first call that you should make to Akismet and is especially useful if you will have multiple users with their own Akismet subscriptions using your application.
-
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-a-d-m-i-n_-r-o-l-e.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-a-d-m-i-n_-r-o-l-e.md
new file mode 100644
index 0000000..a567a6d
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-a-d-m-i-n_-r-o-l-e.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [ADMIN_ROLE](./-a-d-m-i-n_-r-o-l-e.md)
+
+# ADMIN_ROLE
+
+`const val ADMIN_ROLE: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L93)
+
+Administrator role. If used, Akismet will always return false.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-init-.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-init-.md
new file mode 100644
index 0000000..82e489b
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-init-.md
@@ -0,0 +1,36 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`AkismetComment(request: `[`HttpServletRequest`](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServletRequest.html)`)`
+
+Create an Akismet comment extracting the [userIp](user-ip.md), [userAgent](user-agent.md), [referrer](referrer.md) and [serverEnv](server-env.md) environment variables
+from a Servlet request.
+
+See the
+[Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+**See Also**
+
+[serverEnv](server-env.md)
+
+`AkismetComment(userIp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, userAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)`
+
+Create an Akismet comment instance.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+### Parameters
+
+`userIp` - IP address of the comment submitter.
+
+`userAgent` - User agent string of the web browser submitting the comment.
+
+**Constructor**
+
+Create an Akismet comment instance.
+
+
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-b-l-o-g_-p-o-s-t.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-b-l-o-g_-p-o-s-t.md
new file mode 100644
index 0000000..b93f825
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-b-l-o-g_-p-o-s-t.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_BLOG_POST](./-t-y-p-e_-b-l-o-g_-p-o-s-t.md)
+
+# TYPE_BLOG_POST
+
+`const val TYPE_BLOG_POST: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L72)
+
+A blog post.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-m-m-e-n-t.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-m-m-e-n-t.md
new file mode 100644
index 0000000..84c1dc5
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-m-m-e-n-t.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_COMMENT](./-t-y-p-e_-c-o-m-m-e-n-t.md)
+
+# TYPE_COMMENT
+
+`const val TYPE_COMMENT: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L63)
+
+A blog comment.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md
new file mode 100644
index 0000000..3b10983
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_CONTACT_FORM](./-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md)
+
+# TYPE_CONTACT_FORM
+
+`const val TYPE_CONTACT_FORM: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L75)
+
+A contact form or feedback form submission.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md
new file mode 100644
index 0000000..13f7b30
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_FORUM_POST](./-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md)
+
+# TYPE_FORUM_POST
+
+`const val TYPE_FORUM_POST: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L66)
+
+A top-level forum post.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-m-e-s-s-a-g-e.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-m-e-s-s-a-g-e.md
new file mode 100644
index 0000000..120bd77
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-m-e-s-s-a-g-e.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_MESSAGE](./-t-y-p-e_-m-e-s-s-a-g-e.md)
+
+# TYPE_MESSAGE
+
+`const val TYPE_MESSAGE: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L81)
+
+A message sent between just a few users.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-p-i-n-g-b-a-c-k.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-p-i-n-g-b-a-c-k.md
new file mode 100644
index 0000000..a4fed1b
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-p-i-n-g-b-a-c-k.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_PINGBACK](./-t-y-p-e_-p-i-n-g-b-a-c-k.md)
+
+# TYPE_PINGBACK
+
+`const val TYPE_PINGBACK: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L84)
+
+A pingback.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-r-e-p-l-y.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-r-e-p-l-y.md
new file mode 100644
index 0000000..c135cbd
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-r-e-p-l-y.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_REPLY](./-t-y-p-e_-r-e-p-l-y.md)
+
+# TYPE_REPLY
+
+`const val TYPE_REPLY: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L69)
+
+A reply to a top-level forum post.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-s-i-g-n-u-p.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-s-i-g-n-u-p.md
new file mode 100644
index 0000000..4238737
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-s-i-g-n-u-p.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_SIGNUP](./-t-y-p-e_-s-i-g-n-u-p.md)
+
+# TYPE_SIGNUP
+
+`const val TYPE_SIGNUP: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L78)
+
+A new user account.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-r-a-c-k-b-a-c-k.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-r-a-c-k-b-a-c-k.md
new file mode 100644
index 0000000..8643403
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-r-a-c-k-b-a-c-k.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_TRACKBACK](./-t-y-p-e_-t-r-a-c-k-b-a-c-k.md)
+
+# TYPE_TRACKBACK
+
+`const val TYPE_TRACKBACK: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L87)
+
+A trackback.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-w-e-e-t.md b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-w-e-e-t.md
new file mode 100644
index 0000000..e831c8e
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/-t-y-p-e_-t-w-e-e-t.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [TYPE_TWEET](./-t-y-p-e_-t-w-e-e-t.md)
+
+# TYPE_TWEET
+
+`const val TYPE_TWEET: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L90)
+
+A Twitter message.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/author-email.md b/docs/net.thauvin.erik.akismet/-akismet-comment/author-email.md
new file mode 100644
index 0000000..ff71cc6
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/author-email.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [authorEmail](./author-email.md)
+
+# authorEmail
+
+`var authorEmail: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L138)
+
+Email address submitted with the comment.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/author-url.md b/docs/net.thauvin.erik.akismet/-akismet-comment/author-url.md
new file mode 100644
index 0000000..7aac7ad
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/author-url.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [authorUrl](./author-url.md)
+
+# authorUrl
+
+`var authorUrl: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L144)
+
+URL submitted with comment.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/author.md b/docs/net.thauvin.erik.akismet/-akismet-comment/author.md
new file mode 100644
index 0000000..47d105a
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/author.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [author](./author.md)
+
+# author
+
+`var author: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L132)
+
+Name submitted with the comment.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/blog-charset.md b/docs/net.thauvin.erik.akismet/-akismet-comment/blog-charset.md
new file mode 100644
index 0000000..3fafe04
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/blog-charset.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [blogCharset](./blog-charset.md)
+
+# blogCharset
+
+`var blogCharset: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L190)
+
+The character encoding for the form values included in comment parameters, such as UTF-8 or ISO-8859-1
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/blog-lang.md b/docs/net.thauvin.erik.akismet/-akismet-comment/blog-lang.md
new file mode 100644
index 0000000..e04e4fc
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/blog-lang.md
@@ -0,0 +1,10 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [blogLang](./blog-lang.md)
+
+# blogLang
+
+`var blogLang: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L182)
+
+Indicates the language(s) in use on the blog or site, in ISO 639-1 format, comma-separated.
+
+A site with articles in English and French might use: `en, fr_ca`
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/content.md b/docs/net.thauvin.erik.akismet/-akismet-comment/content.md
new file mode 100644
index 0000000..d6c5450
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/content.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [content](./content.md)
+
+# content
+
+`var content: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L150)
+
+The content that was submitted.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/date-gmt.md b/docs/net.thauvin.erik.akismet/-akismet-comment/date-gmt.md
new file mode 100644
index 0000000..afe199e
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/date-gmt.md
@@ -0,0 +1,14 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [dateGmt](./date-gmt.md)
+
+# dateGmt
+
+`var dateGmt: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L162)
+
+The UTC timestamp of the creation of the comment, in ISO 8601 format.
+
+May be omitted if the comment is sent to the API at the time it is created.
+
+**See Also**
+
+[Akismet.dateToGmt](../-akismet/date-to-gmt.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/equals.md b/docs/net.thauvin.erik.akismet/-akismet-comment/equals.md
new file mode 100644
index 0000000..2c62689
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/equals.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [equals](./equals.md)
+
+# equals
+
+`open fun equals(other: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L269)
+
+Indicates whether some other object is *equal to* this one.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/hash-code.md b/docs/net.thauvin.erik.akismet/-akismet-comment/hash-code.md
new file mode 100644
index 0000000..a0621ad
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/hash-code.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [hashCode](./hash-code.md)
+
+# hashCode
+
+`open fun hashCode(): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L300)
+
+Returns a hash code value for the object.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/index.md b/docs/net.thauvin.erik.akismet/-akismet-comment/index.md
new file mode 100644
index 0000000..4653a84
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/index.md
@@ -0,0 +1,66 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](./index.md)
+
+# AkismetComment
+
+`open class AkismetComment` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L59)
+
+A comment to send to Akismet.
+
+Most everything is optional. Performance can drop dramatically if you choose to exclude data points. The more data
+you send Akismet about each comment, the greater the accuracy. They recommend erring on the side of including
+too much data.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | Create an Akismet comment extracting the [userIp](user-ip.md), [userAgent](user-agent.md), [referrer](referrer.md) and [serverEnv](server-env.md) environment variables from a Servlet request.`AkismetComment(request: `[`HttpServletRequest`](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServletRequest.html)`)` Create an Akismet comment instance.`AkismetComment(userIp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, userAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [author](author.md) | Name submitted with the comment.`var author: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [authorEmail](author-email.md) | Email address submitted with the comment.`var authorEmail: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [authorUrl](author-url.md) | URL submitted with comment.`var authorUrl: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [blogCharset](blog-charset.md) | The character encoding for the form values included in comment parameters, such as UTF-8 or ISO-8859-1`var blogCharset: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [blogLang](blog-lang.md) | Indicates the language(s) in use on the blog or site, in ISO 639-1 format, comma-separated.`var blogLang: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [content](content.md) | The content that was submitted.`var content: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [dateGmt](date-gmt.md) | The UTC timestamp of the creation of the comment, in ISO 8601 format.`var dateGmt: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [isTest](is-test.md) | This is an optional parameter. You can use it when submitting test queries to Akismet.`var isTest: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [permalink](permalink.md) | The full permanent URL of the entry the comment was submitted to.`var permalink: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [postModifiedGmt](post-modified-gmt.md) | The UTC timestamp of the publication time for the post, page or thread on which the comment was posted.`var postModifiedGmt: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [recheckReason](recheck-reason.md) | If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending comments that you'd like to recheck, include this parameter with a string describing why the content is being rechecked.`var recheckReason: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [referrer](referrer.md) | The content of the referer header should be set here.`var referrer: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [serverEnv](server-env.md) | In PHP, there is an array of environmental variables called `$_SERVER` that contains information about the Web server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to Akismet.`var serverEnv: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` |
+| [type](type.md) | A string that describes the type of content being sent, such as:`var type: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+| [userAgent](user-agent.md) | User agent string of the web browser submitting the comment.`val userAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [userIp](user-ip.md) | IP address of the comment submitter.`val userIp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [userRole](user-role.md) | The user role of the user who submitted the comment. This is an optional parameter.`var userRole: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [equals](equals.md) | Indicates whether some other object is *equal to* this one.`open fun equals(other: `[`Any`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [hashCode](hash-code.md) | Returns a hash code value for the object.`open fun hashCode(): `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
+| [toJson](to-json.md) | Returns a JSON representation of the comment.`fun toJson(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [toString](to-string.md) | Returns a JSON representation of the comment.`open fun toString(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+
+### Companion Object Properties
+
+| Name | Summary |
+|---|---|
+| [ADMIN_ROLE](-a-d-m-i-n_-r-o-l-e.md) | Administrator role. If used, Akismet will always return false.`const val ADMIN_ROLE: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_BLOG_POST](-t-y-p-e_-b-l-o-g_-p-o-s-t.md) | A blog post.`const val TYPE_BLOG_POST: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_COMMENT](-t-y-p-e_-c-o-m-m-e-n-t.md) | A blog comment.`const val TYPE_COMMENT: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_CONTACT_FORM](-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md) | A contact form or feedback form submission.`const val TYPE_CONTACT_FORM: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_FORUM_POST](-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md) | A top-level forum post.`const val TYPE_FORUM_POST: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_MESSAGE](-t-y-p-e_-m-e-s-s-a-g-e.md) | A message sent between just a few users.`const val TYPE_MESSAGE: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_PINGBACK](-t-y-p-e_-p-i-n-g-b-a-c-k.md) | A pingback.`const val TYPE_PINGBACK: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_REPLY](-t-y-p-e_-r-e-p-l-y.md) | A reply to a top-level forum post.`const val TYPE_REPLY: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_SIGNUP](-t-y-p-e_-s-i-g-n-u-p.md) | A new user account.`const val TYPE_SIGNUP: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_TRACKBACK](-t-y-p-e_-t-r-a-c-k-b-a-c-k.md) | A trackback.`const val TYPE_TRACKBACK: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [TYPE_TWEET](-t-y-p-e_-t-w-e-e-t.md) | A Twitter message.`const val TYPE_TWEET: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/is-test.md b/docs/net.thauvin.erik.akismet/-akismet-comment/is-test.md
new file mode 100644
index 0000000..af49fb6
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/is-test.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [isTest](./is-test.md)
+
+# isTest
+
+`var isTest: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L206)
+
+This is an optional parameter. You can use it when submitting test queries to Akismet.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/permalink.md b/docs/net.thauvin.erik.akismet/-akismet-comment/permalink.md
new file mode 100644
index 0000000..3c36968
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/permalink.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [permalink](./permalink.md)
+
+# permalink
+
+`var permalink: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L103)
+
+The full permanent URL of the entry the comment was submitted to.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/post-modified-gmt.md b/docs/net.thauvin.erik.akismet/-akismet-comment/post-modified-gmt.md
new file mode 100644
index 0000000..54a9ff4
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/post-modified-gmt.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [postModifiedGmt](./post-modified-gmt.md)
+
+# postModifiedGmt
+
+`var postModifiedGmt: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L172)
+
+The UTC timestamp of the publication time for the post, page or thread on which the comment was posted.
+
+**See Also**
+
+[Akismet.dateToGmt](../-akismet/date-to-gmt.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/recheck-reason.md b/docs/net.thauvin.erik.akismet/-akismet-comment/recheck-reason.md
new file mode 100644
index 0000000..7c1437b
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/recheck-reason.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [recheckReason](./recheck-reason.md)
+
+# recheckReason
+
+`var recheckReason: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L215)
+
+If you are sending content to Akismet to be rechecked, such as a post that has been edited or old pending
+comments that you'd like to recheck, include this parameter with a string describing why the content is
+being rechecked.
+
+For example: `edit`
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/referrer.md b/docs/net.thauvin.erik.akismet/-akismet-comment/referrer.md
new file mode 100644
index 0000000..0eb9867
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/referrer.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [referrer](./referrer.md)
+
+# referrer
+
+`var referrer: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L97)
+
+The content of the referer header should be set here.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/server-env.md b/docs/net.thauvin.erik.akismet/-akismet-comment/server-env.md
new file mode 100644
index 0000000..0d7297a
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/server-env.md
@@ -0,0 +1,13 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [serverEnv](./server-env.md)
+
+# serverEnv
+
+`var serverEnv: `[`Map`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html)`<`[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L228)
+
+In PHP, there is an array of environmental variables called `$_SERVER` that contains information about the Web
+server itself as well as a key/value for every HTTP header sent with the request. This data is highly useful to
+Akismet.
+
+How the submitted content interacts with the server can be very telling, so please include as much of it as
+possible.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/to-json.md b/docs/net.thauvin.erik.akismet/-akismet-comment/to-json.md
new file mode 100644
index 0000000..6c2cd3b
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/to-json.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [toJson](./to-json.md)
+
+# toJson
+
+`fun toJson(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L252)
+
+Returns a JSON representation of the comment.
+
+**See Also**
+
+[Akismet.jsonComment](../-akismet/json-comment.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/to-string.md b/docs/net.thauvin.erik.akismet/-akismet-comment/to-string.md
new file mode 100644
index 0000000..5be0702
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/to-string.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [toString](./to-string.md)
+
+# toString
+
+`open fun toString(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L261)
+
+Returns a JSON representation of the comment.
+
+**See Also**
+
+[Akismet.jsonComment](../-akismet/json-comment.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/type.md b/docs/net.thauvin.erik.akismet/-akismet-comment/type.md
new file mode 100644
index 0000000..f91a68e
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/type.md
@@ -0,0 +1,23 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [type](./type.md)
+
+# type
+
+`var type: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L126)
+
+A string that describes the type of content being sent, such as:
+
+* [TYPE_COMMENT](-t-y-p-e_-c-o-m-m-e-n-t.md)
+* [TYPE_FORUM_POST](-t-y-p-e_-f-o-r-u-m_-p-o-s-t.md)
+* [TYPE_REPLY](-t-y-p-e_-r-e-p-l-y.md)
+* [TYPE_BLOG_POST](-t-y-p-e_-b-l-o-g_-p-o-s-t.md)
+* [TYPE_CONTACT_FORM](-t-y-p-e_-c-o-n-t-a-c-t_-f-o-r-m.md)
+* [TYPE_SIGNUP](-t-y-p-e_-s-i-g-n-u-p.md)
+* [TYPE_MESSAGE](-t-y-p-e_-m-e-s-s-a-g-e.md)
+* [TYPE_PINGBACK](-t-y-p-e_-p-i-n-g-b-a-c-k.md)
+* [TYPE_TRACKBACK](-t-y-p-e_-t-r-a-c-k-b-a-c-k.md)
+* [TYPE_TWEET](-t-y-p-e_-t-w-e-e-t.md)
+
+You may send a value not listed above if none of them accurately describe your content.
+
+This is further explained [here](http://blog.akismet.com/2012/06/19/pro-tip-tell-us-your-comment_type/).
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/user-agent.md b/docs/net.thauvin.erik.akismet/-akismet-comment/user-agent.md
new file mode 100644
index 0000000..2f4e9d2
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/user-agent.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [userAgent](./user-agent.md)
+
+# userAgent
+
+`val userAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L59)
+
+User agent string of the web browser submitting the comment.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/user-ip.md b/docs/net.thauvin.erik.akismet/-akismet-comment/user-ip.md
new file mode 100644
index 0000000..48d7b05
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/user-ip.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [userIp](./user-ip.md)
+
+# userIp
+
+`val userIp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L59)
+
+IP address of the comment submitter.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet-comment/user-role.md b/docs/net.thauvin.erik.akismet/-akismet-comment/user-role.md
new file mode 100644
index 0000000..bc4dabe
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet-comment/user-role.md
@@ -0,0 +1,10 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [AkismetComment](index.md) / [userRole](./user-role.md)
+
+# userRole
+
+`var userRole: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt#L200)
+
+The user role of the user who submitted the comment. This is an optional parameter.
+
+If you set it to [ADMIN_ROLE](-a-d-m-i-n_-r-o-l-e.md), Akismet will always return false.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/-init-.md b/docs/net.thauvin.erik.akismet/-akismet/-init-.md
new file mode 100644
index 0000000..15b2f79
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/-init-.md
@@ -0,0 +1,15 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [<init>](./-init-.md)
+
+# <init>
+
+`Akismet(apiKey: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, blog: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)`
+
+Create a new instance using an [Akismet](https://www.askimet.com/) API key and URL registered with Akismet.
+
+`Akismet(apiKey: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)`
+
+Creates new instance using the provided [Akismet](https://www.askimet.com/) API key.
+
+**Constructor**
+Creates new instance using the provided [Akismet](https://www.askimet.com/) API key.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/app-user-agent.md b/docs/net.thauvin.erik.akismet/-akismet/app-user-agent.md
new file mode 100644
index 0000000..2043255
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/app-user-agent.md
@@ -0,0 +1,18 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [appUserAgent](./app-user-agent.md)
+
+# appUserAgent
+
+`var appUserAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L126)
+
+The application user agent to be sent to Akismet.
+
+If possible, the application user agent string should always use the following format:
+
+```
+ Application Name/Version
+```
+
+The library's own user agent string will automatically be appended.
+
+See the [Akismet API](https://akismet.com/development/api/#detailed-docs) for more details.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/blog.md b/docs/net.thauvin.erik.akismet/-akismet/blog.md
new file mode 100644
index 0000000..d31ab8b
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/blog.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [blog](./blog.md)
+
+# blog
+
+`var blog: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L107)
+
+The URL registered with Akismet.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/check-comment.md b/docs/net.thauvin.erik.akismet/-akismet/check-comment.md
new file mode 100644
index 0000000..504dcda
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/check-comment.md
@@ -0,0 +1,25 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [checkComment](./check-comment.md)
+
+# checkComment
+
+`@JvmOverloads fun checkComment(comment: `[`AkismetComment`](../-akismet-comment/index.md)`, trueOnError: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L275)
+
+Comment Check.
+
+This is the call you will make the most. It takes a number of arguments and characteristics about the submitted
+content and then returns a thumbs up or thumbs down. Performance can drop dramatically if you choose to exclude
+data points. The more data you send Akismet about each comment, the greater the accuracy. They recommend erring
+on the side of including too much data
+
+By default, if an error (IO, empty response from Akismet, etc.) occurs the function will return `false` and
+log the error, use the `trueOnError` parameter to change this behavior.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+### Parameters
+
+`trueOnError` - Set to return `true` on error.
+
+**Return**
+`true` if the comment is spam, `false` if the comment is not.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/date-to-gmt.md b/docs/net.thauvin.erik.akismet/-akismet/date-to-gmt.md
new file mode 100644
index 0000000..2d42959
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/date-to-gmt.md
@@ -0,0 +1,24 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [dateToGmt](./date-to-gmt.md)
+
+# dateToGmt
+
+`@JvmStatic fun dateToGmt(date: `[`Date`](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L78)
+
+Convert a date to a UTC timestamp. (ISO 8601)
+
+**See Also**
+
+[AkismetComment.dateGmt](../-akismet-comment/date-gmt.md)
+
+[AkismetComment.postModifiedGmt](../-akismet-comment/post-modified-gmt.md)
+
+`@JvmStatic fun dateToGmt(date: `[`LocalDateTime`](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L91)
+
+Convert a locale date/time to a UTC timestamp. (ISO 8601)
+
+**See Also**
+
+[AkismetComment.dateGmt](../-akismet-comment/date-gmt.md)
+
+[AkismetComment.postModifiedGmt](../-akismet-comment/post-modified-gmt.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/debug-help.md b/docs/net.thauvin.erik.akismet/-akismet/debug-help.md
new file mode 100644
index 0000000..f213bf0
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/debug-help.md
@@ -0,0 +1,16 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [debugHelp](./debug-help.md)
+
+# debugHelp
+
+`var debugHelp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L199)
+
+The `x-akismet-debug-help` header from the last operation, if any.
+
+If the call returns neither `true` nor `false`, the `x-akismet-debug-help` header will provide context for any
+error that has occurred.
+
+Note that the `x-akismet-debug-help` header will not always be sent if a response does not return `false`
+or `true`.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/error-message.md b/docs/net.thauvin.erik.akismet/-akismet/error-message.md
new file mode 100644
index 0000000..f17c669
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/error-message.md
@@ -0,0 +1,14 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [errorMessage](./error-message.md)
+
+# errorMessage
+
+`var errorMessage: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L159)
+
+The error message.
+
+The error (IO, empty response from Akismet, etc.) message is also logged as a warning.
+
+**See Also**
+
+[Akismet.checkComment](check-comment.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/execute-method.md b/docs/net.thauvin.erik.akismet/-akismet/execute-method.md
new file mode 100644
index 0000000..667df74
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/execute-method.md
@@ -0,0 +1,15 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [executeMethod](./execute-method.md)
+
+# executeMethod
+
+`@JvmOverloads fun executeMethod(apiUrl: HttpUrl?, formBody: FormBody, trueOnError: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L329)
+
+Execute a call to an Akismet REST API method.
+
+### Parameters
+
+`apiUrl` - The Akismet API URL endpoint. (e.g. https://rest.akismet.com/1.1/verify-key)
+
+`formBody` - The HTTP POST form body containing the request parameters to be submitted.
+
+`trueOnError` - Set to return `true` on error (IO, empty response, etc.)
\ No newline at end of file
diff --git a/docs/net.thauvin.erik.akismet/-akismet/http-status-code.md b/docs/net.thauvin.erik.akismet/-akismet/http-status-code.md
new file mode 100644
index 0000000..ec3dfbe
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/http-status-code.md
@@ -0,0 +1,8 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [httpStatusCode](./http-status-code.md)
+
+# httpStatusCode
+
+`var httpStatusCode: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L140)
+
+The [HTTP status code](https://www.restapitutorial.com/httpstatuscodes.html) of the last operation.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/index.md b/docs/net.thauvin.erik.akismet/-akismet/index.md
new file mode 100644
index 0000000..5ac379d
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/index.md
@@ -0,0 +1,46 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](./index.md)
+
+# Akismet
+
+`open class Akismet` [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L59)
+
+Provides access to the [Akismet API](https://akismet.com/development/api/).
+
+### Constructors
+
+| Name | Summary |
+|---|---|
+| [<init>](-init-.md) | Create a new instance using an [Akismet](https://www.askimet.com/) API key and URL registered with Akismet.`Akismet(apiKey: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, blog: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)` Creates new instance using the provided [Akismet](https://www.askimet.com/) API key.`Akismet(apiKey: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`)` |
+
+### Properties
+
+| Name | Summary |
+|---|---|
+| [appUserAgent](app-user-agent.md) | The application user agent to be sent to Akismet.`var appUserAgent: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [blog](blog.md) | The URL registered with Akismet.`var blog: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [debugHelp](debug-help.md) | The `x-akismet-debug-help` header from the last operation, if any.`var debugHelp: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [errorMessage](error-message.md) | The error message.`var errorMessage: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [httpStatusCode](http-status-code.md) | The [HTTP status code](https://www.restapitutorial.com/httpstatuscodes.html) of the last operation.`var httpStatusCode: `[`Int`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) |
+| [isDiscard](is-discard.md) | Set to true if Akismet has determined that the last [checked comment](check-comment.md) is blatant spam, and you can safely discard it without saving it in any spam queue.`var isDiscard: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [isVerifiedKey](is-verified-key.md) | Check if the API Key has been verified`var isVerifiedKey: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [logger](logger.md) | The logger instance.`val logger: `[`Logger`](https://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html) |
+| [proTip](pro-tip.md) | The `x-akismet-pro-tip` header from the last operation, if any.`var proTip: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [response](response.md) | The actual response sent by Akismet from the last operation.`var response: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+
+### Functions
+
+| Name | Summary |
+|---|---|
+| [checkComment](check-comment.md) | Comment Check.`fun checkComment(comment: `[`AkismetComment`](../-akismet-comment/index.md)`, trueOnError: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [executeMethod](execute-method.md) | Execute a call to an Akismet REST API method.`fun executeMethod(apiUrl: HttpUrl?, formBody: FormBody, trueOnError: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` = false): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [reset](reset.md) | Reset the [debugHelp](debug-help.md), [errorMessage](error-message.md), [httpStatusCode](http-status-code.md), [isDiscard](is-discard.md), [isVerifiedKey](is-verified-key.md), [proTip](pro-tip.md), and [response](response.md) properties.`fun reset(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) |
+| [submitHam](submit-ham.md) | Submit Ham. (False Positives)`fun submitHam(comment: `[`AkismetComment`](../-akismet-comment/index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [submitSpam](submit-spam.md) | Submit Spam. (Missed Spam)`fun submitSpam(comment: `[`AkismetComment`](../-akismet-comment/index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+| [verifyKey](verify-key.md) | Key Verification.`fun verifyKey(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) |
+
+### Companion Object Functions
+
+| Name | Summary |
+|---|---|
+| [dateToGmt](date-to-gmt.md) | Convert a date to a UTC timestamp. (ISO 8601)`fun dateToGmt(date: `[`Date`](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) Convert a locale date/time to a UTC timestamp. (ISO 8601)`fun dateToGmt(date: `[`LocalDateTime`](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html)`): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
+| [jsonComment](json-comment.md) | (Re)Create a [comment](../-akismet-comment/index.md) from a JSON string.`fun jsonComment(json: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`AkismetComment`](../-akismet-comment/index.md) |
diff --git a/docs/net.thauvin.erik.akismet/-akismet/is-discard.md b/docs/net.thauvin.erik.akismet/-akismet/is-discard.md
new file mode 100644
index 0000000..c090ebd
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/is-discard.md
@@ -0,0 +1,15 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [isDiscard](./is-discard.md)
+
+# isDiscard
+
+`var isDiscard: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L185)
+
+Set to true if Akismet has determined that the last [checked comment](check-comment.md) is blatant spam, and you
+can safely discard it without saving it in any spam queue.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+**See Also**
+
+[Akismet.proTip](pro-tip.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/is-verified-key.md b/docs/net.thauvin.erik.akismet/-akismet/is-verified-key.md
new file mode 100644
index 0000000..5f37c57
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/is-verified-key.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [isVerifiedKey](./is-verified-key.md)
+
+# isVerifiedKey
+
+`var isVerifiedKey: `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L133)
+
+Check if the API Key has been verified
+
+**See Also**
+
+[Akismet.verifyKey](verify-key.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/json-comment.md b/docs/net.thauvin.erik.akismet/-akismet/json-comment.md
new file mode 100644
index 0000000..e057896
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/json-comment.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [jsonComment](./json-comment.md)
+
+# jsonComment
+
+`@JvmStatic fun jsonComment(json: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`AkismetComment`](../-akismet-comment/index.md) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L67)
+
+(Re)Create a [comment](../-akismet-comment/index.md) from a JSON string.
+
+**See Also**
+
+[AkismetComment.toString](../-akismet-comment/to-string.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/logger.md b/docs/net.thauvin.erik.akismet/-akismet/logger.md
new file mode 100644
index 0000000..141e9ae
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/logger.md
@@ -0,0 +1,12 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [logger](./logger.md)
+
+# logger
+
+`val logger: `[`Logger`](https://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L205)
+
+The logger instance.
+
+**Getter**
+
+The logger instance.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/pro-tip.md b/docs/net.thauvin.erik.akismet/-akismet/pro-tip.md
new file mode 100644
index 0000000..2ba0339
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/pro-tip.md
@@ -0,0 +1,17 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [proTip](./pro-tip.md)
+
+# proTip
+
+`var proTip: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L173)
+
+The `x-akismet-pro-tip` header from the last operation, if any.
+
+If the `x-akismet-pro-tip` header is set to discard, then Akismet has determined that the comment is blatant
+spam, and you can safely discard it without saving it in any spam queue.
+
+See the [Akismet API](https://akismet.com/development/api/#comment-check) for more details.
+
+**See Also**
+
+[Akismet.isDiscard](is-discard.md)
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/reset.md b/docs/net.thauvin.erik.akismet/-akismet/reset.md
new file mode 100644
index 0000000..768d27f
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/reset.md
@@ -0,0 +1,9 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [reset](./reset.md)
+
+# reset
+
+`fun reset(): `[`Unit`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L378)
+
+Reset the [debugHelp](debug-help.md), [errorMessage](error-message.md), [httpStatusCode](http-status-code.md), [isDiscard](is-discard.md), [isVerifiedKey](is-verified-key.md), [proTip](pro-tip.md), and
+[response](response.md) properties.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/response.md b/docs/net.thauvin.erik.akismet/-akismet/response.md
new file mode 100644
index 0000000..f3a9b80
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/response.md
@@ -0,0 +1,10 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [response](./response.md)
+
+# response
+
+`var response: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L149)
+
+The actual response sent by Akismet from the last operation.
+
+For example: `true`, `false`, `valid`, `invalid`, etc.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/submit-ham.md b/docs/net.thauvin.erik.akismet/-akismet/submit-ham.md
new file mode 100644
index 0000000..ba60e72
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/submit-ham.md
@@ -0,0 +1,24 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [submitHam](./submit-ham.md)
+
+# submitHam
+
+`fun submitHam(comment: `[`AkismetComment`](../-akismet-comment/index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L317)
+
+Submit Ham. (False Positives)
+
+This call is intended for the submission of false positives - items that were incorrectly classified as spam by
+Akismet. It takes identical arguments as [comment check](check-comment.md) and
+[submit spam](submit-spam.md).
+
+It is very important that the values you submit with this call match those of your
+[comment check](check-comment.md) calls as closely as possible. In order to learn from its mistakes,
+Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made
+when the content was first posted. While it is normal for less information to be available for submit-spam and
+submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the
+values that you do send match those of the original content.
+
+See the [Akismet API](https://akismet.com/development/api/#submit-ham) for more details.
+
+**Return**
+`true` if the comment was submitted, `false` otherwise.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/submit-spam.md b/docs/net.thauvin.erik.akismet/-akismet/submit-spam.md
new file mode 100644
index 0000000..b71cc8c
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/submit-spam.md
@@ -0,0 +1,22 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [submitSpam](./submit-spam.md)
+
+# submitSpam
+
+`fun submitSpam(comment: `[`AkismetComment`](../-akismet-comment/index.md)`): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L295)
+
+Submit Spam. (Missed Spam)
+
+This call is for submitting comments that weren't marked as spam but should have been.
+
+It is very important that the values you submit with this call match those of your
+[comment check](check-comment.md) calls as closely as possible. In order to learn from its mistakes,
+Akismet needs to match your missed spam and false positive reports to the original comment-check API calls made
+when the content was first posted. While it is normal for less information to be available for submit-spam and
+submit-ham calls (most comment systems and forums will not store all metadata), you should ensure that the
+values that you do send match those of the original content.
+
+See the [Akismet API](https://akismet.com/development/api/#submit-spam) for more details.
+
+**Return**
+`true` if the comment was submitted, `false` otherwise.
+
diff --git a/docs/net.thauvin.erik.akismet/-akismet/verify-key.md b/docs/net.thauvin.erik.akismet/-akismet/verify-key.md
new file mode 100644
index 0000000..c7b6ca2
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/-akismet/verify-key.md
@@ -0,0 +1,22 @@
+[docs](../../index.md) / [net.thauvin.erik.akismet](../index.md) / [Akismet](index.md) / [verifyKey](./verify-key.md)
+
+# verifyKey
+
+`fun verifyKey(): `[`Boolean`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) [(source)](https://github.com/ethauvin/akismet-kotlin/tree/master/src/main/kotlin/net/thauvin/erik/akismet/Akismet.kt#L249)
+
+Key Verification.
+
+Key verification authenticates your key before calling the [comment check](check-comment.md),
+[submit spam](submit-spam.md), or [submit ham](submit-ham.md) methods. This is the first call that you
+should make to Akismet and is especially useful if you will have multiple users with their own Akismet
+subscriptions using your application.
+
+See the [Akismet API](https://akismet.com/development/api/#verify-key) for more details.
+
+**Return**
+`true` if the key is valid, `false` otherwise.
+
+**See Also**
+
+[Akismet.isVerifiedKey](is-verified-key.md)
+
diff --git a/docs/net.thauvin.erik.akismet/index.md b/docs/net.thauvin.erik.akismet/index.md
new file mode 100644
index 0000000..d8e9a22
--- /dev/null
+++ b/docs/net.thauvin.erik.akismet/index.md
@@ -0,0 +1,12 @@
+[docs](../index.md) / [net.thauvin.erik.akismet](./index.md)
+
+## Package net.thauvin.erik.akismet
+
+A Kotlin/Java library for accessing the Akismet service.
+
+### Types
+
+| Name | Summary |
+|---|---|
+| [Akismet](-akismet/index.md) | Provides access to the [Akismet API](https://akismet.com/development/api/).`open class Akismet` |
+| [AkismetComment](-akismet-comment/index.md) | A comment to send to Akismet.`open class AkismetComment` |
diff --git a/docs/package-list b/docs/package-list
new file mode 100644
index 0000000..5f10e95
--- /dev/null
+++ b/docs/package-list
@@ -0,0 +1,4 @@
+$dokka.format:gfm
+$dokka.linkExtension:md
+
+net.thauvin.erik.akismet
diff --git a/docs/scripts/clipboard.js b/docs/scripts/clipboard.js
deleted file mode 100644
index b00ce24..0000000
--- a/docs/scripts/clipboard.js
+++ /dev/null
@@ -1,52 +0,0 @@
-window.addEventListener('load', () => {
- document.querySelectorAll('span.copy-icon').forEach(element => {
- element.addEventListener('click', (el) => copyElementsContentToClipboard(element));
- })
-
- document.querySelectorAll('span.anchor-icon').forEach(element => {
- element.addEventListener('click', (el) => {
- if(element.hasAttribute('pointing-to')){
- const location = hrefWithoutCurrentlyUsedAnchor() + '#' + element.getAttribute('pointing-to')
- copyTextToClipboard(element, location)
- }
- });
- })
-})
-
-const copyElementsContentToClipboard = (element) => {
- const selection = window.getSelection();
- const range = document.createRange();
- range.selectNodeContents(element.parentNode.parentNode);
- selection.removeAllRanges();
- selection.addRange(range);
-
- copyAndShowPopup(element, () => selection.removeAllRanges())
-}
-
-const copyTextToClipboard = (element, text) => {
- var textarea = document.createElement("textarea");
- textarea.textContent = text;
- textarea.style.position = "fixed";
- document.body.appendChild(textarea);
- textarea.select();
-
- copyAndShowPopup(element, () => document.body.removeChild(textarea))
-}
-
-const copyAndShowPopup = (element, after) => {
- try {
- document.execCommand('copy');
- element.nextElementSibling.classList.add('active-popup');
- setTimeout(() => {
- element.nextElementSibling.classList.remove('active-popup');
- }, 1200);
- } catch (e) {
- console.error('Failed to write to clipboard:', e)
- }
- finally {
- if(after) after()
- }
-}
-
-const hrefWithoutCurrentlyUsedAnchor = () => window.location.href.split('#')[0]
-
diff --git a/docs/scripts/main.js b/docs/scripts/main.js
deleted file mode 100644
index ca7ae01..0000000
--- a/docs/scripts/main.js
+++ /dev/null
@@ -1,44 +0,0 @@
-(()=>{var e={8527:e=>{e.exports=''},5570:e=>{e.exports=''},107:e=>{e.exports=''},7224:e=>{e.exports=''},538:e=>{e.exports=''},1924:(e,n,t)=>{"use strict";var r=t(210),o=t(5559),i=o(r("String.prototype.indexOf"));e.exports=function(e,n){var t=r(e,!!n);return"function"==typeof t&&i(e,".prototype.")>-1?o(t):t}},5559:(e,n,t)=>{"use strict";var r=t(8612),o=t(210),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),l=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),s=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var n=l(r,a,arguments);if(c&&u){var t=c(n,"length");t.configurable&&u(n,"length",{value:1+s(0,e.length-(arguments.length-1))})}return n};var f=function(){return l(r,i,arguments)};u?u(e.exports,"apply",{value:f}):e.exports.apply=f},4184:(e,n)=>{var t;
-/*!
- Copyright (c) 2018 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/classnames
-*/!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],n=0;n{"use strict";e.exports=function(e,n){var t=this,r=t.constructor;return t.options=Object.assign({storeInstancesGlobally:!0},n||{}),t.callbacks={},t.directMap={},t.sequenceLevels={},t.resetTimer=null,t.ignoreNextKeyup=!1,t.ignoreNextKeypress=!1,t.nextExpectedAction=!1,t.element=e,t.addEvents(),t.options.storeInstancesGlobally&&r.instances.push(t),t},e.exports.prototype.bind=t(2207),e.exports.prototype.bindMultiple=t(3396),e.exports.prototype.unbind=t(9208),e.exports.prototype.trigger=t(9855),e.exports.prototype.reset=t(6214),e.exports.prototype.stopCallback=t(3450),e.exports.prototype.handleKey=t(3067),e.exports.prototype.addEvents=t(718),e.exports.prototype.bindSingle=t(8763),e.exports.prototype.getKeyInfo=t(5825),e.exports.prototype.pickBestAction=t(8608),e.exports.prototype.getReverseMap=t(3956),e.exports.prototype.getMatches=t(3373),e.exports.prototype.resetSequences=t(3346),e.exports.prototype.fireCallback=t(2684),e.exports.prototype.bindSequence=t(7103),e.exports.prototype.resetSequenceTimer=t(7309),e.exports.prototype.detach=t(7554),e.exports.instances=[],e.exports.reset=t(1822),e.exports.REVERSE_MAP=null},718:(e,n,t)=>{"use strict";e.exports=function(){var e=this,n=t(4323),r=e.element;e.eventHandler=t(9646).bind(e),n(r,"keypress",e.eventHandler),n(r,"keydown",e.eventHandler),n(r,"keyup",e.eventHandler)}},2207:e=>{"use strict";e.exports=function(e,n,t){return e=e instanceof Array?e:[e],this.bindMultiple(e,n,t),this}},3396:e=>{"use strict";e.exports=function(e,n,t){for(var r=0;r{"use strict";e.exports=function(e,n,r,o){var i=this;function a(n){return function(){i.nextExpectedAction=n,++i.sequenceLevels[e],i.resetSequenceTimer()}}function l(n){var a;i.fireCallback(r,n,e),"keyup"!==o&&(a=t(6770),i.ignoreNextKeyup=a(n)),setTimeout((function(){i.resetSequences()}),10)}i.sequenceLevels[e]=0;for(var c=0;c{"use strict";e.exports=function(e,n,t,r,o){var i=this;i.directMap[e+":"+t]=n;var a,l=(e=e.replace(/\s+/g," ")).split(" ");l.length>1?i.bindSequence(e,l,n,t):(a=i.getKeyInfo(e,t),i.callbacks[a.key]=i.callbacks[a.key]||[],i.getMatches(a.key,a.modifiers,{type:a.action},r,e,o),i.callbacks[a.key][r?"unshift":"push"]({callback:n,modifiers:a.modifiers,action:a.action,seq:r,level:o,combo:e}))}},7554:(e,n,t)=>{var r=t(4323).off;e.exports=function(){var e=this,n=e.element;r(n,"keypress",e.eventHandler),r(n,"keydown",e.eventHandler),r(n,"keyup",e.eventHandler)}},4323:e=>{function n(e,n,t,r){return!e.addEventListener&&(n="on"+n),(e.addEventListener||e.attachEvent).call(e,n,t,r),t}e.exports=n,e.exports.on=n,e.exports.off=function(e,n,t,r){return!e.removeEventListener&&(n="on"+n),(e.removeEventListener||e.detachEvent).call(e,n,t,r),t}},2684:(e,n,t)=>{"use strict";e.exports=function(e,n,r,o){this.stopCallback(n,n.target||n.srcElement,r,o)||!1===e(n,r)&&(t(1350)(n),t(6103)(n))}},5825:(e,n,t)=>{"use strict";e.exports=function(e,n){var r,o,i,a,l,c,u=[];for(r=t(4520)(e),a=t(7549),l=t(5355),c=t(8581),i=0;i{"use strict";e.exports=function(e,n,r,o,i,a){var l,c,u,s,f=this,p=[],d=r.type;"keypress"!==d||r.code&&"Arrow"===r.code.slice(0,5)||(f.callbacks["any-character"]||[]).forEach((function(e){p.push(e)}));if(!f.callbacks[e])return p;for(u=t(8581),"keyup"===d&&u(e)&&(n=[e]),l=0;l{"use strict";e.exports=function(){var e,n=this.constructor;if(!n.REVERSE_MAP)for(var r in n.REVERSE_MAP={},e=t(4766))r>95&&r<112||e.hasOwnProperty(r)&&(n.REVERSE_MAP[e[r]]=r);return n.REVERSE_MAP}},3067:(e,n,t)=>{"use strict";e.exports=function(e,n,r){var o,i,a,l,c=this,u={},s=0,f=!1;for(o=c.getMatches(e,n,r),i=0;i{"use strict";e.exports=function(e){var n,r=this;"number"!=typeof e.which&&(e.which=e.keyCode);var o=t(6770)(e);void 0!==o&&("keyup"!==e.type||r.ignoreNextKeyup!==o?(n=t(4610),r.handleKey(o,n(e),e)):r.ignoreNextKeyup=!1)}},5532:e=>{"use strict";e.exports=function(e,n){return e.sort().join(",")===n.sort().join(",")}},8608:e=>{"use strict";e.exports=function(e,n,t){return t||(t=this.getReverseMap()[e]?"keydown":"keypress"),"keypress"===t&&n.length&&(t="keydown"),t}},6214:e=>{"use strict";e.exports=function(){return this.callbacks={},this.directMap={},this}},7309:e=>{"use strict";e.exports=function(){var e=this;clearTimeout(e.resetTimer),e.resetTimer=setTimeout((function(){e.resetSequences()}),1e3)}},3346:e=>{"use strict";e.exports=function(e){var n=this;e=e||{};var t,r=!1;for(t in n.sequenceLevels)e[t]?r=!0:n.sequenceLevels[t]=0;r||(n.nextExpectedAction=!1)}},3450:e=>{"use strict";e.exports=function(e,n){if((" "+n.className+" ").indexOf(" combokeys ")>-1)return!1;var t=n.tagName.toLowerCase();return"input"===t||"select"===t||"textarea"===t||n.isContentEditable}},9855:e=>{"use strict";e.exports=function(e,n){return this.directMap[e+":"+n]&&this.directMap[e+":"+n]({},e),this}},9208:e=>{"use strict";e.exports=function(e,n){return this.bind(e,(function(){}),n)}},1822:e=>{"use strict";e.exports=function(){this.instances.forEach((function(e){e.reset()}))}},6770:(e,n,t)=>{"use strict";e.exports=function(e){var n,r;if(n=t(4766),r=t(5295),"keypress"===e.type){var o=String.fromCharCode(e.which);return e.shiftKey||(o=o.toLowerCase()),o}return void 0!==n[e.which]?n[e.which]:void 0!==r[e.which]?r[e.which]:String.fromCharCode(e.which).toLowerCase()}},4610:e=>{"use strict";e.exports=function(e){var n=[];return e.shiftKey&&n.push("shift"),e.altKey&&n.push("alt"),e.ctrlKey&&n.push("ctrl"),e.metaKey&&n.push("meta"),n}},8581:e=>{"use strict";e.exports=function(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}},4520:e=>{"use strict";e.exports=function(e){return"+"===e?["+"]:e.split("+")}},1350:e=>{"use strict";e.exports=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},5355:e=>{"use strict";e.exports={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"}},7549:e=>{"use strict";e.exports={option:"alt",command:"meta",return:"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"}},5295:e=>{"use strict";e.exports={106:"*",107:"plus",109:"minus",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}},4766:e=>{"use strict";e.exports={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",173:"minus",187:"plus",189:"minus",224:"meta"};for(var n=1;n<20;++n)e.exports[111+n]="f"+n;for(n=0;n<=9;++n)e.exports[n+96]=n},6103:e=>{"use strict";e.exports=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}},3362:()=>{var e;!function(){var e=Math.PI,n=2*e,t=e/180,r=document.createElement("div");document.head.appendChild(r);var o=self.ConicGradient=function(e){o.all.push(this),e=e||{},this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.repeating=!!e.repeating,this.size=e.size||Math.max(innerWidth,innerHeight),this.canvas.width=this.canvas.height=this.size;var n=e.stops;this.stops=(n||"").split(/\s*,(?![^(]*\))\s*/),this.from=0;for(var t=0;t0){var i=this.stops[0].clone();i.pos=0,this.stops.unshift(i)}if(void 0===this.stops[this.stops.length-1].pos)this.stops[this.stops.length-1].pos=1;else if(!this.repeating&&this.stops[this.stops.length-1].pos<1){var a=this.stops[this.stops.length-1].clone();a.pos=1,this.stops.push(a)}if(this.stops.forEach((function(e,n){if(void 0===e.pos){for(var t=n+1;this[t];t++)if(void 0!==this[t].pos){e.pos=this[n-1].pos+(this[t].pos-this[n-1].pos)/(t-n+1);break}}else n>0&&(e.pos=Math.max(e.pos,this[n-1].pos))}),this.stops),this.repeating){var l=(n=this.stops.slice())[n.length-1].pos-n[0].pos;for(t=0;this.stops[this.stops.length-1].pos<1&&t<1e4;t++)for(var c=0;c'},get png(){return this.canvas.toDataURL()},get r(){return Math.sqrt(2)*this.size/2},paint:function(){var e,n,r,o=this.context,i=this.r,a=this.size/2,l=0,c=this.stops[l];o.translate(this.size/2,this.size/2),o.rotate(-90*t),o.rotate(this.from*t),o.translate(-this.size/2,-this.size/2);for(var u=0;u<360;){if(u/360+1e-5>=c.pos){do{e=c,l++,c=this.stops[l]}while(c&&c!=e&&c.pos===e.pos);if(!c)break;var s=e.color+""==c.color+""&&e!=c;n=e.color.map((function(e,n){return c.color[n]-e}))}r=(u/360-e.pos)/(c.pos-e.pos);var f=s?c.color:n.map((function(n,t){var o=n*r+e.color[t];return t<3?255&o:o}));if(o.fillStyle="rgba("+f.join(",")+")",o.beginPath(),o.moveTo(a,a),s)var p=360*(c.pos-e.pos);else p=.5;var d=u*t,h=(d=Math.min(360*t,d))+p*t;h=Math.min(360*t,h+.02),o.arc(a,a,i,d,h),o.closePath(),o.fill(),u+=p}}},o.ColorStop=function(e,t){if(this.gradient=e,t){var r=t.match(/^(.+?)(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?\s*$/);if(this.color=o.ColorStop.colorToRGBA(r[1]),r[2]){var i=r[3];"%"==i||"0"===r[2]&&!i?this.pos=r[2]/100:"turn"==i?this.pos=+r[2]:"deg"==i?this.pos=r[2]/360:"grad"==i?this.pos=r[2]/400:"rad"==i&&(this.pos=r[2]/n)}r[4]&&(this.next=new o.ColorStop(e,r[1]+" "+r[4]+r[5]))}},o.ColorStop.prototype={clone:function(){var e=new o.ColorStop(this.gradient);return e.color=this.color,e.pos=this.pos,e},toString:function(){return"rgba("+this.color.join(", ")+") "+100*this.pos+"%"}},o.ColorStop.colorToRGBA=function(e){if(!Array.isArray(e)&&-1==e.indexOf("from")){r.style.color=e;var n=getComputedStyle(r).color.match(/rgba?\(([\d.]+), ([\d.]+), ([\d.]+)(?:, ([\d.]+))?\)/);return n&&(n.shift(),(n=n.map((function(e){return+e})))[3]=isNaN(n[3])?1:n[3]),n||[0,0,0,0]}return e}}(),self.StyleFix&&((e=document.createElement("p")).style.backgroundImage="conic-gradient(white, black)",e.style.backgroundImage=PrefixFree.prefix+"conic-gradient(white, black)",e.style.backgroundImage||StyleFix.register((function(e,n){return e.indexOf("conic-gradient")>-1&&(e=e.replace(/(?:repeating-)?conic-gradient\(\s*((?:\([^()]+\)|[^;()}])+?)\)/g,(function(e,n){return new ConicGradient({stops:n,repeating:e.indexOf("repeating-")>-1})}))),e})))},9662:(e,n,t)=>{var r=t(7854),o=t(614),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a function")}},9483:(e,n,t)=>{var r=t(7854),o=t(4411),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a constructor")}},6077:(e,n,t)=>{var r=t(7854),o=t(614),i=r.String,a=r.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+i(e)+" as a prototype")}},1223:(e,n,t)=>{var r=t(5112),o=t(30),i=t(3070),a=r("unscopables"),l=Array.prototype;null==l[a]&&i.f(l,a,{configurable:!0,value:o(null)}),e.exports=function(e){l[a][e]=!0}},1530:(e,n,t)=>{"use strict";var r=t(8710).charAt;e.exports=function(e,n,t){return n+(t?r(e,n).length:1)}},5787:(e,n,t)=>{var r=t(7854),o=t(7976),i=r.TypeError;e.exports=function(e,n){if(o(n,e))return e;throw i("Incorrect invocation")}},9670:(e,n,t)=>{var r=t(7854),o=t(111),i=r.String,a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not an object")}},7556:(e,n,t)=>{var r=t(7293);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},8533:(e,n,t)=>{"use strict";var r=t(2092).forEach,o=t(9341)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:(e,n,t)=>{"use strict";var r=t(7854),o=t(9974),i=t(6916),a=t(7908),l=t(3411),c=t(7659),u=t(4411),s=t(6244),f=t(6135),p=t(8554),d=t(1246),h=r.Array;e.exports=function(e){var n=a(e),t=u(this),r=arguments.length,g=r>1?arguments[1]:void 0,v=void 0!==g;v&&(g=o(g,r>2?arguments[2]:void 0));var A,b,m,y,E,_,C=d(n),w=0;if(!C||this==h&&c(C))for(A=s(n),b=t?new this(A):h(A);A>w;w++)_=v?g(n[w],w):n[w],f(b,w,_);else for(E=(y=p(n,C)).next,b=t?new this:[];!(m=i(E,y)).done;w++)_=v?l(y,g,[m.value,w],!0):m.value,f(b,w,_);return b.length=w,b}},1318:(e,n,t)=>{var r=t(5656),o=t(1400),i=t(6244),a=function(e){return function(n,t,a){var l,c=r(n),u=i(c),s=o(a,u);if(e&&t!=t){for(;u>s;)if((l=c[s++])!=l)return!0}else for(;u>s;s++)if((e||s in c)&&c[s]===t)return e||s||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:(e,n,t)=>{var r=t(9974),o=t(1702),i=t(8361),a=t(7908),l=t(6244),c=t(5417),u=o([].push),s=function(e){var n=1==e,t=2==e,o=3==e,s=4==e,f=6==e,p=7==e,d=5==e||f;return function(h,g,v,A){for(var b,m,y=a(h),E=i(y),_=r(g,v),C=l(E),w=0,x=A||c,k=n?x(h,C):t||p?x(h,0):void 0;C>w;w++)if((d||w in E)&&(m=_(b=E[w],w,y),e))if(n)k[w]=m;else if(m)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:u(k,b)}else switch(e){case 4:return!1;case 7:u(k,b)}return f?-1:o||s?s:k}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},1194:(e,n,t)=>{var r=t(7293),o=t(5112),i=t(7392),a=o("species");e.exports=function(e){return i>=51||!r((function(){var n=[];return(n.constructor={})[a]=function(){return{foo:1}},1!==n[e](Boolean).foo}))}},9341:(e,n,t)=>{"use strict";var r=t(7293);e.exports=function(e,n){var t=[][e];return!!t&&r((function(){t.call(null,n||function(){throw 1},1)}))}},3671:(e,n,t)=>{var r=t(7854),o=t(9662),i=t(7908),a=t(8361),l=t(6244),c=r.TypeError,u=function(e){return function(n,t,r,u){o(t);var s=i(n),f=a(s),p=l(s),d=e?p-1:0,h=e?-1:1;if(r<2)for(;;){if(d in f){u=f[d],d+=h;break}if(d+=h,e?d<0:p<=d)throw c("Reduce of empty array with no initial value")}for(;e?d>=0:p>d;d+=h)d in f&&(u=t(u,f[d],d,s));return u}};e.exports={left:u(!1),right:u(!0)}},206:(e,n,t)=>{var r=t(1702);e.exports=r([].slice)},4362:(e,n,t)=>{var r=t(206),o=Math.floor,i=function(e,n){var t=e.length,c=o(t/2);return t<8?a(e,n):l(e,i(r(e,0,c),n),i(r(e,c),n),n)},a=function(e,n){for(var t,r,o=e.length,i=1;i0;)e[r]=e[--r];r!==i++&&(e[r]=t)}return e},l=function(e,n,t,r){for(var o=n.length,i=t.length,a=0,l=0;a{var r=t(7854),o=t(3157),i=t(4411),a=t(111),l=t(5112)("species"),c=r.Array;e.exports=function(e){var n;return o(e)&&(n=e.constructor,(i(n)&&(n===c||o(n.prototype))||a(n)&&null===(n=n[l]))&&(n=void 0)),void 0===n?c:n}},5417:(e,n,t)=>{var r=t(7475);e.exports=function(e,n){return new(r(e))(0===n?0:n)}},3411:(e,n,t)=>{var r=t(9670),o=t(9212);e.exports=function(e,n,t,i){try{return i?n(r(t)[0],t[1]):n(t)}catch(n){o(e,"throw",n)}}},7072:(e,n,t)=>{var r=t(5112)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,n){if(!n&&!o)return!1;var t=!1;try{var i={};i[r]=function(){return{next:function(){return{done:t=!0}}}},e(i)}catch(e){}return t}},4326:(e,n,t)=>{var r=t(1702),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},648:(e,n,t)=>{var r=t(7854),o=t(1694),i=t(614),a=t(4326),l=t(5112)("toStringTag"),c=r.Object,u="Arguments"==a(function(){return arguments}());e.exports=o?a:function(e){var n,t,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(t=function(e,n){try{return e[n]}catch(e){}}(n=c(e),l))?t:u?a(n):"Object"==(r=a(n))&&i(n.callee)?"Arguments":r}},5631:(e,n,t)=>{"use strict";var r=t(3070).f,o=t(30),i=t(2248),a=t(9974),l=t(5787),c=t(408),u=t(654),s=t(6340),f=t(9781),p=t(2423).fastKey,d=t(9909),h=d.set,g=d.getterFor;e.exports={getConstructor:function(e,n,t,u){var s=e((function(e,r){l(e,d),h(e,{type:n,index:o(null),first:void 0,last:void 0,size:0}),f||(e.size=0),null!=r&&c(r,e[u],{that:e,AS_ENTRIES:t})})),d=s.prototype,v=g(n),A=function(e,n,t){var r,o,i=v(e),a=b(e,n);return a?a.value=t:(i.last=a={index:o=p(n,!0),key:n,value:t,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},b=function(e,n){var t,r=v(e),o=p(n);if("F"!==o)return r.index[o];for(t=r.first;t;t=t.next)if(t.key==n)return t};return i(d,{clear:function(){for(var e=v(this),n=e.index,t=e.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=void 0),delete n[t.index],t=t.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var n=this,t=v(n),r=b(n,e);if(r){var o=r.next,i=r.previous;delete t.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),t.first==r&&(t.first=o),t.last==r&&(t.last=i),f?t.size--:n.size--}return!!r},forEach:function(e){for(var n,t=v(this),r=a(e,arguments.length>1?arguments[1]:void 0);n=n?n.next:t.first;)for(r(n.value,n.key,this);n&&n.removed;)n=n.previous},has:function(e){return!!b(this,e)}}),i(d,t?{get:function(e){var n=b(this,e);return n&&n.value},set:function(e,n){return A(this,0===e?0:e,n)}}:{add:function(e){return A(this,e=0===e?0:e,e)}}),f&&r(d,"size",{get:function(){return v(this).size}}),s},setStrong:function(e,n,t){var r=n+" Iterator",o=g(n),i=g(r);u(e,n,(function(e,n){h(this,{type:r,target:e,state:o(e),kind:n,last:void 0})}),(function(){for(var e=i(this),n=e.kind,t=e.last;t&&t.removed;)t=t.previous;return e.target&&(e.last=t=t?t.next:e.state.first)?"keys"==n?{value:t.key,done:!1}:"values"==n?{value:t.value,done:!1}:{value:[t.key,t.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),t?"entries":"values",!t,!0),s(n)}}},9320:(e,n,t)=>{"use strict";var r=t(1702),o=t(2248),i=t(2423).getWeakData,a=t(9670),l=t(111),c=t(5787),u=t(408),s=t(2092),f=t(2597),p=t(9909),d=p.set,h=p.getterFor,g=s.find,v=s.findIndex,A=r([].splice),b=0,m=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},E=function(e,n){return g(e.entries,(function(e){return e[0]===n}))};y.prototype={get:function(e){var n=E(this,e);if(n)return n[1]},has:function(e){return!!E(this,e)},set:function(e,n){var t=E(this,e);t?t[1]=n:this.entries.push([e,n])},delete:function(e){var n=v(this.entries,(function(n){return n[0]===e}));return~n&&A(this.entries,n,1),!!~n}},e.exports={getConstructor:function(e,n,t,r){var s=e((function(e,o){c(e,p),d(e,{type:n,id:b++,frozen:void 0}),null!=o&&u(o,e[r],{that:e,AS_ENTRIES:t})})),p=s.prototype,g=h(n),v=function(e,n,t){var r=g(e),o=i(a(n),!0);return!0===o?m(r).set(n,t):o[r.id]=t,e};return o(p,{delete:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).delete(e):t&&f(t,n.id)&&delete t[n.id]},has:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).has(e):t&&f(t,n.id)}}),o(p,t?{get:function(e){var n=g(this);if(l(e)){var t=i(e);return!0===t?m(n).get(e):t?t[n.id]:void 0}},set:function(e,n){return v(this,e,n)}}:{add:function(e){return v(this,e,!0)}}),s}}},7710:(e,n,t)=>{"use strict";var r=t(2109),o=t(7854),i=t(1702),a=t(4705),l=t(1320),c=t(2423),u=t(408),s=t(5787),f=t(614),p=t(111),d=t(7293),h=t(7072),g=t(8003),v=t(9587);e.exports=function(e,n,t){var A=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),m=A?"set":"add",y=o[e],E=y&&y.prototype,_=y,C={},w=function(e){var n=i(E[e]);l(E,e,"add"==e?function(e){return n(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:"get"==e?function(e){return b&&!p(e)?void 0:n(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:function(e,t){return n(this,0===e?0:e,t),this})};if(a(e,!f(y)||!(b||E.forEach&&!d((function(){(new y).entries().next()})))))_=t.getConstructor(n,e,A,m),c.enable();else if(a(e,!0)){var x=new _,k=x[m](b?{}:-0,1)!=x,S=d((function(){x.has(1)})),O=h((function(e){new y(e)})),B=!b&&d((function(){for(var e=new y,n=5;n--;)e[m](n,n);return!e.has(-0)}));O||((_=n((function(e,n){s(e,E);var t=v(new y,e,_);return null!=n&&u(n,t[m],{that:t,AS_ENTRIES:A}),t}))).prototype=E,E.constructor=_),(S||B)&&(w("delete"),w("has"),A&&w("get")),(B||k)&&w(m),b&&E.clear&&delete E.clear}return C[e]=_,r({global:!0,forced:_!=y},C),g(_,e),b||t.setStrong(_,e,A),_}},9920:(e,n,t)=>{var r=t(2597),o=t(3887),i=t(1236),a=t(3070);e.exports=function(e,n){for(var t=o(n),l=a.f,c=i.f,u=0;u{var r=t(5112)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[r]=!1,"/./"[e](n)}catch(e){}}return!1}},8544:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},4230:(e,n,t)=>{var r=t(1702),o=t(4488),i=t(1340),a=/"/g,l=r("".replace);e.exports=function(e,n,t,r){var c=i(o(e)),u="<"+n;return""!==t&&(u+=" "+t+'="'+l(i(r),a,""")+'"'),u+">"+c+""+n+">"}},4994:(e,n,t)=>{"use strict";var r=t(3383).IteratorPrototype,o=t(30),i=t(9114),a=t(8003),l=t(7497),c=function(){return this};e.exports=function(e,n,t){var u=n+" Iterator";return e.prototype=o(r,{next:i(1,t)}),a(e,u,!1,!0),l[u]=c,e}},8880:(e,n,t)=>{var r=t(9781),o=t(3070),i=t(9114);e.exports=r?function(e,n,t){return o.f(e,n,i(1,t))}:function(e,n,t){return e[n]=t,e}},9114:e=>{e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},6135:(e,n,t)=>{"use strict";var r=t(4948),o=t(3070),i=t(9114);e.exports=function(e,n,t){var a=r(n);a in e?o.f(e,a,i(0,t)):e[a]=t}},8709:(e,n,t)=>{"use strict";var r=t(7854),o=t(9670),i=t(2140),a=r.TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return i(this,e)}},654:(e,n,t)=>{"use strict";var r=t(2109),o=t(6916),i=t(1913),a=t(6530),l=t(614),c=t(4994),u=t(9518),s=t(7674),f=t(8003),p=t(8880),d=t(1320),h=t(5112),g=t(7497),v=t(3383),A=a.PROPER,b=a.CONFIGURABLE,m=v.IteratorPrototype,y=v.BUGGY_SAFARI_ITERATORS,E=h("iterator"),_="keys",C="values",w="entries",x=function(){return this};e.exports=function(e,n,t,a,h,v,k){c(t,n,a);var S,O,B,I=function(e){if(e===h&&R)return R;if(!y&&e in j)return j[e];switch(e){case _:case C:case w:return function(){return new t(this,e)}}return function(){return new t(this)}},T=n+" Iterator",P=!1,j=e.prototype,z=j[E]||j["@@iterator"]||h&&j[h],R=!y&&z||I(h),M="Array"==n&&j.entries||z;if(M&&(S=u(M.call(new e)))!==Object.prototype&&S.next&&(i||u(S)===m||(s?s(S,m):l(S[E])||d(S,E,x)),f(S,T,!0,!0),i&&(g[T]=x)),A&&h==C&&z&&z.name!==C&&(!i&&b?p(j,"name",C):(P=!0,R=function(){return o(z,this)})),h)if(O={values:I(C),keys:v?R:I(_),entries:I(w)},k)for(B in O)(y||P||!(B in j))&&d(j,B,O[B]);else r({target:n,proto:!0,forced:y||P},O);return i&&!k||j[E]===R||d(j,E,R,{name:h}),g[n]=R,O}},7235:(e,n,t)=>{var r=t(857),o=t(2597),i=t(6061),a=t(3070).f;e.exports=function(e){var n=r.Symbol||(r.Symbol={});o(n,e)||a(n,e,{value:i.f(e)})}},9781:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:(e,n,t)=>{var r=t(7854),o=t(111),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},8324:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(e,n,t)=>{var r=t(317)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},8886:(e,n,t)=>{var r=t(8113).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},256:(e,n,t)=>{var r=t(8113);e.exports=/MSIE|Trident/.test(r)},5268:(e,n,t)=>{var r=t(4326),o=t(7854);e.exports="process"==r(o.process)},8113:(e,n,t)=>{var r=t(5005);e.exports=r("navigator","userAgent")||""},7392:(e,n,t)=>{var r,o,i=t(7854),a=t(8113),l=i.process,c=i.Deno,u=l&&l.versions||c&&c.version,s=u&&u.v8;s&&(o=(r=s.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},8008:(e,n,t)=>{var r=t(8113).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},748:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(e,n,t)=>{var r=t(7854),o=t(1236).f,i=t(8880),a=t(1320),l=t(3505),c=t(9920),u=t(4705);e.exports=function(e,n){var t,s,f,p,d,h=e.target,g=e.global,v=e.stat;if(t=g?r:v?r[h]||l(h,{}):(r[h]||{}).prototype)for(s in n){if(p=n[s],f=e.noTargetGet?(d=o(t,s))&&d.value:t[s],!u(g?s:h+(v?".":"#")+s,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(t,s,p,e)}}},7293:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:(e,n,t)=>{"use strict";t(4916);var r=t(1702),o=t(1320),i=t(2261),a=t(7293),l=t(5112),c=t(8880),u=l("species"),s=RegExp.prototype;e.exports=function(e,n,t,f){var p=l(e),d=!a((function(){var n={};return n[p]=function(){return 7},7!=""[e](n)})),h=d&&!a((function(){var n=!1,t=/a/;return"split"===e&&((t={}).constructor={},t.constructor[u]=function(){return t},t.flags="",t[p]=/./[p]),t.exec=function(){return n=!0,null},t[p](""),!n}));if(!d||!h||t){var g=r(/./[p]),v=n(p,""[e],(function(e,n,t,o,a){var l=r(e),c=n.exec;return c===i||c===s.exec?d&&!a?{done:!0,value:g(n,t,o)}:{done:!0,value:l(t,n,o)}:{done:!1}}));o(String.prototype,e,v[0]),o(s,p,v[1])}f&&c(s[p],"sham",!0)}},6677:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},2104:e=>{var n=Function.prototype,t=n.apply,r=n.bind,o=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?o.bind(t):function(){return o.apply(t,arguments)})},9974:(e,n,t)=>{var r=t(1702),o=t(9662),i=r(r.bind);e.exports=function(e,n){return o(e),void 0===n?e:i?i(e,n):function(){return e.apply(n,arguments)}}},7065:(e,n,t)=>{"use strict";var r=t(7854),o=t(1702),i=t(9662),a=t(111),l=t(2597),c=t(206),u=r.Function,s=o([].concat),f=o([].join),p={},d=function(e,n,t){if(!l(p,n)){for(var r=[],o=0;o{var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},6530:(e,n,t)=>{var r=t(9781),o=t(2597),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,l=o(i,"name"),c=l&&"something"===function(){}.name,u=l&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:l,PROPER:c,CONFIGURABLE:u}},1702:e=>{var n=Function.prototype,t=n.bind,r=n.call,o=t&&t.bind(r);e.exports=t?function(e){return e&&o(r,e)}:function(e){return e&&function(){return r.apply(e,arguments)}}},5005:(e,n,t)=>{var r=t(7854),o=t(614),i=function(e){return o(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?i(r[e]):r[e]&&r[e][n]}},1246:(e,n,t)=>{var r=t(648),o=t(8173),i=t(7497),a=t(5112)("iterator");e.exports=function(e){if(null!=e)return o(e,a)||o(e,"@@iterator")||i[r(e)]}},8554:(e,n,t)=>{var r=t(7854),o=t(6916),i=t(9662),a=t(9670),l=t(6330),c=t(1246),u=r.TypeError;e.exports=function(e,n){var t=arguments.length<2?c(e):n;if(i(t))return a(o(t,e));throw u(l(e)+" is not iterable")}},8173:(e,n,t)=>{var r=t(9662);e.exports=function(e,n){var t=e[n];return null==t?void 0:r(t)}},647:(e,n,t)=>{var r=t(1702),o=t(7908),i=Math.floor,a=r("".charAt),l=r("".replace),c=r("".slice),u=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,n,t,r,f,p){var d=t+e.length,h=r.length,g=s;return void 0!==f&&(f=o(f),g=u),l(p,g,(function(o,l){var u;switch(a(l,0)){case"$":return"$";case"&":return e;case"`":return c(n,0,t);case"'":return c(n,d);case"<":u=f[c(l,1,-1)];break;default:var s=+l;if(0===s)return o;if(s>h){var p=i(s/10);return 0===p?o:p<=h?void 0===r[p-1]?a(l,1):r[p-1]+a(l,1):o}u=r[s-1]}return void 0===u?"":u}))}},7854:(e,n,t)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t.g&&t.g)||function(){return this}()||Function("return this")()},2597:(e,n,t)=>{var r=t(1702),o=t(7908),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,n){return i(o(e),n)}},3501:e=>{e.exports={}},490:(e,n,t)=>{var r=t(5005);e.exports=r("document","documentElement")},4664:(e,n,t)=>{var r=t(9781),o=t(7293),i=t(317);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(e,n,t)=>{var r=t(7854),o=t(1702),i=t(7293),a=t(4326),l=r.Object,c=o("".split);e.exports=i((function(){return!l("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):l(e)}:l},9587:(e,n,t)=>{var r=t(614),o=t(111),i=t(7674);e.exports=function(e,n,t){var a,l;return i&&r(a=n.constructor)&&a!==t&&o(l=a.prototype)&&l!==t.prototype&&i(e,l),e}},2788:(e,n,t)=>{var r=t(1702),o=t(614),i=t(5465),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},2423:(e,n,t)=>{var r=t(2109),o=t(1702),i=t(3501),a=t(111),l=t(2597),c=t(3070).f,u=t(8006),s=t(1156),f=t(2050),p=t(9711),d=t(6677),h=!1,g=p("meta"),v=0,A=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},b=e.exports={enable:function(){b.enable=function(){},h=!0;var e=u.f,n=o([].splice),t={};t[g]=1,e(t).length&&(u.f=function(t){for(var r=e(t),o=0,i=r.length;o{var r,o,i,a=t(8536),l=t(7854),c=t(1702),u=t(111),s=t(8880),f=t(2597),p=t(5465),d=t(6200),h=t(3501),g="Object already initialized",v=l.TypeError,A=l.WeakMap;if(a||p.state){var b=p.state||(p.state=new A),m=c(b.get),y=c(b.has),E=c(b.set);r=function(e,n){if(y(b,e))throw new v(g);return n.facade=e,E(b,e,n),n},o=function(e){return m(b,e)||{}},i=function(e){return y(b,e)}}else{var _=d("state");h[_]=!0,r=function(e,n){if(f(e,_))throw new v(g);return n.facade=e,s(e,_,n),n},o=function(e){return f(e,_)?e[_]:{}},i=function(e){return f(e,_)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(n){var t;if(!u(n)||(t=o(n)).type!==e)throw v("Incompatible receiver, "+e+" required");return t}}}},7659:(e,n,t)=>{var r=t(5112),o=t(7497),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},3157:(e,n,t)=>{var r=t(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},614:e=>{e.exports=function(e){return"function"==typeof e}},4411:(e,n,t)=>{var r=t(1702),o=t(7293),i=t(614),a=t(648),l=t(5005),c=t(2788),u=function(){},s=[],f=l("Reflect","construct"),p=/^\s*(?:class|function)\b/,d=r(p.exec),h=!p.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,s,e),!0}catch(e){return!1}};e.exports=!f||o((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return h||!!d(p,c(e))}:g},4705:(e,n,t)=>{var r=t(7293),o=t(614),i=/#|\.prototype\./,a=function(e,n){var t=c[l(e)];return t==s||t!=u&&(o(n)?r(n):!!n)},l=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",s=a.POLYFILL="P";e.exports=a},111:(e,n,t)=>{var r=t(614);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},1913:e=>{e.exports=!1},7850:(e,n,t)=>{var r=t(111),o=t(4326),i=t(5112)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},2190:(e,n,t)=>{var r=t(7854),o=t(5005),i=t(614),a=t(7976),l=t(3307),c=r.Object;e.exports=l?function(e){return"symbol"==typeof e}:function(e){var n=o("Symbol");return i(n)&&a(n.prototype,c(e))}},408:(e,n,t)=>{var r=t(7854),o=t(9974),i=t(6916),a=t(9670),l=t(6330),c=t(7659),u=t(6244),s=t(7976),f=t(8554),p=t(1246),d=t(9212),h=r.TypeError,g=function(e,n){this.stopped=e,this.result=n},v=g.prototype;e.exports=function(e,n,t){var r,A,b,m,y,E,_,C=t&&t.that,w=!(!t||!t.AS_ENTRIES),x=!(!t||!t.IS_ITERATOR),k=!(!t||!t.INTERRUPTED),S=o(n,C),O=function(e){return r&&d(r,"normal",e),new g(!0,e)},B=function(e){return w?(a(e),k?S(e[0],e[1],O):S(e[0],e[1])):k?S(e,O):S(e)};if(x)r=e;else{if(!(A=p(e)))throw h(l(e)+" is not iterable");if(c(A)){for(b=0,m=u(e);m>b;b++)if((y=B(e[b]))&&s(v,y))return y;return new g(!1)}r=f(e,A)}for(E=r.next;!(_=i(E,r)).done;){try{y=B(_.value)}catch(e){d(r,"throw",e)}if("object"==typeof y&&y&&s(v,y))return y}return new g(!1)}},9212:(e,n,t)=>{var r=t(6916),o=t(9670),i=t(8173);e.exports=function(e,n,t){var a,l;o(e);try{if(!(a=i(e,"return"))){if("throw"===n)throw t;return t}a=r(a,e)}catch(e){l=!0,a=e}if("throw"===n)throw t;if(l)throw a;return o(a),t}},3383:(e,n,t)=>{"use strict";var r,o,i,a=t(7293),l=t(614),c=t(30),u=t(9518),s=t(1320),f=t(5112),p=t(1913),d=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=u(u(i)))!==Object.prototype&&(r=o):h=!0),null==r||a((function(){var e={};return r[d].call(e)!==e}))?r={}:p&&(r=c(r)),l(r[d])||s(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},7497:e=>{e.exports={}},6244:(e,n,t)=>{var r=t(7466);e.exports=function(e){return r(e.length)}},133:(e,n,t)=>{var r=t(7392),o=t(7293);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},8536:(e,n,t)=>{var r=t(7854),o=t(614),i=t(2788),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},3929:(e,n,t)=>{var r=t(7854),o=t(7850),i=r.TypeError;e.exports=function(e){if(o(e))throw i("The method doesn't accept regular expressions");return e}},1574:(e,n,t)=>{"use strict";var r=t(9781),o=t(1702),i=t(6916),a=t(7293),l=t(1956),c=t(5181),u=t(5296),s=t(7908),f=t(8361),p=Object.assign,d=Object.defineProperty,h=o([].concat);e.exports=!p||a((function(){if(r&&1!==p({b:1},p(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},n={},t=Symbol(),o="abcdefghijklmnopqrst";return e[t]=7,o.split("").forEach((function(e){n[e]=e})),7!=p({},e)[t]||l(p({},n)).join("")!=o}))?function(e,n){for(var t=s(e),o=arguments.length,a=1,p=c.f,d=u.f;o>a;)for(var g,v=f(arguments[a++]),A=p?h(l(v),p(v)):l(v),b=A.length,m=0;b>m;)g=A[m++],r&&!i(d,v,g)||(t[g]=v[g]);return t}:p},30:(e,n,t)=>{var r,o=t(9670),i=t(6048),a=t(748),l=t(3501),c=t(490),u=t(317),s=t(6200),f=s("IE_PROTO"),p=function(){},d=function(e){return"