Add revision: v1.16.2

1.16 1.16.2
Governikus 2019-05-22 10:08:38 +02:00
parent b4326788d7
commit 9484181f86
1304 changed files with 5511 additions and 2158 deletions

View File

@ -1,16 +1,25 @@
language: shell
sudo: required
cache:
ccache: true
directories:
- $HOME/.ccache
env:
matrix:
- CHECK=format
- CHECK=docs
- CHECK=build TYPE=debug COMPILER=g++
- CHECK=build TYPE=release COMPILER=g++
- CHECK=build TYPE=debug COMPILER=clang++
- CHECK=build TYPE=release COMPILER=clang++
install:
- sudo resources/travis/setup.sh $CHECK
- sudo -E resources/travis/setup.sh
script:
- sudo resources/travis/build.sh $CHECK
- sudo -E resources/travis/build.sh
notifications:
email: false

View File

@ -37,7 +37,7 @@ ELSE()
ENDIF()
PROJECT(AusweisApp2 VERSION 1.16.1 LANGUAGES ${LANGUAGES})
PROJECT(AusweisApp2 VERSION 1.16.2 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
@ -110,7 +110,7 @@ SET(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
SET(TEST_DIR ${PROJECT_SOURCE_DIR}/test)
SET(RESOURCES_DIR ${PROJECT_SOURCE_DIR}/resources)
SET(PACKAGING_DIR ${RESOURCES_DIR}/packaging)
SET(COPYRIGHT_TEXT "&#9400\; 2014-2018 ${VENDOR}")
SET(COPYRIGHT_TEXT "&#9400\; 2014-2019 ${VENDOR}")
STRING(REPLACE " \& " " \& " COPYRIGHT_TEXT ${COPYRIGHT_TEXT})
INCLUDE(Tools)

View File

@ -24,7 +24,7 @@ Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusam
(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird.
§ 5 Pflege und Support
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 1805 348 743. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein zusätzlicher Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein zusätzlicher Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden.
(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus grundsätzlich nicht.

View File

@ -5,27 +5,27 @@ environment:
- PlatformToolset: mingw-w64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
QTPath: C:\Qt\5.11\mingw53_32
OPENSSLPath: C:\OpenSSL-v11-Win32
OPENSSLPath: C:\OpenSSL-v111-Win32
- PlatformToolset: v140
platform: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
QTPath: C:\Qt\5.11\msvc2015_64
OPENSSLPath: C:\OpenSSL-v11-Win64
OPENSSLPath: C:\OpenSSL-v111-Win64
ARCHI: amd64
- PlatformToolset: v140
platform: Win32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
QTPath: C:\Qt\5.11\msvc2015
OPENSSLPath: C:\OpenSSL-v11-Win32
OPENSSLPath: C:\OpenSSL-v111-Win32
ARCHI: x86
- PlatformToolset: v141
platform: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
QTPath: C:\Qt\5.11\msvc2017_64
OPENSSLPath: C:\OpenSSL-v11-Win64
OPENSSLPath: C:\OpenSSL-v111-Win64
ARCHI: amd64
configuration:
@ -58,7 +58,7 @@ before_build:
build_script:
- cd "%APPVEYOR_BUILD_FOLDER%"
- set OPENSSL_ROOT=%OPENSSLPath%
- set PATH=%QTPATH%;%QTPATH%/bin;%OPENSSLPath%;%PATH%
- set PATH=%PATH%;%QTPATH%;%QTPATH%/bin;%OPENSSLPath%
- echo %PATH%
- echo %OPENSSL_ROOT%
- mkdir _build
@ -76,7 +76,7 @@ build_script:
test_script:
- cd "%APPVEYOR_BUILD_FOLDER%"/_build
- set PATH=%QTPATH%;%QTPATH%/bin;%PATH%
- set PATH=%PATH%;%QTPATH%;%QTPATH%/bin
- echo %PATH%
- ctest --output-on-failure -C "%CONFIGURATION%"

View File

@ -10,7 +10,7 @@ IF(CMAKE_VERSION VERSION_LESS "3.12")
ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII)
ELSE()
ADD_COMPILE_DEFINITIONS($<$<CONFIG:Debug>:QT_RESTRICTED_CAST_FROM_ASCII>)
ADD_COMPILE_DEFINITIONS($<$<CONFIG:Release>:QT_NO_CAST_FROM_ASCII>)
ADD_COMPILE_DEFINITIONS($<$<NOT:$<CONFIG:Debug>>:QT_NO_CAST_FROM_ASCII>)
ENDIF()
IF(QT_VENDOR STREQUAL "Governikus")

View File

@ -1,6 +1,6 @@
SET(REMOTE_CONFIG_URL_PROD https://appl.governikus-asp.de/ausweisapp2)
IF(JENKINS_APPCAST)
SET(REMOTE_CONFIG_URL https://vtf-aajenkins.tf.bos-test.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
SET(REMOTE_CONFIG_URL https://ausweisapp-ci.govkg.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
ELSE()
SET(REMOTE_CONFIG_URL ${REMOTE_CONFIG_URL_PROD} CACHE STRING "Remote config download URL" FORCE)
ENDIF()

View File

@ -163,8 +163,13 @@ ELSEIF(APPLE AND NOT IOS)
FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslCryptoName}")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslSslName}")
IF(CMAKE_VERSION VERSION_LESS "3.13")
SET(OPENSSL_LIB_LOCATION "/Contents/MacOS")
ELSE()
SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks")
ENDIF()
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslCryptoName}")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslSslName}")
# set it to parent scope to be able to access it from Packaging.cmake
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)

View File

@ -38,6 +38,7 @@ SET(CPACK_PACKAGE_CONTACT "info@governikus.com")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Governikus AusweisApp2")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.rst")
SET(CPACK_PACKAGE_FILE_NAME ${FILENAME})
SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME})
IF(VENDOR_GOVERNIKUS)
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.officially.txt")
@ -90,6 +91,8 @@ IF(WIN32)
SET(CPACK_WIX_UI_DIALOG ${RESOURCES_DIR}/images/wix_dialog.jpg)
SET(CPACK_WIX_EXTENSIONS WixUtilExtension)
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -loc ${PACKAGING_DIR}/win/WIX.Texts.de-DE.wxl -loc ${PACKAGING_DIR}/win/WIX.Texts.en-US.wxl)
# suppress warning LGHT1076/ICE61 caused by AllowSameVersionUpgrades
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -sw1076 ${CPACK_WIX_LIGHT_EXTRA_FLAGS})
IF(SIGNTOOL_CMD)
MESSAGE(STATUS "MSI can be signed with 'make package.sign'")
@ -185,9 +188,10 @@ ELSEIF(ANDROID)
MESSAGE(STATUS "Prepare ${ANDROID_FILE_EXT} file generation")
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE" OR ${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL")
SET(DEPLOY_CMD_SIGN --release)
IF(ANDROID_BUILD_AAR)
SET(ANDROID_FILE dist-release.aar)
SET(DEPLOY_CMD_SIGN --release)
ELSEIF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
@ -197,7 +201,13 @@ ELSEIF(ANDROID)
SET(ANDROID_FILE QtApp-release-signed.apk)
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
IF(ANDROID_USE_GRADLE)
SET(ANDROID_FILE dist-release-unsigned.apk)
ELSE()
SET(ANDROID_FILE QtApp-release-unsigned.apk)
ENDIF()
MESSAGE(WARNING "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
ENDIF()
ELSE()

View File

@ -140,7 +140,7 @@ IF(UNCRUSTIFY)
EXECUTE_PROCESS(COMMAND ${UNCRUSTIFY} --version OUTPUT_VARIABLE UNCRUSTIFY_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
STRING(REPLACE "uncrustify " "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
SET(UNCRUSTIFY_NEEDED_VERSION "0.67")
SET(UNCRUSTIFY_NEEDED_VERSION "0.68")
IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}")
MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}")
ELSE()

View File

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.18.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0" xml:space="preserve"/>
<node id="n0">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="249.93318675648084" width="150.73691016175417" x="379.82322525840146" y="-15.0"/>
<y:Fill color="#E0E0E0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.609375" x="9.991977284848872" xml:space="preserve" y="146.38688006175698">Internet<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4337124711251771" nodeRatioY="0.2841945985857549" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="402.28247680692664" width="162.91206076630084" x="130.0970161695911" y="-19.152021620717733"/>
<y:Fill color="#E0E0E0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="79.45603038315042" y="199.14123840346332">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="78.396484375" x="9.113003096740954" xml:space="preserve" y="308.695703503948">Lokales Netz<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4440618266451515" nodeRatioY="0.4622397449460143" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="283.8426393358113" width="150.73691016175417" x="138.89277718906638" y="-15.0"/>
<y:Fill color="#D0D0D0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.181640625" x="8.098407213028707" xml:space="preserve" y="166.02446489063328">Lokaler Rechner<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.44627455741040206" nodeRatioY="0.4272958641151755" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="97.8883879466967"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="82.333984375" x="13.8330078125" xml:space="preserve" y="6.93359375">AusweisApp2<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="97.8883879466967"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.939453125" x="22.0302734375" xml:space="preserve" y="6.93359375">eID-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="-7.134920941481575"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="89.060546875" x="10.4697265625" xml:space="preserve" y="6.93359375">Dienstanbieter<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="-7.1349209414815675"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.142578125" x="29.9287109375" xml:space="preserve" y="6.93359375">Browser<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n7">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="110.0" x="409.06939432176046" y="199.59487324412942"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.029296875" x="10.9853515625" xml:space="preserve" y="5.93359375">Update-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n8">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="326.6678526626905"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="104.494140625" x="2.7529296875" xml:space="preserve" y="6.93359375">Mobiles Endgerät<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n9">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="101.0" x="171.45265436079177" y="202.91169683487496"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.7265625" x="1.63671875" xml:space="preserve" y="6.93359375">Drittanwendung<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n6" target="n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n5" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n6" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-34.70611583776903" xml:space="preserve" y="28.92603874253608">eID1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.34674322102171" distanceToCenter="true" position="right" ratio="0.5329867452764283" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n3" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="51.6604446461962" xml:space="preserve" y="-21.17213706476275">eID3<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.10572917405711" distanceToCenter="true" position="left" ratio="0.5105195151628484" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n3" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="54.54734563920826" sy="14.111612053303304" tx="26.398238238132535" ty="-16.02468140151575">
<y:Point x="276.5" y="269.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.30859375" x="-59.09839513686407" xml:space="preserve" y="149.37254155441815">SaK1,
SaK2 <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="1.8153536324476993" distanceToCenter="false" position="right" ratio="0.7870346060615276" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n3" target="n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="54.971035876728166" sy="15.038770784339903" tx="-53.5611005145696" ty="-15.000980657566373"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="22.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.220703125" x="46.57289611424528" xml:space="preserve" y="33.28619210241317">Update<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.307275195559956" distanceToCenter="true" position="right" ratio="0.6189315207731947" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n5" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="27.54734563920826" ty="-1.888387946696696"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="337.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-101.58040528438903" xml:space="preserve" y="9.329639509720586">eID2<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.099869002821848" distanceToCenter="true" position="right" ratio="0.3864086416472374" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n3" target="n9">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="53.359375" x="-55.679685116747294" xml:space="preserve" y="28.445254182778">eID-SDK<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="28.999999999999986" distanceToCenter="true" position="right" ratio="0.5222764299898304" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -0,0 +1,486 @@
%PDF-1.4
%âãÏÓ
1 0 obj
<<
/Title ()
/Author ()
/Subject ()
/Keywords ()
/Creator (yExport 1.5)
/Producer (org.freehep.graphicsio.pdf.YPDFGraphics2D 1.5)
/CreationDate (D:20190314162821+01'00')
/ModDate (D:20190314162821+01'00')
/Trapped /False
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 3 0 R
/ViewerPreferences 4 0 R
/OpenAction [5 0 R /Fit]
>>
endobj
4 0 obj
<<
/FitWindow true
/CenterWindow false
>>
endobj
5 0 obj
<<
/Parent 3 0 R
/Type /Page
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 7 0 R
/Filter [/ASCII85Decode /FlateDecode]
>>
stream
Gb"07bDmmlYpD<3YG`ONb288R7KN^+E7KR^$OLorOO`PFrBDE3CRLU2hHAq,"!0?'JK13>8rk"O%s'OJ
H[5T]kC5_Fb<LKu0<iuMrm/p:?U+Pga6SAmI^FuF*Ig)XT7$T^IDsg!^]+#S5Q9D_ci<RNIf9#Ura5Ka
J,OlR?>9H;huEBDJ,_b5[ibEiJ,emX:QPPCJ)[rokN73ZmrS(aGFG!cCPMjcfDj^FJ'#7]eJ8,GduOg[
09>7_d,4gC'<69T`Er9(7rRG`LG/Zph-8q0YJ9&nK>7E\0E9LepeQ83D&!#k&q$dk>5e9ncPc4js*b/W
kPeTF]JGkHVN3q#%q#<kE_'rsKC'KDq#92g$2u>MI-XX8l1G/PLHj@b\$qlYQMi^<s$M/3c>W^O2hq/`
Eh;=SlT^d7hu+Q_omp(ar7@M)We#PeqY,QUr*J3))qNnN;#cE%nW*YC./tEHrVI,.mIPfPQWc")lefJI
<(lgmpRh8#]"6dtrJtjbo^dPsFP$@Ts2U2sO`RYf`?-<>d$aBkgTi2OlUPf7IDbb@VIa-a+)`hq5>#4K
an[[3RE9Zc5$G)Ki:Tr[:T(n8RXX[c>]N"Vm5]Z.oX['Zr,H]ErR&28>0AI0DU-arEmQ3\j4X>bpte1*
7-hu)?Z"sJ6\g0B>kBRdN9\'$N:[SJO-[cfY<sgQ%-Z6e#PC74X4GH[Fe>hBch5N&qT/Pq!_0QDO0m4i
mP>Z%3r8bo3n22hN)q9tN^)71SNa.'cEi6I.rf6FO,^ou[a%JbN%$]UZ%dY?Y6<?6f<I0FmGKbGT?G8M
Ho@l4FJ^S8R3[7tGi?CXZV`r%g>?kN\39kP#A/SYX+-?iS#?"eb_tr]j7L!4_tSM(rZ-UkC45"rRW4)0
%tSVk[EdFE7g2$`IH'("Vap&4>RK]-q4P,U.k>a*9,pnd5'l>gO1k(*W@;HZASjWWC6^UJLXIn[H^rV9
VgGkYCAqB,a.1tX5H'fqIpLJm=Yno_=Oj,CKA%KG%'%P<jWV7bb<naaj38FnTe2@7(24UH,eC=R"[4bD
qEeslR-.<cd4/8k"NGk]h1l`hZRQDgo^jPCmF8e!<Z-omIl$df[&PYJUQ2ZX%N:c41iqQGGtAaOg%ot"
Zdc5N8fcI0l*%$$\2I`!Jb.ZBaV3:&Z(JQd]uiboJ!T*dM8V!a5&ST=[?clFM.T[>17p_!O/n$h:!D+g
V^G`_[$'H&a4S"\lSg;:`9*H8a!=/#i_8?qL=,2;rKj_F+l+,QY3#4Y_m);GU$+AKiS_0M@iHB%/a)$_
)<7Y!b]mKDHZ6<6;_*%:4SrqQ+;!Er?lXP0G^Yh+1VRp"d)ZskH+pic*^'epAE`r7En>U&l/BQ64/gU(
DnPhna7J598!N31P[VE`"%R#kGeN.)Ob:J_D+<faa'O/;7j$s&h\j7u@`=9Ge4XulFO9=?8t_rKk#GXf
*E:d4$"PG0OPq&,Gurku)\*0bfH_#).5$1E_lS/1d(uc*QTte8gg.o><-H"hk`!6Z's61'-@p!i638$R
X@+Q\V74Xsg=]sd3DXFG/*,esl_$#aj_=D7rT0C=HujDmBbb^A/l+R=Y2VS2+KUFi1e5j?$l`![0ACT?
G0h/no!D#OlTD:9*)Ga$eT\"_[*sNlC#UqsUH:M4CX>60j_8@6&uhKc%C<FAo/&hNdt":MfZKi"1>3+R
[5^rD]ui.@f'-+;mIIW:pZU"nWBD+po<l.l%AV80o!J#d;*HX/1MiQfitliJ9W&tRn&s2*]?]'(p%16t
s5iQjnE"`,c"gS/V&^GEJeej%r=.#J2:pAp^=jI?E6[L;.P;4nm`77%_kANdb5M3tK2^Foml3.je$F5K
.PqsZp\D]I>Q0BGp[nAF%aDtt1m`hq*Nkm%3O@8#k&Trbo?k.p6,k_tHrol3RYt\5\bN;kP%P@;C+ZfN
f<tG86)`]I_%XdJ6Mpq`U4<&1c8#@7G;DVi%UE`AF:-ED[#Q,Uq!pY>ANTI@3\>jONpdMX_#s_H*oX'l
ncAX*+7%>/>;4Fp5#D-oHMu--rpVk$qF;(o0p%!Is12-71m%0)s$#r8n(!u<@K!kCNN\T(iP.Ous1&C6
g``VVU3(MSp1GKBY@@%Fn]Lt5aR48"=9l?!NpEO.oGp/VTga`o3/4$dWqR@!TYaO0;u^"YFC7eEnc2of
+tcBo*r4QN13-\$M<F*8THkPDJN%\1NdhCsfc?dsmi<*,>6k)t,FT@G&tqfP%EOK)GU1$n"qXD*`99+E
!<)I^7s_oD#U?>_r9?<'S]PE'E7,N]JAF2cB5q#NP4M<1IZE;i8!@h=QsE4ncG`CW*59_eVp5"XcMG@=
Uf,hg[ed6Dg5MfjQ1.Z-kN5F\`]WWs?fK9@E>J(2D`o!Heb$C;YX5TUNid*[Qh0q7V8""$Nq>W&L5kuB
GVG]S)hsMWGc3VmWqfKeEW!riUXRoH9aBL;[b>^\$*$,nZo#tFO7s_Rpu4s.kK$P37[Q#:Smt>F;[VhN
<ZP%#EZEuKNhp`CDb&*m$6E0X).n-3V$6!47'AZ2G0SPiCusX=F?b`i8u_#WihHc$:#M\<'q&]Jpr]h9
r`1++\WGf`##>cMJjF5']l<&$4EM5+Ga@',r,qOtZ[+>7%6,oVBTelXcC7N?'Fc'f;iT?a'0;S(ND=Z#
N\`?/"+1Sjp7:n31Y&hg2r<>7bgYNm:cZ3Zf:r>rf[ZmT[4hOM/E9$Ka4^X$Nin5bY.](a"V4er.u%lA
I$Pc;S;aDP3A*EoiP:tZN&ICV,6AF+]1.4UDOI*c:Vfo4CRr#%7h0+Y':,9JTag9<lI!Uj\/q?.Tas:L
k\Hc8]$uL&aed2t])<<hA+af6(c4Vu:*3m11`1b0!iI?7b'&/5TkEeX;2B69<T.1O.[u\nZ^ePZ*@@,j
!RKoB#l6ZUm4ubY9mRg8>@E;>=t:+64W>+^R;um`-1E<3obK^=Gbj\PJ#sI_Pc3Um04Y$H0qjX5-Sc[3
k9qGDbhkL2RNp,:;TE5eJoQ#mhKBCF#F/0GQogli75FpeT!uT4Yi?:B%Q\l!%`+D73BmXJNQVgJL>iaq
m"aNjHCA&[#X2b?j`(RG>h:q<T@lme%`*eD`Z^_)lbE`7*e/D?XtV'DHO.WR5#4BG++uG6*J+a>+di%5
a?+h0iT>^Clu<=!gjF:hXcORh*eN^RW:O'2mcB43?`V3jpj?eOHO)g]A#I9hfWZH/@K,P3bT3VYETiZb
Vr-&pRGbi-q9Gms-`.d7+ZRpZk/T.m(aO[X#Q:<&Bs6P_h[]WC0-/T$GRFW`hR)=AM!stt`ABQuF^(oi
k.-=BMBDL3cQ6!6lp2k3+F;=>3WD(]+#5-Jg^fllE!gQnQU:lbl6EjZR2RlCA/RC>;?)ii$L"mS'lEH6
m-*rVe]\RL>k*At-7/[PrXOlL-V9D[on<\tnNbqA_n]>hQod#5:C2W@R%Xc%1dJ/so-iH*hr&ihAtWS+
:bt/d;j*gSfT]ka(<k/^%M(VAW!5!ghehCG8G"Bcf%":==>4j+M[l(e)@s&tbmrHLCGf33Yg*nDCii9%
N/,`^25^%<HlWH`#,dEm=7H51ShQs%Pbmo$H(EJYL!S%1ZO44c7F2/4/912\j6EZmI>*gkHC/BA01i]C
g=n2-rae<%L\0Y&/+I5hEE;=l/H4Y('21E<aogPp8[li(%US!83U-]ZRYD?&JH?nfkmT`8'6b8]+&rdV
nbuD(jYW]a^i3e2,Bc%NcU,k<]Y@t,b2rR,(V-N\qtm*4e9J_QkP^-ppZ%UR47>CIc>e.0q.eU+H2j!%
d(&t'957ei5G1@K4sS>5IH:>/$X,1O+#$9!kP`;Xg#W*dK(fAjJ?)g9]qC5RJY?Zomm"L;UW'b?!7B??
q[`CA#?oGa9)et]pU.TF+/:Lfo)=1\P:uA`C`FGTVm2WE*OCsljo#96YhQ11MZ<8/48eYq;Z?KtgbMV4
B9%*CKE60'nu4<n*aH\?EGucWG*E$WOW-OpLV[sM*P/[t36k7lr&YAjk^Xhj?N[7cqu!=?ooAM8o_^c\
"/o]I5S'<c\YM9-Aud@@2HFJlC0`:#!>OFVeNu<jA)FilX_E4HFEC@HiGO'L)m%Ua+cFHt*#C.S66$nf
G)U2$;#H>l8;,4Cn+])=`Mqnrh;-M_q!t-Y0:HQq5?mXM++ErCJ#AS$/Dtu1nA#`]QMX/4fH1H$]$W.O
?bGD`/LKdfO"ss,cO\YMr`G6<hL^<]pOV$?g?Ws3o7t'qX`UB)H,Jr4R/Gk?SO9f99Q^3aSa*2*I%U90
JNnX&"Sk*[^UKm+Q1[6:G@IlW(lA3d-JF$gma'[^'`H3Cq_&WM^J)$71=?*E7/JVNmCu?%s"`"$b=)7-
9+u/g;UR5=2ngY<L;)](1i.k#DAHr2OQ+mJ^pqB/d]gPu&oi`PA#L8l$1f@OTuC=VNn@!l-YrJ/9>%gU
U&,t6;oE":(H2O)4WN9f0<P6dHYN6mn[D*(G=I7h8PN+^M.*eLgs<F&q1)$A#G&UNeAN*uU&#uL4/Ce[
((om"-_`iOL,/td:0GmE0@B&N.:_HV:=!iF3Bb"_ZdlZI?C:E>S([9"M[lk3CXkI:H@Nhn=bnG'5$["^
hN60+bY]TcbO?B^/WcZr<C7Eh0Mn1r6`12,mni!WkMU<ZDAGF0:]IS+)BeY)hs4^$9JBM%!A]f6NHb&:
gtE:af$BBE@Hcof:TWJj#Y3PYcIS'CQ5$.rno3rc_>n9u%$8>DJ;!'J_Z1",q1H!o]Q.u"dj)el)XjEJ
ZT\eZ7kkpufa\o`3#g(no>0)iDEBhI)=-&XR@SDe5n3V*fhS0`=V5oOi,"r]\'DT\+*W$M2AlEo`11<p
UiFi`BkqiO>G#`A#091GlSUp7?SeF$!dPSoLYA#5[LQRrU<M$J<rA;fhk:&`;1;:CjPc"Cn7_IoR!pgK
r9.3HJQZ!J3[\\]K"'0J%P]t9[,^[Zi%<X+?]n@bHgAQ]19d[eU2X5-7lN=H7aLbS-&5sL]lfb]1F#U!
#!<g(cae#;:ma5#ASa:d.L$g&-JgR=O,.g?W:`EJR$VH$B=oqn/rZo&(T<_]d:QJ[a5jD$@C@nVrp71<
(o!]`M`JdC]Q:e'pX=eP]<f8B?g@fXQjO-14Yl1AhL#+2QD767%K+g^O6#Q[/H]W,ZF#n:PHs4@@B=aB
ipGsYG]@'&cjM:9la.XW@)AUk9j1K0iK0$QE\_EdZnRE[AZk3t1pFu7+$<W+p&tDm'Lif96(ND=U@8\"
1eBJ1Is*mY0acf77,]'pc9CQ0L6(;L_Ol94Vdu1F11V5U5B.+!2[]TCcMRr;i?)$?`7`I'N@1Ii%k`h/
=)4\ZfCQd7D`81X]B-l*d@B9]f/u3UDn:4>dCf"0mn.i[]2mpm@u?hc&e?q+&dqI8^amkFD(DmHO_H>N
T`%8B`'GLK>7![%&r'mqkKUE"D`Ce7YcS%S2'X2P@8jSG&dru;OUlHYI,s(R%G;fu&/.1sXqT-KYnEM7
]+W<IVL9a+qY/'dTE-j\1g]dA'6[3afb(-K_fI3Xg?I0HBtSD>HfRPq6h<2++]dWlQo'!Idb(cqj4-gU
;Au2%VS')h?9"iO5/c\_8`B/#rCnSKo6GN!Sj_n4D;(g7N>J*>m7QCB=k-aqA!UkNBl#2n0lVD/hdtU3
Jbt=PLssCjZa`c&7dX7q06"G:#L*tY&AD1H)WOJ#?>4eYJ)k'e3B!:O^9q^G/5AEQHfRO6/6t]HSc3O,
ji_l;jc/<pK9mL:*P2\BJaYRA0OgSgm,20Kce';p%CV_;K/[>cI^C`!*dQ$jBJ[lKc5DAsS8n&ZY2_ME
D][m2g5YD4kDW\\^[ft@3sel#rJu#SiVu3!efV6ps&fi65O:Qp+qq9BONC\5iB6Xsj':e/q=<_+EBK:B
H#Xf$,8D="oY1:%fCaISBEiNS_1t]gpt6Y>_-gBhs'80Mo60s\i#0Bb%Y`C*$q:R6#J1RtE<pX!@Tid-
4E*SV*uJhRn;t!>Qnc7X<??B4PQ?U'Om`V=pZR0<lp:UPCl%I4-Xn#P,1uJtZ/b0rKRD+``UdpuhMS7d
K8+iS*93$?/q.H5(&SGH/Jel+`Uk]9D"m9peNCV,e+GYY6TrfW]9E*Hp"eVU*r9nU/%n,F,<-kn42S=:
2=bVOr$N`Pk\&,od2t<>2&q$t)>H-M<hcDVJ*Aq.Q]s[7FUXLOV9_LJ_LtH$&'"t9U//Xt5!:Lq/Q[pQ
NUO78k`anposQV]"DD>?U,MkhJ=EZ>B.LV"R+Zf5RIt"7)Etg'Dpk(0X#c.WNq?E02^39u)u&/+%r(4J
mA823+X?EL_u6p&>rZV3\:Y?U`/uF@QL$]X<ai6JShCr1Mu#7NWW1ahelq^2N/dr/QcO[;ZW6Tr['Kj%
)A!_P,.O1#a&@EAqX/N;F4"oAdOu3HpdE$?@sBr7oAD_GbqV%JbhBFH-80ot_tjN)%dGEL6rc%n[Bc'F
j<3P=VlK4$,/[HOT<R5D'+KG7g(%%s'.".cMJ,+44UlCi\hu.W?!d7-]`e]HoZO;\iKVR(pXBf3g+e/V
<afC@J<qZIg:+Si@g$eKa7H[m5MKVZIXQZ7It3_2hXPkUq8\o9AGmAVDLG!=\,W:D6n!(PI$Xr#&bCP_
RdYV<Cp\IlL\<<L;Qu:"(Xp,"QZ(8H71BI"eQT_0;?'I`!lp:b!-6a46dpD([:+@AZSCL<s6'Q46.dEM
rT1@RT,\e.ZaVRS2Q6=60b;D"!9jQ]+#J'.ll7iNak-]U]'[1hD&'X\idp?^*8Db];k'3"547E$I5Kg%
etlY9=[L0\$MG7_,JKuPeq^A6&,^Q)"]-ocMD6`4)(-FJXes2F[W_%KqrRE2r,R'\hQMj.1/$#^hsmO*
s$ae>gc)a?i4jNWH<tM,r_CQc'JR&/\(E0dP"QHa1O0_fjcr%^GuZ7J>U#HlCF"1*VBh#+:/S(Q(#4l;
+g9%Q>`l[NZZV#8EocfV@`U(4Bnj8]L`2)mX"l)\>[F-(L*9VjF&(I2aQ1kR_eTXhjU-959W)iT"W-k@
Gua;3.dBr'09$^XhJM(!j;"2nq&uq<e=o1gQ"-.^"im$m=*SdW.*d<ka=GKRQ"FuiViXsr8R>\]]uZ?Q
+g253k`o4#iUN"2kYhq9<MX/o]Rl'Q53*G`fI>l]fe*LPOY.ROXQ_^qlM?QiAN]$RYrsX`<Mm6gih-*6
Q#O<V&N^MrZrbhIn2sN^EDC*.JH?'c8<@2sWVd2'+2?_T$d?1b=5q`*]b.c;B>lJmEO#/SB1'C*Uq/#>
&_4`(3Q&[)i#8]3_,\'j6&(,m"1tLCm9S+M/)k;=Z-49!Xj(u:80p[d)c^m%2GOlF,+^r<8@1Y>^7h^9
7:6`I:sp6HYT1<b9>_Q7[\hVE3^On/e[^ge;'$>dDSj$BbXKo4d>.A@U-E-o1ln/0Ips884hn1t>;sf+
B]]#0H[/iGhR:u^l@qb-U,,*a7c\o6E^W:\E=RFP+sN"[YM3e1=+(qur3`83PZOdog+[ng_5QT=#Al$6
0r'^K)YI7\StrVND=m1AKrl5Of4h!Yh70fmBAs3NkXB,Dd=rmD%EG1Pr3?NDoV1k8D=m1-<m\kNiEiec
*RXa[g=VIm01WT,D:gthC'm1>_k%.f=FL`+D/;FZEV6eV-.@4/0BFm3,A=uWdtVA[#(ARAomK4o)dAKU
BOcl_lcY):D045FST?fGobVE$S+b,-!LDS2c\OSABS`!6djhuomF4Dk>LOQBj_56.#)VRmIr*M!@!f>>
j)DD#_R$J@^-eoPp[KV-'ga0K+0P''&g(B@D=-?\M1N=Q8aG;95(<])9g&-aZVP;9a5_eq?VW8gR[PJo
$&J]>\gR["Y=gg&1s*a6qNf]@^"D&BAAA_OeTB";4HOUf4^2e'A:)mPXj&P6VJ5KnBdCq[Tg&GIOL`EX
k_?SZGLQm=9=&6!>k@EO7Vsufhp+`AgH,1$XctER`GmJ\4[8J'j08I7oC)IH@\s"oqtBccPc_qCP@mYK
/2#Nc75IA2jC8Yq8B=0:mW;=![J#]4K4TmpA/*@[/5n+&L%Ie:IYf_CFHN+S"*;NSQ_M6lpDP,Wc2*Nt
]-:es@;D`KAG3LaT5j#3BPP,\;`p"O:5lfR'N#e-d]OmOj".0"Bj>1]:1E`H;JK.Xed(UqU!I46Aq*1U
W]JteWEN=.?)tGW8[_L(N4"O!-bgqk`\Suk9hAi-cG2P&Er9pW`9aki82Ftk*F$-s=oS!f*I\kp[iUiE
a0&(D-L(>dmr!$e^3mX\q#3Tmieqpd&I)E*$YW1[8mn9I'\ed(86Pe786rY/e5[f`U&r>621uo?7Ngh%
1=>;.>sq&aSfP*h+>NYa,5iHPX3aupV3Qkj[\(]@AUdF$BLj_GDTcb5k-OAQ`FI1HN]p7Z)L[Hc]K6E7
+g\:K;aF4'HFNblIE,+bWO2P`^]b+i?^`!Il+PNeo\R#&of-d[BPZH9nBdIPH\elgZQWTlaZ$'&+S5CO
Zap]rhQ[`X2L9Ktp)Iap?&VC/R#Q!tQ$:I8q1b$&2[rf56YKGBgd]_;K'GXS1`XfO0IMT(N);MbKcL2:
_fBGJB-iu'l3R()ML,oe>%PV4OVt)).BRkphs3k9;n=C@qkA>d0P29=PTDnB&a-moXN^-H2F.59pdt=<
C*9hbC[TM^QEY,/1"2@$%j!`ogT7t_&Rl.jk%Pb>)4\ZWB>&U'ntk_V_[)Jp:n,jbI7:bL2$XA-NI7WK
J?6<lK`9SG2'gId^TEbOQ]M]+:ih%V1hi<lPr[D6FD(3@<_,Eudr;+*:%br,c$uJK)s0LZZ@N!g8YK*C
3jZNLr'Wp@%1Lp?OmC5EI>qKGTiUNn9mGmTAbp^RIn_064tko#IG.f$r$&4jf6mTtTe<<!I@cbg.:]Gb
1u,K>L5+*k`Ck-TSHCK%RX5QhGBu2pKR19Q47]phaUr1:$Fj\'PNH,=a\3VFFH9k.8(UGSo(*)jVq]4b
R>g(*dS.Z")ZV].jSnH2`>()fRYbNg-MXF_:JL:8hC6][KUiO?aY<%oFH7T9/Mn,qO[UcUB?bq5M3^_M
;Z+bu_U;+iQIM%/ilF!@Mku7QA8o1j5OgZ*d<q_94\"YqdS+81GuLnoV<tl]Y*k4tmu2$/1J,?%c,?mZ
$]P,N*eRNX>g7pFHae./9WhRRq]4'YFe)NYKk%GV[+R:uGAMGZ2S8EDPh%gM\gT-@D%;!Klk7+?4^6a:
<JfM'f^7?D>qDsIk&C>4dN&51`IHY%/H3aTc$ETZP)1'l0<P9!oFAoCdmA:\Ia6$!*/YV9c<#[#E]KC%
B>;TI-)W?dTg,,Uj5l1)I<t>;AREg@AIq`*c@\`Z0i%c#drWm%ftb">4T`LpmV9%PC@<>fipL)B^3:T5
n)B[Xn#kgFVnJ!rV%e9C@84!g&]YKT.m,o4eZ<o(-O5"M,<1)>Sp<'TMS4pNg9GiBq;/eeHhI$1bZES'
m+jO0+k,ja1]4?/qRH"N?->D(h7ictG?9:\<NVkGg9l,FCBq![*p]ZUM7opWguYtfEAm^Uo/lm@c;"bA
<6%aJ]4fFWf_=edm_d#h5]fLuQlAB"_S1DDL-Vp@Cit5W-!KQ<G9-S;`R?:00&D!M0&f8?Q8A6/h:A=,
U%YY`htO;6J"FpF0<im5I16S`LTi<P`GP6_8U/;M#QFq5a.M,"^MEWnZ4eGmS0orJL0?jlqO,(l_ui-<
E%=i?O7LL=7$L9!/%'1<,a'3R')!8;arf+`aqkdb\$I[!0GU^.aM2MSXdf'3bT$m+Q_IVk7(FYXM3Pu@
>'rba(.CZni5)dbD=gp/1l[f2Mm9<6=8br"#JtJ1EV.B\#M/*cZt$algB)P@RH"5T\^Zr\Mi73d)gta*
MkP36SDrJDck(&k(h]D%CWcCsT.gMNr)@+'(&W7<F%r5r\4!sK2jGW;G_Ui0&N-U:Efi&E,H$S,HXt_o
oQqJPoW]@4r2S36K/SDA.@r#277$I(mJ4dA3XQeMqh@a<qSbP)kOf%MR$:56M`<T?:8,?n-)I%]41YNj
lNC=hN^rF1d+pRUG$9(#jTua0bc.ZV&ts!J;df`n8JAtWCtl9IEDT8kAWH<XX]F,_Qj(1oW,<Vd0&JQk
gd"`9[?K8YX!:co9"M.sQQWI8Vj#95)2,UIfr8(<"'ui,'2im`c>mqn1JkJlKs`P?]p2YmSW'Q,kbDkp
N$4[_,,N=^f#Rc'h&je<maamn'.?mOJ6tW\>Xp9>m&D<"QfEc^&WN0%^J'W$C)7Fq24;QoX^E1DQd>-A
P*@&qpri3(<@27*_oO8XWr>cf4B+_=e/S'+X:3CqN@"frZJ<ZH>K7!7a=!br2jS>O<.0lme#54a.$eBU
iiO`-JWi)tKf&l>a*tmLf(t+[16V@M#j<c'jg)LT)UYdJPiC7@7d4jXUW+,tADGY2eMK3QT<q0FCXH<_
QLH9F-K-JF[uD\8EBHYj5'R'TK[Y/(0B1Pl=2IGKkjQN8DqZoq3N?n4ag1A[I^c5;0N)FsZs"l`;PrHp
/=QOjWa(&1b0WQtaG/-L<2DjjR#N_6(/e=*TZff%4Y)I:'Y]DP_+F]3-ohHo8nD)jWf]'Coj9[EkA8Y#
c_5c_jTlg"](M@KQ_d`c_:U<]\"T]CB<,pZFY[0rRr*AFTZ9h)ae`$`E2/\,1_>Qn%+pL!:hhH`#gY1\
Z^.W;#U<YYRV/OTAkFiMc(LP_6k$CM)m[#A[hZ;8n>=>G2q4a#.?8U1HYaptUR2)6R3h9Ip2t!0p:uA5
egG!GCp\7Ob4gSFWCu\J/Hr7fV/6F^:UF0UccP?')E$9UWf?&@\n-GH)nTl_.J^X@Q6qiB?k5b(r6'O3
YNguP]K9YOW;;@BQ^:_659'NSgc`[33t5(Ee5*M&>8('c3Pp(YHaYXj0%%/\3p#"<lo`[fJ&NS%S,A`E
=6Fo"j*;opr!(49m.j`,qEduZRQNk4Z.nGsC/"D?QgFItjh(T+YNn#k:stj?#9Up'`E,WJ$>&tbJ$+cI
3n:_BB`8fbU.lA3T]a-4):-b9qH.N:gb8,K-!@^/XWguSBLq5X]Ac!4dT<J!DH,g(L@WA?mu?@DXf<u%
B9'126,'E2beI;W-atVd#>=dI=WEk.1cbPUHmI38qh]AGZDo_L8NU1Cft77hH"43.>C5a8\o$DR1uA`s
pmZ[ZM;P.IG39b`NAg%si,=66GL9U5Ki0#`-]l42PVt=t,i.+CWV2I>.gTJFLgu]5Qp++hc@6!M9RWWe
=_7G5$Oa2#foks5<Mp6r'Hkqp1>Xs'q>aOfD;PpoU$=;5e<`+]D>DU]I<(dMLioW>-f$g0e&'2KT>(FT
0.]5CSQVu&rD7$h0^\?Z,$RJ"8XXoM.%M)KFqUY#'#V*LMajlCXRLgXL*&g]WZjK$^3O:MZ[3#dX5/l7
MXPBXUs`bF>CX=dqm8&:qfV7oNF=VY)Pcf`?=Ol_^>Q%HN[4u`N=jarHDtlDN,WKQ;KMBZ8[#C7N0>u<
=(@b')Pf40ad?Vj(`g0,.""&09TKj)i2\R>]>b,@6=Y[cH9=#R<5'oW0ol4Z&SWP`%up,'`?)LR?<c"u
2/cQ+'RjeUZ[O;E(g>BAa(N"A]30uVhfjHL@a^J*.l#(7^"Ui/5Q.i"Zk#R*S\t&p4eLHk7'<D!@"0l&
]^S<BHh')?@b,,cA%Ffb<C@_q#f!0P!7s*f/!=FdZ@V+_C7hM]%gd8QHLC8_9QmDCJ#IZ*94s__4CmH9
S[b-^q:?]s1I(H5Eb=PsFWNFUKk3#].T>fMD1:h%@F8`=!ee#I.'YD/NJP/^L[Pbggb.c,7#!NB<J"$t
D>ZBFeeeu#9u8BL?[&L=h3G%RmS`!kFm0^o-6[bR&Gj@-IbH%_*NRd=Z'O\dfGUoAht;V-GWaPq^$'XD
$]hM`^_/aO2MouFm?UIU24JU>,RfB$6J-,fMpZ]cPCUo*4DYXgk>eu_+Si[*eR:0Zj4Yd0E^%KD<onFm
`:Ek82Mjm&UY@%J9.Ofk6J!Qh[cunnR?ljLT6Snj8M!:tRakh<?ON@A=seUHWjj=\8_@30C_BFFJ(Q%)
#:L+PKWnYr(?6t%lEHX_E,?6WdcB0:5?R^7Ieio%m/"jA$U'":=dcXI7-H&j%jWX1q:aNA9Kdl`c^UME
..hoGX&gO`olo'_Ld1osYF`LskAp6CiQ(Oa[Y/iEhm;KQn^[4?S"@B[-YRl3q6^+:Ksi29]sT;(=F*0F
Rih4YE(I_qNQq*CjL&;hqQ`"/5gPPEf]BoJa"H9HUH[7H4l1lG/#pm!kL9"3a+s(lZsCDXiombm%sh>!
%E0q9p0GDEm,Ha\RfQW8QgZ(8XBiR)j7[o6;82%pb;ZP]d7PpIm;e/TEo2%#n7]PZ3D81P\Y7[;(]+Pu
&)Da"Ge+ZF?+uT'AG^V`mDjDGh@IdShL$o9^/g;#^;m;9ERTtuGIasH<K+]552M4u\@[,Er\I`5/;<f@
nRd&/'(<g1BK10*:JLEK'o2JabUXm9^%=]!B_i%^Ib8[e)R)Orl]>CmURWi2"Xi3(%ssW=>Y;)kb26+b
ij)n)H2/NKar1^,c!I4#g-2UP-n1hRN(BN1e&V'A\::+Ec>!kppQu[G\DAk86b(&#([q-kj1Y>fFRS[D
n!M:h0!-!$h8M.n+1Opa->$:6]J7paOZ?\1XXhO$8PCmlR2C-/-i->pA&[31%@Nd&0MF6+XfP(G5[""3
k`4(Zca)P:"eS,1Z79@]]`VhPF8bppia"WMmAB`ZYB3dZdf&)/X);(^b1:I8$U*tXHMW^pD0O#Qc(%P8
mchVBC1-24b7@]3Du+<ND?K$`S13jA<^p`+PiY=^7\aU=L@-%b@_<:OUqCYI"^P[glb.]8mbkDO<d.s,
H-87j<H3@)O5[9(6F^g.O&5L%`HV*kknn(d<S=c;A,V_KZh9b%\ejWb"47VrlT<\Z1P$5;Q-=,!mT!e'
Knn"%qY9P?,+j:m-UePC<q9Rl4OZ5/g_6'QATCSi2E1V;P^F,!Z`sH$ZaCS3Sjaf_G>uGq4o*k#gsb+r
r"3;l&+7PGUt^dtjN]ojs1pi-5I`)Hc"jppA')m6'.sX>#1YLk^3lj\gsDCo,./#jM%&Zc<^M$k*$l@C
f!DI%7-g3<'(/c^Go+S[\Q#[L?fa9c[K6*#hg'&-aZa=)^85K`3]#DAblSmRSYA4C.[+8e,OcZrY1^0p
<Ninh4f^Vhn?4Y6hXj.:hD!ap2Ga#ph&1Ucn#+KV=IO_Z"?k&L7HI3^o#:S#L2O2NiQ53u;@ehEbtM5-
0lM?n<nILV]:R^U7$#k1c7JG,?d@E$B7E.JL;JC-FYM/@\Vp$-Z-4;UY6Z^`_j&iG?eT3cHsk-5M<BXV
\'[BN_[>1)o1o;!Vj@tP@jTheQ/,IT48d_7\FI'nG!V7MgXZqT]9djVJTPU$[`nAT-OP,2rFpNhq5+pK
=ih=d/qJ@t[`XU<0-W02<GPiG6t#g.\A,'@*trG->99bh&MJlUM/V\I7Dr8,*FE,@oPfiV7:^$,E%`D*
2r0C*.(k@eksY`LDFlK*1W91`+u8Jr],-T:%:,0GH<Ai\'BQZ7=UjR`"B'YCGnH14Xf@!D+rUqE,3NFG
(QiVG59[eR++'k=*8Xm1;T1h5hgs"0(mnVtY4HTc,1jA10-]mjf8GGKOn[3e!MjcF]SPd$0%Z$&%.rXf
6m-)Go#u9>]SMS@[+b<jR@3a`pEHmRah<M#Qf(fGqr-#0eB>`ZKfo'PlcdtY<O#M7hY=::;d[^bosgs;
'k#0PS6(:-o^aP/$EKC95Hc!6o.#5-<iNq;h"SI=YL]pM1!;e_;F'PVPq)HPRUsKf=J^Pf_^^@c8R[nD
/;7*H:n1UD+''i_WJjp&(e:0!dAn71Vd`e\IU337O&kNlG$ajL]'!(RraD)/oD)g[12Nj`N^$:;kf8'Q
V=6,6'<IIADrR,0mjNfORt'+%L%+3[NJSJ?phF'9.&'-KQa61Q0/O@IHuP(b]Z!D,kb3"(VC3A7\:h'*
V()YOETt`N;^"IRCrfWrT\e7o#VBaqlMoDEK`<La<R49kl/E<"C%qmR(;h3;q1dr*ImU*uT@gWf+(raO
26,&_VCkQM1Al97L[+fQW'/F.74N3!r<HM[a<DE^Zl><cWf1s<.MRT;86%UhOJ4+$]<0<,jt@IolL1S*
7hoBgA\8bC4AZcD5V,C"B8L+\qe^^B`n-iMC+H&f(]2%Ye-2tAV33r%1hRPV;Of2gk<Z=!(.O&rZFSVs
Q'hYA9?@H8IAJHWZtaKGR1q0IOBtHU_nF#HWt5jq9X7bq*Y\t0MA3Z/7e[A@H2#:*AgfU+olP_M%MnQG
<CW8n;Uf6L[hX+4&pXmsetI^;@9e+%jVkk13]/!1d1rU\.Rmg#kOY$DDhL7)U%'[Fqu\=oL.)q[bqh/L
S!UlfS.nGVDCbC+/!Uk@Ya",8=S&I.=*oPlRXXdD`JS._buF;lj3.,WD(N.1XX_TVRF6i$dBd>sJoe$d
YSH)PWin[!OV)N.AV+^.mYF\6<j^7fj2(LHrJHW5m:OjM;(iN,X9pIA>:lmW5*mi]72JC[%\]]>etP$!
>_QWt\RQATC.7(u`u7D)Z:EMid6^`+3VPT#/E+9BUX^*uLh%6;A*k4X?`1o02&B#gXf29Nb"+5cZM]Z,
?u"t>bY)E>f9`eVbBL%5r-HX>6SO#[CUR!Z2WanRrdOL@]mMDGJ#g!F%mMVRMh\5k"_Jqrf0JYUI&!!-
Em?In<P^(eMs+hpGM\T<Ar1H\Mq_6C\8N,%UD"UbdepN#_UPnX$WGPmXYQ2SQJu<O[()pNM@OW6AQQ8O
*49*0/RR*!@/,!dg=m#MLp(pD>\U8_<`DQsrN.P=<u&F6,le\9]A^R[r,j_-AKI5_O88WrI@>0S=?UuT
UXck<NGBNG9J'u2G_jJK<Aac6:KG2,A#<.#.'CC4d]^fn=DL^lV@92.?G)[F4>(^?4&+$RisOnBG4Y0h
p1>Od3u1mrKc[C_+s_LX`H:hQC`W2*B(^;tZcf-hob.9V9n/+N%8P1#b9sLX.U@+"e$tY<Ug'bX.IK7*
;=[]^`7/XHX#'rjbbO/pEQm,?=o;rP4dXl+ZINj@GD>+oM\,]F+jZOjGc6LOBbF(bRRSOJ?CU541n;QA
$-+;`.*^0&mB<q;50\sE^116oC6qoV`gJm\o9d^UTD;g\<IB*qDDa$KRa/qk=Y&?]h#*)15?j=E,/s<M
r#>!KLHkg!C&V.t/,*kgRM(Y@q4XCpj7lr%0)LO(Wr5%6Ujk=/<Us9MT!%]To^71:0$Oaa1[5,1a6GWB
fmouud;i6gDnWLW>T6,@'la?l:JiEoU$&Nj_7hZ@nTa0+93>+AhAoRI?.+_A/>LI-gesCZq@nXgL0#MH
.0DM/ka:?1NBL/B0.!oIq9jVT5M3I=&d(m38"hn?N8WL#22d5)jlRMkW2;k>U:k(P!LS.'m;ZC\]co`3
4_cLO50Sg'\;TB%?J./_Q;=p0?ULGl*?eU+qhoWs<MpC#-:@[YI\AbgX&kVIYD[+4@>&P,aas:&r?57R
c>h]U>*4:0nf?+Pe(KVspZpi<@8W**oA9!K2c_bBMXq0acAM=N:+4R\:1hBpJ&q_^WZ4g8IP\<&_(njp
DsF2-,AsZA-N'ZpMdt1PD6]QCO_N5&P-_\'%]MDII+cLQWN(tgf'`[/U'Y@_bU2a>XG4c3P1g>uB,m[I
%0:)4Q4MQQ7D$<]Api"OC90BLZVEY7^CF43`QH]m`@tKEl*V.Kd]+)u4&%bJiX11GM,;A#Z)6_.7CDt[
M3p+5VY;I\P$,13Lbr-oiNq'0F@iNLI#mMGT0ED+*VeaLqW<Ch4K4*phlPfF6s<[?YI1Ck?)H#,[+1_V
X8c>KcH=]`9o$![JX"c-1#k9PlV(NI<_^=Yp2&=jX*SrY7*:r7c+[1JB^.5aU;&>Z1so*C$HYV%W;/Pm
42EA/e[/@HOZmni`DN(a47oD8mnW,M)irtMDR-)9[.rA-OjF!+Lq2O!R:O>n%8=(fTQE&mPpD>pG0Kp7
$KgncZ.d*9%7@F2:/QRQa..#JgA)qZ*KDF-jqR!Dm$MB<ES3(5B%?09CtB1?*EI2p0A1n+%dUR'A>72+
`Hn=]G2SOY'!_VG<'tggEnLKkPSJ7RSfZO$!)<"#=$!Ds)DA(9jkt6;]eZ19*H9WQA]J%:0tQ^RfaDId
FuYcj=M,*\V8Gp""d^6N5L-V%o8$bfHq/;-1hO3(3-NP]oiI'6A%*;WTfjf^d2EN7&`[Wd9`E/f%Waj=
\*4,l0q<DR-hTQ5fZ"_WC[uL6`3*<.E*GkHRhicNDQ?p;RX3WB0![XcG-%=^e,2rl>'Xc!:6RC7gU/$[
D7U+!`"sXhlUuR<SNNM$l1mb9`mq!D\*^Q#]o0D>X7u#Ced(TurGqbk.T:)/GDC<7HZttYWP,pUCCN@4
jEoL`p?q?0K5'd(VXa([75aquh,?C>]5pb2l[*h/EA_OfDPpoJjd)KHH^F8TU%`Pm6LP:mH^FN,p[+Z"
HJiu@m[h_S(n8-(j&c0DQEFu)>>h#=pT[c`7PWJlhKPR;:VG)ZG2Q\H3oB;EHKop9#E@=)dI+/eq2Rs"
ep8c&YYeS"eN)Y?[_3']S*sY$"HM-HLaHr!]aNWiZZX:EAL-8Fmfp56$Tqne`ga$DWQ*%SObji9_:GVB
:K%e+s0d+Ra%lK[UDPM"B"q2pL*K6np*K(O^LMcmT+Jm7-hcrrh@9^[\,<=e'c_],<fqt)2X/[$bhB*4
$2BJsf8)TD-,%$$]jK+3oc$S;3\W(1e4*K:n!3O`oUt^LqS`*A^[aQ=>\i/m:-2T=*/8`?<@:,Ca'q>#
]U_.k2clQpK@.N_^P^mdo0=FE3V4l-db+JaXLAo4c*Cs%=0nKpCBS-4i7MMQNM0/)Q8Q[!SXa'eji!a>
]U/;miiA#1WE'#7;%kSjX:S/,V62!3pC;Ijii=t11l90[53M[hApe?QGag:VkF1]t$JkE00-S-Q;=r#8
!]^+ERA!YF1YHZWP4fNj<:Ak6L1596gK3d/etZl-3J,N"GZ)rMI:L-:b#asqO7<\&naNBe^c$Oo&@ft0
Mm"8/*;X/n2ij0MMJuoH"@VX[[Egl_ikDRc[(_C+H.>TA1hB0W51mY#+gtP6)WU!t@pS+63p?\nN>Ii(
b6)7&2sYA"qI2:^hq"P$:6o\bH*E\>m`Xcj2n@TT>o$YV@BHOt#N*4(?#W`sbM0s^]Tnb4q5/=4<Fr8I
\dE7Pc<q]U>dpbG4T!r>[TBSrEg:G9(m.hg`s?@-]c>HT9g$!%XN]S[bE;--Fo*-qFrkA4pkJUW7hYQE
qr$,kOg2gk42-+k.eCr.di7LMX_,XLbR_*=`f3g$?4&q#n4L0TH=p5l'L[U5iuEr`D5*?!Hbrn>$oA9s
M^)ta(5FN4'MZ;0h*pe7icN)ud+<5#BQn?&cCo-QWFqFNQ]uakN7Oi]/d#nC>.sj]4Yk[b:Qeq$G3uMW
&N?qcS`3pDOjD%>*glh2l;KI@.5`bQc1g^ScY+#N<pHL9TCuQaAG6q:/fD[HLK:Tsa'TYS8j\PFdK[b.
1e!K$_kP&j"JQVI>2N[N^S<d>Wd^Bn204`*!].iJMK3lS\oi@a@3-h=EuCSkIOs-Vg\IDu"H(E/q6i3K
m\.N8X2a]nEAs90Q^R08Tre/[h<u=>C^6U_WNi7r:2s*g=f*3olT;6K`"k=p76+B9XmC/Z4I3U;I^`p$
$8mf*9<Mic[5^#s*=l&hJ+i+M4a9Lj\$bHNG,Xg-9@9g"^56uRS7)U^IVCFAVp'tT<$MQqc7=7dPSpUB
IsI(ZPf2%j@sFFM?h<@HKVVc:2BMS&g7;6S\Q38db1^8qVOT+FXEn.K&9m*<\4`l;EnVGsG3@Gqf%NQL
c+YCu=\_a[;TqfB`rE([jrV04GF"5DHuSH-ghrk_Nd6&1h-nmLj&T^:8*'AI^VSH=.C83p0iQ3e4l[lm
prWe/2iZu+%%BXp'Q<s[2XRE@)PCe/Ll390.(!UVGc0G&T(H6Fdk?Y&Q1fF7V^Tiu9(s.H<Q7Ya=!,Lm
<t3o_(tY7,K<&b/#*p,E^!c=#l;a"uPru)%AC&\[L3A0.ch>l\.-;,/1Sa]]B]ntf`Rb4LQ&s)%/)b_t
YICmB5pK<6iZ"W93aIN+e?2.Ye6;5Z`T#7#6(Oa"8\s-"#B`7gmYN'Ig_VhT'uLA7_(S6ZN6CX`]r\7%
N,#eB:LOd_A*p0hSj=5erO:@[rj#">b_'s]_kHOTjaG%]R9BA)1p]bl6roO1B2BKea,dD5a[g1fXtR52
;6sJM*6Y!QR;M81>nQ"L1ud))lZW7#3F\lC.8#s^D7+4LnGmXTBJTK0B!5>[^`n-+Y'_^FN?L^F%d=AP
8hY/6`>4#ZDA!61AHBbgQY;I8_o'#0oV^7d6`-Sed#5JRCR'&d")b0.WF9o!ln$M+6^YuWk'+0A8I9)H
(T3'Ak3ah4/PY#6GU0ScR?QIbG%n1'SU?q3I5KM9r+*M`ZfG*EfXYHq3]"N\)T3\aB5F4Z'ZuoGKG:uR
9S4Q7`g=+F_J7d=IpHGSl3FjWe)<qUm>e.]]Q:58ZKUb&>H@Of9\qGpjYs6nb$/,^@I>:9Jn[*p6Z)&]
g*PGQO4c;E`*/XP@l]`WPQ"nT*_qOgk.I7uPXYY>b=0!Fb;%Z]h]rOr#Sm=u*,0Oo]raX`Uhd*)A(BCD
h79j]hsE6M?+3nW.WO'XHdR+W0C">#L5#]Me[,"em[Hg060Z=@qp)!Yil'p!:J;QPh2Tu2Vf6,1aeeLr
]B\+Hqd,k,U2IQOT9sp>\$=L2DP7_BDpjOA`7.L/dtt&J?TVqQNr6iF]5pJ6iLX?4%c"GSEFMi%5X,qT
.c%m99YL6>WMrrDG\O804Y_*UeF&0m2c6KFQlPGIdq`'SL2Q14o93d,ceHT)jnRs/48SNtQsGG.G.u=i
`r(j&S*J2m'soDhP.UX,,lb"APq$o>>,QAD9XO/&;!lqI]9Tr1iaFZ9">Pn3;.]cE/WOp#g9mi_LGjAD
BCrs]U)3UIhU2:L``mNllD^0TiDB&XY'jc_i%C8W:)ZQ!c!$%tp.;1*0HG$J[11U6'Lk9llV;D$3U1dG
U19K!/uhjiPJt1AZ+Gk>V^r8rr+K%m90ZGpAk=e^(3&Z$^Fh-N]m%\I<\X4fV_"L(+$=V3--f\PUd4(a
BGBXK\_906FAdjimTo?=-#R"&QVNtpA5H,>=0^?Ep1OAF88%P#l54E*JWkEhS`UUhI?Cm$a5(X)G"d`'
1pqXkC1E,c%D+-7QrJuEdn([]L=pp`c?cpUAoue"s)ui90ZK;Tl`QHWI8RD4eh5WjPkh-0:SZuc15!:Y
a#kPpOg;GE7lM9G(><3Z.P0V/U8+Tok,W@M#4B:$h:gDC5cr[R)[=%uG/@k(1oXK]UMRaYH<+#fbS&^4
8,XTh]YE%O>^OFMi+;8D%D!UuXr2IEXY],342,m__,Ps*)[sb?AH2X`mi,kbG^"TKk6JcSDTO0=fWKcC
^Y!F(6@cmSdNXsNiM\9H3H2ERT>tt6i[]2Tma&XVmlC641j=@3E'-@kl^k<4^ZWqX@uCBs9K,5a9g3Gh
47C>Jd3mgWe$IRVEJ)>\-/"l\l#M"If(N&%dj[CJYA<b*kB_*pbHA,n]URL3c@iq6X#0`U4TCH?q*3D^
qks2UmsB$@!c\FXr<fW1[,bXiq\ASf)#i236pG(FafFb*#!A0'L1Js`1PQWS=I+)=q((sEZ'@9""1@C@
."R]PWc;:,4GoCe/@rK..F+V$77*XX9X<7RCQ$m02Hl%ca4TXYRC\ou0_jt#7UI.Y+.]0thJ"-XUD>Z2
c%)]F6THPE(N#p3#XrWY0)"rBB>sPm:TIjf?:;NZ8o=?MZZ+;!9[+L`-Ei5Q@JhKSbD_pCj"3#nU9s5k
DS@*:G'^O&ECY77+_lTe$mUpYEAiPA2ne2s>9WK6/3->)GpJ[_`-C>WOo3Bc4^5#saHj;\MH9Fm?aQON
RCC#i=pEI(RmfF4gJT#ZDgL<li>IpC5IPCOU1]0;r\*m8ErCDU%*&eCm(!W[q"l"pSb./Zmk91.41;fU
^X?3*4O0t>?[+)FF%gN=dMM#7`A+-,MnjO.*<Hp:buZtp^\aaAoO'Y6f=K&>n/^7cj7ubm4\&lC;W5"f
%iinc'\5@Sn&=lO\7F\K"f<j`ZNOT6ML2Ri]2\,$/,Ha0D&o?lQ/^IPl`6h<So+G/+b)#Bkjg"FF_C`b
2Y+O-)O^#..5KDFB:sXRQJu0<C,(u2<blD$D7'ekC'ieN0o*YjCpP),^Z&@tm<!!A[9k=$j4`P&fY/0J
^Yl_-L2F?,;^*_i-1V7I/`9s-Xg@e;n[n1k<a],`rc\*P!L;oUs11,V.:&[:+\ugMl;s4sRok_,IU2WJ
r>N2SgT$W]XfU&+.n[t`<:);Bfu[9i`nE)gmPbWGeOoY'a<:F3(;k'5^;.Rdk*s<i%b50tX<@+UbB0"T
Vf]Sqhg.#S^glnJK]Yr:8,DZA\$^PUWRl$ob`->sYq2BAmmIpQm)R6=4=CG:_erd0_(i%Gb0sGiE]Ad=
PQMH-jb2jN-(.V:d.V+=G*>pe1TXQB,Qi-;MFq8[M';dtEp^;Yj"u[-CgUg<4)M`2Qh0+?g]`,nj\h2q
1mbpU$/r=iE[gTO\)Hr1r^tilR5gW-20JF)l;1iHVI3GO&e-a=:F/c:c61L+eYZSF>]eJaPQ"SE'+M,l
B6^nY%$d_?(8G"`K>T1b;7k8'GO_6KlA"Q6c^R-\'R>doR\E%7fKUs:jf.?&%do$-Qh_S:RLJ[lY0#$4
?\/Vf=m&)G3AakHTH3$EQ@ucM'\YBNENsqePS2.X./SkPZ=cmPLpLZH%_Q:c0+Y]Xi&t;A@e1uKgC<_a
>=Q+-g7+*JjSG+4c(Pq%-"u%[/R?Gt=a5Y73hQ6ZLRoP;U#Wpuk(f[d"3[gB[8c7onSBkUrs%V63;<5H
SI8PH;r5@Nq=2hYXK9;A-dOm?`VS%j7oY]PV)55h[d9!R>*Z9j.*=6&4^E<uB!b/L/\G/K2;,?<[$/Y/
C:mA?pE`IT1$!AjYfalb%BH1spL^J:T_HHbK+uN$>l(QpCcT#qV^elUg.!M/;(jl[<]p(Tll5)`7`HK4
gZfB:a,hY"r8,<8ld>CuMPp5*5$t,'(D\`9't!$mIds^]lZUQEO/f<^&UjYDDmhd^^23IGF8U0ckZbM;
Epf*&V`=PFWd2uQPi$8kI""R#UPdNPG!ZYK.*AV,`:AqZ-e7@"Z\G+.=/K/oMQ^6Ll-ijlF0dF4\nPn[
9.[BYQ<HF5Bg:#9)HlC:Hg5PZp&t[sE\*e]LVeV\PAi`keFG>$GRC$AAVr7G;nLA8NN[]b'Xfp_hO&S\
2s3be+$3R/fXhcVMtO[7a[cSS)D13fB?bZA41_\O@'h8Q%g^pU>_^oA@9l-I7kkBWH6/s";,U)qj"h%^
%;aA2Vb]6#H[*[s!^)1AqjTR6XaM^+"\CMJ!;'s,^@jum!',/8c^5N%1f7b9\Suu;he+jR1r_2Plbt`H
Q[X]*aZ<c$q6g.M3&)b^.=KN/dT12&;u0_YLl:C19Z.p@64kXXXjshga,&&gH4<[.jnHMBG1u.@pD@c>
jE_#3Im6[2o#ops,(96p<sk)SF33GE>]VIg0DD-\5hU6&_ndeUHBic19/b(8nPh'UPcgM*.m#1]H./r#
/9+'9ZU:ZE8+J="^ml:U(Pu<ZDqUj;%7_MP%X7C:5tbL1r2rHSH2C%O[9)_mZ4G8M#JW[7K%L>#3nD?S
OH2/#/Xo]:Z>\nhk'9Oi[gRXFP1ScfpF)-uV;^?nICh)i"UDea/AgX1pIoungK!c-S%M=-m5[.8?TpD,
^2!m>l\HGql"A50o1Qu^Po-ORU$Hpa\Y0efgf#SD=-uWGO/J3Ro@N![.O=KA0"4gnTsX<tBs6pn#YrtQ
bb$*eUT^r7SYhjBE]T@*CZaATh=?I1*Q>,k[\@q+cO]Iscen>gA8t-"f"r?n=1(XZoP!oQVDV$lQ_lY,
/25kG455AhD)C*1Up#\0gH5V:]NCC_k3H>/>f,6+=;oVTiW`#%5KN1;41q=l&^\Obg>P^k_KV\bP\sN]
K:D@ls)X&i[anqF8"'gWDQVGaM2GbfTeH3KA*'OsO3ekKQRV&eEWr&d*0Oeg\#-@u;Qebh=bL8!UZus*
gi$9-qB2$D@217k1s/Wd(3ei,f3+9n,jWPWRWEPij-_h_>.[_#Xn<_#Du<qF2[HL^gIE+%o]o"?R8k8]
^Ynud`a:i*m!bM</?X?m8,HAp-Ypcs]iLrDUM^9f`\T3CQ`k^^I_;FJ^WX4Zik2&?NBmpBXBg&%d;N-J
"pYB-ZAc(m.A`f)q'g\i-UK-8e0VG:V8js]-C8FI"]trB40j07JJGu$MMO:7.>^#j][n?8J6C8].K,"1
h!h2+`VuHA%H1He"@R$,j`:b9+PrfT'RPdaiLR<6Ol.c",(s_k.Z.:Pmd*052UNo-P46E&nP?=^b46<N
l+-!kkIXA+5sLHKk,h8K8mO5hCXkl.J(9lDHU?tTk>?k;q!6q@j<N4[jqnp3_)i<niY-l?,Mu_)0#TE8
hpIdWAoB)<eM-F/@:`1p`S3=fc\(p.ZnrkC&AGnm9H/IhhTBH_66CH]NJ73"CR`b7mcj<qS-7rb`f1K?
cjGjt*!%sHqEl-B8X^M4<gcA]%$!*-<=LU#<QOm^4VJUra9Z:W:A-jcXd5g%jPcl9WkrP-o@\6WD5)mF
(Iuf@]neQB(%#"$qJrmGD;4eZGq-VB&%R#%1b$$b`5tiA0/@M;J=8*Zn5R8YR;%mH(?CD?GRM>U`Et;4
$c(i)cCnlB_!mms!oqr`aP+*'i*77MqUc7@2Pe)tIL>>n0b'"Q2EGWIF-iEeGM@$CoMHU(U%<G-7>oa^
X[lse9q8(2&umD_OZR]iQ)iCOFQo_RQT[%a2;bH;cKZ"3cU+8hmr\JMEJ?@VXP9pW2NH1#Zkn2EGha:!
5d0gV4,0>pfSY$GU$*!2`HLmqn$IIH8_2N18FYuYCD?5?ebT[_gN`HVF$Fin#1&"5_[0bJSHgE-l4`Th
nlBe9]m(KUUI/$]cPhl)RCXj\Q$df5eM?SV>,s?/UUo7H^&j$_7gdI<;Z)E^/j_W1.b[Uuo##T/?Bjk]
%L*/R%Lq)2p=l$a-Z`=[FSd.o$)m]SD,tmUd4`NJAP3iI"T+*_AG"'GN3R94D@Y5:C>d]eC'f1jFXn4X
$L/MaWi,-\p=897^UF.I@jm:!.k%;cO2dpI@:Pjs`h5BnmMO.ZLVf[bY#6*?aP.N"@E'L`pI=968_Y(r
;q_kdR\Zlrg="YVn29ZFpkWqFUpul,j55>+\u974J&0+NLU[+EqJ.ZV:1:TTfs8AA5S;Pk!-R<aKg>+H
gGK0g?9,d_h&*IM>j>C5A+3HOWRHpZ*J<,"]c<]Y6T2OC@O]IkORga])UQ$7\L6hGWJJ;J"Ih!NA76I*
E?$s<<(7&b;%_T+hHkF?=f*2I^-C1h5AFU'M=Y$8NQjP[^TI'M:nl8Xa<R_4MRrP`Hs[+3!A0`6>4,''
!UPm]Q2b'$3W.DSn"$Sn_NK_oar6mX/aNDq7)"CKR.:pZXaAW[P)9XSWb,]L>`k/;mUf_rN$9rt7k5cV
\)%#,??!#cYE[/X6bU,5BNE^7L=^Ega'Xj8WT3)/V=B;oNA2ToTN4Qbbr3U]%'?Kcs5iQjn7C5PF`/_K
prbC4?:_-,NoVn5GAPS]Q37H@Eo1:"ro0jh.)m2CfaQ+[CPcMW;aD\Ii\f7oGLZ1kZfnoAZ6`cC[s>(l
(bi*pg&)sj5.8+LCdk`TS=OUR#Nf^E)X)"A@J?3&UD+_DC^?Z\r>_bEZ$H-lDfejXeG6Fgk(P8qJ^StR
XQ(4/BCo9#qSBdQ3#ahV0#nr[p)A+s:Y#d49f)\mWKd.p.)H+I'&J,,)6LaFJQc3)JESC?P?q\8#f+6&
nOqZp;#B=TimO1pdAT%(o./UAeM9$Da:YNlpS$'A<CtK9mt#^4bk]Po<Z@aa!t:tkE'U$%o]]jEXLui>
XEu6])ie>bQ"T0QBnQk[)h\[lcC<W<7^?oa9sXKO34-b$`'lbkj+/eKVf#gfO5$O?7WOaZOu7t2kr(6C
iPJlZ^J&6WS2Y8CE%>-#1)Dc,o:d?-GCbC/H!["46a3M1H[@95[b-ZldgPkHH,!t=C)TP]j-9#OfEdlu
hDBN<0\.-P`nDH<:T`GRN!;6=D;9mV2]$,?%WU;r0lhT&@$!_?8"p!6fFgNPK.KEN#B$#`lR@rD0:3Ak
jN$'qD4?dt\#J9q5P>meLc>*;;'6omiCu=ikO2SeeBF)`pq0c(i=rHdcqRGS&ofR^-J0\fk0f(EbAmO)
O+7%fXVo2SlhO^?$pUg2nUt*s>V@gI7f:-WX5esm,Mlk[MKm.B)=\3GB%2U=o682NFED_4bO@mNZG2'a
@UY:j9DKN99]`[Qhq'ZXCY:M;9DMXpf<T>-kZY'614CG)Ja^[kNL0GP7IbmC#WLT?6$s!<$;,3FPrCtE
3XA_s;\'g,3@]W@;>%;:J\Q&hr/`d&r[*;G.WK95f[;,(FLDM@l/M3>BeVfDNlB%MhZ!fa^9A-'@3A>P
a3;e3VhPo1Lcb%;Q"Lp2&uMDJMU/6[X'"FW__l8@>r?fNkEli;"/2MU</r-)(,na@IDNFs*bN^;5&SWh
:i.<@D^"dn5$I3iKJh-9)6m4M8Ws'tfAT$>GZ$(BcOtuI!Z0]i`pmu-O^k,VaO$j:fni`6'uVbthpIcn
fP*n3r,U#mdYpHKFLf%oHiD3_,1"ht2].Q^=G5'(lY]X0]<)eHO0%!3_d@DL:gSNYc;DWiK8PkEeD$nq
&bh!:aqhJ+=>"-u,un).HlT\&0NB&Y2IH7tZ!5;Tg5=F\V!2KrB@n`aDL[+]]c#PELSEG0O-WX=0m:=T
oIMJnk>S]Qs+t0D^-t-P<$f\GJ#&>M(@U54G&Uq<<4(_]#IX7H#f]8n-kkG*VO8p0M;/ds#`:V-U22AL
&&Nf"a%7I4@NL:So:XUjiGd=cLrHKh7itI::\CY2a@'jU"a+uYT0@G9M@dYl@h79I4H-ETIrr-r42r5*
,'<I)if1'k;/n_XU(XH3.q;KPnNOr)J&@V!s!)kQMIP+FG7<+e[_&STMFfMW/&k!%?^+[*m>rs@0?HK7
oN"u@Y)"=bRT,u5&hJ+=`8+3@dI.5#8IldpDCaHmGp3Pa7^lpgHT@qVl1?WIVc6q=QrRMlS5QC_8Z)BW
D]VZ,P+I+\0[./[aofP_MoT#MBlbXO6USFqAPI&Ahs/^f-arF\e7:(O)&PuoEeMop-4:WEGH18#[\I1!
>![KgV%d1.]"N:u-qB%#lGUk]m"CHb?26$kN!H%T\UVMAT!^X#_qfrT=Xr\OPYBR8eL<Z/.YgEG5'9(3
:6apTb*0m*)7X4JiYG>2YY'o>(_ODZpXGrP_GR(N'BWoF&`h!:H]?3E>9VK+Jjn@STBQ<4o3XlE#7^m@
1Dkl:R()gqmV;]TQ]CQB3#s@&8Dfo>?X;11',R]HF;R%O"]iq]Xml/UNk%/q''XQQ*4%MrRV\Se2i_o8
"5o[[?/#oc::u#/ETYMmpn^`!\ai/?VPo;/FPcD]S)N:56,;f*9*n34V0;5S/<gil("N]S%A_7OU"-4t
8e&h08"QL9$)m;R8)+!F]&[k6pcXO)Q,hWe+pj3pY+ZeaH_C#)1V[@'qjD_a4#7(-#'\+DW8eP27#Q8p
WYOs%6!K5LY=*l$M!WAs:us.lT(WR7b0h<&W2;h[X:2X'CDX=238jIsbG%XJI4c,9WOlsO:Vp7]Hfnp?
!o;=243tW(Mh47+L(_i+HkmP]Nk&D-Z\*")!dfV#SbG4,-G9gHN.O2`$i"D25>l"="j0-3(sQgC>.C9(
S[thl7eb9^K].\`$j+ZLiu<H;GjH6NL6,ImOp5R*UFLK5V!^P0%AK9>ID;(-h1dY]L0lPcNKDgZ1u]ig
[qR]K9m_Et@2+0F3+C6h[hcH"i&5geq8:gMH/CQa9'2C*PfTddh;W$Em+\a?iX.kh3hlkL;S@5"K`c2s
S)\I79^1)&qRWYJ1Wn[\<:1YA.P=?8::.s\Ne1pCltu=U3K(VW`VHt=d-,a958c:#+5RE;"XiD+"jYIB
`eIn@rjk'`A]>(p#`X(bc-Q:P/S"7`HJianGo"]4nn<,!mi\X_l73F@#a8iXE^LsI"L2Dqf*B:CJGl;$
9qgUL7pXc<^I7oLNq&D'-+@<./_\c@o":,Dl.5XtaMuA8JO*/(IMp&_C:NiE8JX0-g8p"RDis"N*j%82
Ta:Dp)RF+JMk5WB$WOq]IdjKlb8bn>R7aka&GiUPoS)hCok7(a;W\AC)C5o6=.#n7"boT'Bm#=^V^le"
ak@nsE8OEM@2,m-Un@I!-)^AaMdKpDCtTB)3-PL/fk`Uc#e;I]N6-OcX:B!9ZDhA]muWL#M09p],R];Z
HDL'^fg_;mbLS6q>bR;EFmQJ?+&sOuT0%:LWUfmj2H`8L<tRGYo/H@m,uLd$Z*KrGPXSc?+>$D$aUj%Y
mFah?77hUP(N-AQ%>WeKcbEshB/'oS<D6$ZH1?;(G2)Nrhs]h*GK`.?lN>&?$*Q6-bpK%pb-BB[h?[Si
p!F,C%B.``P9eni3f[K(i3u@$:2cuma(G?_D-0FP,4a\=64Jp>ge3<84$!!80+NBtP5Wc\(IgQ@dDJV1
R&PDF7(`^a]9fHk;4,!aNa/J=CgJ=`ZAn>d:$Q?B98)Yam9ZNuBmMKu:u+6sL6m]rB9m$1!gADe9>h/a
om2Hk_dlgB'!\$LFYAlNn.N"GjEu3+ed).=%npJk]L9D+3kHK4+d'!70+fZYNPMK^e=1fAI'"Gr+p>$,
lQp#*_Krm`L<\>f!:K=hiG(k(Fj*L3;K"\aW)[#`H\l(CoD'J4>UQSPA-DIAWu'+1/51.^N?p>gX"X:@
iYUOUq?;efjH_BHbhj9-AZtJ`5?n)l1+^bWX6-QtFL)$L,$%*G;r(a8'&XO%'l9(BdOJlf`sBk@=aV%#
)J9F\*E9qBNQP5/6+dqa:I/_Eqh:`)6D(9>\SeG\n94?[jKA5NeS%pef:A2Bb-L+tB$3H]T+,TC86a.J
\=qQVD%Zb(]G"N5-4F<U\H/!/\$f:U.?%bh+e0G3(`f>lf2;mKmTNgn_:koMYboC^(Kt^-/^tB8*aGBo
T;_Ok`173<7BtdO.s4`m>,tf>9dlh9Vn):7[Z=HpY>pf_\%Gn:V*fMYMj_u:Z5&1!M/'IZSEbal-Pb25
AhRtlo^oRk_W=>[<5rcTn1T6)6(N>*j]=0)OPbnfFs'FU+rZd%FE(<BB,)>Z1p5m.>V'G%Xr0fIRXGPZ
AKRf4K2p1Tnk:tXS,t&9kcPsd!/-[%7K+DjGsjk(_BfZWlHkHJ"q5.@.l?-D>6n!7?$&/#YoB^F1]X(u
G=Ojkl_e=><UHkE/GBK%Y?b=B+QN(9o&?u^-`e_[em!:/Wf#'M(S]_<bH9Dj;42j5TZ]JZT8<2p^m6Cg
E[70C(115!.TB9]f;pI2O#1`C75hb%U^X_;*IhA-XJ26FW>/9j_,@pi=e^0cA`83)]N*A7CFVJHG@Kl!
-1ru1KkX%*->'7"=]nLL<>B+=EqJU]H+gVC1"e33en3V&AZ0./oj--keU<0q'pGESPtQfi/+n?S0o2a-
bk5!JIa-0Yj[lU!4Duekh2]Xi\bJ48W_0JYMgF=A\#`NOoGOR"aoJtF?WDL$>FC<2PkdYT:<?VOc.oF.
cdeVOJOR&O!`-]V'&d<o`NQDn)r3<^PLX9O>OAnrddkgg+9n&Lb$G`@E)iLj'^C!fQ`"ZJ/SdEu4[\3/
A$R.U8"\19Dmb!C[f%t)bsqAS]NF@@nFF/M<2kA"f*C>S;:u^)kI,<Ko3\SnHtt1.&_UMO^8Kje$4"<6
Iq!?r.s&RJIJ!;DBgGe,r>d+"9_sU;?OTAOi26A`=hh>R%(l;KDg7?"EV*(q5T=lIp+UI1VBI*3@5l^s
h+l^t01X"IhZh[0pq,C&[L*ILof'TnY=e"\f+?XFe=.b;?i0fteD.(H*JEQU^&.mg2]tbI_Vln'T5iY/
UQ9,,BM[)7\#SXae(b@cjqb)Kgjns;c)i>)j30>=IV60n##snWc*aglQ7BCub')#=81/LnDDb!?Olckt
UPK5<WnU0fX,3/iK]WKoQ>:A'BtNM.PLnTSjp#([lY70R;:6+8IhnL-(6^Mu%DgXX1cL.n5;]j_1_X=!
>HGb"2kd:_H)id2Xb'6DWGTtgEU4G-9QSrc\07n1e^3*)Y3+lKdbM8WhFhoW\XE9?gpUo\d`mlPYoI1Y
8nb3@Q>TiZ/Cg!NR&ma!1cNX&.B^2^=b-t1Hr&F,1)IGMlQe;G?qYt/Ru@%s2)im810p`e!RL&B)Q8SU
0*4l"nqaoUE7muYdl"W"Z,WZO!UoEE>O9GoIXPmIgcPCJDVV)=2)dYDZcge'7%q.[X/^.dV5-b*"-PTI
RTiecK&;!LMc(V;FAKfSJ18aFH6Et!9"gYh80pg,c6LSnql[KlAgfJp_d=2rQR7H0WN%d6m^qGHS"\3a
U/a/6,[GXJ9atdJgeUCJo4i0YUV#YXg.\Z[)%+X5>G\n#Qbt[>^3<l-NI=F%Wr]=-o#sYFh5\IS*j.jf
XWB"@BCYM3[D(I7CXM>Ijl5SGRN&58>g86`@CbO_'I:rjdT8<?BW]e>S2+I8p7]$*7*9)SX0!jBdbKZM
e_CS&k!ncF?#q7Rp[c36n*eqP25!r%lDE0>gpV!9<C%J!\NOJeX<l#b1X-B-,hLf[IGXs,X6iit-/^fW
LZZU%:(PTd];F\YdjqRNl#\elgFgb<ih>6(hN?r4h[@]rJ`H\R5I%WreZ/i.*]rKi^PI[+3%O),nH%_f
2r4=mW`>#+ol'Voc3oVC/Lb,1)LdQli[EL)5SmYlphWhtp$.n);r.-f0`"KO%;QGecF3!MN'O#8cS06P
ETonDO1,8^.sfc#CEuFYXdX[XV<ZoSPK(3/mE01oe;mYepu#',MTbI"<NL9[9_:XV_QAt86<+%lHFAaD
,ZXYYR_u"8ZZtTc2MYLWOT!_c@&\C9s!^[A`n_1Q#FfGg9foWG`WsuLMX!mZTF(:jXXB)F%]]@IM!qtl
;o@ATY=<p&[?+Q0bHR*))r*b`?J?RlS[Ss-4gU@D+oA;2V>T&mps)GU=]Y(M?bGb=OTq$Fo=1iBkT>K0
9O/8ZoZ8SgLg]^QhA*gb+dums6VrJe&\gW<&fuW8J$>jir\u!58LFhg.RA:b?AlYBT);/,;JbHj,*n#4
[O0<(5]Ae[?,&>bL*h!V4st7pXn.m9#enDh\Pg4Iha(r#A<%dY"NRpF-0l@eehD2UC#V6<0d;Wi;FT7I
6&:#J-I_+H]U61'VVB618,bp6j]\Jko,-siSR5"<mT.<4$%H7)U/=1GHkq^Y9Au?OdS.NqkcK]PM#PT\
GP(!j/nIJM3EGqW]4EjJa*O?I0U&tF5MdM&^K?:oH=EH[%.j0eIBVAlS,/T5>*^d?<De&bXt<SqJD_Fh
9pS"CE,D>;U2$m\kTF4h`K^NYh;6;;eKDtN\!H`[2N>:@FD723q80/32Hl-C3RSA74>LlPR9-[BKa`HV
4_)BS2^Vt=g)b0Z(%LI'UIV-;fW'+2USf"CBSuNgeg1#D<W.-Hh?8qRQSGA)\S:fn0$RngpkEB\pO=fe
?\#8]1]4!ViF]LW\K$%;fS*=*QoY:m&9#M"3%8<?Zgf!IrC5#q]I>B%RFT._1Xr^eF",Oa=6EhGmG=;X
XsiO0?=4^rZPFI'."47+SVlFDQ,2gh93a-66#>+ViVljTd1VLN@5HJ[mBQ0iNI@EVh"@Njf#T7e$?M5V
fs<RU=?_RW+N=Ykp*>aZV)AJqkeZ[&*SU7p'XMgs,>(:1S7?fo>@khb<LM^V:^5F$WP,5gT2Vlf=FMVL
='V#7aeu2kWMSnI4+6^d0d&qB.8!T2@kIA^0!<u;H,V>bMEF5sZCOIsa.-)D1ss5S4c?R]<]Dn2Gq/'e
1.IcR75s1KU]#$--h$)<4rfQr_AkL%?(Sn<k,kpIqjNVKapt34Zj4hS&+u9UrG^p8c&8Bn<A.\Dn"Y%Z
l"?/V,2[YYD1r6kd>PYZ:f'SV3"%(aX.gF`:DC3Y9+Kp1hIJ\sl+JL54gRn<Ufuf0-0Es+jE&(^`;>#)
#KJG-lo*H#m_7C/oH`::Dt:a0UkX8)9Rh'X!48'8#MrGWO:T-B\U<?&Xs"kgR=#8kO':!2Q@&[)&,F"5
Y05pZ7Fp4,Mi)R<j9'1nN[l3=0CY&6Q;(bS\HX3!n>6&E&$.`p>s?3jj^<$arUsF4.bj!um!^I&I`R9g
"0BTLAe'KA@)g0qnq!jl>WsiC+M.c\b-E04I-aouYbGfVd"^MPKj7rkOhfF`aKu<ZDEFn'4`D-a9Z=kQ
_;N[H=Rpc#nU:EN?Z"un[.&!_mDS>@%_qu&kHFLP^]-[Q7Jr9d^&B0oX%at6<dENQ41<0`f)P[.^RZGG
gQ2@N#MUmq~>
endstream
endobj
7 0 obj
30549
endobj
3 0 obj
<<
/Parent null
/Type /Pages
/MediaBox [0.0000 0.0000 431.00 434.00]
/Resources 8 0 R
/Kids [5 0 R]
/Count 1
>>
endobj
9 0 obj
[/PDF /Text /ImageC]
endobj
10 0 obj
<<
/S /Transparency
/CS /DeviceRGB
/I true
/K false
>>
endobj
11 0 obj
<<
/Alpha1
<<
/ca 1.0000
/CA 1.0000
/BM /Normal
/AIS false
>>
>>
endobj
8 0 obj
<<
/ProcSet 9 0 R
/ExtGState 11 0 R
>>
endobj
xref
0 12
0000000000 65535 f
0000000015 00000 n
0000000315 00000 n
0000031292 00000 n
0000000445 00000 n
0000000521 00000 n
0000000609 00000 n
0000031268 00000 n
0000031746 00000 n
0000031462 00000 n
0000031501 00000 n
0000031603 00000 n
trailer
<<
/Size 12
/Root 2 0 R
/Info 1 0 R
>>
startxref
31819
%%EOF

View File

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.18.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0" xml:space="preserve"/>
<node id="n0">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="249.93318675648084" width="150.73691016175417" x="379.82322525840146" y="-15.0"/>
<y:Fill color="#E0E0E0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.609375" x="9.991977284848872" xml:space="preserve" y="146.38688006175698">Internet<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4337124711251771" nodeRatioY="0.2841945985857549" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="402.28247680692664" width="162.91206076630084" x="130.0970161695911" y="-19.152021620717733"/>
<y:Fill color="#E0E0E0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="79.45603038315042" y="199.14123840346332">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.970703125" x="9.113003096740954" xml:space="preserve" y="302.121484753948">Local network<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4440618266451515" nodeRatioY="0.4622397449460143" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="283.8426393358113" width="150.73691016175417" x="138.89277718906638" y="-15.0"/>
<y:Fill color="#D0D0D0" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="86.833984375" x="8.098407213028707" xml:space="preserve" y="176.37212114063328">Local machine<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.44627455741040206" nodeRatioY="0.4272958641151755" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="97.8883879466967"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="82.333984375" x="13.8330078125" xml:space="preserve" y="6.93359375">AusweisApp2<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n4">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="97.8883879466967"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.939453125" x="22.0302734375" xml:space="preserve" y="6.93359375">eID-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n5">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="-7.134920941481575"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="99.255859375" x="5.3720703125" xml:space="preserve" y="6.93359375">Service-Provider<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n6">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="-7.1349209414815675"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.142578125" x="29.9287109375" xml:space="preserve" y="6.93359375">Browser<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n7">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="30.0" width="110.0" x="409.06939432176046" y="199.59487324412942"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.029296875" x="10.9853515625" xml:space="preserve" y="5.93359375">Update-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n8">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="326.6678526626905"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.4296875" x="13.28515625" xml:space="preserve" y="6.93359375">Mobile device<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n9">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="32.0" width="101.0" x="171.45265436079177" y="202.91169683487496"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.01953125" x="1.490234375" xml:space="preserve" y="6.93359375">Third-Party App<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n6" target="n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n5" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n6" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-34.70611583776903" xml:space="preserve" y="28.92603874253608">eID1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.34674322102171" distanceToCenter="true" position="right" ratio="0.5329867452764283" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n3" target="n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="51.6604446461962" xml:space="preserve" y="-21.17213706476275">eID3<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.10572917405711" distanceToCenter="true" position="left" ratio="0.5105195151628484" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n3" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="54.54734563920826" sy="14.111612053303304" tx="26.398238238132535" ty="-16.02468140151575">
<y:Point x="276.5" y="269.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.77734375" x="-59.55753414077361" xml:space="preserve" y="149.35286035153882">SaC1,
SaC2 <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="1.8153536324476993" distanceToCenter="false" position="right" ratio="0.7870346060615276" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n3" target="n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="54.971035876728166" sy="15.038770784339903" tx="-53.5611005145696" ty="-15.000980657566373"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="22.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.220703125" x="46.57289611424528" xml:space="preserve" y="33.28619210241317">Update<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.307275195559956" distanceToCenter="true" position="right" ratio="0.6189315207731947" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n5" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="27.54734563920826" ty="-1.888387946696696"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="337.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-101.58040528438903" xml:space="preserve" y="9.329639509720586">eID2<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.099869002821848" distanceToCenter="true" position="right" ratio="0.3864086416472374" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n3" target="n9">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="53.359375" x="-54.679685116747294" xml:space="preserve" y="29.445254182778">eID-SDK<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="27.99999999999999" distanceToCenter="true" position="right" ratio="0.5445528599796611" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -0,0 +1,468 @@
%PDF-1.4
%âãÏÓ
1 0 obj
<<
/Title ()
/Author ()
/Subject ()
/Keywords ()
/Creator (yExport 1.5)
/Producer (org.freehep.graphicsio.pdf.YPDFGraphics2D 1.5)
/CreationDate (D:20190314163036+01'00')
/ModDate (D:20190314163036+01'00')
/Trapped /False
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 3 0 R
/ViewerPreferences 4 0 R
/OpenAction [5 0 R /Fit]
>>
endobj
4 0 obj
<<
/FitWindow true
/CenterWindow false
>>
endobj
5 0 obj
<<
/Parent 3 0 R
/Type /Page
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 7 0 R
/Filter [/ASCII85Decode /FlateDecode]
>>
stream
Gb"07]8gIEYpH@3=6'lG`nq;HU]q#?JTHO2)Ze_H+eg^#qu;6@[?d6V4qYm\$7oMj5RP_=iVW!/%s**.
R<a6SkC5_Fb<LKu0<iuMro<2=kE#Z<nbV2,O&kePit'3(PE-fhYP@n_gQ2C2j+!Tnr*TKua8c1oJ'1(V
qu?N`9)Ie$rqBe"rVuaJ5Ou#Wrl[Nt*rkmtnQTA`k3L[7cHXtOe(jk(1]3$>rd,1U-0L:i=8Y:TIS=F(
Gr3QprpoNF:qc0Jp9N!d]oD1s55Yq6DiMfPrWV1$r:]1.s3m;/:ODl[./o>TG[#6sqXaBP1Z2X>r=$3]
rO0joB.Q>CDgfPG55YrQOOUE<gFp;#qh$Opn4/>p>EA&AY90u5r37;kH-7(=fj=sKIqZ%Cq8FHT`_bP^
c?&o2r<JPdX1r/C5*1Y^J)70-)T]Ces#TY9hlAhGL@om$l<hpl^>cmjb!/F+s7(_Wqu#?mV3Xd#qY+nj
e^Aj"rF\<aY3msmr^XGAqYC.2\nh8;s7]$3bIQ3qijY$WkY1cqD:oT8orY[6^0u@0dk\.lO#IoIDl#)1
jF!HWbiDj<hHI&Ai:U,`:T(n8RXX\6>]N"Vm5]Z.oX[&/s)E#HrR&28>0AI0DU-arEmQ3\j4X>gpte1*
7-hu)?Z"sJ6\g0B>kBRdN9\'$N:[SJ\!G#9Y<sgQ%-Z6e#PC74X4GH[Fe>hBch5N&HHZ2I!_0QDO0m4i
mP>Z%3dUgG3n22hN)q9tN^)71SNa.'cEi6I.rf6FO,^ou[a%JbN%$]UZ%dY?Y6<?6f<I0FmGKbGT?Gta
Ho@l4FJ^S8R3[7tGiAZaAu!)j[(kR%EI7[8*gd8VYPqSJCnBM01,$AfO43^o%H$X=q6(V<;!S4Ud>Tl?
IL(#tX`_WAhC@_lkT0,04$?cfiDMr(bm1Aq=]q`i=lQ*;n^]5RJ*`/m92./<05L0.<i_ai5Eq2Mg>f88
3Sh$4<V+P"hra;)r'@1Oqs0F%b*qkg_l=4.+4LcTAPcrM0+Za,?61l%*,ij4%W-b*ZUi!\+jlkR/F]@<
dMH)&_E<n5LfV?l-SXu[loqLYSlKLWU8LL1CT$:u[*!?0qO=`KU/bKeDfqS0EmVn_Vj[GUbY+s<c.:3.
R&,P.=6c`E:4G^?^pO3t$Cp;)9:iXGNW%)?kuB?>q6Ld5:F'g$p2ORXXgPh79Ji5bOnn@sHsAg^Bk!rO
4[%chV3N$M36'fL>ea.@,<!T,hBk6,&SD`K1lOWEm_=/J%dE+PF"Na9)NNWN%RmSs%0sX2(u*^<D)qWf
cPT/(@)i*7gOkutRp*(<k1OCR!J1"U!or4F_!A+uT(/@-Jjunnch#E3pZOnF-U[(+PIo+E:Ceh%fg1nS
J)e625+W#:4/+jHV[O6!))sqr_Wr_4)*&O]en1^!HL/VkI.Vtrqje>O'J!eVTO,3&TS$9`<rsDu1p>mO
kb-Xa9-?SFJIKStcF`Ymhf)+/_^9qb8oY.?*G3hPJIZ"g]*(0.jR+ecTX+H[5\K_;X_?7V0F;:]()"^X
@jP<(/%o5[f$5=@aa%&O>Tkc`=pL=t/l/O'mOu>VkF85.:TKl#G'VfXFVX(R#@U>cV`AdhB%V>HIbCUi
["Hq3Q`!i@>j#f9icmN9WkM,cVk*g&:D9@_*o54h>(c6?02F\$P">Q4Bpb_sSYm>4Sd$b-``E**Q-ioW
X2TA<kuF=k[8*@JC6th=]LS%69^TrHR]k9'Bc)7>Q`$D;O7IRARUP5M(r*!g@ljRUHXE@fhK?gZXf'Kj
q(H*iK.e;K2m73YQZcn]$<fF1p,=gpem):_q.aOB__md5Wjk$U]-Gp4%#:_,.eiC5*1Xm;s,'0b3B_.j
X[7(`I%NXYZ/op!IS\:>`M'h%QKE57Wl&tC1M=.bdTd9RBg,_P0k<t!_073?Uq&JYSVuBo/pS6&T[lHA
G[6e_)F=TS">,L@6Mppdd9lnc46@X[DMEstd<0V.V\%ZSlcAUO&-'OM[NiPce++;^nbp9gB^gN;&PTm)
&(i!'=HC2/"Tp>`#AS`jYM]/p+9'8Vs/<aU""EI/kFLn4JUF*dY60:R?JYE4XP[7/pe(>srnF4GcSbK=
LS-\cdU?q_cSkR%@e&^X`P=^Dq^Xk3"5Fs[HKc`(`t'u5aJ]A#oIO(WAnZc'6buOrB7\N_0ssUU\<]Nf
NbglL[iK&@]DrSjd<S#L17!JMFH)<1$I.oI;2=lUMOuI&s87[j"fauS&R>KZ,8?U-f?""Z$'c@`V@oP/
T'8elpE!a2Fb3s`7c'P,p'?tm&-iW`kr=U5ig60:9(uhEDj_s.qCoNT]$A8e<ues"n%6j>aNjXu4/>cA
&R4(-Kf7s>H6ms'pUU+JZ8#.%fU"QR7%?]Ycs)RN68a0D&?J^0NaqD/q;o7PHKhW$;s;N')&WrKi[M\K
AM=.QWrbG])*UJF))?$4"&K2qh&&2qi%gK:GT0N?QSd.g]d#a2HbNZS1Mb@=*nM-LqE*,Q(eW`"d<a1'
1l^E>K(2&#SlDQq9jjoB)aYWBB?XkSB/X-g0Dou\ai8O:+I\26<Z#A,-5S49CdkA4D0G7FjsHfqB>2Ul
"(J@,HPsDqAJeXZUNIr1a_%E6!<)$W2E;(u*"&q7_(X'(P)8rI+ZV#UEX]ieF:$fDk+O]4C>;IB.nP<`
_@OG,k]l^M<\Tl\K3i4,+1&0fV[Am3k/*m]gZU,/G=iNgKKH$Y?/_nc:'7GaF?+;\cc51A2Rk95=RDjk
_bD7kfFLom.&EYN]@#U]Q@_]d7[^UP/)/:4XZgRgT6.YB)COmUZ+<_l3Xo%U1kB(;)ZI6+bu-3Lis3kf
UGf"7FF?u#rDNIe;QD$GcP/nnm6tNWg`Q#Oa>Gd<WjV<2YQQhLhDb;dkB.R4o@NNb+`MtNN[\qR;).Ko
]OC;rc1dAC'^Qf%]CoYt#JnDciq%n@XF-<tfOLmYKm$^7jhe\S>2>/Drtsa6[q$F^(In^P9](Kn=Bal3
pI=DCV`qE#Z^9Hi7lrnj5!Pg8q/j9`]?A/tO5c``A\QNn;0"STG0hsW30BRl0U#ET]PF,Z\MB'&ZO1Yu
_d"`\FF>Li\YA^^)3be9HVEl!G.>X_YcmigOO9VB&S7%3<7#:>C4bl[;%`\E7Zg4J/L<>7cm+N?`eX<?
>-Uk]\4QMl3d/fgiE4^RnEJTTOq0O!(+el,purh<VlrnjORRAtSX%Ll)nta6,N6cRpX%k]ZT9*K,ImH&
HO'h"$EA$4:*"Bd_'q&[m\(sc@IBhd+e*i":q28h?\@`ZO1BYUi>sajmNM5&KmO)C(qOk74Tn-$KR3tW
KGm>l#Nbl*%uKbdHO)7=lQ4Ke?2'HMdli@iqfE@b_48D+1aQ5Im$s;^Z%l_Ap8:QVY2SfBA!YI>E"<so
;RhLB;3*RhpQ-VD%iI;":i#,SjrS91gkU7?I'r$S&&B6Xi>t&Y)sc`0RW.sglZi_@K5qKn<@0$%HY=Ep
f>9\XWCsaJ8EdX?+OAY^#G#0d7sj7D_``+ghUamn*@0E+m,M@&4iEPoE"CW*?2"oc0QfS76f=h;pQ2Vk
LYu8E#7tJp5MSWh?*iBg\?Nk6o_KSU\O6CF\;,Bm<[Z\/mr,^kHBu/#m\)8lC[RmKkXq"baH=)i%#6pA
-ZdtTintOEr)Xm+U!ldS;;iQOI%LW[c/8$h?84tC.h;<8A%@@U*7s-j3q'B)P`FSYg7"('f@/$7n_O'"
d#NP;ijU`!6O,ao\$'SbeJ`J>3PXs@o'VODF1Ye,p.4Gno+-T9s4P+8@KV\86fE9='[t:>rUb9BQfh^,
e,c/S+/@T1/'"_arFtTjLjQui^%=7Dp6#N=1S3.PU)fdW^9D:+*ONt`*KB(-/6YQHKc;q.QG;3m>OoJp
>+YZWEk<#K.UfZX^E[*b1_uY[h?p71ig9PDmCr%[3$`;=eX=LYc(['0[\I>8[/=KXMjEfPf:p5cbBAdZ
4dt>=I%B/=S+1hVqhYpWCGCigHGcJ"jLm<b(+k$H>ec8d1$s0MWnc0S37)c*f$I\C__PPRaWp-!Hp'su
mDh?<O</id_`&!uRca*s6gH^Vd=G&p@lABZEs3p$Mq21kK>@P*CF<]_R-pV=mDb1N%*((CSu-:pa)l]M
363HWYi9'jr3fJ"H)n<%4/T@`a"a.Da"Ef6:?PEnTt*m"`8_ekUb3&i8[$oi@7Hl?-C]AdP4Ih0CnLBo
1T`36f^\##h"QhIO8i!tFQ\+]jm,//mP"Q7?Ro*67j(c6R&*;XPPsHZoWt"YY4<B9nXgTMp8ph&#A_Wr
fH:)pO1r71"'o7=C4Bp#htb55r`77p@3k"FYQ&#$J+\!qeHReVn]s;I;ZlhZoj7t'r4N^'l`bhV6/sK]
=86t`g\r%HrM,Bj#WDU%oX'*.])UmUrg0DW?]OQ(3P,7Pkl-pDqd5BOIlY+?ZQ7k373k'&]b(L+BYF(\
FD!Z!Y+o2j-@Z?BFpV*5cKhftISLc<9etHDUWj3dGFLM]B5d/OFkAj087l`upZ8*0W@5AM-fQ`eR\,A7
"et=BcN7I/q>&>2NY23:lG[BEn5D$\%/_9.Z[^21Cks]S`P8HR9Rjm8<.-A1gXrtqrQE)0L,4:+a1!/-
k_Is`SZ[roV>r-Rf5P9Gq%g*Z=#0Ym[U_A\XWQGkoA.nRQRb4E9Gl@QTX:p"rI!jE/TbB=\bt*k'SRsG
dM=8Xj9hI'gZ8d4rjfXG\O^b[Z/c63b\=Xn_,kfoEeP"hmW.E^SO7GibSQ"=l'^t;O=PlVXr'(-ElNS'
ZV-=M/>gbSb5%4UQ,IY'/']#Q"_6_hNl`$R+]g@9EZd`P2!@30j5=afEQIKf)RhSradk%chu[QHU<+-0
L:Qn)=5Y^7`T;uNO=Q&QXuM_PJQ'+6,jD0N\6K'cnUe1>O@jPIDW5j$$67KOE0abFDabt6/%pbjRoB.T
@6Wl_j1@fK4hJErb']o;G>WCC\KeZEf]<Il1LI\50[h%qcRR-s>co&72jVW%XOu_h<uS/sjDs?+aVDjZ
/"d;BOt-<%-4R7X&c3]]K)I!@%EX/BBftOL:];n!pZZ_/niCs>`dG@$5N/2P2[[/=*h%E!-&u=*SP-K\
j_+f:5,bRM(5F-D3"2:qJR=H)('i`dm[h6,J20AD-0W`>;MG!r4tM_S"4GrH^#Tr!hmO?Gi\2>f7jf*r
MZ[mlKhIo06WsY>a1ON=:S/Ik:Q+8+>fO020P_maNe;;.AJU&pYW*WGiolP.AoZbBm9t#,5nZ#4"$Ki2
D$opeZjU%W*H'N67h-HcXrr,;4F"RI/Iog=EF<*HlC^qWs6am\$ban)T7$B9L7`Eu+p.u)^>[Eh7\SXQ
g;0_P*I\iFIT7IpmbkK^[7BudCE0#-aFi=X4$XmYQ@p9O_]d@D4!(%6M?@t<pCO9W<r9gTJ8X!Ld",l@
nc8W]8Su6Qcjq1<RY."Me9IM%,P$Jkq;VI'<,NLj4Yrl-iW.fs/Ip,:57aL>1\^"[nNH.uZKN0EDYX)J
m"dFR&7.'f`E+$LR_Sfg=ikXA`YX(FA>Ga0iTJ%3Ne74;UV7^RPV37\asp6Ri%_K6_a-nQ1hrE#`\V@s
k;PN'+>juCC+t$r!kS:0?Z8ho@AAR63;i3o0YtrPV$7p<o]=SQ"-jK"',*R]Ff>D::H;Ud*Bi:Yo60^g
Kcb*@bVo!1$3WoC[=r[`<N)8:5$ga2Y/_./_%5GWJe)XB3!Bdif"BrU'7?s035o--'+:^WjP^f-/XumW
A7d1+.1YXm81g?@_3\+aS73d:9@Nf?-FXApi/G[`+gaSp(`lFl`a).B(/Al=UgD8a$Hs-D0H!Vo.)IEh
dg_p/IGE08)t[!n1r:]'C4673&3?uSGM+2G_h[?UG"f&XMA:<1LJt:m"47CP358cWZ=6!;>>PIB0C%\e
1:%W=S74ce\ZMdU29.@W^@V*i2u]35s3EaWqSS(Z"2aot5([Q9V^_4o59/k'"-a=Gr[X#l0deW0#QI?f
N'G!os7X$10-/:F0iT]qOm*HbE%rBWj-9/DKbIa1kG\X1L[Y](Pl/MRT("6N*m\qh"k!(%iH<`C^u^PZ
?spp"S/lZ!N7lejXSm]/e:mc^I,KdB5C;<*15!?W#r^Ps7bfsg+G*[E_gU_SIcA8Onnfu8$>8]k6bcU7
p;,[Cn,]ST[cR="\S0o?9[=?hK?l_]c1>"a])Dk#]`X^NG>b'F^0A7r6XO_Gjk7u0#`]go*T:/"*k/QK
T8]Q:T.t7S\(Q/[E:iZSaSlPe.oB4<^RWms>"sdg<Q@AX<Z6GO_pm3`:V(&s[*aeK:S43org'V)\]/hs
EqIZGc?`]_H35uZ;,J9.b(,t`;eIVn&t%?ud@'Z9cPirRDpk(06Tp>GN_Z8fHGgI.2t";k76:dRdqF<j
q7-c>;a,B`XI8#W3ilX4:I6YdGFGYN@On9&/9^]#3`?!gf;uCD.iB?0i\-Eeb%Id;WG#oLL@:S@BG]Xs
8TR#Ea0"fJ7lD1^[O1sY@NZ1<Hp!.-dlJ#b;pcTFA-9.rD4SdA)WjbB_Kcu5;.)dl1Y&n=Q$aiEJ$SV7
3urtW"KsBM>CN=*cVE5'C2K]`@:'V+-`<jcN`!:J-+M.aI\9b#%?PZ#WacO%H2*s\WGBNWSm$i!`<'A?
oP!.ASrV.Vg)ei:[-F:N'he,gr/CUT-W.P:[)G8Tj<a-<G];t)+rn#T081W;_2.*_*2ng`%rBU?kG)F[
c.b:dDu#TKNF]Yg??I7c(@>)NZY2iLebZ,#&5[/g&iW\iaCTE$:%'C[`mHf=N>XC'ID@93p./eFq(0oT
a+hk*X\688HJ;6>6aAj?\j.,BboG"BE53hn`ZB*KD=:bHX3a9M%h&mcX4l4H@5G7Ca'B[aO2`-l]!TX.
b7XPR_8@FB`0[jgqQSN9JNkca!%K<^0uh0cj"OJ(X(h-UX^+$AIeimO^Kd@ppNa#B-BA&e0CYf#s$ae>
gc)a?i4o&Eot9-8r10!P3)mK$\(E0dP&V2iYIk5/o#dSj]IFU5/s4<G23PU%;j,(&Vl3VdlCcfOnd5V6
,NKRMgHo4,Ed;d^j;$N.6XJ_jYWq1`NY9s/=6RD-aHb2De$]K:H1es4/&]9R$@,WFVf6p8"3_YRWndPQ
e>JC7)CopCgU^J-.hi!*%s`j1+oNRf*4rl#6"C=JKf=d?ir%tp]Y[oYBnjO4'_:N5afC?)(KipIjAk.C
^%.'B:`f07IB"HoMNgeu<sPl(OB6#Z4-EZV],Z>h\nLlFVW1dZlTb*.nW6hkp9<UXRGLPnJ*mPA($a49
bT9$;[&c-Y4]#m5:1a,aiA';$?WS`VU&X-hggbn<KBu4#R^>!T=7WHF`@06%Sf#kr079I28pWm"0M]o4
E0?MnAZ4W=h7K?TL8Y3dW+G@%d:=ceC/2#ChN?RH>_do16GA4P'mF<N,`s>2fcu8?$Trhqe7Dhe-F&g_
,r3r6_gB!PHr4EiC0dX1<aDoKMW4E84='>4c+<5c1*cWAqN)b%oR"f?k)hIc:CQ9na@J)B\nS$./'""2
bM0&j[^A"jpHWp(SI(`C,2[I*,8saHA,+$!Lbtj>DQ@JVojpOi?mBteWJ^PF%E"MJN1.K?TT(6XB!eg1
UHU3^P;F&Q%HMH/gR>s'SMiOZNCt3M(`Pa[]uYpAD)cRiE%K`$O]p+$0,fo#7aGtYJi6@7pPRMAdGn`G
F#9S]EMWK[L<W)eVXTd-m"qBpj`W%dA%U:1e_dNp9^cQ,P_20oTFFCd)id?+puR=^pCRRGCe7[&N@"G&
0-e'8d7nCucK0:[>!@b/XMKHFlCqp]^`52LbF<42h=Pl*T_PX'Ng91BLFe(rFG.RWr\guD>K(Tlg*Yc]
Uf-(n<@)_kW!Y8.Bt1l%8UPKF\$_.c-\h5aZ-DE<H2eHn;0D5TB:mUQNsDNnW)nF*2+QpF]UI]g-j.Gl
J[k8B5).LpZjuE@ep\nIINYbi@iFi%c5#tf[Jc<V=lZnJ_k`]t]f2dM1t.-SFR()kO.Xf/E?jnM&NZ4i
bquunh_C,EBOlUtO8cS3oT+;I>J_Q\o`Y!d`#k#Wo4QC!`W$W*je(G>ht'aS)E&pZ:>dZUa*=%%RN`hh
cppDD,.aY0!j/kc"<8u_4=$\8F0al5\5kql;3cl-Rkp/ZS:S62q+K+BdsI&bX_)uPdToZKJYm,uRJlOG
B@r^k9hi*>MMKUA`42j>&]TGWK@W%&B1Y6Q/;tg[3Jk_i8?#;eE$)U%KZ7G:mI#HkC1j+*lVuqESWZ:i
\g6%/>/ja"c,hV1]$]ZYY:420jpXr,OlHtQ'!p&A,L*%KG&6QkAbjO4GPGb3;dU%'fQG<e,X&p%]:0a3
G)bZ(K^UR)'43:@6l9SD/YF]_.=lmk<c(LD,`lP(^ePYXmmL)RO@U,-6^<Ut80-!Y'/=OP&08T5G0%:G
d_?(POT+&ShqKEQ9=6sN<IV"Qo[gI*1Koej`if.(ZDqU#Huek)3nELf['sWgP0*[O[ej*\;L"CPmrlI@
n+]HsQ-'%<\6sm`9Cp%P]iR7_hMY2I@DpY\#LL,[7+<KA(AC3)l&&VTcF%0r@eS%36M,`I:/'A,^lmcu
0k`a(7TDt&7^o^hYF*Z-%3mrQ)GGuOfJKmdgISUtW#dcd_r7*nF(1NR(cBrDp^p>T/Vj%J<cSm]VocG.
jLk3@>33YtaUD.&.]IMhhs3k9;n=C@qkA>d0P29=PTDnB&a-mO<p"T_)kd1-glb.Rl6u'*f%cnF/7I):
6Op<qO>H(AHraOO#UtYrbgSH[1,t38CqY-lL+09<%3NgpDb<J0p(ct$79lMsiI(bGeTE#,^TOU\EJF@-
X^&Dh:mDQ:]#GsO<af%,k#cEGS^!@%+o*ff_i`M-e_?NMs+unWfGR;E%g4jb$DkVeRI@!7-Q7;L@)rP2
>W*8houM#:[:8TA_F)X%e(:r&CDqKlGnK6)e&FFk0#BZ$c1b!KlB3(7k@odE1</$:_d.%hBG_1`]_!Q*
3T*f1q<?l+:@I>+:lk?\7m?Yt3TA7d!S:"Wd[WrdR7ZG&mP2q3FNjs!`V$Z7pPhNr)8TIPR>g)g!,*\a
RI.s.0]\[Z@qd:bV<k+WpDWLbAhq5!#0g\GpKkGOONnW1ahb#HlV+VYV4#Oq)^$u$RDjlVRER4],L+/h
CF0ij'01JUit]2FgXo"X)hm]766E\"'Ii0=^%.Gsmg?U;18[fZ>VeZ8HJjjBV-dX.=8*QE53$B)A'"eW
f'+s#C2NE`6oWY=<p:?Zbn&36e!RmZo1QIDI1N&;$Ncmq:\-]U3V71[9*!<3Cite>-1^ZGDU34b@S%;)
LS#Y3g!S\^r3n7onTX\@f%[4C9[!KcC&MtIG<!=*f%b^TA2>teLLLIRo+g5L>Y_+h>[BNQD:og'j7tQ=
^::W;2qkme^7`0Ok2S!3W.^.]f\GZ36!NIRfA?0+#iE7palBA6Mg1&iG9-M9Ff`97?f&K.Ra[o&meLTj
Z$0!)dbVNkj+rmL4?LO4XEF>1%ed%qE;89qgSHFo/nSh<hK@n+pL<O?e#+s.EGMh'f8tb]]5u4VBAM.Z
IJ</5IT#(j]<?R*ouCChlC"h]He5NGi0nXp]ehgU=#H2Rgt"+'B"r_BLL8okBgJ!KfI:YRNVP*u]t92p
iF6FB\g'>]D)Zmtp[5l25?n*!^Cm[@fXm/ln)ERGHP^V7HP^ZG&'l,?d;E`^D5b/6rV+"kpn-a@p^=aA
D-t>8rujK48GjG*H4msOqh'BMgZ-WIhX>bSZKN>Nn]@6Rlco!\;"P,f$_oCQrk@WY&7hZN.Dpt%TlpSa
O8/nfqD^*<@#R%n`/lD$*51sUb047/Oo9u%X@/l]0PXX;QE9AgP_<)C[,tk%X9YcR`!e"/AEPV&#41@o
Bq:WQU%e9>"Z_+#Qb/AddWDc(%9f/`3fW%,EMD2i)%4&Wd6'-%^G,mEe,KYm/Y4J&po%QD02p6Je=-je
G*0^a*Tra<H9/qLIJXB>+j!c\.ao;*7N0:8l&@m]3Q&;H;Z;A,<Xd/T0h]#FB,&"/Q[/L^Vca2TKQ55)
37^FP$^tudS>V=s<hU<[d_Lt,#mh@'8fnWbgW2NUHis<$.YFTC6b(J)Ah/JsOaWQK)F\p'Nd'o;QF@oG
QDRSS!@e2M"BjlT$;S?%9h:4TY)u`l8PG(l<ZeR2aoa)N@n#<1,,p^t"2m9<.^NFgD%5R`d)4a[;$cD6
Eu#M(LZkKK.'l+.SeYidZVkW&1fA%:;hiZ%g$,'\C.Nj:Hp;f8F2(UVi1-63k;1Y$#8b"0ktS^Ko1`eU
OA+)[1c6G(WP9nI>-0s]2g.jc*GZu#W\j4?H_=I5bmHG'R_,93H9?M>`HFj^`Z`dA'k-"p?C#e=H"[A+
$A*nWljfQZUI<ehTRXpV(jbAtEk\Y<hEe:Rlo1J&,9SCKFg.f/R>X;_3]eSQ@?]BtIU\DLSt/o?JUXKF
VcdB3Eb%(P5^u_pfKe##Z1qEFohd$je@OL9lE=D6Q*4/gh?(Fp^=%#3KN>8]rc#N3]:omMd/DI]GlD/C
X3(8ACSgtJ^O1K#?INGld#r8u,R-o6IVU*JTO.0*D(_(PQ0JO;BQ02.9,fA`0*8<KfT+2ESSr;]NZ?,<
bs[>]&^WlCa"Tmfb9$2_N1S&n/UT?q*Kg(a+*huST/fQT=Y#*PR3d^c;#`I0VW;7<l#O0h`f,j8AN9RG
Zo=7!o,6cO.tOT\GYH'WhVpoZNlmV?1FeCSnO8t>5JJWEGQVUO/,oO&0('KnJ4s?.*W*fWCsVDVPJ/^?
!5(Vf(<.!t;Ef&N[)L!#Oio,EA_%:*Vi7Z0Qog$0oo?g$j9[/&"rspdougprKD1OlO^Rb*5#>^#>ZcV"
5,bB]#GoP_g)mG$noG?8*iU>724!&CY5;0t1P\b)2B\EVDZ]UUKt:Xdc?Aj*H$Zon.Nk^To.hRkc@9Bj
5;O8p;LX-ODlm48JIe:X*,T3?Zbj>S<H8-I'R]Atr)W-9$=q_iH0Nj8@<jU>H*NeSh6!F&rMJj&D95k^
ietdq-@Aj^Ytgf*jl9@cG^WE,P?q45PA[TTJU2fE7PuJgB<[R!\i7dUO?c@S/[naZ7[$)C^:fUnh0_DL
5TY7p$"PG0OK_A#SPcm"6KH(080GiGXH5[Pm2e$[e!GA,OO!?j[7fXQ!pKjf8g'YkNfZMnV&9n:kXqM`
-?6WVqk)NHTKsB"Oi\q[:7kM@cQnUk'mOMD;hbi0OKI&#!b(`s+b@r1.6f)>YfdWUgkLdPN2=)uW&$Io
>)RQTrUTb)I<iQ+NYGCX4rklWGe.NKIE2&oc8Xr6\GT;#EkB.qOU$VumMI"R_Rh'lcgL$bll<&@d*jAE
\&]MFKLfXX'h;mm-7bs/GSaKSP:'/qiR4JrbNE]VZ/(JM=T=.p)V!>7;hq8#-rAnO4KX?&_XmW^s8GF'
ohM-t1[p0H+:[AcX9>eS(K,h&]USYSR=VDRG'NW47%pA@abhh],=lAk^'V1u-!Pp1)skXFY4c2U";=qU
oKt:U/*4Ph7l(i(2Z-u)n/"5Vpr^NX?M,#kX/E2MA*>AJ4nY&m?M0Q9T99C"`iH![q=CS`#[]^u^V+s9
Cem3*[T>V'[\o^K*aUuurP*Z9n8lk;2L]ES)jMR^nBa2Q<1f#;Db?JYYU#_<<OJFFCEV02^f?JV68Aj7
E-1nuR71@^Q`$.GK'-$S$[iaP'IUNAX>QKf%1D=D1(jTU)TZj^^K`li]'ipH55A7r?'/@BRj$MSneG=:
g_oq_BtnbnJ_lkrK33P(P'Gp)9_H%Spmg5cT5gpF7iGXS3UY>!Q#XsYX:3ok&]9ZFcgk*pC-"7/=7;Q9
:l\RG?_O>;:I#VPF]ZUmZd)Y&Wa&?nkbZ&Qc$\q'?/0LFc"aPI"*]s3VV<_LJfa=/&0=qnfFKIfaf*Y%
."$NLZY&23It,AdD1sW%f.XktVf'*]q/Q9SN.XQF2E(LaE+n5nE9fpKW*iOO]pd)][L^ogZU;6--[i(Z
\F:0QgY&Y\7:N;t+'UNt@[RTeX%IW-*`uA[`1!U'B:2c3L-,R-2E@M;iLSV[W:>:Xd*@\X[],H[/,]IN
;/74*h$H%)k*Qt]D8,"r[G`d#_qVcIXD6o5SG7#oj#A&$P[;)TSl@>'1ogC8r6pLZk;Hf"UO^XF?^`hm
,;u>0pO6=h_HCQ%pr[68raFWFeBQ/\XVEhQ8g?oaF^"1(WqeqL$c"4IemajRXgM@ST51RE.JtMU-(Ui/
CN\]AX'sI\q9/,..hM/c1p%L":#S#3R`4qtoWLLW-5]HO\$\e:;JX7]lbdWB4Mu*S=UMp#U!Qu"gXT3L
a'G=I-t7m6/'nX<$$q^UIM:X:DejhQiA^;7\lrlNk$D`'q"9%09amNZamk/D"LH#4I+)921(g:HM'_]8
kBHR[q6hB8e8Xo^SsX0\'o+sSgd<1Ji9)6kHY2>+m,>+_eOOBaI0?K3oF]!7O79WPO7:DfO*"Qp=!(j(
66BVH6Q`T4LH]2B_$g7Tdi$=\^W.F^N.+PYljn*k@DDSps#Hu5s-2sMhWYGiFjm0E_]eP$KD:!J1b6Jf
3eauJ2KN5NjGRlOW;f8t*%!3(56am`a%1nC;&^FRSRd!)$5'[He^'_M?cg2]6M,),2.5o&jI[2fe(d#]
k*=<^5;(g#Zdir9TDFFFOj[Ohi"sgWZa+RTlpB%!(4*I6EP#k+C$+3k%]l)!JXO,Dq9AboWS29k@b4OY
hT?_R@&l,Z@6)3eKufkM.mHGbGcUH1WOuTlC9&ms2&CPVc2q*Sq7-%Y-P,512BKaXGD$7lR6ErDcI'UT
pqGu0BJ.h;ZSgbPosn`$218[:V<3?m22h,JlggIZBf:s-r^>IUbaVD[R^51AX?#>l5Im]Ni0MGS:AYt?
mKn9OVe$M\Ik42E#jtj6eK1j&2*p$(."puJ8iX=.J(pN@g7+'dii>lCa^1dt$AI<HVtE9aVr7mT6oK%5
=E>c=hb(C,"P9_8T_u%VODR.tRKI$C#d$*WDD)hbCX.BCG*Ta"X=erZX?$!Qhg'&/KZ#Dts#F6fp2Kqm
_75R#:=5V\Pt;Htbo$l#ag%p-qk[G:bc9OOR^92d29-c74+klTIJ4V/=EA`$LG`.4Y/78#8%2PeH7l<[
r\?<7S!hWE0lP[T.m2X2CX1::FbF>NnX&k@kh4j;bE:]BZ&:C/(%/6H>:2duEMBVi]YcOlo1OFq%N*jh
(?5,js66;,^=[JMfR;BWGi.@Rb]mN#/#DU/U=di5/uZnK@(W*$Q2k:0ZH-%HpiCG)8%-WOiPLbOb)4`7
2N:kSg\#R1AL1-.\HFf4]!X#"!@R6T,dgQSaapH_pS.UdPo3\K^Q>574$E5;0M6'N9gf;nX!Y/m:`*'_
[MG2@=hVZY]*+nh[:P!dc:_Dj/4N#4c=Nu?RdE@794e0f=3eDE461)^(N]2KTkgr0o<G>H'>gJ$S+!D#
NJ?"o_O:3]1N7VsP1K=HhGdY@<B6,-$g`Mbb/-%#N(^bahgO.3lrB+tKBN>-d(TVTWN$AeG=HH;_C?oE
#\QK6cFe,!B4'i4=9GfelP"Qi7Q\t[kNf?-oKQQNk@*D7k65G\J\"VMEVW$G=m1l=Zki0\f(@8MF%U-a
NAU4*3n31)I-Pi=]NZ/W:?#ff,#>bg.8-Z3D<:Z\Bi+s.20,R0\ZO\pV8<s\mQ"2<pOd7OZ2g^\AT?f)
WaW58q9(a/!EtO_(4<O0.1<Jlj-0^\4\f.;npdBVfkDSq<?P?'1OBl.P,@!7S>G?@WhHXuM'&WHk`]:k
'tD43$[S)u*2QaQR+n[WqpE!lpTT/D>$ZK?UOSf>i-EoR21*lX=e-O^S?ee0o5Vp)GO9KV=k=pJq>?7.
P]^^VZ9n?Wm`*'=YP;j;XiQ\XNN7bG!IOp%V]S)MAs1bYlfb$^25WlMND'%]>foBWND"25SZ4QRAPM2O
0C!Cc%)$F]lMoDEK`<LpWb3>i)U&eqBD;\s'uM)opBAV/s+F4c5I#.A)b4"tRm]-&dB\J*1kn4ImSKGr
(m/`q:8-[Ej1<+M4@MPYMJL=.V15M>Dc?uJf7BqSMBPFGUiosf6I&pr,(HfUAX<1oN2E>6G%HL8@^-M.
9-!!F?cKQbI/So$[K8a>.mOa9icQLT:pPO\(&V5$-.jRHl+4q1(p^^)\!<*578(`^.t+6ENiZu5Gf1FL
Uc^.t?#dZp0cl('Al,\"d4`?j"fB99JC/e_W#SC1i[pSk;Ac;V_nmUHW5t8`M[/Msct'7@q_"2P;sAuh
MFi;1PYI<]NBidj2'6r/"mW+6&=DG.r2%s`pU8VGnLS6n""2J#AuBg;(#$fPD-l(t-nD[)s40fUhF\s1
4KLK"5n_a2.^$ja@(=Q2hc?iR;:A2rs#n)$?f&eC3mjtU4.ZaoW#Il]jsrF3=q=g<Ni;d]<#1Vc<dH+&
QKsP:pI0lr)LX_:Tp2/c:YX-mTqPdJ[YI%FT<4F0/"]I>eaSr?`ab0`'2d/G.$CpBAd!=ZnrKp:(S"`j
GY"fH]4`?:B:+%:F`d-0WmU*t"5I-.g1G^BF^M&dQ8KIRX0&?#f#kQBr$C?DC`\sip`B$iR)nlmCu4_'
CE>^31Q1PZSCuofKPX!3_<gV\ce?RoP4l@g0rF$oDP3[Q4b4I\^bsJb+ePQAPn`i6:K=?Mefm/DgmrZN
MoCbH.Kf&gAMA$;5$Q5<BM6)u>*sUoBOQePX]<YEhING7-ZM`>:acsY=S>E-_,9Mee++Y&1Rs%O<MC1t
Er/qLAL97bLaoEg`)nB%)lni<o+Guad7*Q.j,]+d#k>]@Ia#jHldLgYa6MX3S(h[_T?]<S?*9JMCcoXH
g<'bXia_d0]Y`Z+.-!rAoW,88f%Q=t.4\=On(HJ*aoZ4()fn;&?:5p=:bHKA^NsU42U]$DEA^a(iG))]
*_;Du]g#^kIA0kmSb;>)kt&M+InSB8,J/P+1[=;JCV!-%gt";7ANoA0.=$f_Nbt"C<?=r6`Op"Q=L"*L
ju(B<oIPGJ4A$*^-!Ta`I:jsKY6^9j)"NXLMheV!9p8]8A,]$nh4C1G=7tFP&R*srBo_%gJ#tU%.3f:o
@ombQQW2h]R6($4R*15Vq-NGgI!Sr`m(mO"*s\h*4aT@iok/&\8YendSpu;sn*oMT@_0<=fMCqgCc);7
a7DY]s,,i`c+30kSuUrD^l\QOFB-Fq70$ZYc&3j=X\5u%q:p6FITORpaTajjNL$W>q!+FKkLq?5["os2
3/03eLRttKo6k3<^tfOI?,E$jna<%_m#l8!AJo?.j-IjSmo'q?)GPcVV[V?[JROE@0E;gU9dZ"1bEq(d
r%MF_+eGOcnPgLAWtN7_X][cf./2H*75YN`'^[3iph"+U[E!8apPeS#Hdl)(]pTNqE#6R4*q#oaZTKRM
.5XQ`T)B_4\5,K(e>a#b-',lIg+RP<B_BMgr,FII/bmn3+ZWAKTKhL0QQ>7kVA8?^0AdAt1tbnT^<__L
C0`(0YP)>]+`=ATitV40-f`b2E6MuYPPC$)>`o2pWZ4g8DDJOjIBk1HhUG79Y)JMog!Mmr44A%`Z'uAg
C!kq'Zag8MWAh`/Cu^@O28q<91Kic[q04(J7NosHX[_i?4ks3u`!"=h*`gT&mJcOAcUBpR8Hp%-:`7t2
<(4dK$Ca'J_!/E![']*e`N2YO8d(Mao9,O@27$nZU0;u>6qj$Ue,'eiafO2*6lN+/phVgG/npT1n$2Mj
@O$_T*#RAjFp,d0;@aY-=iD25['$33CK3s49W&V>X#k6$s0J;.b[lo*a)]uHUhn#.OVm8fceqEgCALr8
B=i=he[+!UP+jh'B&BoOS,1<]f8iQh:%Zo*6F+rLC-GGJ/3(UJRb!?7)=siF.N6cXgn?[/I!82,h09@+
GEX=AoDR=(ci'lr^uF(9AB-G79X4b%EEirg,tVU5*P=3R>3GH_0q3['L*>5)Vl2kd@nuauZ.d)(s%0J.
CCSrOV`:kja#&:&bDs+iX&^$E]7.Q*cfEM\Z@c4hgfB]Y1YK%#&ThU).W.+1G4<A3O<'?dFoXa<`E\k0
#Bh1S@isHj%P*7Q9<);Y3*g!sN+ZT)gpM1U0paF\QQ7T'JRlk4a-$F\OZtH=<Y@!olqlK9\'?:(=20.Y
Np*?SbjH3bm$cJiY9"q/mP.m4HVbcY2'+q*k0o)[rm(;f\Y$"YoRk.WI^dZ=gUhi4ZWc^qaie+\qOudI
?#B2(I@BK1RV/Y"LY_nQZ5allCOS'gmkH&!9u[TXf5cPRkq:a'+,gB*0C;JUnp#V]k8+^b=J'os2JZ*8
G;%&XmEWE#qk1X7?`\1bD#3#Ei>pD(h55[:n*]UI"88lBhn+oVGB]A_VS0URqjk*<pQ,ksFTJ@_[W^i*
HIhiYl2S8>hqme!@:\SfSmcs^o9)K0j",o@(Wc;&nPeo26hBrcmI&dnSZ?1CmM-X)p[6nd<NUC:WcRVm
f#maT*fn"7e]Ub%c`qZO?=BCCp1$8Y^-0ErX`_:a]B`h<UF8TqGXeZ`NRAXg\UK*HmkQ)qq;,]LB'`ek
CUV:?"n)9@3b.U[XiK9-CjQtC`86J4=+=-Xb=rSE(-KFa.\!?8LXpt0]7FH>rTR1<[4hSBU'(oqOC7HK
fUr2$rV:q0#ihQ0\)4t!LF3Y@YsR>\i6&o9])="i@&i:qiLVo9P[esFDgF[`@D-#lq4&K!*V1sjmlqeg
2R5C"%<T\XJU-P%kN`f9qs83n_S=IO_2UDI7Ga#!+%`jsc%D#r_V:RJN2NP2dG^aJ=1q0spPsL@TkB2s
B^WWG4e6h9Q8b:?h8F],Q+esWhBKlGJ.0-_Nh*h$.inET9BLjihFh/j?R<Gjg(2]Ob5s2Idsn?4-8qu$
cGQkMn>eH?84pBJpmg5cT5g@>`>LTQd<,P\'c-<c"?8E!?5ZcDa.DQdem1^&1YH\%&hSEFK9dUo1_d!#
fY5Ko7us8?oiT_66q,QK21b)C=eS:SI`"3k&>!(%gcY/X<fjSrl`P/'(.5I7DANimdknH*=dC9$W*8)s
etoS0i6G2JZUdj/9t0fB2imJb6?Hmg6^B@=3],](Z,GI"PYo*dXtO_D=gtf;^Jd)gfK@e[!pAqAW+](U
U<@&iLg'`Y,!&`k?A\,MeW4sEXgb]]YQ2D:>uXi".'UqA`2qkMjP!/sQl(]_g1[>5caA.ZaJuWI`d#kX
08Bs0(Q[CmPCJ.9,Pa"Xp,OgC4OS`L%J+j6TGEO-qd;DI1%W'K)h.FQ,`N0LZ$aG)-^fFR[pi.&13=rf
:[tLMNhn@gDF^2N3/?L!];VRL(uS75B[YZg7+D#(XPkElX_Quk*1:8qW*.R0%Lu*4OEdYYLVmcR]anb_
gIh2kGF0(]Y$TZc4Q[sGe]03mmBCaGbGsc/ihfj1g%a"u\#Q_!-D>63@ug9E8:B:R[PHlrqpW80P`.h<
lFZ7OD74aNnAiL:#Q1r>3C^Qq=)t+)h"eD,D&0m6IcoO^4s0Vei1ZTdN9T*80RFMcl',(joQTPubQhDg
.4Cu:h*Y'ckA=Kq5a]aNrIu14KN:'IDl)*m`&dZ]`>jjCWdG\Ir`OASH/FHtdX<og"tqT%lg((PD"Z[h
)8/R%g-9'g9K"nk*E_ROqh?1Sdbd=YQf;_khRI[RceeYMM]099.oUd@`uQe\4^,Ru=^?Nt;Xmb(-n*>`
\lJ4\=3GHW/^-(sN0jnpU5c!n3DZV:\osZC9ce#V/!"j,/KgKlgt!8389'J85Bof&U/CHF>".c:.?9pr
>R[3%9m2Ak+JL&CGY2h!YBWYsDBuBY#enJ\W_oh))C:<>e>YUh4JaZ%61GXhCj2K1aE^B`U/0qq[:u3R
\BWq\PslmfCFENOns%:NLt4#G;etW5Fa6SrU*8\KF_Z>qV`5H)5_NVRY#0Isg>sd61^Ik+bq*)CBmdt]
*CkPKPjKBn,\ThSQbZ%rc1P-X@X2\VR^:'+F1pqJ2M*\!@;.]M0uYl^ibr`@)=H-g[f,2)^,!>;XeaVr
][\:o'&M)X26p!W#M2]_OrHkSB>Er.0r`k[nf?YuGjCTAK4`i$,e<LY70GSGle-!"g+>+3n8+@PZdpUP
8@f2*WP9F+mLlMI\/&p^<?^>H>Pr=rC=-<GZT6H>2p^(AZ4(X:Sp`8WDZ/H2*Hl!iOr:ju`K=:+%m2]_
>;KIM^!5_A2pP+a,eLT7C[X+9e2*F9btH<j[>'.B3%q/dVJPj5euGMnk/F-3j)<Ds_HuG[qdq*nEp'nk
FfiJuFWX6RHFXe@I]LUCd5kQ/#J]YmO/SCNet;^h:<75?>=VG*(R&aKkXk]\%uo09D.b2`o@lIJo>ORL
P'd"AheiV(F_f:AD[/'d0#,BID@(bRP'E2cXX!#<,=st9rn:'gGi68ehtAKK(J!ki%lh>k]^O6P7g^3Y
^7/I(D.hMdjgTYRIlY8d/?[Z#CDBA,/*-Z5eT?4IE1Zgce1]_TrS+p`Yhol^ZXj:)`[<k8'E/8BS$5-W
(&RTPWo*/=n([=-bpJ'`O@I4S$BB0D^X'5:MX)d1o%)e1lrJUej7t[bJ&1uQDW)p<]fe%X0E*lUfP81:
<-%*RCPj#u;3*RK[B/H82>q'LFbbK!Fc`^ukGaF2"DS^I9eXbskS+aT431mVOCiPGmjW8CUV_65Y5!nG
et#uq)0)&BS;8mn]JVeqajoRSD^Df;4Da%k=*+"/0;BgQZF)285hE%4]PU(<3I\'JcMVgdK],%9P88$;
0Ddj1rWYeR52P5IiG\LK/QVm1qRb\C^O7ecIsb1p_`-r3Y]\3d;8XG9K@P;:WA??.#+TIfBBqIul1FFU
S]pG7r]Q1F8\3+$:5j;BkFNaD[cM//kaej1eo`"'[mkHgrI*8s/PX%NSPs,d5@u0[Z2<49@BEPQg@e8<
\a+ES-8es`1:$a"%_O[h%'3:poBu%gpWh`HeuJ0aq,t%5c0Ig?rN*k=fC81084b*WD-`d2W*].j#T)<u
^9b!DZb"=c+hRJ1=sL5D=LP`dEc9T$QVXjN_"`r)cYR4'XCaBDM77@?[rY)RCrssij(g+'`A:"mnW./_
.`ji7L9p=:eerj4aAJ,l:.QTVJ$`6_'>uc<,;*-(a3&DB)04^/NLtbX%:7kQ]mkV+]KC3q]*diGEL+Qa
8l&'-@QV[XAk6RQ:2n%WS!B\'5[*4H7cIUpdOpu31ZZMZn$V@W$Ym%2(&:GloLLVCR`4N%8Qn6q1(),^
7op)ga2OAPEoad,BfXllY^+-DA!3QtA6<NEjhZ0g\OVobB+Fk"GbX![fe)&;6HjClZoK\76T<ofi[Ho%
p#iT/7Rt'\R?.:`YtNm0PTsI)7D,)r\;4W/D>6;H-PX2.fJuE0k%M+KY"MX-<_9mr\[mQNpD&gC9MP=0
Wr8Z>I?92i>-$j"F&A_S(Q/MC_(4)FWP=aUjD)SQoZj^E>f>"Fd"^crHGMT//p>4CFtk<l5PB=NibI&5
h5LfD.hRJ<Vi>=[!pK&ZbaXnUMco5)4M8p#Zk2o@\(bX6XkPL5BI33]2O?7!cWXk)GsU2Wh<Oe+>l1X3
2Ye/qcno*?E>6..8*a!la_kpU'h(!IVij[r?YU+/WdMC2%'mLc+8"+Em#0FO04d?3p>%-BME@\OPWXqQ
L95>6c?WD!?rk<YUEV>u7<;9P^DWPU<(2N=JW+6.q*\`FZ\GsgWLAmLB=h"5B:[rG]j((h\dNLFn$g'_
>$V1g.;F(nRZ6R\,i3CjFX)3:b:g*a9$H!rXt,p,e>]Z!71MD=Wd;LVF`c6#/E8m8V8/rYn[C"cTYGdK
DbK:`nl>DsX^sr`K[h%j=''G?i8mtD\Y>rsH;XS$?<-NO`kABXqMp_d5:uV9r!LnXNE2jJ3m-kZ(![>n
\EO?-Z"Eu!s,'P>2?,<)H[4Uq^3_cp=)?cPk?i2Mb*WL:ZNSc5\,BOmjW'<A"!.3j3c.pA\""Q4lI]-f
^U9Wigg_8/s'-LgDWN,p<-ab.T'#W]rC-H>:](;Jc[T3Cr2o!>bB>T9I%Is9hif]l1!:jl2@3^0+f_a:
cq;&%a^]PQc)M:i'lRd>f#^(XF$B+"hUp)n44Y'`fbLYsoc$-X*ln(Kj5&kQB?bCSZ<JU5=7!Q5&!p64
8<:Ybm-DArO85r6VeFl:/O`ECC%;q*as2t3`M]-]aQsg-A4VK?HBq[qiD?=gO`CeIT[?lPhC4ctn-<9:
V3Al'C!rn`Uhh'WBU#r8o+6$3pd#A,)*"a"i&O,1G/XdB^?DjCn(X0"odLt073<s7d,X8%Zgd41hN,A:
,78nPkEB-DiLKQq,%\.(ZYI(AdtZhSKi-[(nVWkq7[*6gg)*OVY#^$om67G-0mp1/Fh6C'g6e$65oV=p
-LgA"FJ@0;d%q2h7N4u*g.!#[j)`oko;OC%n^JjSGIq"bJQimC2]>C1?*n&3&?G'jdY@e@B`g:T?<q:o
=N+<jFNLA(gX,e$X*df7)igFH$la&BnaIh!Lk7Oh53'(0cOtP_kgIJcs'GB5eTA\a0@T^od81?q3rXX7
;:0^[6s4[\o?n:`ogemLZmTY0pV"k)^S>]&i98LoP[;)hmJ6:4>)+RG%4JFC*E@Yf#K*eTH'F+%]Z9V*
6gs3kWghqKQ01#P;^Z$Cl7Ui&euTg[W%qFS,m%O8Pp+=^%Eu/XWbM_uAbE"cQDc'4!+n*kUqdd]GT.OL
Mu>fb)T&i)mtfPtWb!^m=*8Ni2"Y,1Sq2DF[-Bim`5:#T=F*fiEaDk*l[sV;j7.t'SN--X%J6pZb\[!8
oA-gTcjs)Ko2a\:R(?n^euHW4"V(#qRm!J;`:Kq"-N%k'<Z$p9(J%+fOB1g(WE'!QlJ$T"iD!YXbNF*A
je^WLarNFR&SO?&A_-;GMX>]9SfImh2[J;J2#<O[R#tX.X)?[bT25bIMdP62`UZ"S]F-pC`oAULCP4bd
7n:es79sG9BEKp9bhs)met!jRLZF2qphjIIn[,o`lqhc'H8nRDWt.Y"AYBc_ph6]XkSW<,2A/5U3cR'F
pL[O&?dW2F@F&lF_;Acf(f(X#Wd(LhTEQdVGR2UCLmC8@FMDprfL6Iq6?!]PVU>C^=!r!j_[eYfVm*3D
AKoEJkZJNPir1NgiG95sg^aQXjl5L[a)79OdHMI`r"RSej,Vr?Atu\m)0a1?J%,BrlocIj*#:SR=%78<
<c>qh?#S^Z?!2`o^/G8@\OnF/*N1Ft4YR6ro"CLRX<+X\I?>n4rLJs50$_&9)UE'6j;>R"Hf:<Na3EQK
oZE*ma(OO#)4_AZ)g^\o>\lq!r(bGEQ"5l&J^ET*3l?3gWn(fjkhk4nbl-0S)t`8:/f3IkS]M"he>GZ[
d7Q$GLu*R-TrP,*NQ9H@%:hOQn%2bH;N00VN!!SN?'i/)L+Kqi0[i;_'li%jM2HHi1\A3F`f&8N9<&jf
LPBUTqeaTlP;t-h])?tZ!]"r(bmI)PIl^ma3O5S0fO(]cnY^"*ZfW14DX@ljn7t+n"?hCDRDin@H=h<s
MLTb/m]Z#-B+0J1F;Laidt>$+nKO-eGl[lAgWA#V%#R-":J3Wn(WMZCEagiK3+LenC#>QT&sG5M/T"Sp
Uo8"]&h71^?ue#M`&M\9D>'"ipjkM5cB/$G9Qs`9kl9kM[BL>risO+urVQ[DV5jCB%G`*L&WN&1#E,IN
?aHosCq(*heWLocs$/ePG78A%2)R[HLMTqhE`#TiG'd4bcS,iJD.V1U"#UX)IF+l=N"eZ>J;u+uS%(pV
#jHWHDDfNuDaFF\l`_BeYjoTObZc04?G,?]2o$$=s$/P:NE4Q1A(A.OHJt+mPL\K2-RMT9-Z@5o/7l<E
7#fAf7s2a<j2P^JY"HJ]Sr%h("dJTlmlaWk1%T^IWgUXsM^ZiTQ6Z%,QQ<2a;pc$UPF%;CX\]\bjQW@E
<puTE26l)uB756g&'$Y,A)ZCpG[K7GQk4gNX!=]XRq"F4f#/N,prh:Xi6/(D\TI.IJmMq(f,p)T;+d's
J%fB=SnGLAR\JRr(r!c#78Wr6&bj`oZOR8,3#,]Q]6O8nf\Oor3bf1W!"r&c2bS1D!M_dBjp."lDmAnM
79D7f,S\eQ]Q(%XJigkbOqT("*:^@*)cm4$_>KM7F*3*QF0oooQ)F%$lf`9=?GXZbK-eO_/<WKqK6:K\
)n=+<3TfPsY)ZZ>6T<BOPGD+-G+C[hJ(m?bgm.9%#ITTSkU8B2l@bW$W0!S?$KmbgqmB5F.LNm"Ldo>i
]]$_*R*4.G+@ieNgeC;n^QP+PRffiHk'Z3D&U;<UfRk/qi.+!)khX9s=D(EJ=Z%?k)iepN.3J1ddg-cM
>gGIpL:Ti/P)$'dWX:9#+l:Wn3l7T/_L2Xkmk.-?i=.-4,TJ5a-*IC?fg[!B=^7;JnWsQ3"ADAB%Qb@`
Fqt0:3:ije!-^`fB"4ZUB@7>RT\SD\MTBXNaHc#@J&<VN=6'St7KWOQ5LS0iR4mF8]5]4L)J,%HGJl](
.Ud87BMb7Lj5/cNGY'+3J@P$C(r:p,E7_pCPpcVT[Y/V.,VP2<JP,Gl5i@'"C!k[U3!ee][]OW&JP)l>
^X)n2$*j@+@Y>k=jg*%279OAr&Z7'bm!5pPfeTH$bW)Xk0D_'D(I]#('0:2K`:2kJs8M&^J)?^r7q'`q
Rpl*Nc%mb&>N'mbGr+Frem9@]]G^5Lo2`dck08^+\2U0HFIh;,6]pX$\sD<1Y%<(h4iIn@6C77%`0e\_
427t36J&MU6C78H\uoW%GgWoMRr':WDHXp'+]7$M#ErUQ72C>6`oHPp4[\[ss2jZ:Z?e;hM,721oe:V.
P9ON#+re2]m3hK_'2U$*'06P3M.6pgNm$LQc8Is?*#MJ@%Kf]!8a8ZTm=$JQKmboh"&Y+51H4Wa(fIL^
lI1)1D&<*_Y+j0^'\)#3HBp`\<!DR0Q,J)$Ll@mU)N"e"[#@90\ind^GDeZT&U5-Se>l;V-t['>@h\`D
8:@"h<n:BM#;Z>O[/s!aoX>+.JM!gF/(tVj56;X%([(QPa2g!_:Lm!PM49(/'t4;#?Tu6"0/N618DJSR
Aka\n0lB%K^LDOrnN/ilLc602?SLMY5I'W&&[n/u(gfCnBnm(^[TC[:-ILM&N8EC74+u,$fjs]578uX[
=<L)<i_4uE6TbB9<@m;,#pENWfX$bl>Bmmh*UW>4>@&TK$FSW\aou$TXj,TcGS4Ya[>[I?T)3dK'gD+i
/Xd!'^T^2bU7M%P&7s2EbihRK\R&_Z*W4),q<1,H35IKUBB$@47JFE.V@%#]2r2=PME'prXJJ>239$MA
HD%oAbTi.d&oRh2BN;h'"ZL`II5L1@PbX8s"KH%ZhDFlm@lLKf*o:IWBuBEo\n33eq1eDDS\WtNM79Si
7Po2Vbeup7loO;CI_;l#s7Hh.lMZ)/Gi"KfX?N<56*kh>'+t^2_&%q&P7id4'ejXp6S]3Qg8jelM`>08
nrm:F/T\Zph<("?mLJC4=VDto"n6Z*L-gK7V*6iIFMg^.lgui;XAfr3c`2tJXOJ^Ma`RRSc,5B]]s`K#
ek%M*%(@i1CJECBf&`r"\n#A8X[>g`-f'ae-*6RW<p2;XPbdCHf%DAX(IlJaf<'A1f\PFX.>>QA]:j1/
3BCDA(,&>-$_@:&<g_h_&#.cus+^&+lY\]-\<N#?VlEfp1/[L-<dLKA%OZnbmKnP8Gt_.?*fDpqag0nA
/S'+&FJg68:53jP+lk2U>2<YmGr#Wba07X^b"l4b'Y]/hfoTG1^]!*P?Q6$F0se[)L#G/Vbr`"p;SV0:
'E/*b+YG^*'r@s0(A7=<`G-)-L5nZQf5j>1c?r_9ISO&jh5[uk^'do(9fmjBPbT/tG!:"b6bEGZmkpV<
2'9StKpF5@\i)uGoV"&q=B40s^k14YiLZ4f\Ga=+K)b&n=(.(Ah+MH`aCs-@V1rL),OO]>!p[DaBY0a&
(Gs>N^IRZsh&L!EK8V!/?E.3RTjKcODmK0Jj3!BU)t(oe#T;D<,GL2o`"=TXVkR33<t5"(FS,e5HUMC_
-A*eMXD@2@5*Vo@3Dc&r<*:*EE7QXR$ZT860pb<Ff(`Jo0LPT]$sLMNH[BgH^e:=^[VD`-gTr:FUh_C+
[cb!4i,Rs!gj#K\RD9jU\BMRQ7[%/5gHiUrU]p639r#_&bE%6UGs^>][;\K/Zb!/>UO-Zj_Dm=ESIFfi
Ku:[`LW*c<J2]lY9dn9jg[(l]SMR6,%!_Y>k&fLal&&-ON1.^=(RIV4r#cnt'<g0_RM=Rh905.4p_i(I
f*GW=q`Sn^S$+r[hQ6^lju#X[#>Bu5\kt%s'u@Tns!5bMMpiOqa@c-V_'9q=1\_rFqdW7%B'JWIO^6V.
[&5s+WZ7jG(+o(8jj;e%6q?)rB@0eh38[aY)GcsM:Bhi\]M!BI=N[*?S=t.c%Dt+%EH.GYks?4^BEWNs
Ibn.E)12,.",@7X><(*TUX=5@T\55l)A#]si`2:cPtMfjK/E9:'MA])PC>HENjg'PJbR!DIo_s,Q1$$.
622Oo>p+E!-^/Z4>BaUfjg2aqW6TH%_r>F@Y,Fo-2'VmuL!FU6I5*lgl-)HpY6?apd5i(,$g/;(K%5/:
0&=*rWQ#N52(DK8qQM%5L%2SDBMI_hjpTu`,nFus\>MLm_kia-\j_k4'kO`4m1@8P%%S<S-sY*?F69fo
SC4;tIYk2rAOFDQmKg2*q/2".>@8Uc9_K-;FVY+A:F4bBa,#(pbEO/Q."'DeNG$?l])5^>DL(1JSP64s
Vrnt,`7a;`-c&c-I4h#%T@g3#S=o`uH^0a"$1V/6aI!0XPTVQ>DJ:NRXc/!/&tS^7Yu^jY6gq8B^LH7Y
g'KW:9M5&)nU2I-g[Pa1n*0YOR.iDe#DRjEVqO7H2Yi;.Ng6d>7M&4pO&dZG5b/CS,h]'FEU9t3^KmRT
SlU_tD"_5eL3;Ds+s3^NbYCo^8qak,*;b7Ts.?o6^U;7=&UZTbS.ZueZeeV)?=B)sPR&`5C\T?@,M+@R
gF3_`akLBL8i3N:h,>M^+5)*8<&\)9Fq.J1:!u!I6;D`1Na"C_``"(7L?`(eSJ!+/FB1UP@P+JBVaQ:!
PR(Bh7^`BaNTWP;9P98YM0KV3p2cm];!<'uM3((e![GUm2a8VZ[<e>U+_YHB;^,JE5Rkq4M%&-A&&uBD
PR,krd+#=!,$\_K@n3ZLMYr_&jZDp\hr?cb:A/DL@DZSlbITuNI5'W^31k\Y?\#cR(G)q_>IO;]Iq-E`
]scC=DTX:Y_t%!Bl;^7-3F[+EEL0_&l8#C/G<MUTnUtCmR%G+M+i6nf3+@%I0D=:W`2ankh9:ML1$WU)
1odW.(T4/<#V"1D0nS7cQst)4;G\Rm,<K*F5D"CX?42F?)eNa/?m//:=i30T*lq4^WOcobdP1<!GZZA0
-F,=M7"VT/\NMLo#"SIT2HHc%CFLZ4FY+EQXYH&=a=?k!#!T3SM,lSE7R=]d7)bcE[R-"c4_6(tSVlc0
\2K)n4@3jFNpmdlMcj456#7Dt6CMi,WHnUZ<c2'O#n&3b(!fGpm[hV>#e6TAK#Q(9,NKMXUdCNJQ#<Xs
_r6QZA1,(BlM]of$VOk[Wp%%*VlUF=Mi,4#&mUaL&>a@eXaW(4;[2F>6>)'chnk`5LT-d^:[hKq#5a3]
Uh-M?R\6K-D@1:e"\k4lo/)-*A>P-;[J1Pp"roEc#fq1L-(?'$H5EXI<iYVJV7eT)47]phPm+MifObRS
eK;ZNDn@!Gor>NS<AhjhPthj4X5$`e$ZDkSQ/T?gHi9Y>euW%DanBCt,0NY7S<WW_0HJG4M6F#J3Bp1s
kH([M;UmBnb/kf$Dp)!,b0aL<6V644339no/#'V_9;1$MM<=1h*IJZen#a_Q6<VO.Z&=42=.AJE@JZ#P
OBH&a7<oh&C,%`F2X>E'[rjKggO<:N;mO)<R6s@!c,qeFeS-n&h4in2a#>)9]S>=Bb15314Wd2X?26MX
fo"/X/YXtISb;=`bq,G1e/T0&q/kIZ6+V(.dT7/jFSa_ha!pUO[nb%I]q$aEpTCrF5mkd_'8m+%rgmO@
9\Qd'8`dPPU_m[GfH=cuNiEBC-u<4S[AP(5/&iMl.=Li))c,._8:U!eU&Cf"-L9'$oH*u(<njOpMLHGT
Hq?\Hl&rS,6dbZ/e8)/fr@?$(g=`ti@Y;'1PHqZPAqj<g%)H]XWE_&bV%QbYY-A(:^3:.Qc?0s_RJa^t
H5'l2,ZF!TIWC9dPbEBa&_(CjP!+uL?-W)!@p["FiA[o;i[e*Fl60(UleYp(;d$Xb>'[8<)3^;uV9pj?
mD<IB<`r)),:j$@#?m!(%*\%"q9'tBVV>7O<\$ZT2!quU*[]p3\hDWY@^:8^rO/`SoO_EKWBg\g?-R?9
M$'>-4c)&;VYIPr`04M,T1d>WAuX)%MmJt:TU=%&N`XgMM*JbbbR_ooBB=/2c`p*mNplk"cdF<r3lUoS
)C`a91Zn<#M02lMC1'bF0UX7;fh)BiA5W:9]KEMOm9edfF4lh^oaN^dmt"JfgMXCP\mFEnhsX?8\gFUT
-;E3uC!o7\\gC^Ho6nYb\!rd4NV:k-P6NM[2/,FO8Ok;aFB)@sC!q70l?PsbY#agl\h[+,(U^:a)t$S-
#09\[;<]YibKlM%>uQ_na\64oeHcUZ9_AZc\u&q>Mpg^;gMfk*-r&<hC\#,:C!p"$etstLA/@rCWr=Q6
!0l@hTh-IGIYK2o+RFk1]d*3MWRVXVaetKk+O[(!<LWPd>%LFS[[V=>ZRk=jV"[n%"u1$L-6c/fk\AP,
_B\ct)Og<T?BJ0ToJTEC\hXn2L*Oo8$*-A%Vk5^@qM@%C+D!<$PK&!:jI.oe--W*D>fs2o;3T#Bj`36C
ROmo3Oj?VLm%d4*-E>D@0`&no4+k+H#;jeLXa>o%>B`e&Fp^*@+KI\0I;aAYq-uoYpZk21k2)M-PNFLB
Y"@Z!Y/&Pn;qWCm8Ok:R>^gn,-=%AC&=R]@oXa;0(_83q5\:B@eho83UcC70I\g56TiFBYBS:*J<Ojc[
8K/"2g@3/%QAH=.b-S&/Gfm2Jp?F%_l"F'kc'4LcV^fU*!6A6*-AD,n8QY"nR3iBmQ>=p'6BdF1C=<#k
F%r+l*ESFOjY#/UCGP^%aKhQBG@bt\nD:<>=69FK-=&bJa>E-O.n:Ch$t&2EUe)<gC=8=Q__l/++DK8j
^8g]lUG$B16((N[I;%%G617m=`bI$\?CE^T]M$[H%@\\=m[d^JXpQ3W9tDg$a`M)dNHA#V46,<Y?'DF7
/VQ%GLMWFEK.c>N-I"7sf;&khhu6f[m8GHc04TKFdT81sPBK,49q$-k>a&bQ]On;58*hGab#N_KJYF'5
@9k?.9tDf]d5>VQn%Y;J,fL6fg16(TdNNU(PP/$kdT]d:RHD/Kf8_`$Ff1sLdT]dLRO2l,`AHh@32T8o
X#0(CbP+\ohV2gN:m:&09<L?tcTdNI1_Q0I;Pm#eKfb\Lc1uL!^=qEoY";R$Bs(#H$;EQbQZRk_.N:YW
G2d=_==#A0dbKc(2<gci-bXc$gKOR?c\jelWjH/@"$P(Pbn4FI)Je]$/!J7_djX"C<hY"X4D,?XAEnQc
;)2AC@OTqYUMXcUICMk<h^1?eF8Z?NMB'?!3e9\6<LUsKh,u\QH#&PE/1m]0V\uV6@hr^D<DZ,d:j#s,
m3>eO\oBe[)-N.$[W^9>TQMDfdW@84-Bqim[hn1dU+a:n-,I$&9d2;]?1gglpmX$!JJ8EOPbH=sAq.Gb
g7jJ;bRpXWd]C2gkGha]0V0V*$p&=<E?OL<\5n4\VY,e/+_YDrUtC/]:WjrCmtlYTD,i25rqW-.=Q-tR
61?i.#sroSJ&FS/>+>60:0)/Z^KM*0f65.u:WDhb=_,G3ad]bj&YM'c)&N;qr+rZ<Q6F0i.?Dn]WH[r.
pg[b;m4>QJJJ%E.Q!QX41C_YPk=($75%:2oj,BT@iDaa"[MjXYM%k;!)5iDYG&Vsj3B]VeQCgUl%dETK
.*cA:Pr^LHR>>g*O77#"<tU7@f;W2EZ?h2>%S'`'mte<)_:s2]mk&h$Lr`M/;tMPRAr7qak*t-5Gbs0K
=9rrqSr0quDg%kp06M`#e_dZM0Jr]I0c;5J-_Fs>n5>e4$#(`+!q37k$K/[HIRdaG5/8_,i,h)MDWF,1
<h-UI`HkjU;d#=K^;4dd@T!#P?s`eL(hi5^Fg+n[f@L`2[9._bGcK%;f=&#DMt-nI/)#HP<@%omIpQ/A
O?cH>BjdrWr+.3H@U%eNU]7]8HtR$BV.jOR(onh4BK<N`M"A0AUHEgVAiDt4a*,?u[,]u0"C2q8Fm-\2
au4Q6_G97g`oo@FfGuQs=Fi=9p.L(rDnT5nhV6`LU#]OjpGe5%iu=H;Wm!COSA:ZFMPD48CurW&CkgeV
m)/D=Iq&ZcG0F@Hn)k?3AJAf9IY"uc5II"?j_jVaI5tn6djE@?)'Z_oF"ZQ1Cs?To('-9Ehmf0K)nA<d
_hi6$MXi)rh]Q+3\/m<a@An4tr`+@&(6?[EREbVcIH*=[pK>BLoXr*\RAE7/cI":len,$-\$pE+]*G?o
)AGuW=V)/:^t`4SNr,CqBG``YJ<s(7JT7\PN[hqY@ET#2ii]=F;/JLp>4]#sp+!4ieQ4MMlVO3ueET,D
Z[cIr!5J@p*(?FMB\cq(+l>XZU<2Ql/L@=BY+1GF!Ah<#@Z-hs=BJ54OliX=gIg:e*(BOA]?u)9rfd)]
)@K'1Y:p42d*OAY&):-2[g5]*=qfW?Sn7r"qQ#e%9NBNR84kB+Ec:VpH)4rs&,(G2b`G.jTIqPX5J-@s
q$9Ra`-SXELa\#$'3VJl@6*.Ansu$;?5*^;`G/<>*B^REI/AqOmalZpZYD_cK4C5QbV.(64FFPVi0/C:
@.F>35NDq7IPTT.K9sMKJgMRYmo+MQ#MoQj>Wsj*,32+aj^(Tt3ZLf$^K$IPZ(>dQ#CNp1QOi:gaZ`mg
/]OsH+A%?9?uF+S4ts#bg@;T`nc<+?&,F#1YH#d$(d6tJ+Hm=e.3JJSOq2s/6U'G//*$g(MF'K@\Of+O
E4).XLE_B,,QR9B$[M4_A&%TNnm*kb(_0`rFdq9nh[>&*qt4c,RIlE,kehF0=G/fNVr-6Fn+PlA:OKR@
0@n!I]t")X!W?C)nbr&ArZD/:;>rfNXk,c?DMX#-*T`P&7sr;L(rlDZJ,GAVj1kTghn[Tm1&~>
endstream
endobj
7 0 obj
29153
endobj
3 0 obj
<<
/Parent null
/Type /Pages
/MediaBox [0.0000 0.0000 431.00 434.00]
/Resources 8 0 R
/Kids [5 0 R]
/Count 1
>>
endobj
9 0 obj
[/PDF /Text /ImageC]
endobj
10 0 obj
<<
/S /Transparency
/CS /DeviceRGB
/I true
/K false
>>
endobj
11 0 obj
<<
/Alpha1
<<
/ca 1.0000
/CA 1.0000
/BM /Normal
/AIS false
>>
>>
endobj
8 0 obj
<<
/ProcSet 9 0 R
/ExtGState 11 0 R
>>
endobj
xref
0 12
0000000000 65535 f
0000000015 00000 n
0000000315 00000 n
0000029896 00000 n
0000000445 00000 n
0000000521 00000 n
0000000609 00000 n
0000029872 00000 n
0000030350 00000 n
0000030066 00000 n
0000030105 00000 n
0000030207 00000 n
trailer
<<
/Size 12
/Root 2 0 R
/Info 1 0 R
>>
startxref
30423
%%EOF

View File

@ -6,7 +6,9 @@ Windows
Der Installer der AusweisApp2 kann über die Kommandozeile gestartet werden, um
den Installationsprozess zu konfigurieren und systemweite Standardeinstellungen
vorzugeben. Neben den üblichen Parametern [1]_ enthält das folgende Kommando
vorzugeben.
Der Rückgabewert von msiexec informiert über das Ergebnis der Installation [#msiexecreturnvalues]_.
Neben den üblichen Parametern [#standardarguments]_ enthält das folgende Kommando
alle unterstützten Parameter, die im Anschluss erläutert werden.
.. code-block:: winbatch
@ -15,7 +17,7 @@ alle unterstützten Parameter, die im Anschluss erläutert werden.
INSTALL_ROOT
Gibt das Installationsverzeichnis an. Ohne Angabe wird der Ordner
"C:\\Programme (x86)\\AusweisApp2 X.YY.Z" genutzt.
"C:\\Programme (x86)\\AusweisApp2" genutzt.
SYSTEMSETTINGS
Betrifft die Erstellung von Firewall-Regeln der Windows Firewall. Ohne Angabe
@ -69,7 +71,9 @@ UPDATECHECK
false oder true kann diese Überprüfung deaktiviert bzw. aktiviert werden.
Die Einstellung kann dann durch den Benutzer in der AusweisApp2 nicht geändert
werden. Ohne Angabe ist die Überprüfung aktiviert, der Benutzer kann die
Einstellung jedoch ändern.
Einstellung jedoch ändern. Der UPDATECHECK Parameter beeinflusst weder die
Aktualisierung der Diensteanbieterliste noch die Aktualisierung der
Kartenleserinformationen.
ONSCREENKEYBOARD
Für die Eingabe von PIN, CAN und PUK kann eine Bildschirmtastatur verwendet
@ -83,7 +87,7 @@ HISTORY
von HISTORY auf false oder true kann der Verlauf deaktiviert bzw. aktiviert
werden. Der Benutzer kann diese Einstellung anpassen.
Alternativ kann mit Orca [2]_ eine MST-Datei erzeugt werden, die die oben
Alternativ kann mit Orca [#orca]_ eine MST-Datei erzeugt werden, die die oben
genannten Parameter definiert. Die Parameter sind in den Tabellen "Directory"
und "Property" verfügbar. Übergeben lässt sich die MST-Datei mit dem folgenden
Kommando:
@ -143,5 +147,109 @@ common.keylessPassword ONSCREENKEYBOARD
history.enable HISTORY
====================== ====================
.. [1] https://docs.microsoft.com/de-de/windows/desktop/msi/standard-installer-command-line-options
.. [2] https://docs.microsoft.com/de-de/windows/desktop/Msi/orca-exe
.. [#msiexecreturnvalues] https://docs.microsoft.com/de-de/windows/desktop/msi/error-codes
.. [#standardarguments] https://docs.microsoft.com/de-de/windows/desktop/msi/standard-installer-command-line-options
.. [#orca] https://docs.microsoft.com/de-de/windows/desktop/Msi/orca-exe
Anforderungen an die Einsatzumgebung
------------------------------------
Rechte für Installation und Ausführung
''''''''''''''''''''''''''''''''''''''
Für die Installation der AusweisApp2 sind Administratorrechte erforderlich.
Die Ausführung der AusweisApp2 erfordert keine Administratorrechte.
Verwendete Netzwerk-Ports
'''''''''''''''''''''''''
In :numref:`porttable_de` werden alle von der AusweisApp2 genutzten Ports
aufgelistet.
Eine schematische Darstellung der einzelnen Verbindungen, die von der
AusweisApp2 genutzt werden, ist in :numref:`communicationmodel_de` dargestellt.
Die AusweisApp2 startet einen HTTP-Server, der über Port 24727 erreichbar
ist.
Der Server empfängt nur auf der localhost Netzwerkschnittstelle.
Die Erreichbarkeit dieses lokalen Servers ist für die Onlineausweisfunktion
notwendig, da Diensteanbieter mit einem HTTP-Redirect auf den lokalen Server
umleiten um den Ausweisvorgang in der AusweisApp2 fortzuführen (eID1).
Außerdem wird über den Server die Verwendung der AusweisApp2 von anderen
Anwendungen über eine Websocket-Schnittstelle angeboten (SDK-Funktion, eID-SDK).
Daher müssen eingehende lokale Netzwerkverbindungen auf dem TCP Port 24727
ermöglicht werden.
Für die Verwendung von der "Smartphone als Kartenleser"-Funktion über WLAN
müssen außerdem Broadcasts auf UDP Port 24727 im lokalen Subnetz empfangen
werden können.
Hierzu muss eventuell die AP Isolation im Router deaktiviert werden.
.. _communicationmodel_de:
.. figure:: CommunicationModel_de.pdf
Kommunikationsmodell der AusweisApp2
Der Installer der AusweisApp2 bietet die Option, für alle angebotenen
Funktionen der AusweisApp2 die erforderlichen Firewall-Regeln in der
Windows-Firewall zu registrieren.
Erfolgt die Registrierung der Firewall-Regeln nicht, wird der Benutzer bei
einem Verbindungsaufbau der AusweisApp2 mit einem Dialog der Windows-Firewall
aufgefordert, die ausgehenden Datenverbindungen zuzulassen.
Durch Registrierung der Firewall-Regeln während der Installation werden diese
Aufforderungen unterbunden.
Für die lokalen Verbindungen eID1 und eID-SDK müssen (unter den gängigen
Standardeinstellungen der Windows-Firewall) keine Regeln in der
Windows-Firewall eingetragen werden.
Die durch den Installer angelegten Regeln werden in Tabelle :numref:`firewalltable_de`
aufgelistet.
TLS-Verbindungen
''''''''''''''''
Es ist generell nicht möglich, die AusweisApp2 mit einem TLS-Termination-Proxy
zu verwenden, da die übertragenen TLS-Zertifikate über eine Verschränkung mit
dem Berechtigungszertifikat aus der Personalausweis-PKI validiert werden.
CA-Zertifikate im Windows-Truststore werden daher ignoriert.
.. raw:: latex
\begin{landscape}
.. _porttable_de:
.. csv-table:: Netzwerkverbindungen der AusweisApp2
:header: "Referenz", "Protokoll", "Port", "Richtung", "Optional", "Zweck", "Anmerkungen"
:widths: 8, 8, 8, 8, 8, 35, 25
"eID1", TCP, 24727, "eingehend", "Nein", "Online-Ausweisvorgang, eID-Aktivierung [#TR-03124]_", "Nur erreichbar von localhost [#TR-03124]_"
"eID2", TCP, 443, "ausgehend", "Nein", "Online-Ausweisvorgang, Verbindung zum Dienstanbieter, TLS-1-2-Kanal [#TR-03124]_", "TLS-Zertifikate verschränkt mit Berechtigungs-Zertifikat [#TR-03124]_"
"eID3", TCP, 443, "ausgehend", "Nein", "Online-Ausweisvorgang, Verbindung zum eID-Server, TLS-2-Kanal [#TR-03124]_", "TLS-Zertifikate verschränkt mit Berechtigungs-Zertifikat [#TR-03124]_"
"eID-SDK", TCP, 24727, "eingehend", "Nein", "Verwendung der SDK-Schnittstelle", "Nur erreichbar von localhost [#TR-03124]_"
"SaK1", UDP, 24727, "eingehend", "Ja", "Smartphone als Kartenleser, Erkennung [#TR-03112]_", "Broadcasts"
"SaK2", TCP, , "ausgehend", "Ja", "Smartphone als Kartenleser, Verwendung [#TR-03112]_", "Verbindung im lokalen Subnetz"
"Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesegeräten sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert."
.. [#TR-03124] Siehe TR-03124 des BSI
.. [#TR-03112] Siehe TR-03112-6 des BSI
.. [#govurl] Erreichbar unter dem URL https://appl.governikus-asp.de/ausweisapp2/
.. [#updatecheck] Die Überprüfung auf neue AusweisApp2-Versionen kann deaktiviert werden, siehe
Kommandozeilenparameter UPDATECHECK
.. _firewalltable_de:
.. csv-table:: Firewallregeln der AusweisApp2
:header: "Name", "Protokoll", "Port", "Richtung", "Umgesetzte Verbindung"
:widths: 25, 15, 15, 15, 30
:align: left
"AusweisApp2-Firewall-Rule", TCP, \*, "ausgehend", "eID2, eID3, SaK2, Update"
"AusweisApp2-Firewall-Rule-SaC-In", UDP, 24727, "eingehend", "SaK1"
.. raw:: latex
\end{landscape}

View File

@ -5,9 +5,10 @@ Windows
-------
Start the installer of AusweisApp2 using the command line to configure the
installation process and preset system-wide default settings. In addition to the
usual arguments [1]_, the following command contains all supported arguments,
which are explained below.
installation process and preset system-wide default settings.
The return value of msiexec indicates the result of the installation [#msiexecreturnvalues]_.
In addition to the usual arguments [#standardarguments]_, the following command
contains all supported arguments, which are explained below.
.. code-block:: winbatch
@ -15,7 +16,7 @@ which are explained below.
INSTALL_ROOT
States the installation directory. If not specified, the folder
"C:\\Program Files (x86)\\AusweisApp2 X.YY.Z" is used.
"C:\\Program Files (x86)\\AusweisApp2" is used.
SYSTEMSETTINGS
Concerns the settings of firewall rules of the Windows Firewall. When not
@ -64,6 +65,8 @@ UPDATECHECK
UPDATECHECK to false or true deactivates or activates the update check
respectively. Users are unable to change this setting in the AusweisApp2. Not
specified, the update check is activated, but users can adjust the settings.
The UPDATECHECK parameter affects neither updates of the service
provider list nor updates of card reader information.
ONSCREENKEYBOARD
An on-screen keyboard is available to enter PIN, CAN or PUK. It is deactivated or
@ -76,7 +79,7 @@ HISTORY
content). Indicating HISTORY as false or true, the history function is
deactivated or activated. Users are able to adjust the settings.
Alternatively, Orca [2]_ can be used to create an MST file that defines the
Alternatively, Orca [#orca]_ can be used to create an MST file that defines the
above arguments. The arguments are available in the "Directory" and "Property"
tables. The MST file can be transferred with the following command:
@ -132,5 +135,101 @@ common.keylessPassword ONSCREENKEYBOARD
history.enable HISTORY
====================== ====================
.. [1] https://docs.microsoft.com/en-us/windows/desktop/msi/standard-installer-command-line-options
.. [2] https://docs.microsoft.com/en-us/windows/desktop/Msi/orca-exe
.. [#msiexecreturnvalues] https://docs.microsoft.com/en-us/windows/desktop/msi/error-codes
.. [#standardarguments] https://docs.microsoft.com/en-us/windows/desktop/msi/standard-installer-command-line-options
.. [#orca] https://docs.microsoft.com/en-us/windows/desktop/Msi/orca-exe
Operational Environment Requirements
------------------------------------
Required authorization for installation and execution
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Administrator privileges are required to install the AusweisApp2.
The execution of the AusweisApp2 does not require administrator privileges.
Used network ports
''''''''''''''''''
All network ports used by the AusweisApp2 are listed in :numref:`porttable_en`.
:numref:`communicationmodel_en` shows a schematic representation of the
individual connections made by the AusweisApp2.
The AusweisApp2 starts a HTTP-Server on port 24727.
The server binds only to the localhost network interface.
The availability of the local server is necessary for the online eID function,
because service providers will redirect the user with a HTTP redirect to the
local server to continue the authentication process in the AusweisApp2 (eID1).
The server is also used to offer other local applications to use the
AusweisApp2 via a websocket interface (SDK function, eID-SDK).
Therefore local incoming network connections to TCP Port 24727 must be
permitted.
Broadcast on UDP port 24727 in the local subnet have to be receivable by the
AusweisApp2 to use the "Smartphone as Card Reader" functionality.
It may be necessary to deactive AP isolation on your router.
.. _communicationmodel_en:
.. figure:: CommunicationModel_en.pdf
Communication model of the AusweisApp2
The installer of the AusweisApp2 provides an option to register all needed
firewall rules in the Windows Firewall.
If the rules are not registered, the user will be prompted by the Windows
Firewall to allow the outgoing connections once the AusweisApp2 tries to
connect to a server.
These prompts are suppressed by registering the firewall rules during
installation.
No rules have to be added to the Windows Firewall for the local connections
eID1 and eID-SDK (when using the standard settings).
In table :numref:`firewalltable_en` all firewall rules registered by the
installer are listed.
TLS connections
'''''''''''''''
Transmitted TLS certificates are solely validated via the interlacing with
the authorization certificate issued by the german eID PKI.
CA certificates in the Windows truststore are thus ignored.
It is therefore generally not possible to use the AusweisApp2 behind a
TLS termination proxy.
.. raw:: latex
\begin{landscape}
.. _porttable_en:
.. csv-table:: Network connections of the AusweisApp2
:header: "Reference", "Protocol", "Port", "Direction", "Optional", "Purpose", "Note"
:widths: 8, 8, 8, 8, 8, 35, 25
"eID1", TCP, 24727, "incoming", "no", "Online eID function, eID activation [#TR-03124]_", "Only accessible from localhost [#TR-03124]_"
"eID2", TCP, 443, "outgoing", "no", "Online eID function, connection to the service provider, TLS-1-2 channel [#TR-03124]_", "TLS certificates interlaced with authorization certificate [#TR-03124]_"
"eID3", TCP, 443, "outgoing", "no", "Online eID function, connection to eID-Server, TLS-2 channel [#TR-03124]_", "TLS certificates interlaced with authorization certificate [#TR-03124]_"
"eID-SDK", TCP, 24727, "incoming", "no", "Usage of the SDK functionality", "Only accessible from localhost [#TR-03124]_"
"SaC1", UDP, 24727, "incoming", "yes", "Smartphone as Card Reader, detection [#TR-03112]_", "Broadcasts"
"SaC2", TCP, , "outgoing", "yes", "Smartphone as Card Reader, usage [#TR-03112]_", "Connection in local subnet"
"Update", TCP, 443, "outgoing", "yes", "Updates [#govurl]_ of service provider and card reader information as well as informations on new AusweisApp2 versions [#updatecheck]_ .", "TLS certificates will be validated against CA certificates included in the AusweisApp2. CA certificates provided by the OS are ignored."
.. [#TR-03124] See TR-03124 specification from the BSI
.. [#TR-03112] See TR-03112-6 specifiaction from the BSI
.. [#govurl] All updates are based on the URL https://appl.governikus-asp.de/ausweisapp2/
.. [#updatecheck] Automatic checks for new AusweisApp2 versions can be deactivated, see commandline parameter
UPDATECHECK.
.. _firewalltable_en:
.. csv-table:: Firewall rules of the AusweisApp2
:header: "Name", "Protocol", "Port", "Direction", "Connection reference"
:widths: 25, 15, 15, 15, 30
:align: left
"AusweisApp2-Firewall-Rule", TCP, \*, "outgoing", "eID2, eID3, SaC2, Update"
"AusweisApp2-Firewall-Rule-SaC-In", UDP, 24727, "incoming", "SaC1"
.. raw:: latex
\end{landscape}

View File

@ -42,7 +42,7 @@ master_doc = 'index'
# General information about the project.
project = 'AusweisApp2 Installation'
copyright = '2018, Governikus GmbH & Co. KG'
copyright = '2018-2019, Governikus GmbH & Co. KG'
author = 'Governikus GmbH & Co. KG'
# The version info for the project you're documenting, acts as replacement for
@ -120,7 +120,8 @@ latex_elements = {
# Additional stuff for the LaTeX preamble.
'preamble': '''
\hypersetup{pdfauthor={Governikus GmbH \& Co. KG},
\\usepackage{lscape}
\\hypersetup{pdfauthor={Governikus GmbH \& Co. KG},
pdftitle={AusweisApp2},
pdfsubject={Installation},
pdfkeywords={installation},

View File

@ -6,7 +6,7 @@ Table of contents
\clearpage
.. toctree::
:maxdepth: 2
:maxdepth: 3
:caption: Installation
README.de

View File

@ -0,0 +1,50 @@
AusweisApp2 1.16.2
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 15. April 2019
Anwender
""""""""
- Der Abbruch-Dialog beim Wechsel in den PIN-Änderungsmodus aus einem
laufenden Ausweisvorgang heraus wird nicht länger angezeigt.
- Alte Log-Dateien werden unter Android automatisch bereinigt.
- Gekoppelte Smartphones als Kartenleser (SaK) werden jetzt korrekt als
verfügbar angezeigt, wenn die Verbindung automatisch durch die AA2
hergestellt wurde.
- Erklärungstexte der mobilen App wurden verbessert.
- In der mobilen App erfolgt kein Browser-Redirect mehr, wenn die
Transport-PIN innerhalb eines Ausweisvorgangs in eine 6-stellige PIN
überführt wird.
- Der Fehlerdialog wurde um die Möglichkeit erweitert, eine Email an den
Support der AusweisApp2 zu senden, mit der Bitte die Protokolldatei
anzuhängen. Die Email enthält automatisch ermittelte Daten zum
verwendeten System sowie die letzten, kritischen Fehlermeldungen.
- Hinterlegte Daten zu Kartenlesern und Diensteanbietern wurden aktualisiert.
- Die Versionsnummer der AusweisApp2 ist nicht mehr Teil des
Installationspfads, um Probleme mit Antiviren-Software zu vermeiden.
- Ein Absturz beim Start einer Authentisierung, wenn die AusweisApp2
im Hintergrund läuft, ist behoben.
- Die Erkennung von Smartphones als Kartenleser wurde verbessert.
- Die Erkennung der Kartenleser in der Diagnose wurde korrigiert.
- Sonstige kleinere Fehler korrigiert.
Entwickler
""""""""""
- Der Standard-Logger der jeweiligen Plattform kann mittels
Parameter "--no-loghandler" deaktiviert werden.
- Anleitung "Installation in Firmennetzwerken" wurde erweitert.

View File

@ -4,10 +4,11 @@ Abkündigungen
Mit der Version 1.18.0 der AusweisApp2 wird die Unterstützung
folgender Systeme eingestellt.
- OS X 10.11
- x86-Architektur unter Android
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
Mit der Version 1.16.0 der AusweisApp2 wurde die Unterstützung
folgender Systeme eingestellt.
- OS X 10.10
@ -15,7 +16,7 @@ folgender Systeme eingestellt.
- Android 4.4
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
Mit der Version 1.16.0 der AusweisApp2 wurde die Unterstützung
folgender TLS-Cipher eingestellt.
- DHE-DSS-AES256-GCM-SHA384

View File

@ -4,6 +4,7 @@ Release Notes
.. toctree::
:maxdepth: 1
1.16.2
1.16.1
1.16.0
announce

View File

@ -42,7 +42,7 @@ master_doc = 'index'
# General information about the project.
project = 'AusweisApp2'
copyright = '2016-2018, Governikus GmbH & Co. KG'
copyright = '2016-2019, Governikus GmbH & Co. KG'
author = 'Governikus GmbH & Co. KG'
# The version info for the project you're documenting, acts as replacement for

View File

@ -34,9 +34,3 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem
Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung
gewechselt werden, wenn nur eine 5-stellige PIN vorhanden ist.
- Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem
Tastaturmodus merkt sich das entfernte Kartenlesegerät fälschlicherweise
die zuletzt ausgewählte Länge der PIN (5/6 Stellen). Ein Neustart des
Fernzugriffs auf dem entfernten Kartenlesegerät setzt die Länge auf
6 Stellen zurück.

View File

@ -42,7 +42,7 @@ master_doc = 'appcast'
# General information about the project.
project = 'AusweisApp2'
copyright = '2016-2018, Governikus GmbH & Co. KG'
copyright = '2016-2019, Governikus GmbH & Co. KG'
author = 'Governikus GmbH & Co. KG'
# The version info for the project you're documenting, acts as replacement for

View File

@ -48,9 +48,9 @@ und sollte daher mit allen marktüblichen Browsern verwendet werden können.
Im Rahmen der Qualitätssicherung werden die folgenden Browserversionen
getestet.
- Firefox 64
- Firefox 66
- Chrome 71
- Chrome 74
- Internet Explorer 11
@ -116,9 +116,9 @@ folgenden Browser zu verwenden.
- Firefox Klar 8
- Chrome 71
- Chrome 73
- Android System WebView 70
- Android System WebView 73

View File

@ -6,6 +6,7 @@ Versionszweig 1.16
.. toctree::
:maxdepth: 1
1.16.2
1.16.1
1.16.0

View File

@ -42,7 +42,7 @@ master_doc = 'index'
# General information about the project.
project = 'AusweisApp2 SDK'
copyright = '2016-2018, Governikus GmbH & Co. KG'
copyright = '2016-2019, Governikus GmbH & Co. KG'
author = 'Governikus GmbH & Co. KG'
# The version info for the project you're documenting, acts as replacement for

View File

@ -278,7 +278,14 @@ ELSEIF(APPLE)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -framework -sdk ${osx_sdk})
ELSEIF(WIN32)
IF(MSVC)
SET(QT_PLATFORM win32-msvc2015)
IF(MSVC_TOOLSET_VERSION STREQUAL "140")
SET(QT_PLATFORM win32-msvc2015)
ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "141")
SET(QT_PLATFORM win32-msvc2017)
ELSE()
MESSAGE(FATAL_ERROR "Version of MSVC not supported")
ENDIF()
SET(QT_OPENSSL OPENSSL_LIBS=-llibcrypto\ -llibssl)
ELSE()
SET(QT_PLATFORM win32-g++)
@ -333,6 +340,8 @@ ExternalProject_Add(qt
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Fix-crash.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-user-provided-session-data-if-available.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Work-Around-FreeBSD-v12-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}

View File

@ -0,0 +1,135 @@
From f65d3fbf6cc8a50a2b6b1b5632b9b9cf189054f0 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Wed, 19 Sep 2018 00:05:54 -0500
Subject: [PATCH] Linux: Remove our use of syscall() for statx(2) and
renameat2(2)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Those system calls are present in glibc 2.28. Instead of using
syscall(3) to place the system calls directly, let's use only the glibc
functions. That also means we no longer accept ENOSYS from either
function, if they were detected in glibc.
Change-Id: I44e7d800c68141bdaae0fffd1555b4b8fe63786b
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
---
src/corelib/global/minimum-linux_p.h | 7 +++-
src/corelib/io/qfilesystemengine_unix.cpp | 45 ++---------------------
2 files changed, 9 insertions(+), 43 deletions(-)
diff --git x/qtbase/src/corelib/global/minimum-linux_p.h y/qtbase/src/corelib/global/minimum-linux_p.h
index bad2488b4d..9c074e13ba 100644
--- x/qtbase/src/corelib/global/minimum-linux_p.h
+++ y/qtbase/src/corelib/global/minimum-linux_p.h
@@ -75,9 +75,14 @@ QT_BEGIN_NAMESPACE
* - accept4 2.6.28
* - renameat2 3.16 QT_CONFIG(renameat2)
* - getrandom 3.17 QT_CONFIG(getentropy)
+ * - statx 4.11 QT_CONFIG(statx)
*/
-#if QT_CONFIG(getentropy)
+#if QT_CONFIG(statx)
+# define MINLINUX_MAJOR 4
+# define MINLINUX_MINOR 11
+# define MINLINUX_PATCH 0
+#elif QT_CONFIG(getentropy)
# define MINLINUX_MAJOR 3
# define MINLINUX_MINOR 17
# define MINLINUX_PATCH 0
diff --git x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
index deb4a9f220..40e8f82a80 100644
--- x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
+++ y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 Intel Corporation.
+** Copyright (C) 2018 Intel Corporation.
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2013 Samuel Gaist <samuel.gaist@edeltech.ch>
** Contact: https://www.qt.io/licensing/
@@ -88,7 +88,6 @@ extern "C" NSString *NSTemporaryDirectory();
#if defined(Q_OS_LINUX)
# include <sys/ioctl.h>
-# include <sys/syscall.h>
# include <sys/sendfile.h>
# include <linux/fs.h>
@@ -96,28 +95,6 @@ extern "C" NSString *NSTemporaryDirectory();
#ifndef FICLONE
# define FICLONE _IOW(0x94, 9, int)
#endif
-
-# if defined(Q_OS_ANDROID)
-// renameat2() and statx() are disabled on Android because quite a few systems
-// come with sandboxes that kill applications that make system calls outside a
-// whitelist and several Android vendors can't be bothered to update the list.
-# undef SYS_renameat2
-# undef SYS_statx
-# undef STATX_BASIC_STATS
-# else
-# if !QT_CONFIG(renameat2) && defined(SYS_renameat2)
-static int renameat2(int oldfd, const char *oldpath, int newfd, const char *newpath, unsigned flags)
-{ return syscall(SYS_renameat2, oldfd, oldpath, newfd, newpath, flags); }
-# endif
-
-# if !QT_CONFIG(statx) && defined(SYS_statx)
-# include <linux/stat.h>
-static int statx(int dirfd, const char *pathname, int flag, unsigned mask, struct statx *statxbuf)
-{ return syscall(SYS_statx, dirfd, pathname, flag, mask, statxbuf); }
-# elif !QT_CONFIG(statx) && !defined(SYS_statx)
-# undef STATX_BASIC_STATS
-# endif
-# endif // !Q_OS_ANDROID
#endif
#ifndef STATX_ALL
@@ -331,22 +308,8 @@ mtime(const T &statBuffer, int)
#ifdef STATX_BASIC_STATS
static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer)
{
-#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
- static QBasicAtomicInteger<qint8> statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-#else
- static QBasicAtomicInt statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-#endif
-
- if (statxTested.load() == -1)
- return -ENOSYS;
-
unsigned mask = STATX_BASIC_STATS | STATX_BTIME;
int ret = statx(fd, pathname, flags, mask, statxBuffer);
- if (ret == -1 && errno == ENOSYS) {
- statxTested.store(-1);
- return -ENOSYS;
- }
- statxTested.store(1);
return ret == -1 ? -errno : 0;
}
@@ -1282,14 +1245,12 @@ bool QFileSystemEngine::renameFile(const QFileSystemEntry &source, const QFileSy
if (Q_UNLIKELY(srcPath.isEmpty() || tgtPath.isEmpty()))
return emptyFileEntryWarning(), false;
-#if defined(RENAME_NOREPLACE) && (QT_CONFIG(renameat2) || defined(SYS_renameat2))
+#if defined(RENAME_NOREPLACE) && QT_CONFIG(renameat2)
if (renameat2(AT_FDCWD, srcPath, AT_FDCWD, tgtPath, RENAME_NOREPLACE) == 0)
return true;
- // If we're using syscall(), check for ENOSYS;
- // if renameat2 came from libc, we don't accept ENOSYS.
// We can also get EINVAL for some non-local filesystems.
- if ((QT_CONFIG(renameat2) || errno != ENOSYS) && errno != EINVAL) {
+ if (errno != EINVAL) {
error = QSystemError(errno, QSystemError::StandardLibraryError);
return false;
}
--
2.20.1

View File

@ -0,0 +1,30 @@
From ec00fb42be3206956fd9ac7518018b47652f2bb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Fri, 28 Dec 2018 16:12:16 +0100
Subject: [PATCH] Work-Around FreeBSD v12 build
https://bugreports.qt.io/browse/QTBUG-72775
Change-Id: Ib39e8e488c2abd0321e91acd15614085c7e2156b
---
src/network/kernel/qnetworkinterface_unix.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
index d69fc47667..eebca77189 100644
--- x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
+++ y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
@@ -463,8 +463,10 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, int iftype, stru
case IFM_ETHER:
return QNetworkInterface::Ethernet;
+#ifndef Q_OS_FREEBSD
case IFM_FDDI:
return QNetworkInterface::Fddi;
+#endif
case IFM_IEEE80211:
return QNetworkInterface::Ieee80211;
--
2.20.1

View File

@ -25,7 +25,7 @@ IF(TARGET Qt5::Qml)
WRITE_QRC("${ausweisapp_qml.qrc}" "${CMAKE_CURRENT_SOURCE_DIR}/qml" "qml")
LIST(APPEND QRC_FILES "${ausweisapp_qml.qrc}")
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml CACHE string "qml files" FORCE)
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml CACHE STRING "qml files" FORCE)
ENDIF()
SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)

View File

@ -29,6 +29,10 @@
<file>images/tutorial/main_menu_where_caret.svg</file>
<file>images/tutorial/main_menu_how_caret.svg</file>
<file>images/tutorial/main_menu_important_caret.svg</file>
<file>images/tutorial/icon_box.svg</file>
<file>images/tutorial/icon_circle.svg</file>
<file>images/tutorial/icon_diamond.svg</file>
<file>images/tutorial/icon_star.svg</file>
<file>images/tutorial/arrow_blue.svg</file>
<file>images/tutorial/arrows.svg</file>
<file>images/tutorial/button_de.png</file>
@ -40,6 +44,7 @@
<file>images/tutorial/thumb_up.svg</file>
<file>images/tutorial/hand.svg</file>
<file>images/tutorial/check.svg</file>
<file>images/tutorial/cross.svg</file>
<file>images/tutorial/click.svg</file>
<file>images/tutorial/save.svg</file>
<file>images/tutorial/bva.svg</file>

View File

@ -40,7 +40,7 @@
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
"updateCertificates": [
"3082083a30820722a003020102020900d5b6a4dc1fd8854a300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3137313230313130343733325a170d3230313230363233353935395a308180310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a382035430820350301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201030603551d1f0481fb3081f83040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c3081b3a081b0a081ad8681aa6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f43657274696669636174655265766f636174696f6e4c6973743082014906082b060105050701010482013b30820137303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e6365723081ab06082b0601050507300286819e6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101006376f829a32345d2d590176bf2294d9ab6fe44e6c7db3b467bd597eebda4121d6e8795ec33de253ff9f271857c4a1ddf4b80b080464a51741a53de5137be13fc482e41b3649afbb571bfec2a894022d933ca60c691a99f31fe40209e7ca2e7fcd15d33baf8c1d20e107750cbd8628bc883af062a622f29c36574decaf97ef00471bbbe81380042ab82e46788491e4f77e58168f154d5210748263bfb8b2c3c82937436f758e1b2360c22458803a304eb90a4617bdcaa591176f4002e63dce3c9a3c7dcec83472dec70346544105118227fce63bae6a6686950846f65f30de621c1e5d6b7b20f3ce7d8ebbd95667c89123adb9efcbdd5ea1ba6e71b152bea43d3",
"308205633082044ba00302010202135100000749e339b5a8a2ecb8e8000000000749300d06092a864886f70d01010b0500304431153013060a0992268993f22c64011916056c6f63616c31153013060a0992268993f22c6401191605626f736b67311430120603550403130b676f766b67726f6f746361301e170d3136313232393039343930325a170d3138313232393039353930325a307c310b3009060355040613024445310b3009060355040813024445310f300d060355040713064272656d656e31163014060355040a130d476f7665726e696b7573204b47311c301a060355040b131353797374656d7320456e67696e656572696e6731193017060355040314102a2e74662e626f732d746573742e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100c2ce4b611d136b4a99f43bd6487c323f812f00c433ed7ec3d343b93c1b064ba12ff3f950634bbba55283ea48bf91d3a6736ee17c3467918b22d9ba1d55f9b8593461b42ed54454d15577abe0ec286203c4c33a82aae8216c802f8f81f1d06473f85acbf6ba69357828030a97086aa1bc6836cae3916d2d83f24c153a05402e13828a30822e7a861395be7d7c511b84baf4bc4a5daeb3db755b37e8ffb5dd18f8ac22c018801e212ab59b96e64b85c3d418c577c33ef73cc0ba5fef68041ba39fa0b795e7b5eabfa408c36ca582572ca2adde4cd104ccad376eaa06b41e737121f349eedb063438b406bd32dc032659e9cbad809afb5679d8a7d776a916ead35b0203010001a382021430820210300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b0601050507030130240603551d11041d301b82102a2e74662e626f732d746573742e646582012a87040ad2f861301d0603551d0e04160414262451b4431de1ccdb523d93038d7e01c4a3d153301f0603551d230418301680144b7e48a7b2f2db121642634bcd7e1c0deee96285303b0603551d1f043430323030a02ea02c862a687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f63726c2f7265766f6b652e63726c3081eb06082b060105050701010481de3081db3081aa06082b0601050507300286819d6c6461703a2f2f2f434e3d676f766b67726f6f7463612c434e3d4149412c434e3d5075626c69632532304b657925323053657276696365732c434e3d53657276696365732c434e3d436f6e66696775726174696f6e2c44433d626f736b672c44433d6c6f63616c3f634143657274696669636174653f626173653f6f626a656374436c6173733d63657274696669636174696f6e417574686f72697479302c06082b060105050730018620687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f6f637370303b06092b0601040182371507042e302c06242b060104018237150887a4920efcad6b83a98117819cb41586e9ea5a1791ff2e87b7af7c020164020109301b06092b060104018237150a040e300c300a06082b06010505070301300d06092a864886f70d01010b05000382010100a41dd5971c9b983bc3369bc9f3046481ff05aab5b47fac27a8cb7f917585b15c5acfbc8d083375a459b0642974968f4e00ad501d715dfb8a9e098437459ddcbba5a7d49f0278bd841b89fb93e86683bd89334f6b5ab556834e1fb4ec86647e812438e17512ee87b01bd0679b3abf4a67fe7272eae0c4cd9ed174d70b2728e72361cded46a42d445dfe244efb55feb1eee13f614d30237ee399b4108bc596b8aab377ad98d22c87ce4ce976ec1ceac512c33d6941b715d9fa60882b4644f9a066dcd51ff6c429af37cfa38f06444e6682d09643b2866a23a42da0ae21a787e8fe40aa2b21aa55a10aa42097c9a219528ac4968eb12cec5f223791a40d21fcce05"
"3082093a30820822a0030201020210042e5dd11e0c69cdec3882747019081c300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3139303330373131343530325a170d3231303331323233353935395a3074310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3113301106035504030c0a2a2e676f766b672e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100b03a180c094b52a862ef5fce194147f705d3340d79282a103a14d14fabe3d849a62df93b5f09eed3ad60e6ae5570a3823370aeeb888df9e0fc9a513be26308d783cc7cefd4ef43337e2c854b03ef399c647a19d31c39fe2b1d08c9cc27462ba5e43bc97e494ac62059496579967fa3fe8b1111e016d6dd37eda00e5617bb571cbb042e6750d17dd3acf1055b8dd6a1130214992a673bfc671e2586355378dfbb14a2910d37faa221178cb2dba0e87544ed6acbb2344ac439dbd16c05e1c0f76fa757305c0c38f3ccab420fd49603717986c8d748ce4ea2863260da6a832df53bb6247ada2431239b0a9815b89d6bb0f58a4da508695637c0b10368260cbf7dd8d469fb81d21b560a25125e9cfc8ae09a8b9e7a1cc688a8e49c045f1dc397a7c28e637b11c5205d8375ccfb627b071a813665de2fe172de97671dfecce44d9545a6f083cff4c7e2df4780b9073b19ca93b97561ca0c9bc5687ec0a1de993b199eca2576e820f26ce043fbab092f6e0bbc510b14d4b2489733e28cd38f40928cce16f4f3b6bba6277cff19312ad5771507ae729b6c083924c53d1c1fc33e370af1a0060307b3ef83880886334133c2e645bbf7f14a26acbce1609daceac1ed8d5d2bff8d8ed095a7af79f608134256f1e4a34650225595dd9fa5746448417d7a2f8f0c5ef001b5e4780e6d8caf818b314fb708447f70f3844d39a7ff437ebbf6a70203010001a382045a30820456301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e04160414db05538bd26c0bea1bcb5cde439b81e6ab8aa40b305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202304b0603551d1f044430423040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c30819906082b0601050507010104818c308189303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e636572300c0603551d130101ff04023000301f0603551d1104183016820a2a2e676f766b672e64658208676f766b672e64653082026f060a2b06010401d6790204020482025f0482025b02590076006f5376ac31f03119d89900a45115ff77151c11d902c10029068db2089a37d9130000016957f896900000040300473045022046b42ef57f79c932690c6558eb52f354b8e4f5c49c7dc50616a351dbbe823785022100957c17a3f70a7ee20a920a29bb123e186b425a4c0c4dbd5372ab5163abe88284007600ee4bbdb775ce60bae142691fabe19e66a30f7e5fb072d88300c47b897aa8fdcb0000016957f89686000004030047304502210085921f55932ee2b42b7b6cd1b9627f9d376485024210f8f4358d60ebc25b6d6d022069f72703fc8d7added3f8cc041aee457d011e22425ecdfbebcfd1b312c0ad6220077005581d4c2169036014aea0b9b573c53f0c0e43878702508172fa3aa1d0713d30c0000016957f897e400000403004830460221009c4b1fdcfde4bacba79665a77da038ab42399578dbc80c9ce21ab5054217edf2022100d23970d124e0f1ee384f6cc2e53d76df6069190dc91b9be5be24219898081ad9007600a4b90990b418581487bb13a2cc67700a3c359804f91bdfb8e377cd0ec80ddc100000016957f8968c000004030047304502210099ca67064864c67ab92b4f13c11fd8be58453585f80e4e3d9a1d18a191aba1670220603bc43ad9700dd891e1bb135b2cd0fad041a6f63bed0d9c778a3e96d6082f33007600bbd9dfbc1f8a71b593942397aa927b473857950aab52e81a909664368e1ed1850000016957f896870000040300473045022100e6810cf7ec2ee244d5ae516246973f46c7710bf075c923b21451abc6622b9dee02202ccd410f907ba8176bcb12198f1b0821cf95a550e2486a0292cadca7a670dac2300d06092a864886f70d01010b05000382010100103ab77dff430d59dcd9d5c94b9c2ea44d829d0a70777c42a137ea627eca87881ce9131f00ea7282f7fe7cd7ac8f154f84622023183aac3f02ce4a5925cfb771961e114b78cec3950c0a4aa7726c01ba69c60cf3a4c68ea63e92f8dd0bf2f1e033bb91c536df9945ba281abae1bde75f920f94df2fa2c2ff708a57291114889e374eb9c8f7da0bb8a0d19bda964b3ac32e174cbb9d956c9693f0a6326a80d7019cbc8e54949981d5bf231f85c6ff5be5bc0fcaeb637bf84a8be424ebe2cefdef4c89d2a4682efda5c8010e432977d26e6f30e7e9ed13f612fea99dbd9799e6460ca780a109ff3dc7a86887479832baac8589aebeadf50759077aadfd2d467d06"
],
"tlsSettings": {

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="43px" height="38px" viewBox="0 0 43 38">
<path fill="#fff" stroke-linejoin="round" stroke="#000" stroke-width="0.75px" d="M 9.75 35.625 h 4 l 27.5 -33.25 h -4" />
<path fill="#000" stroke-linejoin="round" d="M 2 2 h 8 l 28 34 h -8 Z" />
<path fill="#000" stroke-linejoin="round" d="M 30 2 h 8 l -28 34 h -8 Z" />
</svg>

After

Width:  |  Height:  |  Size: 428 B

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28">
<rect x="5" y="5" width="21" height="21" fill="none" stroke-width="2px" stroke="#ffffff" stroke-opacity="0.3" />
</svg>

After

Width:  |  Height:  |  Size: 323 B

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="12" fill="none" stroke-width="2px" stroke="#ffffff" stroke-opacity="0.3" />
</svg>

After

Width:  |  Height:  |  Size: 312 B

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28">
<path d="M 14 2 L 26 14 14 26 2 14 Z" fill="none" stroke-width="2px" stroke="#ffffff" stroke-opacity="0.3" />
</svg>

After

Width:  |  Height:  |  Size: 320 B

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="28px" height="28px" viewBox="0 0 28 28">
<path d="M 14 2 L 26 10 22 26 6 26 2 10 Z" fill="none" stroke-width="2px" stroke="#ffffff" stroke-opacity="0.3" />
</svg>

After

Width:  |  Height:  |  Size: 281 B

View File

@ -1,7 +1,7 @@
FROM scratch
MAINTAINER Governikus KG <ausweisapp2@governikus.com>
ARG version="3.8.0"
ARG version="3.9.0"
ARG arch="x86_64"
ADD alpine-minirootfs-$version-$arch.tar.gz /

View File

@ -7,7 +7,7 @@ RUN echo "[multilib]" >> /etc/pacman.conf && echo 'Include = /etc/pacman.d/mirro
RUN chown -R governikus: /var/cache/pacman/pkg/
ARG JENKINS_SWARM_VERSION=3.13
ARG JENKINS_SWARM_VERSION=3.15
ARG TINI_VERSION=0.18.0
RUN curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/v$TINI_VERSION/tini-static-muslc-amd64 && chmod 755 /sbin/tini && \
curl -L -o /swarm-client.jar https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/$JENKINS_SWARM_VERSION/swarm-client-$JENKINS_SWARM_VERSION.jar

View File

@ -3,7 +3,7 @@ MAINTAINER Governikus KG <ausweisapp2@governikus.com>
ENV NAME=Common LABELS=Common
RUN apk --no-cache add cmake make uncrustify py2-pip && pip install python-hglib && apk del py2-pip
RUN apk --no-cache add cmake make uncrustify
USER governikus

View File

@ -3,7 +3,7 @@ MAINTAINER Governikus KG <ausweisapp2@governikus.com>
ENV NAME=Docs LABELS=Docs
RUN apk --no-cache add cmake make py2-sphinx py2-setuptools py2-pip py2-hglib icu-libs poppler zziplib texlive-full && \
RUN apk --no-cache add cmake make py2-sphinx py2-setuptools py2-pip icu-libs poppler zziplib texlive-full && \
pip install doc8 cloud_sptheme
USER governikus

View File

@ -16,21 +16,3 @@ do
docker build -t alpine:$i .
done
################### Arch
cd ../arch
ls archlinux-bootstrap-*.tar.gz >/dev/null
ls busybox* >/dev/null
echo "Building base Arch ..."
docker build -t arch:latest .
cd ..
images=(android)
for i in "${images[@]}"
do
echo "Building $i ..."
docker build -t arch:$i -f $i/Dockerfile .
done

View File

@ -1,13 +1,13 @@
FROM alpine:swarm
MAINTAINER Governikus KG <ausweisapp2@governikus.com>
ENV NAME=Linux LABELS="Linux g++ clang++"
ENV NAME=Linux LABELS="Linux g++ clang++" PACKAGES_DIR=/home/governikus/packages
RUN apk --no-cache add cmake make g++ clang clang-analyzer mercurial ccache gcovr cloc cppcheck pkgconf ninja pcsc-lite-dev binutils-gold \
RUN apk --no-cache add cmake make g++ clang clang-analyzer ccache cloc cppcheck pkgconf ninja pcsc-lite-dev binutils-gold \
mesa-dev libx11-dev libxkbcommon-dev xcb-util-wm-dev xcb-util-image-dev xcb-util-keysyms-dev \
py2-pip && \
ln -s /usr/libexec/c++-analyzer /usr/local/bin && ln -s /usr/libexec/ccc-analyzer /usr/local/bin && \
pip install python-hglib && apk del py2-pip
pip install gcovr && apk del py2-pip
USER governikus
RUN mkdir -p /home/governikus/.ccache && mkdir -p /home/governikus/workspace && mkdir -p /home/governikus/packages

View File

@ -1,11 +1,11 @@
FROM alpine:latest
MAINTAINER Governikus KG <ausweisapp2@governikus.com>
ARG JENKINS_SWARM_VERSION=3.13
ARG JENKINS_SWARM_VERSION=3.15
ENV EXECUTOR=3 LABELS= NAME= PASSWORD=
RUN adduser governikus -s /bin/sh -D
RUN apk --no-cache add openjdk8-jre tini mercurial wget
RUN apk --no-cache add openjdk8-jre tini mercurial py2-hglib wget
RUN wget -O /swarm-client.jar https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/$JENKINS_SWARM_VERSION/swarm-client-$JENKINS_SWARM_VERSION.jar
ADD swarm.sh /

View File

@ -5,9 +5,9 @@ name=${NAME:-undefined}
executor=${EXECUTOR:-1}
labels=${LABELS:-undefined}
mode=${MODE:-exclusive}
master=${MASTER:-https://vtf-aajenkins.tf.bos-test.de/}
user=${USER:-aajenkins}
fingerprints=${FINGERPRINTS:-68:21:59:5C:C0:B0:1F:78:FF:23:DE:D4:D8:05:0F:74:38:B2:A5:A4:F2:1B:5B:A7:AA:81:2A:A1:46:A8:EB:3A}
master=${MASTER:-https://ausweisapp-ci.govkg.de/}
user=${USER:-jenkins-swarm}
fingerprints=${FINGERPRINTS:-74:8C:AE:1C:05:99:95:04:66:CC:B1:27:6F:2B:59:E7:1E:64:47:45:D3:C1:E8:5B:E6:E5:1F:BD:98:97:18:FB}
/usr/bin/java \
-jar /swarm-client.jar \

View File

@ -40,6 +40,11 @@ j.with
publishers {
androidLint('build/dist/build/outputs/lint-results-*.xml')
{
thresholds(
unstableTotal: [all: 14]
)
}
}
}
@ -88,6 +93,11 @@ j.with
publishers {
androidLint('build/dist/build/outputs/lint-results-*.xml')
{
thresholds(
unstableTotal: [all: 12]
)
}
}
}

View File

@ -33,13 +33,11 @@ j.with
'''))
shell('''\
export LD_LIBRARY_PATH=$WORKSPACE/libs/build/dist/lib:$LD_LIBRARY_PATH
cd build; make ${MAKE_FLAGS}
'''.stripIndent().trim())
shell('''\
export QML2_IMPORT_PATH=$WORKSPACE/libs/build/dist/qml
export LD_LIBRARY_PATH=$WORKSPACE/libs/build/dist/lib:$LD_LIBRARY_PATH
export ASAN_OPTIONS=detect_leaks=0,new_delete_type_mismatch=0
cd build; ctest --output-on-failure ${MAKE_FLAGS}
'''.stripIndent().trim())

View File

@ -15,13 +15,13 @@ j.with
{
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake ../source -DCMAKE_CXX_COMPILER=clcache -DCMAKE_PREFIX_PATH=%WORKSPACE%/libs/build/dist -GNinja
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja %MAKE_FLAGS%
'''.stripIndent().trim())

View File

@ -16,19 +16,19 @@ j.with
{
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake ../source -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_COMPILER=clcache -DCMAKE_PREFIX_PATH=%WORKSPACE%/libs/build/dist -GNinja -DWIN_SIGN_KEYSTORE=%WIN_SIGN_KEYSTORE% -DWIN_SIGN_KEYSTORE_PSW=%WIN_SIGN_KEYSTORE_PSW% -DWIN_SIGN_SUBJECT_NAME=%WIN_SIGN_SUBJECT_NAME%
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja %MAKE_FLAGS% package
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja package.sign
'''.stripIndent().trim())
}

View File

@ -11,7 +11,7 @@ j.with
{
steps
{
shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=\${PACKAGES_DIR}")
shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=debug -DPACKAGES_DIR=\${PACKAGES_DIR}")
shell('cd build; make compress')
}

View File

@ -13,13 +13,13 @@ j.with
{
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=%PACKAGES_DIR% -G"NMake Makefiles" -DWIN_SIGN_KEYSTORE=%WIN_SIGN_KEYSTORE% -DWIN_SIGN_KEYSTORE_PSW=%WIN_SIGN_KEYSTORE_PSW% -DWIN_SIGN_SUBJECT_NAME=%WIN_SIGN_SUBJECT_NAME%
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
nmake compress
'''.stripIndent().trim())
}

View File

@ -13,13 +13,13 @@ j.with
{
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake ../source/libs -DPACKAGES_DIR=%PACKAGES_DIR% -G"NMake Makefiles" -DWIN_SIGN_KEYSTORE=%WIN_SIGN_KEYSTORE% -DWIN_SIGN_KEYSTORE_PSW=%WIN_SIGN_KEYSTORE_PSW% -DWIN_SIGN_SUBJECT_NAME=%WIN_SIGN_SUBJECT_NAME%
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
nmake compress
'''.stripIndent().trim())
}

View File

@ -39,6 +39,11 @@ j.with
publishers {
androidLint('build/dist/build/outputs/lint-results-*.xml')
{
thresholds(
unstableTotal: [all: 14]
)
}
}
}
@ -94,6 +99,11 @@ j.with
publishers {
androidLint('build/dist/build/outputs/lint-results-*.xml')
{
thresholds(
unstableTotal: [all: 12]
)
}
}
}

View File

@ -6,7 +6,7 @@ def j = new Review
name: 'FreeBSD',
libraries: ['FreeBSD'],
label: 'FreeBSD',
artifacts: 'tmp/AusweisApp2.*.log',
artifacts: 'tmp/*.log',
allowEmptyArtifacts: true,
xunit: true,
).generate(this)

View File

@ -15,13 +15,13 @@ j.with
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=%PACKAGES_DIR% -G"NMake Makefiles" -DWIN_SIGN_KEYSTORE=%WIN_SIGN_KEYSTORE% -DWIN_SIGN_KEYSTORE_PSW=%WIN_SIGN_KEYSTORE_PSW% -DWIN_SIGN_SUBJECT_NAME=%WIN_SIGN_SUBJECT_NAME%
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
nmake compress
'''.stripIndent().trim())
}

View File

@ -7,7 +7,7 @@ def j = new Review
name: 'Linux',
libraries: ['Linux'],
label: 'Linux',
artifacts: 'tmp/AusweisApp2.*.log',
artifacts: 'tmp/*.log',
allowEmptyArtifacts: true,
xunit: true,
jobType: JobType.Matrix
@ -44,13 +44,11 @@ j.with
'''))
shell('''\
export LD_LIBRARY_PATH=$WORKSPACE/libs/build/dist/lib:$LD_LIBRARY_PATH
cd build; make ${MAKE_FLAGS}
'''.stripIndent().trim())
shell('''\
export QML2_IMPORT_PATH=${WORKSPACE}/libs/build/dist/qml
export LD_LIBRARY_PATH=$WORKSPACE/libs/build/dist/lib:$LD_LIBRARY_PATH
export ASAN_OPTIONS=detect_leaks=0,new_delete_type_mismatch=0
cd build; ctest --output-on-failure ${MAKE_FLAGS}
'''.stripIndent().trim())

View File

@ -6,7 +6,7 @@ def j = new Review
name: 'MacOS',
libraries: ['MacOS'],
label: 'MacOS',
artifacts: 'tmp/AusweisApp2.*.log',
artifacts: 'tmp/*.log',
allowEmptyArtifacts: true,
xunit: true
).generate(this)

View File

@ -6,7 +6,7 @@ def j = new Review
name: 'Win32_GNU',
libraries: ['Win32_GNU'],
label: 'Windows',
artifacts: 'tmp/AusweisApp2.*.log',
artifacts: 'tmp/*.log',
allowEmptyArtifacts: true,
xunit: true
).generate(this)

View File

@ -5,7 +5,7 @@ def j = new Review
name: 'Win32_MSVC',
libraries: ['Win32_MSVC_dev'],
label: 'MSVC',
artifacts: 'tmp/AusweisApp2.*.log',
artifacts: 'tmp/*.log',
allowEmptyArtifacts: true,
xunit: true
).generate(this)
@ -19,13 +19,13 @@ j.with
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake -Werror=dev ../source -DCMAKE_CXX_COMPILER=clcache -DCMAKE_PREFIX_PATH=%WORKSPACE%/libs/build/dist -GNinja
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja %MAKE_FLAGS%
'''.stripIndent().trim())

View File

@ -17,19 +17,19 @@ j.with
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
cmake -Werror=dev ../source -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_COMPILER=clcache -DCMAKE_PREFIX_PATH=%WORKSPACE%/libs/build/dist -GNinja -DWIN_SIGN_KEYSTORE=%WIN_SIGN_KEYSTORE% -DWIN_SIGN_KEYSTORE_PSW=%WIN_SIGN_KEYSTORE_PSW% -DWIN_SIGN_SUBJECT_NAME=%WIN_SIGN_SUBJECT_NAME%
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja %MAKE_FLAGS% package
'''.stripIndent().trim())
batchFile('''\
cd build
call vcvarsall.bat
call vcvarsall.bat x86
ninja package.sign
'''.stripIndent().trim())
}

View File

@ -3,6 +3,12 @@
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name" android:icon="@drawable/npa">
<meta-data android:name="android.max_aspect" android:value="2.1" />
<receiver android:name="com.governikus.ausweisapp2.UpdateReceiver" >
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}"
android:exported="false"
@ -160,6 +166,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.NFC"/>

View File

@ -24,9 +24,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleVersion</key>
<string>@VERSION@</string>
<string>@PROJECT_VERSION@</string>
<key>CFBundleShortVersionString</key>
<string>@VERSION@</string>
<string>@PROJECT_VERSION@</string>
<key>CFBundleSignature</key>
<string>aaii</string>
<key>NSHumanReadableCopyright</key>

View File

@ -48,6 +48,6 @@
<String Id="CustomInstallDirDlg_Title" Overridable="yes">Installationsoptionen</String>
<String Id="CustomInstallDirDlg_Description" Overridable="yes"></String>
<String Id="CustomInstallDirDlg_DesktopShortcutCheckBox" Overridable="yes">Verknüpfung auf dem Desktop anlegen</String>
<String Id="CustomInstallDirDlg_SystemSettingsCheckBox" Overridable="yes">Die [ProductName] im System registrieren (Firewall- und Browser-Einstellungen vornehmen)</String>
<String Id="CustomInstallDirDlg_SystemSettingsCheckBox" Overridable="yes">Notwendige Regeln zur Windows-Firewall hinzufügen</String>
<String Id="CustomExitDialog_LaunchCheckBox" Overridable="yes">Starten der AusweisApp2</String>
</WixLocalization>

View File

@ -8,6 +8,6 @@
<String Id="CustomInstallDirDlg_Title" Overridable="yes">Installation options</String>
<String Id="CustomInstallDirDlg_Description" Overridable="yes"></String>
<String Id="CustomInstallDirDlg_DesktopShortcutCheckBox" Overridable="yes">Create link on desktop</String>
<String Id="CustomInstallDirDlg_SystemSettingsCheckBox" Overridable="yes">Register the [ProductName] in the system (Firewall and Browser settings)</String>
<String Id="CustomInstallDirDlg_SystemSettingsCheckBox" Overridable="yes">Add required rules to Windows Firewall</String>
<String Id="CustomExitDialog_LaunchCheckBox" Overridable="yes">Start AusweisApp</String>
</WixLocalization>

View File

@ -29,6 +29,7 @@
<MajorUpgrade
Schedule="afterInstallInitialize"
AllowSameVersionUpgrades="yes"
DowngradeErrorMessage="!(loc.DowngradeErrorMessage)"/>
<Condition Message="!(loc.WindowsServerNotSupported)">

View File

@ -52,6 +52,15 @@ ApplicationWindow {
anchors.top: parent.top
anchors.right: parent.right
anchors.bottom: Constants.bottomNavigation ? navBar.top : parent.bottom
onReadyChanged: {
splashScreen.hide()
if (!ApplicationModel.currentWorkflow && !settingsModel.showTutorialOnStart) {
navBar.lockedAndHidden = false
}
feedback.showIfNecessary()
}
}
Navigation {
@ -106,8 +115,7 @@ ApplicationWindow {
x: (appWindow.width - width) / 2
y: (appWindow.height - height) / 2
property alias ready: contentArea.ready
onReadyChanged: {
function showIfNecessary() {
if (ApplicationModel.areStoreFeedbackDialogConditionsMet()) {
ApplicationModel.hideFutureStoreFeedbackDialogs()
feedback.open()
@ -115,16 +123,14 @@ ApplicationWindow {
}
}
Connections {
target: plugin
enabled: contentArea.ready
onFireApplicationActivated: feedback.showIfNecessary()
}
SplashScreen {
id: splashScreen
color: appWindow.color
property alias ready: contentArea.ready
onReadyChanged: {
splashScreen.hide()
if (!ApplicationModel.currentWorkflow && !settingsModel.showTutorialOnStart) {
navBar.lockedAndHidden = false
}
}
}
}

View File

@ -10,7 +10,6 @@ import Governikus.Type.NumberModel 1.0
SectionPage
{
id: baseItem
property string remoteDeviceId: ""
property alias enableTransportPinLink: transportPinLink.enableTransportPinLink
signal pinEntered()
signal changePinLength()
@ -163,7 +162,7 @@ SectionPage
baseItem.pinEntered()
break
case "REMOTE_PIN":
RemoteServiceModel.connectToServer(remoteDeviceId, pinField.text)
RemoteServiceModel.connectToRememberedServer(pinField.text)
baseItem.pinEntered()
break
}

View File

@ -71,7 +71,7 @@ SectionPage {
Loader {
readonly property string titleText: qsTr("FAQ") + settingsModel.translationTrigger
readonly property string descriptionText: qsTr("Do you have questions how to use AusweisApp2?") + settingsModel.translationTrigger
function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/questions-and-answers/frequently-asked-questions/")) }
function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/")) }
width: parent.width
sourceComponent: subMenu
}
@ -79,7 +79,7 @@ SectionPage {
Loader {
readonly property string titleText: qsTr("Support") + settingsModel.translationTrigger
readonly property string descriptionText: qsTr("You need further help?") + settingsModel.translationTrigger
function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/questions-and-answers/support/")) }
function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/support/")) }
width: parent.width
sourceComponent: subMenu
}

View File

@ -8,10 +8,12 @@ import "Utils.js" as Utils
* Android style guide for material design is adapted.
*/
Item {
id: baseItem
property alias text: textItem.text
property color buttonColor: Constants.blue
property int maxWidth: 0
property alias iconSource: icon.source
property bool animationsDisabled: false
signal clicked
@ -20,11 +22,11 @@ Item {
state: "normal"
states: [
State { name: "normal"; when: !mouseArea.pressed
State { name: "normal"; when: baseItem.animationsDisabled || !mouseArea.pressed
PropertyChanges { target: darkLayer; width: 0 }
PropertyChanges { target: shadow; verticalOffset: Utils.dp(2) }
},
State { name: "pressed"; when: mouseArea.pressed
State { name: "pressed"; when: !baseItem.animationsDisabled && mouseArea.pressed
PropertyChanges { target: darkLayer; width: 2 * rect.width }
PropertyChanges { target: shadow; verticalOffset: Utils.dp(8) }
}

View File

@ -9,8 +9,9 @@ Rectangle {
property alias text: textItem.text
property color buttonColor : Constants.blue
property int maxWidth: 0
property int preferedWidth: parent.width - 4 * Constants.component_spacing
property int preferedWidth: Math.max(textItem.implicitWidth + (icon.visible ? (icon.width + icon.anchors.leftMargin) : 0) + (2 * Utils.dp(16)), Utils.dp(88))
property alias iconSource: icon.source
property bool animationsDisabled: false
signal clicked
@ -31,11 +32,15 @@ Rectangle {
Text {
id: textItem
anchors.centerIn: parent
anchors.left: rect.left
anchors.right: rect.right
anchors.verticalCenter: rect.verticalCenter
color: enabled ? "white" : "#40000000"
horizontalAlignment: Text.AlignHCenter
opacity: mouseArea.containsMouse ? 0.5 : 1
anchors.leftMargin: icon.visible ? icon.width + icon.anchors.leftMargin : 0
font.pixelSize: Utils.dp(16)
font.bold: true
}
MouseArea{
@ -50,7 +55,7 @@ Rectangle {
x: mouseArea.mouseX - width * 0.5
height: parent.height
width: height * 2
visible: mouseArea.pressed
visible: !rect.animationsDisabled && mouseArea.pressed
opacity: 1
gradient: Gradient {
GradientStop { position: 0.0; color: Qt.rgba(255,255,255,1) }

View File

@ -173,7 +173,7 @@ Item {
break
case "FinalState":
navBar.lockedAndHidden = true
if (AuthModel.error) {
if (AuthModel.error && !AuthModel.hasNextWorkflowPending) {
showRemoveCardFeedback()
firePush(identifyResult)
} else {

View File

@ -103,7 +103,7 @@ SectionPage
EnterPinView {
id: enterPinView
leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: AuthModel.cancelWorkflow() }
leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: { firePop(); AuthModel.cancelWorkflow() } }
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger }
visible: false
@ -113,7 +113,7 @@ SectionPage
}
onChangePinLength: {
firePush(changeToTransportPinView)
fireReplace(changeToTransportPinView)
}
}
@ -174,12 +174,14 @@ SectionPage
ResultView {
id: changeToTransportPinView
leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() }
leftTitleBarAction: TitleBarAction { state: "back"; onClicked: fireReplace(enterPinView) }
headerTitleBarAction: TitleBarAction { text: qsTr("Change transport PIN") + settingsModel.translationTrigger; font.bold: true }
resultType: ResultView.Type.IsInfo
buttonText: qsTr("Change PIN") + settingsModel.translationTrigger
text: qsTr("You leave the process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.") + settingsModel.translationTrigger
text: qsTr("You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.") + settingsModel.translationTrigger
onClicked: {
firePop()
AuthModel.setSkipRedirect(true)
ChangePinModel.startWorkflow()
AuthModel.cancelWorkflowToChangePin()
}

View File

@ -4,10 +4,35 @@ import Governikus.Global 1.0
import Governikus.TitleBar 1.0
import Governikus.Type.ApplicationModel 1.0
Item {
id: baseItem
QtObject {
id: d
property int testPkiCounter: 0
function toggleTestPki() {
d.testPkiCounter += 1
switch (d.testPkiCounter) {
case 7:
case 8:
case 9:
qmlExtension.showFeedback(10-d.testPkiCounter + qsTr(" more presses to toggle test PKI.") + settingsModel.translationTrigger)
break;
case 10:
settingsModel.useSelfauthenticationTestUri = !settingsModel.useSelfauthenticationTestUri
if(settingsModel.useSelfauthenticationTestUri) {
qmlExtension.showFeedback(qsTr("Test PKI activated.") + settingsModel.translationTrigger)
} else {
qmlExtension.showFeedback(qsTr("Test PKI deactivated.") + settingsModel.translationTrigger)
}
d.testPkiCounter = 0;
break;
}
}
}
Column {
readonly property int maxWidth: width - 2 * Constants.pane_padding
width: baseItem.width
@ -29,6 +54,13 @@ Item {
width: Math.min(maxHeight * ratio, parent.width * 0.4)
fillMode: Image.PreserveAspectFit
source: "qrc:///images/siteWithLogo.png"
MouseArea {
anchors.fill: parent
onClicked: {
d.toggleTestPki()
}
}
}
Text {

View File

@ -42,13 +42,13 @@ SectionPage {
MoreViewMenuItem {
text: qsTr("FAQ") + settingsModel.translationTrigger
imageSource: "qrc:///images/iOS/more/icon_mehr_info.svg"
onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/questions-and-answers/frequently-asked-questions/"))
onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/"))
}
MoreViewMenuItem {
text: qsTr("Support") + settingsModel.translationTrigger
imageSource: "qrc:///images/iOS/more/icon_mehr_fragen.svg"
onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/questions-and-answers/support/"))
onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/support/"))
}
MoreViewMenuItem {
@ -60,7 +60,7 @@ SectionPage {
Qt.openUrlExternally("market://details?id=com.governikus.ausweisapp2")
}
else if (Qt.platform.os === "ios") {
Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/questions-and-answers/evaluate-us/"))
Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/evaluate-us/"))
}
}
}

View File

@ -60,7 +60,7 @@ Popup {
inputMethodHints: Qt.ImhDigitsOnly
validator: RegExpValidator { regExp: /\d\d\d\d/ }
onAccepted: {
RemoteServiceModel.connectToServer(deviceId, name.getText(0,4))
RemoteServiceModel.connectToRememberedServer(name.getText(0,4))
close()
}
}
@ -71,7 +71,7 @@ Popup {
visible: requestInput
onClicked: {
RemoteServiceModel.connectToServer(deviceId, name.getText(0,4))
RemoteServiceModel.connectToRememberedServer(name.getText(0,4))
close()
}
}

View File

@ -80,7 +80,9 @@ Item {
delegate: AvailableDevicesListDelegate {
width: searchDeviceList.width
onRequestPairing: {
enterPinView.remoteDeviceId = pDeviceId
if (!RemoteServiceModel.rememberServer(pDeviceId)) {
return
}
informationPairingPopup.open()
}
}

View File

@ -6,11 +6,32 @@ Rectangle {
id: baseItem
height: Math.max(backToMenu.height, quitTutorial.height)
property alias backRotation: leftArrow.rotation
property alias backText: menuText.text
property bool backToMenuActive: true
signal menuClicked()
signal quitTutorialClicked()
states: [
State { name: "showBothOptions"; when: baseItem.backToMenuActive
PropertyChanges { target: backToMenu; opacity: 1 }
AnchorChanges { target: quitTutorial; anchors.right: baseItem.right}
AnchorChanges { target: quitTutorial; anchors.horizontalCenter: undefined}
},
State { name: "showOnlyQuit"; when: !baseItem.backToMenuActive
AnchorChanges { target: quitTutorial; anchors.horizontalCenter: baseItem.horizontalCenter}
AnchorChanges { target: quitTutorial; anchors.right: undefined}
PropertyChanges { target: backToMenu; opacity: 0 }
}
]
transitions: [
Transition {
PropertyAnimation { target: backToMenu; property: "opacity"}
AnchorAnimation { duration: 500; easing.type: Easing.InOutQuad }
}
]
Item {
id: backToMenu
anchors.left: parent.left
@ -33,6 +54,7 @@ Rectangle {
spacing: Constants.component_spacing
Image {
id: leftArrow
source: "qrc:///images/tutorial/arrows.svg"
rotation: -90
anchors.verticalCenter: parent.verticalCenter
@ -51,15 +73,12 @@ Rectangle {
color: Constants.white
}
}
}
Item {
id: quitTutorial
height: quitRow.height + 2 * Constants.component_spacing
width: quitRow.width
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
MouseArea {
@ -74,7 +93,7 @@ Rectangle {
id: quitRow
height: quitText.height
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.horizontalCenter: parent.horizontalCenter
padding: Constants.component_spacing
spacing: Constants.component_spacing
@ -89,7 +108,7 @@ Rectangle {
Image {
anchors.verticalCenter: parent.verticalCenter
source: "qrc:///images/tutorial/arrows.svg"
source: "qrc:///images/tutorial/cross.svg"
height: parent.height
width: height * (sourceSize.width / sourceSize.height)

View File

@ -9,24 +9,40 @@ Item {
property alias headerImageSource: headerImage.source
property alias titleText: title.text
property string miniIconSource
property alias miniIconCoordinates: backgroundIcons.model
property bool overlapping: true
property real overlappingHeight: overlapping ? height * (4.0/3.0) : height
property bool categoryAbove: true
property real initY
signal clicked()
Image{
id: headerImage
width: parent.width
height: overlapping ? parent.height * (4.0/3.0) : parent.height
height: baseItem.overlappingHeight
fillMode: Image.Stretch
MouseArea{
MouseArea {
anchors.fill: parent
onClicked: baseItem.clicked()
}
Repeater {
id: backgroundIcons
Image {
source: baseItem.miniIconSource
width: height
height: 0.125 * baseItem.overlappingHeight
x: modelData.x * baseItem.width
y: modelData.y * baseItem.overlappingHeight
}
}
Text {
id: title
anchors.centerIn: parent
anchors.horizontalCenter: parent.horizontalCenter
y: ((categoryAbove ? 0.575 : 0.5) * parent.height) - (0.5 * height)
font.bold: true
font.pixelSize: Constants.tutorial_header_font_size
layer.enabled: true

View File

@ -135,10 +135,13 @@ TutorialContent {
source: "qrc:///images/tutorial/section_seperator_how.svg"
}
Item {
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
width: parent.width * 0.95
height: methodNfcSection.height
color: Constants.white
border.width: Utils.dp(3)
border.color: Constants.tutorial_blue
MouseArea {
anchors.fill: parent
@ -213,10 +216,13 @@ TutorialContent {
source: "qrc:///images/tutorial/section_seperator_how.svg"
}
Item {
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
width: parent.width * 0.95
height: methodSacDesktopSection.height
color: Constants.white
border.width: Utils.dp(3)
border.color: Constants.tutorial_blue
MouseArea {
anchors.fill: parent
@ -327,10 +333,13 @@ TutorialContent {
source: "qrc:///images/tutorial/section_seperator_how.svg"
}
Item {
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
width: parent.width * 0.95
height: methodSacMobileSection.height
color: Constants.white
border.width: Utils.dp(3)
border.color: Constants.tutorial_blue
MouseArea {
anchors.fill: parent
@ -430,10 +439,13 @@ TutorialContent {
source: "qrc:///images/tutorial/section_seperator_how.svg"
}
Item {
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
width: parent.width * 0.95
height: methodBluetoothSection.height
color: Constants.white
border.width: Utils.dp(3)
border.color: Constants.tutorial_blue
MouseArea {
anchors.fill: parent

View File

@ -291,6 +291,7 @@ SectionPage {
id: identifyButton
iconSource: "qrc:///images/npa.svg"
text: qsTr("Identify now") + settingsModel.translationTrigger;
animationsDisabled: true
}
}
}

View File

@ -9,5 +9,6 @@ TutorialFooter {
color: Constants.tutorial_blue
anchors.bottom: parent.bottom
backRotation: 180
backText: qsTr("Back") + settingsModel.translationTrigger
}

View File

@ -198,6 +198,7 @@ SectionPage {
id: identifyButton
iconSource: "qrc:///images/npa.svg"
text: qsTr("Identify now") + settingsModel.translationTrigger;
animationsDisabled: true
}
}
}

View File

@ -234,6 +234,7 @@ SectionPage {
buttonColor: "green"
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Start remote service") + settingsModel.translationTrigger
animationsDisabled: true
}
Image {
@ -258,6 +259,7 @@ SectionPage {
id: pairingButton
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Start pairing") + settingsModel.translationTrigger
animationsDisabled: true
}
Image {
@ -515,6 +517,7 @@ SectionPage {
id: identifyButton
iconSource: "qrc:///images/npa.svg"
text: qsTr("Identify now") + settingsModel.translationTrigger;
animationsDisabled: true
}
}
}

View File

@ -228,6 +228,7 @@ SectionPage {
buttonColor: "green"
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Start remote service") + settingsModel.translationTrigger
animationsDisabled: true
}
Image {
@ -252,6 +253,7 @@ SectionPage {
id: pairingButton
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Start pairing") + settingsModel.translationTrigger
animationsDisabled: true
}
Image {
@ -515,6 +517,7 @@ SectionPage {
id: identifyButton
iconSource: "qrc:///images/npa.svg"
text: qsTr("Identify now") + settingsModel.translationTrigger;
animationsDisabled: true
}
}
}

View File

@ -15,7 +15,10 @@ SectionPage {
property var lastVisibleItem
property int contentWidth: Constants.is_tablet ? root.width * 0.5 : root.width
leftTitleBarAction: TitleBarAction { state: !topLevelPage ? "back" : ""; onClicked: root.state = "" }
leftTitleBarAction: TitleBarAction {
state: topLevelPage ? "" : "back";
onClicked: state == "back" ? leaveView() : root.state = ""
}
headerTitleBarAction: TitleBarAction { id: header; text: qsTr("Tutorial") + settingsModel.translationTrigger; font.bold: true }
onVisibleChanged: {
@ -182,6 +185,7 @@ SectionPage {
width: root.width
height: (flickable.height / 13.0 ) * 3.0
headerImageSource: "qrc:///images/tutorial/main_menu_what_caret.svg"
categoryAbove: false
titleText: qsTr("What?") + settingsModel.translationTrigger
initY: 0
z: 40
@ -193,6 +197,18 @@ SectionPage {
root.state = ""
}
}
miniIconSource: "qrc:///images/tutorial/icon_circle.svg"
miniIconCoordinates: [
{"x": 0.0625, "y": 0.5},
{"x": 0.1875, "y": 0.15625},
{"x": 0.2, "y": 0.59375},
{"x": 0.390625, "y": 0.78125},
{"x": 0.65625, "y": 0.15625},
{"x": 0.703125, "y": 0.65625},
{"x": 0.890625, "y": 0.625},
{"x": 0.90625, "y": 0.3125},
]
}
TutorialWhat {
@ -217,6 +233,18 @@ SectionPage {
root.state = ""
}
}
miniIconSource: "qrc:///images/tutorial/icon_star.svg"
miniIconCoordinates: [
{"x": 0.046875, "y": 0.34375},
{"x": 0.1875, "y": 0.09375},
{"x": 0.21875, "y": 0.65625},
{"x": 0.4, "y": 0.62},
{"x": 0.55, "y": 0.36},
{"x": 0.65, "y": 0.28125},
{"x": 0.75, "y": 0.5625},
{"x": 0.890625, "y": 0.5}
]
}
TutorialWhere {
@ -241,6 +269,18 @@ SectionPage {
root.state = ""
}
}
miniIconSource: "qrc:///images/tutorial/icon_box.svg"
miniIconCoordinates: [
{"x": 0.03125, "y": 0.125},
{"x": 0.078125, "y": 0.46875},
{"x": 0.203125, "y": 0.4375},
{"x": 0.32, "y": 0.68},
{"x": 0.64, "y": 0.21875},
{"x": 0.78125, "y": 0.5625},
{"x": 0.875, "y": 0.0625},
{"x": 0.9, "y": 0.6}
]
}
TutorialHow {
@ -271,6 +311,18 @@ SectionPage {
root.state = ""
}
}
miniIconSource: "qrc:///images/tutorial/icon_diamond.svg"
miniIconCoordinates: [
{"x": 0.046875, "y": 0.46875},
{"x": 0.14, "y": 0.22},
{"x": 0.25, "y": 0.71875},
{"x": 0.62, "y": 0.7},
{"x": 0.67, "y": 0.24},
{"x": 0.78125, "y": 0.4375},
{"x": 0.796875, "y": 0.65625},
{"x": 0.9375, "y": 0.1875}
]
}
TutorialImportant {
@ -291,6 +343,7 @@ SectionPage {
: whereContent.visible && flickable.contentY > whereHeader.y - 1? Constants.tutorial_green
: Constants.tutorial_orange
anchors.bottom: parent.bottom
backToMenuActive: root.state !== ""
onMenuClicked: root.state = ""
onQuitTutorialClicked: leaveView()

View File

@ -216,6 +216,53 @@
<translation>Bitte legen Sie Ihren Ausweis ein.</translation>
</message>
</context>
<context>
<name>BuildHelper</name>
<message>
<source>Application</source>
<translation>Anwendung</translation>
</message>
<message>
<source>Application Version</source>
<translation>Anwendungsversion</translation>
</message>
<message>
<source>Organization</source>
<translation>Organisation</translation>
</message>
<message>
<source>Organization Domain</source>
<translation>Organisation Homepage</translation>
</message>
<message>
<source>System</source>
<translation>System</translation>
</message>
<message>
<source>Kernel</source>
<translation>Kernel</translation>
</message>
<message>
<source>Architecture</source>
<translation>Architektur</translation>
</message>
<message>
<source>Device</source>
<translation>Gerät</translation>
</message>
<message>
<source>VersionCode</source>
<translation>Versions-Code</translation>
</message>
<message>
<source>Qt Version</source>
<translation>Qt-Version</translation>
</message>
<message>
<source>OpenSSL Version</source>
<translation>OpenSSL-Version</translation>
</message>
</context>
<context>
<name>BusyOverlay</name>
<message>
@ -573,7 +620,7 @@
<translation>Haben Sie Fragen zur Nutzung der AusweisApp2?</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/questions-and-answers/frequently-asked-questions/</source>
<source>https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/</translation>
</message>
<message>
@ -585,7 +632,7 @@
<translation>Benötigen Sie weitere Hilfe?</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/questions-and-answers/support/</source>
<source>https://www.ausweisapp.bund.de/en/qa/support/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/support/</translation>
</message>
<message>
@ -938,10 +985,6 @@
<source>Change PIN</source>
<translation>PIN ändern</translation>
</message>
<message>
<source>You leave the process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.</source>
<translation>Sie verlassen den Vorgang und werden zur PIN-Verwaltung weitergeleitet. Starten Sie den gewünschten Vorgang bitte nach der PIN-Änderung erneut.</translation>
</message>
<message>
<source>Retry</source>
<translation>Erneut versuchen</translation>
@ -950,6 +993,10 @@
<source>Cancel authentication process</source>
<translation>Beende Ausweisvorgang</translation>
</message>
<message>
<source>You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.</source>
<translation>Sie müssen Ihre fünfstellige Transport-PIN zunächst in eine persönliche PIN ändern. Sie sind dabei den aktuell laufenden Vorgang zu verlassen und zur PIN-Verwaltung weitergeleitet zu werden. Starten Sie den gewünschten Vorgang bitte nach der PIN-Änderung erneut.</translation>
</message>
</context>
<context>
<name>Information</name>
@ -1125,7 +1172,7 @@
<translation>FAQ</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/questions-and-answers/frequently-asked-questions/</source>
<source>https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/</translation>
</message>
<message>
@ -1133,7 +1180,7 @@
<translation>Support</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/questions-and-answers/support/</source>
<source>https://www.ausweisapp.bund.de/en/qa/support/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/support/</translation>
</message>
<message>
@ -1141,7 +1188,7 @@
<translation>Bewerten</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/questions-and-answers/evaluate-us/</source>
<source>https://www.ausweisapp.bund.de/en/qa/evaluate-us/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/bewerten-sie-uns/</translation>
</message>
<message>
@ -1282,16 +1329,10 @@ Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenlesegerät entfernen.
&lt;h4&gt;No card reader detected. Please make sure that a card reader is connected.&lt;/h4&gt;
&lt;p&gt;If you need help or have problems with your card reader click on the &quot;Diagnosis&quot; button for further information.
&lt;/p&gt;
&lt;p&gt;Please note: It is currently not possible to change your PIN whilst using your smartphone as a card reader.
However, you can change your PIN on your smartphone directly as long as the remote service is disabled.
&lt;/p&gt;
&lt;/html&gt;</source>
<translation>&lt;html&gt;
&lt;h4&gt;Es wurde kein Kartenlesegerät gefunden. Bitte stellen Sie sicher, dass ein Kartenlesegerät angeschlossen ist.&lt;/h4&gt;
&lt;p&gt;Wenn Sie Hilfe bei der Einrichtung Ihres Kartenlesegerät benötigen, klicken Sie auf &quot;Diagnose&quot;.&lt;/p&gt;
&lt;p&gt;Beachten Sie: Es ist zurzeit noch nicht möglich, Ihre PIN mithilfe der &quot;Smartphone als Kartenlesegerät&quot;-Funktionalität zu ändern.
Sie können jedoch Ihre PIN direkt am Smartphone ändern solange der Fernzugriff deaktiviert ist.
&lt;/p&gt;
&lt;/html&gt;</translation>
</message>
<message>
@ -3291,16 +3332,16 @@ klicken.</translation>
<context>
<name>governikus::AppQtMainWidget</name>
<message>
<source>https://www.ausweisapp.bund.de/en/service/haeufig-gestellte-fragen/</source>
<translation>https://www.ausweisapp.bund.de/service/haeufig-gestellte-fragen/</translation>
<source>https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/feedback/melden-sie-einen-fehler/</source>
<translation>https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/</translation>
<source>https://www.ausweisapp.bund.de/en/qa/report-an-error/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/melden-sie-einen-fehler/</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/feedback/bewerten-sie-uns/</source>
<translation>https://www.ausweisapp.bund.de/feedback/bewerten-sie-uns/</translation>
<source>https://www.ausweisapp.bund.de/en/qa/evaluate-us/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/bewerten-sie-uns/</translation>
</message>
</context>
<context>
@ -3873,10 +3914,6 @@ klicken.</translation>
<source>Received no data.</source>
<translation>Keine Daten erhalten.</translation>
</message>
<message>
<source>An error occurred. Please contact our support at &lt;a href=&quot;https://www.ausweisapp.bund.de/en/service/support/&quot;&gt;AusweisApp2 Support&lt;/a&gt;.</source>
<translation>Ein Fehler ist aufgetreten. Bitte kontaktieren Sie unseren Support unter &lt;a href=&quot;https://www.ausweisapp.bund.de/service/support/&quot;&gt;AusweisApp2 Support&lt;/a&gt;.</translation>
</message>
<message>
<source>Cannot start authentication. An operation is already in progress.</source>
<translation>Die Authentisierung kann nicht gestartet werden. Es läuft bereits eine Operation.</translation>
@ -3970,8 +4007,8 @@ klicken.</translation>
<translation>Ein Protokollfehler ist aufgetreten. Bitte überprüfen Sie, dass das Ausweisdokument korrekt aufgelegt ist und versuchen Sie es erneut. Wenn das Problem wieder auftritt kontaktieren Sie bitte unseren Support unter</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/service/support/</source>
<translation>https://www.ausweisapp.bund.de/service/support/</translation>
<source>https://www.ausweisapp.bund.de/en/qa/support/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/support/</translation>
</message>
<message>
<source>AusweisApp2 Support</source>
@ -4074,8 +4111,12 @@ klicken.</translation>
<translation>Fehler bei der Verbindung zum Server. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels im SSL-Zertifikat des Servers wird nicht unterstützt. Zertifikatsaussteller: %1</translation>
</message>
<message>
<source>An error occurred. Please contact our support at &lt;a href=&quot;https://www.ausweisapp.bund.de/en/service/support/&quot;&gt;AusweisApp2 Support&lt;/a&gt; or feel free to send us an email at &lt;a href=&quot;mailto:support@ausweisapp.de?subject=Log file&amp;body=&lt;Please describe the error&gt;&quot;&gt;support@ausweisapp.de&lt;/a&gt;.</source>
<translation>Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie unseren &lt;a href=&quot;https://www.ausweisapp.bund.de/en/service/support/&quot;&gt;AusweisApp2 Support&lt;/a&gt; oder senden sie uns eine Email an &lt;a href=&quot;mailto:support@ausweisapp.de?subject=Protokolldatei&amp;body=&lt;Bitte beschreiben Sie den Fehler&gt;&quot;&gt;support@ausweisapp.de&lt;/a&gt;.</translation>
<source>An error occurred. Please contact our %1support%2.</source>
<translation>Es ist ein Fehler aufgetreten. Bitte kontaktieren und Sie unseren %1Support%2.</translation>
</message>
<message>
<source>An error occurred. Please contact our %1support%2 or feel free to send us an email.</source>
<translation>Es ist ein Fehler aufgetreten. Bitte kontaktieren und Sie unseren %1Support%2 oder senden Sie uns eine Email.</translation>
</message>
</context>
<context>
@ -4194,8 +4235,8 @@ klicken.</translation>
<translation>Dateifehler</translation>
</message>
<message>
<source>An error occurred while saving the file.</source>
<translation>Beim Speichern der Datei ist ein Fehler aufgetreten.</translation>
<source>An error occurred while saving the file:</source>
<translation>Während des Speichervorgangs ist ein Fehler aufgetreten:</translation>
</message>
</context>
<context>
@ -5020,6 +5061,31 @@ klicken.</translation>
<source>Save Log</source>
<translation>Protokoll speichern</translation>
</message>
<message>
<source>Send email</source>
<translation>Email versenden</translation>
</message>
<message>
<source>AusweisApp2 error report - %1</source>
<extracomment>Subject from error report mail</extracomment>
<translation>AusweisApp2 Fehlerbericht - %1</translation>
</message>
<message>
<source>Please describe the error that occurred.</source>
<translation>Bitte beschreiben Sie den aufgetretenen Fehler.</translation>
</message>
<message>
<source>You may want to attach the logfile which can be saved from the error dialog.</source>
<translation>Im Fehlerdialog können Sie eine Logdatei speichern um sie an diese Email anzuhängen.</translation>
</message>
<message>
<source>Error code</source>
<translation>Fehlercode</translation>
</message>
<message>
<source>Critical errors:</source>
<translation>Kritische Fehler:</translation>
</message>
</context>
<context>
<name>governikus::StepShowSelfAuthenticationDataGui</name>
@ -5058,53 +5124,6 @@ klicken.</translation>
<translation>AusweisApp2 %1 ist jetzt verfügbar - Sie haben %2. Wollen Sie die neue Version jetzt herunterladen?</translation>
</message>
</context>
<context>
<name>governikus::VersionInformationModel</name>
<message>
<source>Application Name</source>
<translation>Anwendungsname</translation>
</message>
<message>
<source>Application Version</source>
<translation>Anwendungsversion</translation>
</message>
<message>
<source>Organization</source>
<translation>Organisation</translation>
</message>
<message>
<source>Organization domain</source>
<translation>Organisation Homepage</translation>
</message>
<message>
<source>VersionCode</source>
<translation>Versions-Code</translation>
</message>
<message>
<source>System version</source>
<translation>Systemversion</translation>
</message>
<message>
<source>Kernel</source>
<translation>Kernel</translation>
</message>
<message>
<source>Architecture</source>
<translation>Architektur</translation>
</message>
<message>
<source>Device</source>
<translation>Gerät</translation>
</message>
<message>
<source>Qt Version</source>
<translation>Qt-Version</translation>
</message>
<message>
<source>OpenSSL Version</source>
<translation>OpenSSL-Version</translation>
</message>
</context>
<context>
<name>governikus::WebserviceActivationContext</name>
<message>
@ -5151,10 +5170,6 @@ klicken.</translation>
<source>Would you like to report this error?</source>
<translation>Möchten Sie diesen Fehler melden?</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/feedback/melden-sie-einen-fehler/</source>
<translation>https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/</translation>
</message>
<message>
<source>Report now</source>
<translation>Jetzt melden</translation>
@ -5163,6 +5178,10 @@ klicken.</translation>
<source>The connection to the browser was lost. No forwarding was executed. Please try to call the URL again manually: %1</source>
<translation>Die Verbindung zum Browser ging verloren. Es konnte keine Weiterleitung durchgeführt werden. Bitte versuchen Sie die URL manuell aufzurufen: %1</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/qa/report-an-error/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/melden-sie-einen-fehler/</translation>
</message>
</context>
<context>
<name>governikus::WebserviceActivationHandler</name>
@ -5198,10 +5217,6 @@ klicken.</translation>
<source>Would you like to report this error?</source>
<translation>Möchten Sie diesen Fehler melden?</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/feedback/melden-sie-einen-fehler/</source>
<translation>https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/</translation>
</message>
<message>
<source>Report now</source>
<translation>Jetzt melden</translation>
@ -5214,6 +5229,10 @@ klicken.</translation>
<source>You tried to start an older version (%1) of currently running application. Please open the currently running version (%2)!</source>
<translation>Sie versuchen eine ältere Version (%1) der aktuell laufenden Anwendung zu starten. Bitte öffnen Sie die aktuell laufende Version (%2)!</translation>
</message>
<message>
<source>https://www.ausweisapp.bund.de/en/qa/report-an-error/</source>
<translation>https://www.ausweisapp.bund.de/fragen-und-antworten/melden-sie-einen-fehler/</translation>
</message>
</context>
<context>
<name>governikus::WorkflowAuthenticateQtGui</name>

View File

@ -3,29 +3,32 @@ set -e
. "$(dirname "$0")"/common.sh
for arg in "$@"
for arg in "$CHECK"
do
case "$arg" in
format) ENABLE_FORMAT=true;;
docs) ENABLE_DOCS=true;;
build) ENABLE_BUILD=true;;
*) echo "Unknown command: $1" && exit 1
esac
done
alpine_run prepare <<-EOF
mkdir -p /tmp/build/format
mkdir -p /tmp/build/docs
mkdir ~/format
mkdir ~/docs
mkdir ~/app
EOF
if [ "$ENABLE_FORMAT" = true ]; then
alpine_run format <<-EOF
cd /tmp/build/format
set -e
cd ~/format
cmake -Dtools.only=ON ~
cmake -Dtools.only=ON ~/src
make format
cd ~
cd ~/src
git add .
git --no-pager diff --staged
git diff-index --quiet HEAD
@ -35,10 +38,25 @@ fi
if [ "$ENABLE_DOCS" = true ]; then
alpine_run docs <<-EOF
cd /tmp/build/docs
set -e
cd ~/docs
cmake -Dtools.only=ON ~
cmake -Dtools.only=ON ~/src
make sdk
make notes
EOF
fi
if [ "$ENABLE_BUILD" = true ]; then
alpine_run build <<-EOF
set -e
cd ~/app
cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=$TYPE ~/src
cmake --build .
ctest --output-on-failure
src/AusweisApp2 -platform offscreen --help
EOF
fi

View File

@ -1,5 +1,8 @@
readonly ALPINE_ROOT='/mnt/alpine'
readonly ALPINE_USER='governikus'
readonly ALPINE_HOME="${ALPINE_ROOT}/home/${ALPINE_USER}"
readonly ALPINE_SRC="${ALPINE_HOME}/src"
readonly ALPINE_CCACHE="${ALPINE_HOME}/.ccache"
alpine_run() {
local folding="${1:-chroot}"

View File

@ -5,8 +5,8 @@ set -eu
readonly CLONE_DIR="${CLONE_DIR:-$(pwd)}"
MINIROOTFS_VERSION="3.8.0"
MINIROOTFS_SHA="ae36d6ea2033131cfc649afa13d7271367c386e7a0dbd5b3d0671a2ede22a2f1"
MINIROOTFS_VERSION="3.9.0"
MINIROOTFS_SHA="f82efed1a80c9af86c38bed10f3541c5588453b97684d767a5a3b0f3fa0e3f09"
MINIROOTFS="alpine-minirootfs-${MINIROOTFS_VERSION}-x86_64.tar.gz"
MINIROOTFS_URI="http://dl-cdn.alpinelinux.org/alpine/v${MINIROOTFS_VERSION%.*}/releases/x86_64/$MINIROOTFS"
@ -30,11 +30,12 @@ ln -sf /run/shm dev/shm
PACKAGES="cmake make ninja git"
for arg in "$@"
for arg in "$CHECK"
do
case "$arg" in
format) PACKAGES="$PACKAGES uncrustify";;
docs) PACKAGES="$PACKAGES py2-sphinx py2-setuptools";;
build) PACKAGES="$PACKAGES clang g++ ccache binutils-gold eudev-dev pcsc-lite-dev http-parser-dev openssl-dev qt5-qtsvg-dev qt5-qtquickcontrols2-dev qt5-qtwebsockets-dev qt5-qtconnectivity-dev qt5-qtbase-dev qt5-qttools-dev";;
*) echo "Unknown command: $1" && exit 1
esac
done
@ -46,7 +47,11 @@ alpine_run packages root <<-EOF
apk add $PACKAGES
EOF
mount --bind "$CLONE_DIR" "${ALPINE_ROOT}/home/${ALPINE_USER}"
mkdir ${ALPINE_SRC}
mkdir ${ALPINE_CCACHE}
mount --bind "$CLONE_DIR" "${ALPINE_SRC}"
mount --bind "$HOME/.ccache" "${ALPINE_CCACHE}"
chmod 777 "$ALPINE_CCACHE"
alpine_run chown root <<-EOF
chown -R $ALPINE_USER: /home/${ALPINE_USER}

View File

@ -1,5 +1,4 @@
{
"issueDate": "2018-07-05T12:00:00+1:00",
"callcosts" : [
{
"prefixes" : ["1371", "1375"],
@ -127,7 +126,7 @@
"subjectUrls": ["https://www.bstu-formulare.de/lip"]
},
{
"exclude": ["ios", "android"],
"exclude": ["ios"],
"shortName": {"" : "Allianz Maklerportal"},
"address": "https://makler.allianz.de",
"homepage": "https://makler.allianz.de",
@ -155,6 +154,18 @@
"tcTokenUrlInfo" : "",
"subjectUrls": []
},
{
"shortName": {"" : "AusweisIDent"},
"longName": {"" : "AusweisIDent Identifizierungsdienst"},
"shortDescription": {"": "AusweisIDent ist eine neue Lösung für Unternehmen zur schnellen und günstigen Online-Identifikation neuer Kunden mit der Online-Ausweisfunktion des Personalausweises oder des elektronischen Aufenthaltstitels."},
"longDescription": {"": "AusweisIDent ergänzt am Markt etablierte Verfahren um die medienbruchfreie und sichere Online-Identifizierung. Nutzer weisen sich mit der Applikation und der Online-Ausweisfunktion des Personalausweises oder des elektronischen Aufenthaltstitels online aus. Das Identifizierungsverfahren wurde von der Bundesdruckerei gemeinsam mit Governikus entwickelt. AusweisIDent eignet sich für die Identifizierung von Personen für eine Web-Anwendung. Über eine Zwei-Faktor-Authentisierung durch den Kunden werden höchste Sicherheitsanforderungen bei der Kundenregistrierung erfüllt. Die Identitätsprüfungen erfolgen gesetzeskonform nach demGesetz zur Förderung der elektronischen Verwaltung (eGovG), dem Gesetz über das Aufspüren von Gewinnen aus schweren Straftaten (GWG), dem Telekommunikationsgesetz (TKG) sowie nach Bundesdatenschutzgesetz (BDSG) und der EUDatenschutzgrundverordnung (EU-DSGVO)."},
"address": "https://www.ausweisident.de/",
"homepage": "https://www.ausweisident.de/",
"image": "ausweisident_image.jpg",
"icon": "ausweisident_icon.png",
"category": "other",
"subjectUrls": ["https://www.ausweisident.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Berlin"},
@ -275,7 +286,7 @@
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Sachsen"},
"address": "https://fs.egov.sachsen.de/formserv/findform?shortname=bafoeg&formtecid=11&areashortname=SMWK_bafoeg",
"homepage": "http://www.studieren.sachsen.de/",
"homepage": "https://www.studieren.sachsen.de/",
"phone": "+49 351 564-1080",
"email": "info@sk.sachsen.de",
"postalAddress": "Sächsische Staatskanzlei<br/>Redaktion Amt24 / Bürgerbüro<br/>01095 Dresden",
@ -293,17 +304,6 @@
"postalAddress": "Ministerium für Soziales, Gesundheit, Wissenschaft und Gleichstellung des Landes Schleswig-Holstein<br/>Abteilung VIII 5<br/>Düsternbrooker Weg 104<br/>24105 Kiel",
"category": "citizen"
},
{
"exclude": ["ios", "android"],
"shortName": {"" : "bahn.de"},
"address": "https://www.bahn.de/p/view/meinebahn/login.shtml",
"homepage": "https://www.bahn.de",
"phone": "+49 1806 - 996633",
"email": "reiseportal@bahn.de",
"postalAddress": "DB Vertrieb GmbH<br/>Stephensonstraße 1<br/>60326 Frankfurt am Main",
"category": "other",
"subjectUrls": ["https://www.bahn.de/"]
},
{
"shortName": {"" : "Beantragung Schwerbehindertenausweis Bayern"},
"longDescription": {"": "Einen Schwerbehindertenantrag können Sie bei der Landesbehörde Zentrum Bayern Familie und Soziales (ZBFS) mit der Online-Ausweisfunktion komplett papierlos stellen.<br/>Der papierlose Antrag ist ein bedeutender Schritt auf dem Weg zur digitalen Verwaltung online, schnell und unkompliziert.<br/>Das Online-Verfahren hat weitere Vorteile. Gerade für sehbehinderte Menschen ist die papiergebundene Schriftform ein Hindernis. Digitale Angebote bieten ihnen die Chance, Behördenangelegenheiten ein Stück weit selbständiger erledigen zu können.<br/>Zu 100 Prozent digital ein bisschen weniger lästiger Papierkram. Digitalisierung ist somit ein Beitrag zur Inklusion."},
@ -428,7 +428,7 @@
"shortDescription": {"": "Anträge an den Kreis Minden-Lübbecke online erfassen."},
"longDescription": {"": "In unserem Portal können Sie Ihren Antrag an den Kreis Minden-Lübbecke direkt online erfassen und elektronisch übermitteln."},
"address": "https://www.buergerserviceportal.nrw/krz/mindenluebbecke",
"homepage": "http://www.minden-luebbecke.de/",
"homepage": "https://www.minden-luebbecke.de/",
"phone": "+49 571 807-0",
"email": "info@minden-luebbecke.de",
"postalAddress": "Kreis Minden-Lübbecke<br/>Portastraße 13<br/>32423 Minden",
@ -445,7 +445,7 @@
"shortDescription": {"": "Anträge online erfassen und an die Verwaltung weiterleiten."},
"longDescription": {"": "Das Bürgerservice-Portal bietet die Möglichkeit, Anträge an die Verwaltung der Stadt Lage online zu erfassen und elektronisch zur weiteren Bearbeitung weiterzuleiten."},
"address": "https://www.buergerserviceportal.nrw/krz/lage",
"homepage": "http://www.lage.de/",
"homepage": "https://www.lage.de/",
"phone": "+49 5232/601300",
"email": "Buergerbuero@lage.de",
"postalAddress": "Bürgerbüro Lage<br/>Bergstraße 21<br/>32791 Lage",
@ -495,10 +495,10 @@
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"exclude": ["ios", "android"],
"exclude": ["ios"],
"shortName": {"" : "CosmosDirekt Kundenportal meinCosmosDirekt"},
"longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Kundenportal ,mein Cosmos-Direkt' registrieren und anmelden. Im Portal haben Sie die Möglichkeit Ihre Versicherungen zu verwalten. Sie können online einen Antrag für ein Tagesgeldkonto stellen oder auch schnell und einfach Ihre persönlichen Daten, z.B. Ihre Adresse, ändern."},
"address": "https://www.cosmosdirekt.de/services/mcd-info",
"address": "https://www.cosmosdirekt.de/meincosmosdirekt-registrierung/",
"homepage": "https://www.cosmosdirekt.de/",
"phone": "+49 681-9 66 68 00",
"email": "info@cosmosdirekt.de",
@ -535,20 +535,6 @@
"tcTokenUrlInfo" : "Address is faulty",
"subjectUrls": ["https://secure6.datev.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
"longName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
"shortDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis identifizieren."},
"longDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis z.B. zur Eröffnung eines Tagesgeldkontos identifizieren: Sie werden hierzu von Ihrer Bank automatisch auf das POSTIDENT Portal geleitet und können sich mithilfe Ihres neuen Personalausweises mit freigeschalteter Online-Ausweisfunktion, einem Kartenlesegerät sowie der AusweisApp2 in wenigen Minuten sicher identifizieren."},
"address": "https://www.deutschepost.de/de/p/postident/identifizierungsverfahren/postident-npa.html",
"homepage": "https://www.deutschepost.de/de/p/postident.html",
"email": "info@deutschepost.de",
"postalAddress": "Deutsche Post AG<br/>Charles-de-Gaulle-Str. 20<br/>53113 Bonn",
"image": "DeutschePost_image.jpg",
"icon": "DeutschePost_icon.png",
"category": "other"
},
{
"shortName": {"" : "Deutsche Rentenversicherung"},
"longDescription": {"": "Mit der Online-Ausweisfunktion im neuen Personalausweis können Sie ...<br/>- auf Informationen Ihres Rentenkontos im Kundenbereich ,eService' sicher zugreifen (z. B. Versicherungsverlauf und Beitragsrechnung),<br/>- Ihre Rentenauskunft online abrufen,<br/>- schnell und einfach Ihre persönlichen Daten ändern (z. B. Ihre Adresse und Bankverbindung)."},
@ -562,7 +548,7 @@
"subjectUrls": ["https://www.eservice-drv.de"]
},
{
"exclude": ["ios", "android"],
"exclude": ["ios"],
"shortName": {"" : "eAntrag der Investitionsbank Berlin (IBB)"},
"longDescription": {"": "Im Kundenportal der Investitionsbank Berlin können Sie verschiedene Förder-Produkte durchgängig elektronisch beantragen:<br/>- Berlin Kapital<br/>- IBB Familienbaudarlehen<br/>- IBB Wohnraum modernisieren<br/>- KMU-Fonds über 25.000 Euro<br/>- Liquiditätshilfen BERLIN<br/>- Mikrokredit aus dem KMU-Fonds<br/>- Pro FIT (Projektvorschlagsphase)<br/>- Pro FIT (Frühphasenfinanzierung)<br/>Für die rechtsverbindliche, fristwahrende Antragstellung der Produkte<br/>- GRW<br/>- Innovationsassistent<br/>- PFI - Gemeinschaft<br/>- PFI - KMU<br/>- PFI - Netzwerk<br/>- ProFIT (Projektantragsphase)<br/>gilt aus verwaltungsrechtlichen Anforderungen das Schriftformerfordernis: Die elektronische Antragstellung ist zwingend nachträglich schriftlich zu bestätigen.<br/>Mit der Online-Ausweisfunktion können Sie sich bequem und sicher elektronisch legitimieren und müssen dadurch Ihre Identität weder per Postident-Verfahren noch persönlich vor Ort nachweisen.<br/>Nach Ihrer Legitimierung können Sie über eine persönliche Dokumentenablage die rechtsverbindliche Kommunikation mit Ihrem IBB-Ansprechpartner online und unabhängig von Öffnungszeiten oder Postwegen über das Kundenportal erledigen."},
"address": "https://www.ibb.de/de/service/eantrag/eantrag.html",
@ -616,9 +602,9 @@
"subjectUrls": []
},
{
"exclude": ["ios", "android"],
"exclude": ["ios"],
"shortName": {"" : "Führungszeugnis und Auskunft aus dem Gewerbezentralregister"},
"longDescription": {"": "Sie benötigen ein Führungszeugnis oder eine Auskunft aus dem Gewerbezentralregister? Mit dem Personalausweis im Scheckkartenformat können Sie einen Behördengang sparen. Weitere Voraussetzungen sind die freigeschaltete Online-Ausweisfunktion und ein passendes Kartenlesegerät für Ihren Computer. Auf diese Weise kann eindeutig identifiziert werden, wer den Antrag stellt. Ausländische Mitbürger, die keinen deutschen Personalausweis besitzen, können in gleicher Weise die entsprechende Funktion ihres elektronischen Aufenthaltstitels nutzen.<br/>Neben Führungszeugnissen können auch Auskünfte aus dem Gewerbezentralregister über das neue Online-Portal des BfJ beantragt werden. Solche Auskünfte benötigen Unternehmen, die sich in Ausschreibungsverfahren um öffentliche Aufträge bewerben, recht häufig. Auch hier kann das Online-Verfahren den Aufwand erheblich senken."},
"longDescription": {"": "Sie benötigen ein Führungszeugnis oder eine Auskunft aus dem Gewerbezentralregister? Mit dem Personalausweis im Scheckkartenformat können Sie einen Behördengang sparen. Weitere Voraussetzungen sind die freigeschaltete Online-Ausweisfunktion und ein passender Kartenleser für Ihren Computer. Auf diese Weise kann eindeutig identifiziert werden, wer den Antrag stellt. Ausländische Mitbürger, die keinen deutschen Personalausweis besitzen, können in gleicher Weise die entsprechende Funktion ihres elektronischen Aufenthaltstitels nutzen.<br/>Neben Führungszeugnissen können auch Auskünfte aus dem Gewerbezentralregister über das neue Online-Portal des BfJ beantragt werden. Solche Auskünfte benötigen Unternehmen, die sich in Ausschreibungsverfahren um öffentliche Aufträge bewerben, recht häufig. Auch hier kann das Online-Verfahren den Aufwand erheblich senken."},
"address": "https://www.fuehrungszeugnis.bund.de/",
"homepage": "https://www.bundesjustizamt.de",
"phone": "+49 228 99 410-40",
@ -716,7 +702,7 @@
{
"exclude": ["ios"],
"shortName": {"" : "Login Meine VBL"},
"longDescription": {"": "Bei der VBL können Sie sich mit dem Personalausweis am Kundenportal ,Meine VBL' registrieren und anmelden. Dadurch entfällt der Postversand eines Freischaltcodes - Sie sparen Zeit. Im Kundenkonto können Sie Ihre Vertragsdaten und Ihre persönlichen Daten einsehen und weitere Online-Dienste nutzen, z. B.<br/>- Rentenantrag stellen,<br/>- Beitragserstattung beantragen,<br/>- Kontaktdaten ändern,<br/>- persönliche Mitteilungen von der VBL erhalten."},
"longDescription": {"": "Bei der VBL können Sie sich mit dem Personalausweis am Kundenportal ,Meine VBL' anmelden. Im Kundenkonto können Sie Ihre Vertragsdaten und Ihre persönlichen Daten einsehen und weitere Online-Dienste nutzen, z. B.<br/>- Rentenantrag stellen,<br/>- Beitragserstattung beantragen,<br/>- Kontaktdaten ändern,<br/>- persönliche Mitteilungen von der VBL erhalten."},
"address": "https://www.vbl.de/de/meine_vbl",
"homepage": "https://www.vbl.de/",
"phone": "+49 721 93 98 93 1",
@ -767,10 +753,10 @@
},
{
"shortName": {"" : "Selbstauskunft - „Meine Daten einsehen“"},
"longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden. Hierbei sprechen wir auch von einer sogenannten Selbstauskunft.<br/><br/>Sobald Sie die AusweisApp2 gestartet und ein geeignetes Kartenlesegerät installiert bzw. ein Android-Smartphone verbunden haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. (Auf Mobilgeräten finden Sie die Ausweis-Auskunft übrigens auch direkt auf der Startseite sowie im Menüeintrag „Ausweisen“.)<br/><br/>Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die Daten in der AusweisApp2 dargestellt.<br/><br/>Bei der Selbstauskunft handelt es sich um einen reinen Demonstrationsdienst. Die ausgelesenen Daten werden lediglich zur Anzeige gebracht und nicht weitergegeben.<br/><br/>Bitte beachten Sie, dass Sie auch für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Der Zugriff auf die Daten des Personalausweises bzw. des elektronischen Aufenthaltstitels ist nur möglich, wenn derjenige, der auf die Daten zugreifen möchte sich selbst zunächst eindeutig identifiziert. Dies geschieht über das sog. Berechtigungszertifikat. Es wird Ihnen immer angezeigt, wer auf Ihre Daten zugreifen möchte. Die Erlaubnis, ein Berechtigungszertifikat zu erhalten, wird einen Diensteanbieter auf Antrag und nach Prüfung bei der Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt erteilt. Um das technische Berechtigungszertifikat anzuzeigen und darüber hinaus eine Gültigkeitsprüfung des Ausweisdokuments durchführen zu können, ist eine Internetverbindung zwingend erforderlich. Aus diesem Grund spricht man auch von der Online-Ausweisfunktion."},
"longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden. Hierbei sprechen wir auch von einer sogenannten Selbstauskunft.<br/><br/>Sobald Sie die AusweisApp2 gestartet und ein geeigneter Kartenleser installiert bzw. ein Android-Smartphone verbunden haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. (Auf Mobilgeräten finden Sie die Ausweis-Auskunft übrigens auch direkt auf der Startseite sowie im Menüeintrag „Ausweisen“.)<br/><br/>Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die Daten in der AusweisApp2 dargestellt.<br/><br/>Bei der Selbstauskunft handelt es sich um einen reinen Demonstrationsdienst. Die ausgelesenen Daten werden lediglich zur Anzeige gebracht und nicht weitergegeben.<br/><br/>Bitte beachten Sie, dass Sie auch für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Der Zugriff auf die Daten des Personalausweises bzw. des elektronischen Aufenthaltstitels ist nur möglich, wenn derjenige, der auf die Daten zugreifen möchte sich selbst zunächst eindeutig identifiziert. Dies geschieht über das sog. Berechtigungszertifikat. Es wird Ihnen immer angezeigt, wer auf Ihre Daten zugreifen möchte. Die Erlaubnis, ein Berechtigungszertifikat zu erhalten, wird einen Diensteanbieter auf Antrag und nach Prüfung bei der Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt erteilt. Um das technische Berechtigungszertifikat anzuzeigen und darüber hinaus eine Gültigkeitsprüfung des Ausweisdokuments durchführen zu können, ist eine Internetverbindung zwingend erforderlich. Aus diesem Grund spricht man auch von der Online-Ausweisfunktion."},
"address": "https://www.ausweisapp.bund.de/ausweisapp2/ausprobieren-meine-daten-einsehen/",
"homepage": "https://www.ausweisapp.bund.de/",
"phone": "+49 1805 - 348743",
"phone": "+49 421 - 204 95 995",
"email": "support@ausweisapp.de",
"postalAddress": "Governikus GmbH & Co. KG<br/>- im Auftrag des Bundesministeriums des Innern, für Bau und Heimat -<br/>Hochschulring 4<br/>D-28359 Bremen",
"image": "Selbstauskunft.jpg",

View File

@ -4,7 +4,7 @@
{
"VendorId": "0x0000",
"ProductId": "0x0000",
"Name": "Smartphone als Kartenlesegerät",
"Name": "Smartphone als Kartenleser",
"Pattern": "^NFC.*",
"Icon": "img_RemoteReader.png",
"IconWithNPA": "img_RemoteReader_mit_ausweis.png",
@ -181,7 +181,7 @@
"VendorId": "0x04E6",
"ProductId": "0x512B",
"Name": "SDI011 Contactless Reader",
"Pattern": "SDI011 (USB )?(Smart Card|Contactless) Reader",
"Pattern": "SDI011 Contactless Reader|SDI011 USB Smart Card Reader(\\(1\\)|\\(2\\))",
"Icon": "img_Identive_SDI011.png",
"IconWithNPA": "img_Identive_SDI011_mit_ausweis.png",
"Drivers":
@ -199,21 +199,16 @@
[
{
"Platforms": [{"os": "win", "max": "6.1"}],
"DE": "Bitte beachten Sie, dass das Kartenlesegerät nur mit der SDI011-generic-version funktioniert. Nach der Installation ist ein Neustart erforderlich.",
"DE": "Bitte beachten Sie, dass der Kartenleser nur mit der SDI011-generic-version funktioniert. Nach der Installation ist ein Neustart erforderlich.",
"EN": "Please note that the card reader only works with the SDI011-generic-version. A reboot is required after the installation of the driver."
},
{
"Platforms":[{"os": "win", "min": "6.2"}],
"DE": "Bitte beachten Sie, dass das Kartenlesegerät nur mit der SDI011-nPA-version funktioniert. Nach der Installation ist ein Neustart erforderlich.",
"DE": "Bitte beachten Sie, dass der Kartenleser nur mit der SDI011-nPA-version funktioniert. Nach der Installation ist ein Neustart erforderlich.",
"EN": "Please note that the card reader only works with the SDI011-nPA-version. A reboot is required after the installation of the driver."
},
{
"Platforms": [{"os": "mac", "max": "10.12"}],
"DE": "Der Status des Kartenlesegeräts wird nach der Treiberinstallation und einem Neustart zwar als 'Treiber installiert' angezeigt, allerdings tritt bei der PIN-Eingabe ein Protokollfehler auf.",
"EN": "Once the driver is installed and the system is re-booted, the card reader state will be shown as 'Driver installed'. However, upon entering the PIN a protocol error occurs."
},
{
"Platforms": [{"os": "mac", "min":"10.13"}],
"Platforms": [{"os": "mac"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Dazu folgen Sie bitte dem jeweiligen Link für Ihr Betriebssystem zur Herstellerseite.",
"EN": "It is necessary to install the drivers from the manufacturer. Please follow the relevant link for your operating system."
}
@ -242,15 +237,16 @@
[
{
"Platforms": [{"os": "win"}],
"DE": "Das Kartenlesegerät funktioniert nur mit der SCL011-nPA-version. Nach der Installation ist ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert nur mit der SCL011-nPA-version. Nach der Installation ist ein Neustart erforderlich.",
"EN": "The cardreader works only with the SCL011-nPA-version. A reboot is required after the installation of the driver."
},
{
"Platforms": [{"os": "mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
],
"Internal information": "Unter macOS funktioniert nur NFC A. Reader wird als unterstützt markiert, da zertifiziert."
},
{
@ -313,7 +309,7 @@
"VendorId": "0x04E6",
"ProductId": "0x5720",
"Name": "Identiv Cloud 4700 F",
"Pattern": "(Identiv CLOUD 4700 F Contact(less)? Reader( 0| 1)|Identiv uTrust 4700 F Dual Interface Reader)",
"Pattern": "(Identive CLOUD 4700 F Contactless Reader( 0| 1)|Identiv uTrust 4700 F Dual Interface Reader\\(2\\))",
"Icon": "img_Identive_Cloud_4700_F.png",
"IconWithNPA": "img_Identive_Cloud_4700_F_mit_ausweis.png",
"Drivers":
@ -335,7 +331,7 @@
[
{
"Platforms": [{"os": "win"}, {"os": "mac"}],
"DE":"Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE":"Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN":"The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -345,7 +341,7 @@
"VendorId": "0x04E6",
"ProductId": "0x5724",
"Name": "Identiv Cloud 4701 F",
"Pattern": "(Identiv CLOUD 4701 F Contact(less)? Reader( 0| 1)|Identiv uTrust 4701 F Dual Interface Reader)",
"Pattern": "(Identiv CLOUD 4701 F Contactless Reader( 0| 1)|Identiv uTrust 4701 F Dual Interface Reader)",
"Icon": "img_Identive_Cloud_4701_F.png",
"IconWithNPA": "img_Identive_Cloud_4701_F_mit_ausweis.png",
"Drivers":
@ -367,7 +363,7 @@
[
{
"Platforms": [{"os": "win"}, {"os": "mac"}],
"DE":"Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE":"Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN":"The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -395,7 +391,7 @@
[
{
"Platforms": [{"os": "win"}],
"DE":"Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE":"Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN":"The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
},
{
@ -410,7 +406,7 @@
"VendorId": "0x072F",
"ProductId": "0x223B",
"Name": "ACS ACR1252U",
"Pattern": "ACS ACR1252 1S CL Reader PICC 0|ACS ACR1252 Dual Reader(\\(1\\)|\\(2\\))",
"Pattern": "ACS ACR1252 1S CL Reader PICC 0|ACS ACR1252 Dual Reader\\(2\\)",
"Icon": "img_ACS_ACR1252U.png",
"IconWithNPA": "img_ACS_ACR1252U_mit_ausweis.png",
"Drivers":
@ -428,7 +424,7 @@
[
{
"Platforms": [{"os": "win"}],
"DE":"Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE":"Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN":"The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
},
{
@ -465,7 +461,12 @@
"Information":
[
{
"Platforms":[{"os": "win"}, {"os": "mac"}],
"Platforms":[{"os": "win"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Beachten Sie bei der Auswahl, dass nur der \"X-CHIP WINDOWS BU & RU driver\" funktioniert.",
"EN": "It is necessary to install the drivers from the manufacturer. Please note that only the driver named \"X-CHIP WINDOWS BU & RU driver\" works with this card reader."
},
{
"Platforms":[{"os": "mac"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Dazu folgen Sie bitte dem jeweiligen Link für Ihr Betriebssystem zur Herstellerseite.",
"EN": "It is necessary to install the drivers from the manufacturer. Please follow the relevant link for your operating system."
}
@ -486,16 +487,26 @@
"URL": "https://www.hidglobal.de/drivers"
},
{
"Platforms": [{"os": "mac"}],
"Platforms": [{"os": "mac", "min": "10.12"}],
"URL": "https://www.hidglobal.de/drivers"
}
],
"Information":
[
{
"Platforms":[{"os": "win"}, {"os": "mac"}],
"DE":"Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN":"The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
"Platforms":[{"os": "win"}],
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
},
{
"Platforms":[{"os": "mac", "max": "10.11"}],
"DE": "Der Kartenleser funktioniert nicht mit dem installierten CCID Treiber des Systems. Es existiert kein Treiber vom Hersteller.",
"EN": "The card reader is not compatible with the installed CCID driver of the operating system. The manufacturer does not provide a driver."
},
{
"Platforms":[{"os": "mac", "min": "10.12"}],
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber.",
"EN": "The card reader is compatible with the installed system driver."
}
]
},
@ -553,7 +564,12 @@
"Information":
[
{
"Platforms":[{"os": "win"}, {"os": "mac"}],
"Platforms":[{"os": "win"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Dazu folgen Sie bitte dem jeweiligen Link für Ihr Betriebssystem zur Herstellerseite. Beachten Sie bei der Auswahl, dass nur der \"X-CHIP WINDOWS BU & RU driver\" funktioniert.",
"EN": "It is necessary to install the drivers from the manufacturer. Please follow the relevant link for your operating system. Please note that only the driver named \"X-CHIP WINDOWS BU & RU driver\" works with this card reader."
},
{
"Platforms":[{"os": "mac"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Dazu folgen Sie bitte dem jeweiligen Link für Ihr Betriebssystem zur Herstellerseite.",
"EN": "It is necessary to install the drivers from the manufacturer. Please follow the relevant link for your operating system."
}
@ -564,7 +580,7 @@
"VendorId": "0x076B",
"ProductId": "0x5422",
"Name": "OMNIKEY 5422",
"Pattern": "HID Global OMNIKEY 5422(CL)? Smartcard Reader 0|HID Global OMNIKEY Smartcard Reader (\\(1\\)|\\(2\\))",
"Pattern": "HID Global OMNIKEY 5422CL Smartcard Reader 0|HID Global OMNIKEY Smartcard Reader (\\(1\\)|\\(2\\))",
"Icon": "img_HID_Omnikey_542x.png",
"IconWithNPA": "img_HID_Omnikey_542x_mit_ausweis.png",
"Drivers":
@ -578,12 +594,12 @@
[
{
"Platforms": [{"os": "win"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
},
{
"Platforms": [{"os": "mac"}, {"max": "10.12"}],
"DE": "Das Kartenlesegerät funktioniert nicht mit dem systemseitig installierten Treiber. Es existiert kein Treiber vom Hersteller",
"DE": "Der Kartenleser funktioniert nicht mit dem systemseitig installierten Treiber. Es existiert kein Treiber vom Hersteller",
"EN": "The card reader not operates with the driver automatically installed by the system. There is no driver from the manufacturer"
}
]
@ -629,18 +645,18 @@
[
{
"Platforms": [{"os": "win"}],
"URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#windows10"
"URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=8f07753f37854fc0cc47261953990e04&sysparm_article=KB0016422"
},
{
"Platforms": [{"os": "mac"}],
"URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#macosxdrivers"
"URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=43a9b1f337c54fc0cc47261953990e8c&sysparm_article=KB0016424"
}
],
"Information":
[
{
"Platforms":[{"os": "win"}, {"os":"mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -657,18 +673,18 @@
[
{
"Platforms": [{"os": "win"}],
"URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#windows10"
"URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=8f07753f37854fc0cc47261953990e04&sysparm_article=KB0016422"
},
{
"Platforms": [{"os": "mac"}],
"URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#macosxdrivers"
"URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=43a9b1f337c54fc0cc47261953990e8c&sysparm_article=KB0016424"
}
],
"Information":
[
{
"Platforms": [{"os": "win"}, {"os": "mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -697,7 +713,7 @@
},
{
"Platforms": [{"os": "mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -726,7 +742,7 @@
},
{
"Platforms": [{"os": "mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.",
"EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required."
}
]
@ -783,7 +799,7 @@
[
{
"Platforms": [{"os": "win"}, {"os": "mac"}],
"DE": "Das Kartenlesegerät funktioniert mit dem systemseitig installierten Treiber. Es ist kein Treiber vom Hersteller vorhanden.",
"DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Es ist kein Treiber vom Hersteller vorhanden.",
"EN": "The card reader operates with the driver automatically installed by the system. There is no driver from the manufacturer."
}
]

View File

@ -1,5 +1,5 @@
/*
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#include "CommandLineParser.h"
@ -29,6 +29,7 @@ CommandLineParser::CommandLineParser()
: mParser()
, mOptionKeepLog(QStringLiteral("keep"), QStringLiteral("Keep log file."))
, mOptionNoLogFile(QStringLiteral("no-logfile"), QStringLiteral("Disable log file."))
, mOptionNoLogHandler(QStringLiteral("no-loghandler"), QStringLiteral("Disable default log handler."))
, mOptionShowWindow(QStringLiteral("show"), QStringLiteral("Show window on startup."))
, mOptionProxy(QStringLiteral("no-proxy"), QStringLiteral("Disable system proxy."))
, mOptionUi(QStringLiteral("ui"), QStringLiteral("Use given UI plugin."), UILoader::getInstance().getDefault().join(QLatin1Char(',')))
@ -51,6 +52,7 @@ void CommandLineParser::addOptions()
mParser.addOption(mOptionKeepLog);
mParser.addOption(mOptionNoLogFile);
mParser.addOption(mOptionNoLogHandler);
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(Q_OS_WINRT)
mParser.addOption(mOptionShowWindow);
@ -83,6 +85,11 @@ void CommandLineParser::parse(QCoreApplication* pApp)
logHandler->setLogfile(false);
}
if (mParser.isSet(mOptionNoLogHandler))
{
logHandler->setUseHandler(false);
}
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(Q_OS_WINRT)
if (mParser.isSet(mOptionShowWindow))
{

View File

@ -1,7 +1,7 @@
/*
* \brief Provides and parses command line options.
*
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@ -18,6 +18,7 @@ class CommandLineParser
QCommandLineParser mParser;
const QCommandLineOption mOptionKeepLog;
const QCommandLineOption mOptionNoLogFile;
const QCommandLineOption mOptionNoLogHandler;
const QCommandLineOption mOptionShowWindow;
const QCommandLineOption mOptionProxy;
const QCommandLineOption mOptionUi;

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2016-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany
*/
#include "ActivationContext.h"

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2016-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany
*/
#pragma once

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#include "ActivationHandler.h"
@ -66,6 +66,11 @@ const QVector<ActivationHandler*>& ActivationHandler::getInstances()
}
void ActivationHandler::onApplicationActivated()
{
}
bool ActivationHandler::isPlugIn(const QJsonObject& pJson)
{
return pJson.value(QStringLiteral("IID")).toString() == QLatin1String("governikus.ActivationHandler");

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@ -69,6 +69,9 @@ class ActivationHandler
virtual bool start() = 0;
virtual void stop() = 0;
public Q_SLOTS:
virtual void onApplicationActivated();
Q_SIGNALS:
void fireShowUserInformation(const QString& pErrorMessage = QString());
void fireShowUiRequest(UiModule pModule);

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#include "CustomSchemeActivationContext.h"

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#pragma once

View File

@ -1,5 +1,5 @@
/*!
* \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
*/
#include "CustomSchemeActivationHandler.h"

Some files were not shown because too many files have changed in this diff Show More