--- /dev/null
+# SPDX-License-Identifier: CC0-1.0
+# SPDX-FileCopyrightText: none
+
+bdbfd961200d79ac87fceed297d8b59f97ab411d
+efdb577b69df2b17384d2f4bf68c1c225f10a673
--- /dev/null
+build*/
+.clang-format
+CMakeLists.txt.user*
+.cache
+/.vscode/
--- /dev/null
+# SPDX-FileCopyrightText: 2020-2023 Laurent Montel <montel@kde.org>
+# SPDX-License-Identifier: CC0-1.0
+
+include:
+ - project: sysadmin/ci-utilities
+ file:
+ - /gitlab-templates/linux-qt6.yml
+ - /gitlab-templates/json-validation.yml
+ - /gitlab-templates/freebsd-qt6.yml
+ - /gitlab-templates/reuse-lint.yml
+ - /gitlab-templates/cppcheck.yml
+ - /gitlab-templates/clang-format.yml
+ - /gitlab-templates/windows-qt6.yml
--- /dev/null
+# SPDX-FileCopyrightText: None
+# SPDX-License-Identifier: CC0-1.0
+
+Dependencies:
+- 'on': ['Linux', 'FreeBSD', 'Windows']
+ 'require':
+ 'frameworks/extra-cmake-modules': '@latest-kf6'
+ 'frameworks/kcalendarcore' : '@latest-kf6'
+ 'frameworks/kwidgetsaddons' : '@latest-kf6'
+ 'pim/kmime' : '@same'
+ 'pim/kmbox' : '@same'
+ 'pim/libkleo' : '@same'
+
+Options:
+ require-passing-tests-on: ['Linux']
+ gcovr-arguments: '--exclude "_install/.*" --exclude "examples/.*"'
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
+
+set(PIM_VERSION "6.3.0")
+project(MimeTreeParserNG VERSION ${PIM_VERSION})
+
+# ECM setup
+set(KF_MIN_VERSION "6.6.0")
+find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED)
+set(CMAKE_MODULE_PATH
+ ${CMAKE_MODULE_PATH}
+ ${ECM_MODULE_PATH}
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules
+)
+set(QT_REQUIRED_VERSION "6.7.0")
+
+include(KDEInstallDirs)
+include(KDECMakeSettings)
+include(KDECompilerSettings NO_POLICY_SCOPE)
+
+include(GenerateExportHeader)
+include(ECMGenerateHeaders)
+include(ECMGeneratePriFile)
+
+include(ECMQmlModule)
+include(ECMSetupVersion)
+include(FeatureSummary)
+include(KDEGitCommitHooks)
+include(KDEClangFormat)
+file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES
+autotests/*.cpp
+autotests/*.h
+src/*.cpp
+src/*.h
+examples/*.cpp
+examples/*.h
+)
+kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
+
+include(ECMQtDeclareLoggingCategory)
+include(ECMDeprecationSettings)
+include(ECMFeatureSummary)
+include(ECMAddQch)
+include(ECMAddTests)
+
+include(ECMCheckOutboundLicense)
+file(GLOB_RECURSE ALL_SOURCE_FILES
+autotests/*.cpp
+autotests/*.h
+src/*.cpp
+src/*.h
+examples/*.cpp
+examples/*.h
+)
+ecm_check_outbound_license(LICENSES GPL-2.0-only FILES ${ALL_SOURCE_FILES})
+
+
+set(KPIM_MIME_VERSION "6.3.0")
+set(KPIM_LIBKLEO_VERSION "6.3.0")
+set(KPIM_MBOX_VERSION "6.3.0")
+set(GPGME_REQUIRED_VERSION "1.23.2")
+
+ecm_setup_version(PROJECT
+ VARIABLE_PREFIX MIMETREEPARSERNG
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/mimetreeparserng_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserCoreConfigVersion.cmake"
+ SOVERSION 6
+)
+
+configure_file(mimetreeparserng-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/mimetreeparserng-version.h @ONLY)
+
+option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
+add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
+
+if(BUILD_TESTING)
+ add_definitions(-DBUILD_TESTING)
+endif()
+
+########### Find packages ###########
+find_package(Qt6Gui ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+find_package(Qt6PrintSupport ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+find_package(KF6I18n ${KF_MIN_VERSION} CONFIG REQUIRED)
+find_package(KF6CalendarCore ${KF_MIN_VERSION} CONFIG REQUIRED)
+find_package(KF6WidgetsAddons ${KF_MIN_VERSION} CONFIG)
+find_package(KPim6Mime ${KPIM_MIME_VERSION} CONFIG REQUIRED)
+find_package(KPim6Mbox ${KPIM_MBOX_VERSION} CONFIG REQUIRED)
+find_package(KPim6Libkleo ${KPIM_LIBKLEO_VERSION} CONFIG REQUIRED)
+find_package(Gpgmepp ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
+
+find_package(Qt6Quick ${QT_REQUIRED_VERSION} CONFIG)
+find_package(Qt6Widgets ${QT_REQUIRED_VERSION} CONFIG)
+
+if(BUILD_TESTING)
+ find_package(Qt6Test ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+endif()
+
+########### Targets ###########
+
+add_definitions(-DQT_NO_CONTEXTLESS_CONNECT)
+ecm_set_disabled_deprecation_versions(QT 6.8.0 KF 6.8.0)
+
+option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF)
+
+set(COMPILE_WITH_UNITY_CMAKE_SUPPORT OFF)
+if(USE_UNITY_CMAKE_SUPPORT)
+ set(COMPILE_WITH_UNITY_CMAKE_SUPPORT ON)
+ add_definitions(-DCOMPILE_WITH_UNITY_CMAKE_SUPPORT)
+endif()
+
+add_subdirectory(src)
+if(BUILD_TESTING)
+ add_subdirectory(examples)
+ add_subdirectory(autotests)
+endif()
+
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/mimetreeparserng_version.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserCore
+ COMPONENT Devel
+)
+ecm_qt_install_logging_categories(
+ EXPORT MIMETREEPARSERNG
+ FILE mimetreeparser.categories
+ DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
+)
+
+kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
+ki18n_install(po)
+ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
--- /dev/null
+{
+ "version": 3,
+ "configurePresets": [
+ {
+ "name": "base",
+ "displayName": "base preset",
+ "generator": "Ninja",
+ "binaryDir": "${sourceDir}/build-${presetName}",
+ "installDir": "$env{KF6}",
+ "hidden": true,
+ "cacheVariables": {
+ "BUILD_QCH": "ON"
+ }
+ },
+ {
+ "name": "dev-mold",
+ "displayName": "Build as debug + using mold linker",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
+ "CMAKE_SHARED_LINKER_FLAGS": "-fuse-ld=mold"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "dev",
+ "displayName": "Build as debug",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "asan",
+ "displayName": "Build with Asan support.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ECM_ENABLE_SANITIZERS" : "'address;undefined'"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "dev-clang",
+ "displayName": "dev-clang",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "environment": {
+ "CXX": "clang++",
+ "CCACHE_DISABLE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "unity",
+ "displayName": "Build with CMake unity support.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_UNITY_CMAKE_SUPPORT": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "release",
+ "displayName": "Build as release mode.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Release",
+ "BUILD_TESTING": "OFF"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "profile",
+ "displayName": "profile",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "coverage",
+ "displayName": "coverage",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_UNITY_CMAKE_SUPPORT": "OFF",
+ "BUILD_COVERAGE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "clazy",
+ "displayName": "clazy",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug"
+ },
+ "environment": {
+ "CXX": "clazy",
+ "CCACHE_DISABLE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "pch",
+ "displayName": "pch",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_PRECOMPILED_HEADERS": "ON",
+ "BUILD_COVERAGE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "ftime-trace",
+ "displayName": "ftime-trace",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_DEVELOPER_MODE": "ON",
+ "CMAKE_C_FLAGS_INIT": "-ftime-trace",
+ "CMAKE_CXX_FLAGS_INIT": "-ftime-trace"
+ },
+ "environment": {
+ "CC": "/usr/bin/clang",
+ "CXX": "/usr/bin/clang++",
+ "CCACHE_DISABLE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ }
+ ],
+ "buildPresets": [
+ {
+ "name": "dev",
+ "configurePreset": "dev"
+ },
+ {
+ "name": "ftime-trace",
+ "configurePreset": "ftime-trace"
+ },
+ {
+ "name": "dev-mold",
+ "configurePreset": "dev-mold"
+ },
+ {
+ "name": "dev-clang",
+ "configurePreset": "dev-clang"
+ },
+ {
+ "name": "pch",
+ "configurePreset": "pch"
+ },
+ {
+ "name": "release",
+ "configurePreset": "release"
+ },
+ {
+ "name": "unity",
+ "configurePreset": "unity"
+ },
+ {
+ "name": "coverage",
+ "configurePreset": "coverage"
+ },
+ {
+ "name": "asan",
+ "configurePreset": "asan"
+ },
+ {
+ "name": "clazy",
+ "configurePreset": "clazy",
+ "environment": {
+ "CLAZY_CHECKS" : "level0,level1,detaching-member,ifndef-define-typo,isempty-vs-count,qrequiredresult-candidates,reserve-candidates,signal-with-return-value,unneeded-cast,function-args-by-ref,function-args-by-value,returning-void-expression,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch,old-style-connect,qstring-allocations,container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,qstring-varargs,level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
+ "CCACHE_DISABLE" : "ON"
+ }
+ }
+ ],
+ "testPresets": [
+ {
+ "name": "dev",
+ "configurePreset": "dev",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": false}
+ },
+ {
+ "name": "asan",
+ "configurePreset": "asan",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ },
+ {
+ "name": "unity",
+ "configurePreset": "unity",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ },
+ {
+ "name": "coverage",
+ "configurePreset": "coverage",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ }
+ ]
+}
--- /dev/null
+# SPDX-FileCopyrightText: 2021-2023 Laurent Montel <montel@kde.org>
+# SPDX-License-Identifier: BSD-3-Clause
--- /dev/null
+Copyright (c) <year> <owner>
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
--- /dev/null
+Copyright 1996-2006 Free Software Foundation, Inc.
+
+This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved.
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
+
+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
+
+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+
+“This License” refers to version 3 of the GNU General Public License.
+
+“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
+
+To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
+
+A “covered work” means either the unmodified Program or a work based on the Program.
+
+To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
+
+A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
+
+A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+ b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the library's name and an idea of what it does.
+ Copyright (C) year name of author
+
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+ b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the library's name and an idea of what it does.
+ Copyright (C) year name of author
+
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
+
+We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+ b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the library's name and an idea of what it does.
+ Copyright (C) year name of author
+
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
+
+We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
+
+GNU LESSER GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+ b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the library's name and an idea of what it does.
+ Copyright (C) year name of author
+
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
+
+0. Additional Definitions.
+
+As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License.
+
+"The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
+
+An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
+
+A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version".
+
+The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
+
+The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
+
+1. Exception to Section 3 of the GNU GPL.
+You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
+
+2. Conveying Modified Versions.
+If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
+
+ a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
+
+3. Object Code Incorporating Material from Library Header Files.
+The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license document.
+
+4. Combined Works.
+You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
+
+ a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
+
+ c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
+
+ e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
+
+5. Combined Libraries.
+You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+6. Revised Versions of the GNU Lesser General Public License.
+The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.
+
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+
+“This License” refers to version 3 of the GNU General Public License.
+
+“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
+
+To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
+
+A “covered work” means either the unmodified Program or a work based on the Program.
+
+To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
+
+A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
+
+A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 3 of
+the license or (at your option) at any later version that is
+accepted by the membership of KDE e.V. (or its successor
+approved by the membership of KDE e.V.), which shall act as a
+proxy as defined in Section 14 of version 3 of the license.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
--- /dev/null
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 3 of the license or (at your option) any later version
+that is accepted by the membership of KDE e.V. (or its successor
+approved by the membership of KDE e.V.), which shall act as a
+proxy as defined in Section 6 of version 3 of the license.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
--- /dev/null
+# MimeTreeParser
+
+This repository contains a parser for a MIME tree and is based on KMime. The
+goal is given a MIME tree to extract a list of parts (e.g. text, html) and a
+list of attachments, check the validity of the signatures and decrypt any
+encrypted part.
+
+
+
+## Example
+
+Example usage of this library can be found in the examples folder.
+
+QML usage (examples/qml):
+
+
+
+Widgets usage (examples/widgets):
+
+
+
+## License
+
+This project is licensed under the GNU General License (GPL-2.0-only AND GPL-2.0-or-later). New files are expected to be licensed under the GPL-2.0-or-later.
--- /dev/null
+version = 1
+SPDX-FileCopyrightText = "none"
+SPDX-License-Identifier = "CC0-1.0"
+SPDX-PackageName = "MimeTreeParser"
+SPDX-PackageSupplier = "Carl Schwan <carl@carlschwan.eu>"
+
+[[annotations]]
+path = ["autotests/testdata/**", "autotests/gnupg_home/**", "README.md", ".gitignore", "screenshots/screenshot.png", "screenshots/widgets.png", "readme-build-ftime.txt", "REUSE.toml"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "none"
+SPDX-License-Identifier = "CC0-1.0"
--- /dev/null
+# SPDX-FileCopyrightText: 2023 g10 Code GmbH
+# SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-2-Clause
+
+add_subdirectory(gnupg_home)
+add_subdirectory(core)
+add_subdirectory(widgets)
--- /dev/null
+# SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+# SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
+add_definitions(-DMAIL_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../testdata")
+
+include(ECMAddTests)
+include(${CMAKE_SOURCE_DIR}/cmake/modules/add_gpg_crypto_test.cmake)
+
+function(add_mimetreeparser_class_unittest _name _additionalSource)
+ add_executable(${_name} ${_name}.cpp setupenv.cpp ${_additionalSource})
+ target_link_libraries(${_name} PRIVATE
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ )
+ target_include_directories(${_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
+ add_test(NAME core-${_name} COMMAND $<TARGET_FILE:${_name}>)
+endfunction()
+
+function(add_mimetreeparser_crypto_unittest _name)
+ add_executable(${_name} ${_name}.cpp ../setupenv.cpp)
+ target_link_libraries(${_name} PRIVATE Gpgmepp)
+ target_include_directories(${_name} PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/..
+ ${GPGME_INCLUDE_DIRS}
+ )
+ target_link_libraries(${_name} PRIVATE
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ )
+ add_gpg_crypto_test(${_name} core-${_name})
+endfunction()
+
+add_mimetreeparser_crypto_unittest(attachmenttest)
+
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/..
+)
+include_directories(${GPGME_INCLUDE_DIRS})
+
+add_executable(cryptohelpertest cryptohelpertest.cpp)
+add_gpg_crypto_test(cryptohelpertest core-cryptohelpertest)
+target_link_libraries(cryptohelpertest PUBLIC
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ Gpgmepp
+)
+
+add_executable(mimetreeparsertest mimetreeparsertest.cpp)
+add_gpg_crypto_test(mimetreeparsertest core-mimetreeparsertest)
+target_link_libraries(mimetreeparsertest PUBLIC
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ Gpgmepp
+)
+
+add_executable(gpgerrortest gpgerrortest.cpp)
+target_link_libraries(gpgerrortest PUBLIC
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ Gpgmepp
+)
+add_test(NAME core-gpgerrortest COMMAND $<TARGET_FILE:gpgerrortest>)
+
+add_executable(fileopenertest fileopenertest.cpp)
+target_link_libraries(fileopenertest PUBLIC
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ Gpgmepp
+)
+add_test(NAME core-fileopenertest COMMAND $<TARGET_FILE:fileopenertest>)
+
+## PartModel test
+add_executable(partmodeltest partmodeltest.cpp)
+add_gpg_crypto_test(partmodeltest core-partmodeltest)
+target_link_libraries(partmodeltest
+ Qt::Test
+ KPim6::MimeTreeParserCore
+ Gpgmepp
+)
+
+ecm_add_test(attachmentmodeltest.cpp
+ LINK_LIBRARIES KPim6MimeTreeParserCore Qt::Test Gpgmepp
+ NAME_PREFIX "core-"
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <QTest>
+
+#include "attachmentmodel.h"
+#include "messageparser.h"
+
+#include <QAbstractItemModelTester>
+#include <QSignalSpy>
+#include <QTemporaryFile>
+
+KMime::Message::Ptr readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ auto mailData = KMime::CRLFtoLF(file.readAll());
+ KMime::Message::Ptr message(new KMime::Message);
+ message->setContent(mailData);
+ message->parse();
+ return message;
+}
+
+class AttachmentModelTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void openMailWithOneAttachementTest()
+ {
+ MessageParser messageParser;
+ messageParser.setMessage(readMailFromFile(QLatin1StringView("attachment.mbox")));
+
+ auto attachmentModel = messageParser.attachments();
+ new QAbstractItemModelTester(attachmentModel);
+
+ QCOMPARE(attachmentModel->rowCount(), 1);
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, 0), AttachmentModel::TypeRole).toString(), QStringLiteral("image/jpeg"));
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, 0), AttachmentModel::NameRole).toString(), QStringLiteral("aqnaozisxya.jpeg"));
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, 0), AttachmentModel::SizeRole).toString(), QStringLiteral("100.22 KB"));
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, 0), AttachmentModel::IsEncryptedRole).toBool(), false);
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, 0), AttachmentModel::IsSignedRole).toBool(), false);
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, AttachmentModel::IsEncryptedColumn), Qt::CheckStateRole).value<Qt::CheckState>(),
+ Qt::Unchecked);
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, AttachmentModel::IsSignedColumn), Qt::CheckStateRole).value<Qt::CheckState>(), Qt::Unchecked);
+ QCOMPARE(attachmentModel->data(attachmentModel->index(0, AttachmentModel::SizeColumn), Qt::DisplayRole).toString(), QStringLiteral("100.22 KB"));
+ }
+
+ void saveTest()
+ {
+ MessageParser messageParser;
+ messageParser.setMessage(readMailFromFile(QLatin1StringView("attachment.mbox")));
+
+ auto attachmentModel = messageParser.attachments();
+ QTemporaryFile file;
+ QVERIFY(file.open());
+ const auto fileName = attachmentModel->saveAttachmentToPath(0, file.fileName());
+ QFile file2(fileName);
+ QVERIFY(file2.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY(!file2.readAll().isEmpty());
+ }
+
+ void openTest()
+ {
+ MessageParser messageParser;
+ messageParser.setMessage(readMailFromFile(QLatin1StringView("attachment.mbox")));
+
+ auto attachmentModel = messageParser.attachments();
+ QSignalSpy spy(attachmentModel, &AttachmentModel::errorOccurred);
+ QVERIFY(spy.isValid());
+
+ attachmentModel->openAttachment(0);
+
+ // Check no error occurred
+ QCOMPARE(spy.count(), 0);
+ }
+
+ void saveInvalidPathTest()
+ {
+ MessageParser messageParser;
+ messageParser.setMessage(readMailFromFile(QLatin1StringView("attachment.mbox")));
+
+ auto attachmentModel = messageParser.attachments();
+ QSignalSpy spy(attachmentModel, &AttachmentModel::errorOccurred);
+ QVERIFY(spy.isValid());
+
+ const auto fileName = attachmentModel->saveAttachmentToPath(0, QStringLiteral("/does/not/exist"));
+ QList<QVariant> arguments = spy.takeFirst();
+ QVERIFY(arguments.at(0).userType() == QMetaType::QString);
+ }
+};
+
+QTEST_MAIN(AttachmentModelTest)
+#include "attachmentmodeltest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2015 Volker Krause <vkrause@kde.org>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <MimeTreeParserCore/ObjectTreeParser>
+
+#include "setupenv.h"
+
+#include <QTest>
+
+using namespace MimeTreeParser;
+
+class AttachmentTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void initTestCase();
+ void testEncryptedAttachment_data();
+ void testEncryptedAttachment();
+};
+
+QTEST_MAIN(AttachmentTest)
+
+QByteArray readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ return file.readAll();
+}
+
+void AttachmentTest::initTestCase()
+{
+ MimeTreeParser::Test::setupEnv();
+}
+
+void AttachmentTest::testEncryptedAttachment_data()
+{
+ QTest::addColumn<QString>("mbox");
+ QTest::newRow("encrypted") << "openpgp-encrypted-two-attachments.mbox";
+ QTest::newRow("signed") << "openpgp-signed-two-attachments.mbox";
+ QTest::newRow("signed+encrypted") << "openpgp-signed-encrypted-two-attachments.mbox";
+ QTest::newRow("encrypted+partial signed") << "openpgp-encrypted-partially-signed-attachments.mbox";
+}
+
+void AttachmentTest::testEncryptedAttachment()
+{
+ QFETCH(QString, mbox);
+ ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(mbox));
+ otp.decryptAndVerify();
+ otp.print();
+
+ auto attachmentParts = otp.collectAttachmentParts();
+ QCOMPARE(attachmentParts.size(), 2);
+}
+
+#include "attachmenttest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+
+#include "cryptohelpertest.h"
+
+#include "cryptohelper.h"
+
+#include <QTest>
+
+using namespace MimeTreeParser;
+
+QByteArray readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ return file.readAll();
+}
+
+void CryptoHelperTest::testPMFDEmpty()
+{
+ QCOMPARE(prepareMessageForDecryption("").count(), 0);
+}
+
+void CryptoHelperTest::testPMFDWithNoPGPBlock()
+{
+ const QByteArray text = "testblabla";
+ const QList<Block> blocks = prepareMessageForDecryption(text);
+ QCOMPARE(blocks.count(), 1);
+ QCOMPARE(blocks[0].text(), text);
+ QCOMPARE(blocks[0].type(), NoPgpBlock);
+}
+
+void CryptoHelperTest::testPGPBlockType()
+{
+ const QString blockText = QStringLiteral("text");
+ const QString preString = QStringLiteral("before\n");
+ for (int i = 1; i <= PrivateKeyBlock; ++i) {
+ QString name;
+ switch (i) {
+ case PgpMessageBlock:
+ name = QStringLiteral("MESSAGE");
+ break;
+ case MultiPgpMessageBlock:
+ name = QStringLiteral("MESSAGE PART");
+ break;
+ case SignatureBlock:
+ name = QStringLiteral("SIGNATURE");
+ break;
+ case ClearsignedBlock:
+ name = QStringLiteral("SIGNED MESSAGE");
+ break;
+ case PublicKeyBlock:
+ name = QStringLiteral("PUBLIC KEY BLOCK");
+ break;
+ case PrivateKeyBlock:
+ name = QStringLiteral("PRIVATE KEY BLOCK");
+ break;
+ }
+ QString text = QLatin1StringView("-----BEGIN PGP ") + name + QLatin1Char('\n') + blockText;
+ QList<Block> blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1());
+ QCOMPARE(blocks.count(), 1);
+ QCOMPARE(blocks[0].type(), UnknownBlock);
+
+ text += QLatin1StringView("\n-----END PGP ") + name + QLatin1Char('\n');
+ blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1());
+ QCOMPARE(blocks.count(), 2);
+ QCOMPARE(blocks[1].text(), text.toLatin1());
+ QCOMPARE(blocks[1].type(), static_cast<PGPBlockType>(i));
+ }
+}
+
+void CryptoHelperTest::testDeterminePGPBlockType()
+{
+ const QString blockText = QStringLiteral("text");
+ for (int i = 1; i <= PrivateKeyBlock; ++i) {
+ QString name;
+ switch (i) {
+ case PgpMessageBlock:
+ name = QStringLiteral("MESSAGE");
+ break;
+ case MultiPgpMessageBlock:
+ name = QStringLiteral("MESSAGE PART");
+ break;
+ case SignatureBlock:
+ name = QStringLiteral("SIGNATURE");
+ break;
+ case ClearsignedBlock:
+ name = QStringLiteral("SIGNED MESSAGE");
+ break;
+ case PublicKeyBlock:
+ name = QStringLiteral("PUBLIC KEY BLOCK");
+ break;
+ case PrivateKeyBlock:
+ name = QStringLiteral("PRIVATE KEY BLOCK");
+ break;
+ }
+ const QString text = QLatin1StringView("-----BEGIN PGP ") + name + QLatin1Char('\n') + blockText + QLatin1Char('\n');
+ const Block block = Block(text.toLatin1());
+ QCOMPARE(block.text(), text.toLatin1());
+ QCOMPARE(block.type(), static_cast<PGPBlockType>(i));
+ }
+}
+
+void CryptoHelperTest::testEmbededPGPBlock()
+{
+ const QByteArray text = QByteArray("before\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\nafter");
+ const QList<Block> blocks = prepareMessageForDecryption(text);
+ QCOMPARE(blocks.count(), 3);
+ QCOMPARE(blocks[0].text(), QByteArray("before\n"));
+ QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"));
+ QCOMPARE(blocks[2].text(), QByteArray("after"));
+}
+
+void CryptoHelperTest::testClearSignedMessage()
+{
+ const QByteArray text = QByteArray(
+ "before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter");
+ const QList<Block> blocks = prepareMessageForDecryption(text);
+ QCOMPARE(blocks.count(), 3);
+ QCOMPARE(blocks[0].text(), QByteArray("before\n"));
+ QCOMPARE(blocks[1].text(),
+ QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n"));
+ QCOMPARE(blocks[2].text(), QByteArray("after"));
+}
+
+void CryptoHelperTest::testMultipleBlockMessage()
+{
+ const QByteArray text = QByteArray(
+ "before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP "
+ "SIGNATURE-----\nafter\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n");
+ const QList<Block> blocks = prepareMessageForDecryption(text);
+ QCOMPARE(blocks.count(), 4);
+ QCOMPARE(blocks[0].text(), QByteArray("before\n"));
+ QCOMPARE(blocks[1].text(),
+ QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n"));
+ QCOMPARE(blocks[2].text(), QByteArray("after\n"));
+ QCOMPARE(blocks[3].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"));
+}
+
+void CryptoHelperTest::testDecryptMessage()
+{
+ auto message = KMime::Message::Ptr(new KMime::Message);
+ message->setContent(readMailFromFile(QLatin1StringView("openpgp-encrypted+signed.mbox")));
+ message->parse();
+
+ bool wasEncrypted = false;
+ GpgME::Protocol protocol;
+ auto decryptedMessage = CryptoUtils::decryptMessage(message, wasEncrypted, protocol);
+ QVERIFY(wasEncrypted);
+ QVERIFY(decryptedMessage);
+ QCOMPARE(decryptedMessage->decodedContent(), QByteArray("encrypted message text"));
+ QCOMPARE(decryptedMessage->encodedContent(),
+ QByteArray("From test@kolab.org Wed, 08 Sep 2010 17: 02:52 +0200\nFrom: OpenPGP Test <test@kolab.org>\nTo: test@kolab.org\nSubject: OpenPGP "
+ "encrypted\nDate: Wed, 08 Sep 2010 17:02:52 +0200\nUser-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; "
+ ")\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7Bit\nContent-Type: text/plain; charset=\"us-ascii\"\n\nencrypted message text"));
+ QCOMPARE(protocol, GpgME::OpenPGP);
+}
+
+void CryptoHelperTest::testDecryptInlineMessage()
+{
+ auto message = KMime::Message::Ptr(new KMime::Message);
+ message->setContent(readMailFromFile(QLatin1StringView("openpgp-inline-encrypted+nonenc.mbox")));
+ message->parse();
+
+ bool wasEncrypted = false;
+ GpgME::Protocol protocol;
+ auto decryptedMessage = CryptoUtils::decryptMessage(message, wasEncrypted, protocol);
+ QVERIFY(wasEncrypted);
+ QVERIFY(decryptedMessage);
+ QCOMPARE(decryptedMessage->decodedContent(), QByteArray("Not encrypted not signed :(\n\nsome random text\n"));
+ QCOMPARE(decryptedMessage->encodedContent(),
+ QByteArray("From test@kolab.org Wed, 25 May 2011 23: 49:40 +0100\nFrom: OpenPGP Test <test@kolab.org>\nTo: test@kolab.org\nSubject: "
+ "inlinepgpencrypted + non enc text\nDate: Wed, 25 May 2011 23:49:40 +0100\nMessage-ID: "
+ "<1786696.yKXrOjjflF@herrwackelpudding.localhost>\nX-KMail-Transport: GMX\nX-KMail-Fcc: 28\nX-KMail-Drafts: 7\nX-KMail-Templates: "
+ "9\nUser-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64;\n git-0269848; 2011-04-19)\nMIME-Version: "
+ "1.0\nContent-Type: text/plain; charset=\"us-ascii\"\n\nNot encrypted not signed :(\n\nsome random text\n"));
+ QCOMPARE(protocol, GpgME::OpenPGP);
+}
+
+QTEST_APPLESS_MAIN(CryptoHelperTest)
+
+#include "moc_cryptohelpertest.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2009 Thomas McGuire <mcguire@kde.org>
+// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+
+#pragma once
+
+#include <QObject>
+
+namespace MimeTreeParser
+{
+class CryptoHelperTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testPMFDEmpty();
+ void testPMFDWithNoPGPBlock();
+ void testPGPBlockType();
+ void testDeterminePGPBlockType();
+ void testEmbededPGPBlock();
+ void testClearSignedMessage();
+ void testMultipleBlockMessage();
+ void testDecryptMessage();
+ void testDecryptInlineMessage();
+};
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <MimeTreeParserCore/FileOpener>
+
+#include <QTemporaryFile>
+#include <QTest>
+
+using namespace MimeTreeParser::Core;
+
+class FileOpenerTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void openSingleMboxTest()
+ {
+ const auto messages = FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("smime-opaque-enc+sign.mbox"));
+ QCOMPARE(messages.count(), 1);
+ }
+
+ void openSingleCombinedTest()
+ {
+ const auto messages = FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("combined.mbox"));
+ QCOMPARE(messages.count(), 3);
+ }
+
+ void openAscTest()
+ {
+ const auto messages = FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("msg.asc"));
+ QCOMPARE(messages.count(), 1);
+ auto message = messages[0];
+
+ QCOMPARE(message->contentType()->mimeType(), "multipart/encrypted");
+ QCOMPARE(message->contents().count(), 2);
+
+ auto pgpPart = message->contents()[0];
+ QCOMPARE(pgpPart->contentType()->mimeType(), "application/pgp-encrypted");
+
+ auto octetStreamPart = message->contents()[1];
+ QCOMPARE(octetStreamPart->contentType()->mimeType(), "application/octet-stream");
+ }
+
+ void openSmimeTest()
+ {
+ const auto messages = FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("smime.p7m"));
+ QCOMPARE(messages.count(), 1);
+ auto message = messages[0];
+
+ QCOMPARE(message->contentType()->mimeType(), "application/pkcs7-mime");
+ QCOMPARE(message->contentType()->parameter("smime-type"), QStringLiteral("enveloped-data"));
+ QCOMPARE(message->contentDisposition()->filename(), QStringLiteral("smime.p7m"));
+ }
+
+ void openInexistingFileTest()
+ {
+ const auto messages = FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("not-here.p7m"));
+ QCOMPARE(messages.count(), 0);
+ }
+
+ void openEmptyFile()
+ {
+ QTemporaryFile file;
+ QVERIFY(file.open());
+ const auto messages = FileOpener::openFile(file.fileName());
+ QCOMPARE(messages.count(), 0);
+ }
+};
+
+QTEST_GUILESS_MAIN(FileOpenerTest)
+#include "fileopenertest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsystems.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <MimeTreeParserCore/ObjectTreeParser>
+
+#include <gpgme.h>
+
+#include <QProcess>
+#include <QTest>
+
+QByteArray readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ return file.readAll();
+}
+
+void killAgent(const QString &dir)
+{
+ QProcess proc;
+ proc.setProgram(QStringLiteral("gpg-connect-agent"));
+ QStringList arguments;
+ arguments << QStringLiteral("-S ") << dir + QStringLiteral("/S.gpg-agent");
+ proc.start();
+ proc.waitForStarted();
+ proc.write("KILLAGENT\n");
+ proc.write("BYE\n");
+ proc.closeWriteChannel();
+ proc.waitForFinished();
+}
+
+class GpgErrorTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void testGpgConfiguredCorrectly()
+ {
+ setEnv("GNUPGHOME", GNUPGHOME);
+
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QStringLiteral("openpgp-inline-charset-encrypted.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0];
+ QVERIFY(bool(part));
+
+ QVERIFY(part->text().startsWith(QStringLiteral("asdasd")));
+ QCOMPARE(part->encryptions().size(), 1);
+ auto enc = part->encryptions()[0];
+ QCOMPARE(enc->error(), MimeTreeParser::MessagePart::NoError);
+ // QCOMPARE((int) enc->recipients().size(), 2);
+ }
+
+ void testNoGPGInstalled_data()
+ {
+ QTest::addColumn<QString>("mailFileName");
+
+ QTest::newRow("openpgp-inline-charset-encrypted") << "openpgp-inline-charset-encrypted.mbox";
+ QTest::newRow("openpgp-encrypted-attachment-and-non-encrypted-attachment") << "openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox";
+ QTest::newRow("smime-encrypted") << "smime-encrypted.mbox";
+ }
+
+ void testNoGPGInstalled()
+ {
+ QFETCH(QString, mailFileName);
+
+ setEnv("PATH", "/nonexististing");
+ setGpgMEfname("/nonexisting/gpg", "");
+
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(mailFileName));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+
+ QCOMPARE(part->encryptions().size(), 1);
+ QVERIFY(part->text().isEmpty());
+ auto enc = part->encryptions()[0];
+ QCOMPARE(enc->error(), MimeTreeParser::MessagePart::NoKeyError);
+ }
+
+ void testGpgIncorrectGPGHOME_data()
+ {
+ QTest::addColumn<QString>("mailFileName");
+
+ QTest::newRow("openpgp-inline-charset-encrypted") << "openpgp-inline-charset-encrypted.mbox";
+ QTest::newRow("openpgp-encrypted-attachment-and-non-encrypted-attachment") << "openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox";
+ QTest::newRow("smime-encrypted") << "smime-encrypted.mbox";
+ }
+
+ void testGpgIncorrectGPGHOME()
+ {
+ QFETCH(QString, mailFileName);
+ setEnv("GNUPGHOME", QByteArray(GNUPGHOME) + QByteArray("noexist"));
+
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(mailFileName));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 0);
+ QVERIFY(part->text().isEmpty());
+ auto enc = part->encryptions()[0];
+ QVERIFY(enc->isNoSecKey());
+ // QCOMPARE((int) enc->recipients().size(), 2);
+ }
+
+public Q_SLOTS:
+ void init()
+ {
+ mResetGpgmeEngine = false;
+ mModifiedEnv.clear();
+ {
+ gpgme_check_version(nullptr);
+ gpgme_ctx_t ctx = nullptr;
+ gpgme_new(&ctx);
+ gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP);
+ gpgme_engine_info_t info = gpgme_ctx_get_engine_info(ctx);
+ mGpgmeEngine_fname = info->file_name;
+ gpgme_release(ctx);
+ }
+ mEnv = QProcessEnvironment::systemEnvironment();
+ unsetEnv("GNUPGHOME");
+ }
+
+ void cleanup()
+ {
+ QCoreApplication::sendPostedEvents();
+
+ const QString &gnupghome = QString::fromUtf8(qgetenv("GNUPGHOME"));
+ if (!gnupghome.isEmpty()) {
+ killAgent(gnupghome);
+ }
+
+ resetGpgMfname();
+ resetEnv();
+ }
+
+private:
+ void unsetEnv(const QByteArray &name)
+ {
+ mModifiedEnv << name;
+ qunsetenv(name.data());
+ }
+
+ void setEnv(const QByteArray &name, const QByteArray &value)
+ {
+ mModifiedEnv << name;
+ qputenv(name.data(), value);
+ }
+
+ void resetEnv()
+ {
+ for (const auto &i : std::as_const(mModifiedEnv)) {
+ const auto env = i.data();
+ if (mEnv.contains(QString::fromUtf8(i))) {
+ qputenv(env, mEnv.value(QString::fromUtf8(i)).toUtf8());
+ } else {
+ qunsetenv(env);
+ }
+ }
+ }
+
+ void resetGpgMfname()
+ {
+ if (mResetGpgmeEngine) {
+ gpgme_set_engine_info(GPGME_PROTOCOL_OpenPGP, mGpgmeEngine_fname.data(), nullptr);
+ }
+ }
+
+ void setGpgMEfname(const QByteArray &fname, const QByteArray &homedir)
+ {
+ mResetGpgmeEngine = true;
+ gpgme_set_engine_info(GPGME_PROTOCOL_OpenPGP, fname.data(), homedir.data());
+ }
+
+ QSet<QByteArray> mModifiedEnv;
+ QProcessEnvironment mEnv;
+ bool mResetGpgmeEngine;
+ QByteArray mGpgmeEngine_fname;
+};
+
+QTEST_GUILESS_MAIN(GpgErrorTest)
+#include "gpgerrortest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsystems.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "partmodel.h"
+#include <MimeTreeParserCore/ObjectTreeParser>
+
+#include <QTest>
+#include <QTimeZone>
+
+using namespace Qt::Literals::StringLiterals;
+
+QByteArray readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ return file.readAll();
+}
+
+class MimeTreeParserTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testTextMail()
+ {
+ const auto expectedText = QStringLiteral(
+ "If you can see this text it means that your email client couldn't display our newsletter properly.\nPlease visit this link to view the newsletter "
+ "on our website: http://www.gog.com/newsletter/");
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("plaintext.mbox")));
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QCOMPARE(part->text(), expectedText);
+ QCOMPARE(part->charset(), QStringLiteral("utf-8").toLocal8Bit());
+
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+
+ QCOMPARE(otp.collectAttachmentParts().size(), 0);
+
+ QCOMPARE(otp.plainTextContent(), expectedText);
+ QVERIFY(otp.htmlContent().isEmpty());
+ }
+
+ void testAlternative()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("alternative.mbox")));
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->plaintextContent(),
+ QStringLiteral("If you can see this text it means that your email client couldn't display our newsletter properly.\nPlease visit this link to "
+ "view the newsletter on our website: http://www.gog.com/newsletter/\n"));
+ QCOMPARE(part->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+ QCOMPARE(part->htmlContent(), QStringLiteral("<html><body><p><span>HTML</span> text</p></body></html>\n\n"));
+ QCOMPARE(otp.collectAttachmentParts().size(), 0);
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ }
+
+ void testTextHtml()
+ {
+ auto expectedText = QStringLiteral("<html><body><p><span>HTML</span> text</p></body></html>");
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("html.mbox")));
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::HtmlMessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->htmlContent(), expectedText);
+ QCOMPARE(part->charset(), QStringLiteral("windows-1252").toLocal8Bit());
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ auto contentAttachmentList = otp.collectAttachmentParts();
+ QCOMPARE(contentAttachmentList.size(), 0);
+
+ QCOMPARE(otp.htmlContent(), expectedText);
+ QVERIFY(otp.plainTextContent().isEmpty());
+ }
+
+ void testSMimeEncrypted()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-encrypted.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("The quick brown fox jumped over the lazy dog."));
+ QCOMPARE(part->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 0);
+ auto contentAttachmentList = otp.collectAttachmentParts();
+ QCOMPARE(contentAttachmentList.size(), 0);
+ }
+
+ void testOpenPGPEncryptedAttachment()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("test text"));
+ QCOMPARE(part->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ auto contentAttachmentList = otp.collectAttachmentParts();
+ QCOMPARE(contentAttachmentList.size(), 2);
+ // QCOMPARE(contentAttachmentList[0]->availableContents(), QList<QByteArray>() << "text/plain");
+ // QCOMPARE(contentAttachmentList[0]->content().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->encryptions().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->signatures().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(contentAttachmentList[0]->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ // QCOMPARE(contentAttachmentList[1]->availableContents(), QList<QByteArray>() << "image/png");
+ // QCOMPARE(contentAttachmentList[1]->content().size(), 1);
+ QCOMPARE(contentAttachmentList[1]->encryptions().size(), 0);
+ QCOMPARE(contentAttachmentList[1]->signatures().size(), 0);
+ QCOMPARE(contentAttachmentList[1]->encryptionState(), MimeTreeParser::KMMsgNotEncrypted);
+ QCOMPARE(contentAttachmentList[1]->signatureState(), MimeTreeParser::KMMsgNotSigned);
+ }
+
+ void testOpenPGPInline()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-inline-charset-encrypted.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->charset(), QStringLiteral("ISO-8859-15").toLocal8Bit());
+ QCOMPARE(part->text(), QString::fromUtf8("asdasd asd asd asdf sadf sdaf sadf öäü"));
+
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(otp.collectAttachmentParts().size(), 0);
+ }
+
+ void testOpenPPGInlineWithNonEncText()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-inline-encrypted+nonenc.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part1 = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part1));
+ QCOMPARE(part1->text(), QStringLiteral("Not encrypted not signed :(\n\nsome random text"));
+ // TODO test if we get the proper subparts with the appropriate encryptions
+ QCOMPARE(part1->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+
+ QCOMPARE(part1->encryptionState(), MimeTreeParser::KMMsgPartiallyEncrypted);
+ QCOMPARE(part1->signatureState(), MimeTreeParser::KMMsgNotSigned);
+
+ // QCOMPARE(part1->text(), QStringLiteral("Not encrypted not signed :(\n\n"));
+ // QCOMPARE(part1->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+ // QCOMPARE(contentList[1]->content(), QStringLiteral("some random text").toLocal8Bit());
+ // QCOMPARE(contentList[1]->charset(), QStringLiteral("us-ascii").toLocal8Bit());
+ // QCOMPARE(contentList[1]->encryptions().size(), 1);
+ // QCOMPARE(contentList[1]->signatures().size(), 0);
+ QCOMPARE(otp.collectAttachmentParts().size(), 0);
+ }
+
+ void testEncryptionBlock()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part1 = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part1));
+ QCOMPARE(part1->encryptions().size(), 1);
+ // auto enc = contentList[0]->encryptions()[0];
+ // QCOMPARE((int) enc->recipients().size(), 2);
+
+ // auto r = enc->recipients()[0];
+ // QCOMPARE(r->keyid(),QStringLiteral("14B79E26050467AA"));
+ // QCOMPARE(r->name(),QStringLiteral("kdetest"));
+ // QCOMPARE(r->email(),QStringLiteral("you@you.com"));
+ // QCOMPARE(r->comment(),QStringLiteral(""));
+
+ // r = enc->recipients()[1];
+ // QCOMPARE(r->keyid(),QStringLiteral("8D9860C58F246DE6"));
+ // QCOMPARE(r->name(),QStringLiteral("unittest key"));
+ // QCOMPARE(r->email(),QStringLiteral("test@kolab.org"));
+ // QCOMPARE(r->comment(),QStringLiteral("no password"));
+ auto attachmentList = otp.collectAttachmentParts();
+ QCOMPARE(attachmentList.size(), 2);
+ auto attachment1 = attachmentList[0];
+ QVERIFY(attachment1->node());
+ QCOMPARE(attachment1->filename(), QStringLiteral("file.txt"));
+ auto attachment2 = attachmentList[1];
+ QVERIFY(attachment2->node());
+ QCOMPARE(attachment2->filename(), QStringLiteral("image.png"));
+ }
+
+ void testSignatureBlock()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-attachment-and-non-encrypted-attachment.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+
+ // QCOMPARE(contentList[0]->signatures().size(), 1);
+ // auto sig = contentList[0]->signatures()[0];
+ // QCOMPARE(sig->creationDateTime(), QDateTime(QDate(2015,05,01),QTime(15,12,47)));
+ // QCOMPARE(sig->expirationDateTime(), QDateTime());
+ // QCOMPARE(sig->neverExpires(), true);
+
+ // auto key = sig->key();
+ // QCOMPARE(key->keyid(),QStringLiteral("8D9860C58F246DE6"));
+ // QCOMPARE(key->name(),QStringLiteral("unittest key"));
+ // QCOMPARE(key->email(),QStringLiteral("test@kolab.org"));
+ // QCOMPARE(key->comment(),QStringLiteral("no password"));
+ }
+
+ void testRelatedAlternative()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("cid-links.mbox")));
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ QCOMPARE(otp.collectAttachmentParts().size(), 1);
+ }
+
+ void testAttachmentPart()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("attachment.mbox")));
+ otp.print();
+ auto partList = otp.collectAttachmentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->mimeType(), "image/jpeg");
+ QCOMPARE(part->filename(), QStringLiteral("aqnaozisxya.jpeg"));
+ }
+
+ void testAttachment2Part()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("attachment2.mbox")));
+ otp.print();
+ auto partList = otp.collectAttachmentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->mimeType(), "image/jpeg");
+ QCOMPARE(part->filename(), QStringLiteral("aqnaozisxya.jpeg"));
+ }
+
+ void testCidLink()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("cid-links.mbox")));
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(bool(part));
+ auto resolvedContent = otp.resolveCidLinks(part->htmlContent());
+ QVERIFY(!resolvedContent.contains(QLatin1StringView("cid:")));
+ }
+
+ void testCidLinkInForwardedInline()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("cid-links-forwarded-inline.mbox")));
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(bool(part));
+ auto resolvedContent = otp.resolveCidLinks(part->htmlContent());
+ QVERIFY(!resolvedContent.contains(QLatin1StringView("cid:")));
+ }
+
+ void testOpenPGPInlineError()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("inlinepgpgencrypted-error.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::EncryptedMessagePart>();
+ QVERIFY(bool(part));
+ QVERIFY(part->error());
+ }
+
+ void testEncapsulated()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("encapsulated-with-attachment.mbox")));
+ otp.decryptAndVerify();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 2);
+ auto part = partList[1].dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->from(), QLatin1StringView("Thomas McGuire <dontspamme@gmx.net>"));
+ QCOMPARE(part->date().toString(), QLatin1StringView("Wed Aug 5 10:57:58 2009 GMT+0200"));
+ auto subPartList = otp.collectContentParts(part);
+ QCOMPARE(subPartList.size(), 1);
+ qWarning() << subPartList[0]->metaObject()->className();
+ auto subPart = subPartList[0].dynamicCast<MimeTreeParser::TextMessagePart>();
+ QVERIFY(bool(subPart));
+ }
+
+ void test8bitEncodedInPlaintext()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("8bitencoded.mbox")));
+ QVERIFY(otp.plainTextContent().contains(QString::fromUtf8("Why Pisa’s Tower")));
+ QVERIFY(otp.htmlContent().contains(QString::fromUtf8("Why Pisa’s Tower")));
+ }
+
+ void testInlineSigned()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-inline-signed.mbox")));
+ otp.decryptAndVerify();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgNotEncrypted);
+ QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ QCOMPARE(part->text(), QString::fromUtf8("ohno öäü\n"));
+
+ QVERIFY(otp.plainTextContent().contains(QString::fromUtf8("ohno öäü")));
+
+ const auto details = PartModel::signatureDetails(part.get());
+ const QString detailsWithoutTimestamp = QString{details}.replace(QRegularExpression{u"on .* with"_s}, u"on TIMESTAMP with"_s);
+ QCOMPARE(detailsWithoutTimestamp,
+ QStringLiteral("Signature created on TIMESTAMP with certificate: <a "
+ "href=\"key:1BA323932B3FAA826132C79E8D9860C58F246DE6\">unittest key (no password) <test@kolab.org> "
+ "(8D98 60C5 8F24 6DE6)</a><br/>The signature is valid and the certificate's validity is ultimately trusted."));
+ }
+
+ void testEncryptedAndSigned()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted+signed.mbox")));
+ otp.decryptAndVerify();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ QVERIFY(otp.plainTextContent().contains(QString::fromUtf8("encrypted message text")));
+
+ const auto details = PartModel::signatureDetails(part.get());
+ const QString detailsWithoutTimestamp = QString{details}.replace(QRegularExpression{u"on .* with"_s}, u"on TIMESTAMP with"_s);
+ QCOMPARE(detailsWithoutTimestamp,
+ QStringLiteral("Signature created on TIMESTAMP with certificate: <a "
+ "href=\"key:1BA323932B3FAA826132C79E8D9860C58F246DE6\">unittest key (no password) <test@kolab.org> "
+ "(8D98 60C5 8F24 6DE6)</a><br/>The signature is valid and the certificate's validity is ultimately trusted."));
+ }
+
+ void testOpenpgpMultipartEmbedded()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-multipart-embedded.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(otp.plainTextContent(), QString::fromUtf8("sdflskjsdf\n\n-- \nThis is a HTML signature.\n"));
+ }
+
+ void testOpenpgpMultipartEmbeddedSigned()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-multipart-embedded-signed.mbox")));
+ otp.decryptAndVerify();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ QCOMPARE(otp.plainTextContent(), QString::fromUtf8("test\n\n-- \nThis is a HTML signature.\n"));
+
+ const auto details = PartModel::signatureDetails(part.get());
+ const QString detailsWithoutTimestamp = QString{details}.replace(QRegularExpression{u"on .* using"_s}, u"on TIMESTAMP using"_s);
+ QCOMPARE(detailsWithoutTimestamp,
+ QStringLiteral("Signature created on TIMESTAMP using an unknown certificate "
+ "with fingerprint <br/>CBD1 1648 5DB9 560C A3CD 91E0 2E3B 7787 B1B7 5920<br/>You can search "
+ "the certificate on a keyserver or import it from a file."));
+ }
+
+ void testAppleHtmlWithAttachments()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("applehtmlwithattachments.mbox")));
+ otp.decryptAndVerify();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(part);
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ QVERIFY(part->isHtml());
+ QCOMPARE(otp.plainTextContent(), QString::fromUtf8("Hi,\n\nThis is an HTML message with attachments.\n\nCheers,\nChristian"));
+ QCOMPARE(otp.htmlContent(),
+ QString::fromUtf8(
+ "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\"></head><body style=\"word-wrap: break-word; "
+ "-webkit-nbsp-mode: space; line-break: after-white-space;\" class=\"\"><meta http-equiv=\"Content-Type\" content=\"text/html; "
+ "charset=us-ascii\" class=\"\"><div style=\"word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;\" "
+ "class=\"\">Hi,<div class=\"\"><br class=\"\"></div><blockquote style=\"margin: 0 0 0 40px; border: none; padding: 0px;\" class=\"\"><div "
+ "class=\"\">This is an <b class=\"\">HTML</b> message with attachments.</div></blockquote><div class=\"\"><br class=\"\"></div><div "
+ "class=\"\">Cheers,</div><div class=\"\">Christian<img apple-inline=\"yes\" id=\"B9EE68A9-83CA-41CD-A3E4-E5BA301F797A\" class=\"\" "
+ "src=\"cid:F5B62D1D-E4EC-4C59-AA5A-708525C2AC3C\"></div></div></body></html>"));
+
+ auto attachments = otp.collectAttachmentParts();
+ QCOMPARE(attachments.size(), 1);
+ }
+
+ void testAppleHtmlWithAttachmentsMixed()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("applehtmlwithattachmentsmixed.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(part);
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ QVERIFY(part->isHtml());
+ QCOMPARE(otp.plainTextContent(), QString::fromUtf8("Hello\n\n\n\nRegards\n\nFsdfsdf"));
+ QCOMPARE(otp.htmlContent(),
+ QString::fromUtf8(
+ "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\"></head><body style=\"word-wrap: break-word; "
+ "-webkit-nbsp-mode: space; line-break: after-white-space;\" class=\"\"><strike class=\"\">Hello</strike><div class=\"\"><br "
+ "class=\"\"></div><div class=\"\"></div></body></html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; "
+ "charset=us-ascii\"></head><body style=\"word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;\" "
+ "class=\"\"><div class=\"\"></div><div class=\"\"><br class=\"\"></div><div class=\"\"><b class=\"\">Regards</b></div><div class=\"\"><b "
+ "class=\"\"><br class=\"\"></b></div><div class=\"\">Fsdfsdf</div></body></html>"));
+
+ auto attachments = otp.collectAttachmentParts();
+ QCOMPARE(attachments.size(), 1);
+ }
+
+ void testInvitation()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("invitation.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(part);
+ QCOMPARE(part->encryptions().size(), 0);
+ QCOMPARE(part->signatures().size(), 0);
+ QVERIFY(!part->isHtml());
+ QVERIFY(part->availableModes().contains(MimeTreeParser::AlternativeMessagePart::MultipartIcal));
+
+ auto attachments = otp.collectAttachmentParts();
+ QCOMPARE(attachments.size(), 0);
+ }
+
+ void testGmailInvitation()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("gmail-invitation.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(part);
+ QCOMPARE(part->encryptions().size(), 0);
+ qWarning() << part;
+ QCOMPARE(part->signatures().size(), 0);
+ QVERIFY(part->isHtml());
+ QVERIFY(part->availableModes().contains(MimeTreeParser::AlternativeMessagePart::MultipartIcal));
+
+ auto attachments = otp.collectAttachmentParts();
+ QCOMPARE(attachments.size(), 1);
+ }
+
+ void testMemoryHole()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-memoryhole.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+
+ QCOMPARE(part->text(), QStringLiteral("very secret mesage\n"));
+
+ QCOMPARE(part->header("subject")->asUnicodeString(), QStringLiteral("hidden subject"));
+ QCOMPARE(part->header("from")->asUnicodeString(), QStringLiteral("you@example.com"));
+ QCOMPARE(part->header("to")->asUnicodeString(), QStringLiteral("me@example.com"));
+ QCOMPARE(part->header("cc")->asUnicodeString(), QStringLiteral("cc@example.com"));
+ QCOMPARE(part->header("message-id")->asUnicodeString(), QStringLiteral("<myhiddenreference@me>"));
+ QCOMPARE(part->header("references")->asUnicodeString(), QStringLiteral("<hiddenreference@hidden>"));
+ QCOMPARE(part->header("in-reply-to")->asUnicodeString(), QStringLiteral("<hiddenreference@hidden>"));
+ QCOMPARE(static_cast<const KMime::Headers::Date *>(part->header("date"))->dateTime(), QDateTime(QDate(2018, 1, 2), QTime(3, 4, 5), QTimeZone::utc()));
+ }
+
+ /**
+ * Required special handling because the list replaces the toplevel part.
+ */
+ void testMemoryHoleWithList()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("cid-links-forwarded-inline.mbox")));
+ const auto parts = otp.collectContentParts();
+ auto part = parts[0];
+ QVERIFY(part->header("references"));
+ QCOMPARE(part->header("references")->asUnicodeString(), QStringLiteral("<a1777ec781546ccc5dcd4918a5e4e03d@info>"));
+ }
+
+ void testMemoryHoleMultipartMixed()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-memoryhole2.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+
+ QCOMPARE(part->text(),
+ QStringLiteral("\n\n Fsdflkjdslfj\n\n\nHappy Monday!\n\nBelow you will find a quick overview of the current on-goings. Remember\n"));
+
+ QCOMPARE(part->header("subject")->asUnicodeString(), QStringLiteral("This is the subject"));
+ }
+
+ void testMIMESignature()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("text+html-maillinglist.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ auto partList = otp.collectContentParts();
+ for (const auto &part : partList) {
+ qWarning() << "found part " << part->metaObject()->className();
+ }
+ QCOMPARE(partList.size(), 2);
+ // The actual content
+ {
+ auto part = partList[0].dynamicCast<MimeTreeParser::AlternativeMessagePart>();
+ QVERIFY(bool(part));
+ }
+
+ // The signature
+ {
+ auto part = partList[1].dynamicCast<MimeTreeParser::TextMessagePart>();
+ QVERIFY(bool(part));
+ QVERIFY(part->text().contains(QStringLiteral("bugzilla mailing list")));
+ }
+ }
+
+ void testCRLFEncryptedWithSignature()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("crlf-encrypted-with-signature.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ QCOMPARE(otp.plainTextContent(), QStringLiteral("CRLF file\n\n-- \nThis is a signature\nWith two lines\n\nAand another line\n"));
+ }
+
+ void testCRLFEncryptedWithSignatureMultipart()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("crlf-encrypted-with-signature-multipart.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ // QEXPECT_FAIL("", "because MessagePart::parseInternal uses \n\n to detect encapsulated messages (so 'CRLF file' ends up as header)", Continue);
+ // QCOMPARE(otp.plainTextContent(), QStringLiteral("CRLF file\n\n-- \nThis is a signature\nWith two lines\n\nAand another line\n"));
+ // QVERIFY(!otp.htmlContent().contains(QStringLiteral("\r\n")));
+ }
+
+ void testCRLFOutlook()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("outlook.mbox")));
+ otp.decryptAndVerify();
+ otp.print();
+
+ qWarning() << otp.plainTextContent();
+ QVERIFY(otp.plainTextContent().startsWith(QStringLiteral("Hi Christian,\n\nhabs gerade getestet:\n\n«This is a test")));
+ QVERIFY(!otp.htmlContent().contains(QLatin1StringView("\r\n")));
+ }
+
+ void testOpenPGPEncryptedSignedThunderbird()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("openpgp-encrypted-signed-thunderbird.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("sdfsdf\n"));
+ QCOMPARE(part->charset(), QStringLiteral("utf-8").toLocal8Bit());
+ QCOMPARE(part->encryptions().size(), 1);
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(PartModel::signatureSecurityLevel(part.get()), PartModel::Good);
+ QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ auto contentAttachmentList = otp.collectAttachmentParts();
+ QCOMPARE(contentAttachmentList.size(), 1);
+ // QCOMPARE(contentAttachmentList[0]->content().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->encryptions().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->signatures().size(), 1);
+ QCOMPARE(contentAttachmentList[0]->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
+ QCOMPARE(contentAttachmentList[0]->signatureState(), MimeTreeParser::KMMsgFullySigned);
+ }
+
+ void testSignedForwardOpenpgpSignedEncrypted()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("signed-forward-openpgp-signed-encrypted.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 2);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("bla bla bla"));
+
+ part = partList[1].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QString());
+ QCOMPARE(part->charset(), QStringLiteral("UTF-8").toLocal8Bit());
+ QCOMPARE(part->signatures().size(), 1);
+ QCOMPARE(PartModel::signatureSecurityLevel(part.get()), PartModel::Good);
+ auto contentAttachmentList = otp.collectAttachmentParts();
+ QCOMPARE(contentAttachmentList.size(), 1);
+ }
+
+ void testSmimeOpaqueSign()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-opaque-sign.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("A simple signed only test."));
+ }
+
+ void testSmimeEncrypted()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-encrypted.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("The quick brown fox jumped over the lazy dog."));
+ }
+
+ void testSmimeSignedApple()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-signed-apple.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ // QCOMPARE(part->text(), QStringLiteral("A simple signed only test."));
+ }
+
+ void testSmimeEncryptedOctetStream()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-encrypted-octet-stream.mbox")));
+ otp.print();
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("The quick brown fox jumped over the lazy dog."));
+ }
+
+ void testSmimeOpaqueSignedEncryptedAttachment()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-opaque-signed-encrypted-attachment.mbox")));
+ otp.print();
+ QVERIFY(otp.hasEncryptedParts());
+ otp.decryptAndVerify();
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("This is an Opaque S/MIME encrypted and signed message with attachment"));
+ }
+
+ void testSmimeOpaqueEncSign()
+ {
+ MimeTreeParser::ObjectTreeParser otp;
+ otp.parseObjectTree(readMailFromFile(QLatin1StringView("smime-opaque-enc+sign.mbox")));
+ otp.print();
+ QVERIFY(otp.hasEncryptedParts());
+ QVERIFY(!otp.hasSignedParts());
+ otp.decryptAndVerify();
+ QVERIFY(otp.hasSignedParts());
+ otp.print();
+ auto partList = otp.collectContentParts();
+ QCOMPARE(partList.size(), 1);
+ auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
+ QVERIFY(bool(part));
+ QCOMPARE(part->text(), QStringLiteral("Encrypted and signed mail."));
+ }
+};
+
+QTEST_GUILESS_MAIN(MimeTreeParserTest)
+#include "mimetreeparsertest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <KMime/Message>
+#include <QAbstractItemModelTester>
+#include <QDebug>
+#include <QTest>
+#include <QTextDocument>
+
+#include "messageparser.h"
+#include "partmodel.h"
+
+KMime::Message::Ptr readMailFromFile(const QString &mailFile)
+{
+ QFile file(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + mailFile);
+ file.open(QIODevice::ReadOnly);
+ Q_ASSERT(file.isOpen());
+ auto mailData = KMime::CRLFtoLF(file.readAll());
+ KMime::Message::Ptr message(new KMime::Message);
+ message->setContent(mailData);
+ message->parse();
+ return message;
+}
+
+class PartModelTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void initTestCase()
+ {
+ }
+
+ void testTrim()
+ {
+ auto result = PartModel::trim(QLatin1StringView("<p>This is some funky test.</p>\n<p>-- <br>\nChristian Mollekopf<br>\nSenior Software"));
+ QCOMPARE(result.second, true);
+ QCOMPARE(result.first, QLatin1StringView("<p>This is some funky test.</p>\n"));
+ }
+
+ void testTrimFromPlain()
+ {
+ // Qt::convertFromPlainText inserts non-breaking spaces
+ auto result = PartModel::trim(Qt::convertFromPlainText(QLatin1StringView("This is some funky text.\n\n-- \nChristian Mollekopf\nSenior Software")));
+ QCOMPARE(result.second, true);
+ //\u00A0 is a on-breaking space
+ const auto expected = QStringLiteral("<p>This is some funky text.</p>\n").replace(QLatin1Char(' '), QChar(0x00a0));
+ QCOMPARE(result.first, expected);
+ }
+
+ void testModel()
+ {
+ MessageParser messageParser;
+ messageParser.setMessage(readMailFromFile(QLatin1StringView("html.mbox")));
+
+ QFont font{};
+ font.setFamily(QStringLiteral("Noto Sans"));
+ qGuiApp->setFont(font);
+
+ auto partModel = messageParser.parts();
+ new QAbstractItemModelTester(partModel);
+ QCOMPARE(partModel->rowCount(), 1);
+ QCOMPARE(partModel->data(partModel->index(0, 0), PartModel::TypeRole).value<PartModel::Types>(), PartModel::Types::Plain);
+ QCOMPARE(partModel->data(partModel->index(0, 0), PartModel::IsEmbeddedRole).toBool(), false);
+ QCOMPARE(partModel->data(partModel->index(0, 0), PartModel::IsErrorRole).toBool(), false);
+ QCOMPARE(
+ partModel->data(partModel->index(0, 0), PartModel::ContentRole).toString(),
+ QStringLiteral("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
+ "\"http://www.w3.org/TR/html4/loose.dtd\">\n<html><head><title></title><style>\nbody {\n overflow:hidden;\n font-family: \"Noto "
+ "Sans\" ! important;\n color: #31363b ! important;\n background-color: #fcfcfc ! important\n}\nblockquote { \n border-left: 2px "
+ "solid #bdc3c7 ! important;\n}\n</style></head>\n<body>\n<html><body><p><span>HTML</span> text</p></body></html></body></html>"));
+ }
+};
+
+QTEST_MAIN(PartModelTest)
+#include "partmodeltest.moc"
--- /dev/null
+configure_file(gpg-agent.conf.in
+ "${CMAKE_CURRENT_BINARY_DIR}/gpg-agent.conf" @ONLY)
+
+configure_file(gpgsm.conf.in
+ "${CMAKE_CURRENT_BINARY_DIR}/gpgsm.conf" @ONLY)
+
+file(COPY
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/../"
+)
--- /dev/null
+v:1:
+c:4E31CEB57DDD4A7B9991AB05507B1ED4293FF952:CN=Test-ZS 7,O=Intevation GmbH,C=DE:ldap%3A//ca.intevation.org/cn=Test-ZS 7, o=Intevation GmbH, c=DE?certificateRevocationList:20100615T181523:20100707T181523:72FEF3FD88455A1D4C6796A6499D4422::::
+c:7F2A402CBB016A9146D613568C89D3596A4111AA:CN=Wurzel ZS 3,O=Intevation GmbH,C=DE:ldap%3A//ca.intevation.org/cn=Wurzel ZS 3, o=Intevation GmbH, c=DE?certificateRevocationList:20100625T102134:20100814T102134:44E60EEC02EF2FBF7A5C77E9BD565667::::
--- /dev/null
+
+###+++--- GPGConf ---+++###
+debug-level basic
+log-file socket:///home/leo/kde/src/kdepim/messagecomposer/tests/gnupg_home/log-socket
+###+++--- GPGConf ---+++### Tue 29 Jun 2010 10:23:13 AM EDT
+# GPGConf edited this configuration file.
+# It will disable options before this marked block, but it will
+# never change anything below these lines.
--- /dev/null
+pinentry-program @CMAKE_CURRENT_BINARY_DIR@/pinentry-fake.sh
+###+++--- GPGConf ---+++###
+allow-mark-trusted
+debug-level basic
+faked-system-time 20130110T154812
+log-file @CMAKE_CURRENT_BINARY_DIR@/gpg-agent.log
+###+++--- GPGConf ---+++### Tue 29 Jun 2010 10:23:13 AM EDT
+# GPGConf edited this configuration file.
+# It will disable options before this marked block, but it will
+# never change anything below these lines.
--- /dev/null
+# Options for GnuPG
+# SPDX-FileCopyrightText: 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# SPDX-License-Identifier: FSFULLR
+#
+# Unless you specify which option file to use (with the command line
+# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf
+# by default.
+#
+# An options file can contain any long options which are available in
+# GnuPG. If the first non white space character of a line is a '#',
+# this line is ignored. Empty lines are also ignored.
+#
+# See the man page for a list of options.
+
+# Uncomment the following option to get rid of the copyright notice
+
+#no-greeting
+
+# If you have more than 1 secret key in your keyring, you may want to
+# uncomment the following option and set your preferred keyid.
+
+#default-key 621CC013
+
+# If you do not pass a recipient to gpg, it will ask for one. Using
+# this option you can encrypt to a default key. Key validation will
+# not be done in this case. The second form uses the default key as
+# default recipient.
+
+#default-recipient some-user-id
+#default-recipient-self
+
+# Use --encrypt-to to add the specified key as a recipient to all
+# messages. This is useful, for example, when sending mail through a
+# mail client that does not automatically encrypt mail to your key.
+# In the example, this option allows you to read your local copy of
+# encrypted mail that you've sent to others.
+
+#encrypt-to some-key-id
+
+# By default GnuPG creates version 3 signatures for data files. This
+# is not strictly OpenPGP compliant but PGP 6 and most versions of PGP
+# 7 require them. To disable this behavior, you may use this option
+# or --openpgp.
+
+#no-force-v3-sigs
+
+# Because some mailers change lines starting with "From " to ">From "
+# it is good to handle such lines in a special way when creating
+# cleartext signatures; all other PGP versions do it this way too.
+
+#no-escape-from-lines
+
+# If you do not use the Latin-1 (ISO-8859-1) charset, you should tell
+# GnuPG which is the native character set. Please check the man page
+# for supported character sets. This character set is only used for
+# metadata and not for the actual message which does not undergo any
+# translation. Note that future version of GnuPG will change to UTF-8
+# as default character set. In most cases this option is not required
+# as GnuPG is able to figure out the correct charset at runtime.
+
+#charset utf-8
+
+# Group names may be defined like this:
+# group mynames = paige 0x12345678 joe patti
+#
+# Any time "mynames" is a recipient (-r or --recipient), it will be
+# expanded to the names "paige", "joe", and "patti", and the key ID
+# "0x12345678". Note there is only one level of expansion - you
+# cannot make an group that points to another group. Note also that
+# if there are spaces in the recipient name, this will appear as two
+# recipients. In these cases it is better to use the key ID.
+
+#group mynames = paige 0x12345678 joe patti
+
+# Lock the file only once for the lifetime of a process. If you do
+# not define this, the lock will be obtained and released every time
+# it is needed, which is usually preferable.
+
+#lock-once
+
+# GnuPG can send and receive keys to and from a keyserver. These
+# servers can be HKP, email, or LDAP (if GnuPG is built with LDAP
+# support).
+#
+# Example HKP keyserver:
+# hkp://keys.gnupg.net
+# hkp://subkeys.pgp.net
+#
+# Example email keyserver:
+# mailto:pgp-public-keys@keys.pgp.net
+#
+# Example LDAP keyservers:
+# ldap://keyserver.pgp.com
+#
+# Regular URL syntax applies, and you can set an alternate port
+# through the usual method:
+# hkp://keyserver.example.net:22742
+#
+# Most users just set the name and type of their preferred keyserver.
+# Note that most servers (with the notable exception of
+# ldap://keyserver.pgp.com) synchronize changes with each other. Note
+# also that a single server name may actually point to multiple
+# servers via DNS round-robin. hkp://keys.gnupg.net is an example of
+# such a "server", which spreads the load over a number of physical
+# servers. To see the IP address of the server actually used, you may use
+# the "--keyserver-options debug".
+
+keyserver hkp://keys.gnupg.net
+#keyserver mailto:pgp-public-keys@keys.nl.pgp.net
+#keyserver ldap://keyserver.pgp.com
+
+# Common options for keyserver functions:
+#
+# include-disabled : when searching, include keys marked as "disabled"
+# on the keyserver (not all keyservers support this).
+#
+# no-include-revoked : when searching, do not include keys marked as
+# "revoked" on the keyserver.
+#
+# verbose : show more information as the keys are fetched.
+# Can be used more than once to increase the amount
+# of information shown.
+#
+# use-temp-files : use temporary files instead of a pipe to talk to the
+# keyserver. Some platforms (Win32 for one) always
+# have this on.
+#
+# keep-temp-files : do not delete temporary files after using them
+# (really only useful for debugging)
+#
+# http-proxy="proxy" : set the proxy to use for HTTP and HKP keyservers.
+# This overrides the "http_proxy" environment variable,
+# if any.
+#
+# auto-key-retrieve : automatically fetch keys as needed from the keyserver
+# when verifying signatures or when importing keys that
+# have been revoked by a revocation key that is not
+# present on the keyring.
+#
+# no-include-attributes : do not include attribute IDs (aka "photo IDs")
+# when sending keys to the keyserver.
+
+#keyserver-options auto-key-retrieve
+
+# Display photo user IDs in key listings
+
+# list-options show-photos
+
+# Display photo user IDs when a signature from a key with a photo is
+# verified
+
+# verify-options show-photos
+
+# Use this program to display photo user IDs
+#
+# %i is expanded to a temporary file that contains the photo.
+# %I is the same as %i, but the file isn't deleted afterwards by GnuPG.
+# %k is expanded to the key ID of the key.
+# %K is expanded to the long OpenPGP key ID of the key.
+# %t is expanded to the extension of the image (e.g. "jpg").
+# %T is expanded to the MIME type of the image (e.g. "image/jpeg").
+# %f is expanded to the fingerprint of the key.
+# %% is %, of course.
+#
+# If %i or %I are not present, then the photo is supplied to the
+# viewer on standard input. If your platform supports it, standard
+# input is the best way to do this as it avoids the time and effort in
+# generating and then cleaning up a secure temp file.
+#
+# If no photo-viewer is provided, GnuPG will look for xloadimage, eog,
+# or display (ImageMagick). On Mac OS X and Windows, the default is
+# to use your regular JPEG image viewer.
+#
+# Some other viewers:
+# photo-viewer "qiv %i"
+# photo-viewer "ee %i"
+#
+# This one saves a copy of the photo ID in your home directory:
+# photo-viewer "cat > ~/photoid-for-key-%k.%t"
+#
+# Use your MIME handler to view photos:
+# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
+
+# Passphrase agent
+#
+# We support the old experimental passphrase agent protocol as well as
+# the new Assuan based one (currently available in the "newpg" package
+# at ftp.gnupg.org/gcrypt/alpha/aegypten/). To make use of the agent,
+# you have to run an agent as daemon and use the option
+#
+# use-agent
+#
+# which tries to use the agent but will fallback to the regular mode
+# if there is a problem connecting to the agent. The normal way to
+# locate the agent is by looking at the environment variable
+# GPG_AGENT_INFO which should have been set during gpg-agent startup.
+# In certain situations the use of this variable is not possible, thus
+# the option
+#
+# --gpg-agent-info=<path>:<pid>:1
+#
+# may be used to override it.
+
+# Automatic key location
+#
+# GnuPG can automatically locate and retrieve keys as needed using the
+# auto-key-locate option. This happens when encrypting to an email
+# address (in the "user@example.com" form), and there are no
+# user@example.com keys on the local keyring. This option takes the
+# following arguments, in the order they are to be tried:
+#
+# cert = locate a key using DNS CERT, as specified in RFC-4398.
+# GnuPG can handle both the PGP (key) and IPGP (URL + fingerprint)
+# CERT methods.
+#
+# pka = locate a key using DNS PKA.
+#
+# ldap = locate a key using the PGP Universal method of checking
+# "ldap://keys.(thedomain)". For example, encrypting to
+# user@example.com will check ldap://keys.example.com.
+#
+# keyserver = locate a key using whatever keyserver is defined using
+# the keyserver option.
+#
+# You may also list arbitrary keyservers here by URL.
+#
+# Try CERT, then PKA, then LDAP, then hkp://subkeys.net:
+#auto-key-locate cert pka ldap hkp://subkeys.pgp.net
+
+###+++--- GPGConf ---+++###
+utf8-strings
+#debug-level basic
+#log-file socket:///home/leo/kde/src/kdepim/messagecomposer/tests/gnupg_home/log-socket
+###+++--- GPGConf ---+++### Tue 29 Jun 2010 10:23:13 AM EDT
+# GPGConf edited this configuration file.
+# It will disable options before this marked block, but it will
+# never change anything below these lines.
--- /dev/null
+
+###+++--- GPGConf ---+++###
+disable-crl-checks
+debug-level basic
+faked-system-time 20130110T154812
+log-file @CMAKE_CURRENT_BINARY_DIR@/gpgsm.log
+###+++--- GPGConf ---+++### Tue 29 Jun 2010 10:23:13 AM EDT
+# GPGConf edited this configuration file.
+# It will disable options before this marked block, but it will
+# never change anything below these lines.
--- /dev/null
+#!/bin/sh
+
+echo "OK Your orders please"
+while :
+do
+ read cmd
+ echo "OK"
+ [ "$cmd" = "BYE" ] && break
+done
--- /dev/null
+
+###+++--- GPGConf ---+++###
+debug-level basic
+log-file socket:///home/leo/kde/src/kdepim/messagecomposer/tests/gnupg_home/log-socket
+###+++--- GPGConf ---+++### Tue 29 Jun 2010 10:23:13 AM EDT
+# GPGConf edited this configuration file.
+# It will disable options before this marked block, but it will
+# never change anything below these lines.
--- /dev/null
+5E:7C:B2:F4:9F:70:05:43:42:32:5D:75:74:70:00:09:B9:D8:08:61 S
+
+
+
+# CN=unittest cert
+# O=KDAB
+# C=US
+# EMail=test@example.com
+24:D2:FC:A2:2E:B3:B8:0A:1E:37:71:D1:4C:C6:58:E3:21:2B:49:DC S
+
+
--- /dev/null
+// SPDX-FileCopyrightText: 2010 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
+// SPDX-FileCopyCopyright: 2010 Leo Franchi <lfranchi@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "setupenv.h"
+
+#include <QStandardPaths>
+
+void MimeTreeParser::Test::setupEnv()
+{
+ qputenv("LC_ALL", "en_US.UTF-8");
+ qputenv("TZ", "Europe/Paris");
+ QStandardPaths::setTestModeEnabled(true);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2010 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
+// SPDX-FileCopyrightText: 2010 Leo Franchi <lfranchi@kde.org>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "bodypartformatter.h"
+#include "bodypartformatterbasefactory.h"
+
+namespace MimeTreeParser
+{
+
+namespace Test
+{
+
+/**
+ * setup a environment variables for tests:
+ * * set LC_ALL to en_US.UTF-8
+ */
+void setupEnv();
+
+}
+
+}
--- /dev/null
+Return-Path: <cmollekopf+caf_=christian=mailqueue.ch@gmail.com>
+Received: from imapb010.mykolab.com ([unix socket])
+ by imapb010.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Thu, 24 Aug 2017 13:47:08 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx002.mykolab.com (unknown [10.9.13.2])
+ by imapb010.mykolab.com (Postfix) with ESMTPS id 789071908C0AD
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:08 +0200 (CEST)
+Received: from mx.kolabnow.com (unknown [10.9.4.2])
+ by int-mx002.mykolab.com (Postfix) with ESMTPS id 54F7E2334
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:08 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at mykolab.com
+Authentication-Results: ext-mx-in002.mykolab.com (amavisd-new);
+ dkim=pass (1024-bit key) header.d=nowiknow.com header.b=PhDhbCtl;
+ dkim=pass (1024-bit key) header.d=gmail.mcsv.net header.b=RCXi0ciN
+X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0
+Received: from mail-qk0-f179.google.com (mail-qk0-f179.google.com [209.85.220.179])
+ by ext-mx-in002.mykolab.com (Postfix) with ESMTPS id 6F9F7CF
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 13:47:00 +0200 (CEST)
+Received: by mail-qk0-f179.google.com with SMTP id w6so1696860qka.0
+ for <christian@mailqueue.ch>; Thu, 24 Aug 2017 04:46:59 -0700 (PDT)
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=1e100.net; s=20161025;
+ h=x-gm-message-state:delivered-to:dkim-signature:dkim-signature
+ :subject:from:reply-to:to:date:message-id:feedback-id:list-id
+ :list-unsubscribe:list-unsubscribe-post:mime-version;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=XyAKTyE716901I/+8y9GADWYMX6/PDdayxG3weM+Pt3ahoxtf/2xspxNXlhtdIMeUJ
+ KwAcXPSmScOfTnC4qfCXa/V8IEzaR3RCzRYoTUPveVSr1+duG84qki4e7NHsu9eDXUVi
+ TqJzb0VsA6FXnk+QQ17MvPTmEC1+on33RkyLirA+aTsb6KJaIM0LVOeNxjE8w7BlRUdb
+ lOeefPQ03QEpW161r8QBHv1r9A//55ThztKXcwWV3Mt8UAdL4PLUwXPc3a3yoJDEHT6R
+ pZjRYMe1O+UdhOrOeyrf1DGCZCbuxlMr11DaTFWNU0qKp2Tva9VYfLNXkFI5Xy//ppd4
+ /DcA==
+X-Gm-Message-State: AHYfb5jKITBkeyJ/SNU5jH0YX3tJ8+6nvfM4qkz5GMA/5l6kBDI5LIYr
+ 5xqp6esygvlvlh1LiNcNtJ8rEQFl7/8xjJ27eeeCwA==
+X-Received: by 10.55.204.205 with SMTP id n74mr7738289qkl.31.1503575218723;
+ Thu, 24 Aug 2017 04:46:58 -0700 (PDT)
+X-Forwarded-To: christian@mailqueue.ch
+X-Forwarded-For: cmollekopf@gmail.com christian@mailqueue.ch
+Delivered-To: cmollekopf@gmail.com
+Received: by 10.140.23.148 with SMTP id 20csp8334569qgp;
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+X-Received: by 10.37.203.4 with SMTP id b4mr4589328ybg.76.1503575216900;
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+ARC-Seal: i=1; a=rsa-sha256; t=1503575216; cv=none;
+ d=google.com; s=arc-20160816;
+ b=j5kfXDq3Gaazf8v/5IMOwt7IUk1plzWvvmKSq6k2OkMGQmi5YyeQqm/6dKf1W+ttoO
+ JVlRg7h+VwuhW4t2y2Pf7/wmkRQkExopPSYzTXdEnjBak6axILdoWfUHUiWcuHUIzP9r
+ Mt8WOHvgsM3cOGQeBR6UijflYwz5lOOuCh/lORkPmQnphinPZcBCMoBsXaGdwrI7YrQz
+ ZXzHxT31JiZDE5Shv+kfaN7RRzfOfQPBb40huUGKSsRcZi3S3g3N+l87r520kLAQNCxW
+ Tw5aMpzEcceBmTV+213bAjYmlR6gJvk45m+G9ISNvcn9fA2fTYanrReewAFuGgRrYOY6
+ T1kA==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
+ h=mime-version:list-unsubscribe-post:list-unsubscribe:list-id
+ :feedback-id:message-id:date:to:reply-to:from:subject:dkim-signature
+ :dkim-signature:arc-authentication-results;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=uJ6TFST3WTHpJ3eUlH40DbU5/lP5R3JYMdWstmZjbQNXhjTV4Fpu3DL4odyRaXS0V+
+ JG/58RUjPvO3wztXop3Za15i+9e59vu4OKaBwztD/L1RiHDLDzSLqgL/gGXTKbT50izQ
+ Q589QLDgvPyL2/AZZiIktIU0FqVVDX1l9HzRFqZ/sYM7ZNCdMy92uWfUi+Me5+OgL6B1
+ tf3CH40tdRhZ/jhcWoEXECH6QD3eF7/tZHsbLiTgPm9haEMmAtSF2t8MjKWFgra7pbI2
+ 1bQB++SskwOxOIeaV3+ttXWYNzGR8aJaEHJ+pJN63xgnMld1UKX+NilOLTfa1O0qz7gX
+ YQ5A==
+ARC-Authentication-Results: i=1; mx.google.com;
+ dkim=pass header.i=@nowiknow.com header.s=k1 header.b=PhDhbCtl;
+ dkim=pass header.i=@gmail.mcsv.net header.s=k1 header.b=RCXi0ciN;
+ spf=pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) smtp.mailfrom=bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net
+Received: from mail142.atl61.mcsv.net (mail142.atl61.mcsv.net. [205.201.135.142])
+ by mx.google.com with ESMTPS id e2si999520ywc.571.2017.08.24.04.46.56
+ for <cmollekopf@gmail.com>
+ (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
+ Thu, 24 Aug 2017 04:46:56 -0700 (PDT)
+Received-SPF: pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) client-ip=205.201.135.142;
+Authentication-Results: mx.google.com;
+ dkim=pass header.i=@nowiknow.com header.s=k1 header.b=PhDhbCtl;
+ dkim=pass header.i=@gmail.mcsv.net header.s=k1 header.b=RCXi0ciN;
+ spf=pass (google.com: domain of bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net designates 205.201.135.142 as permitted sender) smtp.mailfrom=bounce-mc.us1_1820657.2563001-cmollekopf=gmail.com@mail142.atl61.mcsv.net
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=k1; d=nowiknow.com;
+ h=Subject:From:Reply-To:To:Date:Message-ID:List-ID:List-Unsubscribe:
+ Content-Type:MIME-Version; i=dan@nowiknow.com;
+ bh=0j/vBe5PYyLtNIrTeg7ECKupBfn4J4reSBQ13Fmj1Ww=;
+ b=PhDhbCtlZ0sTf/uiePM3Y3Zile2xSiBfMLEpBeRI037MIT0Wd+3EjXb6mWocbkZTj8uXslIHeTFb
+ S6+VtwbwnCZfLXnB43tDWpWhTVYK5EQpgwfE/3LbSm7hc7SgG5gGw8j6ybkh6RluUXox+uwFQ4P1
+ USYaWqIo5H3ZH12dJ+M=
+DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=k1; d=gmail.mcsv.net;
+ h=Subject:From:Reply-To:To:Date:Message-ID:Feedback-ID:List-ID:
+ List-Unsubscribe:Content-Type:MIME-Version;
+ bh=VvDgaXeZiQZDe15cLybJQr285RQ=;
+ b=RCXi0ciNwW82Ta0gJ6lw549iAT4DjwqJRZ2TZqWtIymAkhBGiSW7LikSHPofApky3mq1F3wGVOJp
+ VVJoZQQhEfaMhPMOMEibhnsdIwP5LYwUx4r5SoWd3xIP/2dZIlwngOEeW23oAAVx+T9iKkuZLCnQ
+ s81PkHcv0+Gm6H6H80A=
+Subject: =?utf-8?Q?Now=20I=20Know=3A=C2=A0Why=20Pisa=E2=80=99s=20Tower=20Leans?=
+From: =?utf-8?Q?Dan=20Lewis?= <dan@nowiknow.com>
+Reply-To: =?utf-8?Q?Dan=20Lewis?= <dan@nowiknow.com>
+To: <cmollekopf@gmail.com>
+Date: Thu, 24 Aug 2017 11:36:21 +0000
+Message-ID: <2889002ad89d45ca21f50ba46.cd30a9a755.20170824113521.1b9800e15a.bf27651e@mail142.atl61.mcsv.net>
+X-Mailer: MailChimp Mailer - **CID1b9800e15acd30a9a755**
+X-Campaign: mailchimp2889002ad89d45ca21f50ba46.1b9800e15a
+X-campaignid: mailchimp2889002ad89d45ca21f50ba46.1b9800e15a
+X-Report-Abuse: Please report abuse for this campaign here: http://www.mailchimp.com/abuse/abuse.phtml?u=2889002ad89d45ca21f50ba46&id=1b9800e15a&e=cd30a9a755
+X-MC-User: 2889002ad89d45ca21f50ba46
+Feedback-ID: 1820657:1820657.2563001:us1:mc
+List-ID: 2889002ad89d45ca21f50ba46mc list <2889002ad89d45ca21f50ba46.580325.list-id.mcsv.net>
+X-Accounttype: pd
+List-Unsubscribe: <http://nowiknow.us1.list-manage.com/unsubscribe?u=2889002ad89d45ca21f50ba46&id=689d00e31c&e=cd30a9a755&c=1b9800e15a>, <mailto:unsubscribe-mc.us1_2889002ad89d45ca21f50ba46.1b9800e15a-cd30a9a755@mailin1.us2.mcsv.net?subject=unsubscribe>
+List-Unsubscribe-Post: List-Unsubscribe=One-Click
+x-mcda: FALSE
+Content-Type: multipart/alternative; boundary="_----------=_MCPart_2013239186"
+MIME-Version: 1.0
+
+This is a multi-part message in MIME format
+
+--_----------=_MCPart_2013239186
+Content-Type: text/plain; charset="utf-8"; format="fixed"
+Content-Transfer-Encoding: quoted-printable
+
+And: is it just part of an old European dance craze? (Well=2C no.)
+
+View this email in your browser (http://nowiknow.com/why-pisas-tower-leans=
+/) =C2=B7 Missed one? Visit the Archives (http://nowiknow.com/archives/)
+http://MIR.INSIRE.COM/click?s=3D188055&layout=3Dmarquee&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+http://MIR.INSIRE.COM/click?s=3D188058&sz=3D116x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a http://MIR.INSIRE.COM/click?s=3D188059&sz=3D6=
+9x15&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+http://nowiknow.com/
+Just likes yesterday: I'm on vacation this week=2C so today's Now I Know i=
+s a re-run=2C originally from 2010. (The Weekender is still TBD.) -- Dan (=
+http://s.nowiknow.com/DLewisNet)
+
+
+** Why Pisa=E2=80=99s Tower Leans
+------------------------------------------------------------
+
+The Leaning Tower of Pisa is over 800 years old. Construction started on=
+ it in 1173 and=2C almost two centuries later (and after two work stoppage=
+s)=2C completed in the 1370s. For history=E2=80=99s sake=2C it is a good=
+ thing that there were two work stoppages =E2=80=94 otherwise=2C the struc=
+ture probably would have collapsed long ago. The Tower is built on=2C bas=
+ically=2C a marsh =E2=80=94 a thin layer of alluvial silt (http://s.nowikn=
+ow.com/2voNXQl) atop soft marine clay. The work stoppages gave time for=
+ the existing incomplete infrastructure to settle in the soft soil=2C comp=
+acting the ground beneath it and=2C effectively=2C letting Mother Earth ad=
+apt before construction resumed. A minor miracle=2C in and of itself.
+
+It therefore makes sense that the Tower is unstable=2C likely to shift its=
+ position any which way as time passes. But the mystery runs deeper. The=
+ Leaning Tower of Pisa only leans to the south. Assuming the unstable gro=
+und beneath is uniformly so=2C that did not make a lot of sense.
+
+In 1989=2C the Tower was leaning roughly 15 feet off its center=2C when di=
+saster struck =E2=80=94 in Milan. Another tower=2C the Civic Tower of Pav=
+ia (http://s.nowiknow.com/2vo26xt) =2C crumbled=2C killing four passersby.=
+ Fearing a similar fate for Pisa=2C the Italian government closed the tow=
+er and made a $40 million grant to researchers=2C hoping to stave off the=
+ Tower=E2=80=99s tilt into destruction. The task was daunting=2C as rese=
+archers were split =E2=80=94 some believed the problem was with the underl=
+ying land; others believed the problem was with the structure itself. Red=
+oubling these problems were the art historians=2C who insisted on preservi=
+ng the artistic value of the Tower; in short=2C propping the Tower up was=
+ a non-starter.
+
+Finding a solution took four different tries and almost a decade. In the=
+ end=2C the team used something called =E2=80=9Csoil extraction=E2=80=9D=
+ =E2=80=94 as described (http://s.nowiknow.com/2vorzXl) by the Telegraph=
+ (UK)=2C this meant =E2=80=9Cdrilling out slivers of soil from beneath the=
+ northern side of the tower =E2=80=93 away from the lean =E2=80=93 and all=
+owing gravity to coax the structure back upright.=E2=80=9D It was a nuanc=
+ed task in and of itself. Professor John Burland=2C a soil engineer at t=
+he Imperial College London=2C lead the efforts with the help of 120 sensor=
+s placed in=2C around=2C and outside the Tower=2C and an army of fax machi=
+nes. For two years=2C twice a day=2C the sensor readings were faxed to hi=
+s attention; he=E2=80=99d run some calculations and inform the drillers ho=
+w to continue. The Tower re-opened in late 2001.
+
+In capturing all these data points =E2=80=94 two a day for two years =E2=
+=80=94 Burland had in front of him the answer to the previously unanswerab=
+le question of the Tower=E2=80=99s southward tilt. In 2003=2C he figured=
+ it out. The water table (http://s.nowiknow.com/2vovXWF) on the north si=
+de of the Tower rose up to a foot higher at times during Pisa=E2=80=99s ra=
+iny season. In effect=2C the water tower slowly=2C slightly=2C and tempor=
+arily boosted the land on the north side=2C pushing the Tower to lean sout=
+h. Using a custom drainage system to normalize the water table=2C Burlan=
+d has stemmed the Tower=E2=80=99s further tilt entirely =E2=80=94 since th=
+e solution was put in place seven [now 14!] years ago=2C the Tower=E2=80=
+=99s tilt has remained the same.
+http://s.nowiknow.com/NIKPatreon
+Now I Know is supported by readers like you. Please consider becoming a pa=
+tron by supporting the project on Patreon. Click here to pledge your suppo=
+rt (http://s.nowiknow.com/NIKPatreon) .
+Bonus fact: Groundwater flows can prevent problems=2C too. In 1958=2C the=
+ town of Concord=2C Massachusetts opened a landfill adjacent to Walden Pon=
+d=2C the eponymous site of Henry David Thoreau=E2=80=99s On Walden Pond. =
+ Because the groundwater table ran from the pond to the landfill (and not=
+ vice versa)=2C the pond remained relatively unpolluted by the nearby refu=
+se.=E2=80=8B
+
+From the Archives: Patent Leather Shoes (http://dlewis.net/nik-archives/pa=
+tent-leather-shoes/) : How Michael Jackson managed to pull off an incredib=
+le=2C gravity-defying lean of his own.
+
+Related: A 3-d=2C Leaning Tower of Pisa puzzle (http://s.nowiknow.com/2v5D=
+xKs) .
+
+http://MIR.INSIRE.COM/click?s=3D97521&sz=3D300x250&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a
+http://MIR.INSIRE.COM/click?s=3D2054&sz=3D116x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a http://MIR.INSIRE.COM/click?s=3D96003&sz=3D69x1=
+5&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a
+
+http://www.facebook.com/sharer/sharer.php?u=3Dhttp%3A%2F%2Fnowiknow.com%2F=
+why-pisas-tower-leans%2F Share (http://www.facebook.com/sharer/sharer.php?=
+u=3Dhttp%3A%2F%2Fnowiknow.com%2Fwhy-pisas-tower-leans%2F)
+http://twitter.com/intent/tweet?text=3DWhy%20does%20the%20Leaning%20Tower%=
+20of%20Pisa%20lean%3F%20: http%3A%2F%2Fnowiknow.com%2Fwhy-pisas-tower-lean=
+s%2F Tweet (http://twitter.com/intent/tweet?text=3DWhy%20does%20the%20Lean=
+ing%20Tower%20of%20Pisa%20lean%3F%20: http%3A%2F%2Fnowiknow.com%2Fwhy-pisa=
+s-tower-leans%2F)
+http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45ca21f50ba46&id=
+=3D1b9800e15a&e=3Dcd30a9a755 Forward (http://us1.forward-to-friend.com/forwa=
+rd?u=3D2889002ad89d45ca21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755)
+
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
+
+** Learn more about RevenueStripe... (http://rs-branding.nowiknow.com/?utm=
+_source=3Dcontentstripe&utm_medium=3Demail&utm_campaign=3Dnowiknow&utm_con=
+tent=3Danimatedlogo)
+** (http://rs-stripe.nowiknow.com/stripe/redirect?cs_email=3D=
+cmollekopf@gmail.com&cs_sendid=3D1b9800e15a&cs_esp=3Dmailchimp&cs_offset=3D0&cs_stripeid=3D=
+2562)
+
+** Archives (http://nowiknow.com/archives/)
+=C2=B7 ** Privacy Policy (http://nowiknow.com/privacy/)
+
+Copyright =C2=A9 2017 Now I Know LLC=2C All rights reserved.
+ You opted in=2C at http://NowIKnow.com -- or you wouldn't get this email.
+
+Now I Know is a participant in the Amazon Services LLC Associates Program=
+=2C an affiliate advertising program designed to provide a means for sites=
+ to earn advertising fees by advertising and linking to Amazon.com. Some i=
+mages above via Wikipedia.
+
+Now I Know's mailing address is:
+Now I Know LLC
+P.O. Box 536
+Mt. Kisco=2C NY 10549-9998
+USA
+Want to change how you receive these emails?
+You can ** update your email address (http://nowiknow.us1.list-manage.com/=
+profile?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755)
+or ** unsubscribe from this list (http://nowiknow.us1.list-manage.com/unsu=
+bscribe?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755&c=3D1b9=
+800e15a)
+ Email Marketing Powered by MailChimp
+http://www.mailchimp.com/monkey-rewards/?utm_source=3Dfreemium_newsletter&=
+utm_medium=3Demail&utm_campaign=3Dmonkey_rewards&aid=3D2889002ad89d45ca21f=
+50ba46&afl=3D1
+** (http://MIR.INSIRE.COM/click?s=3D143721&layout=3Dmarquee&li=3D689d00e31=
+c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a)
+** (http://MIR.INSIRE.COM/click?s=3D143724&sz=3D116x15&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a)
+** (http://MIR.INSIRE.COM/click?s=3D143725&sz=3D69x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a)
+--_----------=_MCPart_2013239186
+Content-Type: text/html; charset="utf-8"
+Content-Transfer-Encoding: quoted-printable
+
+<!doctype html>
+<html xmlns=3D"http://www.w3.org/1999/xhtml" xmlns:v=3D"urn:schemas-micros=
+oft-com:vml" xmlns:o=3D"urn:schemas-microsoft-com:office:office">
+=09<head>
+=09=09<!-- NAME: 1 COLUMN -->
+=09=09<!--[if gte mso 15]>
+=09=09<xml>
+=09=09=09<o:OfficeDocumentSettings>
+=09=09=09<o:AllowPNG/>
+=09=09=09<o:PixelsPerInch>96</o:PixelsPerInch>
+=09=09=09</o:OfficeDocumentSettings>
+=09=09</xml>
+=09=09<![endif]-->
+=09=09<meta charset=3D"UTF-8">
+ <meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge">
+ <meta name=3D"viewport" content=3D"width=3Ddevice-width=2C initial=
+-scale=3D1">
+=09=09<title>Now I Know:=C2=A0Why Pisa=E2=80=99s Tower Leans</title>
+
+ <style type=3D"text/css">
+=09=09p{
+=09=09=09margin:10px 0;
+=09=09=09padding:0;
+=09=09}
+=09=09table{
+=09=09=09border-collapse:collapse;
+=09=09}
+=09=09h1=2Ch2=2Ch3=2Ch4=2Ch5=2Ch6{
+=09=09=09display:block;
+=09=09=09margin:0;
+=09=09=09padding:0;
+=09=09}
+=09=09img=2Ca img{
+=09=09=09border:0;
+=09=09=09height:auto;
+=09=09=09outline:none;
+=09=09=09text-decoration:none;
+=09=09}
+=09=09body=2C#bodyTable=2C#bodyCell{
+=09=09=09height:100%;
+=09=09=09margin:0;
+=09=09=09padding:0;
+=09=09=09width:100%;
+=09=09}
+=09=09.mcnPreviewText{
+=09=09=09display:none !important;
+=09=09}
+=09=09#outlook a{
+=09=09=09padding:0;
+=09=09}
+=09=09img{
+=09=09=09-ms-interpolation-mode:bicubic;
+=09=09}
+=09=09table{
+=09=09=09mso-table-lspace:0pt;
+=09=09=09mso-table-rspace:0pt;
+=09=09}
+=09=09.ReadMsgBody{
+=09=09=09width:100%;
+=09=09}
+=09=09.ExternalClass{
+=09=09=09width:100%;
+=09=09}
+=09=09p=2Ca=2Cli=2Ctd=2Cblockquote{
+=09=09=09mso-line-height-rule:exactly;
+=09=09}
+=09=09a[href^=3Dtel]=2Ca[href^=3Dsms]{
+=09=09=09color:inherit;
+=09=09=09cursor:default;
+=09=09=09text-decoration:none;
+=09=09}
+=09=09p=2Ca=2Cli=2Ctd=2Cbody=2Ctable=2Cblockquote{
+=09=09=09-ms-text-size-adjust:100%;
+=09=09=09-webkit-text-size-adjust:100%;
+=09=09}
+=09=09.ExternalClass=2C.ExternalClass p=2C.ExternalClass td=2C.ExternalCla=
+ss div=2C.ExternalClass span=2C.ExternalClass font{
+=09=09=09line-height:100%;
+=09=09}
+=09=09a[x-apple-data-detectors]{
+=09=09=09color:inherit !important;
+=09=09=09text-decoration:none !important;
+=09=09=09font-size:inherit !important;
+=09=09=09font-family:inherit !important;
+=09=09=09font-weight:inherit !important;
+=09=09=09line-height:inherit !important;
+=09=09}
+=09=09#bodyCell{
+=09=09=09padding:10px;
+=09=09}
+=09=09.templateContainer{
+=09=09=09max-width:600px !important;
+=09=09}
+=09=09a.mcnButton{
+=09=09=09display:block;
+=09=09}
+=09=09.mcnImage{
+=09=09=09vertical-align:bottom;
+=09=09}
+=09=09.mcnTextContent{
+=09=09=09word-break:break-word;
+=09=09}
+=09=09.mcnTextContent img{
+=09=09=09height:auto !important;
+=09=09}
+=09=09.mcnDividerBlock{
+=09=09=09table-layout:fixed !important;
+=09=09}
+=09=09body=2C#bodyTable{
+=09=09=09background-color:#FAFAFA;
+=09=09}
+=09=09#bodyCell{
+=09=09=09border-top:0;
+=09=09}
+=09=09.templateContainer{
+=09=09=09border:0;
+=09=09}
+=09=09h1{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:26px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h2{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:22px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h3{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:20px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09h4{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:18px;
+=09=09=09font-style:normal;
+=09=09=09font-weight:bold;
+=09=09=09line-height:125%;
+=09=09=09letter-spacing:normal;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templatePreheader{
+=09=09=09background-color:#FAFAFA;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templatePreheader .mcnTextContent=2C#templatePreheader .mcnTextCont=
+ent p{
+=09=09=09color:#656565;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:12px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templatePreheader .mcnTextContent a=2C#templatePreheader .mcnTextCo=
+ntent p a{
+=09=09=09color:#656565;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateHeader{
+=09=09=09background-color:#FFFFFF;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:0;
+=09=09}
+=09=09#templateHeader .mcnTextContent=2C#templateHeader .mcnTextContent p{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:16px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templateHeader .mcnTextContent a=2C#templateHeader .mcnTextContent=
+ p a{
+=09=09=09color:#2BAADF;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateBody{
+=09=09=09background-color:#FFFFFF;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:2px solid #EAEAEA;
+=09=09=09padding-top:0;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templateBody .mcnTextContent=2C#templateBody .mcnTextContent p{
+=09=09=09color:#202020;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:16px;
+=09=09=09line-height:150%;
+=09=09=09text-align:left;
+=09=09}
+=09=09#templateBody .mcnTextContent a=2C#templateBody .mcnTextContent p a{
+=09=09=09color:#0000ff;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09=09#templateFooter{
+=09=09=09background-color:#FAFAFA;
+=09=09=09background-image:none;
+=09=09=09background-repeat:no-repeat;
+=09=09=09background-position:center;
+=09=09=09background-size:cover;
+=09=09=09border-top:0;
+=09=09=09border-bottom:0;
+=09=09=09padding-top:9px;
+=09=09=09padding-bottom:9px;
+=09=09}
+=09=09#templateFooter .mcnTextContent=2C#templateFooter .mcnTextContent p{
+=09=09=09color:#656565;
+=09=09=09font-family:Helvetica;
+=09=09=09font-size:12px;
+=09=09=09line-height:150%;
+=09=09=09text-align:center;
+=09=09}
+=09=09#templateFooter .mcnTextContent a=2C#templateFooter .mcnTextContent=
+ p a{
+=09=09=09color:#656565;
+=09=09=09font-weight:normal;
+=09=09=09text-decoration:underline;
+=09=09}
+=09@media only screen and (min-width:768px){
+=09=09.templateContainer{
+=09=09=09width:600px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09body=2Ctable=2Ctd=2Cp=2Ca=2Cli=2Cblockquote{
+=09=09=09-webkit-text-size-adjust:none !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09body{
+=09=09=09width:100% !important;
+=09=09=09min-width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#bodyCell{
+=09=09=09padding-top:10px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImage{
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnCartContainer=2C.mcnCaptionTopContent=2C.mcnRecContentContainer=
+=2C.mcnCaptionBottomContent=2C.mcnTextContentContainer=2C.mcnBoxedTextCont=
+entContainer=2C.mcnImageGroupContentContainer=2C.mcnCaptionLeftTextContent=
+Container=2C.mcnCaptionRightTextContentContainer=2C.mcnCaptionLeftImageCon=
+tentContainer=2C.mcnCaptionRightImageContentContainer=2C.mcnImageCardLeftT=
+extContentContainer=2C.mcnImageCardRightTextContentContainer{
+=09=09=09max-width:100% !important;
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnBoxedTextContentContainer{
+=09=09=09min-width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupContent{
+=09=09=09padding:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnCaptionLeftContentOuter .mcnTextContent=2C.mcnCaptionRightConten=
+tOuter .mcnTextContent{
+=09=09=09padding-top:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardTopImageContent=2C.mcnCaptionBlockInner .mcnCaptionTopC=
+ontent:last-child .mcnTextContent{
+=09=09=09padding-top:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardBottomImageContent{
+=09=09=09padding-bottom:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupBlockInner{
+=09=09=09padding-top:0 !important;
+=09=09=09padding-bottom:0 !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageGroupBlockOuter{
+=09=09=09padding-top:9px !important;
+=09=09=09padding-bottom:9px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnTextContent=2C.mcnBoxedTextContentColumn{
+=09=09=09padding-right:18px !important;
+=09=09=09padding-left:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnImageCardLeftImageContent=2C.mcnImageCardRightImageContent{
+=09=09=09padding-right:18px !important;
+=09=09=09padding-bottom:0 !important;
+=09=09=09padding-left:18px !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcpreview-image-uploader{
+=09=09=09display:none !important;
+=09=09=09width:100% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h1{
+=09=09=09font-size:22px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h2{
+=09=09=09font-size:20px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h3{
+=09=09=09font-size:18px !important;
+=09=09=09line-height:125% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09h4{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09.mcnBoxedTextContentContainer .mcnTextContent=2C.mcnBoxedTextContent=
+Container .mcnTextContent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templatePreheader{
+=09=09=09display:block !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templatePreheader .mcnTextContent=2C#templatePreheader .mcnTextCont=
+ent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateHeader .mcnTextContent=2C#templateHeader .mcnTextContent p{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateBody .mcnTextContent=2C#templateBody .mcnTextContent p{
+=09=09=09font-size:16px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}=09@media only screen and (max-width: 480px){
+=09=09#templateFooter .mcnTextContent=2C#templateFooter .mcnTextContent p{
+=09=09=09font-size:14px !important;
+=09=09=09line-height:150% !important;
+=09=09}
+
+}</style></head>
+ <body style=3D"height: 100%;margin: 0;padding: 0;width: 100%;-ms-text-=
+size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: #FAFAFA=
+;">
+=09=09<!--
+-->
+=09=09<!--[if !gte mso 9]><!----><span class=3D"mcnPreviewText" style=3D"=
+display:none; font-size:0px; line-height:0px; max-height:0px; max-width:0p=
+x; opacity:0; overflow:hidden; visibility:hidden; mso-hide:all;">And: is i=
+t just part of an old European dance craze? (Well=2C no.)</span><!--<![en=
+dif]-->
+=09=09<!--
+-->
+ <center>
+ <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspa=
+cing=3D"0" height=3D"100%" width=3D"100%" id=3D"bodyTable" style=3D"border=
+-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-s=
+ize-adjust: 100%;-webkit-text-size-adjust: 100%;height: 100%;margin: 0;pad=
+ding: 0;width: 100%;background-color: #FAFAFA;">
+ <tr>
+ <td align=3D"center" valign=3D"top" id=3D"bodyCell" st=
+yle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-te=
+xt-size-adjust: 100%;height: 100%;margin: 0;padding: 10px;width: 100%;bord=
+er-top: 0;">
+ <!-- BEGIN TEMPLATE // -->
+=09=09=09=09=09=09<!--[if gte mso 9]>
+=09=09=09=09=09=09<table align=3D"center" border=3D"0" cellspacing=3D"0" c=
+ellpadding=3D"0" width=3D"600" style=3D"width:600px;">
+=09=09=09=09=09=09<tr>
+=09=09=09=09=09=09<td align=3D"center" valign=3D"top" width=3D"600" style=
+=3D"width:600px;">
+=09=09=09=09=09=09<![endif]-->
+ <table border=3D"0" cellpadding=3D"0" cellspacing=
+=3D"0" width=3D"100%" class=3D"templateContainer" style=3D"border-collapse=
+: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;border: 0;max-width: 600px !importa=
+nt;">
+ <tr>
+ <td valign=3D"top" id=3D"templatePreheader=
+" style=3D"background:#FAFAFA none no-repeat center/cover;mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;ba=
+ckground-color: #FAFAFA;background-image: none;background-repeat: no-repea=
+t;background-position: center;background-size: cover;border-top: 0;border-=
+bottom: 0;padding-top: 9px;padding-bottom: 9px;"><table border=3D"0" cellp=
+adding=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnTextBlock" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"210" style=3D"width:210px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 210px;border-collapse: collapse;mso-table=
+-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContentContainer">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-left: 18px;padding-bottom: 9px;padding-right: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: left;">
+
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"390" style=3D"width:390px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 390px;border-collapse: collapse;mso-table=
+-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContentContainer">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-left: 18px;padding-bottom: 9px;padding-right: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: right;"><a href=3D"h=
+ttp://nowiknow.us1.list-manage2.com/track/click?u=3D2889002ad89d45ca21f50b=
+a46&id=3Db2f647f3ef&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-h=
+eight-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 1=
+00%;color: #656565;font-weight: normal;text-decoration: underline;">View t=
+his email in your browser</a> =C2=B7 <a href=3D"http://nowiknow.=
+us1.list-manage2.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8c46c4=
+fdfe&e=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size=
+-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: n=
+ormal;text-decoration: underline;">Missed one? Visit the Archives</a></div=
+>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateHeader" s=
+tyle=3D"background:#FFFFFF none no-repeat center/cover;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backg=
+round-color: #FFFFFF;background-image: none;background-repeat: no-repeat;b=
+ackground-position: center;background-size: cover;border-top: 0;border-bot=
+tom: 0;padding-top: 9px;padding-bottom: 0;"><table border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnCodeBlock" style=3D"b=
+order-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-t=
+ext-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" al=
+ign=3D"center" style=3D"margin-left: auto;margin-right: auto;border-collap=
+se: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adj=
+ust: 100%;-webkit-text-size-adjust: 100%;"><tbody><tr><td colspan=3D"2" st=
+yle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-te=
+xt-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/tra=
+ck/click?u=3D2889002ad89d45ca21f50ba46&id=3D0a6c76aa42&e=3Dcd30a9a755" re=
+l=3D"nofollow" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/=
+imp?s=3D188055&layout=3Dmarquee&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" style=3D"display: block;width: 100=
+%;height: auto;border: 0;outline: none;text-decoration: none;-ms-interpola=
+tion-mode: bicubic;" width=3D"{INSERT TEMPLATE MAX WIDTH HERE AS INTEGER}"=
+></a></td></tr><tr style=3D"display:block; height:1px; line-height:1px;"><=
+td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D1880=
+56&sz=3D1x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b980=
+0e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline:=
+ none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td sty=
+le=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-tex=
+t-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D188057&=
+;sz=3D1x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a"=
+ height=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline: none;t=
+ext-decoration: none;-ms-interpolation-mode: bicubic;"></td></tr><tr><td a=
+lign=3D"left" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list=
+-manage1.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8f8ede861a&e=
+=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule: exactly;-m=
+s-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http=
+://MIR.INSIRE.COM/imp?s=3D188058&sz=3D116x15&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></a></td><td align=3D"right" style=3D"mso-line-height-rule: exactly=
+;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"ht=
+tp://nowiknow.us1.list-manage1.com/track/click?u=3D2889002ad89d45ca21f50ba=
+46&id=3D31eb34aeba&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-hei=
+ght-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D188059&sz=3D69x15&li=
+=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" st=
+yle=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-inte=
+rpolation-mode: bicubic;"></a></td></tr></tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+ <a href=3D"http://nowiknow.us1.list-ma=
+nage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D3e7c0fee15&e=3D=
+cd30a9a755" title=3D"" class=3D"" target=3D"_blank" style=3D"mso-line-height=
+-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"=
+>
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/9dfc45f=
+3-a00a-4c17-acad-df81042c2e73.png" width=3D"564" style=3D"max-width: 800px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+ </a>
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateBody" sty=
+le=3D"background:#FFFFFF none no-repeat center/cover;mso-line-height-rule:=
+ exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backgro=
+und-color: #FFFFFF;background-image: none;background-repeat: no-repeat;bac=
+kground-position: center;background-size: cover;border-top: 0;border-botto=
+m: 2px solid #EAEAEA;padding-top: 0;padding-bottom: 9px;"><table border=3D=
+"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnTextBlo=
+ck" style=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div><em>Just likes yesterday: I'm on vacation=
+ this week=2C so today's Now I Know is a re-run=2C originally from 20=
+10. (The Weekender is still TBD.) -- <a href=3D"http://nowiknow.us1.l=
+ist-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D949248ae12&e=
+=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;=
+text-decoration: underline;">Dan</a></em>
+
+<h1 style=3D"display: block;margin: 0;padding: 0;color: #202020;font-famil=
+y: Helvetica;font-size: 26px;font-style: normal;font-weight: bold;line-hei=
+ght: 125%;letter-spacing: normal;text-align: left;"><font color=3D"#000080=
+">Why Pisa=E2=80=99s Tower Leans</font></h1>
+</div>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/a7a2f56=
+d-76ce-47ab-8965-91b304217398.jpg" width=3D"300" style=3D"max-width: 300px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <p style=3D"margin: 10px 0;padding: 0;mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;color: #202020;font-family: Helvetica;font-size: 16px;line-height: 1=
+50%;text-align: left;">The Leaning Tower of Pisa is over 800 years old.&nb=
+sp; Construction started on it in 1173 and=2C almost two centuries later (=
+and after two work stoppages)=2C completed in the 1370s. For h=
+istory=E2=80=99s sake=2C it is a good thing that there were two work stopp=
+ages =E2=80=94 otherwise=2C the structure probably would have collapsed lo=
+ng ago. The Tower is built on=2C basically=2C a marsh =E2=80=94 a th=
+in layer of <a href=3D"http://nowiknow.us1.list-manage.com/track/clic=
+k?u=3D2889002ad89d45ca21f50ba46&id=3De624abfe58&e=3Dcd30a9a755" target=3D=
+"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;text-de=
+coration: underline;">alluvial silt</a> atop soft marine clay. &=
+nbsp; The work stoppages gave time for the existing incomplete infrastruct=
+ure to settle in the soft soil=2C compacting the ground beneath it and=2C=
+ effectively=2C letting Mother Earth adapt before construction resumed.&nb=
+sp; A minor miracle=2C in and of itself.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">It th=
+erefore makes sense that the Tower is unstable=2C likely to shift its posi=
+tion any which way as time passes. But the mystery runs deeper. =
+; The Leaning Tower of Pisa only leans to the south. Assuming the un=
+stable ground beneath is uniformly so=2C that did not make a lot of sense.=
+</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">In 19=
+89=2C the Tower was leaning roughly 15 feet off its center=2C when disaste=
+r struck =E2=80=94 in Milan. Another tower=2C the <a href=3D"ht=
+tp://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba4=
+6&id=3D995d196326&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-hei=
+ght-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;color: #0000ff;font-weight: normal;text-decoration: underline;">Civic To=
+wer of Pavia</a>=2C crumbled=2C killing four passersby. Fearing a si=
+milar fate for Pisa=2C the Italian government closed the tower and made a=
+ $40 million grant to researchers=2C hoping to stave off the Tower=E2=80=
+=99s tilt into destruction. The task was daunting=2C as researchers=
+ were split =E2=80=94 some believed the problem was with the underlying la=
+nd; others believed the problem was with the structure itself. Redou=
+bling these problems were the art historians=2C who insisted on preserving=
+ the artistic value of the Tower; in short=2C propping the Tower up was a=
+ non-starter.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">Findi=
+ng a solution took four different tries and almost a decade. In the=
+ end=2C the team used something called =E2=80=9Csoil extraction=E2=80=9D=
+ =E2=80=94 as <a href=3D"http://nowiknow.us1.list-manage2.com/track/c=
+lick?u=3D2889002ad89d45ca21f50ba46&id=3Db0bbe1296f&e=3Dcd30a9a755" target=
+=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 1=
+00%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;text=
+-decoration: underline;">described</a> by the Telegraph (UK)=2C this=
+ meant =E2=80=9Cdrilling out slivers of soil from beneath the northern sid=
+e of the tower =E2=80=93 away from the lean =E2=80=93 and allowing gravity=
+ to coax the structure back upright.=E2=80=9D It was a nuanced task=
+ in and of itself. Professor John Burland=2C a soil engineer at the=
+ Imperial College London=2C lead the efforts with the help of 120 sensors=
+ placed in=2C around=2C and outside the Tower=2C and an army of fax machin=
+es. For two years=2C twice a day=2C the sensor readings were faxed t=
+o his attention; he=E2=80=99d run some calculations and inform the driller=
+s how to continue. The Tower re-opened in late 2001.</p>
+
+<p style=3D"margin: 10px 0;padding: 0;mso-line-height-rule: exactly;-ms-te=
+xt-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #202020;font-fa=
+mily: Helvetica;font-size: 16px;line-height: 150%;text-align: left;">In ca=
+pturing all these data points =E2=80=94 two a day for two years =E2=80=94=
+ Burland had in front of him the answer to the previously unanswerable que=
+stion of the Tower=E2=80=99s southward tilt. In 2003=2C he figured i=
+t out. The <a href=3D"http://nowiknow.us1.list-manage2.com/trac=
+k/click?u=3D2889002ad89d45ca21f50ba46&id=3Daccb264095&e=3Dcd30a9a755" tar=
+get=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight: normal;t=
+ext-decoration: underline;">water table</a> on the north side of the=
+ Tower rose up to a foot higher at times during Pisa=E2=80=99s rainy seaso=
+n. In effect=2C the water tower slowly=2C slightly=2C and temporaril=
+y boosted the land on the north side=2C pushing the Tower to lean south. &=
+nbsp; Using a custom drainage system to normalize the water table=2C Burla=
+nd has stemmed the Tower=E2=80=99s further tilt entirely =E2=80=94 since t=
+he solution was put in place seven [now 14!] years ago=2C the Tower=E2=80=
+=99s tilt has remained the same.</p>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 0px 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 3px solid #EAEAEA;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnImageBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnImageBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnImageBlockInner">
+ <table align=3D"left" width=3D"100%" border=3D"0" cell=
+padding=3D"0" cellspacing=3D"0" class=3D"mcnImageContentContainer" style=
+=3D"min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-ta=
+ble-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;=
+">
+ <tbody><tr>
+ <td class=3D"mcnImageContent" valign=3D"top" s=
+tyle=3D"padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom=
+: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+
+ <a href=3D"http://nowiknow.us1.list-ma=
+nage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3Db485bbd7b4&e=3D=
+cd30a9a755" title=3D"" class=3D"" target=3D"_blank" style=3D"mso-line-height=
+-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"=
+>
+ <img align=3D"center" alt=3D"" src=
+=3D"https://gallery.mailchimp.com/2889002ad89d45ca21f50ba46/images/b588757=
+c-459c-4662-9cd4-327f2844f58f.png" width=3D"564" style=3D"max-width: 656px=
+;padding-bottom: 0;display: inline !important;vertical-align: bottom;borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;" class=3D"mcnImage">
+ </a>
+
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: center;"><em>Now I K=
+now is supported by readers like you. Please consider becoming a patron by=
+ supporting the project on Patreon. <a href=3D"http://nowiknow.us1.li=
+st-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3Da51a2ca803&e=
+=3Dcd30a9a755" target=3D"_blank" style=3D"mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;fo=
+nt-weight: normal;text-decoration: underline;">Click here to pledge your s=
+upport</a>.</em></div>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 0px 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 3px solid #EAEAEA;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #202020;font-family: Helve=
+tica;font-size: 16px;line-height: 150%;text-align: left;">
+
+ <div style=3D"text-align: left;"><br>
+<font color=3D"#000080"><strong><u>Bonus fact</u></strong></font>: Groundw=
+ater flows can prevent problems=2C too. In 1958=2C the town of Conco=
+rd=2C Massachusetts opened a landfill adjacent to Walden Pond=2C the=
+ eponymous site of Henry David Thoreau=E2=80=99s <em>On Walden Pond</=
+em>. Because the groundwater table ran from the pond to the landfill=
+ (and not vice versa)=2C the pond remained relatively unpolluted by the ne=
+arby refuse.=E2=80=8B<br>
+<br>
+<font color=3D"#000080"><strong><u>From the Archives</u></strong></font>:=
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad8=
+9d45ca21f50ba46&id=3D9cfb51a117&e=3Dcd30a9a755" style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;co=
+lor: #0000ff;font-weight: normal;text-decoration: underline;">Patent Leath=
+er Shoes</a>: How Michael Jackson managed to pull off an incredible=2C gra=
+vity-defying lean of his own.<br>
+ </div>
+<font color=3D"#000080"><strong><u>Related</u></strong></font>: A 3-d=
+=2C Leaning Tower of Pisa <a href=3D"http://nowiknow.us1.list-manage.=
+com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D3e98ab8352&e=3D=
+cd30a9a755" target=3D"_blank" style=3D"mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;color: #0000ff;font-weight:=
+ normal;text-decoration: underline;">puzzle</a>.<br>
+
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnCodeBlock" style=3D"border-collapse: collapse;mso-table-l=
+space: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-s=
+ize-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <center><table border=3D"0" cellpadding=3D"0" cellspacing=
+=3D"0" style=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-=
+rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><t=
+body><tr><td colspan=3D"2" style=3D"mso-line-height-rule: exactly;-ms-text=
+-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a style=3D"display: b=
+lock;width: 300px;height: 250px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;" href=3D"http://nowiknow.us=
+1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D8d9e2bf2f=
+a&e=3Dcd30a9a755" rel=3D"nofollow"><img src=3D"http://MIR.INSIRE.COM/imp?=
+s=3D97521&sz=3D300x250&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&am=
+p;p=3D1b9800e15a" border=3D"0" width=3D"300" height=3D"250" style=3D"borde=
+r: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mo=
+de: bicubic;"></a></td></tr><tr style=3D"display:block; height:1px; line-h=
+eight:1px;"><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D97522&sz=3D1x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&a=
+mp;p=3D1b9800e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: au=
+to;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"><=
+/td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;=
+-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=
+=3D97523&sz=3D1x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=
+=3D1b9800e15a" height=3D"1" width=3D"10" style=3D"border: 0;height: auto;o=
+utline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td>=
+</tr><tr><td align=3D"left" style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://now=
+iknow.us1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D4=
+f3db3ffca&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule:=
+ exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img=
+ src=3D"http://MIR.INSIRE.COM/imp?s=3D2054&sz=3D116x15&li=3D689d00=
+e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" style=3D"bo=
+rder: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation=
+-mode: bicubic;"></a></td><td align=3D"right" style=3D"mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><a=
+ href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002ad89d4=
+5ca21f50ba46&id=3Daf6b1e86bf&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"ms=
+o-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-a=
+djust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D96003&sz=3D69x=
+15&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" border=
+=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none=
+;-ms-interpolation-mode: bicubic;"></a></td></tr></tbody></table>
+</center>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnShareBlock" style=3D"min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnShareBlockOuter">
+ <tr>
+ <td valign=3D"top" style=3D"padding: 9px;mso-line-height-r=
+ule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" c=
+lass=3D"mcnShareBlockInner">
+ <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0=
+" width=3D"100%" class=3D"mcnShareContentContainer" style=3D"min-width: 10=
+0%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td align=3D"center" style=3D"padding-top: 0;padding-left: 9px;pad=
+ding-bottom: 0;padding-right: 9px;mso-line-height-rule: exactly;-ms-text-s=
+ize-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table align=3D"center" border=3D"0" cellpadding=3D"0" cellspa=
+cing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-collapse: collap=
+se;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;=
+-webkit-text-size-adjust: 100%;" class=3D"mcnShareContent">
+ <tbody><tr>
+ <td align=3D"center" valign=3D"top" class=3D"mcnShareC=
+ontentItemContainer" style=3D"padding-top: 9px;padding-right: 9px;padding-=
+left: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;">
+ <table align=3D"center" border=3D"0" cellpadding=
+=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody><tr>
+ <td align=3D"left" valign=3D"top" style=3D=
+"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-siz=
+e-adjust: 100%;">
+ <!--[if mso]>
+ <table align=3D"center" border=3D"0" c=
+ellspacing=3D"0" cellpadding=3D"0">
+ <tr>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 9px;padding-bottom: 9px;mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnSha=
+reContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage1.com/track/click?u=3D2889002=
+ad89d45ca21f50ba46&id=3De75c55d706&e=3Dcd30a9a755" target=3D"_blank" styl=
+e=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text=
+-size-adjust: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/so=
+cial-block-v2/outline-dark-facebook-48.png" style=3D"display: block;border=
+: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mod=
+e: bicubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3D0db49343d0&e=3Dcd30a9a755" target=3D"" style=3D"co=
+lor: #202020;font-family: Arial;font-size: 12px;font-weight: normal;line-h=
+eight: normal;text-align: center;text-decoration: none;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Sha=
+re</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 9px;padding-bottom: 9px;mso-line-height-rule: exactly;-=
+ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnSha=
+reContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3Dc3249d445c&e=3Dcd30a9a755" target=3D"_blank" style=
+=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/soc=
+ial-block-v2/outline-dark-twitter-48.png" style=3D"display: block;border:=
+ 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode=
+: bicubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2889002a=
+d89d45ca21f50ba46&id=3D59683b560f&e=3Dcd30a9a755" target=3D"" style=3D"co=
+lor: #202020;font-family: Arial;font-size: 12px;font-weight: normal;line-h=
+eight: normal;text-align: center;text-decoration: none;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Twe=
+et</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ <td align=3D"center" valign=3D"top=
+">
+ <![endif]-->
+ <table align=3D"left" border=3D"0"=
+ cellpadding=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;ms=
+o-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;">
+ <tbody><tr>
+ <td valign=3D"top" style=
+=3D"padding-right: 0;padding-bottom: 9px;mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" class=3D"mcnShare=
+ContentItemContainer">
+ <table border=3D"0" ce=
+llpadding=3D"0" cellspacing=3D"0" width=3D"" class=3D"mcnShareContentItem"=
+ style=3D"border-collapse: separate;border-radius: 3px;mso-table-lspace: 0=
+pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adju=
+st: 100%;">
+ <tbody><tr>
+ <td align=3D"l=
+eft" valign=3D"middle" style=3D"padding-top: 5px;padding-right: 9px;paddin=
+g-bottom: 5px;padding-left: 9px;mso-line-height-rule: exactly;-ms-text-siz=
+e-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <table ali=
+gn=3D"left" border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"" st=
+yle=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0=
+pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody=
+><tr>
+ <t=
+d align=3D"center" valign=3D"middle" width=3D"24" class=3D"mcnShareIconCon=
+tent" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-w=
+ebkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45c=
+a21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" target=3D"_blank" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;"><img src=3D"https://cdn-images.mailchimp.com/icons/social-block-=
+v2/outline-dark-forwardtofriend-48.png" style=3D"display: block;border: 0;=
+height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: b=
+icubic;" height=3D"24" width=3D"24" class=3D""></a>
+ </=
+td>
+ <t=
+d align=3D"left" valign=3D"middle" class=3D"mcnShareTextContent" style=3D"=
+padding-left: 5px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%=
+;-webkit-text-size-adjust: 100%;">
+ =
+ <a href=3D"http://us1.forward-to-friend.com/forward?u=3D2889002ad89d45c=
+a21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" target=3D"" style=3D"color: #2020=
+20;font-family: Arial;font-size: 12px;font-weight: normal;line-height: nor=
+mal;text-align: center;text-decoration: none;mso-line-height-rule: exactly=
+;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Forward</a>
+ </=
+td>
+ </tr>
+ </tbody></=
+table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ <!--[if mso]>
+ </td>
+ <![endif]-->
+
+ <!--[if mso]>
+ </tr>
+ </table>
+ <![endif]-->
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+ </tbody></table>
+ </td>
+ </tr>
+</tbody></table>
+
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ <tr>
+ <td valign=3D"top" id=3D"templateFooter" s=
+tyle=3D"background:#FAFAFA none no-repeat center/cover;mso-line-height-rul=
+e: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;backg=
+round-color: #FAFAFA;background-image: none;background-repeat: no-repeat;b=
+ackground-position: center;background-size: cover;border-top: 0;border-bot=
+tom: 0;padding-top: 9px;padding-bottom: 9px;"><table border=3D"0" cellpadd=
+ing=3D"0" cellspacing=3D"0" width=3D"100%" class=3D"mcnCodeBlock" style=3D=
+"border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <center>
+<!-- POWERINBOX 300x250 -->
+<div class=3D"powerinbox">
+<!-- domain: rs-stripe.nowiknow.com -->
+<!-- branding: rs-branding.nowiknow.com -->
+ <table width=3D"300" class=3D"container-single" border=3D"0" cellpadding=
+=3D"0" cellspacing=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody>
+ <tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 1=
+00%;-webkit-text-size-adjust: 100%;">
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D2=
+889002ad89d45ca21f50ba46&id=3D0722b4d99d&e=3Dcd30a9a755" style=3D"display=
+: inline-block;border: 0;outline: none;text-decoration: none;mso-line-heig=
+ht-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%=
+;" target=3D"_blank">
+ <img src=3D"http://rs-branding.nowiknow.com/recommend/300x250.=
+png" style=3D"width: 300px;height: 15px;border: 0;outline: none;text-decor=
+ation: none;-ms-interpolation-mode: bicubic;" width=3D"300" height=3D"15"=
+ border=3D"0" alt=3D"Learn more about RevenueStripe...">
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td align=3D"center" height=3D"3" valign=3D"top" style=3D"font-siz=
+e: 3px;height: 3px;line-height: 3px;vertical-align: top;mso-line-height-ru=
+le: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"></=
+td>
+ </tr>
+ </tbody>
+ </table>
+ <table width=3D"300" class=3D"fallback-single" border=3D"0" cellspacing=
+=3D"0" cellpadding=3D"0" style=3D"border-collapse: collapse;mso-table-lspa=
+ce: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;">
+ <tbody><tr>
+ <td width=3D"300" class=3D"col-single" style=3D"border-collapse: col=
+lapse;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-tex=
+t-size-adjust: 100%;">
+ <a href=3D"http://nowiknow.us1.list-manage.com/track/click?u=3D288=
+9002ad89d45ca21f50ba46&id=3D39a82cf0f7&e=3Dcd30a9a755" style=3D"border-st=
+yle: none;outline: none;text-decoration: none;mso-line-height-rule: exactl=
+y;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" target=3D"_b=
+lank">
+ <img alt=3D"" height=3D"250" src=3D"http://rs-stripe.nowiknow.co=
+m/stripe/image?cs_email=3Dcmollekopf@gmail.com&cs_sendid=3D1b9800e15a&=
+cs_esp=3Dmailchimp&cs_offset=3D0&cs_stripeid=3D2562" style=3D"disp=
+lay: block;border: 0;height: auto;line-height: 100%;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;" width=3D"300">
+ </a>
+ </td>
+ </tr>
+ </tbody></table>
+</div>
+<!-- POWERINBOX 300x250 -->
+</center>
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnDividerBlock" style=3D"min-width: 100%;border-collapse: c=
+ollapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;">
+ <tbody class=3D"mcnDividerBlockOuter">
+ <tr>
+ <td class=3D"mcnDividerBlockInner" style=3D"min-width: 100%;pa=
+dding: 10px 18px 25px;mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;">
+ <table class=3D"mcnDividerContent" border=3D"0" cellpaddin=
+g=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"min-width: 100%;border-t=
+op: 2px solid #EEEEEE;border-collapse: collapse;mso-table-lspace: 0pt;mso-=
+table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100=
+%;">
+ <tbody><tr>
+ <td style=3D"mso-line-height-rule: exactly;-ms-tex=
+t-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
+ <span></span>
+ </td>
+ </tr>
+ </tbody></table>
+<!--
+ <td class=3D"mcnDividerBlockInner" style=3D"padding: 18px;=
+">
+ <hr class=3D"mcnDividerContent" style=3D"border-bottom-col=
+or:none; border-left-color:none; border-right-color:none; border-bottom-wi=
+dth:0; border-left-width:0; border-right-width:0; margin-top:0; margin-rig=
+ht:0; margin-bottom:0; margin-left:0;" />
+-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnTextBlock" style=3D"min-width: 100%;border-collapse: coll=
+apse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100=
+%;-webkit-text-size-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"paddin=
+g-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;">
+ =09<!--[if mso]>
+=09=09=09=09<table align=3D"left" border=3D"0" cellspacing=3D"0" cellpaddi=
+ng=3D"0" width=3D"100%" style=3D"width:100%;">
+=09=09=09=09<tr>
+=09=09=09=09<![endif]-->
+=09=09=09
+=09=09=09=09<!--[if mso]>
+=09=09=09=09<td valign=3D"top" width=3D"600" style=3D"width:600px;">
+=09=09=09=09<![endif]-->
+ <table align=3D"left" border=3D"0" cellpadding=3D"0" cells=
+pacing=3D"0" style=3D"max-width: 100%;min-width: 100%;border-collapse: col=
+lapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 10=
+0%;-webkit-text-size-adjust: 100%;" width=3D"100%" class=3D"mcnTextContent=
+Container">
+ <tbody><tr>
+
+ <td valign=3D"top" class=3D"mcnTextContent" style=
+=3D"padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 1=
+8px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-=
+size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helve=
+tica;font-size: 12px;line-height: 150%;text-align: center;">
+
+ <a href=3D"http://nowiknow.us1.list-manage1.co=
+m/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D2742a17102&e=3D=
+cd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webk=
+it-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decorati=
+on: underline;">Archives</a> =C2=B7 <a href=3D"http://nowiknow.u=
+s1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D84e04731=
+e2&e=3Dcd30a9a755" style=3D"mso-line-height-rule: exactly;-ms-text-size-a=
+djust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: nor=
+mal;text-decoration: underline;">Privacy Policy</a><br>
+<br>
+<em>Copyright =C2=A9 2017 Now I Know LLC=2C All rights reserved.</em><br>
+ You opted in=2C at http://NowIKnow.com -- or you wouldn't get this email.=
+<br>
+<br>
+Now I Know is a participant in the Amazon Services LLC Associates Pro=
+gram=2C an affiliate advertising program designed to provide a means for s=
+ites to earn advertising fees by advertising and linking to Amazon.com. So=
+me images above via Wikipedia.<br>
+<br>
+<strong>Now I Know's mailing address is:</strong><br>
+<div class=3D"vcard"><span class=3D"org fn">Now I Know LLC</span><div clas=
+s=3D"adr"><div class=3D"street-address">P.O. Box 536</div><span class=3D"l=
+ocality">Mt. Kisco</span>=2C <span class=3D"region">NY</span> <span class=
+=3D"postal-code">10549-9998</span></div><br><a href=3D"http://nowiknow.us1=
+=2Elist-manage.com/vcard?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c" clas=
+s=3D"hcard-download">Add us to your address book</a></div>
+<br>
+<br>
+Want to change how you receive these emails?<br>
+You can <a href=3D"http://nowiknow.us1.list-manage.com/profile?u=3D2889002=
+ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755" style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;co=
+lor: #656565;font-weight: normal;text-decoration: underline;">update your=
+ email address</a> or <a href=3D"http://nowiknow.us1.list-manage.com/=
+unsubscribe?u=3D2889002ad89d45ca21f50ba46&id=3D689d00e31c&e=3Dcd30a9a755&c=
+=3D1b9800e15a" style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust=
+: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;t=
+ext-decoration: underline;">unsubscribe from this list</a><br>
+<br>
+ <a href=3D"http://www.mailchimp.com/monkey-rewards/?utm_source=3Dfreemium=
+_newsletter&utm_medium=3Demail&utm_campaign=3Dmonkey_rewards&aid=3D2889002=
+ad89d45ca21f50ba46&afl=3D1"><img src=3D"https://cdn-images.mailchimp.com/m=
+onkey_rewards/MC_MonkeyReward_19.png" border=3D"0" alt=3D"Email Marketing=
+ Powered by MailChimp" title=3D"MailChimp Email Marketing" width=3D"139" h=
+eight=3D"54"></a>
+ </td>
+ </tr>
+ </tbody></table>
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</td>
+=09=09=09=09<![endif]-->
+
+=09=09=09=09<!--[if mso]>
+=09=09=09=09</tr>
+=09=09=09=09</table>
+=09=09=09=09<![endif]-->
+ </td>
+ </tr>
+ </tbody>
+</table><table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"1=
+00%" class=3D"mcnCodeBlock" style=3D"border-collapse: collapse;mso-table-l=
+space: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-s=
+ize-adjust: 100%;">
+ <tbody class=3D"mcnTextBlockOuter">
+ <tr>
+ <td valign=3D"top" class=3D"mcnTextBlockInner" style=3D"mso-li=
+ne-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjus=
+t: 100%;">
+ <!-- LI MARQ -->
+<table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" align=3D"center" s=
+tyle=3D"margin-left: auto;margin-right: auto;border-collapse: collapse;mso=
+-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webki=
+t-text-size-adjust: 100%;"><tbody><tr><td colspan=3D"2" style=3D"mso-line-=
+height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/track/click?u=3D28=
+89002ad89d45ca21f50ba46&id=3De688028181&e=3Dcd30a9a755" rel=3D"nofollow"=
+ style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143721=
+&layout=3Dmarquee&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=
+=3D1b9800e15a" border=3D"0" style=3D"display: block;width: 100%;height: au=
+to;border: 0;outline: none;text-decoration: none;-ms-interpolation-mode: b=
+icubic;" width=3D"{INSERT TEMPLATE MAX WIDTH HERE AS INTEGER}"></a></td></=
+tr><tr style=3D"display:block; height:1px; line-height:1px;"><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143722&sz=3D=
+1x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" heigh=
+t=3D"1" width=3D"10" style=3D"border: 0;height: auto;outline: none;text-de=
+coration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-lin=
+e-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust=
+: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D143723&sz=3D1x1&=
+;li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" height=3D"1"=
+ width=3D"10" style=3D"border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;"></td></tr><tr><td align=3D"left"=
+ style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit=
+-text-size-adjust: 100%;"><a href=3D"http://nowiknow.us1.list-manage1.com/=
+track/click?u=3D2889002ad89d45ca21f50ba46&id=3D0ef8631923&e=3Dcd30a9a755"=
+ rel=3D"nofollow" style=3D"mso-line-height-rule: exactly;-ms-text-size-adj=
+ust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.C=
+OM/imp?s=3D143724&sz=3D116x15&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" style=3D"border: 0;height: auto;outl=
+ine: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></a></td=
+><td align=3D"right" style=3D"mso-line-height-rule: exactly;-ms-text-size-=
+adjust: 100%;-webkit-text-size-adjust: 100%;"><a href=3D"http://nowiknow.u=
+s1.list-manage.com/track/click?u=3D2889002ad89d45ca21f50ba46&id=3D76f23153=
+0a&e=3Dcd30a9a755" rel=3D"nofollow" style=3D"mso-line-height-rule: exactl=
+y;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"=
+http://MIR.INSIRE.COM/imp?s=3D143725&sz=3D69x15&li=3D689d00e31c&am=
+p;e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" border=3D"0" style=3D"border: 0=
+;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode:=
+ bicubic;"></a></td></tr></tbody></table>
+
+<table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" width=3D"40" heigh=
+t=3D"6" style=3D"border-collapse: collapse;mso-table-lspace: 0pt;mso-table=
+-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><=
+tbody><tr><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust:=
+ 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/i=
+mp?s=3D123528300&sz=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com=
+&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border=
+: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mod=
+e: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size=
+-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSI=
+RE.COM/imp?s=3D123528301&sz=3D2x1&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http:=
+//MIR.INSIRE.COM/imp?s=3D123528302&sz=3D2x1&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D=
+"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none;-m=
+s-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: ex=
+actly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=
+=3D"http://MIR.INSIRE.COM/imp?s=3D123528303&sz=3D2x1&li=3D689d00e3=
+1c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" b=
+order=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration:=
+ none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">=
+<img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528304&sz=3D2x1&li=3D=
+689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=
+=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528305&sz=3D2x1&a=
+mp;li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2=
+" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;=
+text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528306&sz=
+=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" wi=
+dth=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outlin=
+e: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td s=
+tyle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-t=
+ext-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D12352830=
+7&sz=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800=
+e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: aut=
+o;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></=
+td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D=
+123528308&sz=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=
+=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D123528309&sz=3D2x1&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"bord=
+er: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-m=
+ode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-si=
+ze-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.IN=
+SIRE.COM/imp?s=3D123528310&sz=3D2x1&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms=
+-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http:=
+//MIR.INSIRE.COM/imp?s=3D123528311&sz=3D2x1&li=3D689d00e31c&e=
+=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D=
+"0" style=3D"border: 0;height: auto;outline: none;text-decoration: none;-m=
+s-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-rule: ex=
+actly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=
+=3D"http://MIR.INSIRE.COM/imp?s=3D123528312&sz=3D2x1&li=3D689d00e3=
+1c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" b=
+order=3D"0" style=3D"border: 0;height: auto;outline: none;text-decoration:=
+ none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line-height-=
+rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">=
+<img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528313&sz=3D2x1&li=3D=
+689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=
+=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;text-dec=
+oration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"mso-line=
+-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust:=
+ 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528314&sz=3D2x1&a=
+mp;li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2=
+" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outline: none;=
+text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td style=3D"=
+mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size=
+-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D123528315&sz=
+=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800e15a" wi=
+dth=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: auto;outlin=
+e: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></td><td s=
+tyle=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-t=
+ext-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D12352831=
+6&sz=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=3D1b9800=
+e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;height: aut=
+o;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;"></=
+td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-=
+webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM/imp?s=3D=
+123528317&sz=3D2x1&li=3D689d00e31c&e=3Dcmollekopf@gmail.com&p=
+=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"border: 0;he=
+ight: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bic=
+ubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-size-adjus=
+t: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.INSIRE.COM=
+/imp?s=3D123528318&sz=3D2x1&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=3D"bord=
+er: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-m=
+ode: bicubic;"></td><td style=3D"mso-line-height-rule: exactly;-ms-text-si=
+ze-adjust: 100%;-webkit-text-size-adjust: 100%;"><img src=3D"http://MIR.IN=
+SIRE.COM/imp?s=3D123528319&sz=3D2x1&li=3D689d00e31c&e=3D=
+cmollekopf@gmail.com&p=3D1b9800e15a" width=3D"2" height=3D"6" border=3D"0" style=
+=3D"border: 0;height: auto;outline: none;text-decoration: none;-ms-interpo=
+lation-mode: bicubic;"></td></tr></tbody></table>
+
+<!-- PAVED -->
+
+<img src=3D"https://pippio.com/api/sync?pid=3D2397&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2398&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2399&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2401&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2402&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2403&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2404&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2405&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2406&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+<img src=3D"https://pippio.com/api/sync?pid=3D2407&it=3D4&iv=3D=
+&it=3D4&iv=3D&it=3D4&iv=3D=
+" width=3D"1" height=3D"1" border=3D"0" style=3D"display:=
+ none;overflow: hidden;border: 0;height: auto;outline: none;text-decoratio=
+n: none;-ms-interpolation-mode: bicubic;">
+ </td>
+ </tr>
+ </tbody>
+</table></td>
+ </tr>
+ </table>
+=09=09=09=09=09=09<!--[if gte mso 9]>
+=09=09=09=09=09=09</td>
+=09=09=09=09=09=09</tr>
+=09=09=09=09=09=09</table>
+=09=09=09=09=09=09<![endif]-->
+ <!-- // END TEMPLATE -->
+ </td>
+ </tr>
+ </table>
+ </center>
+ <img src=3D"http://nowiknow.us1.list-manage.com/track/open.php?u=3D288=
+9002ad89d45ca21f50ba46&id=3D1b9800e15a&e=3Dcd30a9a755" height=3D"1" width=
+=3D"1"></body>
+</html>
+--_----------=_MCPart_2013239186--
--- /dev/null
+Most of this data has been imported from kdepim originally with the messagetreeparser.
+
+To generate new gpg encrypted content use an existing mime message to your liking, and then
+copy in ascii armored content in. The encrypted content can be created using:
+
+ gpg2 --home /src/sink/mime/mimetreeparser/tests/gnupg_home/ -a -r test@kolab.org --encrypt toEncrypt.txt
+
+where toEncrypt.txt contains the to be encrypted content.
--- /dev/null
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with a empty text alternative contenttype
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----=_Part_12345678_12345678"
+
+
+------=_Part_12345678_12345678
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p></body></html>
+
+
+------=_Part_12345678_12345678--
--- /dev/null
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----=_Part_12345678_12345678"
+
+
+------=_Part_12345678_12345678
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
+
+
+------=_Part_12345678_12345678
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<html><body><p><span>HTML</span> text</p></body></html>
+
+
+------=_Part_12345678_12345678--
--- /dev/null
+Return-Path: <test1@kolab.org>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.11-41-gd53406f3f-Kolab-2.5.11-15.1.el7.kolab_16) with LMTPA;
+ Fri, 29 Jun 2018 14:27:36 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx001.mykolab.com (unknown [10.9.13.1])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id 1E5E8108
+ for <test1@kolab.org>; Fri, 29 Jun 2018 14:27:36 +0200 (CEST)
+Received: from ext-subm003.mykolab.com (unknown [10.9.6.3])
+ by int-mx001.mykolab.com (Postfix) with ESMTPS id 09E231F3
+ for <test1@kolab.org>; Fri, 29 Jun 2018 14:27:36 +0200 (CEST)
+From: Kolab <test1@kolab.org>
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A"
+Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
+Subject: Apple HTML with attachments
+Message-Id: <7A536C16-FA0F-47AA-8FFC-F61761E7689A@kolab.org>
+Date: Fri, 29 Jun 2018 05:27:26 -0700
+To: John Doe <test1@kolab.org>
+
+
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+ charset=us-ascii
+
+Hi,
+
+This is an HTML message with attachments.
+
+Cheers,
+Christian
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A
+Content-Type: multipart/related;
+ type="text/html";
+ boundary="Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091"
+
+
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">This is an <b class="">HTML</b> message with attachments.</div></blockquote><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Christian<img apple-inline="yes" id="B9EE68A9-83CA-41CD-A3E4-E5BA301F797A" class="" src="cid:F5B62D1D-E4EC-4C59-AA5A-708525C2AC3C"></div></div></body></html>
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+ filename=kubeonosxscreenshot07.png
+Content-Type: image/png;
+ x-unix-mode=0666;
+ name="kubeonosxscreenshot07.png"
+Content-Id: <F5B62D1D-E4EC-4C59-AA5A-708525C2AC3C>
+
+iVBORw0KGgoAAAANSUhEUgAAAUAAAACqCAYAAADcOJb6AAAAAXNSR0IArs4c6QAAAZ9pVFh0WE1M
+OmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
+eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3
+LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlv
+biByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNv
+bS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjA0NzwvZXhpZjpQ
+aXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMDkyPC9leGlm
+OlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4K
+PC94OnhtcG1ldGE+CnDhDyMAAD0nSURBVHgB7X1JbyRJlt6LCI99Y3BnJslMZmZ1dVd1T68SBB3m
+JGEE3XTVSTcB+jmCfoEO0km6jCBBF42AUQMzwHQXpqu6tq7OyrUyk3vse4S+73kY6QxuQSYZTjKf
+VUX6ZmZu/gX9i2f2tsh//r9fD9dyQ4mWyzLwIhLJ5mTY3ZeIDGUYK0l1UJX2sCvz3oyIRCUSwfkh
+dkcl4naObEcVIrgaqHukypELrhdXGce4D/5B+9E22BinhoEq2lWgKnbdqWCrw3GPKujw3C15r4Mx
+AQf2hzM865fR0egEaoxO4zwroxzW9S+5c9oyUN2d11o4z+v8h1W07mjr77szrHS8uDa8MrrFqFLw
+yuiqq6CXeENXx10YNR1Vd0fjV/WrcRcPtmO1cBisp98X6h59GrbhmTPKqAo37jth7QP8R+0jo+/g
+jJ6OXGJ/LEfHw36PFr3naIijoWgFfT9Ge+4ZxtsGewo+5Vn1XJuT67uzrgd37Fq58+746JZXgy30
+eNTktJZ+m0O0j/bg+j9szf4Pj3iAoyBhuO9r1HSI65HRdb8tkWVBO///gzEf9Msu/RrYYg//n/z1
+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
+Ax7TQVF/KOtyAAAAAElFTkSuQmCC
+--Apple-Mail=_B5C06910-39A1-4BE0-A173-E19D0A86E091--
+
+--Apple-Mail=_4DD68C10-D3A8-44AD-A99A-639C610B861A--
--- /dev/null
+Return-Path: <test1@kolab.org>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.11-41-gd53406f3f-Kolab-2.5.11-15.1.el7.kolab_16) with LMTPA;
+ Fri, 29 Jun 2018 17:10:33 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx003.mykolab.com (unknown [10.9.13.3])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id DCFFB184
+ for <test1@kolab.org>; Fri, 29 Jun 2018 17:10:33 +0200 (CEST)
+Received: from ext-subm002.mykolab.com (unknown [10.9.6.2])
+ by int-mx003.mykolab.com (Postfix) with ESMTPS id C5438A48
+ for <test1@kolab.org>; Fri, 29 Jun 2018 17:10:33 +0200 (CEST)
+From: Kolab <test1@kolab.org>
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3"
+Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
+Subject: Apple attachment + signature
+Message-Id: <0EDA7426-FD89-4C6D-8B28-9ACA7544FA6C@kolab.org>
+Date: Fri, 29 Jun 2018 08:10:32 -0700
+To: John Doe <test1@kolab.org>
+
+
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+ charset=us-ascii
+
+Hello
+
+
+
+Regards
+
+Fsdfsdf
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87"
+
+
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><strike class="">Hello</strike><div class=""><br class=""></div><div class=""></div></body></html>
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Disposition: attachment;
+ filename=rebuildkube.sh
+Content-Type: application/octet-stream;
+ x-unix-mode=0755;
+ name="rebuildkube.sh"
+Content-Transfer-Encoding: 7bit
+
+set -e
+
+export CMAKE_LIBRARY_PATH=/usr/local/Cellar/gettext/0.19.8.1/lib:/usr/local/Cellar/readline/7.0.3_1/lib
+export CMAKE_INCLUDE_PATH=/usr/local/Cellar/gettext/0.19.8.1/include:/usr/local/Cellar/readline/7.0.3_1/include
+export PATH=/usr/local/Cellar/gettext/0.19.8.1/bin:$PATH
+export MACOSX_DEPLOYMENT_TARGET=10.9.0 #Minimum version to find the required type_traits header
+export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/
+
+. craft/craftenv.sh
+
+craft --install-deps --fetch --unpack --compile --install extragear/sink
+craft --install-deps --fetch --unpack --compile --install --package extragear/kube
+
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""></div><div class=""><br class=""></div><div class=""><b class="">Regards</b></div><div class=""><b class=""><br class=""></b></div><div class="">Fsdfsdf</div></body></html>
+--Apple-Mail=_FA5BEB3B-6B22-4219-964C-85261C367D87--
+
+--Apple-Mail=_9D1C74B7-3E22-4635-805F-B86CE5F663C3--
--- /dev/null
+Message-ID: <851f01d15e53$31734730$790bc9ad@info>
+From: "OculusLab" <info@findermanze.co.ua>
+To: <info@example.org>
+Subject: CID links for images
+Date: Wed, 03 Feb 2016 07:19:17 +0200
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ type="multipart/alternative";
+ boundary="----=_NextPart_000_000F_01D15E52.0BD654A0"
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
+X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
+
+ This is a multi-part message in MIME format.
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0010_01D15E52.0BD654A0"
+
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/plain;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+=0D=0A=0D=0A=0D=0A=0D=0ASuperkombipackung für nur 45 Euro=0D=
+=0A=0D=0A
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/html;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+<HTML><HEAD>=0D=0A<META http-equiv=3D"Content-Type" content=3D"te=
+xt/html; charset=3Dwindows-1251">=0D=0A</HEAD>=0D=0A<BODY bgColor=
+=3D#ffffff>=0D=0A<DIV align=3Dcenter><FONT size=3D2 face=3DArial>=
+<A =0D=0Ahref=3D"http://intenices.co.ua/drugs-store/index.html"><=
+STRONG><FONT =0D=0Asize=3D4>Superkombipackung für nur 45 Eur=
+o</FONT></STRONG></A><BR><BR><A =0D=0Ahref=3D"http://intenices.co=
+.ua/drugs-store/index.html"><IMG border=3D0 hspace=3D0 alt=3D""=20=
+src=3D"cid:9359201d15e53f31a68c307b3369b6@info" width=3D650 heigh=
+t=3D763></A></FONT></DIV></BODY></HTML>
+
+------=_NextPart_000_0010_01D15E52.0BD654A0--
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: image/jpeg;
+ name="aqnaozisxya.jpeg"
+Content-Transfer-Encoding: base64
+Content-ID: <9359201d15e53f31a68c307b3369b6@info>
+
+/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDov
+L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
+aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
+OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6
+MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
+bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6
+Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu
+Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo
+b3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjdCRTg5MTBD
+OUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjdCRTg5
+MTFDOUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
+dGFuY2VJRD0ieG1wLmlpZDpCN0JFODkwRUM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIgc3RSZWY6
+ZG9jdW1lbnRJRD0ieG1wLmRpZDpCN0JFODkwRkM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIvPiA8
+L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0i
+ciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwM
+DAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAvsCigMBEQACEQED
+EQH/xADJAAEAAgMBAQEAAAAAAAAAAAAAAwQBAgUGBwgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYQ
+AAEEAgEDAgQCBAgKCQMACwIAAQMEEQUSIRMGMUFRIjIUYXGBQhUHkaGxUiMzFhfB0WJy0+OkZZVW
+8ILSsyQ0lFU24UN1U4MlssJzhLQ1djcRAQABAgMEBQkFBwQBBAIDAAABEQIhMQNBUWEScYGRoQTw
+scHRIjJSYhPhQpKyFfFygqIzUwXCI2Nzk9JDsxSDNPLD0//aAAwDAQACEQMRAD8A/VKAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAg1y6Bl0DLoGXQMugZdBrIZMBOz9WZBpWkM68Zk+SIWd3QS8nQOTo
+HJ0Dk6BydA5OgcnQOToGXQMugZdAy6Bl0DLoGXQMugOT4dAYnwyA7ughaWTPqgkIyaNnz16INQkN
+3bL+6BJIbHhn6INozJ2fL+6DbLoI5JDYmZn6KDJGTR8s9VQiM39Xyg1GWRy6v0ygkMiYXdn6sghG
+aRxd8/yItGAnldupfxMoUZ70nx/kQO9J8f5EKAzSO3r/ABMhRnuyfH+RCg0snXqgNNI/v/Igd2T4
+/wAiDLSyfFCjDSyfH+RUZ7snx/kUBpTz6oMd2TPr/Igz3JPj/Igy0knx/kQY7smX6oMd2T4/yIMj
+Kb+6B3T5O2eiVKHdP4oUO5J8UqtGHlk5Yz/IpUoz3ZPiqUO7J8UKDynluqIy8h/FA7h/FKlApDZv
+VAaU/ilSjPcP4oDyHjOUGO4eG6oUZ5l8UGeZY9VUatIePVRR5Dz6pUoyxnn1QBkN3fqgy5l8UQYy
++KDcXd2fPxVGUBBqgICAgICDSb+qL8nQR0//ACkP+YyEpkBAQEBAQEBEEBAQEBAQEBAL0dAb0ZFH
+9HQQD6oJJP6pv0INY/Vvz/wIMS/1n8CCSL6X/N0G6CKT62UGS/qv0/4VQhQRh9Tfmglm/qyQQD9D
+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
+6/oo2w6Iy3oisug1QYRGW9UVsiCKwgwgICDCAgwgyyCnfiCRmYxYhJsOzrF00lu3Fw7Ol6u8J4b+
+aX+NI1Fmxz5YZIvkkbBN8PgukTViYom1sxMfa9Xd8MuV8OlsvSRBxFh+H8qwqYWVgSMqyytDUzYR
+cnfDN1d/wZQeQ2Ft7Vo5f1fQG/yW9F2tjBiZVSdlWXpfH6ghSad2/pJny7v8GfDKDqY9kG3p0Qbe
+35oCDP4INmUBAd8MgrkOCz8VpGweuP4FBszoMOzKg3wRWRfOVEbCitmUGyAoMICAgINx9EVlAQao
+CAgwgICDDogisIMOyDCDCBhBhAQYwgYQZwgccoMPGLoNeyPwZBloRb2QSMDMg2ZsIMogg1k+h0FM
+v6+D/Of+R1Wdq6/oo2wiMt6IrLoNVRhRGW9UVsiCKwgwgwgygwgwgINZJBBsv1z6MpMrEOfanPPM
+vpb1b4MuV0u1sNc8myyzRXK2kfUT/Q66acsakMaOtztFM/pE2G/zn/xLWpLNr0IsuTaRmWkbsqg6
+DjeQX+3C1YH+eX6/wD/6rdsJMudrNTLaxJJmOv8AH3L/ADf8a6ObuHq6nZEBiBhB+RM45d2/P1QW
+w6C2McW6fL6N+hBI2PX+BQFUG9VFbfigMg2woDvhkGj/ABVRgmz/AIFRoPq6Df2yorHtj4KoIp+s
+ojLP1RWzOg3ZQZ9lBrl1FMqh1QMug3D0/Sg2QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQRWbVWpAdi1MEFeNsyTS
+kwALZx1InZmQYK5TG2FMp42tyAUsddzFpCAHZiMQzycWcmZ3SPMSji2urmnGCK5BJOTyCMQSARu8
+BMMrMLPn+jJ2Yvg/qkYk4eXX5sVpSZpFRW12zo7LXwbGlL3adgGkhlwQZB/fBsJN+llq6KZm2nGn
+Zglq2q1uvHZqzBYryixRTRExgQv6OJDlnZJigRWq0ss0MUwSS13YZ4xJnKMiFiZjZuou4uztn2U2
+VEiAg5Nvy3xinParWNrVG3SiOe1TaUDsBHGHcMngF3l6B830+ibK7PKPOR70W7ZdSKWOWIJY35Ry
+CxA/plibLeqt1sxNJS26JisbWyiiAgIIq1uraAjrTRzgBlEZRkxsxxvxMHcXfBCTYdvZNlTglQEB
+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
+gkD6gLD9CH3Z0nKuw20ZrWq1qvHZqyhPXlFiimiJjAhf0cSHLOysxQSKAgIK02ypQ7Ctr5JONy2E
+sleLiT8hh49x+TNxbj3B9XSMa8CcIrxp559CygICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgION5nsL2u8V2l6g/G3Xrmc
+R45cMN1k4v68GyWPwUwmYicIm62J6JmInuWK40is0mkb5phHXLx/kwjrquz19C/Zu07vjuxtWgs2
+JLeCjABhmE5SNwaRpDbiLsL46N0V1MromKcs29VZnDu27uLWh71k1xm7tjfwph2tNtJd00FiGnet
+8bfjF66by2JZHCzVGFo5YeRYhfEz9I+LenToumvnqcLre+bq+aHLwsf0p34T2W+XnN1sdx48xy62
+3ZszWtBZvSNamksM1iucAtMAydwY8DOTkICwvj6VdSI5r4yiL7I6IuuuiceiOpnSmZtsuzmYu66W
+xMd+HGubt+JU9/X2wzTzwfsu1UeRoW2tnaSSysYOE8b2YYe2HEiYmB+PUejJdSImJzrGzLOvHdnu
+IrNJ8p9H7XK8mtWNLutvqKhPHL5dHC+rJv1bhENS0Tf5kJRy/od1zssi+OScou/kmt135buu6HW6
+7kmNThT+KPd7a06LUVvlU1HkloL9ija8ZJq2mpxTyRwxxw14yrCdcSaOfvkX/wBwSznA4wt88zy3
+Zzffj+OlOHs0nfjXczZZETyThbbbGP8ADWbuqa8PZ6Vye92rXl+z2dq+0GreLs1q1iSNou7Qi59s
+GIQzykd255ES+bo/VZiPZimMzfNvfbTy3LF2MTOyyLp6pvr5striW9hvtZftUCmlpwsOqtFD+07G
+xkjaTYhHIRzTsJxscb4IGJwx+lb06TdSdl8Rlvtuw44xGbN2Vd9l89lMeGc5eh293a3F7yPyHXan
+YM0kFfU4qlZKAXI5rBTwhIHJ4ZZohZuQjy9PwdYs92JnH257OS3zTjTpavwmNnsf6vKHm9luNpBs
+aBaitdju0G2cF+G5O9+esDDSOc60hnL9w4RnzASP6untxWraYzM+zNueX36eeM8cMcUpNKRHtRfF
+I2TPJdMfsw6s3U8kvxyUrRaK1bsNqNVFabZzbexVhYZBkOGZmBpfupC45LujwfDD8Vi+Zt5rqUpd
+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
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBBpPPBXgknnkGGCIXOWWR2EAAWyRET9GZm9XdJlYiuEI5r9GGsNqax
+FHWNwYJzMRB3kdhDBO+H5OTMPxVpNabWYmJiuxOoqhqt7rdqU7UDklCuXApnhmCEny4v2pTAY5cO
+Ls7xkWFaYRO8nCaL6gICAghu3qVGsdq7Yiq1o+sk8xjHGLfiROzMlViHP/tf4k1H9oftuh9hzaL7
+v7qHs9x2d2DucuPLDP0yrNswzE16l6hsdfsao29faiuVTzwsQGMsb46Pgwd2dJiYzImJyVZvJvG4
+KA7GbbU4tecjwhcOxEMLyM7s4NI5ceTcX6Z9lN3Fd/DPgqD574MYmQ+RawhjblI7Xa7sI5Ycv8/R
+skzK8spzQsz+V+LV6le7PuKMNO3n7WzJZhGKXD4ftm5cSx+DpNs1ptImJiux0YZoZogmhMZIpGYo
+5AdiEhfqzs7dHZ0mKZrE1Qa3aUdnXezRk71djONpeJCJFGTiTg5M3Ict0Iej+zpTCJ34m2Y3LSgI
+Kmz2+p1VdrO0uwUK5EwDNZlCEHN2d2FiNxbOGfonAba/Z67ZVmta61DcrE7sM9eQZY3dvXBA7srM
+TGaRMSsqKjmtVoCiGeYIinPtQMZMLnI7OXAM/UWBd8N8EjcJEFbY7Klrar27snarsccbnxIvmmkG
+IGwLO/UzZkjGYjbJsmd0V7DY7Klrar27snarsccbnxIvmmkGIGwLO/UzZkjGYjbJsmd0V7FlAQVr
+OypVrVSpPJwsXjOOqHEn5lGDyE2WZ2bAC79UiK4cK+aPTBM0ivGnl2LKAgIKG13+h1DRvttlV17T
+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
+0bkDbJqkdTZ3ZTijEasgQyWP/CyGfIjL5my4ceTlhlrTnGZjPl3fPuyypE8eLN9s8tNnNG35Lq49
+VY3Y0b2r22raDZbSK5Odo95PrnkntyxQQVD2Hbdmw0oRszNxaXtkQM/TDLFkVjTj4ox405qds0jj
+ludL5pN8/Dy067bK9lZnvpnWeCPybVb7VQXLQwa+xsYWClHsrOxkHnUtcmlmsxwyPHIYA4AXJuTP
+hbtmJmm2l2z93vjGd9GJieWZ/d/Nn30bQbq5L5IbR35JKY+TvUdhlJ42jbUs/Z6Px49/rx9Of4qa
+cYW8bb/zzTu7l1MJu4fT9FUU+yuXtvPWi2Vhqp+UjScq85jiFtWxHAJC/wAo91nyzehdehdVNOKx
+ZXbbqfmup9i3zSb+EaffNtW0Fu8+0fxqS9aDVftuWn9y9iX7nsjrwtx1/unLvfNKb/Nz5YbjlW2O
+aImfhvnri/lj+XzY7Wb55ZmI32dVbce+Ij+Lodrw7YVarbuGzsikrQ7gqVKS5ZKZ8vDCwQDJMRET
+8ydmHOc/ipnZbvnm66XXeiOwmKX3bo5fy2+l65YaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBpPBBYgkgnjGaCUXCWKRmIDAmwQkL9HZ29WdJh
+YmmMIj1uukKsUlWEyp5+0Ioxd4cjwft5b5Pl6dPZWZrNdssxFIpsV6njvj9OCzXqaypXr3Mtbhig
+jAJmJnZ+4IizHlnduqkzWKbFjCa7Vn7Cj3Hk+3i7jxdhz4Dnst17ecfR1+n0Sca1258SMKU2ZcPK
+jiTeDaGzvW2VunVs14qcFOpRlrRmEPYkkMTj5ZYeknFmYWxhatvmKztma1SYikRsivfTzUdXY6TS
+7PtftKhWvdh+UH3MMcvAviHNi4v09lImk1jNdlNjYtRqT2AbI6UBbGMHijuvEDzCD5yDSY5sPX0y
+pGFeOfEmMuGSGt4147VjmiraqnBFYMZbAR14gGSSMuQGbCLMRCTZZ39HVrOHDImMZnesTazWzvYe
+apDK9uNobTnGJd2IeXEJMt8wtzLDP06upsoVxqqy+L+MzVa1SXUUpKtN81K514ijhd3z/Rg44Dr/
+ADVeaa1rikRFKbF61UqW4HgtQx2IHcXeKUWMHcCYhfiTO3ykzO34qbarwRWtTqrcry2qcFiUoirl
+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
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBBX2Owqa6hYv3JGiqVYymnlfL8QBuRPhuvoykysRWXJi8qleGeezp
+b9KvFAdkJrL1AjMI25O3NrBDE7t1/puH44w61dFM/L0Jb7UxTb5dPcvyb/SQ2KtWxfrV7lwRKrUl
+miGWTl6cA5ZP/q5V5ZrMRsZi7CJ2Ss3b1KjWO1dsR1asTZlnmMY4xb0yRE7MyzVuIVD8l8cCpFcP
+a0xqTAUkNh7ETRmEbsJkJ8uLiLkzO7emVeWa02+vJImsVhuO+0ZSyQjsapSwjJJLG00bkAQlwlIm
+zlmAvlJ39H9VNldh6f2oYvJtNZjqy0LUF+vbsfahPWnrnG0nAjxl5B5PgfpDkX4Yy7XlmtOFexKx
+SZ3fsVdz5jqaNK1NVnr37FKevBbqRThziexOEGZGHm4ceecO3XCWxWbd100qs4V3xbM9kVdGpu9L
+cqzW6d+tZq13IZ7EM0ZxxuDZJjMXcR4t65UnCKzkRjNNqKLybxuamN2La05KZG8Q2QsRFE8gi5uD
+GxceTCLu7Z9FZiYzIxyW6GwobCqFuhZit1ZM9uxAYyxlh8PgwdxfDpMTGaRMS1/ams7Pf+7h7Pd+
+37vcDj3ufa7XLOOfc+Tj68unqkRlxWcK8EIeQaE7wUA2VUr0jmIVGnjeUiid2kZo+XJ3Bxdi6dEi
+K5E4Zsx77Ry7I9XFsap7OPLyURmjecWZsvmJn5t/AkRWKxkTNJpKz93U78lfvR9+IGllh5NzGMnd
+hMhzlhdxfD/g6lcK7Fp3qNjyjxqtFHNY21KGKUI5YpJLEQiUcue2Yu5MzifF+L+/sryzWm1K4V2K
+5+ZeOx+Sf2dluxRbJ4opowkliHuPMRCMYM58yk+Xlx4+js/ults3Vps/b3bUumLaV+99nnrh0Sth
+5F4+c9qANnUKeiJSXomnjc4AD6ilHlkGH3clNldi0xptbRb3STEIxbCtIRzPWARmjJ3nYO48TYfq
+fD5uPrjqryz5cM+xKx5u/Lt2LyiiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgp7mOrLqrcVuqV2rJEQT1AHmUgE2CFhy2css3RE5tWz
+MTg+eXK20OltaOgfb2dGeovR2KmzgsM4WHiYa0dV7cYWpCL5mdmchxj3wt31m2ebhTfWuOWym80a
+RfZTD2sd1P20yRj47dkl2ut21jcwR7Y4jgjoVa8sM0X28YAJWDqzFXkiKNx/pJQZuhMu3NHNhnbf
+M/zTdE8cKccKbnCyJi2K5TZEfy0mKdNZ3Y76vTeeUNjMekt15LYVKFspbhUYorFkGKE4wlCGWKw0
+nAi6sMblh8t6LjZNL6z8Mx11j0RMfZV0mPYpG+OyK+mk9W+jl6XQDF5XqdhCOwuV5v2lamubGuEJ
+DNMFUGfthDX7PPtlhijEnfk/XOVu2aVjCPY/119KXYxX5o7rbo9XcgtaHbSeKbMK9eeGZ/IJr08c
+McbWJqwXnk5RjOJBI/BmIGIXYsYWbJpGnXZGPD3vTMTv2w3fFZviNsW0/DZWOvGN2/ahtaGzat09
+jrrG2uWrV+EZ7mwqjV7XZqWwCTshXqGzCUosUhhh/lZn6KXRNKRSK239s2xHoS2YznGnL2RfbPrT
+WKr2f3f1NGGnsjsNf+z4bcB1ZOLOFqDv8JHHhMJcCMijcmx1LC63XROrbfHu80dUbursYtibbLrZ
+xu5buueWcevtxZ8u0e5s7ndHRhsDWcNLPI9eMHKYa1icpxhaYThkkAGAuLs+cM2OrLnpzSImf7l0
+9tkRE/i82GMNXxXCPgp/NWnXFY68cGv7CazttZtIS2uzebaVSuTbKoFZhGtWtMJ9ka1Qm4vILPIY
+Yf5WYui3ZPLdGUR7c9c2xHoScbZ30tj+eJ9b0/ilWzX2Xk3dhOGGbaPLWchcRMCqV+RhlvmZ5GLq
+3vlYj+nbH7357lu9+Z4W+Z5axFsIta2kbXXZLgeSRXDkCvK8DVj2jWWmabHbIe2/zMLuQ/rMzM7r
+WjnZPw2zE9PJdHl6zWyv+aIp/KmfT3h0U3CjKNovKht9IiaR4f2oLvN0bPDs5fl6cfwU0p/p12W3
+flv+w1cfqcYtp1RZ6YWNBFfp+Rw0deNqxqHs2rFuDY0DhemUvcNzr3XGMJecp8eLOZcS+rDJpzW3
+HZbERv2YTHR5jU97DObsd3T5b9i9tTsa7yzYWypWrMOx1kNeo9WCSZnngknIozIGcYstMOCkcR/F
+cborp327Zx/lp5bdzrbPtWTsivnhyPDtJcjep95QkBx8UoUyeaImxKzy92H5m6G2W5B6+mV38XNY
+1qbbsOOEuXh8J067Ju89rXxqttqRatrNe3BPe8ao0IrH280nZuQ9xyGdwEuy491nzJhvXqr4mOad
+WLc7prHZdtTRpbGnMxhbN1eubaeZyg8ctTeKfZznu5dvqdZbiDWyVII6wTSU5ICGOeKrF9wJkXys
+ExkT8XJvVTWuia3W7cONKxNKcKbqbmtCJi62Lpyuiftr1znNccX0FhpVKugrzaqSwbFHHWKOuJjT
+kaAv6U3fHZHDOHJvd8e6upNdWafNj6OvvcdOKaVtY+HDjv6ncXJ2EBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEHLk8m00E1kLdqGpHWk7Tzzz1xApBi70gt/SOQlGHzExiL46+nVemPCakxE2
+xN1caRE76Rs2zlSu7NOaK08q506aY9DleSfvH8X02toXG2VGd9sbR6lztwxQTZ9ZO+7kLRB+sbM/
+szM5OzP6fC/4rX1b7reW6OT3vZmZjhTfOyMOyJlJvti3mrh5R+3dDqavyGhasNrbFyiO/jj7lzVV
+bY2Dib44cYZXH/KKMV5tbwt1sc8Rf9KuF020r5475SLt9Kyjv+SjDLLX1+vt7m1XdhsQ0WhZo3fr
+xKWzLWg5Y6uDScmbDu2HZXS8LzRE33W6ds5TdXHqti67rpTi1M7NqTXeS6u5rJ9hIb0YqZnFfC5x
+hKvJHhzGbLuLYZ2fkxOLs7Ozuz5U1fC323xbHtc3u8uPNXd5Vrglt1ZmNseqvmxUtf51othsrMVS
+3Wm1VaKs/wC1wsRlAdi0ZiFcCbIkXEGf6v1mbC7av+O1dOyJui6L5m72eWa0tiK3eW6U+pbWkT5V
+pHbNfKXVrbzSWoJJ6uwrTwQxtNLLFNGYBEXLEhELuzC/Aur9Oj/Bea/w+pbNLrbomZplOe7vatmJ
+mkZ+UeeJjqRX/J/G9f8Ab/tDbU6f3bcqnfsRRd0cZzHzJubY69FrT8JraleSy67lzpEzTp3HNFIn
+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
+uv1Zw1tS2JjdZE804ZxHuxHCJoxFl0W2x712N08bojCv7113c5uy8ad/EgnoXPIdjDSb7aCtaoRV
+pIBuO1S3OEMNGrdmkjrzSHluXJ+vzEvTpeK/36XW6Nk3YzMXzdE8vtW21nUusiJuiI2U4QzbbPLW
+JnmtrdH71JiJxzzrtq+s0Pt/sa/2wFFW7QdmMwKIhDi3EXjNhMHZv1SZnZfmNSvNPNjNenv2uunE
+RbERknWGxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEFbZavWbSlJQ2dSG9Rm496rZjCaI+JMY8gNiF8ELO2W9V00ta/Tui6yZtujbE
+0nthJiubhf3Yfu1/5S03/D6v+jXt/WPGf3tX8d3rZ+nbug/uw/dr/wApab/h9X/Rp+seM/vav47v
+WfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07
+d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3QP+6/
+92js7P4npsP06a+q38kafrHjP72r+O71n07d0Iav7pf3X1gIY/FNUTE+X7tSGZ8/g8gm7Ld/+b8b
+dnran4pjzH0rdyb+7D92v/KWm/4fV/0ax+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3t
+X8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3r
+Pp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3Qf3Yfu1/5S03/AA+r/o0/WPGf3tX8d3rPp27o
+P7sP3a/8pab/AIfV/wBGn6x4z+9q/ju9Z9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbuhf0
+/h3iGlsla02j1+stGDxHPTqwwSPG7sTg5RiLuLuLPj8Fx1/H6+tHLqal98Z0uumfPKxbEZQ668jQ
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgqjttUQAY3IHCScqoE0oOxWAJxKFnz1kEgJnH1yzrp9G/wCGcq5bN/RxJmnV5emGo7rT
+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
+3rPp27oP7sP3a/8AKWm/4fV/0afrHjP72r+O71n07d0H92H7tf8AlLTf8Pq/6NP1jxn97V/Hd6z6
+du6D+7D92v8Aylpv+H1f9Gn6x4z+9q/ju9Z9O3dCWr+7r931SzDaq+MamvarmMsE8VGsEkcgPyEw
+IQZxIXbLOyzf/lfFXRNt2rqTE4TE33Y968lu56FeBoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEHwOx5Z5NPMcpbS0Lm7u4xzGAtn2YRdmZl+ijw+nEU5YfBnXvmc5R/wBpvJP/AHa5/wCo
+l/7Sv0NP4Y7E+tf8U9p/abyT/wB2uf8AqJf+0n0NP4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D6
+1/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8A
+drn/AKiX/tJ9DT+GOw+tf8U9p/abyT/3a5/6iX/tJ9DT+GOw+tf8U9p/abyT/wB2uf8AqJf+0n0N
+P4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D61/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2
+m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8Adrn/AKiX/tJ9DT+GOw+tf8U9q/s7PneraMr9u/XG
+XrGRTyOz++MsTtn8Fzst0b/di2ep0vnVtzme1VLd+WjWGyWwvtXMnAJnmm4OTerMXLGVv6WlWlLa
+9EMfU1KVrNEX9pvJP/drn/qJf+0r9DT+GOxPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8
+k/8Adrn/AKiX/tJ9DT+GOw+tf8U9r0n7vfI95N5RWqWb09ivYGQZI5pCkb5YyNnbk74fI+y8vjNG
+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
+pf3c/wDzPX//AK7/ALiReTxv9KerzvT4T+pHlsfbV8F9oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHzqf9z0JTGUG0KOJ3dwjKHm4t
+7M5dwc/wL6cf5KaY29750/4+K4Sj/ub/AN7/AOz/AOtV/Uvl7/sT9P8Am7vtP7m/97/7P/rU/Uvl
+7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v
+/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P
++bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU
+/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77
+T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/
+7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtdbxj928O
+k2obE7z2pIhJogaPtszmLi7v8x5+V3XHX8bOpby0o7aPg4surWr2a8L2CAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAg81e2k4bO1Bc2MmpjEhGiXaB4ZGcWdzOWQDbPJ8cWIVLcemq3YTwWp/IJ42tzQ1WsUte/C3Y7n
+A3cWYpHij4kxcGfrkm/BWu2cImfs86RGzOaObb2F79sSDBMZB+0K4RxvIQg4lTc+D4zgSLq/T8VL
+axH/AJO6PQzM17LfzJaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK3dnEcPRDUbZ4+mU1b
+yyW5NDWp1Yp7EhzAZDYZ4WeFgLIyiBchIZG/Vz+CzGPZXvokzTy4OrrNi9/XDaGLhI/MShd84kjJ
+wIeXTLch9VLpwrG6rUZ0nZLj6baTWZoQtbSSHYvkrGrlhjib0fIxcgE34+vLmSXTERMxjgzPHDFF
+B5pG1ODrCU/24zzfd2Y4CflniIYjZjN+P80W9Fq7Du81ViPPPno7w3pbGthu0YwkaYBlAZzeJmAm
+5dSEJerN+Cl8csls1UNV5FPdsV4pagwjaGY4ZQleQSCFxFjbIRvg+XT8PzVjHsie1JmnbRQs+TMN
+3W2jY44j+9h+1AnJ5ZIpBijZm+VnIn9PhlZsmteNsU65W7CZj4bvRLo/tC5PalrSMdOavUaxIMRx
+yNyl5Mw5OJ+ocOjt0+LOpdNIun4f2/YtsVutjf8AsQQ+SXZghatSGUyox3jeSbhhj5Nw6Rvkvl+D
+N+S1dNOadlv7WbMaRtmvc5m122ztzy2qeQrQ6wb1dvuJInZz5FzMABxkceGOBPx/hUuw5uExC2zW
+kb6+h0ZfILNIaUuxHg0leaYxgNjEu2MbjnlEBcic8MzOzN+Ptu6PauiNn/qozZNYifLKq7T2189m
+FC5TCucld7AkEzy4ZiEeJM4B1+b2d1N/Bd072m12ttjuVKEDSyVoHksTHK8TBzZ+DBgDciwLv7N+
+K53T7My6WR7UcXNr+S/Y1az2jKR3oVJGeSQBEpZicMkRDyb0yREbtj2XW7O796ndMuVuUdE+j1pG
+82heT7dhrFY7gg0gWmKrgwImd52Do/yO3Hh6rMY+XR62pwSWvLftzeGSOtHajj7s0c1sIxdnd+Ax
+E4v3HIRz6N6tlSufDtWIy4n9rZDhtW4KTHRqDFLLKUvE3jmjGTIhwLJCxdWcm/Napv8AiozE1yzp
+Xz+pd8mt262llmpS9mw5QjHLxYsdyUQd8Ezt6Es0nmiN8rF0Urwq5ZeUywlTktl2xhitNsoBYXfv
+V+DMzO/plyyPX3VrEzMxlSKdd1PsSk5ce6kykDzSN7EcJRwSObxu51rIziASSDETm7AOCEjHp6P8
+VYis08tvqJmkV8vKnmT/ANrIn+4YaxOcNoa0Y8usgETs8o9Pbtn0/BZrhE9PdHN5qNTGMx0d8086
+lc8huXtK9qAI4YTKuQzV7PckDlPG3bkFhBwJxJ8szv8ABaiPbtifihi6cJpulOXmdcp2CFq5xnM9
+aJnsi07nycBJ4WEnYHP3znHXisTNba8PtbnCtdirW3fkp6vSzuEBHcnEDN5cPKzgb4MWhxH9PqOV
+0p7UR8voZrhPT/qot3fMq9SWcDavio4haB7IjK5YZzaGJxzIw59+OfZZjHtp6FmJ66OjqtpZvyWH
++2GKtBLLA0rycjIoj45YODdHb4l/jSMoneld3lhVVu+R2a82w40mkraxw+4leXiTiYCbuAcHy4sX
+o5N+aW4xEzvotNkbq+f1MFv5Q2dmjFGViyU4RVojMQDDwtKZchDkIi3rnk+fRLcY67u6nrSu3hHf
+X1IZdluY95MwVmN46ISyVSncYmdpJMkDsBZcmbpkW/HCkTS26d0x5lpWYjp9CSludlc3UY1wjfXT
+U4LIiZ8TFpSLJYaMsl0xx5Y6eq3Ee9XZPoZ5q06/Qu7LaWq16pSrVhsS2hlJnOTtCLRcX6uwm/Xl
+7MsVz4RVpSpeUnP9nLPU+3qXRkeOV5GIhKEXI+QMOOPyvh+WfwZWcK13V6vKSk99FC55lFYoThE8
+UZWa1gqpwWRknjIIiMe7GLM8b4b2J8Os31px+2FtnGN1V6PyG1WrENyqzSR0Suwu0vN5BiZuQm7g
+3AurenJb1ZpN3CfPLGnGFvF1adyaSk9u3ENYHHuMLH3HaPjyyXyjh/wbP5pqezWuxbPapTa4Tec1
+nDuNHAYyQyzQRxWRkmbtRvIwzRsP9HyEX9HLDrMzRY9KWfZbiTaaoo64g9iKwY1vuCYCHjG4lK7B
+0ccv0YSWqUuujdHpZrWInj6JTl5JI+vr3BhgiGR5Am+6stAISRFwcGLgfPLs+OjLMzt4VbpnG6aO
+Nd8k2ExPe1xOAS1KhtFIfyi8loozw3Exd3+nOPTqt2x7VPmt77asTOHVd3Uda/5S9KYq0oVQtwxN
+LYjlttEPzZ4hERxs5k7Nn6RZvisVjHg3TLi0/tbIcNq3BSY6NQYpZZSl4m8c0YyZEOBZIWLqzk35
+rVN/xUZia5Z0r5/U62y2P2UEU/b7kZzRRSPnjwGUmDn6PnDk3RTbEbyvszPCrmP5bBiw/YduxaGu
+OSwxxu7s8zdPRu2fT/JUicInp7o5vNRqYxmOjvmlO1NV31mUqZWKfYq7DP2krSczzxcwaUOI8OQM
+7tgiS+JiJj71Ert2OFqvIZacUFi5Ocolr6/EZZcCU0k8g8iI3w3RvmJ/ZludvTb+WqbfxeeHSDzD
+uSNXhghsWnnjhb7ey0kOJQMhLusDejxuxNx/hWYxmnT3EzTy40dfVbE7g2BliaGxVmeCaMS5jyZm
+JnEuIZZxJv1WTZVZwmil5PsR1466xJM8FdrY/cEzuzOHakdxdm+rqzdFLZ9qOiSYw7PPCjtNvsAk
+q2jCSmz1L032wyNydoxAo3NnEgY8eziXFMuboj8xGNP3vRLo0dzauETVqvcrQOMc85SMJ9xwYiYA
+YcFx5Nl3cfwV1YpE9fcls4R0Q5mh8nZtEE8rHYhpV+V64Z5fu+oxDy+snz16szLV87ejt8tqxGNO
+M9mLcvNoxGRuzBPMIBJGFW0MzOxyjE4mTCPAm7jP7s/xUiKzEcadqTNIr09zr6/ZTz27NOzAMFms
+0ZuwSPKBBKz8XYnGN85F2dsKRjCzhPS5V7aThs7UFzYyamMSEaJdoHhkZxZ3M5ZANs8nxxYhUtx6
+ardhPBvY8nClbtV5TEpGmjhheeWOGH5oWlInPhkBb8eT59FYmsdd3dT1s+qPT6nR024i2laaQGBj
+gkKGTtSNLG5MzEzhIzDyZ2JvZlnU92vCVjOjk+Pbq+Ot1Q3oneO6zxRXHl7kjyMJE3MXHpyYXw/J
+/wAWW9Se3lr3eUplWfm9PlDXT7zeXLcbRBHLAdKOdhnlYS5EZi5OUcGHf5cYwze6l2Ft07qflqbY
+6+6WaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK1dnEcPRCxtnj6ZdfTbiLaVppAYGOCQo
+ZO1I0sbkzMTOEjMPJnYm9mXPU9yZ4SRnRxPF99sf2dpob0LkF+MwhuvM8kpSALn/AEgEPTkIvh+b
+/iy3qzSu/lr3R60yrOzmp3z+xFX89iajX6wFZ+2GxP8Ae24q5PzzxAHGNmM3YfYBb0S7Dqp5olYj
+Zxnz0dbT+Ry7e3INWqzUomiIrMkuDcZ4RmHjGwF1blh8k35+ycuFeMx2MxdXy6fU7ajQgICAgICA
+gICAgICAgIOVsdXs7kdis94BpWWcTB4OUogTYIQk5sP5O4OpSua1pkryeMmMVipVt9jXXMfcQPHz
+k+lgPtycm48xHrkSWpms47699fOkYZbqehIfjglfe00/EfuorLR8PRooHh4Z5e+c5Ujj838zPL6O
+6ao4PG7UFWrFHdFpNeblQm7PUQJnYglbniRnF8dOKtZwnbSnm9TW/pqthq7RX6l2zaaWWsMwuIR8
+AfvMLfK3InFm4e7l6pGEzxinfVJival1utKjRKsM3IiOaRpWFmw8shH6O5fTyWaezEboo196Z3zV
+VLTX7M9Q9hcCeOmfeiGKDtEUjC4s5k8h+mfQWZJjPomO1Jyog1/jdrWjH9jdEJOyENnuQ8wk7bvw
+NhaQHEmYnb6nb8FqZ9Hmp6D7e+ar+21tm9rHpR2u0R8RlmIOfMG+oXYCixz9Hw7KTjKxNFYtPsSl
+q2RtwR2qrHFG4VyaLsyMLce28zvlnBnZ2L9CbZnfmzTCm5WHw+A4a8Nuf7iOFrTHkGEie0bHyZ2f
+5SB26OzfwKRFOyI7Nq7a75r3UStoNiJtKOxZ55K7VbMxQ8nMBJ3Ax+fAmzE7O75Z/gl0ViY+JbcJ
+idyTX+PfaOD/AHHPjRjo/Rj+rcn5/U/ry9P41b8Yuj4vVRLPZmJ3V75qjg8YCOEoTsOYHrg1xYHi
++A5Zkbq/ry9EuxieMxPYlkUmOFe9Hd8bls1IRu2O/wDa15oWaCLgRsYhxduUhtzF48/B/wAFbrsZ
+u2z66rbFKRs+ynpNVW2cu7a/ZkeWKOo8DG8BVsmRsWOBkZO/y9X9Pgm/jT0pOyN1fQtXdLZltWZ6
+ltq33sTQ2hKLu54s7CQPyDiWCx1yyxMViY3txdjE7lUvExIYX+6cZa9avBBIINkZKxOYy4d3Z856
+j/Gt1xmd817qeliIwp0+j1Lk2u208PCa5Xkd3+eI6vKAhx7g8nPOffnj8FJWFXX+Mz6zBa64MRGH
+GyMkPOMnYiJiAROPhx5uzNl2wnDZ9lCd6afx4pa+1iK07lsxEXkcGyDjE0eXZnFizxz7JsiPmr3x
+PoW2aTXhTz+tb2mt+/oPU7nbyURc+PL+qkE/TLevHCtfaid01Yi2ltOFHP2XiVS/tDunKQBNAUM0
+It6kTMzSMWehMwt7ezLNuFePrifQ3M5eW/1ynm1Gwt6+enevDK0kXbjOOHtuxerSHkz5Eztn5eLK
+3Y9NUjDoRB4xHHZ19iOw4lRgeF24s/cNhIQkfL+ovIb+/qm2ZjbHZ5Rgbq769PlKCbxKSxJJNPZi
+awYgHcgr9piYJglcpG5lzJ+3jOWx8FbcJieMT2ftS6KxThPevUdRcpE8MFxm13cKQYHizILGXJwa
+Xljjyd/UM491mmFJ3UWc671aPxy3HQq1Auh/4CYZqMjwu+GHk3GVu58/ynjLcVqs1idsRTuoUjHj
+66rEWov17E0la6MUdomlsxvDydpcMJnC7n8nLHoTEpG7YTjjtWdZrvsY5w7nc708tjOOOO6blx9X
+9M+qR7sRuhKYzPlkqWtB34tuHf4/tVhbPDPb4xtH/O+b6c+ylPZiPmr3xPoaiaTXhTz+tHL44b3p
+b8Nrt23lCWAnj5CPGFoTAh5NyYxb4srGEdvfT1MxGFOEd1fWsR6ib72W5PZaSWas1YmaPgLOxkXJ
+vmfp8+MP/CpMezdb8Xqo1bNLond9nqQ0dBPRnpywWhfsVY6c4nE79wInyxDgx4F1f15LVcZ4sRbh
+2967Y13e2dS93OP2oSh28Z5d3j1znpjh8FmIz4xTvanZ0qEHjIR1tbXkn7gUO8xtwx3GmEhdvq+X
+HP8AFW7H8NPN6lr+avn9bI6K/wDs2TWHsGKm8B14f6Fu6wkDgPcPnguLP7COfipf7WeaW4Tg2u+P
+fcszfccMUZaP0Z/rWFuf1N6cPT+NXU9qZnfTumpbhFsfD6qOkFUGpjVk+cO20R+2W48X/hV1Pame
+KWezTg5Y6K/+zZNYewYqbwHXh/oW7rCQOA9w+eC4s/sI5+Kzf7Wea24Tgtfsn/xmvs93/wAjFJDx
+4/X3GBs5z0xwW5u9q6fi9dWYtpERu9VFCLxiavLDPXtg08XfblLD3GYbEry5BuY8THOOXXPwWIik
+U4RHY3dNZmeNUUfhvCo8H3juX28cAydtuhRTlOJu3Lr1LHH+NaiaYxvtn8MUZmK5/N/MvfsnZBbK
+7BdijszgMdtngcoj4O/AhDusQEzPj6nb8FPMstZ/Hilr7WIrTuWzEReRwbIOMTR5dmcWLPHPsmyI
++avfE+hbZpNeFPP613Za8b2smpEfDuhwGTGeJN9JYy3o7ZUuxZsikU4Uc5vFK3foSFK5BUgeCWNx
+6TO4kLGT56O3cN/0qzSZndMU6PKMFjZvia+XXikq6GxGdMbFzv1dfn7SJo+B54uAvKfIufEHdmwI
+pdjWZzmKJTCmxUi8OEIoh+8dpa8EMUEogzOMkEhSDJhyJn+rDj/GrX0d1vL3lPT3zXuX5NTesHVk
+t3AM6tgZxaOHtg7CBDjDmZZfn1fl7eiRhNenvJisU8s6oz1uxr2DelNhrt0bFmTiP9HCMbCQMxcu
+Tk8bNlm91LcKRsx/Z39y3Y1nbSI+1Z22pi2TVRldu1XmaY4yHkxswEDg/VvXmpTGvCe82eW9zj8U
+kOAK5XnKKGGzWr8o8kMVgREWIuXzdvj+lJxrXOYjumpGE4ZVqtUtLZpSm1W2wVZnE54ii5F3GFhI
+oz5YFj4tlnEvwVv9qvGvekRSI6PMpQeGQQ1RrDYdopIPt7zCDD3uOXjkbr8hg/v16dFZn0dsUxX7
+eydi3Y02yt0nq3L4yNmJxIIOGe3IMmTyZZJ+GPl4t19Eifaid01SYwpwXIdf29pZv9zP3McUfbxj
+j2nN85z1zz+CkYV6fQt2Mxwj0q2x1ezuR2Kz3gGlZZxMHg5SiBNghCTmw/k7g6lK5rWmSu/i7BaK
+3Vs9mwMkclYnDmwMELQEBtybmxC3xZ1qs9899PUzEYU4R3V9br1orQRO1mZppSd3cgDtg34COSfH
+5k6zdFYosOTrvHLFcKMNm4M9bXZKvGEXbdzcXFiMnM88WJ8MzMrdj00okx56+lnW+OT6+WqcFsS7
+Ncathjid+4Am5s44NuBfM/ryVnGsbJp3RQp5575aweN2oKtWKO6LSa83KhN2eogTOxBK3PEjOL46
+cUrOE7aU83qXf01dMfvYKkhzO92x1fhCIRZ9uICZ4b/rH+lZvisUIeaqUNhXq6aD9mXS/ZBEXL/w
+TdzlGcfp92/H68+6t/tT/Dy+b1GyY33V75lX1ms3mqCL9nU7YSdgILXdjpyBJ2nfgYi10HAmYnb6
+nb8FZmvd5oj0H2981drRRXYtlemnp2o2vPGZSz/aswvFEMfXszSO7lxz0BmSMLacZntSmNeHr9bu
+qKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+D//Z
+------=_NextPart_000_000F_01D15E52.0BD654A0--
+
+
--- /dev/null
+Message-ID: <851f01d15e53$31734730$790bc9ad@info>
+From: "OculusLab" <info@findermanze.co.ua>
+To: <info@example.org>
+Subject: CID links for images
+Date: Wed, 03 Feb 2016 07:19:17 +0200
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ type="multipart/alternative";
+ boundary="----=_NextPart_000_000F_01D15E52.0BD654A0"
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
+X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
+
+ This is a multi-part message in MIME format.
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0010_01D15E52.0BD654A0"
+
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/plain;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+=0D=0A=0D=0A=0D=0A=0D=0ASuperkombipackung für nur 45 Euro=0D=
+=0A=0D=0A
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/html;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+<HTML><HEAD>=0D=0A<META http-equiv=3D"Content-Type" content=3D"te=
+xt/html; charset=3Dwindows-1251">=0D=0A</HEAD>=0D=0A<BODY bgColor=
+=3D#ffffff>=0D=0A<DIV align=3Dcenter><FONT size=3D2 face=3DArial>=
+<A =0D=0Ahref=3D"http://intenices.co.ua/drugs-store/index.html"><=
+STRONG><FONT =0D=0Asize=3D4>Superkombipackung für nur 45 Eur=
+o</FONT></STRONG></A><BR><BR><A =0D=0Ahref=3D"http://intenices.co=
+.ua/drugs-store/index.html"><IMG border=3D0 hspace=3D0 alt=3D""=20=
+src=3D"cid:9359201d15e53f31a68c307b3369b6@info" width=3D650 heigh=
+t=3D763></A></FONT></DIV></BODY></HTML>
+
+------=_NextPart_000_0010_01D15E52.0BD654A0--
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: image/jpeg;
+ name="aqnaozisxya.jpeg"
+Content-Transfer-Encoding: base64
+Content-ID: <9359201d15e53f31a68c307b3369b6@info>
+Content-Disposition: attachment
+
+/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDov
+L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
+aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
+OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6
+MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
+bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6
+Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu
+Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo
+b3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjdCRTg5MTBD
+OUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjdCRTg5
+MTFDOUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
+dGFuY2VJRD0ieG1wLmlpZDpCN0JFODkwRUM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIgc3RSZWY6
+ZG9jdW1lbnRJRD0ieG1wLmRpZDpCN0JFODkwRkM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIvPiA8
+L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0i
+ciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwM
+DAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAvsCigMBEQACEQED
+EQH/xADJAAEAAgMBAQEAAAAAAAAAAAAAAwQBAgUGBwgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYQ
+AAEEAgEDAgQCBAgKCQMACwIAAQMEEQUSIRMGMUFRIjIUYXGBQhUHkaGxUiMzFhfB0WJy0+OkZZVW
+8ILSsyQ0lFU24UN1U4MlssJzhLQ1djcRAQABAgMEBQkFBwQBBAIDAAABEQIhMQNBUWEScYGRoQTw
+scHRIjJSYhPhQpKyFfFygqIzUwXCI2Nzk9JDsxSDNPLD0//aAAwDAQACEQMRAD8A/VKAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAg1y6Bl0DLoGXQMugZdBrIZMBOz9WZBpWkM68Zk+SIWd3QS8nQOTo
+HJ0Dk6BydA5OgcnQOToGXQMugZdAy6Bl0DLoGXQMugOT4dAYnwyA7ughaWTPqgkIyaNnz16INQkN
+3bL+6BJIbHhn6INozJ2fL+6DbLoI5JDYmZn6KDJGTR8s9VQiM39Xyg1GWRy6v0ygkMiYXdn6sghG
+aRxd8/yItGAnldupfxMoUZ70nx/kQO9J8f5EKAzSO3r/ABMhRnuyfH+RCg0snXqgNNI/v/Igd2T4
+/wAiDLSyfFCjDSyfH+RUZ7snx/kUBpTz6oMd2TPr/Igz3JPj/Igy0knx/kQY7smX6oMd2T4/yIMj
+Kb+6B3T5O2eiVKHdP4oUO5J8UqtGHlk5Yz/IpUoz3ZPiqUO7J8UKDynluqIy8h/FA7h/FKlApDZv
+VAaU/ilSjPcP4oDyHjOUGO4eG6oUZ5l8UGeZY9VUatIePVRR5Dz6pUoyxnn1QBkN3fqgy5l8UQYy
++KDcXd2fPxVGUBBqgICAgICDSb+qL8nQR0//ACkP+YyEpkBAQEBAQEBEEBAQEBAQEBAL0dAb0ZFH
+9HQQD6oJJP6pv0INY/Vvz/wIMS/1n8CCSL6X/N0G6CKT62UGS/qv0/4VQhQRh9Tfmglm/qyQQD9D
+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
+6/oo2w6Iy3oisug1QYRGW9UVsiCKwgwgICDCAgwgyyCnfiCRmYxYhJsOzrF00lu3Fw7Ol6u8J4b+
+aX+NI1Fmxz5YZIvkkbBN8PgukTViYom1sxMfa9Xd8MuV8OlsvSRBxFh+H8qwqYWVgSMqyytDUzYR
+cnfDN1d/wZQeQ2Ft7Vo5f1fQG/yW9F2tjBiZVSdlWXpfH6ghSad2/pJny7v8GfDKDqY9kG3p0Qbe
+35oCDP4INmUBAd8MgrkOCz8VpGweuP4FBszoMOzKg3wRWRfOVEbCitmUGyAoMICAgINx9EVlAQao
+CAgwgICDDogisIMOyDCDCBhBhAQYwgYQZwgccoMPGLoNeyPwZBloRb2QSMDMg2ZsIMogg1k+h0FM
+v6+D/Of+R1Wdq6/oo2wiMt6IrLoNVRhRGW9UVsiCKwgwgwgygwgwgINZJBBsv1z6MpMrEOfanPPM
+vpb1b4MuV0u1sNc8myyzRXK2kfUT/Q66acsakMaOtztFM/pE2G/zn/xLWpLNr0IsuTaRmWkbsqg6
+DjeQX+3C1YH+eX6/wD/6rdsJMudrNTLaxJJmOv8AH3L/ADf8a6ObuHq6nZEBiBhB+RM45d2/P1QW
+w6C2McW6fL6N+hBI2PX+BQFUG9VFbfigMg2woDvhkGj/ABVRgmz/AIFRoPq6Df2yorHtj4KoIp+s
+ojLP1RWzOg3ZQZ9lBrl1FMqh1QMug3D0/Sg2QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQRWbVWpAdi1MEFeNsyTS
+kwALZx1InZmQYK5TG2FMp42tyAUsddzFpCAHZiMQzycWcmZ3SPMSji2urmnGCK5BJOTyCMQSARu8
+BMMrMLPn+jJ2Yvg/qkYk4eXX5sVpSZpFRW12zo7LXwbGlL3adgGkhlwQZB/fBsJN+llq6KZm2nGn
+Zglq2q1uvHZqzBYryixRTRExgQv6OJDlnZJigRWq0ss0MUwSS13YZ4xJnKMiFiZjZuou4uztn2U2
+VEiAg5Nvy3xinParWNrVG3SiOe1TaUDsBHGHcMngF3l6B830+ibK7PKPOR70W7ZdSKWOWIJY35Ry
+CxA/plibLeqt1sxNJS26JisbWyiiAgIIq1uraAjrTRzgBlEZRkxsxxvxMHcXfBCTYdvZNlTglQEB
+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
+gkD6gLD9CH3Z0nKuw20ZrWq1qvHZqyhPXlFiimiJjAhf0cSHLOysxQSKAgIK02ypQ7Ctr5JONy2E
+sleLiT8hh49x+TNxbj3B9XSMa8CcIrxp559CygICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgION5nsL2u8V2l6g/G3Xrmc
+R45cMN1k4v68GyWPwUwmYicIm62J6JmInuWK40is0mkb5phHXLx/kwjrquz19C/Zu07vjuxtWgs2
+JLeCjABhmE5SNwaRpDbiLsL46N0V1MromKcs29VZnDu27uLWh71k1xm7tjfwph2tNtJd00FiGnet
+8bfjF66by2JZHCzVGFo5YeRYhfEz9I+LenToumvnqcLre+bq+aHLwsf0p34T2W+XnN1sdx48xy62
+3ZszWtBZvSNamksM1iucAtMAydwY8DOTkICwvj6VdSI5r4yiL7I6IuuuiceiOpnSmZtsuzmYu66W
+xMd+HGubt+JU9/X2wzTzwfsu1UeRoW2tnaSSysYOE8b2YYe2HEiYmB+PUejJdSImJzrGzLOvHdnu
+IrNJ8p9H7XK8mtWNLutvqKhPHL5dHC+rJv1bhENS0Tf5kJRy/od1zssi+OScou/kmt135buu6HW6
+7kmNThT+KPd7a06LUVvlU1HkloL9ija8ZJq2mpxTyRwxxw14yrCdcSaOfvkX/wBwSznA4wt88zy3
+Zzffj+OlOHs0nfjXczZZETyThbbbGP8ADWbuqa8PZ6Vye92rXl+z2dq+0GreLs1q1iSNou7Qi59s
+GIQzykd255ES+bo/VZiPZimMzfNvfbTy3LF2MTOyyLp6pvr5striW9hvtZftUCmlpwsOqtFD+07G
+xkjaTYhHIRzTsJxscb4IGJwx+lb06TdSdl8Rlvtuw44xGbN2Vd9l89lMeGc5eh293a3F7yPyHXan
+YM0kFfU4qlZKAXI5rBTwhIHJ4ZZohZuQjy9PwdYs92JnH257OS3zTjTpavwmNnsf6vKHm9luNpBs
+aBaitdju0G2cF+G5O9+esDDSOc60hnL9w4RnzASP6untxWraYzM+zNueX36eeM8cMcUpNKRHtRfF
+I2TPJdMfsw6s3U8kvxyUrRaK1bsNqNVFabZzbexVhYZBkOGZmBpfupC45LujwfDD8Vi+Zt5rqUpd
+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
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBBpPPBXgknnkGGCIXOWWR2EAAWyRET9GZm9XdJlYiuEI5r9GGsNqax
+FHWNwYJzMRB3kdhDBO+H5OTMPxVpNabWYmJiuxOoqhqt7rdqU7UDklCuXApnhmCEny4v2pTAY5cO
+Ls7xkWFaYRO8nCaL6gICAghu3qVGsdq7Yiq1o+sk8xjHGLfiROzMlViHP/tf4k1H9oftuh9hzaL7
+v7qHs9x2d2DucuPLDP0yrNswzE16l6hsdfsao29faiuVTzwsQGMsb46Pgwd2dJiYzImJyVZvJvG4
+KA7GbbU4tecjwhcOxEMLyM7s4NI5ceTcX6Z9lN3Fd/DPgqD574MYmQ+RawhjblI7Xa7sI5Ycv8/R
+skzK8spzQsz+V+LV6le7PuKMNO3n7WzJZhGKXD4ftm5cSx+DpNs1ptImJiux0YZoZogmhMZIpGYo
+5AdiEhfqzs7dHZ0mKZrE1Qa3aUdnXezRk71djONpeJCJFGTiTg5M3Ict0Iej+zpTCJ34m2Y3LSgI
+Kmz2+p1VdrO0uwUK5EwDNZlCEHN2d2FiNxbOGfonAba/Z67ZVmta61DcrE7sM9eQZY3dvXBA7srM
+TGaRMSsqKjmtVoCiGeYIinPtQMZMLnI7OXAM/UWBd8N8EjcJEFbY7Klrar27snarsccbnxIvmmkG
+IGwLO/UzZkjGYjbJsmd0V7DY7Klrar27snarsccbnxIvmmkGIGwLO/UzZkjGYjbJsmd0V7FlAQVr
+OypVrVSpPJwsXjOOqHEn5lGDyE2WZ2bAC79UiK4cK+aPTBM0ivGnl2LKAgIKG13+h1DRvttlV17T
+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
+0bkDbJqkdTZ3ZTijEasgQyWP/CyGfIjL5my4ceTlhlrTnGZjPl3fPuyypE8eLN9s8tNnNG35Lq49
+VY3Y0b2r22raDZbSK5Odo95PrnkntyxQQVD2Hbdmw0oRszNxaXtkQM/TDLFkVjTj4ox405qds0jj
+ludL5pN8/Dy067bK9lZnvpnWeCPybVb7VQXLQwa+xsYWClHsrOxkHnUtcmlmsxwyPHIYA4AXJuTP
+hbtmJmm2l2z93vjGd9GJieWZ/d/Nn30bQbq5L5IbR35JKY+TvUdhlJ42jbUs/Z6Px49/rx9Of4qa
+cYW8bb/zzTu7l1MJu4fT9FUU+yuXtvPWi2Vhqp+UjScq85jiFtWxHAJC/wAo91nyzehdehdVNOKx
+ZXbbqfmup9i3zSb+EaffNtW0Fu8+0fxqS9aDVftuWn9y9iX7nsjrwtx1/unLvfNKb/Nz5YbjlW2O
+aImfhvnri/lj+XzY7Wb55ZmI32dVbce+Ij+Lodrw7YVarbuGzsikrQ7gqVKS5ZKZ8vDCwQDJMRET
+8ydmHOc/ipnZbvnm66XXeiOwmKX3bo5fy2+l65YaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBpPBBYgkgnjGaCUXCWKRmIDAmwQkL9HZ29WdJh
+YmmMIj1uukKsUlWEyp5+0Ioxd4cjwft5b5Pl6dPZWZrNdssxFIpsV6njvj9OCzXqaypXr3Mtbhig
+jAJmJnZ+4IizHlnduqkzWKbFjCa7Vn7Cj3Hk+3i7jxdhz4Dnst17ecfR1+n0Sca1258SMKU2ZcPK
+jiTeDaGzvW2VunVs14qcFOpRlrRmEPYkkMTj5ZYeknFmYWxhatvmKztma1SYikRsivfTzUdXY6TS
+7PtftKhWvdh+UH3MMcvAviHNi4v09lImk1jNdlNjYtRqT2AbI6UBbGMHijuvEDzCD5yDSY5sPX0y
+pGFeOfEmMuGSGt4147VjmiraqnBFYMZbAR14gGSSMuQGbCLMRCTZZ39HVrOHDImMZnesTazWzvYe
+apDK9uNobTnGJd2IeXEJMt8wtzLDP06upsoVxqqy+L+MzVa1SXUUpKtN81K514ijhd3z/Rg44Dr/
+ADVeaa1rikRFKbF61UqW4HgtQx2IHcXeKUWMHcCYhfiTO3ykzO34qbarwRWtTqrcry2qcFiUoirl
+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
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBBX2Owqa6hYv3JGiqVYymnlfL8QBuRPhuvoykysRWXJi8qleGeezp
+b9KvFAdkJrL1AjMI25O3NrBDE7t1/puH44w61dFM/L0Jb7UxTb5dPcvyb/SQ2KtWxfrV7lwRKrUl
+miGWTl6cA5ZP/q5V5ZrMRsZi7CJ2Ss3b1KjWO1dsR1asTZlnmMY4xb0yRE7MyzVuIVD8l8cCpFcP
+a0xqTAUkNh7ETRmEbsJkJ8uLiLkzO7emVeWa02+vJImsVhuO+0ZSyQjsapSwjJJLG00bkAQlwlIm
+zlmAvlJ39H9VNldh6f2oYvJtNZjqy0LUF+vbsfahPWnrnG0nAjxl5B5PgfpDkX4Yy7XlmtOFexKx
+SZ3fsVdz5jqaNK1NVnr37FKevBbqRThziexOEGZGHm4ceecO3XCWxWbd100qs4V3xbM9kVdGpu9L
+cqzW6d+tZq13IZ7EM0ZxxuDZJjMXcR4t65UnCKzkRjNNqKLybxuamN2La05KZG8Q2QsRFE8gi5uD
+GxceTCLu7Z9FZiYzIxyW6GwobCqFuhZit1ZM9uxAYyxlh8PgwdxfDpMTGaRMS1/ams7Pf+7h7Pd+
+37vcDj3ufa7XLOOfc+Tj68unqkRlxWcK8EIeQaE7wUA2VUr0jmIVGnjeUiid2kZo+XJ3Bxdi6dEi
+K5E4Zsx77Ry7I9XFsap7OPLyURmjecWZsvmJn5t/AkRWKxkTNJpKz93U78lfvR9+IGllh5NzGMnd
+hMhzlhdxfD/g6lcK7Fp3qNjyjxqtFHNY21KGKUI5YpJLEQiUcue2Yu5MzifF+L+/sryzWm1K4V2K
+5+ZeOx+Sf2dluxRbJ4opowkliHuPMRCMYM58yk+Xlx4+js/ults3Vps/b3bUumLaV+99nnrh0Sth
+5F4+c9qANnUKeiJSXomnjc4AD6ilHlkGH3clNldi0xptbRb3STEIxbCtIRzPWARmjJ3nYO48TYfq
+fD5uPrjqryz5cM+xKx5u/Lt2LyiiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgp7mOrLqrcVuqV2rJEQT1AHmUgE2CFhy2css3RE5tWz
+MTg+eXK20OltaOgfb2dGeovR2KmzgsM4WHiYa0dV7cYWpCL5mdmchxj3wt31m2ebhTfWuOWym80a
+RfZTD2sd1P20yRj47dkl2ut21jcwR7Y4jgjoVa8sM0X28YAJWDqzFXkiKNx/pJQZuhMu3NHNhnbf
+M/zTdE8cKccKbnCyJi2K5TZEfy0mKdNZ3Y76vTeeUNjMekt15LYVKFspbhUYorFkGKE4wlCGWKw0
+nAi6sMblh8t6LjZNL6z8Mx11j0RMfZV0mPYpG+OyK+mk9W+jl6XQDF5XqdhCOwuV5v2lamubGuEJ
+DNMFUGfthDX7PPtlhijEnfk/XOVu2aVjCPY/119KXYxX5o7rbo9XcgtaHbSeKbMK9eeGZ/IJr08c
+McbWJqwXnk5RjOJBI/BmIGIXYsYWbJpGnXZGPD3vTMTv2w3fFZviNsW0/DZWOvGN2/ahtaGzat09
+jrrG2uWrV+EZ7mwqjV7XZqWwCTshXqGzCUosUhhh/lZn6KXRNKRSK239s2xHoS2YznGnL2RfbPrT
+WKr2f3f1NGGnsjsNf+z4bcB1ZOLOFqDv8JHHhMJcCMijcmx1LC63XROrbfHu80dUbursYtibbLrZ
+xu5buueWcevtxZ8u0e5s7ndHRhsDWcNLPI9eMHKYa1icpxhaYThkkAGAuLs+cM2OrLnpzSImf7l0
+9tkRE/i82GMNXxXCPgp/NWnXFY68cGv7CazttZtIS2uzebaVSuTbKoFZhGtWtMJ9ka1Qm4vILPIY
+Yf5WYui3ZPLdGUR7c9c2xHoScbZ30tj+eJ9b0/ilWzX2Xk3dhOGGbaPLWchcRMCqV+RhlvmZ5GLq
+3vlYj+nbH7357lu9+Z4W+Z5axFsIta2kbXXZLgeSRXDkCvK8DVj2jWWmabHbIe2/zMLuQ/rMzM7r
+WjnZPw2zE9PJdHl6zWyv+aIp/KmfT3h0U3CjKNovKht9IiaR4f2oLvN0bPDs5fl6cfwU0p/p12W3
+flv+w1cfqcYtp1RZ6YWNBFfp+Rw0deNqxqHs2rFuDY0DhemUvcNzr3XGMJecp8eLOZcS+rDJpzW3
+HZbERv2YTHR5jU97DObsd3T5b9i9tTsa7yzYWypWrMOx1kNeo9WCSZnngknIozIGcYstMOCkcR/F
+cborp327Zx/lp5bdzrbPtWTsivnhyPDtJcjep95QkBx8UoUyeaImxKzy92H5m6G2W5B6+mV38XNY
+1qbbsOOEuXh8J067Ju89rXxqttqRatrNe3BPe8ao0IrH280nZuQ9xyGdwEuy491nzJhvXqr4mOad
+WLc7prHZdtTRpbGnMxhbN1eubaeZyg8ctTeKfZznu5dvqdZbiDWyVII6wTSU5ICGOeKrF9wJkXys
+ExkT8XJvVTWuia3W7cONKxNKcKbqbmtCJi62Lpyuiftr1znNccX0FhpVKugrzaqSwbFHHWKOuJjT
+kaAv6U3fHZHDOHJvd8e6upNdWafNj6OvvcdOKaVtY+HDjv6ncXJ2EBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEHLk8m00E1kLdqGpHWk7Tzzz1xApBi70gt/SOQlGHzExiL46+nVemPCakxE2
+xN1caRE76Rs2zlSu7NOaK08q506aY9DleSfvH8X02toXG2VGd9sbR6lztwxQTZ9ZO+7kLRB+sbM/
+szM5OzP6fC/4rX1b7reW6OT3vZmZjhTfOyMOyJlJvti3mrh5R+3dDqavyGhasNrbFyiO/jj7lzVV
+bY2Dib44cYZXH/KKMV5tbwt1sc8Rf9KuF020r5475SLt9Kyjv+SjDLLX1+vt7m1XdhsQ0WhZo3fr
+xKWzLWg5Y6uDScmbDu2HZXS8LzRE33W6ds5TdXHqti67rpTi1M7NqTXeS6u5rJ9hIb0YqZnFfC5x
+hKvJHhzGbLuLYZ2fkxOLs7Ozuz5U1fC323xbHtc3u8uPNXd5Vrglt1ZmNseqvmxUtf51othsrMVS
+3Wm1VaKs/wC1wsRlAdi0ZiFcCbIkXEGf6v1mbC7av+O1dOyJui6L5m72eWa0tiK3eW6U+pbWkT5V
+pHbNfKXVrbzSWoJJ6uwrTwQxtNLLFNGYBEXLEhELuzC/Aur9Oj/Bea/w+pbNLrbomZplOe7vatmJ
+mkZ+UeeJjqRX/J/G9f8Ab/tDbU6f3bcqnfsRRd0cZzHzJubY69FrT8JraleSy67lzpEzTp3HNFIn
+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
+uv1Zw1tS2JjdZE804ZxHuxHCJoxFl0W2x712N08bojCv7113c5uy8ad/EgnoXPIdjDSb7aCtaoRV
+pIBuO1S3OEMNGrdmkjrzSHluXJ+vzEvTpeK/36XW6Nk3YzMXzdE8vtW21nUusiJuiI2U4QzbbPLW
+JnmtrdH71JiJxzzrtq+s0Pt/sa/2wFFW7QdmMwKIhDi3EXjNhMHZv1SZnZfmNSvNPNjNenv2uunE
+RbERknWGxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEFbZavWbSlJQ2dSG9Rm496rZjCaI+JMY8gNiF8ELO2W9V00ta/Tui6yZtujbE
+0nthJiubhf3Yfu1/5S03/D6v+jXt/WPGf3tX8d3rZ+nbug/uw/dr/wApab/h9X/Rp+seM/vav47v
+WfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07
+d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3QP+6/
+92js7P4npsP06a+q38kafrHjP72r+O71n07d0Iav7pf3X1gIY/FNUTE+X7tSGZ8/g8gm7Ld/+b8b
+dnran4pjzH0rdyb+7D92v/KWm/4fV/0ax+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3t
+X8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3r
+Pp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3Qf3Yfu1/5S03/AA+r/o0/WPGf3tX8d3rPp27o
+P7sP3a/8pab/AIfV/wBGn6x4z+9q/ju9Z9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbuhf0
+/h3iGlsla02j1+stGDxHPTqwwSPG7sTg5RiLuLuLPj8Fx1/H6+tHLqal98Z0uumfPKxbEZQ668jQ
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgqjttUQAY3IHCScqoE0oOxWAJxKFnz1kEgJnH1yzrp9G/wCGcq5bN/RxJmnV5emGo7rT
+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
+3rPp27oP7sP3a/8AKWm/4fV/0afrHjP72r+O71n07d0H92H7tf8AlLTf8Pq/6NP1jxn97V/Hd6z6
+du6D+7D92v8Aylpv+H1f9Gn6x4z+9q/ju9Z9O3dCWr+7r931SzDaq+MamvarmMsE8VGsEkcgPyEw
+IQZxIXbLOyzf/lfFXRNt2rqTE4TE33Y968lu56FeBoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEHwOx5Z5NPMcpbS0Lm7u4xzGAtn2YRdmZl+ijw+nEU5YfBnXvmc5R/wBpvJP/AHa5/wCo
+l/7Sv0NP4Y7E+tf8U9p/abyT/wB2uf8AqJf+0n0NP4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D6
+1/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8A
+drn/AKiX/tJ9DT+GOw+tf8U9p/abyT/3a5/6iX/tJ9DT+GOw+tf8U9p/abyT/wB2uf8AqJf+0n0N
+P4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D61/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2
+m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8Adrn/AKiX/tJ9DT+GOw+tf8U9q/s7PneraMr9u/XG
+XrGRTyOz++MsTtn8Fzst0b/di2ep0vnVtzme1VLd+WjWGyWwvtXMnAJnmm4OTerMXLGVv6WlWlLa
+9EMfU1KVrNEX9pvJP/drn/qJf+0r9DT+GOxPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8
+k/8Adrn/AKiX/tJ9DT+GOw+tf8U9r0n7vfI95N5RWqWb09ivYGQZI5pCkb5YyNnbk74fI+y8vjNG
+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
+pf3c/wDzPX//AK7/ALiReTxv9KerzvT4T+pHlsfbV8F9oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHzqf9z0JTGUG0KOJ3dwjKHm4t
+7M5dwc/wL6cf5KaY29750/4+K4Sj/ub/AN7/AOz/AOtV/Uvl7/sT9P8Am7vtP7m/97/7P/rU/Uvl
+7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v
+/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P
++bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU
+/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77
+T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/
+7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtdbxj928O
+k2obE7z2pIhJogaPtszmLi7v8x5+V3XHX8bOpby0o7aPg4surWr2a8L2CAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAg81e2k4bO1Bc2MmpjEhGiXaB4ZGcWdzOWQDbPJ8cWIVLcemq3YTwWp/IJ42tzQ1WsUte/C3Y7n
+A3cWYpHij4kxcGfrkm/BWu2cImfs86RGzOaObb2F79sSDBMZB+0K4RxvIQg4lTc+D4zgSLq/T8VL
+axH/AJO6PQzM17LfzJaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK3dnEcPRDUbZ4+mU1b
+yyW5NDWp1Yp7EhzAZDYZ4WeFgLIyiBchIZG/Vz+CzGPZXvokzTy4OrrNi9/XDaGLhI/MShd84kjJ
+wIeXTLch9VLpwrG6rUZ0nZLj6baTWZoQtbSSHYvkrGrlhjib0fIxcgE34+vLmSXTERMxjgzPHDFF
+B5pG1ODrCU/24zzfd2Y4CflniIYjZjN+P80W9Fq7Du81ViPPPno7w3pbGthu0YwkaYBlAZzeJmAm
+5dSEJerN+Cl8csls1UNV5FPdsV4pagwjaGY4ZQleQSCFxFjbIRvg+XT8PzVjHsie1JmnbRQs+TMN
+3W2jY44j+9h+1AnJ5ZIpBijZm+VnIn9PhlZsmteNsU65W7CZj4bvRLo/tC5PalrSMdOavUaxIMRx
+yNyl5Mw5OJ+ocOjt0+LOpdNIun4f2/YtsVutjf8AsQQ+SXZghatSGUyox3jeSbhhj5Nw6Rvkvl+D
+N+S1dNOadlv7WbMaRtmvc5m122ztzy2qeQrQ6wb1dvuJInZz5FzMABxkceGOBPx/hUuw5uExC2zW
+kb6+h0ZfILNIaUuxHg0leaYxgNjEu2MbjnlEBcic8MzOzN+Ptu6PauiNn/qozZNYifLKq7T2189m
+FC5TCucld7AkEzy4ZiEeJM4B1+b2d1N/Bd072m12ttjuVKEDSyVoHksTHK8TBzZ+DBgDciwLv7N+
+K53T7My6WR7UcXNr+S/Y1az2jKR3oVJGeSQBEpZicMkRDyb0yREbtj2XW7O796ndMuVuUdE+j1pG
+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
+7BdijszgMdtngcoj4O/AhDusQEzPj6nb8FPMstZ/Hilr7WIrTuWzEReRwbIOMTR5dmcWLPHPsmyI
++avfE+hbZpNeFPP613Za8b2smpEfDuhwGTGeJN9JYy3o7ZUuxZsikU4Uc5vFK3foSFK5BUgeCWNx
+6TO4kLGT56O3cN/0qzSZndMU6PKMFjZvia+XXikq6GxGdMbFzv1dfn7SJo+B54uAvKfIufEHdmwI
+pdjWZzmKJTCmxUi8OEIoh+8dpa8EMUEogzOMkEhSDJhyJn+rDj/GrX0d1vL3lPT3zXuX5NTesHVk
+t3AM6tgZxaOHtg7CBDjDmZZfn1fl7eiRhNenvJisU8s6oz1uxr2DelNhrt0bFmTiP9HCMbCQMxcu
+Tk8bNlm91LcKRsx/Z39y3Y1nbSI+1Z22pi2TVRldu1XmaY4yHkxswEDg/VvXmpTGvCe82eW9zj8U
+kOAK5XnKKGGzWr8o8kMVgREWIuXzdvj+lJxrXOYjumpGE4ZVqtUtLZpSm1W2wVZnE54ii5F3GFhI
+oz5YFj4tlnEvwVv9qvGvekRSI6PMpQeGQQ1RrDYdopIPt7zCDD3uOXjkbr8hg/v16dFZn0dsUxX7
+eydi3Y02yt0nq3L4yNmJxIIOGe3IMmTyZZJ+GPl4t19Eifaid01SYwpwXIdf29pZv9zP3McUfbxj
+j2nN85z1zz+CkYV6fQt2Mxwj0q2x1ezuR2Kz3gGlZZxMHg5SiBNghCTmw/k7g6lK5rWmSu/i7BaK
+3Vs9mwMkclYnDmwMELQEBtybmxC3xZ1qs9899PUzEYU4R3V9br1orQRO1mZppSd3cgDtg34COSfH
+5k6zdFYosOTrvHLFcKMNm4M9bXZKvGEXbdzcXFiMnM88WJ8MzMrdj00okx56+lnW+OT6+WqcFsS7
+Ncathjid+4Am5s44NuBfM/ryVnGsbJp3RQp5575aweN2oKtWKO6LSa83KhN2eogTOxBK3PEjOL46
+cUrOE7aU83qXf01dMfvYKkhzO92x1fhCIRZ9uICZ4b/rH+lZvisUIeaqUNhXq6aD9mXS/ZBEXL/w
+TdzlGcfp92/H68+6t/tT/Dy+b1GyY33V75lX1ms3mqCL9nU7YSdgILXdjpyBJ2nfgYi10HAmYnb6
+nb8FZmvd5oj0H2981drRRXYtlemnp2o2vPGZSz/aswvFEMfXszSO7lxz0BmSMLacZntSmNeHr9bu
+qKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+D//Z
+------=_NextPart_000_000F_01D15E52.0BD654A0--
+
+
--- /dev/null
+Return-Path: <dude@dude.com>
+Received: from imapb020.mykolab.com ([unix socket])
+ by imapb020.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Mon, 29 May 2017 13:42:50 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from mx03.mykolab.com (unknown [10.20.7.101])
+ by imapb020.mykolab.com (Postfix) with ESMTPS id E4E1A158687A1
+ for <test1@kolab.org>; Mon, 29 May 2017 13:42:50 +0200 (CEST)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="=_27fc263db229c1c3abb1f95bbef8358d"
+Date: Mon, 29 May 2017 13:42:50 +0200
+From: "Dude, The" <dude@dude.com>
+To: test1@kolab.org
+Subject: Fwd: Html Hello (inlin)
+In-Reply-To: <a1777ec781546ccc5dcd4918a5e4e03d@info>
+References: <a1777ec781546ccc5dcd4918a5e4e03d@info>
+Message-ID: <46b164308eb6056361c866932a740a3c@info>
+X-Sender: dude@dude.com
+
+--=_27fc263db229c1c3abb1f95bbef8358d
+Content-Type: multipart/alternative;
+ boundary="=_b3e300e5b818a05994848f3575fd7d36"
+
+--=_b3e300e5b818a05994848f3575fd7d36
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain; charset=US-ASCII
+
+Hi
+
+-------- Original Message --------
+
+ SUBJECT:
+ Html Hello
+
+ DATE:
+ 2017-05-28 15:13
+
+ FROM:
+ "Dude, The" <dude@dude.com>
+
+ TO:
+ dude@dude.com
+
+THIS is a test.
+--=_b3e300e5b818a05994848f3575fd7d36
+Content-Type: multipart/related;
+ boundary="=_7bed2b6150a4de304dd8cd8fd523f674"
+
+--=_7bed2b6150a4de304dd8cd8fd523f674
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html; charset=UTF-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
+=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
+eva,sans-serif'>
+<p>Hi</p>
+<p>-------- Original Message --------</p>
+<table border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
+<tbody>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">Subject:</th>
+<td>Html Hello</td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">Date:</th>
+<td>2017-05-28 15:13</td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">From:</th>
+<td>"Dude, The" <dude@dude.ch></td>
+</tr>
+<tr>
+<th align=3D"right" valign=3D"baseline" nowrap=3D"nowrap">To:</th>
+<td>dude@dude.ch</td>
+</tr>
+</tbody>
+</table>
+<p> </p>
+<!-- html ignored --><!-- head ignored --><!-- meta ignored -->
+<p><strong>This</strong> is a test.</p>
+<p> </p>
+<p><img src=3D"cid:1496058170592c093a661dd956000502@info" alt=3D"" =
+width=3D"612" height=3D"600" /></p>
+<div> </div>
+<div> </div>
+</body></html>
+
+--=_7bed2b6150a4de304dd8cd8fd523f674
+Content-Transfer-Encoding: base64
+Content-ID: <1496058170592c093a661dd956000502@info>
+Content-Type: image/jpeg;
+ name=aEwOdgN_700b_v1.jpg
+Content-Disposition: inline;
+ filename=aEwOdgN_700b_v1.jpg;
+ size=84625
+
+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
--- /dev/null
+Message-ID: <851f01d15e53$31734730$790bc9ad@info>
+From: "OculusLab" <info@findermanze.co.ua>
+To: <info@example.org>
+Subject: CID links for images
+Date: Wed, 03 Feb 2016 07:19:17 +0200
+MIME-Version: 1.0
+Content-Type: multipart/related;
+ type="multipart/alternative";
+ boundary="----=_NextPart_000_000F_01D15E52.0BD654A0"
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Windows Live Mail 14.0.8117.416
+X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
+
+ This is a multi-part message in MIME format.
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0010_01D15E52.0BD654A0"
+
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/plain;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+=0D=0A=0D=0A=0D=0A=0D=0ASuperkombipackung für nur 45 Euro=0D=
+=0A=0D=0A
+------=_NextPart_000_0010_01D15E52.0BD654A0
+Content-Type: text/html;
+ charset="windows-1251"
+Content-Transfer-Encoding: quoted-printable
+
+<HTML><HEAD>=0D=0A<META http-equiv=3D"Content-Type" content=3D"te=
+xt/html; charset=3Dwindows-1251">=0D=0A</HEAD>=0D=0A<BODY bgColor=
+=3D#ffffff>=0D=0A<DIV align=3Dcenter><FONT size=3D2 face=3DArial>=
+<A =0D=0Ahref=3D"http://intenices.co.ua/drugs-store/index.html"><=
+STRONG><FONT =0D=0Asize=3D4>Superkombipackung für nur 45 Eur=
+o</FONT></STRONG></A><BR><BR><A =0D=0Ahref=3D"http://intenices.co=
+.ua/drugs-store/index.html"><IMG border=3D0 hspace=3D0 alt=3D""=20=
+src=3D"cid:9359201d15e53f31a68c307b3369b6@info" width=3D650 heigh=
+t=3D763></A></FONT></DIV></BODY></HTML>
+
+------=_NextPart_000_0010_01D15E52.0BD654A0--
+
+------=_NextPart_000_000F_01D15E52.0BD654A0
+Content-Type: image/jpeg;
+ name="aqnaozisxya.jpeg"
+Content-Transfer-Encoding: base64
+Content-ID: <9359201d15e53f31a68c307b3369b6@info>
+
+/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDov
+L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
+aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
+OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6
+MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
+OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
+bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6
+Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu
+Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo
+b3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjdCRTg5MTBD
+OUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjdCRTg5
+MTFDOUNGMTFFNUJBOTdEMkQyNzU0ODI3RDciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5z
+dGFuY2VJRD0ieG1wLmlpZDpCN0JFODkwRUM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIgc3RSZWY6
+ZG9jdW1lbnRJRD0ieG1wLmRpZDpCN0JFODkwRkM5Q0YxMUU1QkE5N0QyRDI3NTQ4MjdENyIvPiA8
+L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0i
+ciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwM
+DAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIAvsCigMBEQACEQED
+EQH/xADJAAEAAgMBAQEAAAAAAAAAAAAAAwQBAgUGBwgBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYQ
+AAEEAgEDAgQCBAgKCQMACwIAAQMEEQUSIRMGMUFRIjIUYXGBQhUHkaGxUiMzFhfB0WJy0+OkZZVW
+8ILSsyQ0lFU24UN1U4MlssJzhLQ1djcRAQABAgMEBQkFBwQBBAIDAAABEQIhMQNBUWEScYGRoQTw
+scHRIjJSYhPhQpKyFfFygqIzUwXCI2Nzk9JDsxSDNPLD0//aAAwDAQACEQMRAD8A/VKAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAg1y6Bl0DLoGXQMugZdBrIZMBOz9WZBpWkM68Zk+SIWd3QS8nQOTo
+HJ0Dk6BydA5OgcnQOToGXQMugZdAy6Bl0DLoGXQMugOT4dAYnwyA7ughaWTPqgkIyaNnz16INQkN
+3bL+6BJIbHhn6INozJ2fL+6DbLoI5JDYmZn6KDJGTR8s9VQiM39Xyg1GWRy6v0ygkMiYXdn6sghG
+aRxd8/yItGAnldupfxMoUZ70nx/kQO9J8f5EKAzSO3r/ABMhRnuyfH+RCg0snXqgNNI/v/Igd2T4
+/wAiDLSyfFCjDSyfH+RUZ7snx/kUBpTz6oMd2TPr/Igz3JPj/Igy0knx/kQY7smX6oMd2T4/yIMj
+Kb+6B3T5O2eiVKHdP4oUO5J8UqtGHlk5Yz/IpUoz3ZPiqUO7J8UKDynluqIy8h/FA7h/FKlApDZv
+VAaU/ilSjPcP4oDyHjOUGO4eG6oUZ5l8UGeZY9VUatIePVRR5Dz6pUoyxnn1QBkN3fqgy5l8UQYy
++KDcXd2fPxVGUBBqgICAgICDSb+qL8nQR0//ACkP+YyEpkBAQEBAQEBEEBAQEBAQEBAL0dAb0ZFH
+9HQQD6oJJP6pv0INY/Vvz/wIMS/1n8CCSL6X/N0G6CKT62UGS/qv0/4VQhQRh9Tfmglm/qyQQD9D
+qNNY/pQbeyIN7ooHogyiDe6KwPoiMorLIA+6IOisj6ojA+roNnQG9UGG9XQY90VkcZwlUox+u/5I
+CKZdBh/qUGVQZQZf1ZVGSRWGUGS9FUYZRWW9FRkvpRGG9kGXQBfogx7IMe7KKzyVQjz1yg2QZZEb
+h6P+ao2QEGqAgICAgII5v6ovydBrU/8AKw/5jfyISlQEBAQEBAQEBEEBAQEBAQEGC9H/ACRWWQH9
+HQQA/VBJJ/Vt+hBrF6t+f+BBiX6/4EEkX0v+boNkEUn1fwINj/qkCH0QRx45t+aCWb+rJCFdiHi7
+Z6qNNQdmH1QZcm+KAxNh+qAJizdXQbcw+KIx3A69UATHHqgzzFAYx69UBjFAcx/FAaQW+KA0jdej
+oM9xvg6VBpWz6Og1KVhZ3wpMqoWLcT5Zn5l/E36FiZbiEMcxM/yk7fBn9FKrRdrWib+s+b4EtRLM
+wsjIxNkevxWmWWd3b0VSrHVy9FFqy7v8FSpyf4IlRyd39EByf4KByL4ItRyJ/ZEORfBFqMRfBBly
+LGMKoMT/AAQZ5O/sgMRM2MIGS+CB83rhCo3L4IMixNnp6oM/N8EGW5fBESR+j/mqNkBBqgICAgIC
+COb+pP8AJ0Ia1f8AysX+YP8AIhKVAQEBAQEBAQEQQEUQEBAQEGC+l/yQZZEH9HRUIt1dBvJ/Vsg1
+j9W/NBiX63QSR/S/5ug2QRyN8yDJf1aBH/gQaRt87fmiJJGyDsiq/bH4IHBvggcWQOLIHFkoM8UD
+igcUDCDOEDCBhAw6BxQOKUEdiUII3kP0b0/F1JlYhxLV6WZ85wDensy5TLrEIBlZ/R/8ClFSx8fV
+mf8AHDqKTW3hw7Pyz6P/AIHVhmUsV83wYu3zdOnXL/irWhRcr7VsfMPp649cfktRezNjoQyxzNzB
+8t7t8FuJYmEhMqjGEDCBhQMICAgICBhUZwgYUGcKjOEDCBhBnCAiNw9EVlAQaoCAgICAgjn/AKk/
+ydCGK3/lov8AMH+RQlIqCAgICAgICAgIgiqNvcU6zuJE5G36rLya3jdPTzl30/DX35OdN5KT9Yos
+N/le/wDAvBd/l91r1W+A3ygfyW2xdAFm/HLrl+q37odP/oWpI/KDb+siZ/yddbf8tvhi7wG6V+p5
+DQndhd3jN/Yv/ovZo+P078MpebU8JfbxdHmJA7i+WdvVe2HmbMqD+joIvig3P6GQah6sgxJ9SDeP
+6f0ug2QaH9SDL/QyBH7/AJIjQPqb80EhfS6KjQYwqGEDCBhAwoGEGcIGEDCBhAx1QMIM4QV7dyGs
+GTf5n+gPd1JlYhwLmxlmfMjtxz8oN6MuczV0iFXu8ny7cvglFqzgjdnF8v8AzSSglA3jJhJuLH9L
+/AlKFUdkWlDmPQmd+Y/l7stQksRs4VzIX/ml/A6ysJ2L5mkF/mf6g+P4skrC3RtPDNkX+V/b8Pg/
+5JEpdFXoGJiFib0fqy6w4yKjGEDCAgYQMICBhAwgygIMoggICDKAg2H0RWUBBqgICAgICCOdv6E/
+ydAgbEEbfAR/kUJbqggICAgICAgINZJAjBzN2EW9XdZuui2KzkttszNIed2O6nmJwhJwib3b1f8A
+SvgeK/yF12FuEPq6HhItxuzcp+r9fV/dfLmXtho/RZmVRv6qVaY6f41ao1J2Z+nqt2osVNtcqP8A
+0Zu4+4P1b+NezQ8ZfZOE4PPq+Htvzeq1m4r3Y2diZpf1g92/hX6DQ8RbqRhm+TraM2Ti6OWcXwvQ
+4ovb9CI3P6WQah9TIof1Og2i+j9LoNkGhfUgy/0MiAe/5INA+pvzQSF6OitEGEBUEBQEBBlAwgYQ
+EBkGUGHQeW2l0p7BOz/Kz8Rb4MucukKMZOTkzv6YVoDdxy+Qmz8EEwETfV8pe7/UP8HspKwnHq3t
++Wen54dZVGdaYMkP0/BnyrUo2qj8pRF6Y/l/xKStGQZhftn1cOjfiyC2Ds7YHHX3wpJDr6+bI9p/
+X1H/AAst2S53wuLowwgICAgICAgICAgyiCDKgwqMoCDYfRFZQEGqAgICAgII5/6k/wDNf+RAh/qY
+/wDNH+RCW6AgICAgICAgP0Qeb2+xKxIUMf8AUg+Pzdl+f8f4qb55Yyh9XwuhyxzTm5jr5s2vbVo7
+sy5y0qlcjY+LO5P+DZUWjdiY8O36VlWCd8KwNHW6owTqxKNY5zhkaSN8EL5ZdtPVm2aw532xdFJe
+w1O4C3E+ekjN8zL9N4fxEaltdr4utozZLoiTO36F6HBLJ9LIrUH+Zv0oBv8AMg2j+j9LoNkGhfUg
+y/0MiAe/5INA+pvzQSF6IrTCBhAQEDCBhAQEBBlAwgICCtsZOFYm5cOXRy+De7qSsPKSNxFibrl/
+RYdIRkOBZh9/qZBhoHJ2cXw/4JUouhVnN26fN74UqtFmPXyZ9MP7/BRVptezD1UVUmrlCXJvRRUM
+g8nGRs/B/wBCrKeFwd/Vs+7oLlWXjIz5y7Plnb3+KsZsy7LOztlvR12hykQYQHygxl0DqgdVAy6B
+1VGcugdUDqgZdAy6DPVARBBuPoisoCDVAQEBAQEEc/8AUn/mv/IgQ/1Mf+aP8iDdAQEBAQEBARHP
+3Nx69bAvg5OjLx+O1/p2cZenw2lz3cHm2Z36v1+Lr85ES+xLBP0d1LpIVZ2IgJh9XXCXWGkNeKMe
+vQn9XZShUZwaTgz/ADerOpRWZGf1WkhC5deqojN3/QrA0zlnZ10iWaJKV+SpZA2L5c4Jvwdevwmv
+yXxOxw8Rpc9r21G00sYkz5Ymyy/SxNYq+HMUmjom/wArKjAfUyDB/W6CQPpZBlQaF9SqMv8AQyAH
+q/5INA+tkEr+iK0QEBBhBlAQYylRSsbWvE7iH9ITfD0/hWZuai1Rk3kz9G4h/G6zzNcqD9pXTfpI
+X6FKytIavPZfryN3/N/8aVlaQnh2NyP15OzfqkyRdKTa61O7HZDI9Cb6hXSJq5zFFHcvKRRxsPR2
+LH4+nRZuatcEMmOP1gf0+LLLS1TrjIXpkVKtxDpxVIQfoLILIADejIiQWZ3VG+ESqvZrsUb49VJh
+Ylxi5xScXZ/zZRUjkWMMwv8AFjRlmKRmPp0dvUX9WdUegrSc4RL8F1tcrkqqCIOisICAgICAgICD
+KAgIggINx9EVlAQaoCAgICAgjn/qT/zX/kQZi/qg/wA1v5EGyAgICAgICBnCDyu7td638r/KPRl+
+e/yWrzXU2Pr+D06WqjE+MLwxk9NGkh9HbKxMrEObJscy9qEXMm9X9GZcrpdIg43JHzlh+KZKkgq9
+s3kM+cjthn9mWRrbsBG2P4FuiKJBen+YH4j6rFWm0LWhfjK7E3tj1Vi8olJnbC6RLKCTPwXSGZel
+8ftuVZgd+oPj9C/SeB1ObTjg+L4uyl/S9UBsUYr2PM3D6mQJPqdBtH9DINkGhfUgy/0MiAe/5INQ
++pkEj+iK1dBhUFAQYQRzTxwg5yPhm/h/QkyRDhbDcyzM4RC8cXu7+rrEy3EOY0sj9Gzj+BZo0lir
+yk7Zd2z7e6EOpV1uWZzf9Cir8dSEPQWVoVSPFHjHFsJRKq0lTi/OAnik+LeiGbE5jbpSNM3GaFnJ
+mHp1ZvVvzW82MnmwJiMWy+Xf0WZdLXaqRNGLN8errm6LguqjdlUbi6sIkZ1UZJmJsKI5luu+XfHV
+lltVNmLDtjPuLoiM8i/p83t1/wASIvUdjLGLATfJnHxdbiWbrXbZ8tn1XRzEB0GEBBnCAgIggIog
+IggICDKDYfRFZQEGqAgICAgII5/6mT/Nf+RBmP8Aqw/zW/kQbICAgINJJoomzIbA3xJ8KTMRmREy
+oT+Q6uJnxKxu3sPX+NcLvE2RtdY0L52OdN5hE3SKHl+Lu/8AiXC7x0bIdo8JO2VKXy+6TOwxgOWf
+4v8A4Vxu8ddudY8Ja5El+U3cn9V4L7YumsvXbhk0a7Mz/V/IpyQtZay25TFxd8s/uPR1yv0NzcXp
+acUEcWY25O/u/qvHdp0l05kss7DgePF0mGoakeWzlZVQiF7N92LqAN+j1S6dw6UztCPEWZmwpEJD
+myzcLMbfzss6t0NQszC3b5M3srbKSpG/o/w9WXaJYdLx+V+5J16PjDL7X+Luzh83x8ZS9tUkyAsv
+rvnLgev6EGD+p0RtH9DIrIkJDyF8t8WUGpeqqMv9DIAe6DUPqZBI6K1QYVBQEGpkwi5P6M2XSR5z
+Y7J5ZHx0Fugs3q65zi6Rg5fM5C+DfH4K0KrEAuT4D9Jv7rMrDsUqrN19/d1FdEWZmWkbIjKg1cco
+tVeUTB+Ytl/dvYm+CRJMPNHEMN5xb6eeR/Bn6s36PRanJLXbhZ3FlydloWZaZlvhEZHCsDdzEfV8
+IgEgF6E2USWZIhNuqUKuLYrnHO7M/R36LLTcK+XZnLDt9TejosQmKs4kwv8ATkWz/CrBdLtMzMzM
+3o3Rl1eeRUHUGFRlEEBFEBEEUQEQQEBBlQbD6KqygINUBAQEBBhBpP8A1Mn+a/8AIgzH/Vj+TfyI
+NkGHdmbLvhm9XdQc63v9dWyzn3Db9UOq4anibLXazQuucO75ValyNce0L++cuvFqeNmcsHqs8LEZ
+4uPNZnmLlIbm/wCLrx3Xzdm9MWxGSF1lpjig1f4JVWEGroNX6JVG0Vh4ZAL/AO2b4L8HdYvsqtV5
+jHOH915LraOtstTJnbDLlLpCvQFo55M9Hfrlc7mk9qUM+uWXSIZceEjt32cG+SP39lL2odu0fGDg
+3q6zaztcmR+vT1XotSXS0L/PI+PTHVfZ/wAXGcvm+PnJ7Ki/ysvsPmulG+XQayt87u7+j9ERIH9W
+osKEeulGJyKYnmw/04Yc/DClFqQfe8XITZ+HQoS9en4pAugYnEJN6OrCNh9/yVRoH1Mglf0RWqDC
+Agwg5+7ttBUcR6yS/KLfh7upKw807devV/dZbZAOXT0b1J1KizA7MbMPRmWZWHbqvkG+CCcpBFsk
+/wCTfFUac7ZP8kYiP+W/X+JFbhJZziQG/NnRKJuiqKs/3BE4g7AH871dRqHG2tQo5Ip+XP5mYnxj
+8sqlEoWbIj0YXb4O+Fh0mEkd8s4MW/MXZ1WV1pHIcs2UWivPLMw559tvgzdUqUQDKwOLuByufo7v
+/gZVmV+I5W6vE4t7P0UF0Xy2fT8FpiVOxHylZsdfisy3CvPXflydvT3brn8OijdqefPCJ3yzthyb
+8vj/AArTFzpA+RZdHCWVUHUVhUZQEBAQEBARBAQEBAQbj6IrKAg1QEBAQEBBpN/Un/mv/IgyP0D+
+TIObst7Wp5Af6Sb+az9G/NebW8TbZ0u2loTd0PNXd3ftO7FJwD+aHRfO1PFX3cHvs8Pba5zu7vl/
+4V55l2owpUY/FRWBMSLi3X8VmZWiYoHZst1SJEDt6qojL0VGH6IIzf0SBU2UhR0TNnwWWcfzyy1b
+mk5OhSsfcVwlZ/qbquetp0TTuTu74wvFda9Nste2+WJuj+65zDVVS1RtTE/akdmf2WcYaii7Q18d
+OLLvkv1nStUlFbsOZPjo3stxFEo5xG/J8fxLrCS7ujhIa/N2w8j/AMTdF+i/x2ny6dd743jL6303
+PW0mfiOF73kdCH6v0INJSfk7f5SgnD6GVBywzv1fHXp6qDn1JZAeUpYyBn5Ezuz/AByswrfWycoO
+BZY85w/4q2pK6P6y0jQPqZBK/oitUGEBAQec8ikL7sG/VEG4/m6zLUOWTsLM3v7/AIu6y0kZ3wwM
+/wCJOoqxTDnIwt6fFRYd6MWAWZlUH4i7mXt6P8GRVVr0k0rhGbRi3qRKkkdicLXZI+6D44mzdOqg
+vAbuPVEogsA5Fg+Xb93H1RXIkhsN3YyYuy+Xjcuvo+WSWobx1g+o2d8tjPr/ABKVamGWqQsLsDP1
+9/41ZlIhfoM7Bh+uOikEpZoBPLOyJEogiIH+XH4dFVWYhd/qfLqJKdui1DEsuIu+XbqqlWnAe7zx
+1ZsZWWnNOyMlp8FiIflbHv16ukpLsA2AZvddIcpbKoOisMgygICAgICIICAgICAg3H0RWUBBqgIC
+AgICCOb+pPP81/5EHn9vvch9vVf0bByf4l83xHi9lr3aHhttzzxu5Pl3y/uvnTL2xDR2UlWr9PV1
+BkB7mePVKlFXYc4wZvTL9fyRYTtCI1wdv1my7rMCCC0dS00cju8Ev0u/s6Sua1ZjYT6fS/VlYRWL
+qqjTLKjQsu7MyDj762Hy1xf6Op/mumnGNWb5dPSgUeviYujv1/hW9WKuVsujlfN1IeuxhzZmd/4l
+wmHWGoz490iBpNZ6fgrEEqckuc9VeUq1pxPZnaIP1n6/k3q69Xh9Gb74iHHW1IstmZetpwMABGLf
+KDMy/UW28sRD4N01mr0dePACtItRfV+hEaG/zl+aipg+hlRh3+V1Bq7/ACoDZx0SCWwO+CyqNQ+t
+v0oiV/RFaoMIDoCDzvkMMjW45n/q3HDfg7dXWZahxhdykz7N1UaS8sNj4qKu6w2aVvxUWHc9lAIB
+McF1b3ZFbRxRi2BFm/JsKo24Ogenyt6oAlERODuzu31Nlun5oNHhAmfGHF/ZFVhi7RcH9P1X/BSj
+dWDcfRvV1BJW6O6sJKyWHbD+6rCvJLwd2cHw3q7KNwlhlAmyLqwzMLAuzsqyyiKliGSaQIhNwZ3c
+pcfzW6Y/S6sRUmcE7Ua3RiFnwt8rHMs4w2PZGRAdFYZBlAQEBEEBAQEBAQEBBuPoisoCDVAQEBAQ
+EHF8g2BxD9tG+CkH53/B14vGa/LHLG16vDaXNNZeZJfIl9GGjsorR2QVJ2OSYYvQH6u6krDexLJB
+CRwvjh1x8UoN5Xa5rwMmwRs7LMSTFGmtnaau9aTpNF0/gVyVR27E4DGPWXORwkyQ6kpP9vGxdSZm
+ykIqE/VbRE7sgguWxqwvIX1v0Bv8K1FtSZebijku3hj9XkLJl+Hq69NsUcLpexjZhFhH0ZsMuepK
+WQ3InFvyXz9R67FdybGX9Vwl1aOWXSFaSyMwqooTWBAHz6v6LpbCTL0XjutKCu9iVv6aZujfzR9V
++h8F4b6dtZzl8fxWvzzSMoejpQO7s7svc8jv8OIig3i+r9CIiL6y/NRU4f1bKjUvpdQav9L/AJMo
+Mj7/AJqwNh/WVGgfWP6URK/oisIMIDoCDnb0GOg7O+MEzrMrDzDC3V29HWatjtl+n8SLRd10Zd1n
+duizMtRDuMXRRWwvlUSitMt/ZEQlG7k7sT9fVlFax14ImwAsOfgitmJh6t9Po7IILpMzCXwf+VlJ
+atUSl+dibrj2UbosVrcb9H6P8HVhmYWnsM+GHGfirVmg7OTdWy7olVZxcJcj0+LLLVVxjdnD8c5S
+rMwl5thaZo2gHqUj+pPhvyZdLYc7pbG+P0rbDbn8vT1UorbLe6UB+qlFYQZQEBARBAQEBAQEBAQb
+j6IrKAg1QEBAQEGHfDIPHbKV5rsx/jhv0dF8LxF3NfMvraNtLYhTdlwdmpD1UGhD0QhETe6CjtDd
+qpC3qbsLfpdSVhaYwr0YYy9cdGb1dSJWmKEqjmzWG/o5G/hwrWo2Do/Iup/FTlSrEkjl6utIhI/Z
+WFQTTBEDyydAH+N/grEJLzl+5Lamz1d36AK9FltHK65f10D1I+bv/Tl1J/h+C78uDhN1ZXX2oi2D
+Z/zZeXVtl2sbjtKsmG5dfg/RfPviXrtCtxYy5Nj82XOkt1QnsarZ/pG/QnJKVUZdm59I2x8Hf/Eu
+9mhMsXakOv4/opZ5Ru2x+RnyAF6l+OF9jwnhKYy+f4jxGyHs4IXL0ZfTfPdipXcRbog6EvoyDEf1
+P+SCIvrf83UROH9WyqtX+l1Bo7/L/AoMirBLcfQlRoH1j+lBK/ogwgwgIMIObuYpTqk4tlmdsv8A
+BlmVteeYgEx5f1bOzO34ZWKOsOvBWFhN2Fvlf0x69PRR0WI4xdssPH0y3wypRiUrM+MINxVEjKoH
+IwM7k+Gb3QoiEpZX+X5Q9cv6ujWEJhrM31yP+nC0zN6o2AuFGDuUZhyZ/wAfdZluZwRbN3CMP5vJ
+md/hllKJEufM5xtzYOTN6spDVU9RzmBjCJnZ/wAfxwrQrC/BWsZ+kY2zh/d1aMzdBMwMDcpDJ3z0
+H3fOESqOKnxzKee4ePld3dhZvZlJKrOfnz8G6KKwxORsLer9Fq1m6VxnZmw3oy7xDhMtCd3LDe3q
+qNm/gZQSNhQZwyDKgxhARREEBAQEBAQEBAQbj6IrKAg1QEBAQEGsn0F+T/yKTksZvFzN/Sm/xJ/5
+V+fvnGX2LckTssS01dkEZN0SgiNlFULkLyGD9flfOPxRU4t0EpG5GzYb8GWaLVsUjv0f0WqIhJ+q
+CJz6qiGWQAF5DfiP8qqVce3LZtlhh4RN9LOvf4bwV9+UPHr+Ms085Zq14IGcjHuSv6F6M36F9jS/
+xUR70vj6v+Wr7sN5J3frxwvTH+N0+LzfqWpsorHxL4rjf/iNOdsutv8AltSNkKxws7vgnZ/ZePV/
+wc/du7Xr0v8ANR96ERBKLt6l+S+XreBv084fU0fGWamUrVPUbK4bdqEuL/ruzsP8izp6F12UOl+r
+bGcvV6nxGvWdpbJd6X2Zugs6+hpeEi3GcXh1PEzOT08FbOGFsM3ozL1vM61apgcv8EFwQ4izIiaX
+2RWIvrf8kEUjuxM/s7uoJg/q2VGCYnF2H6sPjPplQhzq1y1MMuYwbtjy9X6v8P4lmGk1C1JYAjKP
+tszszdc5fGVbUlbF8sf/AE9lpGsf1t+lBK/ogwgwgICCG0DnXlFvqcXZv4FJIeONsuTP8WZYdHS1
+N5s/bSvg2+gs+uPbr7qy3F1XWxxdzZ3diZsj+XusDDPn09FESMrA3F1QkATHDtnHoiK5w2M4aTp+
+WPVHSKNgruzfM7k/4qnMyFYI5Hkbo5dHZSUm7BsdcLISxH9JNjPwf2f9CsOUzRxHaWKQoJv6yPo/
+4t7OszDtbODasBxlmM3Fs54t6ZSJbpEuiE85OzOX6cK1ZmyE8YCz8n+Yvi6MTLY8+ykogklZsv6J
+ELKarG4j3C+ovpb8Piu1ttHG65K5dfyW2IA+Pu6itsug3Zi6IN2UVnqiM5QFBjLfFAQEBAQEBAQE
+BBuPoisoCDVAQEBAQak2RdviySPH2o3CzILt6E6+DqW0umH19Oa2whdlzbauzpJVoTMoIjH2UmFQ
+k3TqkqiJ/ZSgiI1RERfBFRFJGHU3/R7uvb4bwOpq5RhvePxHjdPSznHcpWJGlJiJug/SL+jL9B4b
+/F6enjPtS+B4j/J6l+EezCEid/xX04ij5szVGT/BWjKMibL4dKFURt0z6ugiMnyzJQqxyf26Oykw
+sXOlrvI9hTcRc3lib9QuvRcNTw1t3B6tLxV1vF7PS+Qam+4xvI0Nh/8A7cnTP5P6Lwamhda+hp+I
+tuetrVBZmdsLi7rnBmB2ZkGjs/wdBvL7IMRfU/5IIjISd2Z+rF6KCZnZouT+jNlBD97WaJpHNmbG
+eL+v5YUmViFSvLFFBJIZMzyfSHvjrjp+bqVFinEUVUGJsET8nb4dOitsEpw+k/8Ap7LTLEX1t+lF
+Sv6IMIMICAgwg8zuaDwTEYN/RyPyZ/g/uyxMNxLmE3oT+/ukKta/YTRuwSG7xv8AF/RSYWJdwHZm
+bHp7LDSZnVRuzoNmJBhBszqjJcWFJRxptpINs2jd+2PTLe5MtWQlza3cp3IRMv6G3G3yuX0k3uOW
+WrrUtmiKuQvh/j7LjMO8TVejYfXKqSssQsLKsq89nt5b+BQa1YHldpD+n1Zv8a7W2Ucbrl4i9/Zv
+RdHNqz4bPuXoitwbCzMq3ZFb+6iNsoMsgyoGeqoYb4IDqDCAgICAgICAg3H0RWUBBqgICAgIMOg8
+7u6/C20rfTI3X8/RfK8Zp0u5t73+GvrbRzXZeR6WrsiozZSVQkyggkfopKq0hIqEyZhcnda09Ob5
+pGbN98WRWclOW27dBbr8V+i8H/iLbYrqYzufn/F/5a6cLMI3qpGRZyvtRbEYQ+LN0zjLV3Z/X2VR
+G5dei0jR0Ro/v7INOr56YQau+Hxj093RUb49fioI3znD9H9lUaiZATOJOxN7qTCxL1Xj3nu01zhD
+YxZrM+OJdDZvwJeTV8NF2T26Xi7rc8YfS9Pv9ftYnOqeXFm5g/q2fivBfpzbOL6OnqRfGDpLm6Co
+YZvZBo8UbvlxbPxUAhZwcPRnZ2/hQVP2VU7Lhxybjx7pZIvTGevopRapItfVjdiYMm3oZO5P/GlC
+ZWHFnZm+C0jDBhibP1IMBG4kz59EG7+iDCDCAgIMII5IwkHiY8h9cIOBvKnblaQRwB/BujOsTDcS
+4xM/DP8ANbCo7OputLH2if5x6foWLoaiXR5uyy0x9wzJUox92KVKMFeAfdKlEEm2Bm6MqUVZtlMb
+dH4j7N7utxFUmaKvcjfrjr/jXaIcpmrcTZ+jOyqNxfD/AAf8OiTbVYuonG2UbfM3Jviy5XabpF7c
+9tAI5z1+DLnytcyatXKXhYkfPJuQD+q2euX+K72WUcL76pwjmGVziP1+ti+l2b2XRzbQXYbMhBHn
+MfWT4N1+Ky0mjfm7m/p+qykkJ2boorYW6oNmQZUGzIMqAgKg6gwgICAgICAgINx9EVlAQaoCAgIC
+DCCrsKo2ISF/qx8r/iueppxfFJb07+WavLyiUZvGbYJnXxr7Jtmkvp23RMVho7ssNoyyoqvK+FFV
+CNnyoqvLJGA5kJh/D3dLbZmaQl0xEVlQsTOfp0b2Zfr/AAHgo0baz7z8n47xs6t2Huq/XHovovno
+3dBo7PjL+nxRGos3JmUmViGJn4E7OtMy14sMIuX1F1FlIxWcEYTuEgsfUS6O/wDIkwRc1njzN2m6
+uT4d1alGjsIP/Rt6dM+qlDmZ5NLGRO2DB8P+XxSFlXdmzn1dlWWnIv41JhYle1m6t660FuubtJF6
+iz/UPuL/AJrnfZF0Ul109SbJrD7H47v4NtrYLcb/AFtgx/mk3R2/hXyNSzlmj7WnfF1sS7LOzrLY
+gKDDqjDoCDKAgIg/oitUBAQEGEGHQQzRhIDibZZ+jsoOaekrEx8XcWL0H4LMw1EuFLXs0bXRnyz5
+F29HZVXerzjNCMg/rerfB/dcphuJCDL9GUaY7XxQqglib4K0KqFh2Z+n6GW7bas3TRC+fV+rrvEU
+cZYZ1pG7Y90EgnhuvUfj7sglf0/D4qqq2YRf+kboTfW3x/yv8a5zCuropymrHCZZeB+jf5L+itss
+TCxdtcXaGP1dsm7ezN/jW2Uevi7VI8dCmPGfwZlGnSibAszfk36FiVTMg2b0/NBlkGVBlBsgICAo
+DsisIggICAgICDcfRFZQEGqAgICAgwgwTZZEcjaa5phcg6G38a8+vo88cXfS1eWXnJxliJxJurL5
+V+lNsvo26kSrvbcccm/Nc+WWqwhmtMT5YXTllaudZtSgLsDMP8aRpnMoDzlldyfLsvsf4rQib5nc
++V/lNaYsiI2pCF3d8L9K/N0RuLs2fVkSjRxb4dEqjVwfD9VakwryfKYP6fMP8qSRmzeZxIn/AAyk
+ZE5syC5Qxl6NxZ/4kiUuhSs/Q7fwKykLQixTRzO3VgZsfjhZbVjZ+WPitMNar5sSB7cHd1JzaiEL
+u7M+VWUZP0fHqgrmbi/8qzKxL3X7sNqQvaov6C7TD/1mw/8A+6vn+LtxiX0/A3YTD6lVl5iy8b3r
+CgIMIjCqiDKAgIg6K1QEBBhAQYQakyDQG6OoNJ4oHBylZuLdcupKw5w26swf+HF2ESdnJ2xn9Cxe
+6WJWf3WGgjZlRUsSdMMlVo5hFyJzf09B/JemyMHG6WjrTIiNmdUbM+EVvGWPlf09vwQDbLOyTAai
+QoLsjexgX/0WYhJWx5GLn6nKT9f4v4luWIdKMGYIgb0ZndZlpbjWVSCyDZmQbIMt8VAZBlBlA90B
+AUVhEEBAQEBAQbj6IrKAg1QEBAQYQEBBCbOTeiDnXKUcv1RsX4rF1kXZw1bdMZONY0sb545H9K89
+3hLZydrfE3QqFpjboxf9P4Fj/wCnxb/+1waPoYjfMuS/Bnwt2+EtjNm7xM7FLcUYKrQDFGwMWcv8
+fT1X1fBWRbWj5Xj75upVy36dML6D5zV2H9CCN2b0ZlUo0MG/+qRKTCnaE2EcexD/ACq1SiW50fo2
+WdkgulAJMVZmd8HG7tx+LeysJKth5DZm+Z/1vwSSG8s5BI2PQXbLfglCJxaWCjZ3Jn+X19UqnKiq
+OPGay+WZ/kjd/V/xUXYiIsMtJCAif1UqlFeV+j46ug9N+7Y3/a1x8ZxCDP8AnknXh8ZOEPo+AjGX
+1qhP0b5XdfPfSdJpmx9DoHeb+aSDHdb+a6A8vT6XQO7/AJLoHc/yX/hQZaTL44v/AAoN/m+H8aDP
+VUYQEBAQYRGEVgvRBWntxVYnkkf3+UW9XdByStSWKVic3+Z+TM3szM3RmWLs27YwV9W3/g2f/KdY
+1M27F+I/b2WGpbHjCopz4wT/AAZ+qsZk5OeIGZMIC7u/oLNleqsPPELkemvm2XBg/wA5+v8AEpzw
+tGT0t4GzwYv818pF5RUOIwJxJnYm9WdsOtRNUo1VDKDflkfxZVCGQY52N26Ozi7/AAypCSvRuzQg
+TdcB0x8X6f4UmSjoxZI8N7MzKC4LdFFSN6N+Kg2ZBlmQZUGUBkBAUGVQQHUVhEEBAQEBBuPoisoC
+DVAQEGEBAQERobZZBg48siqz12dn/NBAVNnJBgqTYQcHy+m40oZW9QJ/5F6vC3Ul5PF21teQaRjF
+vive+dVq7tn1VRh3f2QMt6OghmAXfD9fdvzZVJRyE7s2f0KwzKF/RnZsfFVELmfF2ww5+CJVEXry
+ygi5MxZduSUWJayzEfTDCLejIiCQvZBCRt/AoIJCZgKQn+Ufb4v7KVWj2H7sqpuNy4TY7hMDN+TZ
+/wAK+d4q6svq+DspD6jrgbLLyvY6jA2PRQY7Y/BKB2x+CUDtj8P+mEDgPw/6YQZ4N8P+mUGWFvgg
+k9lRhBhAQEBBhEEVqXog8vtrLy2ibPyxvxFvyWohGtGTlBZhf3ByH+DDrF8OlspdK7FVMfcS/lZc
+tRuxc44f8FhuWSJ2bDqpCnKJyu0QeshMythc69OpDXDiDZJ/qP3dbuuq5xC0yg2VEFqpDYDiY9fY
+vdlYmiPPXKckB4fq36pfFdbbqszCq/T8ltkYkGCdnQWKU5CDh7i/y/k6kj0VUBAG+OM/ioLDeiDb
+OX6IjLOorZkGWUBBn1QYygZw3qgZQZZ0GUB1BhAQEBAQbj6IrKAg1QEBBhAQEBBqXogy/oiMCzYQ
+a8W5ooYthBU22vG7Qkgx8ztkP87D4W7LuWasX280UfJbIy1bEgGLiQu7EHwdfUtuq+RdZSWI5gk6
+s62w25O+W9EKjt8EJam2cfFEo0J2bp6uqIiz7+iIryu2X+CqSqSOzv6dGVhlC5MOW9PwQRPI7+vX
+KCKQ8e/p6KEqVi2A9PUvZm9XUmVtiZyR0q9zZXYq0TOcsj4AG9G+L/oZefU1MHp09LF9n8d1AazW
+QVBb5hbMr/E36u6+dfdWavq2W0ij1lCN2ZndZbdDpj1QY6fFQMt8UDLf9PyVDogz+h/+joHX4INk
+GEGHQEBBhAQEEcru0Ru3R2F3Z/0IPFyE7m7v7+v5rcI3pycLIO/o78X/ACLos3Rg1bms6h3CaeL4
+f4HwuV7djqt1bK5OjWQct0QhpSj/APEO7/qt0/T0VgudQFqGG7LSNkBBVuwDLG7OpWivNShwNxf2
+fH8C9Fs1hzuhFlaZbV68tiVog9X9Sf0ZvioPQUdVXrPzbMkr9HMvh+DKIvi36GQb4xhvf3RWW93R
+GW/FQZZFZ6qDKDL9GQaO+PzVGvLqiNs/9PzRWWUGzIMqDCAgICAg3H0RWUBBqgICDCAgIDoIyJ2f
+0ZBr3X/msoHdf+ayB3f8lA7rfzUDut/N/jVHlPKvGmvu9mtgLDfUL+hf/Vd9LW5cJyefW0ebGM3z
+63UnrTlHKLxyD6r3WX1jB4L7KTijG4YdDbLfzmXSLocptlOFkDb5XVozVlj9firQaE+M4REZk2Py
+QU5pPV3ZWGZVTkz+Te6qK0kjcuroKs1wQz7YUmSFGSzKfo/Efj7rlOpudY0t6zqNLf21loKcfJ84
+OQnwI/i7rhfqUzerT0q4Q+q+NeJ09JG5A/etGzNJM/T82ZvgvHfqTc92npRa9LVB3lAeP1Z6/kub
+o9BBEwi3RFSoMszIMuyDCDHVAZBugIMIMOgICDGEBAQRzDzhkFvUhJm/SyDxR56P+h/zW0aM756e
+rf4ElV2oeNln2lbLf9Zs/wAq43Rg3bm64vj8lxdWzoN6wYIi+PRWElcFluGW7MqjKAg5232AVYmZ
+sPKf0D/hdItqVo8yUpm7kZZIny7/ABdd7Yo5zNWHfCqO7o6hRwlNI2Ck+ln+Deig7As+FBszKjb3
+/ldEZZlBsis4/iUGUBBoRKjXq79fX4KozxUGzMissoNkBBh1AQEBAQbj6IrKAg1QEBBhAQEGERqT
+IqN2QYwoMYQEBBqYMTIORtdLUuDxniY/g/u35P6rdt8xkzdZF2bxW28OswuR08yB/wDo3+peqzxE
+Tm8d/hpj3XmJ608EjhKBRG3s7OK9Nt+55brNkwx9zKA4+pvx9VuL97nNm5pJsMeziukTDndVo94c
+O2WyrRKq0tsHbqTN+lKJVz577dWF+X4N1Um6Fi2ZU5J5jbP0N/GuU6m50t0tsta9SxZlaKtEc8xP
+jiLOTrndfvd7bNz2vj/7tppXGbcE4R+rVgfBP/nP1Xlv19z16fh/ifQNdqqlKAa9OEYYh/VFv5X9
+155mZzeqLYjJ1IaTu2XZRVuGBhsQdPd/5EZdZ2wyNMIMj6IDoMOgwiDeqK3RBBhFYdAQEBBhAQEg
+eIsNxlNm9OT4/h6LcIib1b+BFSxlxlgk/mlxf/B/Kud0NQ7rOvO7M9XdmZIWVyIOIs38K1DMpxZa
+ZbqoyqNTIRFyJ8CzZd/wUkeOu2XtWTmd3bL4FvgLei7Ww5zKB+i0i/Q09myQmbduDLO7l6k34MoP
+TBGIthvZBJjogy3x/gQZZQZ9Onv7oNmUBBlBqZsP5qiPL/myqM9PZBlnb/GoNmd0VlQZZBlQHQYQ
+EBAQbj6IrKAg1QEBBhAQEGERh0Vo7INXZAwgIMYQYQYcWdQQS1mJnVHLv6avYBwljYxf4szq23TG
+TN1sTm8nsvBBdyKpLxf2A26fwsvRb4mdrz3eGjY83e8X3MGWKDuM36wPn+XC7261svPdoXQ4dmha
+iLEkBi/+a7/yLpF0b3KbJ3Kv2NmQuMdcyL8Af/CpN/FYs4LdXxHyC07NHWcBf9aR2Fv4srnOrbDp
+bo3Tseh1X7sW5c9lY5fCKJun6Xf/ABLjd4jc72eG3vba3TU6MAw1IRjAemWZmd/zwvPN0zm9NtsR
+k6kNIiUadCvQwzZZBd7LCCCu7M1iD8y/kVZ2rz+ijTDojI+iKy6DV0RhBlvVFbIgisIMICAgIMIC
+Ag8puKZV7Rvj+jN+QP8An1x+haqUc13wqJM9Hb4tlvzbqszCxLsVphkjZ2deeYd4XK48i5P6N/Kp
+BK2LKwylFaRsqgqOT5BceKs0IP8APN6/5reqtsMzLzmWf8H+C6sJ6FYrNsI8ZFvmP8mQerjZxx8F
+BOLfwMgz7oH8iDZkGUGVBlBGcjC/FurqxA14s/X+NVGMO3+FkGWJkB+nog29WUVszqDZkGVAdBhA
+QEBBuPoisoCDVAQEGEBAQYdEYdFYdkGrsgxhAQEGMIMIGEGHBn9UEMlUC9kFWTXi/sgqSa0X9QZ/
+zZnQQ/s4RfIgzfiwsyVSjcaRP8UVPHr39cILsNAWx0QXI64C3oglYWb0QYk+h0RTf/zEH+c/8irK
+6/oo2w6Iy3oisug1QYRGW9UVsiCKwgwgICDCAgwgyyCnfiCRmYxYhJsOzrF00lu3Fw7Ol6u8J4b+
+aX+NI1Fmxz5YZIvkkbBN8PgukTViYom1sxMfa9Xd8MuV8OlsvSRBxFh+H8qwqYWVgSMqyytDUzYR
+cnfDN1d/wZQeQ2Ft7Vo5f1fQG/yW9F2tjBiZVSdlWXpfH6ghSad2/pJny7v8GfDKDqY9kG3p0Qbe
+35oCDP4INmUBAd8MgrkOCz8VpGweuP4FBszoMOzKg3wRWRfOVEbCitmUGyAoMICAgINx9EVlAQao
+CAgwgICDDogisIMOyDCDCBhBhAQYwgYQZwgccoMPGLoNeyPwZBloRb2QSMDMg2ZsIMogg1k+h0FM
+v6+D/Of+R1Wdq6/oo2wiMt6IrLoNVRhRGW9UVsiCKwgwgwgygwgwgINZJBBsv1z6MpMrEOfanPPM
+vpb1b4MuV0u1sNc8myyzRXK2kfUT/Q66acsakMaOtztFM/pE2G/zn/xLWpLNr0IsuTaRmWkbsqg6
+DjeQX+3C1YH+eX6/wD/6rdsJMudrNTLaxJJmOv8AH3L/ADf8a6ObuHq6nZEBiBhB+RM45d2/P1QW
+w6C2McW6fL6N+hBI2PX+BQFUG9VFbfigMg2woDvhkGj/ABVRgmz/AIFRoPq6Df2yorHtj4KoIp+s
+ojLP1RWzOg3ZQZ9lBrl1FMqh1QMug3D0/Sg2QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQRWbVWpAdi1MEFeNsyTS
+kwALZx1InZmQYK5TG2FMp42tyAUsddzFpCAHZiMQzycWcmZ3SPMSji2urmnGCK5BJOTyCMQSARu8
+BMMrMLPn+jJ2Yvg/qkYk4eXX5sVpSZpFRW12zo7LXwbGlL3adgGkhlwQZB/fBsJN+llq6KZm2nGn
+Zglq2q1uvHZqzBYryixRTRExgQv6OJDlnZJigRWq0ss0MUwSS13YZ4xJnKMiFiZjZuou4uztn2U2
+VEiAg5Nvy3xinParWNrVG3SiOe1TaUDsBHGHcMngF3l6B830+ibK7PKPOR70W7ZdSKWOWIJY35Ry
+CxA/plibLeqt1sxNJS26JisbWyiiAgIIq1uraAjrTRzgBlEZRkxsxxvxMHcXfBCTYdvZNlTglQEB
+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
+gkD6gLD9CH3Z0nKuw20ZrWq1qvHZqyhPXlFiimiJjAhf0cSHLOysxQSKAgIK02ypQ7Ctr5JONy2E
+sleLiT8hh49x+TNxbj3B9XSMa8CcIrxp559CygICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgION5nsL2u8V2l6g/G3Xrmc
+R45cMN1k4v68GyWPwUwmYicIm62J6JmInuWK40is0mkb5phHXLx/kwjrquz19C/Zu07vjuxtWgs2
+JLeCjABhmE5SNwaRpDbiLsL46N0V1MromKcs29VZnDu27uLWh71k1xm7tjfwph2tNtJd00FiGnet
+8bfjF66by2JZHCzVGFo5YeRYhfEz9I+LenToumvnqcLre+bq+aHLwsf0p34T2W+XnN1sdx48xy62
+3ZszWtBZvSNamksM1iucAtMAydwY8DOTkICwvj6VdSI5r4yiL7I6IuuuiceiOpnSmZtsuzmYu66W
+xMd+HGubt+JU9/X2wzTzwfsu1UeRoW2tnaSSysYOE8b2YYe2HEiYmB+PUejJdSImJzrGzLOvHdnu
+IrNJ8p9H7XK8mtWNLutvqKhPHL5dHC+rJv1bhENS0Tf5kJRy/od1zssi+OScou/kmt135buu6HW6
+7kmNThT+KPd7a06LUVvlU1HkloL9ija8ZJq2mpxTyRwxxw14yrCdcSaOfvkX/wBwSznA4wt88zy3
+Zzffj+OlOHs0nfjXczZZETyThbbbGP8ADWbuqa8PZ6Vye92rXl+z2dq+0GreLs1q1iSNou7Qi59s
+GIQzykd255ES+bo/VZiPZimMzfNvfbTy3LF2MTOyyLp6pvr5striW9hvtZftUCmlpwsOqtFD+07G
+xkjaTYhHIRzTsJxscb4IGJwx+lb06TdSdl8Rlvtuw44xGbN2Vd9l89lMeGc5eh293a3F7yPyHXan
+YM0kFfU4qlZKAXI5rBTwhIHJ4ZZohZuQjy9PwdYs92JnH257OS3zTjTpavwmNnsf6vKHm9luNpBs
+aBaitdju0G2cF+G5O9+esDDSOc60hnL9w4RnzASP6untxWraYzM+zNueX36eeM8cMcUpNKRHtRfF
+I2TPJdMfsw6s3U8kvxyUrRaK1bsNqNVFabZzbexVhYZBkOGZmBpfupC45LujwfDD8Vi+Zt5rqUpd
+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
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
+QEBAQEBAQEBAQEBAQEBAQEBBpPPBXgknnkGGCIXOWWR2EAAWyRET9GZm9XdJlYiuEI5r9GGsNqax
+FHWNwYJzMRB3kdhDBO+H5OTMPxVpNabWYmJiuxOoqhqt7rdqU7UDklCuXApnhmCEny4v2pTAY5cO
+Ls7xkWFaYRO8nCaL6gICAghu3qVGsdq7Yiq1o+sk8xjHGLfiROzMlViHP/tf4k1H9oftuh9hzaL7
+v7qHs9x2d2DucuPLDP0yrNswzE16l6hsdfsao29faiuVTzwsQGMsb46Pgwd2dJiYzImJyVZvJvG4
+KA7GbbU4tecjwhcOxEMLyM7s4NI5ceTcX6Z9lN3Fd/DPgqD574MYmQ+RawhjblI7Xa7sI5Ycv8/R
+skzK8spzQsz+V+LV6le7PuKMNO3n7WzJZhGKXD4ftm5cSx+DpNs1ptImJiux0YZoZogmhMZIpGYo
+5AdiEhfqzs7dHZ0mKZrE1Qa3aUdnXezRk71djONpeJCJFGTiTg5M3Ict0Iej+zpTCJ34m2Y3LSgI
+Kmz2+p1VdrO0uwUK5EwDNZlCEHN2d2FiNxbOGfonAba/Z67ZVmta61DcrE7sM9eQZY3dvXBA7srM
+TGaRMSsqKjmtVoCiGeYIinPtQMZMLnI7OXAM/UWBd8N8EjcJEFbY7Klrar27snarsccbnxIvmmkG
+IGwLO/UzZkjGYjbJsmd0V7DY7Klrar27snarsccbnxIvmmkGIGwLO/UzZkjGYjbJsmd0V7FlAQVr
+OypVrVSpPJwsXjOOqHEn5lGDyE2WZ2bAC79UiK4cK+aPTBM0ivGnl2LKAgIKG13+h1DRvttlV17T
+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
+0bkDbJqkdTZ3ZTijEasgQyWP/CyGfIjL5my4ceTlhlrTnGZjPl3fPuyypE8eLN9s8tNnNG35Lq49
+VY3Y0b2r22raDZbSK5Odo95PrnkntyxQQVD2Hbdmw0oRszNxaXtkQM/TDLFkVjTj4ox405qds0jj
+ludL5pN8/Dy067bK9lZnvpnWeCPybVb7VQXLQwa+xsYWClHsrOxkHnUtcmlmsxwyPHIYA4AXJuTP
+hbtmJmm2l2z93vjGd9GJieWZ/d/Nn30bQbq5L5IbR35JKY+TvUdhlJ42jbUs/Z6Px49/rx9Of4qa
+cYW8bb/zzTu7l1MJu4fT9FUU+yuXtvPWi2Vhqp+UjScq85jiFtWxHAJC/wAo91nyzehdehdVNOKx
+ZXbbqfmup9i3zSb+EaffNtW0Fu8+0fxqS9aDVftuWn9y9iX7nsjrwtx1/unLvfNKb/Nz5YbjlW2O
+aImfhvnri/lj+XzY7Wb55ZmI32dVbce+Ij+Lodrw7YVarbuGzsikrQ7gqVKS5ZKZ8vDCwQDJMRET
+8ydmHOc/ipnZbvnm66XXeiOwmKX3bo5fy2+l65YaEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBpPBBYgkgnjGaCUXCWKRmIDAmwQkL9HZ29WdJh
+YmmMIj1uukKsUlWEyp5+0Ioxd4cjwft5b5Pl6dPZWZrNdssxFIpsV6njvj9OCzXqaypXr3Mtbhig
+jAJmJnZ+4IizHlnduqkzWKbFjCa7Vn7Cj3Hk+3i7jxdhz4Dnst17ecfR1+n0Sca1258SMKU2ZcPK
+jiTeDaGzvW2VunVs14qcFOpRlrRmEPYkkMTj5ZYeknFmYWxhatvmKztma1SYikRsivfTzUdXY6TS
+7PtftKhWvdh+UH3MMcvAviHNi4v09lImk1jNdlNjYtRqT2AbI6UBbGMHijuvEDzCD5yDSY5sPX0y
+pGFeOfEmMuGSGt4147VjmiraqnBFYMZbAR14gGSSMuQGbCLMRCTZZ39HVrOHDImMZnesTazWzvYe
+apDK9uNobTnGJd2IeXEJMt8wtzLDP06upsoVxqqy+L+MzVa1SXUUpKtN81K514ijhd3z/Rg44Dr/
+ADVeaa1rikRFKbF61UqW4HgtQx2IHcXeKUWMHcCYhfiTO3ykzO34qbarwRWtTqrcry2qcFiUoirl
+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
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBBX2Owqa6hYv3JGiqVYymnlfL8QBuRPhuvoykysRWXJi8qleGeezp
+b9KvFAdkJrL1AjMI25O3NrBDE7t1/puH44w61dFM/L0Jb7UxTb5dPcvyb/SQ2KtWxfrV7lwRKrUl
+miGWTl6cA5ZP/q5V5ZrMRsZi7CJ2Ss3b1KjWO1dsR1asTZlnmMY4xb0yRE7MyzVuIVD8l8cCpFcP
+a0xqTAUkNh7ETRmEbsJkJ8uLiLkzO7emVeWa02+vJImsVhuO+0ZSyQjsapSwjJJLG00bkAQlwlIm
+zlmAvlJ39H9VNldh6f2oYvJtNZjqy0LUF+vbsfahPWnrnG0nAjxl5B5PgfpDkX4Yy7XlmtOFexKx
+SZ3fsVdz5jqaNK1NVnr37FKevBbqRThziexOEGZGHm4ceecO3XCWxWbd100qs4V3xbM9kVdGpu9L
+cqzW6d+tZq13IZ7EM0ZxxuDZJjMXcR4t65UnCKzkRjNNqKLybxuamN2La05KZG8Q2QsRFE8gi5uD
+GxceTCLu7Z9FZiYzIxyW6GwobCqFuhZit1ZM9uxAYyxlh8PgwdxfDpMTGaRMS1/ams7Pf+7h7Pd+
+37vcDj3ufa7XLOOfc+Tj68unqkRlxWcK8EIeQaE7wUA2VUr0jmIVGnjeUiid2kZo+XJ3Bxdi6dEi
+K5E4Zsx77Ry7I9XFsap7OPLyURmjecWZsvmJn5t/AkRWKxkTNJpKz93U78lfvR9+IGllh5NzGMnd
+hMhzlhdxfD/g6lcK7Fp3qNjyjxqtFHNY21KGKUI5YpJLEQiUcue2Yu5MzifF+L+/sryzWm1K4V2K
+5+ZeOx+Sf2dluxRbJ4opowkliHuPMRCMYM58yk+Xlx4+js/ults3Vps/b3bUumLaV+99nnrh0Sth
+5F4+c9qANnUKeiJSXomnjc4AD6ilHlkGH3clNldi0xptbRb3STEIxbCtIRzPWARmjJ3nYO48TYfq
+fD5uPrjqryz5cM+xKx5u/Lt2LyiiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgp7mOrLqrcVuqV2rJEQT1AHmUgE2CFhy2css3RE5tWz
+MTg+eXK20OltaOgfb2dGeovR2KmzgsM4WHiYa0dV7cYWpCL5mdmchxj3wt31m2ebhTfWuOWym80a
+RfZTD2sd1P20yRj47dkl2ut21jcwR7Y4jgjoVa8sM0X28YAJWDqzFXkiKNx/pJQZuhMu3NHNhnbf
+M/zTdE8cKccKbnCyJi2K5TZEfy0mKdNZ3Y76vTeeUNjMekt15LYVKFspbhUYorFkGKE4wlCGWKw0
+nAi6sMblh8t6LjZNL6z8Mx11j0RMfZV0mPYpG+OyK+mk9W+jl6XQDF5XqdhCOwuV5v2lamubGuEJ
+DNMFUGfthDX7PPtlhijEnfk/XOVu2aVjCPY/119KXYxX5o7rbo9XcgtaHbSeKbMK9eeGZ/IJr08c
+McbWJqwXnk5RjOJBI/BmIGIXYsYWbJpGnXZGPD3vTMTv2w3fFZviNsW0/DZWOvGN2/ahtaGzat09
+jrrG2uWrV+EZ7mwqjV7XZqWwCTshXqGzCUosUhhh/lZn6KXRNKRSK239s2xHoS2YznGnL2RfbPrT
+WKr2f3f1NGGnsjsNf+z4bcB1ZOLOFqDv8JHHhMJcCMijcmx1LC63XROrbfHu80dUbursYtibbLrZ
+xu5buueWcevtxZ8u0e5s7ndHRhsDWcNLPI9eMHKYa1icpxhaYThkkAGAuLs+cM2OrLnpzSImf7l0
+9tkRE/i82GMNXxXCPgp/NWnXFY68cGv7CazttZtIS2uzebaVSuTbKoFZhGtWtMJ9ka1Qm4vILPIY
+Yf5WYui3ZPLdGUR7c9c2xHoScbZ30tj+eJ9b0/ilWzX2Xk3dhOGGbaPLWchcRMCqV+RhlvmZ5GLq
+3vlYj+nbH7357lu9+Z4W+Z5axFsIta2kbXXZLgeSRXDkCvK8DVj2jWWmabHbIe2/zMLuQ/rMzM7r
+WjnZPw2zE9PJdHl6zWyv+aIp/KmfT3h0U3CjKNovKht9IiaR4f2oLvN0bPDs5fl6cfwU0p/p12W3
+flv+w1cfqcYtp1RZ6YWNBFfp+Rw0deNqxqHs2rFuDY0DhemUvcNzr3XGMJecp8eLOZcS+rDJpzW3
+HZbERv2YTHR5jU97DObsd3T5b9i9tTsa7yzYWypWrMOx1kNeo9WCSZnngknIozIGcYstMOCkcR/F
+cborp327Zx/lp5bdzrbPtWTsivnhyPDtJcjep95QkBx8UoUyeaImxKzy92H5m6G2W5B6+mV38XNY
+1qbbsOOEuXh8J067Ju89rXxqttqRatrNe3BPe8ao0IrH280nZuQ9xyGdwEuy491nzJhvXqr4mOad
+WLc7prHZdtTRpbGnMxhbN1eubaeZyg8ctTeKfZznu5dvqdZbiDWyVII6wTSU5ICGOeKrF9wJkXys
+ExkT8XJvVTWuia3W7cONKxNKcKbqbmtCJi62Lpyuiftr1znNccX0FhpVKugrzaqSwbFHHWKOuJjT
+kaAv6U3fHZHDOHJvd8e6upNdWafNj6OvvcdOKaVtY+HDjv6ncXJ2EBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
+EBAQEBAQEBAQEBAQEHLk8m00E1kLdqGpHWk7Tzzz1xApBi70gt/SOQlGHzExiL46+nVemPCakxE2
+xN1caRE76Rs2zlSu7NOaK08q506aY9DleSfvH8X02toXG2VGd9sbR6lztwxQTZ9ZO+7kLRB+sbM/
+szM5OzP6fC/4rX1b7reW6OT3vZmZjhTfOyMOyJlJvti3mrh5R+3dDqavyGhasNrbFyiO/jj7lzVV
+bY2Dib44cYZXH/KKMV5tbwt1sc8Rf9KuF020r5475SLt9Kyjv+SjDLLX1+vt7m1XdhsQ0WhZo3fr
+xKWzLWg5Y6uDScmbDu2HZXS8LzRE33W6ds5TdXHqti67rpTi1M7NqTXeS6u5rJ9hIb0YqZnFfC5x
+hKvJHhzGbLuLYZ2fkxOLs7Ozuz5U1fC323xbHtc3u8uPNXd5Vrglt1ZmNseqvmxUtf51othsrMVS
+3Wm1VaKs/wC1wsRlAdi0ZiFcCbIkXEGf6v1mbC7av+O1dOyJui6L5m72eWa0tiK3eW6U+pbWkT5V
+pHbNfKXVrbzSWoJJ6uwrTwQxtNLLFNGYBEXLEhELuzC/Aur9Oj/Bea/w+pbNLrbomZplOe7vatmJ
+mkZ+UeeJjqRX/J/G9f8Ab/tDbU6f3bcqnfsRRd0cZzHzJubY69FrT8JraleSy67lzpEzTp3HNFIn
+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
+uv1Zw1tS2JjdZE804ZxHuxHCJoxFl0W2x712N08bojCv7113c5uy8ad/EgnoXPIdjDSb7aCtaoRV
+pIBuO1S3OEMNGrdmkjrzSHluXJ+vzEvTpeK/36XW6Nk3YzMXzdE8vtW21nUusiJuiI2U4QzbbPLW
+JnmtrdH71JiJxzzrtq+s0Pt/sa/2wFFW7QdmMwKIhDi3EXjNhMHZv1SZnZfmNSvNPNjNenv2uunE
+RbERknWGxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEFbZavWbSlJQ2dSG9Rm496rZjCaI+JMY8gNiF8ELO2W9V00ta/Tui6yZtujbE
+0nthJiubhf3Yfu1/5S03/D6v+jXt/WPGf3tX8d3rZ+nbug/uw/dr/wApab/h9X/Rp+seM/vav47v
+WfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07
+d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3rPp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3QP+6/
+92js7P4npsP06a+q38kafrHjP72r+O71n07d0Iav7pf3X1gIY/FNUTE+X7tSGZ8/g8gm7Ld/+b8b
+dnran4pjzH0rdyb+7D92v/KWm/4fV/0ax+seM/vav47vWfTt3Qf3Yfu1/wCUtN/w+r/o0/WPGf3t
+X8d3rPp27oP7sP3a/wDKWm/4fV/0afrHjP72r+O71n07d0H92H7tf+UtN/w+r/o0/WPGf3tX8d3r
+Pp27oP7sP3a/8pab/h9X/Rp+seM/vav47vWfTt3Qf3Yfu1/5S03/AA+r/o0/WPGf3tX8d3rPp27o
+P7sP3a/8pab/AIfV/wBGn6x4z+9q/ju9Z9O3dB/dh+7X/lLTf8Pq/wCjT9Y8Z/e1fx3es+nbuhf0
+/h3iGlsla02j1+stGDxHPTqwwSPG7sTg5RiLuLuLPj8Fx1/H6+tHLqal98Z0uumfPKxbEZQ668jQ
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgqjttUQAY3IHCScqoE0oOxWAJxKFnz1kEgJnH1yzrp9G/wCGcq5bN/RxJmnV5emGo7rT
+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
+3rPp27oP7sP3a/8AKWm/4fV/0afrHjP72r+O71n07d0H92H7tf8AlLTf8Pq/6NP1jxn97V/Hd6z6
+du6D+7D92v8Aylpv+H1f9Gn6x4z+9q/ju9Z9O3dCWr+7r931SzDaq+MamvarmMsE8VGsEkcgPyEw
+IQZxIXbLOyzf/lfFXRNt2rqTE4TE33Y968lu56FeBoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
+BAQEBAQEHwOx5Z5NPMcpbS0Lm7u4xzGAtn2YRdmZl+ijw+nEU5YfBnXvmc5R/wBpvJP/AHa5/wCo
+l/7Sv0NP4Y7E+tf8U9p/abyT/wB2uf8AqJf+0n0NP4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D6
+1/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8A
+drn/AKiX/tJ9DT+GOw+tf8U9p/abyT/3a5/6iX/tJ9DT+GOw+tf8U9p/abyT/wB2uf8AqJf+0n0N
+P4Y7D61/xT2n9pvJP/drn/qJf+0n0NP4Y7D61/xT2n9pvJP/AHa5/wCol/7SfQ0/hjsPrX/FPaf2
+m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8k/8Adrn/AKiX/tJ9DT+GOw+tf8U9q/s7PneraMr9u/XG
+XrGRTyOz++MsTtn8Fzst0b/di2ep0vnVtzme1VLd+WjWGyWwvtXMnAJnmm4OTerMXLGVv6WlWlLa
+9EMfU1KVrNEX9pvJP/drn/qJf+0r9DT+GOxPrX/FPaf2m8k/92uf+ol/7SfQ0/hjsPrX/FPaf2m8
+k/8Adrn/AKiX/tJ9DT+GOw+tf8U9r0n7vfI95N5RWqWb09ivYGQZI5pCkb5YyNnbk74fI+y8vjNG
+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
+pf3c/wDzPX//AK7/ALiReTxv9KerzvT4T+pHlsfbV8F9oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
+AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHzqf9z0JTGUG0KOJ3dwjKHm4t
+7M5dwc/wL6cf5KaY29750/4+K4Sj/ub/AN7/AOz/AOtV/Uvl7/sT9P8Am7vtP7m/97/7P/rU/Uvl
+7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v
+/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P
++bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU
+/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77
+T+5v/e/+z/61P1L5e/7D9P8Am7vtP7m/97/7P/rU/Uvl7/sP0/5u77T+5v8A3v8A7P8A61P1L5e/
+7D9P+bu+0/ub/wB7/wCz/wCtT9S+Xv8AsP0/5u77T+5v/e/+z/61P1L5e/7D9P8Am7vtdbxj928O
+k2obE7z2pIhJogaPtszmLi7v8x5+V3XHX8bOpby0o7aPg4surWr2a8L2CAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
+CAg81e2k4bO1Bc2MmpjEhGiXaB4ZGcWdzOWQDbPJ8cWIVLcemq3YTwWp/IJ42tzQ1WsUte/C3Y7n
+A3cWYpHij4kxcGfrkm/BWu2cImfs86RGzOaObb2F79sSDBMZB+0K4RxvIQg4lTc+D4zgSLq/T8VL
+axH/AJO6PQzM17LfzJaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK3dnEcPRDUbZ4+mU1b
+yyW5NDWp1Yp7EhzAZDYZ4WeFgLIyiBchIZG/Vz+CzGPZXvokzTy4OrrNi9/XDaGLhI/MShd84kjJ
+wIeXTLch9VLpwrG6rUZ0nZLj6baTWZoQtbSSHYvkrGrlhjib0fIxcgE34+vLmSXTERMxjgzPHDFF
+B5pG1ODrCU/24zzfd2Y4CflniIYjZjN+P80W9Fq7Du81ViPPPno7w3pbGthu0YwkaYBlAZzeJmAm
+5dSEJerN+Cl8csls1UNV5FPdsV4pagwjaGY4ZQleQSCFxFjbIRvg+XT8PzVjHsie1JmnbRQs+TMN
+3W2jY44j+9h+1AnJ5ZIpBijZm+VnIn9PhlZsmteNsU65W7CZj4bvRLo/tC5PalrSMdOavUaxIMRx
+yNyl5Mw5OJ+ocOjt0+LOpdNIun4f2/YtsVutjf8AsQQ+SXZghatSGUyox3jeSbhhj5Nw6Rvkvl+D
+N+S1dNOadlv7WbMaRtmvc5m122ztzy2qeQrQ6wb1dvuJInZz5FzMABxkceGOBPx/hUuw5uExC2zW
+kb6+h0ZfILNIaUuxHg0leaYxgNjEu2MbjnlEBcic8MzOzN+Ptu6PauiNn/qozZNYifLKq7T2189m
+FC5TCucld7AkEzy4ZiEeJM4B1+b2d1N/Bd072m12ttjuVKEDSyVoHksTHK8TBzZ+DBgDciwLv7N+
+K53T7My6WR7UcXNr+S/Y1az2jKR3oVJGeSQBEpZicMkRDyb0yREbtj2XW7O796ndMuVuUdE+j1pG
+82heT7dhrFY7gg0gWmKrgwImd52Do/yO3Hh6rMY+XR62pwSWvLftzeGSOtHajj7s0c1sIxdnd+Ax
+E4v3HIRz6N6tlSufDtWIy4n9rZDhtW4KTHRqDFLLKUvE3jmjGTIhwLJCxdWcm/Napv8AiozE1yzp
+Xz+pd8mt262llmpS9mw5QjHLxYsdyUQd8Ezt6Es0nmiN8rF0Urwq5ZeUywlTktl2xhitNsoBYXfv
+V+DMzO/plyyPX3VrEzMxlSKdd1PsSk5ce6kykDzSN7EcJRwSObxu51rIziASSDETm7AOCEjHp6P8
+VYis08tvqJmkV8vKnmT/ANrIn+4YaxOcNoa0Y8usgETs8o9Pbtn0/BZrhE9PdHN5qNTGMx0d8086
+lc8huXtK9qAI4YTKuQzV7PckDlPG3bkFhBwJxJ8szv8ABaiPbtifihi6cJpulOXmdcp2CFq5xnM9
+aJnsi07nycBJ4WEnYHP3znHXisTNba8PtbnCtdirW3fkp6vSzuEBHcnEDN5cPKzgb4MWhxH9PqOV
+0p7UR8voZrhPT/qot3fMq9SWcDavio4haB7IjK5YZzaGJxzIw59+OfZZjHtp6FmJ66OjqtpZvyWH
++2GKtBLLA0rycjIoj45YODdHb4l/jSMoneld3lhVVu+R2a82w40mkraxw+4leXiTiYCbuAcHy4sX
+o5N+aW4xEzvotNkbq+f1MFv5Q2dmjFGViyU4RVojMQDDwtKZchDkIi3rnk+fRLcY67u6nrSu3hHf
+X1IZdluY95MwVmN46ISyVSncYmdpJMkDsBZcmbpkW/HCkTS26d0x5lpWYjp9CSludlc3UY1wjfXT
+U4LIiZ8TFpSLJYaMsl0xx5Y6eq3Ee9XZPoZ5q06/Qu7LaWq16pSrVhsS2hlJnOTtCLRcX6uwm/Xl
+7MsVz4RVpSpeUnP9nLPU+3qXRkeOV5GIhKEXI+QMOOPyvh+WfwZWcK13V6vKSk99FC55lFYoThE8
+UZWa1gqpwWRknjIIiMe7GLM8b4b2J8Os31px+2FtnGN1V6PyG1WrENyqzSR0Suwu0vN5BiZuQm7g
+3AurenJb1ZpN3CfPLGnGFvF1adyaSk9u3ENYHHuMLH3HaPjyyXyjh/wbP5pqezWuxbPapTa4Tec1
+nDuNHAYyQyzQRxWRkmbtRvIwzRsP9HyEX9HLDrMzRY9KWfZbiTaaoo64g9iKwY1vuCYCHjG4lK7B
+0ccv0YSWqUuujdHpZrWInj6JTl5JI+vr3BhgiGR5Am+6stAISRFwcGLgfPLs+OjLMzt4VbpnG6aO
+Nd8k2ExPe1xOAS1KhtFIfyi8loozw3Exd3+nOPTqt2x7VPmt77asTOHVd3Uda/5S9KYq0oVQtwxN
+LYjlttEPzZ4hERxs5k7Nn6RZvisVjHg3TLi0/tbIcNq3BSY6NQYpZZSl4m8c0YyZEOBZIWLqzk35
+rVN/xUZia5Z0r5/U62y2P2UEU/b7kZzRRSPnjwGUmDn6PnDk3RTbEbyvszPCrmP5bBiw/YduxaGu
+OSwxxu7s8zdPRu2fT/JUicInp7o5vNRqYxmOjvmlO1NV31mUqZWKfYq7DP2krSczzxcwaUOI8OQM
+7tgiS+JiJj71Ert2OFqvIZacUFi5Ocolr6/EZZcCU0k8g8iI3w3RvmJ/ZludvTb+WqbfxeeHSDzD
+uSNXhghsWnnjhb7ey0kOJQMhLusDejxuxNx/hWYxmnT3EzTy40dfVbE7g2BliaGxVmeCaMS5jyZm
+JnEuIZZxJv1WTZVZwmil5PsR1466xJM8FdrY/cEzuzOHakdxdm+rqzdFLZ9qOiSYw7PPCjtNvsAk
+q2jCSmz1L032wyNydoxAo3NnEgY8eziXFMuboj8xGNP3vRLo0dzauETVqvcrQOMc85SMJ9xwYiYA
+YcFx5Nl3cfwV1YpE9fcls4R0Q5mh8nZtEE8rHYhpV+V64Z5fu+oxDy+snz16szLV87ejt8tqxGNO
+M9mLcvNoxGRuzBPMIBJGFW0MzOxyjE4mTCPAm7jP7s/xUiKzEcadqTNIr09zr6/ZTz27NOzAMFms
+0ZuwSPKBBKz8XYnGN85F2dsKRjCzhPS5V7aThs7UFzYyamMSEaJdoHhkZxZ3M5ZANs8nxxYhUtx6
+ardhPBvY8nClbtV5TEpGmjhheeWOGH5oWlInPhkBb8eT59FYmsdd3dT1s+qPT6nR024i2laaQGBj
+gkKGTtSNLG5MzEzhIzDyZ2JvZlnU92vCVjOjk+Pbq+Ot1Q3oneO6zxRXHl7kjyMJE3MXHpyYXw/J
+/wAWW9Se3lr3eUplWfm9PlDXT7zeXLcbRBHLAdKOdhnlYS5EZi5OUcGHf5cYwze6l2Ft07qflqbY
+6+6WaHk9uHSUbGxaD7i5gYJDnaICwzuRyu8YjGzM36vLK1dnEcPRCxtnj6ZdfTbiLaVppAYGOCQo
+ZO1I0sbkzMTOEjMPJnYm9mXPU9yZ4SRnRxPF99sf2dpob0LkF+MwhuvM8kpSALn/AEgEPTkIvh+b
+/iy3qzSu/lr3R60yrOzmp3z+xFX89iajX6wFZ+2GxP8Ae24q5PzzxAHGNmM3YfYBb0S7Dqp5olYj
+Zxnz0dbT+Ry7e3INWqzUomiIrMkuDcZ4RmHjGwF1blh8k35+ycuFeMx2MxdXy6fU7ajQgICAgICA
+gICAgICAgIOVsdXs7kdis94BpWWcTB4OUogTYIQk5sP5O4OpSua1pkryeMmMVipVt9jXXMfcQPHz
+k+lgPtycm48xHrkSWpms47699fOkYZbqehIfjglfe00/EfuorLR8PRooHh4Z5e+c5Ujj838zPL6O
+6ao4PG7UFWrFHdFpNeblQm7PUQJnYglbniRnF8dOKtZwnbSnm9TW/pqthq7RX6l2zaaWWsMwuIR8
+AfvMLfK3InFm4e7l6pGEzxinfVJival1utKjRKsM3IiOaRpWFmw8shH6O5fTyWaezEboo196Z3zV
+VLTX7M9Q9hcCeOmfeiGKDtEUjC4s5k8h+mfQWZJjPomO1Jyog1/jdrWjH9jdEJOyENnuQ8wk7bvw
+NhaQHEmYnb6nb8FqZ9Hmp6D7e+ar+21tm9rHpR2u0R8RlmIOfMG+oXYCixz9Hw7KTjKxNFYtPsSl
+q2RtwR2qrHFG4VyaLsyMLce28zvlnBnZ2L9CbZnfmzTCm5WHw+A4a8Nuf7iOFrTHkGEie0bHyZ2f
+5SB26OzfwKRFOyI7Nq7a75r3UStoNiJtKOxZ55K7VbMxQ8nMBJ3Ax+fAmzE7O75Z/gl0ViY+JbcJ
+idyTX+PfaOD/AHHPjRjo/Rj+rcn5/U/ry9P41b8Yuj4vVRLPZmJ3V75qjg8YCOEoTsOYHrg1xYHi
++A5Zkbq/ry9EuxieMxPYlkUmOFe9Hd8bls1IRu2O/wDa15oWaCLgRsYhxduUhtzF48/B/wAFbrsZ
+u2z66rbFKRs+ynpNVW2cu7a/ZkeWKOo8DG8BVsmRsWOBkZO/y9X9Pgm/jT0pOyN1fQtXdLZltWZ6
+ltq33sTQ2hKLu54s7CQPyDiWCx1yyxMViY3txdjE7lUvExIYX+6cZa9avBBIINkZKxOYy4d3Z856
+j/Gt1xmd817qeliIwp0+j1Lk2u208PCa5Xkd3+eI6vKAhx7g8nPOffnj8FJWFXX+Mz6zBa64MRGH
+GyMkPOMnYiJiAROPhx5uzNl2wnDZ9lCd6afx4pa+1iK07lsxEXkcGyDjE0eXZnFizxz7JsiPmr3x
+PoW2aTXhTz+tb2mt+/oPU7nbyURc+PL+qkE/TLevHCtfaid01Yi2ltOFHP2XiVS/tDunKQBNAUM0
+It6kTMzSMWehMwt7ezLNuFePrifQ3M5eW/1ynm1Gwt6+enevDK0kXbjOOHtuxerSHkz5Eztn5eLK
+3Y9NUjDoRB4xHHZ19iOw4lRgeF24s/cNhIQkfL+ovIb+/qm2ZjbHZ5Rgbq769PlKCbxKSxJJNPZi
+awYgHcgr9piYJglcpG5lzJ+3jOWx8FbcJieMT2ftS6KxThPevUdRcpE8MFxm13cKQYHizILGXJwa
+Xljjyd/UM491mmFJ3UWc671aPxy3HQq1Auh/4CYZqMjwu+GHk3GVu58/ynjLcVqs1idsRTuoUjHj
+66rEWov17E0la6MUdomlsxvDydpcMJnC7n8nLHoTEpG7YTjjtWdZrvsY5w7nc708tjOOOO6blx9X
+9M+qR7sRuhKYzPlkqWtB34tuHf4/tVhbPDPb4xtH/O+b6c+ylPZiPmr3xPoaiaTXhTz+tHL44b3p
+b8Nrt23lCWAnj5CPGFoTAh5NyYxb4srGEdvfT1MxGFOEd1fWsR6ib72W5PZaSWas1YmaPgLOxkXJ
+vmfp8+MP/CpMezdb8Xqo1bNLond9nqQ0dBPRnpywWhfsVY6c4nE79wInyxDgx4F1f15LVcZ4sRbh
+2967Y13e2dS93OP2oSh28Z5d3j1znpjh8FmIz4xTvanZ0qEHjIR1tbXkn7gUO8xtwx3GmEhdvq+X
+HP8AFW7H8NPN6lr+avn9bI6K/wDs2TWHsGKm8B14f6Fu6wkDgPcPnguLP7COfipf7WeaW4Tg2u+P
+fcszfccMUZaP0Z/rWFuf1N6cPT+NXU9qZnfTumpbhFsfD6qOkFUGpjVk+cO20R+2W48X/hV1Pame
+KWezTg5Y6K/+zZNYewYqbwHXh/oW7rCQOA9w+eC4s/sI5+Kzf7Wea24Tgtfsn/xmvs93/wAjFJDx
+4/X3GBs5z0xwW5u9q6fi9dWYtpERu9VFCLxiavLDPXtg08XfblLD3GYbEry5BuY8THOOXXPwWIik
+U4RHY3dNZmeNUUfhvCo8H3juX28cAydtuhRTlOJu3Lr1LHH+NaiaYxvtn8MUZmK5/N/MvfsnZBbK
+7BdijszgMdtngcoj4O/AhDusQEzPj6nb8FPMstZ/Hilr7WIrTuWzEReRwbIOMTR5dmcWLPHPsmyI
++avfE+hbZpNeFPP613Za8b2smpEfDuhwGTGeJN9JYy3o7ZUuxZsikU4Uc5vFK3foSFK5BUgeCWNx
+6TO4kLGT56O3cN/0qzSZndMU6PKMFjZvia+XXikq6GxGdMbFzv1dfn7SJo+B54uAvKfIufEHdmwI
+pdjWZzmKJTCmxUi8OEIoh+8dpa8EMUEogzOMkEhSDJhyJn+rDj/GrX0d1vL3lPT3zXuX5NTesHVk
+t3AM6tgZxaOHtg7CBDjDmZZfn1fl7eiRhNenvJisU8s6oz1uxr2DelNhrt0bFmTiP9HCMbCQMxcu
+Tk8bNlm91LcKRsx/Z39y3Y1nbSI+1Z22pi2TVRldu1XmaY4yHkxswEDg/VvXmpTGvCe82eW9zj8U
+kOAK5XnKKGGzWr8o8kMVgREWIuXzdvj+lJxrXOYjumpGE4ZVqtUtLZpSm1W2wVZnE54ii5F3GFhI
+oz5YFj4tlnEvwVv9qvGvekRSI6PMpQeGQQ1RrDYdopIPt7zCDD3uOXjkbr8hg/v16dFZn0dsUxX7
+eydi3Y02yt0nq3L4yNmJxIIOGe3IMmTyZZJ+GPl4t19Eifaid01SYwpwXIdf29pZv9zP3McUfbxj
+j2nN85z1zz+CkYV6fQt2Mxwj0q2x1ezuR2Kz3gGlZZxMHg5SiBNghCTmw/k7g6lK5rWmSu/i7BaK
+3Vs9mwMkclYnDmwMELQEBtybmxC3xZ1qs9899PUzEYU4R3V9br1orQRO1mZppSd3cgDtg34COSfH
+5k6zdFYosOTrvHLFcKMNm4M9bXZKvGEXbdzcXFiMnM88WJ8MzMrdj00okx56+lnW+OT6+WqcFsS7
+Ncathjid+4Am5s44NuBfM/ryVnGsbJp3RQp5575aweN2oKtWKO6LSa83KhN2eogTOxBK3PEjOL46
+cUrOE7aU83qXf01dMfvYKkhzO92x1fhCIRZ9uICZ4b/rH+lZvisUIeaqUNhXq6aD9mXS/ZBEXL/w
+TdzlGcfp92/H68+6t/tT/Dy+b1GyY33V75lX1ms3mqCL9nU7YSdgILXdjpyBJ2nfgYi10HAmYnb6
+nb8FZmvd5oj0H2981drRRXYtlemnp2o2vPGZSz/aswvFEMfXszSO7lxz0BmSMLacZntSmNeHr9bu
+qKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
+D//Z
+------=_NextPart_000_000F_01D15E52.0BD654A0--
+
+
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
+
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
+
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgAgXLGaohf4ZPJVDkpmpNsyXL/nccd+SyY3/deHQ8d8vp9
+Ye9Hr30Yz65+CAI7JCHKjIOaXjw1Nf1qqEDSyghKR0c16dLBGK37GlqOLaqScifZ
+/bC5WQu4V1a+dv1qnNOh3JNp5ynVpg22b5XaBggpAGCxCSrUsWWkRxTR+kBuPdn8
+EPMOlN3xKU1LFQfI+a3HMGpWo3PokVb4nrtuuwi261woSgKUSYjG86MJF1E28y+g
+bMC6rmRV+Jp0wpEmr7aogx4gELe17tglD41oLvNL9yZeEh/V8cMnnEDbO/oG+xba
+UjyM73V+TO2kXk0CTqItVbx6Q7kNWR/DfaJqGnzcy9KMAT1B8EpVCK/nN81mF8ia
+4KFKQ1OGHhcQ2tT5ZXs6m1vJ5/sz/6g0n0CMtSsWUSvPzpM5F+LK+B7dzOeJEQee
+3/S0wUFYpbAh1PyMPYobNLsEQCGtQ1PhsUXM7t1ai6jfM4k/lvbnIzUM11Q6vsnR
+LWS77CELfcW9WlQ755sNcwo3a/WySyU1C1gZdLw=
+=Fijx
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset=UTF-8;
+ format=flowed
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgAgXLGaohf4ZPJVDkpmpNsyXL/nccd+SyY3/deHQ8d8vp9
+Ye9Hr30Yz65+CAI7JCHKjIOaXjw1Nf1qqEDSyghKR0c16dLBGK37GlqOLaqScifZ
+/bC5WQu4V1a+dv1qnNOh3JNp5ynVpg22b5XaBggpAGCxCSrUsWWkRxTR+kBuPdn8
+EPMOlN3xKU1LFQfI+a3HMGpWo3PokVb4nrtuuwi261woSgKUSYjG86MJF1E28y+g
+bMC6rmRV+Jp0wpEmr7aogx4gELe17tglD41oLvNL9yZeEh/V8cMnnEDbO/oG+xba
+UjyM73V+TO2kXk0CTqItVbx6Q7kNWR/DfaJqGnzcy9KMAT1B8EpVCK/nN81mF8ia
+4KFKQ1OGHhcQ2tT5ZXs6m1vJ5/sz/6g0n0CMtSsWUSvPzpM5F+LK+B7dzOeJEQee
+3/S0wUFYpbAh1PyMPYobNLsEQCGtQ1PhsUXM7t1ai6jfM4k/lvbnIzUM11Q6vsnR
+LWS77CELfcW9WlQ755sNcwo3a/WySyU1C1gZdLw=
+=Fijx
+-----END PGP MESSAGE-----
--- /dev/null
+From: Thomas McGuire <dontspamme@gmx.net>
+Subject: Fwd: Test with attachment
+Date: Wed, 5 Aug 2009 10:58:27 +0200
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+ boundary="Boundary-00=_zmUeKB+A8hGfCVZ"
+
+
+--Boundary-00=_zmUeKB+A8hGfCVZ
+Content-Type: text/plain;
+ charset="iso-8859-15"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+This is the first encapsulating message.
+
+--Boundary-00=_zmUeKB+A8hGfCVZ
+Content-Type: message/rfc822;
+ name="forwarded message"
+Content-Transfer-Encoding: 7bit
+Content-Description: Thomas McGuire <dontspamme@gmx.net>: Test with attachment
+Content-Disposition: inline
+
+From: Thomas McGuire <dontspamme@gmx.net>
+Subject: Test with attachment
+Date: Wed, 5 Aug 2009 10:57:58 +0200
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+ boundary="Boundary-00=_WmUeKQpGb0DHyx1"
+
+--Boundary-00=_WmUeKQpGb0DHyx1
+Content-Type: text/plain;
+ charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+
+
+
+This is the second encapsulated message.
+
+--Boundary-00=_WmUeKQpGb0DHyx1
+Content-Type: text/plain;
+ name="attachment.txt"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename="attachment.txt"
+
+This is an attachment.
+
+--Boundary-00=_WmUeKQpGb0DHyx1--
+
+--Boundary-00=_zmUeKB+A8hGfCVZ--
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:52:37 +0200
+From: OpenPGP Test <test@kolab.org>
+Subject: Fwd: OpenPGP signed and encrypted
+Date: Wed, 08 Sep 2010 17:52:37 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart2148910.9CGjQOYhYJ"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart2148910.9CGjQOYhYJ
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+bla bla bla
+--nextPart2148910.9CGjQOYhYJ
+Content-Type: message/rfc822
+Content-Disposition: inline; filename="forwarded message"
+Content-Description: OpenPGP Test <test@kolab.org>: OpenPGP signed and encrypted
+
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
+
+--nextPart2148910.9CGjQOYhYJ--
--- /dev/null
+Return-Path: <doe@gmail.com>
+MIME-Version: 1.0
+Reply-To: doe@gmail.com
+Sender: Google Calendar <calendar-notification@google.com>
+Message-ID: <0000000000000d116705904d4868@google.com>
+Date: Sat, 17 Aug 2019 10:07:59 +0000
+Subject: Invitation: test1 @ Sat 17 Aug 2019 15:00 - 16:00 (CEST) (test1@kolab.org)
+From: doe@gmail.com
+To: test1@kolab.org
+Content-Type: multipart/mixed; boundary="0000000000000d114f05904d4867"
+
+--0000000000000d114f05904d4867
+Content-Type: multipart/alternative; boundary="0000000000000d114c05904d4865"
+
+--0000000000000d114c05904d4865
+Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes
+Content-Transfer-Encoding: base64
+
+WW91IGhhdmUgYmVlbiBpbnZpdGVkIHRvIHRoZSBmb2xsb3dpbmcgZXZlbnQuDQoNClRpdGxlOiB0
+ZXN0MQ0KV2hlbjogU2F0IDE3IEF1ZyAyMDE5IDE1OjAwIOKAkyAxNjowMCBDZW50cmFsIEV1cm9w
+ZWFuIFRpbWUgLSBadXJpY2gNCkNhbGVuZGFyOiB0ZXN0MUBrb2xhYi5vcmcNCldobzoNCiAgICAg
+KiBjbW9sbGVrb3BmQGdtYWlsLmNvbS0gb3JnYW5pc2VyDQogICAgICogdGVzdDFAa29sYWIub3Jn
+DQoNCkV2ZW50IGRldGFpbHM6ICANCmh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2FsZW5kYXIvZXZl
+bnQ/YWN0aW9uPVZJRVcmZWlkPU1IVTFjRE15Tm5ab00yeGxOemt3ZEdGeWJuRnZkREEyZGpJZ2RH
+VnpkREZBYTI5c1lXSXViM0puJnRvaz1NakFqWTIxdmJHeGxhMjl3WmtCbmJXRnBiQzVqYjIwNE5U
+aGhOamN5TUdFd05UWTJZVFpsWW1VNFpEUTVZak0yWm1Fd05EUmtabVZrTlRWa1lqTmwmY3R6PUV1
+cm9wZSUyRlp1cmljaCZobD1lbl9HQiZlcz0wDQoNCkludml0YXRpb24gZnJvbSBHb29nbGUgQ2Fs
+ZW5kYXI6IGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2FsZW5kYXIvDQoNCllvdSBhcmUgcmVjZWl2
+aW5nIHRoaXMgY291cnRlc3kgZW1haWwgYXQgdGhlIGFjY291bnQgdGVzdDFAa29sYWIub3JnICAN
+CmJlY2F1c2UgeW91IGFyZSBhbiBhdHRlbmRlZSBvZiB0aGlzIGV2ZW50Lg0KDQpUbyBzdG9wIHJl
+Y2VpdmluZyBmdXR1cmUgdXBkYXRlcyBmb3IgdGhpcyBldmVudCwgZGVjbGluZSB0aGlzIGV2ZW50
+LiAgDQpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNpZ24gdXAgZm9yIGEgR29vZ2xlIEFjY291bnQg
+YXQgIA0KaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9jYWxlbmRhci8gYW5kIGNvbnRyb2wgeW91ciBu
+b3RpZmljYXRpb24gc2V0dGluZ3MgZm9yICANCnlvdXIgZW50aXJlIGNhbGVuZGFyLg0KDQpGb3J3
+YXJkaW5nIHRoaXMgaW52aXRhdGlvbiBjb3VsZCBhbGxvdyBhbnkgcmVjaXBpZW50IHRvIHNlbmQg
+YSByZXNwb25zZSB0byAgDQp0aGUgb3JnYW5pc2VyIGFuZCBiZSBhZGRlZCB0byB0aGUgZ3Vlc3Qg
+bGlzdCwgaW52aXRlIG90aGVycyByZWdhcmRsZXNzIG9mICANCnRoZWlyIG93biBpbnZpdGF0aW9u
+IHN0YXR1cyBvciB0byBtb2RpZnkgeW91ciBSU1ZQLiBMZWFybiBtb3JlIGF0ICANCmh0dHBzOi8v
+c3VwcG9ydC5nb29nbGUuY29tL2NhbGVuZGFyL2Fuc3dlci8zNzEzNSNmb3J3YXJkaW5nDQo=
+--0000000000000d114c05904d4865
+Content-Type: text/html; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+<span itemscope itemtype=3D"http://schema.org/InformAction"><span style=3D"=
+display:none" itemprop=3D"about" itemscope itemtype=3D"http://schema.org/Pe=
+rson"><meta itemprop=3D"description" content=3D"Invitation from pading doe@=
+gmail.com"/></span><span itemprop=3D"object" itemscope itemtype=3D"http://s=
+chema.org/Event"><div style=3D""><table cellspacing=3D"0" cellpadding=3D"8"=
+ border=3D"0" summary=3D"" style=3D"width:100%;font-family:Arial,Sans-serif=
+;border:1px Solid #ccc;border-width:1px 2px 2px 1px;background-color:#fff;"=
+><tr><td><meta itemprop=3D"eventStatus" content=3D"http://schema.org/EventS=
+cheduled"/><h4 style=3D"padding:6px 0;margin:0 0 4px 0;font-family:Arial,Sa=
+ns-serif;font-size:13px;line-height:1.4;border:1px Solid #fff;background:#f=
+ff;color:#090;font-weight:normal"><strong>You have been invited to the foll=
+owing event.</strong></h4><div style=3D"padding:2px"><span itemprop=3D"publ=
+isher" itemscope itemtype=3D"http://schema.org/Organization"><meta itemprop=
+=3D"name" content=3D"Google Calendar"/></span><meta itemprop=3D"eventId/goo=
+gleCalendar" content=3D"0u5p326vh3le790tarnqot06v2"/><div style=3D"float:ri=
+ght;font-weight:bold;font-size:13px"> <a href=3D"https://www.google.com/cal=
+endar/event?action=3DVIEW&eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGV=
+zdDFAa29sYWIub3Jn&tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY=
+2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&ctz=3DEurope%2FZurich&hl=3Den=
+_GB&es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"url">mo=
+re details »</a><br></div><h3 style=3D"padding:0 0 6px 0;margin:0;fon=
+t-family:Arial,Sans-serif;font-size:16px;font-weight:bold;color:#222"><span=
+ itemprop=3D"name">test1</span></h3><table cellpadding=3D"0" cellspacing=3D=
+"0" border=3D"0" summary=3D"Event details"><tr><td style=3D"padding:0 1em 1=
+0px 0;font-family:Arial,Sans-serif;font-size:13px;color:#888;white-space:no=
+wrap;width:90px" valign=3D"top"><div><i style=3D"font-style:normal">When</i=
+></div></td><td style=3D"padding-bottom:10px;font-family:Arial,Sans-serif;f=
+ont-size:13px;color:#222" valign=3D"top"><div style=3D"text-indent:-1px"><t=
+ime itemprop=3D"startDate" datetime=3D"20190817T130000Z"></time><time itemp=
+rop=3D"endDate" datetime=3D"20190817T140000Z"></time>Sat 17 Aug 2019 15:00 =
+=E2=80=93 16:00 <span style=3D"color:#888">Central European Time - Zurich</=
+span></div></td></tr><tr><td style=3D"padding:0 1em 10px 0;font-family:Aria=
+l,Sans-serif;font-size:13px;color:#888;white-space:nowrap;width:90px" valig=
+n=3D"top"><div><i style=3D"font-style:normal">Calendar</i></div></td><td st=
+yle=3D"padding-bottom:10px;font-family:Arial,Sans-serif;font-size:13px;colo=
+r:#222" valign=3D"top"><div style=3D"text-indent:-1px">test1@kolab.org</div=
+></td></tr><tr><td style=3D"padding:0 1em 10px 0;font-family:Arial,Sans-ser=
+if;font-size:13px;color:#888;white-space:nowrap;width:90px" valign=3D"top">=
+<div><i style=3D"font-style:normal">Who</i></div></td><td style=3D"padding-=
+bottom:10px;font-family:Arial,Sans-serif;font-size:13px;color:#222" valign=
+=3D"top"><table cellspacing=3D"0" cellpadding=3D"0"><tr><td style=3D"paddin=
+g-right:10px;font-family:Arial,Sans-serif;font-size:13px;color:#222;width:1=
+0px"><div style=3D"text-indent:-1px"><span style=3D"font-family:Courier New=
+,monospace">•</span></div></td><td style=3D"padding-right:10px;font-=
+family:Arial,Sans-serif;font-size:13px;color:#222"><div style=3D"text-inden=
+t:-1px"><div><div style=3D"margin:0 0 0.3em 0"><span itemprop=3D"attendee" =
+itemscope itemtype=3D"http://schema.org/Person"><span itemprop=3D"name" cla=
+ss=3D"notranslate">doepadinng@gmail.com</span><meta itemprop=3D"email" cont=
+ent=3D"doepadding@gmail.com"/></span><span itemprop=3D"organizer" itemscope=
+ itemtype=3D"http://schema.org/Person"><meta itemprop=3D"name" content=3D"c=
+doe@gmail.com"/><meta itemprop=3D"email" content=3D"doepadddddddding@gmail.=
+com"/></span><span style=3D"font-size:11px;color:#888">- organiser</span></=
+div></div></div></td></tr><tr><td style=3D"padding-right:10px;font-family:A=
+rial,Sans-serif;font-size:13px;color:#222;width:10px"><div style=3D"text-in=
+dent:-1px"><span style=3D"font-family:Courier New,monospace">•</span=
+></div></td><td style=3D"padding-right:10px;font-family:Arial,Sans-serif;fo=
+nt-size:13px;color:#222"><div style=3D"text-indent:-1px"><div><div style=3D=
+"margin:0 0 0.3em 0"><span itemprop=3D"attendee" itemscope itemtype=3D"http=
+://schema.org/Person"><span itemprop=3D"name" class=3D"notranslate">test1@k=
+olab.org</span><meta itemprop=3D"email" content=3D"test1@kolab.org"/></span=
+></div></div></div></td></tr></table></td></tr></table></div><p style=3D"co=
+lor:#222;font-size:13px;margin:0"><span style=3D"color:#888">Going (test1@k=
+olab.org)? </span><wbr><strong><span itemprop=3D"potential=
+action" itemscope itemtype=3D"http://schema.org/RsvpAction"><meta itemprop=
+=3D"attendance" content=3D"http://schema.org/RsvpAttendance/Yes"/><span ite=
+mprop=3D"handler" itemscope itemtype=3D"http://schema.org/HttpActionHandler=
+"><link itemprop=3D"method" href=3D"http://schema.org/HttpRequestMethod/GET=
+"/><a href=3D"https://www.google.com/calendar/event?action=3DRESPOND&ei=
+d=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&rst=3D1&am=
+p;tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmE=
+wNDRkZmVkNTVkYjNl&ctz=3DEurope%2FZurich&hl=3Den_GB&es=3D0" styl=
+e=3D"color:#20c;white-space:nowrap" itemprop=3D"url">Yes</a></span></span><=
+span style=3D"margin:0 0.4em;font-weight:normal"> - </span><span itemprop=
+=3D"potentialaction" itemscope itemtype=3D"http://schema.org/RsvpAction"><m=
+eta itemprop=3D"attendance" content=3D"http://schema.org/RsvpAttendance/May=
+be"/><span itemprop=3D"handler" itemscope itemtype=3D"http://schema.org/Htt=
+pActionHandler"><link itemprop=3D"method" href=3D"http://schema.org/HttpReq=
+uestMethod/GET"/><a href=3D"https://www.google.com/calendar/event?action=3D=
+RESPOND&eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&=
+amp;rst=3D3&tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlY=
+mU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&ctz=3DEurope%2FZurich&hl=3Den_GB&am=
+p;es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"url">Maybe</a=
+></span></span><span style=3D"margin:0 0.4em;font-weight:normal"> - </span>=
+<span itemprop=3D"potentialaction" itemscope itemtype=3D"http://schema.org/=
+RsvpAction"><meta itemprop=3D"attendance" content=3D"http://schema.org/Rsvp=
+Attendance/No"/><span itemprop=3D"handler" itemscope itemtype=3D"http://sch=
+ema.org/HttpActionHandler"><link itemprop=3D"method" href=3D"http://schema.=
+org/HttpRequestMethod/GET"/><a href=3D"https://www.google.com/calendar/even=
+t?action=3DRESPOND&eid=3DMHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa2=
+9sYWIub3Jn&rst=3D2&tok=3DMjAjY21vbGxla29wZkBnbWFpbC5jb204NThhNjcyMG=
+EwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&ctz=3DEurope%2FZurich&hl=
+=3Den_GB&es=3D0" style=3D"color:#20c;white-space:nowrap" itemprop=3D"ur=
+l">No</a></span></span></strong> <wbr><a href=3D"htt=
+ps://www.google.com/calendar/event?action=3DVIEW&eid=3DMHU1cDMyNnZoM2xl=
+NzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&tok=3DMjAjY21vbGxla29wZkBnbWFp=
+bC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&ctz=3DEuro=
+pe%2FZurich&hl=3Den_GB&es=3D0" style=3D"color:#20c;white-space:nowr=
+ap" itemprop=3D"url">more options »</a></p></td></tr><tr><td style=3D=
+"background-color:#f6f6f6;color:#888;border-top:1px Solid #ccc;font-family:=
+Arial,Sans-serif;font-size:11px"><p>Invitation from <a href=3D"https://www.=
+google.com/calendar/" target=3D"_blank" style=3D"">Google Calendar</a></p><=
+p>You are receiving this courtesy email at the account test1@kolab.org beca=
+use you are an attendee of this event.</p><p>To stop receiving future updat=
+es for this event, decline this event. Alternatively, you can sign up for a=
+ Google Account at https://www.google.com/calendar/ and control your notifi=
+cation settings for your entire calendar.</p><p>Forwarding this invitation =
+could allow any recipient to send a response to the organiser and be added =
+to the guest list, invite others regardless of their own invitation status =
+or to modify your RSVP. <a href=3D"https://support.google.com/calendar/answ=
+er/37135#forwarding">Learn more</a>.</p></td></tr></table></div></span></sp=
+an>
+--0000000000000d114c05904d4865
+Content-Type: text/calendar; charset="UTF-8"; method=REQUEST
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+PRODID:-//Google Inc//Google Calendar 70.9054//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VEVENT
+DTSTART:20190817T130000Z
+DTEND:20190817T140000Z
+DTSTAMP:20190817T100759Z
+ORGANIZER;CN=doe@gmail.com:mailto:doe@gmail.com
+UID:0u5p326vh3le790tarnqot06v2@google.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
+ ;CN=doe@gmail.com;X-NUM-GUESTS=0:mailto:doe@gmail.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
+ TRUE;CN=test1@kolab.org;X-NUM-GUESTS=0:mailto:test1@kolab.org
+X-MICROSOFT-CDO-OWNERAPPTID:-750968860
+CREATED:20190817T100754Z
+DESCRIPTION:-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
+ :~:~:~:~:~:~:~:~::~:~::-\nPlease do not edit this section of the descriptio
+ n.\n\nView your event at https://www.google.com/calendar/event?action=VIEW&
+ eid=MHU1cDMyNnZoM2xlNzkwdGFybnFvdDA2djIgdGVzdDFAa29sYWIub3Jn&tok=MjAjY21vbG
+ xla29wZkBnbWFpbC5jb204NThhNjcyMGEwNTY2YTZlYmU4ZDQ5YjM2ZmEwNDRkZmVkNTVkYjNl&
+ ctz=Europe%2FZurich&hl=en_GB&es=1.\n-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
+ :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~::~:~::-
+LAST-MODIFIED:20190817T100754Z
+LOCATION:
+SEQUENCE:0
+STATUS:CONFIRMED
+SUMMARY:test1
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+
+--0000000000000d114c05904d4865--
+--0000000000000d114f05904d4867
+Content-Type: application/ics; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFyIDcw
+LjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6UkVRVUVT
+VA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTkwODE3VDEzMDAwMFoNCkRURU5EOjIwMTkwODE3
+VDE0MDAwMFoNCkRUU1RBTVA6MjAxOTA4MTdUMTAwNzU5Wg0KT1JHQU5JWkVSO0NOPWNtb2xsZWtv
+cGZAZ21haWwuY29tOm1haWx0bzpjbW9sbGVrb3BmQGdtYWlsLmNvbQ0KVUlEOjB1NXAzMjZ2aDNs
+ZTc5MHRhcm5xb3QwNnYyQGdvb2dsZS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP
+TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1jbW9s
+bGVrb3BmQGdtYWlsLmNvbTtYLU5VTS1HVUVTVFM9MDptYWlsdG86Y21vbGxla29wZkBnbWFpbC5j
+b20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JPTEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRT
+VEFUPU5FRURTLUFDVElPTjtSU1ZQPQ0KIFRSVUU7Q049dGVzdDFAa29sYWIub3JnO1gtTlVNLUdV
+RVNUUz0wOm1haWx0bzp0ZXN0MUBrb2xhYi5vcmcNClgtTUlDUk9TT0ZULUNETy1PV05FUkFQUFRJ
+RDotNzUwOTY4ODYwDQpDUkVBVEVEOjIwMTkwODE3VDEwMDc1NFoNCkRFU0NSSVBUSU9OOi06On46
+fjo6fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46
+fg0KIDp+On46fjp+On46fjp+On46On46fjo6LVxuUGxlYXNlIGRvIG5vdCBlZGl0IHRoaXMgc2Vj
+dGlvbiBvZiB0aGUgZGVzY3JpcHRpbw0KIG4uXG5cblZpZXcgeW91ciBldmVudCBhdCBodHRwczov
+L3d3dy5nb29nbGUuY29tL2NhbGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJg0KIGVpZD1NSFUxY0RN
+eU5uWm9NMnhsTnprd2RHRnlibkZ2ZERBMmRqSWdkR1Z6ZERGQWEyOXNZV0l1YjNKbiZ0b2s9TWpB
+alkyMXZiRw0KIHhsYTI5d1prQm5iV0ZwYkM1amIyMDROVGhoTmpjeU1HRXdOVFkyWVRabFltVTRa
+RFE1WWpNMlptRXdORFJrWm1Wa05UVmtZak5sJg0KIGN0ej1FdXJvcGUlMkZadXJpY2gmaGw9ZW5f
+R0ImZXM9MS5cbi06On46fjo6fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fg0KIDp+On46
+fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46fjp+On46On46fjo6LQ0KTEFTVC1NT0RJRklF
+RDoyMDE5MDgxN1QxMDA3NTRaDQpMT0NBVElPTjoNClNFUVVFTkNFOjANClNUQVRVUzpDT05GSVJN
+RUQNClNVTU1BUlk6dGVzdDENClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVORDpWQ0FMRU5E
+QVINCg==
+--0000000000000d114f05904d4867--
--- /dev/null
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/html; charset="windows-1252"
+
+<html><body><p><span>HTML</span> text</p></body></html>
\ No newline at end of file
--- /dev/null
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Type: text/html
+Content-Transfer-Encoding: 7Bit
+
+<html>
+<head>
+</head>
+<body>
+<b>SOME</b> HTML text.
+</body>
+</html>
--- /dev/null
+From foo@example.com Thu, 26 May 2011 01:16:54 +0100
+From: Thomas McGuire <foo@example.com>
+Subject: HTML test
+Date: Thu, 26 May 2011 01:16:54 +0100
+Message-ID: <1501334.pROlBb7MZF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Type: text/html
+Content-Transfer-Encoding: 7Bit
+
+<html>
+<head>
+</head>
+<body>
+<b>SOME</b> HTML text. <img src="http://example.org/test.img" >
+</body>
+</html>
--- /dev/null
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
+_______________________________________________
+test mailing list
+test@lists.kde.org
+http://kde.org
--- /dev/null
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted - no seckey
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+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
+3Qu241eOBdb6
+=J3lb
+-----END PGP MESSAGE-----
--- /dev/null
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
--- /dev/null
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted - no seckey
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+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
+3Qu241eOBdb6
+=J3lb
+-----END PGP MESSAGE-----
--- /dev/null
+Return-Path: <john@doe.ch>
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="=_d141ae2d08ab2e576b4155f7053a7d1f"
+From: john doe <john@doe.ch>
+Date: Fri, 02 Aug 2019 21:02:28 +0200
+Message-ID: <dd32f5c736a700b72d3debd747b9a8c3@mailqueue.ch>
+X-Sender: john@doe.ch
+To: test1@kolab.org
+Subject: You've been invited to "test1234"
+
+--=_d141ae2d08ab2e576b4155f7053a7d1f
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset=UTF-8;
+ format=flowed
+
+*test1234*
+
+When: 2019-08-01 10:00 - 10:30 (Europe/Zurich)
+
+Invitees: john doe <john@doe.ch>,
+ John Doe <doe2@test.ch>,
+ test1@kolab.org
+
+Please find attached an iCalendar file with all the event details which you=
+=20
+can import to your calendar application.
+
+In case your email client doesn't support iTip requests you can use the=20
+following link to either accept or decline this invitation:
+https://kolabnow.com/apps/?_task=3Dcalendar&_action=3Dattend&_t=3D0a896de59=
+2c86b51039f3ff8e127514ab6dbc396.dGVzdDFAa29sYWIub3Jn.d9bc91
+--=_d141ae2d08ab2e576b4155f7053a7d1f
+Content-Transfer-Encoding: 8bit
+Content-Type: text/calendar; charset=UTF-8; method=REQUEST;
+ name=event.ics
+
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Roundcube libcalendaring 1.4-git//Sabre//Sabre VObject 3.5.3//EN
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VTIMEZONE
+TZID:Europe/Zurich
+BEGIN:STANDARD
+DTSTART:20181028T010000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20190331T010000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20191027T010000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:39946D057115AA1B6A273693CF95D35C-24397012EEE1180F
+DTSTAMP:20190802T190228Z
+CREATED:20190802T190228Z
+LAST-MODIFIED:20190802T190228Z
+DTSTART;TZID=Europe/Zurich:20190801T100000
+DTEND;TZID=Europe/Zurich:20190801T103000
+SUMMARY:test1234
+SEQUENCE:0
+TRANSP:OPAQUE
+ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDI
+ VIDUAL;RSVP=TRUE:mailto:doe2@test.ch
+ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;RSVP=
+ TRUE:mailto:test1@kolab.org
+ORGANIZER;CN=john doe:mailto:john@doe.ch
+END:VEVENT
+END:VCALENDAR
+
+--=_d141ae2d08ab2e576b4155f7053a7d1f--
--- /dev/null
+Return-Path: <from@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: From <from@example.org>
+Reply-To: List <list@example.org>
+To: List <list@example.org>,
+ "To" <to@example.org>
+Cc: CC <cc1@example.org>
+List-Id: List <list@example.org>
+Sender: List <list@example.org>
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+test
--- /dev/null
+div.header {
+ margin-bottom: 10pt ! important;
+}
+
+table.textAtm {
+ margin-top: 10pt ! important;
+ margin-bottom: 10pt ! important;
+}
+
+tr.textAtmH,
+tr.textAtmB,
+tr.rfc822B {
+ font-weight: normal ! important;
+}
+
+tr.signInProgressH,
+tr.rfc822H,
+tr.encrH,
+tr.signOkKeyOkH,
+tr.signOkKeyBadH,
+tr.signWarnH,
+tr.signErrH {
+ font-weight: bold ! important;
+}
+
+tr.textAtmH td,
+tr.textAtmB td {
+ padding: 3px ! important;
+}
+
+table.rfc822 {
+ width: 100% ! important;
+ border: solid 1px black ! important;
+ margin-top: 10pt ! important;
+ margin-bottom: 10pt ! important;
+}
+
+table.textAtm,
+table.encr,
+table.signWarn,
+table.signErr,
+table.signOkKeyBad,
+table.signOkKeyOk,
+table.signInProgress,
+div.fancy.header table {
+ width: 100% ! important;
+ border-width: 0px ! important;
+ line-height: normal;
+}
+
+div.htmlWarn {
+ margin: 0px 5% ! important;
+ padding: 10px ! important;
+ text-align: left ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div {
+ font-weight: bold ! important;
+ padding: 4px ! important;
+ line-height: normal;
+}
+
+div.fancy.header table {
+ padding: 2px ! important;
+ text-align: left ! important;
+ border-collapse: separate ! important;
+}
+
+div.fancy.header table th {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+
+ padding: 0px ! important;
+ white-space: nowrap ! important;
+ border-spacing: 0px ! important;
+ text-align: left ! important;
+ vertical-align: top ! important;
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border: 1px ! important;
+}
+
+div.fancy.header table td {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+
+ padding: 0px ! important;
+ border-spacing: 0px ! important;
+ text-align: left ! important;
+ vertical-align: top ! important;
+ width: 100% ! important;
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border: 1px ! important;
+}
+
+div.fancy.header table a:hover {
+ background-color: transparent ! important;
+}
+
+span.pimsmileytext {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ visibility: hidden;
+}
+
+img.pimsmileyimg {
+}
+
+div.quotelevelmark {
+ position: absolute;
+ margin-left:-10px;
+}
+
+@media screen {
+
+body {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+ color: #1f1c1b ! important;
+ background-color: #ffffff ! important;
+}
+
+a {
+ color: #0057ae ! important;
+ text-decoration: none ! important;
+}
+
+a.white {
+ color: white ! important;
+}
+
+a.black {
+ color: black ! important;
+}
+
+table.textAtm { background-color: #1f1c1b ! important; }
+
+tr.textAtmH {
+ background-color: #ffffff ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.textAtmB {
+ background-color: #ffffff ! important;
+}
+
+table.signInProgress,
+table.rfc822 {
+ background-color: #ffffff ! important;
+}
+
+tr.signInProgressH,
+tr.rfc822H {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+table.encr {
+ background-color: #0069cc ! important;
+}
+
+tr.encrH {
+ background-color: #0080ff ! important;
+ color: #ffffff ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.encrB { background-color: #e0f0ff ! important; }
+
+table.signOkKeyOk {
+ background-color: #33cc33 ! important;
+}
+
+tr.signOkKeyOkH {
+ background-color: #40ff40 ! important;
+ color: #27ae60 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signOkKeyOkB { background-color: #e8ffe8 ! important; }
+
+table.signOkKeyBad {
+ background-color: #cccc33 ! important;
+}
+
+tr.signOkKeyBadH {
+ background-color: #ffff40 ! important;
+ color: #f67400 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signOkKeyBadB { background-color: #ffffe8 ! important; }
+
+table.signWarn {
+ background-color: #cccc33 ! important;
+}
+
+tr.signWarnH {
+ background-color: #ffff40 ! important;
+ color: #f67400 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signWarnB { background-color: #ffffe8 ! important; }
+
+table.signErr {
+ background-color: #cc0000 ! important;
+}
+
+tr.signErrH {
+ background-color: #ff0000 ! important;
+ color: #da4453 ! important;
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+tr.signErrB { background-color: #ffe0e0 ! important; }
+
+div.htmlWarn {
+ border: 2px solid #ff4040 ! important;
+ line-height: normal;
+}
+
+div.header {
+ font-family: "Sans Serif" ! important;
+ font-size: 0px ! important;
+}
+
+div.fancy.header > div {
+ background-color: #43ace8 ! important;
+ color: #ffffff ! important;
+ border: solid #221f1e 1px ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div a[href] { color: #ffffff ! important; }
+
+div.fancy.header > div a[href]:hover { text-decoration: underline ! important; }
+
+div.fancy.header > div.spamheader {
+ background-color: #cdcdcd ! important;
+ border-top: 0px ! important;
+ padding: 3px ! important;
+ color: black ! important;
+ font-weight: bold ! important;
+ font-size: smaller ! important;
+}
+
+div.fancy.header > table.outer {
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border-bottom: solid #221f1e 1px ! important;
+ border-left: solid #221f1e 1px ! important;
+ border-right: solid #221f1e 1px ! important;
+}
+
+div.senderpic{
+ padding: 0px ! important;
+ font-size:0.8em ! important;
+ border:1px solid #b3aba7 ! important;
+ background-color:#d6d2d0 ! important;
+}
+
+div.senderstatus{
+ text-align:center ! important;
+}
+
+div.quotelevel1 {
+ color: #008000 ! important;
+ font-style: italic ! important;
+}
+
+div.quotelevel2 {
+ color: #007000 ! important;
+ font-style: italic ! important;
+}
+
+div.quotelevel3 {
+ color: #006000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel1 {
+ color: #008000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel2 {
+ color: #007000 ! important;
+ font-style: italic ! important;
+}
+
+div.deepquotelevel3 {
+ color: #006000 ! important;
+ font-style: italic ! important;
+}
+
+blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+.quotemarks{
+ color:transparent;
+ font-size:0px;
+}
+
+}
+@media print {
+
+body {
+ font-family: "Sans Serif" ! important;
+ font-size: 9pt ! important;
+ color: #000000 ! important;
+ background-color: #ffffff ! important
+}
+
+tr.textAtmH,
+tr.signInProgressH,
+tr.rfc822H,
+tr.encrH,
+tr.signOkKeyOkH,
+tr.signOkKeyBadH,
+tr.signWarnH,
+tr.signErrH,
+div.header {
+ font-family: "Sans Serif" ! important;
+ font-size: 9pt ! important;
+}
+
+div.fancy.header > div {
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ padding: 4px ! important;
+ border: solid #221f1e 1px ! important;
+ line-height: normal;
+}
+
+div.fancy.header > div a[href] { color: #221f1e ! important; }
+
+div.fancy.header > table.outer{
+ background-color: #d6d2d0 ! important;
+ color: #221f1e ! important;
+ border-bottom: solid #221f1e 1px ! important;
+ border-left: solid #221f1e 1px ! important;
+ border-right: solid #221f1e 1px ! important;
+}
+
+div.spamheader {
+ display:none ! important;
+}
+
+div.htmlWarn {
+ border: 2px solid #ffffff ! important;
+ line-height: normal;
+}
+
+div.senderpic{
+ font-size:0.8em ! important;
+ border:1px solid black ! important;
+ background-color:#d6d2d0 ! important;
+}
+
+div.senderstatus{
+ text-align:center ! important;
+}
+
+div.noprint {
+ display:none ! important;
+}
+
+blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #008000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #007000;
+ unicode-bidi: -webkit-plaintext
+}
+
+blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote blockquote {
+ margin: 4pt 0 4pt 0;
+ padding: 0 0 0 1em;
+ border-left: 2px solid #006000;
+ unicode-bidi: -webkit-plaintext
+}
+
+.quotemarks{
+ color:transparent;
+ font-size:0px;
+}
+
+.quotemarksemptyline{
+ color:transparent;
+ font-size:0px;
+ line-height: 12pt;
+}
+
+}
--- /dev/null
+-----BEGIN PGP MESSAGE-----
+
+hQEMAxicO9e1rm0dAQf/YS5XftGvy5pbk0q8OxjRWE8RBpfpvrQzo7CCWGEHrmWN
+SuZ22Ami0yIZU3EznlaGNsUJMAXKbgclKekPszujhU/jawFRea+8MaBfbTARbVXn
+l1PeWg5tDwoE0jW3TYGDYMiPj4m0nwbdxBgDHgnbV4hDV7tkIRkj9lR7NGIjYF0V
+XpsDrhLYsneffRPLvUEDRwBBl8sXcAWBbP1KwvP/FKNDucf7ORdb1VH7UX6GVs9Z
+pMa1PoeUlmOOwdTYGf9WyqFrjAFbtcAsZRvIZLHiuM3NYPBWF44z0NsRutREXf7T
+MmUzY9TzobKZasOq0wpVL5z2FKSgLesil9zVOti9i4ReAxE73d/sXd4WEgEHQLWM
+qmDePvv4eRYoTSEci8UD/5udeTED9Fbdyg+wfBFmMM3UuesqIbI+oZ6gYEl+svY5
+UzhBoefgIdGEo0wrQGy9vKmr4UztdAb17UeWkcz0c9TpAQkCEJVmqd1qJkYdjadz
+iN482dvixKRuDOjUddK4hyyyphztWG9fOgNkRljxIainPBp1ySkZ9optt73GFWbL
+9uVDV7r2Bve2K3H/90a0cLcR3K+TGN2VJIMA2jtGeVOWPsmMpZnKTNhRRiPO0+by
+yc90qB3OhFxGrqo9uM8PA92EZnia+AuyYTcf4ZGbgWn9otyrzTVV7zFQfvNL1Zfj
+FEUr5mIdGU7r+Owzd73jDXAdONHrPzVI92uhYBW7bIvLAurZ1CkFS73ttgEyvUSp
+wkEbqQaHFq5hCWXNCuCkcSLYnfuBY6S1gmflMmREAdHWajnFWFEJr+je/MioVpq0
+65EFqxU2K3IMYCfz0SH82U6aOKZFqLShtVZEAP1nvViUPbxSw8hl0olx2lNira/Y
++D4hjnr1KyQgb7Unq0VvhdqszKKPbTTt/iNK+D+dKNXft34ItN1M0+jK9bJwsJFW
+e9IcozpgsdJQ0cUtoczQMJcO2+tVvEp9P9bHB3eilMcVbrWlxzwiKzWlQ7ij3Rgg
+KONIvYTcNBduoHEIOQ3S/kXL17IRQYJznAhAqFEUMCfZV13dvDvJ+Hujhx4KB9cw
+UOlsKs8eDHzrFXE2pk6cQVExv1yQWh7bze5jay6KQbnFVGuYU5gW1zea9o1ZE7m9
+1O5y0BPmWHE3cgbb/W65tn6WtKym4J25rmvotauY5tnYbRdNJ37/zEKFw420+B8A
+D7RIeDiWbhQeo66s1EDrBCHPY0PGnYT6nO98J2hWRLd/LYM0EKsGUdJccWXLprj/
+3pU4uyJj2kPkPmPW+QGBDZXx39+BjtpLK+lds6sQj01CtNZDbJNSPaEXVItAlU4X
+XsDIb+EiCSzLbfmw+k5UTFg/rdYQqmdV
+=yPdL
+-----END PGP MESSAGE-----
--- /dev/null
+Return-Path: <from@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: From <from@example.org>
+To: To <to1@example.org>,
+ "To, 2" <to2@example.org>
+Cc: CC <cc1@example.org>, CC2 <cc2@example.org>
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+test
--- /dev/null
+From: hans@example.com
+To: karl@example.com
+Subject: Simple Mail Without Content-Type Header
+Date: Sat, 15 May 2010 10:52:24 +0200
+MIME-Version: 1.0
+
+asdfasdf
\ No newline at end of file
--- /dev/null
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+owGdk31MlVUcx5G3jClvI1JH7GiOil0uYJATBW8FK6HkDtBJI93heQ6Xk8/L9Tnn
+XExALDfJQaJutl4UzUoCIxDwos0XTLktqJaJkJE5QAU3yMKpkRqdc+GC/dsfz/bs
+ec7v+/v+Pr/v2TnbxytgxvUt8T99cCirZEa9zw/5fopuIHX1xsjjr4gXgO2EqUDW
++WdAMAVQRdQEJF0jSKKIMgNAGdsxkbBmA0jB1AxSdQ1JAAIZQxUo/BgjZpCN5Kn6
+SVEVMgPzX69CJCENEqFqYwgo2MYUCKAENjCu4MAOZBgQCNH/9NUoAoVIkw1kTLfl
+6qquKJhMeDYDqwERQRoVf9yOkI2/KTgfGbp4J5R3ViGlvGTKoANTiABk3I4ZrORF
+FGsSlhmXmTSJNKyaAKPArhsUAjc1oECOAcOHbXp8samehJOAhsSAAxViSUzKFGpg
+CSPCoWm6BiiXFNb/9waeRxqCmuhpM6ADy5P+zGAVBbyAHwYF/CQxATtTHFiDXIP7
+Uu3IEPZMDytieYokUhQOEpENTLCRuEegYYLFERXatMm5+dIoINCGBVIzeJEZMB8L
+mzK043xG3OimUQvHwF4IDUT5kqc5FyBmw1yJd1AAFtZkjKh7BN7GAd07nkSK+ayG
+5gEpOEoSUwnUPPQFc13GfOGGTjwfPcFSMQ8aF3OnbRoIDxJUEGGQ43PvyyjUNYm5
+R+L+dQnzGg1SXeCw8wDTiemoG4YIIH/s0OCjY5E/VRfsTLyESO61GVgW++c1qlBd
+oQGDUYNre9xPB0NcEnFZJoPppi4o83gU8MxxFCK9Ewvk94bz4Lk2B2z3jvD1mhHg
+5e/nLW60V8CjwZ7LTpKCxjNIzhNRXcER/6RVXUzaGdocqGY3vd+5LO7+qSV3pdFP
++s6tv3Jp8EZg+V9qza9zKhf4b3xn4MfVSYOW+qaihPsHrc3O5hpzXCV77sROqxWw
+vbfaOrpClvTszr8+8pVc/ELc0aeOm+856kqfDYNZmUXt33+Y1nLT4nvH0tomz47f
+tfzP+dlpQW8vRj3v+qcXyXpef3Hvldy2gfECZ3LMGdMomlsR8fQm42zMcLh3eW1N
+Xszwqt5dLXimuVk6vb+/etNN8xgeuhoWeb79myzXg9jUv11xbQ8OR9/wnXP7QGzj
+kWN+v+RpX58qa2dbTr2VeMn/aPJrOZ3ZYS0dW7s6dhcu/3lzT1DdhS8zGgIrynIH
+tjkf21tmXtZ8pOjj/a7xsahsEGKxLG4h+St9Oj9ace1kn1+vdWl06+nEvhPlOWnh
+5OVrw1nzTv6+pjo3K9Vr3YFZeZmu6K1jA2OW7M96Bs85ChL23ck95Cx5/bfuHeX3
+wktCXYN1/fvWpxxIfyk2/pm0N4bCRyrfS8z13VPNMr6rckbuP1YS2rp0z27X/FEy
+FPHm4OHHv7iXsuaPg5dpg6XWN9B/SG/81Bq8tv5WwMjFRVUZId6Rn+sL68uudls3
+z+vMvLwwrdw5t+Pb5ISuppDUVkvmme4nTahhwYX7setmpdxt29ZeO5MFPFK6Pep2
++nlHdfFa78ZFpSMV/Q1n/wU=
+=zzr4
+-----END PGP MESSAGE-----
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAkQI925mOOybpzcGcjUE7jmfMVoUvJW6Br9Zx9UEtko5H
+fdmnrrUhFDyhBdwcg2E6AChipNcJjZhdX17lNAO0kI2IoPJAEkX9lyhjoiVEH/M8
+xmJEKFRejYzefx0S8esKyqqtfAmMKfsA5HmKRY8iDmQnI5d/FKhkcqLTJYo7fQyL
+rEEycdr5PU5OJbMtE5+8+kbmG8PywjiCCad68FXakXIEFyWX1A99W/0ScWtqrqDB
+kuQSdxJs4aAZWopxGKxDobt/qVyG6W6+PUnLx3eg80KytcWNxLJRV7WEJMj4OYCU
+JdHrh4J1DTTRbuRmqx9de3fBDFHNNZpJP43UJYJWtoSMAxiZbYU0+6KtAQQAnRxD
+XNwzBSmPk9NG3HYf/RleTAS8/fMp3D973Y3VF5JV72ljWqZO/1o/3RIpD0pl5nSE
+nI0wPyncmPvAgQl5EAKTdYonKLuMCTbQ4eT7vkOdfA/HUxgaoE8ppH/OYXDDiqz/
+2GlNCCHcaQcVWwkHbWWgyhd/VvB7Mt9PVqPgTsHSwQ4BZf/JDwWe3MDAg21Raryf
+dN4ZmWUzd3osDIRyy8H2hZL9vgZ3r0auIP6DMyYrPf3yTj9ApZeBiIpgBvqMwvR/
+8si6r1JaXr48KRCxAkn9fIXe2jMwQE2bk5tYDrTXY868V3DA5iKq1dgXUSn0tzG3
+0x9pjaOFkwxm0wtlpwnhZREJ9/ieIY7hy6p7CDpq4ZGRh8jQta4tWrjxN0wly+Dh
+a9TjzHzgTh9BTh7vjcDLitOQFL5NcCQtK717FQ5Z1DRnkHDVLPoyPnW+5sllOVr9
+UcqNXwrPbrtElFjHULL5Y1pem1+AE6nCAtlvCAc7cil6QDsU508sOXW7BhTWATIU
+tGHg/nIC0qVs24LR3MyYrwvfXL2JOkN/IK/g+0bbs6DMYVYaEOjcjqtidxWuLsE5
+aFEwlUFzcTcSauW+AOKwH+YFihRnlh9+4taaZxGZeutb12D5u8eEk+3nyVcsdogY
+k/nT6ElN8i/Z2vgcxL6ABvB+g/bZmp/eCJphDNYc00lP8NMC4EEJvTZL438ThJ3j
+wz0Qo4PlV0/OMXYxP2iZup2/rCe+pkmc9Gyz3Mkal4/9bBtIgP9cWBR7JZLMrK50
+KO4+NtrZYEY4JXRJlAo=
+=1lYB
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
--- /dev/null
+Received: from konqi
+From: "Konqui" <konqi@example.org>
+To: "Bird" <bird@example.org>
+Subject: gpg problem 1/2
+Date: Tue, 22 Mar 2016 17:09:18 +0100
+Message-ID: <123456@example.org>
+Accept-Language: de-DE, en-US
+Content-Language: en-US
+Content-Type: multipart/mixed;
+ boundary="_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_"
+MIME-Version: 1.0
+
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: text/plain; charset="us-ascii"
+
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: application/pgp-encrypted;
+ name="PGPMIME Versions Identification"
+Content-Description: PGP/MIME Versions Identification
+Content-Disposition: attachment; filename="PGPMIME Versions Identification";
+ size=77; creation-date="Tue, 22 Mar 2016 16:09:18 GMT";
+ modification-date="Tue, 22 Mar 2016 16:09:18 GMT"
+Content-ID: <D82BB3DF89947646AD6C4C24C8C54BAC@example.org>
+Content-Transfer-Encoding: base64
+
+VmVyc2lvbjogMQ0NCg==
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message.asc
+Content-Disposition: attachment; filename="encrypted.asc"; size=872;
+ creation-date="Tue, 22 Mar 2016 16:09:18 GMT";
+ modification-date="Tue, 22 Mar 2016 16:09:18 GMT"
+Content-ID: <58A712E65AB1824AB726904A6449178F@example.org>
+Content-Transfer-Encoding: base64
+
+LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tClZlcnNpb246IEdudVBHIHYxCkNvbW1lbnQ6IFVz
+aW5nIEdudVBHIHdpdGggSWNlZG92ZSAtIGh0dHA6Ly93d3cuZW5pZ21haWwubmV0LwoKaEl3REdK
+bHRoVFQ3b3EwQkEvOU50TExYYmlJSlZTNnBPeW53RWVTem5yUUs3a1lWbGE4Uk00My8vSkVDQ2tH
+SgphekVhU0J6bmFiQnY2ZXBhRm1RdFZITE1YbENiWm5NbVc5bG95cVBCZk1vQW1zNmtLS0JkRy9q
+cWh1czg5aVhFCitzZVhuZ0MyMzNWYS9nWk1iMkR4T3FJb2tWTmZqOXRwUjd4UTh3Uy9qSFREaUxO
+YzFHT1FDN2t1NDJ6MmJOTEEKSVFGUkQvcWJCRno4OWhVNHdQNGNZb0F5c09uRURvakZyc3JuQ2lk
+VEhKT0pybmRNNlBQVXRIL2pRQ3lmci9FRwoydFNwSndZS3ZtVDZseTN5cWFHTEJ0UlBJeGl2K2RN
+ZSs3eXcwdDQwcWJqdnZhVEdhdkVyRUJKRUtYNWVXYlROCi9zamFqSHBVSHFzNlNJaU1oZUg5ZHIr
+V2Z6Rk9OdFZiUEVnR1JtT0VSaGxnVGwvbkxvODZBWnBqSnJvSUdLSkoKdFRIQ2NvUUdBV0crTjd3
+ckNFMVJ4UjBra01zNG5Sb3pqMFRMdTZaeVhNcytIMDYzTWV3VFBOeE5BaVFUMU5iaQp1ZEtXbWZM
+Qmx4bjA2cCtKRHpVS3hqOFBGd09iZGJ4VHZBQ3piQXZCWTFhSE1RPT0KPW1MbDMKLS0tLS1FTkQg
+UEdQIE1FU1NBR0UtLS0tLQoK
+
+--_003_55514CDCA78D430384C5F0810DF10C7Adsmpgde_--
--- /dev/null
+From test@kolab.org Fri May 01 15:12:47 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: enc & non enc attachment
+Date: Fri, 01 May 2015 17:12:47 +0200
+Message-ID: <13897561.XENKdJMSlR@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart1939768.sIoLGH0PD8"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart1939768.sIoLGH0PD8
+Content-Type: multipart/encrypted; boundary="nextPart2814166.CHKktCGlQ3"; protocol="application/pgp-encrypted"
+
+
+--nextPart2814166.CHKktCGlQ3
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2814166.CHKktCGlQ3
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BA/9cXFQ6mN9Vxnc2B9M10odS3/6z1tsIY9oJdsiOjpfxqapX
+P7nOzR/jNWdFQanXoG1SjAcY2FeZEN0c3SkxEM6R5QVF1vMh/Xsni1clI+peZyVT
+Z4OSU74YCfYLg+cgDnPCF3kyNPVe6Z1pnfWOCZNCG3rpApw6UVLN63ScWC6eQIUB
+DAMMzkNap8zaOwEIANKHn1svvj+hBOIZYf8R+q2Bw7cd4xEChiJ7uQLnD98j0Fh1
+85v7/8JbZx6rEDDenPp1mCciDodb0aCmi0XLuzJz2ANGTVflfq+ZA+v1pwLksWCs
+0YcHLEjOJzjr3KKmvu6wqnun5J2yV69K3OW3qTTGhNvcYZulqQ617pPa48+sFCgh
+nM8TMAD0ElVEwmMtrS3AWoJz52Af+R3YzpAnX8NzV317/JG+b6e2ksl3tR7TWp1q
+2FOqC1sXAxuv+DIz4GgRfaK1+xYr2ckkg+H/3HJqa5LmJ7rGCyv+Epfp9u+OvdBG
+PBvuCtO3tm0crmnttMw57Gy35BKutRf/8MpBj/nS6QFX0t7XOLeL4Me7/a2H20wz
+HZsuRGDXMCh0lL0FYCBAwdbbYvvy0gz/5iaNvoADtaIu+VtbFNrTUN0SwuL+AIFS
++WIiaSbFt4Ng3t9YmqL6pqB7fjxI10S+PK0s7ABqe4pgbzUWWt1yzBcxfk8l/47Q
+JrlvcE7HuDOhNOHfZIgUP2Dbeu+pVvHIJbmLsNWpl4s+nHhoxc9HrVhYG/MTZtQ3
+kkUWviegO6mwEZjQvgBxjWib7090sCxkO847b8A93mfQNHnuy2ZEEJ+9xyk7nIWs
+4RsiNR8pYc/SMvdocyAvQMH/qSvmn/IFJ+jHhtT8UJlXJ0bHvXTHjHMqBp6fP69z
+Jh1ERadWQdMaTkzQ+asl+kl/x3p6RZP8MEVbZIl/3pcV+xiFCYcFu2TETKMtbW+b
+NYOlrltFxFDvyu3WeNNp0g9k0nFpD/T1OXHRBRcbUDWE4QF6NWTm6NO9wy2UYHCi
+7QTSecBWgMaw7cUdwvnW6chIVoov1pm69BI9D0PoV76zCI7KzpiDsTFxdilKwbQf
+K/PDnv9Adx3ERh0/F8llBHrj2UGsRs4aHSEBDBJIHDCp8+lqtsRcINQBKEU3qIjt
+wf5vizdaVIgQnsD2z8QmBQ7QCCipI0ur6GKl+YWDDOSDLDUs9dK4A6xo/4Q0bsnI
+rH63ti5HslGq6uArfFkewH2MWff/8Li3uGEqzpK5NhP5UpbArelK+QaQQP5SdsmW
+XFwUqDS4QTCKNJXw/5SQMl8UE10l2Xaav3TkiOYTcBcvPNDovYgnMyRff/tTeFa8
+83STkvpGtkULkCntp22fydv5rg6DZ7eJrYfC2oZXdM87hHhUALUO6Y/VtVmNdNYw
+F3Uim4PDuLIKt+mFqRtFqnWm+5X/AslC31qLkjH+Fbb83TY+mC9gbIn7CZGJRCjn
+zzzMX2h15V/VHzNUgx9V/h28T0/z25FxoozZiJxpmhOtqoxMHp+y6nXXfMoIAD1D
+963Pc7u1HS0ny54A7bqc6KKd4W9IF7HkXn3SoBwCyn0IOPoKQTDD8mW3lbBI6+h9
+vP+MAQpfD8s+3VZ9r7OKYCVmUv47ViTRlf428Co6WT7rTHjGM09tqz826fTOXA==
+=6Eu9
+-----END PGP MESSAGE-----
+
+--nextPart2814166.CHKktCGlQ3--
+
+--nextPart1939768.sIoLGH0PD8
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+
+--nextPart1939768.sIoLGH0PD8--
+
--- /dev/null
+From test@kolab.org Fri May 01 15:13:18 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: enc attachment
+Date: Fri, 01 May 2015 17:13:18 +0200
+Message-ID: <2401407.XhOc2XYoOt@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart4793536.cjk9hKXLQ5"; protocol="application/pgp-encrypted"
+
+
+--nextPart4793536.cjk9hKXLQ5
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart4793536.cjk9hKXLQ5
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BBACLMnR5Mln6JGCccvqZCgM3qUkFWZ7a33b7Nl2g5lSOLX6q
+dlGOr/0jAuqdkRwCDTom3hsrH2vf1kARTSST+5cewngS2CgBTAwwc8JymEagTkKf
+VK/tTnM6G7puMVkwuafpuRggyJAUYvjktgUKOUaXtuxX71g0NagAFQGqlvGuq4UB
+DAMMzkNap8zaOwEH+wWSs5xdV1x37T11EnUvkhoOMu+uId2U7NEx2JdQ/FGJZdti
+mtqfM9GKTtQlGVcn3ISH7Wmrw3x0bsOLuW7oxkU4xIS3tVvibxaaWdmponN5TUai
+Dr4LCTEmG7+jLNopF6V4zPmpQ9YxMwQOm8ITml+auNOg9EtHxavwr3Xd1hOYA92N
+1bkOiHzmb9hQtUy1GfRRk91tRqtRPoaamczLxWV9yROFDRNuSSbZ8oBU/K4YgSTL
+D+/FhCt6MxV0DQzp+UCSL7ZsMx+ldPnZK44Udd17+U3xQDDUffo6cSg6FAF425Rh
+v3ZQP0j7LtSIwDh2Rxc+Is4DuSmfZksL5nLPH5nS6QGJnsVEqVcZgQPktl1Zaeil
+x/6WaWruuJm92G2fd9x2/giTLZnk918BVi/n00xR/n4bnSQmmFhXVqAVjGlG6Tr9
+dxej8dSiFdxO8ZjFe5tguQw76xlCu/9MxmSXTP7Mfvm4jqdcjUOINwHOzR/h2T62
+ZlrmqoxMHm4RN0PQ334tSzQXD4gcoUHL+xq62ATt7/jx0p0pIXPmPVUFopCk8k1E
+m2ErPLnyfGLd4LNZRL03oP0jCjX6Q/LFWLTjCIdU6+aM6nT26CZy98yZV0SRGyhu
+qYxN0aVW+RatmDRWWtouOJllQouQ7ZaqmjHLgyOj32/oT8cYUWWdFswSsnMhJjxb
+r6iajUeAZgiN+zqwgf6j1Z8/mMvb+yirP+Rn9ME1fq3XSYHlnIOxKNBa+St8DdaP
+/ZvrkwNTpVp1GmaZLBXdqdeLmflJ4U/X7wphZGR3sgjOwj0oYotX1Zb8OrtlP5WC
+VXhhrt40e7Ilt2B0x7Xe9DWKByDCqrQUhwxwTS3miiKH9G1VEcHko70O98RjKJQ3
+I4VW6e/Gqv2zAMiiOu1MBTeGfPQItca4bUrVzhKjm27twtZD4wLSQDTQECxrCWHC
+BFAdzvsIry0FIXoO6Vh16Hojq+YZ8tpmknGfpg0pnuRvAdDWU+0uuECXDE0UZFWC
+2g3Bs2Dn2BYYyrI6X92swHz8qP3JvdxN0dpsYMkMdHN4yWXJogNSfXzy2udf0A4P
+NNZMOonhlwH+DBRfcWS0A/j0/fdDCDzR5Ca5dbX7lL4EscbBeoCP1JJyVoOp6DUc
+ICuHJGGrnpNdG9DMa97tqpyGRHTAwI3lJXPKTDEHN9v9XobIyndFgi/tcPLZ7QWz
+9mN94NKLmeYWjrMiRbNQk8BYXR9K17SHb4BkIMdBxRsJjgMEC8qniUH64Nnf8/x4
+yaRCuUo0bkHDE3AqCzZE1R0he66dDkfOIz+mLwcpG8jZWjFm7sXAflBe3jvIc0lm
+NyWQ1WnMkP83fWm/+YqrLLf+tTQtievRPeS1Dd/7v9yqUWEmQ0pUOj3MNf9Ej2KI
+vu5ap7fHIevcBn42BPwQgSnp4YmXEY0ir5Ccwogusnt7QliNSRmkN6Jap4AF
+=AVJ4
+-----END PGP MESSAGE-----
+
+--nextPart4793536.cjk9hKXLQ5--
+
--- /dev/null
+From you@you.com Sat, 29 Mar 2014 15:04:21 +0100
+FCC: imap://hefee%40netzguerilla.net@mail.netzguerilla.net/Sent
+X-Identity-Key: id1
+X-Account-Key: account4
+Message-ID: <5336D2E5.6010602@you.com>
+Date: Sat, 29 Mar 2014 15:04:21 +0100
+From: you <you@you.com>
+X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.4.0
+MIME-Version: 1.0
+To: test@kolab.com
+Subject: test
+X-Enigmail-Version: 1.6
+X-Enigmail-Draft-Status: 515
+X-Enigmail-Draft-Status: 739
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1
+Comment: Using GnuPG with Icedove - http://www.enigmail.net/
+
+hIwDGJlthTT7oq0BA/9NtLLXbiIJVS6pOynwEeSznrQK7kYVla8RM43//JECCkGJ
+azEaSBznabBv6epaFmQtVHLMXlCbZnMmW9loyqPBfMoAms6kKKBdG/jqhus89iXE
++seXngC233Va/gZMb2DxOqIokVNfj9tpR7xQ8wS/jHTDiLNc1GOQC7ku42z2bNLA
+IQFRD/qbBFz89hU4wP4cYoAysOnEDojFrsrnCidTHJOJrndM6PPUtH/jQCyfr/EG
+2tSpJwYKvmT6ly3yqaGLBtRPIxiv+dMe+7yw0t40qbjvvaTGavErEBJEKX5eWbTN
+/sjajHpUHqs6SIiMheH9dr+WfzFONtVbPEgGRmOERhlgTl/nLo86AZpjJroIGKJJ
+tTHCcoQGAWG+N7wrCE1RxR0kkMs4nRozj0TLu6ZyXMs+H063MewTPNxNAiQT1Nbi
+udKWmfLBlxn06p+JDzUKxj8PFwObdbxTvACzbAvBY1aHMQ==
+=mLl3
+-----END PGP MESSAGE-----
+
+--23VWJ4jAoB40SD17lh6TOBXK3fQSEGNu5--
+
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgAsBZLlEtE8h4/5V/Pbqnv7Pahk5Hh914lw1fQ2vcs5HOs
+MhzgmiRuyFvtMT2j1/hMnk1CSkiIYoZvVEGsVurymK3orEWt8XJvIf8C20/T8zUm
+htPV4ZTlErQg/qj3U/LlciHYjMM2xaGnCffIFQKFmhuIbAgYRYEPLUaML9P/J1iy
+LQ3gEXHbignwpCUeYfO37rOAPQ0nqodm4oGMBuLjgxc2CuaJc4gFTxWOfmauYk+2
+bXooSw5I1zUWtPRz4/OX2N5XW5XDFovdFVXRIrShI4hu7l0v4k/zOuulbnw7Ce8N
+KMjPOg2BrshxNHB2NCdhbS+UCUB2UiZGc4wkbbZ2VNLAQAGhf5zZTD8b+WvvOYjs
+ObluI76Ds1WsZtX0fVgQDzzsfJ8brSBA9vfIqhXYLQTZ7V+7V5kynYLuT8pbcz/O
+U9Wb1e/50LVZofchf4FicsAaggp0z31giijXCRBVnDP1D5OaQwBEu3EyEmqh4dvX
+J6eULUUg8Z2gzIzr2Y8B2tuTrWTo+4qmW4THcVECVyDPcJZSLX0lBw8ocv9F6MEz
+UhjVU9hk8bCKSaWkR2FNHLwsyMhLdqqTGzb6BSkP+mw43HXYGUmidMN92qirM91Q
+Ui8VyGXUfuJVPEGmrHEZ7iMbUzwrDviPCl+r9oEf7uJrTBWeQNFIsPYVYX5wkk2z
+zG4=
+=ce5L
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
--- /dev/null
+References: <0000000-0a3f-cb1e-e883-00000000@example.com>
+To: john@example.com
+From: Jane Doe <doe@example.com>
+Message-ID: <00000000-6de7-f427-95a2-000000000000@example.com>
+Date: Mon, 3 Aug 2020 12:12:01 +0200
+MIME-Version: 1.0
+Subject: ...
+Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
+ boundary="CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+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
+=PCzh
+-----END PGP MESSAGE-----
+
+--CUEUeG8JvtnFfFuC0nzRrvMDVM1wngn2P--
+
+
+
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+
+--nextPart1357031.ppLHckZtsp--
--- /dev/null
+From test@kolab.org Fri May 01 15:13:51 2015
+From: testkey <test@kolab.org>
+To: you@you.com
+Subject: non enc attachment
+Date: Fri, 01 May 2015 17:13:51 +0200
+Message-ID: <20157069.RcaNBhWVXx@tabin.local>
+X-KMail-Identity: 1197256126
+User-Agent: KMail/4.13.0.1 (Linux/3.19.1-towo.1-siduction-amd64; KDE/4.14.2; x86_64; git-cd33034; 2015-04-11)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart1612969.Xqz3IcFXZ3"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart1612969.Xqz3IcFXZ3
+Content-Type: multipart/encrypted; boundary="nextPart2213427.hvfAsaxZ1O"; protocol="application/pgp-encrypted"
+
+
+--nextPart2213427.hvfAsaxZ1O
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2213427.hvfAsaxZ1O
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDGJlthTT7oq0BBACdvp3PFrRx6vxZhxt06LqyaO7+SWBbVUr7GOa3QaYCCBm+
+/KTUZEfhPuGVcsVpJKZbPsUKVhYfvYpDAsZu3TehmKflobWAV/cCIK2BkQB744pd
+oaCtTj7pmCO05Zt5Uo/tXbrgceuW+/huwn2DO2fk4MUBsluH3fMbvccZJnR3yoUB
+DAMMzkNap8zaOwEIAOTKI8Bh3NhfuJdWDsjv+UT6E4kf/zg3D95mJ+3gK8kHFXdd
+YyEKaMsYx64kSwm1KcjsJ4gWykJlB34YDDfcIrnbgO2QRss9GhgOcUtLr0KNcY+0
+OJ4sbNmI8I3XssMb4rHtDrcXc0ODd0v/C/Lw2VfUdN+bBY4EetG096OPiZ4R41kF
+Rj95nhO8tpoJx9VltegCdZI2AxtykOYvUaLFyYqCoKMmQwqGjdaUv1CeMnxUIPsn
+A/x6TQ0AjpZ5IfMqO7QmOv3ACFo5/Ur93NauOK6szg/zdih9OxUL0Qid3nZQQwqA
+J9ZChTcUgdjQo8EjpWLy0oXR9uLSHcLwRo3OdRzS6QEz7Dus6hmpEal3zTZFj2NR
+mK38tpp+eWhzSAFAx8tyImz8SU2N2o7xQHlEdlWYGeIQg0embMnmMv6WJVWhYahb
+x5OTfHCGwHFsLhZDmtaNhAVMlYdqxKXoR45H9cmGNPpU5kN5Ckjr6I+I51cfgAOE
+1vF54jYHXd1btfGrwAyKWBfFVQFPWjuIUdsEl8zDjNTmcCCbA77tEGohSqDi+WWL
+LyYw5g/uwwZ+5OzeRdjAJ+9xtJ+WXhnDUffG8GgGgZWBQD+S2Ix4lZ2NcAeyLPt/
+cXeDHkPUXj7cjm0hl7SvBKzR6X4EEWO/hh19mxngd4+e19q6Qm4K2QMfTwQQyNED
+whBkRXhcXcRxWlb/ICwFDIgxKLJko5HVTknBJDllNdm6l2C4Y9/IY2imqXni8xZX
+zQfAkDOBlfouUrHbPuBCRdCLmp7BgbanCaJDvgYGBvXEgjMKpV3bezTfm4Ugwiyk
+dJfMu/4XftZy7XqoFuDheNXuQ5JobpvVDaiTQ0EWHpHeX3TZ0xa8i1FO6ANLakUp
+aVFWzYl91bxbNHIcPh278neyi+LNWWT6TvkCwcbUYUfuIySOwfSUJAHDIJOx50Ha
+If0fNQDtF4o9mDFwXDwVf8e2zx5NjheqgYX/qIWjFE2cCCkUM4UkNrkYBOiwnh9F
+RJz4M6wKPhZT34MBlTKgwDbypDp+XYnM2HunzIDXCAigYsD/AuLNeFwsIPiXWJ47
+oXamEJxyqS9G0t/iy7+1mbNiFct7pvHt6QUKZ9aXSXj3MkQuWjjVNvMz6KocTSyL
+AeWQNYuvA5NkyZOA5+VU1ma3wn7IAXYkgw+OMvcz9VNevXNg956ZnGbb47Fqppp+
+MjK2ptM1UzIEnHxXtq3KFrXG1AzzhyFnKIjsiDpFTlMGTT9pRGnK8zyYXYPEgpwW
+874A5auLFOvhwPSNMhMai+XSoE3P+zZDqhXMYU8c49O+SeOtISg3Iy5tXuIPlIps
+7k0KA60hPulMYBQLtZ/yDO/gXhkeWaw=
+=EJZ6
+-----END PGP MESSAGE-----
+
+--nextPart2213427.hvfAsaxZ1O--
+
+--nextPart1612969.Xqz3IcFXZ3
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+
+--nextPart1612969.Xqz3IcFXZ3--
+
--- /dev/null
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP encrypted one signed and one unsigned attachment
+Date: Sun, 30 Aug 2015 12:08:40 +0200
+Message-ID: <1737262.ESByPkoaL9@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="nextPart2760349.k2GQmrcl5a"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart2760349.k2GQmrcl5a
+Content-Type: multipart/encrypted; boundary="nextPart2260160.XvshVD34ka"; protocol="application/pgp-encrypted"
+
+--nextPart2260160.XvshVD34ka
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart2260160.XvshVD34ka
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAooa+Peu1t5aiX4WvssEnRlapkr62/49/Dbz5assvshdr
+o9zOC+89Qr5P/ea+tC1MO7ek/DfyL9C4EzOMp/r08GeInLqWMc9qLZO//YaT2JUp
+0IZFbpUQ4C2zjXMRuy/PMrltHuCfsvhvHX1YAHp/xjRsKpQoE3mSDzz5sc8/Hj9n
+2eoKoCEW1rgt2qHtV4DD6lvUPo42LMZclJ9GqfoD7WLoEH9ebRLhXr3D00j6xBfy
+//nooAhzQSW8b7GZth4Qc7DKAZMhuEly/kp07nhuPd1fMJDEAB/zh9EYlgnn3STb
+MCdtFs6kMC24uA2eDCH330Bn9OzzWnsVU9ae4XiKnNLpAeactSFRKKvGytBQaloq
+Gvn1+D0Xmw6OsSmRJ84DzKqG4E6bzE+XhMEMnLlqDvZDsOtU/sCGvMK0MM3y5B7M
+ONqWLN3ng3zrGPec5gqfvnWgKpANUrbJkzS8LNjv4hwoKh0tFpghWQiefG0Z9Hw1
+UaYbFwvaFgXcm72oBkynDCleWjQ2vnDE4P38PldqZbAW/Pw1q6Yq8m9MhS1VpbI5
+WBjuRQhgQvMG0LY0gR/3Qor5tX9ASllWnPfWYVuOiSOAe5Hsp7BmELXkWftHii7k
+YW0Qim7jleDaY1MGfFr0vrO/PiYxGTb+4IUyUgEBYEpxa9ozUoeftF6JbHPuEZI0
+ENX8aIVJ9FnpssrR5HlpXieF12ec9ZFeV7mAwcucJ3RXuDcQHQTHgEbfnzTsaEpL
+Hxs+6euOCJXhKOYVrsAlB4IxK0OQm4XHiZ7WBp5Jp7rlSHltdxFpSnHIfqngyCA4
+L+c/gsUEVbNI++iOOhOKVT47XIf+s/xa1Y4XghGbHIA3/pQphYo4U5dTeLoX0OWI
+64tPxliQTKuJ+NAv9Km2bDgvlvn83jsc94THi5u+fIdDEGp7pgoQNXR69Lkz1bsA
+Hh9xqKzVloHu4SsT3OGX+bfTO3jUh8ieU/4tflZMrJ9RkEfE08PzTnopT08FppFx
+QWpHv/fwyJf6Cw1IevM5pVLAShg0sbCPF/xsYTjSyWNib1wFtxkmv5MToCFwkxi5
+b1yT23BNlV5RV6wcjmrum7p2fMwPjbt8X6z+pgUtkD7zImBWeYddMjgSjOFuFEjF
+gpfVoV3OIvMPZMe2jqWsjnjujHJr2z5IZn3A7WI0b4SIDP0sGwsTBiogKqcBNWpn
+O4MKUq9JwC0K/MY7yS1MCLoHfwU18z19Es/flaAgwtXk8IWIcjkkumAwNl+y8Q+I
++8AFGdiXTKld9QVwCKnMS3QivHPuFNL8rfcWKsr1nOhOEhaO+zD94eOOiCbwiXGr
+E6WsewNCVQUN4bxAXl2vRi+9WRctLy7bsuIL5dgUz0CMYkQ+dDmrBflD0nyC
+=TGNA
+-----END PGP MESSAGE-----
+
+--nextPart2260160.XvshVD34ka--
+
+--nextPart2760349.k2GQmrcl5a
+Content-Type: multipart/encrypted; boundary="nextPart22530242.iRl14SoP0Q"; protocol="application/pgp-encrypted"
+
+--nextPart22530242.iRl14SoP0Q
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart22530242.iRl14SoP0Q
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgAtA94bBRwgpo64zcyh+4dzt0Pr2pmNjiS4ZX+a/xzYCmD
+oS1a26s/LVZH+aJYC13l1kEu+6YjKn+ruQvMfhihOxglHBLjmUO17TPFC05AReSn
+amMqPbgS6mOwhlBJHrBa/SVwkxmbMaNBUJ/KxRXFtTW/V4pPWImRvI9mnmpo8fHy
+ZLvVAI3hGe7vPG5Vbdi5/Iu/JzqwlglVsP82gYpLlx7HhWGF4gmTGc6YBwFtzEvS
+eqFtKRDqN60bo4HnNLOEnMaWlYPTpt3QibLWWIbtpA1Gb0Q/1NvDnn3Lyj8H+0WV
+8H6Ks9/cvAuoAMOad6y4gDJb+K/AS7Ha+08/3lMYG9LAAgGe8Qocxg1W3ha1o0Ph
+YSfV2ooebsLiHjwspjYpsX5ijnRj6uNGp5Dt28EIo1ANF+oDiSKEwAMGPBtcnqaO
+FWXy39dP3VXE73nsO+dyTidaATFBlYg+IpPTDSFTgsk7XDV973EpdXvOkBEp/vBv
+EZknuZFOkS0v5QHk9Y/hhlSLACTIEWQpBiFGOwUVSZFXLEY5zQNTbQdRbz3ZYcE9
+mIFzD9Ujw6tIJIOFazhwr9SxxyeaAygWeg4ifmmdhAsmFYum
+=WsAv
+-----END PGP MESSAGE-----
+
+--nextPart22530242.iRl14SoP0Q--
+
+--nextPart2760349.k2GQmrcl5a--
--- /dev/null
+To: John Doe <test1@kolab.org>
+From: John Doe <test@kolab.org>
+Autocrypt: addr=test@kolab.org; keydata=
+ xsBNBEr9ij4BCADaFvyhzV7IrCAr/sCvfoPerAd4dYIGTeCeBmInu3p4oEG0rXTB2zL2t9zd
+ 7jVwCmYLsqb0Y4+7UIulBTSVa/SxsFkxPIzQaGd+CYpIpCl2P7oXBQH/365i/gvng4UTb5Cy
+ tBp9MToft2tUgqvK/LD30fBWbWVE1ohmuGYDviJesuqJGeRGKPOmjRk8LcXecZoNAnahy6y/
+ rHPQzbC7LVazrWfdYCsZ1w202kwwLAPj0aNO6d4nM9NYo26/mB+5+odJ5gbxfdKWQQOFCha8
+ UzEXbZzjJsRNFhUyuEDEd2gBlhDm3jrYACT3u1adLJ1GsY6biN3u1IEUwi/7+uofZRPXABEB
+ AAHNK3VuaXR0ZXN0IGtleSAobm8gcGFzc3dvcmQpIDx0ZXN0QGtvbGFiLm9yZz7CwHgEEwEC
+ ACIFAkr9ij4CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEI2YYMWPJG3mxggH/iDn
+ mHhKI40rbPvDPSMVFz4pNL5oYrGMjOUIz5ibjn9N19Fz/T5kxupbYVRbdcx6kRy4uQd97sJ8
+ 4985JkHEr/TSHne5p0F+tQLKq+WcJST+cbvkFR9m9WTZISOo+bP/rKGsf6GOGfl/vzObv8tF
+ 0E8Yy0Lu1lYdynnBRygT+VKt5GzcNzsS3Af1kgrnoQ1gVWjKueSR32hJBILfOpQlKP/RdrON
+ D1N0uljaJBQsUmYDJ5Gd+YL0VX4/56tfqt4gcuqhiD+Vz6BG+55gqwuFK4/o2gawPELjOLUy
+ 5dh/b6MDvWehbasRPcyT1fFm9YY6iku4ZEx8EzLvIJKiXLAx1+jOwE0ESv2KPgEIAO6+rYyB
+ G0YBfacSx36VCrzvRe8V0CqmUkzIHZJ0EN/s95yCQwG0yC3M0KRGDzTeCXRik68h/qdw3KEg
+ fZzu4rJAj9w/J4JMtcuhuCYLrL4iP32hvLfqZDqwBaRCmlEkqArF0Jahb5SW3cPYZlE+I9I2
+ V1xYX3bSZ7jcihAxVWtkheYtZcDY3u/7cWZNUauGNKRh4E0+ToCBI+erEd5EPCQDQrL/e5pE
+ j+s/+CoyBvJeQdAPX/wjfYVe8t+5GDLqOvpbUBWJWUptv/oTd3wOtJCwwr/OWNeXf7ipgtoG
+ KpJgr+FHLOEb3cXtF1YPzwpTOs/J/bv3JdGyQ3Kx1BlTUzUAEQEAAcLAXwQYAQIACQUCSv2K
+ PgIbDAAKCRCNmGDFjyRt5h0nB/40FPmVWhD2ok3opPRTwYMzUAOHkgMUk2bJfIH185hMvnHL
+ APCgUMr8xvjcx3NphiRCaC6mabIxHI9hDAbi6uyDBNTyQtm2sl/r1vqjFcxX49l9yt0AgMy3
+ 284IdwK9xdlwMLY/MbCL9GKe/D6RmZ6i/4wpxHdP9X3cGh66UW09NUO1Gria0isRfwf/OxkV
+ +KxA7qxX2bWOHS3noUAj7I43MJCvTuAPgTIgEfjdpx1C2Tv97SxoLZ4t6raztvmwqIyCQIuz
+ ukD0H9JGFjWT9bGY7obPl7hOBvr+rojxTJ3X+pzb2LJQwJnALL/VdIF3yHtGu2//Yfu4oxGG
+ A0M90KiW
+Message-ID: <0714eb9d-26c1-2317-ea5d-322e65be4658@kolab.org>
+Date: Wed, 23 Dec 2020 08:40:57 +0100
+X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0;
+ attachmentreminder=0; deliveryformat=4
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
+ Thunderbird/78.5.0
+MIME-Version: 1.0
+Subject: ...
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="YyvkyZcX9l1M1tTREL8N87DT7746zzLrH"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--YyvkyZcX9l1M1tTREL8N87DT7746zzLrH
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--YyvkyZcX9l1M1tTREL8N87DT7746zzLrH
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+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
+=q7+g
+-----END PGP MESSAGE-----
+
+--YyvkyZcX9l1M1tTREL8N87DT7746zzLrH--
--- /dev/null
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP encrypted with 2 text attachments
+Date: Sun, 30 Aug 2015 12:05:17 +0200
+Message-ID: <1505824.VT0nqpAGu0@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart3335835.KxmPgziKxd"; protocol="application/pgp-encrypted"
+
+--nextPart3335835.KxmPgziKxd
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart3335835.KxmPgziKxd
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQgA6tTJs017mI+xuhjcSTr3F5X/rJghq0oaXbjk1K0W33p+
+jsEyPTbuUIvI2a+5xHJ3BV+gnnO0Xosz57tGTF/eVAySnGiMse5cu2RQR9b/9EkC
+uzt3tIChyub3GUODG3yzXqkhSiwIImvedWgnJYTJ7eeBkWdizVT0b0byiG2d7Hjq
+hzYzyPJRwuoE36hryDsFycAhPfSsQAirxDJXk4HTsfBCmz7tzJhtt4wKc7z5m8fq
+y+jddnDADq5+tykJS6zemJOzgU3AOQyVJbmsx2vTV1CJdpKPHvTTgghpAaSuVbg0
+tR9BX1nPnA/bgX/V7C+3PwuCvB0ZKmv5d8kaGaTwO9LAhQGaWTfhG1cyy+MJhXdR
+rH63PMkZh/lrvj7qJYofI5iVoe1CiMaX44BiwKVclGf7bEFdzc2NSRvvTSzisN3T
+nSzydEttuEY5jGagQQNT1l1l4I8HAtUgwGtkKZVTAUL6iKHYAqzB77sRs33UJy4k
+ZSIWFnSY8l+HLG+MYKsYCGsvJHkxEHnMiS1EZcmpUFhxOGQpiF2rJ4qnL2jbFWbA
+9N1O5N1N/DJ/YKjwgy/jVVj6AOCrBZrxvKKt2mtG/wVX0F/KSKiEd8mgrLIx1udw
+tibiDAJmDxUk8K0lAdOHBrzBChvysiT/QxCJFcSY6FE99Rral+BWjeyAIQQWvc2B
+cEceZCtzjCOrwvoJwl2uEX+51nmMp+z1EoeyyhmUZZ4y65yOg4P6KGXGcLmIjSbH
+IhsSls1jRkSrypf/wcEd6o7KZdeYbfA=
+=Sud3
+-----END PGP MESSAGE-----
+
+--nextPart3335835.KxmPgziKxd--
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:02:52 +0200
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP encrypted
+Date: Wed, 08 Sep 2010 17:02:52 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart1357031.ppLHckZtsp"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart1357031.ppLHckZtsp
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQgAtWfDWWI2JUGuptpackiIxpWViEEpGAeruETubiIPwxNb
+DNmXrMDhbm/zIbPntIGWJDgUMfABZCUgmlJLWhsceDTt+tXnWGha2VYrN2/WsF6/
+Pqs/TavTvMIJQHDaIH5yDDCaMoq/mGSbcu7go2H8Sw7aBEYlM8jGlqc1HziXnZ1q
+3vDiA+4qWfvbNoSRo1kb9Pcq997yg6WqZXH2hJ7cp+hIQ4uTP1/+qgYHMvfPlzQk
+XcDguGbIer88ELhuR5622unGBAB4dqp+5w6n9c6rrCH81qhV4W0nqSEvj1tBj78S
+ZTi6VBAo5eS0e3iOJqMpwUZz6hQUpJw2wnNRGvLgI9KZAag0HkgPdMeANowg7vpE
+L4nU7B0ybhswA2Y7QT/wwCDZu9N1JGeBmy0dgy4sA38Ki27rn2/lIaP0j14JycwM
+RTJ1uwI+ZuQiwXlyYtdFZJWe8nraWARch0oKqhaR7aSsxGWo63eiGEQhkQCBFBb3
+Vg0nNCZRBauEqIESEW5EV2zrJqdfNYcz+f9IP125dnQEKgLZ6FxTt3+v
+=mhNl
+-----END PGP MESSAGE-----
+
+--nextPart1357031.ppLHckZtsp--
--- /dev/null
+From test@example.com Thu, 17 Oct 2013 02:13:03 +0200
+Return-Path: <test@example.com>
+Delivered-To: you@you.com
+Received: from localhost (localhost [127.0.0.1])
+ by test@example.com (Postfix) with ESMTP id B30D8120030
+ for <you@you.com>; Thu, 17 Oct 2013 02:13:05 +0200 (CEST)
+From: test <test@example.com>
+To: you@you.com
+Subject: charset
+Date: Thu, 17 Oct 2013 02:13:03 +0200
+Message-ID: <4081645.yGjUJ4o4Se@example.local>
+User-Agent: KMail/4.12 pre (Linux/3.11-4.towo-siduction-amd64; KDE/4.11.2; x86_64; git-f7f14e3; 2013-10-15)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="ISO-8859-15"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.22 (GNU/Linux)
+
+hIwDGJlthTT7oq0BBACbaRZudMigMTetPZNRgkfEXv4QQowR1jborw0dcgKKqMQ1
+6o67NkpxvmXKGJTfTVCLBX3nk6FKYo6NwlPCyU7X9X0DDk8hvaBdR9wGfrdm5YWX
+GKOzcqJY1EypiMsspXeZvjzEW7O8I956c3vBb/2pM3xqYEK1kh8+d9bVH+cjf4UB
+DAMMzkNap8zaOwEH/1rPShyYL8meJN+/GGgS8+Nf1BW5pSHdAPCg0dnX4QCLEx7u
+GkBU6N4JGYayaCBofibOLacQPhYZdnR5Xb/Pvrx03GrzyzyDp0WyeI9nGNfkani7
+sCRWbzlMPsEvGEvJVnMLNRSk4xhPIWumL4APkw+Mgi6mf+Br8z0RhfnGwyMA53Mr
+pG9VQKlq3v7/aaN40pMjAsxiytcHS515jXrb3Ko4pWbTlAr/eytOEfkLRJgSOpQT
+BY7lWs+UQJqiG8Yn65vS9LMDNJgX9EOGx77Z4u9wvv4ZieOxzgbHGg5kYCoae7ba
+hxZeNjYKscH+E6epbOxM/wlTdr4UTiiW9dMsH0zSwMUB891gToeXq+LDGEPTKVSX
+tsJm4HS/kISJBwrCI4EUqWZML6xQ427NkZGmF2z/sD3kmL66GjspIKnb4zHmXacp
+84n2KrI9s7p6AnKnQjsxvB/4/lpXPCIY5GH7KjySEJiMsHECzeN1dJSL6keykBsx
+DtmYDA+dhZ6UWbwzx/78+mjNREhyp/UiSAmLzlJh89OH/xelAPvKcIosYwz4cY9N
+wjralTmL+Y0aHKeZJOeqPLaXADcPFiZrCNPCH65Ey5GEtDpjLpEbjVbykPV9+YkK
+7JKW6bwMraOl5zmAoR77PWMo3IoYb9q4GuqDr1V2ZGlb7eMH1gj1nfgfVintKC1X
+3jFfy7aK6LIQDVKEwbi0SxVXTKStuliVUy5oX4woDOxmTEotJf1QlKZpn5oF20UP
+tumYrp0SPoP8Bo4EVRVaLupduI5cYce1q/kFj9Iho/wk56MoG9PxMMfsH7oKg3AA
+CqQ6/kM4oJNdN5xIf1EH5HeaNFkDy1jlLznnhwVAZKPo/9ffpg==
+=bPqu
+-----END PGP MESSAGE-----
+
+
--- /dev/null
+From test@kolab.org Wed, 25 May 2011 23:49:40 +0100
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: inlinepgpencrypted + non enc text
+Date: Wed, 25 May 2011 23:49:40 +0100
+Message-ID: <1786696.yKXrOjjflF@herrwackelpudding.localhost>
+X-KMail-Transport: GMX
+X-KMail-Fcc: 28
+X-KMail-Drafts: 7
+X-KMail-Templates: 9
+User-Agent: KMail/4.6 beta5 (Linux/2.6.34.7-0.7-desktop; KDE/4.6.41; x86_64; git-0269848; 2011-04-19)
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+Not encrypted not signed :(
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf/a3aNTLpQBfcUr+4AKsZQLj4h6z7e7a5AaCW8AG0wrbxN
+kBYB7E5jdZh45DX/99gvoZslthWryUCX2kKZ3LtIllxKVjqNuK5hSt+SAuKkwiMR
+Xcbf1KFKENKupgGSO9B2NJRbjoExdJ+fC3mGXnO3dT7xJJAo3oLE8Nivu+Bj1peY
+E1wCf+vcTwVHFrA7SV8eMRb9Z9wBXmU8Q8e9ekJ7ZsRX3tMeBs6jvscVvfMf6DYY
+N14snZBZuGNKT9a3DPny7IC1S0lHcaam34ogWwMi3FxPGJt/Lg52kARlkF5TDhcP
+N6H0EB/iqDRjOOUoEVm8um5XOSR1FpEiAdD0DON3y9JPATnrYq7sgYZz3BVImYY+
+N/jV8fEiN0a34pcOq8NQedMuOsJHNBS5MtbQH/kJLq0MXBpXekGlHo4MKw0trISc
+Rw3pW6/BFfhPJLni29g9tw==
+=fRFW
+-----END PGP MESSAGE-----
+
--- /dev/null
+From: test <test@kolab.org>
+To: you@you.de
+Subject: test
+Date: Tue, 25 Aug 2015 16:47:10 +0200
+Message-ID: <1662097.O9NVKTC5pT@11b508545ba2>
+X-KMail-Identity: 1428848833
+User-Agent: KMail/4.13.0.3 (Linux/4.1.0-rc5-siduction-amd64; KDE/4.14.3; x86_64; git-7c86098; 2015-08-23)
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="iso-8859-1"
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+ohno break it =F6=E4=FC
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEcBAEBCAAGBQJV3H/vAAoJEI2YYMWPJG3mEZQH/2mbCDa60risTUsomEecasc7
+kIc8Ch+OjZwlEQWKEiFbpLCMVjMwf0oGFcpc/dqnIyIqeVvF6Em+v7iqKuyAaihu
+7ZxxC816tDDI7UIpmyWu39McqGB/2hoA/q+QAMgBiaIuMwYJK9Aw08hXzoCds6O7
+Uor2Y6kMSwEiRnTSYvQHdoaZY3F9SFTLPgjvwfSu7scvp7xvH7bAVIqGGfkLjXpP
+OFkDhEqUI7ORwD5cvvzEu57XmbGB7Nj5LRCGcTq6IlaGeN6Pw5+hOdd6MQ4iISwy
+870msP9NvktURnfXYC3fYnJaK/eUln7LYCBl/k04Z/3Um6dMYyQGh63oGv/2qxQ=3D
+=3D4ctb
+-----END PGP SIGNATURE-----
--- /dev/null
+From: test <test@kolab.org>
+To: you@you.de
+Subject: test
+Date: Tue, 25 Aug 2015 16:47:10 +0200
+Message-ID: <1662097.O9NVKTC5pT@11b508545ba2>
+X-KMail-Identity: 1428848833
+User-Agent: KMail/4.13.0.3 (Linux/4.1.0-rc5-siduction-amd64; KDE/4.14.3; x86_64; git-7c86098; 2015-08-23)
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="iso-8859-1"
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+ohno =F6=E4=FC
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEcBAEBCAAGBQJV3H/vAAoJEI2YYMWPJG3mEZQH/2mbCDa60risTUsomEecasc7
+kIc8Ch+OjZwlEQWKEiFbpLCMVjMwf0oGFcpc/dqnIyIqeVvF6Em+v7iqKuyAaihu
+7ZxxC816tDDI7UIpmyWu39McqGB/2hoA/q+QAMgBiaIuMwYJK9Aw08hXzoCds6O7
+Uor2Y6kMSwEiRnTSYvQHdoaZY3F9SFTLPgjvwfSu7scvp7xvH7bAVIqGGfkLjXpP
+OFkDhEqUI7ORwD5cvvzEu57XmbGB7Nj5LRCGcTq6IlaGeN6Pw5+hOdd6MQ4iISwy
+870msP9NvktURnfXYC3fYnJaK/eUln7LYCBl/k04Z/3Um6dMYyQGh63oGv/2qxQ=3D
+=3D4ctb
+-----END PGP SIGNATURE-----
--- /dev/null
+From t.glaser@tarent.de Mon Aug 18 10:59:01 2014
+Return-Path: <t.glaser@tarent.de>
+Received: from tgwrk.ig42.org (tgwrk.ig42.org.
+ [2a01:238:4200:4342:321e:80ff:fe12:4223]) by mx.google.com with ESMTPSA id
+ pe6sm40660135wjb.38.2014.08.18.01.59.01 for <t.glaser@tarent.de>
+ (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18
+ Aug 2014 01:59:01 -0700 (PDT)
+Date: Mon, 18 Aug 2014 10:59:00 +0200 (CEST)
+From: Thorsten Glaser <t.glaser@tarent.de>
+X-X-Sender: tglase@tglase.lan.tarent.de
+To: Thorsten Glaser <t.glaser@tarent.de>
+Subject: Test for Mozilla bug#1054187
+Message-ID: <alpine.DEB.2.11.1408181058220.30583@tglase.lan.tarent.de>
+User-Agent: Alpine 2.11 (DEB 23 2013-08-11)
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hIwDTFSKP3rBSXcBBAClcHW9/6kw8i+XkMes47vcmGBCjIC0UysqkVYyNqT2Y6tb
+s7pdfZFQPVWbdYoxP0WLzGgNFEWttlojWJmaTNiDVLOP22hFuJL3LUxesC1cWE+6
+foCkENDI2YnkAw4o5HTrmHoBlG7N/Nzzu3+1kfUVANSoAhgWd5WJDsXyvPMoD9LA
+7gHZZmq4bK5OwTHvAvdUOstCGd6Wqj5zkVXT59WOfYxYLcrGZ8I62lBS1/90TlJe
+iEolBoaufZT7K2YW7k/+DPYgRIzvWISTccPWpcS7OOyifvK4zOFJeGsVq/DowP52
+Zt1xQj1En5CVUT/MkpvS1rB4BfSuhJETZdtUGveUe0HhcAzbnbIJULdK0p1XAo4O
+q84vmOVD0BtKJVy/+rIW7h4aOr8C66HNDKLiUzWtdEaG97GQwhpQZ05JNsulG9tV
+wyP6UWmDMY/5YuRoVHOYx8NXORHX4E5P151Tr5Fted9TpXI/gOTHHyPK5AiiDG6U
+ja4fgkO6hYnjHxqqooxfGj+pg5atynnbMTALfWoXxmqyKrIB+SKqnsw+sCL3ro2x
+j54EGZZ9wM6AYDQ48lJV5beWgQ55r28HxlhPNl/driNkMZHUazAdsubWo5NqJPXl
+HrHQ4lv53ZUohbpVvdkmsldWhA5me7yRhQHytTQMMfadmSiYZVsy53siQ/5gEhUv
+DQ4ggpUjf8twqR+5TLue5/r/fRXkGfKr5U1w4qcMcFcGwEIbwE+qtIDY0Cw/+xU=
+=Ecl0
+-----END PGP MESSAGE-----
--- /dev/null
+To: test@kolab.org
+From: test1 <test1@kolab.org>
+Openpgp: preference=signencrypt
+Autocrypt: addr=test1@kolab.org; prefer-encrypt=mutual; keydata=
+ xsBNBFrd3FcBCADAGsU4BTBJ7nXGZ2IV6ZpSDcuZeCteDdrp9YNGYdax49Z9rn2RIfMur07i
+ A3zkLuQSI63QpWr/sp8Kkcs+OMRfeNAHSyQcdOwE/SU/PF45LHYcgvdgL7bvNRiyrn++eXar
+ woCH/QNZFgsy4PQCBW4DXor4jeDgeKisdk+ArpSY+Dd5l+Gdna8GQyUHWOL15gKUEDBq9dta
+ fswI18LxTSIbofsSxnQ0BgHNgn4bFXRLWiFJMyjvXXwZAXmChpxchESeIyu3Bvu38kA+jNDh
+ QmJL359mbXtu6JtvUjL0T9xhydHhGQ8iHCUpUkAh50KDJUUFQAUD+wSeMbsr7dk/osBdABEB
+ AAHNHVRlc3QxIEtvbGFiIDx0ZXN0MUBrb2xhYi5vcmc+wsCOBBMBCAA4FiEEy9EWSF25Vgyj
+ zZHgLjt3h7G3WSAFAlrd3FcCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQLjt3h7G3
+ WSBwjAf6A9D/BOo6ixWfrTAfunk06TIt309P33/aIrhmICUoJ3KxatnMfcFr9GDnVtGv7RZl
+ VG43dWLMz8ghjGVjWOQUzlYl19HS/7KfHFE3jQHawcidYHcsVBbD/Ml9lCRnE4CcO/7MqObh
+ FHVIO+M0XJK82Qqu1kZ2ySNOMG+DJ3JGMEWMwrf8HjdwfANCn9uW4G9+q3dyN7TWUaYVLf74
+ Ekz2KpCxi0Y/b/01+8UR6iSRbn+5R2CIPhgdrrfYlHaB1HHeeJlue8JK3zxYcRTfD4B2c8Jj
+ UAMO0Y8A7PMTj9SpnBt+t4XUyrTwwqLwulRBAQBHSPI7jQ6JVM2yTOe7Yy1dbc7ATQRa3dxX
+ AQgAy/RH8KEQHk2SJ60G0YJkOSioGNU+sAMP6rKIH8AXljZEwriiWqxcunoHlrOHOfuyBBL2
+ TTiien0247g7q2i7aPBZhll7/cp4DZKcsLZ9QIkB4sHY1SaVT865dIfhoxcKwi8NzbemDsUQ
+ QB6f9P3CSZqFW2EohzKf3vfYnLVLTRvzlndAzThYXso1iWeX9v1JtzOi4w7JP5RvTMx+FXCy
+ ibfkLGJL2ZG6rapK7jtn8SfJGiQeH441OmEDjtfqrADKDY/pKJdPeEzakuZuxhrh8FtFjtZX
+ WU9dbzE46uXUA/ChLW0H/zuyxseVCHyAbF5pFyibGfk1hmYFVwjQotHojwARAQABwsB2BBgB
+ CAAgFiEEy9EWSF25VgyjzZHgLjt3h7G3WSAFAlrd3FcCGwwACgkQLjt3h7G3WSDJrAgApMbl
+ U4PAoe04jVSIMApU8Q22NNysZGS3l6KLpOqS/1DXd2U0S6EbFcCmUUwu3tk6nz6qCBKu7SEe
+ E1bjJUSB5880IA3C8HC1VDHCdVMJGJKvpqnj/4Jf8STQROL7UeQXZvby5CRZGMV7lBDAquG6
+ vk3Eo3CeAfKel+XtHA/qruayTVHn1PV3/22ThcnXkwB3Mpdflz/tmPwHZqwOPavpJMckE03K
+ HNzSulXDNXdGqd4kKu43UIYnfm/3jnfK/LOrOK8zl40mk26Vm19MMRgc2TP6a70J5r6H1RLU
+ BTEkoVskD4m6I1G4FEIPq1g8jv7e0zcukh3vdpdKKxR+69M/2w==
+Message-ID: <a85660b4-6fdf-9d74-ad1c-e6899f57e4b0@kolab.org>
+Date: Tue, 24 Apr 2018 18:47:20 +0200
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
+ Thunderbird/52.7.0
+MIME-Version: 1.0
+Subject: Encrypted Message
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQgA3kD1WyRdQawpduoJ3J9h3SpSC7YiNqU7aiyTMUGAdbGO
+BMhIzPdEkai9P486Wpg5h+ywmQrk3KoH/GioRjwvIaeNZY/cmxetT0/ig5rrnqxM
+j63vFFbCbE6kSeDbvYqF5mL3XH+TqpZRW5ApPSgkr7jMDOK7k1eF5A5ey84LYFny
+Ky63LGy5KEQk7E1cMLZOHAZnorcm7Lh3RVWgPj+DRDowMn3yVdFOpT5bQ66zAIkc
+Bs9IWuq0lMxGsdfRv5wlzUqZJGge3oT7tkZhI6D56MLIjqg7SurQMiWrn6wh51Sr
+R7W9N6lHyrKrffP2VjFwPPK1/Vjd0Am4gTPkf+GcJ4UBDAPKpRg2CPD7UAEIAJuC
+8s2uGAGF9zgoQdrmL6bInA5JCQiZI+B5Jgg9wQ/dW3idJN9esr1Ff7/d8DVuzf1V
+bFydMBqQk5Zkp5FuDhJsfGWK+NPJBUaOKGlGqRPZX+SjP2k1SuDoxvdxvtWYBVOt
+Zhq03zczRWo4dxJ++WYqxu6gMlBCO+z84kfhknWyBNeN7+8mmYGNWDo/ARWhspO0
+CIOfBCFeqwCpCZLIiCTBjGg98Ed+SGIdjQwq97suh3nANlKFpiNp2+w02H+rarMj
+IUkaVrKIGqaKw3X7JxuBcD8gzW2nyw6MKrm4q2iTCXYQb8lpUuvITJmNJFIkTmpt
+DjlDEZdJiNhs0IOIepbS6QETyg97HVDWmL4frclu4QAeF28007HHlg805IAjAZ/x
+wU9P3/VH74zZJinBLmXaIe3XidksWHES3H8ay+UtsUafC+4icSZRwplW9MexBNsl
+mJ4pfrHtAf+t+Tk0/BbuanSbL6OGA1wG7GVEfj39rsc4vYgSS/NLI5njq55AXFVG
+syeplNt2FNw3Ii6V3NnEkvlKcmj8sVnGCAIIeaG9yiAJ5qOsHP37sk3TAduKRGSE
+d8Ldty4mBftkTPyOG8eMr28XCldnhqnNWbcP9t2maKAyQ4bjv15Erx+1AfXXGtVq
+3PsVsUN2YQIib7VLBjOYzW9jysQWFFuE26sE2oH4of34E0jD6GV3d6Ng8gTtpIhO
+BWePihWtHdBGsNNoYrp19IXX594hayaF+WV8rpaBS0KxVoEHZhFusyvxcDiQnsO7
+3QPVu3btkkte8Hq9KtoFVeFm91M9fii3m3vFBsPu7weMm2zBCxTTRdLd5X+yEYah
+n8tKnUUFHFIcgdZ3FIoQmIJrrYtcjLnvXeDdB2F6HX7z9KMQ5RzKBZcCMnVViKxl
+PIF3bikUzhtg55BGNyiAu2sz1wLzOoERsb38GN3UK4qinFVXLHxXhcdpEXKocb+k
+PyRTykAunux+J5+klASl/k85s8gNvMH1CijdNseQEqLlsISERu+zxyFPPit6/tP6
+wDyvhjHcGV2Jpw5T01n5aJpKklbGb9qUBkzlfayc03ebtqPzBTwG8NEzu9rlZQpr
+ldbYUvXYBHSOqk2Z403I0PWR5DlcasFgciHFQw9PODRNK+OVY46btfyBXABlzYTH
+OMfnHd8HoCOKCp29+ugK2G8y91JNd4M8B2xI1zACFB3hlDoc7K4h85Yi0cCYZahX
+OUWZxSZjfl8X793RT5h+2BE+0bRGLOJIGhAxe+JKUC7O5njXBc3O5/ocfLif2t4y
+eYJmu/w46hJUPxYk4Poe3Oppcim1hKHI7DVSJeJydBRqJgDzRzQ/1u7dD15z69/0
+rbexuTVmwmXN695s/V0=
+=1o3V
+-----END PGP MESSAGE-----
+
+--aG9NpScyJQ450kGR5wZ2xj8QJwiCdpvXm--
--- /dev/null
+To: test@kolab.org
+From: test1 <test1@kolab.org>
+Openpgp: preference=signencrypt
+Autocrypt: addr=test1@kolab.org; prefer-encrypt=mutual; keydata=
+ xsBNBFrd3FcBCADAGsU4BTBJ7nXGZ2IV6ZpSDcuZeCteDdrp9YNGYdax49Z9rn2RIfMur07i
+ A3zkLuQSI63QpWr/sp8Kkcs+OMRfeNAHSyQcdOwE/SU/PF45LHYcgvdgL7bvNRiyrn++eXar
+ woCH/QNZFgsy4PQCBW4DXor4jeDgeKisdk+ArpSY+Dd5l+Gdna8GQyUHWOL15gKUEDBq9dta
+ fswI18LxTSIbofsSxnQ0BgHNgn4bFXRLWiFJMyjvXXwZAXmChpxchESeIyu3Bvu38kA+jNDh
+ QmJL359mbXtu6JtvUjL0T9xhydHhGQ8iHCUpUkAh50KDJUUFQAUD+wSeMbsr7dk/osBdABEB
+ AAHNHVRlc3QxIEtvbGFiIDx0ZXN0MUBrb2xhYi5vcmc+wsCOBBMBCAA4FiEEy9EWSF25Vgyj
+ zZHgLjt3h7G3WSAFAlrd3FcCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQLjt3h7G3
+ WSBwjAf6A9D/BOo6ixWfrTAfunk06TIt309P33/aIrhmICUoJ3KxatnMfcFr9GDnVtGv7RZl
+ VG43dWLMz8ghjGVjWOQUzlYl19HS/7KfHFE3jQHawcidYHcsVBbD/Ml9lCRnE4CcO/7MqObh
+ FHVIO+M0XJK82Qqu1kZ2ySNOMG+DJ3JGMEWMwrf8HjdwfANCn9uW4G9+q3dyN7TWUaYVLf74
+ Ekz2KpCxi0Y/b/01+8UR6iSRbn+5R2CIPhgdrrfYlHaB1HHeeJlue8JK3zxYcRTfD4B2c8Jj
+ UAMO0Y8A7PMTj9SpnBt+t4XUyrTwwqLwulRBAQBHSPI7jQ6JVM2yTOe7Yy1dbc7ATQRa3dxX
+ AQgAy/RH8KEQHk2SJ60G0YJkOSioGNU+sAMP6rKIH8AXljZEwriiWqxcunoHlrOHOfuyBBL2
+ TTiien0247g7q2i7aPBZhll7/cp4DZKcsLZ9QIkB4sHY1SaVT865dIfhoxcKwi8NzbemDsUQ
+ QB6f9P3CSZqFW2EohzKf3vfYnLVLTRvzlndAzThYXso1iWeX9v1JtzOi4w7JP5RvTMx+FXCy
+ ibfkLGJL2ZG6rapK7jtn8SfJGiQeH441OmEDjtfqrADKDY/pKJdPeEzakuZuxhrh8FtFjtZX
+ WU9dbzE46uXUA/ChLW0H/zuyxseVCHyAbF5pFyibGfk1hmYFVwjQotHojwARAQABwsB2BBgB
+ CAAgFiEEy9EWSF25VgyjzZHgLjt3h7G3WSAFAlrd3FcCGwwACgkQLjt3h7G3WSDJrAgApMbl
+ U4PAoe04jVSIMApU8Q22NNysZGS3l6KLpOqS/1DXd2U0S6EbFcCmUUwu3tk6nz6qCBKu7SEe
+ E1bjJUSB5880IA3C8HC1VDHCdVMJGJKvpqnj/4Jf8STQROL7UeQXZvby5CRZGMV7lBDAquG6
+ vk3Eo3CeAfKel+XtHA/qruayTVHn1PV3/22ThcnXkwB3Mpdflz/tmPwHZqwOPavpJMckE03K
+ HNzSulXDNXdGqd4kKu43UIYnfm/3jnfK/LOrOK8zl40mk26Vm19MMRgc2TP6a70J5r6H1RLU
+ BTEkoVskD4m6I1G4FEIPq1g8jv7e0zcukh3vdpdKKxR+69M/2w==
+Message-ID: <9af7e819-eb6c-d243-cd2d-b04d23ba2c0d@kolab.org>
+Date: Mon, 23 Apr 2018 17:11:58 +0200
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
+ Thunderbird/52.7.0
+MIME-Version: 1.0
+Subject: Encrypted Message
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc"
+
+This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hQEMAwzOQ1qnzNo7AQf/QznYpLuJ+BB9BBoYFjISqGek8blRD8UVO96E8yYSeAXL
+uILJUakYjykzwg+Yd+yjR1arye1BYEnrpftXVR//WdkitPsq2nzxkHynCJCiMsl8
+LIx2u8OoAXJa5L0ohERKt/MAJn6H+x2+WxVzIGtaOw7K7rBL+J800wB6KkxKdvlF
+rFkfmlfJOKueOPUVzvQHJBLJXcdKH5z8GikESKrRGWpTn5DdFIG2nmxuMhNndcrd
+6oXZ11PMKr3QTrjG7huntvASQQ9Vd3Kxvi8kqaJIdspRckoZd65Xo+UdC+VWFYH8
+ynsWX3F3zqRxHhK7IZgaTLHRc55NzdXLmtQ5zVt6pIUBDAPKpRg2CPD7UAEIALbc
+/NnS49ghW+fN7RkIwHyXX/kcZk/+87ydT6Tvh3xdcgZY9Aczwcx64kvP4M5PXaaT
+xxsXK0vLtk19vGJEeMzHGHacp1QQzZwCRa4Pmi2cyiK+J5TpF8RapZflLwIQ+zWk
+WRSa6jpd5SzQvEQ8t8OQ9PYOEhNYZLHkZCRK3bwY7jW1RzqnWgHbHk8M70YzBZw4
+RMLwNuNfYw25TJFxnlhPUiN56z0ZsNOj16TTyINLI1pCLG8boKfEzCCMyIHZpU+U
+4DGM9ziLA/gH1MYcONPogwi24pUXW2ssoT5bIfNFGhT8DAZYAwyHeJnrCbEdcfp5
+CepYtnkH1Gfz1KQ66oHSwNUBqvtjoE5wA+EYxoTopJ5/g5qtcfsYh9o6ksepFjZb
++rzhzI8XtGs43+YE1QrOx9N7E/XiG1iXTqeqyKfq6vGgfE4tfgZlRcnI1sllwX2X
+/2Va7aWr7VRt2DJ444XKRtmwP2U47lqM0SEGb01SOI2WBfxB0lAsetNS7t83KoCb
+W/JHj9zEpLEiGr8lrI+8ydXlfFA4nTlugwJP2o42fU9EMDzieUFfaX7wzKKXQq8R
+ek04j5PcJSeRBr5/HyrAR3QUoB8qL/9KqOxmcW/aKLteshYWuDWRhDYaTIsLJV6p
+Or4+8qV5bonBZHuRXDOt3qxWd0++msUqj8Kkw0cZ5ID7EsQFdYBapxDz7ZKj5PM6
+AEmzYarsM9FKsVMx7KMxIpkOOEWXN6/jrhIO1rkk4WQvl79BW9gj+6DnBwpM4R/k
+bnuWedSvbL/4ee21XWf4p01aF+RHn1UbvOqkfwX69M00crE7PnNaeMbKy46bcELF
+OTNGkv7SYoUmctTINyV3zPWxJnsIkrSFurKXF/+6tSnaItU1ziM=
+=L0oI
+-----END PGP MESSAGE-----
+
+--EjqoZxTNU00i9s539J9SoOOl3OuK0xUCc--
+
--- /dev/null
+Return-Path: <sender@example.org>
+Sender: sender@example.org
+From: Quonk <sender@example.org>
+X-Pgp-Agent: GPGMail
+Content-Type: multipart/signed; boundary="Apple-Mail=_12345678-1234-1234-1234-12345678"; protocol="application/pgp-signature"; micalg=pgp-sha512
+Subject: PDF
+Date: Mon, 16 Jan 2017 15:14:51 +0100
+Message-Id: <199E2891-3080-42B6-ABCD-1230B78EBABC@example.org>
+To: Konqi <konqui@example.org>
+Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
+
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_23456789-1234-1234-1234-12345678"
+
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=utf-8
+
+
+
+=E2=80=A6
+Quonk
+Klar=C3=A4lvdalens Datakonsult AB, a KDAB Group company
+Sweden (HQ) +46-563-540090, Germany +49-30-521325470
+KDAB - The Qt, C++ and OpenGL Experts | www.kdab.com
+
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_34567890-1234-1234-1234-12345678"
+
+
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Transfer-Encoding: 7bit
+Content-Type: text/html;
+ charset=us-ascii
+
+<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">pre attachment</div></body></html>
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+--Apple-Mail=_34567890-1234-1234-1234-12345678
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Some <span style=" font-weight:600;">HTML</span> text</p>
+</body></html>
+
+--Apple-Mail=_34567890-1234-1234-1234-12345678--
+
+--Apple-Mail=_23456789-1234-1234-1234-12345678--
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename=signature.asc
+Content-Type: application/pgp-signature;
+ name=signature.asc
+Content-Description: Message signed with OpenPGP using GPGMail
+
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAEBCAAdFiEEG6Mjkys/qoJhMseejZhgxY8kbeYFAlh/rcwACgkQjZhgxY8k
+beYaoQf+Miuj4cnVumYXMopVMHJs6AK6D+uKO4jXHl/XUK3TOg17kFUZDEN/9JFd
+SCN9oD5emzpBl4GSmYBbjvLvXTHTLHviVD6In35+wgMlQL+xfAv91Dx56QslCQMo
+UhDYGgFPiEAfCY2UozQD/R3KWOHFB9bNdtOM0hdT84D35W2PZhzTlz2q3hpq3bYw
+lNhFVebqURh9OEAZglB3Q9oDE13PJDtRLflKquC5ZU8N4Bj23TCOgxv4FzSyyAn/
+XalEKdwYrkZ8p4rRtd0YvAVevDUC4pQNGTgfsXgldoPEGUBXsdlczLPEj2sjLvNu
+HX1GMDrZL/+7DZsURYV5DjhsqWzExQ==
+=q0F6
+-----END PGP SIGNATURE-----
+
+--Apple-Mail=_12345678-1234-1234-1234-12345678--
+
+
--- /dev/null
+Return-Path: <kde-pim-bounces@kde.org>
+X-Sieve: CMU Sieve 2.3
+X-Virus-Scanned: amavisd-new at site
+Authentication-Results: linux.site (amavisd-new); dkim=pass (1024-bit key)
+ header.d=kde.org
+Received: from postbox.kde.org (localhost.localdomain [127.0.0.1])
+ by postbox.kde.org (Postfix) with ESMTP id 867B8BF274;
+ Sat, 22 Aug 2015 09:32:21 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1440235945; bh=WhGhdxvdvRs04JdzjAkPcBVPmx7putlUE3ka9dvMIoc=;
+ h=From:To:Date:Subject:Reply-To:List-Id:List-Unsubscribe:List-Post:
+ List-Help:List-Subscribe:From;
+ b=mvxeMMGebkZKq7hekRypkPvt6S8lidA/8vQ3AC5Kft8HDmj8lDUpvOo0VXwCF0OG+
+ iAOPKxYtxclf8PgYvgK8NIzr56CwcdlNm3/PpoSe20P3I1DGFpDDMFtW5tOD05SSHz
+ 5L6PCQyb+KFW1GrXgcm+eHshzJh3U8nHcyd8Vw2E=
+X-Original-To: kde-pim@kde.org
+Delivered-To: kde-pim@localhost.kde.org
+X-Virus-Scanned: amavisd-new at site
+From: Volker Krause <vkrause@kde.org>
+To: KDEPIM <kde-pim@kde.org>
+Date: Sat, 22 Aug 2015 11:31:38 +0200
+Message-ID: <11737387.KAAPH2KlE3@vkpc5>
+Organization: KDE
+User-Agent: KMail/4.14.3 (Linux/3.16.6-2-desktop; KDE/4.14.7; x86_64;
+ git-c97b13e; 2014-12-30)
+MIME-Version: 1.0
+Subject: [Kde-pim] Phabricator Project Setup
+X-BeenThere: kde-pim@kde.org
+X-Mailman-Version: 2.1.16
+Precedence: list
+Reply-To: KDE PIM <kde-pim@kde.org>
+List-Id: KDE PIM <kde-pim.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/kde-pim>,
+ <mailto:kde-pim-request@kde.org?subject=unsubscribe>
+List-Post: <mailto:kde-pim@kde.org>
+List-Help: <mailto:kde-pim-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/kde-pim>,
+ <mailto:kde-pim-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============1910646461178264940=="
+Errors-To: kde-pim-bounces@kde.org
+Sender: "kde-pim" <kde-pim-bounces@kde.org>
+
+
+--===============1910646461178264940==
+Content-Type: multipart/signed; boundary="nextPart2440608.7aDuJBW7cK"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+--nextPart2440608.7aDuJBW7cK
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain; charset="us-ascii"
+
+Hi,
+
+I've talked to Ben, the current Phabricator test setup would actually b=
+e=20
+usable for "production" use for task/project management for us, without=
+=20
+causing the sysadmins unreasonable trouble when migrating to the full=20=
+
+production deployment of Phabricator eventually.
+
+Phabricator project layout it orthogonal to repo layout, so we can stru=
+cture=20
+this however we want. Among other teams I see at least the following la=
+youts:
+- single project for everything
+- a project per release
+- a project per component/module (ie. close to the repo layout)
+
+How do we want to structure this?
+
+I would start with a single project to not fragment this too much, as w=
+e have=20
+a relatively small team actually looking into this, so everyone is look=
+ing at=20
+most sub-projects anyway. And should we eventually hit scaling limits, =
+we can=20
+always expand this I think.
+
+We of course should also talk about what we actually want to put in the=
+re. My=20
+current motivation is having a place to collect the tasks for getting m=
+ore of=20
+the former pimlibs into KF5, and anything else I run into on the way th=
+ere=20
+that we eventually should clean up/improve.
+
+regards,
+Volker
+
+--nextPart2440608.7aDuJBW7cK
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iD8DBQBV2EF9f5bM1k0S0kcRAk9cAJ4vHEh9JkT3Jy3EfxII7nP9HPmxrQCgjeLF
+eYXCyN9NRAyC6CHeNnWZN10=
+=Y8W4
+-----END PGP SIGNATURE-----
+
+--nextPart2440608.7aDuJBW7cK--
+
+
+--===============1910646461178264940==
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KS0RFIFBJTSBt
+YWlsaW5nIGxpc3Qga2RlLXBpbUBrZGUub3JnCmh0dHBzOi8vbWFpbC5rZGUub3JnL21haWxtYW4v
+bGlzdGluZm8va2RlLXBpbQpLREUgUElNIGhvbWUgcGFnZSBhdCBodHRwOi8vcGltLmtkZS5vcmcv
+
+--===============1910646461178264940==--
+
--- /dev/null
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP signed+encrypted with 2 text attachments
+Date: Sun, 30 Aug 2015 12:01:20 +0200
+Message-ID: <4368981.7YjI8cQ7Br@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart3246504.5GAivIUY6Q"; protocol="application/pgp-encrypted"
+
+--nextPart3246504.5GAivIUY6Q
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+Content-Transfer-Encoding: 7Bit
+
+Version: 1
+--nextPart3246504.5GAivIUY6Q
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2
+
+hQEMAwzOQ1qnzNo7AQf9Ge9nFjtqLOKSQNhobS+0iCB2GUdLP7LCIWu6gBo9pWa+
+9wCNLxwmhqWOYv37RAk6v5VXjCYUX3/7UF7e7epSqo7YjS7VsUOow0gszQjJqocK
+Gd1T1oyNknza6oaRGgVeWPOZVAPb+Gj+3yS8VZa33Aq2ay7F7eI8dvRUN7Z3TuAh
+BOVV+itwHHzanfNG8RoCvokcE1vkANfvI3u7R4Q93U8Q+Qmjh1L5ypPe37N5BtAF
+UCPCiD9XySHjm5PyXx8ImrJDeUgFs1YhYox4B6NKsCcmm7R8NdYZYGNo1kzR4yKV
+FzMu1NUU/bwtvrpRXLe4dBL1pEkO2PpuMYDUR9+WVNLpAafTDbeIHPi/Z8v48seQ
+JxscRehfOB3DG1xrvQTMFJc3UJEBqNMkM9gOxLKOQcCcZp79FMsfWB7EjjlPR1Oh
+gyA5NR+4HxNw75Q5FpZ7qziWvIrb1Kzwfbsb9Dimx+MmiNMX9kUEPqkPo4pspwZ9
+pLCfjYUnikcnYyQ0b2ojsjQmLotYlz8mK0GH9L40zfFb1+oYfuu4Y9FPzHdPzNjx
+aFRY8cJQy1CNkCITsz53kni5rk3zVsapq0+NeBDEBYoUqX815fo0W+HVF7/j/uhT
+lPkJhRnJZPwOr5XgzPk3Yk9GlSRLJiqKF4/G8ya/nKyiNIebKM7DTcldWCmZM95B
+BIftaRN4hvVBhl0ElFnZg0xLP1AePFuuplRQTDuW8gpaNKrxwXiF3d4XJdVmjh/p
+YmnieIhbogUHFXugc3g9rE8c3oHA8b514ajSHUm9DXc0cXqw/DrsxXZtKXb+IDpF
+uv9AiM7bSU7I0h/AlaAL5uU0mL58XhkXXFQtaTbMS+u4Rv/Ie1IsnlWR4QSc4m7x
+91rfC1fIf/U43wwwnR+UjIRyr2vWcgTTpwnsZFDD8eSoJ8WqinazJRlMud6Sv+L6
+gI2wiCYyEYHrFEHy0WuS2nUSMNl5AWm31zB+erfKSLZr4EIFBIy4dJWZKwYhi46Q
+pDbw1Svf7xVdHix+5UkkYy3AY70ipf5bxA7FTJ1geJa86VKShDkqVpU6EtT+YQIJ
+7geWCyskT0DTaPp6qc8QpjajmRYssDcjiTke5WiqLQAjm8BIuny0fNm6kNC8KMS7
+eGmaBI2nB92bgrqlAW+LhvW95YB0dfO8beg3jKk8s6OJ4gicGFEFp6hXFfEsEZiv
+gi7Q2QCVFvCV11884H8rtZYmMRFGmuVUvm6xh/z1xicmfSy0YUowgkA3jpi7o913
+fqmYOHAwzCxv8Zp7xBf9hLT8DxMXdxqYUnJ+FaEMRcFkJ1MAFBpQ9uDbbqAz5bd5
+F3d6o0JSleOOTDlNH7wpN15HYtaCx9v3mXLN9FY4Y1g4mE8wdU0JZn7sFEmgmAkV
+/vj9khHS6eB01GPiCA6sy/u2tSdCQQ==
+=1GHi
+-----END PGP MESSAGE-----
+
+--nextPart3246504.5GAivIUY6Q--
--- /dev/null
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
--- /dev/null
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Received: from localhost (localhost.localdomain [127.0.0.1])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 15AB75CD846
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:15:03 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+X-Virus-Scanned: Debian amavisd-new at akihabara.dennogumi.org
+X-Spam-Flag: NO
+X-Spam-Score: -3.818
+X-Spam-Level:
+X-Spam-Status: No, score=-3.818 required=5 tests=[BAYES_50=0.8,
+ RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-2.328, T_DKIM_INVALID=0.01]
+ autolearn=unavailable
+Received: from akihabara.dennogumi.org ([127.0.0.1])
+ by localhost (akihabara.dennogumi.org [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id RMAq-XNJ040f for <einar@heavensinferno.net>;
+ Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Received: from postbox.kde.org (postbox.kde.org [46.4.96.248])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 321675CD845
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+Received: from postbox.kde.org (localhost [IPv6:::1])
+ by postbox.kde.org (Postfix) with ESMTP id 9F5E1B37F95;
+ Mon, 8 Apr 2013 10:13:32 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1365416012; bh=ZJtmtbDLoGFwSyJUINdTk4UpuX+xzxcjGp7LSPrKNUs=;
+ h=From:To:Subject:Date:Message-ID:MIME-Version:Reply-To:List-Id:
+ List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
+ Content-Type:Sender; b=vQ0NnJ9gjeyPLhPbQx6o9UxmILkS9KrhaKG6luAS/GR
+ 6iR3HKXR3HE0BCkTMD5xmKL5ztFMGcU5e79fz0ch0sd2pnZ0y1WVw7KjCxsv/YtO9HM
+ OplAHmhwRI5zH8KKQbyvdPULvssI/ISdViAXmHw04hNPsBjsIGkTPgvNbPFuk=
+X-Original-To: plasma-devel@kde.org
+Delivered-To: plasma-devel@localhost.kde.org
+Received: from mail.bddf.ca (unknown [64.141.113.219])
+ by postbox.kde.org (Postfix) with ESMTP id 782C6B37BE6
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 09:51:17 +0000 (UTC)
+Received: from freedom.localnet (242.13.24.31.ftth.as8758.net [31.24.13.242])
+ (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
+ (No client certificate requested)
+ by mail.bddf.ca (Postfix) with ESMTPSA id 0CB712DC040
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 03:51:16 -0600 (MDT)
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+MIME-Version: 1.0
+X-Scanned-By: MIMEDefang 2.71 on 46.4.96.248
+X-BeenThere: plasma-devel@kde.org
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============6664737512143839854=="
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+
+--===============6664737512143839854==
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+--nextPart1996263.NlFDv9GTkA
+Content-Type: text/plain; name="broken.attachment"
+Content-Transfer-Encoding: 7Bit
+
+Let's break a signed message - This messageblock should not be here :D
+
+--nextPart1996263.NlFDv9GTkA--
+
+
+--===============6664737512143839854==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
+
+--===============6664737512143839854==--
+
+
--- /dev/null
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+Oh man a header :)
+
+--__--__--
+
+Message:
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--__--__--
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
\ No newline at end of file
--- /dev/null
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Received: from localhost (localhost.localdomain [127.0.0.1])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 15AB75CD846
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:15:03 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+X-Virus-Scanned: Debian amavisd-new at akihabara.dennogumi.org
+X-Spam-Flag: NO
+X-Spam-Score: -3.818
+X-Spam-Level:
+X-Spam-Status: No, score=-3.818 required=5 tests=[BAYES_50=0.8,
+ RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-2.328, T_DKIM_INVALID=0.01]
+ autolearn=unavailable
+Received: from akihabara.dennogumi.org ([127.0.0.1])
+ by localhost (akihabara.dennogumi.org [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id RMAq-XNJ040f for <einar@heavensinferno.net>;
+ Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Received: from postbox.kde.org (postbox.kde.org [46.4.96.248])
+ by akihabara.dennogumi.org (Postfix) with ESMTP id 321675CD845
+ for <einar@heavensinferno.net>; Mon, 8 Apr 2013 12:14:44 +0200 (CEST)
+Authentication-Results: akihabara.dennogumi.org; dkim=pass
+ (1024-bit key; insecure key) header.i=@kde.org header.b=vQ0NnJ9g;
+ dkim-adsp=pass
+Received: from postbox.kde.org (localhost [IPv6:::1])
+ by postbox.kde.org (Postfix) with ESMTP id 9F5E1B37F95;
+ Mon, 8 Apr 2013 10:13:32 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kde.org; s=default;
+ t=1365416012; bh=ZJtmtbDLoGFwSyJUINdTk4UpuX+xzxcjGp7LSPrKNUs=;
+ h=From:To:Subject:Date:Message-ID:MIME-Version:Reply-To:List-Id:
+ List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
+ Content-Type:Sender; b=vQ0NnJ9gjeyPLhPbQx6o9UxmILkS9KrhaKG6luAS/GR
+ 6iR3HKXR3HE0BCkTMD5xmKL5ztFMGcU5e79fz0ch0sd2pnZ0y1WVw7KjCxsv/YtO9HM
+ OplAHmhwRI5zH8KKQbyvdPULvssI/ISdViAXmHw04hNPsBjsIGkTPgvNbPFuk=
+X-Original-To: plasma-devel@kde.org
+Delivered-To: plasma-devel@localhost.kde.org
+Received: from mail.bddf.ca (unknown [64.141.113.219])
+ by postbox.kde.org (Postfix) with ESMTP id 782C6B37BE6
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 09:51:17 +0000 (UTC)
+Received: from freedom.localnet (242.13.24.31.ftth.as8758.net [31.24.13.242])
+ (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
+ (No client certificate requested)
+ by mail.bddf.ca (Postfix) with ESMTPSA id 0CB712DC040
+ for <plasma-devel@kde.org>; Mon, 8 Apr 2013 03:51:16 -0600 (MDT)
+From: "Aaron J. Seigo" <aseigo@kde.org>
+To: plasma-devel@kde.org
+Subject: activities_optional branch in kde-workspace
+Date: Mon, 08 Apr 2013 11:51:11 +0200
+Message-ID: <4143483.eqrJjo7JEn@freedom>
+User-Agent: KMail/4.11 pre (Linux/3.6.3-1-desktop; KDE/4.10.60; i686;
+ git-da50be0; 2013-03-12)
+MIME-Version: 1.0
+X-Scanned-By: MIMEDefang 2.71 on 46.4.96.248
+X-BeenThere: plasma-devel@kde.org
+X-Mailman-Version: 2.1.14
+Precedence: list
+Reply-To: plasma-devel@kde.org
+List-Id: <plasma-devel.kde.org>
+List-Unsubscribe: <https://mail.kde.org/mailman/options/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=unsubscribe>
+List-Archive: <http://mail.kde.org/pipermail/plasma-devel>
+List-Post: <mailto:plasma-devel@kde.org>
+List-Help: <mailto:plasma-devel-request@kde.org?subject=help>
+List-Subscribe: <https://mail.kde.org/mailman/listinfo/plasma-devel>,
+ <mailto:plasma-devel-request@kde.org?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============6664737512143839854=="
+Errors-To: plasma-devel-bounces@kde.org
+Sender: plasma-devel-bounces@kde.org
+
+
+--===============6664737512143839854==
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--nextPart1996263.NlFDv9GTkA--
+
+
+--===============6664737512143839854==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+Plasma-devel mailing list
+Plasma-devel@kde.org
+https://mail.kde.org/mailman/listinfo/plasma-devel
+
+--===============6664737512143839854==--
+
+
--- /dev/null
+Return-Path: <plasma-devel-bounces@kde.org>
+Delivered-To: einar@heavensinferno.net
+Content-Type: multipart/signed; boundary="nextPart1996263.NlFDv9GTkA"; micalg="pgp-sha1"; protocol="application/broken-signature"
+
+
+--nextPart1996263.NlFDv9GTkA
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+hi..
+
+i noticed a new branch when i pulled kde-workspace today (finally!):
+activities_optional
+
+the lone commit in it was pushed on april 1, so maybe it's an april fools
+joke, but if it isn't, it looks like someone is trying to do something that
+makes no sense (and has no chance of being merged into master). so if this is
+a "for reals" branch, perhaps the motivation behind it can be shared?
+
+--
+Aaron J. Seigo
+--nextPart1996263.NlFDv9GTkA
+Content-Type: application/broken-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEUEABECAAYFAlFikxAACgkQ1rcusafx20MHbwCfeXOgTDwtR81XJwAdcQB40Lt7
+t2IAmJpIZxdU+SSruySeEfbQs3VXq/8=
+=BQPF
+-----END PGP SIGNATURE-----
+
+--nextPart1996263.NlFDv9GTkA--
--- /dev/null
+From: firstname.lastname@example.com
+To: test@kolab.org
+Subject: OpenPGP signed with 2 text attachments
+Date: Sun, 30 Aug 2015 12:02:56 +0200
+Message-ID: <2033829.IGepAdxqt9@vkpc5>
+X-KMail-Identity: 402312391
+X-KMail-Dictionary: en_US
+User-Agent: KMail/5.0.42 pre (Linux/3.16.6-2-desktop; KDE/5.14.0; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart3682207.KLrp2sxpbf"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+
+--nextPart3682207.KLrp2sxpbf
+Content-Type: multipart/mixed; boundary="nextPart2397422.QDHKUNdbyg"
+Content-Transfer-Encoding: 7Bit
+
+This is a multi-part message in MIME format.
+
+--nextPart2397422.QDHKUNdbyg
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+this is the main body text
+--nextPart2397422.QDHKUNdbyg
+Content-Disposition: inline; filename="attachment1.txt"
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="utf-8"; name="attachment1.txt"
+
+this is attachment one
+--nextPart2397422.QDHKUNdbyg
+Content-Disposition: inline; filename="attachment2.txt"
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="utf-8"; name="attachment2.txt"
+
+this is attachment two
+--nextPart2397422.QDHKUNdbyg--
+
+--nextPart3682207.KLrp2sxpbf
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+Content-Transfer-Encoding: 7Bit
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQEVAwUAVeLU0I2YYMWPJG3mAQL/fgf+LXmO7bKafdd4g5OOVHHyXRprVmX/6hBq
+mZoor29KLIHkvAH9OJi4qBy/ZKwqqKLfttLzHb2UaAfl5kn4f0ckmnwUhU7u32Sm
+JZ0Q50SxrRVFRyvTvPG22ho9IwQUO1YSZrL4wO9v8ZBQ3vkfpmAiUQVxPQMINc8L
+i68xQEm4y1Dtoc+DTUkoIMeOOPnEl6PTMPrwn906K0r30hI4788fEGRn6uOXb+vD
+G/ISlXu+JHIxxf/J5/jVjKNbra+trrfSPzB3piJIjBLEPO5FvLx8SgQFJcJHt/kw
+ps8D5YULj/MVMLlsPtXDdZmbOi/G9pN0tr05MKcXsO5Ywe7n2BhASw==
+=2Nzb
+-----END PGP SIGNATURE-----
+
+--nextPart3682207.KLrp2sxpbf--
--- /dev/null
+Return-Path: <test@test.com>
+Received: from imapb026.examplesys.com ([unix socket])
+ by imap.examplesys.com (Cyrus 2.5.15-28-g7d1550bfa-Example-2.5.15.28-2.1.el7.example_16) with LMTPA;
+ Thu, 09 Apr 2020 16:12:38 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx001.examplesys.com (unknown [10.5.9.1])
+ by imapb026.examplesys.com (Postfix) with ESMTPS id 4F60B149B64EC
+ for <example@examplesys.com>; Thu, 9 Apr 2020 16:12:38 +0200 (CEST)
+Received: from mx.examplesys.com (unknown [10.5.3.1])
+ by int-mx001.examplesys.com (Postfix) with ESMTPS id 1A2E63C3E6DF
+ for <example@examplesystems.com>; Thu, 9 Apr 2020 16:12:38 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at examplesys.com
+X-Spam-Flag: NO
+X-Spam-Score: -2.102
+X-Spam-Level:
+X-Spam-Status: No, score=-2.102 tagged_above=-999 required=4.5
+ tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
+ DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001,
+ RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
+ SPF_HELO_PASS=-0.001, SPF_PASS=-0.001]
+ autolearn=ham autolearn_force=no
+Authentication-Results: ext-mx-in001.examplesys.com (amavisd-new);
+ dkim=pass (1024-bit key) header.d=test.com
+X-Greylist: whitelisted by SQLgrey-1.8.0
+DMARC-Filter: OpenDMARC Filter v1.3.2 ext-mx-in001.examplesys.com D1D7D24D2E
+Received: from EUR04-VI1-obe.outbound.protection.outlook.com
+ (mail-eopbgr80125.outbound.protection.outlook.com [40.107.8.125])
+ by ext-mx-in001.examplesys.com (Postfix) with ESMTPS id D1D7D24D2E
+ for <example@examplesystems.com>; Thu, 9 Apr 2020 16:12:32 +0200 (CEST)
+ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
+ b=StJo4RwGgOX6TVDUnIk1h+oZVSIMjF8lQ1oy2GFieXns5SjE9zoEl+O0xWXheezHKBEcBMTFuDhYpYEK2rnZMz5R9lV8xyIm2ZvoO4pgNhxB2DoY3GawT8Cs3HlSPHd8MXpT3rPWiphxkeY4Oouw7w3x4C/CuLa4lwmIzM4ZpXDiPoi51rTsHozWu67ihhpkoKoq0aG1VEmxbnMOvaHpjWdqMnirmIjcPmabaVRj73AIC0Ydvx4R9yjJ93OGrPgK2gPnSMpQk/ZJ0NJvGDIwYw33MRN2KyovkyBpNr36skv5uRmeWDe5TpL4PUZHcyF4AyCOmhwUbFOEadCp/yaQug==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
+ s=arcselector9901;
+ h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
+ bh=w4YWu09Gwxx75gR96cp648fbgAX5Na7/B4oHfp+LoKY=;
+ b=JGwo50lgteBlgjJrjKKQSua63S9fzf+Fyy2JBmozGgj75OssRujXR4/sNoKgc5S7sLMzV1Amh+50R4HbUedJ/KItpZ1tVn+rjbcsI8z3eAJIqY/GHV3C2Uw0pIUX9cD676ZxGLYItlXpdWpfNwJ5wBbHAixC+sfS2tUXVsntta4ZC8HH1HdGRdbv/dWHcrCUZB40Oc82lnLaJlLygx/T/cEYsb+6DYCnEXuyE/8HBYFVh9KNbzTM1IN4gLdo/K2+YzxJdBkwE3xf6u8dTajWy5yRTW+7YrsVko+exTEzDViit1cqjFRbikw2LUwXoOcOIvrREtkzHN+2Gz+pYFoo/Q==
+ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
+ smtp.mailfrom=test.com; dmarc=pass action=none header.from=test.com;
+ dkim=pass header.d=test.com; arc=none
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=test.com; s=selector2;
+ h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
+ bh=w4YWu09Gwxx75gR96cp648fbgAX5Na7/B4oHfp+LoKY=;
+ b=Ooa0Ul14L92RxYrs/fHOBLcS5V/n61p77K5rdSDPb059Dfm+WKN0jF1fIrV1f4HzVa8GGOVg2kGCMNVnwEkJTc7CzS4GpjafXYCYts0OVFA7ar96B5NC4KwOehds3slySaQokXZ3xnuER5STAnxGxsWRxza0yDW6fwFGU/e4ADY=
+Received: from AM7PR09MB3574.eurprd09.prod.outlook.com (2603:10a6:20b:10e::13)
+ by AM7PR09MB3670.eurprd09.prod.outlook.com (2603:10a6:20b:10d::13)
+ with Microsoft SMTP Server (version=TLS1_2,
+ cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Thu, 9 Apr
+ 2020 14:12:31 +0000
+Received: from AM7PR09MB3574.eurprd09.prod.outlook.com
+ ([fe80::894d:3f5b:ccfe:161f]) by AM7PR09MB3574.eurprd09.prod.outlook.com
+ ([fe80::894d:3f5b:ccfe:161f%5]) with mapi id 15.20.2878.022; Thu, 9 Apr 2020
+ 14:12:31 +0000
+From: Test Test <test@test.com>
+To: Christian Example <example@examplesystems.com>
+Subject: Re: Translations for Collabora and Mattermost extensions
+Thread-Topic: Translations for Collabora and Mattermost extensions
+Thread-Index: AdYOJm3nInDgZPDjQwK7AuRNnliMNQATHwqAAAWwSgA=
+Date: Thu, 9 Apr 2020 14:12:30 +0000
+Message-ID: <0659B424-0E0F-4A14-B750-4B824229E3FD@test.com>
+References: <AM5PR0902MB1970EF31CC4A845B8CD5893DBBC10@AM5PR0902MB1970.eurprd09.prod.outlook.com>
+ <48bf4097296f188681a074844419c7c7@examplesys.com>
+In-Reply-To: <48bf4097296f188681a074844419c7c7@examplesys.com>
+Accept-Language: de-CH, en-US
+Content-Language: de-DE
+X-MS-Has-Attach:
+X-MS-TNEF-Correlator:
+user-agent: Microsoft-MacOutlook/10.20.0.191208
+authentication-results: spf=none (sender IP is )
+ smtp.mailfrom=test@test.com;
+x-originating-ip: [2a02:120b:2c01:f0e0:14c0:e630:9df9:bb36]
+x-ms-publictraffictype: Email
+x-ms-office365-filtering-correlation-id: 2a2e599d-57a0-478f-1e50-08d7dc900ac6
+x-ms-traffictypediagnostic: AM7PR09MB3670:
+x-microsoft-antispam-prvs: <AM7PR09MB36708E9751159571B6A2FBF2B1C10@AM7PR09MB3670.eurprd09.prod.outlook.com>
+x-ms-oob-tlc-oobclassifiers: OLM:6108;
+x-forefront-prvs: 0368E78B5B
+x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
+ IPV:NLI; SFV:NSPM; H:AM7PR09MB3574.eurprd09.prod.outlook.com; PTR:; CAT:NONE;
+ SFTY:;
+ SFS:(10019020)(136003)(366004)(396003)(376002)(346002)(39850400004)(76116006)(6506007)(186003)(53546011)(66946007)(66446008)(966005)(6916009)(508600001)(64756008)(91956017)(8936002)(2906002)(81156014)(8676002)(66476007)(66556008)(81166007)(5660300002)(6512007)(71200400001)(19627235002)(2616005)(36756003)(316002)(33656002)(6486002)(86362001);
+ DIR:OUT; SFP:1102;
+received-spf: None (protection.outlook.com: test.com does not designate
+ permitted sender hosts)
+x-ms-exchange-senderadcheck: 1
+x-microsoft-antispam: BCL:0;
+x-microsoft-antispam-message-info: IYjkQaqVdWXbwrCEX4Qlcrux+DkBuWadx5t2iYC2Uuh6aZHMYBW6ROoZzEdJcuKUij/QgM7fsyp03H5LeiN9o4OGtrw+A+TEu5U24s4auEsEcZuDOgEM1jgIDz+MMeYgyRyusRA774vN5qzkxjfiwOs4FtfpwlePoOEp4pbr3kasYrvV+bvbf5RUp3RIAUQAyb0KpGMDuFALki71FYC+JBby25i/dHQc3XHCNh6OkWWaDAqCa/09HAsuuuZDCzJ6EHz6hNHbC3q6yD1zCGuKYQ5/cOxZ/ZvtrpjQHDxjDqfSbk+mtXl06R7kqfKmuYCSux4v8J9ACBtndTY7d27IJ+l74xJOf8wldfCz0GSi8TG6UxkjXgoD02yUlsfupFLJHcg+svLR+4kU7Mkc2INXiV6uda+LpqswWLpRuw0/UldONcaIl//1wa+0w9vefm1rw1sR38iYs5v9wskjhPE2nHtRFn/uA+UWmK+c/bR5r7syr+zMKmwvzp66gUYY5PPGuxVcb8Wuf8jFGduXiGAMEg==
+x-ms-exchange-antispam-messagedata: WVlfeOHVcF98apkkdW2LzirizIJgDSEo6IhrC2cSIHuszQWgN7+nmrlN36DGYSO8siTVnDYiT6NIzGsI1ifKIDMF/Y8WjAdeBPqfZmrlhYvbZxg9eFfi0HNBsXsHyT+DRVgwj80SfigZMP7kd6nnZby0wHcA5COAKgmBYziU+RhOMHAfCjY5LAzlweEXJAjQkRspSx3dad+HXMvMTCqJFQ==
+x-ms-exchange-transport-forked: True
+Content-Type: multipart/alternative;
+ boundary="_000_0659B4240E0F4A14B7504B824229E3FDtestcom_"
+MIME-Version: 1.0
+X-OriginatorOrg: test.com
+X-MS-Exchange-CrossTenant-Network-Message-Id: 2a2e599d-57a0-478f-1e50-08d7dc900ac6
+X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2020 14:12:31.0023 (UTC)
+X-MS-Exchange-CrossTenant-fromentityheader: Hosted
+X-MS-Exchange-CrossTenant-id: 6dc7ca87-6797-4cec-b9b8-de8a083e7dc8
+X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
+X-MS-Exchange-CrossTenant-userprincipalname: GTEOxbm7HpVV2XUbwCWHAuMRMewpaa4Idf4V/6UvDFTQtwQxKKNghg6TJbuWJyCR
+X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR09MB3670
+
+--_000_0659B4240E0F4A14B7504B824229E3FDtestcom_
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+
+SGkgQ2hyaXN0aWFuLA0KDQpoYWJzIGdlcmFkZSBnZXRlc3RldDoNCg0KwqtUaGlzIGlzIGEgdGVz
+dOKApiBTb21lIG1vcmUgdGVzdC4NCg0KVGhleSB0ZXN0Li7igJ0NCg0KDQpUZXN0IHRlc3QuDQoN
+ClRlc3QgdGVzdCENClRlc3QNCg0KDQoNClZvbjogVGVzdCBUZXN0IDx0ZXN0QHRlc3QuY29tPiBp
+bSBBdWZ0cmFnIHZvbiBUZXN0IDx0ZXN0QHRlc3QuY29tPg0KRGF0dW06IERvbm5lcnN0YWcsIDku
+IEFwcmlsIDIwMjAgdW0gMTU6MjkNCkFuOiBUZXN0IFRlc3QgPHRlc3RAdGVzdC5jb20+LCBUZXN0
+MiBUZXN0MiA8dGVzdDJAdGVzdC5jb20+DQpCZXRyZWZmOiBSZTogVGVzdCB0ZXN0DQoNCg0KVGVz
+dC4NCg0KV2l0aCBteSBiZXN0IHJlZ2FyZHMsDQoNClRlc3QNCg0KT24gMjAyMC0wNC0wOSA2OjMy
+LCBUZXN0IHRlc3Qgd3JvdGU6DQoNCkhpIFRlc3QsDQoNCg0KDQpUZXN0IHRlc3QNCg0KQmVzdCBy
+ZWdhcmRzLA0KRGlhbmEgRG9lDQpQcm9ncmFtIE1hbmFnZXINCnd3dy50ZXN0LmNvbTxodHRwOi8v
+d3d3LnRlc3QuY29tPg0KDQoNCg0KDQo=
+
+
+
+
+
+--_000_0659B4240E0F4A14B7504B824229E3FDtestcom_
+Content-Type: text/html; charset="utf-8"
+Content-ID: <DD107B75E7E69E49B59D8318D999DCFE@eurprd09.prod.outlook.com>
+Content-Transfer-Encoding: base64
+
+PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4
+bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo
+dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo
+dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp
+dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l
+dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg
+bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj
+ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2
+IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy
+IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3Jt
+YWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbA0KCXttYXJnaW46MGNtOw0KCW1hcmdpbi1i
+b3R0b206LjAwMDFwdDsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJp
+IixzYW5zLXNlcmlmO30NCmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7bXNvLXN0eWxlLXBy
+aW9yaXR5Ojk5Ow0KCWNvbG9yOmJsdWU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpw
+LnYxbXNvbm9ybWFsLCBsaS52MW1zb25vcm1hbCwgZGl2LnYxbXNvbm9ybWFsDQoJe21zby1zdHls
+ZS1uYW1lOnYxbXNvbm9ybWFsOw0KCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOw0KCW1hcmdpbi1y
+aWdodDowY207DQoJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQoJbWFyZ2luLWxlZnQ6MGNt
+Ow0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7
+fQ0Kc3Bhbi5FLU1haWxGb3JtYXR2b3JsYWdlMjkNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwt
+cmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93
+dGV4dDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglm
+b250LXNpemU6MTAuMHB0O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzky
+LjBwdDsNCgltYXJnaW46NzAuODVwdCA3MC44NXB0IDIuMGNtIDcwLjg1cHQ7fQ0KZGl2LldvcmRT
+ZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0KPGJv
+ZHkgbGFuZz0iREUtQ0giIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiPg0KPGRpdiBjbGFzcz0i
+V29yZFNlY3Rpb24xIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBz
+dHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkhpIEpvaG4sPG86cD48L286cD48L3Nw
+YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJt
+c28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0K
+PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVO
+LVVTIj50ZXN0IHRlc3Q6PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h
+bCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwv
+bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIg
+c3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj7Cqzwvc3Bhbj48c3BhbiBsYW5nPSJF
+Ti1VUyIgc3R5bGU9ImNvbG9yOmJsYWNrIj5UZXN0IHRlc3QgdGVzdC48bzpwPjwvbzpwPjwvc3Bh
+bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImNv
+bG9yOmJsYWNrIj4mbmJzcDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y
+bWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImNvbG9yOmJsYWNrIj5UaGV5IHdpbGwgY29t
+ZSBiYWNrIHNvb24gb24gdGhpcy4u4oCdPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9
+Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJjb2xvcjpibGFjayI+PG86cD4m
+bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0i
+RU4tVVMiIHN0eWxlPSJjb2xvcjpibGFjayI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0K
+PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJjb2xvcjpibGFj
+ayI+VGVzdCB0ZXN0LiA8bzpwPg0KPC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt
+YWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iY29sb3I6YmxhY2siPjxvOnA+Jm5ic3A7PC9v
+OnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBz
+dHlsZT0iY29sb3I6YmxhY2siPkdyw7xzc2UgdW5kIHNjaMO2bmUgT3N0ZXJuITxvOnA+PC9vOnA+
+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHls
+ZT0iY29sb3I6YmxhY2siPkpvaG4yPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1z
+b05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJjb2xvcjpibGFjayI+PG86cD4mbmJz
+cDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4t
+VVMiIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8L286cD48
+L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl
+PSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9w
+Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0
+O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAwY20iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNw
+YW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Y29sb3I6YmxhY2siPlZvbjogPC9zcGFuPjwvYj48
+c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjBwdDtjb2xvcjpibGFjayI+Sm9obiBUZXN0ICZsdDt0
+ZXN0QHRlc3QuY29tJmd0OyBpbSBBdWZ0cmFnIHZvbiBUZXN0IEV4dGVuc2lvbnMgJmx0O3Rlc3Qt
+ZXh0c0Brb2xhYnN5cy5jb20mZ3Q7PGJyPg0KPGI+RGF0dW06IDwvYj5Eb25uZXJzdGFnLCA5LiBB
+cHJpbCAyMDIwIHVtIDE1OjI5PGJyPg0KPGI+QW46IDwvYj5Kb2huMSBKb2huMSAmbHQ7am9objFA
+dGVzdC5jb20mZ3Q7LCBKb2huMiBKb2huMSAmbHQ7dGpvaG4xQHRlc3QuY29tJmd0Ozxicj4NCjxi
+PkJldHJlZmY6IDwvYj5SZTogVGVzdCB0ZXN0PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+
+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rp
+dj4NCjxwPlRoYXQgdGVzdHMuPG86cD48L286cD48L3A+DQo8cD5XaXRoIG15IGJlc3QgcmVnYXJk
+cyw8bzpwPjwvbzpwPjwvcD4NCjxwPkpvaG48bzpwPjwvbzpwPjwvcD4NCjxwIGlkPSJyZXBseS1p
+bnRybyI+T24gMjAyMC0wNC0wOSA2OjMyLCBEaWFuZSBEb2Ugd3JvdGU6PG86cD48L286cD48L3A+
+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgIzEwMTBG
+RiAxLjVwdDtwYWRkaW5nOjBjbSAwY20gMGNtIDUuMHB0O21hcmdpbi1sZWZ0OjBjbTttYXJnaW4t
+cmlnaHQ6MGNtIj4NCjxkaXYgaWQ9InJlcGx5Ym9keTEiPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFz
+cz0idjFtc29ub3JtYWwiPjxzcGFuIGxhbmc9IlJVIj5IaSBKb2huLDxvOnA+PC9vOnA+PC9zcGFu
+PjwvcD4NCjxwIGNsYXNzPSJ2MW1zb25vcm1hbCI+PHNwYW4gbGFuZz0iUlUiPiZuYnNwOzxvOnA+
+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJ2MW1zb25vcm1hbCI+PHNwYW4gbGFuZz0iUlUi
+PldlIGFyZSBnb2luZyB0byB0ZXN0IHNvbWUgdGVzdC4NCjxhIGhyZWY9Imh0dHBzOi8vcm91bmRj
+dWJlLm5ldC9zY3JlZW5zLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vcm91bmRjdWJlLm5ldC9z
+Y3JlZW5zLzwvYT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0idjFtc29ub3JtYWwi
+PjxzcGFuIGxhbmc9IlJVIiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6UlUiPkJlc3QgcmVn
+YXJkcywNCjxicj4NClRlc3QgdGVzdDxicj4NClByb2dyYW0gTWFuYWdlcjxicj4NCjwvc3Bhbj48
+c3BhbiBsYW5nPSJSVSIgc3R5bGU9ImZvbnQtc2l6ZToxMC41cHQ7bXNvLWZhcmVhc3QtbGFuZ3Vh
+Z2U6UlUiPjxhIGhyZWY9Imh0dHA6Ly93d3cudGVzdC5jb20iIHRhcmdldD0iX2JsYW5rIj53d3cu
+dGVzdC5jb208L2E+DQo8L3NwYW4+PHNwYW4gbGFuZz0iUlUiPjxvOnA+PC9vOnA+PC9zcGFuPjwv
+cD4NCjxwIGNsYXNzPSJ2MW1zb25vcm1hbCI+PHNwYW4gbGFuZz0iUlUiPiZuYnNwOzxvOnA+PC9v
+OnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxw
+PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
+
+--_000_0659B4240E0F4A14B7504B824229E3FDtestcom_--
--- /dev/null
+Return-Path: <konqi@example.org>
+Date: Wed, 8 Jun 2016 20:34:44 -0700
+From: Konqi <konqi@example.org>
+To: konqi@kde.org
+Subject: A random subject with alternative contenttype
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+If you can see this text it means that your email client couldn't display o=
+ur newsletter properly.
+Please visit this link to view the newsletter on our website: http://www.go=
+g.com/newsletter/
--- /dev/null
+Return-Path: <christian@example.ch>
+Received: from imapb010.mykolab.com ([unix socket])
+ by imapb010.mykolab.com (Cyrus 2.5.10-49-g2e214b4-Kolab-2.5.10-8.1.el7.kolab_14) with LMTPA;
+ Wed, 09 Aug 2017 18:37:01 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from int-mx002.mykolab.com (unknown [10.9.13.2])
+ by imapb010.mykolab.com (Postfix) with ESMTPS id 0A93910A25047
+ for <christian@example.ch>; Wed, 9 Aug 2017 18:37:01 +0200 (CEST)
+Received: from int-subm002.mykolab.com (unknown [10.9.37.2])
+ by int-mx002.mykolab.com (Postfix) with ESMTPS id EC06AF6E
+ for <christian@example.ch>; Wed, 9 Aug 2017 18:37:00 +0200 (CEST)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="=_291b8e96564265636432c6d494e02322"
+Date: Wed, 09 Aug 2017 10:37:00 -0600
+From: "Mollekopf, Christian" <christian@example.ch>
+To: christian@example.ch
+Subject: sdflkjsdf
+Message-ID: <46892ac54a8ffb690d491243ec01dfb2@example.ch>
+X-Sender: christian@example.ch
+
+--=_291b8e96564265636432c6d494e02322
+Content-Type: multipart/alternative;
+ boundary="=_ceff0fd19756f45ed1295ee2069ff8e0"
+
+--=_ceff0fd19756f45ed1295ee2069ff8e0
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain; charset=US-ASCII
+
+sdlkjsdjf
+--=_ceff0fd19756f45ed1295ee2069ff8e0
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html; charset=UTF-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
+=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
+eva,sans-serif'>
+<p>sdlkjsdjf</p>
+
+</body></html>
+
+--=_ceff0fd19756f45ed1295ee2069ff8e0--
+
+--=_291b8e96564265636432c6d494e02322
+Content-Transfer-Encoding: base64
+Content-Type: text/plain;
+ name=xorg.conf
+Content-Disposition: attachment;
+ filename=xorg.conf;
+ size=211
+
+U2VjdGlvbiAiRGV2aWNlIgogICAgSWRlbnRpZmllciAgICAgIkRldmljZTAiCiAgICBEcml2ZXIg
+ICAgICAgICAibnZpZGlhIgogICAgVmVuZG9yTmFtZSAgICAgIk5WSURJQSBDb3Jwb3JhdGlvbiIK
+ICAgIEJvYXJkTmFtZSAgICAgICJOVlMgNDIwME0iCiAgICBPcHRpb24gIk5vTG9nbyIgInRydWUi
+CiAgICBPcHRpb24gIlVzZUVESUQiICJ0cnVlIgpFbmRTZWN0aW9uCg==
+--=_291b8e96564265636432c6d494e02322--
--- /dev/null
+From test@kolab.org Wed, 08 Sep 2010 17:53:29 +0200
+From: OpenPGP Test <test@kolab.org>
+Subject: Signed Fwd: OpenPGP signed and encrypted
+Date: Wed, 08 Sep 2010 17:53:29 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/signed; boundary="nextPart4350242.cT7m6ulPOV"; micalg="pgp-sha1"; protocol="application/pgp-signature"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart4350242.cT7m6ulPOV
+Content-Type: multipart/mixed; boundary="nextPart1512490.WQBKYaOrt8"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart1512490.WQBKYaOrt8
+Content-Transfer-Encoding: 7Bit
+Content-Type: text/plain; charset="us-ascii"
+
+bla bla bla
+--nextPart1512490.WQBKYaOrt8
+Content-Type: message/rfc822
+Content-Disposition: inline; filename="forwarded message"
+Content-Description: OpenPGP Test <test@kolab.org>: OpenPGP signed and encrypted
+
+From: OpenPGP Test <test@kolab.org>
+To: test@kolab.org
+Subject: OpenPGP signed and encrypted
+Date: Tue, 07 Sep 2010 18:08:44 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: multipart/encrypted; boundary="nextPart25203163.0xtB501Z4V"; protocol="application/pgp-encrypted"
+Content-Transfer-Encoding: 7Bit
+
+
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/pgp-encrypted
+Content-Disposition: attachment
+
+Version: 1
+--nextPart25203163.0xtB501Z4V
+Content-Type: application/octet-stream
+Content-Disposition: inline; filename="msg.asc"
+
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+hQEMAwzOQ1qnzNo7AQf7BFYWaGiCTGtXY59bSh3LCXNnWZejblYALxIUNXOFEXbm
+y/YA95FmQsy3U5HRCAJV/DY1PEaJz1RTm9bcdIpDC3Ab2YzSwmOwV5fcoUOB2df4
+KjX19Q+2F3JxpPQ0N1gHf4dKfIu19LH+CKeFzUN13aJs5J4A5wlj+NjJikxzmxDS
+kDtNYndynPmo9DJQcsUFw3gpvx5HaHvx1cT4mAB2M5cd2l+vN1jYbaWb0x5Zq41z
+mRNI89aPieC3rcM2289m68fGloNbYvi8mZJu5RrI4Tbi/D7Rjm1y63lHgVV6AN88
+XAzRiedOeF99LoTBulrJdtT8AAgCs8nCetcWpIffdtLpAZiZkzHmYOU7nqGxqpRk
+OVeUTrCn9DW2SMmHjaP4IiKnMvzEycu5F4a72+V1LeMIhMSjTRTq+ZE2PTaqH59z
+QsMn7Nb6GlOICbTptRKNNtyJKO7xXlpT7YtvNKnCyEOkH2XrYH7GvpYCiuQ0/o+7
+SxV436ZejiYIg6DQDXJCoa2DXimGp0C10Jh0HwX0BixpoNtwEjkGRYcX6P/JzkH0
+oBood4Ly+Tiu6iVDisrK3AVGYpIzCrKkE9qULTw4R/jFKR2tcCqGb7Fxtk2LV7Md
+3S+DyOKrvKQ5GNwbp9OE97pwk+Lr1JS3UAvj5f6BR+1PVNcC0i0wWkgwDjPh1eGD
+enMQmorE6+N0uHtH2F4fOxo/TbbA3+zhI25kVW3bO03xyUl/cmQZeb52nvfOvtOo
+gSb2j6bPkzljDMPEzrtJjbFtGHJbPfUQYJgZv9OE2EQIqpg6goIw279alBq6GLIX
+pkO+dRmztzjcDyhcLxMuQ4cTizel/0J/bU7U6lvwHSyZVbT4Ev+opG5K70Hbqbwr
+NZcgdWXbSeesxGM/oQaMeSurOevxVl+/zrTVAek61aRRd1baAYqgi2pf2V7y4oK3
+qkdxzmoFpRdNlfrQW65NZWnHOi9rC9XxANIwnVn3kRcDf+t2K4PrFluI157lXM/o
+wX91j88fazysbJlQ6TjsApO9ETiPOFEBqouxCTtCZzlUgyVG8jpIjdHWFnagHeXH
++lXNdYjxnTWTjTxMOZC9ySMpXkjWdFI1ecxVwu6Ik6RX51rvBJAAXWP75yUjPKJ4
+rRi5oQl/VLl0QznO7lvgMPtUwgDVNWO/r7Kn9B387h9fAJZ/kWFAEDW2yhAzABqO
+rCNKDzBPgfAwCnikCpMoCbOL7SU8BdbzQHD8/Lkv4m0pzliHQ/KkGF710koBzTmF
+N7+wk9pwIuvcrEBQj567
+=GV0c
+-----END PGP MESSAGE-----
+
+--nextPart25203163.0xtB501Z4V--
+
+--nextPart1512490.WQBKYaOrt8--
+
+--nextPart4350242.cT7m6ulPOV
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: This is a digitally signed message part.
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.15 (GNU/Linux)
+
+iQEcBAABAgAGBQJMh7F5AAoJEI2YYMWPJG3mOB0IALeHfwg8u7wK0tDKtKqxQSqC
+2Bbk4pTLuLw/VniQNauDG+kc1eUc5RJk/R31aB1ysiQCV5Q8ucI8c9vCDDMbd+s4
+t2bZUEzMpXrw/aFiHgYGXFAY+tpqZqDGNVRNHWsPYJKtx8cci9E5DLnBJcVXVqib
+3iiHlr9AQOok3PUmpPk1a61q2L0kk8wqRenC0yZXNw5qFn5WW/hFeCOfYB+t+s5N
+IuE6ihFCJIlvGborrvl6VgPJTCyUQ3XgI90vS6ABN8TFlCNr3grXOWUePc2a20or
+xFgh38cnSR64WJajU5K1nUL9/RgfIcs+PvyHuJaRf/iUFkj1jiMEuaSi9jVFco0=
+=bArV
+-----END PGP SIGNATURE-----
+
+--nextPart4350242.cT7m6ulPOV--
--- /dev/null
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.crt"; smime-type="certs-only"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.crt"
+
+asdfasdfasdfasdfasdfasdfasdfasdf
+asdfasdfadsfsadfasdf
+asdfasdf
+sadfas
+dfasdf
+sadf
+sadf
+adsf
+adsf
+asdf
+
--- /dev/null
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/octet-stream;
+ name="smime.p7m"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAJwmmaOeidXUHSQGOf2OBIsPYafVqdORe
+y54pEXbXiAfSVUWgI4a9CsiWwcDX8vlaX9ZLLr+L2VmOfr6Yc5214yxzausZVvnUFjy6LUXotuEX
+tSar4EW7XI9DjaZc1l985naMsTx9JUa5GyQ9J6PGqhosAKpKMGgKkFAHaOwE1/IwgAYJKoZIhvcN
+AQcBMBQGCCqGSIb3DQMHBAieDfmz3WGbN6CABHgEpsLrNn0PAZTDUfNomDypvSCl5bQH+9cKm80m
+upMV2r8RBiXS7OaP4SpCxq18afDTTPatvboHIoEX92taTbq8soiAgEs6raSGtEYZNvFL0IYqm7MA
+o5HCOmjiEcInyPf14lL3HnPk10FaP3hh58qTHUh4LPYtL7UECOZELYnUfUVhAAAAAAAAAAAAAA==
+
--- /dev/null
+From test@example.com Sat, 13 Apr 2013 01:54:30 +0200
+From: test <test@example.com>
+To: you@you.com
+Subject: test
+Date: Sat, 13 Apr 2013 01:54:30 +0200
+Message-ID: <1576646.QQxzHWx8dA@tabin>
+X-KMail-Identity: 505942601
+User-Agent: KMail/4.10.2 (Linux/3.9.0-rc4-experimental-amd64; KDE/4.10.60; x86_64; git-fc9b82c; 2013-04-11)
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAJwmmaOeidXUHSQGOf2OBIsPYafVqdORe
+y54pEXbXiAfSVUWgI4a9CsiWwcDX8vlaX9ZLLr+L2VmOfr6Yc5214yxzausZVvnUFjy6LUXotuEX
+tSar4EW7XI9DjaZc1l985naMsTx9JUa5GyQ9J6PGqhosAKpKMGgKkFAHaOwE1/IwgAYJKoZIhvcN
+AQcBMBQGCCqGSIb3DQMHBAieDfmz3WGbN6CABHgEpsLrNn0PAZTDUfNomDypvSCl5bQH+9cKm80m
+upMV2r8RBiXS7OaP4SpCxq18afDTTPatvboHIoEX92taTbq8soiAgEs6raSGtEYZNvFL0IYqm7MA
+o5HCOmjiEcInyPf14lL3HnPk10FaP3hh58qTHUh4LPYtL7UECOZELYnUfUVhAAAAAAAAAAAAAA==
+
--- /dev/null
+From test@example.com Fri Sep 11 10:18:48 2015
+From: test <test@example.com>
+To: you@you.com
+Subject: enc+sign
+Date: Fri, 11 Sep 2015 12:18:48 +0200
+Message-ID: <49743203.WFa6qKaG4S@tabin.local>
+X-KMail-Identity: 792434561
+User-Agent: KMail/4.13.0.1 (Linux/4.1.5-towo.1-siduction-amd64; KDE/4.14.2; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxgfwwgfkCAQAwYjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+S0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEfMB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxl
+LmNvbQIJANNFIDoYY4XJMA0GCSqGSIb3DQEBAQUABIGAkttyRl8OyZkRGfs3CMfzYchrG4rRMfbE
+WIkAFIXf64yAzPZfo6cCn0Il/6q4793FeKUrsJUvzP21KBLp4u1t5qLL5iPAmAzBdLg0teoEzLZe
+CEZHinM+WSMdz2wEV8lgAt8x/3yhXmDMB09FEapUaBCK5NhbLAFkpI2mFg66zxcwgAYJKoZIhvcN
+AQcBMB0GCWCGSAFlAwQBAgQQ6DSjjkXJNm5cXQNek9eozqCABIIDsI7lufqw58g/uVM2gymkldmb
+BOgdimxshJkYznbbG5sfQPNM9ROhXKRUOc8hfzgmZ9dOZvtAyzepROMHrcL1mFFx7c1vgyT85fai
+PLEqRs8FRoztXJ0I3q57r+sPW4BtYJp9WCBSerdLSrBFK1zvKpVQtSCYbbDCc3462KnSsBrE4XTf
+BiiLWkpok4fNIdqYG1aWPLgRbp7wwLiXcq5RxYCail1tlyAty6dWBrYE1+ABZoqnKUqNqbghxJUd
+X9t3EziUnzw7c0Hq03sJEShzbXI9BxOTs8ZZ+1Ktx3rdh6RhZZ7XfJ7XIuN0yYhusBeOgC8AuILN
+lYojgmXMin52VPFmz9siI8jnKaqsr1uUqVfMLNc+mLhZEjuOu99eAHwdJUS95BKWm9J8DBe/lpz3
+s09Oz2oOoiQx0WxKmQZ4GXW/UI9OwykfNLqWfmDrbMbGW4Mvq615ucHZixFdp2vf3kU72wfk8hFK
+EIU/1Ov85glDj96ELdXErXn02BNvVBQIsRx3DbBGEgj9tz+WHbCR6RjEK4eV5lhInZplFGmYr4Uu
+9ALS+MRGTYZnALNPrWu6b1aWprnlJCyKZeeyqUzpQVPoWOh7CfdvBxvQoil4Z9Neb9O0AGCZ0axc
+zZ4yYcS/LpHkLgYPC5BphNtpyciQh6ZFeexi8rsZuHRu+YUKnuM+DQyUxtUvDYhiX7CT49MMXIwt
+bdyA0IAbIXXb/Us9GGX11gAfz2EFI3QBDHtsyciEgCIlA32OiiJF0T5CnQsku2yu6c3TWC4k+feL
+jjTEhm/KPUL6SkksarFeEncJlVt7impW9FlHyBpISwlQF4RAxDYTRX475VTNu7wn3PQx376m8iBN
+K20MjdfIM162jcQh9IWnqTZ0nH/gT2kQPYe7GqjFi6XmU3bwdzW9SXR0G9A8juIXaaNR7aXcsB53
+/W4WHPcdJBwRELa0dT1/bPg8z3EV2vM7Flc/Q5ugTWHxk8GHNEPpotArpLq1sEAZu78mSCqzzEDA
+TwzEpj9LZYIv4rDYYLCAxUR9YGhiJ5Qm21YnklkE++4zfpsl/KJcwtNsp7SWdzeVuPoUYBNhsgp/
+PZgudzQoOhxcF4ChHMVSNk1f1tlvXZppeXwv9OwpSszz0zZUr46ievpkQwL0Sa1XAfKwAt7bFJwp
+i95ae7p58ZdizJVsz0QUhFDxIDL76qiPEYXC7nIf4ZPQ36dzLAfZ6OwWGffluxHpE6oqUoM3l320
+7yQT66xfRKLGl5Cr1Q8UBBABC6aR2dt6RVbsxbR3mB0PAAAAAAAAAAAAAA==
+
--- /dev/null
+From test@example.com Fri Sep 11 10:16:06 2015
+From: test <test@example.com>
+To: you@you.com
+Subject: sign only
+Date: Fri, 11 Sep 2015 12:16:06 +0200
+Message-ID: <3182420.pXWeMPZlAJ@tabin.local>
+X-KMail-Identity: 792434561
+User-Agent: KMail/4.13.0.1 (Linux/4.1.5-towo.1-siduction-amd64; KDE/4.14.2; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="signed-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEZUNvbnRl
+bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdCaXQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy
+c2V0PSJ1dGYtOCIKCkEgc2ltcGxlIHNpZ25lZCBvbmx5IHRlc3QuAAAAAAAAMYIBkjCCAY4CAQEw
+YjBVMQswCQYDVQQGEwJVUzENMAsGA1UECgwES0RBQjEWMBQGA1UEAwwNdW5pdHRlc3QgY2VydDEf
+MB0GCSqGSIb3DQEJARYQdGVzdEBleGFtcGxlLmNvbQIJANNFIDoYY4XJMAkGBSsOAwIaBQCggYcw
+GAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwMTEwMTU0ODEyWjAj
+BgkqhkiG9w0BCQQxFgQUvJ5zI7oyv5fNx1H1wabIa6atsdcwKAYJKoZIhvcNAQkPMRswGTALBglg
+hkgBZQMEAQIwCgYIKoZIhvcNAwcwDQYJKoZIhvcNAQEBBQAEgYAHFCw88FPy1n2lu5ql5sD2J4Yi
+2/N9gUQvNQF5F/kd48HncdihLPZRs7eEX7IzDZNeylTmyp2WIiGEwQrIHbxtqU32NRouc09Zv4bu
+iUwUoz1SM2s7qipikwayQMD3d5zWNhszNLBsw8z48uXAzjZAejBCfPP0/w3z7DZDJC2R2QAAAAAA
+AA==
+
--- /dev/null
+From test@example.com Thu Jun 09 12:52:44 2016
+From: test@example.com
+To: test@example.com
+Subject: Opaque S/MIME signed and encrypted message with attachment
+Date: Thu, 09 Jun 2016 14:52:44 +0200
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7m"
+
+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
--- /dev/null
+From: Quack <quack@example.org>
+Content-Type: multipart/signed; boundary="Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB"; protocol="application/pkcs7-signature"; micalg=sha1
+Message-Id: <468684BD-9CBD-48CF-B1BD-2824000F9541@example.org>
+Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
+Subject: Re: PDF bug - modified mail, signature is not valid!
+Date: Fri, 20 Jan 2017 11:51:41 +0100
+To: Konqui <Konqui@kdab.com>
+
+
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB
+Content-Type: multipart/alternative;
+ boundary="Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB"
+
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+ charset=utf-8
+
+Ol=C3=A1 Konqui,
+
+Here is the pdf you asked for!
+Cheers,
+
+Quaak
+
+=E2=80=A6
+Quack | UX/UI Designer
+Klar=C3=A4lvdalens Datakonsult AB, a KDAB Group company
+Sweden (HQ) +46-563-540090, Germany +49-30-521325470
+KDAB - The Qt, C++ and OpenGL Experts | www.kdab.com
+
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB
+Content-Type: multipart/mixed;
+ boundary="Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB"
+
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
+charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
+-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
+class=3D"">Ol=C3=A1 Konqui,</div><div =
+class=3D"">Here is the pdf you asked for!</div><div =
+class=3D"">Cheers,</div><div =
+class=3D"">Quaack</div></body></html>=
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Disposition: attachment; filename="image.png"
+Content-Transfer-Encoding: base64
+Content-Type: image/png; name="image.png"
+
+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
+o/0d59+Lh3Y1HHcAAAAASUVORK5CYII=
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+ charset=utf-8
+
+<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
+charset=3Dutf-8"></head><body>=
+<blockquote type=3D"cite" class=3D""><div =
+class=3D"">On 20 Jan 2017, at 10:35, Konqui <<a =
+href=3D"mailto:Konqui@kdab.com">Konqui</a>=
+</div>
+</blockquote>=
+</body></html>=
+
+--Apple-Mail=_1C4D1EDB-36C5-40D7-9AB6-1234567890AB--
+
+--Apple-Mail=_C5F90221-8F52-4623-99DF-1234567890AB--
+
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB
+Content-Disposition: attachment;
+ filename=smime.p7s
+Content-Type: application/pkcs7-signature;
+ name=smime.p7s
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIILdTCCBRow
+ggQCoAMCAQICEG0Z6qcZT2ozIuYiMnqqcd4wDQYJKoZIhvcNAQEFBQAwga4xCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VS
+VFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQD
+Ey1VVE4tVVNFUkZpcnN0LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwwHhcNMTEwNDI4
+MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjCBkzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIg
+TWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQx
+OTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKEhFtLV5jUXi+LpOFAyKNTWF9mZfEy
+TvefMn1V0HhMVbdClOD5J3EHxcZppLkyxPFAGpDMJ1Zifxe1cWmu5SAb5MtjXmDKokH2auGj/7jf
+H0htZUOMKi4rYzh337EXrMLaggLW1DJq1GdvIBOPXDX65VSAr9hxCh03CgJQU2yVHakQFLSZlVkS
+Mf8JotJM3FLb3uJAAVtIaN3FSrTg7SQfOq9xXwfjrL8UO7AlcWg99A/WF1hGFYE8aIuLgw9teiFX
+5jSw2zJ+40rhpVJyZCaRTqWSD//gsWD9Gm9oUZljjRqLpcxCm5t9ImPTqaD8zp6Q30QZ9FxbNboW
+86eb/8ECAwEAAaOCAUswggFHMB8GA1UdIwQYMBaAFImCZ33EnSZwAEu0UEh83j2uBG59MB0GA1Ud
+DgQWBBR6E04AdFvGeGNkJ8Ev4qBbvHnFezAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADARBgNVHSAECjAIMAYGBFUdIAAwWAYDVR0fBFEwTzBNoEugSYZHaHR0cDovL2NybC51c2Vy
+dHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtQ2xpZW50QXV0aGVudGljYXRpb25hbmRFbWFpbC5jcmww
+dAYIKwYBBQUHAQEEaDBmMD0GCCsGAQUFBzAChjFodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVRO
+QWRkVHJ1c3RDbGllbnRfQ0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3Qu
+Y29tMA0GCSqGSIb3DQEBBQUAA4IBAQCF1r54V1VtM39EUv5C1QaoAQOAivsNsv1Kv/avQUn1G1rF
+0q0bc24+6SZ85kyYwTAo38v7QjyhJT4KddbQPTmGZtGhm7VNm2+vKGwdr+XqdFqo2rHA8XV6L566
+k3nK/uKRHlZ0sviN0+BDchvtj/1gOSBH+4uvOmVIPJg9pSW/ve9g4EnlFsjrP0OD8ODuDcHTzTNf
+m9C9YGqzO/761Mk6PB/tm/+bSTO+Qik5g+4zaS6CnUVNqGnagBsePdIaXXxHmaWbCG0SmYbWXVcH
+G6cwvktJRLiQfsrReTjrtDP6oDpdJlieYVUYtCHVmdXgQ0BCML7qpeeU0rD+83X5f27nMIIGUzCC
+BTugAwIBAgIQMFPel8s+Gckd6L+iGIwbpTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxOTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24g
+YW5kIFNlY3VyZSBFbWFpbCBDQTAeFw0xNDA2MDIwMDAwMDBaFw0xNzA2MDEyMzU5NTlaMIIBXzEL
+MAkGA1UEBhMCU0UxDzANBgNVBBETBjY4MyAzMTESMBAGA1UECBMJVmFlcm1sYW5kMRAwDgYDVQQH
+EwdIYWdmb3JzMRgwFgYDVQQJEw9Ob3JyaW5ncyB2YWVnIDIxDzANBgNVBBITBkJveCAzMDEmMCQG
+A1UECgwdS2xhcsOkbHZkYWxlbnMgRGF0YWtvbnN1bHQgQUIxHTAbBgNVBAsTFEEgS0RBQiBHcm91
+cCBDb21wYW55MUMwQQYDVQQLDDpJc3N1ZWQgdGhyb3VnaCBLbGFyw6RsdmRhbGVucyBEYXRha29u
+c3VsdCBBQiBFLVBLSSBNYW5hZ2VyMR8wHQYDVQQLExZDb3Jwb3JhdGUgU2VjdXJlIEVtYWlsMRgw
+FgYDVQQDEw9EaWFuYSBHb25jYWx2ZXMxJzAlBgkqhkiG9w0BCQEWGGRpYW5hLmdvbmNhbHZlc0Br
+ZGFiLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrHSvWD6MR2tvF9A+wayTDg
+PvK3DahuvHWHzGQsd1p8bEh6qqupqgph2xO73P+ibM6EmNbCtZ+eQtW7l7iIyiC4IGsyEb5RSAtV
+zGAyebsO7SPHokbGIV5SVobaRQiJ+1gOvWUbqHSQ0T9ZPvMX2nNGIKZpqAfocRreZr36AZWRo4AF
+0uf6wz5aLEtq912u2rTWVsM1F966lexaepo0cZB9fdnnD8/pQX3zroj+vBTFNAkZXxxVwGMO24Pz
+92d/B6K8o1SP1ArqV4sxVYIxyQTmfW4X3iV/6bcbLfEcpcUNt6MUsjFulqr6a+j51alpyT3vNuJ9
+V1UI9jz3t/daQr0CAwEAAaOCAdIwggHOMB8GA1UdIwQYMBaAFHoTTgB0W8Z4Y2QnwS/ioFu8ecV7
+MB0GA1UdDgQWBBRIYj+FxAEGllaHmLL+EMhopIEOQjAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/
+BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwRgYDVR0gBD8wPTA7BgwrBgEEAbIx
+AQIBAwUwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLm5ldC9DUFMwVwYDVR0f
+BFAwTjBMoEqgSIZGaHR0cDovL2NybC5jb21vZG9jYS5jb20vQ09NT0RPQ2xpZW50QXV0aGVudGlj
+YXRpb25hbmRTZWN1cmVFbWFpbENBLmNybDCBiAYIKwYBBQUHAQEEfDB6MFIGCCsGAQUFBzAChkZo
+dHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9DbGllbnRBdXRoZW50aWNhdGlvbmFuZFNlY3Vy
+ZUVtYWlsQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wIwYDVR0R
+BBwwGoEYZGlhbmEuZ29uY2FsdmVzQGtkYWIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQACzCCZ4ppg
+H7nXnCwisxjGLIgQMdwKPB6lnWk39YT0gEqvn85tDaXIZwGiRda7O1HWdWh7RoncolX3yHQ6p/BJ
+8RWkpxoc4es1wXSPmWMpspnglvtqYlfu7NZ/CqI6bvgqoy0w3KSv+GnVkiQ6SVKU4fV6itr5VG9q
+X0JYXAbKO8hOIP3NO3MVacPgzSIv83B9eLpfi/BlG6q6XKxVf4581lYbLL0F7cKQt1UYPiDsmPJG
++5SEHT6ZOBiLgqQVhAw4Di+6wymUHONBRuH2bH3cjfFlkCCjiFF/cS7Oharro2RFnWQ6beZ3EzCG
+FJILmq/dVMGsBFWme23hLYwtLJSXMYIDqzCCA6cCAQEwgagwgZMxCzAJBgNVBAYTAkdCMRswGQYD
+VQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9E
+TyBDQSBMaW1pdGVkMTkwNwYDVQQDEzBDT01PRE8gQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBT
+ZWN1cmUgRW1haWwgQ0ECEDBT3pfLPhnJHei/ohiMG6UwCQYFKw4DAhoFAKCCAdcwGAYJKoZIhvcN
+AQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTcwMTIwMTA1MTQxWjAjBgkqhkiG9w0B
+CQQxFgQU/AV0Tj17RqaDDCeGXWhe4epgX6gwgbkGCSsGAQQBgjcQBDGBqzCBqDCBkzELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxOTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGlj
+YXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQQIQMFPel8s+Gckd6L+iGIwbpTCBuwYLKoZIhvcNAQkQ
+AgsxgauggagwgZMxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTkwNwYDVQQDEzBDT01P
+RE8gQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEDBT3pfLPhnJHei/
+ohiMG6UwDQYJKoZIhvcNAQEBBQAEggEAEIfTyPoqjyJwrpYmZWRF6OY5ZCFdpw1UUfSXYUU2IdbL
+ph8QkMCc9uv5wk2IeE/9UxxvUR44J67Bu8hv/PCaeyMSh1j2peOlFG487SwyTjf5wIL+GEs8zvHo
+4+Dd2IPhAExt1Bjhmt6O7caF9LVrGQ/wlI6ZGN8MgjSgdrK4F3Ig4LbMuyTTcy3hDTvb+qzaQ4YI
+E+F4tnwhXG8FGEBnlng6nB4iXhoWSvBsjc1qF6eHEHzsOIZeNL7K6Imn7oKHJg+THGwHxC1TZGFt
+G92u6zV7Sc/i4ENH2MNzXT75mp8Gq/k6gpRz9nw8UVuLN/rDIb6esnEgVH9ad3awD154HAAAAAAA
+AA==
+--Apple-Mail=_607FF8D2-30E0-4FC3-86D9-1234567890AB--
+
--- /dev/null
+From test@example.com Wed, 08 Sep 2010 17:51:32 +0200
+From: S/MIME Test <test@example.com>
+To: test@example.com
+Subject: S/MIME signed and encrypted
+Date: Wed, 08 Sep 2010 17:51:32 +0200
+User-Agent: KMail/4.6 pre (Linux/2.6.34-rc2-2-default; KDE/4.5.60; x86_64; ; )
+MIME-Version: 1.0
+Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
+Content-Disposition: attachment; filename="smime.p7m"
+Content-Transfer-Encoding: base64
+
+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
--- /dev/null
+Return-Path: <bugzilla-bounces@lists.kolabsys.com>
+Received: from kolab01.kolabsys.com ([unix socket])
+ by kolab01.kolabsys.com (Cyrus v2.4.17-Kolab-2.4.17-1.el6.kolab_3.0) with LMTPA;
+ Thu, 11 Apr 2013 09:03:01 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from ext-mx01.kolabsys.com (unknown [10.10.20.253])
+ by kolab01.kolabsys.com (Postfix) with ESMTP id 3D8A9C0AE3
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:03:01 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 89D4E10057E
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at example.com
+X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "MIME-Version"
+Received: from ext-mx01.kolabsys.com ([127.0.0.1])
+ by localhost (fw01.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id BJxrh9Yst1Ac
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+Received: from lists.kolabsys.com (static.253.32.46.78.clients.your-server.de [78.46.32.253])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 609821004A7
+ for <shared+shared/lists/kolabsys.com/bugzilla@kolabsys.com>; Thu, 11 Apr 2013 09:02:38 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id BFA6941D4EAD;
+ Thu, 11 Apr 2013 09:03:00 +0200 (CEST)
+X-Virus-Scanned: Debian amavisd-new at lists.kolabsys.com
+X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "MIME-Version"
+Received: from lists.kolabsys.com ([127.0.0.1])
+ by localhost (lists.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id TYU5eAMK5J6T; Thu, 11 Apr 2013 09:02:58 +0200 (CEST)
+Received: from lists.kolabsys.com (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id 182FC41D2A3B;
+ Thu, 11 Apr 2013 09:02:58 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by lists.kolabsys.com (Postfix) with ESMTP id A2B3641D4EC2
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:56 +0200 (CEST)
+X-Virus-Scanned: Debian amavisd-new at lists.kolabsys.com
+Received: from lists.kolabsys.com ([127.0.0.1])
+ by localhost (lists.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id cyO-CNB3vFwu for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:54 +0200 (CEST)
+Received: from ext-mx02.kolabsys.com (ext-mx02.kolabsys.com [94.230.208.222])
+ by lists.kolabsys.com (Postfix) with ESMTP id 1640E41D2A3B
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 09:02:54 +0200 (CEST)
+Received: from localhost (localhost [127.0.0.1])
+ by ext-mx01.kolabsys.com (Postfix) with ESMTP id 58CBC160522
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:44 +0200 (CEST)
+X-Virus-Scanned: amavisd-new at example.com
+Received: from ext-mx02.kolabsys.com ([127.0.0.1])
+ by localhost (fw02.kolabsys.com [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id 4VjnHg6Y6jo7 for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:42 +0200 (CEST)
+Received: from app04.kolabsys.com (unknown [10.10.20.16])
+ by ext-mx02.kolabsys.com (Postfix) with ESMTP id 062DF160521
+ for <bugzilla@lists.kolabsys.com>;
+ Thu, 11 Apr 2013 10:02:42 +0200 (CEST)
+Received: by app04.kolabsys.com (Postfix, from userid 48)
+ id 8E7524048C; Thu, 11 Apr 2013 09:02:51 +0200 (CEST)
+From: Kolab Bugzilla <noreply@kolab.org>
+To: bugzilla@lists.kolabsys.com
+Subject: [Bug 1741] Standard folder name configuration ignored on creating
+ new users
+Date: Thu, 11 Apr 2013 07:02:43 +0000
+X-Bugzilla-Reason: GlobalWatcher
+X-Bugzilla-Type: changed
+X-Bugzilla-Watch-Reason: None
+X-Bugzilla-Product: UCS
+X-Bugzilla-Component: roundcube
+X-Bugzilla-Keywords:
+X-Bugzilla-Severity: normal
+X-Bugzilla-Who: wickert@kolabsys.com
+X-Bugzilla-Status: NEW
+X-Bugzilla-Priority: P3
+X-Bugzilla-Assigned-To: machniak@kolabsys.com
+X-Bugzilla-Target-Milestone: 3.1-next
+X-Bugzilla-Changed-Fields:
+Message-ID: <bug-1741-12-HOSaBe3Z8l@http.issues.kolab.org/>
+In-Reply-To: <bug-1741-12@http.issues.kolab.org/>
+References: <bug-1741-12@http.issues.kolab.org/>
+X-Bugzilla-URL: http://issues.kolab.org/
+Auto-Submitted: auto-generated
+MIME-Version: 1.0
+X-BeenThere: bugzilla@lists.kolabsys.com
+X-Mailman-Version: 2.1.11
+Precedence: list
+Reply-To: server-team@lists.kolabsys.com
+List-Id: All Bugzilla email notifications <bugzilla.lists.kolabsys.com>
+List-Unsubscribe: <https://lists.kolabsys.com/mailman/options/bugzilla>,
+ <mailto:bugzilla-request@lists.kolabsys.com?subject=unsubscribe>
+List-Archive: <http://lists.kolabsys.com/pipermail/bugzilla>
+List-Post: <mailto:bugzilla@lists.kolabsys.com>
+List-Help: <mailto:bugzilla-request@lists.kolabsys.com?subject=help>
+List-Subscribe: <https://lists.kolabsys.com/mailman/listinfo/bugzilla>,
+ <mailto:bugzilla-request@lists.kolabsys.com?subject=subscribe>
+Content-Type: multipart/mixed; boundary="===============1778809852=="
+Mime-version: 1.0
+Sender: bugzilla-bounces@lists.kolabsys.com
+Errors-To: bugzilla-bounces@lists.kolabsys.com
+
+
+--===============1778809852==
+Content-Type: multipart/alternative; boundary="1365663771.ec4d382.10226"; charset="us-ascii"
+
+
+--1365663771.ec4d382.10226
+Date: Thu, 11 Apr 2013 09:02:51 +0200
+MIME-Version: 1.0
+Content-Type: text/plain; charset="UTF-8"
+
+https://issues.kolab.org/show_bug.cgi?id=1741
+
+--- Comment #4 from Christoph Wickert <wickert@kolabsys.com> ---
+You can get everything you need on test93-18.
+
+--
+You are receiving this mail because:
+You are watching all bug changes.
+
+--1365663771.ec4d382.10226
+Date: Thu, 11 Apr 2013 09:02:51 +0200
+MIME-Version: 1.0
+Content-Type: text/html; charset="UTF-8"
+
+<html>
+ <head>
+ <base href="https://issues.kolab.org/" />
+ </head>
+ <body>
+ <b><a class="bz_bug_link
+ bz_status_NEW "
+ title="NEW --- - Standard folder name configuration ignored on creating new users"
+ href="https://issues.kolab.org/show_bug.cgi?id=1741#c4">Comment # 4</a>
+ on <a class="bz_bug_link
+ bz_status_NEW "
+ title="NEW --- - Standard folder name configuration ignored on creating new users"
+ href="https://issues.kolab.org/show_bug.cgi?id=1741">bug 1741</a>
+ from <span class="vcard"><a class="email" href="mailto:wickert@kolabsys.com" title="Christoph Wickert <wickert@kolabsys.com>"> <span class="fn">Christoph Wickert</span></a>
+</span></b>
+ <pre>You can get everything you need on test93-18.</pre>
+ <span>You are receiving this mail because:</span>
+ <ul>
+ <li>You are watching all bug changes.</li>
+ </ul>
+ </body>
+</html>
+
+--1365663771.ec4d382.10226--
+
+--===============1778809852==
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+_______________________________________________
+bugzilla mailing list
+bugzilla@lists.kolabsys.com
+https://lists.kolabsys.com/mailman/listinfo/bugzilla
+
+--===============1778809852==--
+
--- /dev/null
+# SPDX-FileCopyrightText: 2023 g10 Code GmbH
+# SPDX-FileContributor: Carl Schwan <carlschwan@kde.org>
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_definitions(-DMAIL_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../testdata")
+include(${CMAKE_SOURCE_DIR}/cmake/modules/add_gpg_crypto_test.cmake)
+
+ecm_add_test(messageviewerdialogtest.cpp
+ LINK_LIBRARIES KPim6MimeTreeParserWidgets Qt::Test
+ NAME_PREFIX "widgets-"
+)
+
+add_executable(messageviewertest messageviewertest.cpp ../setupenv.cpp)
+add_gpg_crypto_test(messageviewertest widgets-messageviewertest)
+target_link_libraries(messageviewertest PUBLIC
+ Qt::Test
+ KPim6::MimeTreeParserWidgets
+ KPim6::MimeTreeParserCore
+ KF6::WidgetsAddons
+ Gpgmepp
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <MimeTreeParserWidgets/MessageViewerDialog>
+#include <QLayout>
+#include <QTest>
+
+using namespace MimeTreeParser::Widgets;
+
+class MessageViewerDialogTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void messageViewerDialogCreationMultipleTest()
+ {
+ MessageViewerDialog dialog(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("combined.mbox"));
+ QCOMPARE(dialog.messages().count(), 3);
+
+ QCOMPARE(dialog.layout()->count(), 2);
+ QVERIFY(dialog.layout()->itemAt(1)->layout());
+ QCOMPARE(dialog.layout()->itemAt(1)->layout()->count(), 2);
+
+ const auto actions = dialog.layout()->menuBar()->actions();
+ QCOMPARE(actions.count(), 2);
+ }
+
+ void messageViewerDialogCreationTest()
+ {
+ MessageViewerDialog dialog(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("plaintext.mbox"));
+ QCOMPARE(dialog.messages().count(), 1);
+
+ QCOMPARE(dialog.layout()->count(), 2);
+
+ QVERIFY(!dialog.layout()->itemAt(0)->widget()->isVisible());
+
+ QVERIFY(dialog.layout()->itemAt(1)->layout());
+ QCOMPARE(dialog.layout()->itemAt(1)->layout()->count(), 2);
+ }
+};
+
+QTEST_MAIN(MessageViewerDialogTest)
+#include "messageviewerdialogtest.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "../../src/widgets/messagecontainerwidget_p.h"
+#include <KMessageWidget>
+#include <MimeTreeParserCore/FileOpener>
+#include <MimeTreeParserWidgets/MessageViewer>
+#include <QTest>
+#include <QVBoxLayout>
+
+using namespace MimeTreeParser::Widgets;
+
+class MessageViewerTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void messageViewerSMimeEncrypted()
+ {
+ auto messages =
+ MimeTreeParser::Core::FileOpener::openFile(QLatin1StringView(MAIL_DATA_DIR) + QLatin1Char('/') + QLatin1StringView("smime-encrypted.mbox"));
+ QCOMPARE(messages.count(), 1);
+ MessageViewer viewer;
+ viewer.setMessage(messages[0]);
+
+ auto layout = viewer.findChild<QVBoxLayout *>(QStringLiteral("PartLayout"));
+ QVERIFY(layout);
+
+ QCOMPARE(layout->count(), 2);
+ auto container = qobject_cast<MessageWidgetContainer *>(layout->itemAt(0)->widget());
+ QVERIFY(container);
+
+ auto encryptionMessage = container->findChild<KMessageWidget *>(QStringLiteral("EncryptionMessage"));
+ QCOMPARE(encryptionMessage->messageType(), KMessageWidget::Positive);
+ QCOMPARE(encryptionMessage->text(), QStringLiteral("This message is encrypted. <a href=\"messageviewer:showDetails\">Details</a>"));
+
+ encryptionMessage->linkActivated(QStringLiteral("messageviewer:showDetails"));
+
+ QCOMPARE(encryptionMessage->text(),
+ QStringLiteral("This message is encrypted. The message is encrypted for the following recipients:<ul><li>unittest cert - KDAB (<a "
+ "href=\"messageviewer:showCertificate#gpgsm ### SMIME ### 4CC658E3212B49DC\">4CC6 58E3 212B 49DC</a>)</li></ul>"));
+
+ auto signatureMessage = container->findChild<KMessageWidget *>(QStringLiteral("SignatureMessage"));
+ QVERIFY(!signatureMessage);
+ }
+};
+
+QTEST_MAIN(MessageViewerTest)
+#include "messageviewertest.moc"
--- /dev/null
+# SPDX-FileCopyrightText: 2013 Sandro Knauß <mail@sandroknauss.de>
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(GNUPGHOME ${CMAKE_BINARY_DIR}/autotests/gnupg_home)
+add_definitions(-DGNUPGHOME="${GNUPGHOME}")
+
+macro (ADD_GPG_CRYPTO_TEST _target _testname)
+ if (UNIX)
+ if (APPLE)
+ set(_library_path_variable "DYLD_LIBRARY_PATH")
+ elseif (CYGWIN)
+ set(_library_path_variable "PATH")
+ else (APPLE)
+ set(_library_path_variable "LD_LIBRARY_PATH")
+ endif (APPLE)
+
+ if (APPLE)
+ # DYLD_LIBRARY_PATH does not work like LD_LIBRARY_PATH
+ # OSX already has the RPATH in libraries and executables, putting runtime directories in
+ # DYLD_LIBRARY_PATH actually breaks things
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/")
+ else (APPLE)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/:${LIB_INSTALL_DIR}:${QT_LIBRARY_DIR}")
+ endif (APPLE)
+ set(_executable "$<TARGET_FILE:${_target}>")
+
+ # use add_custom_target() to have the sh-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename=${_executable}.shell -D_library_path_variable=${_library_path_variable}
+ -D_ld_library_path="${_ld_library_path}" -D_executable=${_executable}
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/generate_crypto_test_wrapper.cmake
+ )
+
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${_executable}.shell" )
+ add_test(NAME ${_testname} COMMAND ${_executable}.shell)
+
+ else (UNIX)
+ # under windows, set the property WRAPPER_SCRIPT just to the name of the executable
+ # maybe later this will change to a generated batch file (for setting the PATH so that the Qt libs are found)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}\;${LIB_INSTALL_DIR}\;${QT_LIBRARY_DIR}")
+ set(_executable "$<TARGET_FILE:${_target}>")
+
+ # use add_custom_target() to have the batch-file-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename="${_executable}.bat"
+ -D_ld_library_path="${_ld_library_path}" -D_executable="${_executable}"
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/generate_crypto_test_wrapper.cmake
+ )
+
+ add_test(NAME ${_testname} COMMAND ${_executable}.bat)
+
+ endif (UNIX)
+endmacro (ADD_GPG_CRYPTO_TEST)
+
--- /dev/null
+# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
+# Copyright (c) 2013, Sandro Knauß <mail@sandroknauss.de>
+# Copyright (c) 2018, Christian Mollekopf <mollekopf@kolabsys.com>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+
+if (UNIX)
+
+file(WRITE "${_filename}"
+"#!/usr/bin/env sh
+# created by cmake, don't edit, changes will be lost
+
+# don't mess with a gpg-agent already running on the system
+unset GPG_AGENT_INFO
+
+${_library_path_variable}=${_ld_library_path}\${${_library_path_variable}:+:\$${_library_path_variable}} GNUPGHOME=${_gnupghome} gpg-agent --daemon \"${_executable}\" \"$@\"
+_result=$?
+GNUPGHOME=${_gnupghome} gpg-connect-agent killagent /bye
+exit \$_result
+")
+
+# make it executable
+# since this is only executed on UNIX, it is safe to call chmod
+exec_program(chmod ARGS ug+x \"${_filename}\" OUTPUT_VARIABLE _dummy )
+
+else (UNIX)
+
+file(TO_NATIVE_PATH "${_ld_library_path}" win_path)
+file(TO_NATIVE_PATH "${_gnupghome}" win_gnupghome)
+
+file(WRITE "${_filename}"
+"
+set PATH=${win_path};$ENV{PATH}
+set GNUPGHOME=${win_gnupghome};$ENV{GNUPGHOME}
+gpg-agent --daemon \"${_executable}\" %*
+")
+
+endif (UNIX)
--- /dev/null
+# SPDX-FileCopyrightText: 2013 Sandro Knauß <mail@sandroknauss.de>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(GNUPGHOME ${CMAKE_BINARY_DIR}/autotests/gnupg_home)
+add_definitions(-DGNUPGHOME="${GNUPGHOME}")
+
+macro (ADD_GPG_CRYPTO_TEST _target _testname)
+ if (UNIX)
+ if (APPLE)
+ set(_library_path_variable "DYLD_LIBRARY_PATH")
+ elseif (CYGWIN)
+ set(_library_path_variable "PATH")
+ else (APPLE)
+ set(_library_path_variable "LD_LIBRARY_PATH")
+ endif (APPLE)
+
+ if (APPLE)
+ # DYLD_LIBRARY_PATH does not work like LD_LIBRARY_PATH
+ # OSX already has the RPATH in libraries and executables, putting runtime directories in
+ # DYLD_LIBRARY_PATH actually breaks things
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/")
+ else (APPLE)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/:${LIB_INSTALL_DIR}:${QT_LIBRARY_DIR}")
+ endif (APPLE)
+ set(_executable "$<TARGET_FILE:${_target}>")
+
+ # use add_custom_target() to have the sh-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename=${_executable}.shell -D_library_path_variable=${_library_path_variable}
+ -D_ld_library_path="${_ld_library_path}" -D_executable=$<TARGET_FILE:${_target}>
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/kdepim_generate_crypto_test_wrapper.cmake
+ )
+
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${_executable}.shell" )
+ add_test(NAME ${_testname} COMMAND ${_executable}.shell)
+
+ else (UNIX)
+ # under windows, set the property WRAPPER_SCRIPT just to the name of the executable
+ # maybe later this will change to a generated batch file (for setting the PATH so that the Qt libs are found)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}\;${LIB_INSTALL_DIR}\;${QT_LIBRARY_DIR}")
+ set(_executable "$<TARGET_FILE:${_target}>")
+
+ # use add_custom_target() to have the batch-file-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename="${_executable}.bat"
+ -D_ld_library_path="${_ld_library_path}" -D_executable="${_executable}"
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/kdepim_generate_crypto_test_wrapper.cmake
+ )
+
+ add_test(NAME ${_testname} COMMAND ${_executable}.bat)
+
+ endif (UNIX)
+
+ # can't be parallelized due to gpg-agent
+ set_tests_properties(${_testname} PROPERTIES RUN_SERIAL TRUE)
+endmacro (ADD_GPG_CRYPTO_TEST)
+
+macro (ADD_GPG_CRYPTO_AKONADI_TEST _target _testname)
+ set(_executable "$<TARGET_FILE:${_target}>")
+
+ if (UNIX)
+ if (APPLE)
+ set(_library_path_variable "DYLD_LIBRARY_PATH")
+ elseif (CYGWIN)
+ set(_library_path_variable "PATH")
+ else (APPLE)
+ set(_library_path_variable "LD_LIBRARY_PATH")
+ endif (APPLE)
+
+ if (APPLE)
+ # DYLD_LIBRARY_PATH does not work like LD_LIBRARY_PATH
+ # OSX already has the RPATH in libraries and executables, putting runtime directories in
+ # DYLD_LIBRARY_PATH actually breaks things
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/")
+ else (APPLE)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/:${LIB_INSTALL_DIR}:${QT_LIBRARY_DIR}")
+ endif (APPLE)
+
+ set(_posix "shell")
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${_executable}.${_posix}" )
+
+ # use add_custom_target() to have the sh-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename=${_executable}.${_posix} -D_library_path_variable=${_library_path_variable}
+ -D_ld_library_path="${_ld_library_path}" -D_executable="${_executable}"
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/kdepim_generate_crypto_test_wrapper.cmake
+ )
+
+
+ else (UNIX)
+ # under windows, set the property WRAPPER_SCRIPT just to the name of the executable
+ # maybe later this will change to a generated batch file (for setting the PATH so that the Qt libs are found)
+ set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}\;${LIB_INSTALL_DIR}\;${QT_LIBRARY_DIR}")
+ set(_posix "bat")
+
+ # use add_custom_target() to have the batch-file-wrapper generated during build time instead of cmake time
+ add_custom_command(TARGET ${_target} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ -D_filename="${_executable}.${_posix}"
+ -D_ld_library_path="${_ld_library_path}" -D_executable="${_executable}"
+ -D_gnupghome="${GNUPGHOME}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/modules/kdepim_generate_crypto_test_wrapper.cmake
+ )
+
+ endif ()
+
+ if (NOT DEFINED _testrunner)
+ find_program(_testrunner NAMES akonaditest akonaditest.exe)
+ if (NOT _testrunner)
+ message(WARNING "Could not locate akonaditest executable, isolated Akonadi tests will fail!")
+ endif()
+ endif()
+
+ function(_defineTest name backend)
+ set(backends ${ARGN})
+ if (NOT DEFINED AKONADI_RUN_${backend}_ISOLATED_TESTS OR AKONADI_RUN_${backend}_ISOLATED_TESTS)
+ LIST(LENGTH "${backends}" backendsLen)
+ string(TOLOWER ${backend} lcbackend)
+ LIST(FIND "${backends}" ${lcbackend} enableBackend)
+ if (${backendsLen} EQUAL 0 OR ${enableBackend} GREATER -1)
+ set(configFile ${CMAKE_CURRENT_SOURCE_DIR}/unittestenv/config.xml)
+ if (AKONADI_TESTS_XML)
+ set(extraOptions -xml -o "${TEST_RESULT_OUTPUT_PATH}/${lcbackend}-${name}.xml")
+ endif()
+ set(_test_name akonadi-${lcbackend}-${name})
+ add_test(NAME ${_test_name}
+ COMMAND ${_testrunner} -c "${configFile}" -b ${lcbackend}
+ "${_executable}.${_posix}" ${extraOptions}
+ )
+ # Taken from ECMAddTests.cmake
+ if (CMAKE_LIBRARY_OUTPUT_DIRECTORY)
+ if(CMAKE_HOST_SYSTEM MATCHES "Windows")
+ set(PATHSEP ";")
+ else() # e.g. Linux
+ set(PATHSEP ":")
+ endif()
+ set(_plugin_path $ENV{QT_PLUGIN_PATH})
+ set(_test_env
+ QT_PLUGIN_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}${PATHSEP}$ENV{QT_PLUGIN_PATH}
+ LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}${PATHSEP}$ENV{LD_LIBRARY_PATH}
+ )
+ set_tests_properties(${_test_name} PROPERTIES ENVIRONMENT "${_test_env}")
+ endif()
+ set_tests_properties(${_test_name} PROPERTIES RUN_SERIAL TRUE) # can't be parallelized due to gpg-agent
+ endif()
+ endif()
+ endfunction()
+
+ find_program(MYSQLD_EXECUTABLE mysqld /usr/sbin /usr/local/sbin /usr/libexec /usr/local/libexec /opt/mysql/libexec /usr/mysql/bin)
+ if (MYSQLD_EXECUTABLE AND NOT WIN32)
+ _defineTest(${_testname} "MYSQL" ${CONFIG_BACKENDS})
+ endif()
+
+ find_program(POSTGRES_EXECUTABLE postgres)
+ if (POSTGRES_EXECUTABLE AND NOT WIN32)
+ _defineTest(${_testname} "PGSQL" ${CONFIG_BACKENDS})
+ endif()
+
+ _defineTest(${_testname} "SQLITE" ${CONFIG_BACKENDS})
+endmacro (ADD_GPG_CRYPTO_AKONADI_TEST)
--- /dev/null
+# SPDX-FileCopyrightText: 2006 Alexander Neundorf <neundorf@kde.org>
+# SPDX-FileCopyrightText: 2013 Sandro Knauß <mail@sandroknauss.de>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+
+if (UNIX)
+
+file(WRITE "${_filename}"
+"#!/bin/sh
+# created by cmake, don't edit, changes will be lost
+
+# don't mess with a gpg-agent already running on the system
+unset GPG_AGENT_INFO
+
+# _gnupghome will contain a socket, and the path to that has a length limit of 108 chars
+# which that is easily reached. Therefore shorten this by copying this to a temporary dir.
+# This has the convenient side-effect that modifications to the content are not propagated
+# to other tests.
+tmp_dir=`mktemp -d -t messagelib-test-gnupg-home.XXXXXXXX` || exit 1
+cp -rf ${_gnupghome}/* $tmp_dir
+
+${_library_path_variable}=${_ld_library_path}\${${_library_path_variable}:+:\$${_library_path_variable}} GNUPGHOME=$tmp_dir \"${_executable}\" \"$@\"
+_result=$?
+
+_pid=`echo GETINFO pid | GNUPGHOME=$tmp_dir gpg-connect-agent | grep 'D' | cut -d' ' -f2`
+if [ ! -z \"\$_pid\" ]; then
+ echo KILLAGENT | GNUPGHOME=$tmp_dir gpg-connect-agent > /dev/null
+ sleep .3
+ if ps -p \"\$_pid\" > /dev/null; then
+ echo \"Waiting for gpg-agent to terminate (PID: $_pid)...\"
+ while kill -0 \"\$_pid\"; do
+ sleep 1
+ done
+ fi
+fi
+rm -rf $tmp_dir
+exit \$_result
+")
+
+# make it executable
+# since this is only executed on UNIX, it is safe to call chmod
+exec_program(chmod ARGS ug+x \"${_filename}\" OUTPUT_VARIABLE _dummy )
+
+else (UNIX)
+
+file(TO_NATIVE_PATH "${_ld_library_path}" win_path)
+file(TO_NATIVE_PATH "${_gnupghome}" win_gnupghome)
+
+file(WRITE "${_filename}"
+"
+set PATH=${win_path};$ENV{PATH}
+set GNUPGHOME=${win_gnupghome};$ENV{GNUPGHOME}
+gpg-agent --daemon \"${_executable}\" %*
+")
+
+endif (UNIX)
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(Qt6Quick_FOUND)
+ add_subdirectory(qml)
+endif()
+
+if(Qt6Widgets_FOUND)
+ add_subdirectory(widgets)
+endif()
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+find_package(Qt6Qml ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+find_package(Qt6Quick ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+find_package(KPim6Mbox ${KPIM_MBOX_VERSION} CONFIG REQUIRED)
+
+add_executable(mimetreeparser-qml
+ main.cpp
+ messagehandler.cpp
+ messagehandler.h
+ resources.qrc
+)
+
+target_link_libraries(mimetreeparser-qml PUBLIC
+ Qt::Quick
+ Qt::Widgets
+ Qt::Qml
+ Qt::Gui
+ KF6::I18n
+ KPim6::MimeTreeParserCore
+ KPim6::Mbox
+ Gpgmepp
+)
+if(TARGET KF6::I18nQml)
+target_link_libraries(mimetreeparser-qml PUBLIC
+ KF6::I18nQml
+)
+endif()
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Dialogs 6.2
+import org.kde.kirigami 2.20 as Kirigami
+import org.kde.pim.mimetreeparser 1.0
+import org.kde.mimetreeparser 1.0
+
+Kirigami.ApplicationWindow {
+ id: root
+
+ readonly property Kirigami.Action openFileAction: Kirigami.Action {
+ text: i18n("Open File")
+ shortcut: "Ctrl+O"
+ onTriggered: fileDialog.open()
+ }
+
+ FileDialog {
+ id: fileDialog
+ title: i18n("Choose file")
+ onAccepted: messageHandler.open(selectedFile)
+ }
+
+ MessageHandler {
+ id: messageHandler
+ objectName: "MessageHandler"
+ onMessageOpened: message => {
+ pageStack.currentItem.message = message
+ }
+ }
+
+ pageStack.initialPage: MailViewer {
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <KLocalizedContext>
+#include <KLocalizedString>
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QDebug>
+#include <QDir>
+#include <QQmlApplicationEngine>
+#include <QQmlContext>
+#include <QQuickWindow>
+
+#include "messagehandler.h"
+#include <KLocalizedContext>
+#include <MimeTreeParserCore/FileOpener>
+#include <MimeTreeParserCore/MessageParser>
+#if KI18N_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+#include <KLocalizedQmlContext>
+#endif
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QCommandLineParser parser;
+ parser.setApplicationDescription(i18n("View mbox file"));
+ parser.addPositionalArgument(QStringLiteral("file"), i18n("mbox file"));
+
+ QQmlApplicationEngine engine;
+#if KI18N_VERSION < QT_VERSION_CHECK(6, 8, 0)
+ engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
+#else
+ engine.rootContext()->setContextObject(new KLocalizedQmlContext(&engine));
+#endif
+ QObject::connect(&engine, &QQmlApplicationEngine::quit, &app, &QCoreApplication::quit);
+
+ constexpr auto uri = "org.kde.mimetreeparser";
+
+ qmlRegisterType<MessageParser>(uri, 1, 0, "MessageParser");
+ qmlRegisterType<MessageHandler>(uri, 1, 0, "MessageHandler");
+
+ engine.load(QUrl(QStringLiteral("qrc:/content/main.qml")));
+ const auto rootObjects = engine.rootObjects();
+ if (rootObjects.isEmpty()) {
+ qWarning() << "Impossible to load main.qml. Please verify installation";
+ return -1;
+ }
+ parser.process(app);
+
+ const QStringList args = parser.positionalArguments();
+ if (!args.isEmpty()) {
+ for (auto obj : rootObjects) {
+ auto view = qobject_cast<QQuickWindow *>(obj);
+ auto messageHandler = view->findChild<MessageHandler *>(QStringLiteral("MessageHandler"));
+ const auto file = QUrl::fromUserInput(args.at(args.count() - 1), QDir::currentPath());
+ messageHandler->open(file);
+ }
+ }
+
+ return QCoreApplication::exec();
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "messagehandler.h"
+#include <MimeTreeParserCore/FileOpener>
+
+using namespace MimeTreeParser::Core;
+
+void MessageHandler::open(const QUrl &file)
+{
+ const auto messages = FileOpener::openFile(file.toLocalFile());
+ if (!messages.isEmpty()) {
+ Q_EMIT messageOpened(messages[0]);
+ }
+}
+
+#include "moc_messagehandler.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <KMime/Message>
+#include <QObject>
+#include <QUrl>
+
+class MessageHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ Q_INVOKABLE void open(const QUrl &file);
+
+Q_SIGNALS:
+ void messageOpened(KMime::Message::Ptr message);
+};
--- /dev/null
+<RCC>
+<!--
+SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
+SPDX-License-Identifier: GPL-2.0-or-later
+-->
+ <qresource prefix="/">
+ <file>content/main.qml</file>
+ </qresource>
+</RCC>
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_executable(mimetreeparser-widgets
+ main.cpp
+)
+
+find_package(KPim6Mbox ${KPIM_MBOX_VERSION} CONFIG REQUIRED)
+
+target_link_libraries(mimetreeparser-widgets PUBLIC
+ Qt::Widgets
+ KPim6::MimeTreeParserWidgets
+ KPim6::Mbox
+ KF6::I18n
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include <KLocalizedString>
+#include <MimeTreeParserWidgets/MessageViewer>
+#include <MimeTreeParserWidgets/MessageViewerDialog>
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QDir>
+#include <QUrl>
+
+#ifdef Q_OS_WIN
+#include <cstdio>
+#include <windows.h>
+#endif
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ KLocalizedString::setApplicationDomain(QByteArrayLiteral("mimetreeparser"));
+#ifdef Q_OS_WIN
+ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
+ freopen("CONOUT$", "w", stdout);
+ freopen("CONOUT$", "w", stderr);
+ }
+#endif
+
+ QCommandLineParser parser;
+ parser.setApplicationDescription(i18n("View mbox file"));
+ parser.addPositionalArgument(QStringLiteral("file"), i18n("mbox file"));
+
+ parser.process(app);
+ const QStringList args = parser.positionalArguments();
+
+ const auto file = QUrl::fromUserInput(args.at(args.count() - 1), QDir::currentPath());
+ const auto messageViewer = new MimeTreeParser::Widgets::MessageViewerDialog(file.toLocalFile(), nullptr);
+
+ messageViewer->show();
+ messageViewer->setAttribute(Qt::WA_DeleteOnClose);
+ return app.exec();
+}
--- /dev/null
+// This file is part of the KDE project
+// SPDX-FileCopyrightText: 2015-2023 Laurent Montel <montel@kde.org>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+#define MIMETREEPARSERNG_VERSION "@MIMETREEPARSERNG_LIB_VERSION@"
+
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2024 Zayed Al-Saidi <zayed.alsaidi@gmail.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-10-10 13:53+0400\n"
+"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
+"Language-Team: ar\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "الاسم"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "الحجم"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "مشفّر"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "مُوقّع"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "فشلت في حفظ تحميل المرفق."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "المرفق"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "فشل في كتابة المرفق للفتح"
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "فشلت في فتح تحميل المرفق."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "لا يوجد شهادات في المرفقات"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "شهادة واحدة مستوردة"
+msgstr[1] "شهادة واحدة مستوردة"
+msgstr[2] "شهادتين مستوردتين"
+msgstr[3] "%1 شهادات مستوردة"
+msgstr[4] "%1 شهادة مستوردة"
+msgstr[5] "%1 شهادة مستوردة"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "لم تُستورد أيّة شهادة"
+msgstr[1] "استوردتُ شهادة واحدة حتى الآن"
+msgstr[2] "استوردتُ شهادتين حتى الآن"
+msgstr[3] "استوردتُ %1 شهادات واحدة حتى الآن"
+msgstr[4] "استوردتُ %1 شهادة حتى الآن"
+msgstr[5] "استوردتُ %1 شهادة حتى الآن"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "مجهول"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr "، "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "ملحقة التّعمية خاطئة."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "لم يُعثر على ملحقة تعمية مناسبة."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "لا تستطيع ملحقة التّعمية ”%1“ فكّ تعمية الرّسائل."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "تعذّر على ملحقة التّعمية ”%1“ فكّ تعمية الرّسائل."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "الخطأ: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "فشلت في فكّ تعمية هذه الرّسالة."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "الرسالة مشفرة للمستلم التالي:"
+msgstr[1] "الرسالة مشفرة للمستلم التالي:"
+msgstr[2] "الرسالة مشفرة للمستلمين التاليين:"
+msgstr[3] "الرسالة مشفرة للمستلمين التاليين:"
+msgstr[4] "الرسالة مشفرة للمستلمين التاليين:"
+msgstr[5] "الرسالة مشفرة للمستلمين التاليين:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "عبارة مرور خاطئة"
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "تعذّر بدء مدير الشّهادات. رجاءً افحص تثبيتك."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "مفتاح مجهول"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "عارض الرّسائل"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "الموضوع:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "من:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "المرسل:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "إلى:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "نك:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "نكع:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "احفظ المرفق"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "احفظ المرفق ك"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "استورد الشَّهادة"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "أغلق"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "حدث خطأ: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "هذا البريد يحوي دعوة"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "أرسلها %1 في %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "هذه الرسالة مشفرة، لكن ليس لديك مفتاح سري مطابق."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "هذه الرّسالة معمّاة لـ: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr "هذه الرسالة معماة وفقًا لمعيار VS-NfD ولكن ليس لديك مفتاح سري مطابق."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "هذه الرسالة معماة وفقًا لمعيار VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "هذه الرّسالة معمّاة."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "الرسالة مشفرة للمستلمين التاليين:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "ا&حفظ المرفق ك…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "افتح"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "استورد مفتاح عام"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "غير مسمًّى"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "احفظ المرفق ك"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "الدعوة"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "الملخّ&ص:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "المن&ظّم:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "الم&كان:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "تاريخ الب&دء:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "تاريخ الا&نتهاء:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "ال&تفاصيل:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "بريد مغلّفة"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "من:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "التاريخ:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "المو&ضوع:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&من:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "المر&سل:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "إل&ى:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&نك:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "ن&كع:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "ال&تاريخ:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&ملف"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "ا&حفظ"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "احفظ الملف المفكك"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "معاينة الطّباعة"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&اطبع"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&تنقّل"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "الرّسالة السّابقة"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "الرّسالة التّالية"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "ملفات البريد الإلكتروني (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "ملفات S/MIME المشفرة (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "احفظ الملفّ"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "تعذّر إنشاء الملف %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "خطأ في حفظ الرّسالة"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "حفظ الملف المفكك"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "تعذّر إنشاء الملف %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "اطبع"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "معاينة الطّباعة"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "تعذّر قراءة الملفّ"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023 Enol P. <enolp@softastur.org>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2023-11-07 21:27+0100\n"
+"Last-Translator: Enol P. <enolp@softastur.org>\n"
+"Language-Team: \n"
+"Language: ast\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 23.08.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr ""
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr ""
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr ""
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr ""
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr ""
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ""
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr ""
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr ""
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr ""
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr ""
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr ""
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr ""
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr ""
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr ""
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr ""
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr ""
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr ""
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr ""
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr ""
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr ""
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr ""
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr ""
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr ""
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr ""
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr ""
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr ""
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr ""
+
+#, fuzzy
+#~| msgid "KMail Error"
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Error de KMail"
--- /dev/null
+# Translation of mimetreeparser6.po to Catalan
+# Copyright (C) 2023-2024 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Josep M. Ferrer <txemaq@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 12:53+0200\n"
+"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nom"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Mida"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Encriptat"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signat"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Ha fallat en desar l'adjunt."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "adjunt"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Ha fallat en escriure l'adjunt per a obrir-lo."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Ha fallat en obrir l'adjunt."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "No s'ha trobat cap certificat en aquest adjunt"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "s'ha importat un certificat"
+msgstr[1] "s'han importat %1 certificats"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "ja s'havia importat un certificat"
+msgstr[1] "ja s'havien importat %1 certificats"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Connector criptogràfic erroni."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "No s'ha trobat cap connector criptogràfic apropiat."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "El connector criptogràfic «%1» no pot desencriptar missatges."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "El connector criptogràfic «%1» no pot desencriptar les dades."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Error: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "No es pot desencriptar aquest missatge."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "El missatge està encriptat per al destinatari següent:"
+msgstr[1] "El missatge està encriptat per als destinataris següents:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Frase de pas incorrecta."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"No s'ha pogut iniciar el gestor de certificats. Comproveu aquesta "
+"instal·lació."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Clau desconeguda"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visualitzador de missatges"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Assumpte:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Remitent:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "A:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Desa l'adjunt"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Desa l'adjunt com a"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importa certificat"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Tanca"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "S'ha produït un error: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Aquest correu conté una invitació"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "enviat per %1 a %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Aquest missatge està encriptat, però no teniu cap clau secreta que "
+"coincideixi."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Aquest missatge està encriptat amb: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Aquest missatge està encriptat conforme amb VS-NfD, però no teniu cap clau "
+"secreta que coincideixi."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Aquest missatge està encriptat conforme amb VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Aquest missatge està encriptat."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "El missatge està encriptat per als destinataris següents:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "De&sa l'adjunt com a…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Obre"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importa la clau pública"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sense nom"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Desa l'adjunt com a"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitació"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resum:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organitzador:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Emplaçament:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data d'&inici:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Data &final:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalls:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Correu electrònic encapsulat"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "A&ssumpte:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Remitent:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&A:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Fitxer"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "De&sa"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Desa desencriptat"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Vista prèvia d'impressió"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Im&primeix"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navegació"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Missatge anterior"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Missatge següent"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Fitxers de correu electrònic (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Fitxers S/MIME encriptats (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Desa el fitxer"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "No s'ha pogut crear el fitxer %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Error en desar el missatge"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Desament de fitxer desencriptat"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "No s'ha pogut crear el fitxer %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Impressió"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vista prèvia d'impressió"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "No s'ha pogut llegir el fitxer"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Aquest missatge s'ha signat amb el certificat %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Els detalls del certificat no són disponibles."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Aquest missatge l'ha signat %1 amb el certificat %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "El certificat està revocat."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "El certificat ha caducat."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "El certificat està certificat."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La signatura no és vàlida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Aquest missatge s'ha signat conforme amb VS-NfD utilitzant el certificat "
+#~ "<a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Aquest missatge s'ha signat emprant el certificat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Aquest missatge s'ha signat conforme amb VS-NfD per %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Aquest missatge s'ha signat per %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "S'ha revocat el <a href=\"%1\">certificat</a>."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "El <a href=\"%1\">certificat</a> està caducat."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La signatura és vàlida, però no es coneix la validesa del <a href="
+#~ "\"%1\">certificat</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida, però el <a href=\"%1\">certificat</a> és de "
+#~ "confiança parcial."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida i el <a href=\"%1\">certificat</a> és de plena "
+#~ "confiança."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida i el <a href=\"%1\">certificat</a> és de confiança "
+#~ "absoluta."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La signatura és vàlida, però el <a href=\"%1\">certificat</a> no està "
+#~ "certficat."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Error del KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Aquest missatge no es pot desencriptar amb cap certificat S/MIME del "
+#~ "vostre anell de claus."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Aquest missatge no es pot desencriptar amb cap certificat OpenPGP del "
+#~ "vostre anell de claus."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "El missatge està encriptat per al certificat següent:"
+#~ msgstr[1] "El missatge està encriptat per als certificats següents:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Aquest missatge s'ha signat emprant el certificat %1 de %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Esteu confiant en aquest certificat."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Aquest missatge està encriptat per al certificat: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "El missatge està encriptat per als certificats següents:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Impressió del document"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "De&sa l'adjunt com a..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Fitxers de correu electrònic (*eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importa la clau"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "No s'ha trobat cap clau secreta per a desencriptar el missatge."
--- /dev/null
+# Translation of mimetreeparser6.po to Catalan (Valencian)
+# Copyright (C) 2023-2024 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Josep M. Ferrer <txemaq@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 12:53+0200\n"
+"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca@valencia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nom"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Mida"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Encriptat"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signat"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "No s'ha pogut guardar l'adjunt."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "adjunt"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "No s'ha pogut escriure l'adjunt per a obrir-lo."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "No s'ha pogut obrir l'adjunt."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "No s'ha trobat cap certificat en este adjunt"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "s'ha importat un certificat"
+msgstr[1] "s'han importat %1 certificats"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "ja s'havia importat un certificat"
+msgstr[1] "ja s'havien importat %1 certificats"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Connector criptogràfic erroni."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "No s'ha trobat cap connector criptogràfic apropiat."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "El connector criptogràfic «%1» no pot desencriptar missatges."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "El connector criptogràfic «%1» no pot desencriptar les dades."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "S'ha produït un error: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "No es pot desencriptar este missatge."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "El missatge està encriptat per al destinatari següent:"
+msgstr[1] "El missatge està encriptat per als destinataris següents:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Frase de pas incorrecta."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"No s'ha pogut iniciar el gestor de certificats. Comproveu esta instal·lació."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Clau desconeguda"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visor de missatges"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Assumpte:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Remitent:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "A:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Guarda l'adjunt"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Anomeneu i guardeu l'adjunt"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importa certificats"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Tanca"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "S'ha produït un error: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Este correu conté una invitació"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "enviat per %1 a %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Este missatge està encriptat, però no teniu cap clau secreta que coincidisca."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Este missatge està encriptat amb: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Este missatge està encriptat conforme amb VS-NfD, però no teniu cap clau "
+"secreta que coincidisca."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Este missatge està encriptat conforme amb VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Este missatge està encriptat."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "El missatge està encriptat per als destinataris següents:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Anomena i &guarda l'adjunt…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Obri"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importa la clau pública"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sense nom"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Anomeneu i guardeu l'adjunt"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitació"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resum:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organitzador:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Emplaçament:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data d'&inici:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Data &final:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalls:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Correu electrònic encapsulat"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "A&ssumpte:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Remitent:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&A:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "Fi&txer"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "Guar&da"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Guarda desencriptat"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Vista prèvia d'impressió"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Im&primix"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navegueu"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Missatge anterior"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Missatge següent"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Fitxers de correu electrònic (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Fitxers S/MIME encriptats (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Guarda el fitxer"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "No s'ha pogut crear el fitxer %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "S'ha produït un error en guardar el missatge"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Guardeu un fitxer desencriptat"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "No s'ha pogut crear el fitxer %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprimix"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vista prèvia d'impressió"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "No s'ha pogut llegir el fitxer"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Este missatge s'ha signat amb el certificat %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Els detalls del certificat no estan disponibles."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Este missatge l'ha signat %1 amb el certificat %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "El certificat està revocat."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "El certificat ha caducat."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "El certificat està certificat."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La signatura no és vàlida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Este missatge s'ha signat conforme amb VS-NfD utilitzant el certificat <a "
+#~ "href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Este missatge s'ha signat emprant el certificat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Este missatge s'ha signat conforme amb VS-NfD per %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Este missatge s'ha signat per %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "S'ha revocat el <a href=\"%1\">certificat</a>."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "El <a href=\"%1\">certificat</a> està caducat."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La signatura és vàlida, però no es coneix la validesa del <a href="
+#~ "\"%1\">certificat</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida, però el <a href=\"%1\">certificat</a> és de "
+#~ "confiança parcial."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida i el <a href=\"%1\">certificat</a> és de plena "
+#~ "confiança."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La signatura és vàlida i el <a href=\"%1\">certificat</a> és de confiança "
+#~ "absoluta."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La signatura és vàlida, però el <a href=\"%1\">certificat</a> no està "
+#~ "certficat."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "S'ha produït un error de KMail"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2023, 2024 Vit Pelcak <vit@pelcak.org>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-07-18 10:55+0200\n"
+"Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
+"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "4Název"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Velikost"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Zašifrováno"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Podepsáno"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Přílohu nelze uložit."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "příloha"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Přílohu nelze načíst."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "V této příloze nebyly nalezeny žádné certifikáty"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "jeden certifikát byl importován"
+msgstr[1] "%1 certifikáty byly importovány"
+msgstr[2] "%1 certifikátů bylo importováno"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "jeden certifikát byl již importován"
+msgstr[1] "%1 certifikáty byly již importovány"
+msgstr[2] "%1 certifikátů bylo již importováno"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Neznámý"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Chybný modul šifrování."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nebyl nalezen vhodný zásuvný modul šifrování."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Zásuvný modul šifrování \"%1\" nemůže dešifrovat zprávy."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Zásuvný modul šifrování \"%1\" nemůže dešifrovat data."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Chyba: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Tuto zprávu nemůžete dešifrovat."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Zpráva je šifrována pro následujícího příjemce:"
+msgstr[1] "Zpráva je šifrována pro následující příjemce:"
+msgstr[2] "Zpráva je šifrována pro následující příjemce:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Špatné heslo."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Nelze spustit správce certifikátů. Prosím zkontrolujte svoji instalaci."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Neznámý klíč"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Prohlížeč zpráv"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Předmět:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Od:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Odesílatel:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Komu:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kopie: "
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Skrytá kopie:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Uložit přílohu"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Uložit přílohu jako"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importovat certifikát"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zavřít"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Vyskytla se chyba: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Tato zpráva obsahuje pozvánku"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Zpráva je šifrována ale nemáme pro ni odpovídající klíč."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Tato zpráva je šifrovaná pro: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Tato zpráva je šifrovaná podle VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Tato zpráva je šifrovaná."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Zpráva je šifrována pro následující příjemce:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Uložit přílohu jako…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Otevřít"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importovat veřejný klíč"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "nepojmenováno"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Uložit přílohu jako"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Pozvánka"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Shrnutí:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizátor:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Umístění:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Datum zahá&jení:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Datum ukonč&ení:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Po&drobnosti:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Zapouzdřená zpráva"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Od:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Před&mět:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Od:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Ode&sílatel:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Komu:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "Kop&ie: "
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "Skr&ytá kopie:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Datum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Soubor"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Uložit"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Uložit dešifrované"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Náhled před tiskem"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Vy&tisknout"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigace"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Předchozí zpráva"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Následující zpráva"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Soubory pošty (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Šifrované soubory S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Uložit soubor"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Soubor %1 nelze vytvořit."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Chyba při ukládání zprávy"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Uložit dešifrovaný soubor"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Soubor %1 nelze vytvořit."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Tisk"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Náhled před tiskem"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Soubor nelze přečíst"
--- /dev/null
+# German translations for mimetreeparser package.
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# Frederik Schwarzer <schwarzer@kde.org>, 2023.
+# Eva Bolten <eva.bolten@gnupg.com>, 2023, 2024.
+#
+# Automatically generated, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser6\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-16 13:58+0200\n"
+"Last-Translator: Eva Bolten <eva.bolten@gnupg.com>\n"
+"Language-Team: kde-i18n-de@kde.org\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 22.12.3\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Name"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Größe"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Verschlüsselt"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signiert"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Der Anhang konnte nicht gespeichert werden."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "Anhang"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Der Anhang konnte nicht gespeichert werden, um ihn zu öffnen."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Der Anhang konnte nicht geöffnet werden."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "In diesem Anhang wurden keine Zertifikate gefunden"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "Ein Zertifikat wurde importiert"
+msgstr[1] "%1 Zertifikate wurden importiert"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "Ein Zertifikat war bereits importiert"
+msgstr[1] "%1 Zertifikate waren bereits importiert"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Falsches Kryptografie-Modul."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Es wurde kein passendes Kryptografie-Modul gefunden."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Kryptografie-Modul \"%1\" kann keine Nachrichten entschlüsseln."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Kryptografie-Modul \"%1\" konnte die Daten nicht entschlüsseln."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Fehler: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Sie können diese Nachricht nicht entschlüsseln."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Diese Nachricht ist für den folgenden Empfänger verschlüsselt:"
+msgstr[1] "Diese Nachricht ist für die folgenden Empfänger verschlüsselt:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Falsches Passwort."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Der Zertifikatsmanager konnte nicht gestartet werden. Bitte überprüfen Sie "
+"ihre Installation."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Unbekannter Schlüssel"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Nachrichtenanzeige"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Betreff:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Von:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Absender:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "An:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Anhang speichern"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Anhang speichern unter"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Zertifikat importieren"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Schließen"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Es ist ein Fehler aufgetreten: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Diese E-Mail enthält eine Einladung"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "Gesendet von %1 am %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Diese Nachricht ist verschlüsselt, aber Ihnen fehlt ein passender geheimer "
+"Schlüssel."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Diese Nachricht ist für %1 verschlüsselt."
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Diese Nachricht ist VS-NfD konform verschlüsselt, aber Ihnen fehlt ein "
+"passender geheimer Schlüssel."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Diese Nachricht ist VS-NfD konform verschlüsselt."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Diese Nachricht ist verschlüsselt."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Diese Nachricht ist für die folgenden Empfänger verschlüsselt:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Anhang speichern unter …"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Öffnen"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Öffentlichen Schlüssel importieren"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "unbenannt"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Anhang speichern unter"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Einladung"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "Zusammenfassung:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "Organisator:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "Ort:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Anfangsdatum:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Enddatum:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Details:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Eingebettete E-Mail"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Von:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Betreff:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "Von:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Absender:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "An:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "Datei"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "Speichern"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Unverschlüsselt abspeichern"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Preview drucken"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Drucken"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "Navigation"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Vorige Nachricht"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Nächste Nachricht"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-Mail Dateien (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Verschlüsselte S/MIME Dateien (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Datei speichern"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Datei %1 konnte nicht erstellt werden."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Fehler beim Abspeichern der Datei"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Entschlüsselte Datei abspeichern"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Datei %1 konnte nicht erstellt werden."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Drucken"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vorschau drucken"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Datei nicht lesbar"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Diese Nachricht wurde mit dem Zertifikat %1 signiert."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Es sind keine Details für das Zertifikat verfügbar."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Diese Nachricht wurde von %1 mit dem Zertifikat %2 signiert."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Das Zertifikat wurde widerrufen."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Das Zertifikat ist abgelaufen."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Das Zertifikat ist beglaubigt."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Die Signatur ist ungültig."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Diese Nachricht wurde mit dem Zertifikat <a href=\"%1\">%2</a> VS-NfD "
+#~ "konform signiert."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Diese Nachricht wurde mit dem Zertifikat <a href=\"%1\">%2</a> signiert."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Diese Nachricht wurde von %1 VS-NfD konform signiert."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Diese Nachricht wurde von %1 signiert."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Das <a href=\"%1\">Zertifikat</a> wurde widerrufen."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Das <a href=\"%1\">Zertifikat</a> ist abgelaufen."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Die Signatur ist gültig, aber das <a href=\"%1\">Zertifikat</a> ist nicht "
+#~ "beglaubigt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Die Signatur ist gültig, aber das <a href=\"%1\">Zertifikat</a> ist nicht "
+#~ "ausreichend beglaubigt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Die Signatur ist gültig und das <a href=\"%1\">Zertifikats</a> ist "
+#~ "beglaubigt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Die Signatur ist gültig und das <a href=\"%1\">Zertifikats</a> ist "
+#~ "beglaubigt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Die Signatur ist gültig, aber das <a href=\"%1\">Zertifikat</a> ist nicht "
+#~ "beglaubigt."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail Fehler"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Diese Nachricht kann mit keinem S/MIME-Zertifikat in Ihrem Schlüsselbund "
+#~ "entschlüsselt werden."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Diese Nachricht kann mit keinem OpenPGP-Schlüssel in Ihrem Schlüsselbund "
+#~ "entschlüsselt werden."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Diese Nachricht ist für den folgenden Schlüssel verschlüsselt:"
+#~ msgstr[1] "Diese Nachricht ist für die folgenden Schlüssel verschlüsselt:"
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1 by %2."
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Diese Nachricht wurde mit dem Schlüssel %1 von %2 signiert."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "You are trusting this key."
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Sie vertrauen diesem Schlüssel."
+
+#, fuzzy
+#~| msgid "This message is encrypted to the key: %1"
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Diese Nachricht ist für den Schlüssel %1 verschlüsselt."
+
+#, fuzzy
+#~| msgctxt "@info:status"
+#~| msgid "The message is encrypted for the following certificate:"
+#~| msgid_plural "The message is encrypted for the following certificates:"
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Diese Nachricht ist für den folgenden Schlüssel verschlüsselt:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Datei drucken"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Anhang &speichern unter..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "E-Mail Dateien (*.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Schlüssel importieren"
+
+#, fuzzy
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Diese Nachricht ist für die folgendem Schlüssel verschlüsselt:"
+
+#~ msgid "Unknown key"
+#~ msgstr "Unbekannter Schlüssel"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Kein Schlüssel verfügbar."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Temporäre Datei konnte nicht erstellt werden."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Anhang auf Datenträger gespeichert: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr ""
+#~ "Die Daten können nicht entschlüsselt werden: Kein Schlüssel für Empfänger "
+#~ "gefunden."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Steve Allewell <steve.allewell@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-03 12:42+0100\n"
+"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
+"Language-Team: British English\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Name"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Size"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Encrypted"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signed"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Failed to save attachment."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "attachment"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Failed to write attachment for opening."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Failed to open attachment."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "No certificates were found in this attachment"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "one certificate imported"
+msgstr[1] "%1 certificates imported"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "one certificate was already imported"
+msgstr[1] "%1 certificates were already imported"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Unknown"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Wrong Crypto Plug-In."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "No appropriate crypto plug-in was found."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Crypto plug-in \"%1\" cannot decrypt messages."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Crypto plug-in \"%1\" could not decrypt the data."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Error: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "You cannot decrypt this message."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "The message is encrypted for the following recipient:"
+msgstr[1] "The message is encrypted for the following recipients:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Wrong passphrase."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Could not start certificate manager. Please check your installation."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Unknown Key"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Message viewer"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Subject:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "From:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Sender:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "To:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Save attachment"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Save Attachment As"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Import certificate"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Close"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "An error occurred: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "This mail contains an invitation"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "sent by %1 on %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "This message is encrypted but you don't have a matching secret key."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "This message is encrypted for: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "This message is VS-NfD compliant encrypted."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "This message is encrypted."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "The message is encrypted for the following recipients:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Save Attachment As…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Open"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Import public key"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "unnamed"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Save Attachment As"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitation"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Summary:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organiser:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Location:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Start date:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&End date:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Details:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Encapsulated email"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "From:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Date:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Subject:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&From:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Sender:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&To:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Date:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&File"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Save"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Save Decrypted"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Print Preview"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Print"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigation"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Previous Message"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Next Message"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Email files (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Encrypted S/MIME files (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Save File"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "File %1 could not be created."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Error saving message"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Save Decrypted File"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "File %1 could not be created."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Print"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Print Preview"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Unable to read file"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "This message was signed with certificate %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "The certificate details are not available."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "This message was signed by %1 with certificate %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "The certificate was revoked."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "The certificate has expired."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "The certificate is certified."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "The signature is invalid."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "This message has been signed VS-NfD compliant by %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "This message has been signed by %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "The <a href=\"%1\">certificate</a> was revoked."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "The <a href=\"%1\">certificate</a> is expired."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail Error"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "This message has been signed using the certificate %1 by %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "You are trusting this certificate."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "This message is encrypted to the certificate: %1"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Print Document"
--- /dev/null
+# translation of mimetreeparser.pot to esperanto
+# Copyright (C) 2023 Free Software Foundation, Inc.
+# This file is distributed under the same license as the mimetreeparser package.
+# Oliver Kellogg <olivermkellogg@gmail.com, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 22:29+0200\n"
+"Last-Translator: Oliver Kellogg <olivermkellogg@gmail.com>\n"
+"Language-Team: Esperanto <kde-i18n-eo@kde.org>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: translate-po (https://github.com/zcribe/translate-po)\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nomo"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Grandeco"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Ĉifrita"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Subskribita"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Malsukcesis konservi aldonaĵon."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "kunsendaĵo"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Malsukcesis skribi kunsendaĵon por malfermado."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Malsukcesis malfermi aldonaĵon."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Neniuj atestiloj estis trovitaj en ĉi tiu aldonaĵo"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "unu atestilo importita"
+msgstr[1] "%1 atestiloj importitaj"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "unu atestilo estis jam importita"
+msgstr[1] "%1 atestiloj estis jam importitaj"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Nekonata"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Malĝusta Kripta Kromaĵo."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Neniu taŭga kripta kromprogramo estis trovita."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Kripta kromprogramo \"%1\" ne povas deĉifri mesaĝojn."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Kripta kromprogramo \"%1\" ne povis deĉifri la datumojn."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Eraro: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Vi ne povas malĉifri ĉi mesaĝon."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "La mesaĝo estas ĉifrita por la sekva ricevanto:"
+msgstr[1] "La mesaĝo estas ĉifrita por la sekvaj ricevantoj:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Erara pasfrazo."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Ne eblis startigi atestilmastrumanton. Bonvolu kontroli vian instalon."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Nekonata Ŝlosilo"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Mesaĝrigardilo"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Temo:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Sendanto:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Al:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Konservi aldonaĵon"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Konservi Aldonaĵon Kiel"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importi atestilon"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Fermi"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Eraro okazis: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Ĉi tiu poŝto enhavas inviton"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "sendita de %1 sur %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Ĉi tiu mesaĝo estas ĉifrita sed vi ne havas la kongruan sekretan ŝlosilon."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Ĉi tiu mesaĝo estas ĉifrita por: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Ĉi tiu mesaĝo estas ĉifrita laŭ VS-NfD, sed vi ne havas kongruan atestilon "
+"por ĝi."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Ĉi tiu mesaĝo estas ĉifrita konforme al VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Ĉi tiu mesaĝo estas ĉifrita."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "La mesaĝo estas ĉifrita por la sekvaj ricevantoj:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Kon&servi Aldonaĵon Kiel…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Malfermi"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importi publikan ŝlosilon"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sennoma"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Konservi Aldonaĵon Kiel"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invito"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resumo:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizinto:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Loko:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Komenca dato:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Findato:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detaloj:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Enkapsuligita retpoŝto"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Dato:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Temo:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Sendanto:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Al:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Dato:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Dosiero"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "Kon&servi"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Konservi Malĉifrite"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Presi Antaŭrigardon"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Presi"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigado"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Antaŭa Mesaĝo"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Sekvanta Mesaĝo"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Retpoŝtaj dosieroj (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Ĉifritaj S/MIME-dosieroj (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Konservi Dosieron"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Dosiero %1 ne povis esti kreita."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Eraro konservante mesaĝon"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Konservi Malĉifritan Dosieron"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Dosiero %1 ne povis esti kreita."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Presi"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Presa Antaŭrigardo"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Neebla legi dosieron"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Ĉi tiu mesaĝo estis subskribita per atestilo %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "La atestilaj detaloj ne estas disponeblaj."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Ĉi tiu mesaĝo estis subskribita de %1 per atestilo %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "La atestilo estis revokita."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "La atestilo eksvalidiĝis."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "La atestilo estas atestita."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La subskribo estas nevalida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ĉi tiu mesaĝo estis subskribita konforma al VS-NfD uzante la atestilon <a "
+#~ "href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ĉi tiu mesaĝo estis subskribita per la atestilo <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Ĉi tiu mesaĝo estis subskribita VS-NfD konforma de %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Ĉi tiu mesaĝo estis subskribita de %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "La <a href=\"%1\">atestilo</a> estis revokita."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "La <a href=\"%1\">atestilo</a> eksvalidiĝis."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La subskribo validas, sed la valideco de la <a href=\"%1\">atestilo</a> "
+#~ "estas nekonata."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La subskribo validas kaj la <a href=\"%1\">atestilo</a> estas marĝene "
+#~ "fidinda."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La subskribo validas kaj la <a href=\"%1\">atestilo</a> estas plene "
+#~ "fidinda."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La subskribo validas kaj la <a href=\"%1\">atestilo</a> estas finfine "
+#~ "fidinda."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La subskribo validas, sed la <a href=\"%1\">atestilo</a> estas neatestita."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail-Eraro"
--- /dev/null
+# Spanish translations for mimetreeparser.po package.
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# Automatically generated, 2023.
+# SPDX-FileCopyrightText: 2023, 2024 Eloy Cuadra <ecuadra@eloihr.net>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 17:45+0200\n"
+"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
+"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nombre"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Tamaño"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Cifrado"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Firmado"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "No se ha podido guardar el adjunto."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "adjunto"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "No se ha podido escribir el adjunto para su apertura."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "No se ha podido abrir el adjunto."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "No se ha encontrado ningún certificado en este adjunto"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "1 certificado importado"
+msgstr[1] "%1 certificados importados"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "1 certificado ya estaba importado"
+msgstr[1] "%1 certificados ya estaban importados"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Desconocida"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Complemento criptográfico erróneo."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "No se ha encontrado ningún complemento criptográfico adecuado."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "El complemento criptográfico «%1» no puede descifrar mensajes."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "El complemento criptográfico «%1» no ha podido descifrar los datos."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Error: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "No puede descifrar este mensaje."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "El mensaje está cifrado para el siguiente destinatario:"
+msgstr[1] "El mensaje está cifrado para los siguientes destinatarios:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Contraseña larga errónea."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"No se ha podido iniciar el gestor de certificados. Compruebe su instalación."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Clave desconocida"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visor de mensaje"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Remitente:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Para:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Cc:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Cco:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Guardar adjunto"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Guardar adjunto como"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importara certificado"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Cerrar"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Ha ocurrido un error: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Este mensaje contiene una invitación"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "enviado por %1 el %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Este mensaje está cifrado, pero no se dispone de una clave secreta "
+"coincidente."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Este mensaje está cifrado para: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Este mensaje está cifrado de conformidad con VS-NfD, pero no se dispone de "
+"una clave secreta coincidente."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Este mensaje está cifrado de conformidad con VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Este mensaje está cifrado."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "El mensaje está cifrado para los siguientes destinatarios:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Guardar adjunto como..."
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Abrir"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importar clave pública"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sin nombre"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Guardar adjunto como"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitación"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resumen:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizador:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Ubicación:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Fecha de &inicio:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Fecha final:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalles:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Mensaje encapsulado"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Fecha:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "A&sunto:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Remitente:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Para:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Cc:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "Cc&o:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Fecha:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Archivo"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Guardar"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Guardar sin cifrar"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Imprimir vista previa"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Imprimir"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navegación"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Mensaje anterior"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Mensaje siguiente"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Archivos de correo electrónico (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Archivos cifrados S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Guardar archivo"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "No se puede crear el archivo %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Error al guardar mensaje"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Guardar archivo sin cifrar"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "No se ha podido crear el archivo %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprimir"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vista previa de la impresión"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "No se ha podido leer el archivo"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Este mensaje ha sido firmado con el certificado %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Los detalles del certificado no están disponibles."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Este mensaje ha sido firmado por %1 con el certificado %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "El certificado ha sido revocado."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "El certificado ha expirado."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "El certificado está certificado."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La firma no es válida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Este mensaje ha sido firmado de conformidad con VS-NfD usando el "
+#~ "certificado <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Este mensaje ha sido firmado usando el certificado <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Este mensaje ha sido firmado de conformidad con VS-NfD por %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Este mensaje ha sido firmado por %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "El <a href=\"%1\">certificado</a> ha sido revocado."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "El <a href=\"%1\">certificado</a> ha expirado."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La firma es válida, pero se desconoce la validez del <a href="
+#~ "\"%1\">certificado</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La firma es válida y el <a href=\"%1\">certificado</a> es de mínima "
+#~ "confianza."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La firma es válida y el <a href=\"%1\">certificado</a> es de total "
+#~ "confianza."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La firma es válida y el <a href=\"%1\">certificado</a> es definitivamente "
+#~ "de confianza."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La firma es válida, pero el <a href=\"%1\">certificado</a> no está "
+#~ "certificado."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Error de KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Este mensaje no se puede descifrar con ningún certificado S/MIME de su "
+#~ "anillo de claves."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Este mensaje no se puede descifrar con ningún certificado OpenPGP de su "
+#~ "anillo de claves."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "El mensaje está cifrado para el siguiente certificado:"
+#~ msgstr[1] "El mensaje está cifrado para los siguientes certificados:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Este mensaje ha sido firmado usando el certificado %1 por %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Este certificado es de su confianza."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Este mensaje está cifrado para el certificado: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "El mensaje está cifrado para los siguientes certificados:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Imprimir documento"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Guardar adjunto como..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Archivos de correo electrónico (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importar clave"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr ""
+#~ "No se ha encontrado ninguna clave secreta para descifrar el mensaje."
+
+#~ msgid "Unknown key"
+#~ msgstr "Clave desconocida"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "No hay ninguna clave disponible."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Ha fallado la creación del archivo temporal."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Adjunto guardado en disco: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
--- /dev/null
+# Translation for mimetreeparser.po to Euskara/Basque (eu).
+# Copyright (C) 2023-2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2023, 2024 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
+#
+# Translators:
+# SPDX-FileCopyrightText: 2023, 2024 Iñigo Salvador Azurmendi <xalba@ni.eus>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-03 11:29+0200\n"
+"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
+"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Izena"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Neurria"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Zifratuta"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Sinatuta"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Eranskina gordetzea huts egin du."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "eranskina"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Eranskina irekitzeko idaztea huts egin du."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Eranskina irekitzea huts egin du."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Eranskin honetan ez da ziurtagiririk aurkitu"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "ziurtagiri bat inportatu da"
+msgstr[1] "%1 ziurtagiri inportatu dira"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "ziurtagiri bat jada inportatuta zegoen"
+msgstr[1] "%1 ziurtagiri jada inportatuta zeuden"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Kriptografia-plugin okerra."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Ez da kriptografia-plugin egokirik aurkitu."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "\"%1\" kriptografia-pluginak ezin ditu mezuak deszifratu."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "\"%1\" kriptografia-pluginak ezin du daturik deszifratu."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Errorea: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Ezin duzu mezu hau deszifratu."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Mezua ondoko gakorako zifratuta dago:"
+msgstr[1] "Mezua ondoko gakoetarako zifratuta dago:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Pasaesaldi okerra."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Ezin izan du ziurtagiri-kudeatzailea abiatu. Mesedez, ikuskatu zure "
+"instalazioa."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Gako ezezaguna"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Mezu-erakuslea"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Gaia:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Nork:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Bidaltzailea:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Nori:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Gorde eranskina"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Gorde eranskina honela"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Inportatu ziurtagiria"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Itxi"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Errore bat gertatu da: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Posta honek gonbidapen bat du"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "%1(e)k %2(e)an bidalia"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Mezu hau zifratuta dago baina ez duzu dagokion gako sekretua."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Mezu hau honetarako zifratuta dago: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Mezu hau «VS-NfD»rekiko manakor zifratuta dago baina ez duzu dagokion gako "
+"sekretua."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Mezu hau «VS-NfD»rekiko manakor zifratuta dago."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Mezu hau zifratuta dago."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Mezua ondoko gakoetarako zifratuta dago:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Gorde eranskina honela..."
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Ireki"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Inportatu gako publikoa"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "izengabea"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Gorde eranskina honela"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Gonbidapena"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Laburpena:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Antolatzailea:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Kokalekua:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Hasiera-data:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Amaiera-data:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Xehetasunak:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Kapsulatutako e-posta"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Nork:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Gaia:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Nork:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Bidaltzailea:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "Nor&i:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Fitxategia"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Gorde"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Gorde deszifratuta"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Inprimatzeko aurrebista"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "In&primatu"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Nabigatzea"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Aurreko mezua"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Hurrengo mezua"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-posta fitxategiak (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Zifratutako S/MIME fitxategiak (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Gorde fitxategia"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Ezin izan du %1 fitxategi sortu."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Errorea mezua gordetzean"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Gorde deszifratutako fitxategia"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Ezin izan da %1 fitxategi sortu."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Inprimatu"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Inprimatze aurreikuspegia"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Ezin izan du fitxategia irakurri"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Mezua hau %1 ziurtagiria erabiliz sinatu da."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Ziurtagiriaren xehetasuna ez daude erabilgarri."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Mezua hau %1(e)k sinatu du %2 ziurtagiria erabiliz."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Ziurtagiria indargabetuta dago."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Ziurtagiria iraungita dago."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Ziurtagiria ziurtatuta dago."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Sinadura baliogabea da."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Mezu hau «VS-NfD»rekiko manakor sinatu da ondoko gakoa erabiliz <a href="
+#~ "\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Mezua hau <a href=\"%1\">%2</a> ziurtagiria erabiliz sinatu da."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Mezu hau %1(e)k «VS-NfD»rekiko manakor sinatuta dago."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Mezua hau %1(e)k sinatu du ."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Ziurtagiria</a> indargabetuta dago."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Ziurtagiria</a> iraungita dago."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Sinadura baliozkoa da, baina <a href=\"%1\">ziurtagiria</a>ren "
+#~ "baliozkotasuna ezezaguna da."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Sinadura baliozkoa da eta <a href=\"%1\">ziurtagiria</a>k bazterreko "
+#~ "konfiantza du."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Sinadura baliozkoa da eta <a href=\"%1\">ziurtagiri</a>k konfiantza osoa "
+#~ "du."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Sinadura baliozkoa da, eta <a href=\"%1\">ziurtagiri</a>k erabateko "
+#~ "konfiantza du."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Sinadura baliozkoa da, baina <a href=\"%1\">ziurtagiria</a>k ez du "
+#~ "konfiantzarik."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "«KMail»en errorea"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Mezu hori ezin da zure gako-sortako S/MIME ziurtagiriekin deszifratu."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Mezu hori ezin da zure gako-sortako OpenPGP ziurtagiriekin deszifratu."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Mezua ondoko ziurtagirirako zifratuta dago:"
+#~ msgstr[1] "Mezua ondoko ziurtagirietarako zifratuta dago:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Mezua hau %2(e)k sinatu du %1 ziurtagiria erabiliz."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Gako honetan konfiantza duzu."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Mezu hau ondoko ziurtagirirako zifratuta dago: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Mezua ondoko ziurtagirirako zifratuta dago:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Inprimatu dokumentua"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Gorde eranskina honela..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "E-posta fitxategiak (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Inportatu gakoa"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Ez da aurkitu mezua deszifratzeko gako sekreturik."
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Ez dago gako erabilgarririk."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Aldi baterako fitxategia sortzea huts egin du."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2023, 2024 Tommi Nieminen <translator@legisign.org>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-10-17 11:02+0300\n"
+"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
+"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nimi"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Koko"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Salattu"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Allekirjoitettu"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Liitettä ei voitu tallentaa."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "liite"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Liitettä ei voitu kirjoittaa avattavaksi."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Liitettä ei voitu avata."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Liitteestä ei löytynyt varmenteita"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "tuotiin yksi varmenne"
+msgstr[1] "tuotiin %1 varmennetta"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "yksi varmenne oli jo tuotu"
+msgstr[1] "%1 varmennetta oli jo tuotu"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Väärä salauslaajennus."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Sopivaa salausliitännäistä ei löytynyt."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Salausliitännäinen ”%1” ei osaa purkaa viestien salausta."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Salausliitännäinen ”%1” ei voinut purkaa tiedon salausta."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Virhe: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Tämän viestin salausta ei voida purkaa."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Viesti on salattu seuraavalle vastaanottajalle:"
+msgstr[1] "Viesti on salattu seuraaville vastaanottajille:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Väärä salasana."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Varmennehallintaa ei voitu käynnistää. Tarkista asennus."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Tuntematon avain"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " – "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Viestikatselin"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Aihe:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Lähettäjä:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Lähettäjä:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Vastaanottaja:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kopio:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Piilokopio:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Tallenna liite"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Tallenna liite nimellä"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Tuo varmenne"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Sulje"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Sattui virhe: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Tämä viesti sisältää kutsun"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "lähettänyt %1 %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Viesti on salattu, mutta sitä vastaava salainen avain puuttuu."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Viesti on salattu: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Viesti on VS-NfD-yhteensopivasti salattu, mutta sitä vastaava salainen avain "
+"puuttuu."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Viesti on VS-NfD-yhteensopivasti salattu."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Viesti on salattu."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Viesti on salattu seuraaville vastaanottajille:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Tallenna &liite nimellä…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Avaa"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Tuo julkinen avain"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "nimetön"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Tallenna liite nimellä"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Kutsu"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Yhteenveto:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Järjestäjä:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Sijainti:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Aloituspäivä:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Päättymispäivä:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Tie&dot:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Kapseloitu viesti"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Lähettäjä:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Päiväys:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Ai&he:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Lähettäjä:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Lähettäjä:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Vastaanottaja:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Kopio:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Piilokopio:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Päiväys:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Tiedosto"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Tallenna"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Tallenna purettu"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Tulostusesikatselu"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "T&ulosta"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "Navi&gointi"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Edellinen viesti"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Seuraava viesti"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Sähköpostitiedostot (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Salatut S/MIME-tiedostot (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Tallenna tiedosto"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Tiedostoa %1 ei voitu luoda."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Virhe tallennettaessa viestiä"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Tallenna purettu viesti"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Tiedostoa %1 ei voitu luoda."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Tulosta"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Tulostusesikatselu"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Tiedostoa ei voi lukea"
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Viesti on allekirjoitettu varmenteella %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Varmenteen tiedot eivät ole saatavilla."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Viesti on allekirjoitettu varmenteella %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate was revoked."
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Varmenne on peruttu."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate has expired."
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Varmenne on vanhentunut."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate has expired."
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Varmenne on vanhentunut."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The signature is invalid."
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Allekirjoitus on virheellinen."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "This message has been signed VS-NfD compliant using the certificate <a "
+#~| "href=\"%1\">%2</a>."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Viesti on allekirjoitettu VS-NfD-yhteensopivasti varmenteella <a href="
+#~ "\"%1\">%2</a>."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Viesti on allekirjoitettu varmenteella <a href=\"%1\">%2</a>."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Viesti on VS-NfD-yhteensopivasti allekirjoittanut %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed by %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Viestin on allekirjoittanut %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Varmenne</a> on peruttu."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The <a href=\"%1\">certificate</a> was expired."
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Varmenne</a> on vanhentunut."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid, but the <a href=\"%1\">certificate</a>'s "
+#~| "validity is unknown."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Allekirjoitus on kelvollinen mutta <a href=\"%1\">varmenteen</a> "
+#~ "kelvollisuutta ei tunneta."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~| "marginally trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Allekirjoitus on kelvollinen, ja <a href=\"%1\">varmenteeseen</a> "
+#~ "luotetaan ehdollisesti."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~| "trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Allekirjoitus on kelvollinen, ja <a href=\"%1\">varmenteeseen</a> "
+#~ "luotetaan täysin."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~| "ultimately trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Allekirjoitus on kelvollinen, ja <a href=\"%1\">varmenteeseen</a> "
+#~ "luotetaan ehdottomasti."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid, but the <a href=\"%1\">certificate</a> is "
+#~| "untrusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Allekirjoitus on kelvollinen, mutta <a href=\"%1\">varmenne</a> ei ole "
+#~ "luotettava."
+
+#, fuzzy
+#~| msgid "KMail Error"
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail-virhe"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Viestin salausta ei voi purkaa avainrenkaasi millään S/MIME-varmenteella."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Viestin salausta ei voi purkaa avainrenkaasi millään OpenPGP-varmenteella."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Viesti on salattu seuraavalle avaimelle:"
+#~ msgstr[1] "Viesti on salattu seuraaville avaimille:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Viesti on allekirjoitettu käyttäjän %2 varmenteella %1."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Luotat tähän varmenteeseen."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Viesti on salattu varmenteella: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Viesti on salattu seuraaville varmenteille:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Tulosta tiedosto"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Tallenna &liite nimellä…"
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Sähköpostitiedostot (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Tuo avain"
+
+#, fuzzy
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Viesti on salattu seuraaville avaimille:"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Avainta ei ole saatavilla."
--- /dev/null
+# SPDX-FileCopyrightText: 2023, 2024 Xavier Besnard <xavier.besnard@kde.org>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-03 11:04+0200\n"
+"Last-Translator: Xavier Besnard <xavier.besnard@kde.org>\n"
+"Language-Team: French <French <kde-francophone@kde.org>>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nom"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Taille"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Chiffré"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signé"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Impossible d'enregistrer une pièce jointe."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "pièce jointe"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Impossible d'enregistrer une pièce jointe pour ouverture."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Impossible d'ouvrir une pièce jointe."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Aucun certificat n'a été trouvé dans cette pièce jointe."
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "Un certificat a été importé."
+msgstr[1] "%1 certificats ont été importés."
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "Un certificat a déjà été importé."
+msgstr[1] "%1 certificats ont déjà été importés."
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Module additionnel de chiffrement incorrect."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Aucun module additionnel de chiffrement approprié n'a été trouvé."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr ""
+"Il est impossible au module additionnel de chiffrement « %1 » de déchiffrer "
+"les messages."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr ""
+"Il est impossible au module additionnel de chiffrement « %1 » de déchiffrer "
+"les données."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Erreur : %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Il vous est impossible de chiffrer ce message."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Le message est chiffré pour les destinataires suivants :"
+msgstr[1] "Le message est chiffré avec les destinataires suivants :"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Phrase de passe erronée."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Impossible de démarrer le gestionnaire de certificats. Veuillez vérifier "
+"votre installation."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Clé inconnue"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Afficheur de messages"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Objet :"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De :"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Émetteur : "
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "À :"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC :"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC :"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Enregistrer une pièce jointe"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Enregistrer une pièce jointe comme"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importer un certificat"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Fermer"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Une erreur s'est produite : %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Ce courriel contient une invitation."
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "envoyé par %1 vers %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Ce message est chiffré mais vous ne possédez pas la clé secrète "
+"correspondante."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Ce message est chiffré pour : %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Ce message a été chiffré conformément au mode « VS-NFD » mais vous ne "
+"possédez pas la secrète correspondante."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Ce message est chiffré selon le mode « VS-NFD »."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Ce message est chiffré."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Le message est chiffré pour les destinataires suivants :"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Enregi&strer une pièce jointe comme..."
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Ouvrir"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importer une clé publique"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "non nommé"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Enregistrer une pièce jointe comme"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitation"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Résumé :"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organisateur :"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Emplacement :"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Date de début :"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Date de fin :"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Détails :"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Courriel encapsulé"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De :"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Date :"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Objet :"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De :"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "É&metteur : "
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&À :"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC :"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC :"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Date :"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Fichier"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "Enregi&strer"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Enregistrer la version déchiffrée"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Aperçu avant impression"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Im&primer"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigation"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Message précédent"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Message suivant"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Fichiers de courriels (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Fichiers chiffrés « S / MIME » (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Enregistrer un fichier"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Il a été impossible de créer le fichier %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Message d'erreur d'enregistrement"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Enregistrer le fichier déchiffré"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Il a été impossible de créer le fichier %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprimer"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Aperçu avant impression"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Impossible de lire le fichier"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Ce message a été signé avec le certificat %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Les détails des certificats sont indisponibles."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Ce message a été signé par %1 avec le certificat %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Le certificat a été révoqué."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "La certificat a expiré."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "La certificat a certifié."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La signature est non valable."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ce message a été chiffré conformément au mode « VS-NFD » en utilisant le "
+#~ "certificat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ce message a été signé en utilisant le certificat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Ce message a été chiffré conformément au mode « VS-NFD » par %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Ce message a été signé par %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Le <a href=\"%1\">certificat</a> a été révoqué."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Le <a href=\"%1\">certificat</a> a expiré."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La signature est valable mais la validité du <a href=\"%1\">certificat</"
+#~ "a> est indéterminée."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La signature est valable et le <a href=\"%1\">certificat</a> est "
+#~ "moyennement fiable."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La signature est valable et le <a href=\"%1\">certificat</a> est "
+#~ "totalement fiable."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La signature est valable et le <a href=\"%1\">certificat</a> est "
+#~ "totalement fiable."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La signature est valable mais le <a href=\"%1\">certificat</a> est non "
+#~ "certifié."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Erreur de KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Il est impossible de déchiffrer ce message avec un certificat « S / "
+#~ "MIME » de votre trousseau de clés."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Il est impossible de déchiffrer ce message avec un quelconque certificat "
+#~ "« OpenPGP » de votre trousseau de clés."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Le message est chiffré avec le certificat suivant :"
+#~ msgstr[1] "Le message est chiffré avec les certificats suivants :"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Ce message a été signé en utilisant le certificat %1 parmi %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Vous faites confiance à ce certificat."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Ce message est chiffré avec le certificat : %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Le message est chiffré avec les certificats suivants :"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Imprimer un document"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Enregistrer une pièce jointe comme..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Fichiers de courriels (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importer une clé"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr ""
+#~ "Il a été impossible de trouver une clé secrète pour déchiffrer le message."
+
+#~ msgid "Unknown key"
+#~ msgstr "Clé inconnue"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Aucune clé disponible."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Impossible de créer un fichier temporaire"
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "A enregistré la pièce jointe sur disque : %1"
+
+#~ msgid "fwd"
+#~ msgstr "trsf"
+
+#~ msgid "re"
+#~ msgstr "re"
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Adrián Chaves (Gallaecio)
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-03 12:19+0200\n"
+"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
+"Language-Team: Proxecto Trasno (proxecto@trasno.gal)\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nome"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Tamaño"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Cifrado"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Asinado"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Non foi posíbel gardar o anexo."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "anexo"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Non foi posíbel escribir o anexo para abrilo."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Non foi posíbel abrir o anexo."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Non se atoparon certificados no anexo."
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "importouse un certificado"
+msgstr[1] "importáronse %1 certificados"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "xa se importara un certificado"
+msgstr[1] "xa se importaran %1 certificados"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "O complemento de cifrado é incorrecto."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Non se atopou ningún complemento de cifrado axeitado."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "O complemento de cifrado «%1» non pode descifrar mensaxes."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "O complemento de cifrado «%1» non puido descifrar os datos."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Erro: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Non pode descifrar esta mensaxe."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "A mensaxe está cifrada para a seguinte persoa destinataria:"
+msgstr[1] "A mensaxe está cifrada para as seguintes persoas destinatarias:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "A frase de paso é incorrecta."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Non foi posíbel iniciar o xestor de certificados. Comprobe a instalación."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Chave descoñecida"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " — "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visor de mensaxes"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Remitente:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Para:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Copia:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Copia agochada:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Gardar o anexo"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Gardar o ficheiro anexo como"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importar o certificado"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Pechar"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Produciuse un erro: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Esta mensaxe contén unha invitación."
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "enviada por %1 o %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "A mensaxe está cifrada pero non ten a chave secreta correspondente."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "A mensaxe está cifrada para: %1."
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"A mensaxe está cifrada en cumprimento de VS-NfD pero non ten a chave secreta "
+"correspondente."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "A mensaxe está cifrada en cumprimento de VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "A mensaxe está cifrada."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "A mensaxe está cifrada para as seguintes persoas destinatarias:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Gardar o ficheiro anexo como…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Abrir"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importar a chave pública"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sen nome"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Gardar o ficheiro anexo como"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitación"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resumo:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizador:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Localización:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data de &inicio:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Data de remate:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalles:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Mensaxe encapsulada"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "A&sunto:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Remitente:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Para:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Copia:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "Copia &agochada:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Ficheiro"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Gardar"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Gardar descifrado"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Vista de impresión"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Im&primir"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navegación"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Mensaxe anterior"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Seguinte mensaxe"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Ficheiros de mensaxe de correo electrónico (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Ficheiros S/MIME cifrados (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Gardar o ficheiro"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Non foi posíbel crear o ficheiro %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Produciuse un erro ao gravar a mensaxe"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Gardar o ficheiro descifrado"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Non foi posíbel crear o ficheiro %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprimir"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vista de impresión"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Non é posíbel ler o ficheiro."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "A mensaxe asinouse co certificado %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Os detalles do certificado non están dispoñíbeis."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Esta mensaxe asinouna %1 co certificado %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Revogouse o certificado."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "O certificado caducou."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "O certificado está certificado."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "A sinatura é incorrecta."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Esta mensaxe asinouse en cumprimento de VS-NfD co certificado <a href="
+#~ "\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Esta mensaxe asinouse co certificado <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "%1 asinou a mensaxe en cumprimento de VS-NfD."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "%1 asinou a mensaxe."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Revogouse o <a href=\"%1\">certificado</a>."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "O certificado <a href=\"%1\">caducou</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "A sinatura é correcta pero descoñécese a validez do <a href="
+#~ "\"%1\">certificado</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "A sinatura é correcta e o <a href=\"%1\">certificado</a> é de confianza "
+#~ "marxinal."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "A sinatura é correcta e a confianza no <a href=\"%1\">certificado</a> é "
+#~ "completa."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "A sinatura é correcta e a confianza no <a href=\"%1\">certificado</a> é "
+#~ "completa."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "A sinatura é correcta, pero o <a href=\"%1\">certificado</a> non está "
+#~ "certificado."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Erro de KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Esta mensaxe non pode descifrarse con ningún certificado S/MIME do "
+#~ "chaveiro."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Esta mensaxe non pode descifrarse con ningún certificado OpenPGP do "
+#~ "chaveiro."
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Esta mensaxe asinouna %2 co certificado %1."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Confía neste certificado."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "A mensaxe está cifrada para o certificado: %1"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Imprimir o documento"
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Yaron Shahrabani <sh.yaron@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 07:50+0300\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: צוות התרגום של KDE ישראל\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
+"n % 10 == 0) ? 2 : 3));\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "שם"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "גודל"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "מוצפן"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "חתום"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "שמירת הקובץ המצורף נכשלה."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "קובץ מצורף"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "כתיבת קובץ מצורף לפתיחה נכשלה."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "פתיחת הקובץ המצורף נכשלה."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "לא נמצאו אישורים בקובץ המצורף הזה"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "אישור יובא"
+msgstr[1] "שני אישורים יובאו"
+msgstr[2] "%1 אישורים יובאו"
+msgstr[3] "%1 אישורים יובאו"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "אישור כבר יובא"
+msgstr[1] "שני אישורים כבר יובאו"
+msgstr[2] "%1 אישורים כבר יובאו"
+msgstr[3] "%1 אישורים כבר יובאו"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "תוסף הצפנה שגוי."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "לא נמצא תוסף הצפנה מתאים."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "תוסף ההצפנה „%1” לא יכול לפענח הודעות."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "תוסף ההצפנה „%1” לא יכול לפענח את הנתונים."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "שגיאה: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "אי אפשר לפענח את ההודעה הזאת."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "ההודעה מוצפנת לנמען הבא:"
+msgstr[1] "ההודעה מוצפנת לנמענים הבאים:"
+msgstr[2] "ההודעה מוצפנת לנמענים הבאים:"
+msgstr[3] "ההודעה מוצפנת לנמענים הבאים:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "מילת צופן שגויה."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "לא ניתן להפעיל את מנהל האישורים. נא לבדוק שההתקנה שלך תקינה."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "מפתח לא ידוע"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "מציג הודעות"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "נושא:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "מאת:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "מוען:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "אל:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "עותק:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "עותק סמוי:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "שמירת קובץ מצורף"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "שמירת הקובץ המצורף בשם"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "ייבוא אישור"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "סגירה"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "אירעה שגיאה: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "ההודעה הזאת מכילה הזמנה"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "נשלח על ידי %1 ב־%2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "ההודעה מוצפנת אבל אין לך מפתח סודי תואם."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "ההודעה מוצפנת עבור: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr "ההודעה הזאת מוצפנת בתאימות מול VS-NfD אך אין לנו מפתח סודי תואם."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "ההודעה הזאת מוצפנת בתאימות מול VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "ההודעה מצפנת."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "ההודעה מוצפנת לנמענים הבאים:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "שמירת הקובץ המ&צורף בשם…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "פתיחה"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "ייבוא מפתח ציבורי"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "ללא שם"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "שמירת הקובץ המצורף בשם"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "הזמנה"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&תקציר:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&ארגון:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "מ&קום:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&תאריך התחלה:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "תאריך &סיום:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&פרטים:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "הודעת דוא״ל מכומסת"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "מאת:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "תאריך:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&נושא:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "מ&את:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "מו&ען:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&אל:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&עותק:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "עותק &סמוי:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&תאריך:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&קובץ"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&שמירה"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "שמירה מפוענח"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "הצגה מקדימה להדפסה"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "ה&דפסה"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&ניווט"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "ההודעה הקודמת"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "ההודעה הבאה"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "קובצי דוא״ל (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "קובצי S/MIME מוצפנים (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "שמירת קובץ"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "לא ניתן ליצור את הקובץ %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "שגיאה בשמירת הודעה"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "שמירת קובץ מפוענח"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "לא ניתן ליצור את הקובץ %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "הדפסה"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "הצגה מקדימה להדפסה"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "לא ניתן לקרוא את הקובץ"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "ההודעה נחתמה עם האישור %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "פרטי האישור לא זמינים."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "ההודעה נחתמה על ידי %1 עם האישור %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "האישור הזה נשלל."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "תוקף האישור הזה פג."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "האישור הזה מוסמך."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "החתימה שגויה."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "ההודעה הזאת נחתמה עם תאימות ל־VS-NfD באמצעות האישור <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "ההודעה הזאת נחתמה באמצעות האישור <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "ההודעה נחתמה לפי תקן VS-NfD על ידי %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "ההודעה נחתמה על ידי %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "ה<a href=\"%1\">אישור</a> נשלל."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "תוקף ה<a href=\"%1\">אישור</a> פג."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr "החתימה תקפה, אבל התוקף של ה<a href=\"%1\">אישור</a> לא ידוע."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr "החתימה תקפה וה<a href=\"%1\">אישור</a> אמין באופן גבולי."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "החתימה תקפה וה<a href=\"%1\">אישור</a> אמין לחלוטין."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr "החתימה תקפה וה<a href=\"%1\">אישור</a> אמין באופן מוחלט."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "החתימה תקפה, אך ה<a href=\"%1\">אישור</a> מפוקפק."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "שגיאה של KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "אי אפשר לפענח את ההודעה הזאת עם אף אחד מאישורי ה־S/MIME שבצרור המפתחות "
+#~ "שלך."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "אי אפשר לפענח את ההודעה הזאת עם אף אחד מאישורי ה־OpenPGP שבצרור המפתחות "
+#~ "שלך."
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "ההודעה הזאת נחתמה באמצעות האישור %1 מאת %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "האישור הזה אמין מבחינתך."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "ההודעה הזאת מוצפנת לאישור: %1"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "הדפסת מסמך"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "שמירת הקובץ המ&צורף בשם..."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Kristof Kiszel <ulysses@fsf.hu>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-09-16 21:38+0200\n"
+"Last-Translator: Kristof Kiszel <ulysses@fsf.hu>\n"
+"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 24.08.0\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Név"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Méret"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Titkosított"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Aláírt"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Nem sikerült menteni a mellékletet."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "melléklet"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Nem sikerült írni a mellékletet megnyitáshoz."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Nem sikerült megnyitni a mellékletet."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Nem találhatók tanúsítványok ebben a mellékletben"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "egy tanúsítvány importálva"
+msgstr[1] "%1 tanúsítvány importálva"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "egy tanúsítványt már importáltak"
+msgstr[1] "%1 tanúsítványt már importáltak"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Hibás titkosítási bővítmény."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nem található megfelelő titkosítási bővítmény."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "A(z) „%1” titkosítási bővítmény nem tudja visszafejteni az üzeneteket."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "A(z) „%1” titkosítási bővítmény nem tudta visszafejteni az adatokat."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Hiba: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Ezt az üzenetet nem lehet visszafejteni."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Az üzenetet a következő címzettnek titkosították:"
+msgstr[1] "Az üzenetet a következő címzetteknek titkosították:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Hibás jelszó."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Nem sikerült elindítani a tanúsítványkezelőt. Kérjük, ellenőrizze a "
+"telepítését."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Ismeretlen kulcs."
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Üzenetmegjelenítő"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Tárgy:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Feladó:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Küldő:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Címzett:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Másolat:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Titkos másolat:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Melléklet mentése"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Melléklet mentése másként"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Tanúsítvány importálása"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Bezárás"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Hiba történt: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "A levél meghívót tartalmaz"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "%1 küldte ekkor: %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Az üzenetet titkosították, de nincs hozzá a titkos kulcsa."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Az üzenetet %1 számára titkosították."
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Az üzenetet a VS-NfD-nek megfelelően titkosították, de nincs hozzá titkos "
+"kulcsa."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Az üzenetet a VS-NfD-nek megfelelően titkosították."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Az üzenetet titkosították."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Az üzenetet a következő címzetteknek titkosították:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Melléklet mentése másként…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Megnyitás"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Nyilvános kulcs importálása"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "névtelen"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Melléklet mentése másként"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Meghívó"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "Ö&sszegzés:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "S&zervező:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Hely:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Kezdődátum:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Zá&ró dátum:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Rész&letek:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Beágyazott e-mail"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Feladó:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Dátum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Tá&rgy:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "F&eladó:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Küldő:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Címzett:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "Más&olat:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Titkos másolat:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Dátum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Fájl"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Mentés"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Mentés visszafejtve"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Nyomtatási kép"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "N&yomtatás"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigáció"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Előző üzenet"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Következő üzenet"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-mail fájlok (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Titkosított S/MIME-fájlok (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Fájl mentése"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "A(z) %1 fájl létrehozása nem sikerült."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Hiba az üzenet mentésekor"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Visszafejtett fájl mentése"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "A(z) %1 fájl létrehozása nem sikerült."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Nyomtatás"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Nyomtatási kép"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Nem lehet olvasni a fájlt"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Az üzenetet a(z) %1 tanúsítvánnyal írták alá."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "A tanúsítvány részletei nem érhetők el."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Az üzenet %1 írta alá a(z) %2 tanúsítvánnyal."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "A tanúsítványt visszavonták."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "A tanúsítvány lejárt."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "A tanúsítvány hitelesített."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Az aláírás érvénytelen."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Az üzenetet a(z) <a href=\"%1\">%2</a> tanúsítvánnyal a VS-NfD-nek "
+#~ "megfelelően írták alá."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Az üzenetet a(z) <a href=\"%1\">%2</a> tanúsítvánnyal írták alá."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Az üzenetet %1 írta alá a VS-NfD-nek megfelelően."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Az üzenetet %1 írta alá."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "A <a href=\"%1\">tanúsítványt</a> visszavonták."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "A <a href=\"%1\">tanúsítvány</a> lejárt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Az aláírás érvényes, de a <a href=\"%1\">tanúsítvány</a> érvényessége "
+#~ "ismeretlen."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Az aláírás érvényes és a <a href=\"%1\">tanúsítvány</a> marginálisan "
+#~ "megbízható."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Az aláírás érvényes és a <a href=\"%1\">tanúsítvány</a> teljesen "
+#~ "megbízható."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Az aláírás érvényes és a <a href=\"%1\">tanúsítvány</a> alapvetően "
+#~ "megbízható."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Az aláírás érvényes, de a <a href=\"%1\">tanúsítvány</a> nem megbízható."
+
+#, fuzzy
+#~| msgid "KMail Error"
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail hiba"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Az üzenet nem fejthető vissza egyetlen S/MIME tanúsítvánnyal sem a "
+#~ "kulcstartójában."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Az üzenet nem fejthető vissza egyetlen OpenPGP tanúsítvánnyal sem a "
+#~ "kulcstartójában."
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Az üzenetet %2 írta alá a(z) %1 tanúsítvánnyal."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Megbízik ebben a tanúsítványban."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Az üzenetet a következő tanúsítvánnyal titkosították: %1"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Dokumentum nyomtatása"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Melléklet menté&se másként…"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 giovanni <g.sora@tiscali.it>
+# giovanni <g.sora@tiscali.it>, 2023, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 09:30+0200\n"
+"Last-Translator: giovanni <g.sora@tiscali.it>\n"
+"Language-Team: Interlingua <kde-i18n-doc@kde.org>\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nomine"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Dimension"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Cryptate"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signate"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Falleva a salveguardar attachamento."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "attachamento"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Falleva a aperir sttachamento per aperir."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Falleva a aperir attachamento."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Nulle certificatos esseva trovate in iste attachamento"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "un certificato importate"
+msgstr[1] "%1 certificatos importate:"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "un certificato esseva jam importate"
+msgstr[1] "%1 certificatos esseva jam importate"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Incognite"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Errate Plug-in de Crypto"
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Necun plug-in de Crypto appropriate esseva trovate."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Plug-in de Crypto \"%1\" non pote decryptar messages."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Plug-in de Crypto \"%1\" non poteva decryptar datos."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Error: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Tu non pote decryptar iste message."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Le message es cryptate per le sequente recipiente:"
+msgstr[1] "Le message es cryptate per le sequente recipientes:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Phrase de contrasigno errate"
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Il non pote initiar gestion de certificato; pro favor tu verifica tu "
+"installation."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Clave incognite"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visor de Message"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Subjecto:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Ex:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Mittente: "
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "A:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Salveguarda attachamento"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Salveguarda attachamento como"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importa certificato"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Claude"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Un error occurreva: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Iste message de e-posta contine un invitation"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "inviate per %1 sur %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Iste message es cryptate ma tu non ha un clave secrete correspondente."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Iste message es cryptate per: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Iste message es compatibile con VS-NfD cryptate ma on non ha le clave "
+"secrete correspondente."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Iste message es compatibile con VS-NfD cryptate."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Iste message es cryptate."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Le message es cryptate per le sequente recipientes:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Salveguarda attachamento como…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Aperi"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importaclave public"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sin nomine"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Salveguarda attachamento como"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invitation"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Summario:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organisator:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Location:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data de &initio:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Data de fin:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalios:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Message de eposta includite"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Ex:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Subjecto:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Ex:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Mittente: "
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&A:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&File"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Salveguarda"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Salveguarda decryptate"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Vista preliminar de imprimer"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Imprime"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigation"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Message Previe"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Message Proxime"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Files de EPosta (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Files cryptate de S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Salveguarda file"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "File %1 non poteva esser create"
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Error durante que on salveguardava message"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Salveguarda file decryptate"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "File %1 non poteva esser create"
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprime"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Vista preliminar de imprimer"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Incapace a leger file"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Iste message esseva signate con le certificato %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Le detalios de certificato non es disponibile."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Iste message esseva signate per %1 con le certificato %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Le cetificato esseva revocate."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Le certificato ha expirate."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Le certificato es certificate."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Le signatura es invalide."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Iste message ha essite signate compatibile con VS-NfD usante le "
+#~ "certificato <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Iste message ha essite signate usante le certificato <a href=\"%1\">%2</"
+#~ "a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Iste message ha essite signate compatibile con VS-NfD per %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Iste message ha essite signate per %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Le certificato <a href=\"%1\"></a> esseva revocate."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Le certificato <a href=\"%1\"></a> es expirate."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Le signatura es valide, ma le validitate del certificato <a href="
+#~ "\"%1\"></a> es incognite."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Le signatura es valide e le certificato <a href=\"%1\"> </a> es "
+#~ "marginalmente credibile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Le signatura es valide e le certificato <a href=\"%1\"></a> es "
+#~ "completemente credibile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Le signatura es valide e le certificato <a href=\"%1\"></a> es in fin "
+#~ "credibile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Le signatura es valide, ma le certificato <a href=\"%1\"></a> non es "
+#~ "certificate."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Error de KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Iste message non pote essere decryptate con ulle certificato S/MIME in tu "
+#~ "portaclaves. "
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Iste message non pote essere decryptate con ulle certificato de OpenPGP "
+#~ "in tu portaclaves. "
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Le message es cryptate per le sequente certificato:"
+#~ msgstr[1] "Le message es cryptate per le sequente certificatos:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Iste message ha essite signate usante le certificato %1 per %2"
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Tu es confidente in iste ccertificato."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Iste message es cryptate al certificato: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Le message es cryptate per le sequente certificatos:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Imprime documento"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Salveguarda attachamento como..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Files de EPosta (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importa clave"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Necun clave secrete trovate per decryptar le message. "
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Necun clave disponibile"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2023, 2024 Vincenzo Reale <smart2128vr@gmail.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 14:14+0200\n"
+"Last-Translator: Vincenzo Reale <smart2128vr@gmail.com>\n"
+"Language-Team: Italian <kde-i18n-it@kde.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nome"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Dimensione"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Cifrato"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Firmato"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Salvataggio dell'allegato non riuscito."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "allegato"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Impossibile scrivere l'allegato per l'apertura."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Apertura dell'allegato non riuscita."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Non è stata trovata alcun certificato in questo allegato"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "un certificato importato"
+msgstr[1] "%1 certificati importati"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "un certificato è già stato importato"
+msgstr[1] "%1 certificati sono stati importati"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Estensione di cifratura errata."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Non è stata trovata nessuna estensione crittografica valida."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "L'estensione crittografica «%1» non può decifrare i messaggi."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "L'estensione crittografica «%1» non può decifrare i dati."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Errore: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Non puoi decifrare questo messaggio."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Il messaggio è cifrato per il seguente destinatario:"
+msgstr[1] "Il messaggio è cifrato per i seguenti destinatari:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Frase segreta errata."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Impossibile avviare il gestore dei certificati. Controlla la tua "
+"installazione."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Chiave sconosciuta"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visualizzatore del messaggio"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Oggetto:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Da:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Mittente:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "A:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "CCN:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Salva allegato"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Salva allegato come"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importa certificato"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Chiudi"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Si è verificato un errore: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Questo messaggio contiene un invito"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "inviato da %1 il %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Questo messaggio è cifrato, ma non hai una chiave segreta corrispondente."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Questo messaggio è cifrato per: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Questo messaggio è cifrato in conformità con VS-NfD, ma non hai una chiave "
+"segreta corrispondente."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Questo messaggio è cifrato in conformità a VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Questo messaggio è cifrato."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Il messaggio è cifrato per i seguenti destinatari:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Salva allegato come…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Apri"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importa chiave pubblica"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "senza nome"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Salva allegato come"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Invito"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Riepilogo:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizzatore:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Posizione:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data di &inizio:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Data di &fine:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Dettagli:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Messaggio incapsulato"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Da:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Oggetto:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Da:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Mittente:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&A:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&CCN:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&File"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Salva"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Salva decifrato"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Anteprima di stampa"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Stam&pa"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigazione"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Messaggio precedente"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Messaggio successivo"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "File di messaggi di posta (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "File S/MIME cifrati (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Salva file"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Impossibile creare il file %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Errore durante il salvataggio del messaggio"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Salva il file decifrato"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Impossibile creare il file %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Stampa"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Anteprima di stampa"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Impossibile leggere il file"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Questo messaggio è stato firmato con il certificato %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "I dettagli del certificato non sono disponibili."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Questo messaggio è stato firmato da %1 con il certificato %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Il certificato è stato revocato."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Il certificato è scaduto."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Il certificato è convalidato."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "La firma non è valida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Questo messaggio è stato firmato in conformità a VS-NfD utilizzando il "
+#~ "certificato <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Questo messaggio è stato firmato utilizzando il certificato <a href="
+#~ "\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Questo messaggio è stato firmato in conformità a VS-NfD da %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Questo messaggio è stato firmato da %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Il <a href=\"%1\">certificato</a> è stata revocato."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Il <a href=\"%1\">certificato</a> è scaduto."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "La firma è valida ma la validità del <a href=\"%1\">certificato</a> è "
+#~ "sconosciuta."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "La firma è valida e il <a href=\"%1\">certificato</a> è marginalmente "
+#~ "affidabile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "La firma è valida e il <a href=\"%1\">certificato</a> è completamente "
+#~ "affidabile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "La firma è valida e il <a href=\"%1\">certificato</a> è definitivamente "
+#~ "affidabile."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "La firma è valida, ma il <a href=\"%1\">certificato</a> non è convalidato."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Errore di KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Questo messaggio non può essere decifrato con alcun certificato S/MIME "
+#~ "nel tuo portachiavi."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Questo messaggio non può essere decifrato con nessun certificato OpenPGP "
+#~ "nel tuo portachiavi."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Il messaggio è cifrato per il seguente certificato:"
+#~ msgstr[1] "Il messaggio è cifrato per i seguenti certificati:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr ""
+#~ "Questo messaggio è stato firmato utilizzando il certificato %1 di %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Ti fidi di questo certificato."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Questo messaggio è cifrato con il certificato: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Il messaggio è cifrato per i seguenti certificati:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Stampa documento"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Salva allegato come..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "File di messaggi di posta (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importa chiave"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr ""
+#~ "Non è stata trovata alcuna chiave segreta per decifrare il messaggio."
+
+#~ msgid "Unknown key"
+#~ msgstr "Chiave sconosciuta"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Nessuna chiave disponibile."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Creazione di un file temporaneo non riuscita."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Allegato salvato su disco:%1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2023-08-13 17:34-0700\n"
+"Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n"
+"Language-Team: Japanese <kde-jp@kde.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr ""
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr ""
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr ""
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr ""
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] ""
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] ""
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr ""
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ""
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr ""
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr ""
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr ""
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr ""
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr ""
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr ""
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] ""
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr ""
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr ""
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr ""
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr ""
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr ""
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr ""
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr ""
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr ""
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr ""
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr ""
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr ""
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr ""
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr ""
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr ""
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr ""
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 05:48+0200\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <kde-i18n-doc@kde.org>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.3.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "სახელი"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "ზომა"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "დაშიფრული"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "ხელმოწერილი"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "მიმაგრებული ფაილის შენახვის შეცდომა."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "მიმაგრებული ფაილი"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "მიმაგრებული ფაილის გასახსნელად ჩაწერა ჩავარდა ."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "მიმაგრებული ფაილის გახსნა შეუძლებელია."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "ამ მიმაგრებულ ფაილში სერტიფიკატები ვერ ვიპოვე"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "შემოტანილია 1 სერტიფიკატი"
+msgstr[1] "შემოტანილია %1 სერტიფიკატი"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "1 სერტიფიკატი უკვე შემოტანილი იყო"
+msgstr[1] "%1 სერტიფიკატი უკვე შემოტანილი იყო"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "უცნობი"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "კრიპტოს არასწორი დამატება."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "კრიპტოს შესაბამისი დამატება ვერ ვიპოვე."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "კრიპტოს დამატებას \"%1\" შეტყობინებების გაშიფვრა არ შეუძლია."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "კრიპტოს დამატებას \"%1\" მონაცემების გაშიფვრა არ შეუძლია."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "შეცდომა: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "თქვენ ამ შეტყობინების გაშიფვრა არ შეგიძლიათ."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "შეტყობინება დაშიფრულია შემდეგი მიმღებისთვის:"
+msgstr[1] "შეტყობინება დაშიფრულია შემდეგი მიმღებებისთვის::"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "არასწორი საიდუმლო ფრაზა."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "სერტიფიკატების მმართველის გაშვების შეცდომა. გადაამოწმეთ ფაილები."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "უცნობი გასაღები"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "შეტყობინების ნახვა"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "სათაური:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "ვისგან:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "გამგზავნი:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "ვის:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "ასლი:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "ფარულიასლი:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "მიმაგრებული ფაილის შენახვა"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "მიმაგრებული ფაილის შენახვა, როგორც"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "სერტიფიკატის შემოტანა"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "დახურვა"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "შეცდომა: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "ეს ელფოსტა მოსაწვევს შეიცავს"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "გაგზავნილია %1-ის მიერ. თარიღი %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "ეს შეტყობინება დაშიფრულია, მაგრამ მისი საიდუმლო გასაღები არ გვაქვს."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "ეს შეტყობინება დაშიფრულია ვისთვის: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"ეს შეტყობინება დაშიფრულია VS-NfD-სთან თავსებადად, მაგრამ მისი სადუმლო "
+"გასაღები არ გვაქვს."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "ეს შეტყობინება დაშიფრულია VS-NfD-სთან თავსებადი შიფრით."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "ეს შეტყობინება დაშიფრულია."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "შეტყობინება დაშიფრულია შემდეგი მიმღებებისთვის:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "მიმაგრებული ფაილის შენახვა, როგორც…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "გახსნა"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "საჯარო გასაღების შემოტანა"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "უსახელო"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "მიმაგრებული ფაილის შენახვა, როგორც"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "მოწვევა"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&შეჯამება:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&ორგანიზატორი:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&მდებარეობა:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&დაწყების თარიღი:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&დასრულების დრო:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&დეტალები:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "ჩასმული შეტყობინება"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "ვისგან:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "თარიღი:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&სათაური:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&ვისგან:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&გამომგზავნი:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&ვის:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&ასლი:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&ფარულიასლი:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "თ&არიღი:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&ფაილი"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&შენახვა"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "გაშიფრულის შენახვა"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "დასაბეჭდის გადახედვა"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&ბეჭდვა"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&ნავიგაცია"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "წინა შეტყობინება"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "შემდეგი შეტყობინება"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "ელფოსტის ფაილები (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "დაშიფრული S/MIME ფაილები (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "ფაილის შენახვა"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "%1: ფაილის შექმნის შეცდომა."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "შეტყობინების შენახვის შეცდომა"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "გაშიფრული ფაილის შენახვა"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "%1: ფაილის შექმნის შეცდომა."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "ბეჭდვა"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "ბეჭდვის მინიატურა"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "ფაილის წაკითხვა შეუძლებელია"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "ეს შეტყობინება ხელმოწერილია სერტიფიკატით %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "სერტიფიკატის დეტალები ხელმიუწვდომელია."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "ეს შეტყობინება ხელმოწერილია %1-ის მიერ სერტიფიკატით %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "სერტიფიკატი გაუქმებულია."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "სერტიფიკატი ვადაგასულია."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "სერტიფიკატი სერტიფიცირებულია."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "ხელმოწერა არასწორია."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "ეს შეტყობინება ხელმოწერილია VS-NfD თავსებადად, სერტიფიკატით <a href="
+#~ "\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "ეს შეტყობინება ხელმოწერილია სერტიფიკატით <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "ამ შეტყობინების ხელმოწერა თავსებადია VS-NfD-სთან. ავტორია %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "შეტყობინება ხელმოწერილია %1-ის მიერ."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">სერტიფიკატი</a> გაუქმებულია."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">სერტიფიკატის</a> ვადა ამოწურულია."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "ხელმოწერა სწორია, მაგრამ <a href=\"%1\">სერტიფიკატის</a> გადამოწმება "
+#~ "შეუძლებელია."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr "ხელმოწერა სწორია და <a href=\"%1\">სერტიფიკატი</a> ოდნავ საეჭვოა."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "ხელმოწერა სწორია და <a href=\"%1\">სერტიფიკატი</a> სრულად სანდოა."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr "ხელმოწერა სწორია და <a href=\"%1\">სერტიფიკატი</a> უპირობოდ სანდოა."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "ხელმოწერა სწორია, მაგრამ <a href=\"%1\">სერტიფიკატი</a> სერტიფიცირებული "
+#~ "არაა."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail-ის შეცდომა"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "ამ შეტყობინებას თქვენს ბრელოკში არსებული S/MIME სერტიფიკატებით ვერ "
+#~ "გაშიფრავთ."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "ამ შეტყობინებას თქვენს ბრელოკში არსებული OpenPGP სერტიფიკატებით ვერ "
+#~ "გაშიფრავთ."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "შეტყობინება დაშიფრულია შემდეგი სერტიფიკატისთვის:"
+#~ msgstr[1] "შეტყობინება დაშიფრულია შემდეგი სერტიფიკატებისთვის:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "ეს შეტყობინება ხელმოწერილია სერტიფიკატით %1, %2-ის მიერ."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "თქვენ ენდობით ამ სერტიფიკატს."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "შეტყობინება დაშიფრულია სერტიფიკატამდე: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "შეტყობინება დაშიფრულია შემდეგი სერტიფიკატებისთვის:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "დოკუმენტის დაბეჭდვა"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "მიმაგრებული ფაილის &შენახვა, როგორც…"
+
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "ელფოსტის ფაილები (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "გასაღების შემოტანა"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "შეტყობინების გასაშიფრი საიდუმლო გასაღები ვერ ვიპოვე."
+
+#~ msgid "Unknown key"
+#~ msgstr "უცნობი გასაღები"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "გასაღები ხელმიუწვდომელია."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "დროებითი ფაილის შექმნის შეცდომა."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "მიმაგრებული ფაილი შენახულია დისკზე: %1"
+
+#~ msgid "fwd"
+#~ msgstr "გადგზ"
+
+#~ msgid "re"
+#~ msgstr "პას"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr "მონაცემების გაშიფვრის შეცდომა: მიმღებებისთვის გასაღები ვერ ვიპოვე."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# SPDX-FileCopyrightText: 2023, 2024 Shinjo Park <kde@peremen.name>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-20 00:35+0200\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"Language-Team: Korean <kde-kr@kde.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "이름"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "크기"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "암호화됨"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "서명됨"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "첨부 파일을 저장할 수 없습니다."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "첨부 파일"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "첨부 파일에 기록하기 위해 열 수 없습니다."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "첨부 파일을 열 수 없습니다."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "이 첨부 파일에서 인증서를 찾을 수 없음"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "인증서 %1개를 가져옴"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "인증서 %1개는 이미 가져왔음"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "잘못된 암호화 플러그인입니다."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "적절한 암호화 플러그인을 찾을 수 없습니다."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "암호화 플러그인 \"%1\"에서 메시지를 복호화할 수 없습니다."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "암호화 플러그인 \"%1\"에서 데이터를 복호화할 수 없습니다."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "오류: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "이 메시지를 복호화할 수 없습니다."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "이 메시지는 다음 수신자로 암호화되어 있습니다:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "암구호가 잘못되었습니다."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "인증서 관리자를 시작할 수 없습니다. 설치 상태를 확인하십시오."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "알 수 없는 키"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "메시지 뷰어"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "제목:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "보낸 사람:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "전송한 사람:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "받는 사람:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "참조:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "숨은 참조:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "첨부 파일 저장"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "다른 이름으로 첨부 파일 저장"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "인증서 가져오기"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "닫기"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "오류 발생: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "이 메일에는 초대장이 첨부되어 있습니다"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "%1 님이 %2에 보냄"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "메시지가 암호화되어 있지만 일치하는 비밀 키가 없습니다."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "이 메시지는 다음 수신자에게 암호화되어 있습니다: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"이 메시지는 VS-NfD를 준수하는 방법으로 암호화되었지만 일치하는 비밀 키가 없습"
+"니다."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "이 메시지는 VS-NfD를 준수하는 방법으로 암호화되었습니다."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "이 메시지는 암호화되어 있습니다."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "이 메시지는 다음 수신자로 암호화되어 있습니다:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "다른 이름으로 첨부 파일 저장(&S)…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "열기"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "공개 키 가져오기"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "이름 없음"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "다른 이름으로 첨부 파일 저장"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "초대장"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "개요(&S):"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "주최(&O):"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "위치(&L):"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "시작 날짜(&S):"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "종료 날짜(&E):"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "자세히(&D):"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "캡슐화된 이메일"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "보낸 사람:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "날짜:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "제목(&S):"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "보낸 사람(&F):"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "전송한 사람(&S):"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "받는 사람(&T):"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "참조(&C):"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "숨은 참조(&B):"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "날짜(&D):"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "파일(&F)"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "저장(&S)"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "복호화된 항목 저장"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "인쇄 미리 보기"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "인쇄(&P)"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "탐색(&N)"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "이전 메시지"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "다음 메시지"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "이메일 파일 (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "암호화된 S/MIME 파일 (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "파일 저장"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "파일 %1을(를) 만들 수 없습니다."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "메시지 저장 오류"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "복호화된 파일 저장"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "파일 %1을(를) 만들 수 없습니다."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "인쇄"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "인쇄 미리 보기"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "파일을 읽을 수 없음"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "이 메시지는 %1 인증서로 서명되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "인증서 정보를 알 수 없습니다."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "이 메시지는 %1에 의해 %2 인증서로 서명되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "인증서가 취소되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "인증서가 만료되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "인증서가 인증되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "서명이 잘못되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "이 메시지는 VS-NfD를 준수하는 방법으로 인증서 <a href=\"%1\">%2</a>(으)로 "
+#~ "서명되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "이 메시지는 인증서 <a href=\"%1\">%2</a>(으)로 서명되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "%1이(가) 이 메시지에 VS-NfD를 준수하는 방법으로 서명했습니다."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "%1이(가) 메시지에 서명했습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">인증서</a>가 취소되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">인증서</a>가 만료되었습니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "서명이 올바르지만 <a href=\"%1\">인증서</a> 유효성을 알 수 없습니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr "서명이 올바르지만 <a href=\"%1\">인증서</a>를 그럭저럭 신뢰합니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "서명이 올바르고 <a href=\"%1\">인증서</a>를 웬만큼 신뢰합니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr "서명이 올바르고 <a href=\"%1\">인증서</a>를 완전히 신뢰합니다."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "서명이 올바르지만 <a href=\"%1\">인증서</a>를 신뢰할 수 없습니다."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail 오류"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "이 메시지는 키링에 있는 어떠한 S/MIME 인증서로도 복호화할 수 없습니다."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "이 메시지는 키링에 있는 어떠한 OpenPGP 인증서로도 복호화할 수 없습니다."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "이 메시지는 다음 인증서로 암호화되어 있습니다:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "%2 님이 인증서 %1(으)로 이 메시지에 서명했습니다."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "이 인증서를 신뢰하고 있습니다."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "이 메시지는 다음 인증서로 암호화되어 있습니다: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "이 메시지는 다음 인증서로 암호화되어 있습니다:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "문서 인쇄"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "다른 이름으로 첨부 파일 저장(&S)..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "이메일 파일 (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "키 가져오기..."
+
+#, fuzzy
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "이 메시지는 다음 키로 암호화되어 있습니다:"
+
+#~ msgid "Unknown key"
+#~ msgstr "알 수 없는 키"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "키를 사용할 수 없습니다."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "임시 파일을 만들 수 없습니다."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "첨부 파일을 디스크에 저장함: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
--- /dev/null
+# Lithuanian translations for mimetreeparser package.
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+# Automatically generated, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-01-14 00:38+0000\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
+"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr ""
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr ""
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr ""
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr ""
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr ""
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ""
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr ""
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr ""
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr ""
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr ""
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr ""
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr ""
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr ""
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr ""
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr ""
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr ""
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr ""
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr ""
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr ""
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr ""
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr ""
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr ""
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr ""
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr ""
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr ""
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr ""
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr ""
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Toms Trasuns <toms.trasuns@posteo.net>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-09-12 15:31+0300\n"
+"Last-Translator: Toms Trasuns <toms.trasuns@posteo.net>\n"
+"Language-Team: Latvian <kde-i18n-doc@kde.org>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Lokalize 24.08.0\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nosaukums"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Izmērs"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Šifrēts"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Parakstīts"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Neizdevās saglabāt pielikumu."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "pielikums"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Neizdevās rakstīt pielikumu atvēršanai."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Neizdevās atvērt pielikumu."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Šim pielikumam nav atrasti sertifikāti"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "importēts %1 sertifikāts"
+msgstr[1] "importēti %1 sertifikāti"
+msgstr[2] "importēts %1 sertifikātu"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "%1 sertifikāts ir jau importēts"
+msgstr[1] "%1 sertifikāti ir jau importēti"
+msgstr[2] "%1 sertifikātu ir jau importēts"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Nezināms"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Nepareizs šifrēšanas spraudnis."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nav atrasts piemērots šifrēšanas spraudnis."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Šifrēšanas spraudnis „%1“ nespēj atšifrēt vēstules."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Šifrēšanas spraudnim „%1“ neizdevās atšifrēt datus."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Kļūda: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Nevarat atšifrēt šo vēstuli."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Vēstule ir šifrēta šim saņēmējam:"
+msgstr[1] "Vēstule ir šifrēta šiem saņēmējiem:"
+msgstr[2] "Vēstule ir šifrēta šiem saņēmējiem:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Nepareiza parole."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Neizdevās palaist sertifikātu pārvaldnieku. Pārbaudiet instalāciju."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Nezināma atslēga"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " — "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Vēstuļu skatītājs"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Temats:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "No:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Nosūtītājs:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Kam:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Saglabāt pielikumu"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Saglabāt pielikumu kā"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importēt sertifikātu"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Aizvērt"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Programma saskārās ar kļūdu: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Šī vēstule satur uzaicinājumu"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "%2 nosūtīja %1"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Šī vēstule ir šifrēta, bet tai nav atbilstošas slepenās atslēgas."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Šī vēstule ir šifrēta pusēm: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Šī vēstule ir šifrēta ar „VS-NfD“ saderīgā veidā, bet jums nav atbilstošas "
+"slepenās atslēgas."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Šī vēstule ir šifrēta saderīgi ar „VS-NfD“."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Šī vēstule ir šifrēta."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Šī vēstule ir šifrēta saņēmējiem:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Saglabāt pielikumu kā…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Atvērt"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importēt publisko atslēgu"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "nenosaukts"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Saglabāt pielikumu kā"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Uzaicinājums"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Kopsavilkums:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizators:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Atrašanās vieta:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Sākuma datums:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Beigu datums:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Informācija:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Iekapsulēta vēstule"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "No:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datums:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Temats:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&No:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Nosūtītājs:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Uz:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Datums:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Datne"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Saglabāt"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Saglabāt atšifrētu"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Drukas priekšskatījums"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Drukāt"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigācija"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Iepriekšējā vēstule"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Nākamā vēstule"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-pasta datnes (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Šifrētas S/MIME datnes (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Saglabāt datni"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Datni „%1“ nevar izveidot."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Kļūda, saglabājot vēstuli"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Saglabāt atšifrētu datni"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Datni „%1“ nevar izveidot."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Drukāt"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Drukas priekšskatījums"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Neizdodas nolasīt datni"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Freek de Kruijf <freekdekruijf@kde.nl>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 13:05+0200\n"
+"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
+"Language-Team: \n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Naam"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Grootte"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Versleuteld"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Gesigneerd"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Bijlage opslaan is mislukt."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "bijlage"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Bijlage schrijven voor openen is mislukt."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Bijlage openen is mislukt."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Er zijn geen certificaten in deze bijlage gevonden"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "één certificaat geïmporteerd"
+msgstr[1] "%1 certificaten geïmporteerd:"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "er is al één certificaat geïmporteerd"
+msgstr[1] "er zijn al %1 certificaten geïmporteerd"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Onjuiste crypto-plug-in."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Geen geschikte Crypto-plug-in gevonden."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Crypto-plug-in \"%1\" kan geen berichten ontcijferen."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "De crypto-plug-in \"%1\" kon de gegevens niet ontcijferen."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Fout: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "U kunt dit bericht niet ontcijferen."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Het bericht is versleuteld voor de volgende ontvanger:"
+msgstr[1] "Het bericht is versleuteld voor de volgende ontvangers:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Verkeerde wachtwoordzin."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Het Certificaatbeheer kon niet worden gestart. Controleer uw installatie."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Onbekende sleutel"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Viewer van meldingen"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Onderwerp:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Van:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Afzender:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Aan:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "BCC:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Bijlage opslaan"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Bijlage opslaan als"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Certificaat importeren"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Sluiten"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Er is een fout opgetreden: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Deze e-mail bevat een uitnodiging"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "verzonden door %1 op %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Dit bericht is versleuteld maar we hebben geen bijbehorende geheime sleutel."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Dit bericht is versleuteld voor: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Dit bericht is overeenkomstig VS-NfD versleuteld maar u hebt geen "
+"bijbehorende geheime sleutel."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Dit bericht is overeenkomstig VS-NfD versleuteld."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Dit bericht is versleuteld."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Het bericht is versleuteld voor de volgende ontvangers:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Bijlage &opslaan als…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Openen"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Publieke sleutel importeren"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "naamloos"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Bijlage opslaan als"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Uitnodiging"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Samenvatting:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organisator:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Locatie:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Begindatum:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Einddatum:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Details:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Ingebed e-mailbericht"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Van:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Onderwerp:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Van:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Af&zender:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Aan:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&BCC:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Datum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Bestand"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Opslaan"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Versleuteld opslaan"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Afdrukvoorbeeld"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Afdrukken"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigatie"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Vorige bericht"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Volgend bericht"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-mailbestanden (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Versleutelde S/MIME bestanden (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Bestand opslaan"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Bestand %1 kan niet worden aangemaakt."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Fout bij opslaan van bericht"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Gedecodeerd bestand opslaan"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Bestand %1 kan niet worden aangemaakt."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Afdrukken"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Afdrukvoorbeeld"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Kon bestand niet lezen"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Dit bericht was ondertekend met het certificaat %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "De details van het certificaat zijn niet beschikbaar."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Dit bericht was ondertekend door %1 met het certificaat %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Het certificaat is ingetrokken."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Het certificaat is verlopen."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Het certificaat is gecertificeerd."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "De ondertekening is ongeldig."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Dit bericht was ondertekend overeenkomstig VS-NfD met het certificaat <a "
+#~ "href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Dit bericht was ondertekend met het certificaat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Dit bericht was ondertekend overeenkomstig VS-NfD door %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Dit bericht was ondertekend door %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Het <a href=\"%1\">certificaat</a> is ingetrokken."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Het <a href=\"%1\">certificaat</a> is verlopen."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "De ondertekening is geldig, maar de geldigheid van het <a href="
+#~ "\"%1\">certificaat</a> is onbekend."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "De ondertekening is geldig en het <a href=\"%1\">certificaat</a> is "
+#~ "gedeeltelijk betrouwbaar."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "De ondertekening is geldig en het <a href=\"%1\">certificaat</a> is "
+#~ "volledig betrouwbaar."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "De ondertekening is geldig en het <a href=\"%1\">certificaat</a> is "
+#~ "uiterst betrouwbaar."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "De ondertekening is geldig, maar het <a href=\"%1\">certificaat</a> is "
+#~ "niet gecertificeerd."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail - foutmelding"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Dit bericht kan niet ontcijfert worden met geen enkel S/MIME certificaat "
+#~ "in uw sleutelring."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Dit bericht kan niet ontcijfert worden met geen enkel OpenPGP certificaat "
+#~ "in uw sleutelring."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Het bericht is versleuteld voor de volgende sleutels:"
+#~ msgstr[1] "Het bericht is versleuteld voor de volgende certificaten:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Dit bericht was ondertekend met het certificaat %1 door %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Dit certificaat wordt door u vertrouwd."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Dit bericht is versleuteld met het certificaat: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Het bericht is versleuteld voor de volgende certificaten:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Document afdrukken"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Bijlage &opslaan als..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "E-mailbestanden (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Sleutel importeren"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Geen geheime sleutel gevonden om het bericht te ontcijferen."
+
+#~ msgid "Unknown key"
+#~ msgstr "Onbekende sleutel"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Geen sleutel beschikbaar."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Aanmaken van tijdelijk bestand is mislukt."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "De bijlage is op schijf opgeslagen: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr ""
+#~ "Kon de gegevens niet ontcijferen: geen sleutel gevonden voor ontvangers."
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-03 11:53+0200\n"
+"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
+"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nazwa"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Rozmiar"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Zaszyfrowana"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Podpisana"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Nie udało się zapisać załącznika."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "załącznik"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Nie udało się zapisać załącznika do otwarcia."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Nie udało się otworzyć załącznika."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Nie znaleziono żadnych certyfikatów w tym załączniku"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "zaimportowano jeden certyfikat"
+msgstr[1] "zaimportowano %1 certyfikaty"
+msgstr[2] "zaimportowano %1 certyfikatów"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "jeden certyfikat był już zaimportowany"
+msgstr[1] "%1 certyfikaty były już zaimportowane"
+msgstr[2] "%1 certyfikatów było już zaimportowanych"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Zła wtyczka szyfrująca."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nie znaleziono odpowiedniej wtyczki szyfrującej."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Wtyczka szyfrująca \"%1\" nie może odszyfrować wiadomości."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Wtyczka szyfrująca \"%1\" nie mogła odszyfrować danych."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Błąd: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Nie możesz odszyfrować tej wiadomości."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Wiadomość jest zaszyfrowana dla następującego odbiorcy:"
+msgstr[1] "Wiadomość jest zaszyfrowana dla następujących odbiorców:"
+msgstr[2] "Wiadomość jest zaszyfrowana dla następujących odbiorców:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Nieprawidłowe hasło."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Nie można otworzyć zarządzania certyfikatami. Proszę sprawdzić swoją "
+"instalację."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Nieznany klucz"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Przeglądarka wiadomości"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Temat:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Od:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Nadawca:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Do:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "DW:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "UDW:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Zapisz załącznik"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Zapisz załącznik jako"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Zaimportuj certyfikat"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zamknij"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Wystąpił błąd: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Ta wiadomość zawiera zaproszenie"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "wysłane przez %1 dnia %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Ta wiadomość jest zaszyfrowana, lecz nie masz pasującego do niej klucza "
+"poufnego."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Ta wiadomość jest zaszyfrowana dla: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Ta wiadomość została zaszyfrowana zgodnie z VS-NfD, lecz nie ma pasującego "
+"klucza poufnego."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Ta wiadomość została zaszyfrowana zgodnie z VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Ta wiadomość jest zaszyfrowana."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Wiadomość jest zaszyfrowana dla następujących odbiorców:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Zapi&sz załącznik jako…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Otwórz"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Zaimportuj klucz publiczny"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "nienazwany"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Zapisz załącznik jako"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Zaproszenie"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "Pod&sumowanie:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizator:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Miejsce:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Data &rozpoczęcia:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Data zakończ&enia:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Szczegóły:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Obudowana wiadomość"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Od:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Temat:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Od:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Nadawca:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Do:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&DW:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&UDW:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Plik"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "Zapi&sz"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Zapisz odszyfrowany"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Podgląd wydruku"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Wy&drukuj"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Nawigacja"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Poprzednia wiadomość"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Następna wiadomość"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Pliki wiadomości (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Pliki zaszyfrowane S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Zapisz plik"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Nie można utworzyć pliku %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Błąd zapisywania wiadomości"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Zapisz odszyfrowany plik"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Nie można utworzyć pliku %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Wydrukuj"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Podgląd wydruku"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Nie udało się odczytać pliku"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Ta wiadomość została podpisana przy użyciu certyfikatu %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Szczegóły certyfikatu nie są dostępne."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Ta wiadomość została podpisana przez %1 przy użyciu certyfikatu %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Certyfikat został odwołany."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Certyfikat wygasł."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Certyfikat jest scertyfikowany."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Podpis jest nieprawidłowy."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ta wiadomość została podpisana zgodnie z VS-NfD przy użyciu certyfikatu "
+#~ "<a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Ta wiadomość została podpisana przy użyciu certyfikatu <a href=\"%1\">%2</"
+#~ "a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Ta wiadomość została podpisana zgodnie z VS-NfD przez %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Ta wiadomość została podpisana przez %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Certyfikat</a> został odwołany."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Certyfikat</a> wygasł."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Podpis jest poprawny, lecz ważność <a href=\"%1\">certyfikatu</a> jest "
+#~ "nieznana."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Podpis jest prawidłowy, a <a href=\"%1\">certyfikat</a> ma marginalne "
+#~ "zaufanie."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Podpis jest prawidłowy, a <a href=\"%1\">certyfikat</a> jest w pełni "
+#~ "zaufany."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Podpis jest prawidłowy, a <a href=\"%1\">certyfikat</a> ma najwyższe "
+#~ "zaufanie."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Podpis jest prawidłowy, lecz <a href=\"%1\">certyfikat</a> nie jest "
+#~ "scertyfikowany."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Błąd KMaila"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Tej wiadomości nie można odszyfrować żadnym certyfikatem S/MIME dostępnym "
+#~ "w twoim pęku kluczy."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Tej wiadomości nie można odszyfrować żadnym certyfikatem OpenPGP "
+#~ "dostępnym w twoim pęku kluczy."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Wiadomość jest zaszyfrowana dla następującego certyfikatu:"
+#~ msgstr[1] "Wiadomość jest zaszyfrowana dla następujących certyfikatów:"
+#~ msgstr[2] "Wiadomość jest zaszyfrowana dla następujących certyfikatów:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Ta wiadomość została podpisana przy użyciu certyfikatu %1 przez %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Ufasz temu certyfikatowi."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Ta wiadomość jest zaszyfrowana certyfikatem: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Wiadomość jest zaszyfrowana dla następującego certyfikatu:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Wydrukuj dokument"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Zapisz załącznik jako..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Pliki pocztowe (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Zaimportuj klucz"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Nie znaleziono klucza poufnego do odszyfrowania wiadomości."
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Klucz niedostępny."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Nie udało się utworzyć pliku tymczasowego."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant 'Anna
+# SPDX-FileCopyrightText: 2024 Rafael Sant'Anna <rafaelstn@outlook.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-11-12 19:39-0300\n"
+"Last-Translator: Rafael Sant'Anna <rafaelstn@outlook.com>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 24.08.3\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Nome"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Tamanho"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Criptografado"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Assinado"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Falha ao salvar o anexo."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "anexo"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Falha ao gravar o anexo para abertura."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Falha ao abrir o anexo."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Nenhum certificado foi encontrado neste anexo."
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "um certificado importado"
+msgstr[1] "%1 certificados importados"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "um certificado já foi importado"
+msgstr[1] "%1 certificados já foram importados"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ","
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Plug-in de criptografia incorreto."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nenhum plug-in de criptografia apropriado foi encontrado."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "O plug-in de criptografia “%1” não pode descriptografar mensagens."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "O plug-in de criptografia “%1” não pôde descriptografar os dados."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Erro: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Não é possível descriptografar esta mensagem."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "A mensagem está criptografada para o seguinte destinatário:"
+msgstr[1] "A mensagem está criptografada para o seguintes destinatários:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "A frase secreta está incorreta."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Não foi possível iniciar o gerenciador de certificados. Verifique sua "
+"instalação."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Chave desconhecida"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Visualizador de mensagens"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Assunto:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "De:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Remetente:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Para:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "CC:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "CCO:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Salvar anexo"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Salvar anexo como"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importar certificado"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Fechar"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Ocorreu um erro: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Este e-mail contém um convite"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "enviado por %1 em %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Essa mensagem está criptografada, mas você não tem uma chave secreta "
+"correspondente."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Esta mensagem está criptografada para: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Esta mensagem é criptografada conforme a VS-NfD, mas você não tem uma chave "
+"secreta correspondente. "
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Essa mensagem é criptografada conforme a VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Esta mensagem está criptografada."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "A mensagem está criptografada para os seguintes destinatários:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Salvar anexo como..."
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Abrir"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importar chave pública"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "sem nome"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Salvar anexo como"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Convite"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Resumo:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizador:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Localização:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Data de início:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "&Data de término:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detalhes:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "E-mail encapsulado"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "De:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Data:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Assunto:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&De:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Remetente:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Para:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&CC:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&CCO:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Data:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Arquivo"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Salvar"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Salvar descriptografado"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Visualizar impressão"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Imprimir"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navegação"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "&Mensagem anterior"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Próxima mensagem"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Arquivos de e-mail (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Arquivos S/MIME criptografados (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Salvar arquivo"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "O arquivo %1 não pôde ser criado."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, fuzzy, kde-format
+#| msgid "Error saving message"
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Erro ao salvar a mensagem"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Salvar o arquivo descriptografado"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "O arquivo %1 não pôde ser criado."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Imprimir"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Visualizar impressão"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Não foi possível ler o arquivo"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Esta mensagem foi assinada com o certificado %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Os detalhes do certificado não estão disponíveis."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Esta mensagem foi assinada por %1 com o certificado %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "O certificado foi revogado."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "O certificado expirou."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "O certificado é válido."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "A assinatura é inválida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Esta mensagem foi assinada conforme a VS-NfD usando o certificado <a "
+#~ "href=“%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Esta mensagem foi assinada usando o certificado <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Esta mensagem foi assinada conforme a VS-NfD por %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Esta mensagem foi assinada por %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "O <a href=\"%1\">certificado</a> foi revogado."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "O <a href=\"%1\">certificado</a> expirou."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "A assinatura é válida, mas a <a href=\"%1\">certificação</a>da validade é "
+#~ "desconhecida."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "A assinatura é válida e o <a href=“%1”>certificado</a> é pouco confiável."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "A assinatura é válida e o <a href=\"%1\">certificado</a> é "
+#~ "totalmenteconfiável."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "A assinatura é válida e o <a href=“%1”>certificado</a> é conclusivamente "
+#~ "confiável."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "A assinatura é válida, mas o <a href=“%1”>certificado</a> não é "
+#~ "autenticado."
+
+#~ msgid "KMail Error"
+#~ msgstr "Erro do KMail"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Alexander Yavorsky <kekcuha@gmail.com>
+# SPDX-FileCopyrightText: 2024 Olesya Gerasimenko <translation-team@basealt.ru>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-12-04 10:28+0300\n"
+"Last-Translator: Olesya Gerasimenko <translation-team@basealt.ru>\n"
+"Language-Team: Basealt Translation Team\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Имя"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Размер"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Зашифровано"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Подписано"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Не удалось загрузить сохранить вложение."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "вложение"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Не удалось сохранить вложение для открытия."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Не удалось открыть вложение."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "В этом вложении не найдены сертификаты"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "импортирован %1 сертификат"
+msgstr[1] "импортированы %1 сертификата"
+msgstr[2] "импортированы %1 сертификатов"
+msgstr[3] "импортирован один сертификат"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "%1 сертификат уже был импортирован"
+msgstr[1] "%1 сертификата уже были импортированы"
+msgstr[2] "%1 сертификатов уже были импортированы"
+msgstr[3] "один сертификат уже был импортирован"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Неверный модуль шифрования."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Не найдено соответствующего модуля шифрования."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Модуль шифрования «%1» не может расшифровать письма."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Модуль шифрования %1 не может расшифровать эти данные."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Ошибка: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Это письмо нельзя расшифровать."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Это письмо зашифровано для следующих получателей:"
+msgstr[1] "Это письмо зашифровано для следующих получателей:"
+msgstr[2] "Это письмо зашифровано для следующих получателей:"
+msgstr[3] "Это письмо зашифровано для следующего получателя:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Неверный пароль."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Невозможно запустить менеджер сертификатов. Проверьте правильность установки "
+"программы."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Неизвестный ключ"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " — "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Просмотра письма"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Тема:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "От:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Отправитель:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Кому:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Копия:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Скрытая копия:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Сохранить вложение"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Сохранение вложения в файл"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Импортировать сертификат"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Закрыть"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Произошла ошибка: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Это письмо содержит приглашение"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "отправлено %1 %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Это письмо зашифровано, но у вас нет соответствующего секретного ключа."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Это письмо зашифровано для: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Это письмо зашифровано с использованием стандарта VS-NfD, но у вас нет "
+"соответствующего секретного ключа."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Это письмо зашифровано с использованием стандарта VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Это письмо зашифровано."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Это письмо зашифровано для следующих получателей:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Сохранить вложение как…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Открыть"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Импортировать открытый ключ"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "без_имени"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Сохранить вложение как"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Приглашение"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Краткое описание:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Организатор:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Местоположение:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Дата начала:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Дата о&кончания:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Сведения:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Инкапсулированное письмо"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "От:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Дата:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Тема:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&От:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Отправитель:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Кому:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Копия:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Скрытая копия:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Дата:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Файл"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Сохранить"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Сохранить расшифрованный файл"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Предварительный просмотр"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Печать"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Навигация"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Предыдущее письмо"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Следующее письмо"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Электронные письма (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Зашифрованные файлы S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Сохранение файла"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Не удалось создать файл «%1»."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Ошибка при сохранении письма"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Сохранение расшифрованного файла"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Не удалось создать файл «%1»."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Печать"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Предварительный просмотр"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Не удалось прочитать файл"
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Это сообщение подписано сертификатом %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Сведения о сертификате недоступны."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Это сообщение подписано сертификатом %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Сведения о сертификате недоступны."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Сведения о сертификате недоступны."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The certificate details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Сведения о сертификате недоступны."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The signature is invalid."
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Недействительная подпись."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr "Это сообщение подписано сертификатом %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the certificate %1."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Это сообщение подписано сертификатом %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Это сообщение подписано %1 по стандарту VS-NfD."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed by %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Это сообщение подписано %1."
+
+#, fuzzy
+#~| msgid "KMail Error"
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Ошибка KMail"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Печать документа"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Сохранить в&ложение как..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Электронные письма (*.eml *.mbox)"
--- /dev/null
+# translation of mimetreeparser.po to Slovak
+# SPDX-FileCopyrightText: 2023 Roman Paholík <wizzardsk@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2023-12-09 09:03+0100\n"
+"Last-Translator: Roman Paholik <wizzardsk@gmail.com>\n"
+"Language-Team: Slovak <kde-sk@linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 23.08.3\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr ""
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Veľkosť"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Šifrovaný"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Podpísané"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "príloha"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr ""
+
+#: core/attachmentmodel.cpp:381
+#, fuzzy, kde-format
+#| msgctxt "@info"
+#| msgid "No keys were found in this attachment"
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "V tejto prílohe neboli nájdené žiadne kľúče"
+
+#: core/attachmentmodel.cpp:384
+#, fuzzy, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "jeden kľúč importovaný"
+msgstr[1] "%1 kľúčov importovaných"
+msgstr[2] "%1 kľúčov importovaných"
+
+#: core/attachmentmodel.cpp:389
+#, fuzzy, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "jeden kľúč už bol importovaný"
+msgstr[1] "%1 kľúčov už bolo importovaných"
+msgstr[2] "%1 kľúčov už bolo importovaných"
+
+#: core/messageparser.cpp:47
+#, fuzzy, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "neznámy kľúč"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ""
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, fuzzy, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Chybný šifrovací modul."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Nenájdený vhodný šifrovací modul."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Šifrovací modul \"%1\" nemôže dešifrovať správy."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Šifrovací modul %1 nemohol odšifrovať údaje."
+
+#: core/messagepart.cpp:865
+#, fuzzy, kde-format
+msgid "Error: %1"
+msgstr "Chyba: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, fuzzy, kde-format
+#| msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Šifrovací modul \"%1\" nemôže dešifrovať správy."
+
+#: core/partmodel.cpp:582
+#, fuzzy, kde-format
+#| msgid "The message is encrypted for the following keys:"
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Správa je šifrovaná pre nasledujúce kľúče:"
+msgstr[1] "Správa je šifrovaná pre nasledujúce kľúče:"
+msgstr[2] "Správa je šifrovaná pre nasledujúce kľúče:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Nesprávne heslo."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Nemôžem spustiť manažéra certifikátov. Prosím overte si inštaláciu."
+
+#: core/utils.cpp:45
+#, fuzzy, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "neznámy kľúč"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Prehliadač správ"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Predmet:"
+
+#: quick/qml/MailViewer.qml:98
+#, fuzzy, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Od:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Odosielateľ:"
+
+#: quick/qml/MailViewer.qml:130
+#, fuzzy, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Pre"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kópia:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Skrytá kópia:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Uložiť prílohu"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Uložiť prílohu ako"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr ""
+
+#: quick/qml/private/Banner.qml:188
+#, fuzzy, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zavrieť"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Vyskytla sa chyba: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Tento e-mail obsahuje pozvánku"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "odoslané %1 na %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, fuzzy, kde-format
+#| msgid "This message is encrypted but we don't have the key for it."
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Táto správa je zašifrovaná, ale nemáme k nej kľúč."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, fuzzy, kde-format
+#| msgid "This message is encrypted."
+msgid "This message is encrypted for: %1"
+msgstr "Táto správa je šifrovaná."
+
+#: widgets/messagecontainerwidget.cpp:141
+#, fuzzy, kde-format
+#| msgid "This message is encrypted but we don't have the key for it."
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr "Táto správa je zašifrovaná, ale nemáme k nej kľúč."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Táto správa je šifrovaná."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, fuzzy, kde-format
+#| msgid "The message is encrypted for the following keys:"
+msgid "The message is encrypted for the following recipients:"
+msgstr "Správa je šifrovaná pre nasledujúce kľúče:"
+
+#: widgets/messageviewer.cpp:66
+#, fuzzy, kde-format
+#| msgid "Save Attachment As"
+msgid "&Save Attachment As…"
+msgstr "Uložiť prílohu ako"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Otvoriť"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr ""
+
+#: widgets/messageviewer.cpp:105
+#, fuzzy, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "bez mena"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Uložiť prílohu ako"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Pozvánka"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "Súhrn:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "Organizátor:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "U&miestnenie:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Dátum z&ačiatku:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Dátum &konca:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Podrobnosti:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr ""
+
+#: widgets/messageviewer.cpp:307
+#, fuzzy, kde-format
+msgid "From:"
+msgstr "Od:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Dátum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Predmet:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Odosielateľ:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Odosielateľ:"
+
+#: widgets/messageviewer.cpp:394
+#, fuzzy, kde-format
+msgid "&To:"
+msgstr "Pre"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "Kópia:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "Skrytá kópia:"
+
+#: widgets/messageviewer.cpp:403
+#, fuzzy, kde-format
+#| msgid "Date:"
+msgid "&Date:"
+msgstr "Dátum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, fuzzy, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Súbor"
+
+#: widgets/messageviewerdialog.cpp:130
+#, fuzzy, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Uložiť"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Náhľad tlače"
+
+#: widgets/messageviewerdialog.cpp:148
+#, fuzzy, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "&Tlačiť"
+
+#: widgets/messageviewerdialog.cpp:155
+#, fuzzy, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Ovládanie"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Predchádzajúca správa"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Nasledujúca správa"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Uložiť súbor"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Súbor %1 nie je možné vytvoriť."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, fuzzy, kde-format
+#| msgid "Error saving message"
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Chyba pri ukladaní správy"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Súbor %1 nie je možné vytvoriť."
+
+#: widgets/messageviewerdialog.cpp:231
+#, fuzzy, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "&Tlačiť"
+
+#: widgets/messageviewerdialog.cpp:243
+#, fuzzy, kde-format
+#| msgctxt "@action:inmenu"
+#| msgid "Print Preview"
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Náhľad tlače"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr ""
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The key details are not available."
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Podrobnosti o kľúči nie sú k dispozícii."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1."
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The key was revoked."
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Platnosť kľúča bola zrušená."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The key has expired."
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Platnosť kľúča vypršala."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The key has expired."
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Platnosť kľúča vypršala."
+
+#, fuzzy
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Podpis nie je platný."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key <a href=\"%1\">%2</a>."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča <a href=\"%1\">%2</a>."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key <a href=\"%1\">%2</a>."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča <a href=\"%1\">%2</a>."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1."
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča %1."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The <a href=\"%1\">key</a> was revoked."
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "Platnosť <a href=\"%1\">kľúča</a> bola zrušená."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "The <a href=\"%1\">key</a> was revoked."
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Platnosť <a href=\"%1\">kľúča</a> bola zrušená."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid, but the <a href=\"%1\">key</a>'s validity is "
+#~| "unknown."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Podpis je platný, ale bezpečnosť <a href=\"%1\">kľúča</a> nie je známa."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">key</a> is marginally "
+#~| "trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr "Podpis je platný a <a href=\"%1\">kľúč</a> je čiastočne bezpečný."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">key</a> is fully trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "Podpis je platný a <a href=\"%1\">kľúč</a> je plne bezpečný."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid and the <a href=\"%1\">key</a> is ultimately "
+#~| "trusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr "Podpis je platný a <a href=\"%1\">kľúč</a> je nekonečne bezpečný."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid ""
+#~| "The signature is valid, but the <a href=\"%1\">key</a> is untrusted."
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Podpis je platný, ale <a href=\"%1\">kľúč</a> nie je považovaný za "
+#~ "bezpečný."
+
+#, fuzzy
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Chybová správa KMail"
+
+#, fuzzy
+#~| msgctxt "@info:status"
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Správa je šifrovaná pre nasledujúce kľúče:"
+#~ msgstr[1] "Správa je šifrovaná pre nasledujúce kľúče:"
+#~ msgstr[2] "Správa je šifrovaná pre nasledujúce kľúče:"
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "This message has been signed using the key %1 by %2."
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Táto správa bola podpísaná pomocou kľúča %1 od %2."
+
+#, fuzzy
+#~| msgctxt "@label"
+#~| msgid "You are trusting this key."
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Tomuto kľúču dôverujete."
+
+#, fuzzy
+#~| msgid "This message is encrypted to the key: %1"
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Táto správa je zašifrovaná kľúčom: %1"
+
+#, fuzzy
+#~| msgctxt "@info:status"
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Správa je šifrovaná pre nasledujúce kľúče:"
+
+#, fuzzy
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Tlačiť dokument"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Uložiť prílohu ako..."
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importovať kľúč"
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023 Matjaž Jeran <matjaz.jeran@amis.net>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 05:34+0200\n"
+"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
+"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Generator: Poedit 3.4.4\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Ime"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Velikost"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Šifrirano"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Podpisano"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Shranjevanje priloge ni uspelo."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "priloga"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Priponke ni bilo mogoče zapisati za odpiranje."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Priponke ni bilo mogoče odpreti."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "V tej prilogi ni bilo najdenih nobenih ključev"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "%1 ključ uvožen"
+msgstr[1] "%1 ključa uvožena"
+msgstr[2] "%1 ključi uvoženi"
+msgstr[3] "%1 ključev uvoženo"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "%1 ključ je že uvožen"
+msgstr[1] "%1 ključa sta že uvožena"
+msgstr[2] "%1 ključi so že uvoženi"
+msgstr[3] "%1 ključev je že uvoženih"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Neznan"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Napačen kripto vtičnik."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Ni najdenega ustreznega kripto-vtičnika."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Kripto-vtičnik \"%1\" ne more dešifrirati sporočil."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Kripto-vtičnik \"%1\" ni mogel dešifrirati podatkov."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Napaka: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Ne morete dešifrirati tega sporočila."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Sporočilo je šifrirano za naslednje prejemnike:"
+msgstr[1] "Sporočilo je šifrirano za naslednjega prejemnika:"
+msgstr[2] "Sporočilo je šifrirano za naslednje prejemnike:"
+msgstr[3] "Sporočilo je šifrirano za naslednje prejemnike:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Napačno geslo."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Ni bilo mogoče zagnati upravljalnika potrdil. Preverite vašo namestitev."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Neznan ključ"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Pregledovalnik sporočil"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Zadeva:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Od:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Pošiljatelj:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Za:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kp:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Skp:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Shrani prilogo"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Shrani prilogo kot"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Uvozi potrdilo"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zapri"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Prišlo je do napake: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Ta pošta vsebuje povabilo"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "poslal %1 dne %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "To sporočilo je šifrirano, a nimate ustreznega skrivnega ključa zanj."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "To sporočilo je šifrirano za: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"To sporočilo je šifrirano v skladu z VS-NfD, vendar nimate ustreznega "
+"skrivnega ključa zanj."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "To sporočilo je šifrirano v skladu z VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "To sporočilo je šifrirano."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Sporočilo je šifrirano za naslednje prejemnike:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Shrani prilogo kot…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Odpri"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Uvozi javni ključ"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "neimenovana"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Shrani prilogo kot"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Povabilo"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "Povzetek:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizator:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Lokacija:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Datum začetka:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Datum konca:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "Po&drobnosti:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Enkapsulirano e-poštno sporočilo"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Od:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "Predmet:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "Od:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Pošiljatelj:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "Za:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "Kp:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "Skp:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Datum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "Datoteka"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Shrani"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Shrani dešifrirano"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Natisni predogled"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Tiskaj"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigacija"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Prejšnje sporočilo"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Naslednje sporočilo"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "Poštne datoteke (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Šifrirane datoteke S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Shrani datoteko"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Datoteke %1 ni bilo mogoče ustvariti."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Napaka pri shranjevanju sporočila"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Shrani dešifrirano datoteko"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Datoteke %1 ni bilo mogoče ustvariti."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Tiskaj"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Natisni predogled"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Ni mogoče prebrati datoteke"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "To sporočilo je bilo podpisano s potrdilom %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Podrobnosti potrdila niso na voljo."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "To sporočilo je podpisal %1s potrdilom %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "To potrdilo je bil preklicano."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "To potrdilo je poteklo."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "To potrdilo je potrjeno."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Ta podpis je neveljaven."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "To sporočilo je bilo podpisano ustrezno z VS-NfD s potrdilom <a href="
+#~ "\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "To sporočilo je bilo podpisano s potrdilom <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "To sporočilo je bilo podpisano ustrezno z VS-NfD %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "To sporočilo je bilo podpisano s %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Potrdilo</a> je bil preklicano."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Potrdilo</a> je poteklo."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Podpis je veljaven, a veljavnost <a href=\"%1\">potrdila</a> je neznana."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Podpis je veljaven in <a href=\"%1\">potrdilo</a> je le malo zaupanja "
+#~ "vredno."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Podpis je veljaven in <a href=\"%1\">potrdilo</a> je vsega zaupanja "
+#~ "vredno."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Podpis je veljaven in <a href=\"%1\">potrdilo</a> je končno vredno "
+#~ "zaupanja."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "Podpis je veljaven, a <a href=\"%1\">potrdilo</a> ni potrjeno."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Napaka KMaila"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Tega sporočila ni mogoče dešifrirati z nobenim potrdilom S/MIME v vašem "
+#~ "obesku ključev."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Tega sporočila ni mogoče dešifrirati z nobenim potrdilom OpenPGP v vašem "
+#~ "obesku ključev."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Sporočilo je šifrirano za naslednji ključ:"
+#~ msgstr[1] "Sporočilo je šifrirano za naslednja ključa:"
+#~ msgstr[2] "Sporočilo je šifrirano za naslednje ključe:"
+#~ msgstr[3] "Sporočilo je šifrirano za naslednje ključe:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "To sporočilo je s potrdilom %1 podpisal %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Temu potrdilu zaupate."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "To sporočilo je šifrirano na potrdilo: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Sporočilo je šifrirano za naslednja potrdila:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Tiskaj dokument"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Shrani priloge kot..."
+
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "Poštne datoteke (*.eml *.mbox *mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Uvozi ključ"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Ni tajnega ključa za dešifriranje sporočila."
+
+#~ msgid "Unknown key"
+#~ msgstr "Neznan ključ"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Ključ ni na voljo."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Ni uspelo ustvariti začasne datoteke."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Priponka shranjena na disk: %1"
+
+#~ msgid "fwd"
+#~ msgstr "naprej"
+
+#~ msgid "re"
+#~ msgstr "odg"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr ""
+#~ "Podatkov ni bilo mogoče dešifrirati: ključ za prejemnike ni bil najden."
--- /dev/null
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Stefan Asserhäll <stefan.asserhall@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 08:02+0200\n"
+"Last-Translator: Stefan Asserhäll <stefan.asserhall@gmail.com>\n"
+"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 24.05.2\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Namn"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Storlek"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Krypterad"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Signerad"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Misslyckades spara bilaga."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "bilaga"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Misslyckades skriva bilaga för att öppna den."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Misslyckades öppna bilaga."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Inga certifikat hittades i den här bilagan"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "ett certifikat importerat"
+msgstr[1] "%1 certifikat importerade"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "en certifikat har redan importerats"
+msgstr[1] "%1 certifikat har redan importerats"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Okänd"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Felaktigt kryptoinsticksprogram."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Inget lämpligt kryptoinsticksprogram hittades."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Kryptoinsticksprogrammet \"%1\" kan inte dekryptera några brev."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Kryptoinsticksprogrammet \"%1\" kunde inte dekryptera data."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Fel: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Du kan inte avkoda brevet."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Brevet är krypterat för följande mottagare:"
+msgstr[1] "Brevet är krypterat för följande mottagare:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Felaktig lösenordsfras."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Kunde inte starta certifikathanteraren. Kontrollera installationen."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Okänd nyckel"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Brevvisning"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Rubrik:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Från:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Avsändare:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Till:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kopia:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Dold kopia:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Spara bilaga"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Spara bilaga som"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Importera certifikat"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Stäng"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Ett fel uppstod: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Brevet innehåller en inbjudan"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "skickat av %1 %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "Brevet är krypterat men du har inte en motsvarande hemlig nyckel."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Brevet är krypterat för: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Brevet är krypterat VS-NfD kompatibelt men du har inte en motsvarande hemlig "
+"nyckel."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Brevet är krypterat VS-NfD kompatibelt."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Brevet är krypterat."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Brevet är krypterat för följande mottagare:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "&Spara bilaga som…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Öppna"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Importera öppen nyckel"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "namnlös"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Spara bilaga som"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Inbjudan"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Sammanfattning:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organisatör:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Plats:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Startdatum:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Slut&datum:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Detaljinformation:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Inbäddat brev"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Från:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Datum:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Rubrik:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Från:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "Av&sändare:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Till:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Kopia:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Dold kopia:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Datum:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Arkiv"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Spara"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Spara avkrypterad"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Förhandsgranskning av utskrift"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Skriv &ut"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Navigering"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Föregående brev"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Nästa brev"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-postfiler (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Krypterade S/MIME-filer (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Spara fil"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Filen %1 kunde inte skapas."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Fel när brev skulle sparas"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Spara avkrypterad fil"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Filen %1 kunde inte skapas."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Skriv ut"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Förhandsgranska utskrift"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Kan inte läsa filen"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Brevet har signerats med certifikat %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Certifikatinformationen är inte tillgänglig."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Brevet har signerats av %1 med certifikat %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Certifikatet har återkallats."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Certifikatet har gått ut."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Certifikatet är certifierat."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Signaturen är ogiltig."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Brevet har signerats VS-NfD kompatibelt med användning av certifikatet <a "
+#~ "href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Brevet har signerats med användning av certifikat <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Brevet har signerats VS-NfD kompatibelt av %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Brevet har signerats av %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Certifikatet</a> har återkallats."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Certifikatet</a> har gått ut."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Signaturen är giltig, men <a href=\"%1\">certifikatets</a> giltighet är "
+#~ "okänd."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Signaturen är giltig och <a href=\"%1\">certifikatet</a> är möjligen "
+#~ "pålitligt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr ""
+#~ "Signaturen är giltig och <a href=\"%1\">certifikatet</a> är pålitligt."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Signaturen är giltig och <a href=\"%1\">certifikatet</a> är fullständigt "
+#~ "pålitlig."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr ""
+#~ "Signaturen är giltig, men <a href=\"%1\">certifikatet</a> är inte "
+#~ "certifierat."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Kmail-fel"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Brevet kan inte avkodas med något S/MIME-certifikat i din nyckelring."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Brevet kan inte avkodas med något OpenPGP-certifikat i din nyckelring."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Brevet är krypterat för följande certifikat:"
+#~ msgstr[1] "Brevet är krypterat för följande certifikat:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Brevet har signerats med användning av certifikat %1 av %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Du litar på det här certifikatet."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Brevet är krypterat med certifikatet: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Brevet är krypterat för följande certifikat:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Skriv ut dokument"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Spara bilaga som..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "E-postfiler (*mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Importera nyckel"
+
+#, fuzzy
+#~| msgid "The message is encrypted for the following keys:"
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Brevet är krypterat för följande nycklar:"
+
+#~ msgid "Unknown key"
+#~ msgstr "Okänd nyckel"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Ingen nyckel tillgänglig."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Sparade bilaga på disk: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "sv"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr "Kunde inte dekryptera data. Ingen nyckel hittades för mottagarna."
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Emir SARI <emir_sari@icloud.com>
+# Emir SARI <emir_sari@icloud.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 14:12+0300\n"
+"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
+"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 24.11.70\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Ad"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Boyut"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Şifreli"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "İmzalı"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Ek kaydedilemedi."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "ek"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Ek, açılmak üzere yazılamadı."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Ek açılamadı."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "Bu ekte hiçbir sertifika bulunamadı"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "1 sertifika içe aktarıldı"
+msgstr[1] "%1 sertifika içe aktarıldı"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "1 sertifika halihazırda içe aktarılmıştı"
+msgstr[1] "%1 sertifika halihazırda içe aktarılmıştı"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Yanlış kripto eklentisi."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Uygun kripto eklentisi bulunamadı."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Kripto eklentisi “%1”, iletilerin şifresini çözemez."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Kripto eklentisi “%1”, verinin şifresini çözemedi."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Hata: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Bu iletinin şifresini çözemezsiniz."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "İleti, şu alıcı için şifrelendi:"
+msgstr[1] "İleti, şu alıcılar için şifrelendi:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Yanlış anahtar parolası."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "Sertifika yöneticisi başlatılamadı. Lütfen kurulumunuzu denetleyin."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Bilinmeyen anahtar"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " — "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "İleti Görüntüleyicisi"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Konu:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Kimden:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Gönderen:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Kime:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Kopya:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Gizli kopya:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Eki Kaydet"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Eki Farklı Kaydet"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Sertifika İçe Aktar"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Kapat"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Bir hata oluştu: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "Bu ileti, bir davet içeriyor"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "%1 tarafından %2 tarihinde gönderildi"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "İleti şifreli; ancak sizde eşleşen bir gizli anahtar yok."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Bu ileti şuna şifreli: %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Bu ileti, VS-NfD uyumlu olarak şifrelendi; ancak sizde eşleşen bir gizli "
+"anahtar yok."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Bu ileti, VS-NfD uyumlu olarak şifrelendi."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Bu ileti şifreli."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "İleti, şu alıcılar için şifrelendi:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "Eki &Farklı Kaydet…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Aç"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Genel Anahtar İçe Aktar"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "adsız"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Eki Farklı Kaydet"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Davet"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Özet:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Organizatör:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Konum:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "&Başlangıç tarihi:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "B&itiş tarihi:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Ayrıntılar:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Kapsüllenmiş E-posta"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Kimden:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Tarih:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "K&onu:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Kimden:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "&Gönderen:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "Kim&e:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Kopya:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Gizli kopya:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Tarih:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Dosya"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Kaydet"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Şifresi Çözülmüş Kaydet"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Yazdırma Önizlemesi"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "Ya&zdır"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Dolaşım"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Önceki İleti"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Sonraki İleti"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "E-posta dosyaları (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "Şifreli S/MIME dosyaları (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Dosyayı Kaydet"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "%1 dosyası oluşturulamadı."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "İleti Kaydedilirken Hata"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Şifresi Çözülmüş Dosya Kaydet"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "%1 dosyası oluşturulamadı."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Yazdır"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Yazdırma Önizlemesi"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Dosya okunamıyor"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Bu ileti, %1 sertifikasıyla imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Sertifika ayrıntıları kullanılabilir değil."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Bu ileti, %1 tarafından %2 sertifikasıyla imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Sertifika yürürlükten kaldırıldı."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Sertifikanın süresi doldu."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Sertifika sertifikalı."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "İmza geçersiz."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Bu ileti, <a href=\"%1\">%2</a> sertifikası kullanılarak VS-NfD uyumlu "
+#~ "olarak imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "Bu ileti, <a href=\"%1\">%2</a> sertifikası kullanılarak imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Bu ileti, %1 tarafından VS-NfD uyumlu olarak imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Bu ileti, %1 tarafından imzalandı."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Sertifika</a> yürürlükten kaldırıldı."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "<a href=\"%1\">Sertifikanın</a> süresi doldu."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "İmza geçerli; ancak <a href=\"%1\">sertifikanın</a> geçerliliği "
+#~ "bilinmiyor."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "İmza geçerli; ancak <a href=\"%1\">sertifikaya</a> pek az güveniliyor."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "İmza geçerli ve <a href=\"%1\">sertifikaya</a> güveniliyor."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "İmza geçerli ve <a href=\"%1\">sertifikaya</a> en yüksek düzeyde "
+#~ "güveniliyor."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "İmza geçerli; ancak <a href=\"%1\">sertifikaya</a> güvenilmiyor."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "K Posta Hatası"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Bu iletinin şifresi, anahtar zincirinizdeki hiçbir S/MIME sertifikasıyla "
+#~ "çözülemiyor."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Bu iletinin şifresi, anahtar zincirinizdeki hiçbir OpenPGP sertifikasıyla "
+#~ "çözülemiyor."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "İleti, şu sertifika için şifrelendi:"
+#~ msgstr[1] "İleti, şu sertifikalar için şifrelendi:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Bu ileti, %2 tarafından %1 sertifikası kullanılarak imzalandı."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Bu sertifikaya güveniyorsunuz."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Bu ileti, şu sertifikayla şifrelendi: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "İleti, şu sertifikalar için şifrelendi:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Belgeyi Yazdır"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "Eki Farklı &Kaydet..."
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "E-posta dosyaları (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Anahtar İçe Aktar"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "İletinin şifresini çözmek için bir gizli anahtar bulunamadı."
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Kullanılabilir anahtar yok."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Geçici dosya oluşturulamadı."
--- /dev/null
+# Copyright (C) YEAR This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2023, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-02 09:25+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 23.04.3\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "Назва"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "Розмір"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "Зашифровано"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "Підписано"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "Не вдалося зберегти долучення."
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "долучення"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "Не вдалося записати долучення для відкриття."
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "Не вдалося відкрити долучення."
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "У цьому долученні не було знайдено сертифікатів"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "імпортовано %1 сертифікат"
+msgstr[1] "імпортовано %1 сертифікати"
+msgstr[2] "імпортовано %1 сертифікатів"
+msgstr[3] "імпортовано %1 сертифікат"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "%1 сертифікат вже імпортовано"
+msgstr[1] "%1 сертифікати вже імпортовано"
+msgstr[2] "%1 сертифікатів вже імпортовано"
+msgstr[3] "%1 сертифікат вже імпортовано"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "Невідомо"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ", "
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "Неправильний додаток шифрування."
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "Не знайдено відповідного додатка шифрування."
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "Додатку шифрування «%1» не вдалося розшифрувати повідомлення."
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "Додатку шифрування «%1» не вдалося розшифрувати дані."
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "Помилка: %1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "Ви не можете розшифрувати це повідомлення."
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "Повідомлення зашифровано для таких отримувачів:"
+msgstr[1] "Повідомлення зашифровано для таких отримувачів:"
+msgstr[2] "Повідомлення зашифровано для таких отримувачів:"
+msgstr[3] "Повідомлення зашифровано для такого отримувача:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "Неправильний пароль."
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+"Не вдається запустити програму керування сертифікатами. Будь ласка, "
+"перевірте, чи належним чином встановлено програму."
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "Невідомий ключ"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "Перегляд повідомлень"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "Тема:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "Від:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "Відправник:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "Кому:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "Копія:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "Прих.копія:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "Зберегти долучення"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "Зберегти долучення як"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "Імпортувати сертифікат"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Закрити"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "Сталася помилка: %1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "У цьому повідомленні міститься запрошення"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "надіслано %1, %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+"Це повідомлення зашифровано, але у нас немає відповідного закритого ключа."
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "Це повідомлення зашифровано для %1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+"Це повідомлення зашифровано відповідно до VS-NfD, але у вас немає "
+"відповідного закритого ключа."
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "Це повідомлення зашифровано відповідно до VS-NfD."
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "Це повідомлення зашифровано."
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "Повідомлення зашифровано для таких отримувачів:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "З&берегти долучення як…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "Відкрити"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "Імпортувати відкритий ключ"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "без назви"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "Зберегти долучення як"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "Запрошення"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "&Резюме:"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "&Організатор:"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "&Розташування:"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "Дата &початку:"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "Дата за&кінчення:"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "&Подробиці:"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "Вбудовано повідомлення"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "Від:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "Дата:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "&Тема:"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "&Від:"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "В&ідправник:"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "&Кому:"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "&Копія:"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "&Пр. копія:"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "&Дата:"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "&Файл"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "&Зберегти"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "Зберегти розшифрований файл"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "Перегляд друку"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "На&друкувати"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "&Навігація"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "Попереднє повідомлення"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "Наступне повідомлення"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "файли пошти (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "шифровані файли S/MIME (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "Збереження файла"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "Не вдалося створити файл %1."
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "Помилка під час спроби збереження повідомлення"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "Збереження розшифрованого файла"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "Не вдалося створити файл %1."
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "Друк"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "Перегляд друку"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "Не вдалося прочитати дані з файла"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "Це повідомлення підписано за допомогою сертифіката %1."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "Подробиці щодо сертифіката недоступні."
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "Це повідомлення підписано за %1 допомогою сертифіката %2."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "Сертифікат відкликано."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "Термін дії сертифіката минув."
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "Сертифікат засвідчено."
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "Підпис є некоректним."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Це повідомлення підписано відповідно до VS-NfD за допомогою сертифіката "
+#~ "<a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr ""
+#~ "Це повідомлення підписано за допомогою сертифіката <a href=\"%1\">%2</a>."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "Це повідомлення підписано відповідно до VS-NfD %1."
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "Це повідомлення підписано %1."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "<a href=\"%1\">Сертифікат</a> відкликано."
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "Строк дії <a href=\"%1\">сертифіката</a> вичерпано."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr ""
+#~ "Підпис є чинним, але надійність <a href=\"%1\">сертифіката</a> є "
+#~ "невідомою."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr ""
+#~ "Підпис коректний, надійність <a href=\"%1\">сертифіката</a> є обмеженою."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "Підпис коректний, надійність <a href=\"%1\">сертифіката</a> повна."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr ""
+#~ "Підпис коректний, надійність <a href=\"%1\">сертифіката</a> необмежена."
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "Підпис коректний, але <a href=\"%1\">сертифікат</a> не є надійним."
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "Помилка KMail"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Це повідомлення не можна розшифрувати з використанням будь-якого з "
+#~ "сертифікатів S/MIME у вашому сховищі ключів."
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr ""
+#~ "Це повідомлення не можна розшифрувати з використанням будь-якого з "
+#~ "сертифікатів OpenPGP у вашому сховищі ключів."
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "Повідомлення зашифровано для таких сертифікатів:"
+#~ msgstr[1] "Повідомлення зашифровано для таких сертифікатів:"
+#~ msgstr[2] "Повідомлення зашифровано для таких сертифікатів:"
+#~ msgstr[3] "Повідомлення зашифровано для такого сертифіката:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "Це повідомлення підписано за допомогою сертифіката %1 %2."
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "Ви довіряєте цьому сертифікату."
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "Це повідомлення зашифровано таким сертифікатом: %1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "Повідомлення зашифровано для такого сертифіката:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "Друк документа"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "&Зберегти долучення як…"
+
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "файли пошти (*.eml *.mbox *.mime)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "Імпортувати ключ"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "Не знайдено закритого ключа для розшифровування повідомлення."
+
+#~ msgid "Unknown key"
+#~ msgstr "Невідомий ключ"
+
+#~ msgctxt "@info:status"
+#~ msgid "No key available."
+#~ msgstr "Немає доступних ключів."
+
+#~ msgctxt "@info"
+#~ msgid "Failed to create temporary file."
+#~ msgstr "Не вдалося створити тимчасовий файл."
+
+#~ msgctxt "@info"
+#~ msgid "Saved the attachment to disk: %1"
+#~ msgstr "Збереження долучення на диску: %1"
+
+#~ msgid "fwd"
+#~ msgstr "fwd"
+
+#~ msgid "re"
+#~ msgstr "re"
+
+#~ msgctxt "@info"
+#~ msgid "Could not decrypt the data: no key found for recipients."
+#~ msgstr "Не вдалося розшифрувати дані. Не знайдено ключа для отримувачів."
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeorg\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-04-22 15:58\n"
+"Last-Translator: \n"
+"Language-Team: Chinese Simplified\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Crowdin-Project: kdeorg\n"
+"X-Crowdin-Project-ID: 269464\n"
+"X-Crowdin-Language: zh-CN\n"
+"X-Crowdin-File: /kf6-stable/messages/mimetreeparser/mimetreeparser6.pot\n"
+"X-Crowdin-File-ID: 51844\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "名称"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "大小"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "已加密"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "已签名"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "无法保存附件。"
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr ""
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "无法打开附件。"
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr ""
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] ""
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] ""
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr ""
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr ""
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "错误的加密插件。"
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "没有找到合适的加密算法插件。"
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "加密算法插件“%1”无法解密任何信件。"
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "加密插件“%1”无法解密数据。"
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "错误:%1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr ""
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] ""
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "密码错误。"
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr ""
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr ""
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr ""
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "消息查看器"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "主题:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "发件人:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "发送者:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "收件人:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr ""
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "保存附件"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr ""
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr ""
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "关闭"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "发生错误:%1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "此邮件包含一个邀请"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "由 %1 发送于 %2"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr ""
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr ""
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr ""
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "打开"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "导入公钥"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr ""
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr ""
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "邀请"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "摘要(&S):"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "组织者(&O):"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "地点(&L):"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "开始日期(&S):"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "结束日期(&E):"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "详细信息(&D):"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "封装的信件"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "发件人:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "日期:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "主题(&S):"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "发件人(&F):"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "收件人(&T):"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr ""
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr ""
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr ""
--- /dev/null
+# Copyright (C) 2023 This file is copyright:
+# This file is distributed under the same license as the mimetreeparser package.
+#
+# SPDX-FileCopyrightText: 2023, 2024 Kisaragi Hiu <mail@kisaragi-hiu.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mimetreeparser\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2024-11-30 02:30+0000\n"
+"PO-Revision-Date: 2024-08-06 05:24+0900\n"
+"Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n"
+"Language-Team: Traditional Chinese <zh-l10n@lists.slat.org>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 24.04.70\n"
+
+#: core/attachmentmodel.cpp:202
+#, kde-format
+msgctxt "@title:column"
+msgid "Name"
+msgstr "名稱"
+
+#: core/attachmentmodel.cpp:204
+#, kde-format
+msgctxt "@title:column"
+msgid "Size"
+msgstr "大小"
+
+#: core/attachmentmodel.cpp:206
+#, kde-format
+msgctxt "@title:column"
+msgid "Encrypted"
+msgstr "已加密"
+
+#: core/attachmentmodel.cpp:208
+#, kde-format
+msgctxt "@title:column"
+msgid "Signed"
+msgstr "已簽署"
+
+#: core/attachmentmodel.cpp:301
+#, kde-format
+msgctxt "@info"
+msgid "Failed to save attachment."
+msgstr "儲存附件時失敗。"
+
+#: core/attachmentmodel.cpp:324
+#, kde-format
+msgid "attachment"
+msgstr "附件"
+
+#: core/attachmentmodel.cpp:331
+#, kde-format
+msgctxt "@info"
+msgid "Failed to write attachment for opening."
+msgstr "無法開啟附件以供寫入。"
+
+#: core/attachmentmodel.cpp:350 core/attachmentmodel.cpp:360
+#, kde-format
+msgctxt "@info"
+msgid "Failed to open attachment."
+msgstr "開啟附件失敗。"
+
+#: core/attachmentmodel.cpp:381
+#, kde-format
+msgctxt "@info"
+msgid "No certificates were found in this attachment"
+msgstr "附件中未找到憑證。"
+
+#: core/attachmentmodel.cpp:384
+#, kde-format
+msgctxt "@info"
+msgid "one certificate imported"
+msgid_plural "%1 certificates imported"
+msgstr[0] "已匯入 %1 個憑證"
+
+#: core/attachmentmodel.cpp:389
+#, kde-format
+msgctxt "@info"
+msgid "one certificate was already imported"
+msgid_plural "%1 certificates were already imported"
+msgstr[0] "%1 個憑證原本就已匯入"
+
+#: core/messageparser.cpp:47
+#, kde-format
+msgctxt "Displayed when a CC, FROM or TO field in an email is empty"
+msgid "Unknown"
+msgstr "未知"
+
+#: core/messageparser.cpp:52
+#, kde-format
+msgctxt "list separator"
+msgid ", "
+msgstr "、"
+
+#: core/messagepart.cpp:622 core/messagepart.cpp:638 core/messagepart.cpp:710
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong Crypto Plug-In."
+msgstr "錯誤的加密外掛程式。"
+
+#: core/messagepart.cpp:860
+#, kde-format
+msgid "No appropriate crypto plug-in was found."
+msgstr "沒有找到合適的加密外掛程式。"
+
+#: core/messagepart.cpp:862
+#, kde-format
+msgid "Crypto plug-in \"%1\" cannot decrypt messages."
+msgstr "加密外掛程式 \"%1\" 無法解密信件。"
+
+#: core/messagepart.cpp:864
+#, kde-format
+msgid "Crypto plug-in \"%1\" could not decrypt the data."
+msgstr "加密外掛程式 \"%1\" 無法解密資料。"
+
+#: core/messagepart.cpp:865
+#, kde-format
+msgid "Error: %1"
+msgstr "錯誤:%1"
+
+#: core/partmodel.cpp:574 core/partmodel.cpp:576
+#, kde-format
+msgctxt "@info:status"
+msgid "You cannot decrypt this message."
+msgstr "您無法解密此信件。"
+
+#: core/partmodel.cpp:582
+#, kde-format
+msgctxt "@info:status"
+msgid "The message is encrypted for the following recipient:"
+msgid_plural "The message is encrypted for the following recipients:"
+msgstr[0] "這個信件為以下收件者加密:"
+
+#: core/partmodel.cpp:596
+#, kde-format
+msgctxt "@info:status"
+msgid "Wrong passphrase."
+msgstr "錯誤密碼。"
+
+#: core/urlhandler.cpp:47
+#, kde-format
+msgid "Could not start certificate manager. Please check your installation."
+msgstr "無法啟動憑證管理員。請檢查您的安裝。"
+
+#: core/utils.cpp:45
+#, kde-format
+msgctxt "@info"
+msgid "Unknown Key"
+msgstr "未知的金鑰"
+
+#: core/utils.cpp:59
+#, kde-format
+msgctxt "Separator"
+msgid " - "
+msgstr " - "
+
+#: quick/qml/MailViewer.qml:40
+#, kde-format
+msgctxt "@title:window"
+msgid "Message viewer"
+msgstr "信件檢視器"
+
+#: quick/qml/MailViewer.qml:77
+#, kde-format
+msgctxt "@label"
+msgid "Subject:"
+msgstr "主旨:"
+
+#: quick/qml/MailViewer.qml:98
+#, kde-format
+msgctxt "@label"
+msgid "From:"
+msgstr "從:"
+
+#: quick/qml/MailViewer.qml:114
+#, kde-format
+msgctxt "@label"
+msgid "Sender:"
+msgstr "寄件者:"
+
+#: quick/qml/MailViewer.qml:130
+#, kde-format
+msgctxt "@label"
+msgid "To:"
+msgstr "收件者:"
+
+#: quick/qml/MailViewer.qml:146
+#, kde-format
+msgctxt "@label"
+msgid "CC:"
+msgstr "副本:"
+
+#: quick/qml/MailViewer.qml:162
+#, kde-format
+msgctxt "@label"
+msgid "BCC:"
+msgstr "密件副本:"
+
+#: quick/qml/MailViewer.qml:219
+#, kde-format
+msgctxt "@action:button"
+msgid "Save attachment"
+msgstr "儲存附件"
+
+#: quick/qml/MailViewer.qml:242
+#, kde-format
+msgctxt "@window:title"
+msgid "Save Attachment As"
+msgstr "另存附件"
+
+#: quick/qml/private/AttachmentDelegate.qml:56
+#, kde-format
+msgctxt "@action:button"
+msgid "Import certificate"
+msgstr "匯入憑證"
+
+#: quick/qml/private/Banner.qml:188
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "關閉"
+
+#: quick/qml/private/ErrorPart.qml:27
+#, kde-format
+msgid "An error occurred: %1"
+msgstr "發生錯誤:%1"
+
+#: quick/qml/private/ICalPart.qml:27
+#, kde-format
+msgid "This mail contains an invitation"
+msgstr "這個郵件包含邀請"
+
+#: quick/qml/private/MailPart.qml:42
+#, kde-format
+msgctxt "@info"
+msgid "sent by %1 on %2"
+msgstr "由 %1 於 %2 傳送"
+
+#: quick/qml/private/MailPartModel.qml:95
+#: widgets/messagecontainerwidget.cpp:143
+#, kde-format
+msgid "This message is encrypted but you don't have a matching secret key."
+msgstr "這個信件已加密,但您未持有相符的密鑰。"
+
+#: quick/qml/private/MailPartModel.qml:95
+#, kde-format
+msgid "This message is encrypted for: %1"
+msgstr "此信件已加密給:%1"
+
+#: widgets/messagecontainerwidget.cpp:141
+#, kde-format
+msgid ""
+"This message is VS-NfD compliant encrypted but you don't have a matching "
+"secret key."
+msgstr "這個信件已依 VS-NfD 規範加密,但您未持有相符的密鑰。"
+
+#: widgets/messagecontainerwidget.cpp:148
+#, kde-format
+msgid "This message is VS-NfD compliant encrypted."
+msgstr "這個信件已依 VS-NfD 規範加密。"
+
+#: widgets/messagecontainerwidget.cpp:150
+#, kde-format
+msgid "This message is encrypted."
+msgstr "此信件已加密。"
+
+#: widgets/messagecontainerwidget.cpp:159
+#, kde-format
+msgid "The message is encrypted for the following recipients:"
+msgstr "這個信件為以下收件者加密:"
+
+#: widgets/messageviewer.cpp:66
+#, kde-format
+msgid "&Save Attachment As…"
+msgstr "另存附件(&S)…"
+
+#: widgets/messageviewer.cpp:71
+#, kde-format
+msgctxt "to open"
+msgid "Open"
+msgstr "開啟"
+
+#: widgets/messageviewer.cpp:76
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Import public key"
+msgstr "匯入公鑰"
+
+#: widgets/messageviewer.cpp:105
+#, kde-format
+msgctxt "Fallback when file has no name"
+msgid "unnamed"
+msgstr "未命名"
+
+#: widgets/messageviewer.cpp:108
+#, kde-format
+msgid "Save Attachment As"
+msgstr "另存附件"
+
+#: widgets/messageviewer.cpp:266
+#, kde-format
+msgid "Invitation"
+msgstr "邀請"
+
+#: widgets/messageviewer.cpp:269
+#, kde-format
+msgid "&Summary:"
+msgstr "摘要(&S):"
+
+#: widgets/messageviewer.cpp:270
+#, kde-format
+msgid "&Organizer:"
+msgstr "發起人(&O):"
+
+#: widgets/messageviewer.cpp:272
+#, kde-format
+msgid "&Location:"
+msgstr "位置(&L):"
+
+#: widgets/messageviewer.cpp:274
+#, kde-format
+msgid "&Start date:"
+msgstr "開始日期(&S):"
+
+#: widgets/messageviewer.cpp:276
+#, kde-format
+msgid "&End date:"
+msgstr "結束日期(&E):"
+
+#: widgets/messageviewer.cpp:279
+#, kde-format
+msgid "&Details:"
+msgstr "詳細資料(&D):"
+
+#: widgets/messageviewer.cpp:299
+#, kde-format
+msgid "Encapsulated email"
+msgstr "封裝郵件"
+
+#: widgets/messageviewer.cpp:307
+#, kde-format
+msgid "From:"
+msgstr "從:"
+
+#: widgets/messageviewer.cpp:308
+#, kde-format
+msgid "Date:"
+msgstr "日期:"
+
+#: widgets/messageviewer.cpp:385
+#, kde-format
+msgid "&Subject:"
+msgstr "主旨(&S):"
+
+#: widgets/messageviewer.cpp:388
+#, kde-format
+msgid "&From:"
+msgstr "從(&F):"
+
+#: widgets/messageviewer.cpp:391
+#, kde-format
+msgid "&Sender:"
+msgstr "寄件者(&S):"
+
+#: widgets/messageviewer.cpp:394
+#, kde-format
+msgid "&To:"
+msgstr "收件者(&T):"
+
+#: widgets/messageviewer.cpp:397
+#, kde-format
+msgid "&CC:"
+msgstr "副本(&C):"
+
+#: widgets/messageviewer.cpp:400
+#, kde-format
+msgid "&BCC:"
+msgstr "密件副本(&B):"
+
+#: widgets/messageviewer.cpp:403
+#, kde-format
+msgid "&Date:"
+msgstr "日期(&D):"
+
+#: widgets/messageviewerdialog.cpp:128
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&File"
+msgstr "檔案(&F)"
+
+#: widgets/messageviewerdialog.cpp:130
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Save"
+msgstr "儲存(&S)"
+
+#: widgets/messageviewerdialog.cpp:136
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Save Decrypted"
+msgstr "儲存已解密的"
+
+#: widgets/messageviewerdialog.cpp:142
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "Print Preview"
+msgstr "預覽列印"
+
+#: widgets/messageviewerdialog.cpp:148
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Print"
+msgstr "列印(&P)"
+
+#: widgets/messageviewerdialog.cpp:155
+#, kde-format
+msgctxt "@action:inmenu"
+msgid "&Navigation"
+msgstr "導覽(&N)"
+
+#: widgets/messageviewerdialog.cpp:156
+#, kde-format
+msgctxt "@action:button Previous email"
+msgid "Previous Message"
+msgstr "上一封信件"
+
+#: widgets/messageviewerdialog.cpp:160
+#, kde-format
+msgctxt "@action:button Next email"
+msgid "Next Message"
+msgstr "下一封信件"
+
+#: widgets/messageviewerdialog.cpp:180 widgets/messageviewerdialog.cpp:186
+#: widgets/messageviewerdialog.cpp:208
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Email files (*.eml *.mbox *.mime)"
+msgstr "電子郵件檔 (*.eml *.mbox *.mime)"
+
+#: widgets/messageviewerdialog.cpp:182
+#, kde-format
+msgctxt "File dialog accepted files"
+msgid "Encrypted S/MIME files (*.p7m)"
+msgstr "已加密的 S/MIME 檔案 (*.p7m)"
+
+#: widgets/messageviewerdialog.cpp:190
+#, kde-format
+msgctxt "@title:window"
+msgid "Save File"
+msgstr "儲存檔案"
+
+#: widgets/messageviewerdialog.cpp:196
+#, kde-format
+msgid "File %1 could not be created."
+msgstr "檔案 %1 無法被建立。"
+
+#: widgets/messageviewerdialog.cpp:196 widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "@title:window"
+msgid "Error saving message"
+msgstr "儲存信件時發生錯誤"
+
+#: widgets/messageviewerdialog.cpp:206
+#, kde-format
+msgctxt "@title:window"
+msgid "Save Decrypted File"
+msgstr "儲存已解密的檔案"
+
+#: widgets/messageviewerdialog.cpp:212
+#, kde-format
+msgctxt "Error message"
+msgid "File %1 could not be created."
+msgstr "檔案 %1 無法被建立。"
+
+#: widgets/messageviewerdialog.cpp:231
+#, kde-format
+msgctxt "@title:window"
+msgid "Print"
+msgstr "列印"
+
+#: widgets/messageviewerdialog.cpp:243
+#, kde-format
+msgctxt "@title:window"
+msgid "Print Preview"
+msgstr "預覽列印"
+
+#: widgets/messageviewerdialog.cpp:295
+#, kde-format
+msgctxt "@info"
+msgid "Unable to read file"
+msgstr "無法讀取檔案"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed with certificate %1."
+#~ msgstr "這個信件已用憑證 %1 簽署。"
+
+#~ msgctxt "@info"
+#~ msgid "The certificate details are not available."
+#~ msgstr "憑證詳細資料不可用。"
+
+#~ msgctxt "@info"
+#~ msgid "This message was signed by %1 with certificate %2."
+#~ msgstr "這個信件已由 %1 使用憑證 %2 簽署。"
+
+#~ msgctxt "@info"
+#~ msgid "The certificate was revoked."
+#~ msgstr "此憑證已撤銷。"
+
+#~ msgctxt "@info"
+#~ msgid "The certificate has expired."
+#~ msgstr "此憑證已過期。"
+
+#~ msgctxt "@info"
+#~ msgid "The certificate is certified."
+#~ msgstr "此憑證已保證。"
+
+#~ msgctxt "@info"
+#~ msgid "The signature is invalid."
+#~ msgstr "簽章無效。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed VS-NfD compliant using the certificate <a "
+#~ "href=\"%1\">%2</a>."
+#~ msgstr "這個信件已使用憑證 <a href=\"%1\">%2</a> 依 VS-NfD 規範簽署。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "This message has been signed using the certificate <a href=\"%1\">%2</a>."
+#~ msgstr "這個信件已使用憑證 <a href=\"%1\">%2</a> 簽署。"
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed VS-NfD compliant by %1."
+#~ msgstr "這個信件已由 %1 依 VS-NfD 規範簽署。"
+
+#~ msgctxt "@info"
+#~ msgid "This message has been signed by %1."
+#~ msgstr "這個信件已由 %1 簽署。"
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> was revoked."
+#~ msgstr "此<a href=\"%1\">憑證</a>已撤銷。"
+
+#~ msgctxt "@info"
+#~ msgid "The <a href=\"%1\">certificate</a> is expired."
+#~ msgstr "此<a href=\"%1\">憑證</a>已過期。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a>'s validity "
+#~ "is unknown."
+#~ msgstr "此簽章是有效的,但是無法辨識<a href=\"%1\">憑證</a>是否有效。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "marginally trusted."
+#~ msgstr "此簽章是有效的,而且<a href=\"%1\">憑證</a>有最低的可信度。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is fully "
+#~ "trusted."
+#~ msgstr "此簽章是有效的,而且<a href=\"%1\">憑證</a>完全可信。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid and the <a href=\"%1\">certificate</a> is "
+#~ "ultimately trusted."
+#~ msgstr "此簽章是有效的,而且<a href=\"%1\">憑證</a>絕對可信。"
+
+#~ msgctxt "@info"
+#~ msgid ""
+#~ "The signature is valid, but the <a href=\"%1\">certificate</a> is not "
+#~ "certified."
+#~ msgstr "此簽章是有效的,不過<a href=\"%1\">憑證</a>不可信。"
+
+#~ msgctxt "@title:window"
+#~ msgid "KMail Error"
+#~ msgstr "KMail 錯誤"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any S/MIME certificate in your "
+#~ "keyring."
+#~ msgstr "這個信件無法使用您的鑰匙圈當中的任何 S/MIME 憑證解密。"
+
+#~ msgctxt "@info:status"
+#~ msgid ""
+#~ "This message cannot be decrypted with any OpenPGP certificate in your "
+#~ "keyring."
+#~ msgstr "這個信件無法使用您的鑰匙圈當中的任何 OpenPGP 憑證解密。"
+
+#~ msgctxt "@info:status"
+#~ msgid "The message is encrypted for the following certificate:"
+#~ msgid_plural "The message is encrypted for the following certificates:"
+#~ msgstr[0] "這個信件為以下憑證加密:"
+
+#~ msgctxt "@label"
+#~ msgid "This message has been signed using the certificate %1 by %2."
+#~ msgstr "這個信件已由 %2 使用憑證 %1 簽署。"
+
+#~ msgctxt "@label"
+#~ msgid "You are trusting this certificate."
+#~ msgstr "您正信任此憑證。"
+
+#~ msgid "This message is encrypted to the certificate: %1"
+#~ msgstr "這個信件已加密給憑證:%1"
+
+#~ msgid "The message is encrypted for the following certificates:"
+#~ msgstr "這個信件為以下憑證加密:"
+
+#~ msgctxt "@title:window"
+#~ msgid "Print Document"
+#~ msgstr "列印文件"
+
+#~ msgid "&Save Attachment As..."
+#~ msgstr "另存附件(&S)..."
+
+#, fuzzy
+#~| msgctxt "File dialog accepted files"
+#~| msgid "Email files (*.eml *.mbox)"
+#~ msgctxt "File dialog accepted files"
+#~ msgid "Email files (*.eml *.mbox *mime)"
+#~ msgstr "電子郵件檔 (*.eml *.mbox)"
+
+#~ msgctxt "@action:button"
+#~ msgid "Import key"
+#~ msgstr "匯入金鑰"
+
+#~ msgctxt "@info:status"
+#~ msgid "No secret key found to decrypt the message."
+#~ msgstr "沒有找到解密信件用的私鑰。"
--- /dev/null
+# Analyzing Build Performance
+
+For debug build time:
+We need ClangBuildAnalyzer
+`
+git clone https://github.com/aras-p/ClangBuildAnalyzer
+mkdir build
+cd build
+cmake -DCMAKE_INSTALL_PREFIX=<path> ../
+make install
+`
+
+## Command line
+
+cmake -preset ftime-trace
+
+ClangBuildAnalyzer --start $PWD/build-ftime-trace
+cmake --build --preset ftime-trace
+
+ClangBuildAnalyzer --stop $PWD/build-ftime-trace build-ftime.txt
+
+ClangBuildAnalyzer --analyze build-ftime.txt > analyze-build-ftime.txt
+
+
+see https://aras-p.info/blog/2019/09/28/Clang-Build-Analyzer/
+
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_definitions(-DTRANSLATION_DOMAIN=\"mimetreeparser6\")
+add_subdirectory(core)
+
+if(Qt6Quick_FOUND)
+ add_subdirectory(quick)
+endif()
+
+if(Qt6Widgets_FOUND)
+ add_subdirectory(widgets)
+endif()
+
--- /dev/null
+#! /usr/bin/env bash
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
+# SPDX-License-Identifier: CC0-1.0
+
+$XGETTEXT `find -name \*.cpp -o -name \*.qml` -o $podir/mimetreeparser6.pot
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+ecm_setup_version(PROJECT
+ VARIABLE_PREFIX MIMETREEPARSER_CORE
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_core_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserCoreConfigVersion.cmake"
+ SOVERSION 6
+)
+
+# public dynamic library
+
+
+add_library(KPim6MimeTreeParserCore)
+add_library(KPim6::MimeTreeParserCore
+ ALIAS KPim6MimeTreeParserCore
+)
+
+ecm_qt_declare_logging_category(KPim6MimeTreeParserCore
+ HEADER mimetreeparser_core_debug.h
+ IDENTIFIER MIMETREEPARSER_CORE_LOG
+ CATEGORY_NAME org.kde.pim.mimetreeparser.core
+ DESCRIPTION "mimetreeparser (pim lib)"
+ EXPORT MIMETREEPARSERNG
+)
+
+target_sources(KPim6MimeTreeParserCore PRIVATE
+ errors.h
+ attachmentmodel.h
+ bodypartformatter.h
+ bodypartformatterbasefactory.h
+ bodypartformatterbasefactory_p.h
+ cryptohelper.h
+ enums.h
+ fileopener.h
+ htmlutils.h
+ messageparser.h
+ messagepart.h
+ objecttreeparser.h
+ partmetadata.h
+ partmodel.h
+ urlhandler.h
+ utils.h
+ attachmentmodel.cpp
+ bodypartformatter.cpp
+ bodypartformatter_impl.cpp
+ bodypartformatterbasefactory.cpp
+ cryptohelper.cpp
+ fileopener.cpp
+ htmlutils.cpp
+ messageparser.cpp
+ messagepart.cpp
+ objecttreeparser.cpp
+ partmodel.cpp
+ urlhandler.cpp
+ utils.cpp
+)
+
+if(COMPILE_WITH_UNITY_CMAKE_SUPPORT)
+ set_target_properties(KPim6MimeTreeParserCore PROPERTIES UNITY_BUILD ON)
+endif()
+generate_export_header(KPim6MimeTreeParserCore BASE_NAME mimetreeparser_core)
+
+
+target_include_directories(KPim6MimeTreeParserCore
+ INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserCore>")
+
+target_link_libraries(KPim6MimeTreeParserCore
+PUBLIC
+ KPim6::Mime
+ KPim6::Libkleo
+ Gpgmepp
+ Qt::Gui
+PRIVATE
+ KPim6::Mbox
+ KF6::I18n
+)
+
+set_target_properties(KPim6MimeTreeParserCore PROPERTIES
+ VERSION ${MIMETREEPARSERNG_VERSION}
+ SOVERSION ${MIMETREEPARSERNG_SOVERSION}
+ EXPORT_NAME MimeTreeParserCore
+)
+
+ecm_generate_pri_file(BASE_NAME MimeTreeParserCore
+ LIB_NAME KPim6MimeTreeParserCore
+ DEPS "MimeTreeParserCore"
+ FILENAME_VAR PRI_FILENAME
+)
+
+install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
+
+install(TARGETS
+ KPim6MimeTreeParserCore
+ EXPORT KPim6MimeTreeParserCoreTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
+)
+
+ecm_generate_headers(MimeTreeParserCore_CamelCase_HEADERS
+ HEADER_NAMES
+ AttachmentModel
+ CryptoHelper
+ Errors
+ FileOpener
+ MessageParser
+ MessagePart
+ ObjectTreeParser
+ PartModel
+ PartMetaData
+ Enums
+ UrlHandler
+ REQUIRED_HEADERS MimeTreeParserCore_HEADERS
+ PREFIX MimeTreeParserCore
+)
+
+install(FILES
+ ${MimeTreeParserCore_CamelCase_HEADERS}
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserCore/MimeTreeParserCore
+ COMPONENT Devel
+)
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_core_export.h
+ ${MimeTreeParserCore_HEADERS}
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserCore/mimetreeparsercore
+ COMPONENT Devel
+)
+
+if(BUILD_QCH)
+ ecm_add_qch(
+ KPim6MimeTreeParserCore_QCH
+ NAME MimeTreeParserCore
+ BASE_NAME KPim6MimeTreeParserCore
+ VERSION ${PIM_VERSION}
+ ORG_DOMAIN org.kde
+ # using only public headers, to cover only public API
+ SOURCES ${MimeTreeParserCore_HEADERS}
+ MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
+ LINK_QCHS
+ Qt6Core_QCH
+ INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ BLANK_MACROS
+ MIMETREEPARSERCORE_EXPORT
+ TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ COMPONENT Devel
+ )
+endif()
+
+########### CMake Config Files ###########
+set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KPim6MimeTreeParserCore")
+
+if(BUILD_QCH)
+ ecm_install_qch_export(
+ TARGETS KPim6MimeTreeParserCore_QCH
+ FILE KPim6MimeTreeParserCoreQchTargets.cmake
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+ )
+ set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KPim6MimeTreeParserCoreQchTargets.cmake\")")
+endif()
+
+configure_package_config_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/KPimMimeTreeParserCoreConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserCoreConfig.cmake"
+ INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
+)
+
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserCoreConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserCoreConfigVersion.cmake"
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+)
+
+install(EXPORT KPim6MimeTreeParserCoreTargets
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ FILE KPim6MimeTreeParserCoreTargets.cmake
+ NAMESPACE KPim6::
+)
--- /dev/null
+# SPDX-FileCopyrightText: none
+# SPDX-License-Identifier: BSD-3-Clause
+
+@PACKAGE_INIT@
+include(CMakeFindDependencyMacro)
+
+find_dependency(KF6I18n "@KF_MIN_VERSION@")
+find_dependency(KPim6Mime "@KPIM_MIME_VERSION@")
+find_dependency(KPim6Mbox "@KPIM_MBOX_VERSION@")
+
+include("${CMAKE_CURRENT_LIST_DIR}/KPim6MimeTreeParserCoreTargets.cmake")
+@PACKAGE_INCLUDE_QCHTARGETS@
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-FileCopyCopyright: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "attachmentmodel.h"
+
+#include "mimetreeparser_core_debug.h"
+
+#include <QGpgME/ImportJob>
+#include <QGpgME/Protocol>
+
+#include <KLocalizedString>
+#include <KMime/Content>
+
+#include <QDesktopServices>
+#include <QDir>
+#include <QFile>
+#include <QGuiApplication>
+#include <QIcon>
+#include <QMimeDatabase>
+#include <QMimeType>
+#include <QRegularExpression>
+#include <QStandardPaths>
+#include <QTemporaryDir>
+#include <QUrl>
+
+#ifdef Q_OS_WIN
+#include <cstdio>
+#include <string>
+#include <vector>
+#include <windows.h>
+#endif
+
+namespace
+{
+
+QString sizeHuman(float size)
+{
+ QStringList list;
+ list << QStringLiteral("KB") << QStringLiteral("MB") << QStringLiteral("GB") << QStringLiteral("TB");
+
+ QStringListIterator i(list);
+ QString unit = QStringLiteral("Bytes");
+
+ while (size >= 1024.0 && i.hasNext()) {
+ unit = i.next();
+ size /= 1024.0;
+ }
+
+ if (unit == QLatin1StringView("Bytes")) {
+ return QString().setNum(size) + QStringLiteral(" ") + unit;
+ } else {
+ return QString().setNum(size, 'f', 2) + QStringLiteral(" ") + unit;
+ }
+}
+
+// SPDX-SnippetBegin
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: GPL-3.0-only
+
+#define WINDOWS_DEVICES_PATTERN "(CON|AUX|PRN|NUL|COM[1-9]|LPT[1-9])(\\..*)?"
+
+// Naming a file like a device name will break on Windows, even if it is
+// "com1.txt". Since we are cross-platform, we generally disallow such file
+// names.
+const QRegularExpression &windowsDeviceNoSubDirPattern()
+{
+ static const QRegularExpression rc(QStringLiteral("^" WINDOWS_DEVICES_PATTERN "$"), QRegularExpression::CaseInsensitiveOption);
+ Q_ASSERT(rc.isValid());
+ return rc;
+}
+
+const QRegularExpression &windowsDeviceSubDirPattern()
+{
+ static const QRegularExpression rc(QStringLiteral("^.*[/\\\\]" WINDOWS_DEVICES_PATTERN "$"), QRegularExpression::CaseInsensitiveOption);
+ Q_ASSERT(rc.isValid());
+ return rc;
+}
+
+/* Validate a file base name, check for forbidden characters/strings. */
+
+#define SLASHES "/\\"
+
+static const char notAllowedCharsSubDir[] = ",^@={}[]~!?:&*\"|#%<>$\"'();`' ";
+static const char notAllowedCharsNoSubDir[] = ",^@={}[]~!?:&*\"|#%<>$\"'();`' " SLASHES;
+
+static const char *notAllowedSubStrings[] = {".."};
+
+bool validateFileName(const QString &name, bool allowDirectories)
+{
+ if (name.isEmpty()) {
+ return false;
+ }
+
+ // Characters
+ const char *notAllowedChars = allowDirectories ? notAllowedCharsSubDir : notAllowedCharsNoSubDir;
+ for (const char *c = notAllowedChars; *c; c++) {
+ if (name.contains(QLatin1Char(*c))) {
+ return false;
+ }
+ }
+
+ // Substrings
+ const int notAllowedSubStringCount = sizeof(notAllowedSubStrings) / sizeof(const char *);
+ for (int s = 0; s < notAllowedSubStringCount; s++) {
+ const QLatin1StringView notAllowedSubString(notAllowedSubStrings[s]);
+ if (name.contains(notAllowedSubString)) {
+ return false;
+ }
+ }
+
+ // Windows devices
+ bool matchesWinDevice = name.contains(windowsDeviceNoSubDirPattern());
+ if (!matchesWinDevice && allowDirectories) {
+ matchesWinDevice = name.contains(windowsDeviceSubDirPattern());
+ }
+ return !matchesWinDevice;
+}
+// SPDX-SnippetEnd
+}
+
+#ifdef Q_OS_WIN
+struct WindowFile {
+ std::wstring fileName;
+ std::wstring dirName;
+ HANDLE handle;
+};
+#endif
+
+class AttachmentModelPrivate
+{
+public:
+ AttachmentModelPrivate(AttachmentModel *q_ptr, const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser);
+
+ AttachmentModel *q;
+ QMimeDatabase mimeDb;
+ std::shared_ptr<MimeTreeParser::ObjectTreeParser> mParser;
+ MimeTreeParser::MessagePart::List mAttachments;
+
+#ifdef Q_OS_WIN
+ std::vector<WindowFile> mOpenFiles;
+#endif
+};
+
+AttachmentModelPrivate::AttachmentModelPrivate(AttachmentModel *q_ptr, const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser)
+ : q(q_ptr)
+ , mParser(parser)
+{
+ mAttachments = mParser->collectAttachmentParts();
+}
+
+AttachmentModel::AttachmentModel(std::shared_ptr<MimeTreeParser::ObjectTreeParser> parser)
+ : QAbstractTableModel()
+ , d(std::unique_ptr<AttachmentModelPrivate>(new AttachmentModelPrivate(this, parser)))
+{
+}
+
+AttachmentModel::~AttachmentModel()
+{
+#ifdef Q_OS_WIN
+ for (const auto &file : d->mOpenFiles) {
+ // As owner of the file we need to close our handle first
+ // With FILE_SHARE_DELETE we have ensured that all _other_ processes must
+ // have opened the file with FILE_SHARE_DELETE, too.
+ if (!CloseHandle(file.handle)) {
+ // Always get the last error before calling any Qt functions that may
+ // use Windows system calls.
+ DWORD err = GetLastError();
+ qWarning() << "Unable to close handle for file" << QString::fromStdWString(file.fileName) << err;
+ }
+
+ if (!DeleteFileW(file.fileName.c_str())) {
+ DWORD err = GetLastError();
+ qWarning() << "Unable to delete file" << QString::fromStdWString(file.fileName) << err;
+ }
+
+ if (!RemoveDirectoryW(file.dirName.c_str())) {
+ DWORD err = GetLastError();
+ qWarning() << "Unable to delete temporary directory" << QString::fromStdWString(file.dirName) << err;
+ }
+ }
+#endif
+}
+
+QHash<int, QByteArray> AttachmentModel::roleNames() const
+{
+ return {
+ {TypeRole, QByteArrayLiteral("type")},
+ {NameRole, QByteArrayLiteral("name")},
+ {SizeRole, QByteArrayLiteral("size")},
+ {IconRole, QByteArrayLiteral("iconName")},
+ {IsEncryptedRole, QByteArrayLiteral("encrypted")},
+ {IsSignedRole, QByteArrayLiteral("signed")},
+ };
+}
+
+QVariant AttachmentModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
+ switch (section) {
+ case NameColumn:
+ return i18ndc("mimetreeparser", "@title:column", "Name");
+ case SizeColumn:
+ return i18ndc("mimetreeparser", "@title:column", "Size");
+ case IsEncryptedColumn:
+ return i18ndc("mimetreeparser", "@title:column", "Encrypted");
+ case IsSignedColumn:
+ return i18ndc("mimetreeparser", "@title:column", "Signed");
+ }
+ }
+ return {};
+}
+
+QVariant AttachmentModel::data(const QModelIndex &index, int role) const
+{
+ const auto row = index.row();
+ const auto column = index.column();
+
+ const auto part = d->mAttachments.at(row);
+ Q_ASSERT(part);
+ auto node = part->node();
+ if (!node) {
+ qWarning() << "no content for attachment";
+ return {};
+ }
+ const auto mimetype = d->mimeDb.mimeTypeForName(QString::fromLatin1(part->mimeType()));
+ const auto content = node->encodedContent();
+
+ switch (column) {
+ case NameColumn:
+ switch (role) {
+ case TypeRole:
+ return mimetype.name();
+ case Qt::DisplayRole:
+ case NameRole:
+ return part->filename();
+ case IconRole:
+ return mimetype.iconName();
+ case Qt::DecorationRole:
+ return QIcon::fromTheme(mimetype.iconName());
+ case SizeRole:
+ return sizeHuman(content.size());
+ case IsEncryptedRole:
+ return part->encryptions().size() > 0;
+ case IsSignedRole:
+ return part->signatures().size() > 0;
+ case AttachmentPartRole:
+ return QVariant::fromValue(part);
+ default:
+ return {};
+ }
+ case SizeColumn:
+ switch (role) {
+ case Qt::DisplayRole:
+ return sizeHuman(content.size());
+ default:
+ return {};
+ }
+ case IsEncryptedColumn:
+ switch (role) {
+ case Qt::CheckStateRole:
+ return part->encryptions().size() > 0 ? Qt::Checked : Qt::Unchecked;
+ default:
+ return {};
+ }
+ case IsSignedColumn:
+ switch (role) {
+ case Qt::CheckStateRole:
+ return part->signatures().size() > 0 ? Qt::Checked : Qt::Unchecked;
+ default:
+ return {};
+ }
+ default:
+ return {};
+ }
+}
+
+QString AttachmentModel::saveAttachmentToPath(const int row, const QString &path)
+{
+ const auto part = d->mAttachments.at(row);
+ return saveAttachmentToPath(part, path);
+}
+
+QString AttachmentModel::saveAttachmentToPath(const MimeTreeParser::MessagePart::Ptr &part, const QString &path)
+{
+ Q_ASSERT(part);
+ auto node = part->node();
+ auto data = node->decodedContent();
+ // This is necessary to store messages embedded messages (EncapsulatedRfc822MessagePart)
+ if (data.isEmpty()) {
+ data = node->encodedContent();
+ }
+ if (part->isText()) {
+ // convert CRLF to LF before writing text attachments to disk
+ data = KMime::CRLFtoLF(data);
+ }
+
+ QFile f(path);
+ if (!f.open(QIODevice::WriteOnly)) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Failed to write attachment to file:" << path << " Error: " << f.errorString();
+ Q_EMIT errorOccurred(i18ndc("mimetreeparser", "@info", "Failed to save attachment."));
+ return {};
+ }
+ f.write(data);
+ f.close();
+ qCInfo(MIMETREEPARSER_CORE_LOG) << "Wrote attachment to file: " << path;
+ return path;
+}
+
+bool AttachmentModel::openAttachment(const int row)
+{
+ const auto part = d->mAttachments.at(row);
+ return openAttachment(part);
+}
+
+bool AttachmentModel::openAttachment(const MimeTreeParser::MessagePart::Ptr &message)
+{
+ QString fileName = message->filename();
+ QTemporaryDir tempDir(QDir::tempPath() + QLatin1Char('/') + qGuiApp->applicationName() + QStringLiteral(".XXXXXX"));
+ // TODO: We need some cleanup here. Otherwise the files will stay forever on Windows.
+ tempDir.setAutoRemove(false);
+ if (message->filename().isEmpty() || !validateFileName(fileName, false)) {
+ const auto mimetype = d->mimeDb.mimeTypeForName(QString::fromLatin1(message->mimeType()));
+ fileName = tempDir.filePath(i18n("attachment") + QLatin1Char('.') + mimetype.preferredSuffix());
+ } else {
+ fileName = tempDir.filePath(message->filename());
+ }
+
+ const auto filePath = saveAttachmentToPath(message, fileName);
+ if (filePath.isEmpty()) {
+ Q_EMIT errorOccurred(i18ndc("mimetreeparser", "@info", "Failed to write attachment for opening."));
+ return false;
+ }
+
+#ifdef Q_OS_WIN
+ std::wstring fileNameStr = filePath.toStdWString();
+
+ HANDLE hFile = CreateFileW(fileNameStr.c_str(),
+ GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_DELETE, // allow other processes to delete it
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, // Using FILE_FLAG_DELETE_ON_CLOSE causes some
+ // applications like windows zip not to open the
+ // file.
+ NULL // no template
+ );
+
+ if (hFile == INVALID_HANDLE_VALUE) {
+ Q_EMIT errorOccurred(i18ndc("mimetreeparser", "@info", "Failed to open attachment."));
+ QFile file(fileName);
+ file.remove();
+ return false;
+ }
+
+ d->mOpenFiles.push_back({fileNameStr, tempDir.path().toStdWString(), hFile});
+#endif
+
+ if (!QDesktopServices::openUrl(QUrl::fromLocalFile(filePath))) {
+ Q_EMIT errorOccurred(i18ndc("mimetreeparser", "@info", "Failed to open attachment."));
+ return false;
+ }
+
+ return true;
+}
+
+bool AttachmentModel::importPublicKey(const int row)
+{
+ const auto part = d->mAttachments.at(row);
+ return importPublicKey(part);
+}
+
+bool AttachmentModel::importPublicKey(const MimeTreeParser::MessagePart::Ptr &part)
+{
+ Q_ASSERT(part);
+ const QByteArray certData = part->node()->decodedContent();
+ QGpgME::ImportJob *importJob = QGpgME::openpgp()->importJob();
+
+ connect(importJob, &QGpgME::AbstractImportJob::result, this, [this](const GpgME::ImportResult &result) {
+ if (result.numConsidered() == 0) {
+ Q_EMIT errorOccurred(i18ndc("mimetreeparser", "@info", "No certificates were found in this attachment"));
+ return;
+ } else {
+ QString message = i18ndcp("mimetreeparser", "@info", "one certificate imported", "%1 certificates imported", result.numImported());
+ if (result.numUnchanged() != 0) {
+ message += QStringLiteral("\n")
+ + i18ndcp("mimetreeparser",
+ "@info",
+ "one certificate was already imported",
+ "%1 certificates were already imported",
+ result.numUnchanged());
+ }
+ Q_EMIT info(message);
+ }
+ });
+ GpgME::Error err = importJob->start(certData);
+ return !err;
+}
+
+int AttachmentModel::rowCount(const QModelIndex &parent) const
+{
+ if (!parent.isValid()) {
+ return d->mAttachments.size();
+ }
+ return 0;
+}
+
+int AttachmentModel::columnCount(const QModelIndex &parent) const
+{
+ if (!parent.isValid()) {
+ return ColumnCount;
+ }
+ return 0;
+}
+
+#include "moc_attachmentmodel.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-FileCopyCopyright: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_core_export.h"
+#include "objecttreeparser.h"
+#include <QAbstractTableModel>
+#include <QModelIndex>
+
+#include <memory>
+
+namespace MimeTreeParser
+{
+class ObjectTreeParser;
+}
+class AttachmentModelPrivate;
+
+class MIMETREEPARSER_CORE_EXPORT AttachmentModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ explicit AttachmentModel(std::shared_ptr<MimeTreeParser::ObjectTreeParser> parser);
+ ~AttachmentModel() override;
+
+public:
+ enum Roles {
+ TypeRole = Qt::UserRole + 1,
+ IconRole,
+ NameRole,
+ SizeRole,
+ IsEncryptedRole,
+ IsSignedRole,
+ AttachmentPartRole,
+ };
+
+ enum Columns {
+ NameColumn = 0,
+ SizeColumn,
+ IsEncryptedColumn,
+ IsSignedColumn,
+ ColumnCount,
+ };
+
+ [[nodiscard]] QHash<int, QByteArray> roleNames() const override;
+ [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ [[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+
+ Q_INVOKABLE bool openAttachment(const int row);
+ Q_INVOKABLE bool importPublicKey(const int row);
+
+ bool openAttachment(const MimeTreeParser::MessagePart::Ptr &message);
+ bool importPublicKey(const MimeTreeParser::MessagePart::Ptr &message);
+
+ Q_INVOKABLE QString saveAttachmentToPath(const int row, const QString &path);
+ [[nodiscard]] QString saveAttachmentToPath(const MimeTreeParser::MessagePart::Ptr &part, const QString &path);
+
+Q_SIGNALS:
+ void info(const QString &message);
+ void errorOccurred(const QString &message);
+
+private:
+ std::unique_ptr<AttachmentModelPrivate> d;
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "bodypartformatter.h"
+
+using namespace MimeTreeParser::Interface;
+
+namespace MimeTreeParser
+{
+namespace Interface
+{
+
+MessagePart::Ptr BodyPartFormatter::process(ObjectTreeParser *otp, KMime::Content *node) const
+{
+ Q_UNUSED(otp)
+ Q_UNUSED(node)
+ return {};
+}
+
+QList<MessagePart::Ptr> BodyPartFormatter::processList(ObjectTreeParser *otp, KMime::Content *node) const
+{
+ if (auto p = process(otp, node)) {
+ return {p};
+ }
+ return {};
+}
+
+}
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2004 Marc Mutz <mutz@kde.org>
+// SPDX-FileCopyrightText: 2004 Ingo Kloecker <kloecker@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "messagepart.h"
+
+namespace KMime
+{
+class Content;
+}
+
+namespace MimeTreeParser
+{
+class ObjectTreeParser;
+
+namespace Interface
+{
+
+class BodyPart;
+
+class BodyPartFormatter
+{
+public:
+ virtual ~BodyPartFormatter()
+ {
+ }
+
+ virtual MessagePart::Ptr process(ObjectTreeParser *otp, KMime::Content *node) const;
+ virtual QList<MessagePart::Ptr> processList(ObjectTreeParser *otp, KMime::Content *node) const;
+};
+
+} // namespace Interface
+
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include "mimetreeparser_core_debug.h"
+
+#include "bodypartformatter.h"
+
+#include "bodypartformatterbasefactory.h"
+#include "bodypartformatterbasefactory_p.h"
+
+#include "messagepart.h"
+#include "objecttreeparser.h"
+#include "utils.h"
+
+#include <KMime/Content>
+#include <QGpgME/Protocol>
+
+using namespace MimeTreeParser;
+using namespace MimeTreeParser::Interface;
+
+namespace MimeTreeParser
+{
+class AnyTypeBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+};
+
+class MessageRfc822BodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ return MessagePart::Ptr(new EncapsulatedRfc822MessagePart(objectTreeParser, node, node->bodyAsMessage()));
+ }
+};
+
+class HeadersBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ return MessagePart::Ptr(new HeadersPart(objectTreeParser, node));
+ }
+};
+
+class MultiPartRelatedBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ QList<MessagePart::Ptr> processList(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->contents().isEmpty()) {
+ return {};
+ }
+ // We rely on the order of the parts.
+ // Theoretically there could also be a Start parameter which would break this..
+ // https://tools.ietf.org/html/rfc2387#section-4
+
+ // We want to display attachments even if displayed inline.
+ QList<MessagePart::Ptr> list;
+ list.append(MimeMessagePart::Ptr(new MimeMessagePart(objectTreeParser, node->contents().at(0), true)));
+ for (int i = 1; i < node->contents().size(); i++) {
+ auto p = node->contents().at(i);
+ if (KMime::isAttachment(p)) {
+ list.append(MimeMessagePart::Ptr(new MimeMessagePart(objectTreeParser, p, true)));
+ }
+ }
+ return list;
+ }
+};
+
+class MultiPartMixedBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ auto contents = node->contents();
+ if (contents.isEmpty()) {
+ return {};
+ }
+
+ bool isActuallyMixedEncrypted = false;
+ for (const auto &content : std::as_const(contents)) {
+ if (content->contentType()->mimeType() == QByteArrayLiteral("application/pgp-encrypted")
+ || content->contentType()->mimeType() == QByteArrayLiteral("application/pkcs7-mime")) {
+ isActuallyMixedEncrypted = true;
+ }
+ }
+
+ if (isActuallyMixedEncrypted) {
+ // Remove explaination
+ contents.erase(std::remove_if(contents.begin(),
+ contents.end(),
+ [](const auto content) {
+ return content->contentType()->mimeType() == "text/plain";
+ }),
+ contents.end());
+
+ if (contents.count() == 1 && contents[0]->contentType()->mimeType() == QByteArrayLiteral("application/pkcs7-mime")) {
+ auto data = findTypeInDirectChildren(node, QByteArrayLiteral("application/pkcs7-mime"));
+ auto mp = EncryptedMessagePart::Ptr(new EncryptedMessagePart(objectTreeParser, data->decodedText(), QGpgME::smime(), node, data));
+ mp->setIsEncrypted(true);
+ return mp;
+ }
+
+ if (contents.count() == 2 && contents[1]->contentType()->mimeType() == QByteArrayLiteral("application/octet-stream")) {
+ KMime::Content *data = findTypeInDirectChildren(node, QByteArrayLiteral("application/octet-stream"));
+ auto mp = EncryptedMessagePart::Ptr(new EncryptedMessagePart(objectTreeParser, data->decodedText(), QGpgME::openpgp(), node, data));
+ mp->setIsEncrypted(true);
+ return mp;
+ }
+ }
+
+ // we need the intermediate part to preserve the headers (necessary for with protected headers using multipart mixed)
+ auto part = MessagePart::Ptr(new MessagePart(objectTreeParser, {}, node));
+ part->appendSubPart(MimeMessagePart::Ptr(new MimeMessagePart(objectTreeParser, contents.at(0), false)));
+ return part;
+ }
+};
+
+class ApplicationPGPEncryptedBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->decodedContent().trimmed() != QByteArrayLiteral("Version: 1")) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Unknown PGP Version String:" << node->decodedContent().trimmed();
+ }
+
+ if (!node->parent()) {
+ return MessagePart::Ptr();
+ }
+
+ KMime::Content *data = findTypeInDirectChildren(node->parent(), QByteArrayLiteral("application/octet-stream"));
+
+ if (!data) {
+ return MessagePart::Ptr(); // new MimeMessagePart(objectTreeParser, node));
+ }
+
+ EncryptedMessagePart::Ptr mp(new EncryptedMessagePart(objectTreeParser, data->decodedText(), QGpgME::openpgp(), node, data));
+ mp->setIsEncrypted(true);
+ return mp;
+ }
+};
+
+class ApplicationPkcs7MimeBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->head().isEmpty()) {
+ return MessagePart::Ptr();
+ }
+
+ const QString smimeType = node->contentType()->parameter("smime-type").toLower();
+
+ if (smimeType == QLatin1StringView("certs-only")) {
+ return CertMessagePart::Ptr(new CertMessagePart(objectTreeParser, node, QGpgME::smime()));
+ }
+
+ bool isSigned = (smimeType == QLatin1StringView("signed-data"));
+ bool isEncrypted = (smimeType == QLatin1StringView("enveloped-data"));
+
+ // Analyze "signTestNode" node to find/verify a signature.
+ // If zero part.objectTreeParser verification was successfully done after
+ // decrypting via recursion by insertAndParseNewChildNode().
+ KMime::Content *signTestNode = isEncrypted ? nullptr : node;
+
+ // We try decrypting the content
+ // if we either *know* that it is an encrypted message part
+ // or there is neither signed nor encrypted parameter.
+ MessagePart::Ptr mp;
+ if (!isSigned) {
+ if (isEncrypted) {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime == S/MIME TYPE: enveloped (encrypted) data";
+ } else {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime - type unknown - enveloped (encrypted) data ?";
+ }
+
+ auto _mp = EncryptedMessagePart::Ptr(new EncryptedMessagePart(objectTreeParser, node->decodedText(), QGpgME::smime(), node));
+ mp = _mp;
+ _mp->setIsEncrypted(true);
+ // PartMetaData *messagePart(_mp->partMetaData());
+ // if (!part.source()->decryptMessage()) {
+ // isEncrypted = true;
+ signTestNode = nullptr; // PENDING(marc) to be abs. sure, we'd need to have to look at the content
+ // } else {
+ // _mp->startDecryption();
+ // if (messagePart->isDecryptable) {
+ // qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime - encryption found - enveloped (encrypted) data !";
+ // isEncrypted = true;
+ // part.nodeHelper()->setEncryptionState(node, KMMsgFullyEncrypted);
+ // signTestNode = nullptr;
+
+ // } else {
+ // // decryption failed, which could be because the part was encrypted but
+ // // decryption failed, or because we didn't know if it was encrypted, tried,
+ // // and failed. If the message was not actually encrypted, we continue
+ // // assuming it's signed
+ // if (_mp->passphraseError() || (smimeType.isEmpty() && messagePart->isEncrypted)) {
+ // isEncrypted = true;
+ // signTestNode = nullptr;
+ // }
+
+ // if (isEncrypted) {
+ // qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime - ERROR: COULD NOT DECRYPT enveloped data !";
+ // } else {
+ // qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime - NO encryption found";
+ // }
+ // }
+ // }
+ }
+
+ // We now try signature verification if necessarry.
+ if (signTestNode) {
+ if (isSigned) {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime == S/MIME TYPE: opaque signed data";
+ } else {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "pkcs7 mime - type unknown - opaque signed data ?";
+ }
+
+ return SignedMessagePart::Ptr(new SignedMessagePart(objectTreeParser, QGpgME::smime(), nullptr, signTestNode));
+ }
+ return mp;
+ }
+};
+
+class MultiPartAlternativeBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->contents().isEmpty()) {
+ return MessagePart::Ptr();
+ }
+
+ AlternativeMessagePart::Ptr mp(new AlternativeMessagePart(objectTreeParser, node));
+ if (mp->mChildParts.isEmpty()) {
+ return MimeMessagePart::Ptr(new MimeMessagePart(objectTreeParser, node->contents().at(0)));
+ }
+ return mp;
+ }
+};
+
+class MultiPartEncryptedBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->contents().isEmpty()) {
+ Q_ASSERT(false);
+ return MessagePart::Ptr();
+ }
+
+ const QGpgME::Protocol *protocol = nullptr;
+
+ /*
+ ATTENTION: This code is to be replaced by the new 'auto-detect' feature. --------------------------------------
+ */
+ KMime::Content *data = findTypeInDirectChildren(node, QByteArrayLiteral("application/octet-stream"));
+ if (data) {
+ protocol = QGpgME::openpgp();
+ } else {
+ data = findTypeInDirectChildren(node, QByteArrayLiteral("application/pkcs7-mime"));
+ if (data) {
+ protocol = QGpgME::smime();
+ }
+ }
+ /*
+ ---------------------------------------------------------------------------------------------------------------
+ */
+
+ if (!data) {
+ return MessagePart::Ptr(new MimeMessagePart(objectTreeParser, node->contents().at(0)));
+ }
+
+ EncryptedMessagePart::Ptr mp(new EncryptedMessagePart(objectTreeParser, data->decodedText(), protocol, node, data));
+ mp->setIsEncrypted(true);
+ return mp;
+ }
+};
+
+class MultiPartSignedBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ static const QGpgME::Protocol *detectProtocol(const QString &protocolContentType_, const QString &signatureContentType)
+ {
+ auto protocolContentType = protocolContentType_;
+ if (protocolContentType.isEmpty()) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Message doesn't set the protocol for the multipart/signed content-type, "
+ "using content-type of the signature:"
+ << signatureContentType;
+ protocolContentType = signatureContentType;
+ }
+
+ const QGpgME::Protocol *protocol = nullptr;
+ if (protocolContentType == QLatin1StringView("application/pkcs7-signature")
+ || protocolContentType == QLatin1StringView("application/x-pkcs7-signature")) {
+ protocol = QGpgME::smime();
+ } else if (protocolContentType == QLatin1StringView("application/pgp-signature")
+ || protocolContentType == QLatin1StringView("application/x-pgp-signature")) {
+ protocol = QGpgME::openpgp();
+ }
+ return protocol;
+ }
+
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (node->contents().size() != 2) {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "mulitpart/signed must have exactly two child parts!" << Qt::endl << "processing as multipart/mixed";
+ if (!node->contents().isEmpty()) {
+ return MessagePart::Ptr(new MimeMessagePart(objectTreeParser, node->contents().at(0)));
+ } else {
+ return MessagePart::Ptr();
+ }
+ }
+
+ KMime::Content *signedData = node->contents().at(0);
+ KMime::Content *signature = node->contents().at(1);
+ Q_ASSERT(signedData);
+ Q_ASSERT(signature);
+
+ auto protocol = detectProtocol(node->contentType()->parameter("protocol").toLower(), QLatin1StringView(signature->contentType()->mimeType().toLower()));
+
+ if (!protocol) {
+ return MessagePart::Ptr(new MimeMessagePart(objectTreeParser, signedData));
+ }
+
+ return SignedMessagePart::Ptr(new SignedMessagePart(objectTreeParser, protocol, signature, signedData));
+ }
+};
+
+class TextHtmlBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ return HtmlMessagePart::Ptr(new HtmlMessagePart(objectTreeParser, node));
+ }
+};
+
+class TextPlainBodyPartFormatter : public MimeTreeParser::Interface::BodyPartFormatter
+{
+public:
+ MessagePart::Ptr process(ObjectTreeParser *objectTreeParser, KMime::Content *node) const override
+ {
+ if (KMime::isAttachment(node)) {
+ return AttachmentMessagePart::Ptr(new AttachmentMessagePart(objectTreeParser, node));
+ }
+ return TextMessagePart::Ptr(new TextMessagePart(objectTreeParser, node));
+ }
+};
+
+} // anon namespace
+
+void BodyPartFormatterBaseFactoryPrivate::messageviewer_create_builtin_bodypart_formatters()
+{
+ auto any = new AnyTypeBodyPartFormatter;
+ auto textPlain = new TextPlainBodyPartFormatter;
+ auto pkcs7 = new ApplicationPkcs7MimeBodyPartFormatter;
+ auto pgp = new ApplicationPGPEncryptedBodyPartFormatter;
+ auto html = new TextHtmlBodyPartFormatter;
+ auto headers = new HeadersBodyPartFormatter;
+ auto multipartAlternative = new MultiPartAlternativeBodyPartFormatter;
+ auto multipartMixed = new MultiPartMixedBodyPartFormatter;
+ auto multipartSigned = new MultiPartSignedBodyPartFormatter;
+ auto multipartEncrypted = new MultiPartEncryptedBodyPartFormatter;
+ auto message = new MessageRfc822BodyPartFormatter;
+ auto multipartRelated = new MultiPartRelatedBodyPartFormatter;
+
+ insert("application", "octet-stream", any);
+ insert("application", "pgp", textPlain);
+ insert("application", "pkcs7-mime", pkcs7);
+ insert("application", "x-pkcs7-mime", pkcs7);
+ insert("application", "pgp-encrypted", pgp);
+ insert("application", "*", any);
+
+ insert("text", "html", html);
+ insert("text", "rtf", any);
+ insert("text", "plain", textPlain);
+ insert("text", "rfc822-headers", headers);
+ insert("text", "*", textPlain);
+
+ insert("image", "*", any);
+
+ insert("message", "rfc822", message);
+ insert("message", "*", any);
+
+ insert("multipart", "alternative", multipartAlternative);
+ insert("multipart", "encrypted", multipartEncrypted);
+ insert("multipart", "signed", multipartSigned);
+ insert("multipart", "related", multipartRelated);
+ insert("multipart", "*", multipartMixed);
+ insert("*", "*", any);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2004 Marc Mutz <mutz@kde.org>
+// SPDX-FileCopyrightText: 2004 Ingo Kloecker <kloecker@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "bodypartformatterbasefactory.h"
+#include "bodypartformatter.h"
+#include "bodypartformatterbasefactory_p.h"
+
+#include <assert.h>
+
+using namespace MimeTreeParser;
+
+BodyPartFormatterBaseFactoryPrivate::BodyPartFormatterBaseFactoryPrivate(BodyPartFormatterBaseFactory *factory)
+ : q(factory)
+{
+}
+
+BodyPartFormatterBaseFactoryPrivate::~BodyPartFormatterBaseFactoryPrivate()
+{
+}
+
+void BodyPartFormatterBaseFactoryPrivate::setup()
+{
+ if (!all) {
+ all = std::make_optional<TypeRegistry>();
+ messageviewer_create_builtin_bodypart_formatters();
+ }
+}
+
+void BodyPartFormatterBaseFactoryPrivate::insert(const char *type, const char *subtype, Interface::BodyPartFormatter *formatter)
+{
+ if (!type || !*type || !subtype || !*subtype || !formatter || !all) {
+ return;
+ }
+
+ auto type_it = all->find(type);
+ if (type_it == all->end()) {
+ type_it = all->insert(std::make_pair(type, SubtypeRegistry())).first;
+ assert(type_it != all->end());
+ }
+
+ SubtypeRegistry &subtype_reg = type_it->second;
+
+ subtype_reg.insert(std::make_pair(subtype, formatter));
+}
+
+BodyPartFormatterBaseFactory::BodyPartFormatterBaseFactory()
+ : d(std::make_unique<BodyPartFormatterBaseFactoryPrivate>(this))
+{
+}
+
+BodyPartFormatterBaseFactory::~BodyPartFormatterBaseFactory() = default;
+
+void BodyPartFormatterBaseFactory::insert(const char *type, const char *subtype, Interface::BodyPartFormatter *formatter)
+{
+ d->insert(type, subtype, formatter);
+}
+
+const SubtypeRegistry &BodyPartFormatterBaseFactory::subtypeRegistry(const char *type) const
+{
+ if (!type || !*type) {
+ type = "*"; // krazy:exclude=doublequote_chars
+ }
+
+ d->setup();
+ assert(d->all);
+
+ static SubtypeRegistry emptyRegistry;
+ if (d->all->empty()) {
+ return emptyRegistry;
+ }
+
+ auto type_it = d->all->find(type);
+ if (type_it == d->all->end()) {
+ type_it = d->all->find("*");
+ }
+ if (type_it == d->all->end()) {
+ return emptyRegistry;
+ }
+
+ const SubtypeRegistry &subtype_reg = type_it->second;
+ if (subtype_reg.empty()) {
+ return emptyRegistry;
+ }
+ return subtype_reg;
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2004 Marc Mutz <mutz@kde.org>,
+// SPDX-FileCopyrightText: 2004 Ingo Kloecker <kloecker@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <QByteArray>
+#include <map>
+#include <memory>
+
+namespace MimeTreeParser
+{
+
+namespace Interface
+{
+class BodyPartFormatter;
+}
+
+struct ltstr {
+ bool operator()(const char *s1, const char *s2) const
+ {
+ return qstricmp(s1, s2) < 0;
+ }
+};
+
+typedef std::multimap<const char *, Interface::BodyPartFormatter *, ltstr> SubtypeRegistry;
+typedef std::map<const char *, MimeTreeParser::SubtypeRegistry, MimeTreeParser::ltstr> TypeRegistry;
+
+class BodyPartFormatterBaseFactoryPrivate;
+
+class BodyPartFormatterBaseFactory
+{
+public:
+ BodyPartFormatterBaseFactory();
+ ~BodyPartFormatterBaseFactory();
+
+ const SubtypeRegistry &subtypeRegistry(const char *type) const;
+
+protected:
+ void insert(const char *type, const char *subtype, Interface::BodyPartFormatter *formatter);
+
+private:
+ static BodyPartFormatterBaseFactory *mSelf;
+
+ std::unique_ptr<BodyPartFormatterBaseFactoryPrivate> d;
+ friend class BodyPartFormatterBaseFactoryPrivate;
+
+private:
+ // disabled
+ const BodyPartFormatterBaseFactory &operator=(const BodyPartFormatterBaseFactory &);
+ BodyPartFormatterBaseFactory(const BodyPartFormatterBaseFactory &);
+};
+
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2004 Marc Mutz <mutz@kde.org>
+// SPDX-FileCopyrightText: 2004 Ingo Kloecker <kloecker@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "bodypartformatterbasefactory.h"
+#include <memory>
+#include <optional>
+
+namespace MimeTreeParser
+{
+class BodyPartFormatterBaseFactory;
+
+class BodyPartFormatterBaseFactoryPrivate
+{
+public:
+ BodyPartFormatterBaseFactoryPrivate(BodyPartFormatterBaseFactory *factory);
+ ~BodyPartFormatterBaseFactoryPrivate();
+
+ void setup();
+ void messageviewer_create_builtin_bodypart_formatters(); // defined in bodypartformatter.cpp
+ void insert(const char *type, const char *subtype, Interface::BodyPartFormatter *formatter);
+
+ BodyPartFormatterBaseFactory *const q;
+ std::optional<TypeRegistry> all;
+};
+
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2001,2002 the KPGP authors
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-FileCopyrightText: 2017 Daniel Vrátil <dvratil@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "cryptohelper.h"
+
+#include "mimetreeparser_core_debug.h"
+
+#include <QGpgME/DecryptJob>
+#include <QGpgME/DecryptVerifyJob>
+#include <QGpgME/Protocol>
+
+#include <Libkleo/Formatting>
+
+#include <gpgme++/context.h>
+#include <gpgme++/decryptionresult.h>
+#include <gpgme++/verificationresult.h>
+
+using namespace MimeTreeParser;
+
+PGPBlockType Block::determineType() const
+{
+ const QByteArray data = text();
+ if (data.startsWith("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
+ return NoPgpBlock;
+ } else if (data.startsWith("-----BEGIN PGP SIGNED")) {
+ return ClearsignedBlock;
+ } else if (data.startsWith("-----BEGIN PGP SIGNATURE")) {
+ return SignatureBlock;
+ } else if (data.startsWith("-----BEGIN PGP PUBLIC")) {
+ return PublicKeyBlock;
+ } else if (data.startsWith("-----BEGIN PGP PRIVATE") || data.startsWith("-----BEGIN PGP SECRET")) {
+ return PrivateKeyBlock;
+ } else if (data.startsWith("-----BEGIN PGP MESSAGE")) {
+ if (data.startsWith("-----BEGIN PGP MESSAGE PART")) {
+ return MultiPgpMessageBlock;
+ } else {
+ return PgpMessageBlock;
+ }
+ } else if (data.startsWith("-----BEGIN PGP ARMORED FILE")) {
+ return PgpMessageBlock;
+ } else if (data.startsWith("-----BEGIN PGP ")) {
+ return UnknownBlock;
+ } else {
+ return NoPgpBlock;
+ }
+}
+
+QList<Block> MimeTreeParser::prepareMessageForDecryption(const QByteArray &msg)
+{
+ PGPBlockType pgpBlock = NoPgpBlock;
+ QList<Block> blocks;
+ int start = -1; // start of the current PGP block
+ int lastEnd = -1; // end of the last PGP block
+ const int length = msg.length();
+
+ if (msg.isEmpty()) {
+ return blocks;
+ }
+ if (msg.startsWith("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
+ return blocks;
+ }
+
+ if (msg.startsWith("-----BEGIN PGP ")) {
+ start = 0;
+ } else {
+ start = msg.indexOf("\n-----BEGIN PGP ") + 1;
+ if (start == 0) {
+ blocks.append(Block(msg, NoPgpBlock));
+ return blocks;
+ }
+ }
+
+ while (start != -1) {
+ int nextEnd;
+ int nextStart;
+
+ // is the PGP block a clearsigned block?
+ if (!strncmp(msg.constData() + start + 15, "SIGNED", 6)) {
+ pgpBlock = ClearsignedBlock;
+ } else {
+ pgpBlock = UnknownBlock;
+ }
+
+ nextEnd = msg.indexOf("\n-----END PGP ", start + 15);
+ nextStart = msg.indexOf("\n-----BEGIN PGP ", start + 15);
+
+ if (nextEnd == -1) { // Missing END PGP line
+ if (lastEnd != -1) {
+ blocks.append(Block(msg.mid(lastEnd + 1), UnknownBlock));
+ } else {
+ blocks.append(Block(msg.mid(start), UnknownBlock));
+ }
+ break;
+ }
+
+ if ((nextStart == -1) || (nextEnd < nextStart) || (pgpBlock == ClearsignedBlock)) {
+ // most likely we found a PGP block (but we don't check if it's valid)
+
+ // store the preceding non-PGP block
+ if (start - lastEnd - 1 > 0) {
+ blocks.append(Block(msg.mid(lastEnd + 1, start - lastEnd - 1), NoPgpBlock));
+ }
+
+ lastEnd = msg.indexOf("\n", nextEnd + 14);
+ if (lastEnd == -1) {
+ if (start < length) {
+ blocks.append(Block(msg.mid(start)));
+ }
+ break;
+ } else {
+ blocks.append(Block(msg.mid(start, lastEnd + 1 - start)));
+ if ((nextStart != -1) && (nextEnd > nextStart)) {
+ nextStart = msg.indexOf("\n-----BEGIN PGP ", lastEnd + 1);
+ }
+ }
+ }
+
+ start = nextStart;
+
+ if (start == -1) {
+ if (lastEnd + 1 < length) {
+ // rest of mail is no PGP Block
+ blocks.append(Block(msg.mid(lastEnd + 1), NoPgpBlock));
+ }
+ break;
+ } else {
+ start++; // move start behind the '\n'
+ }
+ }
+
+ return blocks;
+}
+
+Block::Block() = default;
+
+Block::Block(const QByteArray &m)
+ : msg(m)
+{
+ mType = determineType();
+}
+
+Block::Block(const QByteArray &m, PGPBlockType t)
+ : msg(m)
+ , mType(t)
+{
+}
+
+QByteArray MimeTreeParser::Block::text() const
+{
+ return msg;
+}
+
+PGPBlockType Block::type() const
+{
+ return mType;
+}
+
+namespace
+{
+
+[[nodiscard]] bool isPGP(const KMime::Content *part, bool allowOctetStream = false)
+{
+ const auto ct = static_cast<KMime::Headers::ContentType *>(part->headerByType("Content-Type"));
+ return ct && (ct->isSubtype("pgp-encrypted") || ct->isSubtype("encrypted") || (allowOctetStream && ct->isMimeType("application/octet-stream")));
+}
+
+[[nodiscard]] bool isSMIME(const KMime::Content *part)
+{
+ const auto ct = static_cast<KMime::Headers::ContentType *>(part->headerByType("Content-Type"));
+ return ct && (ct->isSubtype("pkcs7-mime") || ct->isSubtype("x-pkcs7-mime"));
+}
+
+void copyHeader(const KMime::Headers::Base *header, KMime::Message::Ptr msg)
+{
+ auto newHdr = KMime::Headers::createHeader(header->type());
+ if (!newHdr) {
+ newHdr = new KMime::Headers::Generic(header->type());
+ }
+ newHdr->from7BitString(header->as7BitString(false));
+ msg->appendHeader(newHdr);
+}
+
+[[nodiscard]] bool isContentHeader(const KMime::Headers::Base *header)
+{
+ return header->is("Content-Type") || header->is("Content-Transfer-Encoding") || header->is("Content-Disposition");
+}
+
+[[nodiscard]] KMime::Message::Ptr assembleMessage(const KMime::Message::Ptr &orig, const KMime::Content *newContent)
+{
+ auto out = KMime::Message::Ptr::create();
+ // Use the new content as message content
+ out->setBody(const_cast<KMime::Content *>(newContent)->encodedBody());
+ out->parse();
+
+ // remove default explicit content headers added by KMime::Content::parse()
+ QList<KMime::Headers::Base *> headers = out->headers();
+ for (const auto hdr : std::as_const(headers)) {
+ if (isContentHeader(hdr)) {
+ out->removeHeader(hdr->type());
+ }
+ }
+
+ // Copy over headers from the original message, except for CT, CTE and CD
+ // headers, we want to preserve those from the new content
+ headers = orig->headers();
+ for (const auto hdr : std::as_const(headers)) {
+ if (isContentHeader(hdr)) {
+ continue;
+ }
+
+ copyHeader(hdr, out);
+ }
+
+ // Overwrite some headers by those provided by the new content;
+ const auto newContentHeaders = newContent->headers();
+ for (const auto hdr : newContentHeaders) {
+ if (isContentHeader(hdr)) {
+ copyHeader(hdr, out);
+ }
+ }
+
+ out->assemble();
+ out->parse();
+
+ return out;
+}
+}
+
+KMime::Message::Ptr CryptoUtils::decryptMessage(const KMime::Message::Ptr &msg, bool &wasEncrypted, GpgME::Protocol &protoName)
+{
+ protoName = GpgME::UnknownProtocol;
+ bool multipart = false;
+ if (msg->contentType(false) && msg->contentType(false)->isMimeType("multipart/encrypted")) {
+ multipart = true;
+ const auto subparts = msg->contents();
+ for (auto subpart : subparts) {
+ if (isPGP(subpart, true)) {
+ protoName = GpgME::OpenPGP;
+ break;
+ } else if (isSMIME(subpart)) {
+ protoName = GpgME::CMS;
+ break;
+ }
+ }
+ } else {
+ if (isPGP(msg.data())) {
+ protoName = GpgME::OpenPGP;
+ } else if (isSMIME(msg.data())) {
+ protoName = GpgME::CMS;
+ } else {
+ const auto blocks = prepareMessageForDecryption(msg->decodedContent());
+ QByteArray content;
+ for (const auto &block : blocks) {
+ if (block.type() == PgpMessageBlock) {
+ const auto proto = QGpgME::openpgp();
+ protoName = GpgME::OpenPGP;
+ wasEncrypted = true;
+ QByteArray outData;
+ const auto decryptVerify = proto->decryptVerifyJob();
+ const auto [decryptResult, verifyResult] = decryptVerify->exec(block.text(), outData);
+ if (decryptResult.error()) {
+ // unknown key, invalid algo, or general error
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Failed to decrypt:" << Kleo::Formatting::errorAsString(decryptResult.error());
+ return {};
+ } else if (verifyResult.error()) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Failed to verify:" << Kleo::Formatting::errorAsString(verifyResult.error());
+ return {};
+ }
+
+ content += KMime::CRLFtoLF(outData);
+ } else if (block.type() == NoPgpBlock) {
+ content += block.text();
+ }
+ }
+
+ KMime::Content decCt;
+ decCt.setBody(content);
+ decCt.parse();
+ decCt.assemble();
+
+ return assembleMessage(msg, &decCt);
+ }
+ }
+
+ if (protoName == GpgME::UnknownProtocol) {
+ wasEncrypted = false;
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Not encrypted, or we don't recognize the encryption";
+ return {};
+ }
+
+ const auto proto = (protoName == GpgME::OpenPGP) ? QGpgME::openpgp() : QGpgME::smime();
+
+ wasEncrypted = true;
+ QByteArray outData;
+ auto inData = multipart ? msg->encodedContent() : msg->decodedContent(); // decodedContent in fact returns decoded body
+ auto decrypt = proto->decryptJob();
+ auto result = decrypt->exec(inData, outData);
+ if (result.error()) {
+ // unknown key, invalid algo, or general error
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Failed to decrypt:" << result.error().asString();
+ return {};
+ }
+
+ KMime::Content decCt;
+ decCt.setContent(KMime::CRLFtoLF(outData));
+ decCt.parse();
+ decCt.assemble();
+
+ return assembleMessage(msg, &decCt);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2001,2002 the KPGP authors
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-FileCopyrightText: 2017 Daniel Vrátil <dvratil@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_core_export.h"
+
+#include <KMime/Message>
+#include <QByteArray>
+#include <QList>
+#include <gpgme++/global.h>
+
+namespace MimeTreeParser
+{
+enum PGPBlockType {
+ UnknownBlock = -1, // BEGIN PGP ???
+ NoPgpBlock = 0,
+ PgpMessageBlock = 1, // BEGIN PGP MESSAGE
+ MultiPgpMessageBlock = 2, // BEGIN PGP MESSAGE, PART X[/Y]
+ SignatureBlock = 3, // BEGIN PGP SIGNATURE
+ ClearsignedBlock = 4, // BEGIN PGP SIGNED MESSAGE
+ PublicKeyBlock = 5, // BEGIN PGP PUBLIC KEY BLOCK
+ PrivateKeyBlock = 6, // BEGIN PGP PRIVATE KEY BLOCK (PGP 2.x: ...SECRET...)
+};
+
+class MIMETREEPARSER_CORE_EXPORT Block
+{
+public:
+ Block();
+ Block(const QByteArray &m);
+
+ Block(const QByteArray &m, PGPBlockType t);
+
+ [[nodiscard]] QByteArray text() const;
+ [[nodiscard]] PGPBlockType type() const;
+ [[nodiscard]] PGPBlockType determineType() const;
+
+ QByteArray msg;
+ PGPBlockType mType = UnknownBlock;
+};
+
+/** Parses the given message and splits it into OpenPGP blocks and
+ Non-OpenPGP blocks.
+*/
+[[nodiscard]] MIMETREEPARSER_CORE_EXPORT QList<Block> prepareMessageForDecryption(const QByteArray &msg);
+
+namespace CryptoUtils
+{
+[[nodiscard]] MIMETREEPARSER_CORE_EXPORT KMime::Message::Ptr decryptMessage(const KMime::Message::Ptr &decrypt, bool &wasEncrypted, GpgME::Protocol &protoName);
+}
+
+} // namespace MimeTreeParser
+
+Q_DECLARE_TYPEINFO(MimeTreeParser::Block, Q_RELOCATABLE_TYPE);
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+namespace MimeTreeParser
+{
+
+/**
+ * The display update mode: Force updates the display immediately, Delayed updates
+ * after some time (150ms by default)
+ */
+enum UpdateMode {
+ Force = 0,
+ Delayed,
+};
+
+/** Flags for the encryption state. */
+typedef enum {
+ KMMsgEncryptionStateUnknown,
+ KMMsgNotEncrypted,
+ KMMsgPartiallyEncrypted,
+ KMMsgFullyEncrypted,
+ KMMsgEncryptionProblematic,
+} KMMsgEncryptionState;
+
+/** Flags for the signature state. */
+typedef enum {
+ KMMsgSignatureStateUnknown,
+ KMMsgNotSigned,
+ KMMsgPartiallySigned,
+ KMMsgFullySigned,
+ KMMsgSignatureProblematic,
+} KMMsgSignatureState;
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2018 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <memory>
+#include <type_traits>
+#include <utility>
+
+// A somewhat implementation of the expected monad, proposed here:
+// https://isocpp.org/files/papers/n4015.pdf
+
+// A class used to differentiate errors and values when they are of the same type.
+template<typename Error>
+class Unexpected
+{
+ static_assert(!std::is_same<Error, void>::value, "Cannot have an Unexpected void");
+
+public:
+ Unexpected() = delete;
+
+ constexpr explicit Unexpected(const Error &error)
+ : mValue(error)
+ {
+ }
+ constexpr explicit Unexpected(Error &&error)
+ : mValue(std::move(error))
+ {
+ }
+
+ // For implicit conversions when doing makeUnexpected(other)
+ template<typename Other>
+ constexpr explicit Unexpected(const Unexpected<Other> &error)
+ : mValue(error.value())
+ {
+ }
+ template<typename Other>
+ constexpr explicit Unexpected(Unexpected<Other> &&error)
+ : mValue(std::move(error.value()))
+ {
+ }
+
+ constexpr const Error &value() const &
+ {
+ return mValue;
+ }
+ Error &value() &
+ {
+ return mValue;
+ }
+
+ constexpr const Error &&value() const &&
+ {
+ return std::move(mValue);
+ }
+ Error &&value() &&
+ {
+ return std::move(mValue);
+ }
+
+private:
+ Error mValue;
+};
+
+template<class Error>
+Unexpected<typename std::decay<Error>::type> makeUnexpected(Error &&e)
+{
+ return Unexpected<typename std::decay<Error>::type>(std::forward<Error>(e));
+}
+
+template<typename Error>
+bool operator==(const Unexpected<Error> &lhs, const Unexpected<Error> &rhs)
+{
+ return lhs.value() == rhs.value();
+}
+
+template<typename Error>
+bool operator!=(const Unexpected<Error> &lhs, const Unexpected<Error> &rhs)
+{
+ return lhs.value() != rhs.value();
+}
+
+namespace detail
+{
+
+namespace tags
+{
+struct Expected {
+};
+struct Unexpected {
+};
+} // namespace tags
+
+// Write functions here when storage related and when Type != void
+template<typename Error, typename Type>
+struct StorageBase {
+protected:
+ // To be able to define a copy constructor in a child class
+ StorageBase()
+ {
+ }
+
+ // Rule of 5 (copy constructors defined in StorageCopyConstructor) {{{
+
+ StorageBase(StorageBase &&other)
+ : mIsValue(other.mIsValue)
+ {
+ // This is a constructor, you have to construct object, not assign them
+ // (hence the placement new)
+ //
+ // Here's the problem:
+ //
+ // Object that are part of a union are not initialized (which is
+ // normal). If we replaced the placement new by a line like this:
+ //
+ // ```
+ // mValue = other.mValue;
+ // ```
+ //
+ // If overloaded, this will call `mValue.operator=(other.mValue);`, but
+ // since we're in the constructor, mValue is not initialized. This can
+ // cause big issues if `Type` / `Error` is not trivially (move)
+ // assignable.
+ //
+ // And so, the placement new allows us to call the constructor of
+ // `Type` or `Error` instead of its assignment operator.
+ if (mIsValue) {
+ new (std::addressof(mValue)) Type(std::move(other.mValue));
+ } else {
+ new (std::addressof(mError)) Unexpected<Error>(std::move(other.mError));
+ }
+ }
+
+ StorageBase &operator=(StorageBase &&other)
+ {
+ this->~StorageBase();
+ mIsValue = other.mIsValue;
+ if (mIsValue) {
+ mValue = std::move(other.mValue);
+ } else {
+ mError = std::move(other.mError);
+ }
+ return *this;
+ }
+
+ ~StorageBase()
+ {
+ if (mIsValue) {
+ mValue.~Type();
+ } else {
+ mError.~Unexpected<Error>();
+ }
+ }
+
+ // }}}
+
+ template<typename... Args>
+ constexpr StorageBase(tags::Expected, Args &&...args)
+ : mValue(std::forward<Args>(args)...)
+ , mIsValue(true)
+ {
+ }
+
+ template<typename... Args>
+ constexpr StorageBase(tags::Unexpected, Args &&...args)
+ : mError(std::forward<Args>(args)...)
+ , mIsValue(false)
+ {
+ }
+
+ union {
+ Unexpected<Error> mError;
+ Type mValue;
+ };
+ bool mIsValue;
+};
+
+// Write functions here when storage related and when Type == void
+template<typename Error>
+struct StorageBase<Error, void> {
+protected:
+ constexpr StorageBase(tags::Expected)
+ : mIsValue(true)
+ {
+ }
+
+ template<typename... Args>
+ constexpr StorageBase(tags::Unexpected, Args &&...args)
+ : mError(std::forward<Args>(args)...)
+ , mIsValue(false)
+ {
+ }
+
+ Unexpected<Error> mError;
+ bool mIsValue;
+};
+
+// Struct used to add the copy constructor / assignment only if both types are copy constructible
+template<typename Error, typename Type, bool both_copy_constructible = std::is_copy_constructible<Error>::value && std::is_copy_constructible<Type>::value>
+struct StorageCopyConstructor;
+
+template<typename Error, typename Type>
+struct StorageCopyConstructor<Error, Type, true> : StorageBase<Error, Type> {
+protected:
+ using StorageBase<Error, Type>::StorageBase;
+
+ StorageCopyConstructor(const StorageCopyConstructor &other)
+ : StorageBase<Error, Type>()
+ {
+ // If you're thinking WTF, see the comment in the move constructor above.
+ this->mIsValue = other.mIsValue;
+ if (this->mIsValue) {
+ new (std::addressof(this->mValue)) Type(other.mValue);
+ } else {
+ new (std::addressof(this->mError)) Unexpected<Error>(other.mError);
+ }
+ }
+
+ StorageCopyConstructor &operator=(const StorageCopyConstructor &other)
+ {
+ this->mIsValue = other.mIsValue;
+ if (this->mIsValue) {
+ this->mValue = other.mValue;
+ } else {
+ this->mError = other.mError;
+ }
+ return *this;
+ }
+};
+
+template<typename Error, typename Type>
+struct StorageCopyConstructor<Error, Type, false> : StorageBase<Error, Type> {
+protected:
+ using StorageBase<Error, Type>::StorageBase;
+};
+
+// Write functions here when storage related, whether Type is void or not
+template<typename Error, typename Type>
+struct Storage : StorageCopyConstructor<Error, Type> {
+protected:
+ // Forward the construction to StorageBase
+ using StorageCopyConstructor<Error, Type>::StorageCopyConstructor;
+};
+
+// Write functions here when dev API related and when Type != void
+template<typename Error, typename Type>
+struct ExpectedBase : detail::Storage<Error, Type> {
+ constexpr ExpectedBase()
+ : detail::Storage<Error, Type>(detail::tags::Expected{})
+ {
+ }
+
+ template<typename OtherError>
+ constexpr ExpectedBase(const Unexpected<OtherError> &error)
+ : detail::Storage<Error, Type>(detail::tags::Unexpected{}, error)
+ {
+ }
+ template<typename OtherError>
+ constexpr ExpectedBase(Unexpected<OtherError> &&error)
+ : detail::Storage<Error, Type>(detail::tags::Unexpected{}, std::move(error))
+ {
+ }
+
+ constexpr ExpectedBase(const Type &value)
+ : detail::Storage<Error, Type>(detail::tags::Expected{}, value)
+ {
+ }
+ constexpr ExpectedBase(Type &&value)
+ : detail::Storage<Error, Type>(detail::tags::Expected{}, std::move(value))
+ {
+ }
+
+ // Warning: will crash if this is an error. You should always check this is
+ // an expected value before calling `.value()`
+ constexpr const Type &value() const &
+ {
+ // FIXME: Q_ASSERT cannot be used in a constexpr with qt 5.9. See also:
+ // https://git.qt.io/consulting-usa/qtbase-xcb-rendering/commit/8ea27bb1c669e21100a6a042b0378b3346bdf671 Q_ASSERT(this->mIsValue);
+ return this->mValue;
+ }
+ Type &&value() &&
+ {
+ Q_ASSERT(this->mIsValue);
+ return std::move(this->mValue);
+ }
+};
+
+// Write functions here when dev API related and when Type == void
+template<typename Error>
+struct ExpectedBase<Error, void> : Storage<Error, void> {
+ // Rewrite constructors for unexpected because Expected doesn't have direct access to it.
+ template<typename OtherError>
+ constexpr ExpectedBase(const Unexpected<OtherError> &error)
+ : Storage<Error, void>(tags::Unexpected{}, error)
+ {
+ }
+ template<typename OtherError>
+ constexpr ExpectedBase(Unexpected<OtherError> &&error)
+ : Storage<Error, void>(tags::Unexpected{}, std::move(error))
+ {
+ }
+};
+
+} // namespace detail
+
+// Write functions here when dev API related, whether Type is void or not
+template<typename Error, typename Type = void>
+class Expected : public detail::ExpectedBase<Error, Type>
+{
+ static_assert(!std::is_same<Error, void>::value, "Expected with void Error is not implemented");
+
+public:
+ using detail::ExpectedBase<Error, Type>::ExpectedBase;
+
+ constexpr const Error &error() const &
+ {
+ return this->mError.value();
+ }
+
+ constexpr bool isValue() const
+ {
+ return this->mIsValue;
+ }
+ constexpr explicit operator bool() const
+ {
+ return this->mIsValue;
+ }
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "fileopener.h"
+#include "mimetreeparser_core_debug.h"
+
+#include <KMbox/MBox>
+#include <QFile>
+#include <QMimeDatabase>
+#include <QMimeType>
+
+using namespace MimeTreeParser::Core;
+
+namespace
+{
+KMime::Message::Ptr openSmimeEncrypted(const QByteArray &content)
+{
+ KMime::Message::Ptr message(new KMime::Message);
+
+ auto contentType = message->contentType();
+ contentType->setMimeType(QByteArrayLiteral("application/pkcs7-mime"));
+ contentType->setParameter(QByteArrayLiteral("smime-type"), QStringLiteral("enveloped-data"));
+
+ auto contentDisposition = new KMime::Headers::ContentDisposition;
+ contentDisposition->setDisposition(KMime::Headers::CDattachment);
+ contentDisposition->setFilename(QStringLiteral("smime.p7m"));
+ message->appendHeader(contentDisposition);
+
+ auto cte = message->contentTransferEncoding();
+ cte->setEncoding(KMime::Headers::CE7Bit);
+
+ message->setBody(content);
+ message->assemble();
+
+ return message;
+}
+
+KMime::Message::Ptr openPgpEncrypted(const QByteArray &content)
+{
+ KMime::Message::Ptr message(new KMime::Message);
+
+ auto contentType = message->contentType();
+ contentType->setMimeType(QByteArrayLiteral("multipart/encrypted"));
+ contentType->setBoundary(KMime::multiPartBoundary());
+ contentType->setParameter(QByteArrayLiteral("protocol"), QStringLiteral("application/pgp-encrypted"));
+
+ auto cte = message->contentTransferEncoding();
+ cte->setEncoding(KMime::Headers::CE7Bit);
+
+ auto pgpEncrypted = new KMime::Content;
+ pgpEncrypted->contentType()->setMimeType(QByteArrayLiteral("application/pgp-encrypted"));
+ auto contentDisposition = new KMime::Headers::ContentDisposition;
+ contentDisposition->setDisposition(KMime::Headers::CDattachment);
+ pgpEncrypted->appendHeader(contentDisposition);
+ pgpEncrypted->setBody("Version: 1");
+ message->appendContent(pgpEncrypted);
+
+ auto encryptedContent = new KMime::Content;
+ encryptedContent->contentType()->setMimeType(QByteArrayLiteral("application/octet-stream"));
+ contentDisposition = new KMime::Headers::ContentDisposition;
+ contentDisposition->setDisposition(KMime::Headers::CDinline);
+ contentDisposition->setFilename(QStringLiteral("msg.asc"));
+ encryptedContent->appendHeader(contentDisposition);
+ encryptedContent->setBody(content);
+ message->appendContent(encryptedContent);
+
+ message->assemble();
+
+ return message;
+}
+
+QList<KMime::Message::Ptr> openMbox(const QString &fileName)
+{
+ KMBox::MBox mbox;
+ const bool ok = mbox.load(fileName);
+ if (!ok) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Unable to open" << fileName;
+ return {};
+ }
+
+ QList<KMime::Message::Ptr> messages;
+ const auto entries = mbox.entries();
+ for (const auto &entry : entries) {
+ messages << KMime::Message::Ptr(mbox.readMessage(entry));
+ }
+ return messages;
+}
+}
+
+QList<KMime::Message::Ptr> FileOpener::openFile(const QString &fileName)
+{
+ QMimeDatabase db;
+ QMimeType mime = db.mimeTypeForFile(fileName);
+
+ QFile file(fileName);
+ file.open(QIODevice::ReadOnly);
+ if (!file.isOpen()) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Could not open file";
+ return {};
+ }
+
+ const auto content = file.readAll();
+
+ if (content.isEmpty()) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "File is empty";
+ return {};
+ }
+
+ if (mime.inherits(QStringLiteral("application/pkcs7-mime")) || fileName.endsWith(QStringLiteral("smime.p7m"))) {
+ return {openSmimeEncrypted(content)};
+ } else if (mime.inherits(QStringLiteral("application/pgp-encrypted")) || fileName.endsWith(QStringLiteral(".asc"))) {
+ return {openPgpEncrypted(content)};
+ } else if (content.startsWith("From ")) {
+ return openMbox(fileName);
+ } else {
+ auto msg = new KMime::Message;
+ msg->setContent(KMime::CRLFtoLF(content));
+ msg->parse();
+ if (!msg->hasContent()) {
+ delete msg;
+ msg = nullptr;
+ return {};
+ }
+ return {KMime::Message::Ptr(msg)};
+ }
+
+ return {};
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_core_export.h"
+
+#include <KMime/Message>
+
+namespace MimeTreeParser
+{
+namespace Core
+{
+namespace FileOpener
+{
+/// Open messages from file
+[[nodiscard]] MIMETREEPARSER_CORE_EXPORT QList<KMime::Message::Ptr> openFile(const QString &fileName);
+}
+}
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "htmlutils.h"
+
+#include <QMap>
+#include <QUrl>
+
+static QString resolveEntities(const QString &in)
+{
+ QString out;
+
+ for (int i = 0; i < (int)in.length(); ++i) {
+ if (in[i] == QLatin1Char('&')) {
+ // find a semicolon
+ ++i;
+ int n = in.indexOf(QLatin1Char(';'), i);
+ if (n == -1) {
+ break;
+ }
+ QString type = in.mid(i, (n - i));
+ i = n; // should be n+1, but we'll let the loop increment do it
+
+ if (type == QLatin1StringView("amp")) {
+ out += QLatin1Char('&');
+ } else if (type == QLatin1StringView("lt"))
+ out += QLatin1Char('<');
+ else if (type == QLatin1StringView("gt"))
+ out += QLatin1Char('>');
+ else if (type == QLatin1StringView("quot"))
+ out += QLatin1Char('\"');
+ else if (type == QLatin1StringView("apos"))
+ out += QLatin1Char('\'');
+ else if (type == QLatin1StringView("nbsp"))
+ out += QChar(0xa0);
+ } else {
+ out += in[i];
+ }
+ }
+
+ return out;
+}
+
+static bool linkify_pmatch(const QString &str1, int at, const QString &str2)
+{
+ if (str2.length() > (str1.length() - at))
+ return false;
+
+ for (int n = 0; n < str2.length(); ++n) {
+ if (str1.at(n + at).toLower() != str2.at(n).toLower())
+ return false;
+ }
+
+ return true;
+}
+
+static bool linkify_isOneOf(const QChar &c, const QString &charlist)
+{
+ for (int i = 0; i < charlist.length(); ++i) {
+ if (c == charlist.at(i))
+ return true;
+ }
+
+ return false;
+}
+
+// encodes a few dangerous html characters
+static QString linkify_htmlsafe(const QString &in)
+{
+ QString out;
+
+ for (int n = 0; n < in.length(); ++n) {
+ if (linkify_isOneOf(in.at(n), QStringLiteral("\"\'`<>"))) {
+ // hex encode
+ QString hex;
+ hex.asprintf("%%%02X", in.at(n).toLatin1());
+ out.append(hex);
+ } else {
+ out.append(in.at(n));
+ }
+ }
+
+ return out;
+}
+
+static bool linkify_okUrl(const QString &url)
+{
+ if (url.at(url.length() - 1) == QLatin1Char('.'))
+ return false;
+
+ return true;
+}
+
+static bool linkify_okEmail(const QString &addy)
+{
+ // this makes sure that there is an '@' and a '.' after it, and that there is
+ // at least one char for each of the three sections
+ int n = addy.indexOf(QLatin1Char('@'));
+ if (n == -1 || n == 0)
+ return false;
+ int d = addy.indexOf(QLatin1Char('.'), n + 1);
+ if (d == -1 || d == 0)
+ return false;
+ if ((addy.length() - 1) - d <= 0)
+ return false;
+ if (addy.indexOf(QStringLiteral("..")) != -1)
+ return false;
+
+ return true;
+}
+
+/**
+ * takes a richtext string and heuristically adds links for uris of common protocols
+ * @return a richtext string with link markup added
+ */
+QString MimeTreeParser::linkify(const QString &in)
+{
+ QString out = in;
+ int x1, x2;
+ QString linked, link, href;
+
+ for (int n = 0; n < (int)out.length(); ++n) {
+ bool isUrl = false;
+ bool isAtStyle = false;
+ x1 = n;
+
+ if (linkify_pmatch(out, n, QStringLiteral("xmpp:"))) {
+ n += 5;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("mailto:"))) {
+ n += 7;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("http://"))) {
+ n += 7;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("https://"))) {
+ n += 8;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("ftp://"))) {
+ n += 6;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("news://"))) {
+ n += 7;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("ed2k://"))) {
+ n += 7;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("magnet:"))) {
+ n += 7;
+ isUrl = true;
+ href = QString();
+ } else if (linkify_pmatch(out, n, QStringLiteral("www."))) {
+ isUrl = true;
+ href = QStringLiteral("http://");
+ } else if (linkify_pmatch(out, n, QStringLiteral("ftp."))) {
+ isUrl = true;
+ href = QStringLiteral("ftp://");
+ } else if (linkify_pmatch(out, n, QStringLiteral("@"))) {
+ isAtStyle = true;
+ href = QStringLiteral("x-psi-atstyle:");
+ }
+
+ if (isUrl) {
+ // make sure the previous char is not alphanumeric
+ if (x1 > 0 && out.at(x1 - 1).isLetterOrNumber())
+ continue;
+
+ // find whitespace (or end)
+ QMap<QChar, int> brackets;
+ brackets[QLatin1Char('(')] = brackets[QLatin1Char(')')] = brackets[QLatin1Char('[')] = brackets[QLatin1Char(']')] = brackets[QLatin1Char('{')] =
+ brackets[QLatin1Char('}')] = 0;
+ QMap<QChar, QChar> openingBracket;
+ openingBracket[QLatin1Char(')')] = QLatin1Char('(');
+ openingBracket[QLatin1Char(']')] = QLatin1Char('[');
+ openingBracket[QLatin1Char('}')] = QLatin1Char('{');
+ for (x2 = n; x2 < (int)out.length(); ++x2) {
+ if (out.at(x2).isSpace() || linkify_isOneOf(out.at(x2), QStringLiteral("\"\'`<>")) || linkify_pmatch(out, x2, QStringLiteral("""))
+ || linkify_pmatch(out, x2, QStringLiteral("'")) || linkify_pmatch(out, x2, QStringLiteral(">"))
+ || linkify_pmatch(out, x2, QStringLiteral("<"))) {
+ break;
+ }
+ if (brackets.contains(out.at(x2))) {
+ ++brackets[out.at(x2)];
+ }
+ }
+ int len = x2 - x1;
+ QString pre = resolveEntities(out.mid(x1, x2 - x1));
+
+ // go backward hacking off unwanted punctuation
+ int cutoff;
+ for (cutoff = pre.length() - 1; cutoff >= 0; --cutoff) {
+ if (!linkify_isOneOf(pre.at(cutoff), QStringLiteral("!?,.()[]{}<>\"")))
+ break;
+ if (linkify_isOneOf(pre.at(cutoff), QStringLiteral(")]}")) && brackets[pre.at(cutoff)] - brackets[openingBracket[pre.at(cutoff)]] <= 0) {
+ break; // in theory, there could be == above, but these are urls, not math ;)
+ }
+ if (brackets.contains(pre.at(cutoff))) {
+ --brackets[pre.at(cutoff)];
+ }
+ }
+ ++cutoff;
+ //++x2;
+
+ link = pre.mid(0, cutoff);
+ if (!linkify_okUrl(link)) {
+ n = x1 + link.length();
+ continue;
+ }
+ href += link;
+ // attributes need to be encoded too.
+ href = href.toHtmlEscaped();
+ href = linkify_htmlsafe(href);
+ // printf("link: [%s], href=[%s]\n", link.latin1(), href.latin1());
+ linked = QStringLiteral("<a href=\"%1\">").arg(href) + QUrl{link}.toDisplayString(QUrl::RemoveQuery) + QStringLiteral("</a>")
+ + pre.mid(cutoff).toHtmlEscaped();
+ out.replace(x1, len, linked);
+ n = x1 + linked.length() - 1;
+ } else if (isAtStyle) {
+ // go backward till we find the beginning
+ if (x1 == 0)
+ continue;
+ --x1;
+ for (; x1 >= 0; --x1) {
+ if (!linkify_isOneOf(out.at(x1), QStringLiteral("_.-+")) && !out.at(x1).isLetterOrNumber())
+ break;
+ }
+ ++x1;
+
+ // go forward till we find the end
+ x2 = n + 1;
+ for (; x2 < (int)out.length(); ++x2) {
+ if (!linkify_isOneOf(out.at(x2), QStringLiteral("_.-+")) && !out.at(x2).isLetterOrNumber())
+ break;
+ }
+
+ int len = x2 - x1;
+ link = out.mid(x1, len);
+ // link = resolveEntities(link);
+
+ if (!linkify_okEmail(link)) {
+ n = x1 + link.length();
+ continue;
+ }
+
+ href += link;
+ // printf("link: [%s], href=[%s]\n", link.latin1(), href.latin1());
+ linked = QStringLiteral("<a href=\"%1\">").arg(href) + link + QStringLiteral("</a>");
+ out.replace(x1, len, linked);
+ n = x1 + linked.length() - 1;
+ }
+ }
+
+ return out;
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <QString>
+
+namespace MimeTreeParser
+{
+[[nodiscard]] QString linkify(const QString &in);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "messageparser.h"
+
+#include "attachmentmodel.h"
+#include "mimetreeparser_core_debug.h"
+#include "objecttreeparser.h"
+
+#include <KLocalizedString>
+
+#include <QElapsedTimer>
+
+namespace
+{
+
+template<typename T>
+const T *findHeader(KMime::Content *content, KMime::Content *protectedHeaderNode)
+{
+ if (protectedHeaderNode) {
+ auto header = protectedHeaderNode->header<T>();
+ if (header) {
+ return header;
+ }
+ }
+
+ auto header = content->header<T>();
+ if (header || !content->parent()) {
+ return header;
+ }
+ return findHeader<T>(content->parent(), nullptr);
+}
+
+QString mailboxesToHtml(const KMime::Types::Mailbox::List &mailboxes)
+{
+ QStringList html;
+ for (const auto &mailbox : mailboxes) {
+ if (mailbox.hasName() && mailbox.hasAddress()) {
+ html << QStringLiteral("%1 <%2>").arg(mailbox.name().toHtmlEscaped(), QString::fromUtf8(mailbox.address()).toHtmlEscaped());
+ } else if (mailbox.hasAddress()) {
+ html << QString::fromUtf8(mailbox.address());
+ } else {
+ if (mailbox.hasName()) {
+ html << mailbox.name();
+ } else {
+ Q_ASSERT_X(false, __FUNCTION__, "Mailbox does not contains email address nor name");
+ html << i18nc("Displayed when a CC, FROM or TO field in an email is empty", "Unknown");
+ }
+ }
+ }
+
+ return html.join(i18nc("list separator", ", "));
+}
+}
+
+class MessagePartPrivate
+{
+public:
+ std::shared_ptr<MimeTreeParser::ObjectTreeParser> mParser;
+ KMime::Message::Ptr mMessage;
+ KMime::Content *protectedHeaderNode = nullptr;
+ std::unique_ptr<KMime::Content> ownedContent;
+};
+
+MessageParser::MessageParser(QObject *parent)
+ : QObject(parent)
+ , d(std::unique_ptr<MessagePartPrivate>(new MessagePartPrivate))
+{
+}
+
+MessageParser::~MessageParser()
+{
+}
+
+KMime::Message::Ptr MessageParser::message() const
+{
+ return d->mMessage;
+}
+
+void MessageParser::setMessage(const KMime::Message::Ptr message)
+{
+ if (message == d->mMessage) {
+ return;
+ }
+ if (!message) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << Q_FUNC_INFO << "Empty message given";
+ return;
+ }
+ d->mMessage = message;
+
+ QElapsedTimer time;
+ time.start();
+ auto parser = std::make_shared<MimeTreeParser::ObjectTreeParser>();
+ parser->parseObjectTree(message.data());
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "Message parsing took: " << time.elapsed();
+ parser->decryptAndVerify();
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "Message parsing and decryption/verification: " << time.elapsed();
+ d->mParser = parser;
+ const auto contentParts = parser->collectContentParts();
+ for (const auto &part : contentParts) {
+ if (!part->node()) {
+ continue;
+ }
+ const auto contentType = part->node()->contentType();
+ if (contentType && contentType->hasParameter("protected-headers")) {
+ const auto contentDisposition = part->node()->contentDisposition();
+
+ // Check for legacy format for protected-headers
+ if (contentDisposition && contentDisposition->disposition() == KMime::Headers::CDinline) {
+ d->ownedContent = std::make_unique<KMime::Content>();
+ // we put the decoded content as encoded content of the new node
+ // as the header are inline in part->node()
+ d->ownedContent->setContent(part->node()->decodedContent());
+ d->ownedContent->parse();
+ d->protectedHeaderNode = d->ownedContent.get();
+ break;
+ }
+ d->protectedHeaderNode = part->node();
+ break;
+ }
+ }
+
+ Q_EMIT htmlChanged();
+}
+
+bool MessageParser::loaded() const
+{
+ return bool{d->mParser};
+}
+
+QString MessageParser::structureAsString() const
+{
+ if (!d->mParser) {
+ return {};
+ }
+ return d->mParser->structureAsString();
+}
+
+PartModel *MessageParser::parts() const
+{
+ if (!d->mParser) {
+ return nullptr;
+ }
+ const auto model = new PartModel(d->mParser);
+ return model;
+}
+
+AttachmentModel *MessageParser::attachments() const
+{
+ if (!d->mParser) {
+ return nullptr;
+ }
+ auto attachmentModel = new AttachmentModel(d->mParser);
+ attachmentModel->setParent(const_cast<MessageParser *>(this));
+ return attachmentModel;
+}
+
+QString MessageParser::subject() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::Subject>(d->mMessage.get(), d->protectedHeaderNode);
+ if (header) {
+ return header->asUnicodeString();
+ }
+ }
+
+ return QString();
+}
+
+QString MessageParser::from() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::From>(d->mMessage.get(), d->protectedHeaderNode);
+ if (!header) {
+ return {};
+ }
+ return mailboxesToHtml(header->mailboxes());
+ }
+ return QString();
+}
+
+QString MessageParser::sender() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::Sender>(d->mMessage.get(), d->protectedHeaderNode);
+ if (!header) {
+ return {};
+ }
+ return mailboxesToHtml(header->mailboxes());
+ }
+
+ return QString();
+}
+
+QString MessageParser::to() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::To>(d->mMessage.get(), d->protectedHeaderNode);
+ if (!header) {
+ return {};
+ }
+ return mailboxesToHtml(header->mailboxes());
+ }
+ return QString();
+}
+
+QString MessageParser::cc() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::Cc>(d->mMessage.get(), d->protectedHeaderNode);
+ if (!header) {
+ return {};
+ }
+ return mailboxesToHtml(header->mailboxes());
+ }
+ return QString();
+}
+
+QString MessageParser::bcc() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::Bcc>(d->mMessage.get(), d->protectedHeaderNode);
+ if (!header) {
+ return {};
+ }
+ return mailboxesToHtml(header->mailboxes());
+ }
+ return QString();
+}
+
+QDateTime MessageParser::date() const
+{
+ if (d->mMessage) {
+ const auto header = findHeader<KMime::Headers::Date>(d->mMessage.get(), d->protectedHeaderNode);
+ if (header) {
+ return header->dateTime();
+ }
+ }
+ return QDateTime();
+}
+
+#include "moc_messageparser.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+#include <QObject>
+#include <QString>
+
+#include <KMime/Message>
+#include <QAbstractItemModel>
+
+#include "mimetreeparser_core_export.h"
+#include "partmodel.h"
+#include <memory>
+
+class MessagePartPrivate;
+class AttachmentModel;
+
+class MIMETREEPARSER_CORE_EXPORT MessageParser : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(KMime::Message::Ptr message READ message WRITE setMessage NOTIFY htmlChanged)
+ Q_PROPERTY(PartModel *parts READ parts NOTIFY htmlChanged)
+ Q_PROPERTY(QAbstractItemModel *attachments READ attachments NOTIFY htmlChanged)
+ Q_PROPERTY(QString structureAsString READ structureAsString NOTIFY htmlChanged)
+ Q_PROPERTY(bool loaded READ loaded NOTIFY htmlChanged)
+
+ Q_PROPERTY(QString subject READ subject NOTIFY htmlChanged)
+ Q_PROPERTY(QString from READ from NOTIFY htmlChanged)
+ Q_PROPERTY(QString sender READ sender NOTIFY htmlChanged)
+ Q_PROPERTY(QString to READ to NOTIFY htmlChanged)
+ Q_PROPERTY(QString cc READ cc NOTIFY htmlChanged)
+ Q_PROPERTY(QString bcc READ bcc NOTIFY htmlChanged)
+ Q_PROPERTY(QDateTime date READ date NOTIFY htmlChanged)
+
+public:
+ explicit MessageParser(QObject *parent = nullptr);
+ ~MessageParser();
+
+ [[nodiscard]] KMime::Message::Ptr message() const;
+ void setMessage(const KMime::Message::Ptr message);
+ [[nodiscard]] PartModel *parts() const;
+ [[nodiscard]] AttachmentModel *attachments() const;
+ [[nodiscard]] QString structureAsString() const;
+ [[nodiscard]] bool loaded() const;
+
+ [[nodiscard]] QString subject() const;
+ [[nodiscard]] QString from() const;
+ [[nodiscard]] QString sender() const;
+ [[nodiscard]] QString to() const;
+ [[nodiscard]] QString cc() const;
+ [[nodiscard]] QString bcc() const;
+ [[nodiscard]] QDateTime date() const;
+
+Q_SIGNALS:
+ void htmlChanged();
+
+private:
+ std::unique_ptr<MessagePartPrivate> d;
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "messagepart.h"
+#include "cryptohelper.h"
+#include "mimetreeparser_core_debug.h"
+#include "objecttreeparser.h"
+
+#include "utils.h"
+
+#include <KLocalizedString>
+#include <KMime/Content>
+#include <Libkleo/Compliance>
+#include <Libkleo/Formatting>
+#include <Libkleo/KeyCache>
+
+#include <QGpgME/DN>
+#include <QGpgME/DecryptVerifyJob>
+#include <QGpgME/Protocol>
+#include <QGpgME/VerifyDetachedJob>
+#include <QGpgME/VerifyOpaqueJob>
+
+#include <QStringDecoder>
+
+#include <gpgme++/key.h>
+#include <gpgme++/keylistresult.h>
+#include <gpgme.h>
+
+using namespace MimeTreeParser;
+
+//------MessagePart-----------------------
+MessagePart::MessagePart(ObjectTreeParser *otp, const QString &text, KMime::Content *node)
+ : mText(text)
+ , mOtp(otp)
+ , mParentPart(nullptr)
+ , mNode(node) // only null for messagepartlist
+ , mError(NoError)
+ , mRoot(false)
+{
+}
+
+MessagePart::~MessagePart()
+{
+ for (auto n : std::as_const(mNodesToDelete)) {
+ delete n;
+ }
+}
+
+MessagePart::Disposition MessagePart::disposition() const
+{
+ if (!mNode) {
+ return Invalid;
+ }
+ const auto cd = mNode->contentDisposition(false);
+ if (!cd) {
+ return Invalid;
+ }
+ switch (cd->disposition()) {
+ case KMime::Headers::CDinline:
+ return Inline;
+ case KMime::Headers::CDattachment:
+ return Attachment;
+ default:
+ return Invalid;
+ }
+}
+
+QString MessagePart::filename() const
+{
+ if (!mNode) {
+ return {};
+ }
+
+ if (const auto cd = mNode->contentDisposition(false)) {
+ const auto name = cd->filename();
+ // Allow for a fallback for mails that have a ContentDisposition header, but don't set the filename anyways.
+ // Not the recommended way, but exists.
+ if (!name.isEmpty()) {
+ return name;
+ }
+ }
+ if (const auto ct = mNode->contentType(false)) {
+ return ct->name();
+ }
+ return {};
+}
+
+static KMime::Headers::ContentType *contentType(KMime::Content *node)
+{
+ if (node) {
+ return node->contentType(false);
+ }
+ return nullptr;
+}
+
+QByteArray MessagePart::charset() const
+{
+ if (!mNode) {
+ return QByteArrayLiteral("us-ascii");
+ }
+ if (auto ct = contentType(mNode)) {
+ return ct->charset();
+ }
+ // Per rfc2045 us-ascii is the default
+ return QByteArrayLiteral("us-ascii");
+}
+
+QByteArray MessagePart::mimeType() const
+{
+ if (auto ct = contentType(mNode)) {
+ return ct->mimeType();
+ }
+ return {};
+}
+
+bool MessagePart::isText() const
+{
+ if (auto ct = contentType(mNode)) {
+ return ct->isText();
+ }
+ return false;
+}
+
+MessagePart::Error MessagePart::error() const
+{
+ return mError;
+}
+
+QString MessagePart::errorString() const
+{
+ return mMetaData.errorText;
+}
+
+PartMetaData *MessagePart::partMetaData()
+{
+ return &mMetaData;
+}
+
+bool MessagePart::isAttachment() const
+{
+ if (mNode) {
+ return KMime::isAttachment(mNode);
+ }
+ return false;
+}
+
+KMime::Content *MessagePart::node() const
+{
+ return mNode;
+}
+
+void MessagePart::setIsRoot(bool root)
+{
+ mRoot = root;
+}
+
+bool MessagePart::isRoot() const
+{
+ return mRoot;
+}
+
+QString MessagePart::text() const
+{
+ return mText;
+}
+
+void MessagePart::setText(const QString &text)
+{
+ mText = text;
+}
+
+bool MessagePart::isHtml() const
+{
+ return false;
+}
+
+MessagePart *MessagePart::parentPart() const
+{
+ return mParentPart;
+}
+
+void MessagePart::setParentPart(MessagePart *parentPart)
+{
+ mParentPart = parentPart;
+}
+
+QString MessagePart::htmlContent() const
+{
+ return text();
+}
+
+QString MessagePart::plaintextContent() const
+{
+ return text();
+}
+
+void MessagePart::parseInternal(KMime::Content *node, bool onlyOneMimePart)
+{
+ auto subMessagePart = mOtp->parseObjectTreeInternal(node, onlyOneMimePart);
+ mRoot = subMessagePart->isRoot();
+ for (const auto &part : std::as_const(subMessagePart->subParts())) {
+ appendSubPart(part);
+ }
+}
+
+void MessagePart::parseInternal(const QByteArray &data)
+{
+ auto tempNode = new KMime::Content();
+
+ const auto lfData = KMime::CRLFtoLF(data);
+ // We have to deal with both bodies and full parts. In inline encrypted/signed parts we can have nested parts,
+ // or just plain-text, and both ends up here. setContent defaults to setting only the header, so we have to avoid this.
+ if (lfData.contains("\n\n")) {
+ tempNode->setContent(lfData);
+ } else {
+ tempNode->setBody(lfData);
+ }
+ tempNode->parse();
+ tempNode->contentType()->setCharset(charset());
+ bindLifetime(tempNode);
+
+ if (!tempNode->head().isEmpty()) {
+ tempNode->contentDescription()->from7BitString(QByteArrayLiteral("temporary node"));
+ }
+
+ parseInternal(tempNode);
+}
+
+QString MessagePart::renderInternalText() const
+{
+ QString text;
+ for (const auto &mp : subParts()) {
+ text += mp->text();
+ }
+ return text;
+}
+
+void MessagePart::appendSubPart(const MessagePart::Ptr &messagePart)
+{
+ messagePart->setParentPart(this);
+ mBlocks.append(messagePart);
+}
+
+const QList<MessagePart::Ptr> &MessagePart::subParts() const
+{
+ return mBlocks;
+}
+
+bool MessagePart::hasSubParts() const
+{
+ return !mBlocks.isEmpty();
+}
+
+QList<SignedMessagePart *> MessagePart::signatures() const
+{
+ QList<SignedMessagePart *> list;
+ if (auto sig = dynamic_cast<SignedMessagePart *>(const_cast<MessagePart *>(this))) {
+ list << sig;
+ }
+ auto parent = parentPart();
+ while (parent) {
+ if (auto sig = dynamic_cast<SignedMessagePart *>(parent)) {
+ list << sig;
+ }
+ parent = parent->parentPart();
+ }
+ return list;
+}
+
+QList<EncryptedMessagePart *> MessagePart::encryptions() const
+{
+ QList<EncryptedMessagePart *> list;
+ if (auto sig = dynamic_cast<EncryptedMessagePart *>(const_cast<MessagePart *>(this))) {
+ list << sig;
+ }
+ auto parent = parentPart();
+ while (parent) {
+ if (auto sig = dynamic_cast<EncryptedMessagePart *>(parent)) {
+ list << sig;
+ }
+ parent = parent->parentPart();
+ }
+ return list;
+}
+
+KMMsgEncryptionState MessagePart::encryptionState() const
+{
+ if (!encryptions().isEmpty()) {
+ return KMMsgFullyEncrypted;
+ }
+ return KMMsgNotEncrypted;
+}
+
+KMMsgSignatureState MessagePart::signatureState() const
+{
+ if (!signatures().isEmpty()) {
+ return KMMsgFullySigned;
+ }
+ return KMMsgNotSigned;
+}
+
+void MessagePart::bindLifetime(KMime::Content *node)
+{
+ mNodesToDelete << node;
+}
+
+KMime::Headers::Base *MimeTreeParser::MessagePart::header(const char *header) const
+{
+ if (node() && node()->hasHeader(header)) {
+ return node()->headerByType(header);
+ }
+ if (auto parent = parentPart()) {
+ return parent->header(header);
+ }
+
+ return nullptr;
+}
+
+//-----MessagePartList----------------------
+MessagePartList::MessagePartList(ObjectTreeParser *otp, KMime::Content *node)
+ : MessagePart(otp, QString(), node)
+{
+}
+
+QString MessagePartList::text() const
+{
+ return renderInternalText();
+}
+
+QString MessagePartList::plaintextContent() const
+{
+ return QString();
+}
+
+QString MessagePartList::htmlContent() const
+{
+ return QString();
+}
+
+//-----TextMessageBlock----------------------
+
+TextMessagePart::TextMessagePart(ObjectTreeParser *otp, KMime::Content *node)
+ : MessagePartList(otp, node)
+ , mSignatureState(KMMsgSignatureStateUnknown)
+ , mEncryptionState(KMMsgEncryptionStateUnknown)
+{
+ if (!mNode) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "not a valid node";
+ return;
+ }
+
+ parseContent();
+}
+
+void TextMessagePart::parseContent()
+{
+ mSignatureState = KMMsgNotSigned;
+ mEncryptionState = KMMsgNotEncrypted;
+ const auto blocks = prepareMessageForDecryption(mNode->decodedContent());
+ // We also get blocks for unencrypted messages
+ if (!blocks.isEmpty()) {
+ auto aCodec = QStringDecoder(mOtp->codecNameFor(mNode).constData());
+ const auto cryptProto = QGpgME::openpgp();
+
+ /* The (overall) signature/encrypted status is broken
+ * if one unencrypted part is at the beginning or in the middle
+ * because mailmain adds an unencrypted part at the end this should not break the overall status
+ *
+ * That's why we first set the tmp status and if one crypted/signed block comes afterwards, than
+ * the status is set to unencryped
+ */
+ bool fullySignedOrEncrypted = true;
+ bool fullySignedOrEncryptedTmp = true;
+
+ for (const auto &block : blocks) {
+ if (!fullySignedOrEncryptedTmp) {
+ fullySignedOrEncrypted = false;
+ }
+
+ if (block.type() == NoPgpBlock && !block.text().trimmed().isEmpty()) {
+ fullySignedOrEncryptedTmp = false;
+ appendSubPart(MessagePart::Ptr(new MessagePart(mOtp, aCodec.decode(KMime::CRLFtoLF(block.text())))));
+ } else if (block.type() == PgpMessageBlock) {
+ auto content = new KMime::Content;
+ content->setBody(block.text());
+ content->parse();
+ content->contentType()->setCharset(charset());
+ EncryptedMessagePart::Ptr mp(new EncryptedMessagePart(mOtp, QString(), cryptProto, content, content, false));
+ mp->bindLifetime(content);
+ mp->setIsEncrypted(true);
+ appendSubPart(mp);
+ } else if (block.type() == ClearsignedBlock) {
+ auto content = new KMime::Content;
+ content->setBody(block.text());
+ content->parse();
+ content->contentType()->setCharset(charset());
+ SignedMessagePart::Ptr mp(new SignedMessagePart(mOtp, cryptProto, nullptr, content, false));
+ mp->bindLifetime(content);
+ appendSubPart(mp);
+ } else {
+ continue;
+ }
+
+ const auto mp = subParts().last().staticCast<MessagePart>();
+ const PartMetaData *messagePart(mp->partMetaData());
+
+ if (!messagePart->isEncrypted && !messagePart->isSigned() && !block.text().trimmed().isEmpty()) {
+ mp->setText(aCodec.decode(KMime::CRLFtoLF(block.text())));
+ }
+
+ if (messagePart->isEncrypted) {
+ mEncryptionState = KMMsgPartiallyEncrypted;
+ }
+
+ if (messagePart->isSigned()) {
+ mSignatureState = KMMsgPartiallySigned;
+ }
+ }
+
+ // Do we have an fully Signed/Encrypted Message?
+ if (fullySignedOrEncrypted) {
+ if (mSignatureState == KMMsgPartiallySigned) {
+ mSignatureState = KMMsgFullySigned;
+ }
+ if (mEncryptionState == KMMsgPartiallyEncrypted) {
+ mEncryptionState = KMMsgFullyEncrypted;
+ }
+ }
+ }
+}
+
+KMMsgEncryptionState TextMessagePart::encryptionState() const
+{
+ if (mEncryptionState == KMMsgNotEncrypted) {
+ return MessagePart::encryptionState();
+ }
+ return mEncryptionState;
+}
+
+KMMsgSignatureState TextMessagePart::signatureState() const
+{
+ if (mSignatureState == KMMsgNotSigned) {
+ return MessagePart::signatureState();
+ }
+ return mSignatureState;
+}
+
+//-----AttachmentMessageBlock----------------------
+
+AttachmentMessagePart::AttachmentMessagePart(ObjectTreeParser *otp, KMime::Content *node)
+ : TextMessagePart(otp, node)
+{
+}
+
+//-----HtmlMessageBlock----------------------
+
+HtmlMessagePart::HtmlMessagePart(ObjectTreeParser *otp, KMime::Content *node)
+ : MessagePart(otp, QString(), node)
+{
+ if (!mNode) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "not a valid node";
+ return;
+ }
+
+ setText(QStringDecoder(mOtp->codecNameFor(mNode).constData()).decode(KMime::CRLFtoLF(mNode->decodedContent())));
+}
+
+//-----MimeMessageBlock----------------------
+
+MimeMessagePart::MimeMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool onlyOneMimePart)
+ : MessagePart(otp, QString(), node)
+{
+ if (!mNode) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "not a valid node";
+ return;
+ }
+
+ parseInternal(mNode, onlyOneMimePart);
+}
+
+MimeMessagePart::~MimeMessagePart()
+{
+}
+
+QString MimeMessagePart::text() const
+{
+ return renderInternalText();
+}
+
+QString MimeMessagePart::plaintextContent() const
+{
+ return QString();
+}
+
+QString MimeMessagePart::htmlContent() const
+{
+ return QString();
+}
+
+//-----AlternativeMessagePart----------------------
+
+AlternativeMessagePart::AlternativeMessagePart(ObjectTreeParser *otp, KMime::Content *node)
+ : MessagePart(otp, QString(), node)
+{
+ if (auto dataIcal = findTypeInDirectChildren(mNode, "text/calendar")) {
+ mChildParts[MultipartIcal] = MimeMessagePart::Ptr(new MimeMessagePart(mOtp, dataIcal, true));
+ }
+
+ if (auto dataText = findTypeInDirectChildren(mNode, "text/plain")) {
+ mChildParts[MultipartPlain] = MimeMessagePart::Ptr(new MimeMessagePart(mOtp, dataText, true));
+ }
+
+ if (auto dataHtml = findTypeInDirectChildren(mNode, "text/html")) {
+ mChildParts[MultipartHtml] = MimeMessagePart::Ptr(new MimeMessagePart(mOtp, dataHtml, true));
+ } else {
+ // If we didn't find the HTML part as the first child of the multipart/alternative, it might
+ // be that this is a HTML message with images, and text/plain and multipart/related are the
+ // immediate children of this multipart/alternative node.
+ // In this case, the HTML node is a child of multipart/related.
+ // In the case of multipart/related we don't expect multiple html parts, it is usually used to group attachments
+ // with html content.
+ //
+ // In any case, this is not a complete implementation of MIME, but an approximation for the kind of mails we actually see in the wild.
+ auto data = [&] {
+ if (auto d = findTypeInDirectChildren(mNode, "multipart/related")) {
+ return d;
+ }
+ return findTypeInDirectChildren(mNode, "multipart/mixed");
+ }();
+ if (data) {
+ QString htmlContent;
+ const auto parts = data->contents();
+ for (auto p : parts) {
+ if ((!p->contentType()->isEmpty()) && (p->contentType()->mimeType() == "text/html")) {
+ htmlContent += MimeMessagePart(mOtp, p, true).text();
+ } else if (KMime::isAttachment(p)) {
+ appendSubPart(MimeMessagePart::Ptr(new MimeMessagePart(otp, p, true)));
+ }
+ }
+ mChildParts[MultipartHtml] = MessagePart::Ptr(new MessagePart(mOtp, htmlContent, nullptr));
+ }
+ }
+}
+
+AlternativeMessagePart::~AlternativeMessagePart()
+{
+}
+
+QList<AlternativeMessagePart::HtmlMode> AlternativeMessagePart::availableModes()
+{
+ return mChildParts.keys();
+}
+
+QString AlternativeMessagePart::text() const
+{
+ if (mChildParts.contains(MultipartPlain)) {
+ return mChildParts[MultipartPlain]->text();
+ }
+ return QString();
+}
+
+bool AlternativeMessagePart::isHtml() const
+{
+ return mChildParts.contains(MultipartHtml);
+}
+
+QString AlternativeMessagePart::plaintextContent() const
+{
+ return text();
+}
+
+QString AlternativeMessagePart::htmlContent() const
+{
+ if (mChildParts.contains(MultipartHtml)) {
+ return mChildParts[MultipartHtml]->text();
+ } else {
+ return plaintextContent();
+ }
+}
+
+QString AlternativeMessagePart::icalContent() const
+{
+ if (mChildParts.contains(MultipartIcal)) {
+ return mChildParts[MultipartIcal]->text();
+ }
+ return {};
+}
+
+//-----CertMessageBlock----------------------
+
+CertMessagePart::CertMessagePart(ObjectTreeParser *otp, KMime::Content *node, QGpgME::Protocol *cryptoProto)
+ : MessagePart(otp, QString(), node)
+ , mCryptoProto(cryptoProto)
+{
+ if (!mNode) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "not a valid node";
+ return;
+ }
+}
+
+CertMessagePart::~CertMessagePart()
+{
+}
+
+QString CertMessagePart::text() const
+{
+ return QString();
+}
+
+//-----SignedMessageBlock---------------------
+SignedMessagePart::SignedMessagePart(ObjectTreeParser *otp,
+ const QGpgME::Protocol *cryptoProto,
+ KMime::Content *node,
+ KMime::Content *signedData,
+ bool parseAfterDecryption)
+ : MessagePart(otp, {}, node)
+ , mParseAfterDecryption(parseAfterDecryption)
+ , mCryptoProto(cryptoProto)
+ , mSignedData(signedData)
+{
+ mMetaData.status = i18ndc("mimetreeparser", "@info:status", "Wrong Crypto Plug-In.");
+}
+
+SignedMessagePart::~SignedMessagePart() = default;
+
+const QGpgME::Protocol *SignedMessagePart::cryptoProto() const
+{
+ return mCryptoProto;
+}
+
+void SignedMessagePart::startVerification()
+{
+ if (!mSignedData) {
+ return;
+ }
+
+ mMetaData.status = i18ndc("mimetreeparser", "@info:status", "Wrong Crypto Plug-In.");
+ mMetaData.isEncrypted = false;
+ mMetaData.isDecryptable = false;
+
+ auto codec = QStringDecoder(mOtp->codecNameFor(mSignedData).constData());
+
+ // If we have a mNode, this is a detached signature
+ if (mNode) {
+ const auto signature = mNode->decodedContent();
+
+ // This is necessary in case the original data contained CRLF's. Otherwise the signature will not match the data (since KMIME normalizes to LF)
+ const QByteArray signedData = KMime::LFtoCRLF(mSignedData->encodedContent());
+
+ const auto job = mCryptoProto->verifyDetachedJob();
+ setVerificationResult(job->exec(signature, signedData), signedData);
+ job->deleteLater();
+ setText(codec.decode(KMime::CRLFtoLF(signedData)));
+ } else {
+ QByteArray outdata;
+ const auto job = mCryptoProto->verifyOpaqueJob();
+ setVerificationResult(job->exec(mSignedData->decodedContent(), outdata), outdata);
+ job->deleteLater();
+ setText(codec.decode(KMime::CRLFtoLF(outdata)));
+ }
+}
+
+void SignedMessagePart::setVerificationResult(const GpgME::VerificationResult &result, const QByteArray &signedData)
+{
+ mMetaData.verificationResult = result;
+
+ if (mMetaData.isSigned()) {
+ if (!signedData.isEmpty() && mParseAfterDecryption) {
+ parseInternal(signedData);
+ }
+ }
+}
+
+QString SignedMessagePart::plaintextContent() const
+{
+ if (!mNode) {
+ return MessagePart::text();
+ } else {
+ return QString();
+ }
+}
+
+QString SignedMessagePart::htmlContent() const
+{
+ if (!mNode) {
+ return MessagePart::text();
+ } else {
+ return QString();
+ }
+}
+
+//-----CryptMessageBlock---------------------
+EncryptedMessagePart::EncryptedMessagePart(ObjectTreeParser *otp,
+ const QString &text,
+ const QGpgME::Protocol *cryptoProto,
+ KMime::Content *node,
+ KMime::Content *encryptedNode,
+ bool parseAfterDecryption)
+ : MessagePart(otp, text, node)
+ , mParseAfterDecryption(parseAfterDecryption)
+ , mPassphraseError(false)
+ , mNoSecKey(false)
+ , mDecryptMessage(false)
+ , mCryptoProto(cryptoProto)
+ , mEncryptedNode(encryptedNode)
+{
+ mMetaData.isEncrypted = false;
+ mMetaData.isDecryptable = false;
+ mMetaData.status = i18ndc("mimetreeparser", "@info:status", "Wrong Crypto Plug-In.");
+}
+
+void EncryptedMessagePart::setIsEncrypted(bool encrypted)
+{
+ mMetaData.isEncrypted = encrypted;
+}
+
+bool EncryptedMessagePart::isEncrypted() const
+{
+ return mMetaData.isEncrypted;
+}
+
+const QGpgME::Protocol *EncryptedMessagePart::cryptoProto() const
+{
+ return mCryptoProto;
+}
+
+void EncryptedMessagePart::setDecryptMessage(bool decrypt)
+{
+ mDecryptMessage = decrypt;
+}
+
+bool EncryptedMessagePart::decryptMessage() const
+{
+ return mDecryptMessage;
+}
+
+bool EncryptedMessagePart::isDecryptable() const
+{
+ return mMetaData.isDecryptable;
+}
+
+bool EncryptedMessagePart::isNoSecKey() const
+{
+ return mNoSecKey;
+}
+
+bool EncryptedMessagePart::passphraseError() const
+{
+ return mPassphraseError;
+}
+
+bool EncryptedMessagePart::decrypt(KMime::Content &data)
+{
+ mError = NoError;
+ mMetaData.errorText.clear();
+ // FIXME
+ // mMetaData.auditLogError = GpgME::Error();
+ mMetaData.auditLog.clear();
+
+ const QByteArray ciphertext = data.decodedContent();
+ QByteArray plainText;
+ auto job = mCryptoProto->decryptVerifyJob();
+ const std::pair<GpgME::DecryptionResult, GpgME::VerificationResult> p = job->exec(ciphertext, plainText);
+ job->deleteLater();
+ auto decryptResult = p.first;
+ auto verifyResult = p.second;
+ mMetaData.verificationResult = verifyResult;
+
+ // Normalize CRLF's
+ plainText = KMime::CRLFtoLF(plainText);
+ auto codec = QStringDecoder(mOtp->codecNameFor(&data).constData());
+ const auto decoded = codec.decode(plainText);
+
+ if (partMetaData()->isSigned()) {
+ // We simply attach a signed message part to indicate that this content is also signed
+ // We're forwarding mNode to not loose the encoding information
+ auto subPart = SignedMessagePart::Ptr(new SignedMessagePart(mOtp, mCryptoProto, mNode, nullptr));
+ subPart->setText(decoded);
+ subPart->setVerificationResult(verifyResult, plainText);
+ appendSubPart(subPart);
+ }
+
+ mDecryptRecipients.clear();
+ bool cannotDecrypt = false;
+ bool bDecryptionOk = !decryptResult.error();
+
+ for (const auto &recipient : decryptResult.recipients()) {
+ if (!recipient.status()) {
+ bDecryptionOk = true;
+ }
+ GpgME::Key key;
+ key = Kleo::KeyCache::instance()->findByKeyIDOrFingerprint(recipient.keyID());
+ if (key.isNull()) {
+ auto ret = Kleo::KeyCache::instance()->findSubkeysByKeyID({recipient.keyID()});
+ if (ret.size() == 1) {
+ key = ret.front().parent();
+ }
+ if (key.isNull()) {
+ qCDebug(MIMETREEPARSER_CORE_LOG) << "Found no Key for KeyID " << recipient.keyID();
+ }
+ }
+ mDecryptRecipients.emplace_back(recipient, key);
+ }
+
+ if (!bDecryptionOk && partMetaData()->isSigned()) {
+ // Only a signed part
+ partMetaData()->isEncrypted = false;
+ bDecryptionOk = true;
+ mDecryptedData = plainText;
+ } else {
+ mPassphraseError = decryptResult.error().isCanceled() || decryptResult.error().code() == GPG_ERR_BAD_PASSPHRASE;
+ mMetaData.isEncrypted = bDecryptionOk || decryptResult.error().code() != GPG_ERR_NO_DATA;
+
+ if (decryptResult.error().isCanceled()) {
+ setDecryptMessage(false);
+ }
+
+ partMetaData()->errorText = QString::fromLocal8Bit(decryptResult.error().asString());
+ if (Kleo::DeVSCompliance::isCompliant()) {
+ partMetaData()->isCompliant = decryptResult.isDeVs();
+ partMetaData()->compliance = Kleo::DeVSCompliance::name(decryptResult.isDeVs());
+ } else {
+ partMetaData()->isCompliant = true;
+ }
+ if (partMetaData()->isEncrypted && decryptResult.numRecipients() > 0) {
+ partMetaData()->keyId = decryptResult.recipient(0).keyID();
+ }
+
+ if (bDecryptionOk) {
+ mDecryptedData = plainText;
+ } else {
+ mNoSecKey = true;
+ const auto decryRecipients = decryptResult.recipients();
+ for (const GpgME::DecryptionResult::Recipient &recipient : decryRecipients) {
+ mNoSecKey &= (recipient.status().code() == GPG_ERR_NO_SECKEY);
+ }
+ if (!mPassphraseError && !mNoSecKey) { // GpgME do not detect passphrase error correctly
+ mPassphraseError = true;
+ }
+ }
+ }
+
+ if (!bDecryptionOk) {
+ QString cryptPlugLibName;
+ mError = UnknownError;
+ if (mCryptoProto) {
+ cryptPlugLibName = mCryptoProto->name();
+ }
+
+ if (mNoSecKey) {
+ mError = NoKeyError;
+ }
+
+ if (mPassphraseError) {
+ mError = PassphraseError;
+ }
+
+ if (!mCryptoProto) {
+ partMetaData()->errorText = i18n("No appropriate crypto plug-in was found.");
+ } else if (cannotDecrypt) {
+ partMetaData()->errorText = i18n("Crypto plug-in \"%1\" cannot decrypt messages.", cryptPlugLibName);
+ } else if (!passphraseError()) {
+ partMetaData()->errorText = i18n("Crypto plug-in \"%1\" could not decrypt the data.", cryptPlugLibName) + QLatin1StringView("<br />")
+ + i18n("Error: %1", partMetaData()->errorText);
+ }
+ }
+ return bDecryptionOk;
+}
+
+void EncryptedMessagePart::startDecryption(KMime::Content *data)
+{
+ mMetaData.isEncrypted = true;
+ mMetaData.isDecryptable = decrypt(*data);
+
+ if (mParseAfterDecryption && !mMetaData.isSigned()) {
+ parseInternal(mDecryptedData);
+ } else {
+ setText(QString::fromUtf8(mDecryptedData.constData()));
+ }
+}
+
+void EncryptedMessagePart::startDecryption()
+{
+ if (mEncryptedNode) {
+ startDecryption(mEncryptedNode);
+ } else {
+ startDecryption(mNode);
+ }
+}
+
+std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> EncryptedMessagePart::decryptRecipients() const
+{
+ return mDecryptRecipients;
+}
+
+QString EncryptedMessagePart::plaintextContent() const
+{
+ if (!mNode) {
+ return MessagePart::text();
+ } else {
+ return QString();
+ }
+}
+
+QString EncryptedMessagePart::htmlContent() const
+{
+ if (!mNode) {
+ return MessagePart::text();
+ } else {
+ return QString();
+ }
+}
+
+QString EncryptedMessagePart::text() const
+{
+ if (hasSubParts()) {
+ auto _mp = (subParts()[0]).dynamicCast<SignedMessagePart>();
+ if (_mp) {
+ return _mp->text();
+ }
+ }
+
+ return MessagePart::text();
+}
+
+EncapsulatedRfc822MessagePart::EncapsulatedRfc822MessagePart(ObjectTreeParser *otp, KMime::Content *node, const KMime::Message::Ptr &message)
+ : MessagePart(otp, QString(), node)
+ , mMessage(message)
+{
+ mMetaData.isEncrypted = false;
+ mMetaData.isEncapsulatedRfc822Message = true;
+
+ if (!mMessage) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Node is of type message/rfc822 but doesn't have a message!";
+ return;
+ }
+
+ parseInternal(message.data());
+}
+
+QString EncapsulatedRfc822MessagePart::text() const
+{
+ return renderInternalText();
+}
+
+QString EncapsulatedRfc822MessagePart::from() const
+{
+ if (auto from = mMessage->from(false)) {
+ return from->asUnicodeString();
+ }
+ return {};
+}
+
+QDateTime EncapsulatedRfc822MessagePart::date() const
+{
+ if (auto date = mMessage->date(false)) {
+ return date->dateTime();
+ }
+ return {};
+}
+
+HeadersPart::HeadersPart(ObjectTreeParser *otp, KMime::Content *node)
+ : MessagePart(otp, QString(), node)
+{
+}
+
+#include "moc_messagepart.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "enums.h"
+#include "mimetreeparser_core_export.h"
+#include "partmetadata.h"
+
+#include <gpgme++/decryptionresult.h>
+#include <gpgme++/importresult.h>
+#include <gpgme++/verificationresult.h>
+
+#include <KMime/Message>
+
+#include <QMap>
+#include <QSharedPointer>
+#include <QString>
+
+namespace KMime
+{
+class Content;
+}
+
+namespace QGpgME
+{
+class Protocol;
+}
+
+namespace MimeTreeParser
+{
+
+class ObjectTreeParser;
+class MultiPartAlternativeBodyPartFormatter;
+
+class SignedMessagePart;
+class EncryptedMessagePart;
+
+class MIMETREEPARSER_CORE_EXPORT MessagePart : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool attachment READ isAttachment CONSTANT)
+ Q_PROPERTY(bool root READ isRoot CONSTANT)
+ Q_PROPERTY(bool isHtml READ isHtml CONSTANT)
+ Q_PROPERTY(QString plaintextContent READ plaintextContent CONSTANT)
+ Q_PROPERTY(QString htmlContent READ htmlContent CONSTANT)
+public:
+ enum Disposition {
+ Inline,
+ Attachment,
+ Invalid,
+ };
+ using Ptr = QSharedPointer<MessagePart>;
+ using List = QList<Ptr>;
+ MessagePart(ObjectTreeParser *otp, const QString &text, KMime::Content *node = nullptr);
+
+ ~MessagePart() override;
+
+ [[nodiscard]] virtual QString text() const;
+ void setText(const QString &text);
+ [[nodiscard]] virtual bool isAttachment() const;
+
+ void setIsRoot(bool root);
+ [[nodiscard]] bool isRoot() const;
+
+ void setParentPart(MessagePart *parentPart);
+ [[nodiscard]] MessagePart *parentPart() const;
+
+ [[nodiscard]] virtual QString plaintextContent() const;
+ [[nodiscard]] virtual QString htmlContent() const;
+
+ [[nodiscard]] virtual bool isHtml() const;
+
+ [[nodiscard]] QByteArray mimeType() const;
+ [[nodiscard]] QByteArray charset() const;
+ [[nodiscard]] QString filename() const;
+ [[nodiscard]] Disposition disposition() const;
+ [[nodiscard]] bool isText() const;
+
+ enum Error {
+ NoError = 0,
+ PassphraseError,
+ NoKeyError,
+ UnknownError,
+ };
+
+ [[nodiscard]] Error error() const;
+ [[nodiscard]] QString errorString() const;
+
+ [[nodiscard]] PartMetaData *partMetaData();
+
+ void appendSubPart(const MessagePart::Ptr &messagePart);
+ [[nodiscard]] const QList<MessagePart::Ptr> &subParts() const;
+ [[nodiscard]] bool hasSubParts() const;
+
+ KMime::Content *node() const;
+
+ virtual KMMsgSignatureState signatureState() const;
+ virtual KMMsgEncryptionState encryptionState() const;
+
+ [[nodiscard]] QList<SignedMessagePart *> signatures() const;
+ [[nodiscard]] QList<EncryptedMessagePart *> encryptions() const;
+
+ /**
+ * Retrieve the header @header in this part or any parent parent.
+ *
+ * Useful for MemoryHole support.
+ */
+ [[nodiscard]] KMime::Headers::Base *header(const char *header) const;
+
+ void bindLifetime(KMime::Content *);
+
+protected:
+ void parseInternal(KMime::Content *node, bool onlyOneMimePart = false);
+ void parseInternal(const QByteArray &data);
+ [[nodiscard]] QString renderInternalText() const;
+
+ QString mText;
+ ObjectTreeParser *mOtp;
+ PartMetaData mMetaData;
+ MessagePart *mParentPart;
+ KMime::Content *mNode;
+ QList<KMime::Content *> mNodesToDelete;
+ Error mError;
+
+private:
+ QList<MessagePart::Ptr> mBlocks;
+ bool mRoot;
+};
+
+class MIMETREEPARSER_CORE_EXPORT MimeMessagePart : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<MimeMessagePart> Ptr;
+ MimeMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, bool onlyOneMimePart = false);
+ virtual ~MimeMessagePart();
+
+ [[nodiscard]] QString text() const override;
+
+ [[nodiscard]] QString plaintextContent() const override;
+ [[nodiscard]] QString htmlContent() const override;
+
+private:
+ friend class AlternativeMessagePart;
+};
+
+class MIMETREEPARSER_CORE_EXPORT MessagePartList : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<MessagePartList> Ptr;
+ MessagePartList(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node);
+ ~MessagePartList() override = default;
+
+ [[nodiscard]] QString text() const override;
+
+ [[nodiscard]] QString plaintextContent() const override;
+ [[nodiscard]] QString htmlContent() const override;
+};
+
+class MIMETREEPARSER_CORE_EXPORT TextMessagePart : public MessagePartList
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<TextMessagePart> Ptr;
+ TextMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node);
+ ~TextMessagePart() override = default;
+
+ [[nodiscard]] KMMsgSignatureState signatureState() const override;
+ [[nodiscard]] KMMsgEncryptionState encryptionState() const override;
+
+private:
+ MIMETREEPARSER_CORE_NO_EXPORT void parseContent();
+
+ KMMsgSignatureState mSignatureState;
+ KMMsgEncryptionState mEncryptionState;
+
+ friend class ObjectTreeParser;
+};
+
+class MIMETREEPARSER_CORE_EXPORT AttachmentMessagePart : public TextMessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<AttachmentMessagePart> Ptr;
+ AttachmentMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node);
+ ~AttachmentMessagePart() override = default;
+ [[nodiscard]] virtual bool isAttachment() const override
+ {
+ return true;
+ }
+};
+
+class MIMETREEPARSER_CORE_EXPORT HtmlMessagePart : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<HtmlMessagePart> Ptr;
+ HtmlMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node);
+
+ ~HtmlMessagePart() override = default;
+ [[nodiscard]] bool isHtml() const override
+ {
+ return true;
+ }
+};
+
+class MIMETREEPARSER_CORE_EXPORT AlternativeMessagePart : public MessagePart
+{
+ Q_OBJECT
+public:
+ enum HtmlMode {
+ Normal, ///< A normal plaintext message, non-multipart
+ Html, ///< A HTML message, non-multipart
+ MultipartPlain, ///< A multipart/alternative message, the plain text part is currently displayed
+ MultipartHtml, ///< A multipart/altervative message, the HTML part is currently displayed
+ MultipartIcal ///< A multipart/altervative message, the ICal part is currently displayed
+ };
+
+ typedef QSharedPointer<AlternativeMessagePart> Ptr;
+ AlternativeMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node);
+ ~AlternativeMessagePart() override;
+
+ [[nodiscard]] QString text() const override;
+
+ [[nodiscard]] bool isHtml() const override;
+
+ [[nodiscard]] QString plaintextContent() const override;
+ [[nodiscard]] QString htmlContent() const override;
+ [[nodiscard]] QString icalContent() const;
+
+ [[nodiscard]] QList<HtmlMode> availableModes();
+
+private:
+ QMap<HtmlMode, MessagePart::Ptr> mChildParts;
+
+ friend class ObjectTreeParser;
+ friend class MultiPartAlternativeBodyPartFormatter;
+};
+
+class MIMETREEPARSER_CORE_EXPORT CertMessagePart : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<CertMessagePart> Ptr;
+ CertMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, QGpgME::Protocol *cryptoProto);
+ ~CertMessagePart() override;
+
+ [[nodiscard]] QString text() const override;
+
+private:
+ const QGpgME::Protocol *mCryptoProto;
+ GpgME::ImportResult mInportResult;
+};
+
+class MIMETREEPARSER_CORE_EXPORT EncapsulatedRfc822MessagePart : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<EncapsulatedRfc822MessagePart> Ptr;
+ EncapsulatedRfc822MessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, const KMime::Message::Ptr &message);
+ ~EncapsulatedRfc822MessagePart() override = default;
+
+ [[nodiscard]] QString text() const override;
+ [[nodiscard]] QString from() const;
+ [[nodiscard]] QDateTime date() const;
+
+private:
+ const KMime::Message::Ptr mMessage;
+};
+
+class MIMETREEPARSER_CORE_EXPORT EncryptedMessagePart : public MessagePart
+{
+ Q_OBJECT
+ Q_PROPERTY(bool decryptMessage READ decryptMessage WRITE setDecryptMessage)
+ Q_PROPERTY(bool isEncrypted READ isEncrypted)
+ Q_PROPERTY(bool isNoSecKey READ isNoSecKey)
+ Q_PROPERTY(bool passphraseError READ passphraseError)
+public:
+ typedef QSharedPointer<EncryptedMessagePart> Ptr;
+ EncryptedMessagePart(ObjectTreeParser *otp,
+ const QString &text,
+ const QGpgME::Protocol *protocol,
+ KMime::Content *node,
+ KMime::Content *encryptedNode = nullptr,
+ bool parseAfterDecryption = true);
+
+ ~EncryptedMessagePart() override = default;
+
+ [[nodiscard]] QString text() const override;
+
+ void setDecryptMessage(bool decrypt);
+ [[nodiscard]] bool decryptMessage() const;
+
+ void setIsEncrypted(bool encrypted);
+ [[nodiscard]] bool isEncrypted() const;
+
+ [[nodiscard]] bool isDecryptable() const;
+
+ [[nodiscard]] bool isNoSecKey() const;
+ [[nodiscard]] bool passphraseError() const;
+
+ void startDecryption(KMime::Content *data);
+ void startDecryption();
+
+ QByteArray mDecryptedData;
+
+ [[nodiscard]] QString plaintextContent() const override;
+ [[nodiscard]] QString htmlContent() const override;
+
+ const QGpgME::Protocol *cryptoProto() const;
+
+ std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> decryptRecipients() const;
+
+private:
+ [[nodiscard]] MIMETREEPARSER_CORE_NO_EXPORT bool decrypt(KMime::Content &data);
+ bool mParseAfterDecryption{true};
+
+protected:
+ bool mPassphraseError;
+ bool mNoSecKey;
+ bool mDecryptMessage;
+ const QGpgME::Protocol *mCryptoProto;
+ QByteArray mVerifiedText;
+ std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> mDecryptRecipients;
+ KMime::Content *mEncryptedNode;
+};
+
+class MIMETREEPARSER_CORE_EXPORT SignedMessagePart : public MessagePart
+{
+ Q_OBJECT
+
+public:
+ using Ptr = QSharedPointer<SignedMessagePart>;
+ SignedMessagePart(ObjectTreeParser *otp,
+ const QGpgME::Protocol *protocol,
+ KMime::Content *node,
+ KMime::Content *signedData,
+ bool parseAfterDecryption = true);
+
+ ~SignedMessagePart() override;
+
+ void startVerification();
+
+ [[nodiscard]] QString plaintextContent() const override;
+ [[nodiscard]] QString htmlContent() const override;
+
+ const QGpgME::Protocol *cryptoProto() const;
+
+private:
+ MIMETREEPARSER_CORE_NO_EXPORT void setVerificationResult(const GpgME::VerificationResult &result, const QByteArray &signedData);
+ bool mParseAfterDecryption{true};
+
+protected:
+ const QGpgME::Protocol *mCryptoProto;
+ KMime::Content *mSignedData;
+ std::vector<GpgME::Signature> mSignatures;
+
+ friend EncryptedMessagePart;
+};
+
+class MIMETREEPARSER_CORE_EXPORT HeadersPart : public MessagePart
+{
+ Q_OBJECT
+public:
+ typedef QSharedPointer<HeadersPart> Ptr;
+ HeadersPart(ObjectTreeParser *otp, KMime::Content *node);
+ ~HeadersPart() override = default;
+};
+
+}
--- /dev/null
+// This file is part of KMail, the KDE mail client.
+// SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
+// SPDX-FileCopyrightText: 2002-2004 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.net
+// SPDX-FileCopyrightText: 2009 Andras Mantia <andras@kdab.net>
+// SPDX-FileCopyrightText: 2015 Sandro Knauß <sknauss@kde.org>
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf <mollekopf@kolabsystems.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "objecttreeparser.h"
+
+#include "bodypartformatterbasefactory.h"
+
+#include "bodypartformatter.h"
+
+#include <KMime/Message>
+
+#include <QByteArray>
+#include <QDebug>
+#include <QMimeDatabase>
+#include <QRegularExpression>
+#include <QStringDecoder>
+#include <QTextStream>
+#include <QUrl>
+
+using namespace MimeTreeParser;
+
+/*
+ * Collect message parts bottom up.
+ * Filter to avoid evaluating a subtree.
+ * Select parts to include it in the result set. Selecting a part in a branch will keep any parent parts from being selected.
+ */
+static QList<MessagePart::Ptr> collect(MessagePart::Ptr start,
+ const std::function<bool(const MessagePart::Ptr &)> &evaluateSubtree,
+ const std::function<bool(const MessagePart::Ptr &)> &select)
+{
+ auto ptr = start.dynamicCast<MessagePart>();
+ Q_ASSERT(ptr);
+ MessagePart::List list;
+ if (evaluateSubtree(ptr)) {
+ for (const auto &p : ptr->subParts()) {
+ list << ::collect(p, evaluateSubtree, select);
+ }
+ }
+
+ // Don't consider this part if we already selected a subpart
+ if (list.isEmpty()) {
+ if (select(ptr)) {
+ list << start;
+ }
+ }
+ return list;
+}
+
+QString ObjectTreeParser::plainTextContent()
+{
+ QString content;
+ if (mParsedPart) {
+ auto plainParts = ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [](const MessagePart::Ptr &part) {
+ if (part->isAttachment()) {
+ return false;
+ }
+ if (dynamic_cast<MimeTreeParser::TextMessagePart *>(part.data())) {
+ return true;
+ }
+ if (dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(part.data())) {
+ return true;
+ }
+ return false;
+ });
+ for (const auto &part : plainParts) {
+ content += part->text();
+ }
+ }
+ return content;
+}
+
+QString ObjectTreeParser::htmlContent()
+{
+ QString content;
+ if (mParsedPart) {
+ MessagePart::List contentParts = ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [](const MessagePart::Ptr &part) {
+ if (dynamic_cast<MimeTreeParser::HtmlMessagePart *>(part.data())) {
+ return true;
+ }
+ if (dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(part.data())) {
+ return true;
+ }
+ return false;
+ });
+ for (const auto &part : contentParts) {
+ if (auto p = dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(part.data())) {
+ content += p->htmlContent();
+ } else {
+ content += part->text();
+ }
+ }
+ }
+ return content;
+}
+
+bool ObjectTreeParser::hasEncryptedParts() const
+{
+ bool result = false;
+
+ ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [&result](const MessagePart::Ptr &part) {
+ if (const auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart *>(part.data())) {
+ result = true;
+ }
+ return false;
+ });
+
+ return result;
+}
+
+bool ObjectTreeParser::hasSignedParts() const
+{
+ bool result = false;
+
+ ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [&result](const MessagePart::Ptr &part) {
+ if (const auto enc = dynamic_cast<MimeTreeParser::SignedMessagePart *>(part.data())) {
+ result = true;
+ }
+ return false;
+ });
+
+ return result;
+}
+
+static void print(QTextStream &stream, KMime::Content *node, const QString prefix = {})
+{
+ QByteArray mediaType("text");
+ QByteArray subType("plain");
+ if (node->contentType(false) && !node->contentType()->mediaType().isEmpty() && !node->contentType()->subType().isEmpty()) {
+ mediaType = node->contentType()->mediaType();
+ subType = node->contentType()->subType();
+ }
+ stream << prefix << "! " << mediaType << subType << " isAttachment: " << KMime::isAttachment(node) << "\n";
+ const auto contents = node->contents();
+ for (const auto nodeContent : contents) {
+ print(stream, nodeContent, prefix + QLatin1StringView(" "));
+ }
+}
+
+static void print(QTextStream &stream, const MessagePart &messagePart, const QByteArray pre = {})
+{
+ stream << pre << "# " << messagePart.metaObject()->className() << " isAttachment: " << messagePart.isAttachment() << "\n";
+ const auto subParts = messagePart.subParts();
+ for (const auto &subPart : subParts) {
+ print(stream, *subPart, pre + " ");
+ }
+}
+
+QString ObjectTreeParser::structureAsString() const
+{
+ QString string;
+ QTextStream stream{&string};
+
+ if (mTopLevelContent) {
+ ::print(stream, mTopLevelContent);
+ }
+ if (mParsedPart) {
+ ::print(stream, *mParsedPart);
+ }
+ return string;
+}
+
+void ObjectTreeParser::print()
+{
+ qInfo().noquote() << structureAsString();
+}
+
+static KMime::Content *find(KMime::Content *node, const std::function<bool(KMime::Content *)> &select)
+{
+ QByteArray mediaType("text");
+ QByteArray subType("plain");
+ if (node->contentType(false) && !node->contentType()->mediaType().isEmpty() && !node->contentType()->subType().isEmpty()) {
+ mediaType = node->contentType()->mediaType();
+ subType = node->contentType()->subType();
+ }
+ if (select(node)) {
+ return node;
+ }
+ const auto contents = node->contents();
+ for (const auto nodeContent : contents) {
+ if (const auto content = find(nodeContent, select)) {
+ return content;
+ }
+ }
+ return nullptr;
+}
+
+KMime::Content *ObjectTreeParser::find(const std::function<bool(KMime::Content *)> &select)
+{
+ return ::find(mTopLevelContent, select);
+}
+
+MessagePart::List ObjectTreeParser::collectContentParts()
+{
+ return collectContentParts(mParsedPart);
+}
+
+MessagePart::List ObjectTreeParser::collectContentParts(MessagePart::Ptr start)
+{
+ return ::collect(
+ start,
+ [start](const MessagePart::Ptr &part) {
+ // Ignore the top-level
+ if (start.data() == part.data()) {
+ return true;
+ }
+ if (auto encapsulatedPart = part.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) {
+ return false;
+ }
+ return true;
+ },
+ [start](const MessagePart::Ptr &part) {
+ if (const auto attachment = dynamic_cast<MimeTreeParser::AttachmentMessagePart *>(part.data())) {
+ return attachment->mimeType() == QByteArrayLiteral("text/calendar");
+ } else if (const auto text = dynamic_cast<MimeTreeParser::TextMessagePart *>(part.data())) {
+ auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart *>(text->parentPart());
+ if (enc && enc->error()) {
+ return false;
+ }
+
+ return true;
+ } else if (dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(part.data())) {
+ return true;
+ } else if (dynamic_cast<MimeTreeParser::HtmlMessagePart *>(part.data())) {
+ // Don't if we have an alternative part as parent
+ return true;
+ } else if (dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(part.data())) {
+ if (start.data() == part.data()) {
+ return false;
+ }
+ return true;
+ } else if (const auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart *>(part.data())) {
+ if (enc->error()) {
+ return true;
+ }
+ // If we have a textpart with encrypted and unencrypted subparts we want to return the textpart
+ if (dynamic_cast<MimeTreeParser::TextMessagePart *>(enc->parentPart())) {
+ return false;
+ }
+ } else if (const auto sig = dynamic_cast<MimeTreeParser::SignedMessagePart *>(part.data())) {
+ // Signatures without subparts already contain the text
+ return !sig->hasSubParts();
+ }
+ return false;
+ });
+}
+
+MessagePart::List ObjectTreeParser::collectAttachmentParts()
+{
+ MessagePart::List contentParts = ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [](const MessagePart::Ptr &part) {
+ return part->isAttachment();
+ });
+ return contentParts;
+}
+
+/*
+ * This naive implementation assumes that there is an encrypted part wrapping a signature.
+ * For other cases we would have to process both recursively (I think?)
+ */
+void ObjectTreeParser::decryptAndVerify()
+{
+ // We first decrypt
+ ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [](const MessagePart::Ptr &part) {
+ if (const auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart *>(part.data())) {
+ enc->startDecryption();
+ }
+ return false;
+ });
+ // And then verify the available signatures
+ ::collect(
+ mParsedPart,
+ [](const MessagePart::Ptr &) {
+ return true;
+ },
+ [](const MessagePart::Ptr &part) {
+ if (const auto enc = dynamic_cast<MimeTreeParser::SignedMessagePart *>(part.data())) {
+ enc->startVerification();
+ }
+ return false;
+ });
+}
+
+QString ObjectTreeParser::resolveCidLinks(const QString &html)
+{
+ auto text = html;
+ static const auto regex = QRegularExpression(QLatin1StringView("(src)\\s*=\\s*(\"|')(cid:[^\"']+)\\2"));
+ auto it = regex.globalMatchView(text);
+ while (it.hasNext()) {
+ const auto match = it.next();
+ const auto link = QUrl(match.captured(3));
+ auto cid = link.path();
+ auto mailMime = const_cast<KMime::Content *>(find([=](KMime::Content *content) {
+ if (!content || !content->contentID(false)) {
+ return false;
+ }
+ return QString::fromLatin1(content->contentID(false)->identifier()) == cid;
+ }));
+ if (mailMime) {
+ const auto contentType = mailMime->contentType(false);
+ if (!contentType) {
+ qWarning() << "No content type, skipping";
+ continue;
+ }
+ QMimeDatabase mimeDb;
+ const auto mimetype = mimeDb.mimeTypeForName(QString::fromLatin1(contentType->mimeType())).name();
+ if (mimetype.startsWith(QLatin1StringView("image/"))) {
+ // We reencode to base64 below.
+ const auto data = mailMime->decodedContent();
+ if (data.isEmpty()) {
+ qWarning() << "Attachment is empty.";
+ continue;
+ }
+ text.replace(match.captured(0), QString::fromLatin1("src=\"data:%1;base64,%2\"").arg(mimetype, QString::fromLatin1(data.toBase64())));
+ }
+ } else {
+ qWarning() << "Failed to find referenced attachment: " << cid;
+ }
+ }
+ return text;
+}
+
+//-----------------------------------------------------------------------------
+
+void ObjectTreeParser::parseObjectTree(const QByteArray &mimeMessage)
+{
+ const auto mailData = KMime::CRLFtoLF(mimeMessage);
+ mMsg = KMime::Message::Ptr(new KMime::Message);
+ mMsg->setContent(mailData);
+ mMsg->parse();
+ // We avoid using mMsg->contentType()->charset(), because that will just return kmime's defaultCharset(), ISO-8859-1
+ const auto charset = mMsg->contentType()->parameter("charset").toLatin1();
+ if (charset.isEmpty()) {
+ mMsg->contentType()->setCharset("us-ascii");
+ }
+ parseObjectTree(mMsg.data());
+}
+
+void ObjectTreeParser::parseObjectTree(KMime::Content *node)
+{
+ mTopLevelContent = node;
+ mParsedPart = parseObjectTreeInternal(node, false);
+}
+
+MessagePart::Ptr ObjectTreeParser::parsedPart() const
+{
+ return mParsedPart;
+}
+
+/*
+ * This will lookup suitable formatters based on the type,
+ * and let them generate a list of parts.
+ * If the formatter generated a list of parts, then those are taken, otherwise we move on to the next match.
+ */
+MessagePart::List ObjectTreeParser::processType(KMime::Content *node, const QByteArray &mediaType, const QByteArray &subType)
+{
+ static MimeTreeParser::BodyPartFormatterBaseFactory factory;
+ const auto sub = factory.subtypeRegistry(mediaType.constData());
+ const auto range = sub.equal_range(subType.constData());
+ for (auto it = range.first; it != range.second; ++it) {
+ const auto formatter = it->second;
+ if (!formatter) {
+ continue;
+ }
+ const auto list = formatter->processList(this, node);
+ if (!list.isEmpty()) {
+ return list;
+ }
+ }
+ return {};
+}
+
+MessagePart::Ptr ObjectTreeParser::parseObjectTreeInternal(KMime::Content *node, bool onlyOneMimePart)
+{
+ if (!node) {
+ return MessagePart::Ptr();
+ }
+
+ auto parsedPart = MessagePart::Ptr(new MessagePartList(this, node));
+ parsedPart->setIsRoot(node->isTopLevel());
+ const auto contents = node->parent() ? node->parent()->contents() : KMime::Content::List{node};
+ for (int i = contents.indexOf(node); i < contents.size(); ++i) {
+ node = contents.at(i);
+
+ QByteArray mediaType("text");
+ QByteArray subType("plain");
+ if (node->contentType(false) && !node->contentType()->mediaType().isEmpty() && !node->contentType()->subType().isEmpty()) {
+ mediaType = node->contentType()->mediaType();
+ subType = node->contentType()->subType();
+ }
+
+ auto messageParts = [&] {
+ // Try the specific type handler
+ {
+ auto list = processType(node, mediaType, subType);
+ if (!list.isEmpty()) {
+ return list;
+ }
+ }
+ // Fallback to the generic handler
+ {
+ auto list = processType(node, mediaType, QByteArrayLiteral("*"));
+ if (!list.isEmpty()) {
+ return list;
+ }
+ }
+ // Fallback to the default handler
+ return defaultHandling(node);
+ }();
+
+ for (const auto &part : messageParts) {
+ parsedPart->appendSubPart(part);
+ }
+
+ if (onlyOneMimePart) {
+ break;
+ }
+ }
+
+ return parsedPart;
+}
+
+QList<MessagePart::Ptr> ObjectTreeParser::defaultHandling(KMime::Content *node)
+{
+ if (node->contentType()->mimeType() == QByteArrayLiteral("application/octet-stream")
+ && (node->contentType()->name().endsWith(QLatin1StringView("p7m")) || node->contentType()->name().endsWith(QLatin1StringView("p7s"))
+ || node->contentType()->name().endsWith(QLatin1StringView("p7c")))) {
+ auto list = processType(node, "application", "pkcs7-mime");
+ if (!list.isEmpty()) {
+ return list;
+ }
+ }
+
+ return {AttachmentMessagePart::Ptr(new AttachmentMessagePart(this, node))};
+}
+
+QByteArray ObjectTreeParser::codecNameFor(KMime::Content *node) const
+{
+ if (!node) {
+ return QByteArrayLiteral("UTF-8");
+ }
+
+ QByteArray charset = node->contentType()->charset().toLower();
+
+ // utf-8 is a superset of us-ascii, so we don't lose anything if we use it instead
+ // utf-8 is used so widely nowadays that it is a good idea to use it to fix issues with broken clients.
+ if (charset == QByteArrayLiteral("us-ascii")) {
+ charset = QByteArrayLiteral("utf-8");
+ }
+ if (!charset.isEmpty()) {
+ if (const QStringDecoder c(charset.constData()); c.isValid()) {
+ return charset;
+ }
+ }
+ // no charset means us-ascii (RFC 2045), so using local encoding should
+ // be okay
+ return QByteArrayLiteral("UTF-8");
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
+// SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
+// SPDX-FileCopyrightText: 2002-2003, 2009 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.net
+// SPDX-FileCopyrightText: 2009 Andras Mantia <andras@kdab.net>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "messagepart.h"
+
+#include "mimetreeparser_core_export.h"
+#include <QSharedPointer>
+#include <functional>
+
+class QString;
+
+namespace KMime
+{
+class Content;
+}
+
+namespace MimeTreeParser
+{
+
+/**
+ Entry point to parse mime messages.
+
+ Content returned by the ObjectTreeParser (including messageparts),
+ is normalized to not contain any CRLF's but only LF's (just like KMime).
+*/
+class MIMETREEPARSER_CORE_EXPORT ObjectTreeParser
+{
+ // Disable copy
+ ObjectTreeParser(const ObjectTreeParser &other);
+
+public:
+ explicit ObjectTreeParser() = default;
+ virtual ~ObjectTreeParser() = default;
+
+ [[nodiscard]] QString structureAsString() const;
+ void print();
+
+ /// The text of the message, ie. what would appear in the
+ /// composer's text editor if this was edited or replied to.
+ /// This is usually the content of the first text/plain MIME part.
+ [[nodiscard]] QString plainTextContent();
+
+ /// Similar to plainTextContent(), but returns the HTML source of
+ /// the first text/html MIME part.
+ [[nodiscard]] QString htmlContent();
+
+ /// Returns whether the parsed message contains encrypted parts.
+ [[nodiscard]] bool hasEncryptedParts() const;
+
+ /// Returns whether the parsed message contains signed parts.
+ ///
+ /// \warning This doesn't check whether signed parts exists inside
+ /// encrypted parts that have not been decrypted yet.
+ [[nodiscard]] bool hasSignedParts() const;
+
+ /** Parse beginning at a given node and recursively parsing
+ the children of that node and it's next sibling. */
+ void parseObjectTree(KMime::Content *node);
+ void parseObjectTree(const QByteArray &mimeMessage);
+ MessagePart::Ptr parsedPart() const;
+ [[nodiscard]] KMime::Content *find(const std::function<bool(KMime::Content *)> &select);
+ [[nodiscard]] MessagePart::List collectContentParts();
+ [[nodiscard]] MessagePart::List collectContentParts(MessagePart::Ptr start);
+ [[nodiscard]] MessagePart::List collectAttachmentParts();
+
+ /** Decrypt parts and verify signatures */
+ void decryptAndVerify();
+
+ /** Embedd content referenced by cid by inlining */
+ [[nodiscard]] QString resolveCidLinks(const QString &html);
+
+private:
+ /**
+ * Does the actual work for parseObjectTree. Unlike parseObjectTree(), this does not change the
+ * top-level content.
+ */
+ MIMETREEPARSER_CORE_NO_EXPORT MessagePart::Ptr parseObjectTreeInternal(KMime::Content *node, bool mOnlyOneMimePart);
+ MIMETREEPARSER_CORE_NO_EXPORT MessagePart::List processType(KMime::Content *node, const QByteArray &mediaType, const QByteArray &subType);
+
+ MIMETREEPARSER_CORE_NO_EXPORT MessagePart::List defaultHandling(KMime::Content *node);
+
+ MIMETREEPARSER_CORE_NO_EXPORT QByteArray codecNameFor(KMime::Content *node) const;
+
+ KMime::Content *mTopLevelContent{nullptr};
+ MessagePart::Ptr mParsedPart;
+
+ KMime::Message::Ptr mMsg;
+
+ friend class MessagePart;
+ friend class EncryptedMessagePart;
+ friend class SignedMessagePart;
+ friend class EncapsulatedRfc822MessagePart;
+ friend class TextMessagePart;
+ friend class HtmlMessagePart;
+ friend class TextPlainBodyPartFormatter;
+ friend class MultiPartSignedBodyPartFormatter;
+ friend class ApplicationPkcs7MimeBodyPartFormatter;
+};
+
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2002-2003 Karl-Heinz Zimmer <khz@kde.org>
+// SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <QDateTime>
+#include <QStringList>
+#include <gpgme++/context.h>
+#include <gpgme++/verificationresult.h>
+
+namespace MimeTreeParser
+{
+
+class PartMetaData
+{
+public:
+ PartMetaData()
+ : isEncrypted(false)
+ , isDecryptable(false)
+ , inProgress(false)
+ , technicalProblem(false)
+ , isEncapsulatedRfc822Message(false)
+ , isCompliant(false)
+ , keyRevoked(false)
+ {
+ }
+
+ inline bool isSigned() const
+ {
+ return verificationResult.signatures().size() > 0;
+ }
+
+ GpgME::VerificationResult verificationResult;
+
+ QString signClass;
+ QString signer;
+ QStringList signerMailAddresses;
+ QByteArray keyId;
+ QString status; // to be used for unknown plug-ins
+ int status_code = 0; // = GPGME_SIG_STAT_NONE; to be used for i18n of OpenPGP and S/MIME CryptPlugs
+ QString errorText;
+ QString decryptionError;
+ QString auditLog;
+ QString compliance; // textual representation of compliance status; empty if compliance isn't enforced
+ GpgME::Error auditLogError;
+ bool isEncrypted : 1;
+ bool isDecryptable : 1;
+ bool inProgress : 1;
+ bool technicalProblem : 1;
+ bool isEncapsulatedRfc822Message : 1;
+ bool isCompliant : 1; // corresponds to the isDeVS flag of signature or decryption result
+ bool keyRevoked : 1;
+};
+
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <knauss@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "partmodel.h"
+
+#include "enums.h"
+#include "htmlutils.h"
+#include "messagepart.h"
+#include "mimetreeparser_core_debug.h"
+#include "objecttreeparser.h"
+#include "utils.h"
+
+#include <KLocalizedString>
+#include <Libkleo/Compliance>
+#include <Libkleo/Formatting>
+#include <Libkleo/KeyCache>
+
+#include <QDebug>
+#include <QGpgME/Protocol>
+#include <QRegularExpression>
+#include <QStringLiteral>
+#include <QTextDocument>
+
+#include <gpgme++/verificationresult.h>
+
+static std::optional<GpgME::Signature> signatureFromMessagePart(MimeTreeParser::MessagePart *messagePart)
+{
+ const auto signatureState = messagePart->signatureState();
+ const bool messageIsSigned = signatureState == MimeTreeParser::KMMsgPartiallySigned || signatureState == MimeTreeParser::KMMsgFullySigned;
+
+ if (!messageIsSigned) {
+ return std::nullopt;
+ }
+
+ const auto signatureParts = messagePart->signatures();
+ Q_ASSERT(!signatureParts.isEmpty());
+ if (signatureParts.empty()) {
+ return std::nullopt;
+ }
+ const auto signaturePart = signatureParts.front(); // TODO add support for multiple signature
+
+ const auto signatures = signaturePart->partMetaData()->verificationResult.signatures();
+ Q_ASSERT(!signatures.empty());
+ if (signatures.empty()) {
+ return std::nullopt;
+ }
+ const auto signature = signatures.front(); // TODO add support for multiple signature
+ return signature;
+}
+
+// We return a pair containing the trimmed string, as well as a boolean indicating whether the string was trimmed or not
+std::pair<QString, bool> PartModel::trim(const QString &text)
+{
+ // The delimiters have <p>.? prefixed including the .? because sometimes we get a byte order mark <feff> (seen with user-agent:
+ // Microsoft-MacOutlook/10.1d.0.190908) We match both regulard withspace with \s and non-breaking spaces with \u00A0
+ const QList<QRegularExpression> delimiters{
+ // English
+ QRegularExpression{QStringLiteral("<p>.?-+Original(\\s|\u00A0)Message-+"), QRegularExpression::CaseInsensitiveOption},
+ // The remainder is not quoted
+ QRegularExpression{QStringLiteral("<p>.?On.*wrote:"), QRegularExpression::CaseInsensitiveOption},
+ // The remainder is quoted
+ QRegularExpression{QStringLiteral("> On.*wrote:"), QRegularExpression::CaseInsensitiveOption},
+
+ // German
+ // Forwarded
+ QRegularExpression{QStringLiteral("<p>.?Von:.*</p>"), QRegularExpression::CaseInsensitiveOption},
+ // Reply
+ QRegularExpression{QStringLiteral("<p>.?Am.*schrieb.*:</p>"), QRegularExpression::CaseInsensitiveOption},
+ // Signature
+ QRegularExpression{QStringLiteral("<p>.?--(\\s|\u00A0)<br>"), QRegularExpression::CaseInsensitiveOption},
+ };
+
+ for (const auto &expression : delimiters) {
+ auto i = expression.globalMatchView(text);
+ while (i.hasNext()) {
+ const auto match = i.next();
+ const int startOffset = match.capturedStart(0);
+ // This is a very simplistic detection for an inline reply where we would have the patterns before the actual message content.
+ // We simply ignore anything we find within the first few lines.
+ if (startOffset >= 5) {
+ return {text.mid(0, startOffset), true};
+ } else {
+ // Search for the next delimiter
+ continue;
+ }
+ }
+ }
+
+ return {text, false};
+}
+
+static QString addCss(const QString &s)
+{
+ // Get the default font from QApplication
+ static const QString fontFamily = QFont{}.family();
+ // overflow:hidden ensures no scrollbars are ever shown.
+ static const QString css = QStringLiteral("<style>\n")
+ + QStringLiteral(
+ "body {\n"
+ " overflow:hidden;\n"
+ " font-family: \"%1\" ! important;\n"
+ " color: #31363b ! important;\n"
+ " background-color: #fcfcfc ! important\n"
+ "}\n")
+ .arg(fontFamily)
+ + QStringLiteral("blockquote { \n"
+ " border-left: 2px solid #bdc3c7 ! important;\n"
+ "}\n")
+ + QStringLiteral("</style>");
+
+ const QString header = QLatin1StringView(
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"
+ "<html><head><title></title>")
+ + css + QLatin1StringView("</head>\n<body>\n");
+ return header + s + QStringLiteral("</body></html>");
+}
+
+class PartModelPrivate
+{
+public:
+ PartModelPrivate(PartModel *q_ptr, const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser)
+ : q(q_ptr)
+ , mParser(parser)
+ {
+ collectContents();
+ }
+
+ ~PartModelPrivate() = default;
+
+ void checkPart(const MimeTreeParser::MessagePart::Ptr part)
+ {
+ mMimeTypeCache[part.data()] = part->mimeType();
+ // Extract the content of the part and
+ mContents.insert(part.data(), extractContent(part.data()));
+ }
+
+ // Recursively find encapsulated messages
+ void findEncapsulated(const MimeTreeParser::EncapsulatedRfc822MessagePart::Ptr &e)
+ {
+ mEncapsulatedParts[e.data()] = mParser->collectContentParts(e);
+ for (const auto &subPart : std::as_const(mEncapsulatedParts[e.data()])) {
+ checkPart(subPart);
+ mParents[subPart.data()] = e.data();
+ if (auto encapsulatedSub = subPart.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) {
+ findEncapsulated(encapsulatedSub);
+ }
+ }
+ }
+
+ QVariant extractContent(MimeTreeParser::MessagePart *messagePart)
+ {
+ if (auto alternativePart = dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(messagePart)) {
+ if (alternativePart->availableModes().contains(MimeTreeParser::AlternativeMessagePart::MultipartIcal)) {
+ return alternativePart->icalContent();
+ }
+ }
+
+ auto preprocessPlaintext = [&](const QString &text) {
+ // Reduce consecutive new lines to never exceed 2
+ auto cleaned = text;
+ cleaned.replace(QRegularExpression(QStringLiteral("[\n\r]{2,}")), QStringLiteral("\n\n"));
+
+ // We always do rich text (so we get highlighted links and stuff).
+ const auto html = Qt::convertFromPlainText(cleaned, Qt::WhiteSpaceNormal);
+ if (trimMail) {
+ const auto result = PartModel::trim(html);
+ isTrimmed = result.second;
+ Q_EMIT q->trimMailChanged();
+ return MimeTreeParser::linkify(result.first);
+ }
+ return MimeTreeParser::linkify(html);
+ };
+
+ if (messagePart->isHtml()) {
+ if (dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(messagePart)) {
+ containsHtmlAndPlain = true;
+ Q_EMIT q->containsHtmlChanged();
+ if (!showHtml) {
+ return preprocessPlaintext(messagePart->plaintextContent());
+ }
+ }
+ return addCss(mParser->resolveCidLinks(messagePart->htmlContent()));
+ }
+
+ if (auto attachmentPart = dynamic_cast<MimeTreeParser::AttachmentMessagePart *>(messagePart)) {
+ auto node = attachmentPart->node();
+ if (node && mMimeTypeCache[attachmentPart] == QByteArrayLiteral("text/calendar")) {
+ return messagePart->text();
+ }
+ }
+
+ return preprocessPlaintext(messagePart->text());
+ }
+
+ QVariant contentForPart(MimeTreeParser::MessagePart *messagePart) const
+ {
+ return mContents.value(messagePart);
+ }
+
+ void collectContents()
+ {
+ mEncapsulatedParts.clear();
+ mParents.clear();
+ mContents.clear();
+ containsHtmlAndPlain = false;
+ isTrimmed = false;
+
+ const auto parts = mParser->collectContentParts();
+ MimeTreeParser::MessagePart::List filteredParts;
+
+ for (const auto &part : parts) {
+ if (part->node()) {
+ const auto contentType = part->node()->contentType();
+ if (contentType && contentType->hasParameter("protected-headers")) {
+ const auto contentDisposition = part->node()->contentDisposition();
+ if (contentDisposition && contentDisposition->disposition() == KMime::Headers::CDinline) {
+ continue;
+ }
+ }
+ }
+
+ filteredParts << part;
+ }
+
+ for (const auto &part : std::as_const(filteredParts)) {
+ checkPart(part);
+ if (auto encapsulatedPart = part.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) {
+ findEncapsulated(encapsulatedPart);
+ }
+ }
+
+ for (const auto &part : std::as_const(filteredParts)) {
+ if (mMimeTypeCache[part.data()] == QByteArrayLiteral("text/calendar")) {
+ mParts.prepend(part);
+ } else {
+ mParts.append(part);
+ }
+ }
+ }
+
+ PartModel *q;
+ MimeTreeParser::MessagePart::List mParts;
+ QHash<MimeTreeParser::MessagePart *, QByteArray> mMimeTypeCache;
+ QHash<MimeTreeParser::MessagePart *, MimeTreeParser::MessagePart::List> mEncapsulatedParts;
+ QHash<MimeTreeParser::MessagePart *, MimeTreeParser::MessagePart *> mParents;
+ QMap<MimeTreeParser::MessagePart *, QVariant> mContents;
+ std::shared_ptr<MimeTreeParser::ObjectTreeParser> mParser;
+ bool showHtml{false};
+ bool containsHtmlAndPlain{false};
+ bool trimMail{false};
+ bool isTrimmed{false};
+};
+
+PartModel::PartModel(std::shared_ptr<MimeTreeParser::ObjectTreeParser> parser)
+ : d(std::unique_ptr<PartModelPrivate>(new PartModelPrivate(this, parser)))
+{
+}
+
+PartModel::~PartModel() = default;
+
+void PartModel::setShowHtml(bool html)
+{
+ if (d->showHtml != html) {
+ beginResetModel();
+ d->showHtml = html;
+ d->collectContents();
+ endResetModel();
+ Q_EMIT showHtmlChanged();
+ }
+}
+
+bool PartModel::showHtml() const
+{
+ return d->showHtml;
+}
+
+void PartModel::setTrimMail(bool trim)
+{
+ if (d->trimMail != trim) {
+ beginResetModel();
+ d->trimMail = trim;
+ d->collectContents();
+ endResetModel();
+ Q_EMIT trimMailChanged();
+ }
+}
+
+bool PartModel::trimMail() const
+{
+ return d->trimMail;
+}
+
+bool PartModel::isTrimmed() const
+{
+ return d->isTrimmed;
+}
+
+bool PartModel::containsHtml() const
+{
+ return d->containsHtmlAndPlain;
+}
+
+QHash<int, QByteArray> PartModel::roleNames() const
+{
+ return {
+ {TypeRole, QByteArrayLiteral("type")},
+ {ContentRole, QByteArrayLiteral("content")},
+ {IsEmbeddedRole, QByteArrayLiteral("isEmbedded")},
+ {SidebarSecurityLevelRole, QByteArrayLiteral("sidebarSecurityLevel")},
+ {EncryptionSecurityLevelRole, QByteArrayLiteral("encryptionSecurityLevel")},
+ {SignatureSecurityLevelRole, QByteArrayLiteral("signatureSecurityLevel")},
+ {EncryptionSecurityLevelRole, QByteArrayLiteral("encryptionSecurityLevel")},
+ {ErrorType, QByteArrayLiteral("errorType")},
+ {ErrorString, QByteArrayLiteral("errorString")},
+ {IsErrorRole, QByteArrayLiteral("error")},
+ {SenderRole, QByteArrayLiteral("sender")},
+ {SignatureDetailsRole, QByteArrayLiteral("signatureDetails")},
+ {SignatureIconNameRole, QByteArrayLiteral("signatureIconName")},
+ {EncryptionDetails, QByteArrayLiteral("encryptionDetails")},
+ {EncryptionIconNameRole, QByteArrayLiteral("encryptionIconName")},
+ {DateRole, QByteArrayLiteral("date")},
+ };
+}
+
+QModelIndex PartModel::index(int row, int column, const QModelIndex &parent) const
+{
+ if (row < 0 || column != 0) {
+ return QModelIndex();
+ }
+ if (parent.isValid()) {
+ const auto part = static_cast<MimeTreeParser::MessagePart *>(parent.internalPointer());
+ auto encapsulatedPart = dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(part);
+
+ if (encapsulatedPart) {
+ const auto parts = d->mEncapsulatedParts[encapsulatedPart];
+ if (row < parts.size()) {
+ return createIndex(row, column, parts.at(row).data());
+ }
+ }
+ return QModelIndex();
+ }
+ if (row < d->mParts.size()) {
+ return createIndex(row, column, d->mParts.at(row).data());
+ }
+ return QModelIndex();
+}
+
+SignatureInfo encryptionInfo(MimeTreeParser::MessagePart *messagePart)
+{
+ SignatureInfo signatureInfo;
+ const auto encryptions = messagePart->encryptions();
+ if (encryptions.size() > 1) {
+ qWarning() << "Can't deal with more than one encryption";
+ }
+ for (const auto &encryptionPart : encryptions) {
+ signatureInfo.keyId = encryptionPart->partMetaData()->keyId;
+ signatureInfo.cryptoProto = encryptionPart->cryptoProto();
+ signatureInfo.decryptRecipients = encryptionPart->decryptRecipients();
+ }
+ return signatureInfo;
+};
+template<typename T>
+const T *findHeader(KMime::Content *content)
+{
+ if (!content) {
+ return {};
+ }
+ auto header = content->header<T>();
+ if (header || !content->parent()) {
+ return header;
+ }
+ return findHeader<T>(content->parent());
+}
+
+PartModel::SecurityLevel PartModel::signatureSecurityLevel(MimeTreeParser::MessagePart *messagePart)
+{
+ auto signature = signatureFromMessagePart(messagePart);
+ if (!signature) {
+ return SecurityLevel::Unknow;
+ }
+
+ const auto summary = signature->summary();
+
+ if (summary & GpgME::Signature::Summary::Red) {
+ return SecurityLevel::Bad;
+ }
+ if (summary & GpgME::Signature::Summary::Valid) {
+ return SecurityLevel::Good;
+ }
+
+ return SecurityLevel::NotSoGood;
+}
+
+QString PartModel::signatureDetails(MimeTreeParser::MessagePart *messagePart)
+{
+ auto signature = signatureFromMessagePart(messagePart);
+ if (!signature) {
+ return QString{};
+ }
+
+ // guess sender from mime node or parent node
+ auto from = findHeader<KMime::Headers::From>(messagePart->node());
+ if (from) {
+ const auto mailboxes = from->mailboxes();
+ if (!mailboxes.isEmpty()) {
+ auto mailBox = mailboxes.front();
+ if (mailBox.hasAddress()) {
+ return Kleo::Formatting::prettySignature(*signature, QString::fromUtf8(mailboxes.front().address()));
+ }
+ }
+ }
+ return Kleo::Formatting::prettySignature(*signature, {});
+}
+
+QVariant PartModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid()) {
+ return QVariant();
+ }
+
+ if (index.internalPointer()) {
+ const auto messagePart = static_cast<MimeTreeParser::MessagePart *>(index.internalPointer());
+ // qWarning() << "Found message part " << messagePart->metaObject()->className() << messagePart->partMetaData()->status << messagePart->error();
+ Q_ASSERT(messagePart);
+ switch (role) {
+ case Qt::DisplayRole:
+ return QStringLiteral("Content%1");
+ case SenderRole: {
+ if (auto e = dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(messagePart)) {
+ return e->from();
+ }
+ return {};
+ }
+ case DateRole: {
+ if (auto e = dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(messagePart)) {
+ return e->date();
+ }
+ return {};
+ }
+ case TypeRole: {
+ if (messagePart->error()) {
+ return QVariant::fromValue(Types::Error);
+ }
+ if (dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(messagePart)) {
+ return QVariant::fromValue(Types::Encapsulated);
+ }
+ if (auto alternativePart = dynamic_cast<MimeTreeParser::AlternativeMessagePart *>(messagePart)) {
+ if (alternativePart->availableModes().contains(MimeTreeParser::AlternativeMessagePart::MultipartIcal)) {
+ return QVariant::fromValue(Types::Ical);
+ }
+ }
+ if (auto attachmentPart = dynamic_cast<MimeTreeParser::AttachmentMessagePart *>(messagePart)) {
+ auto node = attachmentPart->node();
+ if (!node) {
+ qWarning() << "no content for attachment";
+ return {};
+ }
+ if (d->mMimeTypeCache[attachmentPart] == QByteArrayLiteral("text/calendar")) {
+ return QVariant::fromValue(Types::Ical);
+ }
+ }
+ if (!d->showHtml && d->containsHtmlAndPlain) {
+ return QVariant::fromValue(Types::Plain);
+ }
+ // For simple html we don't need a browser
+ auto complexHtml = [&] {
+ if (messagePart->isHtml()) {
+ const auto text = messagePart->htmlContent();
+ if (text.contains(QStringLiteral("<!DOCTYPE html PUBLIC"))) {
+ // We can probably deal with this if it adheres to the strict dtd
+ //(that's what our composer produces as well)
+ if (!text.contains(QStringLiteral("http://www.w3.org/TR/REC-html40/strict.dtd"))) {
+ return true;
+ }
+ }
+ // Blockquotes don't support any styling which would be necessary so they become readable.
+ if (text.contains(QStringLiteral("blockquote"))) {
+ return true;
+ }
+ // Media queries are too advanced
+ if (text.contains(QStringLiteral("@media"))) {
+ return true;
+ }
+ // auto css properties are not supported e.g margin-left: auto;
+ if (text.contains(QStringLiteral(": auto;"))) {
+ return true;
+ }
+ return false;
+ } else {
+ return false;
+ }
+ }();
+ if (complexHtml) {
+ return QVariant::fromValue(Types::Html);
+ }
+ return QVariant::fromValue(Types::Plain);
+ }
+ case IsEmbeddedRole:
+ return false;
+ case IsErrorRole:
+ return messagePart->error();
+ case ContentRole:
+ return d->contentForPart(messagePart);
+ case SidebarSecurityLevelRole: {
+ const auto signature = index.data(SignatureSecurityLevelRole).value<SecurityLevel>();
+ const auto encryption = index.data(EncryptionSecurityLevelRole).value<SecurityLevel>();
+
+ if (signature == SecurityLevel::Bad || encryption == SecurityLevel::Bad) {
+ return SecurityLevel::Bad;
+ }
+
+ if (signature == SecurityLevel::NotSoGood || encryption == SecurityLevel::NotSoGood) {
+ return SecurityLevel::NotSoGood;
+ }
+
+ if (signature == SecurityLevel::Good || encryption == SecurityLevel::Good) {
+ return SecurityLevel::Good;
+ }
+
+ return SecurityLevel::Unknow;
+ }
+ case SignatureSecurityLevelRole:
+ // Color displayed for the signature info box
+ return signatureSecurityLevel(messagePart);
+ case EncryptionSecurityLevelRole: {
+ // Color displayed for the encryption info box
+ const auto encryption = messagePart->encryptionState();
+ const bool messageIsEncrypted = encryption == MimeTreeParser::KMMsgPartiallyEncrypted || encryption == MimeTreeParser::KMMsgFullyEncrypted;
+
+ if (messagePart->error()) {
+ return SecurityLevel::Bad;
+ }
+
+ return messageIsEncrypted ? SecurityLevel::Good : SecurityLevel::Unknow;
+ }
+ case EncryptionIconNameRole: {
+ const auto encryption = messagePart->encryptionState();
+ const bool messageIsEncrypted = encryption == MimeTreeParser::KMMsgPartiallyEncrypted || encryption == MimeTreeParser::KMMsgFullyEncrypted;
+
+ if (messagePart->error()) {
+ return QStringLiteral("data-error");
+ }
+
+ return messageIsEncrypted ? QStringLiteral("mail-encrypted") : QString();
+ }
+ case SignatureIconNameRole: {
+ auto signature = signatureFromMessagePart(messagePart);
+ if (!signature) {
+ return QString{};
+ }
+
+ const auto summary = signature->summary();
+ if (summary & GpgME::Signature::Valid) {
+ return QStringLiteral("mail-signed");
+ } else if (summary & GpgME::Signature::Red) {
+ return QStringLiteral("data-error");
+ } else {
+ return QStringLiteral("data-warning");
+ }
+ }
+ case SignatureDetailsRole:
+ return signatureDetails(messagePart);
+ case EncryptionDetails:
+ return QVariant::fromValue(encryptionInfo(messagePart));
+ case ErrorType:
+ return messagePart->error();
+ case ErrorString: {
+ switch (messagePart->error()) {
+ case MimeTreeParser::MessagePart::NoKeyError: {
+ if (auto encryptedMessagePart = dynamic_cast<MimeTreeParser::EncryptedMessagePart *>(messagePart)) {
+ if (encryptedMessagePart->isNoSecKey()) {
+ QString errorMessage;
+ if (encryptedMessagePart->cryptoProto() == QGpgME::smime()) {
+ errorMessage += i18ndc("mimetreeparser", "@info:status", "You cannot decrypt this message.");
+ } else {
+ errorMessage += i18ndc("mimetreeparser", "@info:status", "You cannot decrypt this message.");
+ }
+ if (!encryptedMessagePart->decryptRecipients().empty()) {
+ errorMessage += QLatin1Char(' ')
+ + i18ndcp("mimetreeparser",
+ "@info:status",
+ "The message is encrypted for the following recipient:",
+ "The message is encrypted for the following recipients:",
+ encryptedMessagePart->decryptRecipients().size());
+ errorMessage +=
+ MimeTreeParser::decryptRecipientsToHtml(encryptedMessagePart->decryptRecipients(), encryptedMessagePart->cryptoProto());
+ }
+ return errorMessage;
+ }
+ }
+ }
+
+ return messagePart->errorString();
+
+ case MimeTreeParser::MessagePart::PassphraseError:
+ return i18ndc("mimetreeparser", "@info:status", "Wrong passphrase.");
+ case MimeTreeParser::MessagePart::UnknownError:
+ break;
+ default:
+ break;
+ }
+ return messagePart->errorString();
+ }
+ }
+ }
+ return QVariant();
+}
+
+QModelIndex PartModel::parent(const QModelIndex &index) const
+{
+ if (index.isValid()) {
+ if (auto indexPart = static_cast<MimeTreeParser::MessagePart *>(index.internalPointer())) {
+ for (const auto &part : std::as_const(d->mParts)) {
+ if (part.data() == indexPart) {
+ return QModelIndex();
+ }
+ }
+ const auto parentPart = d->mParents[indexPart];
+ Q_ASSERT(parentPart);
+ int row = 0;
+ const auto parts = d->mEncapsulatedParts[parentPart];
+ for (const auto &part : parts) {
+ if (part.data() == indexPart) {
+ break;
+ }
+ row++;
+ }
+ return createIndex(row, 0, parentPart);
+ }
+ return {};
+ }
+ return {};
+}
+
+int PartModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid()) {
+ const auto part = static_cast<MimeTreeParser::MessagePart *>(parent.internalPointer());
+ auto encapsulatedPart = dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart *>(part);
+
+ if (encapsulatedPart) {
+ const auto parts = d->mEncapsulatedParts[encapsulatedPart];
+ return parts.size();
+ }
+ return 0;
+ }
+ return d->mParts.count();
+}
+
+int PartModel::columnCount(const QModelIndex &) const
+{
+ return 1;
+}
+
+#include "moc_partmodel.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Christian Mollekopf <mollekopf@kolabsys.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "messagepart.h"
+#include "mimetreeparser_core_export.h"
+
+#include <QAbstractItemModel>
+#include <QModelIndex>
+
+#include <gpgme++/decryptionresult.h>
+#include <gpgme++/key.h>
+#include <gpgme++/verificationresult.h>
+
+#include <memory>
+
+namespace QGpgME
+{
+class Protocol;
+}
+
+namespace MimeTreeParser
+{
+class ObjectTreeParser;
+}
+class PartModelPrivate;
+
+class MIMETREEPARSER_CORE_EXPORT PartModel : public QAbstractItemModel
+{
+ Q_OBJECT
+ Q_PROPERTY(bool showHtml READ showHtml WRITE setShowHtml NOTIFY showHtmlChanged)
+ Q_PROPERTY(bool containsHtml READ containsHtml NOTIFY containsHtmlChanged)
+ Q_PROPERTY(bool trimMail READ trimMail WRITE setTrimMail NOTIFY trimMailChanged)
+ Q_PROPERTY(bool isTrimmed READ isTrimmed NOTIFY trimMailChanged)
+public:
+ PartModel(std::shared_ptr<MimeTreeParser::ObjectTreeParser> parser);
+ ~PartModel() override;
+
+ static std::pair<QString, bool> trim(const QString &text);
+
+public:
+ enum class Types : quint8 {
+ Error,
+ Encapsulated,
+ Ical,
+ Plain,
+ None,
+ Html,
+ };
+ Q_ENUM(Types);
+
+ enum Roles {
+ TypeRole = Qt::UserRole + 1,
+ ContentRole,
+ IsEmbeddedRole,
+ IsErrorRole,
+ SidebarSecurityLevelRole,
+ EncryptionSecurityLevelRole,
+ EncryptionIconNameRole,
+ SignatureSecurityLevelRole,
+ SignatureDetailsRole,
+ SignatureIconNameRole,
+ EncryptionDetails,
+ ErrorType,
+ ErrorString,
+ SenderRole,
+ DateRole,
+ };
+
+ /// This enum maps directly to color displayed in the UI for the following elements:
+ /// - Encryption info box
+ /// - Signature info box
+ /// - Sidebar (worse of the two above)
+ enum SecurityLevel {
+ Unknow, ///< Do not display element (not encrypted or not signed)
+ Good, ///< Green
+ NotSoGood, ///< Orange
+ Bad, ////< Red
+ };
+ Q_ENUM(SecurityLevel);
+
+ [[nodiscard]] QHash<int, QByteArray> roleNames() const override;
+ [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ [[nodiscard]] QModelIndex parent(const QModelIndex &index) const override;
+ [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+
+ void setShowHtml(bool html);
+ [[nodiscard]] bool showHtml() const;
+ [[nodiscard]] bool containsHtml() const;
+
+ void setTrimMail(bool trim);
+ [[nodiscard]] bool trimMail() const;
+ [[nodiscard]] bool isTrimmed() const;
+
+ static SecurityLevel signatureSecurityLevel(MimeTreeParser::MessagePart *messagePart);
+ static QString signatureDetails(MimeTreeParser::MessagePart *messagePart);
+
+Q_SIGNALS:
+ void showHtmlChanged();
+ void trimMailChanged();
+ void containsHtmlChanged();
+
+private:
+ std::unique_ptr<PartModelPrivate> d;
+};
+
+class MIMETREEPARSER_CORE_EXPORT SignatureInfo
+{
+ Q_GADGET
+ Q_PROPERTY(QByteArray keyId MEMBER keyId CONSTANT)
+ Q_PROPERTY(bool keyMissing MEMBER keyMissing CONSTANT)
+ Q_PROPERTY(bool keyRevoked MEMBER keyRevoked CONSTANT)
+ Q_PROPERTY(bool keyExpired MEMBER keyExpired CONSTANT)
+ Q_PROPERTY(bool sigExpired MEMBER sigExpired CONSTANT)
+ Q_PROPERTY(bool crlMissing MEMBER crlMissing CONSTANT)
+ Q_PROPERTY(bool crlTooOld MEMBER crlTooOld CONSTANT)
+
+ Q_PROPERTY(QString signer MEMBER signer CONSTANT)
+ Q_PROPERTY(QStringList signerMailAddresses MEMBER signerMailAddresses CONSTANT)
+ Q_PROPERTY(bool signatureIsGood MEMBER signatureIsGood CONSTANT)
+ Q_PROPERTY(bool isCompliant MEMBER isCompliant CONSTANT)
+
+ /// Validity information of the key who signed the message.
+ Q_PROPERTY(QString keyTrust MEMBER keyTrust CONSTANT)
+
+ Q_PROPERTY(GpgME::Signature::Summary signatureSummary MEMBER signatureSummary CONSTANT)
+
+public:
+ bool keyRevoked = false;
+ bool keyExpired = false;
+ bool sigExpired = false;
+ bool keyMissing = false;
+ bool crlMissing = false;
+ bool crlTooOld = false;
+ bool isCompliant = false;
+ QString keyTrust;
+ QByteArray keyId;
+ const QGpgME::Protocol *cryptoProto = nullptr;
+ std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> decryptRecipients;
+
+ QString signer;
+ GpgME::Signature::Summary signatureSummary;
+ QStringList signerMailAddresses;
+ bool signatureIsGood = false;
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "urlhandler.h"
+
+#include "mimetreeparser_core_debug.h"
+
+#include <KLocalizedString>
+
+#include <QCoreApplication>
+#include <QProcess>
+#include <QStandardPaths>
+#include <QUrl>
+#include <QWindow>
+
+UrlHandler::UrlHandler(QObject *parent)
+ : QObject(parent)
+{
+}
+
+bool UrlHandler::handleClick(const QUrl &url, QWindow *window)
+{
+ QString keyId;
+ if (url.scheme() == QLatin1StringView("key")) {
+ keyId = url.path();
+ } else if (!url.hasFragment()) {
+ return false;
+ }
+ QString displayName;
+ QString libName;
+ if (keyId.isEmpty() && !foundSMIMEData(url.path() + QLatin1Char('#') + QUrl::fromPercentEncoding(url.fragment().toLatin1()), displayName, libName, keyId)) {
+ return false;
+ }
+ QStringList lst;
+ lst << QStringLiteral("--parent-windowid") << QString::number(static_cast<qlonglong>(window->winId())) << QStringLiteral("--query") << keyId;
+#ifdef Q_OS_WIN
+ QString exec = QStandardPaths::findExecutable(QStringLiteral("kleopatra.exe"), {QCoreApplication::applicationDirPath()});
+ if (exec.isEmpty()) {
+ exec = QStandardPaths::findExecutable(QStringLiteral("kleopatra.exe"));
+ }
+#else
+ const QString exec = QStandardPaths::findExecutable(QStringLiteral("kleopatra"));
+#endif
+ if (exec.isEmpty()) {
+ qCWarning(MIMETREEPARSER_CORE_LOG) << "Could not find kleopatra executable in PATH";
+ Q_EMIT errorOccurred(i18n("Could not start certificate manager. Please check your installation."));
+ return false;
+ }
+ QProcess::startDetached(exec, lst);
+ return true;
+}
+
+bool UrlHandler::foundSMIMEData(const QString &aUrl, QString &displayName, QString &libName, QString &keyId)
+{
+ static QString showCertMan(QStringLiteral("showCertificate#"));
+ displayName.clear();
+ libName.clear();
+ keyId.clear();
+ int i1 = aUrl.indexOf(showCertMan);
+ if (-1 < i1) {
+ i1 += showCertMan.length();
+ int i2 = aUrl.indexOf(QLatin1StringView(" ### "), i1);
+ if (i1 < i2) {
+ displayName = aUrl.mid(i1, i2 - i1);
+ i1 = i2 + 5;
+ i2 = aUrl.indexOf(QLatin1StringView(" ### "), i1);
+ if (i1 < i2) {
+ libName = aUrl.mid(i1, i2 - i1);
+ i2 += 5;
+
+ keyId = aUrl.mid(i2);
+ }
+ }
+ }
+ return !keyId.isEmpty();
+}
+
+#include "moc_urlhandler.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_core_export.h"
+
+#include <QObject>
+#include <QWindow>
+
+class MIMETREEPARSER_CORE_EXPORT UrlHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit UrlHandler(QObject *parent = nullptr);
+
+ Q_INVOKABLE bool handleClick(const QUrl &url, QWindow *window);
+
+Q_SIGNALS:
+ void errorOccurred(const QString &errorMessage);
+
+private:
+ [[nodiscard]] bool foundSMIMEData(const QString &aUrl, QString &displayName, QString &libName, QString &keyId);
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "utils.h"
+
+#include <KLocalizedString>
+#include <Libkleo/Formatting>
+
+using namespace MimeTreeParser;
+
+KMime::Content *MimeTreeParser::findTypeInDirectChildren(KMime::Content *content, const QByteArray &mimeType)
+{
+ const auto contents = content->contents();
+ for (const auto child : contents) {
+ if ((!child->contentType()->isEmpty()) && (mimeType == child->contentType()->mimeType())) {
+ return child;
+ }
+ }
+ return nullptr;
+}
+
+QString MimeTreeParser::decryptRecipientsToHtml(const std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> &recipients,
+ const QGpgME::Protocol *cryptoProto)
+{
+ QString text = QStringLiteral("<ul>");
+ for (const auto &recipientIt : recipients) {
+ const auto recipient = recipientIt.first;
+ const auto key = recipientIt.second;
+ if (key.keyID()) {
+ QString displayName = QString::fromLatin1(key.userID(0).id());
+ if (cryptoProto == QGpgME::smime()) {
+ Kleo::DN dn(displayName);
+ displayName = dnToDisplayName(dn);
+ }
+ displayName = displayName.toHtmlEscaped();
+ const auto link = QStringLiteral("messageviewer:showCertificate#%1 ### %2 ### %3")
+ .arg(cryptoProto->displayName(), cryptoProto->name(), QString::fromLatin1(key.keyID()));
+ text += QStringLiteral("<li>%1 (<a href=\"%2\">%3</a>)</li>").arg(displayName, link, Kleo::Formatting::prettyID(key.keyID()));
+ } else {
+ const auto link = QStringLiteral("messageviewer:showCertificate#%1 ### %2 ### %3")
+ .arg(cryptoProto->displayName(), cryptoProto->name(), QString::fromLatin1(recipient.keyID()));
+ text +=
+ QStringLiteral("<li>%1 (<a href=\"%2\">%3</a>)</li>").arg(i18nc("@info", "Unknown Key"), link, Kleo::Formatting::prettyID(recipient.keyID()));
+ }
+ }
+ text += QStringLiteral("</ul>");
+ return text;
+}
+
+QString MimeTreeParser::dnToDisplayName(const Kleo::DN &dn)
+{
+ QString displayName = dn[QStringLiteral("CN")];
+ if (displayName.isEmpty()) {
+ // In case there is no CN, put the full DN as display name
+ displayName = dn.prettyDN();
+ } else if (!dn[QStringLiteral("O")].isEmpty()) {
+ displayName += i18nc("Separator", " - ") + dn[QStringLiteral("O")];
+ }
+ return displayName;
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <KMime/Content>
+
+#include <QGpgME/Protocol>
+#include <gpgme++/decryptionresult.h>
+#include <gpgme++/key.h>
+#include <libkleo/dn.h>
+
+#include <vector>
+
+#include "mimetreeparser_core_export.h"
+
+namespace MimeTreeParser
+{
+[[nodiscard]] KMime::Content *findTypeInDirectChildren(KMime::Content *content, const QByteArray &mimeType);
+
+/// Convert a list of recipients to an html list
+[[nodiscard]] MIMETREEPARSER_CORE_EXPORT QString
+decryptRecipientsToHtml(const std::vector<std::pair<GpgME::DecryptionResult::Recipient, GpgME::Key>> &recipients, const QGpgME::Protocol *cryptoProto);
+
+/// Convert a DN to a more compact display name (usually just Common name + organization name)
+[[nodiscard]] MIMETREEPARSER_CORE_EXPORT QString dnToDisplayName(const Kleo::DN &dn);
+}
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+ecm_add_qml_module(mimetreeparser_plugin
+ URI "org.kde.pim.mimetreeparser"
+ VERSION 1.0
+ GENERATE_PLUGIN_SOURCE
+ DEPENDENCIES QtQuick
+)
+
+target_sources(mimetreeparser_plugin PRIVATE
+ types.h
+)
+
+target_link_libraries(mimetreeparser_plugin PRIVATE
+ Qt6::Qml
+ KPim6::MimeTreeParserCore
+)
+
+ecm_target_qml_sources(mimetreeparser_plugin
+ SOURCES
+ qml/MailViewer.qml
+)
+
+ecm_target_qml_sources(mimetreeparser_plugin PRIVATE
+ PATH private
+ SOURCES
+ qml/private/AttachmentDelegate.qml
+ qml/private/Banner.qml
+ qml/private/ErrorPart.qml
+ qml/private/HtmlPart.qml
+ qml/private/ICalPart.qml
+ qml/private/MailPart.qml
+ qml/private/MailPartModel.qml
+ qml/private/MailPartView.qml
+ qml/private/TextPart.qml
+)
+
+ecm_finalize_qml_module(mimetreeparser_plugin DESTINATION ${KDE_INSTALL_QMLDIR})
--- /dev/null
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-FileCopyrightText: 2022 Devin Lin <espidev@gmail.com>
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15 as QQC2
+import Qt.labs.platform 1.1 as QLP
+
+import org.kde.pim.mimetreeparser 1.0
+import org.kde.kirigami 2.20 as Kirigami
+import './private'
+
+Kirigami.ScrollablePage {
+ id: root
+
+ property alias message: mailPartView.message
+
+ readonly property string subject: mailPartView.subject
+ readonly property string from: mailPartView.from
+ readonly property string sender: mailPartView.sender
+ readonly property string to: mailPartView.to
+ readonly property string cc: mailPartView.cc
+ readonly property string bcc: mailPartView.bcc
+ readonly property date dateTime: mailPartView.dateTime
+
+ /**
+ * This property holds the url to a custom ical part QML component.
+ *
+ * This allow apps to overwrite it and provide special handling for email
+ * invitation.
+ */
+ property url icalCustomComponent
+
+ Kirigami.Theme.colorSet: Kirigami.Theme.View
+ Kirigami.Theme.inherit: false
+
+ padding: Kirigami.Units.largeSpacing
+
+ title: i18ndc("mimetreeparser", "@title:window", "Message viewer")
+
+ header: QQC2.ToolBar {
+ id: mailHeader
+
+ padding: root.padding
+ visible: root.from.length > 0 || root.to.length > 0 || root.subject.length > 0
+
+ Kirigami.Theme.inherit: false
+ Kirigami.Theme.colorSet: Kirigami.Theme.View
+
+ background: Item {
+ Rectangle {
+ anchors.fill: parent
+ color: Kirigami.Theme.alternateBackgroundColor
+ }
+
+ Kirigami.Separator {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ }
+
+ Kirigami.Separator {
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ }
+ }
+
+ contentItem: GridLayout {
+ rowSpacing: Kirigami.Units.smallSpacing
+ columnSpacing: Kirigami.Units.smallSpacing
+
+ columns: 3
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "Subject:")
+ visible: root.subject.length > 0
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ text: root.subject
+ visible: text.length > 0
+ elide: Text.ElideRight
+
+ Layout.fillWidth: true
+ }
+
+ QQC2.Label {
+ text: root.dateTime.toLocaleString(Qt.locale(), Locale.ShortFormat)
+ visible: text.length > 0
+ horizontalAlignment: Text.AlignRight
+ }
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "From:")
+ visible: root.from.length > 0
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ text: root.from
+ visible: text.length > 0
+ elide: Text.ElideRight
+
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ }
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "Sender:")
+ visible: root.sender.length > 0 && root.sender !== root.from
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ visible: root.sender.length > 0 && root.sender !== root.from
+ text: root.sender
+ elide: Text.ElideRight
+
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ }
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "To:")
+ visible: root.to.length > 0
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ text: root.to
+ elide: Text.ElideRight
+ visible: root.to.length > 0
+
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ }
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "CC:")
+ visible: root.cc.length > 0
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ text: root.cc
+ elide: Text.ElideRight
+ visible: root.cc.length > 0
+
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ }
+
+ QQC2.Label {
+ text: i18ndc("mimetreeparser", "@label", "BCC:")
+ visible: root.bcc.length > 0
+
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+ }
+
+ QQC2.Label {
+ text: root.bcc
+ elide: Text.ElideRight
+ visible: root.bcc.length > 0
+
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ }
+ }
+ }
+
+ MailPartView {
+ id: mailPartView
+ padding: root.padding
+ icalCustomComponent: root.icalCustomComponent
+ }
+
+ footer: QQC2.ToolBar {
+ padding: root.padding
+
+ Kirigami.Theme.inherit: false
+ Kirigami.Theme.colorSet: Kirigami.Theme.View
+
+ background: Item {
+ Kirigami.Separator {
+ anchors {
+ left: parent.left
+ right: parent.right
+ top: undefined
+ bottom: parent.bottom
+ }
+ }
+ }
+
+ Flow {
+ anchors.fill: parent
+ spacing: Kirigami.Units.smallSpacing
+ Repeater {
+ model: mailPartView.attachmentModel
+
+ delegate: AttachmentDelegate {
+ id: attachmentDelegate
+
+ required property int index
+ required property string iconName
+
+ icon.name: iconName
+
+ clip: true
+
+ actionIcon: 'download'
+ actionTooltip: i18ndc("mimetreeparser", "@action:button", "Save attachment")
+ onClicked: mailPartView.attachmentModel.openAttachment(index)
+ onPublicKeyImport: mailPartView.attachmentModel.importPublicKey(index)
+ onExecute: {
+ const dialog = saveFileDialog.createObject(applicationWindow(), {
+ fileName: name,
+ });
+ dialog.onAccepted.connect(() => {
+ mailPartView.attachmentModel.saveAttachmentToPath(0, dialog.file.toString().slice(7))
+ });
+ dialog.open();
+ }
+ }
+ }
+ }
+ }
+
+ Component {
+ id: saveFileDialog
+
+ QLP.FileDialog {
+ required property string fileName
+
+ title: i18ndc("mimetreeparser", "@window:title", "Save Attachment As")
+ currentFile: QLP.StandardPaths.writableLocation(QLP.StandardPaths.DownloadLocation) + '/' + fileName
+ folder: QLP.StandardPaths.writableLocation(QLP.StandardPaths.DownloadLocation)
+ fileMode: QLP.FileDialog.SaveFile
+ }
+ }
+
+ Connections {
+ target: mailPartView.attachmentModel
+
+ function onInfo(message) {
+ applicationWindow().showPassiveNotification(message);
+ }
+
+ function onErrorOccurred(message) {
+ applicationWindow().showPassiveNotification(message);
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import org.kde.kirigami 2.14 as Kirigami
+import QtQuick.Controls 2.15 as QQC2
+
+QQC2.AbstractButton {
+ id: root
+
+ required property string name
+ required property string type
+ property alias actionIcon: actionButton.icon.name
+ property alias actionTooltip: actionButton.text
+
+ signal execute;
+ signal publicKeyImport;
+
+ Kirigami.Theme.colorSet: Kirigami.Theme.Button
+ Kirigami.Theme.inherit: false
+
+ background: Rectangle {
+ id: background
+ color: Kirigami.Theme.backgroundColor
+ border.color: Kirigami.Theme.disabledTextColor
+ radius: 3
+ }
+
+ leftPadding: Kirigami.Units.smallSpacing
+ rightPadding: Kirigami.Units.smallSpacing
+ topPadding: Kirigami.Units.smallSpacing
+ bottomPadding: Kirigami.Units.smallSpacing
+ contentItem: RowLayout {
+ id: content
+ spacing: Kirigami.Units.smallSpacing
+
+ Rectangle {
+ color: Kirigami.Theme.backgroundColor
+ Layout.preferredHeight: Kirigami.Units.gridUnit
+ Layout.preferredWidth: Kirigami.Units.gridUnit
+ Kirigami.Icon {
+ anchors.verticalCenter: parent.verticalCenter
+ height: Kirigami.Units.gridUnit
+ width: Kirigami.Units.gridUnit
+ source: root.icon.name
+ }
+ }
+ QQC2.Label {
+ text: root.name
+ }
+ QQC2.ToolButton {
+ visible: root.type === "application/pgp-keys"
+ icon.name: 'gpg'
+ text: i18ndc("mimetreeparser", "@action:button", "Import certificate")
+ display: QQC2.ToolButton.IconOnly
+ onClicked: root.publicKeyImport()
+
+ QQC2.ToolTip.text: text
+ QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
+ QQC2.ToolTip.visible: hovered
+ }
+ QQC2.ToolButton {
+ id: actionButton
+
+ onClicked: root.execute()
+
+ QQC2.ToolTip.text: text
+ QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
+ QQC2.ToolTip.visible: hovered
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15 as QQC2
+import QtQuick.Templates 2.15 as T
+import QtQuick.Layouts 1.15
+import org.kde.kirigami 2.20 as Kirigami
+
+/**
+ * @brief An banner Item with support for informational, positive,
+ * warning and error types, and with support for associated actions.
+ *
+ * Banner can be used to inform or interact with the user
+ * without requiring the use of a dialog and are positionned in the footer
+ * or header of a page. For inline content, see org::kde::kirigami::InlineMessage.
+ *
+ * The Banner is hidden by default.
+ *
+ * Optionally, actions can be added which are shown alongside an
+ * optional close button on the right side of the Item. If more
+ * actions are set than can fit, an overflow menu is provided.
+ *
+ * Example usage:
+ * @code{.qml}
+ * Banner {
+ * type: Kirigami.MessageType.Error
+ *
+ * text: "My error message"
+ *
+ * actions: [
+ * Kirigami.Action {
+ * icon.name: "edit"
+ * text: "Action text"
+ * onTriggered: {
+ * // do stuff
+ * }
+ * },
+ * Kirigami.Action {
+ * icon.name: "edit"
+ * text: "Action text"
+ * onTriggered: {
+ * // do stuff
+ * }
+ * }
+ * ]
+ * }
+ * @endcode
+ */
+T.ToolBar {
+ id: root
+
+ /**
+ * @brief This signal is emitted when a link is hovered in the message text.
+ * @param The hovered link.
+ */
+ signal linkHovered(string link)
+
+ /**
+ * @brief This signal is emitted when a link is clicked or tapped in the message text.
+ * @param The clicked or tapped link.
+ */
+ signal linkActivated(string link)
+
+ /**
+ * @brief This property holds the link embedded in the message text that the user is hovering over.
+ */
+ readonly property alias hoveredLink: label.hoveredLink
+
+ /**
+ * @brief This property holds the message type.
+ *
+ * The following values are allowed:
+ * * ``Kirigami.MessageType.Information``
+ * * ``Kirigami.MessageType.Positive``
+ * * ``Kirigami.MessageType.Warning``
+ * * ``Kirigami.MessageType.Error``
+ *
+ * default: ``Kirigami.MessageType.Information``
+ *
+ * @property Kirigami.MessageType type
+ */
+ property int type: Kirigami.MessageType.Information
+
+ /**
+ * @brief This property holds the message title.
+ */
+ property string title
+
+ /**
+ * @brief This property holds the message text.
+ */
+ property string text
+
+ /**
+ * @brief This property holds the icon name (default to predefined icons
+ * depending on the title if not set).
+ */
+ property string iconName
+
+ /**
+ * @brief This property holds whether the close button is displayed.
+ *
+ * default: ``false``
+ */
+ property bool showCloseButton: false
+
+ /**
+ * This property holds the list of Kirigami Actions to show in the banner's
+ * internal kirigami::ActionToolBar.
+ *
+ * Actions are added from left to right. If more actions
+ * are set than can fit, an overflow menu is provided.
+ */
+ property list<Kirigami.Action> actions
+
+ padding: Kirigami.Units.smallSpacing
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, contentHeight + topPadding + bottomPadding)
+
+ visible: false
+
+ contentItem: GridLayout {
+ columns: 3
+ columnSpacing: Kirigami.Units.mediumSpacing
+
+ Item {
+ Layout.preferredWidth: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
+ Layout.preferredHeight: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
+ Layout.alignment: Qt.AlignTop
+ Layout.rowSpan: 2
+
+ Kirigami.Icon {
+ source: {
+ if (root.iconName.length > 0) {
+ return root.iconName
+ }
+ switch (root.type) {
+ case Kirigami.MessageType.Positive:
+ return "emblem-positive";
+ case Kirigami.MessageType.Warning:
+ return "data-warning";
+ case Kirigami.MessageType.Error:
+ return "data-error";
+ default:
+ return "data-information";
+ }
+ }
+
+ anchors.centerIn: parent
+ }
+ }
+
+ Kirigami.Heading {
+ id: heading
+
+ level: 2
+ text: root.title
+ visible: text.length > 0
+
+ Layout.row: visible ? 0 : 1
+ Layout.column: 1
+ }
+
+ Kirigami.SelectableLabel {
+ id: label
+
+ color: Kirigami.Theme.textColor
+ wrapMode: Text.WordWrap
+
+ text: root.text
+
+ onLinkHovered: link => root.linkHovered(link)
+ onLinkActivated: link => root.linkActivated(link)
+
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignTop
+
+ Layout.row: heading.visible ? 1 : 0
+ Layout.column: 1
+ }
+
+ QQC2.ToolButton {
+ id: closeButton
+
+ visible: root.showCloseButton
+ text: i18ndc("mimetreeparser", "@action:button", "Close")
+
+ icon.name: "dialog-close"
+ display: QQC2.ToolButton.IconOnly
+
+ onClicked: root.visible = false
+
+ Layout.alignment: Qt.AlignTop
+
+ QQC2.ToolTip.visible: Kirigami.Settings.tabletMode ? closeButton.pressed : closeButton.hovered
+ QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
+ QQC2.ToolTip.text: text
+
+ Layout.rowSpan: 2
+ Layout.column: 2
+ }
+
+ Kirigami.ActionToolBar {
+ id: actionsLayout
+
+ flat: false
+ actions: root.actions
+ visible: root.actions.length > 0
+ alignment: Qt.AlignRight
+
+ Layout.column: 0
+ Layout.columnSpan: 3
+ Layout.row: 2
+ }
+ }
+
+ background: Item {
+ id: backgroundItem
+
+ readonly property color color: switch (root.type) {
+ case Kirigami.MessageType.Positive:
+ return Kirigami.Theme.positiveTextColor;
+ case Kirigami.MessageType.Warning:
+ return Kirigami.Theme.neutralTextColor;
+ case Kirigami.MessageType.Error:
+ return Kirigami.Theme.negativeTextColor;
+ default:
+ return Kirigami.Theme.activeTextColor;
+ }
+
+ Rectangle {
+ opacity: 0.2
+ color: backgroundItem.color
+ radius: Kirigami.Units.smallSpacing
+ anchors.fill: parent
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-FileCopyrightText: 2017 Christian Mollekopf, <mollekopf@kolabsys.com>
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.4
+import QtQuick.Controls 2.15 as QQC2
+
+Item {
+ id: root
+ property var errorType
+ property string errorString
+ property string searchString
+ property bool autoLoadImages: false
+ height: partListView.height
+ width: parent.width
+
+ Column {
+ id: partListView
+ anchors {
+ top: parent.top
+ left: parent.left
+ }
+ width: parent.width
+ spacing: 5
+ QQC2.Label {
+ text: i18nd("mimetreeparser", "An error occurred: %1", errorString)
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+import QtQuick 2.7
+import QtQuick.Controls 2.15 as QQC2
+import QtWebEngine 1.4
+import QtQuick.Window 2.0
+
+import org.kde.pim.mimetreeparser 1.0
+
+Item {
+ id: root
+ objectName: "htmlPart"
+ property string content
+ //We have to give it a minimum size so the html content starts to expand
+ property int minimumSize: 10
+ property int contentHeight: minimumSize
+ property int contentWidth: minimumSize
+ property string searchString
+ property bool autoLoadImages: false
+
+ onSearchStringChanged: {
+ htmlView.findText(searchString)
+ }
+ onContentChanged: {
+ htmlView.loadHtml(content, "file:///");
+ }
+
+ QQC2.ScrollView {
+ anchors.fill: parent
+ Flickable {
+ id: flickable
+
+ clip: true
+ boundsBehavior: Flickable.StopAtBounds
+
+ WebEngineView {
+ id: htmlView
+ objectName: "htmlView"
+ anchors.fill: parent
+
+ Component.onCompleted: loadHtml(content, "file:///")
+ onLoadingChanged: loadingInfo => {
+ if (loadingInfo.status === WebEngineView.LoadFailedStatus) {
+ console.warn("Failed to load html content.")
+ console.warn("Error is ", loadingInfo.errorString)
+ }
+ root.contentWidth = Math.max(contentsSize.width, flickable.minimumSize)
+
+ if (loadingInfo.status === WebEngineView.LoadSucceededStatus) {
+ runJavaScript("[document.body.scrollHeight, document.body.scrollWidth, document.documentElement.scrollHeight]", function(result) {
+ root.contentHeight = Math.min(Math.max(result[0], result[2]), 4000);
+ root.contentWidth = Math.min(Math.max(result[1], flickable.width), 2000)
+ });
+ }
+ }
+ onLinkHovered: hoveredUrl => {
+ // Qt 6.6.1 needs to toString otherwise we get a compile error
+ // https://bugreports.qt.io/browse/QTBUG-119165
+ console.debug("Link hovered ", hoveredUrl.toString())
+ }
+ onNavigationRequested: request => {
+ console.debug("Nav request ", request.navigationType, request.url)
+ if (request.navigationType === WebEngineNavigationRequest.LinkClickedNavigation) {
+ Qt.openUrlExternally(request.url)
+ request.action = WebEngineNavigationRequest.IgnoreRequest
+ }
+ }
+ settings {
+ webGLEnabled: false
+ touchIconsEnabled: false
+ spatialNavigationEnabled: false
+ screenCaptureEnabled: false
+ pluginsEnabled: false
+ localStorageEnabled: false
+ localContentCanAccessRemoteUrls: false
+ localContentCanAccessFileUrls: false
+ linksIncludedInFocusChain: false
+ javascriptEnabled: true
+ javascriptCanOpenWindows: false
+ javascriptCanAccessClipboard: false
+ hyperlinkAuditingEnabled: false
+ fullScreenSupportEnabled: false
+ errorPageEnabled: false
+ //defaultTextEncoding: ???
+ autoLoadImages: root.autoLoadImages
+ autoLoadIconsForPage: false
+ accelerated2dCanvasEnabled: false
+ //The webview should not steal focus
+ focusOnNavigationEnabled: false
+ }
+ profile {
+ offTheRecord: true
+ httpCacheType: WebEngineProfile.NoCache
+ persistentCookiesPolicy: WebEngineProfile.NoPersistentCookies
+ }
+ onContextMenuRequested: request => {
+ request.accepted = true
+ }
+ }
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2019 Christian Mollekopf, <mollekopf@kolabsys.com>
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQml.Models 2.2
+import org.kde.pim.mimetreeparser 1.0
+import org.kde.kirigami 2.19 as Kirigami
+
+ColumnLayout {
+ id: root
+
+ property string content
+ property bool autoLoadImages: false
+
+ property string searchString
+ property int contentHeight: childrenRect.height
+
+ spacing: Kirigami.Units.smallSpacing
+
+ Kirigami.InlineMessage {
+ id: signedButton
+ Layout.fillWidth: true
+ Layout.maximumWidth: parent.width
+ visible: true
+ text: i18nd("mimetreeparser", "This mail contains an invitation")
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.7
+
+import org.kde.pim.mimetreeparser 1.0
+import org.kde.kirigami 2.19 as Kirigami
+import QtQuick.Controls 2.15 as QQC2
+
+Item {
+ id: root
+ property alias rootIndex: visualModel.rootIndex
+ property alias model: visualModel.model
+ property alias searchString: visualModel.searchString
+ property alias autoLoadImages: visualModel.autoLoadImages
+ property variant sender
+ property variant date
+ height: childrenRect.height
+
+ Rectangle {
+ id: border
+ anchors {
+ top: parent.top
+ left: parent.left
+ leftMargin: Kirigami.Units.smallSpacing
+ }
+ color: Kirigami.Theme.disabledTextColor
+ height: partListView.height + sender.height
+ width: Kirigami.Units.smallSpacing
+ }
+
+ QQC2.Label {
+ id: sender
+ anchors {
+ top: parent.top
+ left: border.right
+ leftMargin: Kirigami.Units.smallSpacing
+ right: parent.right
+ }
+
+ text: i18ndc("mimetreeparser", "@info", "sent by %1 on %2", root.sender, Qt.formatDateTime(root.date, "dd MMM yyyy hh:mm"))
+ color: "grey"
+ clip: true
+ }
+ ListView {
+ id: partListView
+ anchors {
+ top: sender.bottom
+ left: border.right
+ margins: Kirigami.Units.smallSpacing
+ leftMargin: Kirigami.Units.smallSpacing
+ }
+ model: MailPartModel {
+ id: visualModel
+ }
+ spacing: 7
+ height: contentHeight
+ width: parent.width - Kirigami.Units.smallSpacing * 3
+ interactive: false
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15 as QQC2
+import QtQuick.Layouts 1.15
+import QtQml.Models 2.2
+import org.kde.pim.mimetreeparser
+import org.kde.kirigami 2.19 as Kirigami
+
+DelegateModel {
+ id: root
+
+ property string searchString: ""
+ property bool autoLoadImages: false
+ property int padding: Kirigami.Units.largeSpacing
+ property url icalCustomComponent
+ required property var urlHandler
+
+ delegate: RowLayout {
+ id: partDelegate
+
+ required property int type
+ required property string content
+ required property bool isEmbedded
+ required property int sidebarSecurityLevel
+
+ required property int encryptionSecurityLevel
+ required property string encryptionIconName
+ required property var encryptionDetails
+
+ required property int signatureSecurityLevel
+ required property string signatureIconName
+ required property string signatureDetails
+
+ required property int errorType
+ required property string errorString
+
+ readonly property bool isEncrypted: encryptionSecurityLevel !== PartModel.Unknow
+ readonly property bool isSigned: signatureSecurityLevel !== PartModel.Unknow
+
+ width: ListView.view.width
+
+ function getType(securityLevel: int): int {
+ if (securityLevel === PartModel.Good) {
+ return Kirigami.MessageType.Positive
+ }
+ if (securityLevel === PartModel.Bad) {
+ return Kirigami.MessageType.Error
+ }
+ if (securityLevel === PartModel.NotSoGood) {
+ return Kirigami.MessageType.Warning
+ }
+ return Kirigami.MessageType.Information
+ }
+
+ function getColor(securityLevel: int): color {
+ if (securityLevel === PartModel.Good) {
+ return Kirigami.Theme.positiveTextColor
+ }
+ if (securityLevel === PartModel.Bad) {
+ return Kirigami.Theme.negativeTextColor
+ }
+ if (securityLevel === PartModel.NotSoGood) {
+ return Kirigami.Theme.neutralTextColor
+ }
+ return "transparent"
+ }
+
+ QQC2.Control {
+ id: sidebar
+
+ Layout.preferredWidth: Kirigami.Units.smallSpacing
+ Layout.fillHeight: true
+
+ visible: partDelegate.sidebarSecurityLevel !== PartModel.Unknown
+
+ background: Rectangle {
+ id: border
+ color: getColor(partDelegate.sidebarSecurityLevel)
+ }
+ }
+
+ ColumnLayout {
+ spacing: Kirigami.Units.smallSpacing
+
+ Layout.leftMargin: sidebar.visible ? Kirigami.Units.smallSpacing : Kirigami.Units.largeSpacing
+ Layout.rightMargin: Kirigami.Units.largeSpacing
+
+ Banner {
+ iconName: partDelegate.encryptionIconName
+ type: getType(partDelegate.encryptionSecurityLevel)
+ visible: partDelegate.isEncrypted
+ text: !partDelegate.encryptionDetails.keyId ? i18n("This message is encrypted but you don't have a matching secret key.") : i18n("This message is encrypted for: %1", partDelegate.encryptionDetails.keyId);
+
+ Layout.fillWidth: true
+ }
+
+ Banner {
+ iconName: partDelegate.signatureIconName
+ visible: partDelegate.isSigned
+ type: getType(partDelegate.signatureSecurityLevel)
+ text: partDelegate.signatureDetails
+
+ onLinkActivated: (link) => root.urlHandler.handleClick(link, QQC2.ApplicationWindow.window)
+
+ Layout.fillWidth: true
+ }
+
+ Loader {
+ id: partLoader
+
+ Layout.preferredHeight: item ? item.contentHeight : 0
+ Layout.fillWidth: true
+ Layout.leftMargin: root.padding
+ Layout.rightMargin: root.padding
+
+ Component.onCompleted: {
+ switch (partDelegate.type) {
+ case PartModel.Plain:
+ partLoader.setSource("TextPart.qml", {
+ content: partDelegate.content,
+ embedded: partDelegate.isEmbedded,
+ })
+ break
+ case PartModel.Html:
+ partLoader.setSource("HtmlPart.qml", {
+ content: partDelegate.content,
+ })
+ break;
+ case PartModel.Error:
+ partLoader.setSource("ErrorPart.qml", {
+ errorType: partDelegate.errorType,
+ errorString: partDelegate.errorString,
+ })
+ break;
+ case PartModel.Encapsulated:
+ partLoader.setSource("MailPart.qml", {
+ rootIndex: root.modelIndex(index),
+ model: root.model,
+ sender: model.sender,
+ date: model.date,
+ })
+ break;
+ case PartModel.Ical:
+ partLoader.setSource(root.icalCustomComponent ? root.icalCustomComponent : "ICalPart.qml", {
+ content: partDelegate.content,
+ })
+ break;
+ }
+ }
+
+ Binding {
+ target: partLoader.item
+ property: "searchString"
+ value: root.searchString
+ when: partLoader.status === Loader.Ready
+ }
+ Binding {
+ target: partLoader.item
+ property: "autoLoadImages"
+ value: root.autoLoadImages
+ when: partLoader.status === Loader.Ready
+ }
+ }
+ }
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick
+import QtQuick.Layouts
+import org.kde.kirigami as Kirigami
+import org.kde.pim.mimetreeparser
+
+ListView {
+ id: root
+
+ property alias message: messageParser.message
+ readonly property string subject: messageParser.subject
+ readonly property string from: messageParser.from
+ readonly property string sender: messageParser.sender
+ readonly property string to: messageParser.to
+ readonly property string cc: messageParser.cc
+ readonly property string bcc: messageParser.bcc
+ readonly property date dateTime: messageParser.date
+
+ property alias rootIndex: visualModel.rootIndex
+ property alias padding: visualModel.padding
+ property alias searchString: visualModel.searchString
+ property alias autoLoadImages: visualModel.autoLoadImages
+ property var attachmentModel: messageParser.attachments
+
+ property url icalCustomComponent
+
+ topMargin: padding
+ bottomMargin: padding
+
+ spacing: Kirigami.Units.smallSpacing
+
+ model: MailPartModel {
+ id: visualModel
+ model: messageParser.parts
+ icalCustomComponent: root.icalCustomComponent
+ urlHandler: urlHandler
+ }
+
+ MessageParser {
+ id: messageParser
+ }
+
+ MimeUrlHandler {
+ id: urlHandler
+
+ onErrorOccurred: (errorMessage) => QQC2.ApplicationWindow.window.showPassiveNotification(errorMessage)
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net>
+// SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick 2.7
+import QtQuick.Controls 2.15 as QQC2
+
+import org.kde.pim.mimetreeparser 1.0
+import org.kde.kirigami 2.19 as Kirigami
+
+Item {
+ id: root
+
+ property string content
+ property bool embedded: true
+ property bool autoLoadImages: false
+
+ property string searchString
+ property int contentHeight: textEdit.height
+
+ onSearchStringChanged: {
+ //This is a workaround because otherwise the view will not take the ViewHighlighter changes into account.
+ textEdit.text = root.content
+ }
+
+ QQC2.TextArea {
+ id: textEdit
+ objectName: "textView"
+ background: null
+ readOnly: true
+ textFormat: TextEdit.RichText
+ wrapMode: TextEdit.Wrap
+ padding: 0
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ top: parent.top
+ }
+
+ text: content.substring(0, 100000).replace(/\u00A0/g,' ') //The TextEdit deals poorly with messages that are too large.
+ color: embedded ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
+ onLinkActivated: link => Qt.openUrlExternally(link)
+
+ onHoveredLinkChanged: if (hoveredLink.length > 0) {
+ applicationWindow().hoverLinkIndicator.text = hoveredLink;
+ } else {
+ applicationWindow().hoverLinkIndicator.text = "";
+ }
+
+ //Kube.ViewHighlighter {
+ // textDocument: textEdit.textDocument
+ // searchString: root.searchString
+ //}
+ }
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2024 Carl Schwan <carl@carlschwan.eu>
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#include <MimeTreeParserCore/AttachmentModel>
+#include <MimeTreeParserCore/MessageParser>
+#include <MimeTreeParserCore/PartModel>
+#include <MimeTreeParserCore/UrlHandler>
+
+#include <QQmlEngine>
+
+class MessageParserForeign : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(MessageParser)
+ QML_FOREIGN(MessageParser)
+};
+
+class PartModelForeign : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(PartModel)
+ QML_UNCREATABLE("Enum only")
+ QML_FOREIGN(PartModel)
+};
+
+class AttachmentModelForeign : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(AttachmentModel)
+ QML_UNCREATABLE("Enum only")
+ QML_FOREIGN(AttachmentModel)
+};
+
+class UrlHandlerForeign : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(MimeUrlHandler)
+ QML_FOREIGN(UrlHandler)
+};
--- /dev/null
+# SPDX-FileCopyrightText: 2023 g10 Code GmbH
+# SPDX-FileContributor: Carl Schwan <carlschwan@kde.org>
+# SPDX-License-Identifier: BSD-3-Clause
+
+ecm_setup_version(PROJECT
+ VARIABLE_PREFIX MIMETREEPARSER_WIDGETS
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_widgets_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserWidgetsConfigVersion.cmake"
+ SOVERSION 6
+)
+
+add_library(KPim6MimeTreeParserWidgets)
+add_library(KPim6::MimeTreeParserWidgets
+ ALIAS KPim6MimeTreeParserWidgets)
+
+target_sources(KPim6MimeTreeParserWidgets PRIVATE
+ attachmentview_p.h
+ attachmentview.cpp
+ messagecontainerwidget_p.h
+ messagecontainerwidget.cpp
+ messageviewer.h
+ messageviewer.cpp
+ messageviewerdialog.h
+ messageviewerdialog.cpp
+)
+
+ecm_qt_declare_logging_category(KPim6MimeTreeParserWidgets
+ HEADER mimetreeparser_widgets_debug.h
+ IDENTIFIER MIMETREEPARSER_WIDGET_LOG
+ CATEGORY_NAME org.kde.pim.mimetreeparser.widgets
+ DESCRIPTION "mimetreeparser (pim lib)"
+ EXPORT MIMETREEPARSER
+)
+
+if(COMPILE_WITH_UNITY_CMAKE_SUPPORT)
+ set_target_properties(KPim6MimeTreeParserWidgets PROPERTIES UNITY_BUILD ON)
+endif()
+generate_export_header(KPim6MimeTreeParserWidgets BASE_NAME mimetreeparser_widgets)
+
+
+target_include_directories(KPim6MimeTreeParserWidgets INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserWidgets>")
+
+target_link_libraries(KPim6MimeTreeParserWidgets
+PUBLIC
+ Qt::Widgets
+ KPim6::Mime
+PRIVATE
+ KPim6::MimeTreeParserCore
+ Qt::PrintSupport
+ KF6::I18n
+ KF6::CalendarCore
+ KF6::WidgetsAddons
+ KPim6::Libkleo
+ Gpgmepp
+)
+
+set_target_properties(KPim6MimeTreeParserWidgets PROPERTIES
+ VERSION ${MIMETREEPARSER_WIDGETS_VERSION}
+ SOVERSION ${MIMETREEPARSER_WIDGETS_SOVERSION}
+ EXPORT_NAME MimeTreeParserWidgets
+)
+
+ecm_generate_pri_file(BASE_NAME MimeTreeParserWidgets
+ LIB_NAME KPim6MimeTreeParserWidgets
+ DEPS "MimeTreeParserWidgets"
+ FILENAME_VAR PRI_FILENAME
+)
+
+install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
+
+install(TARGETS
+ KPim6MimeTreeParserWidgets
+ EXPORT KPim6MimeTreeParserWidgetsTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
+)
+
+ecm_generate_headers(MimeTreeParserWidgets_CamelCase_HEADERS
+ HEADER_NAMES
+ MessageViewer
+ MessageViewerDialog
+ REQUIRED_HEADERS MimeTreeParserWidgets_HEADERS
+ PREFIX MimeTreeParserWidgets
+)
+
+install(FILES
+ ${MimeTreeParserWidgets_CamelCase_HEADERS}
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserWidgets/MimeTreeParserWidgets
+ COMPONENT Devel
+)
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_widgets_export.h
+ ${MimeTreeParserWidgets_HEADERS}
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserWidgets/mimetreeparserwidgets
+ COMPONENT Devel
+)
+
+if(BUILD_QCH)
+ ecm_add_qch(
+ KPim6MimeTreeParserWidgets_QCH
+ NAME MimeTreeParserWidgets
+ BASE_NAME KPim6MimeTreeParserWidgets
+ VERSION ${PIM_VERSION}
+ ORG_DOMAIN org.kde
+ # using only public headers, to cover only public API
+ SOURCES ${MimeTreeParserWidgets_HEADERS}
+ MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
+ LINK_QCHS
+ Qt6Core_QCH
+ Qt6Widgets_QCH
+ INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ BLANK_MACROS
+ MIMETREEPARSER_WIDGETS_EXPORT
+ TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ COMPONENT Devel
+ )
+endif()
+
+########### CMake Config Files ###########
+set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KPim6MimeTreeParserWidgets")
+
+if(BUILD_QCH)
+ ecm_install_qch_export(
+ TARGETS KPim6MimeTreeParserWidgets_QCH
+ FILE KPim6MimeTreeParserWidgetsQchTargets.cmake
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+ )
+ set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KPim6MimeTreeParserWidgetsQchTargets.cmake\")")
+endif()
+
+configure_package_config_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/KPimMimeTreeParserWidgetsConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserWidgetsConfig.cmake"
+ INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
+)
+
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserWidgetsConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/KPim6MimeTreeParserWidgetsConfigVersion.cmake"
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+)
+
+install(EXPORT KPim6MimeTreeParserWidgetsTargets
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ FILE KPim6MimeTreeParserWidgetsTargets.cmake
+ NAMESPACE KPim6::
+)
+
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/mimetreeparser_widgets_version.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/MimeTreeParserWidgets
+ COMPONENT Devel
+)
--- /dev/null
+# SPDX-FileCopyrightText: none
+# SPDX-License-Identifier: BSD-3-Clause
+
+@PACKAGE_INIT@
+include(CMakeFindDependencyMacro)
+
+find_dependency(KF6I18n "@KF_MIN_VERSION@")
+find_dependency(KPim6Mime "@KPIM_MIME_VERSION@")
+find_dependency(KPim6MimeTreeParserCore "@PIM_VERSION@")
+
+include("${CMAKE_CURRENT_LIST_DIR}/KPim6MimeTreeParserWidgetsTargets.cmake")
+@PACKAGE_INCLUDE_QCHTARGETS@
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "attachmentview_p.h"
+#include <QHeaderView>
+
+AttachmentView::AttachmentView(QWidget *parent)
+ : QTreeView(parent)
+{
+ setSelectionMode(QAbstractItemView::ExtendedSelection);
+ setRootIsDecorated(false);
+ setUniformRowHeights(true);
+ header()->setSectionResizeMode(QHeaderView::Interactive);
+ header()->setStretchLastSection(false);
+ setColumnWidth(0, 200);
+}
+
+void AttachmentView::contextMenuEvent(QContextMenuEvent *event)
+{
+ Q_UNUSED(event);
+ Q_EMIT contextMenuRequested();
+}
+
+#include "moc_attachmentview_p.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include <QTreeView>
+
+class AttachmentView : public QTreeView
+{
+ Q_OBJECT
+
+public:
+ explicit AttachmentView(QWidget *parent);
+ void contextMenuEvent(QContextMenuEvent *event) override;
+
+Q_SIGNALS:
+ void contextMenuRequested();
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "../core/utils.h"
+#include "messagecontainerwidget_p.h"
+#include "partmodel.h"
+#include <MimeTreeParserCore/UrlHandler>
+
+#include <KLocalizedString>
+#include <KMessageWidget>
+#include <Libkleo/Compliance>
+#include <Libkleo/Formatting>
+#include <QGpgME/Protocol>
+
+#include <QLabel>
+#include <QPaintEvent>
+#include <QPainter>
+#include <QVBoxLayout>
+
+#include <gpgme++/verificationresult.h>
+
+namespace
+{
+
+const int borderWidth = 5;
+
+QColor getColor(PartModel::SecurityLevel securityLevel)
+{
+ const static QHash<PartModel::SecurityLevel, QColor> colors{
+ {PartModel::Good, QColor(39, 174, 96)}, // Window: ForegroundPositive
+ {PartModel::Bad, QColor(218, 68, 83)}, // Window: ForegroundNegative
+ {PartModel::NotSoGood, QColor(246, 116, 0)}, // Window: ForegroundNeutral
+ };
+
+ return colors.value(securityLevel, QColor());
+}
+
+KMessageWidget::MessageType getType(PartModel::SecurityLevel securityLevel)
+{
+ const static QHash<PartModel::SecurityLevel, KMessageWidget::MessageType> messageTypes{
+ {PartModel::Good, KMessageWidget::MessageType::Positive},
+ {PartModel::Bad, KMessageWidget::MessageType::Error},
+ {PartModel::NotSoGood, KMessageWidget::MessageType::Warning},
+ };
+
+ return messageTypes.value(securityLevel, KMessageWidget::MessageType::Information);
+}
+}
+
+MessageWidgetContainer::MessageWidgetContainer(const QString &signatureInfo,
+ const QString &signatureIconName,
+ PartModel::SecurityLevel signatureSecurityLevel,
+ const SignatureInfo &encryptionInfo,
+ const QString &encryptionIconName,
+ PartModel::SecurityLevel encryptionSecurityLevel,
+ PartModel::SecurityLevel sidebarSecurityLevel,
+ UrlHandler *urlHandler,
+ QWidget *parent)
+ : QFrame(parent)
+ , m_signatureInfo(signatureInfo)
+ , m_signatureSecurityLevel(signatureSecurityLevel)
+ , m_displaySignatureInfo(signatureSecurityLevel != PartModel::Unknow)
+ , m_signatureIconName(signatureIconName)
+ , m_encryptionInfo(encryptionInfo)
+ , m_encryptionSecurityLevel(encryptionSecurityLevel)
+ , m_displayEncryptionInfo(encryptionSecurityLevel != PartModel::Unknow)
+ , m_encryptionIconName(encryptionIconName)
+ , m_sidebarSecurityLevel(sidebarSecurityLevel)
+ , m_urlHandler(urlHandler)
+{
+ createLayout();
+}
+
+MessageWidgetContainer::~MessageWidgetContainer() = default;
+
+void MessageWidgetContainer::paintEvent(QPaintEvent *event)
+{
+ Q_UNUSED(event)
+
+ if (m_sidebarSecurityLevel == PartModel::Unknow) {
+ return;
+ }
+
+ QPainter painter(this);
+ if (layoutDirection() == Qt::RightToLeft) {
+ auto r = rect();
+ r.setX(width() - borderWidth);
+ r.setWidth(borderWidth);
+ const QColor color = getColor(m_sidebarSecurityLevel);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setBrush(QColor(color));
+ painter.setPen(QPen(Qt::NoPen));
+ painter.drawRect(r);
+ } else {
+ auto r = rect();
+ r.setWidth(borderWidth);
+ const QColor color = getColor(m_sidebarSecurityLevel);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setBrush(QColor(color));
+ painter.setPen(QPen(Qt::NoPen));
+ painter.drawRect(r);
+ }
+}
+
+bool MessageWidgetContainer::event(QEvent *event)
+{
+ if (event->type() == QEvent::Polish && !layout()) {
+ createLayout();
+ }
+
+ return QFrame::event(event);
+}
+
+void MessageWidgetContainer::createLayout()
+{
+ delete layout();
+
+ auto vLayout = new QVBoxLayout(this);
+
+ if (m_sidebarSecurityLevel == PartModel::Unknow) {
+ return;
+ }
+
+ if (layoutDirection() == Qt::RightToLeft) {
+ layout()->setContentsMargins(0, 0, borderWidth * 2, 0);
+ } else {
+ layout()->setContentsMargins(borderWidth * 2, 0, 0, 0);
+ }
+
+ if (m_displayEncryptionInfo) {
+ auto encryptionMessage = new KMessageWidget(this);
+ encryptionMessage->setObjectName(QLatin1StringView("EncryptionMessage"));
+ encryptionMessage->setCloseButtonVisible(false);
+ encryptionMessage->setMessageType(getType(m_encryptionSecurityLevel));
+
+ QString text;
+ if (m_encryptionSecurityLevel == PartModel::Bad) {
+ encryptionMessage->setIcon(QIcon::fromTheme(QStringLiteral("data-error")));
+ if (Kleo::DeVSCompliance::isCompliant() && m_encryptionInfo.isCompliant) {
+ text = i18n("This message is VS-NfD compliant encrypted but you don't have a matching secret key.", QString::fromUtf8(m_encryptionInfo.keyId));
+ } else {
+ text = i18n("This message is encrypted but you don't have a matching secret key.");
+ }
+ } else {
+ encryptionMessage->setIcon(QIcon::fromTheme(QStringLiteral("mail-encrypted")));
+ if (Kleo::DeVSCompliance::isCompliant() && m_encryptionInfo.isCompliant) {
+ text = i18n("This message is VS-NfD compliant encrypted.");
+ } else {
+ text = i18n("This message is encrypted.");
+ }
+ }
+
+ encryptionMessage->setText(text + QLatin1Char(' ') + QStringLiteral("<a href=\"messageviewer:showDetails\">Details</a>"));
+
+ connect(encryptionMessage, &KMessageWidget::linkActivated, this, [this, encryptionMessage, text](const QString &link) {
+ QUrl url(link);
+ if (url.path() == QLatin1StringView("showDetails")) {
+ QString newText = text + QLatin1Char(' ') + i18n("The message is encrypted for the following recipients:");
+
+ newText += MimeTreeParser::decryptRecipientsToHtml(m_encryptionInfo.decryptRecipients, m_encryptionInfo.cryptoProto);
+
+ encryptionMessage->setText(newText);
+ return;
+ }
+
+ if (url.path() == QLatin1StringView("showCertificate")) {
+ m_urlHandler->handleClick(QUrl(link), window()->windowHandle());
+ }
+ });
+
+ vLayout->addWidget(encryptionMessage);
+ }
+
+ if (m_displaySignatureInfo) {
+ auto signatureMessage = new KMessageWidget(this);
+ signatureMessage->setObjectName(QStringLiteral("SignatureMessage"));
+ signatureMessage->setCloseButtonVisible(false);
+ signatureMessage->setText(m_signatureInfo);
+ connect(signatureMessage, &KMessageWidget::linkActivated, this, [this](const QString &link) {
+ m_urlHandler->handleClick(QUrl(link), window()->windowHandle());
+ });
+ signatureMessage->setMessageType(getType(m_signatureSecurityLevel));
+ signatureMessage->setWordWrap(true);
+ signatureMessage->setIcon(QIcon::fromTheme(m_signatureIconName));
+
+ vLayout->addWidget(signatureMessage);
+ }
+}
+
+#include "moc_messagecontainerwidget_p.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_widgets_export.h"
+
+#include <MimeTreeParserCore/PartModel>
+#include <QFrame>
+
+class SignatureInfo;
+class QPaintEvent;
+class UrlHandler;
+
+/// \internal
+class MIMETREEPARSER_WIDGETS_EXPORT MessageWidgetContainer : public QFrame
+{
+ Q_OBJECT
+
+public:
+ explicit MessageWidgetContainer(const QString &signatureInfo,
+ const QString &signatureIconName,
+ PartModel::SecurityLevel signatureSecurityLevel,
+ const SignatureInfo &encryptionInfo,
+ const QString &encryptionIconName,
+ PartModel::SecurityLevel encryptionSecurityLevel,
+ PartModel::SecurityLevel sidebarSecurityLevel,
+ UrlHandler *urlHandler,
+ QWidget *parent = nullptr);
+ ~MessageWidgetContainer() override;
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ [[nodiscard]] bool event(QEvent *event) override;
+
+private:
+ MIMETREEPARSER_WIDGETS_NO_EXPORT void createLayout();
+
+ QString const m_signatureInfo;
+ PartModel::SecurityLevel m_signatureSecurityLevel;
+ bool m_displaySignatureInfo;
+ QString const m_signatureIconName;
+
+ SignatureInfo const m_encryptionInfo;
+ PartModel::SecurityLevel m_encryptionSecurityLevel;
+ bool m_displayEncryptionInfo;
+ QString const m_encryptionIconName;
+
+ PartModel::SecurityLevel m_sidebarSecurityLevel;
+
+ UrlHandler *const m_urlHandler;
+};
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#include "messageviewer.h"
+
+#include "attachmentview_p.h"
+#include "messagecontainerwidget_p.h"
+#include "mimetreeparser_widgets_debug.h"
+#include "partmodel.h"
+#include "urlhandler.h"
+
+#include <KCalendarCore/Event>
+#include <KCalendarCore/ICalFormat>
+#include <KLocalizedString>
+#include <KMessageWidget>
+#include <MimeTreeParserCore/AttachmentModel>
+#include <MimeTreeParserCore/MessageParser>
+#include <MimeTreeParserCore/ObjectTreeParser>
+#include <MimeTreeParserCore/PartModel>
+
+#include <QAction>
+#include <QDesktopServices>
+#include <QFileDialog>
+#include <QFormLayout>
+#include <QGroupBox>
+#include <QLabel>
+#include <QMenu>
+#include <QScrollArea>
+#include <QStandardPaths>
+#include <QVBoxLayout>
+#include <qnamespace.h>
+
+using namespace MimeTreeParser::Widgets;
+
+class MessageViewer::Private
+{
+public:
+ Private(MessageViewer *q_ptr)
+ : q{q_ptr}
+ , messageWidget(new KMessageWidget(q_ptr))
+ {
+ createActions();
+
+ messageWidget->setCloseButtonVisible(true);
+ messageWidget->hide();
+ }
+
+ MessageViewer *const q;
+
+ QVBoxLayout *layout = nullptr;
+ KMime::Message::Ptr message;
+ MessageParser parser;
+ QScrollArea *scrollArea = nullptr;
+ QFormLayout *formLayout = nullptr;
+ AttachmentView *attachmentView = nullptr;
+ MimeTreeParser::MessagePart::List selectedParts;
+ UrlHandler *urlHandler = nullptr;
+ KMessageWidget *const messageWidget = nullptr;
+
+ QAction *saveAttachmentAction = nullptr;
+ QAction *openAttachmentAction = nullptr;
+ QAction *importPublicKeyAction = nullptr;
+
+ void createActions()
+ {
+ saveAttachmentAction = new QAction(QIcon::fromTheme(QStringLiteral("document-save-as")), i18n("&Save Attachment As…"), q);
+ connect(saveAttachmentAction, &QAction::triggered, q, [this]() {
+ saveSelectedAttachments();
+ });
+
+ openAttachmentAction = new QAction(i18nc("to open", "Open"), q);
+ connect(openAttachmentAction, &QAction::triggered, q, [this]() {
+ openSelectedAttachments();
+ });
+
+ importPublicKeyAction = new QAction(i18nc("@action:inmenu", "Import public key"), q);
+ connect(importPublicKeyAction, &QAction::triggered, q, [this]() {
+ importPublicKey();
+ });
+ }
+
+ void openSelectedAttachments();
+ void saveSelectedAttachments();
+ void selectionChanged();
+ void showContextMenu();
+ void importPublicKey();
+ void recursiveBuildViewer(PartModel *parts, QVBoxLayout *layout, const QModelIndex &parent);
+};
+
+void MessageViewer::Private::openSelectedAttachments()
+{
+ Q_ASSERT(selectedParts.count() >= 1);
+ for (const auto &part : std::as_const(selectedParts)) {
+ parser.attachments()->openAttachment(part);
+ }
+}
+
+void MessageViewer::Private::saveSelectedAttachments()
+{
+ Q_ASSERT(selectedParts.count() >= 1);
+
+ for (const auto &part : std::as_const(selectedParts)) {
+ QString pname = part->filename();
+ if (pname.isEmpty()) {
+ pname = i18nc("Fallback when file has no name", "unnamed");
+ }
+
+ const QString path = QFileDialog::getSaveFileName(q, i18n("Save Attachment As"), pname);
+ parser.attachments()->saveAttachmentToPath(part, path);
+ }
+}
+
+void MessageViewer::Private::importPublicKey()
+{
+ Q_ASSERT(selectedParts.count() == 1);
+ parser.attachments()->importPublicKey(selectedParts[0]);
+}
+
+void MessageViewer::Private::showContextMenu()
+{
+ const int numberOfParts(selectedParts.count());
+ QMenu menu;
+ if (numberOfParts == 1) {
+ const QString mimetype = QString::fromLatin1(selectedParts.first()->mimeType());
+ if (mimetype == QLatin1StringView("application/pgp-keys")) {
+ menu.addAction(importPublicKeyAction);
+ }
+ }
+
+ menu.addAction(openAttachmentAction);
+ menu.addAction(saveAttachmentAction);
+
+ menu.exec(QCursor::pos());
+}
+
+void MessageViewer::Private::selectionChanged()
+{
+ const QModelIndexList selectedRows = attachmentView->selectionModel()->selectedRows();
+ MimeTreeParser::MessagePart::List selectedParts;
+ selectedParts.reserve(selectedRows.count());
+ for (const QModelIndex &index : selectedRows) {
+ auto part = attachmentView->model()->data(index, AttachmentModel::AttachmentPartRole).value<MimeTreeParser::MessagePart::Ptr>();
+ selectedParts.append(part);
+ }
+ this->selectedParts = selectedParts;
+}
+
+MessageViewer::MessageViewer(QWidget *parent)
+ : QSplitter(Qt::Vertical, parent)
+ , d(std::make_unique<MessageViewer::Private>(this))
+{
+ setObjectName(QLatin1StringView("MessageViewerSplitter"));
+ setChildrenCollapsible(false);
+ setSizes({0});
+
+ addWidget(d->messageWidget);
+
+ auto mainWidget = new QWidget(this);
+ auto mainLayout = new QVBoxLayout(mainWidget);
+ mainLayout->setContentsMargins({});
+ mainLayout->setSpacing(0);
+
+ auto headersArea = new QWidget(mainWidget);
+ headersArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ mainLayout->addWidget(headersArea);
+
+ d->urlHandler = new UrlHandler(this);
+
+ d->formLayout = new QFormLayout(headersArea);
+
+ auto widget = new QWidget(this);
+ d->layout = new QVBoxLayout(widget);
+ d->layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
+ d->layout->setObjectName(QLatin1StringView("PartLayout"));
+
+ d->scrollArea = new QScrollArea(this);
+ d->scrollArea->setWidget(widget);
+ d->scrollArea->setWidgetResizable(true);
+ d->scrollArea->setBackgroundRole(QPalette::Base);
+ mainLayout->addWidget(d->scrollArea);
+ mainLayout->setStretchFactor(d->scrollArea, 2);
+ setStretchFactor(1, 2);
+
+ d->attachmentView = new AttachmentView(this);
+ d->attachmentView->setProperty("_breeze_borders_sides", QVariant::fromValue(QFlags{Qt::BottomEdge}));
+ d->attachmentView->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
+ addWidget(d->attachmentView);
+
+ connect(d->attachmentView, &AttachmentView::contextMenuRequested, this, [this] {
+ d->selectionChanged();
+ d->showContextMenu();
+ });
+}
+
+MessageViewer::~MessageViewer()
+{
+ QLayoutItem *child;
+ while ((child = d->layout->takeAt(0)) != nullptr) {
+ delete child->widget();
+ delete child;
+ }
+}
+
+QString MessageViewer::subject() const
+{
+ return d->parser.subject();
+}
+
+KMime::Message::Ptr MessageViewer::message() const
+{
+ return d->parser.message();
+}
+
+void MessageViewer::Private::recursiveBuildViewer(PartModel *parts, QVBoxLayout *layout, const QModelIndex &parent)
+{
+ for (int i = 0, count = parts->rowCount(parent); i < count; i++) {
+ const auto idx = parts->index(i, 0, parent);
+ const auto type = idx.data(PartModel::TypeRole).value<PartModel::Types>();
+ const auto content = idx.data(PartModel::ContentRole).toString();
+
+ // signature
+ const auto signatureSecurityLevel = idx.data(PartModel::SignatureSecurityLevelRole).value<PartModel::SecurityLevel>();
+ const auto signatureInfo = idx.data(PartModel::SignatureDetailsRole).toString();
+ const auto signatureIconName = idx.data(PartModel::SignatureIconNameRole).toString();
+
+ // encryption
+ const auto encryptionSecurityLevel = idx.data(PartModel::EncryptionSecurityLevelRole).value<PartModel::SecurityLevel>();
+ const auto encryptionInfo = idx.data(PartModel::EncryptionDetails).value<SignatureInfo>();
+ const auto encryptionIconName = idx.data(PartModel::EncryptionIconNameRole).toString();
+
+ // sidebar
+ const auto sidebarSecurityLevel = idx.data(PartModel::SidebarSecurityLevelRole).value<PartModel::SecurityLevel>();
+
+ switch (type) {
+ case PartModel::Types::Plain: {
+ auto container = new MessageWidgetContainer(signatureInfo,
+ signatureIconName,
+ signatureSecurityLevel,
+ encryptionInfo,
+ encryptionIconName,
+ encryptionSecurityLevel,
+ sidebarSecurityLevel,
+ urlHandler);
+ auto label = new QLabel(content);
+ label->setTextInteractionFlags(Qt::TextBrowserInteraction);
+ label->setOpenExternalLinks(true);
+ label->setWordWrap(true);
+ container->layout()->addWidget(label);
+ layout->addWidget(container);
+ break;
+ }
+ case PartModel::Types::Ical: {
+ auto container = new MessageWidgetContainer(signatureInfo,
+ signatureIconName,
+ signatureSecurityLevel,
+ encryptionInfo,
+ encryptionIconName,
+ encryptionSecurityLevel,
+ sidebarSecurityLevel,
+ urlHandler);
+
+ KCalendarCore::ICalFormat format;
+ auto incidence = format.fromString(content);
+
+ auto widget = new QGroupBox(container);
+ widget->setTitle(i18n("Invitation"));
+
+ auto incidenceLayout = new QFormLayout(widget);
+ incidenceLayout->addRow(i18n("&Summary:"), new QLabel(incidence->summary()));
+ incidenceLayout->addRow(i18n("&Organizer:"), new QLabel(incidence->organizer().fullName()));
+ if (incidence->location().length() > 0) {
+ incidenceLayout->addRow(i18n("&Location:"), new QLabel(incidence->location()));
+ }
+ incidenceLayout->addRow(i18n("&Start date:"), new QLabel(incidence->dtStart().toLocalTime().toString()));
+ if (const auto event = incidence.dynamicCast<KCalendarCore::Event>()) {
+ incidenceLayout->addRow(i18n("&End date:"), new QLabel(event->dtEnd().toLocalTime().toString()));
+ }
+ if (incidence->description().length() > 0) {
+ incidenceLayout->addRow(i18n("&Details:"), new QLabel(incidence->description()));
+ }
+
+ container->layout()->addWidget(widget);
+
+ layout->addWidget(container);
+ break;
+ }
+ case PartModel::Types::Encapsulated: {
+ auto container = new MessageWidgetContainer(signatureInfo,
+ signatureIconName,
+ signatureSecurityLevel,
+ encryptionInfo,
+ encryptionIconName,
+ encryptionSecurityLevel,
+ sidebarSecurityLevel,
+ urlHandler);
+
+ auto groupBox = new QGroupBox(container);
+ groupBox->setSizePolicy(QSizePolicy::MinimumExpanding, q->sizePolicy().verticalPolicy());
+ groupBox->setTitle(i18n("Encapsulated email"));
+
+ auto encapsulatedLayout = new QVBoxLayout(groupBox);
+
+ auto header = new QWidget(groupBox);
+ auto headerLayout = new QFormLayout(header);
+ const auto from = parts->data(parts->index(i, 0, parent), PartModel::SenderRole).toString();
+ const auto date = parts->data(parts->index(i, 0, parent), PartModel::DateRole).toDateTime();
+ headerLayout->addRow(i18n("From:"), new QLabel(from));
+ headerLayout->addRow(i18n("Date:"), new QLabel(date.toLocalTime().toString()));
+
+ encapsulatedLayout->addWidget(header);
+
+ recursiveBuildViewer(parts, encapsulatedLayout, parts->index(i, 0, parent));
+
+ container->layout()->addWidget(groupBox);
+
+ layout->addWidget(container);
+ break;
+ }
+
+ case PartModel::Types::Error: {
+ const auto errorString = idx.data(PartModel::ErrorString).toString();
+ auto errorWidget = new KMessageWidget(errorString);
+ errorWidget->setCloseButtonVisible(false);
+ errorWidget->setMessageType(KMessageWidget::MessageType::Error);
+ QObject::connect(errorWidget, &KMessageWidget::linkActivated, errorWidget, [this, errorWidget](const QString &link) {
+ QUrl url(link);
+ if (url.path() == QLatin1StringView("showCertificate")) {
+ urlHandler->handleClick(QUrl(link), errorWidget->window()->windowHandle());
+ }
+ });
+ errorWidget->setWordWrap(true);
+ layout->addWidget(errorWidget);
+ break;
+ }
+ default:
+ qCWarning(MIMETREEPARSER_WIDGET_LOG) << parts->data(parts->index(i, 0, parent), PartModel::ContentRole) << type;
+ }
+ }
+}
+
+class HeaderLabel : public QLabel
+{
+public:
+ HeaderLabel(const QString &content)
+ : QLabel(content)
+ {
+ setWordWrap(true);
+ setTextFormat(Qt::PlainText);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ }
+
+ void resizeEvent(QResizeEvent *event) override
+ {
+ int height = heightForWidth(width());
+ setMaximumHeight(height);
+ setMinimumHeight(height);
+
+ QLabel::resizeEvent(event);
+ }
+};
+
+void MessageViewer::setMessage(const KMime::Message::Ptr message)
+{
+ setUpdatesEnabled(false);
+ d->parser.setMessage(message);
+
+ connect(d->parser.attachments(), &AttachmentModel::info, this, [this](const QString &message) {
+ d->messageWidget->setMessageType(KMessageWidget::Information);
+ d->messageWidget->setText(message);
+ d->messageWidget->animatedShow();
+ });
+
+ connect(d->parser.attachments(), &AttachmentModel::errorOccurred, this, [this](const QString &message) {
+ d->messageWidget->setMessageType(KMessageWidget::Error);
+ d->messageWidget->setText(message);
+ d->messageWidget->animatedShow();
+ });
+
+ for (int i = d->formLayout->rowCount() - 1; i >= 0; i--) {
+ d->formLayout->removeRow(i);
+ }
+ if (!d->parser.subject().isEmpty()) {
+ const auto label = new QLabel(d->parser.subject());
+ label->setTextFormat(Qt::PlainText);
+ d->formLayout->addRow(i18n("&Subject:"), label);
+ }
+ if (!d->parser.from().isEmpty()) {
+ d->formLayout->addRow(i18n("&From:"), new HeaderLabel(d->parser.from()));
+ }
+ if (!d->parser.sender().isEmpty() && d->parser.from() != d->parser.sender()) {
+ d->formLayout->addRow(i18n("&Sender:"), new HeaderLabel(d->parser.sender()));
+ }
+ if (!d->parser.to().isEmpty()) {
+ d->formLayout->addRow(i18n("&To:"), new HeaderLabel(d->parser.to()));
+ }
+ if (!d->parser.cc().isEmpty()) {
+ d->formLayout->addRow(i18n("&CC:"), new HeaderLabel(d->parser.cc()));
+ }
+ if (!d->parser.bcc().isEmpty()) {
+ d->formLayout->addRow(i18n("&BCC:"), new HeaderLabel(d->parser.bcc()));
+ }
+ if (!d->parser.date().isNull()) {
+ d->formLayout->addRow(i18n("&Date:"), new HeaderLabel(QLocale::system().toString(d->parser.date().toLocalTime())));
+ }
+
+ const auto parts = d->parser.parts();
+
+ QLayoutItem *child;
+ while ((child = d->layout->takeAt(0)) != nullptr) {
+ delete child->widget();
+ delete child;
+ }
+
+ d->recursiveBuildViewer(parts, d->layout, {});
+ d->layout->addStretch();
+
+ d->attachmentView->setModel(d->parser.attachments());
+ d->attachmentView->setVisible(d->parser.attachments()->rowCount() > 0);
+
+ connect(d->attachmentView->selectionModel(), &QItemSelectionModel::selectionChanged, this, [this] {
+ d->selectionChanged();
+ });
+
+ connect(d->attachmentView, &QAbstractItemView::doubleClicked, this, [this](const QModelIndex &) {
+ // Since this is only emitted if a valid index is double clicked we can assume
+ // that the first click of the double click set the selection accordingly.
+ d->openSelectedAttachments();
+ });
+
+ setUpdatesEnabled(true);
+}
+
+void MessageViewer::print(QPainter *painter, int width)
+{
+ const auto oldSize = size();
+ resize(width - 30, oldSize.height());
+ d->scrollArea->setFrameShape(QFrame::NoFrame);
+ render(painter);
+ d->scrollArea->setFrameShape(QFrame::StyledPanel);
+ resize(oldSize);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: LGPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_widgets_export.h"
+
+#include <KMime/Message>
+
+#include <QSplitter>
+#include <QWidget>
+
+#include <memory>
+
+class QPainter;
+
+namespace MimeTreeParser
+{
+namespace Widgets
+{
+
+/// MessageViewer that displays the given KMime::Message::Ptr
+/// \author Carl Schwan <carl.schwan@gnupg.com>
+class MIMETREEPARSER_WIDGETS_EXPORT MessageViewer : public QSplitter
+{
+public:
+ explicit MessageViewer(QWidget *parent = nullptr);
+ ~MessageViewer() override;
+
+ [[nodiscard]] KMime::Message::Ptr message() const;
+ void setMessage(const KMime::Message::Ptr message);
+
+ /// Return the message subject
+ [[nodiscard]] QString subject() const;
+
+ void print(QPainter *painter, int width);
+
+private:
+ class Private;
+ std::unique_ptr<Private> d;
+};
+
+} // end namespace Widgets
+} // end namespace MimeTreeParser
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "messageviewerdialog.h"
+
+#include "messageviewer.h"
+#include <MimeTreeParserCore/CryptoHelper>
+#include <MimeTreeParserCore/FileOpener>
+
+#include <KLocalizedString>
+#include <KMessageBox>
+#include <KMessageWidget>
+
+#include <QDialogButtonBox>
+#include <QFileDialog>
+#include <QMenuBar>
+#include <QPainter>
+#include <QPrintDialog>
+#include <QPrintPreviewDialog>
+#include <QPrinter>
+#include <QPushButton>
+#include <QRegularExpression>
+#include <QSaveFile>
+#include <QStandardPaths>
+#include <QStyle>
+#include <QToolBar>
+#include <QVBoxLayout>
+
+using namespace MimeTreeParser::Widgets;
+
+namespace
+{
+
+inline QString changeExtension(const QString &fileName, const QString &extension)
+{
+ auto renamedFileName = fileName;
+ renamedFileName.replace(QRegularExpression(QStringLiteral("\\.(mbox|p7m|asc)$")), extension);
+
+ // In case the file name didn't contain any of the expected extension: mbox, p7m, asc and eml
+ // or doesn't contains an extension at all.
+ if (!renamedFileName.endsWith(extension)) {
+ renamedFileName += extension;
+ }
+
+ return renamedFileName;
+}
+
+#define SLASHES "/\\"
+
+inline QString changeFileName(const QString &fileName, const QString &subject)
+{
+ if (subject.isEmpty()) {
+ return fileName;
+ }
+
+ if (fileName.isEmpty()) {
+ return subject;
+ }
+
+ auto cleanedSubject = subject;
+
+ static const char notAllowedChars[] = ",^@={}[]~!?:&*\"|#%<>$\"'();`'/\\.";
+ static const char *notAllowedSubStrings[] = {"..", " "};
+
+ for (const char *c = notAllowedChars; *c; c++) {
+ cleanedSubject.replace(QLatin1Char(*c), QStringLiteral(" "));
+ }
+
+ const int notAllowedSubStringCount = sizeof(notAllowedSubStrings) / sizeof(const char *);
+ for (int s = 0; s < notAllowedSubStringCount; s++) {
+ const QLatin1StringView notAllowedSubString(notAllowedSubStrings[s]);
+ cleanedSubject.replace(notAllowedSubString, QStringLiteral(" "));
+ }
+
+ QStringList splitedFileName = fileName.split(QLatin1Char('/'));
+ splitedFileName[splitedFileName.count() - 1] = cleanedSubject;
+ return splitedFileName.join(QLatin1Char('/'));
+}
+}
+
+class MessageViewerDialog::Private
+{
+public:
+ Private(MessageViewerDialog *dialog)
+ : q(dialog)
+ {
+ }
+
+ MessageViewerDialog *const q;
+ int currentIndex = 0;
+ QList<KMime::Message::Ptr> messages;
+ QString fileName;
+ MimeTreeParser::Widgets::MessageViewer *messageViewer = nullptr;
+ QAction *nextAction = nullptr;
+ QAction *previousAction = nullptr;
+ QToolBar *toolBar = nullptr;
+
+ void setCurrentIndex(int currentIndex);
+ QMenuBar *createMenuBar(QWidget *parent);
+
+private:
+ void save(QWidget *parent);
+ void saveDecrypted(QWidget *parent);
+ void print(QWidget *parent);
+ void printPreview(QWidget *parent);
+ void printInternal(QPrinter *printer);
+};
+
+void MessageViewerDialog::Private::setCurrentIndex(int index)
+{
+ Q_ASSERT(index >= 0);
+ Q_ASSERT(index < messages.count());
+
+ currentIndex = index;
+ messageViewer->setMessage(messages[currentIndex]);
+ q->setWindowTitle(messageViewer->subject());
+
+ previousAction->setEnabled(currentIndex != 0);
+ nextAction->setEnabled(currentIndex != messages.count() - 1);
+}
+
+QMenuBar *MessageViewerDialog::Private::createMenuBar(QWidget *parent)
+{
+ const auto menuBar = new QMenuBar(parent);
+
+ // File menu
+ const auto fileMenu = menuBar->addMenu(i18nc("@action:inmenu", "&File"));
+
+ const auto saveAction = new QAction(QIcon::fromTheme(QStringLiteral("document-save")), i18nc("@action:inmenu", "&Save"));
+ QObject::connect(saveAction, &QAction::triggered, parent, [parent, this] {
+ save(parent);
+ });
+ fileMenu->addAction(saveAction);
+
+ const auto saveDecryptedAction = new QAction(QIcon::fromTheme(QStringLiteral("document-save")), i18nc("@action:inmenu", "Save Decrypted"));
+ QObject::connect(saveDecryptedAction, &QAction::triggered, parent, [parent, this] {
+ saveDecrypted(parent);
+ });
+ fileMenu->addAction(saveDecryptedAction);
+
+ const auto printPreviewAction = new QAction(QIcon::fromTheme(QStringLiteral("document-print-preview")), i18nc("@action:inmenu", "Print Preview"));
+ QObject::connect(printPreviewAction, &QAction::triggered, parent, [parent, this] {
+ printPreview(parent);
+ });
+ fileMenu->addAction(printPreviewAction);
+
+ const auto printAction = new QAction(QIcon::fromTheme(QStringLiteral("document-print")), i18nc("@action:inmenu", "&Print"));
+ QObject::connect(printAction, &QAction::triggered, parent, [parent, this] {
+ print(parent);
+ });
+ fileMenu->addAction(printAction);
+
+ // Navigation menu
+ const auto navigationMenu = menuBar->addMenu(i18nc("@action:inmenu", "&Navigation"));
+ previousAction = new QAction(QIcon::fromTheme(QStringLiteral("go-previous")), i18nc("@action:button Previous email", "Previous Message"), parent);
+ previousAction->setEnabled(false);
+ navigationMenu->addAction(previousAction);
+
+ nextAction = new QAction(QIcon::fromTheme(QStringLiteral("go-next")), i18nc("@action:button Next email", "Next Message"), parent);
+ nextAction->setEnabled(false);
+ navigationMenu->addAction(nextAction);
+
+ return menuBar;
+}
+
+void MessageViewerDialog::Private::save(QWidget *parent)
+{
+ QString extension;
+ QString alternatives;
+ auto message = messages[currentIndex];
+ bool wasEncrypted = false;
+ GpgME::Protocol protocol;
+ auto decryptedMessage = CryptoUtils::decryptMessage(message, wasEncrypted, protocol);
+ Q_UNUSED(decryptedMessage); // we save the message without modifying it
+
+ if (wasEncrypted) {
+ extension = QStringLiteral(".mime");
+ if (protocol == GpgME::OpenPGP) {
+ alternatives = i18nc("File dialog accepted files", "Email files (*.eml *.mbox *.mime)");
+ } else {
+ alternatives = i18nc("File dialog accepted files", "Encrypted S/MIME files (*.p7m)");
+ }
+ } else {
+ extension = QStringLiteral(".eml");
+ alternatives = i18nc("File dialog accepted files", "Email files (*.eml *.mbox *.mime)");
+ }
+
+ const QString location = QFileDialog::getSaveFileName(parent,
+ i18nc("@title:window", "Save File"),
+ changeExtension(changeFileName(fileName, messageViewer->subject()), extension),
+ alternatives);
+
+ QSaveFile file(location);
+ if (!file.open(QIODevice::WriteOnly)) {
+ KMessageBox::error(parent, i18n("File %1 could not be created.", location), i18nc("@title:window", "Error saving message"));
+ return;
+ }
+ file.write(messages[currentIndex]->encodedContent());
+ file.commit();
+}
+
+void MessageViewerDialog::Private::saveDecrypted(QWidget *parent)
+{
+ const QString location = QFileDialog::getSaveFileName(parent,
+ i18nc("@title:window", "Save Decrypted File"),
+ changeExtension(changeFileName(fileName, messageViewer->subject()), QStringLiteral(".eml")),
+ i18nc("File dialog accepted files", "Email files (*.eml *.mbox *.mime)"));
+
+ QSaveFile file(location);
+ if (!file.open(QIODevice::WriteOnly)) {
+ KMessageBox::error(parent, i18nc("Error message", "File %1 could not be created.", location), i18nc("@title:window", "Error saving message"));
+ return;
+ }
+ auto message = messages[currentIndex];
+ bool wasEncrypted = false;
+ GpgME::Protocol protocol;
+ auto decryptedMessage = CryptoUtils::decryptMessage(message, wasEncrypted, protocol);
+ if (!wasEncrypted) {
+ decryptedMessage = message;
+ }
+ file.write(decryptedMessage->encodedContent());
+
+ file.commit();
+}
+
+void MessageViewerDialog::Private::print(QWidget *parent)
+{
+ QPrinter printer;
+ QPrintDialog dialog(&printer, parent);
+ dialog.setWindowTitle(i18nc("@title:window", "Print"));
+ if (dialog.exec() != QDialog::Accepted)
+ return;
+
+ printInternal(&printer);
+}
+
+void MessageViewerDialog::Private::printPreview(QWidget *parent)
+{
+ auto dialog = new QPrintPreviewDialog(parent);
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->resize(800, 750);
+ dialog->setWindowTitle(i18nc("@title:window", "Print Preview"));
+ QObject::connect(dialog, &QPrintPreviewDialog::paintRequested, parent, [this](QPrinter *printer) {
+ printInternal(printer);
+ });
+ dialog->open();
+}
+
+void MessageViewerDialog::Private::printInternal(QPrinter *printer)
+{
+ QPainter painter;
+ painter.begin(printer);
+ const auto pageLayout = printer->pageLayout();
+ const auto pageRect = pageLayout.paintRectPixels(printer->resolution());
+ const double xscale = pageRect.width() / double(messageViewer->width());
+ const double yscale = pageRect.height() / double(messageViewer->height());
+ const double scale = qMin(qMin(xscale, yscale), 1.);
+ painter.translate(pageRect.x(), pageRect.y());
+ painter.scale(scale, scale);
+ messageViewer->print(&painter, pageRect.width());
+}
+
+MessageViewerDialog::MessageViewerDialog(const QList<KMime::Message::Ptr> &messages, QWidget *parent)
+ : QDialog(parent)
+ , d(std::make_unique<Private>(this))
+{
+ d->messages += messages;
+ initGUI();
+}
+
+MessageViewerDialog::MessageViewerDialog(const QString &fileName, QWidget *parent)
+ : QDialog(parent)
+ , d(std::make_unique<Private>(this))
+{
+ d->fileName = fileName;
+ d->messages += MimeTreeParser::Core::FileOpener::openFile(fileName);
+ initGUI();
+}
+
+void MessageViewerDialog::initGUI()
+{
+ const auto mainLayout = new QVBoxLayout(this);
+ mainLayout->setContentsMargins({});
+ mainLayout->setSpacing(0);
+
+ const auto layout = new QVBoxLayout;
+
+ const auto menuBar = d->createMenuBar(this);
+ mainLayout->setMenuBar(menuBar);
+
+ if (d->messages.isEmpty()) {
+ auto errorMessage = new KMessageWidget(this);
+ errorMessage->setMessageType(KMessageWidget::Error);
+ errorMessage->setText(i18nc("@info", "Unable to read file"));
+ layout->addWidget(errorMessage);
+ return;
+ }
+
+ const bool multipleMessages = d->messages.length() > 1;
+ d->toolBar = new QToolBar(this);
+
+ if (multipleMessages) {
+#ifdef Q_OS_UNIX
+ d->toolBar->setToolButtonStyle(Qt::ToolButtonFollowStyle);
+#else
+ // on other platforms the default is IconOnly which is bad for
+ // accessibility and can't be changed by the user.
+ d->toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+#endif
+
+ d->toolBar->addAction(d->previousAction);
+ connect(d->previousAction, &QAction::triggered, this, [this] {
+ d->setCurrentIndex(d->currentIndex - 1);
+ });
+
+ const auto spacer = new QWidget(this);
+ spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ d->toolBar->addWidget(spacer);
+
+ d->toolBar->addAction(d->nextAction);
+ connect(d->nextAction, &QAction::triggered, this, [this] {
+ d->setCurrentIndex(d->currentIndex + 1);
+ });
+ d->nextAction->setEnabled(true);
+
+ mainLayout->addWidget(d->toolBar);
+ } else {
+ mainLayout->addWidget(d->toolBar);
+ d->toolBar->hide();
+ }
+
+ mainLayout->addLayout(layout);
+
+ d->messageViewer = new MimeTreeParser::Widgets::MessageViewer(this);
+ d->messageViewer->setMessage(d->messages[0]);
+ setWindowTitle(d->messageViewer->subject());
+ layout->addWidget(d->messageViewer);
+
+ auto buttonBox = new QDialogButtonBox(this);
+ buttonBox->setContentsMargins(style()->pixelMetric(QStyle::PM_LayoutLeftMargin, nullptr, this),
+ style()->pixelMetric(QStyle::PM_LayoutTopMargin, nullptr, this),
+ style()->pixelMetric(QStyle::PM_LayoutRightMargin, nullptr, this),
+ style()->pixelMetric(QStyle::PM_LayoutBottomMargin, nullptr, this));
+ auto closeButton = buttonBox->addButton(QDialogButtonBox::Close);
+ connect(closeButton, &QPushButton::pressed, this, &QDialog::accept);
+ layout->addWidget(buttonBox);
+
+ setMinimumSize(300, 300);
+ resize(600, 600);
+}
+
+MessageViewerDialog::~MessageViewerDialog() = default;
+
+QToolBar *MessageViewerDialog::toolBar() const
+{
+ return d->toolBar;
+}
+
+QList<KMime::Message::Ptr> MessageViewerDialog::messages() const
+{
+ return d->messages;
+}
+
+#include "moc_messageviewerdialog.cpp"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 g10 Code GmbH
+// SPDX-FileContributor: Carl Schwan <carl.schwan@gnupg.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "mimetreeparser_widgets_export.h"
+
+#include <KMime/Message>
+#include <QDialog>
+
+#include <memory>
+
+class QToolBar;
+
+namespace MimeTreeParser
+{
+namespace Widgets
+{
+
+/// MessageViewerDialog that displays the given email stored in the
+/// file.
+///
+/// \author Carl Schwan <carl.schwan@gnupg.com>
+class MIMETREEPARSER_WIDGETS_EXPORT MessageViewerDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ MessageViewerDialog(const QList<KMime::Message::Ptr> &messages, QWidget *parent = nullptr);
+ MessageViewerDialog(const QString &fileName, QWidget *parent = nullptr);
+ ~MessageViewerDialog() override;
+
+ [[nodiscard]] QToolBar *toolBar() const;
+
+ [[nodiscard]] QList<KMime::Message::Ptr> messages() const;
+
+private:
+ MIMETREEPARSER_WIDGETS_NO_EXPORT void initGUI();
+
+ class Private;
+ std::unique_ptr<Private> const d;
+};
+
+} // end namespace Widgets
+} // end namespace MimeTreeParser