diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..959575e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.3.1.tar.gz filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1534ba5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.rpm
+*.log
+*spec-20*
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b508288
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+# Makefile for source rpm: ezmlm-web
+# $Id: Makefile,v 1.1 2022/03/15 19:09:46 jpp Exp $
+NAME := ezmlm-web
+SPECFILE = $(firstword $(wildcard *.spec))
+
+define find-makefile-common
+for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
+endef
+
+MAKEFILE_COMMON := $(shell $(find-makefile-common))
+
+ifeq ($(MAKEFILE_COMMON),)
+# attept a checkout
+define checkout-makefile-common
+test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
+endef
+
+MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
+endif
+
+include $(MAKEFILE_COMMON)
diff --git a/README.md b/README.md
index 394098e..20a786d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,9 @@
# ezmlm-web
-3rd Party (Maintained by Koozali) git repo for ezmlm-web smecontribs
\ No newline at end of file
+3rd Party (Maintained by Koozali) git repo for ezmlm-web smecontribs
+
+## Description
+
+
*This description has been generated by an LLM AI system and cannot be relied on to be fully correct.*
+*Once it has been checked, then this comment will be deleted*
+
diff --git a/contriborbase b/contriborbase
new file mode 100644
index 0000000..9b7fd51
--- /dev/null
+++ b/contriborbase
@@ -0,0 +1 @@
+contribs10
diff --git a/ezmlm-web-3.3.1-bz11913-deprecateddefined.patch b/ezmlm-web-3.3.1-bz11913-deprecateddefined.patch
new file mode 100644
index 0000000..4ce7fae
--- /dev/null
+++ b/ezmlm-web-3.3.1-bz11913-deprecateddefined.patch
@@ -0,0 +1,19 @@
+diff -Nur --no-dereference ezmlm-web-3.3.1.old/ezmlm-web.cgi ezmlm-web-3.3.1/ezmlm-web.cgi
+--- ezmlm-web-3.3.1.old/ezmlm-web.cgi 2022-03-20 13:49:24.150000000 -0400
++++ ezmlm-web-3.3.1/ezmlm-web.cgi 2022-03-20 14:04:48.534000000 -0400
+@@ -240,13 +240,13 @@
+ $HTML_TITLE = '' unless defined($HTML_TITLE);
+
+ # check HTML_LINKS
+-@HTML_LINKS = () unless defined(@HTML_LINKS);
++@HTML_LINKS = () unless @HTML_LINKS;
+
+ # check DEFAULT_INTERFACE_TYPE
+ $DEFAULT_INTERFACE_TYPE = 'normal' unless defined($DEFAULT_INTERFACE_TYPE);
+
+ # check possible blacklist of interface options (since v3.3)
+-@INTERFACE_OPTIONS_BLACKLIST = () unless defined(@INTERFACE_OPTIONS_BLACKLIST);
++@INTERFACE_OPTIONS_BLACKLIST = () unless @INTERFACE_OPTIONS_BLACKLIST;
+
+ # check the configured detault location of gnupg keyrings
+ $GPG_KEYRING_DEFAULT_LOCATION = ".gnupg"
diff --git a/ezmlm-web-3.3.1-cgi.patch b/ezmlm-web-3.3.1-cgi.patch
new file mode 100644
index 0000000..26e306d
--- /dev/null
+++ b/ezmlm-web-3.3.1-cgi.patch
@@ -0,0 +1,23 @@
+--- ezmlm-web-3.3.1/ezmlm-web.cgi.ori 2016-04-18 23:46:09.000000000 -0400
++++ ezmlm-web-3.3.1/ezmlm-web.cgi 2016-04-20 05:03:33.000000000 -0400
+@@ -2064,7 +2064,10 @@
+ if (defined($q->param("setting_state_$i"))) {
+ $options .= " -$i '" . $q->param("setting_value_$i") . "'";
+ } else {
+- if ($i != 5) {
++ if ($i == 3) {
++ unlink("$LIST_DIR/$listname/fromheader");
++ }
++ elsif ($i != 5) {
+ # everything except for the "owner" attribute:
+ # do not set the value to an empty string,
+ # as ezmlm-idx 5.0 does not work correctly for this case
+@@ -2427,7 +2430,7 @@
+ if (defined($q->param('option_t'))) {
+ # TODO: the trailer _must_ be followed by a newline
+ #$list->set_text_content('trailer', $q->param('trailing_text'));
+- $list->set_text_content('trailer', $list->get_text_default_content('trailer'))
++ $list->set_text_content('trailer', $list->get_text_content('trailer'))
+ unless (-e "$list->{'LIST_NAME'}/text/trailer");
+ } else {
+ # ezmlm-make automatically removes this file
diff --git a/ezmlm-web-3.3.1-modiffor722.patch b/ezmlm-web-3.3.1-modiffor722.patch
new file mode 100644
index 0000000..057d723
--- /dev/null
+++ b/ezmlm-web-3.3.1-modiffor722.patch
@@ -0,0 +1,226 @@
+--- ezmlm-web-3.3.1/ezmlm-web.cgi.plusmodif 2016-04-20 06:55:41.000000000 -0400
++++ ezmlm-web-3.3.1/ezmlm-web.cgi 2016-04-20 15:21:15.000000000 -0400
+@@ -1169,6 +1169,20 @@
+ $item = '' unless defined($item);
+ $pagedata->setValue("Data.List.CopyLines", "$item");
+ }
++ if (Mail::Ezmlm->get_version() >= 7) {
++ $item = $list->getpart('digsize');
++ $item = '' unless defined($item);
++ $pagedata->setValue("Data.List.digsize", "$item");
++
++ $item = $list->getpart('digcount');
++ $item = '' unless defined($item);
++ $pagedata->setValue("Data.List.digcount", "$item");
++
++ $item = $list->getpart('digtime');
++ $item = '' unless defined($item);
++ $pagedata->setValue("Data.List.digtime", "$item");
++ }
++
+
+ $item = $list->getpart('mimereject');
+ $item = '' unless defined($item);
+@@ -2524,6 +2538,46 @@
+ }
+ }
+
++ # 'digsize' setting (since ezmlm-idx v7)
++ if (defined($q->param('digsize'))) {
++ my $digsize;
++ $digsize = (defined($q->param('digsize'))) ?
++ $q->param('digsize') : 0;
++ if (defined($q->param('digsize_state')) && ($digsize)) {
++ $list->setpart('digsize', "$digsize");
++ } else {
++ my $digsize = $list->thislist() . "/digsize";
++ unlink ($digsize) if (-e $digsize);
++ }
++ }
++ # 'digsize' setting (since ezmlm-idx v7)
++ if (defined($q->param('digcount'))) {
++ my $digcount;
++ $digcount = (defined($q->param('digcount'))) ?
++ $q->param('digcount') : 0;
++ if (defined($q->param('digcount_state')) && ($digcount)) {
++ $list->setpart('digcount', "$digcount");
++ } else {
++ my $digcount = $list->thislist() . "/digcount";
++ unlink ($digcount) if (-e $digcount);
++ }
++ }
++ # 'digtime' setting (since ezmlm-idx v7)
++ if (defined($q->param('digtime'))) {
++ my $digtime;
++ $digtime = (defined($q->param('digtime'))) ?
++ $q->param('digtime') : 0;
++ if (defined($q->param('digtime_state')) && ($digtime)) {
++ $list->setpart('digtime', "$digtime");
++ } else {
++ my $digtime = $list->thislist() . "/digtime";
++ unlink ($digtime) if (-e $digtime);
++ }
++ }
++
++
++
++
+ # 'msgsize' setting
+ if (defined($q->param('msgsize_max_value'))
+ && defined($q->param('msgsize_min_value'))) {
+--- ezmlm-web/lang/en.hdf.plusmodif 2016-04-20 06:55:41.000000000 -0400
++++ ezmlm-web/lang/en.hdf 2016-04-20 15:06:49.000000000 -0400
+@@ -234,6 +234,12 @@
+ ListAddress = List Address
+ ListOptions = Basic List Options
+ AllowedToEdit = Users allowed to edit this list via web interface
++ digsize = Size of message body accumulated since the latest digest
++ digsize.unit = kbytes
++ digcount = Number of message accumulated since the latest digest
++ digcount.unit = messages
++ digtime = Time since lastest digest
++ digtime.unit = hours
+ HeaderFiltering = Header filtering
+ HeaderRemove = strip these header lines
+ HeaderKeep = keep only these header lines
+--- ezmlm-web/template/ui/easy.hdf.plusmodif 2016-04-20 06:55:42.000000000 -0400
++++ ezmlm-web/template/ui/easy.hdf 2016-04-20 14:54:20.000000000 -0400
+@@ -40,7 +40,6 @@
+ Listname = create_listname
+ Listaddress = create_listaddress
+ Listlanguage = lang_select
+- Webuser = webusers
+ }
+
+
+@@ -60,7 +59,6 @@
+ SubscribeRules = subscribe_selection
+ PostingRules = posting_selection
+ Confirm = confirm_selection
+- WebUsers = webusers
+ }
+
+ Processing {
+--- ezmlm-web/template/ui/normal.hdf.plusmodif 2016-04-20 06:55:42.000000000 -0400
++++ ezmlm-web/template/ui/normal.hdf 2016-04-20 14:54:58.000000000 -0400
+@@ -47,7 +47,6 @@
+ Listname = create_listname
+ Listaddress = create_listaddress
+ Listlanguage = lang_select
+- Webuser = webusers
+ }
+
+
+@@ -58,7 +57,6 @@
+ }
+
+ Deny {
+- Enabled = block_deny
+ }
+
+ Moderators {
+@@ -85,7 +83,6 @@
+ Main {
+ Language = lang_select
+ Owner = owner_address
+- WebUsers = webusers
+ }
+
+ Archive {
+@@ -110,7 +107,6 @@
+
+ Posting {
+ Moderate = posting_selection
+- UseDeny = block_deny
+ Confirm = confirm_post
+ SizeMax = msgsize_max
+ SizeMin = msgsize_min
+--- ezmlm-web/template/ui/expert.hdf.plusmodif 2016-04-20 06:55:42.000000000 -0400
++++ ezmlm-web/template/ui/expert.hdf 2016-04-20 14:53:16.000000000 -0400
+@@ -49,7 +49,6 @@
+ Listaddress = create_listaddress
+ Listlanguage = lang_select
+ Mysql = mysql
+- Webuser = webusers
+ }
+
+
+@@ -61,7 +60,6 @@
+ }
+
+ Deny {
+- Enabled = block_deny
+ }
+
+ Moderators {
+@@ -93,10 +91,8 @@
+ Charset = charset_select
+ Owner = owner_address
+ MainList = mainlist
+- MailmanRequests = mailman_requests
+ RemoveWarn = warn_remove
+ SQL = mysql
+- WebUsers = webusers
+ }
+
+ Archive {
+@@ -123,7 +119,6 @@
+
+ Posting {
+ Rules = posting_selection
+- UseDeny = block_deny
+ Confirm = confirm_post
+ SizeMax = msgsize_max
+ SizeMin = msgsize_min
+@@ -156,12 +151,10 @@
+ ConfirmSub = confirm_sub
+ ConfirmUnsub = confirm_unsub
+ ModSubEnable = mod_sub
+- UseDeny = block_deny
+ BlockOthers = block_others_post
+ ConfirmPosting = confirm_post
+ ModPosting = mod_post
+ NonModPosting = block_nonmod_post
+- MailmanRequests = mailman_requests
+ RemoveWarn = warn_remove
+ DigestEnabled = digest_enabled
+ DigestSettings = digest_settings
+@@ -190,7 +183,6 @@
+ CopyLines = copylines
+ Language = lang_select
+ Charset = charset_select
+- WebUsers = webusers
+
+ }
+ }
+--- ezmlm-web/template/config_options/digest_settings.cs.ori 2016-04-20 13:51:45.000000000 -0400
++++ ezmlm-web/template/config_options/digest_settings.cs 2016-04-20 15:13:35.000000000 -0400
+@@ -1,3 +1,27 @@
+
+
+-
++0 ?>checked="checked" />
++
++