diff --git a/gui/wato/curl.py b/gui/wato/curl.py
deleted file mode 100644
index c55f0a5e7f488a82c4d9768c6441e1b739cf6b8a..0000000000000000000000000000000000000000
--- a/gui/wato/curl.py
+++ /dev/null
@@ -1,1330 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# License: GNU General Public License v2
-#
-# Author: thl-cmk[at]outlook[dot]com
-# URL   : https://thl-cmk.hopto.org
-# Date  : 2022-02-15
-#
-# WATO file for curl plugin (bakery and check)
-#
-# 2022-02-19: moved global options under "Default settings"
-#             added per url settings
-#             added proxy settings (--proxy, --proxy-user, --proxy-digest, --proxy-basic, --proxy-ntlm, --proxy-anyauth)
-#             added follow redirects (--location)
-#             added don't verify certificates (--insecure)
-# 2022-02-21: added tls/ssl version (--tlsv1.3, --tlsv1.2, --tlsv1.1, --tlsv1.0, --tlsv1,  --sslv3, --sslv2)
-#             added http version (--http2, --http1.1, --http1.0)
-#             added header only (--head)
-#             added user authentication (--user, --basic, --digest, --ntlm, --ntlm-wb, --negotiate, --anyauth)
-#             added to proxy authentication (--proxy-negotiate)
-# 2022-02-22: added option for cURL check plugin
-# 2022-02-24: changed forbidden_chars from '<>| ' to '"<>#%{}|\^~[]` ' + "'"
-# 2022-02-25: added plugin interval and timeout options
-#             added noproxy option to default settings
-# 2022-02-26: added proxy protocol (--socks4, --socks4a, --socks4a, --socks5-hostname)
-# 2022-02-27: added expected_strings option to default settings
-# 2022-02-28: added expected_strings option to url settings
-#             added state_item_not_found option
-# 2022-03-01: added options --limit-rate, --max-filesize, --max-time, --speed-limit, --speed-time, --connect-timeout
-#             added options --user-agent, --compressed, --no-alpn, --no-npn, --tcp-fastopen, --tcp-nodelay,
-#             added options --cert-status
-# 2022-03-02: added options --referer -header and api_key_header (header from password store)
-# 2022-03-05: added option --dump-header, state_header_str_not_found
-# 2022-03-06: added option --verbose, --stderr cert_time_left
-#             fixed upper/lower levels
-# 2022-03-10: optimized generation of upper/lower limit
-#             added transform for ms to s -> no need in th agent to change the value any more
-# 2022-03-11: added check to avoid duplicate service names in url list
-#             added --location-trust, --max-redirs
-#             reworked redirect (--location, --location-trust, --max-redirs)
-#             reworked cert verify (-insecure, --cert-status, --ssl-no-revok)
-#             reworked advanced_settings (--no-alpn, --no-npn, --tcp-fastopen, -tcp-nodelay)
-#             removed get_session_data. moved to curl default options
-# 2022-03-12: added --cacert
-#             added max_age
-# 2022-03-13: added post data
-#             made some entries fordable (Default options/Per URL settings, CA Cert)
-#             changed url and service_name to curl_service tuple
-#             changed headers to list of tuple
-# 2022-03-15: added regex pattern match for bakery
-# 2022-03-18: added regex pattern match for check
-# 2022-03-19: added options --dns-interface, -dns-ipv4-addr, --dns-ipv6-addr and --dns-servers
-#             reworked ip_address_resolution section
-#             added options --ftp-account, --ftp-alternative-to-user, --ftp-create-dirs, --ftp-method
-#             added options --ftp-pasv, --disable-epsv, --ftp-pret, --ftp-skip-pasv-ip
-#             added options --ftp-port, --disable-eprt
-#             added options --ftp-ssl-control, --ftp-ssl-ccc, --ftp-ssl-ccc-mode
-# 2022-03-21: moved  --connect-timeout, --limit-rate, --max-filesize, --max-time, --speed-limit, --speed-time
-#             to "limits" sub Directory
-# 2022-03-22: added curl_error_code_to_ignore and http_error_code_to_ignore options
-# 2022-03-24: added options --hostpubmd5, --hostpubsha256, --pubkey
-# 2022-03-24: added options --key --passs
-#             reworked user_auth section
-# 2022-03-25: added options --compressed-ssh, --list-only, --use-ascii
-#             added options --path-as-is, --ssl-allow-beast, --no-buffer, --no-keepalive, --no-sessionid
-# 2022-03-28: added options --mail-auth, --mail-from, --mail-rcpt, --mail-rcpt-allowfails, --crlf, --upload-file (SMTP)
-# 2022-04-10: added options to deploy cURL executable, no separate rules for curl and curl executable anymore
-#             windows/linux summarized under on option, no separate WATO rules per OS necessary anymore
-# 2022-04-26: added check option clickable_url
-#             clarified option 'Don\'t verify certificate/pub key', 'Don\'t stop at verify errors (certificate/pub key)'
-#
-
-import ipaddress
-from cmk.gui.i18n import _
-from cmk.gui.exceptions import MKUserError
-from cmk.gui.valuespec import (
-    Dictionary,
-    ListOf,
-    CascadingDropdown,
-    TextUnicode,
-    FixedValue,
-    Integer,
-    Tuple,
-    DropdownChoice,
-    MonitoringState,
-    ListOfStrings,
-    TextInput,
-    Checkbox,
-    Transform,
-    CAorCAChain,
-    Optional,
-    Foldable,
-    Age,
-    # Url,
-    UploadOrPasteTextFile,
-    Alternative,
-)
-from cmk.gui.plugins.wato.utils import (
-    rulespec_registry,
-    HostRulespec,
-    RulespecGroupCheckParametersOperatingSystem,
-    CheckParameterRulespecWithItem,
-)
-from cmk.gui.plugins.wato.utils import (
-    PasswordFromStore,
-)
-
-from cmk.gui.cee.plugins.wato.agent_bakery.rulespecs.utils import (
-    RulespecGroupMonitoringAgentsAgentPlugins,
-)
-
-bakery_plugin_version = '20220426.v0.0.8'
-
-# unsafe characters https://www.tutorialspoint.com/html/html_url_encoding.htm
-forbidden_chars = '"<>#%{}|\^~[]` \''
-
-_limits_transform = [
-    ('time_namelookup', 'Time name lookup', 'ms', ),
-    ('time_connect', 'Time connect', 'ms', ),
-    ('time_appconnect', 'Time app connect', 'ms', ),
-    ('time_pretransfer', 'Time pre transfer', 'ms', ),
-    ('time_redirect', 'Time redirect', 'ms', ),
-    ('time_starttransfer', 'Time start transfer', 'ms', ),
-    ('time_total', 'Time Total', 'ms', ),
-]
-
-_limits_no_transform = [
-    ('cert_time_left', 'Certificate life time', 'Day(s)', ),
-    ('num_connects', '# of connects', 'count', ),
-    ('num_redirects', '# of redirects', 'count', ),
-    ('num_headers', '# of headers', 'count', ),
-    ('size_download', 'Size download', 'bytes', ),
-    ('size_upload', 'Size upload', 'bytes', ),
-    ('size_header', 'Size header', 'bytes', ),
-    ('size_request', 'Size request', 'bytes', ),
-    ('speed_download', 'Speed download', 'bytes/s', ),
-    ('speed_upload', 'Speed upload', 'bytes/s', ),
-]
-
-_curl_check_elements = [
-    ('clickable_url',
-     FixedValue(
-         True,
-         title=_('Render clickable URLs for HTTP/HTTPS (see Inline help)'),
-         totext=_(''),
-         help=_('Needs "Escape HTML in service output" rule or in Global settings enabled to work.')
-     )),
-    ('state_item_not_found',
-     MonitoringState(
-         default_value=1,
-         title=_('State on item not found'),
-         help=_('Monitoring state if the item is not found in the agent data. Default is UNKNOWN.')
-     )),
-    ('state_http_result_not_200',
-     MonitoringState(
-         default_value=1,
-         title=_('State on HTTP result not OK'),
-         help=_('Monitoring state if the HTTP return code is not in 2xx or 3xx. Default is WARN.')
-     )),
-    ('http_error_code_to_ignore',
-     ListOfStrings(
-         title=_('HTTP error codes to ignore'),
-         allow_empty=False,
-         orientation='horizontal',
-         valuespec=Integer(size=3, minvalue=0, maxvalue=999),
-     )),
-    ('state_curl_result_not_0',
-     MonitoringState(
-         default_value=1,
-         title=_('State on cURL exit code not OK'),
-         help=_('Monitoring state if the exit code is not 0. Default is WARN.')
-     )),
-    ('curl_error_code_to_ignore',
-     ListOfStrings(
-         title=_('cURL error codes to ignore'),
-         allow_empty=False,
-         orientation='horizontal',
-         valuespec=Integer(size=3, minvalue=0, maxvalue=999),
-     )),
-    ('state_verify_sll_not_0',
-     MonitoringState(
-         default_value=1,
-         title=_('State on SSL verify not OK'),
-         help=_('Monitoring state if the SSL verify code is not 0. Default is WARN.')
-     )),
-    ('state_expected_str_not_found',
-     MonitoringState(
-         default_value=1,
-         title=_('State on expected string not found'),
-         help=_('Monitoring state if one expected string is not found in the cURL output. Default is WARN.')
-     )),
-    ('state_header_str_not_found',
-     MonitoringState(
-         default_value=1,
-         title=_('State on expected header not found'),
-         help=_('Monitoring state if one expected header string is not found in the cURL output. Default is WARN.')
-     )),
-    ('state_for_regex',
-     Tuple(
-         title=_('State for regex pattern match'),
-         elements=[
-             MonitoringState(
-                 default_value=0,
-                 title=_('State on regex pattern match'),
-             ),
-             MonitoringState(
-                 default_value=1,
-                 title=_('State on regex pattern don\'t match'),
-             ),
-             MonitoringState(
-                 default_value=0,
-                 title=_('State on regex pattern match info missing'),
-             ),
-         ],
-     )),
-    ('show_additional_info',
-     Tuple(
-         title=_('Show additional info'),
-         help=_('Shows RAW data from cURL in the service details.'),
-         elements=[
-             Checkbox('Request headers'),
-             Checkbox('Response headers'),
-             Checkbox('(TLS/SSL) session info'),
-             Checkbox('RAW data'),
-         ],
-     )),
-    ('max_age',
-     Tuple(
-         title=_('Maximum age'),
-         elements=[
-             Age(
-                 title=_('Warning at'),
-                 help=_('Warn, if the age of the page is older than this'),
-                 default_value=3600 * 24,
-             ),
-             Age(
-                 title=_('Critical at'),
-                 help=_('Critical, if the age of the page is older than this'),
-                 default_value=3600 * 24 * 4,
-             ),
-             MonitoringState(
-                 default_value=0,
-                 title=_('State if not available'),
-                 help=_(
-                     'Monitoring state if the "Last-Modified" header is not available in the agent data. Default is OK.'
-                 )
-             ),
-         ]
-     )),
-]
-
-
-def _get_tuple_upper(_unit: str) -> Tuple:
-    return Tuple(
-        title=_('Upper limits'),
-        orientation='horizontal',
-        elements=[
-            Integer(title=_('Warning at'), minvalue=0, unit=_(_unit), size=10),
-            Integer(title=_('Critical at'), minvalue=0, unit=_(_unit), size=10),
-        ],
-    )
-
-
-def _get_tuple_lower(_unit):
-    return Tuple(
-        title=_('Lower limits'),
-        orientation='horizontal',
-        elements=[
-            Integer(title=_('Warning below'), minvalue=0, unit=_(_unit), size=10),
-            Integer(title=_('Critical below'), minvalue=0, unit=_(_unit), size=10),
-        ],
-    )
-
-
-for key, label, unit in _limits_transform:
-    _curl_check_elements.append(
-        (key,
-         Dictionary(
-             title=_(label),
-             elements=[
-                 ('upper',
-                  Transform(
-                      _get_tuple_upper(unit),
-                      # run after read from rules.mk before show in wato
-                      forth=lambda elems: (int((elems[0] * 1000)), int((elems[1] * 1000))),
-                      # run before write to rule.mk after input in wato
-                      back=lambda elems: (float((elems[0] / 1000)), float((elems[1] / 1000))),
-                  )),
-                 ('lower',
-                  Transform(
-                      _get_tuple_lower(unit),
-                      forth=lambda elems: (int((elems[0] * 1000)), int((elems[1] * 1000))),
-                      back=lambda elems: (float((elems[0] / 1000)), float((elems[1] / 1000))),
-                  )),
-             ],
-         ))
-    )
-
-for key, label, unit in _limits_no_transform:
-    _curl_check_elements.append(
-        (key,
-         Dictionary(
-             title=_(label),
-             elements=[
-                 ('upper', _get_tuple_upper(unit)),
-                 ('lower', _get_tuple_lower(unit)),
-             ],
-         ))
-    )
-
-
-def _valuespec_curl():
-    return Dictionary(
-        elements=_curl_check_elements,
-    )
-
-
-rulespec_registry.register(
-    CheckParameterRulespecWithItem(
-        check_group_name='curl',
-        group=RulespecGroupCheckParametersOperatingSystem,
-        parameter_valuespec=_valuespec_curl,
-        title=lambda: _('cURL'),
-        match_type='dict',
-        item_spec=lambda: TextUnicode(title=_('cURL service name'), ),
-    ))
-
-# #########################################################################################################
-#
-# cURL bakery options
-#
-# #########################################################################################################
-
-_option_curl_service = ('curl_service',
-                        Tuple(
-                            elements=[
-                                TextUnicode(
-                                    title=_('Service name'),
-                                    help=_('Name for the discovered service, for example www.example.com'),
-                                    allow_empty=False,
-                                    placeholder='your.service.name',
-                                    forbidden_chars=forbidden_chars,
-                                ),
-                                TextUnicode(  # ToDo: change to URL?
-                                    title=_('URL to check'),
-                                    help=_('URL to check with cURL, for example https://www.example.com'),
-                                    allow_empty=False,
-                                    size=90,
-                                    placeholder='https://www.example.com',
-                                    # forbidden_chars=forbidden_chars,
-                                ),
-                            ],
-                            orientation='horizontal',
-                        ))
-
-
-def _transform_forth_verify_remote_host(params):
-    if type(params) == tuple:
-        if len(params) == 4:  # added 2022-03-23
-            params = (params[0], params[1], params[2], params[3], None, None, None)
-    return params
-
-
-_option_verify_remote_host = ('cert_verify',
-                              Transform(
-                                  Tuple(
-                                      title='Configure verification of remote host (certificate/pub key)',
-                                      elements=[
-                                          # Checkbox('Don\'t verify certificate/pub key'),
-                                          Checkbox('Don\'t stop at verify errors (certificate/pub key)'),
-                                          Checkbox('Use OCSP to check certificate status'),
-                                          Checkbox('Disable cert revocation checks (WinSSL)'),
-                                          Optional(Foldable(CAorCAChain()), label='Certificate to verify against', ),
-                                          Optional(TextUnicode(size=40, minlen=32, maxlen=32, regex='[0-9a-fA-F]', ),
-                                                   label='Expected MD5 hash of pub key'),
-                                          Optional(TextUnicode(size=60, allow_empty=False),
-                                                   label='Expected SHA256 hash of pub key'),
-                                          Optional(Foldable(UploadOrPasteTextFile(title='Public key'), ),
-                                                   label='Expected public key'),
-                                      ]
-                                  ),
-                                  forth=_transform_forth_verify_remote_host
-                              ))
-
-_option_redirects = ('redirects',
-                     Tuple(
-                         title='Configure redirects',
-                         elements=[
-                             Checkbox('Follow redirects'),
-                             Checkbox('Use authentication on redirects'),
-                             Optional(Integer(minvalue=-1, default_value=10), label='Max. redirects', sameline=True)
-                         ]
-                     ))
-
-_option_regex_response = ('regex_response',
-                          Tuple(
-                              title=_('Regular expression to expect in content'),
-                              elements=[
-                                  TextUnicode(
-                                      label=_('Regular expression'),
-                                      placeholder=_('If empty regex search will be disabled')
-                                  ),
-                                  Checkbox('Case insensitive'),
-                                  Checkbox('Multiline string matching'),
-                              ]
-                          ))
-
-_option_advanced_settings = ('advanced_settings',
-                             Tuple(
-                                 title='Advanced settings',
-                                 elements=[
-                                     Checkbox('Allow SSL beast security flaw to improve interoperability'),
-                                     Checkbox('Convert LF to CRLF in upload'),
-                                     Checkbox('Disable Application Layer Protocol Negotiation (ALPN)'),
-                                     Checkbox('Disable buffering of the output stream'),
-                                     Checkbox('Disable Next Protocol Negotiation (NPN)'),
-                                     Checkbox('Disable SSL session-ID reusing'),
-                                     Checkbox('Disable TCP keep alive on the connection'),
-                                     Checkbox('Do not squash .. sequences in URL path'),
-                                     Checkbox('Use TCP fast open option'),
-                                     Checkbox('Use TCP no delay option'),
-                                 ]
-                             ))
-
-_options_get_header_only = ('get_header_only',
-                            FixedValue(
-                                '--head',
-                                title=_('Get header only'),
-                                totext=_('Only headers will be downloaded'),
-                                help=_('cURL will will only download headers. Implements the "--head" option'),
-                            ))
-_url_get_header_only = ('get_header_only',
-                        DropdownChoice(
-                            title=_('Get Header only'),
-                            choices=[
-                                ('--head', _('Get header only')),
-                                ('', _('Get the hole document')),
-                            ],
-                        ))
-
-_option_auth_user = ('user_auth',
-                     _('Username/Password'),
-                     Tuple(
-                         title=_('Configure user authentication'),
-                         help=_(
-                             'The password entered here is stored in plain text within the monitored host. '
-                             'This is needed because the agent plugin needs to have access to the unencrypted '
-                             'password to authenticate with the server.'
-                         ),
-                         elements=[
-                             TextUnicode(
-                                 title=_('Username'),
-                                 allow_empty=False,
-                                 forbidden_chars=forbidden_chars,
-                                 placeholder='username',
-                             ),
-                             PasswordFromStore(
-                                 title=_('Password of the user'),
-                                 allow_empty=False,
-                             ),
-                             DropdownChoice(
-                                 title=_('Authentication method'),
-                                 choices=[
-                                     ('', _('Use cURL default')),
-                                     ('--basic', _('Basic authentication')),
-                                     ('--digest', _('Digest authentication')),
-                                     ('--ntlm', _('NTLM authentication')),
-                                     ('--ntlm-wb', _('NTLM authentication with winbind')),
-                                     ('--negotiate', _('HTTP Negotiate (SPNEGO) authentication')),
-                                     ('--anyauth', _('Any authentication')),
-                                 ]),
-                         ],
-                     ))
-_option_auth_priv_key = ('priv_key_auth',
-                         _('Private/public key'),
-                         Tuple(
-                             elements=[
-                                 TextUnicode(
-                                     title=_('Username'),
-                                     allow_empty=False,
-                                     forbidden_chars=forbidden_chars,
-                                     placeholder='username',
-                                 ),
-                                 PasswordFromStore(
-                                     title=_('Pass phrase'),
-                                     allow_empty=False,
-                                 ),
-                                 Foldable(UploadOrPasteTextFile(title='Private key', file_title='Private key (PEM)'),
-                                          title='Private key'),
-                             ]
-                         ))
-_option_auth = ('user_auth',
-                CascadingDropdown(
-                    title=_('Configure authentication'),
-                    sorted=False,
-                    choices=[
-                        _option_auth_user,
-                        _option_auth_priv_key,
-                        (None, _('No authentication')),
-                    ],
-                ))
-
-_option_proxy_server = ('proxy_server',
-                        Tuple(
-                            title=_('Proxy server'),
-                            show_titles=False,
-                            elements=[
-                                DropdownChoice(
-                                    title=_('Protocol'),
-                                    choices=[
-                                        ('--proxy', _('HTTP')),
-                                        ('--socks4', _('SOCKS4')),
-                                        ('--socks4a', _('SOCKS4a')),
-                                        ('--socks5', _('SOCKS5')),
-                                        ('--socks5-hostname', _('SOCKS5 hostname')),
-                                    ]),
-                                TextUnicode(
-                                    label=_('Server'),
-                                    help=_('Name or IP-address of the proxy server.'),
-                                    allow_empty=False,
-                                    size=40,
-                                    placeholder='your.proxy.server',
-                                    forbidden_chars=forbidden_chars,
-                                ),
-                                Integer(
-                                    label=_('Port'),
-                                    default_value=3128,
-                                    minvalue=1,
-                                    maxvalue=65565,
-                                ),
-                            ],
-                            orientation='horizontal',
-                        ))
-
-_option_proxy_auth = ('proxy_auth',
-                      Tuple(
-                          title=_('Proxy authentication'),
-                          help=_(
-                              'The password entered here is stored in plain text within the monitored host. '
-                              'This is needed because the agent plugin needs to have access to the unencrypted '
-                              'password to authenticate with the proxy.'
-                          ),
-                          elements=[
-                              TextUnicode(
-                                  title=_('Proxy username'),
-                                  allow_empty=False,
-                                  forbidden_chars=forbidden_chars,
-                                  placeholder='proxyusername',
-                              ),
-                              PasswordFromStore(
-                                  title=_('Password of the user'),
-                                  allow_empty=False,
-                              ),
-                              DropdownChoice(
-                                  title=_('Authentication method'),
-                                  choices=[
-                                      ('--proxy-basic', _('Basic authentication')),
-                                      ('--proxy-digest', _('Digest authentication')),
-                                      ('--proxy-ntlm', _('NTLM authentication')),
-                                      ('--proxy-negotiate', _('HTTP Negotiate (SPNEGO) authentication')),
-                                      ('--proxy-anyauth', _('Any authentication')),
-                                      ('--socks5-basic', _('SOCKS5 basic authentication')),
-                                  ]),
-                          ],
-                      ))
-
-_options_proxy = ('http_proxy',
-                  Alternative(
-                      title=_('Configure proxy server'),
-                      elements=[
-                          Dictionary(
-                              title='Use proxy',
-                              elements=[
-                                  _option_proxy_server,
-                                  _option_proxy_auth,
-                              ],
-                              required_keys=['proxy_server'],
-                          ),
-                          FixedValue('--noproxy', title=_('Don\'t use any proxy'), totext=_('')),
-                          FixedValue(None, title=_('Don\'t configure an proxy (use system settings)'), totext=_('')),
-                      ],
-                  ))
-
-_option_tls_ssl_version = ('tls_ssl_version',
-                           DropdownChoice(
-                               title=_('Use TLS/SSL version'),
-                               choices=[
-                                   ('', _('cURL default')),
-                                   ('--ssl', _('Try TLS/SSL')),
-                                   ('--ssl-reqd', _('Require TLS/SSL')),
-                                   ('--tlsv1.3', _('Use TLS 1.3')),
-                                   ('--tlsv1.2', _('Use TLS 1.2')),
-                                   ('--tlsv1.1', _('Use TLS 1.1')),
-                                   ('--tlsv1.0', _('Use TLS 1.0')),
-                                   ('--tlsv1', _('Use TLS1.0 or greater')),
-                                   ('--sslv3', _('Use SSLv3')),
-                                   ('--sslv2', _('Use SSLv2')),
-                               ]),)
-
-_option_http_version = ('http_version',
-                        DropdownChoice(
-                            title=_('Use HTTP version'),
-                            choices=[
-                                ('', _('cURL preferred version')),
-                                ('--http2', _('Use HTTP/2')),
-                                ('--http1.1', _('Use HTTP 1.1')),
-                                ('--http1.0', _('Use HTTP 1.0')),
-                            ]),)
-
-
-def _transform_forth_address_resolution(params):
-    if not type(params) == dict:
-        if params == '':
-            params = None
-        params = {'dns_resolve_names': params}
-    return params
-
-
-def _validate_ipaddress(pattern, varprefix):
-    if pattern:
-        try:
-            ipaddress.ip_address(pattern)
-        except ValueError:
-            raise MKUserError(varprefix, _(f'{pattern} is not a valid IP address'))
-
-
-_option_address_resolution = ('ip_address_resolution',
-                              Transform(
-                                  Foldable(
-                                      Dictionary(
-                                          title=_('DNS options'),
-                                          elements=[
-                                              ('dns_resolve_names', DropdownChoice(
-                                                  title=_('Resolve names'),
-                                                  choices=[
-                                                      (None, _('IPv4/IPv6')),
-                                                      ('--ipv4', _('IPv4 only')),
-                                                      ('--ipv6', _('IPv6 only')),
-                                                  ])),
-                                              ('dns_source_interface', TextUnicode(
-                                                  title=_('Source interface'),
-                                                  regex='[0-9a-zA-Z]',
-                                                  size=15,
-                                              )),
-                                              ('dns_source_ipv4', TextUnicode(
-                                                  title=_('IPv4 source address'),
-                                                  validate=_validate_ipaddress,
-                                                  size=15,
-                                              )),
-                                              ('dns_source_ipv6', TextUnicode(
-                                                  title=_('IPv6 source address'),
-                                                  validate=_validate_ipaddress,
-                                                  size=42
-                                              )),
-                                              ('dns_servers', ListOfStrings(
-                                                  title=_('DNS servers'),
-                                                  valuespec=TextInput(validate=_validate_ipaddress, size=42),
-                                                  orientation='horizontal',
-
-                                              )),
-                                          ],
-                                      ),
-                                      forth=_transform_forth_address_resolution
-                                  ),
-                                  title=_('Set DNS options'),
-                              ))
-
-_option_ftp_settings = ('ftp_settings',
-                        Foldable(
-                            Dictionary(
-                                title=_('FTP/SCP/SFTP options'),
-                                elements=[
-                                    ('ftp_account', TextUnicode(title=_('Account data string')),),
-                                    ('ftp_alternate_to_user', TextUnicode(title=_('String to replace USER command'))),
-                                    ('ftp_create_dirs', FixedValue(
-                                        True,
-                                        title=_('Create remote dir(s)'),
-                                        totext=_('enabled')
-                                    )),
-                                    ('ftp_change_cwd_method', DropdownChoice(
-                                        title=_('Change working directory method'),
-                                        choices=[
-                                            ('multicwd', 'one CD for each directory'),
-                                            ('nocdw', 'No CD. Use full path in SIZE, RETR, STOR etc.'),
-                                            ('singlecwd', 'use one CD with full path')
-                                        ]
-                                    )),
-                                    ('ftp_mode',
-                                     CascadingDropdown(
-                                         title=_('Passive/Actrive mode'),
-                                         sorted=False,
-                                         choices=[
-                                             ('ftp_pass',
-                                              _('FTP passive mode'),
-                                              Tuple(
-                                                  elements=[
-                                                      Checkbox(label=_('Don\'t send EPSV command')),
-                                                      Checkbox(label=_('Send PRET before PASV')),
-                                                      Checkbox(
-                                                          label=_('Use remote IP form control channel for data chanel'))
-                                                  ]
-                                              )),
-                                             ('ftp_active',
-                                              _('FTP active mode'),
-                                              Tuple(
-                                                  elements=[
-                                                      Checkbox(label=_('Don\'t send EPRT command')),
-                                                      TextUnicode(
-                                                          label=_('Address to use'),
-                                                          help=_(
-                                                              'Can be the interface name ie "eth0", a exact ip address, a '
-                                                              'hostname/FQDN or "-" to use the same address used for the '
-                                                              'control connection'
-                                                          ),
-                                                          default_value='-',
-                                                          regex='[0-9a-zA-Z\\.:\\-_]',
-                                                      ),
-                                                  ]
-                                              ))
-                                         ]
-                                     )),
-                                    ('ftp_ssl_control',
-                                     Tuple(
-                                         title=_('Require SSL/TLS for FTP login'),
-                                         elements=[
-                                             Checkbox(label=_('Send CCC after authenticating')),
-                                             DropdownChoice(
-                                                 label=_('Set CCC mode'),
-                                                 choices=[
-                                                     ('active', 'Active'),
-                                                     ('passive', 'Passive'),
-                                                 ]
-                                             )
-                                         ]
-                                     )),
-                                    ('compressed_ssh', FixedValue(
-                                        True,
-                                        title=_('Enable ssh compression'),
-                                        totext=_('enabled'),
-                                    )),
-                                    ('list_only', FixedValue(
-                                        True,
-                                        title=_('Enable list only'),
-                                        totext=_('enabled'),
-                                    )),
-                                    ('use_ascii', FixedValue(
-                                        True,
-                                        title=_('Enable ASCII transfer'),
-                                        totext=_('enabled'),
-                                    )),
-                                ],
-                            ),
-                            title=_('Set FTP/SCP/SFTP options'),
-                        ))
-
-_option_expected_strings = ('expected_strings',
-                            ListOfStrings(
-                                title=_('Strings to expect in response'),
-                                # orientation='horizontal',
-                                allow_empty=False,
-                                valuespec=TextInput(allow_empty=False, regex='[a-zA-Z0-9\.]'),
-                            ))
-_url_expected_strings = ('expected_strings',
-                         Alternative(
-                             title=_('Override strings to expect in response'),
-                             elements=[
-                                 _option_expected_strings[1],
-                                 FixedValue(None, title=_('Don\'t expect any strings in the response'), totext=_('')),
-                             ],
-                         ))
-
-_option_header_strings = ('header_strings',
-                          ListOfStrings(
-                              title=_('Strings to expect in header'),
-                              # orientation='horizontal',
-                              allow_empty=False,
-                              valuespec=TextInput(allow_empty=False, regex='[a-zA-Z0-9\\.]'),
-                          ))
-_url_header_strings = ('header_strings',
-                       Alternative(
-                           title=_('Override strings to expect in header'),
-                           elements=[
-                               _option_expected_strings[1],
-                               FixedValue(None, title=_('Don\'t expect any strings in the header'), totext=_('')),
-                           ],
-                       ))
-
-_option_request_headers = ('request_headers',
-                           ListOf(
-                               Tuple(
-                                   title=_('Set headers'),
-                                   orientation='horizontal',
-                                   elements=[
-                                       TextUnicode(
-                                           label=_('Header'),
-                                           allow_empty=False,
-                                           placeholder='X-your-header',
-                                           regex='[a-zA-Z0-9_\\-]',
-                                           # size=30,
-                                       ),
-                                       TextUnicode(
-                                           label=_('Value'),
-                                           # allow_empty=False,
-                                           placeholder='value of header',
-                                           # regex='[a-zA-Z0-9_ :;.,=<>#\\-@\\+\\*\'/\\?!\\(\\)\\{\\}\\[\\]\\$\\&~\\^%|"`\\]',
-                                           size=50,
-                                           empty_text=';'
-                                       ),
-                                   ]
-                               ),
-                               allow_empty=False,
-                               title=_('Set headers'),
-                               add_label=_('Add header'),
-                               movable=True,
-                           ))
-_url_request_headers = ('request_headers',
-                        Alternative(
-                            title=_('Override default headers'),
-                            elements=[
-                                _option_request_headers[1],
-                                FixedValue(None, title=_('Don\'t configure request headers'), totext=_(''))
-                            ]
-                        ))
-
-_option_mail_settings = ('mail_settings',
-                         Foldable(
-                             Dictionary(
-                                 title=_('SMTP settings'),
-                                 elements=[
-                                     ('mail_from', TextUnicode(
-                                         title=_('Mail from address'),
-                                         allow_empty=False,
-                                     )),
-                                     ('mail_rcpt', ListOfStrings(
-                                         title=_('Mail to address'),
-                                         allow_empty=False,
-                                         max_entries=5,
-                                     )),
-                                     ('mail_auth', TextUnicode(
-                                         title=_('Mail originator address'),
-                                     )),
-                                     # ('oauth2_header', TextUnicode(
-                                     #      title=_('Oauth2 token'),
-                                     #  )),
-                                     ('request', TextUnicode(
-                                         title=_('REQUEST command'),
-                                         help=_('Send this command instead of LIST (POP3/IMAP) or HELP/VRFY (SMTP).')
-                                     )),
-                                     _option_request_headers,
-                                     ('message', UploadOrPasteTextFile(
-                                         title=_('Message to send'),
-                                     )),
-                                     ('mail_rpct_allowfail', FixedValue(
-                                         True,
-                                         title=_('Allow some mail to addresses to fail'),
-                                         totext=_('enabled')
-                                     ))
-                                 ]
-                             ),
-                             title=_('Set SMTP options'),
-                         ))
-
-_option_api_key_header = ('api_key_header',
-                          Tuple(
-                              title=_('Set API key header'),
-                              help=_(
-                                  'The password entered here is stored in plain text within the monitored host. '
-                                  'This is needed because the agent plugin needs to have access to the unencrypted '
-                                  'password to authenticate with the server.'
-                              ),
-                              elements=[
-                                  TextUnicode(
-                                      title=_('API Key header'),
-                                      allow_empty=False,
-                                      forbidden_chars='|"',
-                                      placeholder='X-API-Key: ',
-                                  ),
-                                  PasswordFromStore(
-                                      title=_('API Key'),
-                                      allow_empty=False,
-                                  ),
-                              ],
-                          ))
-_url_api_key_header = ('api_key_header',
-                       Alternative(
-                           title=_('Set API key header'),
-                           elements=[
-                               _option_api_key_header[1],
-                               FixedValue(None, title=_('Don\'t configure an API key header'), totext=_('')),
-                           ],
-                       ))
-
-_option_limit_rate = ('limit_rate',
-                      Tuple(
-                          title=_('Maximum UP-/Download rate'),
-                          # show_titles=False,
-                          elements=[
-                              Integer(
-                                  label=_('Speed'),
-                                  # default_value=3128,
-                                  minvalue=1,
-                                  # maxvalue=65565,
-                              ),
-                              DropdownChoice(
-                                  default_value='M',
-                                  choices=[
-                                      ('B', _('Byte/s')),
-                                      ('K', _('KByte/s')),
-                                      ('M', _('MByte/s')),
-                                      ('G', _('GByte/s')),
-                                  ]),
-                          ],
-                          orientation='horizontal',
-                      ))
-_url_limit_rate = ('limit_rate',
-                   Alternative(
-                       title=_('Maximum UP-/Download rate'),
-                       elements=[
-                           _option_limit_rate[1],
-                           FixedValue(None, title=_('Don\'t configure a rate limit'), totext=_('')),
-                       ],
-                   ))
-
-_option_max_file_size = ('max_file_size',
-                         Tuple(
-                             title=_('Maximum file size'),
-                             # show_titles=False,
-                             elements=[
-                                 Integer(
-                                     label=_('Size'),
-                                     # default_value=3128,
-                                     minvalue=1,
-                                     # maxvalue=65565,
-                                 ),
-                                 DropdownChoice(
-                                     # title=_('Unit'),
-                                     choices=[
-                                         ('B', _('Byte')),
-                                         ('K', _('KByte')),
-                                         ('M', _('MByte')),
-                                         ('G', _('GByte')),
-                                     ]),
-                             ],
-                             orientation='horizontal',
-                         ))
-_url_max_file_size = ('max_file_size',
-                      Alternative(
-                          title=_('Maximum file size'),
-                          elements=[
-                              _option_max_file_size[1],
-                              FixedValue(None, title=_('Don\'t configure a file size limit'), totext=_('')),
-                          ],
-                      ))
-
-_option_max_time = ('max_time',
-                    Integer(
-                        title=_('Maximum transfer time'),
-                        default_value=10,
-                        minvalue=1,
-                        unit='s',
-                    ))
-_url_max_time = ('max_time',
-                 Alternative(
-                     title=_('Maximum transfer time'),
-                     elements=[
-                         _option_max_time[1],
-                         FixedValue(None, title=_('Don\'t configure a transfer time limit'), totext=_('')),
-                     ],
-                 ))
-
-_option_speed_limit = ('speed_limit',
-                       Tuple(
-                           title=_('Minimum speed'),
-                           # show_titles=False,
-                           elements=[
-                               Integer(
-                                   label=_('Speed'),
-                                   minvalue=1,
-                               ),
-                               DropdownChoice(
-                                   default_value=1024,
-                                   choices=[
-                                       (1, _('Byte/s')),
-                                       (1024, _('KByte/s')),
-                                       (1048576, _('MByte/s')),
-                                       (1073741824, _('GByte/s')),
-                                   ]),
-                           ],
-                           orientation='horizontal', ))
-_url_speed_limit = ('speed_limit',
-                    Alternative(
-                        title=_('Minimum speed'),
-                        elements=[
-                            _option_speed_limit[1],
-                            FixedValue(None, title=_('Don\'t configure a lower speed limit'), totext=_('')),
-                        ],
-                    ))
-
-_option_speed_time = ('speed_time',
-                      Integer(
-                          title=_('Minimum speed time'),
-                          default_value=30,
-                          minvalue=1,
-                          unit='s', ))
-_url_speed_time = ('speed_time',
-                   Alternative(
-                       title=_('Minimum speed time'),
-                       elements=[
-                           _option_speed_time[1],
-                           FixedValue(None, title=_('Don\'t configure a minimum speed time limit'), totext=_('')),
-                       ],
-                   ))
-
-_option_connect_timeout = ('connect_timeout',
-                           Integer(
-                               title=_('Maximum time to connect'),
-                               default_value=1,
-                               minvalue=1,
-                               unit='s', ))
-_url_connect_timeout = ('connect_timeout',
-                        Alternative(
-                            title=_('Maximum time to connect'),
-                            elements=[
-                                _option_connect_timeout[1],
-                                FixedValue(None, title=_('Don\'t configure a maximum time to connect'), totext=_('')),
-                            ],
-                        ))
-
-_option_limits = ('limits',
-                  Foldable(
-                      Dictionary(
-                          title=_('Limits'),
-                          elements=[
-                              _option_limit_rate,
-                              _option_max_file_size,
-                              _option_connect_timeout,
-                              _option_max_time,
-                              _option_speed_limit,
-                              _option_speed_time,
-                          ]
-                      ),
-                      title=_('Set connection limits')
-                  ))
-_url_limits = ('limits',
-               Foldable(
-                   Dictionary(
-                       title=_('Limits'),
-                       elements=[
-                           _url_limit_rate,
-                           _url_max_file_size,
-                           _url_connect_timeout,
-                           _url_max_time,
-                           _url_speed_limit,
-                           _url_speed_time,
-                       ]
-                   ),
-                   title=_('Override connection limits')
-               ))
-
-_option_user_agent = ('user_agent',
-                      TextUnicode(
-                          title=_('Set user agent'),
-                          allow_empty=False,
-                          placeholder='your user agent',
-                          # forbidden_chars=forbidden_chars,
-                          forbidden_chars='"|'
-                      ))
-_url_user_agent = ('user_agent',
-                   CascadingDropdown(
-                       title=_('Set user agent'),
-                       sorted=False,
-                       choices=[
-                           ('user_agent', _('Override default user agent'),
-                            _option_user_agent[1],),
-                           ('', _('Don\'t configure a user agent')),
-                       ],
-                   ))
-
-_option_referer = ('referer',
-                   TextUnicode(
-                       title=_('Set referer'),
-                       allow_empty=False,
-                       placeholder='http://your.referer.url/',
-                       # forbidden_chars=forbidden_chars,
-                       forbidden_chars='|" ',
-                   ))
-_url_referer = ('referer',
-                Alternative(
-                    title=_('Override default referer'),
-                    elements=[
-                        _option_referer[1],
-                        FixedValue(None, title=_('Don\'t configure a referer'), totext=_(''))
-                    ]
-                ))
-
-_options_compressed = ('compressed',
-                       FixedValue(
-                           '--compressed',
-                           title=_('Request compressed response'),
-                           totext=_('Request compressed response enabled'),
-                       ))
-_url_compressed = ('compressed',
-                   DropdownChoice(
-                       title=_('Request compressed response'),
-                       choices=[
-                           ('--compressed', _('Request compressed response')),
-                           ('', _('Don\'t Request compressed response')),
-                       ],
-                   ))
-
-_option_post = ('post_binary',
-                Tuple(
-                    title=_('Send HTTP POST data'),
-                    elements=[
-                        TextUnicode(
-                            label=_('Content-Type'),
-                            allow_empty=False,
-                            forbidden_chars=forbidden_chars,
-                            default_value='text/html'
-                        ),
-                        UploadOrPasteTextFile(
-                            # title=_('HTTP POST data'),
-                            allow_empty=False,
-                            default_value=_(
-                                'This posts data exactly as specified with no extra processing whatsoever.\n\n'
-                                'To disable HTTP POST data in per URL settings leave this empty.'
-                            ),
-                        ),
-                    ]
-                ))
-
-_option_url_settings = ('url_settings',
-                        Foldable(
-                            Dictionary(
-                                title=_('Per URL settings'),
-                                elements=[
-                                    _option_verify_remote_host,
-                                    _options_proxy,
-                                    _option_redirects,
-                                    _option_auth,
-                                    _url_get_header_only,
-                                    _option_regex_response,
-                                    _url_compressed,
-                                    _option_post,
-                                    _url_api_key_header,
-                                    _url_referer,
-                                    _url_request_headers,
-                                    _url_user_agent,
-                                    _url_header_strings,
-                                    _url_expected_strings,
-                                    _url_limits,
-                                    _option_address_resolution,
-                                    _option_ftp_settings,
-                                    _option_mail_settings,
-                                    _option_tls_ssl_version,
-                                    _option_http_version,
-                                    _option_advanced_settings,
-                                ],
-                            ),
-                            title=_('Override default settings'),
-                        ))
-
-
-def _validate_service_names(pattern, varprefix):
-    service_names = []
-
-    for url in pattern:
-        service_names.append(url['curl_service'][0])
-    duplicates = [service_name for service_name in service_names if service_names.count(service_name) > 1]
-    duplicates = list(set(duplicates))
-    if duplicates:
-        raise MKUserError(
-            varprefix,
-            _(f'There are duplicate service names. Please check the following service names: {", ".join(duplicates)}')
-        )
-
-
-def _option_url_transform_curl_service(params):
-    # transform form separate dict entries to tuple
-    # added in version 20220314.v0.1.0
-    # {'url': 'https://excample.com', 'service_name': 'example'}
-    # {'curl_service': ('example', 'https://eaxample.com')}
-    if type(params) == dict:
-        try:
-            url = params['url']
-            service_name = params['service_name']
-            params.pop('url'),
-            params.pop('service_name')
-            params.update({'curl_service': (service_name, url)})
-        except KeyError:
-            pass
-    return params
-
-
-_option_url = ('url_list',
-               Foldable(
-                   ListOf(
-                       Transform(
-                           Dictionary(
-                               elements=[
-                                   _option_curl_service,
-                                   _option_url_settings,
-                               ],
-                               required_keys=['curl_service', ],
-                           ),
-                           forth=_option_url_transform_curl_service
-                       ),
-                       add_label=_('Add URL'),
-                       movable=True,
-                       title=_('URLs to check'),
-                       allow_empty=False,
-                       validate=_validate_service_names,
-                   )))
-
-_option_default_settings = ('default_settings',
-                            Foldable(
-                                Dictionary(
-                                    title=_('Plugin settings'),
-                                    elements=[
-                                        _option_verify_remote_host,
-                                        _options_proxy,
-                                        _option_redirects,
-                                        _option_auth,
-                                        _options_get_header_only,
-                                        _option_regex_response,
-                                        _options_compressed,
-                                        _option_post,
-                                        _option_api_key_header,
-                                        _option_referer,
-                                        _option_request_headers,
-                                        _option_user_agent,
-                                        _option_header_strings,
-                                        _option_expected_strings,
-                                        _option_limits,
-                                        _option_address_resolution,
-                                        _option_ftp_settings,
-                                        _option_mail_settings,
-                                        _option_http_version,
-                                        _option_tls_ssl_version,
-                                        _option_advanced_settings,
-                                    ],
-                                ),
-                                title='Default setting',
-                            ))
-
-_option_plugin_interval = ('interval',
-                           Integer(
-                               title=_('Plugin run interval'),
-                               minvalue=1,
-                               unit=_('min'),
-                               # default_value=1,
-                               help=_(
-                                   'This is the interval at witch the plugin runs. If not set the plugin will '
-                                   'run with every cycle of the agent (By default every 1 minute).'
-                               ),
-                           ),)
-
-_option_plugin_timeout = ('timeout',
-                          Integer(
-                              title=_('Plugin timeout'),
-                              minvalue=1,
-                              unit=_('min'),
-                              # default_value=300,
-                              help=_(
-                                  'This is the maximum run time for the plugin. If not set the timeout for '
-                                  'the plugin is 1 minute by default.'
-                              ),
-                          ),)
-
-_option_curl_executable = ('curl_executable',
-                           DropdownChoice(
-                               title=_('cURL executable to use'),
-                               help=_(
-                                   'By default this plugin will use the system provided cURL executable. You can '
-                                   'decide to deploy a separate cURL executable. If you do so you need to install the '
-                                   'optional CMK package curl_executable<version>.mkp.'
-                               ),
-                               choices=[
-                                   (None, _('Use system provided cURL executable')),
-                                   ('64bit', _('Deploy 64bit cURL version')),
-                                   ('32bit', _('Deploy 32bit cURL version')),
-                               ]
-                           ))
-
-
-def _transform_forth_agent_config_curl(params):
-    # transform added 20220410 on removing os specific rules
-    if type(params) == tuple:
-        if params[0] in ['linux', 'windows', 'deploy']:
-            params = params[1]
-        else:
-            params = None
-    return params
-
-
-def _valuespec_agent_config_curl():
-    return Transform(
-        Alternative(
-            title=_('cURL'),
-            elements=[
-                Dictionary(
-                    title=_('Deploy cURL agent plugin'),
-                    elements=[
-                        _option_url,
-                        _option_plugin_interval,
-                        _option_plugin_timeout,
-                        _option_curl_executable,
-                        _option_default_settings,
-                    ],
-                    required_keys=['url_list'],
-                ),
-                FixedValue(
-                    None,
-                    title=_('Do not deploy the cURL agent plugin'),
-                    totext=_('The cURL agent plugin will not be deployed')
-                ),
-            ],
-        ),
-        forth=_transform_forth_agent_config_curl,
-    )
-
-
-rulespec_registry.register(
-    HostRulespec(
-        group=RulespecGroupMonitoringAgentsAgentPlugins,
-        name='agent_config:curl',
-        valuespec=_valuespec_agent_config_curl,
-    )
-)